diff --git a/index.html b/index.html index 5ff2cdaa0..bc6ecd322 100644 --- a/index.html +++ b/index.html @@ -260,7 +260,7 @@

Derived Types

Documentation generated by FORD - on 2024-06-22T18:18:26.744704

+ on 2024-06-22T18:21:15.937502


diff --git a/interface/compute_d2tgc.html b/interface/compute_d2tgc.html index 73fb8b7ff..cba2d60f4 100644 --- a/interface/compute_d2tgc.html +++ b/interface/compute_d2tgc.html @@ -1059,7 +1059,7 @@

Arguments

Documentation generated by FORD - on 2024-06-22T18:18:26.744704

+ on 2024-06-22T18:21:15.937502


diff --git a/interface/compute_d2tgc~2.html b/interface/compute_d2tgc~2.html index 5880953fa..6cf675123 100644 --- a/interface/compute_d2tgc~2.html +++ b/interface/compute_d2tgc~2.html @@ -82,15 +82,15 @@

compute_d2Tgc
  • - Source File + Source File
  • @@ -128,10 +128,10 @@

    Subroutines

    @@ -163,97 +163,97 @@

    Called by

    - - + + interface~~compute_d2tgc~2~~CalledByGraph - + interface~compute_d2tgc~2 - -compute_d2Tgc + +compute_d2Tgc proc~derivative2_scalar~2 - - -nurbs_curve%derivative2_scalar + + +nurbs_surface%derivative2_scalar proc~derivative2_scalar~2->interface~compute_d2tgc~2 - - + + proc~derivative2_vector~2 - - -nurbs_curve%derivative2_vector + + +nurbs_surface%derivative2_vector proc~derivative2_vector~2->interface~compute_d2tgc~2 - - + + none~derivative2~2 - - -nurbs_curve%derivative2 + + +nurbs_surface%derivative2 none~derivative2~2->proc~derivative2_scalar~2 - - + + none~derivative2~2->proc~derivative2_vector~2 - - + + proc~nearest_point2~2 - - -nurbs_curve%nearest_point2 + + +nurbs_surface%nearest_point2 proc~nearest_point2~2->none~derivative2~2 - - + + - + -program~nearest_point_1d - +program~nearest_point_2d + -nearest_point_1d +nearest_point_2d - + -program~nearest_point_1d->proc~nearest_point2~2 - - +program~nearest_point_2d->proc~nearest_point2~2 + + @@ -346,7 +346,7 @@

    Subroutines

    -

    private pure subroutine compute_d2Tgc_bspline_1d_scalar(f_Xt, f_knot, f_degree, f_nc, f_d2Tgc, f_dTgc, f_Tgc) +

    private pure subroutine compute_d2Tgc_bspline_2d_scalar(f_Xt, f_knot1, f_knot2, f_degree, nc, f_d2Tgc, f_dTgc, f_Tgc)

    @@ -364,22 +364,22 @@

    Arguments

    - + real(kind=rk), -intent(in) +intent(in), - + contiguous :: - f_Xt + f_Xt(:) - + real(kind=rk), intent(in), @@ -387,14 +387,29 @@

    Arguments

    contiguous :: - f_knot(:) + f_knot1(:) - + + real(kind=rk), + +intent(in), + + contiguous + + :: + f_knot2(:) + + + + + + + integer, intent(in) @@ -402,14 +417,14 @@

    Arguments

    :: - f_degree + f_degree(2) - + integer, intent(in) @@ -417,7 +432,7 @@

    Arguments

    :: - f_nc + nc(2) @@ -432,14 +447,14 @@

    Arguments

    allocatable :: - f_d2Tgc(:) + f_d2Tgc(:,:) - + real(kind=rk), intent(out), @@ -447,14 +462,14 @@

    Arguments

    allocatable :: - f_dTgc(:) + f_dTgc(:,:) - + real(kind=rk), intent(out), @@ -475,7 +490,7 @@

    Arguments

    -

    private pure subroutine compute_d2Tgc_bspline_1d_vector(f_Xt, f_knot, f_degree, f_nc, f_ng, f_d2Tgc, f_dTgc, f_Tgc) +

    private pure subroutine compute_d2Tgc_bspline_2d_vector(f_Xt, f_knot1, f_knot2, f_degree, nc, f_ng, f_d2Tgc, f_dTgc, f_Tgc)

    @@ -493,7 +508,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -501,14 +516,14 @@

    Arguments

    contiguous :: - f_Xt(:) + f_Xt(:,:) - + real(kind=rk), intent(in), @@ -516,14 +531,29 @@

    Arguments

    contiguous :: - f_knot(:) + f_knot1(:) - + + real(kind=rk), + +intent(in), + + contiguous + + :: + f_knot2(:) + + + + + + + integer, intent(in) @@ -531,14 +561,14 @@

    Arguments

    :: - f_degree + f_degree(2) - + integer, intent(in) @@ -546,14 +576,14 @@

    Arguments

    :: - f_nc + nc(2) - + integer, intent(in) @@ -561,7 +591,7 @@

    Arguments

    :: - f_ng + f_ng(2) @@ -576,14 +606,14 @@

    Arguments

    allocatable :: - f_d2Tgc(:,:) + f_d2Tgc(:,:,:) - + real(kind=rk), intent(out), @@ -591,14 +621,14 @@

    Arguments

    allocatable :: - f_dTgc(:,:) + f_dTgc(:,:,:) - + real(kind=rk), intent(out), @@ -619,7 +649,7 @@

    Arguments

    -

    private pure subroutine compute_d2Tgc_nurbs_1d_scalar(f_Xt, f_knot, f_degree, f_nc, f_Wc, f_d2Tgc, f_dTgc, f_Tgc) +

    private pure subroutine compute_d2Tgc_nurbs_2d_scalar(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_Wc, f_d2Tgc, f_dTgc, f_Tgc)

    @@ -637,22 +667,22 @@

    Arguments

    - + real(kind=rk), -intent(in) +intent(in), - + contiguous :: - f_Xt + f_Xt(:) - + real(kind=rk), intent(in), @@ -660,14 +690,29 @@

    Arguments

    contiguous :: - f_knot(:) + f_knot1(:) - + + real(kind=rk), + +intent(in), + + contiguous + + :: + f_knot2(:) + + + + + + + integer, intent(in) @@ -675,14 +720,14 @@

    Arguments

    :: - f_degree + f_degree(2) - + integer, intent(in) @@ -690,14 +735,14 @@

    Arguments

    :: - f_nc + f_nc(2) - + real(kind=rk), intent(in), @@ -720,14 +765,14 @@

    Arguments

    allocatable :: - f_d2Tgc(:) + f_d2Tgc(:,:) - + real(kind=rk), intent(out), @@ -735,14 +780,14 @@

    Arguments

    allocatable :: - f_dTgc(:) + f_dTgc(:,:) - + real(kind=rk), intent(out), @@ -763,7 +808,7 @@

    Arguments

    -

    private pure subroutine compute_d2Tgc_nurbs_1d_vector(f_Xt, f_knot, f_degree, f_nc, f_ng, f_Wc, f_d2Tgc, f_dTgc, f_Tgc) +

    private pure subroutine compute_d2Tgc_nurbs_2d_vector(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_ng, f_Wc, f_d2Tgc, f_dTgc, f_Tgc)

    @@ -781,7 +826,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -789,14 +834,14 @@

    Arguments

    contiguous :: - f_Xt(:) + f_Xt(:,:) - + real(kind=rk), intent(in), @@ -804,14 +849,29 @@

    Arguments

    contiguous :: - f_knot(:) + f_knot1(:) - + + real(kind=rk), + +intent(in), + + contiguous + + :: + f_knot2(:) + + + + + + + integer, intent(in) @@ -819,14 +879,14 @@

    Arguments

    :: - f_degree + f_degree(2) - + integer, intent(in) @@ -834,14 +894,14 @@

    Arguments

    :: - f_nc + f_nc(2) - + integer, intent(in) @@ -849,14 +909,14 @@

    Arguments

    :: - f_ng + f_ng(2) - + real(kind=rk), intent(in), @@ -879,14 +939,14 @@

    Arguments

    allocatable :: - f_d2Tgc(:,:) + f_d2Tgc(:,:,:) - + real(kind=rk), intent(out), @@ -894,14 +954,14 @@

    Arguments

    allocatable :: - f_dTgc(:,:) + f_dTgc(:,:,:) - + real(kind=rk), intent(out), @@ -939,7 +999,7 @@

    Arguments

    Documentation generated by FORD - on 2024-06-22T18:18:26.744704

    + on 2024-06-22T18:21:15.937502


    diff --git a/interface/compute_d2tgc~3.html b/interface/compute_d2tgc~3.html index bb2104c8e..76b162a55 100644 --- a/interface/compute_d2tgc~3.html +++ b/interface/compute_d2tgc~3.html @@ -82,15 +82,15 @@

    compute_d2Tgc
  • - Source File + Source File
  • @@ -163,97 +163,97 @@

    Called by

    - - + + interface~~compute_d2tgc~3~~CalledByGraph - + interface~compute_d2tgc~3 - -compute_d2Tgc + +compute_d2Tgc proc~derivative2_scalar~3 - - -nurbs_surface%derivative2_scalar + + +nurbs_curve%derivative2_scalar proc~derivative2_scalar~3->interface~compute_d2tgc~3 - - + + proc~derivative2_vector~3 - - -nurbs_surface%derivative2_vector + + +nurbs_curve%derivative2_vector proc~derivative2_vector~3->interface~compute_d2tgc~3 - - + + none~derivative2~3 - - -nurbs_surface%derivative2 + + +nurbs_curve%derivative2 none~derivative2~3->proc~derivative2_scalar~3 - - + + none~derivative2~3->proc~derivative2_vector~3 - - + + proc~nearest_point2~3 - - -nurbs_surface%nearest_point2 + + +nurbs_curve%nearest_point2 proc~nearest_point2~3->none~derivative2~3 - - + + - + -program~nearest_point_2d - +program~nearest_point_1d + -nearest_point_2d +nearest_point_1d - + -program~nearest_point_2d->proc~nearest_point2~3 - - +program~nearest_point_1d->proc~nearest_point2~3 + + @@ -346,7 +346,7 @@

    Subroutines

    -

    private pure subroutine compute_d2Tgc_bspline_2d_scalar(f_Xt, f_knot1, f_knot2, f_degree, nc, f_d2Tgc, f_dTgc, f_Tgc) +

    private pure subroutine compute_d2Tgc_bspline_1d_scalar(f_Xt, f_knot, f_degree, f_nc, f_d2Tgc, f_dTgc, f_Tgc)

    @@ -364,37 +364,22 @@

    Arguments

    - + real(kind=rk), -intent(in), - - contiguous - - :: - f_Xt(:) - - - - - - - - real(kind=rk), - -intent(in), +intent(in) - contiguous + :: - f_knot1(:) + f_Xt - + real(kind=rk), intent(in), @@ -402,14 +387,14 @@

    Arguments

    contiguous :: - f_knot2(:) + f_knot(:) - + integer, intent(in) @@ -417,14 +402,14 @@

    Arguments

    :: - f_degree(2) + f_degree - + integer, intent(in) @@ -432,7 +417,7 @@

    Arguments

    :: - nc(2) + f_nc @@ -447,14 +432,14 @@

    Arguments

    allocatable :: - f_d2Tgc(:,:) + f_d2Tgc(:) - + real(kind=rk), intent(out), @@ -462,14 +447,14 @@

    Arguments

    allocatable :: - f_dTgc(:,:) + f_dTgc(:) - + real(kind=rk), intent(out), @@ -490,7 +475,7 @@

    Arguments

    -

    private pure subroutine compute_d2Tgc_bspline_2d_vector(f_Xt, f_knot1, f_knot2, f_degree, nc, f_ng, f_d2Tgc, f_dTgc, f_Tgc) +

    private pure subroutine compute_d2Tgc_bspline_1d_vector(f_Xt, f_knot, f_degree, f_nc, f_ng, f_d2Tgc, f_dTgc, f_Tgc)

    @@ -508,22 +493,7 @@

    Arguments

    - - real(kind=rk), - -intent(in), - - contiguous - - :: - f_Xt(:,:) - - - - - - - + real(kind=rk), intent(in), @@ -531,14 +501,14 @@

    Arguments

    contiguous :: - f_knot1(:) + f_Xt(:) - + real(kind=rk), intent(in), @@ -546,14 +516,14 @@

    Arguments

    contiguous :: - f_knot2(:) + f_knot(:) - + integer, intent(in) @@ -561,14 +531,14 @@

    Arguments

    :: - f_degree(2) + f_degree - + integer, intent(in) @@ -576,14 +546,14 @@

    Arguments

    :: - nc(2) + f_nc - + integer, intent(in) @@ -591,7 +561,7 @@

    Arguments

    :: - f_ng(2) + f_ng @@ -606,14 +576,14 @@

    Arguments

    allocatable :: - f_d2Tgc(:,:,:) + f_d2Tgc(:,:) - + real(kind=rk), intent(out), @@ -621,14 +591,14 @@

    Arguments

    allocatable :: - f_dTgc(:,:,:) + f_dTgc(:,:) - + real(kind=rk), intent(out), @@ -649,7 +619,7 @@

    Arguments

    -

    private pure subroutine compute_d2Tgc_nurbs_2d_scalar(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_Wc, f_d2Tgc, f_dTgc, f_Tgc) +

    private pure subroutine compute_d2Tgc_nurbs_1d_scalar(f_Xt, f_knot, f_degree, f_nc, f_Wc, f_d2Tgc, f_dTgc, f_Tgc)

    @@ -667,37 +637,22 @@

    Arguments

    - + real(kind=rk), -intent(in), - - contiguous - - :: - f_Xt(:) - - - - - - - - real(kind=rk), - -intent(in), +intent(in) - contiguous + :: - f_knot1(:) + f_Xt - + real(kind=rk), intent(in), @@ -705,14 +660,14 @@

    Arguments

    contiguous :: - f_knot2(:) + f_knot(:) - + integer, intent(in) @@ -720,14 +675,14 @@

    Arguments

    :: - f_degree(2) + f_degree - + integer, intent(in) @@ -735,14 +690,14 @@

    Arguments

    :: - f_nc(2) + f_nc - + real(kind=rk), intent(in), @@ -765,14 +720,14 @@

    Arguments

    allocatable :: - f_d2Tgc(:,:) + f_d2Tgc(:) - + real(kind=rk), intent(out), @@ -780,14 +735,14 @@

    Arguments

    allocatable :: - f_dTgc(:,:) + f_dTgc(:) - + real(kind=rk), intent(out), @@ -808,7 +763,7 @@

    Arguments

    -

    private pure subroutine compute_d2Tgc_nurbs_2d_vector(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_ng, f_Wc, f_d2Tgc, f_dTgc, f_Tgc) +

    private pure subroutine compute_d2Tgc_nurbs_1d_vector(f_Xt, f_knot, f_degree, f_nc, f_ng, f_Wc, f_d2Tgc, f_dTgc, f_Tgc)

    @@ -826,22 +781,7 @@

    Arguments

    - - real(kind=rk), - -intent(in), - - contiguous - - :: - f_Xt(:,:) - - - - - - - + real(kind=rk), intent(in), @@ -849,14 +789,14 @@

    Arguments

    contiguous :: - f_knot1(:) + f_Xt(:) - + real(kind=rk), intent(in), @@ -864,14 +804,14 @@

    Arguments

    contiguous :: - f_knot2(:) + f_knot(:) - + integer, intent(in) @@ -879,14 +819,14 @@

    Arguments

    :: - f_degree(2) + f_degree - + integer, intent(in) @@ -894,14 +834,14 @@

    Arguments

    :: - f_nc(2) + f_nc - + integer, intent(in) @@ -909,14 +849,14 @@

    Arguments

    :: - f_ng(2) + f_ng - + real(kind=rk), intent(in), @@ -939,14 +879,14 @@

    Arguments

    allocatable :: - f_d2Tgc(:,:,:) + f_d2Tgc(:,:) - + real(kind=rk), intent(out), @@ -954,14 +894,14 @@

    Arguments

    allocatable :: - f_dTgc(:,:,:) + f_dTgc(:,:) - + real(kind=rk), intent(out), @@ -999,7 +939,7 @@

    Arguments

    Documentation generated by FORD - on 2024-06-22T18:18:26.744704

    + on 2024-06-22T18:21:15.937502


    diff --git a/interface/compute_dtgc.html b/interface/compute_dtgc.html index 60adac009..2aab27233 100644 --- a/interface/compute_dtgc.html +++ b/interface/compute_dtgc.html @@ -944,7 +944,7 @@

    Arguments

    Documentation generated by FORD - on 2024-06-22T18:18:26.744704

    + on 2024-06-22T18:21:15.937502


    diff --git a/interface/compute_dtgc~2.html b/interface/compute_dtgc~2.html index fc3aa174a..af706fe2f 100644 --- a/interface/compute_dtgc~2.html +++ b/interface/compute_dtgc~2.html @@ -82,15 +82,15 @@

    compute_dTgc
  • - Source File + Source File
  • @@ -163,46 +163,46 @@

    Called by

    - + interface~~compute_dtgc~2~~CalledByGraph - + interface~compute_dtgc~2 - -compute_dTgc + +compute_dTgc proc~derivative_scalar~2 - - -nurbs_curve%derivative_scalar + + +nurbs_surface%derivative_scalar proc~derivative_scalar~2->interface~compute_dtgc~2 - - + + proc~derivative_vector~2 - - -nurbs_curve%derivative_vector + + +nurbs_surface%derivative_vector proc~derivative_vector~2->interface~compute_dtgc~2 - - + + @@ -291,7 +291,7 @@

    Subroutines

    -

    private pure subroutine compute_dTgc_bspline_1d_scalar(f_Xt, f_knot, f_degree, f_nc, f_dTgc, f_Tgc) +

    private pure subroutine compute_dTgc_bspline_2d_scalar(f_Xt, f_knot1, f_knot2, f_degree, nc, f_dTgc, f_Tgc)

    @@ -309,22 +309,37 @@

    Arguments

    - + real(kind=rk), -intent(in) +intent(in), - + contiguous + + :: + f_Xt(:) + + + + + + + + real(kind=rk), + +intent(in), + + contiguous :: - f_Xt + f_knot1(:) - + real(kind=rk), intent(in), @@ -332,14 +347,14 @@

    Arguments

    contiguous :: - f_knot(:) + f_knot2(:) - + integer, intent(in) @@ -347,14 +362,14 @@

    Arguments

    :: - f_degree + f_degree(2) - + integer, intent(in) @@ -362,14 +377,14 @@

    Arguments

    :: - f_nc + nc(2) - + real(kind=rk), intent(out), @@ -377,14 +392,14 @@

    Arguments

    allocatable :: - f_dTgc(:) + f_dTgc(:,:) - + real(kind=rk), intent(out), @@ -405,7 +420,7 @@

    Arguments

    -

    private pure subroutine compute_dTgc_bspline_1d_vector(f_Xt, f_knot, f_degree, f_nc, f_ng, f_dTgc, f_Tgc) +

    private pure subroutine compute_dTgc_bspline_2d_vector(f_Xt, f_knot1, f_knot2, f_degree, nc, f_ng, f_dTgc, f_Tgc)

    @@ -423,7 +438,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -431,14 +446,14 @@

    Arguments

    contiguous :: - f_Xt(:) + f_Xt(:,:) - + real(kind=rk), intent(in), @@ -446,14 +461,29 @@

    Arguments

    contiguous :: - f_knot(:) + f_knot1(:) - + + real(kind=rk), + +intent(in), + + contiguous + + :: + f_knot2(:) + + + + + + + integer, intent(in) @@ -461,14 +491,14 @@

    Arguments

    :: - f_degree + f_degree(2) - + integer, intent(in) @@ -476,14 +506,14 @@

    Arguments

    :: - f_nc + nc(2) - + integer, intent(in) @@ -491,14 +521,14 @@

    Arguments

    :: - f_ng + f_ng(2) - + real(kind=rk), intent(out), @@ -506,14 +536,14 @@

    Arguments

    allocatable :: - f_dTgc(:,:) + f_dTgc(:,:,:) - + real(kind=rk), intent(out), @@ -534,7 +564,7 @@

    Arguments

    -

    private pure subroutine compute_dTgc_nurbs_1d_scalar(f_Xt, f_knot, f_degree, f_nc, f_Wc, f_dTgc, f_Tgc) +

    private pure subroutine compute_dTgc_nurbs_2d_scalar(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_Wc, f_dTgc, f_Tgc)

    @@ -552,22 +582,37 @@

    Arguments

    - + real(kind=rk), -intent(in) +intent(in), - + contiguous + + :: + f_Xt(:) + + + + + + + + real(kind=rk), + +intent(in), + + contiguous :: - f_Xt + f_knot1(:) - + real(kind=rk), intent(in), @@ -575,14 +620,14 @@

    Arguments

    contiguous :: - f_knot(:) + f_knot2(:) - + integer, intent(in) @@ -590,14 +635,14 @@

    Arguments

    :: - f_degree + f_degree(2) - + integer, intent(in) @@ -605,14 +650,14 @@

    Arguments

    :: - f_nc + f_nc(2) - + real(kind=rk), intent(in), @@ -627,7 +672,7 @@

    Arguments

    - + real(kind=rk), intent(out), @@ -635,14 +680,14 @@

    Arguments

    allocatable :: - f_dTgc(:) + f_dTgc(:,:) - + real(kind=rk), intent(out), @@ -663,7 +708,7 @@

    Arguments

    -

    private pure subroutine compute_dTgc_nurbs_1d_vector(f_Xt, f_knot, f_degree, f_nc, f_ng, f_Wc, f_dTgc, f_Tgc) +

    private pure subroutine compute_dTgc_nurbs_2d_vector(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_ng, f_Wc, f_dTgc, f_Tgc)

    @@ -681,7 +726,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -689,14 +734,14 @@

    Arguments

    contiguous :: - f_Xt(:) + f_Xt(:,:) - + real(kind=rk), intent(in), @@ -704,14 +749,29 @@

    Arguments

    contiguous :: - f_knot(:) + f_knot1(:) - + + real(kind=rk), + +intent(in), + + contiguous + + :: + f_knot2(:) + + + + + + + integer, intent(in) @@ -719,14 +779,14 @@

    Arguments

    :: - f_degree + f_degree(2) - + integer, intent(in) @@ -734,14 +794,14 @@

    Arguments

    :: - f_nc + f_nc(2) - + integer, intent(in) @@ -749,14 +809,14 @@

    Arguments

    :: - f_ng + f_ng(2) - + real(kind=rk), intent(in), @@ -771,7 +831,7 @@

    Arguments

    - + real(kind=rk), intent(out), @@ -779,14 +839,14 @@

    Arguments

    allocatable :: - f_dTgc(:,:) + f_dTgc(:,:,:) - + real(kind=rk), intent(out), @@ -824,7 +884,7 @@

    Arguments

    Documentation generated by FORD - on 2024-06-22T18:18:26.744704

    + on 2024-06-22T18:21:15.937502


    diff --git a/interface/compute_dtgc~3.html b/interface/compute_dtgc~3.html index 53a32a5a2..00eec9ca1 100644 --- a/interface/compute_dtgc~3.html +++ b/interface/compute_dtgc~3.html @@ -82,15 +82,15 @@

    compute_dTgc
  • - Source File + Source File
  • @@ -163,46 +163,46 @@

    Called by

    - + interface~~compute_dtgc~3~~CalledByGraph - + interface~compute_dtgc~3 - -compute_dTgc + +compute_dTgc proc~derivative_scalar~3 - - -nurbs_surface%derivative_scalar + + +nurbs_curve%derivative_scalar proc~derivative_scalar~3->interface~compute_dtgc~3 - - + + proc~derivative_vector~3 - - -nurbs_surface%derivative_vector + + +nurbs_curve%derivative_vector proc~derivative_vector~3->interface~compute_dtgc~3 - - + + @@ -291,7 +291,7 @@

    Subroutines

    -

    private pure subroutine compute_dTgc_bspline_2d_scalar(f_Xt, f_knot1, f_knot2, f_degree, nc, f_dTgc, f_Tgc) +

    private pure subroutine compute_dTgc_bspline_1d_scalar(f_Xt, f_knot, f_degree, f_nc, f_dTgc, f_Tgc)

    @@ -309,37 +309,22 @@

    Arguments

    - + real(kind=rk), -intent(in), - - contiguous - - :: - f_Xt(:) - - - - - - - - real(kind=rk), - -intent(in), +intent(in) - contiguous + :: - f_knot1(:) + f_Xt - + real(kind=rk), intent(in), @@ -347,14 +332,14 @@

    Arguments

    contiguous :: - f_knot2(:) + f_knot(:) - + integer, intent(in) @@ -362,14 +347,14 @@

    Arguments

    :: - f_degree(2) + f_degree - + integer, intent(in) @@ -377,14 +362,14 @@

    Arguments

    :: - nc(2) + f_nc - + real(kind=rk), intent(out), @@ -392,14 +377,14 @@

    Arguments

    allocatable :: - f_dTgc(:,:) + f_dTgc(:) - + real(kind=rk), intent(out), @@ -420,7 +405,7 @@

    Arguments

    -

    private pure subroutine compute_dTgc_bspline_2d_vector(f_Xt, f_knot1, f_knot2, f_degree, nc, f_ng, f_dTgc, f_Tgc) +

    private pure subroutine compute_dTgc_bspline_1d_vector(f_Xt, f_knot, f_degree, f_nc, f_ng, f_dTgc, f_Tgc)

    @@ -438,7 +423,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -446,29 +431,14 @@

    Arguments

    contiguous :: - f_Xt(:,:) - - - - - - - - real(kind=rk), - -intent(in), - - contiguous - - :: - f_knot1(:) + f_Xt(:) - + real(kind=rk), intent(in), @@ -476,14 +446,14 @@

    Arguments

    contiguous :: - f_knot2(:) + f_knot(:) - + integer, intent(in) @@ -491,14 +461,14 @@

    Arguments

    :: - f_degree(2) + f_degree - + integer, intent(in) @@ -506,14 +476,14 @@

    Arguments

    :: - nc(2) + f_nc - + integer, intent(in) @@ -521,14 +491,14 @@

    Arguments

    :: - f_ng(2) + f_ng - + real(kind=rk), intent(out), @@ -536,14 +506,14 @@

    Arguments

    allocatable :: - f_dTgc(:,:,:) + f_dTgc(:,:) - + real(kind=rk), intent(out), @@ -564,7 +534,7 @@

    Arguments

    -

    private pure subroutine compute_dTgc_nurbs_2d_scalar(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_Wc, f_dTgc, f_Tgc) +

    private pure subroutine compute_dTgc_nurbs_1d_scalar(f_Xt, f_knot, f_degree, f_nc, f_Wc, f_dTgc, f_Tgc)

    @@ -582,37 +552,22 @@

    Arguments

    - + real(kind=rk), -intent(in), - - contiguous - - :: - f_Xt(:) - - - - - - - - real(kind=rk), - -intent(in), +intent(in) - contiguous + :: - f_knot1(:) + f_Xt - + real(kind=rk), intent(in), @@ -620,14 +575,14 @@

    Arguments

    contiguous :: - f_knot2(:) + f_knot(:) - + integer, intent(in) @@ -635,14 +590,14 @@

    Arguments

    :: - f_degree(2) + f_degree - + integer, intent(in) @@ -650,14 +605,14 @@

    Arguments

    :: - f_nc(2) + f_nc - + real(kind=rk), intent(in), @@ -672,7 +627,7 @@

    Arguments

    - + real(kind=rk), intent(out), @@ -680,14 +635,14 @@

    Arguments

    allocatable :: - f_dTgc(:,:) + f_dTgc(:) - + real(kind=rk), intent(out), @@ -708,7 +663,7 @@

    Arguments

    -

    private pure subroutine compute_dTgc_nurbs_2d_vector(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_ng, f_Wc, f_dTgc, f_Tgc) +

    private pure subroutine compute_dTgc_nurbs_1d_vector(f_Xt, f_knot, f_degree, f_nc, f_ng, f_Wc, f_dTgc, f_Tgc)

    @@ -726,7 +681,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -734,29 +689,14 @@

    Arguments

    contiguous :: - f_Xt(:,:) - - - - - - - - real(kind=rk), - -intent(in), - - contiguous - - :: - f_knot1(:) + f_Xt(:) - + real(kind=rk), intent(in), @@ -764,14 +704,14 @@

    Arguments

    contiguous :: - f_knot2(:) + f_knot(:) - + integer, intent(in) @@ -779,7 +719,7 @@

    Arguments

    :: - f_degree(2) + f_degree @@ -794,14 +734,14 @@

    Arguments

    :: - f_nc(2) + f_nc - + integer, intent(in) @@ -809,14 +749,14 @@

    Arguments

    :: - f_ng(2) + f_ng - + real(kind=rk), intent(in), @@ -831,7 +771,7 @@

    Arguments

    - + real(kind=rk), intent(out), @@ -839,14 +779,14 @@

    Arguments

    allocatable :: - f_dTgc(:,:,:) + f_dTgc(:,:) - + real(kind=rk), intent(out), @@ -884,7 +824,7 @@

    Arguments

    Documentation generated by FORD - on 2024-06-22T18:18:26.744704

    + on 2024-06-22T18:21:15.937502


    diff --git a/interface/compute_multiplicity.html b/interface/compute_multiplicity.html index 9b3377a2a..0aebdb945 100644 --- a/interface/compute_multiplicity.html +++ b/interface/compute_multiplicity.html @@ -311,46 +311,46 @@

    Called by

    proc~cmp_nc - -nurbs_volume%cmp_nc + +nurbs_volume%cmp_nc proc~cmp_nc->interface~compute_multiplicity - - + + proc~cmp_nc~2 - - -nurbs_curve%cmp_nc + + +nurbs_surface%cmp_nc proc~cmp_nc~2->interface~compute_multiplicity - - + + proc~cmp_nc~3 - - -nurbs_surface%cmp_nc + + +nurbs_curve%cmp_nc proc~cmp_nc~3->interface~compute_multiplicity - - + + @@ -385,9 +385,9 @@

    Called by

    proc~get_continuity~2 - - -nurbs_curve%get_continuity + + +nurbs_surface%get_continuity @@ -400,9 +400,9 @@

    Called by

    proc~get_continuity~3 - - -nurbs_surface%get_continuity + + +nurbs_curve%get_continuity @@ -416,46 +416,46 @@

    Called by

    proc~get_multiplicity - -nurbs_volume%get_multiplicity + +nurbs_volume%get_multiplicity proc~get_multiplicity->interface~compute_multiplicity - - + + proc~get_multiplicity~2 - - -nurbs_curve%get_multiplicity + + +nurbs_surface%get_multiplicity proc~get_multiplicity~2->interface~compute_multiplicity - - + + proc~get_multiplicity~3 - - -nurbs_surface%get_multiplicity + + +nurbs_curve%get_multiplicity proc~get_multiplicity~3->interface~compute_multiplicity - - + + @@ -472,18 +472,18 @@

    Called by

    - + -proc~get_nc~3 - +proc~get_nc~2 + nurbs_surface%get_nc - + -proc~get_nc~3->interface~compute_multiplicity +proc~get_nc~2->interface~compute_multiplicity @@ -499,83 +499,83 @@

    Called by

    proc~insert_knots->interface~compute_multiplicity - - + + none~set - -nurbs_volume%set + +nurbs_volume%set proc~insert_knots->none~set - - + + proc~insert_knots~2 - - -nurbs_curve%insert_knots + + +nurbs_surface%insert_knots proc~insert_knots~2->interface~compute_multiplicity - - + + - + none~set~2 - - -nurbs_curve%set + + +nurbs_surface%set - + proc~insert_knots~2->none~set~2 - - + + proc~insert_knots~3 - - -nurbs_surface%insert_knots + + +nurbs_curve%insert_knots proc~insert_knots~3->interface~compute_multiplicity - - + + - + none~set~3 - - -nurbs_surface%set + + +nurbs_curve%set - + proc~insert_knots~3->none~set~3 - - + + @@ -595,340 +595,340 @@

    Called by

    proc~remove_knots->none~set - - + + proc~remove_knots~2 - - -nurbs_curve%remove_knots + + +nurbs_surface%remove_knots proc~remove_knots~2->interface~compute_multiplicity - - + + - + proc~remove_knots~2->none~set~2 - - + + proc~remove_knots~3 - - -nurbs_surface%remove_knots + + +nurbs_curve%remove_knots proc~remove_knots~3->interface~compute_multiplicity - - + + - + proc~remove_knots~3->none~set~3 - - + + proc~cmp_degree - -nurbs_volume%cmp_degree + +nurbs_volume%cmp_degree proc~cmp_degree->proc~get_multiplicity - - + + proc~cmp_degree~2 - - -nurbs_curve%cmp_degree + + +nurbs_surface%cmp_degree proc~cmp_degree~2->proc~get_multiplicity~2 - - + + proc~cmp_degree~3 - - -nurbs_surface%cmp_degree + + +nurbs_curve%cmp_degree proc~cmp_degree~3->proc~get_multiplicity~3 - - + + proc~cmp_elem - -nurbs_volume%cmp_elem + +nurbs_volume%cmp_elem proc~cmp_elem->proc~get_multiplicity - - + + proc~cmp_elem~2 - - -nurbs_curve%cmp_elem + + +nurbs_surface%cmp_elem proc~cmp_elem~2->proc~get_multiplicity~2 - - + + proc~cmp_elem~3 - - -nurbs_surface%cmp_elem + + +nurbs_curve%cmp_elem proc~cmp_elem~3->proc~get_multiplicity~3 - - + + proc~elevate_degree - -nurbs_volume%elevate_degree + +nurbs_volume%elevate_degree proc~elevate_degree->proc~elevate_degree_a_5_9 - - + + proc~elevate_degree->none~set - - + + proc~elevate_degree~2 - - -nurbs_curve%elevate_degree + + +nurbs_surface%elevate_degree proc~elevate_degree~2->proc~elevate_degree_a_5_9 - - + + - + proc~elevate_degree~2->none~set~2 - - + + proc~elevate_degree~3 - - -nurbs_surface%elevate_degree + + +nurbs_curve%elevate_degree proc~elevate_degree~3->proc~elevate_degree_a_5_9 - - + + - + proc~elevate_degree~3->none~set~3 - - + + proc~set1 - -nurbs_volume%set1 + +nurbs_volume%set1 proc~set1->proc~cmp_nc - - + + proc~set1->proc~cmp_degree - - + + - + -proc~set1~3 - +proc~set1~2 + nurbs_surface%set1 - + -proc~set1~3->proc~cmp_nc~3 - - +proc~set1~2->proc~cmp_nc~2 + + - - -proc~set1~3->proc~cmp_degree~3 - - + + +proc~set1~2->proc~cmp_degree~2 + + proc~set2 - -nurbs_volume%set2 + +nurbs_volume%set2 proc~set2->proc~cmp_nc - - + + - + -proc~set2~3 - +proc~set2~2 + nurbs_surface%set2 - + -proc~set2~3->proc~cmp_nc~3 - - +proc~set2~2->proc~cmp_nc~2 + + program~example1_curve - -example1_curve + +example1_curve - - -program~example1_curve->proc~insert_knots~2 - - + + +program~example1_curve->proc~insert_knots~3 + + - - -program~example1_curve->proc~remove_knots~2 - - + + +program~example1_curve->proc~remove_knots~3 + + - - -program~example1_curve->proc~elevate_degree~2 - - + + +program~example1_curve->proc~elevate_degree~3 + + - + -program~example1_curve->none~set~2 - - +program~example1_curve->none~set~3 + + program~example3_surface - -example3_surface + +example3_surface - - -program~example3_surface->proc~insert_knots~3 - - + + +program~example3_surface->proc~insert_knots~2 + + - - -program~example3_surface->proc~remove_knots~3 - - + + +program~example3_surface->proc~remove_knots~2 + + - - -program~example3_surface->proc~elevate_degree~3 - - + + +program~example3_surface->proc~elevate_degree~2 + + - + -program~example3_surface->none~set~3 - +program~example3_surface->none~set~2 + @@ -955,156 +955,156 @@

    Called by

    program~example3_volume->proc~cmp_elem - - + + program~example3_volume->proc~elevate_degree - - + + program~example3_volume->none~set - - + + none~set->proc~set1 - - + + none~set->proc~set2 - - + + proc~set3 - -nurbs_volume%set3 + +nurbs_volume%set3 none~set->proc~set3 - - + + - + -none~set~3->proc~set1~3 +none~set~2->proc~set1~2 - + -none~set~3->proc~set2~3 +none~set~2->proc~set2~2 - - -proc~set3~3 - + + +proc~set3~2 + nurbs_surface%set3 - - -none~set~3->proc~set3~3 - - + + +none~set~2->proc~set3~2 + + - + -proc~set1~2 - - -nurbs_curve%set1 +proc~set1~3 + + +nurbs_curve%set1 - - -proc~set1~2->proc~cmp_degree~2 - - + + +proc~set1~3->proc~cmp_degree~3 + + proc~set3->proc~cmp_degree - - - - - -proc~set3~2 - - -nurbs_curve%set3 - - + + proc~set3~2->proc~cmp_degree~2 - - + + + + + +proc~set3~3 + + +nurbs_curve%set3 + + proc~set3~3->proc~cmp_degree~3 - - + + - + -none~set~2->proc~set1~2 - - +none~set~3->proc~set1~3 + + - - -none~set~2->proc~set3~2 - - + + +none~set~3->proc~set3~3 + + proc~modify_wc - -nurbs_volume%modify_Wc + +nurbs_volume%modify_Wc proc~modify_wc->none~set - - + + - + -proc~modify_wc~3 - +proc~modify_wc~2 + nurbs_surface%modify_Wc - + -proc~modify_wc~3->none~set~3 +proc~modify_wc~2->none~set~2 @@ -1112,29 +1112,29 @@

    Called by

    proc~modify_xc - -nurbs_volume%modify_Xc + +nurbs_volume%modify_Xc proc~modify_xc->none~set - - + + - + -proc~modify_xc~3 - +proc~modify_xc~2 + nurbs_surface%modify_Xc - + -proc~modify_xc~3->none~set~3 +proc~modify_xc~2->none~set~2 @@ -1150,23 +1150,23 @@

    Called by

    proc~set_c->none~set - - + + - + -proc~set_c~3 - - -nurbs_surface%set_C +proc~set_c~2 + + +nurbs_surface%set_C - + -proc~set_c~3->none~set~3 - - +proc~set_c~2->none~set~2 + + @@ -1180,23 +1180,23 @@

    Called by

    proc~set_half_ring->none~set - - + + proc~set_half_ring~2 - -nurbs_surface%set_half_ring + +nurbs_surface%set_half_ring - + -proc~set_half_ring~2->none~set~3 - - +proc~set_half_ring~2->none~set~2 + + @@ -1210,326 +1210,326 @@

    Called by

    proc~set_hexahedron->none~set - - + + proc~set_ring - -nurbs_volume%set_ring + +nurbs_volume%set_ring proc~set_ring->none~set - - + + proc~set_ring~2 - -nurbs_surface%set_ring + +nurbs_surface%set_ring - + -proc~set_ring~2->none~set~3 - - +proc~set_ring~2->none~set~2 + + proc~set_tetragon - -nurbs_surface%set_tetragon + +nurbs_surface%set_tetragon - + -proc~set_tetragon->none~set~3 - - +proc~set_tetragon->none~set~2 + + program~example_nurbs_surface - -example_nurbs_surface + +example_nurbs_surface - + -program~example_nurbs_surface->none~set~3 - - +program~example_nurbs_surface->none~set~2 + + program~example_nurbs_volume - -example_nurbs_volume + +example_nurbs_volume program~example_nurbs_volume->none~set - - + + program~example_put_to_nurbs - -example_put_to_nurbs + +example_put_to_nurbs program~example_put_to_nurbs->none~set - - + + program~nearest_point_2d - -nearest_point_2d + +nearest_point_2d - + -program~nearest_point_2d->none~set~3 - - +program~nearest_point_2d->none~set~2 + + program~nearest_point_3d - -nearest_point_3d + +nearest_point_3d program~nearest_point_3d->none~set - - + + - + -proc~modify_wc~2 - - -nurbs_curve%modify_Wc +proc~modify_wc~3 + + +nurbs_curve%modify_Wc - + -proc~modify_wc~2->none~set~2 - - +proc~modify_wc~3->none~set~3 + + - + -proc~modify_xc~2 - - -nurbs_curve%modify_Xc +proc~modify_xc~3 + + +nurbs_curve%modify_Xc - + -proc~modify_xc~2->none~set~2 - - +proc~modify_xc~3->none~set~3 + + proc~set_circle - -nurbs_curve%set_circle + +nurbs_curve%set_circle - + -proc~set_circle->none~set~2 - - +proc~set_circle->none~set~3 + + - + -proc~set_c~2 - - -nurbs_curve%set_C +proc~set_c~3 + + +nurbs_curve%set_C - + -proc~set_c~2->none~set~2 - - +proc~set_c~3->none~set~3 + + proc~set_half_circle - -nurbs_curve%set_half_circle + +nurbs_curve%set_half_circle - + -proc~set_half_circle->none~set~2 - - +proc~set_half_circle->none~set~3 + + program~example_nurbs_curve - -example_nurbs_curve + +example_nurbs_curve - + -program~example_nurbs_curve->none~set~2 - - +program~example_nurbs_curve->none~set~3 + + program~example_ppm1 - -example_ppm1 + +example_ppm1 program~example_ppm1->proc~set_ring~2 - - + + program~example_ppm1->proc~set_tetragon - - + + program~example_ppm2 - -example_ppm2 + +example_ppm2 program~example_ppm2->proc~set_half_ring~2 - - + + program~example_ppm2->proc~set_tetragon - - + + program~example_ppm3 - -example_ppm3 + +example_ppm3 - + -program~example_ppm3->proc~modify_xc~3 - - +program~example_ppm3->proc~modify_xc~2 + + program~example_ppm3->proc~set_tetragon - - + + program~nearest_point_1d - -nearest_point_1d + +nearest_point_1d - + -program~nearest_point_1d->none~set~2 - - +program~nearest_point_1d->none~set~3 + + program~nearest_point_2d_bench - -nearest_point_2d_bench + +nearest_point_2d_bench program~nearest_point_2d_bench->proc~set_tetragon - - + + program~shape_c_2d - -shape_C_2d + +shape_C_2d - + -program~shape_c_2d->proc~set_c~3 - - +program~shape_c_2d->proc~set_c~2 + + @@ -1550,16 +1550,16 @@

    Called by

    program~shape_half_ring_2d - -shape_half_ring_2d + +shape_half_ring_2d program~shape_half_ring_2d->proc~set_half_ring~2 - - + + @@ -1595,91 +1595,91 @@

    Called by

    program~shape_ring_2d - -shape_ring_2d + +shape_ring_2d program~shape_ring_2d->proc~set_ring~2 - - + + program~shape_ring_3d - -shape_ring_3d + +shape_ring_3d program~shape_ring_3d->proc~set_ring - - + + program~shape_tetragon - -shape_tetragon + +shape_tetragon program~shape_tetragon->proc~set_tetragon - - + + program~shape_c_1d - -shape_C_1d + +shape_C_1d - + -program~shape_c_1d->proc~set_c~2 - - +program~shape_c_1d->proc~set_c~3 + + program~shape_circle - -shape_circle + +shape_circle program~shape_circle->proc~set_circle - - + + program~shape_half_circle - -shape_half_circle + +shape_half_circle program~shape_half_circle->proc~set_half_circle - - + +
    @@ -1796,7 +1796,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -1845,7 +1845,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -1860,7 +1860,7 @@

    Arguments

    - + real(kind=rk), intent(in) @@ -1902,7 +1902,7 @@

    Documentation generated by FORD - on 2024-06-22T18:18:26.744704

    + on 2024-06-22T18:21:15.937502


    diff --git a/interface/compute_tgc.html b/interface/compute_tgc.html index cb1077d1f..0e0aed0c7 100644 --- a/interface/compute_tgc.html +++ b/interface/compute_tgc.html @@ -844,7 +844,7 @@

    Documentation generated by FORD - on 2024-06-22T18:18:26.744704

    + on 2024-06-22T18:21:15.937502


    diff --git a/interface/compute_tgc~2.html b/interface/compute_tgc~2.html index fda61555e..ad0ad0921 100644 --- a/interface/compute_tgc~2.html +++ b/interface/compute_tgc~2.html @@ -82,15 +82,15 @@

    compute_Tgc
  • - Source File + Source File
  • @@ -163,46 +163,46 @@

    Called by

    - + interface~~compute_tgc~2~~CalledByGraph - + interface~compute_tgc~2 - -compute_Tgc + +compute_Tgc proc~basis_scalar~2 - - -nurbs_curve%basis_scalar + + +nurbs_surface%basis_scalar proc~basis_scalar~2->interface~compute_tgc~2 - - + + proc~basis_vector~2 - - -nurbs_curve%basis_vector + + +nurbs_surface%basis_vector proc~basis_vector~2->interface~compute_tgc~2 - - + + @@ -290,7 +290,7 @@

    Functions

    -

    private pure function compute_Tgc_bspline_1d_scalar(f_Xt, f_knot, f_degree, f_nc) result(f_Tgc) +

    private pure function compute_Tgc_bspline_2d_scalar(f_Xt, f_knot1, f_knot2, f_degree, f_nc) result(f_Tgc)

    @@ -311,19 +311,34 @@

    Arguments

    real(kind=rk), -intent(in) +intent(in), - + contiguous + + :: + f_Xt(:) + + + + + + + + real(kind=rk), + +intent(in), + + contiguous :: - f_Xt + f_knot1(:) - + real(kind=rk), intent(in), @@ -331,7 +346,7 @@

    Arguments

    contiguous :: - f_knot(:) + f_knot2(:) @@ -346,14 +361,14 @@

    Arguments

    :: - f_degree + f_degree(2) - + integer, intent(in) @@ -361,7 +376,7 @@

    Arguments

    :: - f_nc + f_nc(2) @@ -379,7 +394,7 @@

    -

    private pure function compute_Tgc_bspline_1d_vector(f_Xt, f_knot, f_degree, f_nc, f_ng) result(f_Tgc) +

    private pure function compute_Tgc_bspline_2d_vector(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_ng) result(f_Tgc)

    @@ -405,14 +420,29 @@

    Arguments

    contiguous :: - f_Xt(:) + f_Xt(:,:) + + + + + + + + real(kind=rk), + +intent(in), + + contiguous + + :: + f_knot1(:) - + real(kind=rk), intent(in), @@ -420,7 +450,7 @@

    Arguments

    contiguous :: - f_knot(:) + f_knot2(:) @@ -435,14 +465,14 @@

    Arguments

    :: - f_degree + f_degree(2) - + integer, intent(in) @@ -450,7 +480,7 @@

    Arguments

    :: - f_nc + f_nc(2) @@ -465,7 +495,7 @@

    Arguments

    :: - f_ng + f_ng(2) @@ -483,7 +513,7 @@

    -

    private pure function compute_Tgc_nurbs_1d_scalar(f_Xt, f_knot, f_degree, f_nc, f_Wc) result(f_Tgc) +

    private pure function compute_Tgc_nurbs_2d_scalar(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_Wc) result(f_Tgc)

    @@ -504,19 +534,34 @@

    Arguments

    real(kind=rk), -intent(in) +intent(in), - + contiguous + + :: + f_Xt(:) + + + + + + + + real(kind=rk), + +intent(in), + + contiguous :: - f_Xt + f_knot1(:) - + real(kind=rk), intent(in), @@ -524,7 +569,7 @@

    Arguments

    contiguous :: - f_knot(:) + f_knot2(:) @@ -539,14 +584,14 @@

    Arguments

    :: - f_degree + f_degree(2) - + integer, intent(in) @@ -554,7 +599,7 @@

    Arguments

    :: - f_nc + f_nc(2) @@ -587,7 +632,7 @@

    -

    private pure function compute_Tgc_nurbs_1d_vector(f_Xt, f_knot, f_degree, f_nc, f_ng, f_Wc) result(f_Tgc) +

    private pure function compute_Tgc_nurbs_2d_vector(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_ng, f_Wc) result(f_Tgc)

    @@ -613,14 +658,29 @@

    Arguments

    contiguous :: - f_Xt(:) + f_Xt(:,:) + + + + + + + + real(kind=rk), + +intent(in), + + contiguous + + :: + f_knot1(:) - + real(kind=rk), intent(in), @@ -628,7 +688,7 @@

    Arguments

    contiguous :: - f_knot(:) + f_knot2(:) @@ -643,14 +703,14 @@

    Arguments

    :: - f_degree + f_degree(2) - + integer, intent(in) @@ -658,7 +718,7 @@

    Arguments

    :: - f_nc + f_nc(2) @@ -673,7 +733,7 @@

    Arguments

    :: - f_ng + f_ng(2) @@ -724,7 +784,7 @@

    Documentation generated by FORD - on 2024-06-22T18:18:26.744704

    + on 2024-06-22T18:21:15.937502


    diff --git a/interface/compute_tgc~3.html b/interface/compute_tgc~3.html index a413fb2a4..153bc9c50 100644 --- a/interface/compute_tgc~3.html +++ b/interface/compute_tgc~3.html @@ -82,15 +82,15 @@

    compute_Tgc
  • - Source File + Source File
  • @@ -163,46 +163,46 @@

    Called by

    - + interface~~compute_tgc~3~~CalledByGraph - + interface~compute_tgc~3 - -compute_Tgc + +compute_Tgc proc~basis_scalar~3 - - -nurbs_surface%basis_scalar + + +nurbs_curve%basis_scalar proc~basis_scalar~3->interface~compute_tgc~3 - - + + proc~basis_vector~3 - - -nurbs_surface%basis_vector + + +nurbs_curve%basis_vector proc~basis_vector~3->interface~compute_tgc~3 - - + + @@ -290,7 +290,7 @@

    Functions

    -

    private pure function compute_Tgc_bspline_2d_scalar(f_Xt, f_knot1, f_knot2, f_degree, f_nc) result(f_Tgc) +

    private pure function compute_Tgc_bspline_1d_scalar(f_Xt, f_knot, f_degree, f_nc) result(f_Tgc)

    @@ -311,34 +311,19 @@

    Arguments

    real(kind=rk), -intent(in), - - contiguous - - :: - f_Xt(:) - - - - - - - - real(kind=rk), - -intent(in), +intent(in) - contiguous + :: - f_knot1(:) + f_Xt - + real(kind=rk), intent(in), @@ -346,7 +331,7 @@

    Arguments

    contiguous :: - f_knot2(:) + f_knot(:) @@ -361,7 +346,7 @@

    Arguments

    :: - f_degree(2) + f_degree @@ -376,7 +361,7 @@

    Arguments

    :: - f_nc(2) + f_nc @@ -394,7 +379,7 @@

    -

    private pure function compute_Tgc_bspline_2d_vector(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_ng) result(f_Tgc) +

    private pure function compute_Tgc_bspline_1d_vector(f_Xt, f_knot, f_degree, f_nc, f_ng) result(f_Tgc)

    @@ -420,29 +405,14 @@

    Arguments

    contiguous :: - f_Xt(:,:) - - - - - - - - real(kind=rk), - -intent(in), - - contiguous - - :: - f_knot1(:) + f_Xt(:) - + real(kind=rk), intent(in), @@ -450,7 +420,7 @@

    Arguments

    contiguous :: - f_knot2(:) + f_knot(:) @@ -465,7 +435,7 @@

    Arguments

    :: - f_degree(2) + f_degree @@ -480,7 +450,7 @@

    Arguments

    :: - f_nc(2) + f_nc @@ -495,7 +465,7 @@

    Arguments

    :: - f_ng(2) + f_ng @@ -513,7 +483,7 @@

    -

    private pure function compute_Tgc_nurbs_2d_scalar(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_Wc) result(f_Tgc) +

    private pure function compute_Tgc_nurbs_1d_scalar(f_Xt, f_knot, f_degree, f_nc, f_Wc) result(f_Tgc)

    @@ -534,34 +504,19 @@

    Arguments

    real(kind=rk), -intent(in), - - contiguous - - :: - f_Xt(:) - - - - - - - - real(kind=rk), - -intent(in), +intent(in) - contiguous + :: - f_knot1(:) + f_Xt - + real(kind=rk), intent(in), @@ -569,7 +524,7 @@

    Arguments

    contiguous :: - f_knot2(:) + f_knot(:) @@ -584,7 +539,7 @@

    Arguments

    :: - f_degree(2) + f_degree @@ -599,7 +554,7 @@

    Arguments

    :: - f_nc(2) + f_nc @@ -632,7 +587,7 @@

    -

    private pure function compute_Tgc_nurbs_2d_vector(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_ng, f_Wc) result(f_Tgc) +

    private pure function compute_Tgc_nurbs_1d_vector(f_Xt, f_knot, f_degree, f_nc, f_ng, f_Wc) result(f_Tgc)

    @@ -658,29 +613,14 @@

    Arguments

    contiguous :: - f_Xt(:,:) - - - - - - - - real(kind=rk), - -intent(in), - - contiguous - - :: - f_knot1(:) + f_Xt(:) - + real(kind=rk), intent(in), @@ -688,7 +628,7 @@

    Arguments

    contiguous :: - f_knot2(:) + f_knot(:) @@ -703,7 +643,7 @@

    Arguments

    :: - f_degree(2) + f_degree @@ -718,7 +658,7 @@

    Arguments

    :: - f_nc(2) + f_nc @@ -733,7 +673,7 @@

    Arguments

    :: - f_ng(2) + f_ng @@ -784,7 +724,7 @@

    Documentation generated by FORD - on 2024-06-22T18:18:26.744704

    + on 2024-06-22T18:21:15.937502


    diff --git a/interface/compute_xg.html b/interface/compute_xg.html index 9f157ce96..e3d93f289 100644 --- a/interface/compute_xg.html +++ b/interface/compute_xg.html @@ -1036,7 +1036,7 @@

    Documentation generated by FORD - on 2024-06-22T18:18:26.744704

    + on 2024-06-22T18:21:15.937502


    diff --git a/interface/compute_xg~2.html b/interface/compute_xg~2.html index f00686ac8..1ed676751 100644 --- a/interface/compute_xg~2.html +++ b/interface/compute_xg~2.html @@ -77,20 +77,20 @@

    compute_Xg
  • 42 statements + title="

    0.7% of total for procedures.

    Including implementation: 44 statements, 0.7% of total for procedures.">44 statements
  • - Source File + Source File
  • @@ -163,163 +163,238 @@

    Called by

    - - + + interface~~compute_xg~2~~CalledByGraph - + interface~compute_xg~2 - -compute_Xg + +compute_Xg proc~cmp_xg~2 - - -nurbs_curve%cmp_Xg + + +nurbs_surface%cmp_Xg proc~cmp_xg~2->interface~compute_xg~2 - - + + proc~create~2 - - -nurbs_curve%create + + +nurbs_surface%create proc~create~2->interface~compute_xg~2 - - + + proc~nearest_point2~2 - - -nurbs_curve%nearest_point2 + + +nurbs_surface%nearest_point2 proc~nearest_point2~2->proc~cmp_xg~2 - - + + proc~nearest_point2~2->proc~create~2 - - + + - + -program~example1_curve - - -example1_curve +program~example3_surface + + +example3_surface - + -program~example1_curve->proc~create~2 - - +program~example3_surface->proc~create~2 + + - + -program~example_nurbs_curve - - -example_nurbs_curve +program~example_nurbs_surface + + +example_nurbs_surface - + -program~example_nurbs_curve->proc~create~2 - - +program~example_nurbs_surface->proc~create~2 + + - + -program~nearest_point_1d - - -nearest_point_1d +program~example_ppm1 + + +example_ppm1 - + -program~nearest_point_1d->proc~create~2 - - +program~example_ppm1->proc~create~2 + + - - -program~nearest_point_1d->proc~nearest_point2~2 - - - - + -program~shape_c_1d - - -shape_C_1d +program~example_ppm2 + + +example_ppm2 - + -program~shape_c_1d->proc~create~2 - - +program~example_ppm2->proc~create~2 + + - + -program~shape_circle - - -shape_circle +program~example_ppm3 + + +example_ppm3 - + -program~shape_circle->proc~create~2 - - +program~example_ppm3->proc~create~2 + + - + -program~shape_half_circle - - -shape_half_circle +program~nearest_point_2d + + +nearest_point_2d - + -program~shape_half_circle->proc~create~2 - - +program~nearest_point_2d->proc~create~2 + + + + + +program~nearest_point_2d->proc~nearest_point2~2 + + + + + +program~nearest_point_2d_bench + + +nearest_point_2d_bench + + + + + +program~nearest_point_2d_bench->proc~create~2 + + + + + +program~shape_c_2d + + +shape_C_2d + + + + + +program~shape_c_2d->proc~create~2 + + + + + +program~shape_half_ring_2d + + +shape_half_ring_2d + + + + + +program~shape_half_ring_2d->proc~create~2 + + + + + +program~shape_ring_2d + + +shape_ring_2d + + + + + +program~shape_ring_2d->proc~create~2 + + + + + +program~shape_tetragon + + +shape_tetragon + + + + + +program~shape_tetragon->proc~create~2 + + @@ -407,7 +482,7 @@

    Functions

    -

    private pure function compute_Xg_bspline_1d(f_Xt, f_knot, f_degree, f_nc, f_ng, f_Xc) result(f_Xg) +

    private pure function compute_Xg_bspline_2d(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_ng, f_Xc) result(f_Xg)

    @@ -433,14 +508,29 @@

    Arguments

    contiguous :: - f_Xt(:) + f_Xt(:,:) + + + + + + + + real(kind=rk), + +intent(in), + + contiguous + + :: + f_knot1(:) - + real(kind=rk), intent(in), @@ -448,7 +538,7 @@

    Arguments

    contiguous :: - f_knot(:) + f_knot2(:) @@ -463,7 +553,7 @@

    Arguments

    :: - f_degree + f_degree(2) @@ -478,7 +568,7 @@

    Arguments

    :: - f_nc + f_nc(2) @@ -493,7 +583,7 @@

    Arguments

    :: - f_ng + f_ng(2) @@ -526,7 +616,7 @@

    -

    private pure function compute_Xg_bspline_1d_1point(f_Xt, f_knot, f_degree, f_nc, f_Xc) result(f_Xg) +

    private pure function compute_Xg_bspline_2d_1point(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_Xc) result(f_Xg)

    @@ -547,19 +637,34 @@

    Arguments

    real(kind=rk), -intent(in) +intent(in), - + contiguous + + :: + f_Xt(:) + + + + + + + + real(kind=rk), + +intent(in), + + contiguous :: - f_Xt + f_knot1(:) - + real(kind=rk), intent(in), @@ -567,7 +672,7 @@

    Arguments

    contiguous :: - f_knot(:) + f_knot2(:) @@ -582,7 +687,7 @@

    Arguments

    :: - f_degree + f_degree(2) @@ -597,7 +702,7 @@

    Arguments

    :: - f_nc + f_nc(2) @@ -630,7 +735,7 @@

    -

    private pure function compute_Xg_nurbs_1d(f_Xt, f_knot, f_degree, f_nc, f_ng, f_Xc, f_Wc) result(f_Xg) +

    private pure function compute_Xg_nurbs_2d(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_ng, f_Xc, f_Wc) result(f_Xg)

    @@ -656,14 +761,29 @@

    Arguments

    contiguous :: - f_Xt(:) + f_Xt(:,:) + + + + + + + + real(kind=rk), + +intent(in), + + contiguous + + :: + f_knot1(:) - + real(kind=rk), intent(in), @@ -671,7 +791,7 @@

    Arguments

    contiguous :: - f_knot(:) + f_knot2(:) @@ -686,7 +806,7 @@

    Arguments

    :: - f_degree + f_degree(2) @@ -701,7 +821,7 @@

    Arguments

    :: - f_nc + f_nc(2) @@ -716,7 +836,7 @@

    Arguments

    :: - f_ng + f_ng(2) @@ -764,7 +884,7 @@

    -

    private pure function compute_Xg_nurbs_1d_1point(f_Xt, f_knot, f_degree, f_nc, f_Xc, f_Wc) result(f_Xg) +

    private pure function compute_Xg_nurbs_2d_1point(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_Xc, f_Wc) result(f_Xg)

    @@ -785,19 +905,34 @@

    Arguments

    real(kind=rk), -intent(in) +intent(in), - + contiguous + + :: + f_Xt(:) + + + + + + + + real(kind=rk), + +intent(in), + + contiguous :: - f_Xt + f_knot1(:) - + real(kind=rk), intent(in), @@ -805,7 +940,7 @@

    Arguments

    contiguous :: - f_knot(:) + f_knot2(:) @@ -820,7 +955,7 @@

    Arguments

    :: - f_degree + f_degree(2) @@ -835,7 +970,7 @@

    Arguments

    :: - f_nc + f_nc(2) @@ -901,7 +1036,7 @@

    Documentation generated by FORD - on 2024-06-22T18:18:26.744704

    + on 2024-06-22T18:21:15.937502


    diff --git a/interface/compute_xg~3.html b/interface/compute_xg~3.html index 3e31f10f6..6af12568c 100644 --- a/interface/compute_xg~3.html +++ b/interface/compute_xg~3.html @@ -77,20 +77,20 @@

    compute_Xg
  • 44 statements + title="

    0.7% of total for procedures.

    Including implementation: 42 statements, 0.7% of total for procedures.">42 statements
  • - Source File + Source File
  • @@ -163,238 +163,163 @@

    Called by

    - - + + interface~~compute_xg~3~~CalledByGraph - + interface~compute_xg~3 - -compute_Xg + +compute_Xg proc~cmp_xg~3 - - -nurbs_surface%cmp_Xg + + +nurbs_curve%cmp_Xg proc~cmp_xg~3->interface~compute_xg~3 - - + + proc~create~3 - - -nurbs_surface%create + + +nurbs_curve%create proc~create~3->interface~compute_xg~3 - - + + proc~nearest_point2~3 - - -nurbs_surface%nearest_point2 + + +nurbs_curve%nearest_point2 proc~nearest_point2~3->proc~cmp_xg~3 - - + + proc~nearest_point2~3->proc~create~3 - - + + - + -program~example3_surface - - -example3_surface +program~example1_curve + + +example1_curve - + -program~example3_surface->proc~create~3 - - +program~example1_curve->proc~create~3 + + - + -program~example_nurbs_surface - - -example_nurbs_surface +program~example_nurbs_curve + + +example_nurbs_curve - + -program~example_nurbs_surface->proc~create~3 - - +program~example_nurbs_curve->proc~create~3 + + - + -program~example_ppm1 - - -example_ppm1 +program~nearest_point_1d + + +nearest_point_1d - + -program~example_ppm1->proc~create~3 - - +program~nearest_point_1d->proc~create~3 + + - + + +program~nearest_point_1d->proc~nearest_point2~3 + + + + -program~example_ppm2 - - -example_ppm2 +program~shape_c_1d + + +shape_C_1d - + -program~example_ppm2->proc~create~3 - - +program~shape_c_1d->proc~create~3 + + - + -program~example_ppm3 - - -example_ppm3 +program~shape_circle + + +shape_circle - + -program~example_ppm3->proc~create~3 - - +program~shape_circle->proc~create~3 + + - + -program~nearest_point_2d - - -nearest_point_2d +program~shape_half_circle + + +shape_half_circle - + -program~nearest_point_2d->proc~create~3 - - - - - -program~nearest_point_2d->proc~nearest_point2~3 - - - - - -program~nearest_point_2d_bench - - -nearest_point_2d_bench - - - - - -program~nearest_point_2d_bench->proc~create~3 - - - - - -program~shape_c_2d - - -shape_C_2d - - - - - -program~shape_c_2d->proc~create~3 - - - - - -program~shape_half_ring_2d - - -shape_half_ring_2d - - - - - -program~shape_half_ring_2d->proc~create~3 - - - - - -program~shape_ring_2d - - -shape_ring_2d - - - - - -program~shape_ring_2d->proc~create~3 - - - - - -program~shape_tetragon - - -shape_tetragon - - - - - -program~shape_tetragon->proc~create~3 - - +program~shape_half_circle->proc~create~3 + + @@ -482,7 +407,7 @@

    Functions

    -

    private pure function compute_Xg_bspline_2d(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_ng, f_Xc) result(f_Xg) +

    private pure function compute_Xg_bspline_1d(f_Xt, f_knot, f_degree, f_nc, f_ng, f_Xc) result(f_Xg)

    @@ -508,29 +433,14 @@

    Arguments

    contiguous :: - f_Xt(:,:) - - - - - - - - real(kind=rk), - -intent(in), - - contiguous - - :: - f_knot1(:) + f_Xt(:) - + real(kind=rk), intent(in), @@ -538,7 +448,7 @@

    Arguments

    contiguous :: - f_knot2(:) + f_knot(:) @@ -553,14 +463,14 @@

    Arguments

    :: - f_degree(2) + f_degree - + integer, intent(in) @@ -568,7 +478,7 @@

    Arguments

    :: - f_nc(2) + f_nc @@ -583,7 +493,7 @@

    Arguments

    :: - f_ng(2) + f_ng @@ -616,7 +526,7 @@

    -

    private pure function compute_Xg_bspline_2d_1point(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_Xc) result(f_Xg) +

    private pure function compute_Xg_bspline_1d_1point(f_Xt, f_knot, f_degree, f_nc, f_Xc) result(f_Xg)

    @@ -637,34 +547,19 @@

    Arguments

    real(kind=rk), -intent(in), - - contiguous - - :: - f_Xt(:) - - - - - - - - real(kind=rk), - -intent(in), +intent(in) - contiguous + :: - f_knot1(:) + f_Xt - + real(kind=rk), intent(in), @@ -672,7 +567,7 @@

    Arguments

    contiguous :: - f_knot2(:) + f_knot(:) @@ -687,14 +582,14 @@

    Arguments

    :: - f_degree(2) + f_degree - + integer, intent(in) @@ -702,7 +597,7 @@

    Arguments

    :: - f_nc(2) + f_nc @@ -735,7 +630,7 @@

    -

    private pure function compute_Xg_nurbs_2d(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_ng, f_Xc, f_Wc) result(f_Xg) +

    private pure function compute_Xg_nurbs_1d(f_Xt, f_knot, f_degree, f_nc, f_ng, f_Xc, f_Wc) result(f_Xg)

    @@ -761,29 +656,14 @@

    Arguments

    contiguous :: - f_Xt(:,:) - - - - - - - - real(kind=rk), - -intent(in), - - contiguous - - :: - f_knot1(:) + f_Xt(:) - + real(kind=rk), intent(in), @@ -791,7 +671,7 @@

    Arguments

    contiguous :: - f_knot2(:) + f_knot(:) @@ -806,14 +686,14 @@

    Arguments

    :: - f_degree(2) + f_degree - + integer, intent(in) @@ -821,7 +701,7 @@

    Arguments

    :: - f_nc(2) + f_nc @@ -836,7 +716,7 @@

    Arguments

    :: - f_ng(2) + f_ng @@ -884,7 +764,7 @@

    -

    private pure function compute_Xg_nurbs_2d_1point(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_Xc, f_Wc) result(f_Xg) +

    private pure function compute_Xg_nurbs_1d_1point(f_Xt, f_knot, f_degree, f_nc, f_Xc, f_Wc) result(f_Xg)

    @@ -905,34 +785,19 @@

    Arguments

    real(kind=rk), -intent(in), - - contiguous - - :: - f_Xt(:) - - - - - - - - real(kind=rk), - -intent(in), +intent(in) - contiguous + :: - f_knot1(:) + f_Xt - + real(kind=rk), intent(in), @@ -940,7 +805,7 @@

    Arguments

    contiguous :: - f_knot2(:) + f_knot(:) @@ -955,14 +820,14 @@

    Arguments

    :: - f_degree(2) + f_degree - + integer, intent(in) @@ -970,7 +835,7 @@

    Arguments

    :: - f_nc(2) + f_nc @@ -1036,7 +901,7 @@

    Documentation generated by FORD - on 2024-06-22T18:18:26.744704

    + on 2024-06-22T18:21:15.937502


    diff --git a/interface/elemconn_c0.html b/interface/elemconn_c0.html index ffff7917e..82ad0069d 100644 --- a/interface/elemconn_c0.html +++ b/interface/elemconn_c0.html @@ -320,8 +320,8 @@

    Called by

    interface~elemconn_c0 - -elemConn_C0 + +elemConn_C0 @@ -335,38 +335,38 @@

    Called by

    proc~cmp_elem_xc_vis->interface~elemconn_c0 - - + + proc~cmp_elem_xc_vis~2 - - -nurbs_curve%cmp_elem_Xc_vis + + +nurbs_surface%cmp_elem_Xc_vis proc~cmp_elem_xc_vis~2->interface~elemconn_c0 - - + + proc~cmp_elem_xc_vis~3 - - -nurbs_surface%cmp_elem_Xc_vis + + +nurbs_curve%cmp_elem_Xc_vis proc~cmp_elem_xc_vis~3->interface~elemconn_c0 - - + + @@ -380,38 +380,38 @@

    Called by

    proc~cmp_elem_xg_vis->interface~elemconn_c0 - - + + proc~cmp_elem_xg_vis~2 - - -nurbs_curve%cmp_elem_Xg_vis + + +nurbs_surface%cmp_elem_Xg_vis proc~cmp_elem_xg_vis~2->interface~elemconn_c0 - - + + proc~cmp_elem_xg_vis~3 - - -nurbs_surface%cmp_elem_Xg_vis + + +nurbs_curve%cmp_elem_Xg_vis proc~cmp_elem_xg_vis~3->interface~elemconn_c0 - - + + @@ -431,32 +431,32 @@

    Called by

    proc~export_xc~2 - - -nurbs_curve%export_Xc + + +nurbs_surface%export_Xc proc~export_xc~2->proc~cmp_elem_xc_vis~2 - - + + proc~export_xc~3 - - -nurbs_surface%export_Xc + + +nurbs_curve%export_Xc proc~export_xc~3->proc~cmp_elem_xc_vis~3 - - + + @@ -476,74 +476,74 @@

    Called by

    proc~export_xg~2 - - -nurbs_curve%export_Xg + + +nurbs_surface%export_Xg proc~export_xg~2->proc~cmp_elem_xg_vis~2 - - + + proc~export_xg~3 - - -nurbs_surface%export_Xg + + +nurbs_curve%export_Xg proc~export_xg~3->proc~cmp_elem_xg_vis~3 - - + + program~example1_curve - -example1_curve + +example1_curve - - -program~example1_curve->proc~export_xc~2 - - + + +program~example1_curve->proc~export_xc~3 + + - - -program~example1_curve->proc~export_xg~2 - - + + +program~example1_curve->proc~export_xg~3 + + program~example3_surface - -example3_surface + +example3_surface - - -program~example3_surface->proc~export_xc~3 - - + + +program~example3_surface->proc~export_xc~2 + + - - -program~example3_surface->proc~export_xg~3 - - + + +program~example3_surface->proc~export_xg~2 + + @@ -570,43 +570,43 @@

    Called by

    program~example_nurbs_curve - -example_nurbs_curve + +example_nurbs_curve - - -program~example_nurbs_curve->proc~export_xc~2 - - + + +program~example_nurbs_curve->proc~export_xc~3 + + - - -program~example_nurbs_curve->proc~export_xg~2 - - + + +program~example_nurbs_curve->proc~export_xg~3 + + program~example_nurbs_surface - -example_nurbs_surface + +example_nurbs_surface - - -program~example_nurbs_surface->proc~export_xc~3 - - + + +program~example_nurbs_surface->proc~export_xc~2 + + - - -program~example_nurbs_surface->proc~export_xg~3 - - + + +program~example_nurbs_surface->proc~export_xg~2 + + @@ -654,43 +654,43 @@

    Called by

    program~shape_c_1d - -shape_C_1d + +shape_C_1d - - -program~shape_c_1d->proc~export_xc~2 - - + + +program~shape_c_1d->proc~export_xc~3 + + - - -program~shape_c_1d->proc~export_xg~2 - - + + +program~shape_c_1d->proc~export_xg~3 + + program~shape_c_2d - -shape_C_2d + +shape_C_2d - - -program~shape_c_2d->proc~export_xc~3 - - + + +program~shape_c_2d->proc~export_xc~2 + + - - -program~shape_c_2d->proc~export_xg~3 - - + + +program~shape_c_2d->proc~export_xg~2 + + @@ -717,64 +717,64 @@

    Called by

    program~shape_circle - -shape_circle + +shape_circle - - -program~shape_circle->proc~export_xc~2 - - + + +program~shape_circle->proc~export_xc~3 + + - - -program~shape_circle->proc~export_xg~2 - - + + +program~shape_circle->proc~export_xg~3 + + program~shape_half_circle - -shape_half_circle + +shape_half_circle - - -program~shape_half_circle->proc~export_xc~2 - - + + +program~shape_half_circle->proc~export_xc~3 + + - - -program~shape_half_circle->proc~export_xg~2 - - + + +program~shape_half_circle->proc~export_xg~3 + + program~shape_half_ring_2d - -shape_half_ring_2d + +shape_half_ring_2d - - -program~shape_half_ring_2d->proc~export_xc~3 - - + + +program~shape_half_ring_2d->proc~export_xc~2 + + - - -program~shape_half_ring_2d->proc~export_xg~3 - - + + +program~shape_half_ring_2d->proc~export_xg~2 + + @@ -822,22 +822,22 @@

    Called by

    program~shape_ring_2d - -shape_ring_2d + +shape_ring_2d - - -program~shape_ring_2d->proc~export_xc~3 - - + + +program~shape_ring_2d->proc~export_xc~2 + + - - -program~shape_ring_2d->proc~export_xg~3 - - + + +program~shape_ring_2d->proc~export_xg~2 + + @@ -864,22 +864,22 @@

    Called by

    program~shape_tetragon - -shape_tetragon + +shape_tetragon - - -program~shape_tetragon->proc~export_xc~3 - - + + +program~shape_tetragon->proc~export_xc~2 + + - - -program~shape_tetragon->proc~export_xg~3 - - + + +program~shape_tetragon->proc~export_xg~2 + + @@ -1011,7 +1011,7 @@

    Arguments

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

    Documentation generated by FORD - on 2024-06-22T18:18:26.744704

    + on 2024-06-22T18:21:15.937502


    diff --git a/interface/elemconn_cn.html b/interface/elemconn_cn.html index 07a511d61..118113683 100644 --- a/interface/elemconn_cn.html +++ b/interface/elemconn_cn.html @@ -341,24 +341,24 @@

    Called by

    proc~cmp_elem~2 - - -nurbs_curve%cmp_elem + + +nurbs_surface%cmp_elem proc~cmp_elem~2->interface~elemconn_cn - - + + proc~cmp_elem~3 - - -nurbs_surface%cmp_elem + + +nurbs_curve%cmp_elem @@ -509,7 +509,7 @@

    Arguments

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

    Arguments

    - + real(kind=rk), intent(in), @@ -554,7 +554,7 @@

    Arguments

    - + integer, intent(out), @@ -718,7 +718,7 @@

    Arguments

    - + integer, intent(out), @@ -942,7 +942,7 @@

    Arguments

    - + integer, intent(out), @@ -979,7 +979,7 @@

    Arguments

    Documentation generated by FORD - on 2024-06-22T18:18:26.744704

    + on 2024-06-22T18:21:15.937502


    diff --git a/interface/ndgrid.html b/interface/ndgrid.html index 0c125aefd..0a58a0ee9 100644 --- a/interface/ndgrid.html +++ b/interface/ndgrid.html @@ -322,18 +322,18 @@

    Called by

    - + -proc~basis_vector~3 - +proc~basis_vector~2 + nurbs_surface%basis_vector - + -proc~basis_vector~3->interface~ndgrid +proc~basis_vector~2->interface~ndgrid @@ -352,18 +352,18 @@

    Called by

    - + -proc~create~3 - +proc~create~2 + nurbs_surface%create - + -proc~create~3->interface~ndgrid +proc~create~2->interface~ndgrid @@ -382,18 +382,18 @@

    Called by

    - + -proc~derivative2_vector~3 - +proc~derivative2_vector~2 + nurbs_surface%derivative2_vector - + -proc~derivative2_vector~3->interface~ndgrid +proc~derivative2_vector~2->interface~ndgrid @@ -412,18 +412,18 @@

    Called by

    - + -proc~derivative_vector~3 - +proc~derivative_vector~2 + nurbs_surface%derivative_vector - + -proc~derivative_vector~3->interface~ndgrid +proc~derivative_vector~2->interface~ndgrid @@ -442,18 +442,18 @@

    Called by

    - + -none~derivative2~3 - +none~derivative2~2 + nurbs_surface%derivative2 - + -none~derivative2~3->proc~derivative2_vector~3 +none~derivative2~2->proc~derivative2_vector~2 @@ -478,24 +478,24 @@

    Called by

    - + -proc~nearest_point2~3 - +proc~nearest_point2~2 + nurbs_surface%nearest_point2 - + -proc~nearest_point2~3->proc~create~3 +proc~nearest_point2~2->proc~create~2 - + -proc~nearest_point2~3->none~derivative2~3 +proc~nearest_point2~2->none~derivative2~2 @@ -508,9 +508,9 @@

    Called by

    - + -program~example3_surface->proc~create~3 +program~example3_surface->proc~create~2 @@ -538,9 +538,9 @@

    Called by

    - + -program~example_nurbs_surface->proc~create~3 +program~example_nurbs_surface->proc~create~2 @@ -568,9 +568,9 @@

    Called by

    - + -program~example_ppm1->proc~create~3 +program~example_ppm1->proc~create~2 @@ -583,9 +583,9 @@

    Called by

    - + -program~example_ppm2->proc~create~3 +program~example_ppm2->proc~create~2 @@ -598,9 +598,9 @@

    Called by

    - + -program~example_ppm3->proc~create~3 +program~example_ppm3->proc~create~2 @@ -613,15 +613,15 @@

    Called by

    - + -program~nearest_point_2d->proc~create~3 +program~nearest_point_2d->proc~create~2 - + -program~nearest_point_2d->proc~nearest_point2~3 +program~nearest_point_2d->proc~nearest_point2~2 @@ -634,9 +634,9 @@

    Called by

    - + -program~nearest_point_2d_bench->proc~create~3 +program~nearest_point_2d_bench->proc~create~2 @@ -670,9 +670,9 @@

    Called by

    - + -program~shape_c_2d->proc~create~3 +program~shape_c_2d->proc~create~2 @@ -700,9 +700,9 @@

    Called by

    - + -program~shape_half_ring_2d->proc~create~3 +program~shape_half_ring_2d->proc~create~2 @@ -745,9 +745,9 @@

    Called by

    - + -program~shape_ring_2d->proc~create~3 +program~shape_ring_2d->proc~create~2 @@ -775,9 +775,9 @@

    Called by

    - + -program~shape_tetragon->proc~create~3 +program~shape_tetragon->proc~create~2 @@ -926,7 +926,7 @@

    Arguments

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

    Arguments

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

    Arguments

    Documentation generated by FORD - on 2024-06-22T18:18:26.744704

    + on 2024-06-22T18:21:15.937502


    diff --git a/interface/nearest_point_help_1d.html b/interface/nearest_point_help_1d.html index 9e6a59d7d..0233ca24b 100644 --- a/interface/nearest_point_help_1d.html +++ b/interface/nearest_point_help_1d.html @@ -162,33 +162,33 @@

    Called by

    nearest_point_help_1d - + -proc~nearest_point2~2 - +proc~nearest_point2~3 + nurbs_curve%nearest_point2 - + -proc~nearest_point2~2->interface~nearest_point_help_1d +proc~nearest_point2~3->interface~nearest_point_help_1d - + -proc~nearest_point~2 - +proc~nearest_point~3 + nurbs_curve%nearest_point - + -proc~nearest_point~2->interface~nearest_point_help_1d +proc~nearest_point~3->interface~nearest_point_help_1d @@ -201,15 +201,15 @@

    Called by

    - + -program~nearest_point_1d->proc~nearest_point2~2 +program~nearest_point_1d->proc~nearest_point2~3 - + -program~nearest_point_1d->proc~nearest_point~2 +program~nearest_point_1d->proc~nearest_point~3 @@ -315,7 +315,7 @@

    Arguments

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

    Arguments

    - + real(kind=rk), intent(in), @@ -345,7 +345,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -361,7 +361,7 @@

    Arguments

    -

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

    +

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


    @@ -383,7 +383,7 @@

    Return Value

    Documentation generated by FORD - on 2024-06-22T18:18:26.744704

    + on 2024-06-22T18:21:15.937502


    diff --git a/interface/nearest_point_help_2d.html b/interface/nearest_point_help_2d.html index dfe5df6ef..9851724db 100644 --- a/interface/nearest_point_help_2d.html +++ b/interface/nearest_point_help_2d.html @@ -162,33 +162,33 @@

    Called by

    nearest_point_help_2d - + -proc~nearest_point2~3 - +proc~nearest_point2~2 + nurbs_surface%nearest_point2 - + -proc~nearest_point2~3->interface~nearest_point_help_2d +proc~nearest_point2~2->interface~nearest_point_help_2d - + -proc~nearest_point~3 - +proc~nearest_point~2 + nurbs_surface%nearest_point - + -proc~nearest_point~3->interface~nearest_point_help_2d +proc~nearest_point~2->interface~nearest_point_help_2d @@ -201,15 +201,15 @@

    Called by

    - + -program~nearest_point_2d->proc~nearest_point2~3 +program~nearest_point_2d->proc~nearest_point2~2 - + -program~nearest_point_2d->proc~nearest_point~3 +program~nearest_point_2d->proc~nearest_point~2 @@ -222,9 +222,9 @@

    Called by

    - + -program~nearest_point_2d_bench->proc~nearest_point~3 +program~nearest_point_2d_bench->proc~nearest_point~2 @@ -330,7 +330,7 @@

    Arguments

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

    Arguments

    - + real(kind=rk), intent(in), @@ -360,7 +360,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -376,7 +376,7 @@

    Arguments

    -

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

    +

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


    @@ -398,7 +398,7 @@

    Return Value

    Documentation generated by FORD - on 2024-06-22T18:18:26.744704

    + on 2024-06-22T18:21:15.937502


    diff --git a/interface/nearest_point_help_3d.html b/interface/nearest_point_help_3d.html index 1a970ec8c..a18ac2f83 100644 --- a/interface/nearest_point_help_3d.html +++ b/interface/nearest_point_help_3d.html @@ -383,7 +383,7 @@

    Return Value re

    Documentation generated by FORD - on 2024-06-22T18:18:26.744704

    + on 2024-06-22T18:21:15.937502


    diff --git a/interface/unique.html b/interface/unique.html index 06da95be8..1519e7e31 100644 --- a/interface/unique.html +++ b/interface/unique.html @@ -325,24 +325,24 @@

    Called by

    proc~cmp_elem~2 - - -nurbs_curve%cmp_elem + + +nurbs_surface%cmp_elem proc~cmp_elem~2->interface~unique - - + + proc~cmp_elem~3 - - -nurbs_surface%cmp_elem + + +nurbs_curve%cmp_elem @@ -478,7 +478,7 @@

    Arguments

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

    Arguments

    - + real(kind=rk), intent(in), @@ -569,7 +569,7 @@

    Documentation generated by FORD - on 2024-06-22T18:18:26.744704

    + on 2024-06-22T18:21:15.937502


    diff --git a/lists/files.html b/lists/files.html index d25fb0169..7a0ff0b3f 100644 --- a/lists/files.html +++ b/lists/files.html @@ -738,7 +738,7 @@

    Documentation generated by FORD - on 2024-06-22T18:18:26.744704

    + on 2024-06-22T18:21:15.937502


    diff --git a/lists/modules.html b/lists/modules.html index 035c7151b..d41242f51 100644 --- a/lists/modules.html +++ b/lists/modules.html @@ -1510,7 +1510,7 @@

    Documentation generated by FORD - on 2024-06-22T18:18:26.744704

    + on 2024-06-22T18:21:15.937502


    diff --git a/lists/procedures.html b/lists/procedures.html index b598dab92..c3ff5607d 100644 --- a/lists/procedures.html +++ b/lists/procedures.html @@ -103,13 +103,13 @@

    Procedures

    basis_scalar - forcad_nurbs_curve + forcad_nurbs_surface Subroutine basis_scalar - forcad_nurbs_surface + forcad_nurbs_curve Subroutine @@ -121,13 +121,13 @@

    Procedures

    basis_vector - forcad_nurbs_curve + forcad_nurbs_surface Subroutine basis_vector - forcad_nurbs_surface + forcad_nurbs_curve Subroutine @@ -145,13 +145,13 @@

    Procedures

    cmp_degree - forcad_nurbs_curve + forcad_nurbs_surface Subroutine cmp_degree - forcad_nurbs_surface + forcad_nurbs_curve Subroutine @@ -169,13 +169,13 @@

    Procedures

    cmp_elem - forcad_nurbs_curve + forcad_nurbs_surface Function cmp_elem - forcad_nurbs_surface + forcad_nurbs_curve Function @@ -187,13 +187,13 @@

    Procedures

    cmp_elem_Xc_vis - forcad_nurbs_curve + forcad_nurbs_surface Function cmp_elem_Xc_vis - forcad_nurbs_surface + forcad_nurbs_curve Function @@ -205,13 +205,13 @@

    Procedures

    cmp_elem_Xg_vis - forcad_nurbs_curve + forcad_nurbs_surface Function cmp_elem_Xg_vis - forcad_nurbs_surface + forcad_nurbs_curve Function @@ -277,13 +277,13 @@

    Procedures

    cmp_nc - forcad_nurbs_curve + forcad_nurbs_surface Subroutine cmp_nc - forcad_nurbs_surface + forcad_nurbs_curve Subroutine @@ -295,13 +295,13 @@

    Procedures

    cmp_Xg - forcad_nurbs_curve + forcad_nurbs_surface Function cmp_Xg - forcad_nurbs_surface + forcad_nurbs_curve Function @@ -313,13 +313,13 @@

    Procedures

    compute_d2Tgc - forcad_nurbs_curve + forcad_nurbs_surface Interface compute_d2Tgc - forcad_nurbs_surface + forcad_nurbs_curve Interface @@ -403,13 +403,13 @@

    Procedures

    compute_dTgc - forcad_nurbs_curve + forcad_nurbs_surface Interface compute_dTgc - forcad_nurbs_surface + forcad_nurbs_curve Interface @@ -517,13 +517,13 @@

    Procedures

    compute_Tgc - forcad_nurbs_curve + forcad_nurbs_surface Interface compute_Tgc - forcad_nurbs_surface + forcad_nurbs_curve Interface @@ -607,13 +607,13 @@

    Procedures

    compute_Xg - forcad_nurbs_curve + forcad_nurbs_surface Interface compute_Xg - forcad_nurbs_surface + forcad_nurbs_curve Interface @@ -697,13 +697,13 @@

    Procedures

    create - forcad_nurbs_curve + forcad_nurbs_surface Subroutine create - forcad_nurbs_surface + forcad_nurbs_curve Subroutine @@ -715,13 +715,13 @@

    Procedures

    derivative2_scalar - forcad_nurbs_curve + forcad_nurbs_surface Subroutine derivative2_scalar - forcad_nurbs_surface + forcad_nurbs_curve Subroutine @@ -733,13 +733,13 @@

    Procedures

    derivative2_vector - forcad_nurbs_curve + forcad_nurbs_surface Subroutine derivative2_vector - forcad_nurbs_surface + forcad_nurbs_curve Subroutine @@ -751,13 +751,13 @@

    Procedures

    derivative_scalar - forcad_nurbs_curve + forcad_nurbs_surface Subroutine derivative_scalar - forcad_nurbs_surface + forcad_nurbs_curve Subroutine @@ -769,13 +769,13 @@

    Procedures

    derivative_vector - forcad_nurbs_curve + forcad_nurbs_surface Subroutine derivative_vector - forcad_nurbs_surface + forcad_nurbs_curve Subroutine @@ -799,13 +799,13 @@

    Procedures

    elevate_degree - forcad_nurbs_curve + forcad_nurbs_surface Subroutine elevate_degree - forcad_nurbs_surface + forcad_nurbs_curve Subroutine @@ -823,13 +823,13 @@

    Procedures

    export_Xc - forcad_nurbs_curve + forcad_nurbs_surface Subroutine export_Xc - forcad_nurbs_surface + forcad_nurbs_curve Subroutine @@ -841,13 +841,13 @@

    Procedures

    export_Xg - forcad_nurbs_curve + forcad_nurbs_surface Subroutine export_Xg - forcad_nurbs_surface + forcad_nurbs_curve Subroutine @@ -865,13 +865,13 @@

    Procedures

    finalize - forcad_nurbs_curve + forcad_nurbs_surface Subroutine finalize - forcad_nurbs_surface + forcad_nurbs_curve Subroutine @@ -883,7 +883,7 @@

    Procedures

    generate_Xc - example3_surface + example_nurbs_curve Function @@ -895,13 +895,13 @@

    Procedures

    generate_Xc - example3_volume + example3_surface Function generate_Xc - example_nurbs_curve + example3_volume Function @@ -919,13 +919,13 @@

    Procedures

    get_continuity - forcad_nurbs_curve + forcad_nurbs_surface Function get_continuity - forcad_nurbs_surface + forcad_nurbs_curve Function @@ -967,13 +967,13 @@

    Procedures

    get_elem - forcad_nurbs_curve + forcad_nurbs_surface Function get_elem - forcad_nurbs_surface + forcad_nurbs_curve Function @@ -985,13 +985,13 @@

    Procedures

    get_elem_Xc_vis - forcad_nurbs_curve + forcad_nurbs_surface Function get_elem_Xc_vis - forcad_nurbs_surface + forcad_nurbs_curve Function @@ -1003,13 +1003,13 @@

    Procedures

    get_elem_Xg_vis - forcad_nurbs_curve + forcad_nurbs_surface Function get_elem_Xg_vis - forcad_nurbs_surface + forcad_nurbs_curve Function @@ -1021,13 +1021,13 @@

    Procedures

    get_knot_all - forcad_nurbs_curve + forcad_nurbs_surface Function get_knot_all - forcad_nurbs_surface + forcad_nurbs_curve Function @@ -1039,13 +1039,13 @@

    Procedures

    get_knoti - forcad_nurbs_curve + forcad_nurbs_surface Function get_knoti - forcad_nurbs_surface + forcad_nurbs_curve Function @@ -1057,13 +1057,13 @@

    Procedures

    get_multiplicity - forcad_nurbs_curve + forcad_nurbs_surface Function get_multiplicity - forcad_nurbs_surface + forcad_nurbs_curve Function @@ -1075,13 +1075,13 @@

    Procedures

    get_nc - forcad_nurbs_curve + forcad_nurbs_surface Function get_nc - forcad_nurbs_surface + forcad_nurbs_curve Function @@ -1093,13 +1093,13 @@

    Procedures

    get_ng - forcad_nurbs_curve + forcad_nurbs_surface Function get_ng - forcad_nurbs_surface + forcad_nurbs_curve Function @@ -1111,13 +1111,13 @@

    Procedures

    get_Wc_all - forcad_nurbs_curve + forcad_nurbs_surface Function get_Wc_all - forcad_nurbs_surface + forcad_nurbs_curve Function @@ -1129,13 +1129,13 @@

    Procedures

    get_Wci - forcad_nurbs_curve + forcad_nurbs_surface Function get_Wci - forcad_nurbs_surface + forcad_nurbs_curve Function @@ -1147,13 +1147,13 @@

    Procedures

    get_Xc_all - forcad_nurbs_curve + forcad_nurbs_surface Function get_Xc_all - forcad_nurbs_surface + forcad_nurbs_curve Function @@ -1165,13 +1165,13 @@

    Procedures

    get_Xci - forcad_nurbs_curve + forcad_nurbs_surface Function get_Xci - forcad_nurbs_surface + forcad_nurbs_curve Function @@ -1183,13 +1183,13 @@

    Procedures

    get_Xcid - forcad_nurbs_curve + forcad_nurbs_surface Function get_Xcid - forcad_nurbs_surface + forcad_nurbs_curve Function @@ -1201,13 +1201,13 @@

    Procedures

    get_Xg_all - forcad_nurbs_curve + forcad_nurbs_surface Function get_Xg_all - forcad_nurbs_surface + forcad_nurbs_curve Function @@ -1219,13 +1219,13 @@

    Procedures

    get_Xgi - forcad_nurbs_curve + forcad_nurbs_surface Function get_Xgi - forcad_nurbs_surface + forcad_nurbs_curve Function @@ -1237,13 +1237,13 @@

    Procedures

    get_Xgid - forcad_nurbs_curve + forcad_nurbs_surface Function get_Xgid - forcad_nurbs_surface + forcad_nurbs_curve Function @@ -1255,13 +1255,13 @@

    Procedures

    get_Xt - forcad_nurbs_curve + forcad_nurbs_surface Function get_Xt - forcad_nurbs_surface + forcad_nurbs_curve Function @@ -1285,13 +1285,13 @@

    Procedures

    insert_knots - forcad_nurbs_curve + forcad_nurbs_surface Subroutine insert_knots - forcad_nurbs_surface + forcad_nurbs_curve Subroutine @@ -1303,13 +1303,13 @@

    Procedures

    is_rational - forcad_nurbs_curve + forcad_nurbs_surface Function is_rational - forcad_nurbs_surface + forcad_nurbs_curve Function @@ -1339,13 +1339,13 @@

    Procedures

    modify_Wc - forcad_nurbs_curve + forcad_nurbs_surface Subroutine modify_Wc - forcad_nurbs_surface + forcad_nurbs_curve Subroutine @@ -1357,13 +1357,13 @@

    Procedures

    modify_Xc - forcad_nurbs_curve + forcad_nurbs_surface Subroutine modify_Xc - forcad_nurbs_surface + forcad_nurbs_curve Subroutine @@ -1393,13 +1393,13 @@

    Procedures

    nearest_point - forcad_nurbs_curve + forcad_nurbs_surface Subroutine nearest_point - forcad_nurbs_surface + forcad_nurbs_curve Subroutine @@ -1411,13 +1411,13 @@

    Procedures

    nearest_point2 - forcad_nurbs_curve + forcad_nurbs_surface Subroutine nearest_point2 - forcad_nurbs_surface + forcad_nurbs_curve Subroutine @@ -1471,13 +1471,13 @@

    Procedures

    remove_knots - forcad_nurbs_curve + forcad_nurbs_surface Subroutine remove_knots - forcad_nurbs_surface + forcad_nurbs_curve Subroutine @@ -1501,13 +1501,13 @@

    Procedures

    rotate_Xc - forcad_nurbs_curve + forcad_nurbs_surface Subroutine rotate_Xc - forcad_nurbs_surface + forcad_nurbs_curve Subroutine @@ -1519,13 +1519,13 @@

    Procedures

    rotate_Xg - forcad_nurbs_curve + forcad_nurbs_surface Subroutine rotate_Xg - forcad_nurbs_surface + forcad_nurbs_curve Subroutine @@ -1543,15 +1543,15 @@

    Procedures

    set1 - forcad_nurbs_curve + forcad_nurbs_surface Subroutine -

    Set knot vector, control points and weights for the NURBS curve object.

    +

    Set knot vectors, control points and weights for the NURBS surface object.

    set1 - forcad_nurbs_surface + forcad_nurbs_curve Subroutine -

    Set knot vectors, control points and weights for the NURBS surface object.

    +

    Set knot vector, control points and weights for the NURBS curve object.

    set2 @@ -1561,15 +1561,15 @@

    Procedures

    set2 - forcad_nurbs_curve + forcad_nurbs_surface Subroutine -

    Set NURBS curve using nodes of parameter space (Xth), degree, continuity, control points and weights.

    +

    Set NURBS surface using nodes of parameter space, degree, continuity, control points and weights

    set2 - forcad_nurbs_surface + forcad_nurbs_curve Subroutine -

    Set NURBS surface using nodes of parameter space, degree, continuity, control points and weights

    +

    Set NURBS curve using nodes of parameter space (Xth), degree, continuity, control points and weights.

    set3 @@ -1579,15 +1579,15 @@

    Procedures

    set3 - forcad_nurbs_curve + forcad_nurbs_surface Subroutine -

    Set Bezier or Rational Bezier curve using control points and weights.

    +

    Set Bezier or Rational Bezier surface using control points and weights.

    set3 - forcad_nurbs_surface + forcad_nurbs_curve Subroutine -

    Set Bezier or Rational Bezier surface using control points and weights.

    +

    Set Bezier or Rational Bezier curve using control points and weights.

    set_C @@ -1597,13 +1597,13 @@

    Procedures

    set_C - forcad_nurbs_curve + forcad_nurbs_surface Subroutine set_C - forcad_nurbs_surface + forcad_nurbs_curve Subroutine @@ -1621,13 +1621,13 @@

    Procedures

    set_elem - forcad_nurbs_curve + forcad_nurbs_surface Subroutine set_elem - forcad_nurbs_surface + forcad_nurbs_curve Subroutine @@ -1639,13 +1639,13 @@

    Procedures

    set_elem_Xc_vis - forcad_nurbs_curve + forcad_nurbs_surface Subroutine set_elem_Xc_vis - forcad_nurbs_surface + forcad_nurbs_curve Subroutine @@ -1657,13 +1657,13 @@

    Procedures

    set_elem_Xg_vis - forcad_nurbs_curve + forcad_nurbs_surface Subroutine set_elem_Xg_vis - forcad_nurbs_surface + forcad_nurbs_curve Subroutine @@ -1717,13 +1717,13 @@

    Procedures

    show - forcad_nurbs_curve + forcad_nurbs_surface Subroutine show - forcad_nurbs_surface + forcad_nurbs_curve Subroutine @@ -1741,13 +1741,13 @@

    Procedures

    translate_Xc - forcad_nurbs_curve + forcad_nurbs_surface Subroutine translate_Xc - forcad_nurbs_surface + forcad_nurbs_curve Subroutine @@ -1759,13 +1759,13 @@

    Procedures

    translate_Xg - forcad_nurbs_curve + forcad_nurbs_surface Subroutine translate_Xg - forcad_nurbs_surface + forcad_nurbs_curve Subroutine @@ -1794,17 +1794,17 @@

    Procedures

    - - + + call~~graph~~CallGraph - + interface~compute_d2tgc - -compute_d2Tgc + +compute_d2Tgc @@ -1812,8 +1812,8 @@

    Procedures

    interface~compute_d2tgc~2 - -compute_d2Tgc + +compute_d2Tgc @@ -1821,8 +1821,8 @@

    Procedures

    interface~compute_d2tgc~3 - -compute_d2Tgc + +compute_d2Tgc @@ -1830,8 +1830,8 @@

    Procedures

    interface~compute_dtgc - -compute_dTgc + +compute_dTgc @@ -1839,8 +1839,8 @@

    Procedures

    interface~compute_dtgc~2 - -compute_dTgc + +compute_dTgc @@ -1848,8 +1848,8 @@

    Procedures

    interface~compute_dtgc~3 - -compute_dTgc + +compute_dTgc @@ -1857,8 +1857,8 @@

    Procedures

    interface~compute_multiplicity - -compute_multiplicity + +compute_multiplicity @@ -1866,38 +1866,38 @@

    Procedures

    proc~compute_multiplicity1 - -compute_multiplicity1 + +compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 - - + + proc~compute_multiplicity2 - -compute_multiplicity2 + +compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 - - + + interface~compute_tgc - -compute_Tgc + +compute_Tgc @@ -1905,8 +1905,8 @@

    Procedures

    interface~compute_tgc~2 - -compute_Tgc + +compute_Tgc @@ -1914,8 +1914,8 @@

    Procedures

    interface~compute_tgc~3 - -compute_Tgc + +compute_Tgc @@ -1923,8 +1923,8 @@

    Procedures

    interface~compute_xg - -compute_Xg + +compute_Xg @@ -1932,8 +1932,8 @@

    Procedures

    interface~compute_xg~2 - -compute_Xg + +compute_Xg @@ -1941,8 +1941,8 @@

    Procedures

    interface~compute_xg~3 - -compute_Xg + +compute_Xg @@ -1950,8 +1950,8 @@

    Procedures

    interface~elemconn_c0 - -elemConn_C0 + +elemConn_C0 @@ -1959,53 +1959,53 @@

    Procedures

    proc~cmp_elemconn_c0_l - -cmp_elemConn_C0_L + +cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l - - + + proc~cmp_elemconn_c0_s - -cmp_elemConn_C0_S + +cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s - - + + proc~cmp_elemconn_c0_v - -cmp_elemConn_C0_V + +cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v - - + + interface~elemconn_cn - -elemConn_Cn + +elemConn_Cn @@ -2013,53 +2013,53 @@

    Procedures

    proc~cmp_elemconn_cn_l - -cmp_elemConn_Cn_L + +cmp_elemConn_Cn_L interface~elemconn_cn->proc~cmp_elemconn_cn_l - - + + proc~cmp_elemconn_cn_s - -cmp_elemConn_Cn_S + +cmp_elemConn_Cn_S interface~elemconn_cn->proc~cmp_elemconn_cn_s - - + + proc~cmp_elemconn_cn_v - -cmp_elemConn_Cn_V + +cmp_elemConn_Cn_V interface~elemconn_cn->proc~cmp_elemconn_cn_v - - + + interface~ndgrid - -ndgrid + +ndgrid @@ -2067,38 +2067,38 @@

    Procedures

    proc~ndgrid2 - -ndgrid2 + +ndgrid2 interface~ndgrid->proc~ndgrid2 - - + + proc~ndgrid3 - -ndgrid3 + +ndgrid3 interface~ndgrid->proc~ndgrid3 - - + + interface~nearest_point_help_1d - -nearest_point_help_1d + +nearest_point_help_1d @@ -2106,8 +2106,8 @@

    Procedures

    interface~nearest_point_help_2d - -nearest_point_help_2d + +nearest_point_help_2d @@ -2115,8 +2115,8 @@

    Procedures

    interface~nearest_point_help_3d - -nearest_point_help_3d + +nearest_point_help_3d @@ -2124,8 +2124,8 @@

    Procedures

    interface~unique - -unique + +unique @@ -2133,38 +2133,38 @@

    Procedures

    proc~unique_integer - -unique_integer + +unique_integer interface~unique->proc~unique_integer - - + + proc~unique_real - -unique_real + +unique_real interface~unique->proc~unique_real - - + + none~basis - -nurbs_volume%basis + +nurbs_volume%basis @@ -2172,116 +2172,116 @@

    Procedures

    proc~basis_scalar - -nurbs_volume%basis_scalar + +nurbs_volume%basis_scalar none~basis->proc~basis_scalar - - + + proc~basis_vector - -nurbs_volume%basis_vector + +nurbs_volume%basis_vector none~basis->proc~basis_vector - - + + none~basis~2 - - -nurbs_curve%basis + + +nurbs_surface%basis proc~basis_scalar~2 - - -nurbs_curve%basis_scalar + + +nurbs_surface%basis_scalar none~basis~2->proc~basis_scalar~2 - - + + proc~basis_vector~2 - - -nurbs_curve%basis_vector + + +nurbs_surface%basis_vector none~basis~2->proc~basis_vector~2 - - + + none~basis~3 - - -nurbs_surface%basis + + +nurbs_curve%basis proc~basis_scalar~3 - - -nurbs_surface%basis_scalar + + +nurbs_curve%basis_scalar none~basis~3->proc~basis_scalar~3 - - + + proc~basis_vector~3 - - -nurbs_surface%basis_vector + + +nurbs_curve%basis_vector none~basis~3->proc~basis_vector~3 - - + + none~derivative - -nurbs_volume%derivative + +nurbs_volume%derivative @@ -2289,38 +2289,38 @@

    Procedures

    proc~derivative_scalar - -nurbs_volume%derivative_scalar + +nurbs_volume%derivative_scalar none~derivative->proc~derivative_scalar - - + + proc~derivative_vector - -nurbs_volume%derivative_vector + +nurbs_volume%derivative_vector none~derivative->proc~derivative_vector - - + + none~derivative2 - -nurbs_volume%derivative2 + +nurbs_volume%derivative2 @@ -2328,194 +2328,194 @@

    Procedures

    proc~derivative2_scalar - -nurbs_volume%derivative2_scalar + +nurbs_volume%derivative2_scalar none~derivative2->proc~derivative2_scalar - - + + proc~derivative2_vector - -nurbs_volume%derivative2_vector + +nurbs_volume%derivative2_vector none~derivative2->proc~derivative2_vector - - + + none~derivative2~2 - - -nurbs_curve%derivative2 + + +nurbs_surface%derivative2 proc~derivative2_scalar~2 - - -nurbs_curve%derivative2_scalar + + +nurbs_surface%derivative2_scalar none~derivative2~2->proc~derivative2_scalar~2 - - + + proc~derivative2_vector~2 - - -nurbs_curve%derivative2_vector + + +nurbs_surface%derivative2_vector none~derivative2~2->proc~derivative2_vector~2 - - + + none~derivative2~3 - - -nurbs_surface%derivative2 + + +nurbs_curve%derivative2 proc~derivative2_scalar~3 - - -nurbs_surface%derivative2_scalar + + +nurbs_curve%derivative2_scalar none~derivative2~3->proc~derivative2_scalar~3 - - + + proc~derivative2_vector~3 - - -nurbs_surface%derivative2_vector + + +nurbs_curve%derivative2_vector none~derivative2~3->proc~derivative2_vector~3 - - + + none~derivative~2 - - -nurbs_curve%derivative + + +nurbs_surface%derivative proc~derivative_scalar~2 - - -nurbs_curve%derivative_scalar + + +nurbs_surface%derivative_scalar none~derivative~2->proc~derivative_scalar~2 - - + + proc~derivative_vector~2 - - -nurbs_curve%derivative_vector + + +nurbs_surface%derivative_vector none~derivative~2->proc~derivative_vector~2 - - + + none~derivative~3 - - -nurbs_surface%derivative + + +nurbs_curve%derivative proc~derivative_scalar~3 - - -nurbs_surface%derivative_scalar + + +nurbs_curve%derivative_scalar none~derivative~3->proc~derivative_scalar~3 - - + + proc~derivative_vector~3 - - -nurbs_surface%derivative_vector + + +nurbs_curve%derivative_vector none~derivative~3->proc~derivative_vector~3 - - + + none~get_degree - -nurbs_volume%get_degree + +nurbs_volume%get_degree @@ -2523,38 +2523,38 @@

    Procedures

    proc~get_degree_all - -nurbs_volume%get_degree_all + +nurbs_volume%get_degree_all none~get_degree->proc~get_degree_all - - + + proc~get_degree_dir - -nurbs_volume%get_degree_dir + +nurbs_volume%get_degree_dir none~get_degree->proc~get_degree_dir - - + + - + -none~get_degree~3 - - -nurbs_surface%get_degree +none~get_degree~2 + + +nurbs_surface%get_degree @@ -2562,38 +2562,38 @@

    Procedures

    proc~get_degree_all~2 - -nurbs_surface%get_degree_all + +nurbs_surface%get_degree_all - + -none~get_degree~3->proc~get_degree_all~2 - - +none~get_degree~2->proc~get_degree_all~2 + + proc~get_degree_dir~2 - -nurbs_surface%get_degree_dir + +nurbs_surface%get_degree_dir - + -none~get_degree~3->proc~get_degree_dir~2 - - +none~get_degree~2->proc~get_degree_dir~2 + + none~get_knot - -nurbs_volume%get_knot + +nurbs_volume%get_knot @@ -2601,116 +2601,116 @@

    Procedures

    proc~get_knot_all - -nurbs_volume%get_knot_all + +nurbs_volume%get_knot_all none~get_knot->proc~get_knot_all - - + + proc~get_knoti - -nurbs_volume%get_knoti + +nurbs_volume%get_knoti none~get_knot->proc~get_knoti - - + + none~get_knot~2 - - -nurbs_curve%get_knot + + +nurbs_surface%get_knot proc~get_knot_all~2 - - -nurbs_curve%get_knot_all + + +nurbs_surface%get_knot_all none~get_knot~2->proc~get_knot_all~2 - - + + proc~get_knoti~2 - - -nurbs_curve%get_knoti + + +nurbs_surface%get_knoti none~get_knot~2->proc~get_knoti~2 - - + + none~get_knot~3 - - -nurbs_surface%get_knot + + +nurbs_curve%get_knot proc~get_knot_all~3 - - -nurbs_surface%get_knot_all + + +nurbs_curve%get_knot_all none~get_knot~3->proc~get_knot_all~3 - - + + proc~get_knoti~3 - - -nurbs_surface%get_knoti + + +nurbs_curve%get_knoti none~get_knot~3->proc~get_knoti~3 - - + + none~get_wc - -nurbs_volume%get_Wc + +nurbs_volume%get_Wc @@ -2718,116 +2718,116 @@

    Procedures

    proc~get_wc_all - -nurbs_volume%get_Wc_all + +nurbs_volume%get_Wc_all none~get_wc->proc~get_wc_all - - + + proc~get_wci - -nurbs_volume%get_Wci + +nurbs_volume%get_Wci none~get_wc->proc~get_wci - - + + none~get_wc~2 - - -nurbs_curve%get_Wc + + +nurbs_surface%get_Wc proc~get_wc_all~2 - - -nurbs_curve%get_Wc_all + + +nurbs_surface%get_Wc_all none~get_wc~2->proc~get_wc_all~2 - - + + proc~get_wci~2 - - -nurbs_curve%get_Wci + + +nurbs_surface%get_Wci none~get_wc~2->proc~get_wci~2 - - + + none~get_wc~3 - - -nurbs_surface%get_Wc + + +nurbs_curve%get_Wc proc~get_wc_all~3 - - -nurbs_surface%get_Wc_all + + +nurbs_curve%get_Wc_all none~get_wc~3->proc~get_wc_all~3 - - + + proc~get_wci~3 - - -nurbs_surface%get_Wci + + +nurbs_curve%get_Wci none~get_wc~3->proc~get_wci~3 - - + + none~get_xc - -nurbs_volume%get_Xc + +nurbs_volume%get_Xc @@ -2835,161 +2835,161 @@

    Procedures

    proc~get_xc_all - -nurbs_volume%get_Xc_all + +nurbs_volume%get_Xc_all none~get_xc->proc~get_xc_all - - + + proc~get_xci - -nurbs_volume%get_Xci + +nurbs_volume%get_Xci none~get_xc->proc~get_xci - - + + proc~get_xcid - -nurbs_volume%get_Xcid + +nurbs_volume%get_Xcid none~get_xc->proc~get_xcid - - + + none~get_xc~2 - - -nurbs_curve%get_Xc + + +nurbs_surface%get_Xc proc~get_xc_all~2 - - -nurbs_curve%get_Xc_all + + +nurbs_surface%get_Xc_all none~get_xc~2->proc~get_xc_all~2 - - + + proc~get_xcid~2 - - -nurbs_curve%get_Xcid + + +nurbs_surface%get_Xcid none~get_xc~2->proc~get_xcid~2 - - + + proc~get_xci~2 - - -nurbs_curve%get_Xci + + +nurbs_surface%get_Xci none~get_xc~2->proc~get_xci~2 - - + + none~get_xc~3 - - -nurbs_surface%get_Xc + + +nurbs_curve%get_Xc proc~get_xc_all~3 - - -nurbs_surface%get_Xc_all + + +nurbs_curve%get_Xc_all none~get_xc~3->proc~get_xc_all~3 - - + + proc~get_xcid~3 - - -nurbs_surface%get_Xcid + + +nurbs_curve%get_Xcid none~get_xc~3->proc~get_xcid~3 - - + + proc~get_xci~3 - - -nurbs_surface%get_Xci + + +nurbs_curve%get_Xci none~get_xc~3->proc~get_xci~3 - - + + none~get_xg - -nurbs_volume%get_Xg + +nurbs_volume%get_Xg @@ -2997,161 +2997,161 @@

    Procedures

    proc~get_xg_all - -nurbs_volume%get_Xg_all + +nurbs_volume%get_Xg_all none~get_xg->proc~get_xg_all - - + + proc~get_xgi - -nurbs_volume%get_Xgi + +nurbs_volume%get_Xgi none~get_xg->proc~get_xgi - - + + proc~get_xgid - -nurbs_volume%get_Xgid + +nurbs_volume%get_Xgid none~get_xg->proc~get_xgid - - + + none~get_xg~2 - - -nurbs_curve%get_Xg + + +nurbs_surface%get_Xg proc~get_xg_all~2 - - -nurbs_curve%get_Xg_all + + +nurbs_surface%get_Xg_all none~get_xg~2->proc~get_xg_all~2 - - + + proc~get_xgid~2 - - -nurbs_curve%get_Xgid + + +nurbs_surface%get_Xgid none~get_xg~2->proc~get_xgid~2 - - + + proc~get_xgi~2 - - -nurbs_curve%get_Xgi + + +nurbs_surface%get_Xgi none~get_xg~2->proc~get_xgi~2 - - + + none~get_xg~3 - - -nurbs_surface%get_Xg + + +nurbs_curve%get_Xg proc~get_xg_all~3 - - -nurbs_surface%get_Xg_all + + +nurbs_curve%get_Xg_all none~get_xg~3->proc~get_xg_all~3 - - + + proc~get_xgid~3 - - -nurbs_surface%get_Xgid + + +nurbs_curve%get_Xgid none~get_xg~3->proc~get_xgid~3 - - + + proc~get_xgi~3 - - -nurbs_surface%get_Xgi + + +nurbs_curve%get_Xgi none~get_xg~3->proc~get_xgi~3 - - + + none~set - -nurbs_volume%set + +nurbs_volume%set @@ -3159,161 +3159,161 @@

    Procedures

    proc~set1 - -nurbs_volume%set1 + +nurbs_volume%set1 none~set->proc~set1 - - + + proc~set2 - -nurbs_volume%set2 + +nurbs_volume%set2 none~set->proc~set2 - - + + proc~set3 - -nurbs_volume%set3 + +nurbs_volume%set3 none~set->proc~set3 - - + + none~set~2 - - -nurbs_curve%set + + +nurbs_surface%set proc~set1~2 - - -nurbs_curve%set1 + + +nurbs_surface%set1 none~set~2->proc~set1~2 - - + + proc~set2~2 - - -nurbs_curve%set2 + + +nurbs_surface%set2 none~set~2->proc~set2~2 - - + + proc~set3~2 - - -nurbs_curve%set3 + + +nurbs_surface%set3 none~set~2->proc~set3~2 - - + + none~set~3 - - -nurbs_surface%set + + +nurbs_curve%set proc~set1~3 - - -nurbs_surface%set1 + + +nurbs_curve%set1 none~set~3->proc~set1~3 - - + + proc~set2~3 - - -nurbs_surface%set2 + + +nurbs_curve%set2 none~set~3->proc~set2~3 - - + + proc~set3~3 - - -nurbs_surface%set3 + + +nurbs_curve%set3 none~set~3->proc~set3~3 - - + + proc~basis_bernstein - -basis_bernstein + +basis_bernstein @@ -3339,128 +3339,128 @@

    Procedures

    proc~basis_bspline_der - -basis_bspline_der + +basis_bspline_der proc~basis_scalar->interface~compute_tgc - - + + proc~is_rational - -nurbs_volume%is_rational + +nurbs_volume%is_rational proc~basis_scalar->proc~is_rational - - + + proc~basis_scalar~2->interface~compute_tgc~2 - - + + proc~is_rational~2 - - -nurbs_curve%is_rational + + +nurbs_surface%is_rational proc~basis_scalar~2->proc~is_rational~2 - - + + proc~basis_scalar~3->interface~compute_tgc~3 - - + + proc~is_rational~3 - - -nurbs_surface%is_rational + + +nurbs_curve%is_rational proc~basis_scalar~3->proc~is_rational~3 - - + + proc~basis_vector->interface~compute_tgc - - + + proc~basis_vector->interface~ndgrid - - + + proc~basis_vector->proc~is_rational - - + + proc~basis_vector~2->interface~compute_tgc~2 - - + + - + -proc~basis_vector~2->proc~is_rational~2 - - +proc~basis_vector~2->interface~ndgrid + + - + -proc~basis_vector~3->interface~compute_tgc~3 - - +proc~basis_vector~2->proc~is_rational~2 + + - + -proc~basis_vector~3->interface~ndgrid - - +proc~basis_vector~3->interface~compute_tgc~3 + + proc~basis_vector~3->proc~is_rational~3 - - + + proc~bincoeff - -bincoeff + +bincoeff @@ -3468,23 +3468,23 @@

    Procedures

    proc~factln - -factln + +factln proc~bincoeff->proc~factln - - + + proc~cmp_degree - -nurbs_volume%cmp_degree + +nurbs_volume%cmp_degree @@ -3492,197 +3492,197 @@

    Procedures

    proc~get_multiplicity - -nurbs_volume%get_multiplicity + +nurbs_volume%get_multiplicity proc~cmp_degree->proc~get_multiplicity - - + + proc~cmp_degreeface - -nurbs_volume%cmp_degreeFace + +nurbs_volume%cmp_degreeFace proc~cmp_degree~2 - - -nurbs_curve%cmp_degree + + +nurbs_surface%cmp_degree proc~get_multiplicity~2 - - -nurbs_curve%get_multiplicity + + +nurbs_surface%get_multiplicity proc~cmp_degree~2->proc~get_multiplicity~2 - - + + proc~cmp_degree~3 - - -nurbs_surface%cmp_degree + + +nurbs_curve%cmp_degree proc~get_multiplicity~3 - - -nurbs_surface%get_multiplicity + + +nurbs_curve%get_multiplicity proc~cmp_degree~3->proc~get_multiplicity~3 - - + + proc~cmp_elem - -nurbs_volume%cmp_elem + +nurbs_volume%cmp_elem proc~cmp_elem->interface~elemconn_cn - - + + proc~cmp_elem->interface~unique - - + + proc~cmp_elem->proc~get_multiplicity - - + + proc~cmp_elem_xc_vis - -nurbs_volume%cmp_elem_Xc_vis + +nurbs_volume%cmp_elem_Xc_vis proc~cmp_elem_xc_vis->interface~elemconn_c0 - - + + proc~cmp_elem_xc_vis~2 - - -nurbs_curve%cmp_elem_Xc_vis + + +nurbs_surface%cmp_elem_Xc_vis proc~cmp_elem_xc_vis~2->interface~elemconn_c0 - - + + proc~cmp_elem_xc_vis~3 - - -nurbs_surface%cmp_elem_Xc_vis + + +nurbs_curve%cmp_elem_Xc_vis proc~cmp_elem_xc_vis~3->interface~elemconn_c0 - - + + proc~cmp_elem_xg_vis - -nurbs_volume%cmp_elem_Xg_vis + +nurbs_volume%cmp_elem_Xg_vis proc~cmp_elem_xg_vis->interface~elemconn_c0 - - + + proc~cmp_elem_xg_vis~2 - - -nurbs_curve%cmp_elem_Xg_vis + + +nurbs_surface%cmp_elem_Xg_vis proc~cmp_elem_xg_vis~2->interface~elemconn_c0 - - + + proc~cmp_elem_xg_vis~3 - - -nurbs_surface%cmp_elem_Xg_vis + + +nurbs_curve%cmp_elem_Xg_vis proc~cmp_elem_xg_vis~3->interface~elemconn_c0 - - + + proc~cmp_elemface - -nurbs_volume%cmp_elemFace + +nurbs_volume%cmp_elemFace @@ -3690,8 +3690,8 @@

    Procedures

    proc~cmp_elemface_xc_vis - -nurbs_volume%cmp_elemFace_Xc_vis + +nurbs_volume%cmp_elemFace_Xc_vis @@ -3699,217 +3699,217 @@

    Procedures

    proc~cmp_elemface_xg_vis - -nurbs_volume%cmp_elemFace_Xg_vis + +nurbs_volume%cmp_elemFace_Xg_vis proc~cmp_elem~2 - - -nurbs_curve%cmp_elem + + +nurbs_surface%cmp_elem proc~cmp_elem~2->interface~elemconn_cn - - + + proc~cmp_elem~2->interface~unique - - + + proc~cmp_elem~2->proc~get_multiplicity~2 - - + + proc~cmp_elem~3 - - -nurbs_surface%cmp_elem + + +nurbs_curve%cmp_elem proc~cmp_elem~3->interface~elemconn_cn - - + + proc~cmp_elem~3->interface~unique - - + + proc~cmp_elem~3->proc~get_multiplicity~3 - - + + proc~cmp_nc - -nurbs_volume%cmp_nc + +nurbs_volume%cmp_nc proc~cmp_nc->interface~compute_multiplicity - - + + proc~cmp_nc~2 - - -nurbs_curve%cmp_nc + + +nurbs_surface%cmp_nc proc~cmp_nc~2->interface~compute_multiplicity - - + + proc~cmp_nc~3 - - -nurbs_surface%cmp_nc + + +nurbs_curve%cmp_nc proc~cmp_nc~3->interface~compute_multiplicity - - + + proc~cmp_xg - -nurbs_volume%cmp_Xg + +nurbs_volume%cmp_Xg proc~cmp_xg->interface~compute_xg - - + + proc~cmp_xg->proc~is_rational - - + + proc~cmp_xg~2 - - -nurbs_curve%cmp_Xg + + +nurbs_surface%cmp_Xg proc~cmp_xg~2->interface~compute_xg~2 - - + + proc~cmp_xg~2->proc~is_rational~2 - - + + proc~cmp_xg~3 - - -nurbs_surface%cmp_Xg + + +nurbs_curve%cmp_Xg proc~cmp_xg~3->interface~compute_xg~3 - - + + proc~cmp_xg~3->proc~is_rational~3 - - + + proc~compute_d2tgc_bspline_1d_scalar - -compute_d2Tgc_bspline_1d_scalar + +compute_d2Tgc_bspline_1d_scalar proc~compute_d2tgc_bspline_1d_scalar->proc~basis_bspline_2der - - + + proc~compute_d2tgc_bspline_1d_vector - -compute_d2Tgc_bspline_1d_vector + +compute_d2Tgc_bspline_1d_vector proc~compute_d2tgc_bspline_1d_vector->proc~basis_bspline_2der - - + + proc~compute_d2tgc_bspline_2d_scalar - -compute_d2Tgc_bspline_2d_scalar + +compute_d2Tgc_bspline_2d_scalar proc~compute_d2tgc_bspline_2d_scalar->proc~basis_bspline_2der - - + + @@ -3923,122 +3923,122 @@

    Procedures

    proc~compute_d2tgc_bspline_2d_scalar->proc~kron - - + + proc~compute_d2tgc_bspline_2d_vector - -compute_d2Tgc_bspline_2d_vector + +compute_d2Tgc_bspline_2d_vector proc~compute_d2tgc_bspline_2d_vector->proc~basis_bspline_2der - - + + proc~compute_d2tgc_bspline_2d_vector->proc~kron - - + + proc~compute_d2tgc_bspline_3d_scalar - -compute_d2Tgc_bspline_3d_scalar + +compute_d2Tgc_bspline_3d_scalar proc~compute_d2tgc_bspline_3d_scalar->proc~basis_bspline_2der - - + + proc~compute_d2tgc_bspline_3d_scalar->proc~kron - - + + proc~compute_d2tgc_bspline_3d_vector - -compute_d2Tgc_bspline_3d_vector + +compute_d2Tgc_bspline_3d_vector proc~compute_d2tgc_bspline_3d_vector->proc~basis_bspline_2der - - + + proc~compute_d2tgc_bspline_3d_vector->proc~kron - - + + proc~compute_d2tgc_nurbs_1d_scalar - -compute_d2Tgc_nurbs_1d_scalar + +compute_d2Tgc_nurbs_1d_scalar proc~compute_d2tgc_nurbs_1d_scalar->proc~basis_bspline_2der - - + + proc~compute_d2tgc_nurbs_1d_vector - -compute_d2Tgc_nurbs_1d_vector + +compute_d2Tgc_nurbs_1d_vector proc~compute_d2tgc_nurbs_1d_vector->proc~basis_bspline_2der - - + + proc~compute_d2tgc_nurbs_2d_scalar - -compute_d2Tgc_nurbs_2d_scalar + +compute_d2Tgc_nurbs_2d_scalar proc~compute_d2tgc_nurbs_2d_scalar->proc~basis_bspline_2der - - + + proc~compute_d2tgc_nurbs_2d_scalar->proc~kron - - + + @@ -4065,208 +4065,208 @@

    Procedures

    proc~compute_d2tgc_nurbs_3d_scalar - -compute_d2Tgc_nurbs_3d_scalar + +compute_d2Tgc_nurbs_3d_scalar proc~compute_d2tgc_nurbs_3d_scalar->proc~basis_bspline_2der - - + + proc~compute_d2tgc_nurbs_3d_scalar->proc~kron - - + + proc~compute_d2tgc_nurbs_3d_vector - -compute_d2Tgc_nurbs_3d_vector + +compute_d2Tgc_nurbs_3d_vector proc~compute_d2tgc_nurbs_3d_vector->proc~basis_bspline_2der - - + + proc~compute_d2tgc_nurbs_3d_vector->proc~kron - - + + proc~compute_dtgc_bspline_1d_scalar - -compute_dTgc_bspline_1d_scalar + +compute_dTgc_bspline_1d_scalar proc~compute_dtgc_bspline_1d_scalar->proc~basis_bspline_der - - + + proc~compute_dtgc_bspline_1d_vector - -compute_dTgc_bspline_1d_vector + +compute_dTgc_bspline_1d_vector proc~compute_dtgc_bspline_1d_vector->proc~basis_bspline_der - - + + proc~compute_dtgc_bspline_2d_scalar - -compute_dTgc_bspline_2d_scalar + +compute_dTgc_bspline_2d_scalar proc~compute_dtgc_bspline_2d_scalar->proc~basis_bspline_der - - + + proc~compute_dtgc_bspline_2d_scalar->proc~kron - - + + proc~compute_dtgc_bspline_2d_vector - -compute_dTgc_bspline_2d_vector + +compute_dTgc_bspline_2d_vector proc~compute_dtgc_bspline_2d_vector->proc~basis_bspline_der - - + + proc~compute_dtgc_bspline_2d_vector->proc~kron - - + + proc~compute_dtgc_bspline_3d_scalar - -compute_dTgc_bspline_3d_scalar + +compute_dTgc_bspline_3d_scalar proc~compute_dtgc_bspline_3d_scalar->proc~basis_bspline_der - - + + proc~compute_dtgc_bspline_3d_scalar->proc~kron - - + + proc~compute_dtgc_bspline_3d_vector - -compute_dTgc_bspline_3d_vector + +compute_dTgc_bspline_3d_vector proc~compute_dtgc_bspline_3d_vector->proc~basis_bspline_der - - + + proc~compute_dtgc_bspline_3d_vector->proc~kron - - + + proc~compute_dtgc_nurbs_1d_scalar - -compute_dTgc_nurbs_1d_scalar + +compute_dTgc_nurbs_1d_scalar proc~compute_dtgc_nurbs_1d_scalar->proc~basis_bspline_der - - + + proc~compute_dtgc_nurbs_1d_vector - -compute_dTgc_nurbs_1d_vector + +compute_dTgc_nurbs_1d_vector proc~compute_dtgc_nurbs_1d_vector->proc~basis_bspline_der - - + + proc~compute_dtgc_nurbs_2d_scalar - -compute_dTgc_nurbs_2d_scalar + +compute_dTgc_nurbs_2d_scalar proc~compute_dtgc_nurbs_2d_scalar->proc~basis_bspline_der - - + + proc~compute_dtgc_nurbs_2d_scalar->proc~kron - - + + @@ -4280,8 +4280,8 @@

    Procedures

    proc~compute_dtgc_nurbs_2d_vector->proc~basis_bspline_der - - + + @@ -4293,50 +4293,50 @@

    Procedures

    proc~compute_dtgc_nurbs_3d_scalar - -compute_dTgc_nurbs_3d_scalar + +compute_dTgc_nurbs_3d_scalar proc~compute_dtgc_nurbs_3d_scalar->proc~basis_bspline_der - - + + proc~compute_dtgc_nurbs_3d_scalar->proc~kron - - + + proc~compute_dtgc_nurbs_3d_vector - -compute_dTgc_nurbs_3d_vector + +compute_dTgc_nurbs_3d_vector proc~compute_dtgc_nurbs_3d_vector->proc~basis_bspline_der - - + + proc~compute_dtgc_nurbs_3d_vector->proc~kron - - + + proc~compute_knot_vector - -compute_knot_vector + +compute_knot_vector @@ -4344,88 +4344,88 @@

    Procedures

    proc~repelem - -repelem + +repelem proc~compute_knot_vector->proc~repelem - - + + proc~compute_tgc_bspline_1d_scalar - -compute_Tgc_bspline_1d_scalar + +compute_Tgc_bspline_1d_scalar proc~compute_tgc_bspline_1d_scalar->proc~basis_bspline - - + + proc~compute_tgc_bspline_1d_vector - -compute_Tgc_bspline_1d_vector + +compute_Tgc_bspline_1d_vector proc~compute_tgc_bspline_1d_vector->proc~basis_bspline - - + + proc~compute_tgc_bspline_2d_scalar - -compute_Tgc_bspline_2d_scalar + +compute_Tgc_bspline_2d_scalar proc~compute_tgc_bspline_2d_scalar->proc~basis_bspline - - + + proc~compute_tgc_bspline_2d_scalar->proc~kron - - + + proc~compute_tgc_bspline_2d_vector - -compute_Tgc_bspline_2d_vector + +compute_Tgc_bspline_2d_vector proc~compute_tgc_bspline_2d_vector->proc~basis_bspline - - + + proc~compute_tgc_bspline_2d_vector->proc~kron - - + + @@ -4452,830 +4452,830 @@

    Procedures

    proc~compute_tgc_bspline_3d_vector - -compute_Tgc_bspline_3d_vector + +compute_Tgc_bspline_3d_vector proc~compute_tgc_bspline_3d_vector->proc~basis_bspline - - + + proc~compute_tgc_bspline_3d_vector->proc~kron - - + + proc~compute_tgc_nurbs_1d_scalar - -compute_Tgc_nurbs_1d_scalar + +compute_Tgc_nurbs_1d_scalar proc~compute_tgc_nurbs_1d_scalar->proc~basis_bspline - - + + proc~compute_tgc_nurbs_1d_vector - -compute_Tgc_nurbs_1d_vector + +compute_Tgc_nurbs_1d_vector proc~compute_tgc_nurbs_1d_vector->proc~basis_bspline - - + + proc~compute_tgc_nurbs_2d_scalar - -compute_Tgc_nurbs_2d_scalar + +compute_Tgc_nurbs_2d_scalar proc~compute_tgc_nurbs_2d_scalar->proc~basis_bspline - - + + proc~compute_tgc_nurbs_2d_scalar->proc~kron - - + + proc~compute_tgc_nurbs_2d_vector - -compute_Tgc_nurbs_2d_vector + +compute_Tgc_nurbs_2d_vector proc~compute_tgc_nurbs_2d_vector->proc~basis_bspline - - + + proc~compute_tgc_nurbs_2d_vector->proc~kron - - + + proc~compute_tgc_nurbs_3d_scalar - -compute_Tgc_nurbs_3d_scalar + +compute_Tgc_nurbs_3d_scalar proc~compute_tgc_nurbs_3d_scalar->proc~basis_bspline - - + + proc~compute_tgc_nurbs_3d_scalar->proc~kron - - + + proc~compute_tgc_nurbs_3d_vector - -compute_Tgc_nurbs_3d_vector + +compute_Tgc_nurbs_3d_vector proc~compute_tgc_nurbs_3d_vector->proc~basis_bspline - - + + proc~compute_tgc_nurbs_3d_vector->proc~kron - - + + proc~compute_xg_bspline_1d - -compute_Xg_bspline_1d + +compute_Xg_bspline_1d proc~compute_xg_bspline_1d->proc~basis_bspline - - + + proc~compute_xg_bspline_1d_1point - -compute_Xg_bspline_1d_1point + +compute_Xg_bspline_1d_1point proc~compute_xg_bspline_1d_1point->proc~basis_bspline - - + + proc~compute_xg_bspline_2d - -compute_Xg_bspline_2d + +compute_Xg_bspline_2d proc~compute_xg_bspline_2d->proc~basis_bspline - - + + proc~compute_xg_bspline_2d->proc~kron - - + + proc~compute_xg_bspline_2d_1point - -compute_Xg_bspline_2d_1point + +compute_Xg_bspline_2d_1point proc~compute_xg_bspline_2d_1point->proc~basis_bspline - - + + proc~compute_xg_bspline_2d_1point->proc~kron - - + + proc~compute_xg_bspline_3d - -compute_Xg_bspline_3d + +compute_Xg_bspline_3d proc~compute_xg_bspline_3d->proc~basis_bspline - - + + proc~compute_xg_bspline_3d->proc~kron - - + + proc~compute_xg_bspline_3d_1point - -compute_Xg_bspline_3d_1point + +compute_Xg_bspline_3d_1point proc~compute_xg_bspline_3d_1point->proc~basis_bspline - - + + proc~compute_xg_bspline_3d_1point->proc~kron - - + + proc~compute_xg_nurbs_1d - -compute_Xg_nurbs_1d + +compute_Xg_nurbs_1d proc~compute_xg_nurbs_1d->proc~basis_bspline - - + + proc~compute_xg_nurbs_1d_1point - -compute_Xg_nurbs_1d_1point + +compute_Xg_nurbs_1d_1point proc~compute_xg_nurbs_1d_1point->proc~basis_bspline - - + + proc~compute_xg_nurbs_2d - -compute_Xg_nurbs_2d + +compute_Xg_nurbs_2d proc~compute_xg_nurbs_2d->proc~basis_bspline - - + + proc~compute_xg_nurbs_2d->proc~kron - - + + proc~compute_xg_nurbs_2d_1point - -compute_Xg_nurbs_2d_1point + +compute_Xg_nurbs_2d_1point proc~compute_xg_nurbs_2d_1point->proc~basis_bspline - - + + proc~compute_xg_nurbs_2d_1point->proc~kron - - + + proc~compute_xg_nurbs_3d - -compute_Xg_nurbs_3d + +compute_Xg_nurbs_3d proc~compute_xg_nurbs_3d->proc~basis_bspline - - + + proc~compute_xg_nurbs_3d->proc~kron - - + + proc~compute_xg_nurbs_3d_1point - -compute_Xg_nurbs_3d_1point + +compute_Xg_nurbs_3d_1point proc~compute_xg_nurbs_3d_1point->proc~basis_bspline - - + + proc~compute_xg_nurbs_3d_1point->proc~kron - - + + proc~create - -nurbs_volume%create + +nurbs_volume%create proc~create->interface~compute_xg - - + + proc~create->interface~ndgrid - - + + proc~create->proc~is_rational - - + + proc~create~2 - - -nurbs_curve%create + + +nurbs_surface%create proc~create~2->interface~compute_xg~2 - - + + - + +proc~create~2->interface~ndgrid + + + + + proc~create~2->proc~is_rational~2 - - + + proc~create~3 - - -nurbs_surface%create + + +nurbs_curve%create - -proc~create~3->interface~compute_xg~3 - - - - -proc~create~3->interface~ndgrid - - +proc~create~3->interface~compute_xg~3 + + proc~create~3->proc~is_rational~3 - - + + proc~derivative2_scalar->interface~compute_d2tgc - - + + proc~derivative2_scalar->proc~is_rational - - + + proc~derivative2_scalar~2->interface~compute_d2tgc~2 - - + + proc~derivative2_scalar~2->proc~is_rational~2 - - + + proc~derivative2_scalar~3->interface~compute_d2tgc~3 - - + + proc~derivative2_scalar~3->proc~is_rational~3 - - + + proc~derivative2_vector->interface~compute_d2tgc - - + + proc~derivative2_vector->interface~ndgrid - - + + proc~derivative2_vector->proc~is_rational - - + + proc~derivative2_vector~2->interface~compute_d2tgc~2 - - + + - + -proc~derivative2_vector~2->proc~is_rational~2 - - +proc~derivative2_vector~2->interface~ndgrid + + - + -proc~derivative2_vector~3->interface~compute_d2tgc~3 - - +proc~derivative2_vector~2->proc~is_rational~2 + + - + -proc~derivative2_vector~3->interface~ndgrid - - +proc~derivative2_vector~3->interface~compute_d2tgc~3 + + proc~derivative2_vector~3->proc~is_rational~3 - - + + proc~derivative_scalar->interface~compute_dtgc - - + + proc~derivative_scalar->proc~is_rational - - + + proc~derivative_scalar~2->interface~compute_dtgc~2 - - + + proc~derivative_scalar~2->proc~is_rational~2 - - + + proc~derivative_scalar~3->interface~compute_dtgc~3 - - + + proc~derivative_scalar~3->proc~is_rational~3 - - + + proc~derivative_vector->interface~compute_dtgc - - + + proc~derivative_vector->interface~ndgrid - - + + proc~derivative_vector->proc~is_rational - - + + proc~derivative_vector~2->interface~compute_dtgc~2 - - + + - + -proc~derivative_vector~2->proc~is_rational~2 - - +proc~derivative_vector~2->interface~ndgrid + + - + -proc~derivative_vector~3->interface~compute_dtgc~3 - - +proc~derivative_vector~2->proc~is_rational~2 + + - + -proc~derivative_vector~3->interface~ndgrid - - +proc~derivative_vector~3->interface~compute_dtgc~3 + + proc~derivative_vector~3->proc~is_rational~3 - - + + proc~elevate_degree - -nurbs_volume%elevate_degree + +nurbs_volume%elevate_degree proc~elevate_degree->none~get_knot - - + + proc~elevate_degree->none~set - - + + proc~elevate_degree_a_5_9 - -elevate_degree_A_5_9 + +elevate_degree_A_5_9 proc~elevate_degree->proc~elevate_degree_a_5_9 - - + + proc~elevate_degree_a_5_9->interface~compute_multiplicity - - + + proc~elevate_degree_a_5_9->proc~bincoeff - - + + proc~elevate_degree~2 - - -nurbs_curve%elevate_degree + + +nurbs_surface%elevate_degree - + +proc~elevate_degree~2->none~get_knot~2 + + + + + proc~elevate_degree~2->none~set~2 - - + + - + proc~elevate_degree~2->proc~elevate_degree_a_5_9 - - + + - + proc~elevate_degree~2->proc~is_rational~2 - - + + proc~elevate_degree~3 - - -nurbs_surface%elevate_degree + + +nurbs_curve%elevate_degree - - -proc~elevate_degree~3->none~get_knot~3 - - - proc~elevate_degree~3->none~set~3 - - + + proc~elevate_degree~3->proc~elevate_degree_a_5_9 - - + + proc~elevate_degree~3->proc~is_rational~3 - - + + proc~export_xc - -nurbs_volume%export_Xc + +nurbs_volume%export_Xc proc~export_xc->proc~cmp_elem_xc_vis - - + + proc~export_xc~2 - - -nurbs_curve%export_Xc + + +nurbs_surface%export_Xc proc~export_xc~2->proc~cmp_elem_xc_vis~2 - - + + proc~export_xc~3 - - -nurbs_surface%export_Xc + + +nurbs_curve%export_Xc proc~export_xc~3->proc~cmp_elem_xc_vis~3 - - + + proc~export_xg - -nurbs_volume%export_Xg + +nurbs_volume%export_Xg proc~export_xg->proc~cmp_elem_xg_vis - - + + proc~export_xg~2 - - -nurbs_curve%export_Xg + + +nurbs_surface%export_Xg proc~export_xg~2->proc~cmp_elem_xg_vis~2 - - + + proc~export_xg~3 - - -nurbs_surface%export_Xg + + +nurbs_curve%export_Xg proc~export_xg~3->proc~cmp_elem_xg_vis~3 - - + + proc~finalize - -nurbs_volume%finalize + +nurbs_volume%finalize proc~finalize~2 - - -nurbs_curve%finalize + + +nurbs_surface%finalize proc~finalize~3 - - -nurbs_surface%finalize + + +nurbs_curve%finalize @@ -5283,8 +5283,8 @@

    Procedures

    proc~findspan - -findspan + +findspan @@ -5292,8 +5292,8 @@

    Procedures

    proc~generate_xc - -generate_Xc + +generate_Xc @@ -5301,8 +5301,8 @@

    Procedures

    proc~generate_xc~2 - -generate_Xc + +generate_Xc @@ -5310,8 +5310,8 @@

    Procedures

    proc~generate_xc~3 - -generate_Xc + +generate_Xc @@ -5319,8 +5319,8 @@

    Procedures

    proc~generate_xc~4 - -generate_Xc + +generate_Xc @@ -5328,8 +5328,8 @@

    Procedures

    proc~generate_xc~5 - -generate_Xc + +generate_Xc @@ -5337,53 +5337,53 @@

    Procedures

    proc~get_continuity - -nurbs_volume%get_continuity + +nurbs_volume%get_continuity proc~get_continuity->interface~compute_multiplicity - - + + proc~get_continuity~2 - - -nurbs_curve%get_continuity + + +nurbs_surface%get_continuity proc~get_continuity~2->interface~compute_multiplicity - - + + proc~get_continuity~3 - - -nurbs_surface%get_continuity + + +nurbs_curve%get_continuity proc~get_continuity~3->interface~compute_multiplicity - - + + proc~get_degree - -nurbs_curve%get_degree + +nurbs_curve%get_degree @@ -5391,8 +5391,8 @@

    Procedures

    proc~get_elem - -nurbs_volume%get_elem + +nurbs_volume%get_elem @@ -5400,26 +5400,26 @@

    Procedures

    proc~get_elem_xc_vis - -nurbs_volume%get_elem_Xc_vis + +nurbs_volume%get_elem_Xc_vis proc~get_elem_xc_vis~2 - - -nurbs_curve%get_elem_Xc_vis + + +nurbs_surface%get_elem_Xc_vis proc~get_elem_xc_vis~3 - - -nurbs_surface%get_elem_Xc_vis + + +nurbs_curve%get_elem_Xc_vis @@ -5427,128 +5427,128 @@

    Procedures

    proc~get_elem_xg_vis - -nurbs_volume%get_elem_Xg_vis + +nurbs_volume%get_elem_Xg_vis proc~get_elem_xg_vis~2 - - -nurbs_curve%get_elem_Xg_vis + + +nurbs_surface%get_elem_Xg_vis proc~get_elem_xg_vis~3 - - -nurbs_surface%get_elem_Xg_vis + + +nurbs_curve%get_elem_Xg_vis proc~get_elem~2 - - -nurbs_curve%get_elem + + +nurbs_surface%get_elem proc~get_elem~3 - - -nurbs_surface%get_elem + + +nurbs_curve%get_elem proc~get_multiplicity->interface~compute_multiplicity - - + + proc~get_multiplicity~2->interface~compute_multiplicity - - + + proc~get_multiplicity~3->interface~compute_multiplicity - - + + proc~get_nc - -get_nc + +get_nc proc~get_nc->interface~compute_multiplicity - - + + proc~get_nc~2 - - -nurbs_curve%get_nc + + +nurbs_surface%get_nc + + +proc~get_nc~2->interface~compute_multiplicity + + + proc~get_nc~3 - - -nurbs_surface%get_nc + + +nurbs_curve%get_nc - - -proc~get_nc~3->interface~compute_multiplicity - - - proc~get_ng - -nurbs_volume%get_ng + +nurbs_volume%get_ng proc~get_ng~2 - - -nurbs_curve%get_ng + + +nurbs_surface%get_ng proc~get_ng~3 - - -nurbs_surface%get_ng + + +nurbs_curve%get_ng @@ -5556,26 +5556,26 @@

    Procedures

    proc~get_xt - -nurbs_volume%get_Xt + +nurbs_volume%get_Xt proc~get_xt~2 - - -nurbs_curve%get_Xt + + +nurbs_surface%get_Xt proc~get_xt~3 - - -nurbs_surface%get_Xt + + +nurbs_curve%get_Xt @@ -5583,8 +5583,8 @@

    Procedures

    proc~hexahedron_xc - -hexahedron_Xc + +hexahedron_Xc @@ -5592,8 +5592,8 @@

    Procedures

    proc~insert_knot_a_5_1 - -insert_knot_A_5_1 + +insert_knot_A_5_1 @@ -5601,131 +5601,131 @@

    Procedures

    proc~insert_knots - -nurbs_volume%insert_knots + +nurbs_volume%insert_knots proc~insert_knots->interface~compute_multiplicity - - + + proc~insert_knots->none~get_knot - - + + proc~insert_knots->none~set - - + + proc~insert_knots->proc~findspan - - + + proc~insert_knots->proc~insert_knot_a_5_1 - - + + proc~insert_knots~2 - - -nurbs_curve%insert_knots + + +nurbs_surface%insert_knots proc~insert_knots~2->interface~compute_multiplicity - - + + - + +proc~insert_knots~2->none~get_knot~2 + + + + + proc~insert_knots~2->none~set~2 - - + + - + proc~insert_knots~2->proc~findspan - - + + - + proc~insert_knots~2->proc~insert_knot_a_5_1 - - + + - + proc~insert_knots~2->proc~is_rational~2 - - + + proc~insert_knots~3 - - -nurbs_surface%insert_knots + + +nurbs_curve%insert_knots - -proc~insert_knots~3->interface~compute_multiplicity - - - - -proc~insert_knots~3->none~get_knot~3 - - +proc~insert_knots~3->interface~compute_multiplicity + + proc~insert_knots~3->none~set~3 - - + + proc~insert_knots~3->proc~findspan - - + + proc~insert_knots~3->proc~insert_knot_a_5_1 - - + + proc~insert_knots~3->proc~is_rational~3 - - + + proc~isinf - -isinf + +isinf @@ -5733,8 +5733,8 @@

    Procedures

    proc~isnan - -isnan + +isnan @@ -5742,338 +5742,338 @@

    Procedures

    proc~modify_wc - -nurbs_volume%modify_Wc + +nurbs_volume%modify_Wc proc~modify_wc->none~get_knot - - + + proc~modify_wc->none~get_wc - - + + proc~modify_wc->none~get_xc - - + + proc~modify_wc->none~set - - + + proc~modify_wc~2 - - -nurbs_curve%modify_Wc + + +nurbs_surface%modify_Wc proc~modify_wc~2->none~get_knot~2 - - + + proc~modify_wc~2->none~get_wc~2 - - + + proc~modify_wc~2->none~get_xc~2 - - + + proc~modify_wc~2->none~set~2 - - + + proc~modify_wc~3 - - -nurbs_surface%modify_Wc + + +nurbs_curve%modify_Wc proc~modify_wc~3->none~get_knot~3 - - + + proc~modify_wc~3->none~get_wc~3 - - + + proc~modify_wc~3->none~get_xc~3 - - + + proc~modify_wc~3->none~set~3 - - + + proc~modify_xc - -nurbs_volume%modify_Xc + +nurbs_volume%modify_Xc proc~modify_xc->none~get_knot - - + + proc~modify_xc->none~get_wc - - + + proc~modify_xc->none~get_xc - - + + proc~modify_xc->none~set - - + + proc~modify_xc~2 - - -nurbs_curve%modify_Xc + + +nurbs_surface%modify_Xc proc~modify_xc~2->none~get_knot~2 - - + + proc~modify_xc~2->none~get_wc~2 - - + + proc~modify_xc~2->none~get_xc~2 - - + + proc~modify_xc~2->none~set~2 - - + + proc~modify_xc~3 - - -nurbs_surface%modify_Xc + + +nurbs_curve%modify_Xc proc~modify_xc~3->none~get_knot~3 - - + + proc~modify_xc~3->none~get_wc~3 - - + + proc~modify_xc~3->none~get_xc~3 - - + + proc~modify_xc~3->none~set~3 - - + + proc~nearest_point - -nurbs_volume%nearest_point + +nurbs_volume%nearest_point proc~nearest_point->interface~nearest_point_help_3d - - + + proc~nearest_point2 - -nurbs_volume%nearest_point2 + +nurbs_volume%nearest_point2 proc~nearest_point2->interface~nearest_point_help_3d - - + + proc~nearest_point2->none~derivative2 - - + + proc~nearest_point2->proc~cmp_xg - - + + proc~nearest_point2->proc~create - - + + proc~nearest_point2->proc~finalize - - + + proc~nearest_point2~2 - - -nurbs_curve%nearest_point2 + + +nurbs_surface%nearest_point2 - + -proc~nearest_point2~2->interface~nearest_point_help_1d - - +proc~nearest_point2~2->interface~nearest_point_help_2d + + proc~nearest_point2~2->none~derivative2~2 - - + + proc~nearest_point2~2->proc~cmp_xg~2 - - + + proc~nearest_point2~2->proc~create~2 - - + + proc~nearest_point2~2->proc~finalize~2 - - + + proc~nearest_point2~3 - - -nurbs_surface%nearest_point2 + + +nurbs_curve%nearest_point2 - + -proc~nearest_point2~3->interface~nearest_point_help_2d - - +proc~nearest_point2~3->interface~nearest_point_help_1d + + proc~nearest_point2~3->none~derivative2~3 - - + + proc~nearest_point2~3->proc~cmp_xg~3 - - + + proc~nearest_point2~3->proc~create~3 - - + + proc~nearest_point2~3->proc~finalize~3 - - + + proc~nearest_point_help_1d - -nearest_point_help_1d + +nearest_point_help_1d @@ -6081,8 +6081,8 @@

    Procedures

    proc~nearest_point_help_2d - -nearest_point_help_2d + +nearest_point_help_2d @@ -6090,215 +6090,215 @@

    Procedures

    proc~nearest_point_help_3d - -nearest_point_help_3d + +nearest_point_help_3d proc~nearest_point~2 - - -nurbs_curve%nearest_point + + +nurbs_surface%nearest_point - + -proc~nearest_point~2->interface~nearest_point_help_1d - - +proc~nearest_point~2->interface~nearest_point_help_2d + + proc~nearest_point~3 - - -nurbs_surface%nearest_point + + +nurbs_curve%nearest_point - + -proc~nearest_point~3->interface~nearest_point_help_2d - - +proc~nearest_point~3->interface~nearest_point_help_1d + + proc~put_to_nurbs - -nurbs_volume%put_to_nurbs + +nurbs_volume%put_to_nurbs proc~put_to_nurbs->proc~basis_bspline - - + + proc~put_to_nurbs->proc~kron - - + + proc~set_elem_xg_vis - -nurbs_volume%set_elem_Xg_vis + +nurbs_volume%set_elem_Xg_vis proc~put_to_nurbs->proc~set_elem_xg_vis - - + + proc~remove_knots - -nurbs_volume%remove_knots + +nurbs_volume%remove_knots proc~remove_knots->interface~compute_multiplicity - - + + proc~remove_knots->none~get_knot - - + + proc~remove_knots->none~set - - + + proc~remove_knots->proc~findspan - - + + proc~remove_knots_a_5_8 - -remove_knots_A_5_8 + +remove_knots_A_5_8 proc~remove_knots->proc~remove_knots_a_5_8 - - + + proc~remove_knots~2 - - -nurbs_curve%remove_knots + + +nurbs_surface%remove_knots proc~remove_knots~2->interface~compute_multiplicity - - + + - + +proc~remove_knots~2->none~get_knot~2 + + + + + proc~remove_knots~2->none~set~2 - - + + - + proc~remove_knots~2->proc~findspan - - + + - + proc~remove_knots~2->proc~is_rational~2 - - + + - + proc~remove_knots~2->proc~remove_knots_a_5_8 - - + + proc~remove_knots~3 - - -nurbs_surface%remove_knots + + +nurbs_curve%remove_knots - -proc~remove_knots~3->interface~compute_multiplicity - - - - -proc~remove_knots~3->none~get_knot~3 - - +proc~remove_knots~3->interface~compute_multiplicity + + proc~remove_knots~3->none~set~3 - - + + proc~remove_knots~3->proc~findspan - - + + proc~remove_knots~3->proc~is_rational~3 - - + + proc~remove_knots~3->proc~remove_knots_a_5_8 - - + + proc~rotate_xc - -nurbs_volume%rotate_Xc + +nurbs_volume%rotate_Xc @@ -6306,260 +6306,260 @@

    Procedures

    proc~rotation - -rotation + +rotation proc~rotate_xc->proc~rotation - - + + proc~rotate_xc~2 - - -nurbs_curve%rotate_Xc + + +nurbs_surface%rotate_Xc proc~rotate_xc~2->proc~rotation - - + + proc~rotate_xc~3 - - -nurbs_surface%rotate_Xc + + +nurbs_curve%rotate_Xc proc~rotate_xc~3->proc~rotation - - + + proc~rotate_xg - -nurbs_volume%rotate_Xg + +nurbs_volume%rotate_Xg proc~rotate_xg->proc~rotation - - + + proc~rotate_xg~2 - - -nurbs_curve%rotate_Xg + + +nurbs_surface%rotate_Xg proc~rotate_xg~2->proc~rotation - - + + proc~rotate_xg~3 - - -nurbs_surface%rotate_Xg + + +nurbs_curve%rotate_Xg proc~rotate_xg~3->proc~rotation - - + + cosd - -cosd + +cosd proc~rotation->cosd - - + + sind - -sind + +sind proc~rotation->sind - - + + proc~set1->proc~cmp_degree - - + + proc~set1->proc~cmp_nc - - + + proc~set1~2->proc~cmp_degree~2 - - + + - + -proc~set1~3->proc~cmp_degree~3 - - +proc~set1~2->proc~cmp_nc~2 + + - + -proc~set1~3->proc~cmp_nc~3 - - +proc~set1~3->proc~cmp_degree~3 + + proc~set2->proc~cmp_nc - - + + proc~set2->proc~compute_knot_vector - - + + - + -proc~set2~2->proc~compute_knot_vector - - +proc~set2~2->proc~cmp_nc~2 + + - + -proc~set2~3->proc~cmp_nc~3 - - +proc~set2~2->proc~compute_knot_vector + + proc~set2~3->proc~compute_knot_vector - - + + proc~set3->proc~cmp_degree - - + + proc~set3~2->proc~cmp_degree~2 - - + + proc~set3~3->proc~cmp_degree~3 - - + + proc~set_c - -nurbs_volume%set_C + +nurbs_volume%set_C proc~set_c->none~set - - + + proc~set_circle - -nurbs_curve%set_circle + +nurbs_curve%set_circle - + -proc~set_circle->none~set~2 - - +proc~set_circle->none~set~3 + + proc~set_c~2 - - -nurbs_curve%set_C + + +nurbs_surface%set_C proc~set_c~2->none~set~2 - - + + proc~set_c~3 - - -nurbs_surface%set_C + + +nurbs_curve%set_C proc~set_c~3->none~set~3 - - + + proc~set_elem - -nurbs_volume%set_elem + +nurbs_volume%set_elem @@ -6567,62 +6567,62 @@

    Procedures

    proc~set_elem_xc_vis - -nurbs_volume%set_elem_Xc_vis + +nurbs_volume%set_elem_Xc_vis proc~set_elem_xc_vis~2 - - -nurbs_curve%set_elem_Xc_vis + + +nurbs_surface%set_elem_Xc_vis proc~set_elem_xc_vis~3 - - -nurbs_surface%set_elem_Xc_vis + + +nurbs_curve%set_elem_Xc_vis proc~set_elem_xg_vis~2 - - -nurbs_curve%set_elem_Xg_vis + + +nurbs_surface%set_elem_Xg_vis proc~set_elem_xg_vis~3 - - -nurbs_surface%set_elem_Xg_vis + + +nurbs_curve%set_elem_Xg_vis proc~set_elem~2 - - -nurbs_curve%set_elem + + +nurbs_surface%set_elem proc~set_elem~3 - - -nurbs_surface%set_elem + + +nurbs_curve%set_elem @@ -6630,152 +6630,152 @@

    Procedures

    proc~set_half_circle - -nurbs_curve%set_half_circle + +nurbs_curve%set_half_circle - + -proc~set_half_circle->none~set~2 - - +proc~set_half_circle->none~set~3 + + proc~set_half_ring - -nurbs_volume%set_half_ring + +nurbs_volume%set_half_ring proc~set_half_ring->none~set - - + + proc~set_half_ring~2 - -nurbs_surface%set_half_ring + +nurbs_surface%set_half_ring - + -proc~set_half_ring~2->none~set~3 - - +proc~set_half_ring~2->none~set~2 + + proc~set_hexahedron - -nurbs_volume%set_hexahedron + +nurbs_volume%set_hexahedron proc~set_hexahedron->none~set - - + + proc~set_hexahedron->proc~hexahedron_xc - - + + proc~set_ring - -nurbs_volume%set_ring + +nurbs_volume%set_ring proc~set_ring->none~set - - + + proc~set_ring~2 - -nurbs_surface%set_ring + +nurbs_surface%set_ring - + -proc~set_ring~2->none~set~3 - - +proc~set_ring~2->none~set~2 + + proc~set_tetragon - -nurbs_surface%set_tetragon + +nurbs_surface%set_tetragon - + -proc~set_tetragon->none~set~3 - - +proc~set_tetragon->none~set~2 + + proc~tetragon_xc - -tetragon_Xc + +tetragon_Xc proc~set_tetragon->proc~tetragon_xc - - + + proc~show - -nurbs_volume%show + +nurbs_volume%show proc~show~2 - - -nurbs_curve%show + + +nurbs_surface%show proc~show~3 - - -nurbs_surface%show + + +nurbs_curve%show @@ -6783,26 +6783,26 @@

    Procedures

    proc~translate_xc - -nurbs_volume%translate_Xc + +nurbs_volume%translate_Xc proc~translate_xc~2 - - -nurbs_curve%translate_Xc + + +nurbs_surface%translate_Xc proc~translate_xc~3 - - -nurbs_surface%translate_Xc + + +nurbs_curve%translate_Xc @@ -6810,26 +6810,26 @@

    Procedures

    proc~translate_xg - -nurbs_volume%translate_Xg + +nurbs_volume%translate_Xg proc~translate_xg~2 - - -nurbs_curve%translate_Xg + + +nurbs_surface%translate_Xg proc~translate_xg~3 - - -nurbs_surface%translate_Xg + + +nurbs_curve%translate_Xg @@ -6837,205 +6837,205 @@

    Procedures

    program~example1_curve - -example1_curve + +example1_curve - + -program~example1_curve->none~get_knot~2 - - +program~example1_curve->none~get_knot~3 + + - + -program~example1_curve->none~set~2 - - +program~example1_curve->none~set~3 + + - + -program~example1_curve->proc~create~2 - - +program~example1_curve->proc~create~3 + + - + -program~example1_curve->proc~elevate_degree~2 - - +program~example1_curve->proc~elevate_degree~3 + + - + -program~example1_curve->proc~export_xc~2 - - +program~example1_curve->proc~export_xc~3 + + - + -program~example1_curve->proc~export_xg~2 - - +program~example1_curve->proc~export_xg~3 + + - + -program~example1_curve->proc~finalize~2 - - +program~example1_curve->proc~finalize~3 + + program~example1_curve->proc~get_degree - - + + - + -program~example1_curve->proc~insert_knots~2 - - +program~example1_curve->proc~insert_knots~3 + + - + -program~example1_curve->proc~remove_knots~2 - - +program~example1_curve->proc~remove_knots~3 + + - + -program~example1_curve->proc~rotate_xc~2 - - +program~example1_curve->proc~rotate_xc~3 + + - + -program~example1_curve->proc~rotate_xg~2 - - +program~example1_curve->proc~rotate_xg~3 + + - + -program~example1_curve->proc~show~2 - - +program~example1_curve->proc~show~3 + + - + -program~example1_curve->proc~translate_xc~2 - - +program~example1_curve->proc~translate_xc~3 + + - + -program~example1_curve->proc~translate_xg~2 - - +program~example1_curve->proc~translate_xg~3 + + program~example3_surface - -example3_surface + +example3_surface - + -program~example3_surface->none~get_degree~3 - - +program~example3_surface->none~get_degree~2 + + - + -program~example3_surface->none~get_knot~3 - - +program~example3_surface->none~get_knot~2 + + - + -program~example3_surface->none~set~3 - - +program~example3_surface->none~set~2 + + - + -program~example3_surface->proc~create~3 - - +program~example3_surface->proc~create~2 + + - + -program~example3_surface->proc~elevate_degree~3 - - +program~example3_surface->proc~elevate_degree~2 + + - + -program~example3_surface->proc~export_xc~3 - - +program~example3_surface->proc~export_xc~2 + + - + -program~example3_surface->proc~export_xg~3 - - +program~example3_surface->proc~export_xg~2 + + - + -program~example3_surface->proc~finalize~3 - - +program~example3_surface->proc~finalize~2 + + - + -program~example3_surface->proc~generate_xc - - +program~example3_surface->proc~generate_xc~3 + + - + -program~example3_surface->proc~insert_knots~3 - - +program~example3_surface->proc~insert_knots~2 + + - + -program~example3_surface->proc~remove_knots~3 - - +program~example3_surface->proc~remove_knots~2 + + - + -program~example3_surface->proc~rotate_xc~3 - - +program~example3_surface->proc~rotate_xc~2 + + - + -program~example3_surface->proc~rotate_xg~3 - - +program~example3_surface->proc~rotate_xg~2 + + - + -program~example3_surface->proc~show~3 - - +program~example3_surface->proc~show~2 + + - + -program~example3_surface->proc~translate_xc~3 - - +program~example3_surface->proc~translate_xc~2 + + - + -program~example3_surface->proc~translate_xg~3 - - +program~example3_surface->proc~translate_xg~2 + + @@ -7049,404 +7049,404 @@

    Procedures

    program~example3_volume->none~get_degree - - + + program~example3_volume->none~get_knot - - + + program~example3_volume->none~set - - + + program~example3_volume->proc~cmp_degreeface - - + + program~example3_volume->proc~cmp_elem - - + + program~example3_volume->proc~cmp_elemface - - + + program~example3_volume->proc~create - - + + program~example3_volume->proc~elevate_degree - - + + program~example3_volume->proc~export_xc - - + + program~example3_volume->proc~export_xg - - + + program~example3_volume->proc~finalize - - + + - + -program~example3_volume->proc~generate_xc~3 - - +program~example3_volume->proc~generate_xc~4 + + program~example3_volume->proc~insert_knots - - + + program~example3_volume->proc~remove_knots - - + + program~example3_volume->proc~rotate_xc - - + + program~example3_volume->proc~rotate_xg - - + + program~example3_volume->proc~set_elem - - + + program~example3_volume->proc~show - - + + program~example3_volume->proc~translate_xc - - + + program~example3_volume->proc~translate_xg - - + + program~example_nurbs_curve - -example_nurbs_curve + +example_nurbs_curve - + -program~example_nurbs_curve->none~set~2 - - +program~example_nurbs_curve->none~set~3 + + - + -program~example_nurbs_curve->proc~create~2 - - +program~example_nurbs_curve->proc~create~3 + + - + -program~example_nurbs_curve->proc~export_xc~2 - - +program~example_nurbs_curve->proc~export_xc~3 + + - + -program~example_nurbs_curve->proc~export_xg~2 - - +program~example_nurbs_curve->proc~export_xg~3 + + - + -program~example_nurbs_curve->proc~finalize~2 - - +program~example_nurbs_curve->proc~finalize~3 + + - + -program~example_nurbs_curve->proc~generate_xc~4 - - +program~example_nurbs_curve->proc~generate_xc + + - + -program~example_nurbs_curve->proc~show~2 - - +program~example_nurbs_curve->proc~show~3 + + program~example_nurbs_surface - -example_nurbs_surface + +example_nurbs_surface - + -program~example_nurbs_surface->none~set~3 - - +program~example_nurbs_surface->none~set~2 + + - + -program~example_nurbs_surface->proc~create~3 - - +program~example_nurbs_surface->proc~create~2 + + - + -program~example_nurbs_surface->proc~export_xc~3 - - +program~example_nurbs_surface->proc~export_xc~2 + + - + -program~example_nurbs_surface->proc~export_xg~3 - - +program~example_nurbs_surface->proc~export_xg~2 + + - + -program~example_nurbs_surface->proc~finalize~3 - - +program~example_nurbs_surface->proc~finalize~2 + + program~example_nurbs_surface->proc~generate_xc~2 - - + + - + -program~example_nurbs_surface->proc~show~3 - - +program~example_nurbs_surface->proc~show~2 + + program~example_nurbs_volume - -example_nurbs_volume + +example_nurbs_volume program~example_nurbs_volume->none~set - - + + program~example_nurbs_volume->proc~create - - + + program~example_nurbs_volume->proc~export_xc - - + + program~example_nurbs_volume->proc~export_xg - - + + program~example_nurbs_volume->proc~finalize - - + + program~example_nurbs_volume->proc~generate_xc~5 - - + + program~example_nurbs_volume->proc~show - - + + program~example_ppm1 - -example_ppm1 + +example_ppm1 - + -program~example_ppm1->none~get_xg~3 - - +program~example_ppm1->none~get_xg~2 + + - + -program~example_ppm1->proc~create~3 - - +program~example_ppm1->proc~create~2 + + - + -program~example_ppm1->proc~finalize~3 - - +program~example_ppm1->proc~finalize~2 + + - + -program~example_ppm1->proc~get_ng~3 - - +program~example_ppm1->proc~get_ng~2 + + program~example_ppm1->proc~set_ring~2 - - + + program~example_ppm1->proc~set_tetragon - - + + compute_rgb - -compute_rgb + +compute_rgb program~example_ppm1->compute_rgb - - + + export_pnm - -export_pnm + +export_pnm program~example_ppm1->export_pnm - - + + get_b - -get_b + +get_b program~example_ppm1->get_b - - + + get_g - -get_g + +get_g program~example_ppm1->get_g - - + + get_r - -get_r + +get_r program~example_ppm1->get_r - - + + set - -set + +set program~example_ppm1->set - - + + set_pnm - -set_pnm + +set_pnm program~example_ppm1->set_pnm - - + + @@ -7457,449 +7457,449 @@

    Procedures

    program~example_ppm1->timer_start - - + + timer_stop - -timer_stop + +timer_stop program~example_ppm1->timer_stop - - + + program~example_ppm2 - -example_ppm2 + +example_ppm2 - + -program~example_ppm2->none~get_xg~3 - - +program~example_ppm2->none~get_xg~2 + + - + -program~example_ppm2->proc~create~3 - - +program~example_ppm2->proc~create~2 + + - + -program~example_ppm2->proc~finalize~3 - - +program~example_ppm2->proc~finalize~2 + + - + -program~example_ppm2->proc~get_ng~3 - - +program~example_ppm2->proc~get_ng~2 + + - + -program~example_ppm2->proc~rotate_xc~3 - - +program~example_ppm2->proc~rotate_xc~2 + + program~example_ppm2->proc~set_half_ring~2 - - + + program~example_ppm2->proc~set_tetragon - - + + - + -program~example_ppm2->proc~translate_xc~3 - - +program~example_ppm2->proc~translate_xc~2 + + program~example_ppm2->compute_rgb - - + + program~example_ppm2->export_pnm - - + + program~example_ppm2->get_b - - + + program~example_ppm2->get_g - - + + program~example_ppm2->get_r - - + + program~example_ppm2->set - - + + program~example_ppm2->set_pnm - - + + program~example_ppm2->timer_start - - + + program~example_ppm2->timer_stop - - + + program~example_ppm3 - -example_ppm3 + +example_ppm3 - + -program~example_ppm3->none~get_xg~3 - - +program~example_ppm3->none~get_xg~2 + + - + -program~example_ppm3->proc~create~3 - - +program~example_ppm3->proc~create~2 + + - + -program~example_ppm3->proc~finalize~3 - - +program~example_ppm3->proc~finalize~2 + + - + -program~example_ppm3->proc~get_ng~3 - - +program~example_ppm3->proc~get_ng~2 + + - + -program~example_ppm3->proc~modify_xc~3 - - +program~example_ppm3->proc~modify_xc~2 + + program~example_ppm3->proc~set_tetragon - - + + - + -program~example_ppm3->proc~translate_xc~3 - - +program~example_ppm3->proc~translate_xc~2 + + program~example_ppm3->compute_rgb - - + + program~example_ppm3->export_pnm - - + + program~example_ppm3->get_b - - + + program~example_ppm3->get_g - - + + program~example_ppm3->get_r - - + + program~example_ppm3->set - - + + program~example_ppm3->set_pnm - - + + program~example_ppm3->timer_start - - + + program~example_ppm3->timer_stop - - + + program~example_put_to_nurbs - -example_put_to_nurbs + +example_put_to_nurbs program~example_put_to_nurbs->none~set - - + + program~example_put_to_nurbs->proc~export_xc - - + + program~example_put_to_nurbs->proc~export_xg - - + + program~example_put_to_nurbs->proc~finalize - - + + program~example_put_to_nurbs->proc~hexahedron_xc - - + + program~example_put_to_nurbs->proc~put_to_nurbs - - + + program~example_put_to_nurbs->proc~show - - + + program~nearest_point_1d - -nearest_point_1d + +nearest_point_1d - + -program~nearest_point_1d->none~set~2 - - +program~nearest_point_1d->none~set~3 + + - + -program~nearest_point_1d->proc~create~2 - - +program~nearest_point_1d->proc~create~3 + + - + -program~nearest_point_1d->proc~finalize~2 - - +program~nearest_point_1d->proc~finalize~3 + + - + -program~nearest_point_1d->proc~nearest_point2~2 - - +program~nearest_point_1d->proc~nearest_point2~3 + + - + -program~nearest_point_1d->proc~nearest_point~2 - - +program~nearest_point_1d->proc~nearest_point~3 + + program~nearest_point_2d - -nearest_point_2d + +nearest_point_2d - + -program~nearest_point_2d->none~set~3 - - +program~nearest_point_2d->none~set~2 + + - + -program~nearest_point_2d->proc~create~3 - - +program~nearest_point_2d->proc~create~2 + + - + -program~nearest_point_2d->proc~finalize~3 - - +program~nearest_point_2d->proc~finalize~2 + + - + -program~nearest_point_2d->proc~nearest_point2~3 - - +program~nearest_point_2d->proc~nearest_point2~2 + + - + -program~nearest_point_2d->proc~nearest_point~3 - - +program~nearest_point_2d->proc~nearest_point~2 + + program~nearest_point_2d_bench - -nearest_point_2d_bench + +nearest_point_2d_bench - + -program~nearest_point_2d_bench->proc~create~3 - - +program~nearest_point_2d_bench->proc~create~2 + + - + -program~nearest_point_2d_bench->proc~finalize~3 - - +program~nearest_point_2d_bench->proc~finalize~2 + + - + -program~nearest_point_2d_bench->proc~nearest_point~3 - - +program~nearest_point_2d_bench->proc~nearest_point~2 + + program~nearest_point_2d_bench->proc~set_tetragon - - + + program~nearest_point_2d_bench->timer_start - - + + program~nearest_point_2d_bench->timer_stop - - + + program~nearest_point_3d - -nearest_point_3d + +nearest_point_3d program~nearest_point_3d->none~set - - + + program~nearest_point_3d->proc~create - - + + program~nearest_point_3d->proc~finalize - - + + program~nearest_point_3d->proc~nearest_point - - + + program~nearest_point_3d->proc~nearest_point2 - - + + @@ -7910,491 +7910,491 @@

    Procedures

    - + -program~shape_c_1d->proc~create~2 - - +program~shape_c_1d->proc~create~3 + + - + -program~shape_c_1d->proc~export_xc~2 - - +program~shape_c_1d->proc~export_xc~3 + + - + -program~shape_c_1d->proc~export_xg~2 - - +program~shape_c_1d->proc~export_xg~3 + + - + -program~shape_c_1d->proc~finalize~2 - - +program~shape_c_1d->proc~finalize~3 + + - + -program~shape_c_1d->proc~set_c~2 - - +program~shape_c_1d->proc~set_c~3 + + - + -program~shape_c_1d->proc~show~2 - - +program~shape_c_1d->proc~show~3 + + program~shape_c_2d - -shape_C_2d + +shape_C_2d - + -program~shape_c_2d->proc~create~3 - - +program~shape_c_2d->proc~create~2 + + - + -program~shape_c_2d->proc~export_xc~3 - - +program~shape_c_2d->proc~export_xc~2 + + - + -program~shape_c_2d->proc~export_xg~3 - - +program~shape_c_2d->proc~export_xg~2 + + - + -program~shape_c_2d->proc~finalize~3 - - +program~shape_c_2d->proc~finalize~2 + + - + -program~shape_c_2d->proc~set_c~3 - - +program~shape_c_2d->proc~set_c~2 + + - + -program~shape_c_2d->proc~show~3 - - +program~shape_c_2d->proc~show~2 + + program~shape_c_3d - -shape_C_3d + +shape_C_3d program~shape_c_3d->proc~create - - + + program~shape_c_3d->proc~export_xc - - + + program~shape_c_3d->proc~export_xg - - + + program~shape_c_3d->proc~finalize - - + + program~shape_c_3d->proc~set_c - - + + program~shape_c_3d->proc~show - - + + program~shape_circle - -shape_circle + +shape_circle - + -program~shape_circle->proc~create~2 - - +program~shape_circle->proc~create~3 + + - + -program~shape_circle->proc~export_xc~2 - - +program~shape_circle->proc~export_xc~3 + + - + -program~shape_circle->proc~export_xg~2 - - +program~shape_circle->proc~export_xg~3 + + - + -program~shape_circle->proc~finalize~2 - - +program~shape_circle->proc~finalize~3 + + program~shape_circle->proc~set_circle - - + + - + -program~shape_circle->proc~show~2 - - +program~shape_circle->proc~show~3 + + program~shape_half_circle - -shape_half_circle + +shape_half_circle - + -program~shape_half_circle->proc~create~2 - - +program~shape_half_circle->proc~create~3 + + - + -program~shape_half_circle->proc~export_xc~2 - - +program~shape_half_circle->proc~export_xc~3 + + - + -program~shape_half_circle->proc~export_xg~2 - - +program~shape_half_circle->proc~export_xg~3 + + - + -program~shape_half_circle->proc~finalize~2 - - +program~shape_half_circle->proc~finalize~3 + + program~shape_half_circle->proc~set_half_circle - - + + - + -program~shape_half_circle->proc~show~2 - - +program~shape_half_circle->proc~show~3 + + program~shape_half_ring_2d - -shape_half_ring_2d + +shape_half_ring_2d - + -program~shape_half_ring_2d->proc~create~3 - - +program~shape_half_ring_2d->proc~create~2 + + - + -program~shape_half_ring_2d->proc~export_xc~3 - - +program~shape_half_ring_2d->proc~export_xc~2 + + - + -program~shape_half_ring_2d->proc~export_xg~3 - - +program~shape_half_ring_2d->proc~export_xg~2 + + - + -program~shape_half_ring_2d->proc~finalize~3 - - +program~shape_half_ring_2d->proc~finalize~2 + + program~shape_half_ring_2d->proc~set_half_ring~2 - - + + - + -program~shape_half_ring_2d->proc~show~3 - - +program~shape_half_ring_2d->proc~show~2 + + program~shape_half_ring_3d - -shape_half_ring_3d + +shape_half_ring_3d program~shape_half_ring_3d->proc~create - - + + program~shape_half_ring_3d->proc~export_xc - - + + program~shape_half_ring_3d->proc~export_xg - - + + program~shape_half_ring_3d->proc~finalize - - + + program~shape_half_ring_3d->proc~set_half_ring - - + + program~shape_half_ring_3d->proc~show - - + + program~shape_hexahedron - -shape_hexahedron + +shape_hexahedron program~shape_hexahedron->proc~create - - + + program~shape_hexahedron->proc~export_xc - - + + program~shape_hexahedron->proc~export_xg - - + + program~shape_hexahedron->proc~finalize - - + + program~shape_hexahedron->proc~set_hexahedron - - + + program~shape_hexahedron->proc~show - - + + program~shape_ring_2d - -shape_ring_2d + +shape_ring_2d - + -program~shape_ring_2d->proc~create~3 - - +program~shape_ring_2d->proc~create~2 + + - + -program~shape_ring_2d->proc~export_xc~3 - - +program~shape_ring_2d->proc~export_xc~2 + + - + -program~shape_ring_2d->proc~export_xg~3 - - +program~shape_ring_2d->proc~export_xg~2 + + - + -program~shape_ring_2d->proc~finalize~3 - - +program~shape_ring_2d->proc~finalize~2 + + program~shape_ring_2d->proc~set_ring~2 - - + + - + -program~shape_ring_2d->proc~show~3 - - +program~shape_ring_2d->proc~show~2 + + program~shape_ring_3d - -shape_ring_3d + +shape_ring_3d program~shape_ring_3d->proc~create - - + + program~shape_ring_3d->proc~export_xc - - + + program~shape_ring_3d->proc~export_xg - - + + program~shape_ring_3d->proc~finalize - - + + program~shape_ring_3d->proc~set_ring - - + + program~shape_ring_3d->proc~show - - + + program~shape_tetragon - -shape_tetragon + +shape_tetragon - + -program~shape_tetragon->proc~create~3 - - +program~shape_tetragon->proc~create~2 + + - + -program~shape_tetragon->proc~export_xc~3 - - +program~shape_tetragon->proc~export_xc~2 + + - + -program~shape_tetragon->proc~export_xg~3 - - +program~shape_tetragon->proc~export_xg~2 + + - + -program~shape_tetragon->proc~finalize~3 - - +program~shape_tetragon->proc~finalize~2 + + program~shape_tetragon->proc~set_tetragon - - + + - + -program~shape_tetragon->proc~show~3 - - +program~shape_tetragon->proc~show~2 + +
    @@ -8498,7 +8498,7 @@

    Documentation generated by FORD - on 2024-06-22T18:18:26.744704

    + on 2024-06-22T18:21:15.937502


    diff --git a/lists/programs.html b/lists/programs.html index e43d4ffdd..5c00ced59 100644 --- a/lists/programs.html +++ b/lists/programs.html @@ -237,7 +237,7 @@

    Programs

    Documentation generated by FORD - on 2024-06-22T18:18:26.744704

    + on 2024-06-22T18:21:15.937502


    diff --git a/lists/types.html b/lists/types.html index 1cac6d0a1..32a95ac9a 100644 --- a/lists/types.html +++ b/lists/types.html @@ -197,7 +197,7 @@

    Documentation generated by FORD - on 2024-06-22T18:18:26.744704

    + on 2024-06-22T18:21:15.937502


    diff --git a/module/forcad.html b/module/forcad.html index a5d99b963..ea5fecf3b 100644 --- a/module/forcad.html +++ b/module/forcad.html @@ -144,10 +144,10 @@

    Uses


    diff --git a/module/forcad_nurbs_curve.html b/module/forcad_nurbs_curve.html index bbc295d6b..065005fc0 100644 --- a/module/forcad_nurbs_curve.html +++ b/module/forcad_nurbs_curve.html @@ -124,10 +124,10 @@

    Interfaces

    @@ -153,30 +153,30 @@

    Functions

    @@ -188,39 +188,39 @@

    Subroutines

    @@ -861,8 +861,8 @@

    Interfaces

    - -

    private interface compute_Tgc + +

    private interface compute_Tgc

      @@ -886,7 +886,7 @@

      Arguments

      - + real(kind=rk), intent(in) @@ -916,7 +916,7 @@

      Arguments

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

      Arguments

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

      Arguments

      - + real(kind=rk), intent(in), @@ -1004,7 +1004,7 @@

      Arguments

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

      Arguments

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

      Arguments

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

      Arguments

      - + real(kind=rk), intent(in) @@ -1107,7 +1107,7 @@

      Arguments

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

      Arguments

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

      Arguments

      - + real(kind=rk), intent(in), @@ -1180,7 +1180,7 @@

      Arguments

      - + real(kind=rk), intent(in), @@ -1210,7 +1210,7 @@

      Arguments

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

      Arguments

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

      Arguments

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

      Arguments

      - + real(kind=rk), intent(in), @@ -1283,8 +1283,8 @@

      - -

      private interface compute_Xg + +

      private interface compute_Xg

        @@ -1308,7 +1308,7 @@

        Arguments

        - + real(kind=rk), intent(in), @@ -1338,7 +1338,7 @@

        Arguments

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

        Arguments

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

        Arguments

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

        Arguments

        - + real(kind=rk), intent(in), @@ -1426,7 +1426,7 @@

        Arguments

        - + real(kind=rk), intent(in) @@ -1456,7 +1456,7 @@

        Arguments

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

        Arguments

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

        Arguments

        - + real(kind=rk), intent(in), @@ -1529,7 +1529,7 @@

        Arguments

        - + real(kind=rk), intent(in), @@ -1559,7 +1559,7 @@

        Arguments

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

        Arguments

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

        Arguments

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

        Arguments

        - + real(kind=rk), intent(in), @@ -1619,7 +1619,7 @@

        Arguments

        - + real(kind=rk), intent(in), @@ -1662,7 +1662,7 @@

        Arguments

        - + real(kind=rk), intent(in) @@ -1692,7 +1692,7 @@

        Arguments

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

        Arguments

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

        Arguments

        - + real(kind=rk), intent(in), @@ -1737,7 +1737,7 @@

        Arguments

        - + real(kind=rk), intent(in), @@ -1765,8 +1765,8 @@

        - -

        private interface compute_d2Tgc + +

        private interface compute_d2Tgc

          @@ -1790,7 +1790,7 @@

          Arguments

          - + real(kind=rk), intent(in) @@ -1820,7 +1820,7 @@

          Arguments

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

          Arguments

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

          Arguments

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

          Arguments

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

          Arguments

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

          Arguments

          - + real(kind=rk), intent(in), @@ -1948,7 +1948,7 @@

          Arguments

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

          Arguments

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

          Arguments

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

          Arguments

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

          Arguments

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

          Arguments

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

          Arguments

          - + real(kind=rk), intent(in) @@ -2091,7 +2091,7 @@

          Arguments

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

          Arguments

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

          Arguments

          - + real(kind=rk), intent(in), @@ -2136,7 +2136,7 @@

          Arguments

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

          Arguments

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

          Arguments

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

          Arguments

          - + real(kind=rk), intent(in), @@ -2234,7 +2234,7 @@

          Arguments

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

          Arguments

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

          Arguments

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

          Arguments

          - + real(kind=rk), intent(in), @@ -2294,7 +2294,7 @@

          Arguments

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

          Arguments

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

          Arguments

          - + real(kind=rk), intent(out), @@ -2347,8 +2347,8 @@

          Arguments

          - -

          private interface compute_dTgc + +

          private interface compute_dTgc

            @@ -2372,7 +2372,7 @@

            Arguments

            - + real(kind=rk), intent(in) @@ -2402,7 +2402,7 @@

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

            - + real(kind=rk), intent(in), @@ -2515,7 +2515,7 @@

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

            - + real(kind=rk), intent(in) @@ -2643,7 +2643,7 @@

            Arguments

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

            Arguments

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

            Arguments

            - + real(kind=rk), intent(in), @@ -2688,7 +2688,7 @@

            Arguments

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

            Arguments

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

            Arguments

            - + real(kind=rk), intent(in), @@ -2771,7 +2771,7 @@

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

            - + real(kind=rk), intent(in), @@ -2831,7 +2831,7 @@

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

            - + real(kind=rk), intent(in), @@ -2924,7 +2924,7 @@

            Arguments

            - + real(kind=rk), intent(in), @@ -2981,7 +2981,7 @@

            Components

            - + real(kind=rk), private, @@ -2998,7 +2998,7 @@

            Components

            - + real(kind=rk), private, @@ -3015,7 +3015,7 @@

            Components

            - + real(kind=rk), private, @@ -3032,7 +3032,7 @@

            Components

            - + real(kind=rk), private, @@ -3049,7 +3049,7 @@

            Components

            - + integer, private @@ -3066,7 +3066,7 @@

            Components

            - + integer, private, @@ -3083,7 +3083,7 @@

            Components

            - + integer, private, @@ -3100,7 +3100,7 @@

            Components

            - + integer, private, @@ -3117,7 +3117,7 @@

            Components

            - + real(kind=rk), private, @@ -3134,7 +3134,7 @@

            Components

            - + integer, private @@ -3151,7 +3151,7 @@

            Components

            - + integer, private @@ -3177,208 +3177,208 @@

            Type-Bound Procedures

            generic, public :: - basis => basis_vector, basis_scalar -

            Compute the basis functions of the NURBS curve

            Read more… + basis => basis_vector, basis_scalar +

            Compute the basis functions of the NURBS curve

            Read more… procedure, public :: - cmp_Xg -

            Compute geometry points

            Read more… + cmp_Xg +

            Compute geometry points

            Read more… procedure, public :: - cmp_degree -

            Compute degree of the NURBS curve

            Read more… + cmp_degree +

            Compute degree of the NURBS curve

            Read more… procedure, public :: - cmp_elem -

            Generate IGA element connectivity

            Read more… + cmp_elem +

            Generate IGA element connectivity

            Read more… procedure, public :: - cmp_elem_Xc_vis -

            Generate connectivity for control points

            Read more… + cmp_elem_Xc_vis +

            Generate connectivity for control points

            Read more… procedure, public :: - cmp_elem_Xg_vis -

            Generate connectivity for geometry points

            Read more… + cmp_elem_Xg_vis +

            Generate connectivity for geometry points

            Read more… procedure, public :: - cmp_nc -

            Compute number of required control points

            Read more… + cmp_nc +

            Compute number of required control points

            Read more… procedure, public :: - create -

            Generate geometry points

            Read more… + create +

            Generate geometry points

            Read more… generic, public :: - derivative => derivative_vector, derivative_scalar -

            Compute the derivative of the NURBS curve

            Read more… + derivative => derivative_vector, derivative_scalar +

            Compute the derivative of the NURBS curve

            Read more… generic, public :: - derivative2 => derivative2_vector, derivative2_scalar -

            Compute the second derivative of the NURBS curve

            Read more… + derivative2 => derivative2_vector, derivative2_scalar +

            Compute the second derivative of the NURBS curve

            Read more… procedure, public :: - elevate_degree -

            Elevate the degree of the curve

            Read more… + elevate_degree +

            Elevate the degree of the curve

            Read more… procedure, public :: - export_Xc -

            Export control points to VTK file

            Read more… + export_Xc +

            Export control points to VTK file

            Read more… procedure, public :: - export_Xg -

            Export geometry points to VTK file

            Read more… + export_Xg +

            Export geometry points to VTK file

            Read more… procedure, public :: - finalize -

            Finalize the NURBS curve object

            Read more… + finalize +

            Finalize the NURBS curve object

            Read more… generic, public :: - get_Wc => get_Wc_all, get_Wci -

            Get weights

            Read more… + get_Wc => get_Wc_all, get_Wci +

            Get weights

            Read more… generic, public :: - get_Xc => get_Xc_all, get_Xci, get_Xcid -

            Get control points

            Read more… + get_Xc => get_Xc_all, get_Xci, get_Xcid +

            Get control points

            Read more… generic, public :: - get_Xg => get_Xg_all, get_Xgi, get_Xgid -

            Get geometry points

            Read more… + get_Xg => get_Xg_all, get_Xgi, get_Xgid +

            Get geometry points

            Read more… procedure, public :: - get_Xt -

            Get parameter values

            Read more… + get_Xt +

            Get parameter values

            Read more… procedure, public :: - get_continuity -

            Compute and return the continuity of the curve

            Read more… + get_continuity +

            Compute and return the continuity of the curve

            Read more… procedure, public :: - get_degree -

            Get degree of the NURBS curve

            Read more… + get_degree +

            Get degree of the NURBS curve

            Read more… procedure, public :: - get_elem -

            Get IGA element connectivity

            Read more… + get_elem +

            Get IGA element connectivity

            Read more… procedure, public :: - get_elem_Xc_vis -

            Get connectivity for control points

            Read more… + get_elem_Xc_vis +

            Get connectivity for control points

            Read more… procedure, public :: - get_elem_Xg_vis -

            Get connectivity for geometry points

            Read more… + get_elem_Xg_vis +

            Get connectivity for geometry points

            Read more… generic, public :: - get_knot => get_knoti, get_knot_all -

            Get knot vector

            Read more… + get_knot => get_knoti, get_knot_all +

            Get knot vector

            Read more… procedure, public :: - get_multiplicity -

            Compute and return the multiplicity of the knots

            Read more… + get_multiplicity +

            Compute and return the multiplicity of the knots

            Read more… procedure, public :: - get_nc -

            Get number of control points

            Read more… + get_nc +

            Get number of control points

            Read more… procedure, public :: - get_ng -

            Get number of geometry points

            Read more… + get_ng +

            Get number of geometry points

            Read more… procedure, public :: - insert_knots -

            Insert knots into the knot vector

            Read more… + insert_knots +

            Insert knots into the knot vector

            Read more… procedure, public :: - is_rational -

            Check if the NURBS curve is rational

            Read more… + is_rational +

            Check if the NURBS curve is rational

            Read more… procedure, public :: - modify_Wc -

            Modify weights

            Read more… + modify_Wc +

            Modify weights

            Read more… procedure, public :: - modify_Xc -

            Modify control points

            Read more… + modify_Xc +

            Modify control points

            Read more… procedure, public :: - nearest_point -

            Find the nearest point on the NURBS curve (Approximation)

            Read more… + nearest_point +

            Find the nearest point on the NURBS curve (Approximation)

            Read more… procedure, public :: - nearest_point2 -

            Find the nearest point on the NURBS curve (Minimization - Newton's method)

            Read more… + nearest_point2 +

            Find the nearest point on the NURBS curve (Minimization - Newton's method)

            Read more… procedure, public :: - remove_knots -

            Remove knots from the knot vector

            Read more… + remove_knots +

            Remove knots from the knot vector

            Read more… procedure, public :: - rotate_Xc -

            Rotate control points

            Read more… + rotate_Xc +

            Rotate control points

            Read more… procedure, public :: - rotate_Xg -

            Rotate geometry points

            Read more… + rotate_Xg +

            Rotate geometry points

            Read more… generic, public :: - set => set1, set2, set3 -

            Set NURBS curve

            Read more… + set => set1, set2, set3 +

            Set NURBS curve

            Read more… procedure, public :: - set1 -

            Set knot vector, control points and weights for the NURBS curve object

            Read more… + set1 +

            Set knot vector, control points and weights for the NURBS curve object

            Read more… procedure, public :: - set2 -

            Set NURBS curve using nodes of parameter space, degree, continuity, control points and weights

            Read more… + set2 +

            Set NURBS curve using nodes of parameter space, degree, continuity, control points and weights

            Read more… procedure, public :: - set3 -

            Set Bezier or Rational Bezier curve using control points and weights

            Read more… + set3 +

            Set Bezier or Rational Bezier curve using control points and weights

            Read more… procedure, public :: - set_C -

            Set a C-shape

            Read more… + set_C +

            Set a C-shape

            Read more… procedure, public :: @@ -3387,18 +3387,18 @@

            Type-Bound Procedures

            procedure, public :: - set_elem -

            Set IGA element connectivity

            Read more… + set_elem +

            Set IGA element connectivity

            Read more… procedure, public :: - set_elem_Xc_vis -

            Set connectivity for control points

            Read more… + set_elem_Xc_vis +

            Set connectivity for control points

            Read more… procedure, public :: - set_elem_Xg_vis -

            Set connectivity for geometry points

            Read more… + set_elem_Xg_vis +

            Set connectivity for geometry points

            Read more… procedure, public :: @@ -3407,98 +3407,98 @@

            Type-Bound Procedures

            procedure, public :: - show -

            Show the NURBS object using PyVista

            Read more… + show +

            Show the NURBS object using PyVista

            Read more… procedure, public :: - translate_Xc -

            Translate control points

            Read more… + translate_Xc +

            Translate control points

            Read more… procedure, public :: - translate_Xg -

            Translate geometry points

            Read more… + translate_Xg +

            Translate geometry points

            Read more… procedure, private :: - basis_scalar -

            Compute the basis functions of the NURBS curve

            Read more… + basis_scalar +

            Compute the basis functions of the NURBS curve

            Read more… procedure, private :: - basis_vector -

            Compute the basis functions of the NURBS curve

            Read more… + basis_vector +

            Compute the basis functions of the NURBS curve

            Read more… procedure, private :: - derivative2_scalar -

            Compute the second derivative of the NURBS curve

            Read more… + derivative2_scalar +

            Compute the second derivative of the NURBS curve

            Read more… procedure, private :: - derivative2_vector -

            Compute the second derivative of the NURBS curve

            Read more… + derivative2_vector +

            Compute the second derivative of the NURBS curve

            Read more… procedure, private :: - derivative_scalar -

            Compute the derivative of the NURBS curve

            Read more… + derivative_scalar +

            Compute the derivative of the NURBS curve

            Read more… procedure, private :: - derivative_vector -

            Compute the derivative of the NURBS curve

            Read more… + derivative_vector +

            Compute the derivative of the NURBS curve

            Read more… procedure, private :: - get_Wc_all -

            Get all weights

            Read more… + get_Wc_all +

            Get all weights

            Read more… procedure, private :: - get_Wci -

            Get i-th weight

            Read more… + get_Wci +

            Get i-th weight

            Read more… procedure, private :: - get_Xc_all -

            Get all control points

            Read more… + get_Xc_all +

            Get all control points

            Read more… procedure, private :: - get_Xci -

            Get i-th control point

            Read more… + get_Xci +

            Get i-th control point

            Read more… procedure, private :: - get_Xcid -

            Get i-th control point in a specific direction

            Read more… + get_Xcid +

            Get i-th control point in a specific direction

            Read more… procedure, private :: - get_Xg_all -

            Get all geometry points

            Read more… + get_Xg_all +

            Get all geometry points

            Read more… procedure, private :: - get_Xgi -

            Get i-th geometry point

            Read more… + get_Xgi +

            Get i-th geometry point

            Read more… procedure, private :: - get_Xgid -

            Get i-th geometry point in a specific direction

            Read more… + get_Xgid +

            Get i-th geometry point in a specific direction

            Read more… procedure, private :: - get_knot_all -

            Get all knot vectors

            Read more… + get_knot_all +

            Get all knot vectors

            Read more… procedure, private :: - get_knoti -

            Get i-th knot value

            Read more… + get_knoti +

            Get i-th knot value

            Read more… @@ -3511,7 +3511,7 @@

            Type-Bound Procedures

            Functions

            -

            private pure function cmp_Xg(this, Xt) result(Xg) +

            private pure function cmp_Xg(this, Xt) result(Xg)

            @@ -3534,7 +3534,7 @@

            Arguments

            - + class(nurbs_curve), intent(in) @@ -3549,7 +3549,7 @@

            Arguments

            - + real(kind=rk), intent(in) @@ -3575,7 +3575,7 @@

            -

            private pure function cmp_elem(this) result(elemConn) +

            private pure function cmp_elem(this) result(elemConn)

            @@ -3598,7 +3598,7 @@

            Arguments

            - + class(nurbs_curve), intent(in) @@ -3624,7 +3624,7 @@

            -

            private pure function cmp_elem_Xc_vis(this, p) result(elemConn) +

            private pure function cmp_elem_Xc_vis(this, p) result(elemConn)

            @@ -3647,7 +3647,7 @@

            Arguments

            - + class(nurbs_curve), intent(in) @@ -3662,7 +3662,7 @@

            Arguments

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

            -

            private pure function cmp_elem_Xg_vis(this, p) result(elemConn) +

            private pure function cmp_elem_Xg_vis(this, p) result(elemConn)

            @@ -3711,7 +3711,7 @@

            Arguments

            - + class(nurbs_curve), intent(in) @@ -3726,7 +3726,7 @@

            Arguments

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

            -

            private pure function get_Wc_all(this) result(Wc) +

            private pure function get_Wc_all(this) result(Wc)

            @@ -3775,7 +3775,7 @@

            Arguments

            - + class(nurbs_curve), intent(in) @@ -3801,7 +3801,7 @@

            -

            private pure function get_Wci(this, n) result(Wc) +

            private pure function get_Wci(this, n) result(Wc)

            @@ -3824,7 +3824,7 @@

            Arguments

            - + class(nurbs_curve), intent(in) @@ -3839,7 +3839,7 @@

            Arguments

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

            -

            private pure function get_Xc_all(this) result(Xc) +

            private pure function get_Xc_all(this) result(Xc)

            @@ -3888,7 +3888,7 @@

            Arguments

            - + class(nurbs_curve), intent(in) @@ -3914,7 +3914,7 @@

            -

            private pure function get_Xci(this, n) result(Xc) +

            private pure function get_Xci(this, n) result(Xc)

            @@ -3937,7 +3937,7 @@

            Arguments

            - + class(nurbs_curve), intent(in) @@ -3952,7 +3952,7 @@

            Arguments

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

            -

            private pure function get_Xcid(this, n, dir) result(Xc) +

            private pure function get_Xcid(this, n, dir) result(Xc)

            @@ -4001,7 +4001,7 @@

            Arguments

            - + class(nurbs_curve), intent(in) @@ -4016,7 +4016,7 @@

            Arguments

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

            Arguments

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

            -

            private pure function get_Xg_all(this) result(Xg) +

            private pure function get_Xg_all(this) result(Xg)

            @@ -4080,7 +4080,7 @@

            Arguments

            - + class(nurbs_curve), intent(in) @@ -4106,7 +4106,7 @@

            -

            private pure function get_Xgi(this, n) result(Xg) +

            private pure function get_Xgi(this, n) result(Xg)

            @@ -4129,7 +4129,7 @@

            Arguments

            - + class(nurbs_curve), intent(in) @@ -4144,7 +4144,7 @@

            Arguments

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

            -

            private pure function get_Xgid(this, n, dir) result(Xg) +

            private pure function get_Xgid(this, n, dir) result(Xg)

            @@ -4193,7 +4193,7 @@

            Arguments

            - + class(nurbs_curve), intent(in) @@ -4208,7 +4208,7 @@

            Arguments

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

            Arguments

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

            -

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

            private pure function get_Xt(this) result(Xt)

            @@ -4272,7 +4272,7 @@

            Arguments

            - + class(nurbs_curve), intent(in) @@ -4298,7 +4298,7 @@

            -

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

            private pure function get_continuity(this) result(c)

            @@ -4321,7 +4321,7 @@

            Arguments

            - + class(nurbs_curve), intent(in) @@ -4370,7 +4370,7 @@

            Arguments

            - + class(nurbs_curve), intent(in) @@ -4396,7 +4396,7 @@

            -

            private pure function get_elem(this) result(elemConn) +

            private pure function get_elem(this) result(elemConn)

            @@ -4419,7 +4419,7 @@

            Arguments

            - + class(nurbs_curve), intent(in) @@ -4445,7 +4445,7 @@

            -

            private pure function get_elem_Xc_vis(this) result(elemConn) +

            private pure function get_elem_Xc_vis(this) result(elemConn)

            @@ -4468,7 +4468,7 @@

            Arguments

            - + class(nurbs_curve), intent(in) @@ -4494,7 +4494,7 @@

            -

            private pure function get_elem_Xg_vis(this) result(elemConn) +

            private pure function get_elem_Xg_vis(this) result(elemConn)

            @@ -4517,7 +4517,7 @@

            Arguments

            - + class(nurbs_curve), intent(in) @@ -4543,7 +4543,7 @@

            -

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

            private pure function get_knot_all(this) result(knot)

            @@ -4566,7 +4566,7 @@

            Arguments

            - + class(nurbs_curve), intent(in) @@ -4592,7 +4592,7 @@

            -

            private pure function get_knoti(this, i) result(knot) +

            private pure function get_knoti(this, i) result(knot)

            @@ -4615,7 +4615,7 @@

            Arguments

            - + class(nurbs_curve), intent(in) @@ -4630,7 +4630,7 @@

            Arguments

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

            -

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

            private pure function get_multiplicity(this) result(m)

            @@ -4679,7 +4679,7 @@

            Arguments

            - + class(nurbs_curve), intent(in) @@ -4705,7 +4705,7 @@

            -

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

            private pure function get_nc(this) result(nc)

            @@ -4728,7 +4728,7 @@

            Arguments

            - + class(nurbs_curve), intent(in) @@ -4754,7 +4754,7 @@

            -

            private pure function get_ng(this) result(ng) +

            private pure function get_ng(this) result(ng)

            @@ -4777,7 +4777,7 @@

            Arguments

            - + class(nurbs_curve), intent(in) @@ -4803,7 +4803,7 @@

            -

            private pure function is_rational(this) result(r) +

            private pure function is_rational(this) result(r)

            @@ -4826,7 +4826,7 @@

            Arguments

            - + class(nurbs_curve), intent(in) @@ -4857,7 +4857,7 @@

            Subroutines

            -

            private pure subroutine basis_scalar(this, Xt, Tgc) +

            private pure subroutine basis_scalar(this, Xt, Tgc)

            @@ -4880,7 +4880,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -4895,7 +4895,7 @@

            Arguments

            - + real(kind=rk), intent(in) @@ -4910,7 +4910,7 @@

            Arguments

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

            Arguments

            -

            private pure subroutine basis_vector(this, res, Xt, Tgc) +

            private pure subroutine basis_vector(this, res, Xt, Tgc)

            @@ -4954,7 +4954,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -4984,7 +4984,7 @@

            Arguments

            - + real(kind=rk), intent(in), @@ -4999,7 +4999,7 @@

            Arguments

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

            Arguments

            -

            private pure subroutine cmp_degree(this) +

            private pure subroutine cmp_degree(this)

            @@ -5043,7 +5043,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -5064,7 +5064,7 @@

            Arguments

            -

            private pure subroutine cmp_nc(this) +

            private pure subroutine cmp_nc(this)

            @@ -5087,7 +5087,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -5108,7 +5108,7 @@

            Arguments

            -

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

            private pure subroutine create(this, res, Xt)

            @@ -5131,7 +5131,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -5161,7 +5161,7 @@

            Arguments

            - + real(kind=rk), intent(in), @@ -5182,7 +5182,7 @@

            Arguments

            -

            private pure subroutine derivative2_scalar(this, Xt, d2Tgc, dTgc, Tgc) +

            private pure subroutine derivative2_scalar(this, Xt, d2Tgc, dTgc, Tgc)

            @@ -5205,7 +5205,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -5220,7 +5220,7 @@

            Arguments

            - + real(kind=rk), intent(in) @@ -5235,7 +5235,7 @@

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

            -

            private pure subroutine derivative2_vector(this, res, Xt, d2Tgc, dTgc, Tgc) +

            private pure subroutine derivative2_vector(this, res, Xt, d2Tgc, dTgc, Tgc)

            @@ -5309,7 +5309,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -5339,7 +5339,7 @@

            Arguments

            - + real(kind=rk), intent(in), @@ -5354,7 +5354,7 @@

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

            -

            private pure subroutine derivative_scalar(this, Xt, dTgc, Tgc) +

            private pure subroutine derivative_scalar(this, Xt, dTgc, Tgc)

            @@ -5428,7 +5428,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -5443,7 +5443,7 @@

            Arguments

            - + real(kind=rk), intent(in) @@ -5458,7 +5458,7 @@

            Arguments

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

            Arguments

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

            Arguments

            -

            private pure subroutine derivative_vector(this, res, Xt, dTgc, Tgc) +

            private pure subroutine derivative_vector(this, res, Xt, dTgc, Tgc)

            @@ -5517,7 +5517,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -5547,7 +5547,7 @@

            Arguments

            - + real(kind=rk), intent(in), @@ -5562,7 +5562,7 @@

            Arguments

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

            Arguments

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

            Arguments

            -

            private pure subroutine elevate_degree(this, t) +

            private pure subroutine elevate_degree(this, t)

            @@ -5621,7 +5621,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -5636,7 +5636,7 @@

            Arguments

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

            Arguments

            -

            private impure subroutine export_Xc(this, filename) +

            private impure subroutine export_Xc(this, filename)

            @@ -5680,7 +5680,7 @@

            Arguments

            - + class(nurbs_curve), intent(in) @@ -5695,7 +5695,7 @@

            Arguments

            - + character(len=*), intent(in) @@ -5716,7 +5716,7 @@

            Arguments

            -

            private impure subroutine export_Xg(this, filename) +

            private impure subroutine export_Xg(this, filename)

            @@ -5739,7 +5739,7 @@

            Arguments

            - + class(nurbs_curve), intent(in) @@ -5754,7 +5754,7 @@

            Arguments

            - + character(len=*), intent(in) @@ -5775,7 +5775,7 @@

            Arguments

            -

            private pure subroutine finalize(this) +

            private pure subroutine finalize(this)

            @@ -5798,7 +5798,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -5819,7 +5819,7 @@

            Arguments

            -

            private pure subroutine insert_knots(this, Xth, r) +

            private pure subroutine insert_knots(this, Xth, r)

            @@ -5842,7 +5842,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -5857,7 +5857,7 @@

            Arguments

            - + real(kind=rk), intent(in), @@ -5872,7 +5872,7 @@

            Arguments

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

            Arguments

            -

            private pure subroutine modify_Wc(this, W, num) +

            private pure subroutine modify_Wc(this, W, num)

            @@ -5916,7 +5916,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -5931,7 +5931,7 @@

            Arguments

            - + real(kind=rk), intent(in) @@ -5946,7 +5946,7 @@

            Arguments

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

            Arguments

            -

            private pure subroutine modify_Xc(this, X, num, dir) +

            private pure subroutine modify_Xc(this, X, num, dir)

            @@ -5990,7 +5990,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -6005,7 +6005,7 @@

            Arguments

            - + real(kind=rk), intent(in) @@ -6020,7 +6020,7 @@

            Arguments

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

            Arguments

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

            Arguments

            -

            private pure subroutine nearest_point(this, point_Xg, nearest_Xg, nearest_Xt, id) +

            private pure subroutine nearest_point(this, point_Xg, nearest_Xg, nearest_Xt, id)

            @@ -6079,7 +6079,7 @@

            Arguments

            - + class(nurbs_curve), intent(in) @@ -6094,7 +6094,7 @@

            Arguments

            - + real(kind=rk), intent(in) @@ -6109,7 +6109,7 @@

            Arguments

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

            Arguments

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

            Arguments

            - + integer, intent(out), @@ -6160,7 +6160,7 @@

            Arguments

            -

            private impure subroutine nearest_point2(this, point_Xg, tol, maxit, nearest_Xt, nearest_Xg) +

            private impure subroutine nearest_point2(this, point_Xg, tol, maxit, nearest_Xt, nearest_Xg)

            @@ -6183,7 +6183,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -6198,7 +6198,7 @@

            Arguments

            - + real(kind=rk), intent(in) @@ -6213,7 +6213,7 @@

            Arguments

            - + real(kind=rk), intent(in) @@ -6228,7 +6228,7 @@

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

            -

            private pure subroutine remove_knots(this, Xth, r) +

            private pure subroutine remove_knots(this, Xth, r)

            @@ -6302,7 +6302,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -6317,7 +6317,7 @@

            Arguments

            - + real(kind=rk), intent(in), @@ -6332,7 +6332,7 @@

            Arguments

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

            Arguments

            -

            private pure subroutine rotate_Xc(this, alpha, beta, theta) +

            private pure subroutine rotate_Xc(this, alpha, beta, theta)

            @@ -6376,7 +6376,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -6391,7 +6391,7 @@

            Arguments

            - + real(kind=rk), intent(in) @@ -6406,7 +6406,7 @@

            Arguments

            - + real(kind=rk), intent(in) @@ -6421,7 +6421,7 @@

            Arguments

            - + real(kind=rk), intent(in) @@ -6442,7 +6442,7 @@

            Arguments

            -

            private pure subroutine rotate_Xg(this, alpha, beta, theta) +

            private pure subroutine rotate_Xg(this, alpha, beta, theta)

            @@ -6465,7 +6465,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -6480,7 +6480,7 @@

            Arguments

            - + real(kind=rk), intent(in) @@ -6495,7 +6495,7 @@

            Arguments

            - + real(kind=rk), intent(in) @@ -6510,7 +6510,7 @@

            Arguments

            - + real(kind=rk), intent(in) @@ -6531,7 +6531,7 @@

            Arguments

            -

            private pure subroutine set1(this, knot, Xc, Wc) +

            private pure subroutine set1(this, knot, Xc, Wc)

            @@ -6554,7 +6554,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -6569,7 +6569,7 @@

            Arguments

            - + real(kind=rk), intent(in), @@ -6584,7 +6584,7 @@

            Arguments

            - + real(kind=rk), intent(in), @@ -6599,7 +6599,7 @@

            Arguments

            - + real(kind=rk), intent(in), @@ -6620,7 +6620,7 @@

            Arguments

            -

            private pure subroutine set2(this, Xth_dir, degree, continuity, Xc, Wc) +

            private pure subroutine set2(this, Xth_dir, degree, continuity, Xc, Wc)

            @@ -6643,7 +6643,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -6673,7 +6673,7 @@

            Arguments

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

            Arguments

            - + real(kind=rk), intent(in), @@ -6718,7 +6718,7 @@

            Arguments

            - + real(kind=rk), intent(in), @@ -6739,7 +6739,7 @@

            Arguments

            -

            private pure subroutine set3(this, Xc, Wc) +

            private pure subroutine set3(this, Xc, Wc)

            @@ -6762,7 +6762,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -6777,7 +6777,7 @@

            Arguments

            - + real(kind=rk), intent(in), @@ -6792,7 +6792,7 @@

            Arguments

            - + real(kind=rk), intent(in), @@ -6813,7 +6813,7 @@

            Arguments

            -

            private pure subroutine set_C(this, center, radius) +

            private pure subroutine set_C(this, center, radius)

            @@ -6836,7 +6836,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -6851,7 +6851,7 @@

            Arguments

            - + real(kind=rk), intent(in), @@ -6910,7 +6910,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -6925,7 +6925,7 @@

            Arguments

            - + real(kind=rk), intent(in), @@ -6961,7 +6961,7 @@

            Arguments

            -

            private pure subroutine set_elem(this, elemConn) +

            private pure subroutine set_elem(this, elemConn)

            @@ -6984,7 +6984,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -6999,7 +6999,7 @@

            Arguments

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

            Arguments

            -

            private pure subroutine set_elem_Xc_vis(this, elemConn) +

            private pure subroutine set_elem_Xc_vis(this, elemConn)

            @@ -7043,7 +7043,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -7058,7 +7058,7 @@

            Arguments

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

            Arguments

            -

            private pure subroutine set_elem_Xg_vis(this, elemConn) +

            private pure subroutine set_elem_Xg_vis(this, elemConn)

            @@ -7102,7 +7102,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -7117,7 +7117,7 @@

            Arguments

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

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -7176,7 +7176,7 @@

            Arguments

            - + real(kind=rk), intent(in), @@ -7212,7 +7212,7 @@

            Arguments

            -

            private impure subroutine show(this, vtkfile_Xc, vtkfile_Xg) +

            private impure subroutine show(this, vtkfile_Xc, vtkfile_Xg)

            @@ -7235,7 +7235,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -7250,7 +7250,7 @@

            Arguments

            - + character(len=*), intent(in) @@ -7265,7 +7265,7 @@

            Arguments

            - + character(len=*), intent(in) @@ -7286,7 +7286,7 @@

            Arguments

            -

            private pure subroutine translate_Xc(this, vec) +

            private pure subroutine translate_Xc(this, vec)

            @@ -7309,7 +7309,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -7324,7 +7324,7 @@

            Arguments

            - + real(kind=rk), intent(in) @@ -7345,7 +7345,7 @@

            Arguments

            -

            private pure subroutine translate_Xg(this, vec) +

            private pure subroutine translate_Xg(this, vec)

            @@ -7368,7 +7368,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -7383,7 +7383,7 @@

            Arguments

            - + real(kind=rk), intent(in) @@ -7426,7 +7426,7 @@

            Arguments

            Documentation generated by FORD - on 2024-06-22T18:18:26.744704

            + on 2024-06-22T18:21:15.937502


            diff --git a/module/forcad_nurbs_surface.html b/module/forcad_nurbs_surface.html index 84add559e..541fdc199 100644 --- a/module/forcad_nurbs_surface.html +++ b/module/forcad_nurbs_surface.html @@ -124,10 +124,10 @@

            Interfaces

            @@ -153,31 +153,31 @@

            Functions

            @@ -189,40 +189,40 @@

            Subroutines

            @@ -863,8 +863,8 @@

            Interfaces

            - -

            private interface compute_Tgc + +

            private interface compute_Tgc

              @@ -888,7 +888,7 @@

              Arguments

              - + real(kind=rk), intent(in), @@ -933,7 +933,7 @@

              Arguments

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

              Arguments

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

              Arguments

              - + real(kind=rk), intent(in), @@ -1036,7 +1036,7 @@

              Arguments

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

              Arguments

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

              Arguments

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

              Arguments

              - + real(kind=rk), intent(in), @@ -1154,7 +1154,7 @@

              Arguments

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

              Arguments

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

              Arguments

              - + real(kind=rk), intent(in), @@ -1227,7 +1227,7 @@

              Arguments

              - + real(kind=rk), intent(in), @@ -1272,7 +1272,7 @@

              Arguments

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

              Arguments

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

              Arguments

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

              Arguments

              - + real(kind=rk), intent(in), @@ -1345,8 +1345,8 @@

              - -

              private interface compute_Xg + +

              private interface compute_Xg

                @@ -1370,7 +1370,7 @@

                Arguments

                - + real(kind=rk), intent(in), @@ -1415,7 +1415,7 @@

                Arguments

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

                Arguments

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

                Arguments

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

                Arguments

                - + real(kind=rk), intent(in), @@ -1503,7 +1503,7 @@

                Arguments

                - + real(kind=rk), intent(in), @@ -1548,7 +1548,7 @@

                Arguments

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

                Arguments

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

                Arguments

                - + real(kind=rk), intent(in), @@ -1621,7 +1621,7 @@

                Arguments

                - + real(kind=rk), intent(in), @@ -1666,7 +1666,7 @@

                Arguments

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

                Arguments

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

                Arguments

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

                Arguments

                - + real(kind=rk), intent(in), @@ -1726,7 +1726,7 @@

                Arguments

                - + real(kind=rk), intent(in), @@ -1769,7 +1769,7 @@

                Arguments

                - + real(kind=rk), intent(in), @@ -1814,7 +1814,7 @@

                Arguments

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

                Arguments

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

                Arguments

                - + real(kind=rk), intent(in), @@ -1859,7 +1859,7 @@

                Arguments

                - + real(kind=rk), intent(in), @@ -1887,8 +1887,8 @@

                - -

                private interface compute_d2Tgc + +

                private interface compute_d2Tgc

                  @@ -1912,7 +1912,7 @@

                  Arguments

                  - + real(kind=rk), intent(in), @@ -1957,7 +1957,7 @@

                  Arguments

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

                  Arguments

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

                  Arguments

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

                  Arguments

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

                  Arguments

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

                  Arguments

                  - + real(kind=rk), intent(in), @@ -2100,7 +2100,7 @@

                  Arguments

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

                  Arguments

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

                  Arguments

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

                  Arguments

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

                  Arguments

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

                  Arguments

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

                  Arguments

                  - + real(kind=rk), intent(in), @@ -2258,7 +2258,7 @@

                  Arguments

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

                  Arguments

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

                  Arguments

                  - + real(kind=rk), intent(in), @@ -2303,7 +2303,7 @@

                  Arguments

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

                  Arguments

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

                  Arguments

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

                  Arguments

                  - + real(kind=rk), intent(in), @@ -2416,7 +2416,7 @@

                  Arguments

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

                  Arguments

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

                  Arguments

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

                  Arguments

                  - + real(kind=rk), intent(in), @@ -2476,7 +2476,7 @@

                  Arguments

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

                  Arguments

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

                  Arguments

                  - + real(kind=rk), intent(out), @@ -2529,8 +2529,8 @@

                  Arguments

                  - -

                  private interface compute_dTgc + +

                  private interface compute_dTgc

                    @@ -2554,7 +2554,7 @@

                    Arguments

                    - + real(kind=rk), intent(in), @@ -2599,7 +2599,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

                    - + real(kind=rk), intent(in), @@ -2727,7 +2727,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

                    - + real(kind=rk), intent(in), @@ -2870,7 +2870,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

                    - + real(kind=rk), intent(in), @@ -2915,7 +2915,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

                    - + real(kind=rk), intent(in), @@ -3013,7 +3013,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

                    - + real(kind=rk), intent(in), @@ -3073,7 +3073,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

                    - + real(kind=rk), intent(in), @@ -3166,7 +3166,7 @@

                    Arguments

                    - + real(kind=rk), intent(in), @@ -3223,7 +3223,7 @@

                    Components

                    - + real(kind=rk), private, @@ -3240,7 +3240,7 @@

                    Components

                    - + real(kind=rk), private, @@ -3257,7 +3257,7 @@

                    Components

                    - + real(kind=rk), private, @@ -3274,7 +3274,7 @@

                    Components

                    - + real(kind=rk), private, @@ -3325,7 +3325,7 @@

                    Components

                    - + integer, private @@ -3342,7 +3342,7 @@

                    Components

                    - + integer, private, @@ -3359,7 +3359,7 @@

                    Components

                    - + integer, private, @@ -3376,7 +3376,7 @@

                    Components

                    - + integer, private, @@ -3393,7 +3393,7 @@

                    Components

                    - + real(kind=rk), private, @@ -3410,7 +3410,7 @@

                    Components

                    - + real(kind=rk), private, @@ -3427,7 +3427,7 @@

                    Components

                    - + integer, private @@ -3444,7 +3444,7 @@

                    Components

                    - + integer, private @@ -3470,223 +3470,223 @@

                    Type-Bound Procedures

                    generic, public :: - basis => basis_vector, basis_scalar -

                    Compute the basis functions of the NURBS surface

                    Read more… + basis => basis_vector, basis_scalar +

                    Compute the basis functions of the NURBS surface

                    Read more… procedure, public :: - cmp_Xg -

                    Compute geometry points

                    Read more… + cmp_Xg +

                    Compute geometry points

                    Read more… procedure, public :: - cmp_degree -

                    Compute degree of the NURBS surface

                    Read more… + cmp_degree +

                    Compute degree of the NURBS surface

                    Read more… procedure, public :: - cmp_elem -

                    Generate IGA element connectivity

                    Read more… + cmp_elem +

                    Generate IGA element connectivity

                    Read more… procedure, public :: - cmp_elem_Xc_vis -

                    Generate connectivity for control points

                    Read more… + cmp_elem_Xc_vis +

                    Generate connectivity for control points

                    Read more… procedure, public :: - cmp_elem_Xg_vis -

                    Generate connectivity for geometry points

                    Read more… + cmp_elem_Xg_vis +

                    Generate connectivity for geometry points

                    Read more… procedure, public :: - cmp_nc -

                    Compute number of required control points

                    Read more… + cmp_nc +

                    Compute number of required control points

                    Read more… procedure, public :: - create -

                    Generate geometry points

                    Read more… + create +

                    Generate geometry points

                    Read more… generic, public :: - derivative => derivative_vector, derivative_scalar -

                    Compute the derivative of the NURBS surface

                    Read more… + derivative => derivative_vector, derivative_scalar +

                    Compute the derivative of the NURBS surface

                    Read more… generic, public :: - derivative2 => derivative2_vector, derivative2_scalar -

                    Compute the second derivative of the NURBS surface

                    Read more… + derivative2 => derivative2_vector, derivative2_scalar +

                    Compute the second derivative of the NURBS surface

                    Read more… procedure, public :: - elevate_degree -

                    Elevate degree

                    Read more… + elevate_degree +

                    Elevate degree

                    Read more… procedure, public :: - export_Xc -

                    Export control points to VTK file

                    Read more… + export_Xc +

                    Export control points to VTK file

                    Read more… procedure, public :: - export_Xg -

                    Export geometry points to VTK file

                    Read more… + export_Xg +

                    Export geometry points to VTK file

                    Read more… procedure, public :: - finalize -

                    Finalize the NURBS surface object

                    Read more… + finalize +

                    Finalize the NURBS surface object

                    Read more… generic, public :: - get_Wc => get_Wc_all, get_Wci -

                    Get weights

                    Read more… + get_Wc => get_Wc_all, get_Wci +

                    Get weights

                    Read more… generic, public :: - get_Xc => get_Xc_all, get_Xci, get_Xcid -

                    Get control points

                    Read more… + get_Xc => get_Xc_all, get_Xci, get_Xcid +

                    Get control points

                    Read more… generic, public :: - get_Xg => get_Xg_all, get_Xgi, get_Xgid -

                    Get geometry points

                    Read more… + get_Xg => get_Xg_all, get_Xgi, get_Xgid +

                    Get geometry points

                    Read more… procedure, public :: - get_Xt -

                    Get parameter values

                    Read more… + get_Xt +

                    Get parameter values

                    Read more… procedure, public :: - get_continuity -

                    Compute and return the continuity of the NURBS surface

                    Read more… + get_continuity +

                    Compute and return the continuity of the NURBS surface

                    Read more… generic, public :: - get_degree => get_degree_all, get_degree_dir -

                    Get degree of the NURBS surface

                    Read more… + get_degree => get_degree_all, get_degree_dir +

                    Get degree of the NURBS surface

                    Read more… procedure, public :: - get_elem -

                    Get IGA element connectivity

                    Read more… + get_elem +

                    Get IGA element connectivity

                    Read more… procedure, public :: - get_elem_Xc_vis -

                    Get connectivity for control points

                    Read more… + get_elem_Xc_vis +

                    Get connectivity for control points

                    Read more… procedure, public :: - get_elem_Xg_vis -

                    Get connectivity for geometry points

                    Read more… + get_elem_Xg_vis +

                    Get connectivity for geometry points

                    Read more… generic, public :: - get_knot => get_knoti, get_knot_all -

                    Get knot vector

                    Read more… + get_knot => get_knoti, get_knot_all +

                    Get knot vector

                    Read more… procedure, public :: - get_multiplicity -

                    Compute and return the multiplicity of the knot vector

                    Read more… + get_multiplicity +

                    Compute and return the multiplicity of the knot vector

                    Read more… procedure, public :: - get_nc -

                    Get number of control points

                    Read more… + get_nc +

                    Get number of control points

                    Read more… procedure, public :: - get_ng -

                    Get number of geometry points

                    Read more… + get_ng +

                    Get number of geometry points

                    Read more… procedure, public :: - insert_knots -

                    Insert knots into the knot vector

                    Read more… + insert_knots +

                    Insert knots into the knot vector

                    Read more… procedure, public :: - is_rational -

                    Check if the NURBS surface is rational

                    Read more… + is_rational +

                    Check if the NURBS surface is rational

                    Read more… procedure, public :: - modify_Wc -

                    Modify weights

                    Read more… + modify_Wc +

                    Modify weights

                    Read more… procedure, public :: - modify_Xc -

                    Modify control points

                    Read more… + modify_Xc +

                    Modify control points

                    Read more… procedure, public :: - nearest_point -

                    Find the nearest point on the NURBS surface (Approximation)

                    Read more… + nearest_point +

                    Find the nearest point on the NURBS surface (Approximation)

                    Read more… procedure, public :: - nearest_point2 -

                    Find the nearest point on the NURBS surface (Minimization - Newton's method)

                    Read more… + nearest_point2 +

                    Find the nearest point on the NURBS surface (Minimization - Newton's method)

                    Read more… procedure, public :: - remove_knots -

                    Remove knots from the knot vector

                    Read more… + remove_knots +

                    Remove knots from the knot vector

                    Read more… procedure, public :: - rotate_Xc -

                    Rotate control points

                    Read more… + rotate_Xc +

                    Rotate control points

                    Read more… procedure, public :: - rotate_Xg -

                    Rotate geometry points

                    Read more… + rotate_Xg +

                    Rotate geometry points

                    Read more… generic, public :: - set => set1, set2, set3 -

                    Set NURBS surface

                    Read more… + set => set1, set2, set3 +

                    Set NURBS surface

                    Read more… procedure, public :: - set1 -

                    Set knot vectors, control points and weights for the NURBS surface object

                    Read more… + set1 +

                    Set knot vectors, control points and weights for the NURBS surface object

                    Read more… procedure, public :: - set2 -

                    Set NURBS surface using nodes of parameter space, degree, continuity, control points and weights

                    Read more… + set2 +

                    Set NURBS surface using nodes of parameter space, degree, continuity, control points and weights

                    Read more… procedure, public :: - set3 -

                    Set Bezier or Rational Bezier surface using control points and weights

                    Read more… + set3 +

                    Set Bezier or Rational Bezier surface using control points and weights

                    Read more… procedure, public :: - set_C -

                    Set a C-shape

                    Read more… + set_C +

                    Set a C-shape

                    Read more… procedure, public :: - set_elem -

                    Set IGA element connectivity

                    Read more… + set_elem +

                    Set IGA element connectivity

                    Read more… procedure, public :: - set_elem_Xc_vis -

                    Set connectivity for control points

                    Read more… + set_elem_Xc_vis +

                    Set connectivity for control points

                    Read more… procedure, public :: - set_elem_Xg_vis -

                    Set connectivity for geometry points

                    Read more… + set_elem_Xg_vis +

                    Set connectivity for geometry points

                    Read more… procedure, public :: @@ -3705,88 +3705,88 @@

                    Type-Bound Procedures

                    procedure, public :: - show -

                    Show the NURBS object using PyVista

                    Read more… + show +

                    Show the NURBS object using PyVista

                    Read more… procedure, public :: - translate_Xc -

                    Translate control points

                    Read more… + translate_Xc +

                    Translate control points

                    Read more… procedure, public :: - translate_Xg -

                    Translate geometry points

                    Read more… + translate_Xg +

                    Translate geometry points

                    Read more… procedure, private :: - basis_scalar -

                    Compute the basis functions of the NURBS surface

                    Read more… + basis_scalar +

                    Compute the basis functions of the NURBS surface

                    Read more… procedure, private :: - basis_vector -

                    Compute the basis functions of the NURBS surface

                    Read more… + basis_vector +

                    Compute the basis functions of the NURBS surface

                    Read more… procedure, private :: - derivative2_scalar -

                    Compute the second derivative of the NURBS surface

                    Read more… + derivative2_scalar +

                    Compute the second derivative of the NURBS surface

                    Read more… procedure, private :: - derivative2_vector -

                    Compute the second derivative of the NURBS surface

                    Read more… + derivative2_vector +

                    Compute the second derivative of the NURBS surface

                    Read more… procedure, private :: - derivative_scalar -

                    Compute the derivative of the NURBS surface

                    Read more… + derivative_scalar +

                    Compute the derivative of the NURBS surface

                    Read more… procedure, private :: - derivative_vector -

                    Compute the derivative of the NURBS surface

                    Read more… + derivative_vector +

                    Compute the derivative of the NURBS surface

                    Read more… procedure, private :: - get_Wc_all -

                    Get all weights

                    Read more… + get_Wc_all +

                    Get all weights

                    Read more… procedure, private :: - get_Wci -

                    Get i-th weight

                    Read more… + get_Wci +

                    Get i-th weight

                    Read more… procedure, private :: - get_Xc_all -

                    Get all control points

                    Read more… + get_Xc_all +

                    Get all control points

                    Read more… procedure, private :: - get_Xci -

                    Get i-th control point

                    Read more… + get_Xci +

                    Get i-th control point

                    Read more… procedure, private :: - get_Xcid -

                    Get i-th control point in a specific direction

                    Read more… + get_Xcid +

                    Get i-th control point in a specific direction

                    Read more… procedure, private :: - get_Xg_all -

                    Get all geometry points

                    Read more… + get_Xg_all +

                    Get all geometry points

                    Read more… procedure, private :: - get_Xgi -

                    Get i-th geometry point

                    Read more… + get_Xgi +

                    Get i-th geometry point

                    Read more… procedure, private :: - get_Xgid -

                    Get i-th geometry point in a specific direction

                    Read more… + get_Xgid +

                    Get i-th geometry point in a specific direction

                    Read more… procedure, private :: @@ -3800,13 +3800,13 @@

                    Type-Bound Procedures

                    procedure, private :: - get_knot_all -

                    Get all knot vectors

                    Read more… + get_knot_all +

                    Get all knot vectors

                    Read more… procedure, private :: - get_knoti -

                    Get i-th knot value

                    Read more… + get_knoti +

                    Get i-th knot value

                    Read more… @@ -3819,7 +3819,7 @@

                    Type-Bound Procedures

                    Functions

                    -

                    private pure function cmp_Xg(this, Xt) result(Xg) +

                    private pure function cmp_Xg(this, Xt) result(Xg)

                    @@ -3842,7 +3842,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -3857,7 +3857,7 @@

                    Arguments

                    - + real(kind=rk), intent(in), @@ -3883,7 +3883,7 @@

                    -

                    private pure function cmp_elem(this) result(elemConn) +

                    private pure function cmp_elem(this) result(elemConn)

                    @@ -3906,7 +3906,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -3932,7 +3932,7 @@

                    -

                    private pure function cmp_elem_Xc_vis(this, p) result(elemConn) +

                    private pure function cmp_elem_Xc_vis(this, p) result(elemConn)

                    @@ -3955,7 +3955,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -3970,7 +3970,7 @@

                    Arguments

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

                    -

                    private pure function cmp_elem_Xg_vis(this, p) result(elemConn) +

                    private pure function cmp_elem_Xg_vis(this, p) result(elemConn)

                    @@ -4019,7 +4019,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -4034,7 +4034,7 @@

                    Arguments

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

                    -

                    private pure function get_Wc_all(this) result(Wc) +

                    private pure function get_Wc_all(this) result(Wc)

                    @@ -4083,7 +4083,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -4109,7 +4109,7 @@

                    -

                    private pure function get_Wci(this, n) result(Wc) +

                    private pure function get_Wci(this, n) result(Wc)

                    @@ -4132,7 +4132,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -4147,7 +4147,7 @@

                    Arguments

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

                    -

                    private pure function get_Xc_all(this) result(Xc) +

                    private pure function get_Xc_all(this) result(Xc)

                    @@ -4196,7 +4196,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -4222,7 +4222,7 @@

                    -

                    private pure function get_Xci(this, n) result(Xc) +

                    private pure function get_Xci(this, n) result(Xc)

                    @@ -4245,7 +4245,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -4260,7 +4260,7 @@

                    Arguments

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

                    -

                    private pure function get_Xcid(this, n, dir) result(Xc) +

                    private pure function get_Xcid(this, n, dir) result(Xc)

                    @@ -4309,7 +4309,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -4324,7 +4324,7 @@

                    Arguments

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

                    Arguments

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

                    -

                    private pure function get_Xg_all(this) result(Xg) +

                    private pure function get_Xg_all(this) result(Xg)

                    @@ -4388,7 +4388,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -4414,7 +4414,7 @@

                    -

                    private pure function get_Xgi(this, n) result(Xg) +

                    private pure function get_Xgi(this, n) result(Xg)

                    @@ -4437,7 +4437,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -4452,7 +4452,7 @@

                    Arguments

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

                    -

                    private pure function get_Xgid(this, n, dir) result(Xg) +

                    private pure function get_Xgid(this, n, dir) result(Xg)

                    @@ -4501,7 +4501,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -4516,7 +4516,7 @@

                    Arguments

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

                    Arguments

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

                    -

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

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

                    @@ -4580,7 +4580,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -4595,7 +4595,7 @@

                    Arguments

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

                    -

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

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

                    @@ -4644,7 +4644,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -4659,7 +4659,7 @@

                    Arguments

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

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -4757,7 +4757,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -4772,7 +4772,7 @@

                    Arguments

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

                    -

                    private pure function get_elem(this) result(elemConn) +

                    private pure function get_elem(this) result(elemConn)

                    @@ -4821,7 +4821,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -4847,7 +4847,7 @@

                    -

                    private pure function get_elem_Xc_vis(this) result(elemConn) +

                    private pure function get_elem_Xc_vis(this) result(elemConn)

                    @@ -4870,7 +4870,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -4896,7 +4896,7 @@

                    -

                    private pure function get_elem_Xg_vis(this) result(elemConn) +

                    private pure function get_elem_Xg_vis(this) result(elemConn)

                    @@ -4919,7 +4919,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -4945,7 +4945,7 @@

                    -

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

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

                    @@ -4968,7 +4968,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -4983,7 +4983,7 @@

                    Arguments

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

                    -

                    private pure function get_knoti(this, dir, i) result(knot) +

                    private pure function get_knoti(this, dir, i) result(knot)

                    @@ -5032,7 +5032,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -5047,7 +5047,7 @@

                    Arguments

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

                    Arguments

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

                    -

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

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

                    @@ -5111,7 +5111,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -5126,7 +5126,7 @@

                    Arguments

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

                    -

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

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

                    @@ -5175,7 +5175,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -5190,7 +5190,7 @@

                    Arguments

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

                    -

                    private pure function get_ng(this) result(ng) +

                    private pure function get_ng(this) result(ng)

                    @@ -5239,7 +5239,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -5265,7 +5265,7 @@

                    -

                    private pure function is_rational(this) result(r) +

                    private pure function is_rational(this) result(r)

                    @@ -5288,7 +5288,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -5319,7 +5319,7 @@

                    Subroutines

                    -

                    private pure subroutine basis_scalar(this, Xt, Tgc) +

                    private pure subroutine basis_scalar(this, Xt, Tgc)

                    @@ -5342,7 +5342,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -5357,7 +5357,7 @@

                    Arguments

                    - + real(kind=rk), intent(in) @@ -5372,7 +5372,7 @@

                    Arguments

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

                    Arguments

                    -

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

                    private pure subroutine basis_vector(this, res1, res2, Xt1, Xt2, Tgc)

                    @@ -5416,7 +5416,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -5431,7 +5431,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

                    -

                    private pure subroutine cmp_degree(this, dir) +

                    private pure subroutine cmp_degree(this, dir)

                    @@ -5535,7 +5535,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -5550,7 +5550,7 @@

                    Arguments

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

                    Arguments

                    -

                    private pure subroutine cmp_nc(this, dir) +

                    private pure subroutine cmp_nc(this, dir)

                    @@ -5594,7 +5594,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -5609,7 +5609,7 @@

                    Arguments

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

                    Arguments

                    -

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

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

                    @@ -5653,7 +5653,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -5668,7 +5668,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

                    - + real(kind=rk), intent(in), @@ -5749,7 +5749,7 @@

                    Arguments

                    -

                    private pure subroutine derivative2_scalar(this, Xt, d2Tgc, dTgc, Tgc) +

                    private pure subroutine derivative2_scalar(this, Xt, d2Tgc, dTgc, Tgc)

                    @@ -5772,7 +5772,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -5787,7 +5787,7 @@

                    Arguments

                    - + real(kind=rk), intent(in), @@ -5802,7 +5802,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

                    -

                    private pure subroutine derivative2_vector(this, res1, res2, Xt1, Xt2, d2Tgc, dTgc, Tgc) +

                    private pure subroutine derivative2_vector(this, res1, res2, Xt1, Xt2, d2Tgc, dTgc, Tgc)

                    @@ -5876,7 +5876,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -5891,7 +5891,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

                    -

                    private pure subroutine derivative_scalar(this, Xt, dTgc, Tgc) +

                    private pure subroutine derivative_scalar(this, Xt, dTgc, Tgc)

                    @@ -6025,7 +6025,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -6040,7 +6040,7 @@

                    Arguments

                    - + real(kind=rk), intent(in), @@ -6055,7 +6055,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

                    -

                    private pure subroutine derivative_vector(this, res1, res2, Xt1, Xt2, dTgc, Tgc) +

                    private pure subroutine derivative_vector(this, res1, res2, Xt1, Xt2, dTgc, Tgc)

                    @@ -6114,7 +6114,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -6129,7 +6129,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

                    -

                    private pure subroutine elevate_degree(this, dir, t) +

                    private pure subroutine elevate_degree(this, dir, t)

                    @@ -6248,7 +6248,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -6263,7 +6263,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

                    -

                    private impure subroutine export_Xc(this, filename) +

                    private impure subroutine export_Xc(this, filename)

                    @@ -6322,7 +6322,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -6337,7 +6337,7 @@

                    Arguments

                    - + character(len=*), intent(in) @@ -6358,7 +6358,7 @@

                    Arguments

                    -

                    private impure subroutine export_Xg(this, filename) +

                    private impure subroutine export_Xg(this, filename)

                    @@ -6381,7 +6381,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -6396,7 +6396,7 @@

                    Arguments

                    - + character(len=*), intent(in) @@ -6417,7 +6417,7 @@

                    Arguments

                    -

                    private pure subroutine finalize(this) +

                    private pure subroutine finalize(this)

                    @@ -6440,7 +6440,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -6461,7 +6461,7 @@

                    Arguments

                    -

                    private pure subroutine insert_knots(this, dir, Xth, r) +

                    private pure subroutine insert_knots(this, dir, Xth, r)

                    @@ -6484,7 +6484,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -6499,7 +6499,7 @@

                    Arguments

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

                    Arguments

                    - + real(kind=rk), intent(in), @@ -6529,7 +6529,7 @@

                    Arguments

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

                    Arguments

                    -

                    private pure subroutine modify_Wc(this, W, num) +

                    private pure subroutine modify_Wc(this, W, num)

                    @@ -6573,7 +6573,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -6588,7 +6588,7 @@

                    Arguments

                    - + real(kind=rk), intent(in) @@ -6603,7 +6603,7 @@

                    Arguments

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

                    Arguments

                    -

                    private pure subroutine modify_Xc(this, X, num, dir) +

                    private pure subroutine modify_Xc(this, X, num, dir)

                    @@ -6647,7 +6647,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -6662,7 +6662,7 @@

                    Arguments

                    - + real(kind=rk), intent(in) @@ -6677,7 +6677,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

                    -

                    private pure subroutine nearest_point(this, point_Xg, nearest_Xg, nearest_Xt, id) +

                    private pure subroutine nearest_point(this, point_Xg, nearest_Xg, nearest_Xt, id)

                    @@ -6736,7 +6736,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -6751,7 +6751,7 @@

                    Arguments

                    - + real(kind=rk), intent(in) @@ -6766,7 +6766,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

                    - + integer, intent(out), @@ -6817,7 +6817,7 @@

                    Arguments

                    -

                    private impure subroutine nearest_point2(this, point_Xg, tol, maxit, nearest_Xt, nearest_Xg) +

                    private impure subroutine nearest_point2(this, point_Xg, tol, maxit, nearest_Xt, nearest_Xg)

                    @@ -6840,7 +6840,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -6855,7 +6855,7 @@

                    Arguments

                    - + real(kind=rk), intent(in) @@ -6870,7 +6870,7 @@

                    Arguments

                    - + real(kind=rk), intent(in) @@ -6885,7 +6885,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

                    -

                    private pure subroutine remove_knots(this, dir, Xth, r) +

                    private pure subroutine remove_knots(this, dir, Xth, r)

                    @@ -6959,7 +6959,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -6974,7 +6974,7 @@

                    Arguments

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

                    Arguments

                    - + real(kind=rk), intent(in), @@ -7004,7 +7004,7 @@

                    Arguments

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

                    Arguments

                    -

                    private pure subroutine rotate_Xc(this, alpha, beta, theta) +

                    private pure subroutine rotate_Xc(this, alpha, beta, theta)

                    @@ -7048,7 +7048,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -7063,7 +7063,7 @@

                    Arguments

                    - + real(kind=rk), intent(in) @@ -7078,7 +7078,7 @@

                    Arguments

                    - + real(kind=rk), intent(in) @@ -7093,7 +7093,7 @@

                    Arguments

                    - + real(kind=rk), intent(in) @@ -7114,7 +7114,7 @@

                    Arguments

                    -

                    private pure subroutine rotate_Xg(this, alpha, beta, theta) +

                    private pure subroutine rotate_Xg(this, alpha, beta, theta)

                    @@ -7137,7 +7137,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -7152,7 +7152,7 @@

                    Arguments

                    - + real(kind=rk), intent(in) @@ -7167,7 +7167,7 @@

                    Arguments

                    - + real(kind=rk), intent(in) @@ -7182,7 +7182,7 @@

                    Arguments

                    - + real(kind=rk), intent(in) @@ -7203,7 +7203,7 @@

                    Arguments

                    -

                    private pure subroutine set1(this, knot1, knot2, Xc, Wc) +

                    private pure subroutine set1(this, knot1, knot2, Xc, Wc)

                    @@ -7226,7 +7226,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -7241,7 +7241,7 @@

                    Arguments

                    - + real(kind=rk), intent(in), @@ -7256,7 +7256,7 @@

                    Arguments

                    - + real(kind=rk), intent(in), @@ -7271,7 +7271,7 @@

                    Arguments

                    - + real(kind=rk), intent(in), @@ -7286,7 +7286,7 @@

                    Arguments

                    - + real(kind=rk), intent(in), @@ -7307,7 +7307,7 @@

                    Arguments

                    -

                    private pure subroutine set2(this, Xth_dir1, Xth_dir2, degree, continuity1, continuity2, Xc, Wc) +

                    private pure subroutine set2(this, Xth_dir1, Xth_dir2, degree, continuity1, continuity2, Xc, Wc)

                    @@ -7330,7 +7330,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -7375,7 +7375,7 @@

                    Arguments

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

                    Arguments

                    - + real(kind=rk), intent(in), @@ -7435,7 +7435,7 @@

                    Arguments

                    - + real(kind=rk), intent(in), @@ -7456,7 +7456,7 @@

                    Arguments

                    -

                    private pure subroutine set3(this, nc, Xc, Wc) +

                    private pure subroutine set3(this, nc, Xc, Wc)

                    @@ -7479,7 +7479,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -7494,7 +7494,7 @@

                    Arguments

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

                    Arguments

                    - + real(kind=rk), intent(in), @@ -7524,7 +7524,7 @@

                    Arguments

                    - + real(kind=rk), intent(in), @@ -7545,7 +7545,7 @@

                    Arguments

                    -

                    private pure subroutine set_C(this, center, radius1, radius2) +

                    private pure subroutine set_C(this, center, radius1, radius2)

                    @@ -7568,7 +7568,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -7583,7 +7583,7 @@

                    Arguments

                    - + real(kind=rk), intent(in), @@ -7634,7 +7634,7 @@

                    Arguments

                    -

                    private pure subroutine set_elem(this, elemConn) +

                    private pure subroutine set_elem(this, elemConn)

                    @@ -7657,7 +7657,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -7672,7 +7672,7 @@

                    Arguments

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

                    Arguments

                    -

                    private pure subroutine set_elem_Xc_vis(this, elemConn) +

                    private pure subroutine set_elem_Xc_vis(this, elemConn)

                    @@ -7716,7 +7716,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -7731,7 +7731,7 @@

                    Arguments

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

                    Arguments

                    -

                    private pure subroutine set_elem_Xg_vis(this, elemConn) +

                    private pure subroutine set_elem_Xg_vis(this, elemConn)

                    @@ -7775,7 +7775,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -7790,7 +7790,7 @@

                    Arguments

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

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -7849,7 +7849,7 @@

                    Arguments

                    - + real(kind=rk), intent(in), @@ -7923,7 +7923,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -7938,7 +7938,7 @@

                    Arguments

                    - + real(kind=rk), intent(in), @@ -8012,7 +8012,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -8027,7 +8027,7 @@

                    Arguments

                    - + real(kind=rk), intent(in) @@ -8042,7 +8042,7 @@

                    Arguments

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

                    Arguments

                    - + real(kind=rk), intent(in), @@ -8078,7 +8078,7 @@

                    Arguments

                    -

                    private impure subroutine show(this, vtkfile_Xc, vtkfile_Xg) +

                    private impure subroutine show(this, vtkfile_Xc, vtkfile_Xg)

                    @@ -8101,7 +8101,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -8116,7 +8116,7 @@

                    Arguments

                    - + character(len=*), intent(in) @@ -8131,7 +8131,7 @@

                    Arguments

                    - + character(len=*), intent(in) @@ -8152,7 +8152,7 @@

                    Arguments

                    -

                    private pure subroutine translate_Xc(this, vec) +

                    private pure subroutine translate_Xc(this, vec)

                    @@ -8175,7 +8175,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -8190,7 +8190,7 @@

                    Arguments

                    - + real(kind=rk), intent(in) @@ -8211,7 +8211,7 @@

                    Arguments

                    -

                    private pure subroutine translate_Xg(this, vec) +

                    private pure subroutine translate_Xg(this, vec)

                    @@ -8234,7 +8234,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -8249,7 +8249,7 @@

                    Arguments

                    - + real(kind=rk), intent(in) @@ -8292,7 +8292,7 @@

                    Arguments

                    Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                    + on 2024-06-22T18:21:15.937502


                    diff --git a/module/forcad_nurbs_volume.html b/module/forcad_nurbs_volume.html index 09e2d58dd..7c5deabd0 100644 --- a/module/forcad_nurbs_volume.html +++ b/module/forcad_nurbs_volume.html @@ -5662,7 +5662,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

                    - + integer, intent(out), @@ -7620,7 +7620,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

                    Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                    + on 2024-06-22T18:21:15.937502


                    diff --git a/module/forcad_utils.html b/module/forcad_utils.html index cbc14b783..2883b4864 100644 --- a/module/forcad_utils.html +++ b/module/forcad_utils.html @@ -1612,7 +1612,7 @@

                    Arguments

                    - + real(kind=rk), intent(in), @@ -1660,7 +1660,7 @@

                    Arguments

                    - + real(kind=rk), intent(in), @@ -1675,7 +1675,7 @@

                    Arguments

                    - + real(kind=rk), intent(in) @@ -1748,7 +1748,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

                    - + real(kind=rk), intent(in), @@ -2082,7 +2082,7 @@

                    Arguments

                    - + integer, intent(out), @@ -2245,7 +2245,7 @@

                    Arguments

                    - + integer, intent(out), @@ -2468,7 +2468,7 @@

                    Arguments

                    - + integer, intent(out), @@ -2551,7 +2551,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

                    - + real(kind=rk), intent(in), @@ -2797,7 +2797,7 @@

                    Arguments

                    - + real(kind=rk), intent(in) @@ -2812,7 +2812,7 @@

                    Arguments

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

                    Arguments

                    - + real(kind=rk), intent(in) @@ -2876,7 +2876,7 @@

                    Arguments

                    - + real(kind=rk), intent(in), @@ -2891,7 +2891,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

                    - + real(kind=rk), intent(in) @@ -3079,7 +3079,7 @@

                    Arguments

                    - + real(kind=rk), intent(in), @@ -3128,7 +3128,7 @@

                    Arguments

                    - + real(kind=rk), intent(in) @@ -3143,7 +3143,7 @@

                    Arguments

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

                    Arguments

                    - + real(kind=rk), intent(in) @@ -3271,7 +3271,7 @@

                    Arguments

                    - + real(kind=rk), intent(in) @@ -3286,7 +3286,7 @@

                    Arguments

                    - + real(kind=rk), intent(in) @@ -3335,7 +3335,7 @@

                    Arguments

                    - + real(kind=rk), intent(in) @@ -3350,7 +3350,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

                    - + real(kind=rk), intent(in), @@ -3794,7 +3794,7 @@

                    Arguments

                    - + real(kind=rk), intent(in), @@ -3809,7 +3809,7 @@

                    Arguments

                    - + real(kind=rk), intent(in) @@ -3858,7 +3858,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

                    - + real(kind=rk), intent(in), @@ -4172,7 +4172,7 @@

                    Arguments

                    - + real(kind=rk), intent(in) @@ -4187,7 +4187,7 @@

                    Arguments

                    - + real(kind=rk), intent(in), @@ -4202,7 +4202,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

                    - + real(kind=rk), intent(in) @@ -4321,7 +4321,7 @@

                    Arguments

                    - + real(kind=rk), intent(in), @@ -4336,7 +4336,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

                    - + real(kind=rk), intent(in), @@ -4455,7 +4455,7 @@

                    Arguments

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

                    Arguments

                    - + real(kind=rk), intent(in), @@ -4485,7 +4485,7 @@

                    Arguments

                    - + integer, intent(out) @@ -4500,7 +4500,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

                    - + real(kind=rk), intent(in), @@ -4798,7 +4798,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

                    - + integer, intent(out) @@ -4858,7 +4858,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

                    - + real(kind=rk), intent(in), @@ -4977,7 +4977,7 @@

                    Arguments

                    - + integer, intent(out), @@ -5141,7 +5141,7 @@

                    Arguments

                    - + integer, intent(out), @@ -5365,7 +5365,7 @@

                    Arguments

                    - + integer, intent(out), @@ -5439,7 +5439,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

                    Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                    + on 2024-06-22T18:21:15.937502


                    diff --git a/proc/basis_bernstein.html b/proc/basis_bernstein.html index 8eb27dd62..2d4afe1d6 100644 --- a/proc/basis_bernstein.html +++ b/proc/basis_bernstein.html @@ -156,7 +156,7 @@

                    Arguments

                    - + real(kind=rk), intent(in) @@ -171,7 +171,7 @@

                    Arguments

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

                    Return Value

                    Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                    + on 2024-06-22T18:21:15.937502


                    diff --git a/proc/basis_bspline.html b/proc/basis_bspline.html index 41123b7aa..767f8b094 100644 --- a/proc/basis_bspline.html +++ b/proc/basis_bspline.html @@ -156,7 +156,7 @@

                    Arguments

                    - + real(kind=rk), intent(in) @@ -171,7 +171,7 @@

                    Arguments

                    - + real(kind=rk), intent(in), @@ -186,7 +186,7 @@

                    Arguments

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

                    Arguments

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

                    Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                    + on 2024-06-22T18:21:15.937502


                    diff --git a/proc/basis_bspline_2der.html b/proc/basis_bspline_2der.html index 0528e5cc0..588150ee0 100644 --- a/proc/basis_bspline_2der.html +++ b/proc/basis_bspline_2der.html @@ -156,7 +156,7 @@

                    Arguments

                    - + real(kind=rk), intent(in) @@ -171,7 +171,7 @@

                    Arguments

                    - + real(kind=rk), intent(in), @@ -186,7 +186,7 @@

                    Arguments

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

                    Arguments

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

                    Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                    + on 2024-06-22T18:21:15.937502


                    diff --git a/proc/basis_bspline_der.html b/proc/basis_bspline_der.html index 774af9403..002c85520 100644 --- a/proc/basis_bspline_der.html +++ b/proc/basis_bspline_der.html @@ -156,7 +156,7 @@

                    Arguments

                    - + real(kind=rk), intent(in) @@ -171,7 +171,7 @@

                    Arguments

                    - + real(kind=rk), intent(in), @@ -186,7 +186,7 @@

                    Arguments

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

                    Arguments

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

                    Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                    + on 2024-06-22T18:21:15.937502


                    diff --git a/proc/basis_scalar.html b/proc/basis_scalar.html index a9ea13925..7a97598b9 100644 --- a/proc/basis_scalar.html +++ b/proc/basis_scalar.html @@ -371,7 +371,7 @@

                    Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                    + on 2024-06-22T18:21:15.937502


                    diff --git a/proc/basis_scalar~2.html b/proc/basis_scalar~2.html index fcaeddde4..6e05d1951 100644 --- a/proc/basis_scalar~2.html +++ b/proc/basis_scalar~2.html @@ -83,15 +83,15 @@

                    basis_scalar
                  • - Source File + Source File
                  @@ -143,7 +143,7 @@

                  private pure subroutine basis_scalar(this, Xt, Tgc)

                  Type Bound

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

                  @@ -158,8 +158,8 @@

                  Arguments

                  @@ -181,7 +181,7 @@

                  Arguments

                  - + @@ -216,46 +216,46 @@

                  Calls

                  - + proc~~basis_scalar~2~~CallsGraph - + proc~basis_scalar~2 - -nurbs_curve%basis_scalar + +nurbs_surface%basis_scalar interface~compute_tgc~2 - -compute_Tgc + +compute_Tgc proc~basis_scalar~2->interface~compute_tgc~2 - - + + proc~is_rational~2 - - -nurbs_curve%is_rational + + +nurbs_surface%is_rational proc~basis_scalar~2->proc~is_rational~2 - - + + @@ -371,7 +371,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/basis_scalar~3.html b/proc/basis_scalar~3.html index 035001830..c25600a3f 100644 --- a/proc/basis_scalar~3.html +++ b/proc/basis_scalar~3.html @@ -83,15 +83,15 @@

                  basis_scalar
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure subroutine basis_scalar(this, Xt, Tgc)

                  Type Bound

                  -

                  nurbs_surface

                  +

                  nurbs_curve

                  Arguments

                  - - class(nurbs_curve), + + class(nurbs_surface), intent(inout) @@ -173,7 +173,7 @@

                  Arguments

                  - + real(kind=rk), intent(in) ::XtXt(:)
                  @@ -158,8 +158,8 @@

                  Arguments

                  - + @@ -216,46 +216,46 @@

                  Calls

                  - + proc~~basis_scalar~3~~CallsGraph - + proc~basis_scalar~3 - -nurbs_surface%basis_scalar + +nurbs_curve%basis_scalar interface~compute_tgc~3 - -compute_Tgc + +compute_Tgc proc~basis_scalar~3->interface~compute_tgc~3 - - + + proc~is_rational~3 - - -nurbs_surface%is_rational + + +nurbs_curve%is_rational proc~basis_scalar~3->proc~is_rational~3 - - + + @@ -371,7 +371,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/basis_vector.html b/proc/basis_vector.html index 206f7bee8..d10f3aad5 100644 --- a/proc/basis_vector.html +++ b/proc/basis_vector.html @@ -491,7 +491,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/basis_vector~2.html b/proc/basis_vector~2.html index 7d9c1f7d3..e314f9135 100644 --- a/proc/basis_vector~2.html +++ b/proc/basis_vector~2.html @@ -78,20 +78,20 @@

                  basis_vector
                • 21 statements + title=" 0.5% of total for procedures.">32 statements
                • - Source File + Source File
                • @@ -137,13 +137,13 @@

                  Contents

                  -

                  private pure subroutine basis_vector(this, res, Xt, Tgc) +

                  private pure subroutine basis_vector(this, res1, res2, Xt1, Xt2, Tgc)

                  Type Bound

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

                  - - class(nurbs_surface), + + class(nurbs_curve), intent(inout) @@ -181,7 +181,7 @@

                  Arguments

                  ::Xt(:)Xt
                  @@ -158,8 +158,8 @@

                  Arguments

                  @@ -181,14 +181,44 @@

                  Arguments

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

                  Arguments

                  contiguous - + @@ -231,46 +261,91 @@

                  Calls

                  - - + + proc~~basis_vector~2~~CallsGraph - + proc~basis_vector~2 - -nurbs_curve%basis_vector + +nurbs_surface%basis_vector interface~compute_tgc~2 - -compute_Tgc + +compute_Tgc proc~basis_vector~2->interface~compute_tgc~2 - - + + - + +interface~ndgrid + + +ndgrid + + + + + +proc~basis_vector~2->interface~ndgrid + + + + + proc~is_rational~2 - - -nurbs_curve%is_rational + + +nurbs_surface%is_rational - + proc~basis_vector~2->proc~is_rational~2 - - + + + + + +proc~ndgrid2 + + +ndgrid2 + + + + + +interface~ndgrid->proc~ndgrid2 + + + + + +proc~ndgrid3 + + +ndgrid3 + + + + + +interface~ndgrid->proc~ndgrid3 + + @@ -386,7 +461,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/basis_vector~3.html b/proc/basis_vector~3.html index ca236d492..dcd22c808 100644 --- a/proc/basis_vector~3.html +++ b/proc/basis_vector~3.html @@ -78,20 +78,20 @@

                  basis_vector
                • 32 statements + title=" 0.3% of total for procedures.">21 statements
                • - Source File + Source File
                • @@ -137,13 +137,13 @@

                  Contents

                  -

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

                  private pure subroutine basis_vector(this, res, Xt, Tgc)

                  Type Bound

                  -

                  nurbs_surface

                  +

                  nurbs_curve

                  Arguments

                  - - class(nurbs_curve), + + class(nurbs_surface), intent(inout) @@ -173,7 +173,7 @@

                  Arguments

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

                  Arguments

                  @@ -181,44 +181,14 @@

                  Arguments

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

                  Arguments

                  contiguous - + @@ -261,91 +231,46 @@

                  Calls

                  - - + + proc~~basis_vector~3~~CallsGraph - + proc~basis_vector~3 - -nurbs_surface%basis_vector + +nurbs_curve%basis_vector interface~compute_tgc~3 - -compute_Tgc + +compute_Tgc proc~basis_vector~3->interface~compute_tgc~3 - - - - - -interface~ndgrid - - -ndgrid - - - - - -proc~basis_vector~3->interface~ndgrid - - + + - + proc~is_rational~3 - - -nurbs_surface%is_rational + + +nurbs_curve%is_rational - + proc~basis_vector~3->proc~is_rational~3 - - - - - -proc~ndgrid2 - - -ndgrid2 - - - - - -interface~ndgrid->proc~ndgrid2 - - - - - -proc~ndgrid3 - - -ndgrid3 - - - - - -interface~ndgrid->proc~ndgrid3 - - + + @@ -461,7 +386,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/bincoeff.html b/proc/bincoeff.html index 6c398ddb5..5966693e7 100644 --- a/proc/bincoeff.html +++ b/proc/bincoeff.html @@ -156,7 +156,7 @@

                  Arguments

                  @@ -171,7 +171,7 @@

                  Arguments

                  @@ -370,24 +370,24 @@

                  Called by

                  proc~elevate_degree~2 - - -nurbs_curve%elevate_degree + + +nurbs_surface%elevate_degree proc~elevate_degree~2->proc~elevate_degree_a_5_9 - - + + proc~elevate_degree~3 - - -nurbs_surface%elevate_degree + + +nurbs_curve%elevate_degree @@ -401,31 +401,31 @@

                  Called by

                  program~example1_curve - -example1_curve + +example1_curve - - -program~example1_curve->proc~elevate_degree~2 - - + + +program~example1_curve->proc~elevate_degree~3 + + program~example3_surface - -example3_surface + +example3_surface - - -program~example3_surface->proc~elevate_degree~3 - - + + +program~example3_surface->proc~elevate_degree~2 + + @@ -556,7 +556,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/cmp_degree.html b/proc/cmp_degree.html index 90c1dec98..c836dc30b 100644 --- a/proc/cmp_degree.html +++ b/proc/cmp_degree.html @@ -823,7 +823,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/cmp_degreeface.html b/proc/cmp_degreeface.html index 79cc3e381..fe5628ea6 100644 --- a/proc/cmp_degreeface.html +++ b/proc/cmp_degreeface.html @@ -348,7 +348,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/cmp_degree~2.html b/proc/cmp_degree~2.html index ca0d53e72..cce355d1a 100644 --- a/proc/cmp_degree~2.html +++ b/proc/cmp_degree~2.html @@ -78,20 +78,20 @@

                  cmp_degree
                • 6 statements + title=" 0.3% of total for procedures.">21 statements
                • - Source File + Source File
                • -

                  private pure subroutine cmp_degree(this) +

                  private pure subroutine cmp_degree(this, dir)

                  Type Bound

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

                  - - class(nurbs_surface), + + class(nurbs_curve), intent(inout) @@ -173,7 +173,7 @@

                  Arguments

                  - + integer, intent(in), ::res1res
                  - - integer, - intent(in),optional - - ::res2 - -
                  - - real(kind=rk), - intent(in),optional, - contiguous - ::Xt1(:) - -
                  - + real(kind=rk), intent(in), ::Xt2(:)Xt(:)
                  - + integer, intent(in)
                  - + integer, intent(in)
                  @@ -159,7 +159,7 @@

                  Arguments

                  + + + + + + + + @@ -186,76 +201,76 @@

                  Calls

                  - - + + proc~~cmp_degree~2~~CallsGraph - + proc~cmp_degree~2 - -nurbs_curve%cmp_degree + +nurbs_surface%cmp_degree proc~get_multiplicity~2 - - -nurbs_curve%get_multiplicity + + +nurbs_surface%get_multiplicity proc~cmp_degree~2->proc~get_multiplicity~2 - - + + interface~compute_multiplicity - -compute_multiplicity + +compute_multiplicity proc~get_multiplicity~2->interface~compute_multiplicity - - + + proc~compute_multiplicity1 - -compute_multiplicity1 + +compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 - - + + proc~compute_multiplicity2 - -compute_multiplicity2 + +compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 - - + + @@ -355,295 +370,403 @@

                  Called by

                  - - + + proc~~cmp_degree~2~~CalledByGraph - + proc~cmp_degree~2 - -nurbs_curve%cmp_degree + +nurbs_surface%cmp_degree proc~set1~2 - - -nurbs_curve%set1 + + +nurbs_surface%set1 proc~set1~2->proc~cmp_degree~2 - - + + proc~set3~2 - - -nurbs_curve%set3 + + +nurbs_surface%set3 proc~set3~2->proc~cmp_degree~2 - - + + none~set~2 - - -nurbs_curve%set + + +nurbs_surface%set none~set~2->proc~set1~2 - - + + none~set~2->proc~set3~2 - - + + proc~elevate_degree~2 - - -nurbs_curve%elevate_degree + + +nurbs_surface%elevate_degree proc~elevate_degree~2->none~set~2 - - + + proc~insert_knots~2 - - -nurbs_curve%insert_knots + + +nurbs_surface%insert_knots proc~insert_knots~2->none~set~2 - - + + proc~modify_wc~2 - - -nurbs_curve%modify_Wc + + +nurbs_surface%modify_Wc proc~modify_wc~2->none~set~2 - - + + proc~modify_xc~2 - - -nurbs_curve%modify_Xc + + +nurbs_surface%modify_Xc proc~modify_xc~2->none~set~2 - - + + proc~remove_knots~2 - - -nurbs_curve%remove_knots + + +nurbs_surface%remove_knots proc~remove_knots~2->none~set~2 - - + + - + -proc~set_circle - - -nurbs_curve%set_circle +proc~set_c~2 + + +nurbs_surface%set_C - + -proc~set_circle->none~set~2 - - +proc~set_c~2->none~set~2 + + - + -proc~set_c~2 - - -nurbs_curve%set_C +proc~set_half_ring~2 + + +nurbs_surface%set_half_ring - + -proc~set_c~2->none~set~2 - - +proc~set_half_ring~2->none~set~2 + + - + -proc~set_half_circle - - -nurbs_curve%set_half_circle +proc~set_ring~2 + + +nurbs_surface%set_ring - + -proc~set_half_circle->none~set~2 - - +proc~set_ring~2->none~set~2 + + - + -program~example1_curve - - -example1_curve +proc~set_tetragon + + +nurbs_surface%set_tetragon - + -program~example1_curve->none~set~2 - - - - - -program~example1_curve->proc~elevate_degree~2 - - - - - -program~example1_curve->proc~insert_knots~2 - - - - - -program~example1_curve->proc~remove_knots~2 - - +proc~set_tetragon->none~set~2 + + - + -program~example_nurbs_curve - - -example_nurbs_curve +program~example3_surface + + +example3_surface - + -program~example_nurbs_curve->none~set~2 - - +program~example3_surface->none~set~2 + + + + + +program~example3_surface->proc~elevate_degree~2 + + + + + +program~example3_surface->proc~insert_knots~2 + + - + + +program~example3_surface->proc~remove_knots~2 + + + + -program~nearest_point_1d - - -nearest_point_1d +program~example_nurbs_surface + + +example_nurbs_surface - + -program~nearest_point_1d->none~set~2 - - +program~example_nurbs_surface->none~set~2 + + - + -program~shape_c_1d - - -shape_C_1d +program~nearest_point_2d + + +nearest_point_2d - - -program~shape_c_1d->proc~set_c~2 - - + + +program~nearest_point_2d->none~set~2 + + - + -program~shape_circle - - -shape_circle +program~example_ppm1 + + +example_ppm1 - - -program~shape_circle->proc~set_circle - - + + +program~example_ppm1->proc~set_ring~2 + + + + + +program~example_ppm1->proc~set_tetragon + + - + -program~shape_half_circle - - -shape_half_circle +program~example_ppm2 + + +example_ppm2 + + + + + +program~example_ppm2->proc~set_half_ring~2 + + + + + +program~example_ppm2->proc~set_tetragon + + + + + +program~example_ppm3 + + +example_ppm3 + + + + + +program~example_ppm3->proc~modify_xc~2 + + + + + +program~example_ppm3->proc~set_tetragon + + + + + +program~nearest_point_2d_bench + + +nearest_point_2d_bench + + + + + +program~nearest_point_2d_bench->proc~set_tetragon + + + + + +program~shape_c_2d + + +shape_C_2d - + -program~shape_half_circle->proc~set_half_circle - - +program~shape_c_2d->proc~set_c~2 + + + + + +program~shape_half_ring_2d + + +shape_half_ring_2d + + + + + +program~shape_half_ring_2d->proc~set_half_ring~2 + + + + + +program~shape_ring_2d + + +shape_ring_2d + + + + + +program~shape_ring_2d->proc~set_ring~2 + + + + + +program~shape_tetragon + + +shape_tetragon + + + + + +program~shape_tetragon->proc~set_tetragon + + @@ -763,7 +886,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/cmp_degree~3.html b/proc/cmp_degree~3.html index 784bdbe62..b8a4bd6be 100644 --- a/proc/cmp_degree~3.html +++ b/proc/cmp_degree~3.html @@ -78,20 +78,20 @@

                  cmp_degree
                • 21 statements + title=" 0.1% of total for procedures.">6 statements
                • - Source File + Source File
                • -

                  private pure subroutine cmp_degree(this, dir) +

                  private pure subroutine cmp_degree(this)

                  Type Bound

                  -

                  nurbs_surface

                  +

                  nurbs_curve

                  Arguments

                  - class(nurbs_curve), + class(nurbs_surface), intent(inout) @@ -169,6 +169,21 @@

                  Arguments

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

                  Arguments

                  - - - - - - - - @@ -201,76 +186,76 @@

                  Calls

                  - - + + proc~~cmp_degree~3~~CallsGraph - + proc~cmp_degree~3 - -nurbs_surface%cmp_degree + +nurbs_curve%cmp_degree proc~get_multiplicity~3 - - -nurbs_surface%get_multiplicity + + +nurbs_curve%get_multiplicity proc~cmp_degree~3->proc~get_multiplicity~3 - - + + interface~compute_multiplicity - -compute_multiplicity + +compute_multiplicity proc~get_multiplicity~3->interface~compute_multiplicity - - + + proc~compute_multiplicity1 - -compute_multiplicity1 + +compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 - - + + proc~compute_multiplicity2 - -compute_multiplicity2 + +compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 - - + + @@ -370,403 +355,295 @@

                  Called by

                  - - + + proc~~cmp_degree~3~~CalledByGraph - + proc~cmp_degree~3 - -nurbs_surface%cmp_degree + +nurbs_curve%cmp_degree proc~set1~3 - - -nurbs_surface%set1 + + +nurbs_curve%set1 proc~set1~3->proc~cmp_degree~3 - - + + proc~set3~3 - - -nurbs_surface%set3 + + +nurbs_curve%set3 proc~set3~3->proc~cmp_degree~3 - - + + none~set~3 - - -nurbs_surface%set + + +nurbs_curve%set none~set~3->proc~set1~3 - - + + none~set~3->proc~set3~3 - - + + proc~elevate_degree~3 - - -nurbs_surface%elevate_degree + + +nurbs_curve%elevate_degree proc~elevate_degree~3->none~set~3 - - + + proc~insert_knots~3 - - -nurbs_surface%insert_knots + + +nurbs_curve%insert_knots proc~insert_knots~3->none~set~3 - - + + proc~modify_wc~3 - - -nurbs_surface%modify_Wc + + +nurbs_curve%modify_Wc proc~modify_wc~3->none~set~3 - - + + proc~modify_xc~3 - - -nurbs_surface%modify_Xc + + +nurbs_curve%modify_Xc proc~modify_xc~3->none~set~3 - - + + proc~remove_knots~3 - - -nurbs_surface%remove_knots + + +nurbs_curve%remove_knots proc~remove_knots~3->none~set~3 - - + + - + -proc~set_c~3 - - -nurbs_surface%set_C +proc~set_circle + + +nurbs_curve%set_circle - + -proc~set_c~3->none~set~3 - - +proc~set_circle->none~set~3 + + - + -proc~set_half_ring~2 - - -nurbs_surface%set_half_ring +proc~set_c~3 + + +nurbs_curve%set_C - + -proc~set_half_ring~2->none~set~3 - - +proc~set_c~3->none~set~3 + + - + -proc~set_ring~2 - - -nurbs_surface%set_ring +proc~set_half_circle + + +nurbs_curve%set_half_circle - + -proc~set_ring~2->none~set~3 - - +proc~set_half_circle->none~set~3 + + - + -proc~set_tetragon - - -nurbs_surface%set_tetragon +program~example1_curve + + +example1_curve - + -proc~set_tetragon->none~set~3 - - - - - -program~example3_surface - - -example3_surface - +program~example1_curve->none~set~3 + + + + +program~example1_curve->proc~elevate_degree~3 + + - - -program~example3_surface->none~set~3 - - - - + -program~example3_surface->proc~elevate_degree~3 - - +program~example1_curve->proc~insert_knots~3 + + - + -program~example3_surface->proc~insert_knots~3 - - +program~example1_curve->proc~remove_knots~3 + + + + + +program~example_nurbs_curve + + +example_nurbs_curve + - - -program~example3_surface->proc~remove_knots~3 - - - + + +program~example_nurbs_curve->none~set~3 + + + + -program~example_nurbs_surface - - -example_nurbs_surface +program~nearest_point_1d + + +nearest_point_1d - + -program~example_nurbs_surface->none~set~3 - - +program~nearest_point_1d->none~set~3 + + - + -program~nearest_point_2d - - -nearest_point_2d +program~shape_c_1d + + +shape_C_1d - - -program~nearest_point_2d->none~set~3 - - + + +program~shape_c_1d->proc~set_c~3 + + - + -program~example_ppm1 - - -example_ppm1 - - - - - -program~example_ppm1->proc~set_ring~2 - - - - - -program~example_ppm1->proc~set_tetragon - - - - - -program~example_ppm2 - - -example_ppm2 +program~shape_circle + + +shape_circle - - -program~example_ppm2->proc~set_half_ring~2 - - - - - -program~example_ppm2->proc~set_tetragon - - - - - -program~example_ppm3 - - -example_ppm3 - - - - + -program~example_ppm3->proc~modify_xc~3 - - - - - -program~example_ppm3->proc~set_tetragon - - - - - -program~nearest_point_2d_bench - - -nearest_point_2d_bench - +program~shape_circle->proc~set_circle + + - - - -program~nearest_point_2d_bench->proc~set_tetragon - - - - - -program~shape_c_2d - - -shape_C_2d + + +program~shape_half_circle + + +shape_half_circle - + -program~shape_c_2d->proc~set_c~3 - - - - - -program~shape_half_ring_2d - - -shape_half_ring_2d - - - - - -program~shape_half_ring_2d->proc~set_half_ring~2 - - - - - -program~shape_ring_2d - - -shape_ring_2d - - - - - -program~shape_ring_2d->proc~set_ring~2 - - - - - -program~shape_tetragon - - -shape_tetragon - - - - - -program~shape_tetragon->proc~set_tetragon - - +program~shape_half_circle->proc~set_half_circle + + @@ -886,7 +763,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/cmp_elem.html b/proc/cmp_elem.html index 9b4b0592f..e9987c9ce 100644 --- a/proc/cmp_elem.html +++ b/proc/cmp_elem.html @@ -607,7 +607,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/cmp_elem_xc_vis.html b/proc/cmp_elem_xc_vis.html index 2ba78c692..bbe75fbee 100644 --- a/proc/cmp_elem_xc_vis.html +++ b/proc/cmp_elem_xc_vis.html @@ -618,7 +618,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/cmp_elem_xc_vis~2.html b/proc/cmp_elem_xc_vis~2.html index 3ae21c452..d210940ce 100644 --- a/proc/cmp_elem_xc_vis~2.html +++ b/proc/cmp_elem_xc_vis~2.html @@ -83,15 +83,15 @@

                  cmp_elem_Xc_vis
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure function cmp_elem_Xc_vis(this, p) result(elemConn)

                  Type Bound

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

                  - - class(nurbs_surface), + + class(nurbs_curve), intent(inout) @@ -169,21 +169,6 @@

                  Arguments

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

                  Arguments

                  - - + @@ -191,7 +191,7 @@

                  Arguments

                  Return Value - + integer, allocatable, (:,:)

                  @@ -208,76 +208,76 @@

                  Calls

                  - + proc~~cmp_elem_xc_vis~2~~CallsGraph - + proc~cmp_elem_xc_vis~2 - -nurbs_curve%cmp_elem_Xc_vis + +nurbs_surface%cmp_elem_Xc_vis interface~elemconn_c0 - -elemConn_C0 + +elemConn_C0 proc~cmp_elem_xc_vis~2->interface~elemconn_c0 - - + + proc~cmp_elemconn_c0_l - -cmp_elemConn_C0_L + +cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l - - + + proc~cmp_elemconn_c0_s - -cmp_elemConn_C0_S + +cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s - - + + proc~cmp_elemconn_c0_v - -cmp_elemConn_C0_V + +cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v - - + + @@ -373,106 +373,121 @@

                  Called by

                  - - + + proc~~cmp_elem_xc_vis~2~~CalledByGraph - + proc~cmp_elem_xc_vis~2 - -nurbs_curve%cmp_elem_Xc_vis + +nurbs_surface%cmp_elem_Xc_vis proc~export_xc~2 - - -nurbs_curve%export_Xc + + +nurbs_surface%export_Xc proc~export_xc~2->proc~cmp_elem_xc_vis~2 - - + + - + -program~example1_curve - - -example1_curve +program~example3_surface + + +example3_surface - + -program~example1_curve->proc~export_xc~2 - - +program~example3_surface->proc~export_xc~2 + + - + -program~example_nurbs_curve - - -example_nurbs_curve +program~example_nurbs_surface + + +example_nurbs_surface - + -program~example_nurbs_curve->proc~export_xc~2 - - +program~example_nurbs_surface->proc~export_xc~2 + + - + -program~shape_c_1d - - -shape_C_1d +program~shape_c_2d + + +shape_C_2d - + -program~shape_c_1d->proc~export_xc~2 - - +program~shape_c_2d->proc~export_xc~2 + + - + -program~shape_circle - - -shape_circle +program~shape_half_ring_2d + + +shape_half_ring_2d - + -program~shape_circle->proc~export_xc~2 - - +program~shape_half_ring_2d->proc~export_xc~2 + + - + -program~shape_half_circle - - -shape_half_circle +program~shape_ring_2d + + +shape_ring_2d - + -program~shape_half_circle->proc~export_xc~2 - - +program~shape_ring_2d->proc~export_xc~2 + + + + + +program~shape_tetragon + + +shape_tetragon + + + + + +program~shape_tetragon->proc~export_xc~2 + + @@ -588,7 +603,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/cmp_elem_xc_vis~3.html b/proc/cmp_elem_xc_vis~3.html index 948e587fd..edbd99d4e 100644 --- a/proc/cmp_elem_xc_vis~3.html +++ b/proc/cmp_elem_xc_vis~3.html @@ -83,15 +83,15 @@

                  cmp_elem_Xc_vis
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure function cmp_elem_Xc_vis(this, p) result(elemConn)

                  Type Bound

                  -

                  nurbs_surface

                  +

                  nurbs_curve

                  Arguments

                  - - class(nurbs_curve), + + class(nurbs_surface), intent(in) @@ -173,15 +173,15 @@

                  Arguments

                  - + integer, intent(in),optional - + optional, + contiguous ::pp(:)
                  @@ -158,8 +158,8 @@

                  Arguments

                  - - + @@ -208,76 +208,76 @@

                  Calls

                  - + proc~~cmp_elem_xc_vis~3~~CallsGraph - + proc~cmp_elem_xc_vis~3 - -nurbs_surface%cmp_elem_Xc_vis + +nurbs_curve%cmp_elem_Xc_vis interface~elemconn_c0 - -elemConn_C0 + +elemConn_C0 proc~cmp_elem_xc_vis~3->interface~elemconn_c0 - - + + proc~cmp_elemconn_c0_l - -cmp_elemConn_C0_L + +cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l - - + + proc~cmp_elemconn_c0_s - -cmp_elemConn_C0_S + +cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s - - + + proc~cmp_elemconn_c0_v - -cmp_elemConn_C0_V + +cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v - - + + @@ -373,121 +373,106 @@

                  Called by

                  - - + + proc~~cmp_elem_xc_vis~3~~CalledByGraph - + proc~cmp_elem_xc_vis~3 - -nurbs_surface%cmp_elem_Xc_vis + +nurbs_curve%cmp_elem_Xc_vis proc~export_xc~3 - - -nurbs_surface%export_Xc + + +nurbs_curve%export_Xc proc~export_xc~3->proc~cmp_elem_xc_vis~3 - - + + - + -program~example3_surface - - -example3_surface +program~example1_curve + + +example1_curve - + -program~example3_surface->proc~export_xc~3 - - +program~example1_curve->proc~export_xc~3 + + - + -program~example_nurbs_surface - - -example_nurbs_surface +program~example_nurbs_curve + + +example_nurbs_curve - + -program~example_nurbs_surface->proc~export_xc~3 - - +program~example_nurbs_curve->proc~export_xc~3 + + - + -program~shape_c_2d - - -shape_C_2d +program~shape_c_1d + + +shape_C_1d - + -program~shape_c_2d->proc~export_xc~3 - - +program~shape_c_1d->proc~export_xc~3 + + - + -program~shape_half_ring_2d - - -shape_half_ring_2d +program~shape_circle + + +shape_circle - + -program~shape_half_ring_2d->proc~export_xc~3 - - +program~shape_circle->proc~export_xc~3 + + - + -program~shape_ring_2d - - -shape_ring_2d +program~shape_half_circle + + +shape_half_circle - + -program~shape_ring_2d->proc~export_xc~3 - - - - - -program~shape_tetragon - - -shape_tetragon - - - - - -program~shape_tetragon->proc~export_xc~3 - - +program~shape_half_circle->proc~export_xc~3 + + @@ -603,7 +588,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/cmp_elem_xg_vis.html b/proc/cmp_elem_xg_vis.html index 0abf2eef6..a57ab636f 100644 --- a/proc/cmp_elem_xg_vis.html +++ b/proc/cmp_elem_xg_vis.html @@ -618,7 +618,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/cmp_elem_xg_vis~2.html b/proc/cmp_elem_xg_vis~2.html index b50669db5..99b5ccdbf 100644 --- a/proc/cmp_elem_xg_vis~2.html +++ b/proc/cmp_elem_xg_vis~2.html @@ -83,15 +83,15 @@

                  cmp_elem_Xg_vis
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure function cmp_elem_Xg_vis(this, p) result(elemConn)

                  Type Bound

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

                  - - class(nurbs_surface), + + class(nurbs_curve), intent(in) @@ -177,11 +177,11 @@

                  Arguments

                  integer,
                  intent(in),optional, - contiguous + optional + ::p(:)p
                  @@ -158,8 +158,8 @@

                  Arguments

                  - - + @@ -191,7 +191,7 @@

                  Arguments

                  Return Value - + integer, allocatable, (:,:)

                  @@ -208,76 +208,76 @@

                  Calls

                  - + proc~~cmp_elem_xg_vis~2~~CallsGraph - + proc~cmp_elem_xg_vis~2 - -nurbs_curve%cmp_elem_Xg_vis + +nurbs_surface%cmp_elem_Xg_vis interface~elemconn_c0 - -elemConn_C0 + +elemConn_C0 proc~cmp_elem_xg_vis~2->interface~elemconn_c0 - - + + proc~cmp_elemconn_c0_l - -cmp_elemConn_C0_L + +cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l - - + + proc~cmp_elemconn_c0_s - -cmp_elemConn_C0_S + +cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s - - + + proc~cmp_elemconn_c0_v - -cmp_elemConn_C0_V + +cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v - - + + @@ -373,106 +373,121 @@

                  Called by

                  - - + + proc~~cmp_elem_xg_vis~2~~CalledByGraph - + proc~cmp_elem_xg_vis~2 - -nurbs_curve%cmp_elem_Xg_vis + +nurbs_surface%cmp_elem_Xg_vis proc~export_xg~2 - - -nurbs_curve%export_Xg + + +nurbs_surface%export_Xg proc~export_xg~2->proc~cmp_elem_xg_vis~2 - - + + - + -program~example1_curve - - -example1_curve +program~example3_surface + + +example3_surface - + -program~example1_curve->proc~export_xg~2 - - +program~example3_surface->proc~export_xg~2 + + - + -program~example_nurbs_curve - - -example_nurbs_curve +program~example_nurbs_surface + + +example_nurbs_surface - + -program~example_nurbs_curve->proc~export_xg~2 - - +program~example_nurbs_surface->proc~export_xg~2 + + - + -program~shape_c_1d - - -shape_C_1d +program~shape_c_2d + + +shape_C_2d - + -program~shape_c_1d->proc~export_xg~2 - - +program~shape_c_2d->proc~export_xg~2 + + - + -program~shape_circle - - -shape_circle +program~shape_half_ring_2d + + +shape_half_ring_2d - + -program~shape_circle->proc~export_xg~2 - - +program~shape_half_ring_2d->proc~export_xg~2 + + - + -program~shape_half_circle - - -shape_half_circle +program~shape_ring_2d + + +shape_ring_2d - + -program~shape_half_circle->proc~export_xg~2 - - +program~shape_ring_2d->proc~export_xg~2 + + + + + +program~shape_tetragon + + +shape_tetragon + + + + + +program~shape_tetragon->proc~export_xg~2 + + @@ -588,7 +603,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/cmp_elem_xg_vis~3.html b/proc/cmp_elem_xg_vis~3.html index 4490a6f3a..fc2d29bda 100644 --- a/proc/cmp_elem_xg_vis~3.html +++ b/proc/cmp_elem_xg_vis~3.html @@ -83,15 +83,15 @@

                  cmp_elem_Xg_vis
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure function cmp_elem_Xg_vis(this, p) result(elemConn)

                  Type Bound

                  -

                  nurbs_surface

                  +

                  nurbs_curve

                  Arguments

                  - - class(nurbs_curve), + + class(nurbs_surface), intent(in) @@ -173,15 +173,15 @@

                  Arguments

                  - + integer, intent(in),optional - + optional, + contiguous ::pp(:)
                  @@ -158,8 +158,8 @@

                  Arguments

                  - - + @@ -208,76 +208,76 @@

                  Calls

                  - + proc~~cmp_elem_xg_vis~3~~CallsGraph - + proc~cmp_elem_xg_vis~3 - -nurbs_surface%cmp_elem_Xg_vis + +nurbs_curve%cmp_elem_Xg_vis interface~elemconn_c0 - -elemConn_C0 + +elemConn_C0 proc~cmp_elem_xg_vis~3->interface~elemconn_c0 - - + + proc~cmp_elemconn_c0_l - -cmp_elemConn_C0_L + +cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l - - + + proc~cmp_elemconn_c0_s - -cmp_elemConn_C0_S + +cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s - - + + proc~cmp_elemconn_c0_v - -cmp_elemConn_C0_V + +cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v - - + + @@ -373,121 +373,106 @@

                  Called by

                  - - + + proc~~cmp_elem_xg_vis~3~~CalledByGraph - + proc~cmp_elem_xg_vis~3 - -nurbs_surface%cmp_elem_Xg_vis + +nurbs_curve%cmp_elem_Xg_vis proc~export_xg~3 - - -nurbs_surface%export_Xg + + +nurbs_curve%export_Xg proc~export_xg~3->proc~cmp_elem_xg_vis~3 - - + + - + -program~example3_surface - - -example3_surface +program~example1_curve + + +example1_curve - + -program~example3_surface->proc~export_xg~3 - - +program~example1_curve->proc~export_xg~3 + + - + -program~example_nurbs_surface - - -example_nurbs_surface +program~example_nurbs_curve + + +example_nurbs_curve - + -program~example_nurbs_surface->proc~export_xg~3 - - +program~example_nurbs_curve->proc~export_xg~3 + + - + -program~shape_c_2d - - -shape_C_2d +program~shape_c_1d + + +shape_C_1d - + -program~shape_c_2d->proc~export_xg~3 - - +program~shape_c_1d->proc~export_xg~3 + + - + -program~shape_half_ring_2d - - -shape_half_ring_2d +program~shape_circle + + +shape_circle - + -program~shape_half_ring_2d->proc~export_xg~3 - - +program~shape_circle->proc~export_xg~3 + + - + -program~shape_ring_2d - - -shape_ring_2d +program~shape_half_circle + + +shape_half_circle - + -program~shape_ring_2d->proc~export_xg~3 - - - - - -program~shape_tetragon - - -shape_tetragon - - - - - -program~shape_tetragon->proc~export_xg~3 - - +program~shape_half_circle->proc~export_xg~3 + + @@ -603,7 +588,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/cmp_elemconn_c0_l.html b/proc/cmp_elemconn_c0_l.html index 75b2e0ff4..a87dd357f 100644 --- a/proc/cmp_elemconn_c0_l.html +++ b/proc/cmp_elemconn_c0_l.html @@ -171,7 +171,7 @@

                  Arguments

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

                  Arguments

                  Return Value - + integer, allocatable, (:,:)

                  @@ -214,23 +214,23 @@

                  Called by

                  proc~cmp_elemconn_c0_l - -cmp_elemConn_C0_L + +cmp_elemConn_C0_L interface~elemconn_c0 - -elemConn_C0 + +elemConn_C0 interface~elemconn_c0->proc~cmp_elemconn_c0_l - - + + @@ -244,38 +244,38 @@

                  Called by

                  proc~cmp_elem_xc_vis->interface~elemconn_c0 - - + + proc~cmp_elem_xc_vis~2 - - -nurbs_curve%cmp_elem_Xc_vis + + +nurbs_surface%cmp_elem_Xc_vis proc~cmp_elem_xc_vis~2->interface~elemconn_c0 - - + + proc~cmp_elem_xc_vis~3 - - -nurbs_surface%cmp_elem_Xc_vis + + +nurbs_curve%cmp_elem_Xc_vis proc~cmp_elem_xc_vis~3->interface~elemconn_c0 - - + + @@ -289,38 +289,38 @@

                  Called by

                  proc~cmp_elem_xg_vis->interface~elemconn_c0 - - + + proc~cmp_elem_xg_vis~2 - - -nurbs_curve%cmp_elem_Xg_vis + + +nurbs_surface%cmp_elem_Xg_vis proc~cmp_elem_xg_vis~2->interface~elemconn_c0 - - + + proc~cmp_elem_xg_vis~3 - - -nurbs_surface%cmp_elem_Xg_vis + + +nurbs_curve%cmp_elem_Xg_vis proc~cmp_elem_xg_vis~3->interface~elemconn_c0 - - + + @@ -340,32 +340,32 @@

                  Called by

                  proc~export_xc~2 - - -nurbs_curve%export_Xc + + +nurbs_surface%export_Xc proc~export_xc~2->proc~cmp_elem_xc_vis~2 - - + + proc~export_xc~3 - - -nurbs_surface%export_Xc + + +nurbs_curve%export_Xc proc~export_xc~3->proc~cmp_elem_xc_vis~3 - - + + @@ -385,74 +385,74 @@

                  Called by

                  proc~export_xg~2 - - -nurbs_curve%export_Xg + + +nurbs_surface%export_Xg proc~export_xg~2->proc~cmp_elem_xg_vis~2 - - + + proc~export_xg~3 - - -nurbs_surface%export_Xg + + +nurbs_curve%export_Xg proc~export_xg~3->proc~cmp_elem_xg_vis~3 - - + + program~example1_curve - -example1_curve + +example1_curve - - -program~example1_curve->proc~export_xc~2 - - + + +program~example1_curve->proc~export_xc~3 + + - - -program~example1_curve->proc~export_xg~2 - - + + +program~example1_curve->proc~export_xg~3 + + program~example3_surface - -example3_surface + +example3_surface - - -program~example3_surface->proc~export_xc~3 - - + + +program~example3_surface->proc~export_xc~2 + + - - -program~example3_surface->proc~export_xg~3 - - + + +program~example3_surface->proc~export_xg~2 + + @@ -479,43 +479,43 @@

                  Called by

                  program~example_nurbs_curve - -example_nurbs_curve + +example_nurbs_curve - - -program~example_nurbs_curve->proc~export_xc~2 - - + + +program~example_nurbs_curve->proc~export_xc~3 + + - - -program~example_nurbs_curve->proc~export_xg~2 - - + + +program~example_nurbs_curve->proc~export_xg~3 + + program~example_nurbs_surface - -example_nurbs_surface + +example_nurbs_surface - - -program~example_nurbs_surface->proc~export_xc~3 - - + + +program~example_nurbs_surface->proc~export_xc~2 + + - - -program~example_nurbs_surface->proc~export_xg~3 - - + + +program~example_nurbs_surface->proc~export_xg~2 + + @@ -563,43 +563,43 @@

                  Called by

                  program~shape_c_1d - -shape_C_1d + +shape_C_1d - - -program~shape_c_1d->proc~export_xc~2 - - + + +program~shape_c_1d->proc~export_xc~3 + + - - -program~shape_c_1d->proc~export_xg~2 - - + + +program~shape_c_1d->proc~export_xg~3 + + program~shape_c_2d - -shape_C_2d + +shape_C_2d - - -program~shape_c_2d->proc~export_xc~3 - - + + +program~shape_c_2d->proc~export_xc~2 + + - - -program~shape_c_2d->proc~export_xg~3 - - + + +program~shape_c_2d->proc~export_xg~2 + + @@ -626,64 +626,64 @@

                  Called by

                  program~shape_circle - -shape_circle + +shape_circle - - -program~shape_circle->proc~export_xc~2 - - + + +program~shape_circle->proc~export_xc~3 + + - - -program~shape_circle->proc~export_xg~2 - - + + +program~shape_circle->proc~export_xg~3 + + program~shape_half_circle - -shape_half_circle + +shape_half_circle - - -program~shape_half_circle->proc~export_xc~2 - - + + +program~shape_half_circle->proc~export_xc~3 + + - - -program~shape_half_circle->proc~export_xg~2 - - + + +program~shape_half_circle->proc~export_xg~3 + + program~shape_half_ring_2d - -shape_half_ring_2d + +shape_half_ring_2d - - -program~shape_half_ring_2d->proc~export_xc~3 - - + + +program~shape_half_ring_2d->proc~export_xc~2 + + - - -program~shape_half_ring_2d->proc~export_xg~3 - - + + +program~shape_half_ring_2d->proc~export_xg~2 + + @@ -731,22 +731,22 @@

                  Called by

                  program~shape_ring_2d - -shape_ring_2d + +shape_ring_2d - - -program~shape_ring_2d->proc~export_xc~3 - - + + +program~shape_ring_2d->proc~export_xc~2 + + - - -program~shape_ring_2d->proc~export_xg~3 - - + + +program~shape_ring_2d->proc~export_xg~2 + + @@ -773,22 +773,22 @@

                  Called by

                  program~shape_tetragon - -shape_tetragon + +shape_tetragon - - -program~shape_tetragon->proc~export_xc~3 - - + + +program~shape_tetragon->proc~export_xc~2 + + - - -program~shape_tetragon->proc~export_xg~3 - - + + +program~shape_tetragon->proc~export_xg~2 + + @@ -908,7 +908,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/cmp_elemconn_c0_s.html b/proc/cmp_elemconn_c0_s.html index 68ca689b9..5a03b4710 100644 --- a/proc/cmp_elemconn_c0_s.html +++ b/proc/cmp_elemconn_c0_s.html @@ -219,7 +219,7 @@

                  Arguments

                  Return Value - + integer, allocatable, (:,:)

                  @@ -244,23 +244,23 @@

                  Called by

                  proc~cmp_elemconn_c0_s - -cmp_elemConn_C0_S + +cmp_elemConn_C0_S interface~elemconn_c0 - -elemConn_C0 + +elemConn_C0 interface~elemconn_c0->proc~cmp_elemconn_c0_s - - + + @@ -274,38 +274,38 @@

                  Called by

                  proc~cmp_elem_xc_vis->interface~elemconn_c0 - - + + proc~cmp_elem_xc_vis~2 - - -nurbs_curve%cmp_elem_Xc_vis + + +nurbs_surface%cmp_elem_Xc_vis proc~cmp_elem_xc_vis~2->interface~elemconn_c0 - - + + proc~cmp_elem_xc_vis~3 - - -nurbs_surface%cmp_elem_Xc_vis + + +nurbs_curve%cmp_elem_Xc_vis proc~cmp_elem_xc_vis~3->interface~elemconn_c0 - - + + @@ -319,38 +319,38 @@

                  Called by

                  proc~cmp_elem_xg_vis->interface~elemconn_c0 - - + + proc~cmp_elem_xg_vis~2 - - -nurbs_curve%cmp_elem_Xg_vis + + +nurbs_surface%cmp_elem_Xg_vis proc~cmp_elem_xg_vis~2->interface~elemconn_c0 - - + + proc~cmp_elem_xg_vis~3 - - -nurbs_surface%cmp_elem_Xg_vis + + +nurbs_curve%cmp_elem_Xg_vis proc~cmp_elem_xg_vis~3->interface~elemconn_c0 - - + + @@ -370,32 +370,32 @@

                  Called by

                  proc~export_xc~2 - - -nurbs_curve%export_Xc + + +nurbs_surface%export_Xc proc~export_xc~2->proc~cmp_elem_xc_vis~2 - - + + proc~export_xc~3 - - -nurbs_surface%export_Xc + + +nurbs_curve%export_Xc proc~export_xc~3->proc~cmp_elem_xc_vis~3 - - + + @@ -415,74 +415,74 @@

                  Called by

                  proc~export_xg~2 - - -nurbs_curve%export_Xg + + +nurbs_surface%export_Xg proc~export_xg~2->proc~cmp_elem_xg_vis~2 - - + + proc~export_xg~3 - - -nurbs_surface%export_Xg + + +nurbs_curve%export_Xg proc~export_xg~3->proc~cmp_elem_xg_vis~3 - - + + program~example1_curve - -example1_curve + +example1_curve - - -program~example1_curve->proc~export_xc~2 - - + + +program~example1_curve->proc~export_xc~3 + + - - -program~example1_curve->proc~export_xg~2 - - + + +program~example1_curve->proc~export_xg~3 + + program~example3_surface - -example3_surface + +example3_surface - - -program~example3_surface->proc~export_xc~3 - - + + +program~example3_surface->proc~export_xc~2 + + - - -program~example3_surface->proc~export_xg~3 - - + + +program~example3_surface->proc~export_xg~2 + + @@ -509,43 +509,43 @@

                  Called by

                  program~example_nurbs_curve - -example_nurbs_curve + +example_nurbs_curve - - -program~example_nurbs_curve->proc~export_xc~2 - - + + +program~example_nurbs_curve->proc~export_xc~3 + + - - -program~example_nurbs_curve->proc~export_xg~2 - - + + +program~example_nurbs_curve->proc~export_xg~3 + + program~example_nurbs_surface - -example_nurbs_surface + +example_nurbs_surface - - -program~example_nurbs_surface->proc~export_xc~3 - - + + +program~example_nurbs_surface->proc~export_xc~2 + + - - -program~example_nurbs_surface->proc~export_xg~3 - - + + +program~example_nurbs_surface->proc~export_xg~2 + + @@ -593,43 +593,43 @@

                  Called by

                  program~shape_c_1d - -shape_C_1d + +shape_C_1d - - -program~shape_c_1d->proc~export_xc~2 - - + + +program~shape_c_1d->proc~export_xc~3 + + - - -program~shape_c_1d->proc~export_xg~2 - - + + +program~shape_c_1d->proc~export_xg~3 + + program~shape_c_2d - -shape_C_2d + +shape_C_2d - - -program~shape_c_2d->proc~export_xc~3 - - + + +program~shape_c_2d->proc~export_xc~2 + + - - -program~shape_c_2d->proc~export_xg~3 - - + + +program~shape_c_2d->proc~export_xg~2 + + @@ -656,64 +656,64 @@

                  Called by

                  program~shape_circle - -shape_circle + +shape_circle - - -program~shape_circle->proc~export_xc~2 - - + + +program~shape_circle->proc~export_xc~3 + + - - -program~shape_circle->proc~export_xg~2 - - + + +program~shape_circle->proc~export_xg~3 + + program~shape_half_circle - -shape_half_circle + +shape_half_circle - - -program~shape_half_circle->proc~export_xc~2 - - + + +program~shape_half_circle->proc~export_xc~3 + + - - -program~shape_half_circle->proc~export_xg~2 - - + + +program~shape_half_circle->proc~export_xg~3 + + program~shape_half_ring_2d - -shape_half_ring_2d + +shape_half_ring_2d - - -program~shape_half_ring_2d->proc~export_xc~3 - - + + +program~shape_half_ring_2d->proc~export_xc~2 + + - - -program~shape_half_ring_2d->proc~export_xg~3 - - + + +program~shape_half_ring_2d->proc~export_xg~2 + + @@ -761,22 +761,22 @@

                  Called by

                  program~shape_ring_2d - -shape_ring_2d + +shape_ring_2d - - -program~shape_ring_2d->proc~export_xc~3 - - + + +program~shape_ring_2d->proc~export_xc~2 + + - - -program~shape_ring_2d->proc~export_xg~3 - - + + +program~shape_ring_2d->proc~export_xg~2 + + @@ -803,22 +803,22 @@

                  Called by

                  program~shape_tetragon - -shape_tetragon + +shape_tetragon - - -program~shape_tetragon->proc~export_xc~3 - - + + +program~shape_tetragon->proc~export_xc~2 + + - - -program~shape_tetragon->proc~export_xg~3 - - + + +program~shape_tetragon->proc~export_xg~2 + + @@ -938,7 +938,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/cmp_elemconn_c0_v.html b/proc/cmp_elemconn_c0_v.html index 8f7413cf7..ddd37a817 100644 --- a/proc/cmp_elemconn_c0_v.html +++ b/proc/cmp_elemconn_c0_v.html @@ -249,7 +249,7 @@

                  Arguments

                  Return Value - + integer, allocatable, (:,:)

                  @@ -274,23 +274,23 @@

                  Called by

                  proc~cmp_elemconn_c0_v - -cmp_elemConn_C0_V + +cmp_elemConn_C0_V interface~elemconn_c0 - -elemConn_C0 + +elemConn_C0 interface~elemconn_c0->proc~cmp_elemconn_c0_v - - + + @@ -304,38 +304,38 @@

                  Called by

                  proc~cmp_elem_xc_vis->interface~elemconn_c0 - - + + proc~cmp_elem_xc_vis~2 - - -nurbs_curve%cmp_elem_Xc_vis + + +nurbs_surface%cmp_elem_Xc_vis proc~cmp_elem_xc_vis~2->interface~elemconn_c0 - - + + proc~cmp_elem_xc_vis~3 - - -nurbs_surface%cmp_elem_Xc_vis + + +nurbs_curve%cmp_elem_Xc_vis proc~cmp_elem_xc_vis~3->interface~elemconn_c0 - - + + @@ -349,38 +349,38 @@

                  Called by

                  proc~cmp_elem_xg_vis->interface~elemconn_c0 - - + + proc~cmp_elem_xg_vis~2 - - -nurbs_curve%cmp_elem_Xg_vis + + +nurbs_surface%cmp_elem_Xg_vis proc~cmp_elem_xg_vis~2->interface~elemconn_c0 - - + + proc~cmp_elem_xg_vis~3 - - -nurbs_surface%cmp_elem_Xg_vis + + +nurbs_curve%cmp_elem_Xg_vis proc~cmp_elem_xg_vis~3->interface~elemconn_c0 - - + + @@ -400,32 +400,32 @@

                  Called by

                  proc~export_xc~2 - - -nurbs_curve%export_Xc + + +nurbs_surface%export_Xc proc~export_xc~2->proc~cmp_elem_xc_vis~2 - - + + proc~export_xc~3 - - -nurbs_surface%export_Xc + + +nurbs_curve%export_Xc proc~export_xc~3->proc~cmp_elem_xc_vis~3 - - + + @@ -445,74 +445,74 @@

                  Called by

                  proc~export_xg~2 - - -nurbs_curve%export_Xg + + +nurbs_surface%export_Xg proc~export_xg~2->proc~cmp_elem_xg_vis~2 - - + + proc~export_xg~3 - - -nurbs_surface%export_Xg + + +nurbs_curve%export_Xg proc~export_xg~3->proc~cmp_elem_xg_vis~3 - - + + program~example1_curve - -example1_curve + +example1_curve - - -program~example1_curve->proc~export_xc~2 - - + + +program~example1_curve->proc~export_xc~3 + + - - -program~example1_curve->proc~export_xg~2 - - + + +program~example1_curve->proc~export_xg~3 + + program~example3_surface - -example3_surface + +example3_surface - - -program~example3_surface->proc~export_xc~3 - - + + +program~example3_surface->proc~export_xc~2 + + - - -program~example3_surface->proc~export_xg~3 - - + + +program~example3_surface->proc~export_xg~2 + + @@ -539,43 +539,43 @@

                  Called by

                  program~example_nurbs_curve - -example_nurbs_curve + +example_nurbs_curve - - -program~example_nurbs_curve->proc~export_xc~2 - - + + +program~example_nurbs_curve->proc~export_xc~3 + + - - -program~example_nurbs_curve->proc~export_xg~2 - - + + +program~example_nurbs_curve->proc~export_xg~3 + + program~example_nurbs_surface - -example_nurbs_surface + +example_nurbs_surface - - -program~example_nurbs_surface->proc~export_xc~3 - - + + +program~example_nurbs_surface->proc~export_xc~2 + + - - -program~example_nurbs_surface->proc~export_xg~3 - - + + +program~example_nurbs_surface->proc~export_xg~2 + + @@ -623,43 +623,43 @@

                  Called by

                  program~shape_c_1d - -shape_C_1d + +shape_C_1d - - -program~shape_c_1d->proc~export_xc~2 - - + + +program~shape_c_1d->proc~export_xc~3 + + - - -program~shape_c_1d->proc~export_xg~2 - - + + +program~shape_c_1d->proc~export_xg~3 + + program~shape_c_2d - -shape_C_2d + +shape_C_2d - - -program~shape_c_2d->proc~export_xc~3 - - + + +program~shape_c_2d->proc~export_xc~2 + + - - -program~shape_c_2d->proc~export_xg~3 - - + + +program~shape_c_2d->proc~export_xg~2 + + @@ -686,64 +686,64 @@

                  Called by

                  program~shape_circle - -shape_circle + +shape_circle - - -program~shape_circle->proc~export_xc~2 - - + + +program~shape_circle->proc~export_xc~3 + + - - -program~shape_circle->proc~export_xg~2 - - + + +program~shape_circle->proc~export_xg~3 + + program~shape_half_circle - -shape_half_circle + +shape_half_circle - - -program~shape_half_circle->proc~export_xc~2 - - + + +program~shape_half_circle->proc~export_xc~3 + + - - -program~shape_half_circle->proc~export_xg~2 - - + + +program~shape_half_circle->proc~export_xg~3 + + program~shape_half_ring_2d - -shape_half_ring_2d + +shape_half_ring_2d - - -program~shape_half_ring_2d->proc~export_xc~3 - - + + +program~shape_half_ring_2d->proc~export_xc~2 + + - - -program~shape_half_ring_2d->proc~export_xg~3 - - + + +program~shape_half_ring_2d->proc~export_xg~2 + + @@ -791,22 +791,22 @@

                  Called by

                  program~shape_ring_2d - -shape_ring_2d + +shape_ring_2d - - -program~shape_ring_2d->proc~export_xc~3 - - + + +program~shape_ring_2d->proc~export_xc~2 + + - - -program~shape_ring_2d->proc~export_xg~3 - - + + +program~shape_ring_2d->proc~export_xg~2 + + @@ -833,22 +833,22 @@

                  Called by

                  program~shape_tetragon - -shape_tetragon + +shape_tetragon - - -program~shape_tetragon->proc~export_xc~3 - - + + +program~shape_tetragon->proc~export_xc~2 + + - - -program~shape_tetragon->proc~export_xg~3 - - + + +program~shape_tetragon->proc~export_xg~2 + + @@ -968,7 +968,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/cmp_elemconn_cn_l.html b/proc/cmp_elemconn_cn_l.html index f5d39ca30..9c9254bd0 100644 --- a/proc/cmp_elemconn_cn_l.html +++ b/proc/cmp_elemconn_cn_l.html @@ -171,7 +171,7 @@

                  Arguments

                  @@ -186,7 +186,7 @@

                  Arguments

                  @@ -216,7 +216,7 @@

                  Arguments

                  @@ -288,24 +288,24 @@

                  Called by

                  proc~cmp_elem~2 - - -nurbs_curve%cmp_elem + + +nurbs_surface%cmp_elem proc~cmp_elem~2->interface~elemconn_cn - - + + proc~cmp_elem~3 - - -nurbs_surface%cmp_elem + + +nurbs_curve%cmp_elem @@ -444,7 +444,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/cmp_elemconn_cn_s.html b/proc/cmp_elemconn_cn_s.html index 63deb6750..19642c8ac 100644 --- a/proc/cmp_elemconn_cn_s.html +++ b/proc/cmp_elemconn_cn_s.html @@ -276,7 +276,7 @@

                  Arguments

                  @@ -348,24 +348,24 @@

                  Called by

                  proc~cmp_elem~2 - - -nurbs_curve%cmp_elem + + +nurbs_surface%cmp_elem proc~cmp_elem~2->interface~elemconn_cn - - + + proc~cmp_elem~3 - - -nurbs_surface%cmp_elem + + +nurbs_curve%cmp_elem @@ -504,7 +504,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/cmp_elemconn_cn_v.html b/proc/cmp_elemconn_cn_v.html index 391d7a6dc..ad68295ac 100644 --- a/proc/cmp_elemconn_cn_v.html +++ b/proc/cmp_elemconn_cn_v.html @@ -336,7 +336,7 @@

                  Arguments

                  @@ -408,24 +408,24 @@

                  Called by

                  proc~cmp_elem~2 - - -nurbs_curve%cmp_elem + + +nurbs_surface%cmp_elem proc~cmp_elem~2->interface~elemconn_cn - - + + proc~cmp_elem~3 - - -nurbs_surface%cmp_elem + + +nurbs_curve%cmp_elem @@ -564,7 +564,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/cmp_elemface.html b/proc/cmp_elemface.html index 5f25f4644..900014e67 100644 --- a/proc/cmp_elemface.html +++ b/proc/cmp_elemface.html @@ -364,7 +364,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/cmp_elemface_xc_vis.html b/proc/cmp_elemface_xc_vis.html index 9072c1b15..51078d74d 100644 --- a/proc/cmp_elemface_xc_vis.html +++ b/proc/cmp_elemface_xc_vis.html @@ -243,7 +243,7 @@

                  Return Value

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/cmp_elemface_xg_vis.html b/proc/cmp_elemface_xg_vis.html index ec707bdb7..ae4a9a789 100644 --- a/proc/cmp_elemface_xg_vis.html +++ b/proc/cmp_elemface_xg_vis.html @@ -243,7 +243,7 @@

                  Return Value

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/cmp_elem~2.html b/proc/cmp_elem~2.html index 959ddd719..697dd31b4 100644 --- a/proc/cmp_elem~2.html +++ b/proc/cmp_elem~2.html @@ -83,15 +83,15 @@

                  cmp_elem
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure function cmp_elem(this) result(elemConn)

                  Type Bound

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

                  - - class(nurbs_surface), + + class(nurbs_curve), intent(in) @@ -177,11 +177,11 @@

                  Arguments

                  integer,
                  intent(in),optional, - contiguous + optional + ::p(:)p
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + real(kind=rk), intent(in),
                  - + integer, intent(out),
                  - + integer, intent(out),
                  - + integer, intent(out),
                  @@ -159,7 +159,7 @@

                  Arguments

                  - class(nurbs_curve), + class(nurbs_surface), intent(in) @@ -176,7 +176,7 @@

                  Arguments

                  Return Value - + integer, allocatable, (:,:)

                  @@ -193,181 +193,181 @@

                  Calls

                  - - + + proc~~cmp_elem~2~~CallsGraph - + proc~cmp_elem~2 - -nurbs_curve%cmp_elem + +nurbs_surface%cmp_elem interface~elemconn_cn - -elemConn_Cn + +elemConn_Cn proc~cmp_elem~2->interface~elemconn_cn - - + + interface~unique - -unique + +unique proc~cmp_elem~2->interface~unique - - + + proc~get_multiplicity~2 - - -nurbs_curve%get_multiplicity + + +nurbs_surface%get_multiplicity proc~cmp_elem~2->proc~get_multiplicity~2 - - + + proc~cmp_elemconn_cn_l - -cmp_elemConn_Cn_L + +cmp_elemConn_Cn_L interface~elemconn_cn->proc~cmp_elemconn_cn_l - - + + proc~cmp_elemconn_cn_s - -cmp_elemConn_Cn_S + +cmp_elemConn_Cn_S interface~elemconn_cn->proc~cmp_elemconn_cn_s - - + + proc~cmp_elemconn_cn_v - -cmp_elemConn_Cn_V + +cmp_elemConn_Cn_V interface~elemconn_cn->proc~cmp_elemconn_cn_v - - + + proc~unique_integer - -unique_integer + +unique_integer interface~unique->proc~unique_integer - - + + proc~unique_real - -unique_real + +unique_real interface~unique->proc~unique_real - - + + interface~compute_multiplicity - -compute_multiplicity + +compute_multiplicity proc~get_multiplicity~2->interface~compute_multiplicity - - + + proc~compute_multiplicity1 - -compute_multiplicity1 + +compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 - - + + proc~compute_multiplicity2 - -compute_multiplicity2 + +compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 - - + + @@ -487,7 +487,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/cmp_elem~3.html b/proc/cmp_elem~3.html index 6ec7978a6..d9d0b05d2 100644 --- a/proc/cmp_elem~3.html +++ b/proc/cmp_elem~3.html @@ -83,15 +83,15 @@

                  cmp_elem
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure function cmp_elem(this) result(elemConn)

                  Type Bound

                  -

                  nurbs_surface

                  +

                  nurbs_curve

                  Arguments

                  @@ -158,8 +158,8 @@

                  Arguments

                  - - class(nurbs_surface), + + class(nurbs_curve), intent(in) @@ -193,181 +193,181 @@

                  Calls

                  - - + + proc~~cmp_elem~3~~CallsGraph - + proc~cmp_elem~3 - -nurbs_surface%cmp_elem + +nurbs_curve%cmp_elem interface~elemconn_cn - -elemConn_Cn + +elemConn_Cn proc~cmp_elem~3->interface~elemconn_cn - - + + interface~unique - -unique + +unique proc~cmp_elem~3->interface~unique - - + + proc~get_multiplicity~3 - - -nurbs_surface%get_multiplicity + + +nurbs_curve%get_multiplicity proc~cmp_elem~3->proc~get_multiplicity~3 - - + + proc~cmp_elemconn_cn_l - -cmp_elemConn_Cn_L + +cmp_elemConn_Cn_L interface~elemconn_cn->proc~cmp_elemconn_cn_l - - + + proc~cmp_elemconn_cn_s - -cmp_elemConn_Cn_S + +cmp_elemConn_Cn_S interface~elemconn_cn->proc~cmp_elemconn_cn_s - - + + proc~cmp_elemconn_cn_v - -cmp_elemConn_Cn_V + +cmp_elemConn_Cn_V interface~elemconn_cn->proc~cmp_elemconn_cn_v - - + + proc~unique_integer - -unique_integer + +unique_integer interface~unique->proc~unique_integer - - + + proc~unique_real - -unique_real + +unique_real interface~unique->proc~unique_real - - + + interface~compute_multiplicity - -compute_multiplicity + +compute_multiplicity proc~get_multiplicity~3->interface~compute_multiplicity - - + + proc~compute_multiplicity1 - -compute_multiplicity1 + +compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 - - + + proc~compute_multiplicity2 - -compute_multiplicity2 + +compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 - - + + @@ -487,7 +487,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/cmp_nc.html b/proc/cmp_nc.html index 4ce5c8044..667e7a116 100644 --- a/proc/cmp_nc.html +++ b/proc/cmp_nc.html @@ -804,7 +804,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/cmp_nc~2.html b/proc/cmp_nc~2.html index ca2c3489f..12c1a4a55 100644 --- a/proc/cmp_nc~2.html +++ b/proc/cmp_nc~2.html @@ -78,20 +78,20 @@

                  cmp_nc
                • 4 statements + title=" 0.5% of total for procedures.">32 statements
                • - Source File + Source File
                • -

                  private pure subroutine cmp_nc(this) +

                  private pure subroutine cmp_nc(this, dir)

                  Type Bound

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

                  @@ -158,8 +158,8 @@

                  Arguments

                  + + + + + + + + @@ -186,61 +201,61 @@

                  Calls

                  - + proc~~cmp_nc~2~~CallsGraph - + proc~cmp_nc~2 - -nurbs_curve%cmp_nc + +nurbs_surface%cmp_nc interface~compute_multiplicity - -compute_multiplicity + +compute_multiplicity proc~cmp_nc~2->interface~compute_multiplicity - - + + proc~compute_multiplicity1 - -compute_multiplicity1 + +compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 - - + + proc~compute_multiplicity2 - -compute_multiplicity2 + +compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 - - + + @@ -312,6 +327,502 @@ +

                  Solid arrows point from a procedure to one which it calls. Dashed +arrows point from an interface to procedures which implement that interface. +This could include the module procedures in a generic interface or the +implementation in a submodule of an interface in a parent module. +

                  + Where possible, edges connecting nodes are +given different colours to make them easier to distinguish in +large graphs. + + + + + +
                  +
                  +

                  Called by

                  +
                  +
                  +
                  + + + + + +proc~~cmp_nc~2~~CalledByGraph + + + +proc~cmp_nc~2 + +nurbs_surface%cmp_nc + + + +proc~set1~2 + + +nurbs_surface%set1 + + + + + +proc~set1~2->proc~cmp_nc~2 + + + + + +proc~set2~2 + + +nurbs_surface%set2 + + + + + +proc~set2~2->proc~cmp_nc~2 + + + + + +none~set~2 + + +nurbs_surface%set + + + + + +none~set~2->proc~set1~2 + + + + + +none~set~2->proc~set2~2 + + + + + +proc~elevate_degree~2 + + +nurbs_surface%elevate_degree + + + + + +proc~elevate_degree~2->none~set~2 + + + + + +proc~insert_knots~2 + + +nurbs_surface%insert_knots + + + + + +proc~insert_knots~2->none~set~2 + + + + + +proc~modify_wc~2 + + +nurbs_surface%modify_Wc + + + + + +proc~modify_wc~2->none~set~2 + + + + + +proc~modify_xc~2 + + +nurbs_surface%modify_Xc + + + + + +proc~modify_xc~2->none~set~2 + + + + + +proc~remove_knots~2 + + +nurbs_surface%remove_knots + + + + + +proc~remove_knots~2->none~set~2 + + + + + +proc~set_c~2 + + +nurbs_surface%set_C + + + + + +proc~set_c~2->none~set~2 + + + + + +proc~set_half_ring~2 + + +nurbs_surface%set_half_ring + + + + + +proc~set_half_ring~2->none~set~2 + + + + + +proc~set_ring~2 + + +nurbs_surface%set_ring + + + + + +proc~set_ring~2->none~set~2 + + + + + +proc~set_tetragon + + +nurbs_surface%set_tetragon + + + + + +proc~set_tetragon->none~set~2 + + + + + +program~example3_surface + + +example3_surface + + + + + +program~example3_surface->none~set~2 + + + + + +program~example3_surface->proc~elevate_degree~2 + + + + + +program~example3_surface->proc~insert_knots~2 + + + + + +program~example3_surface->proc~remove_knots~2 + + + + + +program~example_nurbs_surface + + +example_nurbs_surface + + + + + +program~example_nurbs_surface->none~set~2 + + + + + +program~nearest_point_2d + + +nearest_point_2d + + + + + +program~nearest_point_2d->none~set~2 + + + + + +program~example_ppm1 + + +example_ppm1 + + + + + +program~example_ppm1->proc~set_ring~2 + + + + + +program~example_ppm1->proc~set_tetragon + + + + + +program~example_ppm2 + + +example_ppm2 + + + + + +program~example_ppm2->proc~set_half_ring~2 + + + + + +program~example_ppm2->proc~set_tetragon + + + + + +program~example_ppm3 + + +example_ppm3 + + + + + +program~example_ppm3->proc~modify_xc~2 + + + + + +program~example_ppm3->proc~set_tetragon + + + + + +program~nearest_point_2d_bench + + +nearest_point_2d_bench + + + + + +program~nearest_point_2d_bench->proc~set_tetragon + + + + + +program~shape_c_2d + + +shape_C_2d + + + + + +program~shape_c_2d->proc~set_c~2 + + + + + +program~shape_half_ring_2d + + +shape_half_ring_2d + + + + + +program~shape_half_ring_2d->proc~set_half_ring~2 + + + + + +program~shape_ring_2d + + +shape_ring_2d + + + + + +program~shape_ring_2d->proc~set_ring~2 + + + + + +program~shape_tetragon + + +shape_tetragon + + + + + +program~shape_tetragon->proc~set_tetragon + + + + + +
                  + Help +
                  +
                  - - class(nurbs_curve), + + class(nurbs_surface), intent(inout) @@ -169,6 +169,21 @@

                  Arguments

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

                  Arguments

                  - - - - - - - - @@ -201,61 +186,61 @@

                  Calls

                  - + proc~~cmp_nc~3~~CallsGraph - + proc~cmp_nc~3 - -nurbs_surface%cmp_nc + +nurbs_curve%cmp_nc interface~compute_multiplicity - -compute_multiplicity + +compute_multiplicity proc~cmp_nc~3->interface~compute_multiplicity - - + + proc~compute_multiplicity1 - -compute_multiplicity1 + +compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 - - + + proc~compute_multiplicity2 - -compute_multiplicity2 + +compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 - - + + @@ -327,502 +312,6 @@ -

                  Solid arrows point from a procedure to one which it calls. Dashed -arrows point from an interface to procedures which implement that interface. -This could include the module procedures in a generic interface or the -implementation in a submodule of an interface in a parent module. -

                  - Where possible, edges connecting nodes are -given different colours to make them easier to distinguish in -large graphs. - - - - - -
                  -
                  -

                  Called by

                  -
                  -
                  -
                  - - - - - -proc~~cmp_nc~3~~CalledByGraph - - - -proc~cmp_nc~3 - -nurbs_surface%cmp_nc - - - -proc~set1~3 - - -nurbs_surface%set1 - - - - - -proc~set1~3->proc~cmp_nc~3 - - - - - -proc~set2~3 - - -nurbs_surface%set2 - - - - - -proc~set2~3->proc~cmp_nc~3 - - - - - -none~set~3 - - -nurbs_surface%set - - - - - -none~set~3->proc~set1~3 - - - - - -none~set~3->proc~set2~3 - - - - - -proc~elevate_degree~3 - - -nurbs_surface%elevate_degree - - - - - -proc~elevate_degree~3->none~set~3 - - - - - -proc~insert_knots~3 - - -nurbs_surface%insert_knots - - - - - -proc~insert_knots~3->none~set~3 - - - - - -proc~modify_wc~3 - - -nurbs_surface%modify_Wc - - - - - -proc~modify_wc~3->none~set~3 - - - - - -proc~modify_xc~3 - - -nurbs_surface%modify_Xc - - - - - -proc~modify_xc~3->none~set~3 - - - - - -proc~remove_knots~3 - - -nurbs_surface%remove_knots - - - - - -proc~remove_knots~3->none~set~3 - - - - - -proc~set_c~3 - - -nurbs_surface%set_C - - - - - -proc~set_c~3->none~set~3 - - - - - -proc~set_half_ring~2 - - -nurbs_surface%set_half_ring - - - - - -proc~set_half_ring~2->none~set~3 - - - - - -proc~set_ring~2 - - -nurbs_surface%set_ring - - - - - -proc~set_ring~2->none~set~3 - - - - - -proc~set_tetragon - - -nurbs_surface%set_tetragon - - - - - -proc~set_tetragon->none~set~3 - - - - - -program~example3_surface - - -example3_surface - - - - - -program~example3_surface->none~set~3 - - - - - -program~example3_surface->proc~elevate_degree~3 - - - - - -program~example3_surface->proc~insert_knots~3 - - - - - -program~example3_surface->proc~remove_knots~3 - - - - - -program~example_nurbs_surface - - -example_nurbs_surface - - - - - -program~example_nurbs_surface->none~set~3 - - - - - -program~nearest_point_2d - - -nearest_point_2d - - - - - -program~nearest_point_2d->none~set~3 - - - - - -program~example_ppm1 - - -example_ppm1 - - - - - -program~example_ppm1->proc~set_ring~2 - - - - - -program~example_ppm1->proc~set_tetragon - - - - - -program~example_ppm2 - - -example_ppm2 - - - - - -program~example_ppm2->proc~set_half_ring~2 - - - - - -program~example_ppm2->proc~set_tetragon - - - - - -program~example_ppm3 - - -example_ppm3 - - - - - -program~example_ppm3->proc~modify_xc~3 - - - - - -program~example_ppm3->proc~set_tetragon - - - - - -program~nearest_point_2d_bench - - -nearest_point_2d_bench - - - - - -program~nearest_point_2d_bench->proc~set_tetragon - - - - - -program~shape_c_2d - - -shape_C_2d - - - - - -program~shape_c_2d->proc~set_c~3 - - - - - -program~shape_half_ring_2d - - -shape_half_ring_2d - - - - - -program~shape_half_ring_2d->proc~set_half_ring~2 - - - - - -program~shape_ring_2d - - -shape_ring_2d - - - - - -program~shape_ring_2d->proc~set_ring~2 - - - - - -program~shape_tetragon - - -shape_tetragon - - - - - -program~shape_tetragon->proc~set_tetragon - - - - - -
                  - Help -
                  -
                  diff --git a/proc/cmp_xg~2.html b/proc/cmp_xg~2.html index 390e2537f..c01710336 100644 --- a/proc/cmp_xg~2.html +++ b/proc/cmp_xg~2.html @@ -83,15 +83,15 @@

                  cmp_Xg
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure function cmp_Xg(this, Xt) result(Xg)

                  Type Bound

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

                  - - class(nurbs_surface), + + class(nurbs_curve), intent(inout) @@ -169,21 +169,6 @@

                  Arguments

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

                  Arguments

                  - + - + @@ -208,46 +208,46 @@

                  Calls

                  - + proc~~cmp_xg~2~~CallsGraph - + proc~cmp_xg~2 - -nurbs_curve%cmp_Xg + +nurbs_surface%cmp_Xg interface~compute_xg~2 - -compute_Xg + +compute_Xg proc~cmp_xg~2->interface~compute_xg~2 - - + + proc~is_rational~2 - - -nurbs_curve%is_rational + + +nurbs_surface%is_rational proc~cmp_xg~2->proc~is_rational~2 - - + + @@ -343,46 +343,46 @@

                  Called by

                  - + proc~~cmp_xg~2~~CalledByGraph - + proc~cmp_xg~2 - -nurbs_curve%cmp_Xg + +nurbs_surface%cmp_Xg proc~nearest_point2~2 - - -nurbs_curve%nearest_point2 + + +nurbs_surface%nearest_point2 proc~nearest_point2~2->proc~cmp_xg~2 - - + + - + -program~nearest_point_1d - +program~nearest_point_2d + -nearest_point_1d +nearest_point_2d - + -program~nearest_point_1d->proc~nearest_point2~2 - - +program~nearest_point_2d->proc~nearest_point2~2 + + @@ -498,7 +498,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/cmp_xg~3.html b/proc/cmp_xg~3.html index d2ba90a65..31eaea321 100644 --- a/proc/cmp_xg~3.html +++ b/proc/cmp_xg~3.html @@ -83,15 +83,15 @@

                  cmp_Xg
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure function cmp_Xg(this, Xt) result(Xg)

                  Type Bound

                  -

                  nurbs_surface

                  +

                  nurbs_curve

                  Arguments

                  - class(nurbs_curve), + class(nurbs_surface), intent(in) @@ -173,15 +173,15 @@

                  Arguments

                  - + real(kind=rk), intent(in)intent(in), - + contiguous ::XtXt(:)
                  @@ -158,8 +158,8 @@

                  Arguments

                  - + - + @@ -191,7 +191,7 @@

                  Arguments

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

                  @@ -208,46 +208,46 @@

                  Calls

                  - + proc~~cmp_xg~3~~CallsGraph - + proc~cmp_xg~3 - -nurbs_surface%cmp_Xg + +nurbs_curve%cmp_Xg interface~compute_xg~3 - -compute_Xg + +compute_Xg proc~cmp_xg~3->interface~compute_xg~3 - - + + proc~is_rational~3 - - -nurbs_surface%is_rational + + +nurbs_curve%is_rational proc~cmp_xg~3->proc~is_rational~3 - - + + @@ -343,46 +343,46 @@

                  Called by

                  - + proc~~cmp_xg~3~~CalledByGraph - + proc~cmp_xg~3 - -nurbs_surface%cmp_Xg + +nurbs_curve%cmp_Xg proc~nearest_point2~3 - - -nurbs_surface%nearest_point2 + + +nurbs_curve%nearest_point2 proc~nearest_point2~3->proc~cmp_xg~3 - - + + - + -program~nearest_point_2d - +program~nearest_point_1d + -nearest_point_2d +nearest_point_1d - + -program~nearest_point_2d->proc~nearest_point2~3 - - +program~nearest_point_1d->proc~nearest_point2~3 + + @@ -498,7 +498,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/compute_d2tgc_bspline_1d_scalar.html b/proc/compute_d2tgc_bspline_1d_scalar.html index 601befb4e..f93b3c6fa 100644 --- a/proc/compute_d2tgc_bspline_1d_scalar.html +++ b/proc/compute_d2tgc_bspline_1d_scalar.html @@ -275,7 +275,7 @@

                  Arguments

                  @@ -290,7 +290,7 @@

                  Arguments

                  @@ -305,7 +305,7 @@

                  Arguments

                  @@ -320,7 +320,7 @@

                  Arguments

                  @@ -335,7 +335,7 @@

                  Arguments

                  @@ -350,7 +350,7 @@

                  Arguments

                  @@ -365,7 +365,7 @@

                  Arguments

                  @@ -533,7 +533,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/compute_d2tgc_bspline_1d_vector.html b/proc/compute_d2tgc_bspline_1d_vector.html index 649e13799..9846aa6e9 100644 --- a/proc/compute_d2tgc_bspline_1d_vector.html +++ b/proc/compute_d2tgc_bspline_1d_vector.html @@ -275,7 +275,7 @@

                  Arguments

                  @@ -290,7 +290,7 @@

                  Arguments

                  @@ -305,7 +305,7 @@

                  Arguments

                  @@ -320,7 +320,7 @@

                  Arguments

                  @@ -335,7 +335,7 @@

                  Arguments

                  @@ -350,7 +350,7 @@

                  Arguments

                  @@ -365,7 +365,7 @@

                  Arguments

                  @@ -380,7 +380,7 @@

                  Arguments

                  @@ -548,7 +548,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/compute_d2tgc_bspline_2d_scalar.html b/proc/compute_d2tgc_bspline_2d_scalar.html index a6c534803..621d4cc77 100644 --- a/proc/compute_d2tgc_bspline_2d_scalar.html +++ b/proc/compute_d2tgc_bspline_2d_scalar.html @@ -275,7 +275,7 @@

                  Arguments

                  @@ -290,7 +290,7 @@

                  Arguments

                  @@ -305,7 +305,7 @@

                  Arguments

                  @@ -320,7 +320,7 @@

                  Arguments

                  @@ -335,7 +335,7 @@

                  Arguments

                  @@ -350,7 +350,7 @@

                  Arguments

                  @@ -365,7 +365,7 @@

                  Arguments

                  @@ -380,7 +380,7 @@

                  Arguments

                  @@ -563,7 +563,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/compute_d2tgc_bspline_2d_vector.html b/proc/compute_d2tgc_bspline_2d_vector.html index 27bf07634..b3ce4e7cd 100644 --- a/proc/compute_d2tgc_bspline_2d_vector.html +++ b/proc/compute_d2tgc_bspline_2d_vector.html @@ -275,7 +275,7 @@

                  Arguments

                  @@ -290,7 +290,7 @@

                  Arguments

                  @@ -305,7 +305,7 @@

                  Arguments

                  @@ -320,7 +320,7 @@

                  Arguments

                  @@ -335,7 +335,7 @@

                  Arguments

                  @@ -350,7 +350,7 @@

                  Arguments

                  @@ -365,7 +365,7 @@

                  Arguments

                  @@ -380,7 +380,7 @@

                  Arguments

                  @@ -395,7 +395,7 @@

                  Arguments

                  @@ -578,7 +578,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/compute_d2tgc_bspline_3d_scalar.html b/proc/compute_d2tgc_bspline_3d_scalar.html index 602b222eb..35c6fdf97 100644 --- a/proc/compute_d2tgc_bspline_3d_scalar.html +++ b/proc/compute_d2tgc_bspline_3d_scalar.html @@ -578,7 +578,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/compute_d2tgc_bspline_3d_vector.html b/proc/compute_d2tgc_bspline_3d_vector.html index 7997de89d..dd673274e 100644 --- a/proc/compute_d2tgc_bspline_3d_vector.html +++ b/proc/compute_d2tgc_bspline_3d_vector.html @@ -593,7 +593,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/compute_d2tgc_nurbs_1d_scalar.html b/proc/compute_d2tgc_nurbs_1d_scalar.html index a1be6ad3c..251c4dfee 100644 --- a/proc/compute_d2tgc_nurbs_1d_scalar.html +++ b/proc/compute_d2tgc_nurbs_1d_scalar.html @@ -275,7 +275,7 @@

                  Arguments

                  @@ -290,7 +290,7 @@

                  Arguments

                  @@ -305,7 +305,7 @@

                  Arguments

                  @@ -320,7 +320,7 @@

                  Arguments

                  @@ -335,7 +335,7 @@

                  Arguments

                  @@ -350,7 +350,7 @@

                  Arguments

                  @@ -365,7 +365,7 @@

                  Arguments

                  @@ -380,7 +380,7 @@

                  Arguments

                  @@ -548,7 +548,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/compute_d2tgc_nurbs_1d_vector.html b/proc/compute_d2tgc_nurbs_1d_vector.html index 91e8ec5d9..29a7c3a45 100644 --- a/proc/compute_d2tgc_nurbs_1d_vector.html +++ b/proc/compute_d2tgc_nurbs_1d_vector.html @@ -275,7 +275,7 @@

                  Arguments

                  @@ -290,7 +290,7 @@

                  Arguments

                  @@ -305,7 +305,7 @@

                  Arguments

                  @@ -320,7 +320,7 @@

                  Arguments

                  @@ -335,7 +335,7 @@

                  Arguments

                  @@ -350,7 +350,7 @@

                  Arguments

                  @@ -365,7 +365,7 @@

                  Arguments

                  @@ -380,7 +380,7 @@

                  Arguments

                  @@ -395,7 +395,7 @@

                  Arguments

                  @@ -563,7 +563,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/compute_d2tgc_nurbs_2d_scalar.html b/proc/compute_d2tgc_nurbs_2d_scalar.html index ed82f6d68..2952ee2f4 100644 --- a/proc/compute_d2tgc_nurbs_2d_scalar.html +++ b/proc/compute_d2tgc_nurbs_2d_scalar.html @@ -275,7 +275,7 @@

                  Arguments

                  @@ -290,7 +290,7 @@

                  Arguments

                  @@ -305,7 +305,7 @@

                  Arguments

                  @@ -320,7 +320,7 @@

                  Arguments

                  @@ -335,7 +335,7 @@

                  Arguments

                  @@ -350,7 +350,7 @@

                  Arguments

                  @@ -365,7 +365,7 @@

                  Arguments

                  @@ -380,7 +380,7 @@

                  Arguments

                  @@ -395,7 +395,7 @@

                  Arguments

                  @@ -578,7 +578,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/compute_d2tgc_nurbs_2d_vector.html b/proc/compute_d2tgc_nurbs_2d_vector.html index 6430ab3e1..26e251b13 100644 --- a/proc/compute_d2tgc_nurbs_2d_vector.html +++ b/proc/compute_d2tgc_nurbs_2d_vector.html @@ -275,7 +275,7 @@

                  Arguments

                  @@ -290,7 +290,7 @@

                  Arguments

                  @@ -305,7 +305,7 @@

                  Arguments

                  @@ -320,7 +320,7 @@

                  Arguments

                  @@ -335,7 +335,7 @@

                  Arguments

                  @@ -350,7 +350,7 @@

                  Arguments

                  @@ -365,7 +365,7 @@

                  Arguments

                  @@ -380,7 +380,7 @@

                  Arguments

                  @@ -395,7 +395,7 @@

                  Arguments

                  @@ -410,7 +410,7 @@

                  Arguments

                  @@ -593,7 +593,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/compute_d2tgc_nurbs_3d_scalar.html b/proc/compute_d2tgc_nurbs_3d_scalar.html index 5126a2518..387ab43bb 100644 --- a/proc/compute_d2tgc_nurbs_3d_scalar.html +++ b/proc/compute_d2tgc_nurbs_3d_scalar.html @@ -593,7 +593,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/compute_d2tgc_nurbs_3d_vector.html b/proc/compute_d2tgc_nurbs_3d_vector.html index 9de590fb0..8b2f7959f 100644 --- a/proc/compute_d2tgc_nurbs_3d_vector.html +++ b/proc/compute_d2tgc_nurbs_3d_vector.html @@ -608,7 +608,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/compute_dtgc_bspline_1d_scalar.html b/proc/compute_dtgc_bspline_1d_scalar.html index 884c16c6c..00fac17c0 100644 --- a/proc/compute_dtgc_bspline_1d_scalar.html +++ b/proc/compute_dtgc_bspline_1d_scalar.html @@ -275,7 +275,7 @@

                  Arguments

                  @@ -290,7 +290,7 @@

                  Arguments

                  @@ -305,7 +305,7 @@

                  Arguments

                  @@ -320,7 +320,7 @@

                  Arguments

                  @@ -335,7 +335,7 @@

                  Arguments

                  @@ -350,7 +350,7 @@

                  Arguments

                  @@ -518,7 +518,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/compute_dtgc_bspline_1d_vector.html b/proc/compute_dtgc_bspline_1d_vector.html index eae8e8ec6..df975de8d 100644 --- a/proc/compute_dtgc_bspline_1d_vector.html +++ b/proc/compute_dtgc_bspline_1d_vector.html @@ -275,7 +275,7 @@

                  Arguments

                  @@ -290,7 +290,7 @@

                  Arguments

                  @@ -305,7 +305,7 @@

                  Arguments

                  @@ -320,7 +320,7 @@

                  Arguments

                  @@ -335,7 +335,7 @@

                  Arguments

                  @@ -350,7 +350,7 @@

                  Arguments

                  @@ -365,7 +365,7 @@

                  Arguments

                  @@ -533,7 +533,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/compute_dtgc_bspline_2d_scalar.html b/proc/compute_dtgc_bspline_2d_scalar.html index 89efc750a..ef8dc6b71 100644 --- a/proc/compute_dtgc_bspline_2d_scalar.html +++ b/proc/compute_dtgc_bspline_2d_scalar.html @@ -275,7 +275,7 @@

                  Arguments

                  @@ -290,7 +290,7 @@

                  Arguments

                  @@ -305,7 +305,7 @@

                  Arguments

                  @@ -320,7 +320,7 @@

                  Arguments

                  @@ -335,7 +335,7 @@

                  Arguments

                  @@ -350,7 +350,7 @@

                  Arguments

                  @@ -365,7 +365,7 @@

                  Arguments

                  @@ -548,7 +548,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/compute_dtgc_bspline_2d_vector.html b/proc/compute_dtgc_bspline_2d_vector.html index 881316230..81a20f7db 100644 --- a/proc/compute_dtgc_bspline_2d_vector.html +++ b/proc/compute_dtgc_bspline_2d_vector.html @@ -275,7 +275,7 @@

                  Arguments

                  @@ -290,7 +290,7 @@

                  Arguments

                  @@ -305,7 +305,7 @@

                  Arguments

                  @@ -320,7 +320,7 @@

                  Arguments

                  @@ -335,7 +335,7 @@

                  Arguments

                  @@ -350,7 +350,7 @@

                  Arguments

                  @@ -365,7 +365,7 @@

                  Arguments

                  @@ -380,7 +380,7 @@

                  Arguments

                  @@ -563,7 +563,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/compute_dtgc_bspline_3d_scalar.html b/proc/compute_dtgc_bspline_3d_scalar.html index 299875ae9..4320bb058 100644 --- a/proc/compute_dtgc_bspline_3d_scalar.html +++ b/proc/compute_dtgc_bspline_3d_scalar.html @@ -563,7 +563,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/compute_dtgc_bspline_3d_vector.html b/proc/compute_dtgc_bspline_3d_vector.html index 6ac52c394..58aa80d66 100644 --- a/proc/compute_dtgc_bspline_3d_vector.html +++ b/proc/compute_dtgc_bspline_3d_vector.html @@ -578,7 +578,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/compute_dtgc_nurbs_1d_scalar.html b/proc/compute_dtgc_nurbs_1d_scalar.html index f8cc964aa..a60796507 100644 --- a/proc/compute_dtgc_nurbs_1d_scalar.html +++ b/proc/compute_dtgc_nurbs_1d_scalar.html @@ -275,7 +275,7 @@

                  Arguments

                  @@ -290,7 +290,7 @@

                  Arguments

                  @@ -305,7 +305,7 @@

                  Arguments

                  @@ -320,7 +320,7 @@

                  Arguments

                  @@ -335,7 +335,7 @@

                  Arguments

                  @@ -350,7 +350,7 @@

                  Arguments

                  @@ -365,7 +365,7 @@

                  Arguments

                  @@ -533,7 +533,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/compute_dtgc_nurbs_1d_vector.html b/proc/compute_dtgc_nurbs_1d_vector.html index c49763dcb..9bc3046fe 100644 --- a/proc/compute_dtgc_nurbs_1d_vector.html +++ b/proc/compute_dtgc_nurbs_1d_vector.html @@ -275,7 +275,7 @@

                  Arguments

                  @@ -290,7 +290,7 @@

                  Arguments

                  @@ -305,7 +305,7 @@

                  Arguments

                  @@ -320,7 +320,7 @@

                  Arguments

                  @@ -335,7 +335,7 @@

                  Arguments

                  @@ -350,7 +350,7 @@

                  Arguments

                  @@ -365,7 +365,7 @@

                  Arguments

                  @@ -380,7 +380,7 @@

                  Arguments

                  @@ -548,7 +548,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/compute_dtgc_nurbs_2d_scalar.html b/proc/compute_dtgc_nurbs_2d_scalar.html index 754692b1e..93b54031b 100644 --- a/proc/compute_dtgc_nurbs_2d_scalar.html +++ b/proc/compute_dtgc_nurbs_2d_scalar.html @@ -275,7 +275,7 @@

                  Arguments

                  @@ -290,7 +290,7 @@

                  Arguments

                  @@ -305,7 +305,7 @@

                  Arguments

                  @@ -320,7 +320,7 @@

                  Arguments

                  @@ -335,7 +335,7 @@

                  Arguments

                  @@ -350,7 +350,7 @@

                  Arguments

                  @@ -365,7 +365,7 @@

                  Arguments

                  @@ -380,7 +380,7 @@

                  Arguments

                  @@ -563,7 +563,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/compute_dtgc_nurbs_2d_vector.html b/proc/compute_dtgc_nurbs_2d_vector.html index aab756475..d5090c41d 100644 --- a/proc/compute_dtgc_nurbs_2d_vector.html +++ b/proc/compute_dtgc_nurbs_2d_vector.html @@ -275,7 +275,7 @@

                  Arguments

                  @@ -290,7 +290,7 @@

                  Arguments

                  @@ -305,7 +305,7 @@

                  Arguments

                  @@ -320,7 +320,7 @@

                  Arguments

                  @@ -335,7 +335,7 @@

                  Arguments

                  @@ -350,7 +350,7 @@

                  Arguments

                  @@ -365,7 +365,7 @@

                  Arguments

                  @@ -380,7 +380,7 @@

                  Arguments

                  @@ -395,7 +395,7 @@

                  Arguments

                  @@ -578,7 +578,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/compute_dtgc_nurbs_3d_scalar.html b/proc/compute_dtgc_nurbs_3d_scalar.html index 98eace0d7..3153f934e 100644 --- a/proc/compute_dtgc_nurbs_3d_scalar.html +++ b/proc/compute_dtgc_nurbs_3d_scalar.html @@ -578,7 +578,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/compute_dtgc_nurbs_3d_vector.html b/proc/compute_dtgc_nurbs_3d_vector.html index 843c7c345..148a5fd82 100644 --- a/proc/compute_dtgc_nurbs_3d_vector.html +++ b/proc/compute_dtgc_nurbs_3d_vector.html @@ -593,7 +593,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/compute_knot_vector.html b/proc/compute_knot_vector.html index f5171c59d..e8169698c 100644 --- a/proc/compute_knot_vector.html +++ b/proc/compute_knot_vector.html @@ -171,7 +171,7 @@

                  Arguments

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

                  Arguments

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

                  @@ -349,53 +349,53 @@

                  Called by

                  proc~compute_knot_vector - -compute_knot_vector + +compute_knot_vector proc~set2 - -nurbs_volume%set2 + +nurbs_volume%set2 proc~set2->proc~compute_knot_vector - - + + proc~set2~2 - - -nurbs_curve%set2 + + +nurbs_surface%set2 proc~set2~2->proc~compute_knot_vector - - + + proc~set2~3 - - -nurbs_surface%set2 + + +nurbs_curve%set2 proc~set2~3->proc~compute_knot_vector - - + + @@ -409,38 +409,38 @@

                  Called by

                  none~set->proc~set2 - - + + none~set~2 - - -nurbs_curve%set + + +nurbs_surface%set none~set~2->proc~set2~2 - - + + none~set~3 - - -nurbs_surface%set + + +nurbs_curve%set none~set~3->proc~set2~3 - - + + @@ -460,32 +460,32 @@

                  Called by

                  proc~elevate_degree~2 - - -nurbs_curve%elevate_degree + + +nurbs_surface%elevate_degree proc~elevate_degree~2->none~set~2 - - + + proc~elevate_degree~3 - - -nurbs_surface%elevate_degree + + +nurbs_curve%elevate_degree - + proc~elevate_degree~3->none~set~3 - - + + @@ -505,32 +505,32 @@

                  Called by

                  proc~insert_knots~2 - - -nurbs_curve%insert_knots + + +nurbs_surface%insert_knots proc~insert_knots~2->none~set~2 - - + + proc~insert_knots~3 - - -nurbs_surface%insert_knots + + +nurbs_curve%insert_knots - + proc~insert_knots~3->none~set~3 - - + + @@ -550,32 +550,32 @@

                  Called by

                  proc~modify_wc~2 - - -nurbs_curve%modify_Wc + + +nurbs_surface%modify_Wc proc~modify_wc~2->none~set~2 - - + + proc~modify_wc~3 - - -nurbs_surface%modify_Wc + + +nurbs_curve%modify_Wc - + proc~modify_wc~3->none~set~3 - - + + @@ -595,32 +595,32 @@

                  Called by

                  proc~modify_xc~2 - - -nurbs_curve%modify_Xc + + +nurbs_surface%modify_Xc proc~modify_xc~2->none~set~2 - - + + proc~modify_xc~3 - - -nurbs_surface%modify_Xc + + +nurbs_curve%modify_Xc - + proc~modify_xc~3->none~set~3 - - + + @@ -640,32 +640,32 @@

                  Called by

                  proc~remove_knots~2 - - -nurbs_curve%remove_knots + + +nurbs_surface%remove_knots proc~remove_knots~2->none~set~2 - - + + proc~remove_knots~3 - - -nurbs_surface%remove_knots + + +nurbs_curve%remove_knots - + proc~remove_knots~3->none~set~3 - - + + @@ -686,61 +686,61 @@

                  Called by

                  proc~set_circle - -nurbs_curve%set_circle + +nurbs_curve%set_circle - - -proc~set_circle->none~set~2 - - + + +proc~set_circle->none~set~3 + + proc~set_c~2 - - -nurbs_curve%set_C + + +nurbs_surface%set_C - + proc~set_c~2->none~set~2 - - + + proc~set_c~3 - - -nurbs_surface%set_C + + +nurbs_curve%set_C - + proc~set_c~3->none~set~3 - - + + proc~set_half_circle - -nurbs_curve%set_half_circle + +nurbs_curve%set_half_circle - - -proc~set_half_circle->none~set~2 - - + + +proc~set_half_circle->none~set~3 + + @@ -761,16 +761,16 @@

                  Called by

                  proc~set_half_ring~2 - -nurbs_surface%set_half_ring + +nurbs_surface%set_half_ring - - -proc~set_half_ring~2->none~set~3 - - + + +proc~set_half_ring~2->none~set~2 + + @@ -806,97 +806,97 @@

                  Called by

                  proc~set_ring~2 - -nurbs_surface%set_ring + +nurbs_surface%set_ring - - -proc~set_ring~2->none~set~3 - - + + +proc~set_ring~2->none~set~2 + + proc~set_tetragon - -nurbs_surface%set_tetragon + +nurbs_surface%set_tetragon - - -proc~set_tetragon->none~set~3 - - + + +proc~set_tetragon->none~set~2 + + program~example1_curve - -example1_curve + +example1_curve - - -program~example1_curve->none~set~2 - - + + +program~example1_curve->none~set~3 + + - - -program~example1_curve->proc~elevate_degree~2 - - + + +program~example1_curve->proc~elevate_degree~3 + + - - -program~example1_curve->proc~insert_knots~2 - - + + +program~example1_curve->proc~insert_knots~3 + + - - -program~example1_curve->proc~remove_knots~2 - - + + +program~example1_curve->proc~remove_knots~3 + + program~example3_surface - -example3_surface + +example3_surface - - -program~example3_surface->none~set~3 - - + + +program~example3_surface->none~set~2 + + - - -program~example3_surface->proc~elevate_degree~3 - - + + +program~example3_surface->proc~elevate_degree~2 + + - - -program~example3_surface->proc~insert_knots~3 - - + + +program~example3_surface->proc~insert_knots~2 + + - - -program~example3_surface->proc~remove_knots~3 - - + + +program~example3_surface->proc~remove_knots~2 + + @@ -935,31 +935,31 @@

                  Called by

                  program~example_nurbs_curve - -example_nurbs_curve + +example_nurbs_curve - - -program~example_nurbs_curve->none~set~2 - - + + +program~example_nurbs_curve->none~set~3 + + program~example_nurbs_surface - -example_nurbs_surface + +example_nurbs_surface - - -program~example_nurbs_surface->none~set~3 - - + + +program~example_nurbs_surface->none~set~2 + + @@ -995,31 +995,31 @@

                  Called by

                  program~nearest_point_1d - -nearest_point_1d + +nearest_point_1d - - -program~nearest_point_1d->none~set~2 - - + + +program~nearest_point_1d->none~set~3 + + program~nearest_point_2d - -nearest_point_2d + +nearest_point_2d - - -program~nearest_point_2d->none~set~3 - - + + +program~nearest_point_2d->none~set~2 + + @@ -1040,109 +1040,109 @@

                  Called by

                  program~example_ppm1 - -example_ppm1 + +example_ppm1 program~example_ppm1->proc~set_ring~2 - - + + program~example_ppm1->proc~set_tetragon - - + + program~example_ppm2 - -example_ppm2 + +example_ppm2 program~example_ppm2->proc~set_half_ring~2 - - + + program~example_ppm2->proc~set_tetragon - - + + program~example_ppm3 - -example_ppm3 + +example_ppm3 - + -program~example_ppm3->proc~modify_xc~3 - - +program~example_ppm3->proc~modify_xc~2 + + program~example_ppm3->proc~set_tetragon - - + + program~nearest_point_2d_bench - -nearest_point_2d_bench + +nearest_point_2d_bench program~nearest_point_2d_bench->proc~set_tetragon - - + + program~shape_c_1d - -shape_C_1d + +shape_C_1d - - -program~shape_c_1d->proc~set_c~2 - - + + +program~shape_c_1d->proc~set_c~3 + + program~shape_c_2d - -shape_C_2d + +shape_C_2d - - -program~shape_c_2d->proc~set_c~3 - - + + +program~shape_c_2d->proc~set_c~2 + + @@ -1163,46 +1163,46 @@

                  Called by

                  program~shape_circle - -shape_circle + +shape_circle program~shape_circle->proc~set_circle - - + + program~shape_half_circle - -shape_half_circle + +shape_half_circle program~shape_half_circle->proc~set_half_circle - - + + program~shape_half_ring_2d - -shape_half_ring_2d + +shape_half_ring_2d program~shape_half_ring_2d->proc~set_half_ring~2 - - + + @@ -1238,16 +1238,16 @@

                  Called by

                  program~shape_ring_2d - -shape_ring_2d + +shape_ring_2d program~shape_ring_2d->proc~set_ring~2 - - + + @@ -1268,16 +1268,16 @@

                  Called by

                  program~shape_tetragon - -shape_tetragon + +shape_tetragon program~shape_tetragon->proc~set_tetragon - - + +
                  @@ -1397,7 +1397,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/compute_multiplicity1.html b/proc/compute_multiplicity1.html index ca1312f44..545eb17a7 100644 --- a/proc/compute_multiplicity1.html +++ b/proc/compute_multiplicity1.html @@ -156,7 +156,7 @@

                  Arguments

                  @@ -221,46 +221,46 @@

                  Called by

                  proc~cmp_nc - -nurbs_volume%cmp_nc + +nurbs_volume%cmp_nc proc~cmp_nc->interface~compute_multiplicity - - + + proc~cmp_nc~2 - - -nurbs_curve%cmp_nc + + +nurbs_surface%cmp_nc proc~cmp_nc~2->interface~compute_multiplicity - - + + proc~cmp_nc~3 - - -nurbs_surface%cmp_nc + + +nurbs_curve%cmp_nc proc~cmp_nc~3->interface~compute_multiplicity - - + + @@ -295,9 +295,9 @@

                  Called by

                  proc~get_continuity~2 - - -nurbs_curve%get_continuity + + +nurbs_surface%get_continuity @@ -310,9 +310,9 @@

                  Called by

                  proc~get_continuity~3 - - -nurbs_surface%get_continuity + + +nurbs_curve%get_continuity @@ -326,46 +326,46 @@

                  Called by

                  proc~get_multiplicity - -nurbs_volume%get_multiplicity + +nurbs_volume%get_multiplicity proc~get_multiplicity->interface~compute_multiplicity - - + + proc~get_multiplicity~2 - - -nurbs_curve%get_multiplicity + + +nurbs_surface%get_multiplicity proc~get_multiplicity~2->interface~compute_multiplicity - - + + proc~get_multiplicity~3 - - -nurbs_surface%get_multiplicity + + +nurbs_curve%get_multiplicity proc~get_multiplicity~3->interface~compute_multiplicity - - + + @@ -382,18 +382,18 @@

                  Called by

                  - + -proc~get_nc~3 - +proc~get_nc~2 + nurbs_surface%get_nc - + -proc~get_nc~3->interface~compute_multiplicity +proc~get_nc~2->interface~compute_multiplicity @@ -409,83 +409,83 @@

                  Called by

                  proc~insert_knots->interface~compute_multiplicity - - + + none~set - -nurbs_volume%set + +nurbs_volume%set proc~insert_knots->none~set - - + + proc~insert_knots~2 - - -nurbs_curve%insert_knots + + +nurbs_surface%insert_knots proc~insert_knots~2->interface~compute_multiplicity - - + + - + none~set~2 - - -nurbs_curve%set + + +nurbs_surface%set - + proc~insert_knots~2->none~set~2 - - + + proc~insert_knots~3 - - -nurbs_surface%insert_knots + + +nurbs_curve%insert_knots proc~insert_knots~3->interface~compute_multiplicity - - + + - + none~set~3 - - -nurbs_surface%set + + +nurbs_curve%set - + proc~insert_knots~3->none~set~3 - - + + @@ -505,340 +505,340 @@

                  Called by

                  proc~remove_knots->none~set - - + + proc~remove_knots~2 - - -nurbs_curve%remove_knots + + +nurbs_surface%remove_knots proc~remove_knots~2->interface~compute_multiplicity - - + + - + proc~remove_knots~2->none~set~2 - - + + proc~remove_knots~3 - - -nurbs_surface%remove_knots + + +nurbs_curve%remove_knots proc~remove_knots~3->interface~compute_multiplicity - - + + - + proc~remove_knots~3->none~set~3 - - + + proc~cmp_degree - -nurbs_volume%cmp_degree + +nurbs_volume%cmp_degree proc~cmp_degree->proc~get_multiplicity - - + + proc~cmp_degree~2 - - -nurbs_curve%cmp_degree + + +nurbs_surface%cmp_degree proc~cmp_degree~2->proc~get_multiplicity~2 - - + + proc~cmp_degree~3 - - -nurbs_surface%cmp_degree + + +nurbs_curve%cmp_degree proc~cmp_degree~3->proc~get_multiplicity~3 - - + + proc~cmp_elem - -nurbs_volume%cmp_elem + +nurbs_volume%cmp_elem proc~cmp_elem->proc~get_multiplicity - - + + proc~cmp_elem~2 - - -nurbs_curve%cmp_elem + + +nurbs_surface%cmp_elem proc~cmp_elem~2->proc~get_multiplicity~2 - - + + proc~cmp_elem~3 - - -nurbs_surface%cmp_elem + + +nurbs_curve%cmp_elem proc~cmp_elem~3->proc~get_multiplicity~3 - - + + proc~elevate_degree - -nurbs_volume%elevate_degree + +nurbs_volume%elevate_degree proc~elevate_degree->proc~elevate_degree_a_5_9 - - + + proc~elevate_degree->none~set - - + + proc~elevate_degree~2 - - -nurbs_curve%elevate_degree + + +nurbs_surface%elevate_degree proc~elevate_degree~2->proc~elevate_degree_a_5_9 - - + + - + proc~elevate_degree~2->none~set~2 - - + + proc~elevate_degree~3 - - -nurbs_surface%elevate_degree + + +nurbs_curve%elevate_degree proc~elevate_degree~3->proc~elevate_degree_a_5_9 - - + + - + proc~elevate_degree~3->none~set~3 - - + + proc~set1 - -nurbs_volume%set1 + +nurbs_volume%set1 proc~set1->proc~cmp_nc - - + + proc~set1->proc~cmp_degree - - + + - + -proc~set1~3 - +proc~set1~2 + nurbs_surface%set1 - + -proc~set1~3->proc~cmp_nc~3 - - +proc~set1~2->proc~cmp_nc~2 + + - - -proc~set1~3->proc~cmp_degree~3 - - + + +proc~set1~2->proc~cmp_degree~2 + + proc~set2 - -nurbs_volume%set2 + +nurbs_volume%set2 proc~set2->proc~cmp_nc - - + + - + -proc~set2~3 - +proc~set2~2 + nurbs_surface%set2 - + -proc~set2~3->proc~cmp_nc~3 - - +proc~set2~2->proc~cmp_nc~2 + + program~example1_curve - -example1_curve + +example1_curve - - -program~example1_curve->proc~insert_knots~2 - - + + +program~example1_curve->proc~insert_knots~3 + + - - -program~example1_curve->proc~remove_knots~2 - - + + +program~example1_curve->proc~remove_knots~3 + + - - -program~example1_curve->proc~elevate_degree~2 - - + + +program~example1_curve->proc~elevate_degree~3 + + - + -program~example1_curve->none~set~2 - - +program~example1_curve->none~set~3 + + program~example3_surface - -example3_surface + +example3_surface - - -program~example3_surface->proc~insert_knots~3 - - + + +program~example3_surface->proc~insert_knots~2 + + - - -program~example3_surface->proc~remove_knots~3 - - + + +program~example3_surface->proc~remove_knots~2 + + - - -program~example3_surface->proc~elevate_degree~3 - - + + +program~example3_surface->proc~elevate_degree~2 + + - + -program~example3_surface->none~set~3 - +program~example3_surface->none~set~2 + @@ -865,156 +865,156 @@

                  Called by

                  program~example3_volume->proc~cmp_elem - - + + program~example3_volume->proc~elevate_degree - - + + program~example3_volume->none~set - - + + none~set->proc~set1 - - + + none~set->proc~set2 - - + + proc~set3 - -nurbs_volume%set3 + +nurbs_volume%set3 none~set->proc~set3 - - + + - + -none~set~3->proc~set1~3 +none~set~2->proc~set1~2 - + -none~set~3->proc~set2~3 +none~set~2->proc~set2~2 - - -proc~set3~3 - + + +proc~set3~2 + nurbs_surface%set3 - - -none~set~3->proc~set3~3 - - + + +none~set~2->proc~set3~2 + + - + -proc~set1~2 - - -nurbs_curve%set1 +proc~set1~3 + + +nurbs_curve%set1 - - -proc~set1~2->proc~cmp_degree~2 - - + + +proc~set1~3->proc~cmp_degree~3 + + proc~set3->proc~cmp_degree - - - - - -proc~set3~2 - - -nurbs_curve%set3 - - + + proc~set3~2->proc~cmp_degree~2 - - + + + + + +proc~set3~3 + + +nurbs_curve%set3 + + proc~set3~3->proc~cmp_degree~3 - - + + - + -none~set~2->proc~set1~2 - - +none~set~3->proc~set1~3 + + - - -none~set~2->proc~set3~2 - - + + +none~set~3->proc~set3~3 + + proc~modify_wc - -nurbs_volume%modify_Wc + +nurbs_volume%modify_Wc proc~modify_wc->none~set - - + + - + -proc~modify_wc~3 - +proc~modify_wc~2 + nurbs_surface%modify_Wc - + -proc~modify_wc~3->none~set~3 +proc~modify_wc~2->none~set~2 @@ -1022,29 +1022,29 @@

                  Called by

                  proc~modify_xc - -nurbs_volume%modify_Xc + +nurbs_volume%modify_Xc proc~modify_xc->none~set - - + + - + -proc~modify_xc~3 - +proc~modify_xc~2 + nurbs_surface%modify_Xc - + -proc~modify_xc~3->none~set~3 +proc~modify_xc~2->none~set~2 @@ -1060,23 +1060,23 @@

                  Called by

                  proc~set_c->none~set - - + + - + -proc~set_c~3 - - -nurbs_surface%set_C +proc~set_c~2 + + +nurbs_surface%set_C - + -proc~set_c~3->none~set~3 - - +proc~set_c~2->none~set~2 + + @@ -1090,23 +1090,23 @@

                  Called by

                  proc~set_half_ring->none~set - - + + proc~set_half_ring~2 - -nurbs_surface%set_half_ring + +nurbs_surface%set_half_ring - + -proc~set_half_ring~2->none~set~3 - - +proc~set_half_ring~2->none~set~2 + + @@ -1120,326 +1120,326 @@

                  Called by

                  proc~set_hexahedron->none~set - - + + proc~set_ring - -nurbs_volume%set_ring + +nurbs_volume%set_ring proc~set_ring->none~set - - + + proc~set_ring~2 - -nurbs_surface%set_ring + +nurbs_surface%set_ring - + -proc~set_ring~2->none~set~3 - - +proc~set_ring~2->none~set~2 + + proc~set_tetragon - -nurbs_surface%set_tetragon + +nurbs_surface%set_tetragon - + -proc~set_tetragon->none~set~3 - - +proc~set_tetragon->none~set~2 + + program~example_nurbs_surface - -example_nurbs_surface + +example_nurbs_surface - + -program~example_nurbs_surface->none~set~3 - - +program~example_nurbs_surface->none~set~2 + + program~example_nurbs_volume - -example_nurbs_volume + +example_nurbs_volume program~example_nurbs_volume->none~set - - + + program~example_put_to_nurbs - -example_put_to_nurbs + +example_put_to_nurbs program~example_put_to_nurbs->none~set - - + + program~nearest_point_2d - -nearest_point_2d + +nearest_point_2d - + -program~nearest_point_2d->none~set~3 - - +program~nearest_point_2d->none~set~2 + + program~nearest_point_3d - -nearest_point_3d + +nearest_point_3d program~nearest_point_3d->none~set - - + + - + -proc~modify_wc~2 - - -nurbs_curve%modify_Wc +proc~modify_wc~3 + + +nurbs_curve%modify_Wc - + -proc~modify_wc~2->none~set~2 - - +proc~modify_wc~3->none~set~3 + + - + -proc~modify_xc~2 - - -nurbs_curve%modify_Xc +proc~modify_xc~3 + + +nurbs_curve%modify_Xc - + -proc~modify_xc~2->none~set~2 - - +proc~modify_xc~3->none~set~3 + + proc~set_circle - -nurbs_curve%set_circle + +nurbs_curve%set_circle - + -proc~set_circle->none~set~2 - - +proc~set_circle->none~set~3 + + - + -proc~set_c~2 - - -nurbs_curve%set_C +proc~set_c~3 + + +nurbs_curve%set_C - + -proc~set_c~2->none~set~2 - - +proc~set_c~3->none~set~3 + + proc~set_half_circle - -nurbs_curve%set_half_circle + +nurbs_curve%set_half_circle - + -proc~set_half_circle->none~set~2 - - +proc~set_half_circle->none~set~3 + + program~example_nurbs_curve - -example_nurbs_curve + +example_nurbs_curve - + -program~example_nurbs_curve->none~set~2 - - +program~example_nurbs_curve->none~set~3 + + program~example_ppm1 - -example_ppm1 + +example_ppm1 program~example_ppm1->proc~set_ring~2 - - + + program~example_ppm1->proc~set_tetragon - - + + program~example_ppm2 - -example_ppm2 + +example_ppm2 program~example_ppm2->proc~set_half_ring~2 - - + + program~example_ppm2->proc~set_tetragon - - + + program~example_ppm3 - -example_ppm3 + +example_ppm3 - + -program~example_ppm3->proc~modify_xc~3 - - +program~example_ppm3->proc~modify_xc~2 + + program~example_ppm3->proc~set_tetragon - - + + program~nearest_point_1d - -nearest_point_1d + +nearest_point_1d - + -program~nearest_point_1d->none~set~2 - - +program~nearest_point_1d->none~set~3 + + program~nearest_point_2d_bench - -nearest_point_2d_bench + +nearest_point_2d_bench program~nearest_point_2d_bench->proc~set_tetragon - - + + program~shape_c_2d - -shape_C_2d + +shape_C_2d - + -program~shape_c_2d->proc~set_c~3 - - +program~shape_c_2d->proc~set_c~2 + + @@ -1460,16 +1460,16 @@

                  Called by

                  program~shape_half_ring_2d - -shape_half_ring_2d + +shape_half_ring_2d program~shape_half_ring_2d->proc~set_half_ring~2 - - + + @@ -1505,91 +1505,91 @@

                  Called by

                  program~shape_ring_2d - -shape_ring_2d + +shape_ring_2d program~shape_ring_2d->proc~set_ring~2 - - + + program~shape_ring_3d - -shape_ring_3d + +shape_ring_3d program~shape_ring_3d->proc~set_ring - - + + program~shape_tetragon - -shape_tetragon + +shape_tetragon program~shape_tetragon->proc~set_tetragon - - + + program~shape_c_1d - -shape_C_1d + +shape_C_1d - + -program~shape_c_1d->proc~set_c~2 - - +program~shape_c_1d->proc~set_c~3 + + program~shape_circle - -shape_circle + +shape_circle program~shape_circle->proc~set_circle - - + + program~shape_half_circle - -shape_half_circle + +shape_half_circle program~shape_half_circle->proc~set_half_circle - - + +
                  @@ -1709,7 +1709,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/compute_multiplicity2.html b/proc/compute_multiplicity2.html index 9f91791a5..5644f4c24 100644 --- a/proc/compute_multiplicity2.html +++ b/proc/compute_multiplicity2.html @@ -156,7 +156,7 @@

                  Arguments

                  @@ -171,7 +171,7 @@

                  Arguments

                  @@ -236,46 +236,46 @@

                  Called by

                  proc~cmp_nc - -nurbs_volume%cmp_nc + +nurbs_volume%cmp_nc proc~cmp_nc->interface~compute_multiplicity - - + + proc~cmp_nc~2 - - -nurbs_curve%cmp_nc + + +nurbs_surface%cmp_nc proc~cmp_nc~2->interface~compute_multiplicity - - + + proc~cmp_nc~3 - - -nurbs_surface%cmp_nc + + +nurbs_curve%cmp_nc proc~cmp_nc~3->interface~compute_multiplicity - - + + @@ -310,9 +310,9 @@

                  Called by

                  proc~get_continuity~2 - - -nurbs_curve%get_continuity + + +nurbs_surface%get_continuity @@ -325,9 +325,9 @@

                  Called by

                  proc~get_continuity~3 - - -nurbs_surface%get_continuity + + +nurbs_curve%get_continuity @@ -341,46 +341,46 @@

                  Called by

                  proc~get_multiplicity - -nurbs_volume%get_multiplicity + +nurbs_volume%get_multiplicity proc~get_multiplicity->interface~compute_multiplicity - - + + proc~get_multiplicity~2 - - -nurbs_curve%get_multiplicity + + +nurbs_surface%get_multiplicity proc~get_multiplicity~2->interface~compute_multiplicity - - + + proc~get_multiplicity~3 - - -nurbs_surface%get_multiplicity + + +nurbs_curve%get_multiplicity proc~get_multiplicity~3->interface~compute_multiplicity - - + + @@ -397,18 +397,18 @@

                  Called by

                  - + -proc~get_nc~3 - +proc~get_nc~2 + nurbs_surface%get_nc - + -proc~get_nc~3->interface~compute_multiplicity +proc~get_nc~2->interface~compute_multiplicity @@ -424,83 +424,83 @@

                  Called by

                  proc~insert_knots->interface~compute_multiplicity - - + + none~set - -nurbs_volume%set + +nurbs_volume%set proc~insert_knots->none~set - - + + proc~insert_knots~2 - - -nurbs_curve%insert_knots + + +nurbs_surface%insert_knots proc~insert_knots~2->interface~compute_multiplicity - - + + - + none~set~2 - - -nurbs_curve%set + + +nurbs_surface%set - + proc~insert_knots~2->none~set~2 - - + + proc~insert_knots~3 - - -nurbs_surface%insert_knots + + +nurbs_curve%insert_knots proc~insert_knots~3->interface~compute_multiplicity - - + + - + none~set~3 - - -nurbs_surface%set + + +nurbs_curve%set - + proc~insert_knots~3->none~set~3 - - + + @@ -520,340 +520,340 @@

                  Called by

                  proc~remove_knots->none~set - - + + proc~remove_knots~2 - - -nurbs_curve%remove_knots + + +nurbs_surface%remove_knots proc~remove_knots~2->interface~compute_multiplicity - - + + - + proc~remove_knots~2->none~set~2 - - + + proc~remove_knots~3 - - -nurbs_surface%remove_knots + + +nurbs_curve%remove_knots proc~remove_knots~3->interface~compute_multiplicity - - + + - + proc~remove_knots~3->none~set~3 - - + + proc~cmp_degree - -nurbs_volume%cmp_degree + +nurbs_volume%cmp_degree proc~cmp_degree->proc~get_multiplicity - - + + proc~cmp_degree~2 - - -nurbs_curve%cmp_degree + + +nurbs_surface%cmp_degree proc~cmp_degree~2->proc~get_multiplicity~2 - - + + proc~cmp_degree~3 - - -nurbs_surface%cmp_degree + + +nurbs_curve%cmp_degree proc~cmp_degree~3->proc~get_multiplicity~3 - - + + proc~cmp_elem - -nurbs_volume%cmp_elem + +nurbs_volume%cmp_elem proc~cmp_elem->proc~get_multiplicity - - + + proc~cmp_elem~2 - - -nurbs_curve%cmp_elem + + +nurbs_surface%cmp_elem proc~cmp_elem~2->proc~get_multiplicity~2 - - + + proc~cmp_elem~3 - - -nurbs_surface%cmp_elem + + +nurbs_curve%cmp_elem proc~cmp_elem~3->proc~get_multiplicity~3 - - + + proc~elevate_degree - -nurbs_volume%elevate_degree + +nurbs_volume%elevate_degree proc~elevate_degree->proc~elevate_degree_a_5_9 - - + + proc~elevate_degree->none~set - - + + proc~elevate_degree~2 - - -nurbs_curve%elevate_degree + + +nurbs_surface%elevate_degree proc~elevate_degree~2->proc~elevate_degree_a_5_9 - - + + - + proc~elevate_degree~2->none~set~2 - - + + proc~elevate_degree~3 - - -nurbs_surface%elevate_degree + + +nurbs_curve%elevate_degree proc~elevate_degree~3->proc~elevate_degree_a_5_9 - - + + - + proc~elevate_degree~3->none~set~3 - - + + proc~set1 - -nurbs_volume%set1 + +nurbs_volume%set1 proc~set1->proc~cmp_nc - - + + proc~set1->proc~cmp_degree - - + + - + -proc~set1~3 - +proc~set1~2 + nurbs_surface%set1 - + -proc~set1~3->proc~cmp_nc~3 - - +proc~set1~2->proc~cmp_nc~2 + + - - -proc~set1~3->proc~cmp_degree~3 - - + + +proc~set1~2->proc~cmp_degree~2 + + proc~set2 - -nurbs_volume%set2 + +nurbs_volume%set2 proc~set2->proc~cmp_nc - - + + - + -proc~set2~3 - +proc~set2~2 + nurbs_surface%set2 - + -proc~set2~3->proc~cmp_nc~3 - - +proc~set2~2->proc~cmp_nc~2 + + program~example1_curve - -example1_curve + +example1_curve - - -program~example1_curve->proc~insert_knots~2 - - + + +program~example1_curve->proc~insert_knots~3 + + - - -program~example1_curve->proc~remove_knots~2 - - + + +program~example1_curve->proc~remove_knots~3 + + - - -program~example1_curve->proc~elevate_degree~2 - - + + +program~example1_curve->proc~elevate_degree~3 + + - + -program~example1_curve->none~set~2 - - +program~example1_curve->none~set~3 + + program~example3_surface - -example3_surface + +example3_surface - - -program~example3_surface->proc~insert_knots~3 - - + + +program~example3_surface->proc~insert_knots~2 + + - - -program~example3_surface->proc~remove_knots~3 - - + + +program~example3_surface->proc~remove_knots~2 + + - - -program~example3_surface->proc~elevate_degree~3 - - + + +program~example3_surface->proc~elevate_degree~2 + + - + -program~example3_surface->none~set~3 - +program~example3_surface->none~set~2 + @@ -880,156 +880,156 @@

                  Called by

                  program~example3_volume->proc~cmp_elem - - + + program~example3_volume->proc~elevate_degree - - + + program~example3_volume->none~set - - + + none~set->proc~set1 - - + + none~set->proc~set2 - - + + proc~set3 - -nurbs_volume%set3 + +nurbs_volume%set3 none~set->proc~set3 - - + + - + -none~set~3->proc~set1~3 +none~set~2->proc~set1~2 - + -none~set~3->proc~set2~3 +none~set~2->proc~set2~2 - - -proc~set3~3 - + + +proc~set3~2 + nurbs_surface%set3 - - -none~set~3->proc~set3~3 - - + + +none~set~2->proc~set3~2 + + - + -proc~set1~2 - - -nurbs_curve%set1 +proc~set1~3 + + +nurbs_curve%set1 - - -proc~set1~2->proc~cmp_degree~2 - - + + +proc~set1~3->proc~cmp_degree~3 + + proc~set3->proc~cmp_degree - - - - - -proc~set3~2 - - -nurbs_curve%set3 - - + + proc~set3~2->proc~cmp_degree~2 - - + + + + + +proc~set3~3 + + +nurbs_curve%set3 + + proc~set3~3->proc~cmp_degree~3 - - + + - + -none~set~2->proc~set1~2 - - +none~set~3->proc~set1~3 + + - - -none~set~2->proc~set3~2 - - + + +none~set~3->proc~set3~3 + + proc~modify_wc - -nurbs_volume%modify_Wc + +nurbs_volume%modify_Wc proc~modify_wc->none~set - - + + - + -proc~modify_wc~3 - +proc~modify_wc~2 + nurbs_surface%modify_Wc - + -proc~modify_wc~3->none~set~3 +proc~modify_wc~2->none~set~2 @@ -1037,29 +1037,29 @@

                  Called by

                  proc~modify_xc - -nurbs_volume%modify_Xc + +nurbs_volume%modify_Xc proc~modify_xc->none~set - - + + - + -proc~modify_xc~3 - +proc~modify_xc~2 + nurbs_surface%modify_Xc - + -proc~modify_xc~3->none~set~3 +proc~modify_xc~2->none~set~2 @@ -1075,23 +1075,23 @@

                  Called by

                  proc~set_c->none~set - - + + - + -proc~set_c~3 - - -nurbs_surface%set_C +proc~set_c~2 + + +nurbs_surface%set_C - + -proc~set_c~3->none~set~3 - - +proc~set_c~2->none~set~2 + + @@ -1105,23 +1105,23 @@

                  Called by

                  proc~set_half_ring->none~set - - + + proc~set_half_ring~2 - -nurbs_surface%set_half_ring + +nurbs_surface%set_half_ring - + -proc~set_half_ring~2->none~set~3 - - +proc~set_half_ring~2->none~set~2 + + @@ -1135,326 +1135,326 @@

                  Called by

                  proc~set_hexahedron->none~set - - + + proc~set_ring - -nurbs_volume%set_ring + +nurbs_volume%set_ring proc~set_ring->none~set - - + + proc~set_ring~2 - -nurbs_surface%set_ring + +nurbs_surface%set_ring - + -proc~set_ring~2->none~set~3 - - +proc~set_ring~2->none~set~2 + + proc~set_tetragon - -nurbs_surface%set_tetragon + +nurbs_surface%set_tetragon - + -proc~set_tetragon->none~set~3 - - +proc~set_tetragon->none~set~2 + + program~example_nurbs_surface - -example_nurbs_surface + +example_nurbs_surface - + -program~example_nurbs_surface->none~set~3 - - +program~example_nurbs_surface->none~set~2 + + program~example_nurbs_volume - -example_nurbs_volume + +example_nurbs_volume program~example_nurbs_volume->none~set - - + + program~example_put_to_nurbs - -example_put_to_nurbs + +example_put_to_nurbs program~example_put_to_nurbs->none~set - - + + program~nearest_point_2d - -nearest_point_2d + +nearest_point_2d - + -program~nearest_point_2d->none~set~3 - - +program~nearest_point_2d->none~set~2 + + program~nearest_point_3d - -nearest_point_3d + +nearest_point_3d program~nearest_point_3d->none~set - - + + - + -proc~modify_wc~2 - - -nurbs_curve%modify_Wc +proc~modify_wc~3 + + +nurbs_curve%modify_Wc - + -proc~modify_wc~2->none~set~2 - - +proc~modify_wc~3->none~set~3 + + - + -proc~modify_xc~2 - - -nurbs_curve%modify_Xc +proc~modify_xc~3 + + +nurbs_curve%modify_Xc - + -proc~modify_xc~2->none~set~2 - - +proc~modify_xc~3->none~set~3 + + proc~set_circle - -nurbs_curve%set_circle + +nurbs_curve%set_circle - + -proc~set_circle->none~set~2 - - +proc~set_circle->none~set~3 + + - + -proc~set_c~2 - - -nurbs_curve%set_C +proc~set_c~3 + + +nurbs_curve%set_C - + -proc~set_c~2->none~set~2 - - +proc~set_c~3->none~set~3 + + proc~set_half_circle - -nurbs_curve%set_half_circle + +nurbs_curve%set_half_circle - + -proc~set_half_circle->none~set~2 - - +proc~set_half_circle->none~set~3 + + program~example_nurbs_curve - -example_nurbs_curve + +example_nurbs_curve - + -program~example_nurbs_curve->none~set~2 - - +program~example_nurbs_curve->none~set~3 + + program~example_ppm1 - -example_ppm1 + +example_ppm1 program~example_ppm1->proc~set_ring~2 - - + + program~example_ppm1->proc~set_tetragon - - + + program~example_ppm2 - -example_ppm2 + +example_ppm2 program~example_ppm2->proc~set_half_ring~2 - - + + program~example_ppm2->proc~set_tetragon - - + + program~example_ppm3 - -example_ppm3 + +example_ppm3 - + -program~example_ppm3->proc~modify_xc~3 - - +program~example_ppm3->proc~modify_xc~2 + + program~example_ppm3->proc~set_tetragon - - + + program~nearest_point_1d - -nearest_point_1d + +nearest_point_1d - + -program~nearest_point_1d->none~set~2 - - +program~nearest_point_1d->none~set~3 + + program~nearest_point_2d_bench - -nearest_point_2d_bench + +nearest_point_2d_bench program~nearest_point_2d_bench->proc~set_tetragon - - + + program~shape_c_2d - -shape_C_2d + +shape_C_2d - + -program~shape_c_2d->proc~set_c~3 - - +program~shape_c_2d->proc~set_c~2 + + @@ -1475,16 +1475,16 @@

                  Called by

                  program~shape_half_ring_2d - -shape_half_ring_2d + +shape_half_ring_2d program~shape_half_ring_2d->proc~set_half_ring~2 - - + + @@ -1520,91 +1520,91 @@

                  Called by

                  program~shape_ring_2d - -shape_ring_2d + +shape_ring_2d program~shape_ring_2d->proc~set_ring~2 - - + + program~shape_ring_3d - -shape_ring_3d + +shape_ring_3d program~shape_ring_3d->proc~set_ring - - + + program~shape_tetragon - -shape_tetragon + +shape_tetragon program~shape_tetragon->proc~set_tetragon - - + + program~shape_c_1d - -shape_C_1d + +shape_C_1d - + -program~shape_c_1d->proc~set_c~2 - - +program~shape_c_1d->proc~set_c~3 + + program~shape_circle - -shape_circle + +shape_circle program~shape_circle->proc~set_circle - - + + program~shape_half_circle - -shape_half_circle + +shape_half_circle program~shape_half_circle->proc~set_half_circle - - + +
                  @@ -1724,7 +1724,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/compute_tgc_bspline_1d_scalar.html b/proc/compute_tgc_bspline_1d_scalar.html index 245f3346c..f3cf46974 100644 --- a/proc/compute_tgc_bspline_1d_scalar.html +++ b/proc/compute_tgc_bspline_1d_scalar.html @@ -275,7 +275,7 @@

                  Arguments

                  @@ -290,7 +290,7 @@

                  Arguments

                  @@ -305,7 +305,7 @@

                  Arguments

                  @@ -320,7 +320,7 @@

                  Arguments

                  @@ -338,7 +338,7 @@

                  Arguments

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

                  @@ -495,7 +495,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/compute_tgc_bspline_1d_vector.html b/proc/compute_tgc_bspline_1d_vector.html index 759096780..883e8377f 100644 --- a/proc/compute_tgc_bspline_1d_vector.html +++ b/proc/compute_tgc_bspline_1d_vector.html @@ -275,7 +275,7 @@

                  Arguments

                  @@ -290,7 +290,7 @@

                  Arguments

                  @@ -305,7 +305,7 @@

                  Arguments

                  @@ -320,7 +320,7 @@

                  Arguments

                  @@ -335,7 +335,7 @@

                  Arguments

                  @@ -353,7 +353,7 @@

                  Arguments

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

                  @@ -510,7 +510,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/compute_tgc_bspline_2d_scalar.html b/proc/compute_tgc_bspline_2d_scalar.html index a774e8a20..8d672003b 100644 --- a/proc/compute_tgc_bspline_2d_scalar.html +++ b/proc/compute_tgc_bspline_2d_scalar.html @@ -275,7 +275,7 @@

                  Arguments

                  @@ -290,7 +290,7 @@

                  Arguments

                  @@ -305,7 +305,7 @@

                  Arguments

                  @@ -320,7 +320,7 @@

                  Arguments

                  @@ -335,7 +335,7 @@

                  Arguments

                  @@ -353,7 +353,7 @@

                  Arguments

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

                  @@ -525,7 +525,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/compute_tgc_bspline_2d_vector.html b/proc/compute_tgc_bspline_2d_vector.html index 02a6e127d..2b4af8d4b 100644 --- a/proc/compute_tgc_bspline_2d_vector.html +++ b/proc/compute_tgc_bspline_2d_vector.html @@ -275,7 +275,7 @@

                  Arguments

                  @@ -290,7 +290,7 @@

                  Arguments

                  @@ -305,7 +305,7 @@

                  Arguments

                  @@ -320,7 +320,7 @@

                  Arguments

                  @@ -335,7 +335,7 @@

                  Arguments

                  @@ -350,7 +350,7 @@

                  Arguments

                  @@ -368,7 +368,7 @@

                  Arguments

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

                  @@ -540,7 +540,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/compute_tgc_bspline_3d_scalar.html b/proc/compute_tgc_bspline_3d_scalar.html index e06b6e0b9..73e2ad72e 100644 --- a/proc/compute_tgc_bspline_3d_scalar.html +++ b/proc/compute_tgc_bspline_3d_scalar.html @@ -540,7 +540,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/compute_tgc_bspline_3d_vector.html b/proc/compute_tgc_bspline_3d_vector.html index bc1c3edf5..702e6a957 100644 --- a/proc/compute_tgc_bspline_3d_vector.html +++ b/proc/compute_tgc_bspline_3d_vector.html @@ -555,7 +555,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/compute_tgc_nurbs_1d_scalar.html b/proc/compute_tgc_nurbs_1d_scalar.html index 0d4482701..99e3e559c 100644 --- a/proc/compute_tgc_nurbs_1d_scalar.html +++ b/proc/compute_tgc_nurbs_1d_scalar.html @@ -275,7 +275,7 @@

                  Arguments

                  @@ -290,7 +290,7 @@

                  Arguments

                  @@ -305,7 +305,7 @@

                  Arguments

                  @@ -320,7 +320,7 @@

                  Arguments

                  @@ -335,7 +335,7 @@

                  Arguments

                  @@ -353,7 +353,7 @@

                  Arguments

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

                  @@ -510,7 +510,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/compute_tgc_nurbs_1d_vector.html b/proc/compute_tgc_nurbs_1d_vector.html index d9acebd3a..fe554ca08 100644 --- a/proc/compute_tgc_nurbs_1d_vector.html +++ b/proc/compute_tgc_nurbs_1d_vector.html @@ -275,7 +275,7 @@

                  Arguments

                  @@ -290,7 +290,7 @@

                  Arguments

                  @@ -305,7 +305,7 @@

                  Arguments

                  @@ -320,7 +320,7 @@

                  Arguments

                  @@ -335,7 +335,7 @@

                  Arguments

                  @@ -350,7 +350,7 @@

                  Arguments

                  @@ -368,7 +368,7 @@

                  Arguments

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

                  @@ -525,7 +525,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/compute_tgc_nurbs_2d_scalar.html b/proc/compute_tgc_nurbs_2d_scalar.html index 8f76aa099..05d573852 100644 --- a/proc/compute_tgc_nurbs_2d_scalar.html +++ b/proc/compute_tgc_nurbs_2d_scalar.html @@ -275,7 +275,7 @@

                  Arguments

                  @@ -290,7 +290,7 @@

                  Arguments

                  @@ -305,7 +305,7 @@

                  Arguments

                  @@ -320,7 +320,7 @@

                  Arguments

                  @@ -335,7 +335,7 @@

                  Arguments

                  @@ -350,7 +350,7 @@

                  Arguments

                  @@ -368,7 +368,7 @@

                  Arguments

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

                  @@ -540,7 +540,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/compute_tgc_nurbs_2d_vector.html b/proc/compute_tgc_nurbs_2d_vector.html index 4b0628de4..0d8e1fe64 100644 --- a/proc/compute_tgc_nurbs_2d_vector.html +++ b/proc/compute_tgc_nurbs_2d_vector.html @@ -275,7 +275,7 @@

                  Arguments

                  @@ -290,7 +290,7 @@

                  Arguments

                  @@ -305,7 +305,7 @@

                  Arguments

                  @@ -320,7 +320,7 @@

                  Arguments

                  @@ -335,7 +335,7 @@

                  Arguments

                  @@ -350,7 +350,7 @@

                  Arguments

                  @@ -365,7 +365,7 @@

                  Arguments

                  @@ -383,7 +383,7 @@

                  Arguments

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

                  @@ -555,7 +555,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/compute_tgc_nurbs_3d_scalar.html b/proc/compute_tgc_nurbs_3d_scalar.html index 34e7a97be..89f996ef6 100644 --- a/proc/compute_tgc_nurbs_3d_scalar.html +++ b/proc/compute_tgc_nurbs_3d_scalar.html @@ -555,7 +555,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/compute_tgc_nurbs_3d_vector.html b/proc/compute_tgc_nurbs_3d_vector.html index b3f557b8d..b9b859c52 100644 --- a/proc/compute_tgc_nurbs_3d_vector.html +++ b/proc/compute_tgc_nurbs_3d_vector.html @@ -570,7 +570,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/compute_xg_bspline_1d.html b/proc/compute_xg_bspline_1d.html index 3a8923dd9..57ca90e89 100644 --- a/proc/compute_xg_bspline_1d.html +++ b/proc/compute_xg_bspline_1d.html @@ -275,7 +275,7 @@

                  Arguments

                  @@ -290,7 +290,7 @@

                  Arguments

                  @@ -305,7 +305,7 @@

                  Arguments

                  @@ -320,7 +320,7 @@

                  Arguments

                  @@ -335,7 +335,7 @@

                  Arguments

                  @@ -350,7 +350,7 @@

                  Arguments

                  @@ -368,7 +368,7 @@

                  Arguments

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

                  @@ -525,7 +525,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/compute_xg_bspline_1d_1point.html b/proc/compute_xg_bspline_1d_1point.html index 0edc56d26..f076730c2 100644 --- a/proc/compute_xg_bspline_1d_1point.html +++ b/proc/compute_xg_bspline_1d_1point.html @@ -275,7 +275,7 @@

                  Arguments

                  @@ -290,7 +290,7 @@

                  Arguments

                  @@ -305,7 +305,7 @@

                  Arguments

                  @@ -320,7 +320,7 @@

                  Arguments

                  @@ -335,7 +335,7 @@

                  Arguments

                  @@ -353,7 +353,7 @@

                  Arguments

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

                  @@ -510,7 +510,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/compute_xg_bspline_2d.html b/proc/compute_xg_bspline_2d.html index e50aa29ae..ebad8969e 100644 --- a/proc/compute_xg_bspline_2d.html +++ b/proc/compute_xg_bspline_2d.html @@ -275,7 +275,7 @@

                  Arguments

                  @@ -290,7 +290,7 @@

                  Arguments

                  @@ -305,7 +305,7 @@

                  Arguments

                  @@ -320,7 +320,7 @@

                  Arguments

                  @@ -335,7 +335,7 @@

                  Arguments

                  @@ -350,7 +350,7 @@

                  Arguments

                  @@ -365,7 +365,7 @@

                  Arguments

                  @@ -383,7 +383,7 @@

                  Arguments

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

                  @@ -555,7 +555,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/compute_xg_bspline_2d_1point.html b/proc/compute_xg_bspline_2d_1point.html index 08a582b84..dbfb016ab 100644 --- a/proc/compute_xg_bspline_2d_1point.html +++ b/proc/compute_xg_bspline_2d_1point.html @@ -275,7 +275,7 @@

                  Arguments

                  @@ -290,7 +290,7 @@

                  Arguments

                  @@ -305,7 +305,7 @@

                  Arguments

                  @@ -320,7 +320,7 @@

                  Arguments

                  @@ -335,7 +335,7 @@

                  Arguments

                  @@ -350,7 +350,7 @@

                  Arguments

                  @@ -368,7 +368,7 @@

                  Arguments

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

                  @@ -540,7 +540,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/compute_xg_bspline_3d.html b/proc/compute_xg_bspline_3d.html index 2da699c3e..cdd189b51 100644 --- a/proc/compute_xg_bspline_3d.html +++ b/proc/compute_xg_bspline_3d.html @@ -570,7 +570,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/compute_xg_bspline_3d_1point.html b/proc/compute_xg_bspline_3d_1point.html index 19a49efe8..6d06bacef 100644 --- a/proc/compute_xg_bspline_3d_1point.html +++ b/proc/compute_xg_bspline_3d_1point.html @@ -555,7 +555,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/compute_xg_nurbs_1d.html b/proc/compute_xg_nurbs_1d.html index b97bace08..86f96e9a3 100644 --- a/proc/compute_xg_nurbs_1d.html +++ b/proc/compute_xg_nurbs_1d.html @@ -275,7 +275,7 @@

                  Arguments

                  @@ -290,7 +290,7 @@

                  Arguments

                  @@ -305,7 +305,7 @@

                  Arguments

                  @@ -320,7 +320,7 @@

                  Arguments

                  @@ -335,7 +335,7 @@

                  Arguments

                  @@ -350,7 +350,7 @@

                  Arguments

                  @@ -365,7 +365,7 @@

                  Arguments

                  @@ -383,7 +383,7 @@

                  Arguments

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

                  @@ -540,7 +540,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/compute_xg_nurbs_1d_1point.html b/proc/compute_xg_nurbs_1d_1point.html index 5e7ee89e2..9547530f1 100644 --- a/proc/compute_xg_nurbs_1d_1point.html +++ b/proc/compute_xg_nurbs_1d_1point.html @@ -275,7 +275,7 @@

                  Arguments

                  @@ -290,7 +290,7 @@

                  Arguments

                  @@ -305,7 +305,7 @@

                  Arguments

                  @@ -320,7 +320,7 @@

                  Arguments

                  @@ -335,7 +335,7 @@

                  Arguments

                  @@ -350,7 +350,7 @@

                  Arguments

                  @@ -368,7 +368,7 @@

                  Arguments

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

                  @@ -525,7 +525,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/compute_xg_nurbs_2d.html b/proc/compute_xg_nurbs_2d.html index fd0424623..21f3aba13 100644 --- a/proc/compute_xg_nurbs_2d.html +++ b/proc/compute_xg_nurbs_2d.html @@ -275,7 +275,7 @@

                  Arguments

                  @@ -290,7 +290,7 @@

                  Arguments

                  @@ -305,7 +305,7 @@

                  Arguments

                  @@ -320,7 +320,7 @@

                  Arguments

                  @@ -335,7 +335,7 @@

                  Arguments

                  @@ -350,7 +350,7 @@

                  Arguments

                  @@ -365,7 +365,7 @@

                  Arguments

                  @@ -380,7 +380,7 @@

                  Arguments

                  @@ -398,7 +398,7 @@

                  Arguments

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

                  @@ -570,7 +570,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/compute_xg_nurbs_2d_1point.html b/proc/compute_xg_nurbs_2d_1point.html index 9acbe5985..62b22e628 100644 --- a/proc/compute_xg_nurbs_2d_1point.html +++ b/proc/compute_xg_nurbs_2d_1point.html @@ -275,7 +275,7 @@

                  Arguments

                  @@ -290,7 +290,7 @@

                  Arguments

                  @@ -305,7 +305,7 @@

                  Arguments

                  @@ -320,7 +320,7 @@

                  Arguments

                  @@ -335,7 +335,7 @@

                  Arguments

                  @@ -350,7 +350,7 @@

                  Arguments

                  @@ -365,7 +365,7 @@

                  Arguments

                  @@ -383,7 +383,7 @@

                  Arguments

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

                  @@ -555,7 +555,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/compute_xg_nurbs_3d.html b/proc/compute_xg_nurbs_3d.html index 7dacc9b19..58856840a 100644 --- a/proc/compute_xg_nurbs_3d.html +++ b/proc/compute_xg_nurbs_3d.html @@ -585,7 +585,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/compute_xg_nurbs_3d_1point.html b/proc/compute_xg_nurbs_3d_1point.html index 710242be2..11f795f82 100644 --- a/proc/compute_xg_nurbs_3d_1point.html +++ b/proc/compute_xg_nurbs_3d_1point.html @@ -570,7 +570,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/create.html b/proc/create.html index 30ef91177..466c60bac 100644 --- a/proc/create.html +++ b/proc/create.html @@ -722,7 +722,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/create~2.html b/proc/create~2.html index 1c01034f6..d0d1ba569 100644 --- a/proc/create~2.html +++ b/proc/create~2.html @@ -78,20 +78,20 @@

                  create
                • 27 statements + title=" 0.7% of total for procedures.">42 statements
                • - Source File + Source File
                • -

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

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

                  Type Bound

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

                  - - class(nurbs_surface), + + class(nurbs_curve), intent(in) @@ -176,12 +176,12 @@

                  Arguments

                  real(kind=rk),
                  intent(in),intent(in) - contiguous + ::Xt(:)Xt
                  - + real(kind=rk), intent(in)
                  - + real(kind=rk), intent(in),
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + real(kind=rk), intent(out),
                  - + real(kind=rk), intent(out),
                  - + real(kind=rk), intent(out),
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + real(kind=rk), intent(out),
                  - + real(kind=rk), intent(out),
                  - + real(kind=rk), intent(out),
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + real(kind=rk), intent(out),
                  - + real(kind=rk), intent(out),
                  - + real(kind=rk), intent(out),
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + real(kind=rk), intent(out),
                  - + real(kind=rk), intent(out),
                  - + real(kind=rk), intent(out),
                  - + real(kind=rk), intent(in)
                  - + real(kind=rk), intent(in),
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(out),
                  - + real(kind=rk), intent(out),
                  - + real(kind=rk), intent(out),
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(out),
                  - + real(kind=rk), intent(out),
                  - + real(kind=rk), intent(out),
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(out),
                  - + real(kind=rk), intent(out),
                  - + real(kind=rk), intent(out),
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(out),
                  - + real(kind=rk), intent(out),
                  - + real(kind=rk), intent(out),
                  - + real(kind=rk), intent(in)
                  - + real(kind=rk), intent(in),
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + real(kind=rk), intent(out),
                  - + real(kind=rk), intent(out),
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + real(kind=rk), intent(out),
                  - + real(kind=rk), intent(out),
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + real(kind=rk), intent(out),
                  - + real(kind=rk), intent(out),
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + real(kind=rk), intent(out),
                  - + real(kind=rk), intent(out),
                  - + real(kind=rk), intent(in)
                  - + real(kind=rk), intent(in),
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(out),
                  - + real(kind=rk), intent(out),
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(out),
                  - + real(kind=rk), intent(out),
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(out),
                  - + real(kind=rk), intent(out),
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(out),
                  - + real(kind=rk), intent(out),
                  - + integer, intent(in)
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in)
                  - + real(kind=rk), intent(in)
                  - + real(kind=rk), intent(in),
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + real(kind=rk), intent(in)
                  - + real(kind=rk), intent(in),
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in)
                  - + real(kind=rk), intent(in),
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in)
                  - + real(kind=rk), intent(in),
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  @@ -159,7 +159,7 @@

                  Arguments

                  @@ -181,14 +181,44 @@

                  Arguments

                  - + + + + + + + + + + + + + + + + + @@ -196,7 +226,22 @@

                  Arguments

                  contiguous - + + + + + + + + + @@ -216,46 +261,91 @@

                  Calls

                  - - + + proc~~create~2~~CallsGraph - + proc~create~2 - -nurbs_curve%create + +nurbs_surface%create interface~compute_xg~2 - -compute_Xg + +compute_Xg proc~create~2->interface~compute_xg~2 - - + + - + +interface~ndgrid + + +ndgrid + + + + + +proc~create~2->interface~ndgrid + + + + + proc~is_rational~2 - - -nurbs_curve%is_rational + + +nurbs_surface%is_rational - + proc~create~2->proc~is_rational~2 - - + + + + + +proc~ndgrid2 + + +ndgrid2 + + + + + +interface~ndgrid->proc~ndgrid2 + + + + + +proc~ndgrid3 + + +ndgrid3 + + + + + +interface~ndgrid->proc~ndgrid3 + + @@ -351,127 +441,202 @@

                  Called by

                  - - + + proc~~create~2~~CalledByGraph - + proc~create~2 - -nurbs_curve%create + +nurbs_surface%create proc~nearest_point2~2 - - -nurbs_curve%nearest_point2 + + +nurbs_surface%nearest_point2 proc~nearest_point2~2->proc~create~2 - - + + - + -program~example1_curve - - -example1_curve +program~example3_surface + + +example3_surface - + -program~example1_curve->proc~create~2 - - +program~example3_surface->proc~create~2 + + - + -program~example_nurbs_curve - - -example_nurbs_curve +program~example_nurbs_surface + + +example_nurbs_surface - + -program~example_nurbs_curve->proc~create~2 - - +program~example_nurbs_surface->proc~create~2 + + - + -program~nearest_point_1d - - -nearest_point_1d +program~example_ppm1 + + +example_ppm1 - + -program~nearest_point_1d->proc~create~2 - - - - - -program~nearest_point_1d->proc~nearest_point2~2 - - +program~example_ppm1->proc~create~2 + + - + -program~shape_c_1d - - -shape_C_1d +program~example_ppm2 + + +example_ppm2 - + -program~shape_c_1d->proc~create~2 - - +program~example_ppm2->proc~create~2 + + - + -program~shape_circle - - -shape_circle +program~example_ppm3 + + +example_ppm3 - + -program~shape_circle->proc~create~2 - - +program~example_ppm3->proc~create~2 + + - + -program~shape_half_circle - - -shape_half_circle +program~nearest_point_2d + + +nearest_point_2d - + -program~shape_half_circle->proc~create~2 - - +program~nearest_point_2d->proc~create~2 + + + + + +program~nearest_point_2d->proc~nearest_point2~2 + + + + + +program~nearest_point_2d_bench + + +nearest_point_2d_bench + + + + + +program~nearest_point_2d_bench->proc~create~2 + + + + + +program~shape_c_2d + + +shape_C_2d + + + + + +program~shape_c_2d->proc~create~2 + + + + + +program~shape_half_ring_2d + + +shape_half_ring_2d + + + + + +program~shape_half_ring_2d->proc~create~2 + + + + + +program~shape_ring_2d + + +shape_ring_2d + + + + + +program~shape_ring_2d->proc~create~2 + + + + + +program~shape_tetragon + + +shape_tetragon + + + + + +program~shape_tetragon->proc~create~2 + + @@ -587,7 +752,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/create~3.html b/proc/create~3.html index 622dd8239..6f86b5faf 100644 --- a/proc/create~3.html +++ b/proc/create~3.html @@ -78,20 +78,20 @@

                  create
                • 42 statements + title=" 0.4% of total for procedures.">27 statements
                • - Source File + Source File
                • -

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

                  private pure subroutine create(this, res, Xt)

                  Type Bound

                  -

                  nurbs_surface

                  +

                  nurbs_curve

                  Arguments

                  - class(nurbs_curve), + class(nurbs_surface), intent(inout) @@ -173,7 +173,7 @@

                  Arguments

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

                  Arguments

                  @@ -181,52 +181,7 @@

                  Arguments

                  - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -241,7 +196,7 @@

                  Arguments

                  contiguous - + @@ -261,91 +216,46 @@

                  Calls

                  - - + + proc~~create~3~~CallsGraph - + proc~create~3 - -nurbs_surface%create + +nurbs_curve%create interface~compute_xg~3 - -compute_Xg + +compute_Xg proc~create~3->interface~compute_xg~3 - - - - - -interface~ndgrid - - -ndgrid - - - - - -proc~create~3->interface~ndgrid - - + + - + proc~is_rational~3 - - -nurbs_surface%is_rational + + +nurbs_curve%is_rational - + proc~create~3->proc~is_rational~3 - - - - - -proc~ndgrid2 - - -ndgrid2 - - - - - -interface~ndgrid->proc~ndgrid2 - - - - - -proc~ndgrid3 - - -ndgrid3 - - - - - -interface~ndgrid->proc~ndgrid3 - - + + @@ -441,202 +351,127 @@

                  Called by

                  - - + + proc~~create~3~~CalledByGraph - + proc~create~3 - -nurbs_surface%create + +nurbs_curve%create proc~nearest_point2~3 - - -nurbs_surface%nearest_point2 + + +nurbs_curve%nearest_point2 proc~nearest_point2~3->proc~create~3 - - + + - + -program~example3_surface - - -example3_surface +program~example1_curve + + +example1_curve - + -program~example3_surface->proc~create~3 - - +program~example1_curve->proc~create~3 + + - + -program~example_nurbs_surface - - -example_nurbs_surface +program~example_nurbs_curve + + +example_nurbs_curve - + -program~example_nurbs_surface->proc~create~3 - - +program~example_nurbs_curve->proc~create~3 + + - + -program~example_ppm1 - - -example_ppm1 +program~nearest_point_1d + + +nearest_point_1d - + -program~example_ppm1->proc~create~3 - - +program~nearest_point_1d->proc~create~3 + + + + + +program~nearest_point_1d->proc~nearest_point2~3 + + - + -program~example_ppm2 - - -example_ppm2 +program~shape_c_1d + + +shape_C_1d - + -program~example_ppm2->proc~create~3 - - +program~shape_c_1d->proc~create~3 + + - + -program~example_ppm3 - - -example_ppm3 +program~shape_circle + + +shape_circle - + -program~example_ppm3->proc~create~3 - - +program~shape_circle->proc~create~3 + + - + -program~nearest_point_2d - - -nearest_point_2d +program~shape_half_circle + + +shape_half_circle - + -program~nearest_point_2d->proc~create~3 - - - - - -program~nearest_point_2d->proc~nearest_point2~3 - - - - - -program~nearest_point_2d_bench - - -nearest_point_2d_bench - - - - - -program~nearest_point_2d_bench->proc~create~3 - - - - - -program~shape_c_2d - - -shape_C_2d - - - - - -program~shape_c_2d->proc~create~3 - - - - - -program~shape_half_ring_2d - - -shape_half_ring_2d - - - - - -program~shape_half_ring_2d->proc~create~3 - - - - - -program~shape_ring_2d - - -shape_ring_2d - - - - - -program~shape_ring_2d->proc~create~3 - - - - - -program~shape_tetragon - - -shape_tetragon - - - - - -program~shape_tetragon->proc~create~3 - - +program~shape_half_circle->proc~create~3 + + @@ -752,7 +587,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/derivative2_scalar.html b/proc/derivative2_scalar.html index 67f0f8bd0..759c8944c 100644 --- a/proc/derivative2_scalar.html +++ b/proc/derivative2_scalar.html @@ -555,7 +555,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/derivative2_scalar~2.html b/proc/derivative2_scalar~2.html index 06b73e572..51a05d04d 100644 --- a/proc/derivative2_scalar~2.html +++ b/proc/derivative2_scalar~2.html @@ -83,15 +83,15 @@

                  derivative2_scalar
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure subroutine derivative2_scalar(this, Xt, d2Tgc, dTgc, Tgc)

                  Type Bound

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

                  - - class(nurbs_surface), + + class(nurbs_curve), intent(inout) @@ -173,7 +173,7 @@

                  Arguments

                  - + integer, intent(in), ::res1 - -
                  - - integer, - intent(in),optional - - ::res2 - -
                  - - real(kind=rk), - intent(in),optional, - contiguous - ::Xt1(:) - -
                  - - real(kind=rk), - intent(in),optional, - contiguous - ::Xt2(:)res ::Xt(:,:)Xt(:)
                  @@ -158,8 +158,8 @@

                  Arguments

                  - + - + @@ -196,7 +196,7 @@

                  Arguments

                  allocatable - + @@ -211,7 +211,7 @@

                  Arguments

                  allocatable - + @@ -246,46 +246,46 @@

                  Calls

                  - + proc~~derivative2_scalar~2~~CallsGraph - + proc~derivative2_scalar~2 - -nurbs_curve%derivative2_scalar + +nurbs_surface%derivative2_scalar interface~compute_d2tgc~2 - -compute_d2Tgc + +compute_d2Tgc proc~derivative2_scalar~2->interface~compute_d2tgc~2 - - + + proc~is_rational~2 - - -nurbs_curve%is_rational + + +nurbs_surface%is_rational proc~derivative2_scalar~2->proc~is_rational~2 - - + + @@ -381,61 +381,61 @@

                  Called by

                  - - + + proc~~derivative2_scalar~2~~CalledByGraph - + proc~derivative2_scalar~2 - -nurbs_curve%derivative2_scalar + +nurbs_surface%derivative2_scalar none~derivative2~2 - - -nurbs_curve%derivative2 + + +nurbs_surface%derivative2 none~derivative2~2->proc~derivative2_scalar~2 - - + + proc~nearest_point2~2 - - -nurbs_curve%nearest_point2 + + +nurbs_surface%nearest_point2 proc~nearest_point2~2->none~derivative2~2 - - + + - + -program~nearest_point_1d - +program~nearest_point_2d + -nearest_point_1d +nearest_point_2d - + -program~nearest_point_1d->proc~nearest_point2~2 - - +program~nearest_point_2d->proc~nearest_point2~2 + + @@ -555,7 +555,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/derivative2_scalar~3.html b/proc/derivative2_scalar~3.html index 648f7a283..dbcf76b2d 100644 --- a/proc/derivative2_scalar~3.html +++ b/proc/derivative2_scalar~3.html @@ -83,15 +83,15 @@

                  derivative2_scalar
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure subroutine derivative2_scalar(this, Xt, d2Tgc, dTgc, Tgc)

                  Type Bound

                  -

                  nurbs_surface

                  +

                  nurbs_curve

                  Arguments

                  - - class(nurbs_curve), + + class(nurbs_surface), intent(inout) @@ -173,15 +173,15 @@

                  Arguments

                  - + real(kind=rk), intent(in)intent(in), - + contiguous ::XtXt(:) ::d2Tgc(:)d2Tgc(:,:) ::dTgc(:)dTgc(:,:)
                  @@ -158,8 +158,8 @@

                  Arguments

                  - + - + @@ -196,7 +196,7 @@

                  Arguments

                  allocatable - + @@ -211,7 +211,7 @@

                  Arguments

                  allocatable - + @@ -246,46 +246,46 @@

                  Calls

                  - + proc~~derivative2_scalar~3~~CallsGraph - + proc~derivative2_scalar~3 - -nurbs_surface%derivative2_scalar + +nurbs_curve%derivative2_scalar interface~compute_d2tgc~3 - -compute_d2Tgc + +compute_d2Tgc proc~derivative2_scalar~3->interface~compute_d2tgc~3 - - + + proc~is_rational~3 - - -nurbs_surface%is_rational + + +nurbs_curve%is_rational proc~derivative2_scalar~3->proc~is_rational~3 - - + + @@ -381,61 +381,61 @@

                  Called by

                  - - + + proc~~derivative2_scalar~3~~CalledByGraph - + proc~derivative2_scalar~3 - -nurbs_surface%derivative2_scalar + +nurbs_curve%derivative2_scalar none~derivative2~3 - - -nurbs_surface%derivative2 + + +nurbs_curve%derivative2 none~derivative2~3->proc~derivative2_scalar~3 - - + + proc~nearest_point2~3 - - -nurbs_surface%nearest_point2 + + +nurbs_curve%nearest_point2 proc~nearest_point2~3->none~derivative2~3 - - + + - + -program~nearest_point_2d - +program~nearest_point_1d + -nearest_point_2d +nearest_point_1d - + -program~nearest_point_2d->proc~nearest_point2~3 - - +program~nearest_point_1d->proc~nearest_point2~3 + + @@ -555,7 +555,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/derivative2_vector.html b/proc/derivative2_vector.html index 4451243d2..31556ecc7 100644 --- a/proc/derivative2_vector.html +++ b/proc/derivative2_vector.html @@ -675,7 +675,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/derivative2_vector~2.html b/proc/derivative2_vector~2.html index 9075832af..e607f6e52 100644 --- a/proc/derivative2_vector~2.html +++ b/proc/derivative2_vector~2.html @@ -78,20 +78,20 @@

                  derivative2_vector
                • 23 statements + title=" 0.5% of total for procedures.">34 statements
                • - Source File + Source File
                • @@ -137,13 +137,13 @@

                  Contents

                  -

                  private pure subroutine derivative2_vector(this, res, Xt, d2Tgc, dTgc, Tgc) +

                  private pure subroutine derivative2_vector(this, res1, res2, Xt1, Xt2, d2Tgc, dTgc, Tgc)

                  Type Bound

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

                  - - class(nurbs_surface), + + class(nurbs_curve), intent(inout) @@ -176,12 +176,12 @@

                  Arguments

                  real(kind=rk),
                  intent(in),intent(in) - contiguous + ::Xt(:)Xt ::d2Tgc(:,:)d2Tgc(:) ::dTgc(:,:)dTgc(:)
                  @@ -158,8 +158,8 @@

                  Arguments

                  @@ -181,14 +181,29 @@

                  Arguments

                  - + + + + + + + + + @@ -196,7 +211,22 @@

                  Arguments

                  contiguous - + + + + + + + + + @@ -211,7 +241,7 @@

                  Arguments

                  allocatable - + @@ -226,7 +256,7 @@

                  Arguments

                  allocatable - + @@ -261,46 +291,91 @@

                  Calls

                  - - + + proc~~derivative2_vector~2~~CallsGraph - + proc~derivative2_vector~2 - -nurbs_curve%derivative2_vector + +nurbs_surface%derivative2_vector interface~compute_d2tgc~2 - -compute_d2Tgc + +compute_d2Tgc proc~derivative2_vector~2->interface~compute_d2tgc~2 - - + + - + +interface~ndgrid + + +ndgrid + + + + + +proc~derivative2_vector~2->interface~ndgrid + + + + + proc~is_rational~2 - - -nurbs_curve%is_rational + + +nurbs_surface%is_rational - + proc~derivative2_vector~2->proc~is_rational~2 - - + + + + + +proc~ndgrid2 + + +ndgrid2 + + + + + +interface~ndgrid->proc~ndgrid2 + + + + + +proc~ndgrid3 + + +ndgrid3 + + + + + +interface~ndgrid->proc~ndgrid3 + + @@ -396,61 +471,61 @@

                  Called by

                  - - + + proc~~derivative2_vector~2~~CalledByGraph - + proc~derivative2_vector~2 - -nurbs_curve%derivative2_vector + +nurbs_surface%derivative2_vector none~derivative2~2 - - -nurbs_curve%derivative2 + + +nurbs_surface%derivative2 none~derivative2~2->proc~derivative2_vector~2 - - + + proc~nearest_point2~2 - - -nurbs_curve%nearest_point2 + + +nurbs_surface%nearest_point2 proc~nearest_point2~2->none~derivative2~2 - - + + - + -program~nearest_point_1d - +program~nearest_point_2d + -nearest_point_1d +nearest_point_2d - + -program~nearest_point_1d->proc~nearest_point2~2 - - +program~nearest_point_2d->proc~nearest_point2~2 + + @@ -570,7 +645,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/derivative2_vector~3.html b/proc/derivative2_vector~3.html index 3a55018b4..e4b972bc1 100644 --- a/proc/derivative2_vector~3.html +++ b/proc/derivative2_vector~3.html @@ -78,20 +78,20 @@

                  derivative2_vector
                • 34 statements + title=" 0.4% of total for procedures.">23 statements
                • - Source File + Source File
                • @@ -137,13 +137,13 @@

                  Contents

                  -

                  private pure subroutine derivative2_vector(this, res1, res2, Xt1, Xt2, d2Tgc, dTgc, Tgc) +

                  private pure subroutine derivative2_vector(this, res, Xt, d2Tgc, dTgc, Tgc)

                  Type Bound

                  -

                  nurbs_surface

                  +

                  nurbs_curve

                  Arguments

                  - - class(nurbs_curve), + + class(nurbs_surface), intent(inout) @@ -173,7 +173,7 @@

                  Arguments

                  - + integer, intent(in), ::resres1
                  - + + integer, + intent(in),optional + + ::res2 + +
                  + real(kind=rk), intent(in), ::Xt(:)Xt1(:) + +
                  + + real(kind=rk), + intent(in),optional, + contiguous + ::Xt2(:) ::d2Tgc(:,:)d2Tgc(:,:,:) ::dTgc(:,:)dTgc(:,:,:)
                  @@ -158,8 +158,8 @@

                  Arguments

                  @@ -181,29 +181,14 @@

                  Arguments

                  - + - - - - - - - - @@ -211,22 +196,7 @@

                  Arguments

                  contiguous - - - - - - - - - + @@ -241,7 +211,7 @@

                  Arguments

                  allocatable - + @@ -256,7 +226,7 @@

                  Arguments

                  allocatable - + @@ -291,91 +261,46 @@

                  Calls

                  - - + + proc~~derivative2_vector~3~~CallsGraph - + proc~derivative2_vector~3 - -nurbs_surface%derivative2_vector + +nurbs_curve%derivative2_vector interface~compute_d2tgc~3 - -compute_d2Tgc + +compute_d2Tgc proc~derivative2_vector~3->interface~compute_d2tgc~3 - - - - - -interface~ndgrid - - -ndgrid - - - - - -proc~derivative2_vector~3->interface~ndgrid - - + + - + proc~is_rational~3 - - -nurbs_surface%is_rational + + +nurbs_curve%is_rational - + proc~derivative2_vector~3->proc~is_rational~3 - - - - - -proc~ndgrid2 - - -ndgrid2 - - - - - -interface~ndgrid->proc~ndgrid2 - - - - - -proc~ndgrid3 - - -ndgrid3 - - - - - -interface~ndgrid->proc~ndgrid3 - - + + @@ -471,61 +396,61 @@

                  Called by

                  - - + + proc~~derivative2_vector~3~~CalledByGraph - + proc~derivative2_vector~3 - -nurbs_surface%derivative2_vector + +nurbs_curve%derivative2_vector none~derivative2~3 - - -nurbs_surface%derivative2 + + +nurbs_curve%derivative2 none~derivative2~3->proc~derivative2_vector~3 - - + + proc~nearest_point2~3 - - -nurbs_surface%nearest_point2 + + +nurbs_curve%nearest_point2 proc~nearest_point2~3->none~derivative2~3 - - + + - + -program~nearest_point_2d - +program~nearest_point_1d + -nearest_point_2d +nearest_point_1d - + -program~nearest_point_2d->proc~nearest_point2~3 - - +program~nearest_point_1d->proc~nearest_point2~3 + + @@ -645,7 +570,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/derivative_scalar.html b/proc/derivative_scalar.html index b47660e39..e2d7f956e 100644 --- a/proc/derivative_scalar.html +++ b/proc/derivative_scalar.html @@ -386,7 +386,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/derivative_scalar~2.html b/proc/derivative_scalar~2.html index 0edc00e2d..04aff190e 100644 --- a/proc/derivative_scalar~2.html +++ b/proc/derivative_scalar~2.html @@ -83,15 +83,15 @@

                  derivative_scalar
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure subroutine derivative_scalar(this, Xt, dTgc, Tgc)

                  Type Bound

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

                  - - class(nurbs_surface), + + class(nurbs_curve), intent(inout) @@ -173,7 +173,7 @@

                  Arguments

                  - + integer, intent(in), ::res1res
                  - - integer, - intent(in),optional - - ::res2 - -
                  - + real(kind=rk), intent(in), ::Xt1(:) - -
                  - - real(kind=rk), - intent(in),optional, - contiguous - ::Xt2(:)Xt(:) ::d2Tgc(:,:,:)d2Tgc(:,:) ::dTgc(:,:,:)dTgc(:,:)
                  @@ -158,8 +158,8 @@

                  Arguments

                  - + - + @@ -196,7 +196,7 @@

                  Arguments

                  allocatable - + @@ -231,46 +231,46 @@

                  Calls

                  - + proc~~derivative_scalar~2~~CallsGraph - + proc~derivative_scalar~2 - -nurbs_curve%derivative_scalar + +nurbs_surface%derivative_scalar interface~compute_dtgc~2 - -compute_dTgc + +compute_dTgc proc~derivative_scalar~2->interface~compute_dtgc~2 - - + + proc~is_rational~2 - - -nurbs_curve%is_rational + + +nurbs_surface%is_rational proc~derivative_scalar~2->proc~is_rational~2 - - + + @@ -386,7 +386,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/derivative_scalar~3.html b/proc/derivative_scalar~3.html index aa7085c5a..5ee0fe128 100644 --- a/proc/derivative_scalar~3.html +++ b/proc/derivative_scalar~3.html @@ -83,15 +83,15 @@

                  derivative_scalar
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure subroutine derivative_scalar(this, Xt, dTgc, Tgc)

                  Type Bound

                  -

                  nurbs_surface

                  +

                  nurbs_curve

                  Arguments

                  - - class(nurbs_curve), + + class(nurbs_surface), intent(inout) @@ -173,15 +173,15 @@

                  Arguments

                  - + real(kind=rk), intent(in)intent(in), - + contiguous ::XtXt(:) ::dTgc(:)dTgc(:,:)
                  @@ -158,8 +158,8 @@

                  Arguments

                  - + - + @@ -196,7 +196,7 @@

                  Arguments

                  allocatable - + @@ -231,46 +231,46 @@

                  Calls

                  - + proc~~derivative_scalar~3~~CallsGraph - + proc~derivative_scalar~3 - -nurbs_surface%derivative_scalar + +nurbs_curve%derivative_scalar interface~compute_dtgc~3 - -compute_dTgc + +compute_dTgc proc~derivative_scalar~3->interface~compute_dtgc~3 - - + + proc~is_rational~3 - - -nurbs_surface%is_rational + + +nurbs_curve%is_rational proc~derivative_scalar~3->proc~is_rational~3 - - + + @@ -386,7 +386,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/derivative_vector.html b/proc/derivative_vector.html index 931e638ae..bf3b920b3 100644 --- a/proc/derivative_vector.html +++ b/proc/derivative_vector.html @@ -506,7 +506,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/derivative_vector~2.html b/proc/derivative_vector~2.html index 2ccedf896..9801ec131 100644 --- a/proc/derivative_vector~2.html +++ b/proc/derivative_vector~2.html @@ -78,20 +78,20 @@

                  derivative_vector
                • 22 statements + title=" 0.5% of total for procedures.">33 statements
                • - Source File + Source File
                • @@ -137,13 +137,13 @@

                  Contents

                  -

                  private pure subroutine derivative_vector(this, res, Xt, dTgc, Tgc) +

                  private pure subroutine derivative_vector(this, res1, res2, Xt1, Xt2, dTgc, Tgc)

                  Type Bound

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

                  - - class(nurbs_surface), + + class(nurbs_curve), intent(inout) @@ -176,12 +176,12 @@

                  Arguments

                  real(kind=rk),
                  intent(in),intent(in) - contiguous + ::Xt(:)Xt ::dTgc(:,:)dTgc(:)
                  @@ -158,8 +158,8 @@

                  Arguments

                  @@ -181,14 +181,44 @@

                  Arguments

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

                  Arguments

                  contiguous - + @@ -211,7 +241,7 @@

                  Arguments

                  allocatable - + @@ -246,46 +276,91 @@

                  Calls

                  - - + + proc~~derivative_vector~2~~CallsGraph - + proc~derivative_vector~2 - -nurbs_curve%derivative_vector + +nurbs_surface%derivative_vector interface~compute_dtgc~2 - -compute_dTgc + +compute_dTgc proc~derivative_vector~2->interface~compute_dtgc~2 - - + + - + +interface~ndgrid + + +ndgrid + + + + + +proc~derivative_vector~2->interface~ndgrid + + + + + proc~is_rational~2 - - -nurbs_curve%is_rational + + +nurbs_surface%is_rational - + proc~derivative_vector~2->proc~is_rational~2 - - + + + + + +proc~ndgrid2 + + +ndgrid2 + + + + + +interface~ndgrid->proc~ndgrid2 + + + + + +proc~ndgrid3 + + +ndgrid3 + + + + + +interface~ndgrid->proc~ndgrid3 + + @@ -401,7 +476,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/derivative_vector~3.html b/proc/derivative_vector~3.html index 52628782d..2ab27e74d 100644 --- a/proc/derivative_vector~3.html +++ b/proc/derivative_vector~3.html @@ -78,20 +78,20 @@

                  derivative_vector
                • 33 statements + title=" 0.3% of total for procedures.">22 statements
                • - Source File + Source File
                • @@ -137,13 +137,13 @@

                  Contents

                  -

                  private pure subroutine derivative_vector(this, res1, res2, Xt1, Xt2, dTgc, Tgc) +

                  private pure subroutine derivative_vector(this, res, Xt, dTgc, Tgc)

                  Type Bound

                  -

                  nurbs_surface

                  +

                  nurbs_curve

                  Arguments

                  - - class(nurbs_curve), + + class(nurbs_surface), intent(inout) @@ -173,7 +173,7 @@

                  Arguments

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

                  Arguments

                  @@ -181,44 +181,14 @@

                  Arguments

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

                  Arguments

                  contiguous - + @@ -241,7 +211,7 @@

                  Arguments

                  allocatable - + @@ -276,91 +246,46 @@

                  Calls

                  - - + + proc~~derivative_vector~3~~CallsGraph - + proc~derivative_vector~3 - -nurbs_surface%derivative_vector + +nurbs_curve%derivative_vector interface~compute_dtgc~3 - -compute_dTgc + +compute_dTgc proc~derivative_vector~3->interface~compute_dtgc~3 - - - - - -interface~ndgrid - - -ndgrid - - - - - -proc~derivative_vector~3->interface~ndgrid - - + + - + proc~is_rational~3 - - -nurbs_surface%is_rational + + +nurbs_curve%is_rational - + proc~derivative_vector~3->proc~is_rational~3 - - - - - -proc~ndgrid2 - - -ndgrid2 - - - - - -interface~ndgrid->proc~ndgrid2 - - - - - -proc~ndgrid3 - - -ndgrid3 - - - - - -interface~ndgrid->proc~ndgrid3 - - + + @@ -476,7 +401,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/elevate_degree.html b/proc/elevate_degree.html index e67eca262..2f36bc7e3 100644 --- a/proc/elevate_degree.html +++ b/proc/elevate_degree.html @@ -188,7 +188,7 @@

                  Arguments

                  @@ -759,7 +759,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/elevate_degree_a_5_9.html b/proc/elevate_degree_a_5_9.html index 88b17b144..1a98ccce1 100644 --- a/proc/elevate_degree_a_5_9.html +++ b/proc/elevate_degree_a_5_9.html @@ -156,7 +156,7 @@

                  Arguments

                  @@ -171,7 +171,7 @@

                  Arguments

                  @@ -186,7 +186,7 @@

                  Arguments

                  @@ -201,7 +201,7 @@

                  Arguments

                  @@ -216,7 +216,7 @@

                  Arguments

                  @@ -231,7 +231,7 @@

                  Arguments

                  @@ -246,7 +246,7 @@

                  Arguments

                  @@ -483,24 +483,24 @@

                  Called by

                  proc~elevate_degree~2 - - -nurbs_curve%elevate_degree + + +nurbs_surface%elevate_degree proc~elevate_degree~2->proc~elevate_degree_a_5_9 - - + + proc~elevate_degree~3 - - -nurbs_surface%elevate_degree + + +nurbs_curve%elevate_degree @@ -514,31 +514,31 @@

                  Called by

                  program~example1_curve - -example1_curve + +example1_curve - - -program~example1_curve->proc~elevate_degree~2 - - + + +program~example1_curve->proc~elevate_degree~3 + + program~example3_surface - -example3_surface + +example3_surface - - -program~example3_surface->proc~elevate_degree~3 - - + + +program~example3_surface->proc~elevate_degree~2 + + @@ -669,7 +669,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/elevate_degree~2.html b/proc/elevate_degree~2.html index 1df7c2bf6..176b3b384 100644 --- a/proc/elevate_degree~2.html +++ b/proc/elevate_degree~2.html @@ -78,20 +78,20 @@

                  elevate_degree
                • 28 statements + title=" 1.1% of total for procedures.">72 statements
                • - Source File + Source File
                • @@ -137,13 +137,13 @@

                  Contents

                  -

                  private pure subroutine elevate_degree(this, t) +

                  private pure subroutine elevate_degree(this, dir, t)

                  Type Bound

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

                  - - class(nurbs_surface), + + class(nurbs_curve), intent(inout) @@ -173,7 +173,7 @@

                  Arguments

                  - + integer, intent(in), ::res1res
                  - - integer, - intent(in),optional - - ::res2 - -
                  - - real(kind=rk), - intent(in),optional, - contiguous - ::Xt1(:) - -
                  - + real(kind=rk), intent(in), ::Xt2(:)Xt(:) ::dTgc(:,:,:)dTgc(:,:)
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + real(kind=rk), intent(in),
                  - + integer, intent(in)
                  - + real(kind=rk), intent(in),
                  - + integer, intent(out)
                  - + real(kind=rk), intent(out),
                  - + real(kind=rk), intent(out),
                  @@ -158,8 +158,8 @@

                  Arguments

                  + + + + + + + + @@ -201,253 +216,325 @@

                  Calls

                  - - + + proc~~elevate_degree~2~~CallsGraph - + proc~elevate_degree~2 - -nurbs_curve%elevate_degree + +nurbs_surface%elevate_degree - + +none~get_knot~2 + + +nurbs_surface%get_knot + + + + + +proc~elevate_degree~2->none~get_knot~2 + + + + + none~set~2 - - -nurbs_curve%set + + +nurbs_surface%set - + proc~elevate_degree~2->none~set~2 - - + + - + proc~elevate_degree_a_5_9 - - -elevate_degree_A_5_9 + + +elevate_degree_A_5_9 - + proc~elevate_degree~2->proc~elevate_degree_a_5_9 - - + + - + proc~is_rational~2 - - -nurbs_curve%is_rational + + +nurbs_surface%is_rational - + proc~elevate_degree~2->proc~is_rational~2 - - + + + + + +proc~get_knot_all~2 + + +nurbs_surface%get_knot_all + + + + + +none~get_knot~2->proc~get_knot_all~2 + + + + + +proc~get_knoti~2 + + +nurbs_surface%get_knoti + + + + + +none~get_knot~2->proc~get_knoti~2 + + - + proc~set1~2 - - -nurbs_curve%set1 + + +nurbs_surface%set1 - + none~set~2->proc~set1~2 - - + + - + proc~set2~2 - - -nurbs_curve%set2 + + +nurbs_surface%set2 - + none~set~2->proc~set2~2 - - + + - + proc~set3~2 - - -nurbs_curve%set3 + + +nurbs_surface%set3 - + none~set~2->proc~set3~2 - - + + - + interface~compute_multiplicity - - -compute_multiplicity + + +compute_multiplicity - + proc~elevate_degree_a_5_9->interface~compute_multiplicity - - + + - + proc~bincoeff - - -bincoeff + + +bincoeff - + proc~elevate_degree_a_5_9->proc~bincoeff - - + + - + proc~compute_multiplicity1 - - -compute_multiplicity1 + + +compute_multiplicity1 - + interface~compute_multiplicity->proc~compute_multiplicity1 - - + + - + proc~compute_multiplicity2 - - -compute_multiplicity2 + + +compute_multiplicity2 - + interface~compute_multiplicity->proc~compute_multiplicity2 - - + + - + proc~factln - - -factln + + +factln - + proc~bincoeff->proc~factln - - + + - + proc~cmp_degree~2 - - -nurbs_curve%cmp_degree + + +nurbs_surface%cmp_degree - + proc~set1~2->proc~cmp_degree~2 - - + + + + + +proc~cmp_nc~2 + + +nurbs_surface%cmp_nc + + + + + +proc~set1~2->proc~cmp_nc~2 + + + + + +proc~set2~2->proc~cmp_nc~2 + + - + proc~compute_knot_vector - - -compute_knot_vector + + +compute_knot_vector - + proc~set2~2->proc~compute_knot_vector - - + + - + proc~set3~2->proc~cmp_degree~2 - - + + - + proc~get_multiplicity~2 - - -nurbs_curve%get_multiplicity + + +nurbs_surface%get_multiplicity - + proc~cmp_degree~2->proc~get_multiplicity~2 - - + + + + + +proc~cmp_nc~2->interface~compute_multiplicity + + - + proc~repelem - - -repelem + + +repelem - + proc~compute_knot_vector->proc~repelem - - + + - + proc~get_multiplicity~2->interface~compute_multiplicity - - + + @@ -547,31 +634,31 @@

                  Called by

                  - + proc~~elevate_degree~2~~CalledByGraph - + proc~elevate_degree~2 - -nurbs_curve%elevate_degree + +nurbs_surface%elevate_degree - + -program~example1_curve - - -example1_curve +program~example3_surface + + +example3_surface - + -program~example1_curve->proc~elevate_degree~2 - - +program~example3_surface->proc~elevate_degree~2 + + @@ -687,7 +774,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/elevate_degree~3.html b/proc/elevate_degree~3.html index c92d5aca1..bbd5adc87 100644 --- a/proc/elevate_degree~3.html +++ b/proc/elevate_degree~3.html @@ -78,20 +78,20 @@

                  elevate_degree
                • 72 statements + title=" 0.4% of total for procedures.">28 statements
                • - Source File + Source File
                • @@ -137,13 +137,13 @@

                  Contents

                  -

                  private pure subroutine elevate_degree(this, dir, t) +

                  private pure subroutine elevate_degree(this, t)

                  Type Bound

                  -

                  nurbs_surface

                  +

                  nurbs_curve

                  Arguments

                  - - class(nurbs_curve), + + class(nurbs_surface), intent(inout) @@ -173,7 +173,22 @@

                  Arguments

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

                  Arguments

                  - - - - - - - - @@ -216,325 +201,253 @@

                  Calls

                  - - + + proc~~elevate_degree~3~~CallsGraph - + proc~elevate_degree~3 - -nurbs_surface%elevate_degree - - - -none~get_knot~3 - - -nurbs_surface%get_knot - - - - - -proc~elevate_degree~3->none~get_knot~3 - - + +nurbs_curve%elevate_degree - + none~set~3 - - -nurbs_surface%set + + +nurbs_curve%set - + proc~elevate_degree~3->none~set~3 - - + + - + proc~elevate_degree_a_5_9 - - -elevate_degree_A_5_9 + + +elevate_degree_A_5_9 - + proc~elevate_degree~3->proc~elevate_degree_a_5_9 - - + + - + proc~is_rational~3 - - -nurbs_surface%is_rational + + +nurbs_curve%is_rational - + proc~elevate_degree~3->proc~is_rational~3 - - - - - -proc~get_knot_all~3 - - -nurbs_surface%get_knot_all - - - - - -none~get_knot~3->proc~get_knot_all~3 - - - - - -proc~get_knoti~3 - - -nurbs_surface%get_knoti - - - - - -none~get_knot~3->proc~get_knoti~3 - - + + - + proc~set1~3 - - -nurbs_surface%set1 + + +nurbs_curve%set1 - + none~set~3->proc~set1~3 - - + + - + proc~set2~3 - - -nurbs_surface%set2 + + +nurbs_curve%set2 - + none~set~3->proc~set2~3 - - + + - + proc~set3~3 - - -nurbs_surface%set3 + + +nurbs_curve%set3 - + none~set~3->proc~set3~3 - - + + - + interface~compute_multiplicity - - -compute_multiplicity + + +compute_multiplicity - + proc~elevate_degree_a_5_9->interface~compute_multiplicity - - + + - + proc~bincoeff - - -bincoeff + + +bincoeff - + proc~elevate_degree_a_5_9->proc~bincoeff - - + + - + proc~compute_multiplicity1 - - -compute_multiplicity1 + + +compute_multiplicity1 - + interface~compute_multiplicity->proc~compute_multiplicity1 - - + + - + proc~compute_multiplicity2 - - -compute_multiplicity2 + + +compute_multiplicity2 - + interface~compute_multiplicity->proc~compute_multiplicity2 - - + + - + proc~factln - - -factln + + +factln - + proc~bincoeff->proc~factln - - + + - + proc~cmp_degree~3 - - -nurbs_surface%cmp_degree + + +nurbs_curve%cmp_degree - + proc~set1~3->proc~cmp_degree~3 - - - - - -proc~cmp_nc~3 - - -nurbs_surface%cmp_nc - - - - - -proc~set1~3->proc~cmp_nc~3 - - - - - -proc~set2~3->proc~cmp_nc~3 - - + + - + proc~compute_knot_vector - - -compute_knot_vector + + +compute_knot_vector - + proc~set2~3->proc~compute_knot_vector - - + + - + proc~set3~3->proc~cmp_degree~3 - - + + - + proc~get_multiplicity~3 - - -nurbs_surface%get_multiplicity + + +nurbs_curve%get_multiplicity - + proc~cmp_degree~3->proc~get_multiplicity~3 - - - - - -proc~cmp_nc~3->interface~compute_multiplicity - - + + - + proc~repelem - - -repelem + + +repelem - + proc~compute_knot_vector->proc~repelem - - + + - + proc~get_multiplicity~3->interface~compute_multiplicity - - + + @@ -634,31 +547,31 @@

                  Called by

                  - + proc~~elevate_degree~3~~CalledByGraph - + proc~elevate_degree~3 - -nurbs_surface%elevate_degree + +nurbs_curve%elevate_degree - + -program~example3_surface - - -example3_surface +program~example1_curve + + +example1_curve - + -program~example3_surface->proc~elevate_degree~3 - - +program~example1_curve->proc~elevate_degree~3 + + @@ -774,7 +687,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/export_xc.html b/proc/export_xc.html index 318c69753..d377e5999 100644 --- a/proc/export_xc.html +++ b/proc/export_xc.html @@ -615,7 +615,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/export_xc~2.html b/proc/export_xc~2.html index 33dcae6f4..7b1529bd3 100644 --- a/proc/export_xc~2.html +++ b/proc/export_xc~2.html @@ -83,15 +83,15 @@

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

                  private impure subroutine export_Xc(this, filename)

                  Type Bound

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

                  - - class(nurbs_surface), + + class(nurbs_curve), intent(inout) @@ -173,22 +173,7 @@

                  Arguments

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

                  Arguments

                  - - class(nurbs_curve), + + class(nurbs_surface), intent(in) @@ -201,91 +201,91 @@

                  Calls

                  - - + + proc~~export_xc~2~~CallsGraph - + proc~export_xc~2 - -nurbs_curve%export_Xc + +nurbs_surface%export_Xc proc~cmp_elem_xc_vis~2 - - -nurbs_curve%cmp_elem_Xc_vis + + +nurbs_surface%cmp_elem_Xc_vis proc~export_xc~2->proc~cmp_elem_xc_vis~2 - - + + interface~elemconn_c0 - -elemConn_C0 + +elemConn_C0 proc~cmp_elem_xc_vis~2->interface~elemconn_c0 - - + + proc~cmp_elemconn_c0_l - -cmp_elemConn_C0_L + +cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l - - + + proc~cmp_elemconn_c0_s - -cmp_elemConn_C0_S + +cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s - - + + proc~cmp_elemconn_c0_v - -cmp_elemConn_C0_V + +cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v - - + + @@ -385,91 +385,106 @@

                  Called by

                  - - + + proc~~export_xc~2~~CalledByGraph - + proc~export_xc~2 - -nurbs_curve%export_Xc + +nurbs_surface%export_Xc - + -program~example1_curve - - -example1_curve +program~example3_surface + + +example3_surface - + -program~example1_curve->proc~export_xc~2 - - +program~example3_surface->proc~export_xc~2 + + - + -program~example_nurbs_curve - - -example_nurbs_curve +program~example_nurbs_surface + + +example_nurbs_surface - + -program~example_nurbs_curve->proc~export_xc~2 - - +program~example_nurbs_surface->proc~export_xc~2 + + - + -program~shape_c_1d - - -shape_C_1d +program~shape_c_2d + + +shape_C_2d - + -program~shape_c_1d->proc~export_xc~2 - - +program~shape_c_2d->proc~export_xc~2 + + - + -program~shape_circle - - -shape_circle +program~shape_half_ring_2d + + +shape_half_ring_2d - + -program~shape_circle->proc~export_xc~2 - - +program~shape_half_ring_2d->proc~export_xc~2 + + - + -program~shape_half_circle - - -shape_half_circle +program~shape_ring_2d + + +shape_ring_2d - + -program~shape_half_circle->proc~export_xc~2 - - +program~shape_ring_2d->proc~export_xc~2 + + + + + +program~shape_tetragon + + +shape_tetragon + + + + + +program~shape_tetragon->proc~export_xc~2 + + @@ -585,7 +600,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/export_xc~3.html b/proc/export_xc~3.html index 7c99c64e2..0c449417f 100644 --- a/proc/export_xc~3.html +++ b/proc/export_xc~3.html @@ -83,15 +83,15 @@

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

                  private impure subroutine export_Xc(this, filename)

                  Type Bound

                  -

                  nurbs_surface

                  +

                  nurbs_curve

                  Arguments

                  @@ -158,8 +158,8 @@

                  Arguments

                  - - class(nurbs_surface), + + class(nurbs_curve), intent(in) @@ -201,91 +201,91 @@

                  Calls

                  - - + + proc~~export_xc~3~~CallsGraph - + proc~export_xc~3 - -nurbs_surface%export_Xc + +nurbs_curve%export_Xc proc~cmp_elem_xc_vis~3 - - -nurbs_surface%cmp_elem_Xc_vis + + +nurbs_curve%cmp_elem_Xc_vis proc~export_xc~3->proc~cmp_elem_xc_vis~3 - - + + interface~elemconn_c0 - -elemConn_C0 + +elemConn_C0 proc~cmp_elem_xc_vis~3->interface~elemconn_c0 - - + + proc~cmp_elemconn_c0_l - -cmp_elemConn_C0_L + +cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l - - + + proc~cmp_elemconn_c0_s - -cmp_elemConn_C0_S + +cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s - - + + proc~cmp_elemconn_c0_v - -cmp_elemConn_C0_V + +cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v - - + + @@ -385,106 +385,91 @@

                  Called by

                  - - + + proc~~export_xc~3~~CalledByGraph - + proc~export_xc~3 - -nurbs_surface%export_Xc + +nurbs_curve%export_Xc - + -program~example3_surface - - -example3_surface +program~example1_curve + + +example1_curve - + -program~example3_surface->proc~export_xc~3 - - +program~example1_curve->proc~export_xc~3 + + - + -program~example_nurbs_surface - - -example_nurbs_surface +program~example_nurbs_curve + + +example_nurbs_curve - + -program~example_nurbs_surface->proc~export_xc~3 - - +program~example_nurbs_curve->proc~export_xc~3 + + - + -program~shape_c_2d - - -shape_C_2d +program~shape_c_1d + + +shape_C_1d - + -program~shape_c_2d->proc~export_xc~3 - - +program~shape_c_1d->proc~export_xc~3 + + - + -program~shape_half_ring_2d - - -shape_half_ring_2d +program~shape_circle + + +shape_circle - + -program~shape_half_ring_2d->proc~export_xc~3 - - +program~shape_circle->proc~export_xc~3 + + - + -program~shape_ring_2d - - -shape_ring_2d +program~shape_half_circle + + +shape_half_circle - + -program~shape_ring_2d->proc~export_xc~3 - - - - - -program~shape_tetragon - - -shape_tetragon - - - - - -program~shape_tetragon->proc~export_xc~3 - - +program~shape_half_circle->proc~export_xc~3 + + @@ -600,7 +585,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/export_xg.html b/proc/export_xg.html index cbef371c6..da6f8ec9f 100644 --- a/proc/export_xg.html +++ b/proc/export_xg.html @@ -615,7 +615,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/export_xg~2.html b/proc/export_xg~2.html index 486da1a4d..0da16acf0 100644 --- a/proc/export_xg~2.html +++ b/proc/export_xg~2.html @@ -83,15 +83,15 @@

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

                  private impure subroutine export_Xg(this, filename)

                  Type Bound

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

                  @@ -158,8 +158,8 @@

                  Arguments

                  - - class(nurbs_curve), + + class(nurbs_surface), intent(in) @@ -201,91 +201,91 @@

                  Calls

                  - - + + proc~~export_xg~2~~CallsGraph - + proc~export_xg~2 - -nurbs_curve%export_Xg + +nurbs_surface%export_Xg proc~cmp_elem_xg_vis~2 - - -nurbs_curve%cmp_elem_Xg_vis + + +nurbs_surface%cmp_elem_Xg_vis proc~export_xg~2->proc~cmp_elem_xg_vis~2 - - + + interface~elemconn_c0 - -elemConn_C0 + +elemConn_C0 proc~cmp_elem_xg_vis~2->interface~elemconn_c0 - - + + proc~cmp_elemconn_c0_l - -cmp_elemConn_C0_L + +cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l - - + + proc~cmp_elemconn_c0_s - -cmp_elemConn_C0_S + +cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s - - + + proc~cmp_elemconn_c0_v - -cmp_elemConn_C0_V + +cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v - - + + @@ -385,91 +385,106 @@

                  Called by

                  - - + + proc~~export_xg~2~~CalledByGraph - + proc~export_xg~2 - -nurbs_curve%export_Xg + +nurbs_surface%export_Xg - + -program~example1_curve - - -example1_curve +program~example3_surface + + +example3_surface - + -program~example1_curve->proc~export_xg~2 - - +program~example3_surface->proc~export_xg~2 + + - + -program~example_nurbs_curve - - -example_nurbs_curve +program~example_nurbs_surface + + +example_nurbs_surface - + -program~example_nurbs_curve->proc~export_xg~2 - - +program~example_nurbs_surface->proc~export_xg~2 + + - + -program~shape_c_1d - - -shape_C_1d +program~shape_c_2d + + +shape_C_2d - + -program~shape_c_1d->proc~export_xg~2 - - +program~shape_c_2d->proc~export_xg~2 + + - + -program~shape_circle - - -shape_circle +program~shape_half_ring_2d + + +shape_half_ring_2d - + -program~shape_circle->proc~export_xg~2 - - +program~shape_half_ring_2d->proc~export_xg~2 + + - + -program~shape_half_circle - - -shape_half_circle +program~shape_ring_2d + + +shape_ring_2d - + -program~shape_half_circle->proc~export_xg~2 - - +program~shape_ring_2d->proc~export_xg~2 + + + + + +program~shape_tetragon + + +shape_tetragon + + + + + +program~shape_tetragon->proc~export_xg~2 + + @@ -585,7 +600,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/export_xg~3.html b/proc/export_xg~3.html index d94a8c88b..6a0cc0a0e 100644 --- a/proc/export_xg~3.html +++ b/proc/export_xg~3.html @@ -83,15 +83,15 @@

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

                  private impure subroutine export_Xg(this, filename)

                  Type Bound

                  -

                  nurbs_surface

                  +

                  nurbs_curve

                  Arguments

                  @@ -158,8 +158,8 @@

                  Arguments

                  @@ -250,24 +250,24 @@

                  Called by

                  proc~elevate_degree~2 - - -nurbs_curve%elevate_degree + + +nurbs_surface%elevate_degree proc~elevate_degree~2->proc~elevate_degree_a_5_9 - - + + proc~elevate_degree~3 - - -nurbs_surface%elevate_degree + + +nurbs_curve%elevate_degree @@ -281,31 +281,31 @@

                  Called by

                  program~example1_curve - -example1_curve + +example1_curve - - -program~example1_curve->proc~elevate_degree~2 - - + + +program~example1_curve->proc~elevate_degree~3 + + program~example3_surface - -example3_surface + +example3_surface - - -program~example3_surface->proc~elevate_degree~3 - - + + +program~example3_surface->proc~elevate_degree~2 + + @@ -440,7 +440,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/finalize.html b/proc/finalize.html index 07205c60a..776be94a9 100644 --- a/proc/finalize.html +++ b/proc/finalize.html @@ -452,7 +452,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/finalize~2.html b/proc/finalize~2.html index f1912a79b..79f876439 100644 --- a/proc/finalize~2.html +++ b/proc/finalize~2.html @@ -78,20 +78,20 @@

                  finalize
                • 11 statements + title=" 0.2% of total for procedures.">14 statements
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure subroutine finalize(this)

                  Type Bound

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

                  - - class(nurbs_surface), + + class(nurbs_curve), intent(in) @@ -201,91 +201,91 @@

                  Calls

                  - - + + proc~~export_xg~3~~CallsGraph - + proc~export_xg~3 - -nurbs_surface%export_Xg + +nurbs_curve%export_Xg proc~cmp_elem_xg_vis~3 - - -nurbs_surface%cmp_elem_Xg_vis + + +nurbs_curve%cmp_elem_Xg_vis proc~export_xg~3->proc~cmp_elem_xg_vis~3 - - + + interface~elemconn_c0 - -elemConn_C0 + +elemConn_C0 proc~cmp_elem_xg_vis~3->interface~elemconn_c0 - - + + proc~cmp_elemconn_c0_l - -cmp_elemConn_C0_L + +cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l - - + + proc~cmp_elemconn_c0_s - -cmp_elemConn_C0_S + +cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s - - + + proc~cmp_elemconn_c0_v - -cmp_elemConn_C0_V + +cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v - - + + @@ -385,106 +385,91 @@

                  Called by

                  - - + + proc~~export_xg~3~~CalledByGraph - + proc~export_xg~3 - -nurbs_surface%export_Xg + +nurbs_curve%export_Xg - + -program~example3_surface - - -example3_surface +program~example1_curve + + +example1_curve - + -program~example3_surface->proc~export_xg~3 - - +program~example1_curve->proc~export_xg~3 + + - + -program~example_nurbs_surface - - -example_nurbs_surface +program~example_nurbs_curve + + +example_nurbs_curve - + -program~example_nurbs_surface->proc~export_xg~3 - - +program~example_nurbs_curve->proc~export_xg~3 + + - + -program~shape_c_2d - - -shape_C_2d +program~shape_c_1d + + +shape_C_1d - + -program~shape_c_2d->proc~export_xg~3 - - +program~shape_c_1d->proc~export_xg~3 + + - + -program~shape_half_ring_2d - - -shape_half_ring_2d +program~shape_circle + + +shape_circle - + -program~shape_half_ring_2d->proc~export_xg~3 - - +program~shape_circle->proc~export_xg~3 + + - + -program~shape_ring_2d - - -shape_ring_2d +program~shape_half_circle + + +shape_half_circle - + -program~shape_ring_2d->proc~export_xg~3 - - - - - -program~shape_tetragon - - -shape_tetragon - - - - - -program~shape_tetragon->proc~export_xg~3 - - +program~shape_half_circle->proc~export_xg~3 + + @@ -600,7 +585,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/factln.html b/proc/factln.html index 03139a5a7..cb434c30b 100644 --- a/proc/factln.html +++ b/proc/factln.html @@ -156,7 +156,7 @@

                  Arguments

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

                  Arguments

                  - - class(nurbs_curve), + + class(nurbs_surface), intent(inout) @@ -186,127 +186,202 @@

                  Called by

                  - - + + proc~~finalize~2~~CalledByGraph - + proc~finalize~2 - -nurbs_curve%finalize + +nurbs_surface%finalize proc~nearest_point2~2 - - -nurbs_curve%nearest_point2 + + +nurbs_surface%nearest_point2 proc~nearest_point2~2->proc~finalize~2 - - + + - + -program~example1_curve - - -example1_curve +program~example3_surface + + +example3_surface - + -program~example1_curve->proc~finalize~2 - - +program~example3_surface->proc~finalize~2 + + - + -program~example_nurbs_curve - - -example_nurbs_curve +program~example_nurbs_surface + + +example_nurbs_surface - + -program~example_nurbs_curve->proc~finalize~2 - - +program~example_nurbs_surface->proc~finalize~2 + + - + -program~nearest_point_1d - - -nearest_point_1d +program~example_ppm1 + + +example_ppm1 - + -program~nearest_point_1d->proc~finalize~2 - - +program~example_ppm1->proc~finalize~2 + + - - -program~nearest_point_1d->proc~nearest_point2~2 - - - - + -program~shape_c_1d - - -shape_C_1d +program~example_ppm2 + + +example_ppm2 - + -program~shape_c_1d->proc~finalize~2 - - +program~example_ppm2->proc~finalize~2 + + - + -program~shape_circle - - -shape_circle +program~example_ppm3 + + +example_ppm3 - + -program~shape_circle->proc~finalize~2 - - +program~example_ppm3->proc~finalize~2 + + - + -program~shape_half_circle - - -shape_half_circle +program~nearest_point_2d + + +nearest_point_2d - + -program~shape_half_circle->proc~finalize~2 - - +program~nearest_point_2d->proc~finalize~2 + + + + + +program~nearest_point_2d->proc~nearest_point2~2 + + + + + +program~nearest_point_2d_bench + + +nearest_point_2d_bench + + + + + +program~nearest_point_2d_bench->proc~finalize~2 + + + + + +program~shape_c_2d + + +shape_C_2d + + + + + +program~shape_c_2d->proc~finalize~2 + + + + + +program~shape_half_ring_2d + + +shape_half_ring_2d + + + + + +program~shape_half_ring_2d->proc~finalize~2 + + + + + +program~shape_ring_2d + + +shape_ring_2d + + + + + +program~shape_ring_2d->proc~finalize~2 + + + + + +program~shape_tetragon + + +shape_tetragon + + + + + +program~shape_tetragon->proc~finalize~2 + + @@ -422,7 +497,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/finalize~3.html b/proc/finalize~3.html index 46f04319f..9525a47b9 100644 --- a/proc/finalize~3.html +++ b/proc/finalize~3.html @@ -78,20 +78,20 @@

                  finalize
                • 14 statements + title=" 0.2% of total for procedures.">11 statements
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure subroutine finalize(this)

                  Type Bound

                  -

                  nurbs_surface

                  +

                  nurbs_curve

                  Arguments

                  @@ -158,8 +158,8 @@

                  Arguments

                  @@ -171,7 +171,7 @@

                  Arguments

                  @@ -186,7 +186,7 @@

                  Arguments

                  @@ -201,7 +201,7 @@

                  Arguments

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

                  Arguments

                  Return Value - + integer

                  @@ -265,24 +265,24 @@

                  Called by

                  proc~insert_knots~2 - - -nurbs_curve%insert_knots + + +nurbs_surface%insert_knots proc~insert_knots~2->proc~findspan - - + + proc~insert_knots~3 - - -nurbs_surface%insert_knots + + +nurbs_curve%insert_knots @@ -310,24 +310,24 @@

                  Called by

                  proc~remove_knots~2 - - -nurbs_curve%remove_knots + + +nurbs_surface%remove_knots proc~remove_knots~2->proc~findspan - - + + proc~remove_knots~3 - - -nurbs_surface%remove_knots + + +nurbs_curve%remove_knots @@ -341,43 +341,43 @@

                  Called by

                  program~example1_curve - -example1_curve + +example1_curve - - -program~example1_curve->proc~insert_knots~2 - - + + +program~example1_curve->proc~insert_knots~3 + + - - -program~example1_curve->proc~remove_knots~2 - - + + +program~example1_curve->proc~remove_knots~3 + + program~example3_surface - -example3_surface + +example3_surface - - -program~example3_surface->proc~insert_knots~3 - - + + +program~example3_surface->proc~insert_knots~2 + + - - -program~example3_surface->proc~remove_knots~3 - - + + +program~example3_surface->proc~remove_knots~2 + + @@ -514,7 +514,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/generate_xc.html b/proc/generate_xc.html index be18acad7..b19ffc11c 100644 --- a/proc/generate_xc.html +++ b/proc/generate_xc.html @@ -77,20 +77,20 @@

                  generate_Xc
                • 19 statements + title=" 0.3% of total for procedures.">18 statements
                • - Source File + Source File
                • @@ -136,7 +136,7 @@

                  Contents

                  -

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

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

                  @@ -155,7 +155,7 @@

                  Arguments

                  @@ -163,29 +163,29 @@

                  Arguments

                  - + - + @@ -193,7 +193,22 @@

                  Arguments

                  - + + + + + + + + + @@ -220,31 +235,31 @@

                  Called by

                  - + proc~~generate_xc~~CalledByGraph - + proc~generate_xc - -generate_Xc + +generate_Xc - + -program~example3_surface - - -example3_surface +program~example_nurbs_curve + + +example_nurbs_curve - + -program~example3_surface->proc~generate_xc - - +program~example_nurbs_curve->proc~generate_xc + + @@ -360,7 +375,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/generate_xc~2.html b/proc/generate_xc~2.html index 6d182e51e..717385fd5 100644 --- a/proc/generate_xc~2.html +++ b/proc/generate_xc~2.html @@ -155,7 +155,7 @@

                  Arguments

                  @@ -170,7 +170,7 @@

                  Arguments

                  @@ -185,7 +185,7 @@

                  Arguments

                  @@ -360,7 +360,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/generate_xc~3.html b/proc/generate_xc~3.html index c9a790515..546b1dd92 100644 --- a/proc/generate_xc~3.html +++ b/proc/generate_xc~3.html @@ -77,20 +77,20 @@

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

                  Contents

                  -

                  function generate_Xc(L) result(control_points) +

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

                  @@ -155,7 +155,37 @@

                  Arguments

                  + + + + + + + + + + + + + + + + @@ -163,7 +193,7 @@

                  Arguments

                  - + @@ -201,18 +231,18 @@

                  Called by

                  generate_Xc - + -program~example3_volume - +program~example3_surface + -example3_volume +example3_surface - + -program~example3_volume->proc~generate_xc~3 +program~example3_surface->proc~generate_xc~3 @@ -330,7 +360,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/generate_xc~4.html b/proc/generate_xc~4.html index c9f4ab510..53d2dcdd8 100644 --- a/proc/generate_xc~4.html +++ b/proc/generate_xc~4.html @@ -77,20 +77,20 @@

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

                  Contents

                  -

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

                  function generate_Xc(L) result(control_points)

                  @@ -155,22 +155,7 @@

                  Arguments

                  - - - - - - - - @@ -178,37 +163,7 @@

                  Arguments

                  - - - - - - - - - - - - - - - - - + @@ -235,31 +190,31 @@

                  Called by

                  - + proc~~generate_xc~4~~CalledByGraph - + proc~generate_xc~4 - -generate_Xc + +generate_Xc - + -program~example_nurbs_curve - - -example_nurbs_curve +program~example3_volume + + +example3_volume - + -program~example_nurbs_curve->proc~generate_xc~4 - - +program~example3_volume->proc~generate_xc~4 + + @@ -375,7 +330,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/generate_xc~5.html b/proc/generate_xc~5.html index 27f65070b..f7bc01caa 100644 --- a/proc/generate_xc~5.html +++ b/proc/generate_xc~5.html @@ -330,7 +330,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/get_continuity.html b/proc/get_continuity.html index de480b650..60e470388 100644 --- a/proc/get_continuity.html +++ b/proc/get_continuity.html @@ -378,7 +378,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/get_continuity~2.html b/proc/get_continuity~2.html index 747f4a4a2..484c308d1 100644 --- a/proc/get_continuity~2.html +++ b/proc/get_continuity~2.html @@ -78,20 +78,20 @@

                  get_continuity
                • 9 statements + title=" 0.3% of total for procedures.">20 statements
                • - Source File + Source File
                • @@ -137,13 +137,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(inout) @@ -186,202 +186,127 @@

                  Called by

                  - - + + proc~~finalize~3~~CalledByGraph - + proc~finalize~3 - -nurbs_surface%finalize + +nurbs_curve%finalize proc~nearest_point2~3 - - -nurbs_surface%nearest_point2 + + +nurbs_curve%nearest_point2 proc~nearest_point2~3->proc~finalize~3 - - + + - + -program~example3_surface - - -example3_surface +program~example1_curve + + +example1_curve - + -program~example3_surface->proc~finalize~3 - - +program~example1_curve->proc~finalize~3 + + - + -program~example_nurbs_surface - - -example_nurbs_surface +program~example_nurbs_curve + + +example_nurbs_curve - + -program~example_nurbs_surface->proc~finalize~3 - - +program~example_nurbs_curve->proc~finalize~3 + + - + -program~example_ppm1 - - -example_ppm1 +program~nearest_point_1d + + +nearest_point_1d - + -program~example_ppm1->proc~finalize~3 - - +program~nearest_point_1d->proc~finalize~3 + + - + + +program~nearest_point_1d->proc~nearest_point2~3 + + + + -program~example_ppm2 - - -example_ppm2 +program~shape_c_1d + + +shape_C_1d - + -program~example_ppm2->proc~finalize~3 - - +program~shape_c_1d->proc~finalize~3 + + - + -program~example_ppm3 - - -example_ppm3 +program~shape_circle + + +shape_circle - + -program~example_ppm3->proc~finalize~3 - - +program~shape_circle->proc~finalize~3 + + - + -program~nearest_point_2d - - -nearest_point_2d +program~shape_half_circle + + +shape_half_circle - + -program~nearest_point_2d->proc~finalize~3 - - - - - -program~nearest_point_2d->proc~nearest_point2~3 - - - - - -program~nearest_point_2d_bench - - -nearest_point_2d_bench - - - - - -program~nearest_point_2d_bench->proc~finalize~3 - - - - - -program~shape_c_2d - - -shape_C_2d - - - - - -program~shape_c_2d->proc~finalize~3 - - - - - -program~shape_half_ring_2d - - -shape_half_ring_2d - - - - - -program~shape_half_ring_2d->proc~finalize~3 - - - - - -program~shape_ring_2d - - -shape_ring_2d - - - - - -program~shape_ring_2d->proc~finalize~3 - - - - - -program~shape_tetragon - - -shape_tetragon - - - - - -program~shape_tetragon->proc~finalize~3 - - +program~shape_half_circle->proc~finalize~3 + + @@ -497,7 +422,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/findspan.html b/proc/findspan.html index 1a0b0b9a4..f0aeaf3aa 100644 --- a/proc/findspan.html +++ b/proc/findspan.html @@ -156,7 +156,7 @@

                  Arguments

                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + real(kind=rk), intent(in)
                  - + real(kind=rk), intent(in),
                  - + integer, intent(in) ::num_rowsnum_coils
                  - - integer, + + real(kind=rk), intent(in) ::num_colsradius
                  - + real(kind=rk), intent(in) ::peak_heightheight + +
                  + + integer, + intent(in) + + ::num_points_per_coil
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + real(kind=rk), intent(in)
                  - + + integer, + intent(in) + + ::num_rows + +
                  + + integer, + intent(in) + + ::num_cols + +
                  + real(kind=rk), intent(in) ::Lpeak_height
                  - - integer, - intent(in) - - ::num_coils - -
                  - + real(kind=rk), intent(in) ::radius - -
                  - - real(kind=rk), - intent(in) - - ::height - -
                  - - integer, - intent(in) - - ::num_points_per_coilL
                  @@ -158,8 +158,8 @@

                  Arguments

                  + + + + + + + + @@ -176,7 +191,7 @@

                  Arguments

                  Return Value - + integer, allocatable, (:)

                  @@ -193,61 +208,61 @@

                  Calls

                  - + proc~~get_continuity~2~~CallsGraph - + proc~get_continuity~2 - -nurbs_curve%get_continuity + +nurbs_surface%get_continuity interface~compute_multiplicity - -compute_multiplicity + +compute_multiplicity proc~get_continuity~2->interface~compute_multiplicity - - + + proc~compute_multiplicity1 - -compute_multiplicity1 + +compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 - - + + proc~compute_multiplicity2 - -compute_multiplicity2 + +compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 - - + + @@ -363,7 +378,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/get_continuity~3.html b/proc/get_continuity~3.html index bb6f011b6..e2918dd06 100644 --- a/proc/get_continuity~3.html +++ b/proc/get_continuity~3.html @@ -78,20 +78,20 @@

                  get_continuity
                • 20 statements + title=" 0.1% of total for procedures.">9 statements
                • - Source File + Source File
                • @@ -137,13 +137,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(nurbs_surface), intent(in) @@ -169,6 +169,21 @@

                  Arguments

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

                  Arguments

                  - - - - - - - - @@ -208,61 +193,61 @@

                  Calls

                  - + proc~~get_continuity~3~~CallsGraph - + proc~get_continuity~3 - -nurbs_surface%get_continuity + +nurbs_curve%get_continuity interface~compute_multiplicity - -compute_multiplicity + +compute_multiplicity proc~get_continuity~3->interface~compute_multiplicity - - + + proc~compute_multiplicity1 - -compute_multiplicity1 + +compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 - - + + proc~compute_multiplicity2 - -compute_multiplicity2 + +compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 - - + + @@ -378,7 +363,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/get_degree.html b/proc/get_degree.html index 1491e0285..613bf7a4b 100644 --- a/proc/get_degree.html +++ b/proc/get_degree.html @@ -158,7 +158,7 @@

                  Arguments

                  @@ -176,7 +176,7 @@

                  Arguments

                  Return Value - + integer

                  @@ -333,7 +333,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/get_degree_all.html b/proc/get_degree_all.html index 469b0f026..5d245672f 100644 --- a/proc/get_degree_all.html +++ b/proc/get_degree_all.html @@ -348,7 +348,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/get_degree_all~2.html b/proc/get_degree_all~2.html index 45b59d4c8..ecfaa08a2 100644 --- a/proc/get_degree_all~2.html +++ b/proc/get_degree_all~2.html @@ -158,7 +158,7 @@

                  Arguments

                  @@ -176,7 +176,7 @@

                  Arguments

                  Return Value - + integer, (2)

                  @@ -204,18 +204,18 @@

                  Called by

                  nurbs_surface%get_degree_all - + -none~get_degree~3 - +none~get_degree~2 + nurbs_surface%get_degree - + -none~get_degree~3->proc~get_degree_all~2 +none~get_degree~2->proc~get_degree_all~2 @@ -228,9 +228,9 @@

                  Called by

                  - + -program~example3_surface->none~get_degree~3 +program~example3_surface->none~get_degree~2 @@ -348,7 +348,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/get_degree_dir.html b/proc/get_degree_dir.html index 5e977d167..eae660870 100644 --- a/proc/get_degree_dir.html +++ b/proc/get_degree_dir.html @@ -363,7 +363,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/get_degree_dir~2.html b/proc/get_degree_dir~2.html index d311cea9b..259fa21f0 100644 --- a/proc/get_degree_dir~2.html +++ b/proc/get_degree_dir~2.html @@ -158,7 +158,7 @@

                  Arguments

                  @@ -173,7 +173,7 @@

                  Arguments

                  @@ -191,7 +191,7 @@

                  Arguments

                  Return Value - + integer

                  @@ -219,18 +219,18 @@

                  Called by

                  nurbs_surface%get_degree_dir - + -none~get_degree~3 - +none~get_degree~2 + nurbs_surface%get_degree - + -none~get_degree~3->proc~get_degree_dir~2 +none~get_degree~2->proc~get_degree_dir~2 @@ -243,9 +243,9 @@

                  Called by

                  - + -program~example3_surface->none~get_degree~3 +program~example3_surface->none~get_degree~2 @@ -363,7 +363,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/get_elem.html b/proc/get_elem.html index ef2f7172c..55c4e9c1c 100644 --- a/proc/get_elem.html +++ b/proc/get_elem.html @@ -212,7 +212,7 @@

                  Return Value

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/get_elem_xc_vis.html b/proc/get_elem_xc_vis.html index 86e46f8d4..8b7a206f9 100644 --- a/proc/get_elem_xc_vis.html +++ b/proc/get_elem_xc_vis.html @@ -212,7 +212,7 @@

                  Return Value

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/get_elem_xc_vis~2.html b/proc/get_elem_xc_vis~2.html index f356c7e3a..960a889ae 100644 --- a/proc/get_elem_xc_vis~2.html +++ b/proc/get_elem_xc_vis~2.html @@ -83,15 +83,15 @@

                  get_elem_Xc_vis
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure function get_elem_Xc_vis(this) result(elemConn)

                  Type Bound

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

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

                  Arguments

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

                  Arguments

                  - - class(nurbs_curve), + + class(nurbs_surface), intent(in) @@ -176,7 +176,7 @@

                  Arguments

                  Return Value - + integer, allocatable, (:,:)

                  @@ -212,7 +212,7 @@

                  Return Value

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/get_elem_xc_vis~3.html b/proc/get_elem_xc_vis~3.html index c5fb7bdbc..f730aa132 100644 --- a/proc/get_elem_xc_vis~3.html +++ b/proc/get_elem_xc_vis~3.html @@ -83,15 +83,15 @@

                  get_elem_Xc_vis
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure function get_elem_Xc_vis(this) result(elemConn)

                  Type Bound

                  -

                  nurbs_surface

                  +

                  nurbs_curve

                  Arguments

                  @@ -158,8 +158,8 @@

                  Arguments

                  - - class(nurbs_surface), + + class(nurbs_curve), intent(in) @@ -212,7 +212,7 @@

                  Return Value

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/get_elem_xg_vis.html b/proc/get_elem_xg_vis.html index 09305c1f2..75b383912 100644 --- a/proc/get_elem_xg_vis.html +++ b/proc/get_elem_xg_vis.html @@ -212,7 +212,7 @@

                  Return Value

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/get_elem_xg_vis~2.html b/proc/get_elem_xg_vis~2.html index d3009fdf5..13b003c38 100644 --- a/proc/get_elem_xg_vis~2.html +++ b/proc/get_elem_xg_vis~2.html @@ -83,15 +83,15 @@

                  get_elem_Xg_vis
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure function get_elem_Xg_vis(this) result(elemConn)

                  Type Bound

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

                  @@ -158,8 +158,8 @@

                  Arguments

                  - - class(nurbs_curve), + + class(nurbs_surface), intent(in) @@ -176,7 +176,7 @@

                  Arguments

                  Return Value - + integer, allocatable, (:,:)

                  @@ -212,7 +212,7 @@

                  Return Value

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/get_elem_xg_vis~3.html b/proc/get_elem_xg_vis~3.html index 6bf111d28..e0ec311ed 100644 --- a/proc/get_elem_xg_vis~3.html +++ b/proc/get_elem_xg_vis~3.html @@ -83,15 +83,15 @@

                  get_elem_Xg_vis
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure function get_elem_Xg_vis(this) result(elemConn)

                  Type Bound

                  -

                  nurbs_surface

                  +

                  nurbs_curve

                  Arguments

                  @@ -158,8 +158,8 @@

                  Arguments

                  - - class(nurbs_surface), + + class(nurbs_curve), intent(in) @@ -212,7 +212,7 @@

                  Return Value

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/get_elem~2.html b/proc/get_elem~2.html index f94b4132e..9eaa7a0fb 100644 --- a/proc/get_elem~2.html +++ b/proc/get_elem~2.html @@ -83,15 +83,15 @@

                  get_elem
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure function get_elem(this) result(elemConn)

                  Type Bound

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

                  @@ -158,8 +158,8 @@

                  Arguments

                  - - class(nurbs_curve), + + class(nurbs_surface), intent(in) @@ -176,7 +176,7 @@

                  Arguments

                  Return Value - + integer, allocatable, (:,:)

                  @@ -212,7 +212,7 @@

                  Return Value

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/get_elem~3.html b/proc/get_elem~3.html index 11003d700..933b8ffaa 100644 --- a/proc/get_elem~3.html +++ b/proc/get_elem~3.html @@ -83,15 +83,15 @@

                  get_elem
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure function get_elem(this) result(elemConn)

                  Type Bound

                  -

                  nurbs_surface

                  +

                  nurbs_curve

                  Arguments

                  @@ -158,8 +158,8 @@

                  Arguments

                  - - class(nurbs_surface), + + class(nurbs_curve), intent(in) @@ -212,7 +212,7 @@

                  Return Value

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/get_knot_all.html b/proc/get_knot_all.html index 72a13db3c..27c79d1ee 100644 --- a/proc/get_knot_all.html +++ b/proc/get_knot_all.html @@ -460,7 +460,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/get_knot_all~2.html b/proc/get_knot_all~2.html index 46f99d847..3ade0c554 100644 --- a/proc/get_knot_all~2.html +++ b/proc/get_knot_all~2.html @@ -78,20 +78,20 @@

                  get_knot_all
                • 9 statements + title=" 0.3% of total for procedures.">20 statements
                • - Source File + Source File
                • @@ -137,13 +137,13 @@

                  Contents

                  -

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

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

                  Type Bound

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

                  @@ -158,8 +158,8 @@

                  Arguments

                  + + + + + + + + @@ -176,7 +191,7 @@

                  Arguments

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

                  @@ -193,80 +208,162 @@

                  Called by

                  - - + + proc~~get_knot_all~2~~CalledByGraph - + proc~get_knot_all~2 - -nurbs_curve%get_knot_all + +nurbs_surface%get_knot_all none~get_knot~2 - - -nurbs_curve%get_knot + + +nurbs_surface%get_knot none~get_knot~2->proc~get_knot_all~2 - - + + - + +proc~elevate_degree~2 + + +nurbs_surface%elevate_degree + + + + + +proc~elevate_degree~2->none~get_knot~2 + + + + + +proc~insert_knots~2 + + +nurbs_surface%insert_knots + + + + + +proc~insert_knots~2->none~get_knot~2 + + + + + proc~modify_wc~2 - - -nurbs_curve%modify_Wc + + +nurbs_surface%modify_Wc - + proc~modify_wc~2->none~get_knot~2 - - + + - + proc~modify_xc~2 - - -nurbs_curve%modify_Xc + + +nurbs_surface%modify_Xc - + proc~modify_xc~2->none~get_knot~2 - - + + - - -program~example1_curve - - -example1_curve + + +proc~remove_knots~2 + + +nurbs_surface%remove_knots - - -program~example1_curve->none~get_knot~2 - - + + +proc~remove_knots~2->none~get_knot~2 + + + + + +program~example3_surface + + +example3_surface + + + + + +program~example3_surface->none~get_knot~2 + + + + + +program~example3_surface->proc~elevate_degree~2 + + + + + +program~example3_surface->proc~insert_knots~2 + + + + + +program~example3_surface->proc~remove_knots~2 + + + + + +program~example_ppm3 + + +example_ppm3 + + + + + +program~example_ppm3->proc~modify_xc~2 + + -
                  +

                  diff --git a/proc/get_knot_all~3.html b/proc/get_knot_all~3.html index 422203a72..8ad4575d7 100644 --- a/proc/get_knot_all~3.html +++ b/proc/get_knot_all~3.html @@ -78,20 +78,20 @@

                  get_knot_all
                • 20 statements + title=" 0.1% of total for procedures.">9 statements
                • - Source File + Source File
                • @@ -137,13 +137,13 @@

                  Contents

                  -

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

                  private pure function get_knot_all(this) result(knot)

                  Type Bound

                  -

                  nurbs_surface

                  +

                  nurbs_curve

                  Arguments

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

                  Arguments

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

                  Arguments

                  - - - - - - - - @@ -191,7 +176,7 @@

                  Arguments

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

                  @@ -208,162 +193,80 @@

                  Called by

                  - - + + proc~~get_knot_all~3~~CalledByGraph - + proc~get_knot_all~3 - -nurbs_surface%get_knot_all + +nurbs_curve%get_knot_all none~get_knot~3 - - -nurbs_surface%get_knot + + +nurbs_curve%get_knot none~get_knot~3->proc~get_knot_all~3 - - - - - -proc~elevate_degree~3 - - -nurbs_surface%elevate_degree - - - - - -proc~elevate_degree~3->none~get_knot~3 - - - - - -proc~insert_knots~3 - - -nurbs_surface%insert_knots - - - - - -proc~insert_knots~3->none~get_knot~3 - - + + - + proc~modify_wc~3 - - -nurbs_surface%modify_Wc + + +nurbs_curve%modify_Wc - + proc~modify_wc~3->none~get_knot~3 - - + + - + proc~modify_xc~3 - - -nurbs_surface%modify_Xc + + +nurbs_curve%modify_Xc - + proc~modify_xc~3->none~get_knot~3 - - - - - -proc~remove_knots~3 - - -nurbs_surface%remove_knots - - + + - - -proc~remove_knots~3->none~get_knot~3 - - - - - -program~example3_surface - - -example3_surface - - - - - -program~example3_surface->none~get_knot~3 - - - - - -program~example3_surface->proc~elevate_degree~3 - - - - - -program~example3_surface->proc~insert_knots~3 - - - - - -program~example3_surface->proc~remove_knots~3 - - - - - -program~example_ppm3 - - -example_ppm3 + + +program~example1_curve + + +example1_curve - - -program~example_ppm3->proc~modify_xc~3 - - + + +program~example1_curve->none~get_knot~3 + + -
                  +

                  diff --git a/proc/get_knoti.html b/proc/get_knoti.html index f22333da8..6dfff37fe 100644 --- a/proc/get_knoti.html +++ b/proc/get_knoti.html @@ -188,7 +188,7 @@

                  Arguments

                  @@ -475,7 +475,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/get_knoti~2.html b/proc/get_knoti~2.html index 92968649f..951795b6c 100644 --- a/proc/get_knoti~2.html +++ b/proc/get_knoti~2.html @@ -78,20 +78,20 @@

                  get_knoti
                • 14 statements + title=" 0.5% of total for procedures.">29 statements
                • - Source File + Source File
                • -

                  private pure function get_knoti(this, i) result(knot) +

                  private pure function get_knoti(this, dir, i) result(knot)

                  Type Bound

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

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

                  Arguments

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

                  Arguments

                  + + + + + + + + @@ -191,7 +206,7 @@

                  Arguments

                  Return Value - + real(kind=rk)

                  @@ -208,80 +223,162 @@

                  Called by

                  - - + + proc~~get_knoti~2~~CalledByGraph - + proc~get_knoti~2 - -nurbs_curve%get_knoti + +nurbs_surface%get_knoti none~get_knot~2 - - -nurbs_curve%get_knot + + +nurbs_surface%get_knot none~get_knot~2->proc~get_knoti~2 - - + + - + +proc~elevate_degree~2 + + +nurbs_surface%elevate_degree + + + + + +proc~elevate_degree~2->none~get_knot~2 + + + + + +proc~insert_knots~2 + + +nurbs_surface%insert_knots + + + + + +proc~insert_knots~2->none~get_knot~2 + + + + + proc~modify_wc~2 - - -nurbs_curve%modify_Wc + + +nurbs_surface%modify_Wc - + proc~modify_wc~2->none~get_knot~2 - - + + - + proc~modify_xc~2 - - -nurbs_curve%modify_Xc + + +nurbs_surface%modify_Xc - + proc~modify_xc~2->none~get_knot~2 - - + + - - -program~example1_curve - - -example1_curve + + +proc~remove_knots~2 + + +nurbs_surface%remove_knots - - -program~example1_curve->none~get_knot~2 - - + + +proc~remove_knots~2->none~get_knot~2 + + + + + +program~example3_surface + + +example3_surface + + + + + +program~example3_surface->none~get_knot~2 + + + + + +program~example3_surface->proc~elevate_degree~2 + + + + + +program~example3_surface->proc~insert_knots~2 + + + + + +program~example3_surface->proc~remove_knots~2 + + + + + +program~example_ppm3 + + +example_ppm3 + + + + + +program~example_ppm3->proc~modify_xc~2 + + -
                  +

                  diff --git a/proc/get_knoti~3.html b/proc/get_knoti~3.html index 7ac78c295..b963d3d4a 100644 --- a/proc/get_knoti~3.html +++ b/proc/get_knoti~3.html @@ -78,20 +78,20 @@

                  get_knoti
                • 29 statements + title=" 0.2% of total for procedures.">14 statements
                • - Source File + Source File
                • -

                  private pure function get_knoti(this, dir, i) result(knot) +

                  private pure function get_knoti(this, i) result(knot)

                  Type Bound

                  -

                  nurbs_surface

                  +

                  nurbs_curve

                  Arguments

                  - - class(nurbs_curve), + + class(nurbs_surface), intent(in) @@ -173,7 +173,22 @@

                  Arguments

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

                  Arguments

                  - - - - - - - - @@ -206,7 +191,7 @@

                  Arguments

                  Return Value - + real(kind=rk)

                  @@ -223,162 +208,80 @@

                  Called by

                  - - + + proc~~get_knoti~3~~CalledByGraph - + proc~get_knoti~3 - -nurbs_surface%get_knoti + +nurbs_curve%get_knoti none~get_knot~3 - - -nurbs_surface%get_knot + + +nurbs_curve%get_knot none~get_knot~3->proc~get_knoti~3 - - - - - -proc~elevate_degree~3 - - -nurbs_surface%elevate_degree - - - - - -proc~elevate_degree~3->none~get_knot~3 - - - - - -proc~insert_knots~3 - - -nurbs_surface%insert_knots - - - - - -proc~insert_knots~3->none~get_knot~3 - - + + - + proc~modify_wc~3 - - -nurbs_surface%modify_Wc + + +nurbs_curve%modify_Wc - + proc~modify_wc~3->none~get_knot~3 - - + + - + proc~modify_xc~3 - - -nurbs_surface%modify_Xc + + +nurbs_curve%modify_Xc - + proc~modify_xc~3->none~get_knot~3 - - - - - -proc~remove_knots~3 - - -nurbs_surface%remove_knots - + + - - - -proc~remove_knots~3->none~get_knot~3 - - - - - -program~example3_surface - - -example3_surface - - - - - -program~example3_surface->none~get_knot~3 - - - - - -program~example3_surface->proc~elevate_degree~3 - - - - - -program~example3_surface->proc~insert_knots~3 - - - - - -program~example3_surface->proc~remove_knots~3 - - - - - -program~example_ppm3 - - -example_ppm3 + + +program~example1_curve + + +example1_curve - - -program~example_ppm3->proc~modify_xc~3 - - + + +program~example1_curve->none~get_knot~3 + + -
                  +

                  diff --git a/proc/get_multiplicity.html b/proc/get_multiplicity.html index 01da2accd..a5449e10a 100644 --- a/proc/get_multiplicity.html +++ b/proc/get_multiplicity.html @@ -847,7 +847,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/get_multiplicity~2.html b/proc/get_multiplicity~2.html index 4e4b9a89d..eebb94da9 100644 --- a/proc/get_multiplicity~2.html +++ b/proc/get_multiplicity~2.html @@ -78,20 +78,20 @@

                  get_multiplicity
                • 9 statements + title=" 0.3% of total for procedures.">20 statements
                • - Source File + Source File
                • @@ -137,13 +137,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) @@ -173,22 +173,7 @@

                  Arguments

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

                  Arguments

                  + + + + + + + + @@ -176,7 +191,7 @@

                  Arguments

                  Return Value - + integer, allocatable, (:)

                  @@ -193,61 +208,61 @@

                  Calls

                  - + proc~~get_multiplicity~2~~CallsGraph - + proc~get_multiplicity~2 - -nurbs_curve%get_multiplicity + +nurbs_surface%get_multiplicity interface~compute_multiplicity - -compute_multiplicity + +compute_multiplicity proc~get_multiplicity~2->interface~compute_multiplicity - - + + proc~compute_multiplicity1 - -compute_multiplicity1 + +compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 - - + + proc~compute_multiplicity2 - -compute_multiplicity2 + +compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 - - + + @@ -343,325 +358,433 @@

                  Called by

                  - - + + proc~~get_multiplicity~2~~CalledByGraph - + proc~get_multiplicity~2 - -nurbs_curve%get_multiplicity + +nurbs_surface%get_multiplicity proc~cmp_degree~2 - - -nurbs_curve%cmp_degree + + +nurbs_surface%cmp_degree proc~cmp_degree~2->proc~get_multiplicity~2 - - + + proc~cmp_elem~2 - - -nurbs_curve%cmp_elem + + +nurbs_surface%cmp_elem proc~cmp_elem~2->proc~get_multiplicity~2 - - + + proc~set1~2 - - -nurbs_curve%set1 + + +nurbs_surface%set1 proc~set1~2->proc~cmp_degree~2 - - + + proc~set3~2 - - -nurbs_curve%set3 + + +nurbs_surface%set3 proc~set3~2->proc~cmp_degree~2 - - + + none~set~2 - - -nurbs_curve%set + + +nurbs_surface%set none~set~2->proc~set1~2 - - + + none~set~2->proc~set3~2 - - + + proc~elevate_degree~2 - - -nurbs_curve%elevate_degree + + +nurbs_surface%elevate_degree proc~elevate_degree~2->none~set~2 - - + + proc~insert_knots~2 - - -nurbs_curve%insert_knots + + +nurbs_surface%insert_knots proc~insert_knots~2->none~set~2 - - + + proc~modify_wc~2 - - -nurbs_curve%modify_Wc + + +nurbs_surface%modify_Wc proc~modify_wc~2->none~set~2 - - + + proc~modify_xc~2 - - -nurbs_curve%modify_Xc + + +nurbs_surface%modify_Xc proc~modify_xc~2->none~set~2 - - + + proc~remove_knots~2 - - -nurbs_curve%remove_knots + + +nurbs_surface%remove_knots proc~remove_knots~2->none~set~2 - - + + - + -proc~set_circle - - -nurbs_curve%set_circle +proc~set_c~2 + + +nurbs_surface%set_C - + -proc~set_circle->none~set~2 - - +proc~set_c~2->none~set~2 + + - + -proc~set_c~2 - - -nurbs_curve%set_C +proc~set_half_ring~2 + + +nurbs_surface%set_half_ring - + -proc~set_c~2->none~set~2 - - +proc~set_half_ring~2->none~set~2 + + - + -proc~set_half_circle - - -nurbs_curve%set_half_circle +proc~set_ring~2 + + +nurbs_surface%set_ring - + -proc~set_half_circle->none~set~2 - - +proc~set_ring~2->none~set~2 + + - + -program~example1_curve - - -example1_curve +proc~set_tetragon + + +nurbs_surface%set_tetragon - + -program~example1_curve->none~set~2 - - - - - -program~example1_curve->proc~elevate_degree~2 - - +proc~set_tetragon->none~set~2 + + - - -program~example1_curve->proc~insert_knots~2 - - - - - -program~example1_curve->proc~remove_knots~2 - - - - + -program~example_nurbs_curve - - -example_nurbs_curve +program~example3_surface + + +example3_surface - + -program~example_nurbs_curve->none~set~2 - - +program~example3_surface->none~set~2 + + + + + +program~example3_surface->proc~elevate_degree~2 + + + + + +program~example3_surface->proc~insert_knots~2 + + + + + +program~example3_surface->proc~remove_knots~2 + + - + -program~nearest_point_1d - - -nearest_point_1d +program~example_nurbs_surface + + +example_nurbs_surface - + -program~nearest_point_1d->none~set~2 - - +program~example_nurbs_surface->none~set~2 + + - + -program~shape_c_1d - - -shape_C_1d +program~nearest_point_2d + + +nearest_point_2d - - -program~shape_c_1d->proc~set_c~2 - - + + +program~nearest_point_2d->none~set~2 + + - + -program~shape_circle - - -shape_circle +program~example_ppm1 + + +example_ppm1 - - -program~shape_circle->proc~set_circle - - + + +program~example_ppm1->proc~set_ring~2 + + - + + +program~example_ppm1->proc~set_tetragon + + + + -program~shape_half_circle - - -shape_half_circle +program~example_ppm2 + + +example_ppm2 - + + +program~example_ppm2->proc~set_half_ring~2 + + + + + +program~example_ppm2->proc~set_tetragon + + + + + +program~example_ppm3 + + +example_ppm3 + + + + + +program~example_ppm3->proc~modify_xc~2 + + + + + +program~example_ppm3->proc~set_tetragon + + + + + +program~nearest_point_2d_bench + + +nearest_point_2d_bench + + + + + +program~nearest_point_2d_bench->proc~set_tetragon + + + + + +program~shape_c_2d + + +shape_C_2d + + + + -program~shape_half_circle->proc~set_half_circle - - +program~shape_c_2d->proc~set_c~2 + + + + + +program~shape_half_ring_2d + + +shape_half_ring_2d + + + + + +program~shape_half_ring_2d->proc~set_half_ring~2 + + + + + +program~shape_ring_2d + + +shape_ring_2d + + + + + +program~shape_ring_2d->proc~set_ring~2 + + + + + +program~shape_tetragon + + +shape_tetragon + + + + + +program~shape_tetragon->proc~set_tetragon + + @@ -781,7 +904,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/get_multiplicity~3.html b/proc/get_multiplicity~3.html index 78af5fccd..20d81ee59 100644 --- a/proc/get_multiplicity~3.html +++ b/proc/get_multiplicity~3.html @@ -78,20 +78,20 @@

                  get_multiplicity
                • 20 statements + title=" 0.1% of total for procedures.">9 statements
                • - Source File + Source File
                • @@ -137,13 +137,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) @@ -169,6 +169,21 @@

                  Arguments

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

                  Arguments

                  - - - - - - - - @@ -208,61 +193,61 @@

                  Calls

                  - + proc~~get_multiplicity~3~~CallsGraph - + proc~get_multiplicity~3 - -nurbs_surface%get_multiplicity + +nurbs_curve%get_multiplicity interface~compute_multiplicity - -compute_multiplicity + +compute_multiplicity proc~get_multiplicity~3->interface~compute_multiplicity - - + + proc~compute_multiplicity1 - -compute_multiplicity1 + +compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 - - + + proc~compute_multiplicity2 - -compute_multiplicity2 + +compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 - - + + @@ -358,433 +343,325 @@

                  Called by

                  - - + + proc~~get_multiplicity~3~~CalledByGraph - + proc~get_multiplicity~3 - -nurbs_surface%get_multiplicity + +nurbs_curve%get_multiplicity proc~cmp_degree~3 - - -nurbs_surface%cmp_degree + + +nurbs_curve%cmp_degree proc~cmp_degree~3->proc~get_multiplicity~3 - - + + proc~cmp_elem~3 - - -nurbs_surface%cmp_elem + + +nurbs_curve%cmp_elem proc~cmp_elem~3->proc~get_multiplicity~3 - - + + proc~set1~3 - - -nurbs_surface%set1 + + +nurbs_curve%set1 proc~set1~3->proc~cmp_degree~3 - - + + proc~set3~3 - - -nurbs_surface%set3 + + +nurbs_curve%set3 proc~set3~3->proc~cmp_degree~3 - - + + none~set~3 - - -nurbs_surface%set + + +nurbs_curve%set none~set~3->proc~set1~3 - - + + none~set~3->proc~set3~3 - - + + proc~elevate_degree~3 - - -nurbs_surface%elevate_degree + + +nurbs_curve%elevate_degree proc~elevate_degree~3->none~set~3 - - + + proc~insert_knots~3 - - -nurbs_surface%insert_knots + + +nurbs_curve%insert_knots proc~insert_knots~3->none~set~3 - - + + proc~modify_wc~3 - - -nurbs_surface%modify_Wc + + +nurbs_curve%modify_Wc proc~modify_wc~3->none~set~3 - - + + proc~modify_xc~3 - - -nurbs_surface%modify_Xc + + +nurbs_curve%modify_Xc proc~modify_xc~3->none~set~3 - - + + proc~remove_knots~3 - - -nurbs_surface%remove_knots + + +nurbs_curve%remove_knots proc~remove_knots~3->none~set~3 - - + + - + -proc~set_c~3 - - -nurbs_surface%set_C +proc~set_circle + + +nurbs_curve%set_circle - + -proc~set_c~3->none~set~3 - - +proc~set_circle->none~set~3 + + - + -proc~set_half_ring~2 - - -nurbs_surface%set_half_ring +proc~set_c~3 + + +nurbs_curve%set_C - + -proc~set_half_ring~2->none~set~3 - - +proc~set_c~3->none~set~3 + + - + -proc~set_ring~2 - - -nurbs_surface%set_ring +proc~set_half_circle + + +nurbs_curve%set_half_circle - + -proc~set_ring~2->none~set~3 - - +proc~set_half_circle->none~set~3 + + - + -proc~set_tetragon - - -nurbs_surface%set_tetragon +program~example1_curve + + +example1_curve - + -proc~set_tetragon->none~set~3 - - - - - -program~example3_surface - - -example3_surface - - +program~example1_curve->none~set~3 + + - - -program~example3_surface->none~set~3 - - + + +program~example1_curve->proc~elevate_degree~3 + + - + -program~example3_surface->proc~elevate_degree~3 - - +program~example1_curve->proc~insert_knots~3 + + - + -program~example3_surface->proc~insert_knots~3 - - +program~example1_curve->proc~remove_knots~3 + + - - -program~example3_surface->proc~remove_knots~3 - - + + +program~example_nurbs_curve + + +example_nurbs_curve + - + + + +program~example_nurbs_curve->none~set~3 + + + + -program~example_nurbs_surface - - -example_nurbs_surface +program~nearest_point_1d + + +nearest_point_1d - + -program~example_nurbs_surface->none~set~3 - - +program~nearest_point_1d->none~set~3 + + - + -program~nearest_point_2d - - -nearest_point_2d +program~shape_c_1d + + +shape_C_1d - - -program~nearest_point_2d->none~set~3 - - + + +program~shape_c_1d->proc~set_c~3 + + - + -program~example_ppm1 - - -example_ppm1 +program~shape_circle + + +shape_circle - - -program~example_ppm1->proc~set_ring~2 - - - - - -program~example_ppm1->proc~set_tetragon - - - - - -program~example_ppm2 - - -example_ppm2 - - - - - -program~example_ppm2->proc~set_half_ring~2 - - - - - -program~example_ppm2->proc~set_tetragon - - - - - -program~example_ppm3 - - -example_ppm3 - - - - + -program~example_ppm3->proc~modify_xc~3 - - - - - -program~example_ppm3->proc~set_tetragon - - - - - -program~nearest_point_2d_bench - - -nearest_point_2d_bench - +program~shape_circle->proc~set_circle + + - - - -program~nearest_point_2d_bench->proc~set_tetragon - - - - - -program~shape_c_2d - - -shape_C_2d + + +program~shape_half_circle + + +shape_half_circle - + -program~shape_c_2d->proc~set_c~3 - - - - - -program~shape_half_ring_2d - - -shape_half_ring_2d - - - - - -program~shape_half_ring_2d->proc~set_half_ring~2 - - - - - -program~shape_ring_2d - - -shape_ring_2d - - - - - -program~shape_ring_2d->proc~set_ring~2 - - - - - -program~shape_tetragon - - -shape_tetragon - - - - - -program~shape_tetragon->proc~set_tetragon - - +program~shape_half_circle->proc~set_half_circle + + @@ -904,7 +781,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/get_nc.html b/proc/get_nc.html index 28bbc204f..81093755f 100644 --- a/proc/get_nc.html +++ b/proc/get_nc.html @@ -376,7 +376,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/get_nc~2.html b/proc/get_nc~2.html index 5918443d3..a91458a84 100644 --- a/proc/get_nc~2.html +++ b/proc/get_nc~2.html @@ -78,20 +78,20 @@

                  get_nc
                • 5 statements + title=" 0.3% 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

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

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

                  Arguments

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

                  Arguments

                  + + + + + + + + @@ -176,12 +191,163 @@

                  Arguments

                  Return Value - + integer


                  +
                  +
                  +

                  Calls

                  +
                  +
                  +
                  + + + + + +proc~~get_nc~2~~CallsGraph + + + +proc~get_nc~2 + +nurbs_surface%get_nc + + + +interface~compute_multiplicity + + +compute_multiplicity + + + + + +proc~get_nc~2->interface~compute_multiplicity + + + + + +proc~compute_multiplicity1 + + +compute_multiplicity1 + + + + + +interface~compute_multiplicity->proc~compute_multiplicity1 + + + + + +proc~compute_multiplicity2 + + +compute_multiplicity2 + + + + + +interface~compute_multiplicity->proc~compute_multiplicity2 + + + + + +
                  + Help +
                  + +
                  +
                  +
                  @@ -212,7 +378,7 @@

                  Return Value

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/get_nc~3.html b/proc/get_nc~3.html index 7ec461c2a..2a229e65d 100644 --- a/proc/get_nc~3.html +++ b/proc/get_nc~3.html @@ -78,20 +78,20 @@

                  get_nc
                • 20 statements + title=" 0.1% 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_surface

                  +

                  nurbs_curve

                  Arguments

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

                  Arguments

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

                  Arguments

                  - - - - - - - - @@ -191,163 +176,12 @@

                  Arguments

                  Return Value - + integer


                  -
                  -
                  -

                  Calls

                  -
                  -
                  -
                  - - - - - -proc~~get_nc~3~~CallsGraph - - - -proc~get_nc~3 - -nurbs_surface%get_nc - - - -interface~compute_multiplicity - - -compute_multiplicity - - - - - -proc~get_nc~3->interface~compute_multiplicity - - - - - -proc~compute_multiplicity1 - - -compute_multiplicity1 - - - - - -interface~compute_multiplicity->proc~compute_multiplicity1 - - - - - -proc~compute_multiplicity2 - - -compute_multiplicity2 - - - - - -interface~compute_multiplicity->proc~compute_multiplicity2 - - - - - -
                  - Help -
                  - -
                  -
                  -
                  @@ -378,7 +212,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/get_ng.html b/proc/get_ng.html index 1b577096b..33733aa82 100644 --- a/proc/get_ng.html +++ b/proc/get_ng.html @@ -212,7 +212,7 @@

                  Return Value

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/get_ng~2.html b/proc/get_ng~2.html index 101c09001..2b613b092 100644 --- a/proc/get_ng~2.html +++ b/proc/get_ng~2.html @@ -83,15 +83,15 @@

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

                  private pure function get_ng(this) result(ng)

                  Type Bound

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

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

                  Arguments

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

                  Arguments

                  - class(nurbs_curve), + class(nurbs_surface), intent(in) @@ -177,11 +177,162 @@

                  Arguments

                  Return Value - integer + integer, (2)


                  +
                  +
                  +

                  Called by

                  +
                  +
                  +
                  + + + + + +proc~~get_ng~2~~CalledByGraph + + + +proc~get_ng~2 + +nurbs_surface%get_ng + + + +program~example_ppm1 + + +example_ppm1 + + + + + +program~example_ppm1->proc~get_ng~2 + + + + + +program~example_ppm2 + + +example_ppm2 + + + + + +program~example_ppm2->proc~get_ng~2 + + + + + +program~example_ppm3 + + +example_ppm3 + + + + + +program~example_ppm3->proc~get_ng~2 + + + + + +
                  + Help +
                  + +
                  +
                  +
                  @@ -212,7 +363,7 @@

                  Return Value

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/get_ng~3.html b/proc/get_ng~3.html index f8cc715fa..819e3a576 100644 --- a/proc/get_ng~3.html +++ b/proc/get_ng~3.html @@ -83,15 +83,15 @@

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

                  private pure function get_ng(this) result(ng)

                  Type Bound

                  -

                  nurbs_surface

                  +

                  nurbs_curve

                  Arguments

                  @@ -158,8 +158,8 @@

                  Arguments

                  - - class(nurbs_surface), + + class(nurbs_curve), intent(in) @@ -176,163 +176,12 @@

                  Arguments

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


                  -
                  -
                  -

                  Called by

                  -
                  -
                  -
                  - - - - - -proc~~get_ng~3~~CalledByGraph - - - -proc~get_ng~3 - -nurbs_surface%get_ng - - - -program~example_ppm1 - - -example_ppm1 - - - - - -program~example_ppm1->proc~get_ng~3 - - - - - -program~example_ppm2 - - -example_ppm2 - - - - - -program~example_ppm2->proc~get_ng~3 - - - - - -program~example_ppm3 - - -example_ppm3 - - - - - -program~example_ppm3->proc~get_ng~3 - - - - - -
                  - Help -
                  - -
                  -
                  -
                  @@ -363,7 +212,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/get_wc_all.html b/proc/get_wc_all.html index f042bd313..7939b4560 100644 --- a/proc/get_wc_all.html +++ b/proc/get_wc_all.html @@ -363,7 +363,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/get_wc_all~2.html b/proc/get_wc_all~2.html index b900ee292..818d6d143 100644 --- a/proc/get_wc_all~2.html +++ b/proc/get_wc_all~2.html @@ -83,15 +83,15 @@

                  get_Wc_all
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure function get_Wc_all(this) result(Wc)

                  Type Bound

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

                  @@ -159,7 +159,7 @@

                  Arguments

                  - class(nurbs_curve), + class(nurbs_surface), intent(in) @@ -176,7 +176,7 @@

                  Arguments

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

                  @@ -193,65 +193,84 @@

                  Called by

                  - - + + proc~~get_wc_all~2~~CalledByGraph - + proc~get_wc_all~2 - -nurbs_curve%get_Wc_all + +nurbs_surface%get_Wc_all none~get_wc~2 - - -nurbs_curve%get_Wc + + +nurbs_surface%get_Wc none~get_wc~2->proc~get_wc_all~2 - - + + proc~modify_wc~2 - - -nurbs_curve%modify_Wc + + +nurbs_surface%modify_Wc proc~modify_wc~2->none~get_wc~2 - - + + proc~modify_xc~2 - - -nurbs_curve%modify_Xc + + +nurbs_surface%modify_Xc proc~modify_xc~2->none~get_wc~2 - - + + + + + +program~example_ppm3 + + +example_ppm3 + + + + + +program~example_ppm3->proc~modify_xc~2 + + -
                  +

                  diff --git a/proc/get_wc_all~3.html b/proc/get_wc_all~3.html index d6ed81e1c..1f56b29c6 100644 --- a/proc/get_wc_all~3.html +++ b/proc/get_wc_all~3.html @@ -83,15 +83,15 @@

                  get_Wc_all
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure function get_Wc_all(this) result(Wc)

                  Type Bound

                  -

                  nurbs_surface

                  +

                  nurbs_curve

                  Arguments

                  @@ -158,8 +158,8 @@

                  Arguments

                  - - class(nurbs_surface), + + class(nurbs_curve), intent(in) @@ -176,7 +176,7 @@

                  Arguments

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

                  @@ -193,84 +193,65 @@

                  Called by

                  - - + + proc~~get_wc_all~3~~CalledByGraph - + proc~get_wc_all~3 - -nurbs_surface%get_Wc_all + +nurbs_curve%get_Wc_all none~get_wc~3 - - -nurbs_surface%get_Wc + + +nurbs_curve%get_Wc none~get_wc~3->proc~get_wc_all~3 - - + + proc~modify_wc~3 - - -nurbs_surface%modify_Wc + + +nurbs_curve%modify_Wc proc~modify_wc~3->none~get_wc~3 - - + + proc~modify_xc~3 - - -nurbs_surface%modify_Xc + + +nurbs_curve%modify_Xc proc~modify_xc~3->none~get_wc~3 - - - - - -program~example_ppm3 - - -example_ppm3 - - - - - -program~example_ppm3->proc~modify_xc~3 - - + + -
                  +

                  diff --git a/proc/get_wci.html b/proc/get_wci.html index d39ae45d9..ffff42fee 100644 --- a/proc/get_wci.html +++ b/proc/get_wci.html @@ -378,7 +378,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/get_wci~2.html b/proc/get_wci~2.html index 9da16935c..b751e17c8 100644 --- a/proc/get_wci~2.html +++ b/proc/get_wci~2.html @@ -83,15 +83,15 @@

                  get_Wci
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure function get_Wci(this, n) result(Wc)

                  Type Bound

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

                  @@ -159,7 +159,7 @@

                  Arguments

                  @@ -191,7 +191,7 @@

                  Arguments

                  Return Value - + real(kind=rk)

                  @@ -208,65 +208,84 @@

                  Called by

                  - + proc~~get_wci~2~~CalledByGraph - + proc~get_wci~2 - -nurbs_curve%get_Wci + +nurbs_surface%get_Wci none~get_wc~2 - - -nurbs_curve%get_Wc + + +nurbs_surface%get_Wc none~get_wc~2->proc~get_wci~2 - - + + proc~modify_wc~2 - - -nurbs_curve%modify_Wc + + +nurbs_surface%modify_Wc proc~modify_wc~2->none~get_wc~2 - - + + proc~modify_xc~2 - - -nurbs_curve%modify_Xc + + +nurbs_surface%modify_Xc proc~modify_xc~2->none~get_wc~2 - - + + + + + +program~example_ppm3 + + +example_ppm3 + + + + + +program~example_ppm3->proc~modify_xc~2 + + -
                  +

                  diff --git a/proc/get_wci~3.html b/proc/get_wci~3.html index 5881bfea2..3e7f46079 100644 --- a/proc/get_wci~3.html +++ b/proc/get_wci~3.html @@ -83,15 +83,15 @@

                  get_Wci
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure function get_Wci(this, n) result(Wc)

                  Type Bound

                  -

                  nurbs_surface

                  +

                  nurbs_curve

                  Arguments

                  - class(nurbs_curve), + class(nurbs_surface), intent(in) @@ -173,7 +173,7 @@

                  Arguments

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

                  Arguments

                  - - class(nurbs_surface), + + class(nurbs_curve), intent(in) @@ -191,7 +191,7 @@

                  Arguments

                  Return Value - + real(kind=rk)

                  @@ -208,84 +208,65 @@

                  Called by

                  - + proc~~get_wci~3~~CalledByGraph - + proc~get_wci~3 - -nurbs_surface%get_Wci + +nurbs_curve%get_Wci none~get_wc~3 - - -nurbs_surface%get_Wc + + +nurbs_curve%get_Wc none~get_wc~3->proc~get_wci~3 - - + + proc~modify_wc~3 - - -nurbs_surface%modify_Wc + + +nurbs_curve%modify_Wc proc~modify_wc~3->none~get_wc~3 - - + + proc~modify_xc~3 - - -nurbs_surface%modify_Xc + + +nurbs_curve%modify_Xc proc~modify_xc~3->none~get_wc~3 - - - - - -program~example_ppm3 - - -example_ppm3 - - - - - -program~example_ppm3->proc~modify_xc~3 - - + + -
                  +

                  diff --git a/proc/get_xc_all.html b/proc/get_xc_all.html index 0c0a1f1ef..a4bf1c8aa 100644 --- a/proc/get_xc_all.html +++ b/proc/get_xc_all.html @@ -363,7 +363,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/get_xc_all~2.html b/proc/get_xc_all~2.html index c40655e6d..54a5a5546 100644 --- a/proc/get_xc_all~2.html +++ b/proc/get_xc_all~2.html @@ -83,15 +83,15 @@

                  get_Xc_all
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure function get_Xc_all(this) result(Xc)

                  Type Bound

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

                  @@ -159,7 +159,7 @@

                  Arguments

                  - class(nurbs_curve), + class(nurbs_surface), intent(in) @@ -176,7 +176,7 @@

                  Arguments

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

                  @@ -193,65 +193,84 @@

                  Called by

                  - - + + proc~~get_xc_all~2~~CalledByGraph - + proc~get_xc_all~2 - -nurbs_curve%get_Xc_all + +nurbs_surface%get_Xc_all none~get_xc~2 - - -nurbs_curve%get_Xc + + +nurbs_surface%get_Xc none~get_xc~2->proc~get_xc_all~2 - - + + proc~modify_wc~2 - - -nurbs_curve%modify_Wc + + +nurbs_surface%modify_Wc proc~modify_wc~2->none~get_xc~2 - - + + proc~modify_xc~2 - - -nurbs_curve%modify_Xc + + +nurbs_surface%modify_Xc proc~modify_xc~2->none~get_xc~2 - - + + + + + +program~example_ppm3 + + +example_ppm3 + + + + + +program~example_ppm3->proc~modify_xc~2 + + -
                  +

                  diff --git a/proc/get_xc_all~3.html b/proc/get_xc_all~3.html index b27ee36a3..7c90762c4 100644 --- a/proc/get_xc_all~3.html +++ b/proc/get_xc_all~3.html @@ -83,15 +83,15 @@

                  get_Xc_all
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure function get_Xc_all(this) result(Xc)

                  Type Bound

                  -

                  nurbs_surface

                  +

                  nurbs_curve

                  Arguments

                  @@ -158,8 +158,8 @@

                  Arguments

                  - - class(nurbs_surface), + + class(nurbs_curve), intent(in) @@ -176,7 +176,7 @@

                  Arguments

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

                  @@ -193,84 +193,65 @@

                  Called by

                  - - + + proc~~get_xc_all~3~~CalledByGraph - + proc~get_xc_all~3 - -nurbs_surface%get_Xc_all + +nurbs_curve%get_Xc_all none~get_xc~3 - - -nurbs_surface%get_Xc + + +nurbs_curve%get_Xc none~get_xc~3->proc~get_xc_all~3 - - + + proc~modify_wc~3 - - -nurbs_surface%modify_Wc + + +nurbs_curve%modify_Wc proc~modify_wc~3->none~get_xc~3 - - + + proc~modify_xc~3 - - -nurbs_surface%modify_Xc + + +nurbs_curve%modify_Xc proc~modify_xc~3->none~get_xc~3 - - - - - -program~example_ppm3 - - -example_ppm3 - - - - - -program~example_ppm3->proc~modify_xc~3 - - + + -
                  +

                  diff --git a/proc/get_xci.html b/proc/get_xci.html index 3b62762c7..eb2add6dd 100644 --- a/proc/get_xci.html +++ b/proc/get_xci.html @@ -378,7 +378,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/get_xcid.html b/proc/get_xcid.html index eff4706fa..27b28dafe 100644 --- a/proc/get_xcid.html +++ b/proc/get_xcid.html @@ -393,7 +393,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/get_xcid~2.html b/proc/get_xcid~2.html index bc288b3dd..c13d4d1e7 100644 --- a/proc/get_xcid~2.html +++ b/proc/get_xcid~2.html @@ -83,15 +83,15 @@

                  get_Xcid
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure function get_Xcid(this, n, dir) result(Xc)

                  Type Bound

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

                  @@ -159,7 +159,7 @@

                  Arguments

                  @@ -206,7 +206,7 @@

                  Arguments

                  Return Value - + real(kind=rk)

                  @@ -223,65 +223,84 @@

                  Called by

                  - + proc~~get_xcid~2~~CalledByGraph - + proc~get_xcid~2 - -nurbs_curve%get_Xcid + +nurbs_surface%get_Xcid none~get_xc~2 - - -nurbs_curve%get_Xc + + +nurbs_surface%get_Xc none~get_xc~2->proc~get_xcid~2 - - + + proc~modify_wc~2 - - -nurbs_curve%modify_Wc + + +nurbs_surface%modify_Wc proc~modify_wc~2->none~get_xc~2 - - + + proc~modify_xc~2 - - -nurbs_curve%modify_Xc + + +nurbs_surface%modify_Xc proc~modify_xc~2->none~get_xc~2 - - + + + + + +program~example_ppm3 + + +example_ppm3 + + + + + +program~example_ppm3->proc~modify_xc~2 + + -
                  +

                  diff --git a/proc/get_xcid~3.html b/proc/get_xcid~3.html index b83bfaea2..c4af4a262 100644 --- a/proc/get_xcid~3.html +++ b/proc/get_xcid~3.html @@ -83,15 +83,15 @@

                  get_Xcid
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure function get_Xcid(this, n, dir) result(Xc)

                  Type Bound

                  -

                  nurbs_surface

                  +

                  nurbs_curve

                  Arguments

                  - class(nurbs_curve), + class(nurbs_surface), intent(in) @@ -173,7 +173,7 @@

                  Arguments

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

                  Arguments

                  @@ -206,7 +206,7 @@

                  Arguments

                  Return Value - + real(kind=rk)

                  @@ -223,84 +223,65 @@

                  Called by

                  - + proc~~get_xcid~3~~CalledByGraph - + proc~get_xcid~3 - -nurbs_surface%get_Xcid + +nurbs_curve%get_Xcid none~get_xc~3 - - -nurbs_surface%get_Xc + + +nurbs_curve%get_Xc none~get_xc~3->proc~get_xcid~3 - - + + proc~modify_wc~3 - - -nurbs_surface%modify_Wc + + +nurbs_curve%modify_Wc proc~modify_wc~3->none~get_xc~3 - - + + proc~modify_xc~3 - - -nurbs_surface%modify_Xc + + +nurbs_curve%modify_Xc proc~modify_xc~3->none~get_xc~3 - - - - - -program~example_ppm3 - - -example_ppm3 - - - - - -program~example_ppm3->proc~modify_xc~3 - - + + -
                  +

                  diff --git a/proc/get_xci~2.html b/proc/get_xci~2.html index 9bff9ec20..5262ff615 100644 --- a/proc/get_xci~2.html +++ b/proc/get_xci~2.html @@ -83,15 +83,15 @@

                  get_Xci
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure function get_Xci(this, n) result(Xc)

                  Type Bound

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

                  - - class(nurbs_surface), + + class(nurbs_curve), intent(in) @@ -188,7 +188,7 @@

                  Arguments

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

                  Arguments

                  @@ -191,7 +191,7 @@

                  Arguments

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

                  @@ -208,61 +208,76 @@

                  Called by

                  - + proc~~get_xci~2~~CalledByGraph - + proc~get_xci~2 - -nurbs_curve%get_Xci + +nurbs_surface%get_Xci none~get_xc~2 - - -nurbs_curve%get_Xc + + +nurbs_surface%get_Xc none~get_xc~2->proc~get_xci~2 - - + + proc~modify_wc~2 - - -nurbs_curve%modify_Wc + + +nurbs_surface%modify_Wc proc~modify_wc~2->none~get_xc~2 - - + + proc~modify_xc~2 - - -nurbs_curve%modify_Xc + + +nurbs_surface%modify_Xc proc~modify_xc~2->none~get_xc~2 - - + + + + + +program~example_ppm3 + + +example_ppm3 + + + + + +program~example_ppm3->proc~modify_xc~2 + + @@ -378,7 +393,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/get_xci~3.html b/proc/get_xci~3.html index 298cff1b6..88f07b8df 100644 --- a/proc/get_xci~3.html +++ b/proc/get_xci~3.html @@ -83,15 +83,15 @@

                  get_Xci
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure function get_Xci(this, n) result(Xc)

                  Type Bound

                  -

                  nurbs_surface

                  +

                  nurbs_curve

                  Arguments

                  - class(nurbs_curve), + class(nurbs_surface), intent(in) @@ -173,7 +173,7 @@

                  Arguments

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

                  Arguments

                  - - class(nurbs_surface), + + class(nurbs_curve), intent(in) @@ -191,7 +191,7 @@

                  Arguments

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

                  @@ -208,76 +208,61 @@

                  Called by

                  - + proc~~get_xci~3~~CalledByGraph - + proc~get_xci~3 - -nurbs_surface%get_Xci + +nurbs_curve%get_Xci none~get_xc~3 - - -nurbs_surface%get_Xc + + +nurbs_curve%get_Xc none~get_xc~3->proc~get_xci~3 - - + + proc~modify_wc~3 - - -nurbs_surface%modify_Wc + + +nurbs_curve%modify_Wc proc~modify_wc~3->none~get_xc~3 - - + + proc~modify_xc~3 - - -nurbs_surface%modify_Xc + + +nurbs_curve%modify_Xc proc~modify_xc~3->none~get_xc~3 - - - - - -program~example_ppm3 - - -example_ppm3 - - - - - -program~example_ppm3->proc~modify_xc~3 - - + + @@ -393,7 +378,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/get_xg_all.html b/proc/get_xg_all.html index 695149dc8..a88f7d8c8 100644 --- a/proc/get_xg_all.html +++ b/proc/get_xg_all.html @@ -212,7 +212,7 @@

                  Return Value

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/get_xg_all~2.html b/proc/get_xg_all~2.html index cde205c78..1ba98806b 100644 --- a/proc/get_xg_all~2.html +++ b/proc/get_xg_all~2.html @@ -83,15 +83,15 @@

                  get_Xg_all
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure function get_Xg_all(this) result(Xg)

                  Type Bound

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

                  @@ -159,7 +159,7 @@

                  Arguments

                  - class(nurbs_curve), + class(nurbs_surface), intent(in) @@ -182,6 +182,172 @@

                  Return Value


                  +
                  +
                  +

                  Called by

                  +
                  +
                  +
                  + + + + + +proc~~get_xg_all~2~~CalledByGraph + + + +proc~get_xg_all~2 + +nurbs_surface%get_Xg_all + + + +none~get_xg~2 + + +nurbs_surface%get_Xg + + + + + +none~get_xg~2->proc~get_xg_all~2 + + + + + +program~example_ppm1 + + +example_ppm1 + + + + + +program~example_ppm1->none~get_xg~2 + + + + + +program~example_ppm2 + + +example_ppm2 + + + + + +program~example_ppm2->none~get_xg~2 + + + + + +program~example_ppm3 + + +example_ppm3 + + + + + +program~example_ppm3->none~get_xg~2 + + + + + +
                  + Help +
                  + +
                  +
                  +
                  @@ -212,7 +378,7 @@

                  Return Value

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/get_xg_all~3.html b/proc/get_xg_all~3.html index 83f3e696c..f5c91f83a 100644 --- a/proc/get_xg_all~3.html +++ b/proc/get_xg_all~3.html @@ -83,15 +83,15 @@

                  get_Xg_all
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure function get_Xg_all(this) result(Xg)

                  Type Bound

                  -

                  nurbs_surface

                  +

                  nurbs_curve

                  Arguments

                  @@ -158,8 +158,8 @@

                  Arguments

                  - - class(nurbs_surface), + + class(nurbs_curve), intent(in) @@ -176,178 +176,12 @@

                  Arguments

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


                  -
                  -
                  -

                  Called by

                  -
                  -
                  -
                  - - - - - -proc~~get_xg_all~3~~CalledByGraph - - - -proc~get_xg_all~3 - -nurbs_surface%get_Xg_all - - - -none~get_xg~3 - - -nurbs_surface%get_Xg - - - - - -none~get_xg~3->proc~get_xg_all~3 - - - - - -program~example_ppm1 - - -example_ppm1 - - - - - -program~example_ppm1->none~get_xg~3 - - - - - -program~example_ppm2 - - -example_ppm2 - - - - - -program~example_ppm2->none~get_xg~3 - - - - - -program~example_ppm3 - - -example_ppm3 - - - - - -program~example_ppm3->none~get_xg~3 - - - - - -
                  - Help -
                  - -
                  -
                  -
                  @@ -378,7 +212,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/get_xgi.html b/proc/get_xgi.html index a5314aa35..0e4a90f28 100644 --- a/proc/get_xgi.html +++ b/proc/get_xgi.html @@ -227,7 +227,7 @@

                  Return Value

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/get_xgid.html b/proc/get_xgid.html index e702adc30..6d3b30a70 100644 --- a/proc/get_xgid.html +++ b/proc/get_xgid.html @@ -242,7 +242,7 @@

                  Return Value

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/get_xgid~2.html b/proc/get_xgid~2.html index a6627b20a..0a94f82bc 100644 --- a/proc/get_xgid~2.html +++ b/proc/get_xgid~2.html @@ -83,15 +83,15 @@

                  get_Xgid
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure function get_Xgid(this, n, dir) result(Xg)

                  Type Bound

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

                  @@ -159,7 +159,7 @@

                  Arguments

                  @@ -212,6 +212,172 @@

                  Return Value


                  +
                  +
                  +

                  Called by

                  +
                  +
                  +
                  + + + + + +proc~~get_xgid~2~~CalledByGraph + + + +proc~get_xgid~2 + +nurbs_surface%get_Xgid + + + +none~get_xg~2 + + +nurbs_surface%get_Xg + + + + + +none~get_xg~2->proc~get_xgid~2 + + + + + +program~example_ppm1 + + +example_ppm1 + + + + + +program~example_ppm1->none~get_xg~2 + + + + + +program~example_ppm2 + + +example_ppm2 + + + + + +program~example_ppm2->none~get_xg~2 + + + + + +program~example_ppm3 + + +example_ppm3 + + + + + +program~example_ppm3->none~get_xg~2 + + + + + +
                  + Help +
                  + +
                  +
                  +
                  @@ -242,7 +408,7 @@

                  Return Value

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/get_xgid~3.html b/proc/get_xgid~3.html index d9c495a3e..67952b9f9 100644 --- a/proc/get_xgid~3.html +++ b/proc/get_xgid~3.html @@ -83,15 +83,15 @@

                  get_Xgid
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure function get_Xgid(this, n, dir) result(Xg)

                  Type Bound

                  -

                  nurbs_surface

                  +

                  nurbs_curve

                  Arguments

                  - class(nurbs_curve), + class(nurbs_surface), intent(in) @@ -173,7 +173,7 @@

                  Arguments

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

                  Arguments

                  @@ -206,178 +206,12 @@

                  Arguments

                  Return Value - + real(kind=rk)


                  -
                  -
                  -

                  Called by

                  -
                  -
                  -
                  - - - - - -proc~~get_xgid~3~~CalledByGraph - - - -proc~get_xgid~3 - -nurbs_surface%get_Xgid - - - -none~get_xg~3 - - -nurbs_surface%get_Xg - - - - - -none~get_xg~3->proc~get_xgid~3 - - - - - -program~example_ppm1 - - -example_ppm1 - - - - - -program~example_ppm1->none~get_xg~3 - - - - - -program~example_ppm2 - - -example_ppm2 - - - - - -program~example_ppm2->none~get_xg~3 - - - - - -program~example_ppm3 - - -example_ppm3 - - - - - -program~example_ppm3->none~get_xg~3 - - - - - -
                  - Help -
                  - -
                  -
                  -
                  @@ -408,7 +242,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/get_xgi~2.html b/proc/get_xgi~2.html index 5e5e8def9..6bce0abe4 100644 --- a/proc/get_xgi~2.html +++ b/proc/get_xgi~2.html @@ -83,15 +83,15 @@

                  get_Xgi
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure function get_Xgi(this, n) result(Xg)

                  Type Bound

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

                  - - class(nurbs_surface), + + class(nurbs_curve), intent(in) @@ -188,7 +188,7 @@

                  Arguments

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

                  Arguments

                  @@ -197,6 +197,172 @@

                  Return Value


                  +
                  +
                  +

                  Called by

                  +
                  +
                  +
                  + + + + + +proc~~get_xgi~2~~CalledByGraph + + + +proc~get_xgi~2 + +nurbs_surface%get_Xgi + + + +none~get_xg~2 + + +nurbs_surface%get_Xg + + + + + +none~get_xg~2->proc~get_xgi~2 + + + + + +program~example_ppm1 + + +example_ppm1 + + + + + +program~example_ppm1->none~get_xg~2 + + + + + +program~example_ppm2 + + +example_ppm2 + + + + + +program~example_ppm2->none~get_xg~2 + + + + + +program~example_ppm3 + + +example_ppm3 + + + + + +program~example_ppm3->none~get_xg~2 + + + + + +
                  + Help +
                  + +
                  +
                  +
                  @@ -227,7 +393,7 @@

                  Return Value

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/get_xgi~3.html b/proc/get_xgi~3.html index a465bf00d..8d627821e 100644 --- a/proc/get_xgi~3.html +++ b/proc/get_xgi~3.html @@ -83,15 +83,15 @@

                  get_Xgi
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure function get_Xgi(this, n) result(Xg)

                  Type Bound

                  -

                  nurbs_surface

                  +

                  nurbs_curve

                  Arguments

                  - class(nurbs_curve), + class(nurbs_surface), intent(in) @@ -173,7 +173,7 @@

                  Arguments

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

                  Arguments

                  - - class(nurbs_surface), + + class(nurbs_curve), intent(in) @@ -191,178 +191,12 @@

                  Arguments

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


                  -
                  -
                  -

                  Called by

                  -
                  -
                  -
                  - - - - - -proc~~get_xgi~3~~CalledByGraph - - - -proc~get_xgi~3 - -nurbs_surface%get_Xgi - - - -none~get_xg~3 - - -nurbs_surface%get_Xg - - - - - -none~get_xg~3->proc~get_xgi~3 - - - - - -program~example_ppm1 - - -example_ppm1 - - - - - -program~example_ppm1->none~get_xg~3 - - - - - -program~example_ppm2 - - -example_ppm2 - - - - - -program~example_ppm2->none~get_xg~3 - - - - - -program~example_ppm3 - - -example_ppm3 - - - - - -program~example_ppm3->none~get_xg~3 - - - - - -
                  - Help -
                  - -
                  -
                  -
                  @@ -393,7 +227,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/get_xt.html b/proc/get_xt.html index 208cb0192..d8af8d018 100644 --- a/proc/get_xt.html +++ b/proc/get_xt.html @@ -227,7 +227,7 @@

                  Return Value

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/get_xt~2.html b/proc/get_xt~2.html index 5a990a422..230a18fcb 100644 --- a/proc/get_xt~2.html +++ b/proc/get_xt~2.html @@ -78,20 +78,20 @@

                  get_Xt
                • 9 statements + title=" 0.3% 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

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

                  @@ -159,7 +159,7 @@

                  Arguments

                  + + + + + + + + @@ -176,7 +191,7 @@

                  Arguments

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

                  @@ -212,7 +227,7 @@

                  Return Value

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/get_xt~3.html b/proc/get_xt~3.html index 764cb8baa..73018e7a7 100644 --- a/proc/get_xt~3.html +++ b/proc/get_xt~3.html @@ -78,20 +78,20 @@

                  get_Xt
                • 20 statements + title=" 0.1% 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_surface

                  +

                  nurbs_curve

                  Arguments

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

                  Arguments

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

                  Arguments

                  - - - - - - - - @@ -227,7 +212,7 @@

                  Return Value

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/hexahedron_xc.html b/proc/hexahedron_xc.html index 3e905f6d5..ba534ea7d 100644 --- a/proc/hexahedron_xc.html +++ b/proc/hexahedron_xc.html @@ -156,7 +156,7 @@

                  Arguments

                  @@ -171,7 +171,7 @@

                  Arguments

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

                  Arguments

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

                  @@ -376,7 +376,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/insert_knot_a_5_1.html b/proc/insert_knot_a_5_1.html index 2fab497e7..d091328ca 100644 --- a/proc/insert_knot_a_5_1.html +++ b/proc/insert_knot_a_5_1.html @@ -156,7 +156,7 @@

                  Arguments

                  @@ -216,7 +216,7 @@

                  Arguments

                  @@ -231,7 +231,7 @@

                  Arguments

                  @@ -246,7 +246,7 @@

                  Arguments

                  @@ -348,24 +348,24 @@

                  Called by

                  proc~insert_knots~2 - - -nurbs_curve%insert_knots + + +nurbs_surface%insert_knots proc~insert_knots~2->proc~insert_knot_a_5_1 - - + + proc~insert_knots~3 - - -nurbs_surface%insert_knots + + +nurbs_curve%insert_knots @@ -379,31 +379,31 @@

                  Called by

                  program~example1_curve - -example1_curve + +example1_curve - - -program~example1_curve->proc~insert_knots~2 - - + + +program~example1_curve->proc~insert_knots~3 + + program~example3_surface - -example3_surface + +example3_surface - - -program~example3_surface->proc~insert_knots~3 - - + + +program~example3_surface->proc~insert_knots~2 + + @@ -534,7 +534,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/insert_knots.html b/proc/insert_knots.html index ede8e850f..6226f303d 100644 --- a/proc/insert_knots.html +++ b/proc/insert_knots.html @@ -759,7 +759,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/insert_knots~2.html b/proc/insert_knots~2.html index 6735ff97a..cfb25b81c 100644 --- a/proc/insert_knots~2.html +++ b/proc/insert_knots~2.html @@ -78,20 +78,20 @@

                  insert_knots
                • 43 statements + title=" 1.6% of total for procedures.">104 statements
                • - Source File + Source File
                • @@ -137,13 +137,13 @@

                  Contents

                  -

                  private pure subroutine insert_knots(this, Xth, r) +

                  private pure subroutine insert_knots(this, dir, Xth, r)

                  Type Bound

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

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

                  Arguments

                  this -
                  - - integer, - intent(in) - - ::dir -
                  - + real(kind=rk), intent(in)
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + integer, intent(in)
                  @@ -158,8 +158,8 @@

                  Arguments

                  + + + + + + + + @@ -188,7 +203,7 @@

                  Arguments

                  @@ -216,238 +231,310 @@

                  Calls

                  - - + + proc~~insert_knots~2~~CallsGraph - + proc~insert_knots~2 - -nurbs_curve%insert_knots + +nurbs_surface%insert_knots interface~compute_multiplicity - -compute_multiplicity + +compute_multiplicity proc~insert_knots~2->interface~compute_multiplicity - - + + - + +none~get_knot~2 + + +nurbs_surface%get_knot + + + + + +proc~insert_knots~2->none~get_knot~2 + + + + + none~set~2 - - -nurbs_curve%set + + +nurbs_surface%set - + proc~insert_knots~2->none~set~2 - - + + - + proc~findspan - - -findspan + + +findspan - + proc~insert_knots~2->proc~findspan - - + + - + proc~insert_knot_a_5_1 - - -insert_knot_A_5_1 + + +insert_knot_A_5_1 - + proc~insert_knots~2->proc~insert_knot_a_5_1 - - + + - + proc~is_rational~2 - - -nurbs_curve%is_rational + + +nurbs_surface%is_rational - + proc~insert_knots~2->proc~is_rational~2 - - + + - + proc~compute_multiplicity1 - - -compute_multiplicity1 + + +compute_multiplicity1 - + interface~compute_multiplicity->proc~compute_multiplicity1 - - + + - + proc~compute_multiplicity2 - - -compute_multiplicity2 + + +compute_multiplicity2 - + interface~compute_multiplicity->proc~compute_multiplicity2 - - + + + + + +proc~get_knot_all~2 + + +nurbs_surface%get_knot_all + + + + + +none~get_knot~2->proc~get_knot_all~2 + + + + + +proc~get_knoti~2 + + +nurbs_surface%get_knoti + + + + + +none~get_knot~2->proc~get_knoti~2 + + - + proc~set1~2 - - -nurbs_curve%set1 + + +nurbs_surface%set1 - + none~set~2->proc~set1~2 - - + + - + proc~set2~2 - - -nurbs_curve%set2 + + +nurbs_surface%set2 - + none~set~2->proc~set2~2 - - + + - + proc~set3~2 - - -nurbs_curve%set3 + + +nurbs_surface%set3 - + none~set~2->proc~set3~2 - - + + - + proc~cmp_degree~2 - - -nurbs_curve%cmp_degree + + +nurbs_surface%cmp_degree - + proc~set1~2->proc~cmp_degree~2 - - + + + + + +proc~cmp_nc~2 + + +nurbs_surface%cmp_nc + + + + + +proc~set1~2->proc~cmp_nc~2 + + + + + +proc~set2~2->proc~cmp_nc~2 + + - + proc~compute_knot_vector - - -compute_knot_vector + + +compute_knot_vector - + proc~set2~2->proc~compute_knot_vector - - + + - + proc~set3~2->proc~cmp_degree~2 - - + + - + proc~get_multiplicity~2 - - -nurbs_curve%get_multiplicity + + +nurbs_surface%get_multiplicity - + proc~cmp_degree~2->proc~get_multiplicity~2 - - + + + + + +proc~cmp_nc~2->interface~compute_multiplicity + + - + proc~repelem - - -repelem + + +repelem - + proc~compute_knot_vector->proc~repelem - - + + - + proc~get_multiplicity~2->interface~compute_multiplicity - - + + @@ -547,31 +634,31 @@

                  Called by

                  - + proc~~insert_knots~2~~CalledByGraph - + proc~insert_knots~2 - -nurbs_curve%insert_knots + +nurbs_surface%insert_knots - + -program~example1_curve - - -example1_curve +program~example3_surface + + +example3_surface - + -program~example1_curve->proc~insert_knots~2 - - +program~example3_surface->proc~insert_knots~2 + + @@ -687,7 +774,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/insert_knots~3.html b/proc/insert_knots~3.html index b37a8fe73..9367e9945 100644 --- a/proc/insert_knots~3.html +++ b/proc/insert_knots~3.html @@ -78,20 +78,20 @@

                  insert_knots
                • 104 statements + title=" 0.7% of total for procedures.">43 statements
                • - Source File + Source File
                • @@ -137,13 +137,13 @@

                  Contents

                  -

                  private pure subroutine insert_knots(this, dir, Xth, r) +

                  private pure subroutine insert_knots(this, Xth, r)

                  Type Bound

                  -

                  nurbs_surface

                  +

                  nurbs_curve

                  Arguments

                  - - class(nurbs_curve), + + class(nurbs_surface), intent(inout) @@ -173,7 +173,22 @@

                  Arguments

                  - + + integer, + intent(in) + + ::dir + +
                  + real(kind=rk), intent(in),
                  - + integer, intent(in),
                  @@ -158,8 +158,8 @@

                  Arguments

                  - - - - - - - -
                  - - class(nurbs_surface), + + class(nurbs_curve), intent(inout) @@ -171,21 +171,6 @@

                  Arguments

                  - - integer, - intent(in) - - ::dir - -
                  @@ -231,310 +216,238 @@

                  Calls

                  - - + + proc~~insert_knots~3~~CallsGraph - + proc~insert_knots~3 - -nurbs_surface%insert_knots + +nurbs_curve%insert_knots interface~compute_multiplicity - -compute_multiplicity + +compute_multiplicity proc~insert_knots~3->interface~compute_multiplicity - - - - - -none~get_knot~3 - - -nurbs_surface%get_knot - - - - - -proc~insert_knots~3->none~get_knot~3 - - + + - + none~set~3 - - -nurbs_surface%set + + +nurbs_curve%set - + proc~insert_knots~3->none~set~3 - - + + - + proc~findspan - - -findspan + + +findspan - + proc~insert_knots~3->proc~findspan - - + + - + proc~insert_knot_a_5_1 - - -insert_knot_A_5_1 + + +insert_knot_A_5_1 - + proc~insert_knots~3->proc~insert_knot_a_5_1 - - + + - + proc~is_rational~3 - - -nurbs_surface%is_rational + + +nurbs_curve%is_rational - + proc~insert_knots~3->proc~is_rational~3 - - + + - + proc~compute_multiplicity1 - - -compute_multiplicity1 + + +compute_multiplicity1 - + interface~compute_multiplicity->proc~compute_multiplicity1 - - + + - + proc~compute_multiplicity2 - - -compute_multiplicity2 + + +compute_multiplicity2 - + interface~compute_multiplicity->proc~compute_multiplicity2 - - - - - -proc~get_knot_all~3 - - -nurbs_surface%get_knot_all - - - - - -none~get_knot~3->proc~get_knot_all~3 - - - - - -proc~get_knoti~3 - - -nurbs_surface%get_knoti - - - - - -none~get_knot~3->proc~get_knoti~3 - - + + - + proc~set1~3 - - -nurbs_surface%set1 + + +nurbs_curve%set1 - + none~set~3->proc~set1~3 - - + + - + proc~set2~3 - - -nurbs_surface%set2 + + +nurbs_curve%set2 - + none~set~3->proc~set2~3 - - + + - + proc~set3~3 - - -nurbs_surface%set3 + + +nurbs_curve%set3 - + none~set~3->proc~set3~3 - - + + - + proc~cmp_degree~3 - - -nurbs_surface%cmp_degree + + +nurbs_curve%cmp_degree - + proc~set1~3->proc~cmp_degree~3 - - - - - -proc~cmp_nc~3 - - -nurbs_surface%cmp_nc - - - - - -proc~set1~3->proc~cmp_nc~3 - - - - - -proc~set2~3->proc~cmp_nc~3 - - + + - + proc~compute_knot_vector - - -compute_knot_vector + + +compute_knot_vector - + proc~set2~3->proc~compute_knot_vector - - + + - + proc~set3~3->proc~cmp_degree~3 - - + + - + proc~get_multiplicity~3 - - -nurbs_surface%get_multiplicity + + +nurbs_curve%get_multiplicity - + proc~cmp_degree~3->proc~get_multiplicity~3 - - - - - -proc~cmp_nc~3->interface~compute_multiplicity - - + + - + proc~repelem - - -repelem + + +repelem - + proc~compute_knot_vector->proc~repelem - - + + - + proc~get_multiplicity~3->interface~compute_multiplicity - - + + @@ -634,31 +547,31 @@

                  Called by

                  - + proc~~insert_knots~3~~CalledByGraph - + proc~insert_knots~3 - -nurbs_surface%insert_knots + +nurbs_curve%insert_knots - + -program~example3_surface - - -example3_surface +program~example1_curve + + +example1_curve - + -program~example3_surface->proc~insert_knots~3 - - +program~example1_curve->proc~insert_knots~3 + + @@ -774,7 +687,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/is_rational.html b/proc/is_rational.html index 0c870a7aa..d9b95cabd 100644 --- a/proc/is_rational.html +++ b/proc/is_rational.html @@ -601,7 +601,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/is_rational~2.html b/proc/is_rational~2.html index 512f41991..4595ef293 100644 --- a/proc/is_rational~2.html +++ b/proc/is_rational~2.html @@ -83,15 +83,15 @@

                  is_rational
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure function is_rational(this) result(r)

                  Type Bound

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

                  @@ -158,8 +158,8 @@

                  Arguments

                  - - class(nurbs_curve), + + class(nurbs_surface), intent(in) @@ -176,7 +176,7 @@

                  Arguments

                  Return Value - + logical

                  @@ -193,343 +193,418 @@

                  Called by

                  - - + + proc~~is_rational~2~~CalledByGraph - + proc~is_rational~2 - -nurbs_curve%is_rational + +nurbs_surface%is_rational proc~basis_scalar~2 - - -nurbs_curve%basis_scalar + + +nurbs_surface%basis_scalar proc~basis_scalar~2->proc~is_rational~2 - - + + proc~basis_vector~2 - - -nurbs_curve%basis_vector + + +nurbs_surface%basis_vector proc~basis_vector~2->proc~is_rational~2 - - + + proc~cmp_xg~2 - - -nurbs_curve%cmp_Xg + + +nurbs_surface%cmp_Xg proc~cmp_xg~2->proc~is_rational~2 - - + + proc~create~2 - - -nurbs_curve%create + + +nurbs_surface%create proc~create~2->proc~is_rational~2 - - + + proc~derivative2_scalar~2 - - -nurbs_curve%derivative2_scalar + + +nurbs_surface%derivative2_scalar proc~derivative2_scalar~2->proc~is_rational~2 - - + + proc~derivative2_vector~2 - - -nurbs_curve%derivative2_vector + + +nurbs_surface%derivative2_vector proc~derivative2_vector~2->proc~is_rational~2 - - + + proc~derivative_scalar~2 - - -nurbs_curve%derivative_scalar + + +nurbs_surface%derivative_scalar proc~derivative_scalar~2->proc~is_rational~2 - - + + proc~derivative_vector~2 - - -nurbs_curve%derivative_vector + + +nurbs_surface%derivative_vector proc~derivative_vector~2->proc~is_rational~2 - - + + proc~elevate_degree~2 - - -nurbs_curve%elevate_degree + + +nurbs_surface%elevate_degree proc~elevate_degree~2->proc~is_rational~2 - - + + proc~insert_knots~2 - - -nurbs_curve%insert_knots + + +nurbs_surface%insert_knots proc~insert_knots~2->proc~is_rational~2 - - + + proc~remove_knots~2 - - -nurbs_curve%remove_knots + + +nurbs_surface%remove_knots proc~remove_knots~2->proc~is_rational~2 - - + + none~derivative2~2 - - -nurbs_curve%derivative2 + + +nurbs_surface%derivative2 - + none~derivative2~2->proc~derivative2_scalar~2 - - + + - + none~derivative2~2->proc~derivative2_vector~2 - - + + proc~nearest_point2~2 - - -nurbs_curve%nearest_point2 + + +nurbs_surface%nearest_point2 proc~nearest_point2~2->proc~cmp_xg~2 - - + + proc~nearest_point2~2->proc~create~2 - - + + - + proc~nearest_point2~2->none~derivative2~2 - - + + - + -program~example1_curve - - -example1_curve +program~example3_surface + + +example3_surface - + -program~example1_curve->proc~create~2 - - - - - -program~example1_curve->proc~elevate_degree~2 - - - - - -program~example1_curve->proc~insert_knots~2 - - - - - -program~example1_curve->proc~remove_knots~2 - - - - +program~example3_surface->proc~create~2 + + + + + +program~example3_surface->proc~elevate_degree~2 + + + + + +program~example3_surface->proc~insert_knots~2 + + + + + +program~example3_surface->proc~remove_knots~2 + + + + -program~example_nurbs_curve - - -example_nurbs_curve +program~example_nurbs_surface + + +example_nurbs_surface - + -program~example_nurbs_curve->proc~create~2 - - +program~example_nurbs_surface->proc~create~2 + + - + -program~nearest_point_1d - - -nearest_point_1d +program~example_ppm1 + + +example_ppm1 - + -program~nearest_point_1d->proc~create~2 - - - - - -program~nearest_point_1d->proc~nearest_point2~2 - - +program~example_ppm1->proc~create~2 + + - + -program~shape_c_1d - - -shape_C_1d +program~example_ppm2 + + +example_ppm2 - + -program~shape_c_1d->proc~create~2 - - +program~example_ppm2->proc~create~2 + + - + -program~shape_circle - - -shape_circle +program~example_ppm3 + + +example_ppm3 - + -program~shape_circle->proc~create~2 - - +program~example_ppm3->proc~create~2 + + - + -program~shape_half_circle - - -shape_half_circle +program~nearest_point_2d + + +nearest_point_2d - + -program~shape_half_circle->proc~create~2 - - +program~nearest_point_2d->proc~create~2 + + + + + +program~nearest_point_2d->proc~nearest_point2~2 + + + + + +program~nearest_point_2d_bench + + +nearest_point_2d_bench + + + + + +program~nearest_point_2d_bench->proc~create~2 + + + + + +program~shape_c_2d + + +shape_C_2d + + + + + +program~shape_c_2d->proc~create~2 + + + + + +program~shape_half_ring_2d + + +shape_half_ring_2d + + + + + +program~shape_half_ring_2d->proc~create~2 + + + + + +program~shape_ring_2d + + +shape_ring_2d + + + + + +program~shape_ring_2d->proc~create~2 + + + + + +program~shape_tetragon + + +shape_tetragon + + + + + +program~shape_tetragon->proc~create~2 + + @@ -649,7 +724,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/is_rational~3.html b/proc/is_rational~3.html index f4cc44982..6e96ac89b 100644 --- a/proc/is_rational~3.html +++ b/proc/is_rational~3.html @@ -83,15 +83,15 @@

                  is_rational
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure function is_rational(this) result(r)

                  Type Bound

                  -

                  nurbs_surface

                  +

                  nurbs_curve

                  Arguments

                  @@ -158,8 +158,8 @@

                  Arguments

                  - - class(nurbs_surface), + + class(nurbs_curve), intent(in) @@ -193,418 +193,343 @@

                  Called by

                  - - + + proc~~is_rational~3~~CalledByGraph - + proc~is_rational~3 - -nurbs_surface%is_rational + +nurbs_curve%is_rational proc~basis_scalar~3 - - -nurbs_surface%basis_scalar + + +nurbs_curve%basis_scalar proc~basis_scalar~3->proc~is_rational~3 - - + + proc~basis_vector~3 - - -nurbs_surface%basis_vector + + +nurbs_curve%basis_vector proc~basis_vector~3->proc~is_rational~3 - - + + proc~cmp_xg~3 - - -nurbs_surface%cmp_Xg + + +nurbs_curve%cmp_Xg proc~cmp_xg~3->proc~is_rational~3 - - + + proc~create~3 - - -nurbs_surface%create + + +nurbs_curve%create proc~create~3->proc~is_rational~3 - - + + proc~derivative2_scalar~3 - - -nurbs_surface%derivative2_scalar + + +nurbs_curve%derivative2_scalar proc~derivative2_scalar~3->proc~is_rational~3 - - + + proc~derivative2_vector~3 - - -nurbs_surface%derivative2_vector + + +nurbs_curve%derivative2_vector proc~derivative2_vector~3->proc~is_rational~3 - - + + proc~derivative_scalar~3 - - -nurbs_surface%derivative_scalar + + +nurbs_curve%derivative_scalar proc~derivative_scalar~3->proc~is_rational~3 - - + + proc~derivative_vector~3 - - -nurbs_surface%derivative_vector + + +nurbs_curve%derivative_vector proc~derivative_vector~3->proc~is_rational~3 - - + + proc~elevate_degree~3 - - -nurbs_surface%elevate_degree + + +nurbs_curve%elevate_degree proc~elevate_degree~3->proc~is_rational~3 - - + + proc~insert_knots~3 - - -nurbs_surface%insert_knots + + +nurbs_curve%insert_knots proc~insert_knots~3->proc~is_rational~3 - - + + proc~remove_knots~3 - - -nurbs_surface%remove_knots + + +nurbs_curve%remove_knots proc~remove_knots~3->proc~is_rational~3 - - + + none~derivative2~3 - - -nurbs_surface%derivative2 + + +nurbs_curve%derivative2 - + none~derivative2~3->proc~derivative2_scalar~3 - - + + - + none~derivative2~3->proc~derivative2_vector~3 - - + + proc~nearest_point2~3 - - -nurbs_surface%nearest_point2 + + +nurbs_curve%nearest_point2 proc~nearest_point2~3->proc~cmp_xg~3 - - + + proc~nearest_point2~3->proc~create~3 - - + + - + proc~nearest_point2~3->none~derivative2~3 - - + + - + -program~example3_surface - - -example3_surface +program~example1_curve + + +example1_curve - + -program~example3_surface->proc~create~3 - - - - - -program~example3_surface->proc~elevate_degree~3 - - - - - -program~example3_surface->proc~insert_knots~3 - - - - - -program~example3_surface->proc~remove_knots~3 - - - - +program~example1_curve->proc~create~3 + + + + + +program~example1_curve->proc~elevate_degree~3 + + + + + +program~example1_curve->proc~insert_knots~3 + + + + + +program~example1_curve->proc~remove_knots~3 + + + + -program~example_nurbs_surface - - -example_nurbs_surface +program~example_nurbs_curve + + +example_nurbs_curve - + -program~example_nurbs_surface->proc~create~3 - - +program~example_nurbs_curve->proc~create~3 + + - + -program~example_ppm1 - - -example_ppm1 +program~nearest_point_1d + + +nearest_point_1d - + -program~example_ppm1->proc~create~3 - - +program~nearest_point_1d->proc~create~3 + + + + + +program~nearest_point_1d->proc~nearest_point2~3 + + - + -program~example_ppm2 - - -example_ppm2 +program~shape_c_1d + + +shape_C_1d - + -program~example_ppm2->proc~create~3 - - +program~shape_c_1d->proc~create~3 + + - + -program~example_ppm3 - - -example_ppm3 +program~shape_circle + + +shape_circle - + -program~example_ppm3->proc~create~3 - - +program~shape_circle->proc~create~3 + + - + -program~nearest_point_2d - - -nearest_point_2d +program~shape_half_circle + + +shape_half_circle - + -program~nearest_point_2d->proc~create~3 - - - - - -program~nearest_point_2d->proc~nearest_point2~3 - - - - - -program~nearest_point_2d_bench - - -nearest_point_2d_bench - - - - - -program~nearest_point_2d_bench->proc~create~3 - - - - - -program~shape_c_2d - - -shape_C_2d - - - - - -program~shape_c_2d->proc~create~3 - - - - - -program~shape_half_ring_2d - - -shape_half_ring_2d - - - - - -program~shape_half_ring_2d->proc~create~3 - - - - - -program~shape_ring_2d - - -shape_ring_2d - - - - - -program~shape_ring_2d->proc~create~3 - - - - - -program~shape_tetragon - - -shape_tetragon - - - - - -program~shape_tetragon->proc~create~3 - - +program~shape_half_circle->proc~create~3 + + @@ -724,7 +649,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/isinf.html b/proc/isinf.html index 96be6d145..d6cad43ea 100644 --- a/proc/isinf.html +++ b/proc/isinf.html @@ -210,7 +210,7 @@

                  Return Value

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/isnan.html b/proc/isnan.html index a2b46887f..33f34a7f5 100644 --- a/proc/isnan.html +++ b/proc/isnan.html @@ -210,7 +210,7 @@

                  Return Value

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/kron.html b/proc/kron.html index 0955165b3..e11ae572f 100644 --- a/proc/kron.html +++ b/proc/kron.html @@ -841,7 +841,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/modify_wc.html b/proc/modify_wc.html index 8f6d06d3d..13da82361 100644 --- a/proc/modify_wc.html +++ b/proc/modify_wc.html @@ -693,7 +693,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/modify_wc~2.html b/proc/modify_wc~2.html index 410626f69..373470acc 100644 --- a/proc/modify_wc~2.html +++ b/proc/modify_wc~2.html @@ -83,15 +83,15 @@

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

                  private pure subroutine modify_Wc(this, W, num)

                  Type Bound

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

                  @@ -158,8 +158,8 @@

                  Arguments

                  @@ -216,337 +216,364 @@

                  Calls

                  - - + + proc~~modify_wc~2~~CallsGraph - + proc~modify_wc~2 - -nurbs_curve%modify_Wc + +nurbs_surface%modify_Wc none~get_knot~2 - - -nurbs_curve%get_knot + + +nurbs_surface%get_knot proc~modify_wc~2->none~get_knot~2 - - + + none~get_wc~2 - - -nurbs_curve%get_Wc + + +nurbs_surface%get_Wc proc~modify_wc~2->none~get_wc~2 - - + + none~get_xc~2 - - -nurbs_curve%get_Xc + + +nurbs_surface%get_Xc proc~modify_wc~2->none~get_xc~2 - - + + none~set~2 - - -nurbs_curve%set + + +nurbs_surface%set proc~modify_wc~2->none~set~2 - - + + proc~get_knot_all~2 - - -nurbs_curve%get_knot_all + + +nurbs_surface%get_knot_all none~get_knot~2->proc~get_knot_all~2 - - + + proc~get_knoti~2 - - -nurbs_curve%get_knoti + + +nurbs_surface%get_knoti none~get_knot~2->proc~get_knoti~2 - - + + proc~get_wc_all~2 - - -nurbs_curve%get_Wc_all + + +nurbs_surface%get_Wc_all none~get_wc~2->proc~get_wc_all~2 - - + + proc~get_wci~2 - - -nurbs_curve%get_Wci + + +nurbs_surface%get_Wci none~get_wc~2->proc~get_wci~2 - - + + proc~get_xc_all~2 - - -nurbs_curve%get_Xc_all + + +nurbs_surface%get_Xc_all none~get_xc~2->proc~get_xc_all~2 - - + + proc~get_xcid~2 - - -nurbs_curve%get_Xcid + + +nurbs_surface%get_Xcid none~get_xc~2->proc~get_xcid~2 - - + + proc~get_xci~2 - - -nurbs_curve%get_Xci + + +nurbs_surface%get_Xci none~get_xc~2->proc~get_xci~2 - - + + proc~set1~2 - - -nurbs_curve%set1 + + +nurbs_surface%set1 none~set~2->proc~set1~2 - - + + proc~set2~2 - - -nurbs_curve%set2 + + +nurbs_surface%set2 none~set~2->proc~set2~2 - - + + proc~set3~2 - - -nurbs_curve%set3 + + +nurbs_surface%set3 none~set~2->proc~set3~2 - - + + proc~cmp_degree~2 - - -nurbs_curve%cmp_degree + + +nurbs_surface%cmp_degree proc~set1~2->proc~cmp_degree~2 - - + + - + +proc~cmp_nc~2 + + +nurbs_surface%cmp_nc + + + + + +proc~set1~2->proc~cmp_nc~2 + + + + + +proc~set2~2->proc~cmp_nc~2 + + + + + proc~compute_knot_vector - - -compute_knot_vector + + +compute_knot_vector - + proc~set2~2->proc~compute_knot_vector - - + + - + proc~set3~2->proc~cmp_degree~2 - - + + - + proc~get_multiplicity~2 - - -nurbs_curve%get_multiplicity + + +nurbs_surface%get_multiplicity - + proc~cmp_degree~2->proc~get_multiplicity~2 - - + + - + -proc~repelem - - -repelem +interface~compute_multiplicity + + +compute_multiplicity - - -proc~compute_knot_vector->proc~repelem - - + + +proc~cmp_nc~2->interface~compute_multiplicity + + - - -interface~compute_multiplicity - - -compute_multiplicity + + +proc~repelem + + +repelem - - -proc~get_multiplicity~2->interface~compute_multiplicity - - + + +proc~compute_knot_vector->proc~repelem + + - + proc~compute_multiplicity1 - - -compute_multiplicity1 + + +compute_multiplicity1 - + interface~compute_multiplicity->proc~compute_multiplicity1 - - + + - + proc~compute_multiplicity2 - - -compute_multiplicity2 + + +compute_multiplicity2 - + interface~compute_multiplicity->proc~compute_multiplicity2 - - + + + + + +proc~get_multiplicity~2->interface~compute_multiplicity + + @@ -666,7 +693,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/modify_wc~3.html b/proc/modify_wc~3.html index 91aea1b49..86f3f7cb3 100644 --- a/proc/modify_wc~3.html +++ b/proc/modify_wc~3.html @@ -83,15 +83,15 @@

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

                  private pure subroutine modify_Wc(this, W, num)

                  Type Bound

                  -

                  nurbs_surface

                  +

                  nurbs_curve

                  Arguments

                  - - class(nurbs_curve), + + class(nurbs_surface), intent(inout) @@ -188,7 +188,7 @@

                  Arguments

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

                  Arguments

                  - - class(nurbs_surface), + + class(nurbs_curve), intent(inout) @@ -216,364 +216,337 @@

                  Calls

                  - - + + proc~~modify_wc~3~~CallsGraph - + proc~modify_wc~3 - -nurbs_surface%modify_Wc + +nurbs_curve%modify_Wc none~get_knot~3 - - -nurbs_surface%get_knot + + +nurbs_curve%get_knot proc~modify_wc~3->none~get_knot~3 - - + + none~get_wc~3 - - -nurbs_surface%get_Wc + + +nurbs_curve%get_Wc proc~modify_wc~3->none~get_wc~3 - - + + none~get_xc~3 - - -nurbs_surface%get_Xc + + +nurbs_curve%get_Xc proc~modify_wc~3->none~get_xc~3 - - + + none~set~3 - - -nurbs_surface%set + + +nurbs_curve%set proc~modify_wc~3->none~set~3 - - + + proc~get_knot_all~3 - - -nurbs_surface%get_knot_all + + +nurbs_curve%get_knot_all none~get_knot~3->proc~get_knot_all~3 - - + + proc~get_knoti~3 - - -nurbs_surface%get_knoti + + +nurbs_curve%get_knoti none~get_knot~3->proc~get_knoti~3 - - + + proc~get_wc_all~3 - - -nurbs_surface%get_Wc_all + + +nurbs_curve%get_Wc_all none~get_wc~3->proc~get_wc_all~3 - - + + proc~get_wci~3 - - -nurbs_surface%get_Wci + + +nurbs_curve%get_Wci none~get_wc~3->proc~get_wci~3 - - + + proc~get_xc_all~3 - - -nurbs_surface%get_Xc_all + + +nurbs_curve%get_Xc_all none~get_xc~3->proc~get_xc_all~3 - - + + proc~get_xcid~3 - - -nurbs_surface%get_Xcid + + +nurbs_curve%get_Xcid none~get_xc~3->proc~get_xcid~3 - - + + proc~get_xci~3 - - -nurbs_surface%get_Xci + + +nurbs_curve%get_Xci none~get_xc~3->proc~get_xci~3 - - + + proc~set1~3 - - -nurbs_surface%set1 + + +nurbs_curve%set1 none~set~3->proc~set1~3 - - + + proc~set2~3 - - -nurbs_surface%set2 + + +nurbs_curve%set2 none~set~3->proc~set2~3 - - + + proc~set3~3 - - -nurbs_surface%set3 + + +nurbs_curve%set3 none~set~3->proc~set3~3 - - + + proc~cmp_degree~3 - - -nurbs_surface%cmp_degree + + +nurbs_curve%cmp_degree proc~set1~3->proc~cmp_degree~3 - - - - - -proc~cmp_nc~3 - - -nurbs_surface%cmp_nc - - - - - -proc~set1~3->proc~cmp_nc~3 - - - - - -proc~set2~3->proc~cmp_nc~3 - - + + - + proc~compute_knot_vector - - -compute_knot_vector + + +compute_knot_vector - + proc~set2~3->proc~compute_knot_vector - - + + - + proc~set3~3->proc~cmp_degree~3 - - + + - + proc~get_multiplicity~3 - - -nurbs_surface%get_multiplicity + + +nurbs_curve%get_multiplicity - + proc~cmp_degree~3->proc~get_multiplicity~3 - - + + - + -interface~compute_multiplicity - - -compute_multiplicity +proc~repelem + + +repelem - - -proc~cmp_nc~3->interface~compute_multiplicity - - + + +proc~compute_knot_vector->proc~repelem + + - - -proc~repelem - - -repelem + + +interface~compute_multiplicity + + +compute_multiplicity - - -proc~compute_knot_vector->proc~repelem - - + + +proc~get_multiplicity~3->interface~compute_multiplicity + + - + proc~compute_multiplicity1 - - -compute_multiplicity1 + + +compute_multiplicity1 - + interface~compute_multiplicity->proc~compute_multiplicity1 - - + + - + proc~compute_multiplicity2 - - -compute_multiplicity2 + + +compute_multiplicity2 - + interface~compute_multiplicity->proc~compute_multiplicity2 - - - - - -proc~get_multiplicity~3->interface~compute_multiplicity - - + + @@ -693,7 +666,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/modify_xc.html b/proc/modify_xc.html index 8340ac849..c54bfdfe4 100644 --- a/proc/modify_xc.html +++ b/proc/modify_xc.html @@ -708,7 +708,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/modify_xc~2.html b/proc/modify_xc~2.html index 12d358f80..1e699bee5 100644 --- a/proc/modify_xc~2.html +++ b/proc/modify_xc~2.html @@ -83,15 +83,15 @@

                  modify_Xc
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure subroutine modify_Xc(this, X, num, dir)

                  Type Bound

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

                  @@ -158,8 +158,8 @@

                  Arguments

                  @@ -188,7 +188,7 @@

                  Arguments

                  @@ -203,7 +203,7 @@

                  Arguments

                  @@ -231,337 +231,364 @@

                  Calls

                  - - + + proc~~modify_xc~2~~CallsGraph - + proc~modify_xc~2 - -nurbs_curve%modify_Xc + +nurbs_surface%modify_Xc none~get_knot~2 - - -nurbs_curve%get_knot + + +nurbs_surface%get_knot proc~modify_xc~2->none~get_knot~2 - - + + none~get_wc~2 - - -nurbs_curve%get_Wc + + +nurbs_surface%get_Wc proc~modify_xc~2->none~get_wc~2 - - + + none~get_xc~2 - - -nurbs_curve%get_Xc + + +nurbs_surface%get_Xc proc~modify_xc~2->none~get_xc~2 - - + + none~set~2 - - -nurbs_curve%set + + +nurbs_surface%set proc~modify_xc~2->none~set~2 - - + + proc~get_knot_all~2 - - -nurbs_curve%get_knot_all + + +nurbs_surface%get_knot_all none~get_knot~2->proc~get_knot_all~2 - - + + proc~get_knoti~2 - - -nurbs_curve%get_knoti + + +nurbs_surface%get_knoti none~get_knot~2->proc~get_knoti~2 - - + + proc~get_wc_all~2 - - -nurbs_curve%get_Wc_all + + +nurbs_surface%get_Wc_all none~get_wc~2->proc~get_wc_all~2 - - + + proc~get_wci~2 - - -nurbs_curve%get_Wci + + +nurbs_surface%get_Wci none~get_wc~2->proc~get_wci~2 - - + + proc~get_xc_all~2 - - -nurbs_curve%get_Xc_all + + +nurbs_surface%get_Xc_all none~get_xc~2->proc~get_xc_all~2 - - + + proc~get_xcid~2 - - -nurbs_curve%get_Xcid + + +nurbs_surface%get_Xcid none~get_xc~2->proc~get_xcid~2 - - + + proc~get_xci~2 - - -nurbs_curve%get_Xci + + +nurbs_surface%get_Xci none~get_xc~2->proc~get_xci~2 - - + + proc~set1~2 - - -nurbs_curve%set1 + + +nurbs_surface%set1 none~set~2->proc~set1~2 - - + + proc~set2~2 - - -nurbs_curve%set2 + + +nurbs_surface%set2 none~set~2->proc~set2~2 - - + + proc~set3~2 - - -nurbs_curve%set3 + + +nurbs_surface%set3 none~set~2->proc~set3~2 - - + + proc~cmp_degree~2 - - -nurbs_curve%cmp_degree + + +nurbs_surface%cmp_degree proc~set1~2->proc~cmp_degree~2 - - + + - + +proc~cmp_nc~2 + + +nurbs_surface%cmp_nc + + + + + +proc~set1~2->proc~cmp_nc~2 + + + + + +proc~set2~2->proc~cmp_nc~2 + + + + + proc~compute_knot_vector - - -compute_knot_vector + + +compute_knot_vector - + proc~set2~2->proc~compute_knot_vector - - + + - + proc~set3~2->proc~cmp_degree~2 - - + + - + proc~get_multiplicity~2 - - -nurbs_curve%get_multiplicity + + +nurbs_surface%get_multiplicity - + proc~cmp_degree~2->proc~get_multiplicity~2 - - + + - + -proc~repelem - - -repelem +interface~compute_multiplicity + + +compute_multiplicity - - -proc~compute_knot_vector->proc~repelem - - + + +proc~cmp_nc~2->interface~compute_multiplicity + + - - -interface~compute_multiplicity - - -compute_multiplicity + + +proc~repelem + + +repelem - - -proc~get_multiplicity~2->interface~compute_multiplicity - - + + +proc~compute_knot_vector->proc~repelem + + - + proc~compute_multiplicity1 - - -compute_multiplicity1 + + +compute_multiplicity1 - + interface~compute_multiplicity->proc~compute_multiplicity1 - - + + - + proc~compute_multiplicity2 - - -compute_multiplicity2 + + +compute_multiplicity2 - + interface~compute_multiplicity->proc~compute_multiplicity2 - - + + + + + +proc~get_multiplicity~2->interface~compute_multiplicity + + @@ -637,6 +664,126 @@ +

                  Solid arrows point from a procedure to one which it calls. Dashed +arrows point from an interface to procedures which implement that interface. +This could include the module procedures in a generic interface or the +implementation in a submodule of an interface in a parent module. +

                  + Where possible, edges connecting nodes are +given different colours to make them easier to distinguish in +large graphs. + + + + + +
                  +
                  +

                  Called by

                  +
                  +
                  +
                  + + + + + +proc~~modify_xc~2~~CalledByGraph + + + +proc~modify_xc~2 + +nurbs_surface%modify_Xc + + + +program~example_ppm3 + + +example_ppm3 + + + + + +program~example_ppm3->proc~modify_xc~2 + + + + + +
                  + Help +
                  +
                  - - class(nurbs_curve), + + class(nurbs_surface), intent(inout) @@ -173,7 +173,7 @@

                  Arguments

                  - + real(kind=rk), intent(in)
                  - + integer, intent(in)
                  - + integer, intent(in)
                  @@ -158,8 +158,8 @@

                  Arguments

                  @@ -231,364 +231,337 @@

                  Calls

                  - - + + proc~~modify_xc~3~~CallsGraph - + proc~modify_xc~3 - -nurbs_surface%modify_Xc + +nurbs_curve%modify_Xc none~get_knot~3 - - -nurbs_surface%get_knot + + +nurbs_curve%get_knot proc~modify_xc~3->none~get_knot~3 - - + + none~get_wc~3 - - -nurbs_surface%get_Wc + + +nurbs_curve%get_Wc proc~modify_xc~3->none~get_wc~3 - - + + none~get_xc~3 - - -nurbs_surface%get_Xc + + +nurbs_curve%get_Xc proc~modify_xc~3->none~get_xc~3 - - + + none~set~3 - - -nurbs_surface%set + + +nurbs_curve%set proc~modify_xc~3->none~set~3 - - + + proc~get_knot_all~3 - - -nurbs_surface%get_knot_all + + +nurbs_curve%get_knot_all none~get_knot~3->proc~get_knot_all~3 - - + + proc~get_knoti~3 - - -nurbs_surface%get_knoti + + +nurbs_curve%get_knoti none~get_knot~3->proc~get_knoti~3 - - + + proc~get_wc_all~3 - - -nurbs_surface%get_Wc_all + + +nurbs_curve%get_Wc_all none~get_wc~3->proc~get_wc_all~3 - - + + proc~get_wci~3 - - -nurbs_surface%get_Wci + + +nurbs_curve%get_Wci none~get_wc~3->proc~get_wci~3 - - + + proc~get_xc_all~3 - - -nurbs_surface%get_Xc_all + + +nurbs_curve%get_Xc_all none~get_xc~3->proc~get_xc_all~3 - - + + proc~get_xcid~3 - - -nurbs_surface%get_Xcid + + +nurbs_curve%get_Xcid none~get_xc~3->proc~get_xcid~3 - - + + proc~get_xci~3 - - -nurbs_surface%get_Xci + + +nurbs_curve%get_Xci none~get_xc~3->proc~get_xci~3 - - + + proc~set1~3 - - -nurbs_surface%set1 + + +nurbs_curve%set1 none~set~3->proc~set1~3 - - + + proc~set2~3 - - -nurbs_surface%set2 + + +nurbs_curve%set2 none~set~3->proc~set2~3 - - + + proc~set3~3 - - -nurbs_surface%set3 + + +nurbs_curve%set3 none~set~3->proc~set3~3 - - + + proc~cmp_degree~3 - - -nurbs_surface%cmp_degree + + +nurbs_curve%cmp_degree proc~set1~3->proc~cmp_degree~3 - - - - - -proc~cmp_nc~3 - - -nurbs_surface%cmp_nc - - - - - -proc~set1~3->proc~cmp_nc~3 - - - - - -proc~set2~3->proc~cmp_nc~3 - - + + - + proc~compute_knot_vector - - -compute_knot_vector + + +compute_knot_vector - + proc~set2~3->proc~compute_knot_vector - - + + - + proc~set3~3->proc~cmp_degree~3 - - + + - + proc~get_multiplicity~3 - - -nurbs_surface%get_multiplicity + + +nurbs_curve%get_multiplicity - + proc~cmp_degree~3->proc~get_multiplicity~3 - - + + - + -interface~compute_multiplicity - - -compute_multiplicity +proc~repelem + + +repelem - - -proc~cmp_nc~3->interface~compute_multiplicity - - + + +proc~compute_knot_vector->proc~repelem + + - - -proc~repelem - - -repelem + + +interface~compute_multiplicity + + +compute_multiplicity - - -proc~compute_knot_vector->proc~repelem - - + + +proc~get_multiplicity~3->interface~compute_multiplicity + + - + proc~compute_multiplicity1 - - -compute_multiplicity1 + + +compute_multiplicity1 - + interface~compute_multiplicity->proc~compute_multiplicity1 - - + + - + proc~compute_multiplicity2 - - -compute_multiplicity2 + + +compute_multiplicity2 - + interface~compute_multiplicity->proc~compute_multiplicity2 - - - - - -proc~get_multiplicity~3->interface~compute_multiplicity - - + + @@ -664,126 +637,6 @@ -

                  Solid arrows point from a procedure to one which it calls. Dashed -arrows point from an interface to procedures which implement that interface. -This could include the module procedures in a generic interface or the -implementation in a submodule of an interface in a parent module. -

                  - Where possible, edges connecting nodes are -given different colours to make them easier to distinguish in -large graphs. - - - - - -
                  -
                  -

                  Called by

                  -
                  -
                  -
                  - - - - - -proc~~modify_xc~3~~CalledByGraph - - - -proc~modify_xc~3 - -nurbs_surface%modify_Xc - - - -program~example_ppm3 - - -example_ppm3 - - - - - -program~example_ppm3->proc~modify_xc~3 - - - - - -
                  - Help -
                  -
                  @@ -255,18 +255,18 @@

                  Called by

                  - + -proc~basis_vector~3 - +proc~basis_vector~2 + nurbs_surface%basis_vector - + -proc~basis_vector~3->interface~ndgrid +proc~basis_vector~2->interface~ndgrid @@ -285,18 +285,18 @@

                  Called by

                  - + -proc~create~3 - +proc~create~2 + nurbs_surface%create - + -proc~create~3->interface~ndgrid +proc~create~2->interface~ndgrid @@ -315,18 +315,18 @@

                  Called by

                  - + -proc~derivative2_vector~3 - +proc~derivative2_vector~2 + nurbs_surface%derivative2_vector - + -proc~derivative2_vector~3->interface~ndgrid +proc~derivative2_vector~2->interface~ndgrid @@ -345,18 +345,18 @@

                  Called by

                  - + -proc~derivative_vector~3 - +proc~derivative_vector~2 + nurbs_surface%derivative_vector - + -proc~derivative_vector~3->interface~ndgrid +proc~derivative_vector~2->interface~ndgrid @@ -375,18 +375,18 @@

                  Called by

                  - + -none~derivative2~3 - +none~derivative2~2 + nurbs_surface%derivative2 - + -none~derivative2~3->proc~derivative2_vector~3 +none~derivative2~2->proc~derivative2_vector~2 @@ -411,24 +411,24 @@

                  Called by

                  - + -proc~nearest_point2~3 - +proc~nearest_point2~2 + nurbs_surface%nearest_point2 - + -proc~nearest_point2~3->proc~create~3 +proc~nearest_point2~2->proc~create~2 - + -proc~nearest_point2~3->none~derivative2~3 +proc~nearest_point2~2->none~derivative2~2 @@ -441,9 +441,9 @@

                  Called by

                  - + -program~example3_surface->proc~create~3 +program~example3_surface->proc~create~2 @@ -471,9 +471,9 @@

                  Called by

                  - + -program~example_nurbs_surface->proc~create~3 +program~example_nurbs_surface->proc~create~2 @@ -501,9 +501,9 @@

                  Called by

                  - + -program~example_ppm1->proc~create~3 +program~example_ppm1->proc~create~2 @@ -516,9 +516,9 @@

                  Called by

                  - + -program~example_ppm2->proc~create~3 +program~example_ppm2->proc~create~2 @@ -531,9 +531,9 @@

                  Called by

                  - + -program~example_ppm3->proc~create~3 +program~example_ppm3->proc~create~2 @@ -546,15 +546,15 @@

                  Called by

                  - + -program~nearest_point_2d->proc~create~3 +program~nearest_point_2d->proc~create~2 - + -program~nearest_point_2d->proc~nearest_point2~3 +program~nearest_point_2d->proc~nearest_point2~2 @@ -567,9 +567,9 @@

                  Called by

                  - + -program~nearest_point_2d_bench->proc~create~3 +program~nearest_point_2d_bench->proc~create~2 @@ -603,9 +603,9 @@

                  Called by

                  - + -program~shape_c_2d->proc~create~3 +program~shape_c_2d->proc~create~2 @@ -633,9 +633,9 @@

                  Called by

                  - + -program~shape_half_ring_2d->proc~create~3 +program~shape_half_ring_2d->proc~create~2 @@ -678,9 +678,9 @@

                  Called by

                  - + -program~shape_ring_2d->proc~create~3 +program~shape_ring_2d->proc~create~2 @@ -708,9 +708,9 @@

                  Called by

                  - + -program~shape_tetragon->proc~create~3 +program~shape_tetragon->proc~create~2 @@ -832,7 +832,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/ndgrid3.html b/proc/ndgrid3.html index cc5214c9e..b589a5fdd 100644 --- a/proc/ndgrid3.html +++ b/proc/ndgrid3.html @@ -201,7 +201,7 @@

                  Arguments

                  @@ -270,18 +270,18 @@

                  Called by

                  - + -proc~basis_vector~3 - +proc~basis_vector~2 + nurbs_surface%basis_vector - + -proc~basis_vector~3->interface~ndgrid +proc~basis_vector~2->interface~ndgrid @@ -300,18 +300,18 @@

                  Called by

                  - + -proc~create~3 - +proc~create~2 + nurbs_surface%create - + -proc~create~3->interface~ndgrid +proc~create~2->interface~ndgrid @@ -330,18 +330,18 @@

                  Called by

                  - + -proc~derivative2_vector~3 - +proc~derivative2_vector~2 + nurbs_surface%derivative2_vector - + -proc~derivative2_vector~3->interface~ndgrid +proc~derivative2_vector~2->interface~ndgrid @@ -360,18 +360,18 @@

                  Called by

                  - + -proc~derivative_vector~3 - +proc~derivative_vector~2 + nurbs_surface%derivative_vector - + -proc~derivative_vector~3->interface~ndgrid +proc~derivative_vector~2->interface~ndgrid @@ -390,18 +390,18 @@

                  Called by

                  - + -none~derivative2~3 - +none~derivative2~2 + nurbs_surface%derivative2 - + -none~derivative2~3->proc~derivative2_vector~3 +none~derivative2~2->proc~derivative2_vector~2 @@ -426,24 +426,24 @@

                  Called by

                  - + -proc~nearest_point2~3 - +proc~nearest_point2~2 + nurbs_surface%nearest_point2 - + -proc~nearest_point2~3->proc~create~3 +proc~nearest_point2~2->proc~create~2 - + -proc~nearest_point2~3->none~derivative2~3 +proc~nearest_point2~2->none~derivative2~2 @@ -456,9 +456,9 @@

                  Called by

                  - + -program~example3_surface->proc~create~3 +program~example3_surface->proc~create~2 @@ -486,9 +486,9 @@

                  Called by

                  - + -program~example_nurbs_surface->proc~create~3 +program~example_nurbs_surface->proc~create~2 @@ -516,9 +516,9 @@

                  Called by

                  - + -program~example_ppm1->proc~create~3 +program~example_ppm1->proc~create~2 @@ -531,9 +531,9 @@

                  Called by

                  - + -program~example_ppm2->proc~create~3 +program~example_ppm2->proc~create~2 @@ -546,9 +546,9 @@

                  Called by

                  - + -program~example_ppm3->proc~create~3 +program~example_ppm3->proc~create~2 @@ -561,15 +561,15 @@

                  Called by

                  - + -program~nearest_point_2d->proc~create~3 +program~nearest_point_2d->proc~create~2 - + -program~nearest_point_2d->proc~nearest_point2~3 +program~nearest_point_2d->proc~nearest_point2~2 @@ -582,9 +582,9 @@

                  Called by

                  - + -program~nearest_point_2d_bench->proc~create~3 +program~nearest_point_2d_bench->proc~create~2 @@ -618,9 +618,9 @@

                  Called by

                  - + -program~shape_c_2d->proc~create~3 +program~shape_c_2d->proc~create~2 @@ -648,9 +648,9 @@

                  Called by

                  - + -program~shape_half_ring_2d->proc~create~3 +program~shape_half_ring_2d->proc~create~2 @@ -693,9 +693,9 @@

                  Called by

                  - + -program~shape_ring_2d->proc~create~3 +program~shape_ring_2d->proc~create~2 @@ -723,9 +723,9 @@

                  Called by

                  - + -program~shape_tetragon->proc~create~3 +program~shape_tetragon->proc~create~2 @@ -847,7 +847,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/nearest_point.html b/proc/nearest_point.html index 90ca9e44a..59d884fdc 100644 --- a/proc/nearest_point.html +++ b/proc/nearest_point.html @@ -188,7 +188,7 @@

                  Arguments

                  @@ -203,7 +203,7 @@

                  Arguments

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

                  Arguments

                  @@ -506,7 +506,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/nearest_point2.html b/proc/nearest_point2.html index 1f9fbadeb..26a2ea0cf 100644 --- a/proc/nearest_point2.html +++ b/proc/nearest_point2.html @@ -218,7 +218,7 @@

                  Arguments

                  @@ -233,7 +233,7 @@

                  Arguments

                  @@ -741,7 +741,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/nearest_point2~2.html b/proc/nearest_point2~2.html index 324040232..d9cd27ede 100644 --- a/proc/nearest_point2~2.html +++ b/proc/nearest_point2~2.html @@ -78,20 +78,20 @@

                  nearest_point2
                • 55 statements + title=" 1.1% of total for procedures.">70 statements
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private impure subroutine nearest_point2(this, point_Xg, tol, maxit, nearest

                  Type Bound

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

                  - - class(nurbs_surface), + + class(nurbs_curve), intent(inout) @@ -203,7 +203,7 @@

                  Arguments

                  - + integer, intent(in)
                  - + real(kind=rk), intent(out),
                  - + real(kind=rk), intent(out),
                  - + real(kind=rk), intent(out),
                  - + real(kind=rk), intent(out),
                  - + integer, intent(out),
                  - + real(kind=rk), intent(out)
                  - + real(kind=rk), intent(out),
                  @@ -158,8 +158,8 @@

                  Arguments

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

                  Arguments

                  - + @@ -261,196 +261,247 @@

                  Calls

                  - - + + proc~~nearest_point2~2~~CallsGraph - + proc~nearest_point2~2 - -nurbs_curve%nearest_point2 + +nurbs_surface%nearest_point2 - + -interface~nearest_point_help_1d - - -nearest_point_help_1d +interface~nearest_point_help_2d + + +nearest_point_help_2d - + -proc~nearest_point2~2->interface~nearest_point_help_1d - - +proc~nearest_point2~2->interface~nearest_point_help_2d + + none~derivative2~2 - - -nurbs_curve%derivative2 + + +nurbs_surface%derivative2 proc~nearest_point2~2->none~derivative2~2 - - + + proc~cmp_xg~2 - - -nurbs_curve%cmp_Xg + + +nurbs_surface%cmp_Xg proc~nearest_point2~2->proc~cmp_xg~2 - - + + proc~create~2 - - -nurbs_curve%create + + +nurbs_surface%create proc~nearest_point2~2->proc~create~2 - - + + proc~finalize~2 - - -nurbs_curve%finalize + + +nurbs_surface%finalize proc~nearest_point2~2->proc~finalize~2 - - + + - + proc~derivative2_scalar~2 - - -nurbs_curve%derivative2_scalar + + +nurbs_surface%derivative2_scalar none~derivative2~2->proc~derivative2_scalar~2 - - + + - + proc~derivative2_vector~2 - - -nurbs_curve%derivative2_vector + + +nurbs_surface%derivative2_vector none~derivative2~2->proc~derivative2_vector~2 - - + + interface~compute_xg~2 - -compute_Xg + +compute_Xg proc~cmp_xg~2->interface~compute_xg~2 - - + + - + proc~is_rational~2 - - -nurbs_curve%is_rational + + +nurbs_surface%is_rational proc~cmp_xg~2->proc~is_rational~2 - - + + proc~create~2->interface~compute_xg~2 - - + + - + + +interface~ndgrid + + +ndgrid + + + + +proc~create~2->interface~ndgrid + + + + + proc~create~2->proc~is_rational~2 - - + + + + + +proc~ndgrid2 + + +ndgrid2 + - + + +interface~ndgrid->proc~ndgrid2 + + + + + +proc~ndgrid3 + + +ndgrid3 + + + + + +interface~ndgrid->proc~ndgrid3 + + + + + proc~derivative2_scalar~2->proc~is_rational~2 - - + + - + interface~compute_d2tgc~2 - - -compute_d2Tgc + + +compute_d2Tgc - + proc~derivative2_scalar~2->interface~compute_d2tgc~2 - - + + + + + +proc~derivative2_vector~2->interface~ndgrid + + - + proc~derivative2_vector~2->proc~is_rational~2 - - + + - + proc~derivative2_vector~2->interface~compute_d2tgc~2 - - + + @@ -550,31 +601,31 @@

                  Called by

                  - + proc~~nearest_point2~2~~CalledByGraph - + proc~nearest_point2~2 - -nurbs_curve%nearest_point2 + +nurbs_surface%nearest_point2 - + -program~nearest_point_1d - +program~nearest_point_2d + -nearest_point_1d +nearest_point_2d - + -program~nearest_point_1d->proc~nearest_point2~2 - - +program~nearest_point_2d->proc~nearest_point2~2 + + @@ -690,7 +741,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/nearest_point2~3.html b/proc/nearest_point2~3.html index 1c87f0d3a..935f793c1 100644 --- a/proc/nearest_point2~3.html +++ b/proc/nearest_point2~3.html @@ -78,20 +78,20 @@

                  nearest_point2
                • 70 statements + title=" 0.9% of total for procedures.">55 statements
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private impure subroutine nearest_point2(this, point_Xg, tol, maxit, nearest

                  Type Bound

                  -

                  nurbs_surface

                  +

                  nurbs_curve

                  Arguments

                  - - class(nurbs_curve), + + class(nurbs_surface), intent(inout) @@ -188,7 +188,7 @@

                  Arguments

                  - + real(kind=rk), intent(in) ::nearest_Xtnearest_Xt(2)
                  @@ -159,7 +159,7 @@

                  Arguments

                  @@ -226,14 +226,14 @@

                  Arguments

                  - + @@ -261,247 +261,196 @@

                  Calls

                  - - + + proc~~nearest_point2~3~~CallsGraph - + proc~nearest_point2~3 - -nurbs_surface%nearest_point2 + +nurbs_curve%nearest_point2 - + -interface~nearest_point_help_2d - - -nearest_point_help_2d +interface~nearest_point_help_1d + + +nearest_point_help_1d - + -proc~nearest_point2~3->interface~nearest_point_help_2d - - +proc~nearest_point2~3->interface~nearest_point_help_1d + + none~derivative2~3 - - -nurbs_surface%derivative2 + + +nurbs_curve%derivative2 proc~nearest_point2~3->none~derivative2~3 - - + + proc~cmp_xg~3 - - -nurbs_surface%cmp_Xg + + +nurbs_curve%cmp_Xg proc~nearest_point2~3->proc~cmp_xg~3 - - + + proc~create~3 - - -nurbs_surface%create + + +nurbs_curve%create proc~nearest_point2~3->proc~create~3 - - + + proc~finalize~3 - - -nurbs_surface%finalize + + +nurbs_curve%finalize proc~nearest_point2~3->proc~finalize~3 - - + + - + proc~derivative2_scalar~3 - - -nurbs_surface%derivative2_scalar + + +nurbs_curve%derivative2_scalar none~derivative2~3->proc~derivative2_scalar~3 - - + + - + proc~derivative2_vector~3 - - -nurbs_surface%derivative2_vector + + +nurbs_curve%derivative2_vector none~derivative2~3->proc~derivative2_vector~3 - - + + interface~compute_xg~3 - -compute_Xg + +compute_Xg proc~cmp_xg~3->interface~compute_xg~3 - - + + - + proc~is_rational~3 - - -nurbs_surface%is_rational + + +nurbs_curve%is_rational proc~cmp_xg~3->proc~is_rational~3 - - + + proc~create~3->interface~compute_xg~3 - - - - - -interface~ndgrid - - -ndgrid - - - - - -proc~create~3->interface~ndgrid - - + + - + proc~create~3->proc~is_rational~3 - - - - - -proc~ndgrid2 - - -ndgrid2 - - - - - -interface~ndgrid->proc~ndgrid2 - - - - - -proc~ndgrid3 - - -ndgrid3 - - - - - -interface~ndgrid->proc~ndgrid3 - - + + - + proc~derivative2_scalar~3->proc~is_rational~3 - - + + - + interface~compute_d2tgc~3 - - -compute_d2Tgc + + +compute_d2Tgc - + proc~derivative2_scalar~3->interface~compute_d2tgc~3 - - - - - -proc~derivative2_vector~3->interface~ndgrid - - + + - + proc~derivative2_vector~3->proc~is_rational~3 - - + + - + proc~derivative2_vector~3->interface~compute_d2tgc~3 - - + + @@ -601,31 +550,31 @@

                  Called by

                  - + proc~~nearest_point2~3~~CalledByGraph - + proc~nearest_point2~3 - -nurbs_surface%nearest_point2 + +nurbs_curve%nearest_point2 - + -program~nearest_point_2d - +program~nearest_point_1d + -nearest_point_2d +nearest_point_1d - + -program~nearest_point_2d->proc~nearest_point2~3 - - +program~nearest_point_1d->proc~nearest_point2~3 + + @@ -741,7 +690,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/nearest_point_help_1d.html b/proc/nearest_point_help_1d.html index 2a0eb4167..811d25eb6 100644 --- a/proc/nearest_point_help_1d.html +++ b/proc/nearest_point_help_1d.html @@ -275,7 +275,7 @@

                  Arguments

                  @@ -290,7 +290,7 @@

                  Arguments

                  @@ -305,7 +305,7 @@

                  Arguments

                  @@ -323,7 +323,7 @@

                  Arguments

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

                  @@ -359,7 +359,7 @@

                  Return Value

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/nearest_point_help_2d.html b/proc/nearest_point_help_2d.html index b5d8f8a01..a47a1a276 100644 --- a/proc/nearest_point_help_2d.html +++ b/proc/nearest_point_help_2d.html @@ -275,7 +275,7 @@

                  Arguments

                  @@ -290,7 +290,7 @@

                  Arguments

                  @@ -305,7 +305,7 @@

                  Arguments

                  @@ -323,7 +323,7 @@

                  Arguments

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

                  @@ -359,7 +359,7 @@

                  Return Value

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/nearest_point_help_3d.html b/proc/nearest_point_help_3d.html index a76a106a2..55a7cecb9 100644 --- a/proc/nearest_point_help_3d.html +++ b/proc/nearest_point_help_3d.html @@ -359,7 +359,7 @@

                  Return Value

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/nearest_point~2.html b/proc/nearest_point~2.html index fe11c9d0e..0bf5bb59c 100644 --- a/proc/nearest_point~2.html +++ b/proc/nearest_point~2.html @@ -83,15 +83,15 @@

                  nearest_point
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure subroutine nearest_point(this, point_Xg, nearest_Xg, nearest_Xt

                  Type Bound

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

                  - class(nurbs_surface), + class(nurbs_curve), intent(inout) @@ -218,7 +218,7 @@

                  Arguments

                  - + real(kind=rk), intent(out) ::nearest_Xt(2)nearest_Xt
                  - + real(kind=rk), intent(out),
                  - + integer, intent(in)
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + integer, intent(in)
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  @@ -158,8 +158,8 @@

                  Arguments

                  - - + @@ -246,31 +246,31 @@

                  Calls

                  - + proc~~nearest_point~2~~CallsGraph - + proc~nearest_point~2 - -nurbs_curve%nearest_point + +nurbs_surface%nearest_point - + -interface~nearest_point_help_1d - - -nearest_point_help_1d +interface~nearest_point_help_2d + + +nearest_point_help_2d - + -proc~nearest_point~2->interface~nearest_point_help_1d - - +proc~nearest_point~2->interface~nearest_point_help_2d + + @@ -366,31 +366,46 @@

                  Called by

                  - - + + proc~~nearest_point~2~~CalledByGraph - + proc~nearest_point~2 - -nurbs_curve%nearest_point + +nurbs_surface%nearest_point - + -program~nearest_point_1d - - -nearest_point_1d +program~nearest_point_2d + + +nearest_point_2d - + -program~nearest_point_1d->proc~nearest_point~2 - - +program~nearest_point_2d->proc~nearest_point~2 + + + + + +program~nearest_point_2d_bench + + +nearest_point_2d_bench + + + + + +program~nearest_point_2d_bench->proc~nearest_point~2 + + @@ -506,7 +521,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/nearest_point~3.html b/proc/nearest_point~3.html index 06cecb220..8ad7a67ed 100644 --- a/proc/nearest_point~3.html +++ b/proc/nearest_point~3.html @@ -83,15 +83,15 @@

                  nearest_point
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure subroutine nearest_point(this, point_Xg, nearest_Xg, nearest_Xt

                  Type Bound

                  -

                  nurbs_surface

                  +

                  nurbs_curve

                  Arguments

                  - - class(nurbs_curve), + + class(nurbs_surface), intent(in) @@ -207,11 +207,11 @@

                  Arguments

                  real(kind=rk),
                  intent(out),optional - + optional, + allocatable ::nearest_Xtnearest_Xt(:)
                  @@ -159,7 +159,7 @@

                  Arguments

                  @@ -203,22 +203,22 @@

                  Arguments

                  - - + @@ -246,31 +246,31 @@

                  Calls

                  - + proc~~nearest_point~3~~CallsGraph - + proc~nearest_point~3 - -nurbs_surface%nearest_point + +nurbs_curve%nearest_point - + -interface~nearest_point_help_2d - - -nearest_point_help_2d +interface~nearest_point_help_1d + + +nearest_point_help_1d - + -proc~nearest_point~3->interface~nearest_point_help_2d - - +proc~nearest_point~3->interface~nearest_point_help_1d + + @@ -366,46 +366,31 @@

                  Called by

                  - - + + proc~~nearest_point~3~~CalledByGraph - + proc~nearest_point~3 - -nurbs_surface%nearest_point + +nurbs_curve%nearest_point - + -program~nearest_point_2d - - -nearest_point_2d +program~nearest_point_1d + + +nearest_point_1d - + -program~nearest_point_2d->proc~nearest_point~3 - - - - - -program~nearest_point_2d_bench - - -nearest_point_2d_bench - - - - - -program~nearest_point_2d_bench->proc~nearest_point~3 - - +program~nearest_point_1d->proc~nearest_point~3 + + @@ -521,7 +506,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/put_to_nurbs.html b/proc/put_to_nurbs.html index cb639d64e..97c3122a0 100644 --- a/proc/put_to_nurbs.html +++ b/proc/put_to_nurbs.html @@ -506,7 +506,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/remove_knots.html b/proc/remove_knots.html index 6d2d4a885..c70db4052 100644 --- a/proc/remove_knots.html +++ b/proc/remove_knots.html @@ -759,7 +759,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/remove_knots_a_5_8.html b/proc/remove_knots_a_5_8.html index 4a3f16ebd..aff835d94 100644 --- a/proc/remove_knots_a_5_8.html +++ b/proc/remove_knots_a_5_8.html @@ -156,7 +156,7 @@

                  Arguments

                  @@ -171,7 +171,7 @@

                  Arguments

                  @@ -216,7 +216,7 @@

                  Arguments

                  @@ -231,7 +231,7 @@

                  Arguments

                  @@ -246,7 +246,7 @@

                  Arguments

                  @@ -261,7 +261,7 @@

                  Arguments

                  @@ -276,7 +276,7 @@

                  Arguments

                  @@ -348,24 +348,24 @@

                  Called by

                  proc~remove_knots~2 - - -nurbs_curve%remove_knots + + +nurbs_surface%remove_knots proc~remove_knots~2->proc~remove_knots_a_5_8 - - + + proc~remove_knots~3 - - -nurbs_surface%remove_knots + + +nurbs_curve%remove_knots @@ -379,31 +379,31 @@

                  Called by

                  program~example1_curve - -example1_curve + +example1_curve - - -program~example1_curve->proc~remove_knots~2 - - + + +program~example1_curve->proc~remove_knots~3 + + program~example3_surface - -example3_surface + +example3_surface - - -program~example3_surface->proc~remove_knots~3 - - + + +program~example3_surface->proc~remove_knots~2 + + @@ -534,7 +534,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/remove_knots~2.html b/proc/remove_knots~2.html index 978c15b7d..9976e06ac 100644 --- a/proc/remove_knots~2.html +++ b/proc/remove_knots~2.html @@ -78,20 +78,20 @@

                  remove_knots
                • 55 statements + title=" 2.0% of total for procedures.">128 statements
                • - Source File + Source File
                • @@ -137,13 +137,13 @@

                  Contents

                  -

                  private pure subroutine remove_knots(this, Xth, r) +

                  private pure subroutine remove_knots(this, dir, Xth, r)

                  Type Bound

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

                  - class(nurbs_surface), + class(nurbs_curve), intent(in) @@ -188,7 +188,7 @@

                  Arguments

                  - + real(kind=rk), intent(out),
                  - + real(kind=rk), intent(out),optional, - allocatable + optional + ::nearest_Xt(:)nearest_Xt
                  - + integer, intent(out),
                  - + integer, intent(in)
                  - + real(kind=rk), intent(in),
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + integer, intent(out)
                  - + real(kind=rk), intent(out),
                  @@ -158,8 +158,8 @@

                  Arguments

                  + + + + + + + + @@ -188,7 +203,7 @@

                  Arguments

                  @@ -216,238 +231,310 @@

                  Calls

                  - - + + proc~~remove_knots~2~~CallsGraph - + proc~remove_knots~2 - -nurbs_curve%remove_knots + +nurbs_surface%remove_knots interface~compute_multiplicity - -compute_multiplicity + +compute_multiplicity proc~remove_knots~2->interface~compute_multiplicity - - + + - + +none~get_knot~2 + + +nurbs_surface%get_knot + + + + + +proc~remove_knots~2->none~get_knot~2 + + + + + none~set~2 - - -nurbs_curve%set + + +nurbs_surface%set - + proc~remove_knots~2->none~set~2 - - + + - + proc~findspan - - -findspan + + +findspan - + proc~remove_knots~2->proc~findspan - - + + - + proc~is_rational~2 - - -nurbs_curve%is_rational + + +nurbs_surface%is_rational - + proc~remove_knots~2->proc~is_rational~2 - - + + - + proc~remove_knots_a_5_8 - - -remove_knots_A_5_8 + + +remove_knots_A_5_8 - + proc~remove_knots~2->proc~remove_knots_a_5_8 - - + + - + proc~compute_multiplicity1 - - -compute_multiplicity1 + + +compute_multiplicity1 - + interface~compute_multiplicity->proc~compute_multiplicity1 - - + + - + proc~compute_multiplicity2 - - -compute_multiplicity2 + + +compute_multiplicity2 - + interface~compute_multiplicity->proc~compute_multiplicity2 - - + + + + + +proc~get_knot_all~2 + + +nurbs_surface%get_knot_all + + + + + +none~get_knot~2->proc~get_knot_all~2 + + + + + +proc~get_knoti~2 + + +nurbs_surface%get_knoti + + + + + +none~get_knot~2->proc~get_knoti~2 + + - + proc~set1~2 - - -nurbs_curve%set1 + + +nurbs_surface%set1 - + none~set~2->proc~set1~2 - - + + - + proc~set2~2 - - -nurbs_curve%set2 + + +nurbs_surface%set2 - + none~set~2->proc~set2~2 - - + + - + proc~set3~2 - - -nurbs_curve%set3 + + +nurbs_surface%set3 - + none~set~2->proc~set3~2 - - + + - + proc~cmp_degree~2 - - -nurbs_curve%cmp_degree + + +nurbs_surface%cmp_degree - + proc~set1~2->proc~cmp_degree~2 - - + + + + + +proc~cmp_nc~2 + + +nurbs_surface%cmp_nc + + + + + +proc~set1~2->proc~cmp_nc~2 + + + + + +proc~set2~2->proc~cmp_nc~2 + + - + proc~compute_knot_vector - - -compute_knot_vector + + +compute_knot_vector - + proc~set2~2->proc~compute_knot_vector - - + + - + proc~set3~2->proc~cmp_degree~2 - - + + - + proc~get_multiplicity~2 - - -nurbs_curve%get_multiplicity + + +nurbs_surface%get_multiplicity - + proc~cmp_degree~2->proc~get_multiplicity~2 - - + + + + + +proc~cmp_nc~2->interface~compute_multiplicity + + - + proc~repelem - - -repelem + + +repelem - + proc~compute_knot_vector->proc~repelem - - + + - + proc~get_multiplicity~2->interface~compute_multiplicity - - + + @@ -547,31 +634,31 @@

                  Called by

                  - + proc~~remove_knots~2~~CalledByGraph - + proc~remove_knots~2 - -nurbs_curve%remove_knots + +nurbs_surface%remove_knots - + -program~example1_curve - - -example1_curve +program~example3_surface + + +example3_surface - + -program~example1_curve->proc~remove_knots~2 - - +program~example3_surface->proc~remove_knots~2 + + @@ -687,7 +774,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/remove_knots~3.html b/proc/remove_knots~3.html index b032814d0..f315a7d35 100644 --- a/proc/remove_knots~3.html +++ b/proc/remove_knots~3.html @@ -78,20 +78,20 @@

                  remove_knots
                • 128 statements + title=" 0.9% of total for procedures.">55 statements
                • - Source File + Source File
                • @@ -137,13 +137,13 @@

                  Contents

                  -

                  private pure subroutine remove_knots(this, dir, Xth, r) +

                  private pure subroutine remove_knots(this, Xth, r)

                  Type Bound

                  -

                  nurbs_surface

                  +

                  nurbs_curve

                  Arguments

                  - - class(nurbs_curve), + + class(nurbs_surface), intent(inout) @@ -173,7 +173,22 @@

                  Arguments

                  - + + integer, + intent(in) + + ::dir + +
                  + real(kind=rk), intent(in),
                  - + integer, intent(in),
                  @@ -158,8 +158,8 @@

                  Arguments

                  - - - - - - - -
                  - - class(nurbs_surface), + + class(nurbs_curve), intent(inout) @@ -171,21 +171,6 @@

                  Arguments

                  - - integer, - intent(in) - - ::dir - -
                  @@ -231,310 +216,238 @@

                  Calls

                  - - + + proc~~remove_knots~3~~CallsGraph - + proc~remove_knots~3 - -nurbs_surface%remove_knots + +nurbs_curve%remove_knots interface~compute_multiplicity - -compute_multiplicity + +compute_multiplicity proc~remove_knots~3->interface~compute_multiplicity - - - - - -none~get_knot~3 - - -nurbs_surface%get_knot - - - - - -proc~remove_knots~3->none~get_knot~3 - - + + - + none~set~3 - - -nurbs_surface%set + + +nurbs_curve%set - + proc~remove_knots~3->none~set~3 - - + + - + proc~findspan - - -findspan + + +findspan - + proc~remove_knots~3->proc~findspan - - + + - + proc~is_rational~3 - - -nurbs_surface%is_rational + + +nurbs_curve%is_rational - + proc~remove_knots~3->proc~is_rational~3 - - + + - + proc~remove_knots_a_5_8 - - -remove_knots_A_5_8 + + +remove_knots_A_5_8 - + proc~remove_knots~3->proc~remove_knots_a_5_8 - - + + - + proc~compute_multiplicity1 - - -compute_multiplicity1 + + +compute_multiplicity1 - + interface~compute_multiplicity->proc~compute_multiplicity1 - - + + - + proc~compute_multiplicity2 - - -compute_multiplicity2 + + +compute_multiplicity2 - + interface~compute_multiplicity->proc~compute_multiplicity2 - - - - - -proc~get_knot_all~3 - - -nurbs_surface%get_knot_all - - - - - -none~get_knot~3->proc~get_knot_all~3 - - - - - -proc~get_knoti~3 - - -nurbs_surface%get_knoti - - - - - -none~get_knot~3->proc~get_knoti~3 - - + + - + proc~set1~3 - - -nurbs_surface%set1 + + +nurbs_curve%set1 - + none~set~3->proc~set1~3 - - + + - + proc~set2~3 - - -nurbs_surface%set2 + + +nurbs_curve%set2 - + none~set~3->proc~set2~3 - - + + - + proc~set3~3 - - -nurbs_surface%set3 + + +nurbs_curve%set3 - + none~set~3->proc~set3~3 - - + + - + proc~cmp_degree~3 - - -nurbs_surface%cmp_degree + + +nurbs_curve%cmp_degree - + proc~set1~3->proc~cmp_degree~3 - - - - - -proc~cmp_nc~3 - - -nurbs_surface%cmp_nc - - - - - -proc~set1~3->proc~cmp_nc~3 - - - - - -proc~set2~3->proc~cmp_nc~3 - - + + - + proc~compute_knot_vector - - -compute_knot_vector + + +compute_knot_vector - + proc~set2~3->proc~compute_knot_vector - - + + - + proc~set3~3->proc~cmp_degree~3 - - + + - + proc~get_multiplicity~3 - - -nurbs_surface%get_multiplicity + + +nurbs_curve%get_multiplicity - + proc~cmp_degree~3->proc~get_multiplicity~3 - - - - - -proc~cmp_nc~3->interface~compute_multiplicity - - + + - + proc~repelem - - -repelem + + +repelem - + proc~compute_knot_vector->proc~repelem - - + + - + proc~get_multiplicity~3->interface~compute_multiplicity - - + + @@ -634,31 +547,31 @@

                  Called by

                  - + proc~~remove_knots~3~~CalledByGraph - + proc~remove_knots~3 - -nurbs_surface%remove_knots + +nurbs_curve%remove_knots - + -program~example3_surface - - -example3_surface +program~example1_curve + + +example1_curve - + -program~example3_surface->proc~remove_knots~3 - - +program~example1_curve->proc~remove_knots~3 + + @@ -774,7 +687,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/repelem.html b/proc/repelem.html index 734730915..3416daf7b 100644 --- a/proc/repelem.html +++ b/proc/repelem.html @@ -189,7 +189,7 @@

                  Arguments

                  Return Value - + real(kind=rk), (sum(b))

                  @@ -214,68 +214,68 @@

                  Called by

                  proc~repelem - -repelem + +repelem proc~compute_knot_vector - -compute_knot_vector + +compute_knot_vector proc~compute_knot_vector->proc~repelem - - + + proc~set2 - -nurbs_volume%set2 + +nurbs_volume%set2 proc~set2->proc~compute_knot_vector - - + + proc~set2~2 - - -nurbs_curve%set2 + + +nurbs_surface%set2 proc~set2~2->proc~compute_knot_vector - - + + proc~set2~3 - - -nurbs_surface%set2 + + +nurbs_curve%set2 proc~set2~3->proc~compute_knot_vector - - + + @@ -289,38 +289,38 @@

                  Called by

                  none~set->proc~set2 - - + + none~set~2 - - -nurbs_curve%set + + +nurbs_surface%set none~set~2->proc~set2~2 - - + + none~set~3 - - -nurbs_surface%set + + +nurbs_curve%set none~set~3->proc~set2~3 - - + + @@ -340,32 +340,32 @@

                  Called by

                  proc~elevate_degree~2 - - -nurbs_curve%elevate_degree + + +nurbs_surface%elevate_degree proc~elevate_degree~2->none~set~2 - - + + proc~elevate_degree~3 - - -nurbs_surface%elevate_degree + + +nurbs_curve%elevate_degree - + proc~elevate_degree~3->none~set~3 - - + + @@ -385,32 +385,32 @@

                  Called by

                  proc~insert_knots~2 - - -nurbs_curve%insert_knots + + +nurbs_surface%insert_knots proc~insert_knots~2->none~set~2 - - + + proc~insert_knots~3 - - -nurbs_surface%insert_knots + + +nurbs_curve%insert_knots - + proc~insert_knots~3->none~set~3 - - + + @@ -430,32 +430,32 @@

                  Called by

                  proc~modify_wc~2 - - -nurbs_curve%modify_Wc + + +nurbs_surface%modify_Wc proc~modify_wc~2->none~set~2 - - + + proc~modify_wc~3 - - -nurbs_surface%modify_Wc + + +nurbs_curve%modify_Wc - + proc~modify_wc~3->none~set~3 - - + + @@ -475,32 +475,32 @@

                  Called by

                  proc~modify_xc~2 - - -nurbs_curve%modify_Xc + + +nurbs_surface%modify_Xc proc~modify_xc~2->none~set~2 - - + + proc~modify_xc~3 - - -nurbs_surface%modify_Xc + + +nurbs_curve%modify_Xc - + proc~modify_xc~3->none~set~3 - - + + @@ -520,32 +520,32 @@

                  Called by

                  proc~remove_knots~2 - - -nurbs_curve%remove_knots + + +nurbs_surface%remove_knots proc~remove_knots~2->none~set~2 - - + + proc~remove_knots~3 - - -nurbs_surface%remove_knots + + +nurbs_curve%remove_knots - + proc~remove_knots~3->none~set~3 - - + + @@ -566,61 +566,61 @@

                  Called by

                  proc~set_circle - -nurbs_curve%set_circle + +nurbs_curve%set_circle - - -proc~set_circle->none~set~2 - - + + +proc~set_circle->none~set~3 + + proc~set_c~2 - - -nurbs_curve%set_C + + +nurbs_surface%set_C - + proc~set_c~2->none~set~2 - - + + proc~set_c~3 - - -nurbs_surface%set_C + + +nurbs_curve%set_C - + proc~set_c~3->none~set~3 - - + + proc~set_half_circle - -nurbs_curve%set_half_circle + +nurbs_curve%set_half_circle - - -proc~set_half_circle->none~set~2 - - + + +proc~set_half_circle->none~set~3 + + @@ -641,16 +641,16 @@

                  Called by

                  proc~set_half_ring~2 - -nurbs_surface%set_half_ring + +nurbs_surface%set_half_ring - - -proc~set_half_ring~2->none~set~3 - - + + +proc~set_half_ring~2->none~set~2 + + @@ -686,97 +686,97 @@

                  Called by

                  proc~set_ring~2 - -nurbs_surface%set_ring + +nurbs_surface%set_ring - - -proc~set_ring~2->none~set~3 - - + + +proc~set_ring~2->none~set~2 + + proc~set_tetragon - -nurbs_surface%set_tetragon + +nurbs_surface%set_tetragon - - -proc~set_tetragon->none~set~3 - - + + +proc~set_tetragon->none~set~2 + + program~example1_curve - -example1_curve + +example1_curve - - -program~example1_curve->none~set~2 - - + + +program~example1_curve->none~set~3 + + - - -program~example1_curve->proc~elevate_degree~2 - - + + +program~example1_curve->proc~elevate_degree~3 + + - - -program~example1_curve->proc~insert_knots~2 - - + + +program~example1_curve->proc~insert_knots~3 + + - - -program~example1_curve->proc~remove_knots~2 - - + + +program~example1_curve->proc~remove_knots~3 + + program~example3_surface - -example3_surface + +example3_surface - - -program~example3_surface->none~set~3 - - + + +program~example3_surface->none~set~2 + + - - -program~example3_surface->proc~elevate_degree~3 - - + + +program~example3_surface->proc~elevate_degree~2 + + - - -program~example3_surface->proc~insert_knots~3 - - + + +program~example3_surface->proc~insert_knots~2 + + - - -program~example3_surface->proc~remove_knots~3 - - + + +program~example3_surface->proc~remove_knots~2 + + @@ -815,31 +815,31 @@

                  Called by

                  program~example_nurbs_curve - -example_nurbs_curve + +example_nurbs_curve - - -program~example_nurbs_curve->none~set~2 - - + + +program~example_nurbs_curve->none~set~3 + + program~example_nurbs_surface - -example_nurbs_surface + +example_nurbs_surface - - -program~example_nurbs_surface->none~set~3 - - + + +program~example_nurbs_surface->none~set~2 + + @@ -875,31 +875,31 @@

                  Called by

                  program~nearest_point_1d - -nearest_point_1d + +nearest_point_1d - - -program~nearest_point_1d->none~set~2 - - + + +program~nearest_point_1d->none~set~3 + + program~nearest_point_2d - -nearest_point_2d + +nearest_point_2d - - -program~nearest_point_2d->none~set~3 - - + + +program~nearest_point_2d->none~set~2 + + @@ -920,109 +920,109 @@

                  Called by

                  program~example_ppm1 - -example_ppm1 + +example_ppm1 program~example_ppm1->proc~set_ring~2 - - + + program~example_ppm1->proc~set_tetragon - - + + program~example_ppm2 - -example_ppm2 + +example_ppm2 program~example_ppm2->proc~set_half_ring~2 - - + + program~example_ppm2->proc~set_tetragon - - + + program~example_ppm3 - -example_ppm3 + +example_ppm3 - + -program~example_ppm3->proc~modify_xc~3 - - +program~example_ppm3->proc~modify_xc~2 + + program~example_ppm3->proc~set_tetragon - - + + program~nearest_point_2d_bench - -nearest_point_2d_bench + +nearest_point_2d_bench program~nearest_point_2d_bench->proc~set_tetragon - - + + program~shape_c_1d - -shape_C_1d + +shape_C_1d - - -program~shape_c_1d->proc~set_c~2 - - + + +program~shape_c_1d->proc~set_c~3 + + program~shape_c_2d - -shape_C_2d + +shape_C_2d - - -program~shape_c_2d->proc~set_c~3 - - + + +program~shape_c_2d->proc~set_c~2 + + @@ -1043,46 +1043,46 @@

                  Called by

                  program~shape_circle - -shape_circle + +shape_circle program~shape_circle->proc~set_circle - - + + program~shape_half_circle - -shape_half_circle + +shape_half_circle program~shape_half_circle->proc~set_half_circle - - + + program~shape_half_ring_2d - -shape_half_ring_2d + +shape_half_ring_2d program~shape_half_ring_2d->proc~set_half_ring~2 - - + + @@ -1118,16 +1118,16 @@

                  Called by

                  program~shape_ring_2d - -shape_ring_2d + +shape_ring_2d program~shape_ring_2d->proc~set_ring~2 - - + + @@ -1148,16 +1148,16 @@

                  Called by

                  program~shape_tetragon - -shape_tetragon + +shape_tetragon program~shape_tetragon->proc~set_tetragon - - + +
                  @@ -1277,7 +1277,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/rotate_xc.html b/proc/rotate_xc.html index 19ebae56f..f9e4c2e0f 100644 --- a/proc/rotate_xc.html +++ b/proc/rotate_xc.html @@ -515,7 +515,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/rotate_xc~2.html b/proc/rotate_xc~2.html index 8f68e1469..2a2fee8e6 100644 --- a/proc/rotate_xc~2.html +++ b/proc/rotate_xc~2.html @@ -83,15 +83,15 @@

                  rotate_Xc
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure subroutine rotate_Xc(this, alpha, beta, theta)

                  Type Bound

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

                  @@ -159,7 +159,7 @@

                  Arguments

                  @@ -188,7 +188,7 @@

                  Arguments

                  @@ -203,7 +203,7 @@

                  Arguments

                  @@ -231,55 +231,55 @@

                  Calls

                  - + proc~~rotate_xc~2~~CallsGraph - + proc~rotate_xc~2 - -nurbs_curve%rotate_Xc + +nurbs_surface%rotate_Xc proc~rotation - -rotation + +rotation proc~rotate_xc~2->proc~rotation - - + + cosd - -cosd + +cosd proc~rotation->cosd - - + + sind - -sind + +sind proc~rotation->sind - - + + @@ -375,31 +375,46 @@

                  Called by

                  - - + + proc~~rotate_xc~2~~CalledByGraph - + proc~rotate_xc~2 - -nurbs_curve%rotate_Xc + +nurbs_surface%rotate_Xc - + -program~example1_curve - - -example1_curve +program~example3_surface + + +example3_surface - + -program~example1_curve->proc~rotate_xc~2 - - +program~example3_surface->proc~rotate_xc~2 + + + + + +program~example_ppm2 + + +example_ppm2 + + + + + +program~example_ppm2->proc~rotate_xc~2 + + @@ -515,7 +530,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/rotate_xc~3.html b/proc/rotate_xc~3.html index 900153a4b..646ff854a 100644 --- a/proc/rotate_xc~3.html +++ b/proc/rotate_xc~3.html @@ -83,15 +83,15 @@

                  rotate_Xc
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure subroutine rotate_Xc(this, alpha, beta, theta)

                  Type Bound

                  -

                  nurbs_surface

                  +

                  nurbs_curve

                  Arguments

                  - class(nurbs_curve), + class(nurbs_surface), intent(inout) @@ -173,7 +173,7 @@

                  Arguments

                  - + real(kind=rk), intent(in)
                  - + real(kind=rk), intent(in)
                  - + real(kind=rk), intent(in)
                  @@ -158,8 +158,8 @@

                  Arguments

                  - - class(nurbs_surface), + + class(nurbs_curve), intent(inout) @@ -231,55 +231,55 @@

                  Calls

                  - + proc~~rotate_xc~3~~CallsGraph - + proc~rotate_xc~3 - -nurbs_surface%rotate_Xc + +nurbs_curve%rotate_Xc proc~rotation - -rotation + +rotation proc~rotate_xc~3->proc~rotation - - + + cosd - -cosd + +cosd proc~rotation->cosd - - + + sind - -sind + +sind proc~rotation->sind - - + + @@ -375,46 +375,31 @@

                  Called by

                  - - + + proc~~rotate_xc~3~~CalledByGraph - + proc~rotate_xc~3 - -nurbs_surface%rotate_Xc + +nurbs_curve%rotate_Xc - + -program~example3_surface - - -example3_surface +program~example1_curve + + +example1_curve - + -program~example3_surface->proc~rotate_xc~3 - - - - - -program~example_ppm2 - - -example_ppm2 - - - - - -program~example_ppm2->proc~rotate_xc~3 - - +program~example1_curve->proc~rotate_xc~3 + + @@ -530,7 +515,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/rotate_xg.html b/proc/rotate_xg.html index d755f4bf8..b6d538436 100644 --- a/proc/rotate_xg.html +++ b/proc/rotate_xg.html @@ -515,7 +515,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/rotate_xg~2.html b/proc/rotate_xg~2.html index 28bff1ecc..ee8692acb 100644 --- a/proc/rotate_xg~2.html +++ b/proc/rotate_xg~2.html @@ -83,15 +83,15 @@

                  rotate_Xg
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure subroutine rotate_Xg(this, alpha, beta, theta)

                  Type Bound

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

                  @@ -159,7 +159,7 @@

                  Arguments

                  @@ -188,7 +188,7 @@

                  Arguments

                  @@ -203,7 +203,7 @@

                  Arguments

                  @@ -231,55 +231,55 @@

                  Calls

                  - + proc~~rotate_xg~2~~CallsGraph - + proc~rotate_xg~2 - -nurbs_curve%rotate_Xg + +nurbs_surface%rotate_Xg proc~rotation - -rotation + +rotation proc~rotate_xg~2->proc~rotation - - + + cosd - -cosd + +cosd proc~rotation->cosd - - + + sind - -sind + +sind proc~rotation->sind - - + + @@ -375,31 +375,31 @@

                  Called by

                  - + proc~~rotate_xg~2~~CalledByGraph - + proc~rotate_xg~2 - -nurbs_curve%rotate_Xg + +nurbs_surface%rotate_Xg - + -program~example1_curve - - -example1_curve +program~example3_surface + + +example3_surface - + -program~example1_curve->proc~rotate_xg~2 - - +program~example3_surface->proc~rotate_xg~2 + + @@ -515,7 +515,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/rotate_xg~3.html b/proc/rotate_xg~3.html index 7d08bbe22..3626e1256 100644 --- a/proc/rotate_xg~3.html +++ b/proc/rotate_xg~3.html @@ -83,15 +83,15 @@

                  rotate_Xg
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure subroutine rotate_Xg(this, alpha, beta, theta)

                  Type Bound

                  -

                  nurbs_surface

                  +

                  nurbs_curve

                  Arguments

                  - class(nurbs_curve), + class(nurbs_surface), intent(inout) @@ -173,7 +173,7 @@

                  Arguments

                  - + real(kind=rk), intent(in)
                  - + real(kind=rk), intent(in)
                  - + real(kind=rk), intent(in)
                  @@ -158,8 +158,8 @@

                  Arguments

                  @@ -171,7 +171,7 @@

                  Arguments

                  @@ -186,7 +186,7 @@

                  Arguments

                  @@ -379,24 +379,24 @@

                  Called by

                  proc~rotate_xc~2 - - -nurbs_curve%rotate_Xc + + +nurbs_surface%rotate_Xc proc~rotate_xc~2->proc~rotation - - + + proc~rotate_xc~3 - - -nurbs_surface%rotate_Xc + + +nurbs_curve%rotate_Xc @@ -424,24 +424,24 @@

                  Called by

                  proc~rotate_xg~2 - - -nurbs_curve%rotate_Xg + + +nurbs_surface%rotate_Xg proc~rotate_xg~2->proc~rotation - - + + proc~rotate_xg~3 - - -nurbs_surface%rotate_Xg + + +nurbs_curve%rotate_Xg @@ -455,79 +455,79 @@

                  Called by

                  program~example1_curve - -example1_curve + +example1_curve - - -program~example1_curve->proc~rotate_xc~2 - - + + +program~example1_curve->proc~rotate_xc~3 + + - - -program~example1_curve->proc~rotate_xg~2 - - + + +program~example1_curve->proc~rotate_xg~3 + + program~example3_surface - -example3_surface + +example3_surface - - -program~example3_surface->proc~rotate_xc~3 - - + + +program~example3_surface->proc~rotate_xc~2 + + - - -program~example3_surface->proc~rotate_xg~3 - - + + +program~example3_surface->proc~rotate_xg~2 + + program~example3_volume - -example3_volume + +example3_volume program~example3_volume->proc~rotate_xc - - + + program~example3_volume->proc~rotate_xg - - + + program~example_ppm2 - -example_ppm2 + +example_ppm2 - - -program~example_ppm2->proc~rotate_xc~3 - - + + +program~example_ppm2->proc~rotate_xc~2 + + @@ -643,7 +643,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/set1.html b/proc/set1.html index 110c0578f..63f43d908 100644 --- a/proc/set1.html +++ b/proc/set1.html @@ -884,7 +884,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/set1~2.html b/proc/set1~2.html index c29030cbd..8f2601a23 100644 --- a/proc/set1~2.html +++ b/proc/set1~2.html @@ -78,20 +78,20 @@

                  set1
                • 20 statements + title=" 0.4% of total for procedures.">23 statements
                • - Source File + Source File
                • -

                  private pure subroutine set1(this, knot, Xc, Wc) +

                  private pure subroutine set1(this, knot1, knot2, Xc, Wc)

                  -

                  Set knot vector, control points and weights for the NURBS curve object.

                  +

                  Set knot vectors, control points and weights for the NURBS surface object.

                  Type Bound

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

                  - - class(nurbs_surface), + + class(nurbs_curve), intent(inout) @@ -231,55 +231,55 @@

                  Calls

                  - + proc~~rotate_xg~3~~CallsGraph - + proc~rotate_xg~3 - -nurbs_surface%rotate_Xg + +nurbs_curve%rotate_Xg proc~rotation - -rotation + +rotation proc~rotate_xg~3->proc~rotation - - + + cosd - -cosd + +cosd proc~rotation->cosd - - + + sind - -sind + +sind proc~rotation->sind - - + + @@ -375,31 +375,31 @@

                  Called by

                  - + proc~~rotate_xg~3~~CalledByGraph - + proc~rotate_xg~3 - -nurbs_surface%rotate_Xg + +nurbs_curve%rotate_Xg - + -program~example3_surface - - -example3_surface +program~example1_curve + + +example1_curve - + -program~example3_surface->proc~rotate_xg~3 - - +program~example1_curve->proc~rotate_xg~3 + + @@ -515,7 +515,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/rotation.html b/proc/rotation.html index 786db2b34..5f61261c1 100644 --- a/proc/rotation.html +++ b/proc/rotation.html @@ -156,7 +156,7 @@

                  Arguments

                  - + real(kind=rk), intent(in)
                  - + real(kind=rk), intent(in)
                  - + real(kind=rk), intent(in)
                  @@ -160,7 +160,7 @@

                  Arguments

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

                  Arguments

                  contiguous - + + + + + + + + + @@ -204,7 +219,7 @@

                  Arguments

                  @@ -232,91 +247,112 @@

                  Calls

                  - - + + proc~~set1~2~~CallsGraph - + proc~set1~2 - -nurbs_curve%set1 + +nurbs_surface%set1 proc~cmp_degree~2 - - -nurbs_curve%cmp_degree + + +nurbs_surface%cmp_degree proc~set1~2->proc~cmp_degree~2 - - + + - + +proc~cmp_nc~2 + + +nurbs_surface%cmp_nc + + + + + +proc~set1~2->proc~cmp_nc~2 + + + + + proc~get_multiplicity~2 - - -nurbs_curve%get_multiplicity + + +nurbs_surface%get_multiplicity - + proc~cmp_degree~2->proc~get_multiplicity~2 - - + + interface~compute_multiplicity - -compute_multiplicity + +compute_multiplicity - - -proc~get_multiplicity~2->interface~compute_multiplicity - - + + +proc~cmp_nc~2->interface~compute_multiplicity + + - + proc~compute_multiplicity1 - - -compute_multiplicity1 + + +compute_multiplicity1 - + interface~compute_multiplicity->proc~compute_multiplicity1 - - + + - + proc~compute_multiplicity2 - - -compute_multiplicity2 + + +compute_multiplicity2 - + interface~compute_multiplicity->proc~compute_multiplicity2 - - + + + + + +proc~get_multiplicity~2->interface~compute_multiplicity + + @@ -416,263 +452,375 @@

                  Called by

                  - - + + proc~~set1~2~~CalledByGraph - + proc~set1~2 - -nurbs_curve%set1 + +nurbs_surface%set1 none~set~2 - - -nurbs_curve%set + + +nurbs_surface%set none~set~2->proc~set1~2 - - + + proc~elevate_degree~2 - - -nurbs_curve%elevate_degree + + +nurbs_surface%elevate_degree proc~elevate_degree~2->none~set~2 - - + + proc~insert_knots~2 - - -nurbs_curve%insert_knots + + +nurbs_surface%insert_knots proc~insert_knots~2->none~set~2 - - + + proc~modify_wc~2 - - -nurbs_curve%modify_Wc + + +nurbs_surface%modify_Wc proc~modify_wc~2->none~set~2 - - + + proc~modify_xc~2 - - -nurbs_curve%modify_Xc + + +nurbs_surface%modify_Xc proc~modify_xc~2->none~set~2 - - + + proc~remove_knots~2 - - -nurbs_curve%remove_knots + + +nurbs_surface%remove_knots proc~remove_knots~2->none~set~2 - - + + - + -proc~set_circle - - -nurbs_curve%set_circle +proc~set_c~2 + + +nurbs_surface%set_C - + -proc~set_circle->none~set~2 - - +proc~set_c~2->none~set~2 + + - + -proc~set_c~2 - - -nurbs_curve%set_C +proc~set_half_ring~2 + + +nurbs_surface%set_half_ring - + -proc~set_c~2->none~set~2 - - +proc~set_half_ring~2->none~set~2 + + - + -proc~set_half_circle - - -nurbs_curve%set_half_circle +proc~set_ring~2 + + +nurbs_surface%set_ring - + -proc~set_half_circle->none~set~2 - - +proc~set_ring~2->none~set~2 + + - + -program~example1_curve - - -example1_curve +proc~set_tetragon + + +nurbs_surface%set_tetragon - + -program~example1_curve->none~set~2 - - - - - -program~example1_curve->proc~elevate_degree~2 - - +proc~set_tetragon->none~set~2 + + - - -program~example1_curve->proc~insert_knots~2 - - - - - -program~example1_curve->proc~remove_knots~2 - - - - + -program~example_nurbs_curve - - -example_nurbs_curve +program~example3_surface + + +example3_surface - + -program~example_nurbs_curve->none~set~2 - - +program~example3_surface->none~set~2 + + + + + +program~example3_surface->proc~elevate_degree~2 + + + + + +program~example3_surface->proc~insert_knots~2 + + - + + +program~example3_surface->proc~remove_knots~2 + + + + -program~nearest_point_1d - - -nearest_point_1d +program~example_nurbs_surface + + +example_nurbs_surface - + -program~nearest_point_1d->none~set~2 - - +program~example_nurbs_surface->none~set~2 + + - + -program~shape_c_1d - - -shape_C_1d +program~nearest_point_2d + + +nearest_point_2d - - -program~shape_c_1d->proc~set_c~2 - - + + +program~nearest_point_2d->none~set~2 + + - + -program~shape_circle - - -shape_circle +program~example_ppm1 + + +example_ppm1 - - -program~shape_circle->proc~set_circle - - + + +program~example_ppm1->proc~set_ring~2 + + + + + +program~example_ppm1->proc~set_tetragon + + - + -program~shape_half_circle - - -shape_half_circle +program~example_ppm2 + + +example_ppm2 - + + +program~example_ppm2->proc~set_half_ring~2 + + + + + +program~example_ppm2->proc~set_tetragon + + + + + +program~example_ppm3 + + +example_ppm3 + + + + + +program~example_ppm3->proc~modify_xc~2 + + + + + +program~example_ppm3->proc~set_tetragon + + + + + +program~nearest_point_2d_bench + + +nearest_point_2d_bench + + + + + +program~nearest_point_2d_bench->proc~set_tetragon + + + + + +program~shape_c_2d + + +shape_C_2d + + + + -program~shape_half_circle->proc~set_half_circle - - +program~shape_c_2d->proc~set_c~2 + + + + + +program~shape_half_ring_2d + + +shape_half_ring_2d + + + + + +program~shape_half_ring_2d->proc~set_half_ring~2 + + + + + +program~shape_ring_2d + + +shape_ring_2d + + + + + +program~shape_ring_2d->proc~set_ring~2 + + + + + +program~shape_tetragon + + +shape_tetragon + + + + + +program~shape_tetragon->proc~set_tetragon + + -
                  +

                  diff --git a/proc/set1~3.html b/proc/set1~3.html index a1af7820a..513f109ca 100644 --- a/proc/set1~3.html +++ b/proc/set1~3.html @@ -78,20 +78,20 @@

                  set1
                • 23 statements + title=" 0.3% of total for procedures.">20 statements
                • - Source File + Source File
                • -

                  private pure subroutine set1(this, knot1, knot2, Xc, Wc) +

                  private pure subroutine set1(this, knot, Xc, Wc)

                  -

                  Set knot vectors, control points and weights for the NURBS surface object.

                  +

                  Set knot vector, control points and weights for the NURBS curve object.

                  Type Bound

                  -

                  nurbs_surface

                  +

                  nurbs_curve

                  Arguments

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

                  Arguments

                  - + real(kind=rk), intent(in), ::knot(:)knot1(:)
                  - + + real(kind=rk), + intent(in), + contiguous + ::knot2(:) + +
                  + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  @@ -159,8 +159,8 @@

                  Arguments

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

                  Arguments

                  contiguous - + - - - - - - - - @@ -219,7 +204,7 @@

                  Arguments

                  @@ -247,112 +232,91 @@

                  Calls

                  - - + + proc~~set1~3~~CallsGraph - + proc~set1~3 - -nurbs_surface%set1 + +nurbs_curve%set1 proc~cmp_degree~3 - - -nurbs_surface%cmp_degree + + +nurbs_curve%cmp_degree proc~set1~3->proc~cmp_degree~3 - - - - - -proc~cmp_nc~3 - - -nurbs_surface%cmp_nc - - - - - -proc~set1~3->proc~cmp_nc~3 - - + + - + proc~get_multiplicity~3 - - -nurbs_surface%get_multiplicity + + +nurbs_curve%get_multiplicity - + proc~cmp_degree~3->proc~get_multiplicity~3 - - + + interface~compute_multiplicity - -compute_multiplicity + +compute_multiplicity - - -proc~cmp_nc~3->interface~compute_multiplicity - - + + +proc~get_multiplicity~3->interface~compute_multiplicity + + - + proc~compute_multiplicity1 - - -compute_multiplicity1 + + +compute_multiplicity1 - + interface~compute_multiplicity->proc~compute_multiplicity1 - - + + - + proc~compute_multiplicity2 - - -compute_multiplicity2 + + +compute_multiplicity2 - + interface~compute_multiplicity->proc~compute_multiplicity2 - - - - - -proc~get_multiplicity~3->interface~compute_multiplicity - - + + @@ -452,375 +416,263 @@

                  Called by

                  - - + + proc~~set1~3~~CalledByGraph - + proc~set1~3 - -nurbs_surface%set1 + +nurbs_curve%set1 none~set~3 - - -nurbs_surface%set + + +nurbs_curve%set none~set~3->proc~set1~3 - - + + proc~elevate_degree~3 - - -nurbs_surface%elevate_degree + + +nurbs_curve%elevate_degree proc~elevate_degree~3->none~set~3 - - + + proc~insert_knots~3 - - -nurbs_surface%insert_knots + + +nurbs_curve%insert_knots proc~insert_knots~3->none~set~3 - - + + proc~modify_wc~3 - - -nurbs_surface%modify_Wc + + +nurbs_curve%modify_Wc proc~modify_wc~3->none~set~3 - - + + proc~modify_xc~3 - - -nurbs_surface%modify_Xc + + +nurbs_curve%modify_Xc proc~modify_xc~3->none~set~3 - - + + proc~remove_knots~3 - - -nurbs_surface%remove_knots + + +nurbs_curve%remove_knots proc~remove_knots~3->none~set~3 - - + + - + -proc~set_c~3 - - -nurbs_surface%set_C +proc~set_circle + + +nurbs_curve%set_circle - + -proc~set_c~3->none~set~3 - - +proc~set_circle->none~set~3 + + - + -proc~set_half_ring~2 - - -nurbs_surface%set_half_ring +proc~set_c~3 + + +nurbs_curve%set_C - + -proc~set_half_ring~2->none~set~3 - - +proc~set_c~3->none~set~3 + + - + -proc~set_ring~2 - - -nurbs_surface%set_ring +proc~set_half_circle + + +nurbs_curve%set_half_circle - + -proc~set_ring~2->none~set~3 - - +proc~set_half_circle->none~set~3 + + - + -proc~set_tetragon - - -nurbs_surface%set_tetragon +program~example1_curve + + +example1_curve - + -proc~set_tetragon->none~set~3 - - - - - -program~example3_surface - - -example3_surface - - +program~example1_curve->none~set~3 + + - - -program~example3_surface->none~set~3 - - + + +program~example1_curve->proc~elevate_degree~3 + + - + -program~example3_surface->proc~elevate_degree~3 - - +program~example1_curve->proc~insert_knots~3 + + - + -program~example3_surface->proc~insert_knots~3 - - +program~example1_curve->proc~remove_knots~3 + + + + + +program~example_nurbs_curve + + +example_nurbs_curve + - - -program~example3_surface->proc~remove_knots~3 - - - + + +program~example_nurbs_curve->none~set~3 + + + + -program~example_nurbs_surface - - -example_nurbs_surface +program~nearest_point_1d + + +nearest_point_1d - + -program~example_nurbs_surface->none~set~3 - - +program~nearest_point_1d->none~set~3 + + - + -program~nearest_point_2d - - -nearest_point_2d +program~shape_c_1d + + +shape_C_1d - - -program~nearest_point_2d->none~set~3 - - + + +program~shape_c_1d->proc~set_c~3 + + - + -program~example_ppm1 - - -example_ppm1 +program~shape_circle + + +shape_circle - - -program~example_ppm1->proc~set_ring~2 - - - - - -program~example_ppm1->proc~set_tetragon - - - - - -program~example_ppm2 - - -example_ppm2 - - - - - -program~example_ppm2->proc~set_half_ring~2 - - - - - -program~example_ppm2->proc~set_tetragon - - - - - -program~example_ppm3 - - -example_ppm3 - - - - + -program~example_ppm3->proc~modify_xc~3 - - - - - -program~example_ppm3->proc~set_tetragon - - - - - -program~nearest_point_2d_bench - - -nearest_point_2d_bench - +program~shape_circle->proc~set_circle + + - - - -program~nearest_point_2d_bench->proc~set_tetragon - - - - - -program~shape_c_2d - - -shape_C_2d + + +program~shape_half_circle + + +shape_half_circle - + -program~shape_c_2d->proc~set_c~3 - - - - - -program~shape_half_ring_2d - - -shape_half_ring_2d - - - - - -program~shape_half_ring_2d->proc~set_half_ring~2 - - - - - -program~shape_ring_2d - - -shape_ring_2d - - - - - -program~shape_ring_2d->proc~set_ring~2 - - - - - -program~shape_tetragon - - -shape_tetragon - - - - - -program~shape_tetragon->proc~set_tetragon - - +program~shape_half_circle->proc~set_half_circle + + -
                  +

                  diff --git a/proc/set2.html b/proc/set2.html index 0d99f7dc9..70df6fadd 100644 --- a/proc/set2.html +++ b/proc/set2.html @@ -934,7 +934,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/set2~2.html b/proc/set2~2.html index 13beec1a4..e25612e64 100644 --- a/proc/set2~2.html +++ b/proc/set2~2.html @@ -78,20 +78,20 @@

                  set2
                • 22 statements + title=" 0.2% of total for procedures.">15 statements
                • - Source File + Source File
                • -

                  private pure subroutine set2(this, Xth_dir, degree, continuity, Xc, Wc) +

                  private pure subroutine set2(this, Xth_dir1, Xth_dir2, degree, continuity1, continuity2, Xc, Wc)

                  -

                  Set NURBS curve using nodes of parameter space (Xth), degree, continuity, control points and weights.

                  +

                  Set NURBS surface using nodes of parameter space, degree, continuity, control points and weights

                  Type Bound

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

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

                  Arguments

                  - + real(kind=rk), intent(in), ::knot1(:)knot(:)
                  - - real(kind=rk), - intent(in), - contiguous - ::knot2(:) - -
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  @@ -160,7 +160,7 @@

                  Arguments

                  @@ -182,29 +182,44 @@

                  Arguments

                  contiguous - + + + + + + + + + - + - + @@ -212,14 +227,29 @@

                  Arguments

                  contiguous - + + + + + + + + + @@ -234,7 +264,7 @@

                  Arguments

                  @@ -262,46 +292,106 @@

                  Calls

                  - - + + proc~~set2~2~~CallsGraph - + proc~set2~2 - -nurbs_curve%set2 + +nurbs_surface%set2 - + +proc~cmp_nc~2 + + +nurbs_surface%cmp_nc + + + + + +proc~set2~2->proc~cmp_nc~2 + + + + + proc~compute_knot_vector - - -compute_knot_vector + + +compute_knot_vector - + proc~set2~2->proc~compute_knot_vector - - + + + + + +interface~compute_multiplicity + + +compute_multiplicity + + + + + +proc~cmp_nc~2->interface~compute_multiplicity + + - + proc~repelem - - -repelem + + +repelem - + proc~compute_knot_vector->proc~repelem - - + + + + + +proc~compute_multiplicity1 + + +compute_multiplicity1 + + + + + +interface~compute_multiplicity->proc~compute_multiplicity1 + + + + + +proc~compute_multiplicity2 + + +compute_multiplicity2 + + + + + +interface~compute_multiplicity->proc~compute_multiplicity2 + + @@ -397,263 +487,375 @@

                  Called by

                  - - + + proc~~set2~2~~CalledByGraph - + proc~set2~2 - -nurbs_curve%set2 + +nurbs_surface%set2 none~set~2 - - -nurbs_curve%set + + +nurbs_surface%set none~set~2->proc~set2~2 - - + + proc~elevate_degree~2 - - -nurbs_curve%elevate_degree + + +nurbs_surface%elevate_degree proc~elevate_degree~2->none~set~2 - - + + proc~insert_knots~2 - - -nurbs_curve%insert_knots + + +nurbs_surface%insert_knots proc~insert_knots~2->none~set~2 - - + + proc~modify_wc~2 - - -nurbs_curve%modify_Wc + + +nurbs_surface%modify_Wc proc~modify_wc~2->none~set~2 - - + + proc~modify_xc~2 - - -nurbs_curve%modify_Xc + + +nurbs_surface%modify_Xc proc~modify_xc~2->none~set~2 - - + + proc~remove_knots~2 - - -nurbs_curve%remove_knots + + +nurbs_surface%remove_knots proc~remove_knots~2->none~set~2 - - + + - + -proc~set_circle - - -nurbs_curve%set_circle +proc~set_c~2 + + +nurbs_surface%set_C - + -proc~set_circle->none~set~2 - - +proc~set_c~2->none~set~2 + + - + -proc~set_c~2 - - -nurbs_curve%set_C +proc~set_half_ring~2 + + +nurbs_surface%set_half_ring - + -proc~set_c~2->none~set~2 - - +proc~set_half_ring~2->none~set~2 + + - + -proc~set_half_circle - - -nurbs_curve%set_half_circle +proc~set_ring~2 + + +nurbs_surface%set_ring - + -proc~set_half_circle->none~set~2 - - +proc~set_ring~2->none~set~2 + + - + -program~example1_curve - - -example1_curve +proc~set_tetragon + + +nurbs_surface%set_tetragon - + -program~example1_curve->none~set~2 - - +proc~set_tetragon->none~set~2 + + - - -program~example1_curve->proc~elevate_degree~2 - - - - - -program~example1_curve->proc~insert_knots~2 - - - - - -program~example1_curve->proc~remove_knots~2 - - - - + -program~example_nurbs_curve - - -example_nurbs_curve +program~example3_surface + + +example3_surface - + -program~example_nurbs_curve->none~set~2 - - +program~example3_surface->none~set~2 + + + + + +program~example3_surface->proc~elevate_degree~2 + + + + + +program~example3_surface->proc~insert_knots~2 + + + + + +program~example3_surface->proc~remove_knots~2 + + - + -program~nearest_point_1d - - -nearest_point_1d +program~example_nurbs_surface + + +example_nurbs_surface - + -program~nearest_point_1d->none~set~2 - - +program~example_nurbs_surface->none~set~2 + + - + -program~shape_c_1d - - -shape_C_1d +program~nearest_point_2d + + +nearest_point_2d - - -program~shape_c_1d->proc~set_c~2 - - + + +program~nearest_point_2d->none~set~2 + + - + -program~shape_circle - - -shape_circle +program~example_ppm1 + + +example_ppm1 - - -program~shape_circle->proc~set_circle - - + + +program~example_ppm1->proc~set_ring~2 + + - + + +program~example_ppm1->proc~set_tetragon + + + + -program~shape_half_circle - - -shape_half_circle +program~example_ppm2 + + +example_ppm2 + + + + + +program~example_ppm2->proc~set_half_ring~2 + + + + + +program~example_ppm2->proc~set_tetragon + + + + + +program~example_ppm3 + + +example_ppm3 + + + + + +program~example_ppm3->proc~modify_xc~2 + + + + + +program~example_ppm3->proc~set_tetragon + + + + + +program~nearest_point_2d_bench + + +nearest_point_2d_bench + + + + + +program~nearest_point_2d_bench->proc~set_tetragon + + + + + +program~shape_c_2d + + +shape_C_2d - + -program~shape_half_circle->proc~set_half_circle - - +program~shape_c_2d->proc~set_c~2 + + + + + +program~shape_half_ring_2d + + +shape_half_ring_2d + + + + + +program~shape_half_ring_2d->proc~set_half_ring~2 + + + + + +program~shape_ring_2d + + +shape_ring_2d + + + + + +program~shape_ring_2d->proc~set_ring~2 + + + + + +program~shape_tetragon + + +shape_tetragon + + + + + +program~shape_tetragon->proc~set_tetragon + + -
                  +

                  diff --git a/proc/set2~3.html b/proc/set2~3.html index cb03187bc..dce700e52 100644 --- a/proc/set2~3.html +++ b/proc/set2~3.html @@ -78,20 +78,20 @@

                  set2
                • 15 statements + title=" 0.3% of total for procedures.">22 statements
                • - Source File + Source File
                • -

                  private pure subroutine set2(this, Xth_dir1, Xth_dir2, degree, continuity1, continuity2, Xc, Wc) +

                  private pure subroutine set2(this, Xth_dir, degree, continuity, Xc, Wc)

                  -

                  Set NURBS surface using nodes of parameter space, degree, continuity, control points and weights

                  +

                  Set NURBS curve using nodes of parameter space (Xth), degree, continuity, control points and weights.

                  Type Bound

                  -

                  nurbs_surface

                  +

                  nurbs_curve

                  Arguments

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

                  Arguments

                  - + real(kind=rk), intent(in), ::Xth_dir(:)Xth_dir1(:)
                  - + + real(kind=rk), + intent(in), + contiguous + ::Xth_dir2(:) + +
                  + integer, intent(in)intent(in), - + contiguous ::degreedegree(:)
                  - + integer, intent(in), ::continuity(:)continuity1(:)
                  - + + integer, + intent(in), + contiguous + ::continuity2(:) + +
                  + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  @@ -159,8 +159,8 @@

                  Arguments

                  @@ -182,59 +182,29 @@

                  Arguments

                  contiguous - + - - - - - - - - - + - - - - - - - - - + @@ -242,14 +212,14 @@

                  Arguments

                  contiguous - + @@ -264,7 +234,7 @@

                  Arguments

                  @@ -292,106 +262,46 @@

                  Calls

                  - - + + proc~~set2~3~~CallsGraph - + proc~set2~3 - -nurbs_surface%set2 - - - -proc~cmp_nc~3 - - -nurbs_surface%cmp_nc - - - - - -proc~set2~3->proc~cmp_nc~3 - - + +nurbs_curve%set2 - + proc~compute_knot_vector - - -compute_knot_vector + + +compute_knot_vector - + proc~set2~3->proc~compute_knot_vector - - - - - -interface~compute_multiplicity - - -compute_multiplicity - - - - - -proc~cmp_nc~3->interface~compute_multiplicity - - + + - + proc~repelem - - -repelem + + +repelem - + proc~compute_knot_vector->proc~repelem - - - - - -proc~compute_multiplicity1 - - -compute_multiplicity1 - - - - - -interface~compute_multiplicity->proc~compute_multiplicity1 - - - - - -proc~compute_multiplicity2 - - -compute_multiplicity2 - - - - - -interface~compute_multiplicity->proc~compute_multiplicity2 - - + + @@ -487,375 +397,263 @@

                  Called by

                  - - + + proc~~set2~3~~CalledByGraph - + proc~set2~3 - -nurbs_surface%set2 + +nurbs_curve%set2 none~set~3 - - -nurbs_surface%set + + +nurbs_curve%set none~set~3->proc~set2~3 - - + + proc~elevate_degree~3 - - -nurbs_surface%elevate_degree + + +nurbs_curve%elevate_degree proc~elevate_degree~3->none~set~3 - - + + proc~insert_knots~3 - - -nurbs_surface%insert_knots + + +nurbs_curve%insert_knots proc~insert_knots~3->none~set~3 - - + + proc~modify_wc~3 - - -nurbs_surface%modify_Wc + + +nurbs_curve%modify_Wc proc~modify_wc~3->none~set~3 - - + + proc~modify_xc~3 - - -nurbs_surface%modify_Xc + + +nurbs_curve%modify_Xc proc~modify_xc~3->none~set~3 - - + + proc~remove_knots~3 - - -nurbs_surface%remove_knots + + +nurbs_curve%remove_knots proc~remove_knots~3->none~set~3 - - + + - + -proc~set_c~3 - - -nurbs_surface%set_C +proc~set_circle + + +nurbs_curve%set_circle - + -proc~set_c~3->none~set~3 - - +proc~set_circle->none~set~3 + + - + -proc~set_half_ring~2 - - -nurbs_surface%set_half_ring +proc~set_c~3 + + +nurbs_curve%set_C - + -proc~set_half_ring~2->none~set~3 - - +proc~set_c~3->none~set~3 + + - + -proc~set_ring~2 - - -nurbs_surface%set_ring +proc~set_half_circle + + +nurbs_curve%set_half_circle - + -proc~set_ring~2->none~set~3 - - +proc~set_half_circle->none~set~3 + + - + -proc~set_tetragon - - -nurbs_surface%set_tetragon +program~example1_curve + + +example1_curve - + -proc~set_tetragon->none~set~3 - - - - - -program~example3_surface - - -example3_surface - +program~example1_curve->none~set~3 + + + + +program~example1_curve->proc~elevate_degree~3 + + - - -program~example3_surface->none~set~3 - - - - + -program~example3_surface->proc~elevate_degree~3 - - +program~example1_curve->proc~insert_knots~3 + + - + -program~example3_surface->proc~insert_knots~3 - - +program~example1_curve->proc~remove_knots~3 + + - - -program~example3_surface->proc~remove_knots~3 - - + + +program~example_nurbs_curve + + +example_nurbs_curve + - + + + +program~example_nurbs_curve->none~set~3 + + + + -program~example_nurbs_surface - - -example_nurbs_surface +program~nearest_point_1d + + +nearest_point_1d - + -program~example_nurbs_surface->none~set~3 - - +program~nearest_point_1d->none~set~3 + + - + -program~nearest_point_2d - - -nearest_point_2d +program~shape_c_1d + + +shape_C_1d - - -program~nearest_point_2d->none~set~3 - - + + +program~shape_c_1d->proc~set_c~3 + + - + -program~example_ppm1 - - -example_ppm1 +program~shape_circle + + +shape_circle - - -program~example_ppm1->proc~set_ring~2 - - - - - -program~example_ppm1->proc~set_tetragon - - - - - -program~example_ppm2 - - -example_ppm2 - - - - - -program~example_ppm2->proc~set_half_ring~2 - - - - - -program~example_ppm2->proc~set_tetragon - - - - - -program~example_ppm3 - - -example_ppm3 - - - - + -program~example_ppm3->proc~modify_xc~3 - - - - - -program~example_ppm3->proc~set_tetragon - - - - - -program~nearest_point_2d_bench - - -nearest_point_2d_bench - +program~shape_circle->proc~set_circle + + - - - -program~nearest_point_2d_bench->proc~set_tetragon - - - - - -program~shape_c_2d - - -shape_C_2d + + +program~shape_half_circle + + +shape_half_circle - + -program~shape_c_2d->proc~set_c~3 - - - - - -program~shape_half_ring_2d - - -shape_half_ring_2d - - - - - -program~shape_half_ring_2d->proc~set_half_ring~2 - - - - - -program~shape_ring_2d - - -shape_ring_2d - - - - - -program~shape_ring_2d->proc~set_ring~2 - - - - - -program~shape_tetragon - - -shape_tetragon - - - - - -program~shape_tetragon->proc~set_tetragon - - +program~shape_half_circle->proc~set_half_circle + + -
                  +

                  diff --git a/proc/set3.html b/proc/set3.html index d2c2cbaec..d0c310746 100644 --- a/proc/set3.html +++ b/proc/set3.html @@ -833,7 +833,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/set3~2.html b/proc/set3~2.html index f6035252d..18b1d6e1b 100644 --- a/proc/set3~2.html +++ b/proc/set3~2.html @@ -78,20 +78,20 @@

                  set3
                • 22 statements + title=" 0.4% of total for procedures.">26 statements
                • - Source File + Source File
                • -

                  private pure subroutine set3(this, Xc, Wc) +

                  private pure subroutine set3(this, nc, Xc, Wc)

                  -

                  Set Bezier or Rational Bezier curve using control points and weights.

                  +

                  Set Bezier or Rational Bezier surface using control points and weights.

                  Type Bound

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

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

                  Arguments

                  - + real(kind=rk), intent(in), ::Xth_dir1(:)Xth_dir(:)
                  - - real(kind=rk), - intent(in), - contiguous - ::Xth_dir2(:) - -
                  - + integer, intent(in),intent(in) - contiguous - ::degree(:) - -
                  - - integer, - intent(in), - contiguous + ::continuity1(:)degree
                  - + integer, intent(in), ::continuity2(:)continuity(:)
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  @@ -160,7 +160,7 @@

                  Arguments

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

                  Arguments

                  @@ -217,91 +232,91 @@

                  Calls

                  - - + + proc~~set3~2~~CallsGraph - + proc~set3~2 - -nurbs_curve%set3 + +nurbs_surface%set3 proc~cmp_degree~2 - - -nurbs_curve%cmp_degree + + +nurbs_surface%cmp_degree proc~set3~2->proc~cmp_degree~2 - - + + proc~get_multiplicity~2 - - -nurbs_curve%get_multiplicity + + +nurbs_surface%get_multiplicity proc~cmp_degree~2->proc~get_multiplicity~2 - - + + interface~compute_multiplicity - -compute_multiplicity + +compute_multiplicity proc~get_multiplicity~2->interface~compute_multiplicity - - + + proc~compute_multiplicity1 - -compute_multiplicity1 + +compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 - - + + proc~compute_multiplicity2 - -compute_multiplicity2 + +compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 - - + + @@ -401,263 +416,375 @@

                  Called by

                  - - + + proc~~set3~2~~CalledByGraph - + proc~set3~2 - -nurbs_curve%set3 + +nurbs_surface%set3 none~set~2 - - -nurbs_curve%set + + +nurbs_surface%set none~set~2->proc~set3~2 - - + + proc~elevate_degree~2 - - -nurbs_curve%elevate_degree + + +nurbs_surface%elevate_degree proc~elevate_degree~2->none~set~2 - - + + proc~insert_knots~2 - - -nurbs_curve%insert_knots + + +nurbs_surface%insert_knots proc~insert_knots~2->none~set~2 - - + + proc~modify_wc~2 - - -nurbs_curve%modify_Wc + + +nurbs_surface%modify_Wc proc~modify_wc~2->none~set~2 - - + + proc~modify_xc~2 - - -nurbs_curve%modify_Xc + + +nurbs_surface%modify_Xc proc~modify_xc~2->none~set~2 - - + + proc~remove_knots~2 - - -nurbs_curve%remove_knots + + +nurbs_surface%remove_knots proc~remove_knots~2->none~set~2 - - + + - + -proc~set_circle - - -nurbs_curve%set_circle +proc~set_c~2 + + +nurbs_surface%set_C - + -proc~set_circle->none~set~2 - - +proc~set_c~2->none~set~2 + + - + -proc~set_c~2 - - -nurbs_curve%set_C +proc~set_half_ring~2 + + +nurbs_surface%set_half_ring - + -proc~set_c~2->none~set~2 - - +proc~set_half_ring~2->none~set~2 + + - + -proc~set_half_circle - - -nurbs_curve%set_half_circle +proc~set_ring~2 + + +nurbs_surface%set_ring - + -proc~set_half_circle->none~set~2 - - +proc~set_ring~2->none~set~2 + + - + -program~example1_curve - - -example1_curve +proc~set_tetragon + + +nurbs_surface%set_tetragon - + -program~example1_curve->none~set~2 - - - - - -program~example1_curve->proc~elevate_degree~2 - - - - - -program~example1_curve->proc~insert_knots~2 - - +proc~set_tetragon->none~set~2 + + - - -program~example1_curve->proc~remove_knots~2 - - - - + -program~example_nurbs_curve - - -example_nurbs_curve +program~example3_surface + + +example3_surface - + -program~example_nurbs_curve->none~set~2 - - +program~example3_surface->none~set~2 + + + + + +program~example3_surface->proc~elevate_degree~2 + + + + + +program~example3_surface->proc~insert_knots~2 + + + + + +program~example3_surface->proc~remove_knots~2 + + - + -program~nearest_point_1d - - -nearest_point_1d +program~example_nurbs_surface + + +example_nurbs_surface - + -program~nearest_point_1d->none~set~2 - - +program~example_nurbs_surface->none~set~2 + + - + -program~shape_c_1d - - -shape_C_1d +program~nearest_point_2d + + +nearest_point_2d - - -program~shape_c_1d->proc~set_c~2 - - + + +program~nearest_point_2d->none~set~2 + + - + -program~shape_circle - - -shape_circle +program~example_ppm1 + + +example_ppm1 - - -program~shape_circle->proc~set_circle - - + + +program~example_ppm1->proc~set_ring~2 + + - + + +program~example_ppm1->proc~set_tetragon + + + + -program~shape_half_circle - - -shape_half_circle +program~example_ppm2 + + +example_ppm2 + + + + + +program~example_ppm2->proc~set_half_ring~2 + + + + + +program~example_ppm2->proc~set_tetragon + + + + + +program~example_ppm3 + + +example_ppm3 + + + + + +program~example_ppm3->proc~modify_xc~2 + + + + + +program~example_ppm3->proc~set_tetragon + + + + + +program~nearest_point_2d_bench + + +nearest_point_2d_bench + + + + + +program~nearest_point_2d_bench->proc~set_tetragon + + + + + +program~shape_c_2d + + +shape_C_2d - + -program~shape_half_circle->proc~set_half_circle - - +program~shape_c_2d->proc~set_c~2 + + + + + +program~shape_half_ring_2d + + +shape_half_ring_2d + + + + + +program~shape_half_ring_2d->proc~set_half_ring~2 + + + + + +program~shape_ring_2d + + +shape_ring_2d + + + + + +program~shape_ring_2d->proc~set_ring~2 + + + + + +program~shape_tetragon + + +shape_tetragon + + + + + +program~shape_tetragon->proc~set_tetragon + + -
                  +

                  diff --git a/proc/set3~3.html b/proc/set3~3.html index e514c0804..389d9db12 100644 --- a/proc/set3~3.html +++ b/proc/set3~3.html @@ -78,20 +78,20 @@

                  set3
                • 26 statements + title=" 0.3% of total for procedures.">22 statements
                • - Source File + Source File
                • -

                  private pure subroutine set3(this, nc, Xc, Wc) +

                  private pure subroutine set3(this, Xc, Wc)

                  -

                  Set Bezier or Rational Bezier surface using control points and weights.

                  +

                  Set Bezier or Rational Bezier curve using control points and weights.

                  Type Bound

                  -

                  nurbs_surface

                  +

                  nurbs_curve

                  Arguments

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

                  Arguments

                  - + + integer, + intent(in), + contiguous + ::nc(:) + +
                  + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  @@ -159,8 +159,8 @@

                  Arguments

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

                  Arguments

                  @@ -232,91 +217,91 @@

                  Calls

                  - - + + proc~~set3~3~~CallsGraph - + proc~set3~3 - -nurbs_surface%set3 + +nurbs_curve%set3 proc~cmp_degree~3 - - -nurbs_surface%cmp_degree + + +nurbs_curve%cmp_degree proc~set3~3->proc~cmp_degree~3 - - + + proc~get_multiplicity~3 - - -nurbs_surface%get_multiplicity + + +nurbs_curve%get_multiplicity proc~cmp_degree~3->proc~get_multiplicity~3 - - + + interface~compute_multiplicity - -compute_multiplicity + +compute_multiplicity proc~get_multiplicity~3->interface~compute_multiplicity - - + + proc~compute_multiplicity1 - -compute_multiplicity1 + +compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 - - + + proc~compute_multiplicity2 - -compute_multiplicity2 + +compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 - - + + @@ -416,375 +401,263 @@

                  Called by

                  - - + + proc~~set3~3~~CalledByGraph - + proc~set3~3 - -nurbs_surface%set3 + +nurbs_curve%set3 none~set~3 - - -nurbs_surface%set + + +nurbs_curve%set none~set~3->proc~set3~3 - - + + proc~elevate_degree~3 - - -nurbs_surface%elevate_degree + + +nurbs_curve%elevate_degree proc~elevate_degree~3->none~set~3 - - + + proc~insert_knots~3 - - -nurbs_surface%insert_knots + + +nurbs_curve%insert_knots proc~insert_knots~3->none~set~3 - - + + proc~modify_wc~3 - - -nurbs_surface%modify_Wc + + +nurbs_curve%modify_Wc proc~modify_wc~3->none~set~3 - - + + proc~modify_xc~3 - - -nurbs_surface%modify_Xc + + +nurbs_curve%modify_Xc proc~modify_xc~3->none~set~3 - - + + proc~remove_knots~3 - - -nurbs_surface%remove_knots + + +nurbs_curve%remove_knots proc~remove_knots~3->none~set~3 - - + + - + -proc~set_c~3 - - -nurbs_surface%set_C +proc~set_circle + + +nurbs_curve%set_circle - + -proc~set_c~3->none~set~3 - - +proc~set_circle->none~set~3 + + - + -proc~set_half_ring~2 - - -nurbs_surface%set_half_ring +proc~set_c~3 + + +nurbs_curve%set_C - + -proc~set_half_ring~2->none~set~3 - - +proc~set_c~3->none~set~3 + + - + -proc~set_ring~2 - - -nurbs_surface%set_ring +proc~set_half_circle + + +nurbs_curve%set_half_circle - + -proc~set_ring~2->none~set~3 - - +proc~set_half_circle->none~set~3 + + - + -proc~set_tetragon - - -nurbs_surface%set_tetragon +program~example1_curve + + +example1_curve - + -proc~set_tetragon->none~set~3 - - - - - -program~example3_surface - - -example3_surface - - +program~example1_curve->none~set~3 + + - - -program~example3_surface->none~set~3 - - + + +program~example1_curve->proc~elevate_degree~3 + + - + -program~example3_surface->proc~elevate_degree~3 - - +program~example1_curve->proc~insert_knots~3 + + - + -program~example3_surface->proc~insert_knots~3 - - +program~example1_curve->proc~remove_knots~3 + + - - -program~example3_surface->proc~remove_knots~3 - - + + +program~example_nurbs_curve + + +example_nurbs_curve + + + + + +program~example_nurbs_curve->none~set~3 + + - + -program~example_nurbs_surface - - -example_nurbs_surface +program~nearest_point_1d + + +nearest_point_1d - + -program~example_nurbs_surface->none~set~3 - - +program~nearest_point_1d->none~set~3 + + - + -program~nearest_point_2d - - -nearest_point_2d +program~shape_c_1d + + +shape_C_1d - - -program~nearest_point_2d->none~set~3 - - + + +program~shape_c_1d->proc~set_c~3 + + - + -program~example_ppm1 - - -example_ppm1 - - - - - -program~example_ppm1->proc~set_ring~2 - - - - - -program~example_ppm1->proc~set_tetragon - - - - - -program~example_ppm2 - - -example_ppm2 - - - - - -program~example_ppm2->proc~set_half_ring~2 - - - - - -program~example_ppm2->proc~set_tetragon - - - - - -program~example_ppm3 - - -example_ppm3 +program~shape_circle + + +shape_circle - + -program~example_ppm3->proc~modify_xc~3 - - - - - -program~example_ppm3->proc~set_tetragon - - - - - -program~nearest_point_2d_bench - - -nearest_point_2d_bench - - +program~shape_circle->proc~set_circle + + - - -program~nearest_point_2d_bench->proc~set_tetragon - - - - - -program~shape_c_2d - - -shape_C_2d + + +program~shape_half_circle + + +shape_half_circle - + -program~shape_c_2d->proc~set_c~3 - - - - - -program~shape_half_ring_2d - - -shape_half_ring_2d - - - - - -program~shape_half_ring_2d->proc~set_half_ring~2 - - - - - -program~shape_ring_2d - - -shape_ring_2d - - - - - -program~shape_ring_2d->proc~set_ring~2 - - - - - -program~shape_tetragon - - -shape_tetragon - - - - - -program~shape_tetragon->proc~set_tetragon - - +program~shape_half_circle->proc~set_half_circle + + -
                  +

                  diff --git a/proc/set_c.html b/proc/set_c.html index e95b2258a..6d7461e0f 100644 --- a/proc/set_c.html +++ b/proc/set_c.html @@ -693,7 +693,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/set_circle.html b/proc/set_circle.html index a2c0dfaf7..1f64f3743 100644 --- a/proc/set_circle.html +++ b/proc/set_circle.html @@ -158,7 +158,7 @@

                  Arguments

                  @@ -173,7 +173,7 @@

                  Arguments

                  @@ -227,78 +227,78 @@

                  Calls

                  nurbs_curve%set_circle - + -none~set~2 - +none~set~3 + nurbs_curve%set - + -proc~set_circle->none~set~2 +proc~set_circle->none~set~3 - + -proc~set1~2 - +proc~set1~3 + nurbs_curve%set1 - + -none~set~2->proc~set1~2 +none~set~3->proc~set1~3 - + -proc~set2~2 - +proc~set2~3 + nurbs_curve%set2 - + -none~set~2->proc~set2~2 +none~set~3->proc~set2~3 - + -proc~set3~2 - +proc~set3~3 + nurbs_curve%set3 - + -none~set~2->proc~set3~2 +none~set~3->proc~set3~3 - + -proc~cmp_degree~2 - +proc~cmp_degree~3 + nurbs_curve%cmp_degree - + -proc~set1~2->proc~cmp_degree~2 +proc~set1~3->proc~cmp_degree~3 @@ -311,30 +311,30 @@

                  Calls

                  - + -proc~set2~2->proc~compute_knot_vector +proc~set2~3->proc~compute_knot_vector - + -proc~set3~2->proc~cmp_degree~2 +proc~set3~3->proc~cmp_degree~3 - + -proc~get_multiplicity~2 - +proc~get_multiplicity~3 + nurbs_curve%get_multiplicity - + -proc~cmp_degree~2->proc~get_multiplicity~2 +proc~cmp_degree~3->proc~get_multiplicity~3 @@ -362,9 +362,9 @@

                  Calls

                  - + -proc~get_multiplicity~2->interface~compute_multiplicity +proc~get_multiplicity~3->interface~compute_multiplicity @@ -636,7 +636,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/set_c~2.html b/proc/set_c~2.html index 073a14e53..67955ab9f 100644 --- a/proc/set_c~2.html +++ b/proc/set_c~2.html @@ -78,20 +78,20 @@

                  set_C
                • 19 statements + title=" 0.4% of total for procedures.">27 statements
                • - Source File + Source File
                • -

                  private pure subroutine set_C(this, center, radius) +

                  private pure subroutine set_C(this, center, radius1, radius2)

                  Type Bound

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

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

                  Arguments

                  - - integer, - intent(in), - contiguous - ::nc(:) - -
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in),
                  - + class(nurbs_curve), intent(inout)
                  - + real(kind=rk), intent(in),
                  @@ -158,8 +158,8 @@

                  Arguments

                  @@ -196,7 +196,22 @@

                  Arguments

                  - + + + + + + + + + @@ -216,187 +231,214 @@

                  Calls

                  - - + + proc~~set_c~2~~CallsGraph - + proc~set_c~2 - -nurbs_curve%set_C + +nurbs_surface%set_C none~set~2 - - -nurbs_curve%set + + +nurbs_surface%set proc~set_c~2->none~set~2 - - + + proc~set1~2 - - -nurbs_curve%set1 + + +nurbs_surface%set1 none~set~2->proc~set1~2 - - + + proc~set2~2 - - -nurbs_curve%set2 + + +nurbs_surface%set2 none~set~2->proc~set2~2 - - + + proc~set3~2 - - -nurbs_curve%set3 + + +nurbs_surface%set3 none~set~2->proc~set3~2 - - + + proc~cmp_degree~2 - - -nurbs_curve%cmp_degree + + +nurbs_surface%cmp_degree proc~set1~2->proc~cmp_degree~2 - - + + - + +proc~cmp_nc~2 + + +nurbs_surface%cmp_nc + + + + + +proc~set1~2->proc~cmp_nc~2 + + + + + +proc~set2~2->proc~cmp_nc~2 + + + + + proc~compute_knot_vector - - -compute_knot_vector + + +compute_knot_vector - + proc~set2~2->proc~compute_knot_vector - - + + - + proc~set3~2->proc~cmp_degree~2 - - + + - + proc~get_multiplicity~2 - - -nurbs_curve%get_multiplicity + + +nurbs_surface%get_multiplicity - + proc~cmp_degree~2->proc~get_multiplicity~2 - - + + - + -proc~repelem - - -repelem +interface~compute_multiplicity + + +compute_multiplicity - - -proc~compute_knot_vector->proc~repelem - - + + +proc~cmp_nc~2->interface~compute_multiplicity + + - - -interface~compute_multiplicity - - -compute_multiplicity + + +proc~repelem + + +repelem - - -proc~get_multiplicity~2->interface~compute_multiplicity - - + + +proc~compute_knot_vector->proc~repelem + + - + proc~compute_multiplicity1 - - -compute_multiplicity1 + + +compute_multiplicity1 - + interface~compute_multiplicity->proc~compute_multiplicity1 - - + + - + proc~compute_multiplicity2 - - -compute_multiplicity2 + + +compute_multiplicity2 - + interface~compute_multiplicity->proc~compute_multiplicity2 - - + + + + + +proc~get_multiplicity~2->interface~compute_multiplicity + + @@ -496,31 +538,31 @@

                  Called by

                  - + proc~~set_c~2~~CalledByGraph - + proc~set_c~2 - -nurbs_curve%set_C + +nurbs_surface%set_C - + -program~shape_c_1d - +program~shape_c_2d + -shape_C_1d +shape_C_2d - + -program~shape_c_1d->proc~set_c~2 - - +program~shape_c_2d->proc~set_c~2 + + @@ -636,7 +678,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/set_c~3.html b/proc/set_c~3.html index 4d81d7012..1ff5d799f 100644 --- a/proc/set_c~3.html +++ b/proc/set_c~3.html @@ -78,20 +78,20 @@

                  set_C
                • 27 statements + title=" 0.3% of total for procedures.">19 statements
                • - Source File + Source File
                • -

                  private pure subroutine set_C(this, center, radius1, radius2) +

                  private pure subroutine set_C(this, center, radius)

                  Type Bound

                  -

                  nurbs_surface

                  +

                  nurbs_curve

                  Arguments

                  - - class(nurbs_curve), + + class(nurbs_surface), intent(inout) @@ -188,7 +188,7 @@

                  Arguments

                  - + real(kind=rk), intent(in) ::radiusradius1 + +
                  + + real(kind=rk), + intent(in) + + ::radius2
                  @@ -158,8 +158,8 @@

                  Arguments

                  @@ -188,7 +188,7 @@

                  Arguments

                  @@ -196,22 +196,7 @@

                  Arguments

                  - - - - - - - - - + @@ -231,214 +216,187 @@

                  Calls

                  - - + + proc~~set_c~3~~CallsGraph - + proc~set_c~3 - -nurbs_surface%set_C + +nurbs_curve%set_C none~set~3 - - -nurbs_surface%set + + +nurbs_curve%set proc~set_c~3->none~set~3 - - + + proc~set1~3 - - -nurbs_surface%set1 + + +nurbs_curve%set1 none~set~3->proc~set1~3 - - + + proc~set2~3 - - -nurbs_surface%set2 + + +nurbs_curve%set2 none~set~3->proc~set2~3 - - + + proc~set3~3 - - -nurbs_surface%set3 + + +nurbs_curve%set3 none~set~3->proc~set3~3 - - + + proc~cmp_degree~3 - - -nurbs_surface%cmp_degree + + +nurbs_curve%cmp_degree proc~set1~3->proc~cmp_degree~3 - - - - - -proc~cmp_nc~3 - - -nurbs_surface%cmp_nc - - - - - -proc~set1~3->proc~cmp_nc~3 - - - - - -proc~set2~3->proc~cmp_nc~3 - - + + - + proc~compute_knot_vector - - -compute_knot_vector + + +compute_knot_vector - + proc~set2~3->proc~compute_knot_vector - - + + - + proc~set3~3->proc~cmp_degree~3 - - + + - + proc~get_multiplicity~3 - - -nurbs_surface%get_multiplicity + + +nurbs_curve%get_multiplicity - + proc~cmp_degree~3->proc~get_multiplicity~3 - - + + - + -interface~compute_multiplicity - - -compute_multiplicity +proc~repelem + + +repelem - - -proc~cmp_nc~3->interface~compute_multiplicity - - + + +proc~compute_knot_vector->proc~repelem + + - - -proc~repelem - - -repelem + + +interface~compute_multiplicity + + +compute_multiplicity - - -proc~compute_knot_vector->proc~repelem - - + + +proc~get_multiplicity~3->interface~compute_multiplicity + + - + proc~compute_multiplicity1 - - -compute_multiplicity1 + + +compute_multiplicity1 - + interface~compute_multiplicity->proc~compute_multiplicity1 - - + + - + proc~compute_multiplicity2 - - -compute_multiplicity2 + + +compute_multiplicity2 - + interface~compute_multiplicity->proc~compute_multiplicity2 - - - - - -proc~get_multiplicity~3->interface~compute_multiplicity - - + + @@ -538,31 +496,31 @@

                  Called by

                  - + proc~~set_c~3~~CalledByGraph - + proc~set_c~3 - -nurbs_surface%set_C + +nurbs_curve%set_C - + -program~shape_c_2d - +program~shape_c_1d + -shape_C_2d +shape_C_1d - + -program~shape_c_2d->proc~set_c~3 - - +program~shape_c_1d->proc~set_c~3 + + @@ -678,7 +636,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/set_elem.html b/proc/set_elem.html index 3872be59b..f679994f2 100644 --- a/proc/set_elem.html +++ b/proc/set_elem.html @@ -341,7 +341,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/set_elem_xc_vis.html b/proc/set_elem_xc_vis.html index 04a5c183d..d85654dab 100644 --- a/proc/set_elem_xc_vis.html +++ b/proc/set_elem_xc_vis.html @@ -220,7 +220,7 @@

                  Arguments

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/set_elem_xc_vis~2.html b/proc/set_elem_xc_vis~2.html index 9e47f1aed..f89426a77 100644 --- a/proc/set_elem_xc_vis~2.html +++ b/proc/set_elem_xc_vis~2.html @@ -83,15 +83,15 @@

                  set_elem_Xc_vis
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure subroutine set_elem_Xc_vis(this, elemConn)

                  Type Bound

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

                  - - class(nurbs_surface), + + class(nurbs_curve), intent(inout) @@ -173,7 +173,7 @@

                  Arguments

                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), intent(in) ::radius1 - -
                  - - real(kind=rk), - intent(in) - - ::radius2radius
                  @@ -158,8 +158,8 @@

                  Arguments

                  @@ -220,7 +220,7 @@

                  Arguments

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/set_elem_xc_vis~3.html b/proc/set_elem_xc_vis~3.html index 7313aef6f..cccaa3f0e 100644 --- a/proc/set_elem_xc_vis~3.html +++ b/proc/set_elem_xc_vis~3.html @@ -83,15 +83,15 @@

                  set_elem_Xc_vis
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure subroutine set_elem_Xc_vis(this, elemConn)

                  Type Bound

                  -

                  nurbs_surface

                  +

                  nurbs_curve

                  Arguments

                  - - class(nurbs_curve), + + class(nurbs_surface), intent(inout) @@ -173,7 +173,7 @@

                  Arguments

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

                  Arguments

                  - - class(nurbs_surface), + + class(nurbs_curve), intent(inout) @@ -220,7 +220,7 @@

                  Arguments

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/set_elem_xg_vis.html b/proc/set_elem_xg_vis.html index bea6e6816..3ae2b86d2 100644 --- a/proc/set_elem_xg_vis.html +++ b/proc/set_elem_xg_vis.html @@ -356,7 +356,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/set_elem_xg_vis~2.html b/proc/set_elem_xg_vis~2.html index e78890715..e637a505e 100644 --- a/proc/set_elem_xg_vis~2.html +++ b/proc/set_elem_xg_vis~2.html @@ -83,15 +83,15 @@

                  set_elem_Xg_vis
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure subroutine set_elem_Xg_vis(this, elemConn)

                  Type Bound

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

                  @@ -158,8 +158,8 @@

                  Arguments

                  @@ -220,7 +220,7 @@

                  Arguments

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/set_elem_xg_vis~3.html b/proc/set_elem_xg_vis~3.html index 6e7a7b5e6..16fd3a5c3 100644 --- a/proc/set_elem_xg_vis~3.html +++ b/proc/set_elem_xg_vis~3.html @@ -83,15 +83,15 @@

                  set_elem_Xg_vis
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure subroutine set_elem_Xg_vis(this, elemConn)

                  Type Bound

                  -

                  nurbs_surface

                  +

                  nurbs_curve

                  Arguments

                  - - class(nurbs_curve), + + class(nurbs_surface), intent(inout) @@ -173,7 +173,7 @@

                  Arguments

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

                  Arguments

                  - - class(nurbs_surface), + + class(nurbs_curve), intent(inout) @@ -220,7 +220,7 @@

                  Arguments

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/set_elem~2.html b/proc/set_elem~2.html index 5b857f129..36128ea8a 100644 --- a/proc/set_elem~2.html +++ b/proc/set_elem~2.html @@ -83,15 +83,15 @@

                  set_elem
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure subroutine set_elem(this, elemConn)

                  Type Bound

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

                  @@ -158,8 +158,8 @@

                  Arguments

                  @@ -220,7 +220,7 @@

                  Arguments

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/set_elem~3.html b/proc/set_elem~3.html index ac069293d..2d998e39f 100644 --- a/proc/set_elem~3.html +++ b/proc/set_elem~3.html @@ -83,15 +83,15 @@

                  set_elem
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure subroutine set_elem(this, elemConn)

                  Type Bound

                  -

                  nurbs_surface

                  +

                  nurbs_curve

                  Arguments

                  - - class(nurbs_curve), + + class(nurbs_surface), intent(inout) @@ -173,7 +173,7 @@

                  Arguments

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

                  Arguments

                  @@ -173,7 +173,7 @@

                  Arguments

                  @@ -227,78 +227,78 @@

                  Calls

                  nurbs_curve%set_half_circle - + -none~set~2 - +none~set~3 + nurbs_curve%set - + -proc~set_half_circle->none~set~2 +proc~set_half_circle->none~set~3 - + -proc~set1~2 - +proc~set1~3 + nurbs_curve%set1 - + -none~set~2->proc~set1~2 +none~set~3->proc~set1~3 - + -proc~set2~2 - +proc~set2~3 + nurbs_curve%set2 - + -none~set~2->proc~set2~2 +none~set~3->proc~set2~3 - + -proc~set3~2 - +proc~set3~3 + nurbs_curve%set3 - + -none~set~2->proc~set3~2 +none~set~3->proc~set3~3 - + -proc~cmp_degree~2 - +proc~cmp_degree~3 + nurbs_curve%cmp_degree - + -proc~set1~2->proc~cmp_degree~2 +proc~set1~3->proc~cmp_degree~3 @@ -311,30 +311,30 @@

                  Calls

                  - + -proc~set2~2->proc~compute_knot_vector +proc~set2~3->proc~compute_knot_vector - + -proc~set3~2->proc~cmp_degree~2 +proc~set3~3->proc~cmp_degree~3 - + -proc~get_multiplicity~2 - +proc~get_multiplicity~3 + nurbs_curve%get_multiplicity - + -proc~cmp_degree~2->proc~get_multiplicity~2 +proc~cmp_degree~3->proc~get_multiplicity~3 @@ -362,9 +362,9 @@

                  Calls

                  - + -proc~get_multiplicity~2->interface~compute_multiplicity +proc~get_multiplicity~3->interface~compute_multiplicity @@ -636,7 +636,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/set_half_ring.html b/proc/set_half_ring.html index ac4f80bdf..5c06110ce 100644 --- a/proc/set_half_ring.html +++ b/proc/set_half_ring.html @@ -693,7 +693,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/set_half_ring~2.html b/proc/set_half_ring~2.html index 507d44936..dd55ec430 100644 --- a/proc/set_half_ring~2.html +++ b/proc/set_half_ring~2.html @@ -158,7 +158,7 @@

                  Arguments

                  @@ -173,7 +173,7 @@

                  Arguments

                  @@ -242,99 +242,99 @@

                  Calls

                  nurbs_surface%set_half_ring - + -none~set~3 - +none~set~2 + nurbs_surface%set - + -proc~set_half_ring~2->none~set~3 +proc~set_half_ring~2->none~set~2 - + -proc~set1~3 - +proc~set1~2 + nurbs_surface%set1 - + -none~set~3->proc~set1~3 +none~set~2->proc~set1~2 - + -proc~set2~3 - +proc~set2~2 + nurbs_surface%set2 - + -none~set~3->proc~set2~3 +none~set~2->proc~set2~2 - + -proc~set3~3 - +proc~set3~2 + nurbs_surface%set3 - + -none~set~3->proc~set3~3 +none~set~2->proc~set3~2 - + -proc~cmp_degree~3 - +proc~cmp_degree~2 + nurbs_surface%cmp_degree - + -proc~set1~3->proc~cmp_degree~3 +proc~set1~2->proc~cmp_degree~2 - + -proc~cmp_nc~3 - +proc~cmp_nc~2 + nurbs_surface%cmp_nc - + -proc~set1~3->proc~cmp_nc~3 +proc~set1~2->proc~cmp_nc~2 - + -proc~set2~3->proc~cmp_nc~3 +proc~set2~2->proc~cmp_nc~2 @@ -347,30 +347,30 @@

                  Calls

                  - + -proc~set2~3->proc~compute_knot_vector +proc~set2~2->proc~compute_knot_vector - + -proc~set3~3->proc~cmp_degree~3 +proc~set3~2->proc~cmp_degree~2 - + -proc~get_multiplicity~3 - +proc~get_multiplicity~2 + nurbs_surface%get_multiplicity - + -proc~cmp_degree~3->proc~get_multiplicity~3 +proc~cmp_degree~2->proc~get_multiplicity~2 @@ -383,9 +383,9 @@

                  Calls

                  - + -proc~cmp_nc~3->interface~compute_multiplicity +proc~cmp_nc~2->interface~compute_multiplicity @@ -434,9 +434,9 @@

                  Calls

                  - + -proc~get_multiplicity~3->interface~compute_multiplicity +proc~get_multiplicity~2->interface~compute_multiplicity @@ -693,7 +693,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/set_hexahedron.html b/proc/set_hexahedron.html index f56781cbe..864694646 100644 --- a/proc/set_hexahedron.html +++ b/proc/set_hexahedron.html @@ -693,7 +693,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/set_ring.html b/proc/set_ring.html index d5630a0c8..a952ea441 100644 --- a/proc/set_ring.html +++ b/proc/set_ring.html @@ -693,7 +693,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/set_ring~2.html b/proc/set_ring~2.html index 0ea89cb02..5bceb1355 100644 --- a/proc/set_ring~2.html +++ b/proc/set_ring~2.html @@ -158,7 +158,7 @@

                  Arguments

                  @@ -173,7 +173,7 @@

                  Arguments

                  @@ -242,99 +242,99 @@

                  Calls

                  nurbs_surface%set_ring - + -none~set~3 - +none~set~2 + nurbs_surface%set - + -proc~set_ring~2->none~set~3 +proc~set_ring~2->none~set~2 - + -proc~set1~3 - +proc~set1~2 + nurbs_surface%set1 - + -none~set~3->proc~set1~3 +none~set~2->proc~set1~2 - + -proc~set2~3 - +proc~set2~2 + nurbs_surface%set2 - + -none~set~3->proc~set2~3 +none~set~2->proc~set2~2 - + -proc~set3~3 - +proc~set3~2 + nurbs_surface%set3 - + -none~set~3->proc~set3~3 +none~set~2->proc~set3~2 - + -proc~cmp_degree~3 - +proc~cmp_degree~2 + nurbs_surface%cmp_degree - + -proc~set1~3->proc~cmp_degree~3 +proc~set1~2->proc~cmp_degree~2 - + -proc~cmp_nc~3 - +proc~cmp_nc~2 + nurbs_surface%cmp_nc - + -proc~set1~3->proc~cmp_nc~3 +proc~set1~2->proc~cmp_nc~2 - + -proc~set2~3->proc~cmp_nc~3 +proc~set2~2->proc~cmp_nc~2 @@ -347,30 +347,30 @@

                  Calls

                  - + -proc~set2~3->proc~compute_knot_vector +proc~set2~2->proc~compute_knot_vector - + -proc~set3~3->proc~cmp_degree~3 +proc~set3~2->proc~cmp_degree~2 - + -proc~get_multiplicity~3 - +proc~get_multiplicity~2 + nurbs_surface%get_multiplicity - + -proc~cmp_degree~3->proc~get_multiplicity~3 +proc~cmp_degree~2->proc~get_multiplicity~2 @@ -383,9 +383,9 @@

                  Calls

                  - + -proc~cmp_nc~3->interface~compute_multiplicity +proc~cmp_nc~2->interface~compute_multiplicity @@ -434,9 +434,9 @@

                  Calls

                  - + -proc~get_multiplicity~3->interface~compute_multiplicity +proc~get_multiplicity~2->interface~compute_multiplicity @@ -693,7 +693,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/set_tetragon.html b/proc/set_tetragon.html index 092f318d2..990b14c56 100644 --- a/proc/set_tetragon.html +++ b/proc/set_tetragon.html @@ -158,7 +158,7 @@

                  Arguments

                  @@ -173,7 +173,7 @@

                  Arguments

                  @@ -188,7 +188,7 @@

                  Arguments

                  @@ -203,7 +203,7 @@

                  Arguments

                  @@ -242,18 +242,18 @@

                  Calls

                  nurbs_surface%set_tetragon - + -none~set~3 - +none~set~2 + nurbs_surface%set - + -proc~set_tetragon->none~set~3 +proc~set_tetragon->none~set~2 @@ -272,84 +272,84 @@

                  Calls

                  - + -proc~set1~3 - +proc~set1~2 + nurbs_surface%set1 - + -none~set~3->proc~set1~3 +none~set~2->proc~set1~2 - + -proc~set2~3 - +proc~set2~2 + nurbs_surface%set2 - + -none~set~3->proc~set2~3 +none~set~2->proc~set2~2 - + -proc~set3~3 - +proc~set3~2 + nurbs_surface%set3 - + -none~set~3->proc~set3~3 +none~set~2->proc~set3~2 - + -proc~cmp_degree~3 - +proc~cmp_degree~2 + nurbs_surface%cmp_degree - + -proc~set1~3->proc~cmp_degree~3 +proc~set1~2->proc~cmp_degree~2 - + -proc~cmp_nc~3 - +proc~cmp_nc~2 + nurbs_surface%cmp_nc - + -proc~set1~3->proc~cmp_nc~3 +proc~set1~2->proc~cmp_nc~2 - + -proc~set2~3->proc~cmp_nc~3 +proc~set2~2->proc~cmp_nc~2 @@ -362,30 +362,30 @@

                  Calls

                  - + -proc~set2~3->proc~compute_knot_vector +proc~set2~2->proc~compute_knot_vector - + -proc~set3~3->proc~cmp_degree~3 +proc~set3~2->proc~cmp_degree~2 - + -proc~get_multiplicity~3 - +proc~get_multiplicity~2 + nurbs_surface%get_multiplicity - + -proc~cmp_degree~3->proc~get_multiplicity~3 +proc~cmp_degree~2->proc~get_multiplicity~2 @@ -398,9 +398,9 @@

                  Calls

                  - + -proc~cmp_nc~3->interface~compute_multiplicity +proc~cmp_nc~2->interface~compute_multiplicity @@ -449,9 +449,9 @@

                  Calls

                  - + -proc~get_multiplicity~3->interface~compute_multiplicity +proc~get_multiplicity~2->interface~compute_multiplicity @@ -753,7 +753,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/show.html b/proc/show.html index 5425105a3..df7c66794 100644 --- a/proc/show.html +++ b/proc/show.html @@ -446,7 +446,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/show~2.html b/proc/show~2.html index 31213239f..accdc64cd 100644 --- a/proc/show~2.html +++ b/proc/show~2.html @@ -83,15 +83,15 @@

                  show
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private impure subroutine show(this, vtkfile_Xc, vtkfile_Xg)

                  Type Bound

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

                  - - class(nurbs_surface), + + class(nurbs_curve), intent(inout) @@ -220,7 +220,7 @@

                  Arguments

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/set_half_circle.html b/proc/set_half_circle.html index 06d8c0266..99e7083ab 100644 --- a/proc/set_half_circle.html +++ b/proc/set_half_circle.html @@ -158,7 +158,7 @@

                  Arguments

                  - + class(nurbs_curve), intent(inout)
                  - + real(kind=rk), intent(in),
                  - + class(nurbs_surface), intent(inout)
                  - + real(kind=rk), intent(in),
                  - + class(nurbs_surface), intent(inout)
                  - + real(kind=rk), intent(in),
                  - + class(nurbs_surface), intent(inout)
                  - + real(kind=rk), intent(in)
                  - + integer, intent(in)
                  - + real(kind=rk), intent(in),
                  @@ -159,7 +159,7 @@

                  Arguments

                  - class(nurbs_curve), + class(nurbs_surface), intent(inout) @@ -216,91 +216,106 @@

                  Called by

                  - - + + proc~~show~2~~CalledByGraph - + proc~show~2 - -nurbs_curve%show + +nurbs_surface%show - + -program~example1_curve - - -example1_curve +program~example3_surface + + +example3_surface - + -program~example1_curve->proc~show~2 - - +program~example3_surface->proc~show~2 + + - + -program~example_nurbs_curve - - -example_nurbs_curve +program~example_nurbs_surface + + +example_nurbs_surface - + -program~example_nurbs_curve->proc~show~2 - - +program~example_nurbs_surface->proc~show~2 + + - + -program~shape_c_1d - - -shape_C_1d +program~shape_c_2d + + +shape_C_2d - + -program~shape_c_1d->proc~show~2 - - +program~shape_c_2d->proc~show~2 + + - + -program~shape_circle - - -shape_circle +program~shape_half_ring_2d + + +shape_half_ring_2d - + -program~shape_circle->proc~show~2 - - +program~shape_half_ring_2d->proc~show~2 + + - + -program~shape_half_circle - - -shape_half_circle +program~shape_ring_2d + + +shape_ring_2d - + -program~shape_half_circle->proc~show~2 - - +program~shape_ring_2d->proc~show~2 + + + + + +program~shape_tetragon + + +shape_tetragon + + + + + +program~shape_tetragon->proc~show~2 + + @@ -416,7 +431,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/show~3.html b/proc/show~3.html index 4fb8ee88b..c1b5c6611 100644 --- a/proc/show~3.html +++ b/proc/show~3.html @@ -83,15 +83,15 @@

                  show
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private impure subroutine show(this, vtkfile_Xc, vtkfile_Xg)

                  Type Bound

                  -

                  nurbs_surface

                  +

                  nurbs_curve

                  Arguments

                  @@ -158,8 +158,8 @@

                  Arguments

                  @@ -171,7 +171,7 @@

                  Arguments

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

                  Arguments

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

                  @@ -421,7 +421,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/translate_xc.html b/proc/translate_xc.html index 0f89a7072..e630e562d 100644 --- a/proc/translate_xc.html +++ b/proc/translate_xc.html @@ -341,7 +341,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/translate_xc~2.html b/proc/translate_xc~2.html index 64bd4cb3c..cc45dff74 100644 --- a/proc/translate_xc~2.html +++ b/proc/translate_xc~2.html @@ -83,15 +83,15 @@

                  translate_Xc
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure subroutine translate_Xc(this, vec)

                  Type Bound

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

                  - - class(nurbs_surface), + + class(nurbs_curve), intent(inout) @@ -216,106 +216,91 @@

                  Called by

                  - - + + proc~~show~3~~CalledByGraph - + proc~show~3 - -nurbs_surface%show + +nurbs_curve%show - + -program~example3_surface - - -example3_surface +program~example1_curve + + +example1_curve - + -program~example3_surface->proc~show~3 - - +program~example1_curve->proc~show~3 + + - + -program~example_nurbs_surface - - -example_nurbs_surface +program~example_nurbs_curve + + +example_nurbs_curve - + -program~example_nurbs_surface->proc~show~3 - - +program~example_nurbs_curve->proc~show~3 + + - + -program~shape_c_2d - - -shape_C_2d +program~shape_c_1d + + +shape_C_1d - + -program~shape_c_2d->proc~show~3 - - +program~shape_c_1d->proc~show~3 + + - + -program~shape_half_ring_2d - - -shape_half_ring_2d +program~shape_circle + + +shape_circle - + -program~shape_half_ring_2d->proc~show~3 - - +program~shape_circle->proc~show~3 + + - + -program~shape_ring_2d - - -shape_ring_2d +program~shape_half_circle + + +shape_half_circle - + -program~shape_ring_2d->proc~show~3 - - - - - -program~shape_tetragon - - -shape_tetragon - - - - - -program~shape_tetragon->proc~show~3 - - +program~shape_half_circle->proc~show~3 + + @@ -431,7 +416,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/tetragon_xc.html b/proc/tetragon_xc.html index 60bb36d1a..956a0c5f5 100644 --- a/proc/tetragon_xc.html +++ b/proc/tetragon_xc.html @@ -156,7 +156,7 @@

                  Arguments

                  - + real(kind=rk), intent(in)
                  - + integer, intent(in)
                  @@ -159,7 +159,7 @@

                  Arguments

                  @@ -201,31 +201,61 @@

                  Called by

                  - - + + proc~~translate_xc~2~~CalledByGraph - + proc~translate_xc~2 - -nurbs_curve%translate_Xc + +nurbs_surface%translate_Xc - + -program~example1_curve - - -example1_curve +program~example3_surface + + +example3_surface - + -program~example1_curve->proc~translate_xc~2 - - +program~example3_surface->proc~translate_xc~2 + + + + + +program~example_ppm2 + + +example_ppm2 + + + + + +program~example_ppm2->proc~translate_xc~2 + + + + + +program~example_ppm3 + + +example_ppm3 + + + + + +program~example_ppm3->proc~translate_xc~2 + + @@ -341,7 +371,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/translate_xc~3.html b/proc/translate_xc~3.html index 4349ac418..fded1a3e8 100644 --- a/proc/translate_xc~3.html +++ b/proc/translate_xc~3.html @@ -83,15 +83,15 @@

                  translate_Xc
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure subroutine translate_Xc(this, vec)

                  Type Bound

                  -

                  nurbs_surface

                  +

                  nurbs_curve

                  Arguments

                  - class(nurbs_curve), + class(nurbs_surface), intent(inout) @@ -173,7 +173,7 @@

                  Arguments

                  - + real(kind=rk), intent(in)
                  @@ -158,8 +158,8 @@

                  Arguments

                  - - class(nurbs_surface), + + class(nurbs_curve), intent(inout) @@ -201,61 +201,31 @@

                  Called by

                  - - + + proc~~translate_xc~3~~CalledByGraph - + proc~translate_xc~3 - -nurbs_surface%translate_Xc + +nurbs_curve%translate_Xc - + -program~example3_surface - - -example3_surface +program~example1_curve + + +example1_curve - + -program~example3_surface->proc~translate_xc~3 - - - - - -program~example_ppm2 - - -example_ppm2 - - - - - -program~example_ppm2->proc~translate_xc~3 - - - - - -program~example_ppm3 - - -example_ppm3 - - - - - -program~example_ppm3->proc~translate_xc~3 - - +program~example1_curve->proc~translate_xc~3 + + @@ -371,7 +341,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/translate_xg.html b/proc/translate_xg.html index ebfe6ec12..7f2cdebcc 100644 --- a/proc/translate_xg.html +++ b/proc/translate_xg.html @@ -341,7 +341,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/translate_xg~2.html b/proc/translate_xg~2.html index 81309dda3..35fec9327 100644 --- a/proc/translate_xg~2.html +++ b/proc/translate_xg~2.html @@ -83,15 +83,15 @@

                  translate_Xg
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure subroutine translate_Xg(this, vec)

                  Type Bound

                  -

                  nurbs_curve

                  +

                  nurbs_surface

                  Arguments

                  @@ -159,7 +159,7 @@

                  Arguments

                  @@ -201,31 +201,31 @@

                  Called by

                  - + proc~~translate_xg~2~~CalledByGraph - + proc~translate_xg~2 - -nurbs_curve%translate_Xg + +nurbs_surface%translate_Xg - + -program~example1_curve - - -example1_curve +program~example3_surface + + +example3_surface - + -program~example1_curve->proc~translate_xg~2 - - +program~example3_surface->proc~translate_xg~2 + + @@ -341,7 +341,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/translate_xg~3.html b/proc/translate_xg~3.html index 33d4c33b5..d1126cf0b 100644 --- a/proc/translate_xg~3.html +++ b/proc/translate_xg~3.html @@ -83,15 +83,15 @@

                  translate_Xg
                • - Source File + Source File
                • @@ -143,7 +143,7 @@

                  private pure subroutine translate_Xg(this, vec)

                  Type Bound

                  -

                  nurbs_surface

                  +

                  nurbs_curve

                  Arguments

                  - class(nurbs_curve), + class(nurbs_surface), intent(inout) @@ -173,7 +173,7 @@

                  Arguments

                  - + real(kind=rk), intent(in)
                  @@ -158,8 +158,8 @@

                  Arguments

                  @@ -235,24 +235,24 @@

                  Called by

                  proc~cmp_elem~2 - - -nurbs_curve%cmp_elem + + +nurbs_surface%cmp_elem proc~cmp_elem~2->interface~unique - - + + proc~cmp_elem~3 - - -nurbs_surface%cmp_elem + + +nurbs_curve%cmp_elem @@ -391,7 +391,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/unique_real.html b/proc/unique_real.html index 48be5b5d6..b278f80e8 100644 --- a/proc/unique_real.html +++ b/proc/unique_real.html @@ -156,7 +156,7 @@

                  Arguments

                  @@ -235,24 +235,24 @@

                  Called by

                  proc~cmp_elem~2 - - -nurbs_curve%cmp_elem + + +nurbs_surface%cmp_elem proc~cmp_elem~2->interface~unique - - + + proc~cmp_elem~3 - - -nurbs_surface%cmp_elem + + +nurbs_curve%cmp_elem @@ -391,7 +391,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/program/example1_curve.html b/program/example1_curve.html index c40c666cd..263194b03 100644 --- a/program/example1_curve.html +++ b/program/example1_curve.html @@ -115,10 +115,10 @@

                  Variables

                  - Wc - Xc - knot - nurbs + Wc + Xc + knot + nurbs
                  @@ -409,108 +409,108 @@

                  Calls

                  example1_curve - + -none~get_knot~2 - +none~get_knot~3 + nurbs_curve%get_knot - + -program~example1_curve->none~get_knot~2 +program~example1_curve->none~get_knot~3 - + -none~set~2 - +none~set~3 + nurbs_curve%set - + -program~example1_curve->none~set~2 +program~example1_curve->none~set~3 - + -proc~create~2 - +proc~create~3 + nurbs_curve%create - + -program~example1_curve->proc~create~2 +program~example1_curve->proc~create~3 - + -proc~elevate_degree~2 - +proc~elevate_degree~3 + nurbs_curve%elevate_degree - + -program~example1_curve->proc~elevate_degree~2 +program~example1_curve->proc~elevate_degree~3 - + -proc~export_xc~2 - +proc~export_xc~3 + nurbs_curve%export_Xc - + -program~example1_curve->proc~export_xc~2 +program~example1_curve->proc~export_xc~3 - + -proc~export_xg~2 - +proc~export_xg~3 + nurbs_curve%export_Xg - + -program~example1_curve->proc~export_xg~2 +program~example1_curve->proc~export_xg~3 - + -proc~finalize~2 - +proc~finalize~3 + nurbs_curve%finalize - + -program~example1_curve->proc~finalize~2 +program~example1_curve->proc~finalize~3 @@ -529,219 +529,219 @@

                  Calls

                  - + -proc~insert_knots~2 - +proc~insert_knots~3 + nurbs_curve%insert_knots - + -program~example1_curve->proc~insert_knots~2 +program~example1_curve->proc~insert_knots~3 - + -proc~remove_knots~2 - +proc~remove_knots~3 + nurbs_curve%remove_knots - + -program~example1_curve->proc~remove_knots~2 +program~example1_curve->proc~remove_knots~3 - + -proc~rotate_xc~2 - +proc~rotate_xc~3 + nurbs_curve%rotate_Xc - + -program~example1_curve->proc~rotate_xc~2 +program~example1_curve->proc~rotate_xc~3 - + -proc~rotate_xg~2 - +proc~rotate_xg~3 + nurbs_curve%rotate_Xg - + -program~example1_curve->proc~rotate_xg~2 +program~example1_curve->proc~rotate_xg~3 - + -proc~show~2 - +proc~show~3 + nurbs_curve%show - + -program~example1_curve->proc~show~2 +program~example1_curve->proc~show~3 - + -proc~translate_xc~2 - +proc~translate_xc~3 + nurbs_curve%translate_Xc - + -program~example1_curve->proc~translate_xc~2 +program~example1_curve->proc~translate_xc~3 - + -proc~translate_xg~2 - +proc~translate_xg~3 + nurbs_curve%translate_Xg - + -program~example1_curve->proc~translate_xg~2 +program~example1_curve->proc~translate_xg~3 - + -proc~get_knot_all~2 - +proc~get_knot_all~3 + nurbs_curve%get_knot_all - + -none~get_knot~2->proc~get_knot_all~2 +none~get_knot~3->proc~get_knot_all~3 - + -proc~get_knoti~2 - +proc~get_knoti~3 + nurbs_curve%get_knoti - + -none~get_knot~2->proc~get_knoti~2 +none~get_knot~3->proc~get_knoti~3 - + -proc~set1~2 - +proc~set1~3 + nurbs_curve%set1 - + -none~set~2->proc~set1~2 +none~set~3->proc~set1~3 - + -proc~set2~2 - +proc~set2~3 + nurbs_curve%set2 - + -none~set~2->proc~set2~2 +none~set~3->proc~set2~3 - + -proc~set3~2 - +proc~set3~3 + nurbs_curve%set3 - + -none~set~2->proc~set3~2 +none~set~3->proc~set3~3 - + -interface~compute_xg~2 - +interface~compute_xg~3 + compute_Xg - + -proc~create~2->interface~compute_xg~2 +proc~create~3->interface~compute_xg~3 - + -proc~is_rational~2 - +proc~is_rational~3 + nurbs_curve%is_rational - + -proc~create~2->proc~is_rational~2 +proc~create~3->proc~is_rational~3 - + -proc~elevate_degree~2->none~set~2 +proc~elevate_degree~3->none~set~3 @@ -754,51 +754,51 @@

                  Calls

                  - + -proc~elevate_degree~2->proc~elevate_degree_a_5_9 +proc~elevate_degree~3->proc~elevate_degree_a_5_9 - + -proc~elevate_degree~2->proc~is_rational~2 +proc~elevate_degree~3->proc~is_rational~3 - + -proc~cmp_elem_xc_vis~2 - +proc~cmp_elem_xc_vis~3 + nurbs_curve%cmp_elem_Xc_vis - + -proc~export_xc~2->proc~cmp_elem_xc_vis~2 +proc~export_xc~3->proc~cmp_elem_xc_vis~3 - + -proc~cmp_elem_xg_vis~2 - +proc~cmp_elem_xg_vis~3 + nurbs_curve%cmp_elem_Xg_vis - + -proc~export_xg~2->proc~cmp_elem_xg_vis~2 +proc~export_xg~3->proc~cmp_elem_xg_vis~3 - + -proc~insert_knots~2->none~set~2 +proc~insert_knots~3->none~set~3 @@ -811,9 +811,9 @@

                  Calls

                  - + -proc~insert_knots~2->interface~compute_multiplicity +proc~insert_knots~3->interface~compute_multiplicity @@ -826,9 +826,9 @@

                  Calls

                  - + -proc~insert_knots~2->proc~findspan +proc~insert_knots~3->proc~findspan @@ -841,39 +841,39 @@

                  Calls

                  - + -proc~insert_knots~2->proc~insert_knot_a_5_1 +proc~insert_knots~3->proc~insert_knot_a_5_1 - + -proc~insert_knots~2->proc~is_rational~2 +proc~insert_knots~3->proc~is_rational~3 - + -proc~remove_knots~2->none~set~2 +proc~remove_knots~3->none~set~3 - + -proc~remove_knots~2->interface~compute_multiplicity +proc~remove_knots~3->interface~compute_multiplicity - + -proc~remove_knots~2->proc~findspan +proc~remove_knots~3->proc~findspan - + -proc~remove_knots~2->proc~is_rational~2 +proc~remove_knots~3->proc~is_rational~3 @@ -886,9 +886,9 @@

                  Calls

                  - + -proc~remove_knots~2->proc~remove_knots_a_5_8 +proc~remove_knots~3->proc~remove_knots_a_5_8 @@ -901,15 +901,15 @@

                  Calls

                  - + -proc~rotate_xc~2->proc~rotation +proc~rotate_xc~3->proc~rotation - + -proc~rotate_xg~2->proc~rotation +proc~rotate_xg~3->proc~rotation @@ -952,15 +952,15 @@

                  Calls

                  - + -proc~cmp_elem_xc_vis~2->interface~elemconn_c0 +proc~cmp_elem_xc_vis~3->interface~elemconn_c0 - + -proc~cmp_elem_xg_vis~2->interface~elemconn_c0 +proc~cmp_elem_xg_vis~3->interface~elemconn_c0 @@ -1009,18 +1009,18 @@

                  Calls

                  - + -proc~cmp_degree~2 - +proc~cmp_degree~3 + nurbs_curve%cmp_degree - + -proc~set1~2->proc~cmp_degree~2 +proc~set1~3->proc~cmp_degree~3 @@ -1033,15 +1033,15 @@

                  Calls

                  - + -proc~set2~2->proc~compute_knot_vector +proc~set2~3->proc~compute_knot_vector - + -proc~set3~2->proc~cmp_degree~2 +proc~set3~3->proc~cmp_degree~3 @@ -1105,18 +1105,18 @@

                  Calls

                  - + -proc~get_multiplicity~2 - +proc~get_multiplicity~3 + nurbs_curve%get_multiplicity - + -proc~cmp_degree~2->proc~get_multiplicity~2 +proc~cmp_degree~3->proc~get_multiplicity~3 @@ -1135,9 +1135,9 @@

                  Calls

                  - + -proc~get_multiplicity~2->interface~compute_multiplicity +proc~get_multiplicity~3->interface~compute_multiplicity @@ -1244,7 +1244,7 @@

                  Variables

                  @@ -1516,7 +1516,7 @@

                  Arguments

                  @@ -1531,7 +1531,7 @@

                  Arguments

                  @@ -1758,7 +1758,7 @@

                  Source Code

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/program/example3_volume.html b/program/example3_volume.html index 93b73e5ad..e21bfb70c 100644 --- a/program/example3_volume.html +++ b/program/example3_volume.html @@ -115,12 +115,12 @@

                  Variables

                  - Wc - Xc - knot1 - knot2 + Wc + Xc + knot1 + knot2 knot3 - nurbs + nurbs
                  @@ -141,7 +141,7 @@

                  Functions

                  @@ -589,18 +589,18 @@

                  Calls

                  - + -proc~generate_xc~3 - +proc~generate_xc~4 + generate_Xc - + -program~example3_volume->proc~generate_xc~3 +program~example3_volume->proc~generate_xc~4 @@ -1547,7 +1547,7 @@

                  Variables

                  @@ -1925,7 +1925,7 @@

                  Source Code

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/program/example_nurbs_curve.html b/program/example_nurbs_curve.html index ebea9299f..eed62721b 100644 --- a/program/example_nurbs_curve.html +++ b/program/example_nurbs_curve.html @@ -115,9 +115,9 @@

                  Variables

                  - Wc - Xc - nurbs + Wc + Xc + nurbs
                  @@ -138,7 +138,7 @@

                  Functions

                  @@ -398,213 +398,213 @@

                  Calls

                  example_nurbs_curve - + -none~set~2 - +none~set~3 + nurbs_curve%set - + -program~example_nurbs_curve->none~set~2 +program~example_nurbs_curve->none~set~3 - + -proc~create~2 - +proc~create~3 + nurbs_curve%create - + -program~example_nurbs_curve->proc~create~2 +program~example_nurbs_curve->proc~create~3 - + -proc~export_xc~2 - +proc~export_xc~3 + nurbs_curve%export_Xc - + -program~example_nurbs_curve->proc~export_xc~2 +program~example_nurbs_curve->proc~export_xc~3 - + -proc~export_xg~2 - +proc~export_xg~3 + nurbs_curve%export_Xg - + -program~example_nurbs_curve->proc~export_xg~2 +program~example_nurbs_curve->proc~export_xg~3 - + -proc~finalize~2 - +proc~finalize~3 + nurbs_curve%finalize - + -program~example_nurbs_curve->proc~finalize~2 +program~example_nurbs_curve->proc~finalize~3 - + -proc~generate_xc~4 - +proc~generate_xc + generate_Xc - + -program~example_nurbs_curve->proc~generate_xc~4 +program~example_nurbs_curve->proc~generate_xc - + -proc~show~2 - +proc~show~3 + nurbs_curve%show - + -program~example_nurbs_curve->proc~show~2 +program~example_nurbs_curve->proc~show~3 - + -proc~set1~2 - +proc~set1~3 + nurbs_curve%set1 - + -none~set~2->proc~set1~2 +none~set~3->proc~set1~3 - + -proc~set2~2 - +proc~set2~3 + nurbs_curve%set2 - + -none~set~2->proc~set2~2 +none~set~3->proc~set2~3 - + -proc~set3~2 - +proc~set3~3 + nurbs_curve%set3 - + -none~set~2->proc~set3~2 +none~set~3->proc~set3~3 - + -interface~compute_xg~2 - +interface~compute_xg~3 + compute_Xg - + -proc~create~2->interface~compute_xg~2 +proc~create~3->interface~compute_xg~3 - + -proc~is_rational~2 - +proc~is_rational~3 + nurbs_curve%is_rational - + -proc~create~2->proc~is_rational~2 +proc~create~3->proc~is_rational~3 - + -proc~cmp_elem_xc_vis~2 - +proc~cmp_elem_xc_vis~3 + nurbs_curve%cmp_elem_Xc_vis - + -proc~export_xc~2->proc~cmp_elem_xc_vis~2 +proc~export_xc~3->proc~cmp_elem_xc_vis~3 - + -proc~cmp_elem_xg_vis~2 - +proc~cmp_elem_xg_vis~3 + nurbs_curve%cmp_elem_Xg_vis - + -proc~export_xg~2->proc~cmp_elem_xg_vis~2 +proc~export_xg~3->proc~cmp_elem_xg_vis~3 @@ -617,30 +617,30 @@

                  Calls

                  - + -proc~cmp_elem_xc_vis~2->interface~elemconn_c0 +proc~cmp_elem_xc_vis~3->interface~elemconn_c0 - + -proc~cmp_elem_xg_vis~2->interface~elemconn_c0 +proc~cmp_elem_xg_vis~3->interface~elemconn_c0 - + -proc~cmp_degree~2 - +proc~cmp_degree~3 + nurbs_curve%cmp_degree - + -proc~set1~2->proc~cmp_degree~2 +proc~set1~3->proc~cmp_degree~3 @@ -653,15 +653,15 @@

                  Calls

                  - + -proc~set2~2->proc~compute_knot_vector +proc~set2~3->proc~compute_knot_vector - + -proc~set3~2->proc~cmp_degree~2 +proc~set3~3->proc~cmp_degree~3 @@ -710,18 +710,18 @@

                  Calls

                  - + -proc~get_multiplicity~2 - +proc~get_multiplicity~3 + nurbs_curve%get_multiplicity - + -proc~cmp_degree~2->proc~get_multiplicity~2 +proc~cmp_degree~3->proc~get_multiplicity~3 @@ -749,9 +749,9 @@

                  Calls

                  - + -proc~get_multiplicity~2->interface~compute_multiplicity +proc~get_multiplicity~3->interface~compute_multiplicity @@ -888,7 +888,7 @@

                  Variables

                  @@ -1143,7 +1143,7 @@

                  Source Code

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/program/example_nurbs_surface.html b/program/example_nurbs_surface.html index f5cd2de08..43abb7f90 100644 --- a/program/example_nurbs_surface.html +++ b/program/example_nurbs_surface.html @@ -115,9 +115,9 @@

                  Variables

                  - Wc - Xc - nurbs + Wc + Xc + nurbs
                  @@ -398,78 +398,78 @@

                  Calls

                  example_nurbs_surface - + -none~set~3 - +none~set~2 + nurbs_surface%set - + -program~example_nurbs_surface->none~set~3 +program~example_nurbs_surface->none~set~2 - + -proc~create~3 - +proc~create~2 + nurbs_surface%create - + -program~example_nurbs_surface->proc~create~3 +program~example_nurbs_surface->proc~create~2 - + -proc~export_xc~3 - +proc~export_xc~2 + nurbs_surface%export_Xc - + -program~example_nurbs_surface->proc~export_xc~3 +program~example_nurbs_surface->proc~export_xc~2 - + -proc~export_xg~3 - +proc~export_xg~2 + nurbs_surface%export_Xg - + -program~example_nurbs_surface->proc~export_xg~3 +program~example_nurbs_surface->proc~export_xg~2 - + -proc~finalize~3 - +proc~finalize~2 + nurbs_surface%finalize - + -program~example_nurbs_surface->proc~finalize~3 +program~example_nurbs_surface->proc~finalize~2 @@ -488,78 +488,78 @@

                  Calls

                  - + -proc~show~3 - +proc~show~2 + nurbs_surface%show - + -program~example_nurbs_surface->proc~show~3 +program~example_nurbs_surface->proc~show~2 - + -proc~set1~3 - +proc~set1~2 + nurbs_surface%set1 - + -none~set~3->proc~set1~3 +none~set~2->proc~set1~2 - + -proc~set2~3 - +proc~set2~2 + nurbs_surface%set2 - + -none~set~3->proc~set2~3 +none~set~2->proc~set2~2 - + -proc~set3~3 - +proc~set3~2 + nurbs_surface%set3 - + -none~set~3->proc~set3~3 +none~set~2->proc~set3~2 - + -interface~compute_xg~3 - +interface~compute_xg~2 + compute_Xg - + -proc~create~3->interface~compute_xg~3 +proc~create~2->interface~compute_xg~2 @@ -572,54 +572,54 @@

                  Calls

                  - + -proc~create~3->interface~ndgrid +proc~create~2->interface~ndgrid - + -proc~is_rational~3 - +proc~is_rational~2 + nurbs_surface%is_rational - + -proc~create~3->proc~is_rational~3 +proc~create~2->proc~is_rational~2 - + -proc~cmp_elem_xc_vis~3 - +proc~cmp_elem_xc_vis~2 + nurbs_surface%cmp_elem_Xc_vis - + -proc~export_xc~3->proc~cmp_elem_xc_vis~3 +proc~export_xc~2->proc~cmp_elem_xc_vis~2 - + -proc~cmp_elem_xg_vis~3 - +proc~cmp_elem_xg_vis~2 + nurbs_surface%cmp_elem_Xg_vis - + -proc~export_xg~3->proc~cmp_elem_xg_vis~3 +proc~export_xg~2->proc~cmp_elem_xg_vis~2 @@ -662,51 +662,51 @@

                  Calls

                  - + -proc~cmp_elem_xc_vis~3->interface~elemconn_c0 +proc~cmp_elem_xc_vis~2->interface~elemconn_c0 - + -proc~cmp_elem_xg_vis~3->interface~elemconn_c0 +proc~cmp_elem_xg_vis~2->interface~elemconn_c0 - + -proc~cmp_degree~3 - +proc~cmp_degree~2 + nurbs_surface%cmp_degree - + -proc~set1~3->proc~cmp_degree~3 +proc~set1~2->proc~cmp_degree~2 - + -proc~cmp_nc~3 - +proc~cmp_nc~2 + nurbs_surface%cmp_nc - + -proc~set1~3->proc~cmp_nc~3 +proc~set1~2->proc~cmp_nc~2 - + -proc~set2~3->proc~cmp_nc~3 +proc~set2~2->proc~cmp_nc~2 @@ -719,15 +719,15 @@

                  Calls

                  - + -proc~set2~3->proc~compute_knot_vector +proc~set2~2->proc~compute_knot_vector - + -proc~set3~3->proc~cmp_degree~3 +proc~set3~2->proc~cmp_degree~2 @@ -776,18 +776,18 @@

                  Calls

                  - + -proc~get_multiplicity~3 - +proc~get_multiplicity~2 + nurbs_surface%get_multiplicity - + -proc~cmp_degree~3->proc~get_multiplicity~3 +proc~cmp_degree~2->proc~get_multiplicity~2 @@ -800,9 +800,9 @@

                  Calls

                  - + -proc~cmp_nc~3->interface~compute_multiplicity +proc~cmp_nc~2->interface~compute_multiplicity @@ -851,9 +851,9 @@

                  Calls

                  - + -proc~get_multiplicity~3->interface~compute_multiplicity +proc~get_multiplicity~2->interface~compute_multiplicity @@ -960,7 +960,7 @@

                  Variables

                  @@ -1054,7 +1054,7 @@

                  Arguments

                  @@ -1069,7 +1069,7 @@

                  Arguments

                  @@ -1203,7 +1203,7 @@

                  Source Code

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/program/example_nurbs_volume.html b/program/example_nurbs_volume.html index f5752a3d6..40d6db2ac 100644 --- a/program/example_nurbs_volume.html +++ b/program/example_nurbs_volume.html @@ -115,8 +115,8 @@

                  Variables

                  - Wc - Xc + Wc + Xc nurbs
                  @@ -960,7 +960,7 @@

                  Variables

                  @@ -269,7 +269,7 @@

                  Components

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

                  Components

                  @@ -303,7 +303,7 @@

                  Components

                  @@ -320,7 +320,7 @@

                  Components

                  @@ -337,7 +337,7 @@

                  Components

                  @@ -354,7 +354,7 @@

                  Components

                  @@ -371,7 +371,7 @@

                  Components

                  @@ -388,7 +388,7 @@

                  Components

                  @@ -405,7 +405,7 @@

                  Components

                  @@ -422,7 +422,7 @@

                  Components

                  @@ -450,10 +450,10 @@

                  Type-Bound Procedures

                  - +

                  generic, public :: - basis => basis_vector, basis_scalar + basis => basis_vector, basis_scalar

                  @@ -466,7 +466,7 @@

                  • - private pure subroutine basis_vector(this, res, Xt, Tgc) + private pure subroutine basis_vector(this, res, Xt, Tgc)

                    Author
                    Seyed Ali Ghasemi
                    @@ -554,7 +554,7 @@

                    Arguments

                  • - private pure subroutine basis_scalar(this, Xt, Tgc) + private pure subroutine basis_scalar(this, Xt, Tgc)

                    Author
                    Seyed Ali Ghasemi
                    @@ -632,7 +632,7 @@

                    Arguments

                    - +

                    procedure, public :: cmp_Xg @@ -648,7 +648,7 @@

                    • - private pure function cmp_Xg(this, Xt) result(Xg) + private pure function cmp_Xg(this, Xt) result(Xg)

                      Author
                      Seyed Ali Ghasemi
                      @@ -716,7 +716,7 @@

                      - +

                      procedure, public :: cmp_degree @@ -732,7 +732,7 @@

                      • - private pure subroutine cmp_degree(this) + private pure subroutine cmp_degree(this)

                        Author
                        Seyed Ali Ghasemi
                        @@ -780,7 +780,7 @@

                        Arguments

                        - +

                        procedure, public :: cmp_elem @@ -796,7 +796,7 @@

                        • - private pure function cmp_elem(this) result(elemConn) + private pure function cmp_elem(this) result(elemConn)

                          Author
                          Seyed Ali Ghasemi
                          @@ -849,7 +849,7 @@

                          - +

                          procedure, public :: cmp_elem_Xc_vis @@ -865,7 +865,7 @@

                          • - private pure function cmp_elem_Xc_vis(this, p) result(elemConn) + private pure function cmp_elem_Xc_vis(this, p) result(elemConn)

                            Author
                            Seyed Ali Ghasemi
                            @@ -933,7 +933,7 @@

                            - +

                            procedure, public :: cmp_elem_Xg_vis @@ -949,7 +949,7 @@

                            • - private pure function cmp_elem_Xg_vis(this, p) result(elemConn) + private pure function cmp_elem_Xg_vis(this, p) result(elemConn)

                              Author
                              Seyed Ali Ghasemi
                              @@ -1017,7 +1017,7 @@

                              - +

                              procedure, public :: cmp_nc @@ -1033,7 +1033,7 @@

                              • - private pure subroutine cmp_nc(this) + private pure subroutine cmp_nc(this)

                                Author
                                Seyed Ali Ghasemi
                                @@ -1081,7 +1081,7 @@

                                Arguments

                                - +

                                procedure, public :: create @@ -1097,7 +1097,7 @@

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

                                  Author
                                  Seyed Ali Ghasemi
                                  @@ -1175,10 +1175,10 @@

                                  Arguments

                                  - +

                                  generic, public :: - derivative => derivative_vector, derivative_scalar + derivative => derivative_vector, derivative_scalar

                                  @@ -1191,7 +1191,7 @@

                                  • - private pure subroutine derivative_vector(this, res, Xt, dTgc, Tgc) + private pure subroutine derivative_vector(this, res, Xt, dTgc, Tgc)

                                    Author
                                    Seyed Ali Ghasemi
                                    @@ -1294,7 +1294,7 @@

                                    Arguments

                                  • - private pure subroutine derivative_scalar(this, Xt, dTgc, Tgc) + private pure subroutine derivative_scalar(this, Xt, dTgc, Tgc)

                                    Author
                                    Seyed Ali Ghasemi
                                    @@ -1387,10 +1387,10 @@

                                    Arguments

                                    - +

                                    generic, public :: - derivative2 => derivative2_vector, derivative2_scalar + derivative2 => derivative2_vector, derivative2_scalar

                                    @@ -1403,7 +1403,7 @@

                                    • - private pure subroutine derivative2_vector(this, res, Xt, d2Tgc, dTgc, Tgc) + private pure subroutine derivative2_vector(this, res, Xt, d2Tgc, dTgc, Tgc)

                                      Author
                                      Seyed Ali Ghasemi
                                      @@ -1521,7 +1521,7 @@

                                      Arguments

                                    • - private pure subroutine derivative2_scalar(this, Xt, d2Tgc, dTgc, Tgc) + private pure subroutine derivative2_scalar(this, Xt, d2Tgc, dTgc, Tgc)

                                      Author
                                      Seyed Ali Ghasemi
                                      @@ -1629,7 +1629,7 @@

                                      Arguments

                                      - +

                                      procedure, public :: elevate_degree @@ -1645,7 +1645,7 @@

                                      • - private pure subroutine elevate_degree(this, t) + private pure subroutine elevate_degree(this, t)

                                        Author
                                        Seyed Ali Ghasemi
                                        @@ -1708,7 +1708,7 @@

                                        Arguments

                                        - +

                                        procedure, public :: export_Xc @@ -1724,7 +1724,7 @@

                                        • - private impure subroutine export_Xc(this, filename) + private impure subroutine export_Xc(this, filename)

                                          Author
                                          Seyed Ali Ghasemi
                                          @@ -1787,7 +1787,7 @@

                                          Arguments

                                          - +

                                          procedure, public :: export_Xg @@ -1803,7 +1803,7 @@

                                          • - private impure subroutine export_Xg(this, filename) + private impure subroutine export_Xg(this, filename)

                                            Author
                                            Seyed Ali Ghasemi
                                            @@ -1866,7 +1866,7 @@

                                            Arguments

                                            - +

                                            procedure, public :: finalize @@ -1882,7 +1882,7 @@

                                            • - private pure subroutine finalize(this) + private pure subroutine finalize(this)

                                              Author
                                              Seyed Ali Ghasemi
                                              @@ -1930,10 +1930,10 @@

                                              Arguments

                                              - +

                                              generic, public :: - get_Wc => get_Wc_all, get_Wci + get_Wc => get_Wc_all, get_Wci

                                              @@ -1946,7 +1946,7 @@

                                              • - private pure function get_Wc_all(this) result(Wc) + private pure function get_Wc_all(this) result(Wc)

                                                Author
                                                Seyed Ali Ghasemi
                                                @@ -1994,7 +1994,7 @@

                                              • - private pure function get_Wci(this, n) result(Wc) + private pure function get_Wci(this, n) result(Wc)

                                                Author
                                                Seyed Ali Ghasemi
                                                @@ -2062,10 +2062,10 @@

                                                - +

                                                generic, public :: - get_Xc => get_Xc_all, get_Xci, get_Xcid + get_Xc => get_Xc_all, get_Xci, get_Xcid

                                                @@ -2078,7 +2078,7 @@

                                                • - private pure function get_Xc_all(this) result(Xc) + private pure function get_Xc_all(this) result(Xc)

                                                  Author
                                                  Seyed Ali Ghasemi
                                                  @@ -2126,7 +2126,7 @@

                                                • - private pure function get_Xci(this, n) result(Xc) + private pure function get_Xci(this, n) result(Xc)

                                                  Author
                                                  Seyed Ali Ghasemi
                                                  @@ -2189,7 +2189,7 @@

                                                • - private pure function get_Xcid(this, n, dir) result(Xc) + private pure function get_Xcid(this, n, dir) result(Xc)

                                                  Author
                                                  Seyed Ali Ghasemi
                                                  @@ -2272,10 +2272,10 @@

                                                  - +

                                                  generic, public :: - get_Xg => get_Xg_all, get_Xgi, get_Xgid + get_Xg => get_Xg_all, get_Xgi, get_Xgid

                                                  @@ -2288,7 +2288,7 @@

                                                  • - private pure function get_Xg_all(this) result(Xg) + private pure function get_Xg_all(this) result(Xg)

                                                    Author
                                                    Seyed Ali Ghasemi
                                                    @@ -2336,7 +2336,7 @@

                                                  • - private pure function get_Xgi(this, n) result(Xg) + private pure function get_Xgi(this, n) result(Xg)

                                                    Author
                                                    Seyed Ali Ghasemi
                                                    @@ -2399,7 +2399,7 @@

                                                  • - private pure function get_Xgid(this, n, dir) result(Xg) + private pure function get_Xgid(this, n, dir) result(Xg)

                                                    Author
                                                    Seyed Ali Ghasemi
                                                    @@ -2482,7 +2482,7 @@

                                                    - +

                                                    procedure, public :: get_Xt @@ -2498,7 +2498,7 @@

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

                                                      Author
                                                      Seyed Ali Ghasemi
                                                      @@ -2551,7 +2551,7 @@

                                                      - +

                                                      procedure, public :: get_continuity @@ -2567,7 +2567,7 @@

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

                                                        Author
                                                        Seyed Ali Ghasemi
                                                        @@ -2620,7 +2620,7 @@

                                                        - +

                                                        procedure, public :: get_degree @@ -2689,7 +2689,7 @@

                                                        - +

                                                        procedure, public :: get_elem @@ -2705,7 +2705,7 @@

                                                        • - private pure function get_elem(this) result(elemConn) + private pure function get_elem(this) result(elemConn)

                                                          Author
                                                          Seyed Ali Ghasemi
                                                          @@ -2758,7 +2758,7 @@

                                                          - +

                                                          procedure, public :: get_elem_Xc_vis @@ -2774,7 +2774,7 @@

                                                          • - private pure function get_elem_Xc_vis(this) result(elemConn) + private pure function get_elem_Xc_vis(this) result(elemConn)

                                                            Author
                                                            Seyed Ali Ghasemi
                                                            @@ -2827,7 +2827,7 @@

                                                            - +

                                                            procedure, public :: get_elem_Xg_vis @@ -2843,7 +2843,7 @@

                                                            • - private pure function get_elem_Xg_vis(this) result(elemConn) + private pure function get_elem_Xg_vis(this) result(elemConn)

                                                              Author
                                                              Seyed Ali Ghasemi
                                                              @@ -2896,10 +2896,10 @@

                                                              - +

                                                              generic, public :: - get_knot => get_knoti, get_knot_all + get_knot => get_knoti, get_knot_all

                                                              @@ -2912,7 +2912,7 @@

                                                              • - private pure function get_knoti(this, i) result(knot) + private pure function get_knoti(this, i) result(knot)

                                                                Author
                                                                Seyed Ali Ghasemi
                                                                @@ -2975,7 +2975,7 @@

                                                              • - private pure function get_knot_all(this) result(knot) + private pure function get_knot_all(this) result(knot)

                                                                Author
                                                                Seyed Ali Ghasemi
                                                                @@ -3028,7 +3028,7 @@

                                                                - +

                                                                procedure, public :: get_multiplicity @@ -3044,7 +3044,7 @@

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

                                                                  Author
                                                                  Seyed Ali Ghasemi
                                                                  @@ -3097,7 +3097,7 @@

                                                                  - +

                                                                  procedure, public :: get_nc @@ -3113,7 +3113,7 @@

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

                                                                    Author
                                                                    Seyed Ali Ghasemi
                                                                    @@ -3166,7 +3166,7 @@

                                                                    - +

                                                                    procedure, public :: get_ng @@ -3182,7 +3182,7 @@

                  @@ -275,7 +275,7 @@

                  Components

                  @@ -292,7 +292,7 @@

                  Components

                  @@ -309,7 +309,7 @@

                  Components

                  @@ -360,7 +360,7 @@

                  Components

                  @@ -377,7 +377,7 @@

                  Components

                  @@ -394,7 +394,7 @@

                  Components

                  @@ -411,7 +411,7 @@

                  Components

                  @@ -428,7 +428,7 @@

                  Components

                  @@ -445,7 +445,7 @@

                  Components

                  @@ -462,7 +462,7 @@

                  Components

                  @@ -479,7 +479,7 @@

                  Components

                  @@ -507,10 +507,10 @@

                  Type-Bound Procedures

                  - +

                  generic, public :: - basis => basis_vector, basis_scalar + basis => basis_vector, basis_scalar

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

                  • - private pure subroutine basis_vector(this, res1, res2, Xt1, Xt2, Tgc) + private pure subroutine basis_vector(this, res1, res2, Xt1, Xt2, Tgc)

                    Author
                    Seyed Ali Ghasemi
                    @@ -641,7 +641,7 @@

                    Arguments

                  • - private pure subroutine basis_scalar(this, Xt, Tgc) + private pure subroutine basis_scalar(this, Xt, Tgc)

                    Author
                    Seyed Ali Ghasemi
                    @@ -719,7 +719,7 @@

                    Arguments

                    - +

                    procedure, public :: cmp_Xg @@ -735,7 +735,7 @@

                    • - private pure function cmp_Xg(this, Xt) result(Xg) + private pure function cmp_Xg(this, Xt) result(Xg)

                      Author
                      Seyed Ali Ghasemi
                      @@ -803,7 +803,7 @@

                      - +

                      procedure, public :: cmp_degree @@ -819,7 +819,7 @@

                      • - private pure subroutine cmp_degree(this, dir) + private pure subroutine cmp_degree(this, dir)

                        Author
                        Seyed Ali Ghasemi
                        @@ -882,7 +882,7 @@

                        Arguments

                        - +

                        procedure, public :: cmp_elem @@ -898,7 +898,7 @@

                        • - private pure function cmp_elem(this) result(elemConn) + private pure function cmp_elem(this) result(elemConn)

                          Author
                          Seyed Ali Ghasemi
                          @@ -951,7 +951,7 @@

                          - +

                          procedure, public :: cmp_elem_Xc_vis @@ -967,7 +967,7 @@

                          • - private pure function cmp_elem_Xc_vis(this, p) result(elemConn) + private pure function cmp_elem_Xc_vis(this, p) result(elemConn)

                            Author
                            Seyed Ali Ghasemi
                            @@ -1035,7 +1035,7 @@

                            - +

                            procedure, public :: cmp_elem_Xg_vis @@ -1051,7 +1051,7 @@

                            • - private pure function cmp_elem_Xg_vis(this, p) result(elemConn) + private pure function cmp_elem_Xg_vis(this, p) result(elemConn)

                              Author
                              Seyed Ali Ghasemi
                              @@ -1119,7 +1119,7 @@

                              - +

                              procedure, public :: cmp_nc @@ -1135,7 +1135,7 @@

                              • - private pure subroutine cmp_nc(this, dir) + private pure subroutine cmp_nc(this, dir)

                                Author
                                Seyed Ali Ghasemi
                                @@ -1198,7 +1198,7 @@

                                Arguments

                                - +

                                procedure, public :: create @@ -1214,7 +1214,7 @@

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

                                  Author
                                  Seyed Ali Ghasemi
                                  @@ -1337,10 +1337,10 @@

                                  Arguments

                                  - +

                                  generic, public :: - derivative => derivative_vector, derivative_scalar + derivative => derivative_vector, derivative_scalar

                                  @@ -1353,7 +1353,7 @@

                                  • - private pure subroutine derivative_vector(this, res1, res2, Xt1, Xt2, dTgc, Tgc) + private pure subroutine derivative_vector(this, res1, res2, Xt1, Xt2, dTgc, Tgc)

                                    Author
                                    Seyed Ali Ghasemi
                                    @@ -1486,7 +1486,7 @@

                                    Arguments

                                  • - private pure subroutine derivative_scalar(this, Xt, dTgc, Tgc) + private pure subroutine derivative_scalar(this, Xt, dTgc, Tgc)

                                    Author
                                    Seyed Ali Ghasemi
                                    @@ -1579,10 +1579,10 @@

                                    Arguments

                                    - +

                                    generic, public :: - derivative2 => derivative2_vector, derivative2_scalar + derivative2 => derivative2_vector, derivative2_scalar

                                    @@ -1595,7 +1595,7 @@

                                    • - private pure subroutine derivative2_vector(this, res1, res2, Xt1, Xt2, d2Tgc, dTgc, Tgc) + private pure subroutine derivative2_vector(this, res1, res2, Xt1, Xt2, d2Tgc, dTgc, Tgc)

                                      Author
                                      Seyed Ali Ghasemi
                                      @@ -1743,7 +1743,7 @@

                                      Arguments

                                    • - private pure subroutine derivative2_scalar(this, Xt, d2Tgc, dTgc, Tgc) + private pure subroutine derivative2_scalar(this, Xt, d2Tgc, dTgc, Tgc)

                                      Author
                                      Seyed Ali Ghasemi
                                      @@ -1851,7 +1851,7 @@

                                      Arguments

                                      - +

                                      procedure, public :: elevate_degree @@ -1867,7 +1867,7 @@

                                      • - private pure subroutine elevate_degree(this, dir, t) + private pure subroutine elevate_degree(this, dir, t)

                                        Author
                                        Seyed Ali Ghasemi
                                        @@ -1945,7 +1945,7 @@

                                        Arguments

                                        - +

                                        procedure, public :: export_Xc @@ -1961,7 +1961,7 @@

                                        • - private impure subroutine export_Xc(this, filename) + private impure subroutine export_Xc(this, filename)

                                          Author
                                          Seyed Ali Ghasemi
                                          @@ -2024,7 +2024,7 @@

                                          Arguments

                                          - +

                                          procedure, public :: export_Xg @@ -2040,7 +2040,7 @@

                                          • - private impure subroutine export_Xg(this, filename) + private impure subroutine export_Xg(this, filename)

                                            Author
                                            Seyed Ali Ghasemi
                                            @@ -2103,7 +2103,7 @@

                                            Arguments

                                            - +

                                            procedure, public :: finalize @@ -2119,7 +2119,7 @@

                                            • - private pure subroutine finalize(this) + private pure subroutine finalize(this)

                                              Author
                                              Seyed Ali Ghasemi
                                              @@ -2167,10 +2167,10 @@

                                              Arguments

                                              - +

                                              generic, public :: - get_Wc => get_Wc_all, get_Wci + get_Wc => get_Wc_all, get_Wci

                                              @@ -2183,7 +2183,7 @@

                                              • - private pure function get_Wc_all(this) result(Wc) + private pure function get_Wc_all(this) result(Wc)

                                                Author
                                                Seyed Ali Ghasemi
                                                @@ -2231,7 +2231,7 @@

                                              • - private pure function get_Wci(this, n) result(Wc) + private pure function get_Wci(this, n) result(Wc)

                                                Author
                                                Seyed Ali Ghasemi
                                                @@ -2299,10 +2299,10 @@

                                                - +

                                                generic, public :: - get_Xc => get_Xc_all, get_Xci, get_Xcid + get_Xc => get_Xc_all, get_Xci, get_Xcid

                                                @@ -2315,7 +2315,7 @@

                                                • - private pure function get_Xc_all(this) result(Xc) + private pure function get_Xc_all(this) result(Xc)

                                                  Author
                                                  Seyed Ali Ghasemi
                                                  @@ -2363,7 +2363,7 @@

                                                • - private pure function get_Xci(this, n) result(Xc) + private pure function get_Xci(this, n) result(Xc)

                                                  Author
                                                  Seyed Ali Ghasemi
                                                  @@ -2426,7 +2426,7 @@

                                                • - private pure function get_Xcid(this, n, dir) result(Xc) + private pure function get_Xcid(this, n, dir) result(Xc)

                                                  Author
                                                  Seyed Ali Ghasemi
                                                  @@ -2509,10 +2509,10 @@

                                                  - +

                                                  generic, public :: - get_Xg => get_Xg_all, get_Xgi, get_Xgid + get_Xg => get_Xg_all, get_Xgi, get_Xgid

                                                  @@ -2525,7 +2525,7 @@

                                                  • - private pure function get_Xg_all(this) result(Xg) + private pure function get_Xg_all(this) result(Xg)

                                                    Author
                                                    Seyed Ali Ghasemi
                                                    @@ -2573,7 +2573,7 @@

                                                  • - private pure function get_Xgi(this, n) result(Xg) + private pure function get_Xgi(this, n) result(Xg)

                                                    Author
                                                    Seyed Ali Ghasemi
                                                    @@ -2636,7 +2636,7 @@

                                                  • - private pure function get_Xgid(this, n, dir) result(Xg) + private pure function get_Xgid(this, n, dir) result(Xg)

                                                    Author
                                                    Seyed Ali Ghasemi
                                                    @@ -2719,7 +2719,7 @@

                                                    - +

                                                    procedure, public :: get_Xt @@ -2735,7 +2735,7 @@

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

                                                      Author
                                                      Seyed Ali Ghasemi
                                                      @@ -2803,7 +2803,7 @@

                                                      - +

                                                      procedure, public :: get_continuity @@ -2819,7 +2819,7 @@

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

                                                        Author
                                                        Seyed Ali Ghasemi
                                                        @@ -2887,7 +2887,7 @@

                                                        - +

                                                        generic, public :: get_degree => get_degree_all, get_degree_dir @@ -3019,7 +3019,7 @@

                                                        - +

                                                        procedure, public :: get_elem @@ -3035,7 +3035,7 @@

                                                        • - private pure function get_elem(this) result(elemConn) + private pure function get_elem(this) result(elemConn)

                                                          Author
                                                          Seyed Ali Ghasemi
                                                          @@ -3088,7 +3088,7 @@

                                                          - +

                                                          procedure, public :: get_elem_Xc_vis @@ -3104,7 +3104,7 @@

                                                          • - private pure function get_elem_Xc_vis(this) result(elemConn) + private pure function get_elem_Xc_vis(this) result(elemConn)

                                                            Author
                                                            Seyed Ali Ghasemi
                                                            @@ -3157,7 +3157,7 @@

                                                            - +

                                                            procedure, public :: get_elem_Xg_vis @@ -3173,7 +3173,7 @@

                                                            • - private pure function get_elem_Xg_vis(this) result(elemConn) + private pure function get_elem_Xg_vis(this) result(elemConn)

                                                              Author
                                                              Seyed Ali Ghasemi
                                                              @@ -3226,10 +3226,10 @@

                                                              - +

                                                              generic, public :: - get_knot => get_knoti, get_knot_all + get_knot => get_knoti, get_knot_all

                                                              @@ -3242,7 +3242,7 @@

                                                              • - private pure function get_knoti(this, dir, i) result(knot) + private pure function get_knoti(this, dir, i) result(knot)

                                                                Author
                                                                Seyed Ali Ghasemi
                                                                @@ -3320,7 +3320,7 @@

                                                              • - private pure function get_knot_all(this, dir) result(knot) + private pure function get_knot_all(this, dir) result(knot)

                                                                Author
                                                                Seyed Ali Ghasemi
                                                                @@ -3388,7 +3388,7 @@

                                                                - +

                                                                procedure, public :: get_multiplicity @@ -3404,7 +3404,7 @@

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

                                                                  Author
                                                                  Seyed Ali Ghasemi
                                                                  @@ -3472,7 +3472,7 @@

                                                                  - +

                                                                  procedure, public :: get_nc @@ -3488,7 +3488,7 @@

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

                                                                    Author
                                                                    Seyed Ali Ghasemi
                                                                    @@ -3556,7 +3556,7 @@

                                                                    - +

                                                                    procedure, public :: get_ng @@ -3572,7 +3572,7 @@

                                                                    • - private pure function get_ng(this) result(ng) + private pure function get_ng(this) result(ng)

                                                                      Author
                                                                      Seyed Ali Ghasemi
                                                                      @@ -3625,7 +3625,7 @@

                                                                      - +

                                                                      procedure, public :: insert_knots @@ -3641,7 +3641,7 @@

                                                                      • - private pure subroutine insert_knots(this, dir, Xth, r) + private pure subroutine insert_knots(this, dir, Xth, r)

                                                                        Author
                                                                        Seyed Ali Ghasemi
                                                                        @@ -3734,7 +3734,7 @@

                                                                        Arguments

                                                                        - +

                                                                        procedure, public :: is_rational @@ -3750,7 +3750,7 @@

                                                                        • - private pure function is_rational(this) result(r) + private pure function is_rational(this) result(r)

                                                                          Author
                                                                          Seyed Ali Ghasemi
                                                                          @@ -3803,7 +3803,7 @@

                                                                          - +

                                                                          procedure, public :: modify_Wc @@ -3819,7 +3819,7 @@

                                                                          • - private pure subroutine modify_Wc(this, W, num) + private pure subroutine modify_Wc(this, W, num)

                                                                            Author
                                                                            Seyed Ali Ghasemi
                                                                            @@ -3897,7 +3897,7 @@

                                                                            Arguments

                                                                            - +

                                                                            procedure, public :: modify_Xc @@ -3913,7 +3913,7 @@

                                                                            • - private pure subroutine modify_Xc(this, X, num, dir) + private pure subroutine modify_Xc(this, X, num, dir)

                                                                              Author
                                                                              Seyed Ali Ghasemi
                                                                              @@ -4006,7 +4006,7 @@

                                                                              Arguments

                                                                              - +

                                                                              procedure, public :: nearest_point @@ -4022,7 +4022,7 @@

                                                                              • - private pure subroutine nearest_point(this, point_Xg, nearest_Xg, nearest_Xt, id) + private pure subroutine nearest_point(this, point_Xg, nearest_Xg, nearest_Xt, id)

                                                                                Author
                                                                                Seyed Ali Ghasemi
                                                                                @@ -4130,7 +4130,7 @@

                                                                                Arguments

                                                                                - +

                                                                                procedure, public :: nearest_point2 @@ -4146,7 +4146,7 @@

                                                                                • - private impure subroutine nearest_point2(this, point_Xg, tol, maxit, nearest_Xt, nearest_Xg) + private impure subroutine nearest_point2(this, point_Xg, tol, maxit, nearest_Xt, nearest_Xg)

                                                                                  Author
                                                                                  Seyed Ali Ghasemi
                                                                                  @@ -4269,7 +4269,7 @@

                                                                                  Arguments

                                                                                  - +

                                                                                  procedure, public :: remove_knots @@ -4285,7 +4285,7 @@

                                                                                  • - private pure subroutine remove_knots(this, dir, Xth, r) + private pure subroutine remove_knots(this, dir, Xth, r)

                                                                                    Author
                                                                                    Seyed Ali Ghasemi
                                                                                    @@ -4378,7 +4378,7 @@

                                                                                    Arguments

                                                                                    - +

                                                                                    procedure, public :: rotate_Xc @@ -4394,7 +4394,7 @@

                                                                                    • - private pure subroutine rotate_Xc(this, alpha, beta, theta) + private pure subroutine rotate_Xc(this, alpha, beta, theta)

                                                                                      Author
                                                                                      Seyed Ali Ghasemi
                                                                                      @@ -4487,7 +4487,7 @@

                                                                                      Arguments

                                                                                      - +

                                                                                      procedure, public :: rotate_Xg @@ -4503,7 +4503,7 @@

                                                                                      • - private pure subroutine rotate_Xg(this, alpha, beta, theta) + private pure subroutine rotate_Xg(this, alpha, beta, theta)

                                                                                        Author
                                                                                        Seyed Ali Ghasemi
                                                                                        @@ -4596,10 +4596,10 @@

                                                                                        Arguments

                                                                                        - +

                                                                                        generic, public :: - set => set1, set2, set3 + set => set1, set2, set3

                                                                                        @@ -4612,7 +4612,7 @@

                                                                                        • - private pure subroutine set1(this, knot1, knot2, Xc, Wc) + private pure subroutine set1(this, knot1, knot2, Xc, Wc)

                                                                                          Author
                                                                                          Seyed Ali Ghasemi
                                                                                          @@ -4715,7 +4715,7 @@

                                                                                          Arguments

                                                                                        • - private pure subroutine set2(this, Xth_dir1, Xth_dir2, degree, continuity1, continuity2, Xc, Wc) + private pure subroutine set2(this, Xth_dir1, Xth_dir2, degree, continuity1, continuity2, Xc, Wc)

                                                                                          Author
                                                                                          Seyed Ali Ghasemi
                                                                                          @@ -4863,7 +4863,7 @@

                                                                                          Arguments

                                                                                        • - private pure subroutine set3(this, nc, Xc, Wc) + private pure subroutine set3(this, nc, Xc, Wc)

                                                                                          Author
                                                                                          Seyed Ali Ghasemi
                                                                                          @@ -4956,7 +4956,7 @@

                                                                                          Arguments

                                                                                          - +

                                                                                          procedure, public :: set1 @@ -4972,7 +4972,7 @@

                                                                                          • - private pure subroutine set1(this, knot1, knot2, Xc, Wc) + private pure subroutine set1(this, knot1, knot2, Xc, Wc)

                                                                                            Author
                                                                                            Seyed Ali Ghasemi
                                                                                            @@ -5080,7 +5080,7 @@

                                                                                            Arguments

                                                                                            - +

                                                                                            procedure, public :: set2 @@ -5096,7 +5096,7 @@

                                                                                            • - private pure subroutine set2(this, Xth_dir1, Xth_dir2, degree, continuity1, continuity2, Xc, Wc) + private pure subroutine set2(this, Xth_dir1, Xth_dir2, degree, continuity1, continuity2, Xc, Wc)

                                                                                              Author
                                                                                              Seyed Ali Ghasemi
                                                                                              @@ -5249,7 +5249,7 @@

                                                                                              Arguments

                                                                                              - +

                                                                                              procedure, public :: set3 @@ -5265,7 +5265,7 @@

                                                                                              • - private pure subroutine set3(this, nc, Xc, Wc) + private pure subroutine set3(this, nc, Xc, Wc)

                                                                                                Author
                                                                                                Seyed Ali Ghasemi
                                                                                                @@ -5358,7 +5358,7 @@

                                                                                                Arguments

                                                                                                - +

                                                                                                procedure, public :: set_C @@ -5374,7 +5374,7 @@

                                                                                                • - private pure subroutine set_C(this, center, radius1, radius2) + private pure subroutine set_C(this, center, radius1, radius2)

                                                                                                  Author
                                                                                                  Seyed Ali Ghasemi
                                                                                                  @@ -5467,7 +5467,7 @@

                                                                                                  Arguments

                                                                                                  - +

                                                                                                  procedure, public :: set_elem @@ -5483,7 +5483,7 @@

                                                                                                  • - private pure subroutine set_elem(this, elemConn) + private pure subroutine set_elem(this, elemConn)

                                                                                                    Author
                                                                                                    Seyed Ali Ghasemi
                                                                                                    @@ -5546,7 +5546,7 @@

                                                                                                    Arguments

                                                                                                    - +

                                                                                                    procedure, public :: set_elem_Xc_vis @@ -5562,7 +5562,7 @@

                                                                                                    • - private pure subroutine set_elem_Xc_vis(this, elemConn) + private pure subroutine set_elem_Xc_vis(this, elemConn)

                                                                                                      Author
                                                                                                      Seyed Ali Ghasemi
                                                                                                      @@ -5625,7 +5625,7 @@

                                                                                                      Arguments

                                                                                                      - +

                                                                                                      procedure, public :: set_elem_Xg_vis @@ -5641,7 +5641,7 @@

                                                                                                      • - private pure subroutine set_elem_Xg_vis(this, elemConn) + private pure subroutine set_elem_Xg_vis(this, elemConn)

                                                                                                        Author
                                                                                                        Seyed Ali Ghasemi
                                                                                                        @@ -6031,7 +6031,7 @@

                                                                                                        Arguments

                                                                                                        - +

                                                                                                        procedure, public :: show @@ -6047,7 +6047,7 @@

                                                                                                        • - private impure subroutine show(this, vtkfile_Xc, vtkfile_Xg) + private impure subroutine show(this, vtkfile_Xc, vtkfile_Xg)

                                                                                                          Author
                                                                                                          Seyed Ali Ghasemi
                                                                                                          @@ -6125,7 +6125,7 @@

                                                                                                          Arguments

                                                                                                          - +

                                                                                                          procedure, public :: translate_Xc @@ -6141,7 +6141,7 @@

                                                                                                          • - private pure subroutine translate_Xc(this, vec) + private pure subroutine translate_Xc(this, vec)

                                                                                                            Author
                                                                                                            Seyed Ali Ghasemi
                                                                                                            @@ -6204,7 +6204,7 @@

                                                                                                            Arguments

                                                                                                            - +

                                                                                                            procedure, public :: translate_Xg @@ -6220,7 +6220,7 @@

                                                                                                            • - private pure subroutine translate_Xg(this, vec) + private pure subroutine translate_Xg(this, vec)

                                                                                                              Author
                                                                                                              Seyed Ali Ghasemi
                                                                                                              @@ -6283,7 +6283,7 @@

                                                                                                              Arguments

                                                                                                              - +

                                                                                                              procedure, private :: basis_scalar @@ -6299,7 +6299,7 @@

                                                                                                              • - private pure subroutine basis_scalar(this, Xt, Tgc) + private pure subroutine basis_scalar(this, Xt, Tgc)

                                                                                                                Author
                                                                                                                Seyed Ali Ghasemi
                                                                                                                @@ -6377,7 +6377,7 @@

                                                                                                                Arguments

                                                                                                                - +

                                                                                                                procedure, private :: basis_vector @@ -6393,7 +6393,7 @@

                                                                                                                • - private pure subroutine basis_vector(this, res1, res2, Xt1, Xt2, Tgc) + private pure subroutine basis_vector(this, res1, res2, Xt1, Xt2, Tgc)

                                                                                                                  Author
                                                                                                                  Seyed Ali Ghasemi
                                                                                                                  @@ -6516,7 +6516,7 @@

                                                                                                                  Arguments

                                                                                                                  - +

                                                                                                                  procedure, private :: derivative2_scalar @@ -6532,7 +6532,7 @@

                                                                                                                  • - private pure subroutine derivative2_scalar(this, Xt, d2Tgc, dTgc, Tgc) + private pure subroutine derivative2_scalar(this, Xt, d2Tgc, dTgc, Tgc)

                                                                                                                    Author
                                                                                                                    Seyed Ali Ghasemi
                                                                                                                    @@ -6640,7 +6640,7 @@

                                                                                                                    Arguments

                                                                                                                    - +

                                                                                                                    procedure, private :: derivative2_vector @@ -6656,7 +6656,7 @@

                                                                                                                    • - private pure subroutine derivative2_vector(this, res1, res2, Xt1, Xt2, d2Tgc, dTgc, Tgc) + private pure subroutine derivative2_vector(this, res1, res2, Xt1, Xt2, d2Tgc, dTgc, Tgc)

                                                                                                                      Author
                                                                                                                      Seyed Ali Ghasemi
                                                                                                                      @@ -6809,7 +6809,7 @@

                                                                                                                      Arguments

                                                                                                                      - +

                                                                                                                      procedure, private :: derivative_scalar @@ -6825,7 +6825,7 @@

                                                                                                                      • - private pure subroutine derivative_scalar(this, Xt, dTgc, Tgc) + private pure subroutine derivative_scalar(this, Xt, dTgc, Tgc)

                                                                                                                        Author
                                                                                                                        Seyed Ali Ghasemi
                                                                                                                        @@ -6918,7 +6918,7 @@

                                                                                                                        Arguments

                                                                                                                        - +

                                                                                                                        procedure, private :: derivative_vector @@ -6934,7 +6934,7 @@

                                                                                                                        • - private pure subroutine derivative_vector(this, res1, res2, Xt1, Xt2, dTgc, Tgc) + private pure subroutine derivative_vector(this, res1, res2, Xt1, Xt2, dTgc, Tgc)

                                                                                                                          Author
                                                                                                                          Seyed Ali Ghasemi
                                                                                                                          @@ -7072,7 +7072,7 @@

                                                                                                                          Arguments

                                                                                                                          - +

                                                                                                                          procedure, private :: get_Wc_all @@ -7088,7 +7088,7 @@

                                                                                                                          • - private pure function get_Wc_all(this) result(Wc) + private pure function get_Wc_all(this) result(Wc)

                                                                                                                            Author
                                                                                                                            Seyed Ali Ghasemi
                                                                                                                            @@ -7141,7 +7141,7 @@

                                                                                                                            - +

                                                                                                                            procedure, private :: get_Wci @@ -7157,7 +7157,7 @@

                                                                                                                            • - private pure function get_Wci(this, n) result(Wc) + private pure function get_Wci(this, n) result(Wc)

                                                                                                                              Author
                                                                                                                              Seyed Ali Ghasemi
                                                                                                                              @@ -7225,7 +7225,7 @@

                                                                                                                              - +

                                                                                                                              procedure, private :: get_Xc_all @@ -7241,7 +7241,7 @@

                                                                                                                              • - private pure function get_Xc_all(this) result(Xc) + private pure function get_Xc_all(this) result(Xc)

                                                                                                                                Author
                                                                                                                                Seyed Ali Ghasemi
                                                                                                                                @@ -7294,7 +7294,7 @@

                                                                                                                                - +

                                                                                                                                procedure, private :: get_Xci @@ -7310,7 +7310,7 @@

                                                                                                                                • - private pure function get_Xci(this, n) result(Xc) + private pure function get_Xci(this, n) result(Xc)

                                                                                                                                  Author
                                                                                                                                  Seyed Ali Ghasemi
                                                                                                                                  @@ -7378,7 +7378,7 @@

                                                                                                                                  - +

                                                                                                                                  procedure, private :: get_Xcid @@ -7394,7 +7394,7 @@

                                                                                                                                  • - private pure function get_Xcid(this, n, dir) result(Xc) + private pure function get_Xcid(this, n, dir) result(Xc)

                                                                                                                                    Author
                                                                                                                                    Seyed Ali Ghasemi
                                                                                                                                    @@ -7477,7 +7477,7 @@

                                                                                                                                    - +

                                                                                                                                    procedure, private :: get_Xg_all @@ -7493,7 +7493,7 @@

                                                                                                                                    • - private pure function get_Xg_all(this) result(Xg) + private pure function get_Xg_all(this) result(Xg)

                                                                                                                                      Author
                                                                                                                                      Seyed Ali Ghasemi
                                                                                                                                      @@ -7546,7 +7546,7 @@

                                                                                                                                      - +

                                                                                                                                      procedure, private :: get_Xgi @@ -7562,7 +7562,7 @@

                                                                                                                                      • - private pure function get_Xgi(this, n) result(Xg) + private pure function get_Xgi(this, n) result(Xg)

                                                                                                                                        Author
                                                                                                                                        Seyed Ali Ghasemi
                                                                                                                                        @@ -7630,7 +7630,7 @@

                                                                                                                                        - +

                                                                                                                                        procedure, private :: get_Xgid @@ -7646,7 +7646,7 @@

                                                                                                                                        • - private pure function get_Xgid(this, n, dir) result(Xg) + private pure function get_Xgid(this, n, dir) result(Xg)

                                                                                                                                          Author
                                                                                                                                          Seyed Ali Ghasemi
                                                                                                                                          @@ -7882,7 +7882,7 @@

                                                                                                                                          - +

                                                                                                                                          procedure, private :: get_knot_all @@ -7898,7 +7898,7 @@

                                                                                                                                          • - private pure function get_knot_all(this, dir) result(knot) + private pure function get_knot_all(this, dir) result(knot)

                                                                                                                                            Author
                                                                                                                                            Seyed Ali Ghasemi
                                                                                                                                            @@ -7966,7 +7966,7 @@

                                                                                                                                            - +

                                                                                                                                            procedure, private :: get_knoti @@ -7982,7 +7982,7 @@

                                                                                                                                            • - private pure function get_knoti(this, dir, i) result(knot) + private pure function get_knoti(this, dir, i) result(knot)

                                                                                                                                              Author
                                                                                                                                              Seyed Ali Ghasemi
                                                                                                                                              @@ -8083,7 +8083,7 @@

                                                                                                                                              Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                                                                                                                                              + on 2024-06-22T18:21:15.937502


                                                                                                                                            diff --git a/type/nurbs_volume.html b/type/nurbs_volume.html index b7d7202db..f6c7c7327 100644 --- a/type/nurbs_volume.html +++ b/type/nurbs_volume.html @@ -8859,7 +8859,7 @@

                                                                                                                                            Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                                                                                                                                            + on 2024-06-22T18:21:15.937502


                  - - class(nurbs_surface), + + class(nurbs_curve), intent(inout) @@ -201,31 +201,31 @@

                  Called by

                  - + proc~~translate_xg~3~~CalledByGraph - + proc~translate_xg~3 - -nurbs_surface%translate_Xg + +nurbs_curve%translate_Xg - + -program~example3_surface - - -example3_surface +program~example1_curve + + +example1_curve - + -program~example3_surface->proc~translate_xg~3 - - +program~example1_curve->proc~translate_xg~3 + + @@ -341,7 +341,7 @@

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/proc/unique_integer.html b/proc/unique_integer.html index 4d1455304..0879167a9 100644 --- a/proc/unique_integer.html +++ b/proc/unique_integer.html @@ -156,7 +156,7 @@

                  Arguments

                  - + integer, intent(in),
                  - + real(kind=rk), intent(in),
                  - + real(kind=rk), @@ -1260,7 +1260,7 @@

                  Variables

                  - + real(kind=rk), @@ -1276,7 +1276,7 @@

                  Variables

                  - + real(kind=rk) @@ -1292,7 +1292,7 @@

                  Variables

                  - + type(nurbs_curve) @@ -1485,7 +1485,7 @@

                  Source Code

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/program/example3_surface.html b/program/example3_surface.html index 1376b4544..c520244c2 100644 --- a/program/example3_surface.html +++ b/program/example3_surface.html @@ -115,11 +115,11 @@

                  Variables

                  - Wc - Xc - knot1 - knot2 - nurbs + Wc + Xc + knot1 + knot2 + nurbs
                  @@ -140,7 +140,7 @@

                  Functions

                  @@ -420,243 +420,243 @@

                  Calls

                  example3_surface - + -none~get_degree~3 - +none~get_degree~2 + nurbs_surface%get_degree - + -program~example3_surface->none~get_degree~3 +program~example3_surface->none~get_degree~2 - + -none~get_knot~3 - +none~get_knot~2 + nurbs_surface%get_knot - + -program~example3_surface->none~get_knot~3 +program~example3_surface->none~get_knot~2 - + -none~set~3 - +none~set~2 + nurbs_surface%set - + -program~example3_surface->none~set~3 +program~example3_surface->none~set~2 - + -proc~create~3 - +proc~create~2 + nurbs_surface%create - + -program~example3_surface->proc~create~3 +program~example3_surface->proc~create~2 - + -proc~elevate_degree~3 - +proc~elevate_degree~2 + nurbs_surface%elevate_degree - + -program~example3_surface->proc~elevate_degree~3 +program~example3_surface->proc~elevate_degree~2 - + -proc~export_xc~3 - +proc~export_xc~2 + nurbs_surface%export_Xc - + -program~example3_surface->proc~export_xc~3 +program~example3_surface->proc~export_xc~2 - + -proc~export_xg~3 - +proc~export_xg~2 + nurbs_surface%export_Xg - + -program~example3_surface->proc~export_xg~3 +program~example3_surface->proc~export_xg~2 - + -proc~finalize~3 - +proc~finalize~2 + nurbs_surface%finalize - + -program~example3_surface->proc~finalize~3 +program~example3_surface->proc~finalize~2 - + -proc~generate_xc - +proc~generate_xc~3 + generate_Xc - + -program~example3_surface->proc~generate_xc +program~example3_surface->proc~generate_xc~3 - + -proc~insert_knots~3 - +proc~insert_knots~2 + nurbs_surface%insert_knots - + -program~example3_surface->proc~insert_knots~3 +program~example3_surface->proc~insert_knots~2 - + -proc~remove_knots~3 - +proc~remove_knots~2 + nurbs_surface%remove_knots - + -program~example3_surface->proc~remove_knots~3 +program~example3_surface->proc~remove_knots~2 - + -proc~rotate_xc~3 - +proc~rotate_xc~2 + nurbs_surface%rotate_Xc - + -program~example3_surface->proc~rotate_xc~3 +program~example3_surface->proc~rotate_xc~2 - + -proc~rotate_xg~3 - +proc~rotate_xg~2 + nurbs_surface%rotate_Xg - + -program~example3_surface->proc~rotate_xg~3 +program~example3_surface->proc~rotate_xg~2 - + -proc~show~3 - +proc~show~2 + nurbs_surface%show - + -program~example3_surface->proc~show~3 +program~example3_surface->proc~show~2 - + -proc~translate_xc~3 - +proc~translate_xc~2 + nurbs_surface%translate_Xc - + -program~example3_surface->proc~translate_xc~3 +program~example3_surface->proc~translate_xc~2 - + -proc~translate_xg~3 - +proc~translate_xg~2 + nurbs_surface%translate_Xg - + -program~example3_surface->proc~translate_xg~3 +program~example3_surface->proc~translate_xg~2 @@ -669,9 +669,9 @@

                  Calls

                  - + -none~get_degree~3->proc~get_degree_all~2 +none~get_degree~2->proc~get_degree_all~2 @@ -684,99 +684,99 @@

                  Calls

                  - + -none~get_degree~3->proc~get_degree_dir~2 +none~get_degree~2->proc~get_degree_dir~2 - + -proc~get_knot_all~3 - +proc~get_knot_all~2 + nurbs_surface%get_knot_all - + -none~get_knot~3->proc~get_knot_all~3 +none~get_knot~2->proc~get_knot_all~2 - + -proc~get_knoti~3 - +proc~get_knoti~2 + nurbs_surface%get_knoti - + -none~get_knot~3->proc~get_knoti~3 +none~get_knot~2->proc~get_knoti~2 - + -proc~set1~3 - +proc~set1~2 + nurbs_surface%set1 - + -none~set~3->proc~set1~3 +none~set~2->proc~set1~2 - + -proc~set2~3 - +proc~set2~2 + nurbs_surface%set2 - + -none~set~3->proc~set2~3 +none~set~2->proc~set2~2 - + -proc~set3~3 - +proc~set3~2 + nurbs_surface%set3 - + -none~set~3->proc~set3~3 +none~set~2->proc~set3~2 - + -interface~compute_xg~3 - +interface~compute_xg~2 + compute_Xg - + -proc~create~3->interface~compute_xg~3 +proc~create~2->interface~compute_xg~2 @@ -789,36 +789,36 @@

                  Calls

                  - + -proc~create~3->interface~ndgrid +proc~create~2->interface~ndgrid - + -proc~is_rational~3 - +proc~is_rational~2 + nurbs_surface%is_rational - + -proc~create~3->proc~is_rational~3 +proc~create~2->proc~is_rational~2 - + -proc~elevate_degree~3->none~get_knot~3 +proc~elevate_degree~2->none~get_knot~2 - + -proc~elevate_degree~3->none~set~3 +proc~elevate_degree~2->none~set~2 @@ -831,57 +831,57 @@

                  Calls

                  - + -proc~elevate_degree~3->proc~elevate_degree_a_5_9 +proc~elevate_degree~2->proc~elevate_degree_a_5_9 - + -proc~elevate_degree~3->proc~is_rational~3 +proc~elevate_degree~2->proc~is_rational~2 - + -proc~cmp_elem_xc_vis~3 - +proc~cmp_elem_xc_vis~2 + nurbs_surface%cmp_elem_Xc_vis - + -proc~export_xc~3->proc~cmp_elem_xc_vis~3 +proc~export_xc~2->proc~cmp_elem_xc_vis~2 - + -proc~cmp_elem_xg_vis~3 - +proc~cmp_elem_xg_vis~2 + nurbs_surface%cmp_elem_Xg_vis - + -proc~export_xg~3->proc~cmp_elem_xg_vis~3 +proc~export_xg~2->proc~cmp_elem_xg_vis~2 - + -proc~insert_knots~3->none~get_knot~3 +proc~insert_knots~2->none~get_knot~2 - + -proc~insert_knots~3->none~set~3 +proc~insert_knots~2->none~set~2 @@ -894,9 +894,9 @@

                  Calls

                  - + -proc~insert_knots~3->interface~compute_multiplicity +proc~insert_knots~2->interface~compute_multiplicity @@ -909,9 +909,9 @@

                  Calls

                  - + -proc~insert_knots~3->proc~findspan +proc~insert_knots~2->proc~findspan @@ -924,45 +924,45 @@

                  Calls

                  - + -proc~insert_knots~3->proc~insert_knot_a_5_1 +proc~insert_knots~2->proc~insert_knot_a_5_1 - + -proc~insert_knots~3->proc~is_rational~3 +proc~insert_knots~2->proc~is_rational~2 - + -proc~remove_knots~3->none~get_knot~3 +proc~remove_knots~2->none~get_knot~2 - + -proc~remove_knots~3->none~set~3 +proc~remove_knots~2->none~set~2 - + -proc~remove_knots~3->interface~compute_multiplicity +proc~remove_knots~2->interface~compute_multiplicity - + -proc~remove_knots~3->proc~findspan +proc~remove_knots~2->proc~findspan - + -proc~remove_knots~3->proc~is_rational~3 +proc~remove_knots~2->proc~is_rational~2 @@ -975,9 +975,9 @@

                  Calls

                  - + -proc~remove_knots~3->proc~remove_knots_a_5_8 +proc~remove_knots~2->proc~remove_knots_a_5_8 @@ -990,15 +990,15 @@

                  Calls

                  - + -proc~rotate_xc~3->proc~rotation +proc~rotate_xc~2->proc~rotation - + -proc~rotate_xg~3->proc~rotation +proc~rotate_xg~2->proc~rotation @@ -1071,15 +1071,15 @@

                  Calls

                  - + -proc~cmp_elem_xc_vis~3->interface~elemconn_c0 +proc~cmp_elem_xc_vis~2->interface~elemconn_c0 - + -proc~cmp_elem_xg_vis~3->interface~elemconn_c0 +proc~cmp_elem_xg_vis~2->interface~elemconn_c0 @@ -1128,39 +1128,39 @@

                  Calls

                  - + -proc~cmp_degree~3 - +proc~cmp_degree~2 + nurbs_surface%cmp_degree - + -proc~set1~3->proc~cmp_degree~3 +proc~set1~2->proc~cmp_degree~2 - + -proc~cmp_nc~3 - +proc~cmp_nc~2 + nurbs_surface%cmp_nc - + -proc~set1~3->proc~cmp_nc~3 +proc~set1~2->proc~cmp_nc~2 - + -proc~set2~3->proc~cmp_nc~3 +proc~set2~2->proc~cmp_nc~2 @@ -1173,15 +1173,15 @@

                  Calls

                  - + -proc~set2~3->proc~compute_knot_vector +proc~set2~2->proc~compute_knot_vector - + -proc~set3~3->proc~cmp_degree~3 +proc~set3~2->proc~cmp_degree~2 @@ -1245,24 +1245,24 @@

                  Calls

                  - + -proc~get_multiplicity~3 - +proc~get_multiplicity~2 + nurbs_surface%get_multiplicity - + -proc~cmp_degree~3->proc~get_multiplicity~3 +proc~cmp_degree~2->proc~get_multiplicity~2 - + -proc~cmp_nc~3->interface~compute_multiplicity +proc~cmp_nc~2->interface~compute_multiplicity @@ -1281,9 +1281,9 @@

                  Calls

                  - + -proc~get_multiplicity~3->interface~compute_multiplicity +proc~get_multiplicity~2->interface~compute_multiplicity @@ -1390,7 +1390,7 @@

                  Variables

                  - + real(kind=rk), @@ -1406,7 +1406,7 @@

                  Variables

                  - + real(kind=rk), @@ -1422,7 +1422,7 @@

                  Variables

                  - + real(kind=rk) @@ -1438,7 +1438,7 @@

                  Variables

                  - + real(kind=rk) @@ -1454,7 +1454,7 @@

                  Variables

                  - + type(nurbs_surface) @@ -1482,7 +1482,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)

                  @@ -1501,7 +1501,7 @@

                  Arguments

                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + real(kind=rk), intent(in)
                  - + real(kind=rk), @@ -1563,7 +1563,7 @@

                  Variables

                  - + real(kind=rk), @@ -1579,7 +1579,7 @@

                  Variables

                  - + real(kind=rk) @@ -1595,7 +1595,7 @@

                  Variables

                  - + real(kind=rk) @@ -1627,7 +1627,7 @@

                  Variables

                  - + type(nurbs_volume) @@ -1655,7 +1655,7 @@

                  Variables

                  Functions

                  -

                  function generate_Xc(L) result(control_points) +

                  function generate_Xc(L) result(control_points)

                  @@ -1674,7 +1674,7 @@

                  Arguments

                  - + real(kind=rk), intent(in)
                  - + real(kind=rk), @@ -904,7 +904,7 @@

                  Variables

                  - + real(kind=rk), @@ -920,7 +920,7 @@

                  Variables

                  - + type(nurbs_curve) @@ -948,7 +948,7 @@

                  Variables

                  Functions

                  -

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

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

                  @@ -997,7 +997,7 @@

                  Arguments

                  - + real(kind=rk), intent(in)
                  - + real(kind=rk), @@ -976,7 +976,7 @@

                  Variables

                  - + real(kind=rk), @@ -992,7 +992,7 @@

                  Variables

                  - + type(nurbs_surface) @@ -1039,7 +1039,7 @@

                  Arguments

                  - + integer, intent(in)
                  - + integer, intent(in)
                  - + real(kind=rk), intent(in)
                  - + real(kind=rk), @@ -976,7 +976,7 @@

                  Variables

                  - + real(kind=rk), @@ -1168,7 +1168,7 @@

                  Source Code

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/program/example_ppm1.html b/program/example_ppm1.html index dd4c35b94..efd22cc89 100644 --- a/program/example_ppm1.html +++ b/program/example_ppm1.html @@ -115,28 +115,28 @@

                  Variables

                  @@ -172,10 +172,10 @@

                  Uses

                  - + real(kind=rk), @@ -1090,7 +1090,7 @@

                  Variables

                  - + real(kind=rk) @@ -1106,7 +1106,7 @@

                  Variables

                  - + type(color) @@ -1122,7 +1122,7 @@

                  Variables

                  - + integer @@ -1138,7 +1138,7 @@

                  Variables

                  - + real(kind=rk) @@ -1154,7 +1154,7 @@

                  Variables

                  - + type(colormap) @@ -1170,7 +1170,7 @@

                  Variables

                  - + integer @@ -1186,7 +1186,7 @@

                  Variables

                  - + integer @@ -1202,7 +1202,7 @@

                  Variables

                  - + integer @@ -1218,7 +1218,7 @@

                  Variables

                  - + integer, @@ -1234,7 +1234,7 @@

                  Variables

                  - + type(format_pnm) @@ -1250,7 +1250,7 @@

                  Variables

                  - + real(kind=rk) @@ -1266,7 +1266,7 @@

                  Variables

                  - + integer @@ -1282,7 +1282,7 @@

                  Variables

                  - + real(kind=rk) @@ -1298,7 +1298,7 @@

                  Variables

                  - + integer(kind=ik), @@ -1314,7 +1314,7 @@

                  Variables

                  - + integer @@ -1330,7 +1330,7 @@

                  Variables

                  - + integer @@ -1346,7 +1346,7 @@

                  Variables

                  - + integer @@ -1362,7 +1362,7 @@

                  Variables

                  - + type(nurbs_surface) @@ -1378,7 +1378,7 @@

                  Variables

                  - + type(timer) @@ -1394,7 +1394,7 @@

                  Variables

                  - + integer @@ -1410,7 +1410,7 @@

                  Variables

                  - + real(kind=rk), @@ -1457,7 +1457,7 @@

                  Variables

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/program/example_ppm2.html b/program/example_ppm2.html index 203797b45..ff905a225 100644 --- a/program/example_ppm2.html +++ b/program/example_ppm2.html @@ -115,28 +115,28 @@

                  Variables

                  @@ -172,10 +172,10 @@

                  Uses

                  - + real(kind=rk), @@ -1159,7 +1159,7 @@

                  Variables

                  - + real(kind=rk) @@ -1175,7 +1175,7 @@

                  Variables

                  - + type(color) @@ -1191,7 +1191,7 @@

                  Variables

                  - + integer @@ -1207,7 +1207,7 @@

                  Variables

                  - + real(kind=rk) @@ -1223,7 +1223,7 @@

                  Variables

                  - + type(colormap) @@ -1239,7 +1239,7 @@

                  Variables

                  - + integer @@ -1255,7 +1255,7 @@

                  Variables

                  - + integer @@ -1271,7 +1271,7 @@

                  Variables

                  - + integer @@ -1287,7 +1287,7 @@

                  Variables

                  - + integer, @@ -1303,7 +1303,7 @@

                  Variables

                  - + type(format_pnm) @@ -1319,7 +1319,7 @@

                  Variables

                  - + real(kind=rk) @@ -1335,7 +1335,7 @@

                  Variables

                  - + integer @@ -1351,7 +1351,7 @@

                  Variables

                  - + real(kind=rk) @@ -1367,7 +1367,7 @@

                  Variables

                  - + integer(kind=ik), @@ -1383,7 +1383,7 @@

                  Variables

                  - + integer @@ -1399,7 +1399,7 @@

                  Variables

                  - + integer @@ -1415,7 +1415,7 @@

                  Variables

                  - + integer @@ -1431,7 +1431,7 @@

                  Variables

                  - + type(nurbs_surface) @@ -1447,7 +1447,7 @@

                  Variables

                  - + type(timer) @@ -1463,7 +1463,7 @@

                  Variables

                  - + integer @@ -1479,7 +1479,7 @@

                  Variables

                  - + real(kind=rk), @@ -1526,7 +1526,7 @@

                  Variables

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/program/example_ppm3.html b/program/example_ppm3.html index 5057153ac..94d69a960 100644 --- a/program/example_ppm3.html +++ b/program/example_ppm3.html @@ -115,23 +115,23 @@

                  Variables

                  @@ -169,10 +169,10 @@

                  Uses

                  - + real(kind=rk), @@ -1328,7 +1328,7 @@

                  Variables

                  - + integer @@ -1344,7 +1344,7 @@

                  Variables

                  - + integer @@ -1392,7 +1392,7 @@

                  Variables

                  - + integer @@ -1472,7 +1472,7 @@

                  Variables

                  - + type(nurbs_surface) @@ -1488,7 +1488,7 @@

                  Variables

                  - + type(timer) @@ -1567,7 +1567,7 @@

                  Variables

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/program/example_put_to_nurbs.html b/program/example_put_to_nurbs.html index 89ea0b224..b0e963ef6 100644 --- a/program/example_put_to_nurbs.html +++ b/program/example_put_to_nurbs.html @@ -115,11 +115,11 @@

                  Variables

                  - X + X control_shape elem - i - nunit + i + nunit
                  @@ -921,7 +921,7 @@

                  Variables

                  - + real(kind=rk), @@ -969,7 +969,7 @@

                  Variables

                  - + integer @@ -985,7 +985,7 @@

                  Variables

                  - + integer @@ -1032,7 +1032,7 @@

                  Variables

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/program/nearest_point_1d.html b/program/nearest_point_1d.html index 7269d7e1b..fc3704e2b 100644 --- a/program/nearest_point_1d.html +++ b/program/nearest_point_1d.html @@ -115,13 +115,13 @@

                  Variables

                  @@ -384,165 +384,165 @@

                  Calls

                  nearest_point_1d - + -none~set~2 - +none~set~3 + nurbs_curve%set - + -program~nearest_point_1d->none~set~2 +program~nearest_point_1d->none~set~3 - + -proc~create~2 - +proc~create~3 + nurbs_curve%create - + -program~nearest_point_1d->proc~create~2 +program~nearest_point_1d->proc~create~3 - + -proc~finalize~2 - +proc~finalize~3 + nurbs_curve%finalize - + -program~nearest_point_1d->proc~finalize~2 +program~nearest_point_1d->proc~finalize~3 - + -proc~nearest_point2~2 - +proc~nearest_point2~3 + nurbs_curve%nearest_point2 - + -program~nearest_point_1d->proc~nearest_point2~2 +program~nearest_point_1d->proc~nearest_point2~3 - + -proc~nearest_point~2 - +proc~nearest_point~3 + nurbs_curve%nearest_point - + -program~nearest_point_1d->proc~nearest_point~2 +program~nearest_point_1d->proc~nearest_point~3 - + -proc~set1~2 - +proc~set1~3 + nurbs_curve%set1 - + -none~set~2->proc~set1~2 +none~set~3->proc~set1~3 - + -proc~set2~2 - +proc~set2~3 + nurbs_curve%set2 - + -none~set~2->proc~set2~2 +none~set~3->proc~set2~3 - + -proc~set3~2 - +proc~set3~3 + nurbs_curve%set3 - + -none~set~2->proc~set3~2 +none~set~3->proc~set3~3 - + -interface~compute_xg~2 - +interface~compute_xg~3 + compute_Xg - + -proc~create~2->interface~compute_xg~2 +proc~create~3->interface~compute_xg~3 - + -proc~is_rational~2 - +proc~is_rational~3 + nurbs_curve%is_rational - + -proc~create~2->proc~is_rational~2 +proc~create~3->proc~is_rational~3 - + -proc~nearest_point2~2->proc~create~2 +proc~nearest_point2~3->proc~create~3 - + -proc~nearest_point2~2->proc~finalize~2 +proc~nearest_point2~3->proc~finalize~3 @@ -555,102 +555,102 @@

                  Calls

                  - + -proc~nearest_point2~2->interface~nearest_point_help_1d +proc~nearest_point2~3->interface~nearest_point_help_1d - + -none~derivative2~2 - +none~derivative2~3 + nurbs_curve%derivative2 - + -proc~nearest_point2~2->none~derivative2~2 +proc~nearest_point2~3->none~derivative2~3 - + -proc~cmp_xg~2 - +proc~cmp_xg~3 + nurbs_curve%cmp_Xg - + -proc~nearest_point2~2->proc~cmp_xg~2 +proc~nearest_point2~3->proc~cmp_xg~3 - + -proc~nearest_point~2->interface~nearest_point_help_1d +proc~nearest_point~3->interface~nearest_point_help_1d - + -proc~derivative2_scalar~2 - +proc~derivative2_scalar~3 + nurbs_curve%derivative2_scalar - + -none~derivative2~2->proc~derivative2_scalar~2 +none~derivative2~3->proc~derivative2_scalar~3 - + -proc~derivative2_vector~2 - +proc~derivative2_vector~3 + nurbs_curve%derivative2_vector - + -none~derivative2~2->proc~derivative2_vector~2 +none~derivative2~3->proc~derivative2_vector~3 - + -proc~cmp_xg~2->interface~compute_xg~2 +proc~cmp_xg~3->interface~compute_xg~3 - + -proc~cmp_xg~2->proc~is_rational~2 +proc~cmp_xg~3->proc~is_rational~3 - + -proc~cmp_degree~2 - +proc~cmp_degree~3 + nurbs_curve%cmp_degree - + -proc~set1~2->proc~cmp_degree~2 +proc~set1~3->proc~cmp_degree~3 @@ -663,30 +663,30 @@

                  Calls

                  - + -proc~set2~2->proc~compute_knot_vector +proc~set2~3->proc~compute_knot_vector - + -proc~set3~2->proc~cmp_degree~2 +proc~set3~3->proc~cmp_degree~3 - + -proc~get_multiplicity~2 - +proc~get_multiplicity~3 + nurbs_curve%get_multiplicity - + -proc~cmp_degree~2->proc~get_multiplicity~2 +proc~cmp_degree~3->proc~get_multiplicity~3 @@ -705,36 +705,36 @@

                  Calls

                  - + -proc~derivative2_scalar~2->proc~is_rational~2 +proc~derivative2_scalar~3->proc~is_rational~3 - + -interface~compute_d2tgc~2 - +interface~compute_d2tgc~3 + compute_d2Tgc - + -proc~derivative2_scalar~2->interface~compute_d2tgc~2 +proc~derivative2_scalar~3->interface~compute_d2tgc~3 - + -proc~derivative2_vector~2->proc~is_rational~2 +proc~derivative2_vector~3->proc~is_rational~3 - + -proc~derivative2_vector~2->interface~compute_d2tgc~2 +proc~derivative2_vector~3->interface~compute_d2tgc~3 @@ -747,9 +747,9 @@

                  Calls

                  - + -proc~get_multiplicity~2->interface~compute_multiplicity +proc~get_multiplicity~3->interface~compute_multiplicity @@ -886,7 +886,7 @@

                  Variables

                  - + real(kind=rk), @@ -902,7 +902,7 @@

                  Variables

                  - + real(kind=rk), @@ -918,7 +918,7 @@

                  Variables

                  - + integer @@ -934,7 +934,7 @@

                  Variables

                  - + real(kind=rk) @@ -950,7 +950,7 @@

                  Variables

                  - + real(kind=rk), @@ -966,7 +966,7 @@

                  Variables

                  - + real(kind=rk) @@ -982,7 +982,7 @@

                  Variables

                  - + type(nurbs_curve) @@ -1029,7 +1029,7 @@

                  Variables

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/program/nearest_point_2d.html b/program/nearest_point_2d.html index 7327c49af..e0eb030d4 100644 --- a/program/nearest_point_2d.html +++ b/program/nearest_point_2d.html @@ -115,12 +115,12 @@

                  Variables

                  @@ -380,138 +380,138 @@

                  Calls

                  nearest_point_2d - + -none~set~3 - +none~set~2 + nurbs_surface%set - + -program~nearest_point_2d->none~set~3 +program~nearest_point_2d->none~set~2 - + -proc~create~3 - +proc~create~2 + nurbs_surface%create - + -program~nearest_point_2d->proc~create~3 +program~nearest_point_2d->proc~create~2 - + -proc~finalize~3 - +proc~finalize~2 + nurbs_surface%finalize - + -program~nearest_point_2d->proc~finalize~3 +program~nearest_point_2d->proc~finalize~2 - + -proc~nearest_point2~3 - +proc~nearest_point2~2 + nurbs_surface%nearest_point2 - + -program~nearest_point_2d->proc~nearest_point2~3 +program~nearest_point_2d->proc~nearest_point2~2 - + -proc~nearest_point~3 - +proc~nearest_point~2 + nurbs_surface%nearest_point - + -program~nearest_point_2d->proc~nearest_point~3 +program~nearest_point_2d->proc~nearest_point~2 - + -proc~set1~3 - +proc~set1~2 + nurbs_surface%set1 - + -none~set~3->proc~set1~3 +none~set~2->proc~set1~2 - + -proc~set2~3 - +proc~set2~2 + nurbs_surface%set2 - + -none~set~3->proc~set2~3 +none~set~2->proc~set2~2 - + -proc~set3~3 - +proc~set3~2 + nurbs_surface%set3 - + -none~set~3->proc~set3~3 +none~set~2->proc~set3~2 - + -interface~compute_xg~3 - +interface~compute_xg~2 + compute_Xg - + -proc~create~3->interface~compute_xg~3 +proc~create~2->interface~compute_xg~2 @@ -524,36 +524,36 @@

                  Calls

                  - + -proc~create~3->interface~ndgrid +proc~create~2->interface~ndgrid - + -proc~is_rational~3 - +proc~is_rational~2 + nurbs_surface%is_rational - + -proc~create~3->proc~is_rational~3 +proc~create~2->proc~is_rational~2 - + -proc~nearest_point2~3->proc~create~3 +proc~nearest_point2~2->proc~create~2 - + -proc~nearest_point2~3->proc~finalize~3 +proc~nearest_point2~2->proc~finalize~2 @@ -566,45 +566,45 @@

                  Calls

                  - + -proc~nearest_point2~3->interface~nearest_point_help_2d +proc~nearest_point2~2->interface~nearest_point_help_2d - + -none~derivative2~3 - +none~derivative2~2 + nurbs_surface%derivative2 - + -proc~nearest_point2~3->none~derivative2~3 +proc~nearest_point2~2->none~derivative2~2 - + -proc~cmp_xg~3 - +proc~cmp_xg~2 + nurbs_surface%cmp_Xg - + -proc~nearest_point2~3->proc~cmp_xg~3 +proc~nearest_point2~2->proc~cmp_xg~2 - + -proc~nearest_point~3->interface~nearest_point_help_2d +proc~nearest_point~2->interface~nearest_point_help_2d @@ -638,81 +638,81 @@

                  Calls

                  - + -proc~derivative2_scalar~3 - +proc~derivative2_scalar~2 + nurbs_surface%derivative2_scalar - + -none~derivative2~3->proc~derivative2_scalar~3 +none~derivative2~2->proc~derivative2_scalar~2 - + -proc~derivative2_vector~3 - +proc~derivative2_vector~2 + nurbs_surface%derivative2_vector - + -none~derivative2~3->proc~derivative2_vector~3 +none~derivative2~2->proc~derivative2_vector~2 - + -proc~cmp_xg~3->interface~compute_xg~3 +proc~cmp_xg~2->interface~compute_xg~2 - + -proc~cmp_xg~3->proc~is_rational~3 +proc~cmp_xg~2->proc~is_rational~2 - + -proc~cmp_degree~3 - +proc~cmp_degree~2 + nurbs_surface%cmp_degree - + -proc~set1~3->proc~cmp_degree~3 +proc~set1~2->proc~cmp_degree~2 - + -proc~cmp_nc~3 - +proc~cmp_nc~2 + nurbs_surface%cmp_nc - + -proc~set1~3->proc~cmp_nc~3 +proc~set1~2->proc~cmp_nc~2 - + -proc~set2~3->proc~cmp_nc~3 +proc~set2~2->proc~cmp_nc~2 @@ -725,30 +725,30 @@

                  Calls

                  - + -proc~set2~3->proc~compute_knot_vector +proc~set2~2->proc~compute_knot_vector - + -proc~set3~3->proc~cmp_degree~3 +proc~set3~2->proc~cmp_degree~2 - + -proc~get_multiplicity~3 - +proc~get_multiplicity~2 + nurbs_surface%get_multiplicity - + -proc~cmp_degree~3->proc~get_multiplicity~3 +proc~cmp_degree~2->proc~get_multiplicity~2 @@ -761,9 +761,9 @@

                  Calls

                  - + -proc~cmp_nc~3->interface~compute_multiplicity +proc~cmp_nc~2->interface~compute_multiplicity @@ -782,42 +782,42 @@

                  Calls

                  - + -proc~derivative2_scalar~3->proc~is_rational~3 +proc~derivative2_scalar~2->proc~is_rational~2 - + -interface~compute_d2tgc~3 - +interface~compute_d2tgc~2 + compute_d2Tgc - + -proc~derivative2_scalar~3->interface~compute_d2tgc~3 +proc~derivative2_scalar~2->interface~compute_d2tgc~2 - + -proc~derivative2_vector~3->interface~ndgrid +proc~derivative2_vector~2->interface~ndgrid - + -proc~derivative2_vector~3->proc~is_rational~3 +proc~derivative2_vector~2->proc~is_rational~2 - + -proc~derivative2_vector~3->interface~compute_d2tgc~3 +proc~derivative2_vector~2->interface~compute_d2tgc~2 @@ -851,9 +851,9 @@

                  Calls

                  - + -proc~get_multiplicity~3->interface~compute_multiplicity +proc~get_multiplicity~2->interface~compute_multiplicity @@ -960,7 +960,7 @@

                  Variables

                  - + real(kind=rk) @@ -976,7 +976,7 @@

                  Variables

                  - + real(kind=rk) @@ -992,7 +992,7 @@

                  Variables

                  - + integer @@ -1008,7 +1008,7 @@

                  Variables

                  - + real(kind=rk), @@ -1024,7 +1024,7 @@

                  Variables

                  - + real(kind=rk), @@ -1040,7 +1040,7 @@

                  Variables

                  - + type(nurbs_surface) @@ -1087,7 +1087,7 @@

                  Variables

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/program/nearest_point_2d_bench.html b/program/nearest_point_2d_bench.html index 32f844e35..06da4518e 100644 --- a/program/nearest_point_2d_bench.html +++ b/program/nearest_point_2d_bench.html @@ -115,14 +115,14 @@

                  Variables

                  - i - id - j - nearest_Xg - nearest_Xt + i + id + j + nearest_Xg + nearest_Xt points - shape - t + shape + t
                  @@ -392,48 +392,48 @@

                  Calls

                  nearest_point_2d_bench - + -proc~create~3 - +proc~create~2 + nurbs_surface%create - + -program~nearest_point_2d_bench->proc~create~3 +program~nearest_point_2d_bench->proc~create~2 - + -proc~finalize~3 - +proc~finalize~2 + nurbs_surface%finalize - + -program~nearest_point_2d_bench->proc~finalize~3 +program~nearest_point_2d_bench->proc~finalize~2 - + -proc~nearest_point~3 - +proc~nearest_point~2 + nurbs_surface%nearest_point - + -program~nearest_point_2d_bench->proc~nearest_point~3 +program~nearest_point_2d_bench->proc~nearest_point~2 @@ -476,18 +476,18 @@

                  Calls

                  - + -interface~compute_xg~3 - +interface~compute_xg~2 + compute_Xg - + -proc~create~3->interface~compute_xg~3 +proc~create~2->interface~compute_xg~2 @@ -500,24 +500,24 @@

                  Calls

                  - + -proc~create~3->interface~ndgrid +proc~create~2->interface~ndgrid - + -proc~is_rational~3 - +proc~is_rational~2 + nurbs_surface%is_rational - + -proc~create~3->proc~is_rational~3 +proc~create~2->proc~is_rational~2 @@ -530,24 +530,24 @@

                  Calls

                  - + -proc~nearest_point~3->interface~nearest_point_help_2d +proc~nearest_point~2->interface~nearest_point_help_2d - + -none~set~3 - +none~set~2 + nurbs_surface%set - + -proc~set_tetragon->none~set~3 +proc~set_tetragon->none~set~2 @@ -596,84 +596,84 @@

                  Calls

                  - + -proc~set1~3 - +proc~set1~2 + nurbs_surface%set1 - + -none~set~3->proc~set1~3 +none~set~2->proc~set1~2 - + -proc~set2~3 - +proc~set2~2 + nurbs_surface%set2 - + -none~set~3->proc~set2~3 +none~set~2->proc~set2~2 - + -proc~set3~3 - +proc~set3~2 + nurbs_surface%set3 - + -none~set~3->proc~set3~3 +none~set~2->proc~set3~2 - + -proc~cmp_degree~3 - +proc~cmp_degree~2 + nurbs_surface%cmp_degree - + -proc~set1~3->proc~cmp_degree~3 +proc~set1~2->proc~cmp_degree~2 - + -proc~cmp_nc~3 - +proc~cmp_nc~2 + nurbs_surface%cmp_nc - + -proc~set1~3->proc~cmp_nc~3 +proc~set1~2->proc~cmp_nc~2 - + -proc~set2~3->proc~cmp_nc~3 +proc~set2~2->proc~cmp_nc~2 @@ -686,30 +686,30 @@

                  Calls

                  - + -proc~set2~3->proc~compute_knot_vector +proc~set2~2->proc~compute_knot_vector - + -proc~set3~3->proc~cmp_degree~3 +proc~set3~2->proc~cmp_degree~2 - + -proc~get_multiplicity~3 - +proc~get_multiplicity~2 + nurbs_surface%get_multiplicity - + -proc~cmp_degree~3->proc~get_multiplicity~3 +proc~cmp_degree~2->proc~get_multiplicity~2 @@ -722,9 +722,9 @@

                  Calls

                  - + -proc~cmp_nc~3->interface~compute_multiplicity +proc~cmp_nc~2->interface~compute_multiplicity @@ -773,9 +773,9 @@

                  Calls

                  - + -proc~get_multiplicity~3->interface~compute_multiplicity +proc~get_multiplicity~2->interface~compute_multiplicity @@ -882,7 +882,7 @@

                  Variables

                  - + integer @@ -898,7 +898,7 @@

                  Variables

                  - + integer @@ -914,7 +914,7 @@

                  Variables

                  - + integer @@ -930,7 +930,7 @@

                  Variables

                  - + real(kind=rk), @@ -946,7 +946,7 @@

                  Variables

                  - + real(kind=rk), @@ -978,7 +978,7 @@

                  Variables

                  - + type(nurbs_surface) @@ -994,7 +994,7 @@

                  Variables

                  - + type(timer) @@ -1041,7 +1041,7 @@

                  Variables

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/program/nearest_point_3d.html b/program/nearest_point_3d.html index f62551e77..67526c940 100644 --- a/program/nearest_point_3d.html +++ b/program/nearest_point_3d.html @@ -115,12 +115,12 @@

                  Variables

                  @@ -959,7 +959,7 @@

                  Variables

                  - + real(kind=rk) @@ -975,7 +975,7 @@

                  Variables

                  - + real(kind=rk) @@ -1007,7 +1007,7 @@

                  Variables

                  - + real(kind=rk), @@ -1023,7 +1023,7 @@

                  Variables

                  - + real(kind=rk), @@ -1039,7 +1039,7 @@

                  Variables

                  - + type(nurbs_volume) @@ -1086,7 +1086,7 @@

                  Variables

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/program/shape_c_1d.html b/program/shape_c_1d.html index 2289a9aa9..14118c992 100644 --- a/program/shape_c_1d.html +++ b/program/shape_c_1d.html @@ -115,7 +115,7 @@

                  Variables

                  - shape + shape
                  @@ -373,213 +373,213 @@

                  Calls

                  shape_C_1d - + -proc~create~2 - +proc~create~3 + nurbs_curve%create - + -program~shape_c_1d->proc~create~2 +program~shape_c_1d->proc~create~3 - + -proc~export_xc~2 - +proc~export_xc~3 + nurbs_curve%export_Xc - + -program~shape_c_1d->proc~export_xc~2 +program~shape_c_1d->proc~export_xc~3 - + -proc~export_xg~2 - +proc~export_xg~3 + nurbs_curve%export_Xg - + -program~shape_c_1d->proc~export_xg~2 +program~shape_c_1d->proc~export_xg~3 - + -proc~finalize~2 - +proc~finalize~3 + nurbs_curve%finalize - + -program~shape_c_1d->proc~finalize~2 +program~shape_c_1d->proc~finalize~3 - + -proc~set_c~2 - +proc~set_c~3 + nurbs_curve%set_C - + -program~shape_c_1d->proc~set_c~2 +program~shape_c_1d->proc~set_c~3 - + -proc~show~2 - +proc~show~3 + nurbs_curve%show - + -program~shape_c_1d->proc~show~2 +program~shape_c_1d->proc~show~3 - + -interface~compute_xg~2 - +interface~compute_xg~3 + compute_Xg - + -proc~create~2->interface~compute_xg~2 +proc~create~3->interface~compute_xg~3 - + -proc~is_rational~2 - +proc~is_rational~3 + nurbs_curve%is_rational - + -proc~create~2->proc~is_rational~2 +proc~create~3->proc~is_rational~3 - + -proc~cmp_elem_xc_vis~2 - +proc~cmp_elem_xc_vis~3 + nurbs_curve%cmp_elem_Xc_vis - + -proc~export_xc~2->proc~cmp_elem_xc_vis~2 +proc~export_xc~3->proc~cmp_elem_xc_vis~3 - + -proc~cmp_elem_xg_vis~2 - +proc~cmp_elem_xg_vis~3 + nurbs_curve%cmp_elem_Xg_vis - + -proc~export_xg~2->proc~cmp_elem_xg_vis~2 +proc~export_xg~3->proc~cmp_elem_xg_vis~3 - + -none~set~2 - +none~set~3 + nurbs_curve%set - + -proc~set_c~2->none~set~2 +proc~set_c~3->none~set~3 - + -proc~set1~2 - +proc~set1~3 + nurbs_curve%set1 - + -none~set~2->proc~set1~2 +none~set~3->proc~set1~3 - + -proc~set2~2 - +proc~set2~3 + nurbs_curve%set2 - + -none~set~2->proc~set2~2 +none~set~3->proc~set2~3 - + -proc~set3~2 - +proc~set3~3 + nurbs_curve%set3 - + -none~set~2->proc~set3~2 +none~set~3->proc~set3~3 @@ -592,15 +592,15 @@

                  Calls

                  - + -proc~cmp_elem_xc_vis~2->interface~elemconn_c0 +proc~cmp_elem_xc_vis~3->interface~elemconn_c0 - + -proc~cmp_elem_xg_vis~2->interface~elemconn_c0 +proc~cmp_elem_xg_vis~3->interface~elemconn_c0 @@ -649,18 +649,18 @@

                  Calls

                  - + -proc~cmp_degree~2 - +proc~cmp_degree~3 + nurbs_curve%cmp_degree - + -proc~set1~2->proc~cmp_degree~2 +proc~set1~3->proc~cmp_degree~3 @@ -673,30 +673,30 @@

                  Calls

                  - + -proc~set2~2->proc~compute_knot_vector +proc~set2~3->proc~compute_knot_vector - + -proc~set3~2->proc~cmp_degree~2 +proc~set3~3->proc~cmp_degree~3 - + -proc~get_multiplicity~2 - +proc~get_multiplicity~3 + nurbs_curve%get_multiplicity - + -proc~cmp_degree~2->proc~get_multiplicity~2 +proc~cmp_degree~3->proc~get_multiplicity~3 @@ -724,9 +724,9 @@

                  Calls

                  - + -proc~get_multiplicity~2->interface~compute_multiplicity +proc~get_multiplicity~3->interface~compute_multiplicity @@ -863,7 +863,7 @@

                  Variables

                  - + type(nurbs_curve) @@ -910,7 +910,7 @@

                  Variables

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/program/shape_c_2d.html b/program/shape_c_2d.html index 5d81de07d..91a4ceb63 100644 --- a/program/shape_c_2d.html +++ b/program/shape_c_2d.html @@ -115,7 +115,7 @@

                  Variables

                  - shape + shape
                  @@ -373,108 +373,108 @@

                  Calls

                  shape_C_2d - + -proc~create~3 - +proc~create~2 + nurbs_surface%create - + -program~shape_c_2d->proc~create~3 +program~shape_c_2d->proc~create~2 - + -proc~export_xc~3 - +proc~export_xc~2 + nurbs_surface%export_Xc - + -program~shape_c_2d->proc~export_xc~3 +program~shape_c_2d->proc~export_xc~2 - + -proc~export_xg~3 - +proc~export_xg~2 + nurbs_surface%export_Xg - + -program~shape_c_2d->proc~export_xg~3 +program~shape_c_2d->proc~export_xg~2 - + -proc~finalize~3 - +proc~finalize~2 + nurbs_surface%finalize - + -program~shape_c_2d->proc~finalize~3 +program~shape_c_2d->proc~finalize~2 - + -proc~set_c~3 - +proc~set_c~2 + nurbs_surface%set_C - + -program~shape_c_2d->proc~set_c~3 +program~shape_c_2d->proc~set_c~2 - + -proc~show~3 - +proc~show~2 + nurbs_surface%show - + -program~shape_c_2d->proc~show~3 +program~shape_c_2d->proc~show~2 - + -interface~compute_xg~3 - +interface~compute_xg~2 + compute_Xg - + -proc~create~3->interface~compute_xg~3 +proc~create~2->interface~compute_xg~2 @@ -487,69 +487,69 @@

                  Calls

                  - + -proc~create~3->interface~ndgrid +proc~create~2->interface~ndgrid - + -proc~is_rational~3 - +proc~is_rational~2 + nurbs_surface%is_rational - + -proc~create~3->proc~is_rational~3 +proc~create~2->proc~is_rational~2 - + -proc~cmp_elem_xc_vis~3 - +proc~cmp_elem_xc_vis~2 + nurbs_surface%cmp_elem_Xc_vis - + -proc~export_xc~3->proc~cmp_elem_xc_vis~3 +proc~export_xc~2->proc~cmp_elem_xc_vis~2 - + -proc~cmp_elem_xg_vis~3 - +proc~cmp_elem_xg_vis~2 + nurbs_surface%cmp_elem_Xg_vis - + -proc~export_xg~3->proc~cmp_elem_xg_vis~3 +proc~export_xg~2->proc~cmp_elem_xg_vis~2 - + -none~set~3 - +none~set~2 + nurbs_surface%set - + -proc~set_c~3->none~set~3 +proc~set_c~2->none~set~2 @@ -583,48 +583,48 @@

                  Calls

                  - + -proc~set1~3 - +proc~set1~2 + nurbs_surface%set1 - + -none~set~3->proc~set1~3 +none~set~2->proc~set1~2 - + -proc~set2~3 - +proc~set2~2 + nurbs_surface%set2 - + -none~set~3->proc~set2~3 +none~set~2->proc~set2~2 - + -proc~set3~3 - +proc~set3~2 + nurbs_surface%set3 - + -none~set~3->proc~set3~3 +none~set~2->proc~set3~2 @@ -637,15 +637,15 @@

                  Calls

                  - + -proc~cmp_elem_xc_vis~3->interface~elemconn_c0 +proc~cmp_elem_xc_vis~2->interface~elemconn_c0 - + -proc~cmp_elem_xg_vis~3->interface~elemconn_c0 +proc~cmp_elem_xg_vis~2->interface~elemconn_c0 @@ -694,39 +694,39 @@

                  Calls

                  - + -proc~cmp_degree~3 - +proc~cmp_degree~2 + nurbs_surface%cmp_degree - + -proc~set1~3->proc~cmp_degree~3 +proc~set1~2->proc~cmp_degree~2 - + -proc~cmp_nc~3 - +proc~cmp_nc~2 + nurbs_surface%cmp_nc - + -proc~set1~3->proc~cmp_nc~3 +proc~set1~2->proc~cmp_nc~2 - + -proc~set2~3->proc~cmp_nc~3 +proc~set2~2->proc~cmp_nc~2 @@ -739,30 +739,30 @@

                  Calls

                  - + -proc~set2~3->proc~compute_knot_vector +proc~set2~2->proc~compute_knot_vector - + -proc~set3~3->proc~cmp_degree~3 +proc~set3~2->proc~cmp_degree~2 - + -proc~get_multiplicity~3 - +proc~get_multiplicity~2 + nurbs_surface%get_multiplicity - + -proc~cmp_degree~3->proc~get_multiplicity~3 +proc~cmp_degree~2->proc~get_multiplicity~2 @@ -775,9 +775,9 @@

                  Calls

                  - + -proc~cmp_nc~3->interface~compute_multiplicity +proc~cmp_nc~2->interface~compute_multiplicity @@ -826,9 +826,9 @@

                  Calls

                  - + -proc~get_multiplicity~3->interface~compute_multiplicity +proc~get_multiplicity~2->interface~compute_multiplicity @@ -935,7 +935,7 @@

                  Variables

                  - + type(nurbs_surface) @@ -982,7 +982,7 @@

                  Variables

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/program/shape_c_3d.html b/program/shape_c_3d.html index 33aa59f71..b1bf94390 100644 --- a/program/shape_c_3d.html +++ b/program/shape_c_3d.html @@ -115,7 +115,7 @@

                  Variables

                  - shape + shape
                  @@ -935,7 +935,7 @@

                  Variables

                  - + type(nurbs_volume) @@ -982,7 +982,7 @@

                  Variables

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/program/shape_circle.html b/program/shape_circle.html index bae279abd..86d765c49 100644 --- a/program/shape_circle.html +++ b/program/shape_circle.html @@ -115,7 +115,7 @@

                  Variables

                  - shape + shape
                  @@ -373,63 +373,63 @@

                  Calls

                  shape_circle - + -proc~create~2 - +proc~create~3 + nurbs_curve%create - + -program~shape_circle->proc~create~2 +program~shape_circle->proc~create~3 - + -proc~export_xc~2 - +proc~export_xc~3 + nurbs_curve%export_Xc - + -program~shape_circle->proc~export_xc~2 +program~shape_circle->proc~export_xc~3 - + -proc~export_xg~2 - +proc~export_xg~3 + nurbs_curve%export_Xg - + -program~shape_circle->proc~export_xg~2 +program~shape_circle->proc~export_xg~3 - + -proc~finalize~2 - +proc~finalize~3 + nurbs_curve%finalize - + -program~shape_circle->proc~finalize~2 +program~shape_circle->proc~finalize~3 @@ -448,138 +448,138 @@

                  Calls

                  - + -proc~show~2 - +proc~show~3 + nurbs_curve%show - + -program~shape_circle->proc~show~2 +program~shape_circle->proc~show~3 - + -interface~compute_xg~2 - +interface~compute_xg~3 + compute_Xg - + -proc~create~2->interface~compute_xg~2 +proc~create~3->interface~compute_xg~3 - + -proc~is_rational~2 - +proc~is_rational~3 + nurbs_curve%is_rational - + -proc~create~2->proc~is_rational~2 +proc~create~3->proc~is_rational~3 - + -proc~cmp_elem_xc_vis~2 - +proc~cmp_elem_xc_vis~3 + nurbs_curve%cmp_elem_Xc_vis - + -proc~export_xc~2->proc~cmp_elem_xc_vis~2 +proc~export_xc~3->proc~cmp_elem_xc_vis~3 - + -proc~cmp_elem_xg_vis~2 - +proc~cmp_elem_xg_vis~3 + nurbs_curve%cmp_elem_Xg_vis - + -proc~export_xg~2->proc~cmp_elem_xg_vis~2 +proc~export_xg~3->proc~cmp_elem_xg_vis~3 - + -none~set~2 - +none~set~3 + nurbs_curve%set - + -proc~set_circle->none~set~2 +proc~set_circle->none~set~3 - + -proc~set1~2 - +proc~set1~3 + nurbs_curve%set1 - + -none~set~2->proc~set1~2 +none~set~3->proc~set1~3 - + -proc~set2~2 - +proc~set2~3 + nurbs_curve%set2 - + -none~set~2->proc~set2~2 +none~set~3->proc~set2~3 - + -proc~set3~2 - +proc~set3~3 + nurbs_curve%set3 - + -none~set~2->proc~set3~2 +none~set~3->proc~set3~3 @@ -592,15 +592,15 @@

                  Calls

                  - + -proc~cmp_elem_xc_vis~2->interface~elemconn_c0 +proc~cmp_elem_xc_vis~3->interface~elemconn_c0 - + -proc~cmp_elem_xg_vis~2->interface~elemconn_c0 +proc~cmp_elem_xg_vis~3->interface~elemconn_c0 @@ -649,18 +649,18 @@

                  Calls

                  - + -proc~cmp_degree~2 - +proc~cmp_degree~3 + nurbs_curve%cmp_degree - + -proc~set1~2->proc~cmp_degree~2 +proc~set1~3->proc~cmp_degree~3 @@ -673,30 +673,30 @@

                  Calls

                  - + -proc~set2~2->proc~compute_knot_vector +proc~set2~3->proc~compute_knot_vector - + -proc~set3~2->proc~cmp_degree~2 +proc~set3~3->proc~cmp_degree~3 - + -proc~get_multiplicity~2 - +proc~get_multiplicity~3 + nurbs_curve%get_multiplicity - + -proc~cmp_degree~2->proc~get_multiplicity~2 +proc~cmp_degree~3->proc~get_multiplicity~3 @@ -724,9 +724,9 @@

                  Calls

                  - + -proc~get_multiplicity~2->interface~compute_multiplicity +proc~get_multiplicity~3->interface~compute_multiplicity @@ -863,7 +863,7 @@

                  Variables

                  - + type(nurbs_curve) @@ -910,7 +910,7 @@

                  Variables

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/program/shape_half_circle.html b/program/shape_half_circle.html index ac4305a69..88d09a51a 100644 --- a/program/shape_half_circle.html +++ b/program/shape_half_circle.html @@ -115,7 +115,7 @@

                  Variables

                  - shape + shape
                  @@ -373,63 +373,63 @@

                  Calls

                  shape_half_circle - + -proc~create~2 - +proc~create~3 + nurbs_curve%create - + -program~shape_half_circle->proc~create~2 +program~shape_half_circle->proc~create~3 - + -proc~export_xc~2 - +proc~export_xc~3 + nurbs_curve%export_Xc - + -program~shape_half_circle->proc~export_xc~2 +program~shape_half_circle->proc~export_xc~3 - + -proc~export_xg~2 - +proc~export_xg~3 + nurbs_curve%export_Xg - + -program~shape_half_circle->proc~export_xg~2 +program~shape_half_circle->proc~export_xg~3 - + -proc~finalize~2 - +proc~finalize~3 + nurbs_curve%finalize - + -program~shape_half_circle->proc~finalize~2 +program~shape_half_circle->proc~finalize~3 @@ -448,138 +448,138 @@

                  Calls

                  - + -proc~show~2 - +proc~show~3 + nurbs_curve%show - + -program~shape_half_circle->proc~show~2 +program~shape_half_circle->proc~show~3 - + -interface~compute_xg~2 - +interface~compute_xg~3 + compute_Xg - + -proc~create~2->interface~compute_xg~2 +proc~create~3->interface~compute_xg~3 - + -proc~is_rational~2 - +proc~is_rational~3 + nurbs_curve%is_rational - + -proc~create~2->proc~is_rational~2 +proc~create~3->proc~is_rational~3 - + -proc~cmp_elem_xc_vis~2 - +proc~cmp_elem_xc_vis~3 + nurbs_curve%cmp_elem_Xc_vis - + -proc~export_xc~2->proc~cmp_elem_xc_vis~2 +proc~export_xc~3->proc~cmp_elem_xc_vis~3 - + -proc~cmp_elem_xg_vis~2 - +proc~cmp_elem_xg_vis~3 + nurbs_curve%cmp_elem_Xg_vis - + -proc~export_xg~2->proc~cmp_elem_xg_vis~2 +proc~export_xg~3->proc~cmp_elem_xg_vis~3 - + -none~set~2 - +none~set~3 + nurbs_curve%set - + -proc~set_half_circle->none~set~2 +proc~set_half_circle->none~set~3 - + -proc~set1~2 - +proc~set1~3 + nurbs_curve%set1 - + -none~set~2->proc~set1~2 +none~set~3->proc~set1~3 - + -proc~set2~2 - +proc~set2~3 + nurbs_curve%set2 - + -none~set~2->proc~set2~2 +none~set~3->proc~set2~3 - + -proc~set3~2 - +proc~set3~3 + nurbs_curve%set3 - + -none~set~2->proc~set3~2 +none~set~3->proc~set3~3 @@ -592,15 +592,15 @@

                  Calls

                  - + -proc~cmp_elem_xc_vis~2->interface~elemconn_c0 +proc~cmp_elem_xc_vis~3->interface~elemconn_c0 - + -proc~cmp_elem_xg_vis~2->interface~elemconn_c0 +proc~cmp_elem_xg_vis~3->interface~elemconn_c0 @@ -649,18 +649,18 @@

                  Calls

                  - + -proc~cmp_degree~2 - +proc~cmp_degree~3 + nurbs_curve%cmp_degree - + -proc~set1~2->proc~cmp_degree~2 +proc~set1~3->proc~cmp_degree~3 @@ -673,30 +673,30 @@

                  Calls

                  - + -proc~set2~2->proc~compute_knot_vector +proc~set2~3->proc~compute_knot_vector - + -proc~set3~2->proc~cmp_degree~2 +proc~set3~3->proc~cmp_degree~3 - + -proc~get_multiplicity~2 - +proc~get_multiplicity~3 + nurbs_curve%get_multiplicity - + -proc~cmp_degree~2->proc~get_multiplicity~2 +proc~cmp_degree~3->proc~get_multiplicity~3 @@ -724,9 +724,9 @@

                  Calls

                  - + -proc~get_multiplicity~2->interface~compute_multiplicity +proc~get_multiplicity~3->interface~compute_multiplicity @@ -863,7 +863,7 @@

                  Variables

                  - + type(nurbs_curve) @@ -910,7 +910,7 @@

                  Variables

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/program/shape_half_ring_2d.html b/program/shape_half_ring_2d.html index e49dd4498..c54fefdf5 100644 --- a/program/shape_half_ring_2d.html +++ b/program/shape_half_ring_2d.html @@ -115,7 +115,7 @@

                  Variables

                  - shape + shape
                  @@ -373,63 +373,63 @@

                  Calls

                  shape_half_ring_2d - + -proc~create~3 - +proc~create~2 + nurbs_surface%create - + -program~shape_half_ring_2d->proc~create~3 +program~shape_half_ring_2d->proc~create~2 - + -proc~export_xc~3 - +proc~export_xc~2 + nurbs_surface%export_Xc - + -program~shape_half_ring_2d->proc~export_xc~3 +program~shape_half_ring_2d->proc~export_xc~2 - + -proc~export_xg~3 - +proc~export_xg~2 + nurbs_surface%export_Xg - + -program~shape_half_ring_2d->proc~export_xg~3 +program~shape_half_ring_2d->proc~export_xg~2 - + -proc~finalize~3 - +proc~finalize~2 + nurbs_surface%finalize - + -program~shape_half_ring_2d->proc~finalize~3 +program~shape_half_ring_2d->proc~finalize~2 @@ -448,33 +448,33 @@

                  Calls

                  - + -proc~show~3 - +proc~show~2 + nurbs_surface%show - + -program~shape_half_ring_2d->proc~show~3 +program~shape_half_ring_2d->proc~show~2 - + -interface~compute_xg~3 - +interface~compute_xg~2 + compute_Xg - + -proc~create~3->interface~compute_xg~3 +proc~create~2->interface~compute_xg~2 @@ -487,69 +487,69 @@

                  Calls

                  - + -proc~create~3->interface~ndgrid +proc~create~2->interface~ndgrid - + -proc~is_rational~3 - +proc~is_rational~2 + nurbs_surface%is_rational - + -proc~create~3->proc~is_rational~3 +proc~create~2->proc~is_rational~2 - + -proc~cmp_elem_xc_vis~3 - +proc~cmp_elem_xc_vis~2 + nurbs_surface%cmp_elem_Xc_vis - + -proc~export_xc~3->proc~cmp_elem_xc_vis~3 +proc~export_xc~2->proc~cmp_elem_xc_vis~2 - + -proc~cmp_elem_xg_vis~3 - +proc~cmp_elem_xg_vis~2 + nurbs_surface%cmp_elem_Xg_vis - + -proc~export_xg~3->proc~cmp_elem_xg_vis~3 +proc~export_xg~2->proc~cmp_elem_xg_vis~2 - + -none~set~3 - +none~set~2 + nurbs_surface%set - + -proc~set_half_ring~2->none~set~3 +proc~set_half_ring~2->none~set~2 @@ -583,48 +583,48 @@

                  Calls

                  - + -proc~set1~3 - +proc~set1~2 + nurbs_surface%set1 - + -none~set~3->proc~set1~3 +none~set~2->proc~set1~2 - + -proc~set2~3 - +proc~set2~2 + nurbs_surface%set2 - + -none~set~3->proc~set2~3 +none~set~2->proc~set2~2 - + -proc~set3~3 - +proc~set3~2 + nurbs_surface%set3 - + -none~set~3->proc~set3~3 +none~set~2->proc~set3~2 @@ -637,15 +637,15 @@

                  Calls

                  - + -proc~cmp_elem_xc_vis~3->interface~elemconn_c0 +proc~cmp_elem_xc_vis~2->interface~elemconn_c0 - + -proc~cmp_elem_xg_vis~3->interface~elemconn_c0 +proc~cmp_elem_xg_vis~2->interface~elemconn_c0 @@ -694,39 +694,39 @@

                  Calls

                  - + -proc~cmp_degree~3 - +proc~cmp_degree~2 + nurbs_surface%cmp_degree - + -proc~set1~3->proc~cmp_degree~3 +proc~set1~2->proc~cmp_degree~2 - + -proc~cmp_nc~3 - +proc~cmp_nc~2 + nurbs_surface%cmp_nc - + -proc~set1~3->proc~cmp_nc~3 +proc~set1~2->proc~cmp_nc~2 - + -proc~set2~3->proc~cmp_nc~3 +proc~set2~2->proc~cmp_nc~2 @@ -739,30 +739,30 @@

                  Calls

                  - + -proc~set2~3->proc~compute_knot_vector +proc~set2~2->proc~compute_knot_vector - + -proc~set3~3->proc~cmp_degree~3 +proc~set3~2->proc~cmp_degree~2 - + -proc~get_multiplicity~3 - +proc~get_multiplicity~2 + nurbs_surface%get_multiplicity - + -proc~cmp_degree~3->proc~get_multiplicity~3 +proc~cmp_degree~2->proc~get_multiplicity~2 @@ -775,9 +775,9 @@

                  Calls

                  - + -proc~cmp_nc~3->interface~compute_multiplicity +proc~cmp_nc~2->interface~compute_multiplicity @@ -826,9 +826,9 @@

                  Calls

                  - + -proc~get_multiplicity~3->interface~compute_multiplicity +proc~get_multiplicity~2->interface~compute_multiplicity @@ -935,7 +935,7 @@

                  Variables

                  - + type(nurbs_surface) @@ -982,7 +982,7 @@

                  Variables

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/program/shape_half_ring_3d.html b/program/shape_half_ring_3d.html index 154f2a562..ca223f78f 100644 --- a/program/shape_half_ring_3d.html +++ b/program/shape_half_ring_3d.html @@ -115,7 +115,7 @@

                  Variables

                  - shape + shape
                  @@ -935,7 +935,7 @@

                  Variables

                  - + type(nurbs_volume) @@ -982,7 +982,7 @@

                  Variables

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/program/shape_hexahedron.html b/program/shape_hexahedron.html index bdb897fe3..8902407cb 100644 --- a/program/shape_hexahedron.html +++ b/program/shape_hexahedron.html @@ -998,7 +998,7 @@

                  Variables

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/program/shape_ring_2d.html b/program/shape_ring_2d.html index f1811362e..4226dc72a 100644 --- a/program/shape_ring_2d.html +++ b/program/shape_ring_2d.html @@ -115,7 +115,7 @@

                  Variables

                  - shape + shape
                  @@ -373,63 +373,63 @@

                  Calls

                  shape_ring_2d - + -proc~create~3 - +proc~create~2 + nurbs_surface%create - + -program~shape_ring_2d->proc~create~3 +program~shape_ring_2d->proc~create~2 - + -proc~export_xc~3 - +proc~export_xc~2 + nurbs_surface%export_Xc - + -program~shape_ring_2d->proc~export_xc~3 +program~shape_ring_2d->proc~export_xc~2 - + -proc~export_xg~3 - +proc~export_xg~2 + nurbs_surface%export_Xg - + -program~shape_ring_2d->proc~export_xg~3 +program~shape_ring_2d->proc~export_xg~2 - + -proc~finalize~3 - +proc~finalize~2 + nurbs_surface%finalize - + -program~shape_ring_2d->proc~finalize~3 +program~shape_ring_2d->proc~finalize~2 @@ -448,33 +448,33 @@

                  Calls

                  - + -proc~show~3 - +proc~show~2 + nurbs_surface%show - + -program~shape_ring_2d->proc~show~3 +program~shape_ring_2d->proc~show~2 - + -interface~compute_xg~3 - +interface~compute_xg~2 + compute_Xg - + -proc~create~3->interface~compute_xg~3 +proc~create~2->interface~compute_xg~2 @@ -487,69 +487,69 @@

                  Calls

                  - + -proc~create~3->interface~ndgrid +proc~create~2->interface~ndgrid - + -proc~is_rational~3 - +proc~is_rational~2 + nurbs_surface%is_rational - + -proc~create~3->proc~is_rational~3 +proc~create~2->proc~is_rational~2 - + -proc~cmp_elem_xc_vis~3 - +proc~cmp_elem_xc_vis~2 + nurbs_surface%cmp_elem_Xc_vis - + -proc~export_xc~3->proc~cmp_elem_xc_vis~3 +proc~export_xc~2->proc~cmp_elem_xc_vis~2 - + -proc~cmp_elem_xg_vis~3 - +proc~cmp_elem_xg_vis~2 + nurbs_surface%cmp_elem_Xg_vis - + -proc~export_xg~3->proc~cmp_elem_xg_vis~3 +proc~export_xg~2->proc~cmp_elem_xg_vis~2 - + -none~set~3 - +none~set~2 + nurbs_surface%set - + -proc~set_ring~2->none~set~3 +proc~set_ring~2->none~set~2 @@ -583,48 +583,48 @@

                  Calls

                  - + -proc~set1~3 - +proc~set1~2 + nurbs_surface%set1 - + -none~set~3->proc~set1~3 +none~set~2->proc~set1~2 - + -proc~set2~3 - +proc~set2~2 + nurbs_surface%set2 - + -none~set~3->proc~set2~3 +none~set~2->proc~set2~2 - + -proc~set3~3 - +proc~set3~2 + nurbs_surface%set3 - + -none~set~3->proc~set3~3 +none~set~2->proc~set3~2 @@ -637,15 +637,15 @@

                  Calls

                  - + -proc~cmp_elem_xc_vis~3->interface~elemconn_c0 +proc~cmp_elem_xc_vis~2->interface~elemconn_c0 - + -proc~cmp_elem_xg_vis~3->interface~elemconn_c0 +proc~cmp_elem_xg_vis~2->interface~elemconn_c0 @@ -694,39 +694,39 @@

                  Calls

                  - + -proc~cmp_degree~3 - +proc~cmp_degree~2 + nurbs_surface%cmp_degree - + -proc~set1~3->proc~cmp_degree~3 +proc~set1~2->proc~cmp_degree~2 - + -proc~cmp_nc~3 - +proc~cmp_nc~2 + nurbs_surface%cmp_nc - + -proc~set1~3->proc~cmp_nc~3 +proc~set1~2->proc~cmp_nc~2 - + -proc~set2~3->proc~cmp_nc~3 +proc~set2~2->proc~cmp_nc~2 @@ -739,30 +739,30 @@

                  Calls

                  - + -proc~set2~3->proc~compute_knot_vector +proc~set2~2->proc~compute_knot_vector - + -proc~set3~3->proc~cmp_degree~3 +proc~set3~2->proc~cmp_degree~2 - + -proc~get_multiplicity~3 - +proc~get_multiplicity~2 + nurbs_surface%get_multiplicity - + -proc~cmp_degree~3->proc~get_multiplicity~3 +proc~cmp_degree~2->proc~get_multiplicity~2 @@ -775,9 +775,9 @@

                  Calls

                  - + -proc~cmp_nc~3->interface~compute_multiplicity +proc~cmp_nc~2->interface~compute_multiplicity @@ -826,9 +826,9 @@

                  Calls

                  - + -proc~get_multiplicity~3->interface~compute_multiplicity +proc~get_multiplicity~2->interface~compute_multiplicity @@ -935,7 +935,7 @@

                  Variables

                  - + type(nurbs_surface) @@ -982,7 +982,7 @@

                  Variables

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/program/shape_ring_3d.html b/program/shape_ring_3d.html index 1bbcc59fa..b5b8a37c4 100644 --- a/program/shape_ring_3d.html +++ b/program/shape_ring_3d.html @@ -115,7 +115,7 @@

                  Variables

                  - shape + shape
                  @@ -935,7 +935,7 @@

                  Variables

                  - + type(nurbs_volume) @@ -982,7 +982,7 @@

                  Variables

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/program/shape_tetragon.html b/program/shape_tetragon.html index 835c874f1..4f0961e5e 100644 --- a/program/shape_tetragon.html +++ b/program/shape_tetragon.html @@ -115,7 +115,7 @@

                  Variables

                  - shape + shape
                  @@ -374,63 +374,63 @@

                  Calls

                  shape_tetragon - + -proc~create~3 - +proc~create~2 + nurbs_surface%create - + -program~shape_tetragon->proc~create~3 +program~shape_tetragon->proc~create~2 - + -proc~export_xc~3 - +proc~export_xc~2 + nurbs_surface%export_Xc - + -program~shape_tetragon->proc~export_xc~3 +program~shape_tetragon->proc~export_xc~2 - + -proc~export_xg~3 - +proc~export_xg~2 + nurbs_surface%export_Xg - + -program~shape_tetragon->proc~export_xg~3 +program~shape_tetragon->proc~export_xg~2 - + -proc~finalize~3 - +proc~finalize~2 + nurbs_surface%finalize - + -program~shape_tetragon->proc~finalize~3 +program~shape_tetragon->proc~finalize~2 @@ -449,33 +449,33 @@

                  Calls

                  - + -proc~show~3 - +proc~show~2 + nurbs_surface%show - + -program~shape_tetragon->proc~show~3 +program~shape_tetragon->proc~show~2 - + -interface~compute_xg~3 - +interface~compute_xg~2 + compute_Xg - + -proc~create~3->interface~compute_xg~3 +proc~create~2->interface~compute_xg~2 @@ -488,69 +488,69 @@

                  Calls

                  - + -proc~create~3->interface~ndgrid +proc~create~2->interface~ndgrid - + -proc~is_rational~3 - +proc~is_rational~2 + nurbs_surface%is_rational - + -proc~create~3->proc~is_rational~3 +proc~create~2->proc~is_rational~2 - + -proc~cmp_elem_xc_vis~3 - +proc~cmp_elem_xc_vis~2 + nurbs_surface%cmp_elem_Xc_vis - + -proc~export_xc~3->proc~cmp_elem_xc_vis~3 +proc~export_xc~2->proc~cmp_elem_xc_vis~2 - + -proc~cmp_elem_xg_vis~3 - +proc~cmp_elem_xg_vis~2 + nurbs_surface%cmp_elem_Xg_vis - + -proc~export_xg~3->proc~cmp_elem_xg_vis~3 +proc~export_xg~2->proc~cmp_elem_xg_vis~2 - + -none~set~3 - +none~set~2 + nurbs_surface%set - + -proc~set_tetragon->none~set~3 +proc~set_tetragon->none~set~2 @@ -599,48 +599,48 @@

                  Calls

                  - + -proc~set1~3 - +proc~set1~2 + nurbs_surface%set1 - + -none~set~3->proc~set1~3 +none~set~2->proc~set1~2 - + -proc~set2~3 - +proc~set2~2 + nurbs_surface%set2 - + -none~set~3->proc~set2~3 +none~set~2->proc~set2~2 - + -proc~set3~3 - +proc~set3~2 + nurbs_surface%set3 - + -none~set~3->proc~set3~3 +none~set~2->proc~set3~2 @@ -653,15 +653,15 @@

                  Calls

                  - + -proc~cmp_elem_xc_vis~3->interface~elemconn_c0 +proc~cmp_elem_xc_vis~2->interface~elemconn_c0 - + -proc~cmp_elem_xg_vis~3->interface~elemconn_c0 +proc~cmp_elem_xg_vis~2->interface~elemconn_c0 @@ -710,39 +710,39 @@

                  Calls

                  - + -proc~cmp_degree~3 - +proc~cmp_degree~2 + nurbs_surface%cmp_degree - + -proc~set1~3->proc~cmp_degree~3 +proc~set1~2->proc~cmp_degree~2 - + -proc~cmp_nc~3 - +proc~cmp_nc~2 + nurbs_surface%cmp_nc - + -proc~set1~3->proc~cmp_nc~3 +proc~set1~2->proc~cmp_nc~2 - + -proc~set2~3->proc~cmp_nc~3 +proc~set2~2->proc~cmp_nc~2 @@ -755,30 +755,30 @@

                  Calls

                  - + -proc~set2~3->proc~compute_knot_vector +proc~set2~2->proc~compute_knot_vector - + -proc~set3~3->proc~cmp_degree~3 +proc~set3~2->proc~cmp_degree~2 - + -proc~get_multiplicity~3 - +proc~get_multiplicity~2 + nurbs_surface%get_multiplicity - + -proc~cmp_degree~3->proc~get_multiplicity~3 +proc~cmp_degree~2->proc~get_multiplicity~2 @@ -791,9 +791,9 @@

                  Calls

                  - + -proc~cmp_nc~3->interface~compute_multiplicity +proc~cmp_nc~2->interface~compute_multiplicity @@ -842,9 +842,9 @@

                  Calls

                  - + -proc~get_multiplicity~3->interface~compute_multiplicity +proc~get_multiplicity~2->interface~compute_multiplicity @@ -951,7 +951,7 @@

                  Variables

                  - + type(nurbs_surface) @@ -998,7 +998,7 @@

                  Variables

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/search.html b/search.html index 514445790..7c7d6e59f 100644 --- a/search.html +++ b/search.html @@ -101,7 +101,7 @@

                  Search Results

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/sourcefile/demo_curve.f90.html b/sourcefile/demo_curve.f90.html index e115470eb..50f5afab5 100644 --- a/sourcefile/demo_curve.f90.html +++ b/sourcefile/demo_curve.f90.html @@ -422,7 +422,7 @@

                  Source Code

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/sourcefile/demo_surface.f90.html b/sourcefile/demo_surface.f90.html index 0fca079f8..86346a9a3 100644 --- a/sourcefile/demo_surface.f90.html +++ b/sourcefile/demo_surface.f90.html @@ -425,7 +425,7 @@

                  Source Code

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/sourcefile/demo_volume.f90.html b/sourcefile/demo_volume.f90.html index 820c07b4d..e9c856642 100644 --- a/sourcefile/demo_volume.f90.html +++ b/sourcefile/demo_volume.f90.html @@ -420,7 +420,7 @@

                  Source Code

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/sourcefile/example_curve_1.f90.html b/sourcefile/example_curve_1.f90.html index 6bd0e9131..62ca20eb1 100644 --- a/sourcefile/example_curve_1.f90.html +++ b/sourcefile/example_curve_1.f90.html @@ -486,7 +486,7 @@

                  Source Code

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/sourcefile/example_ppm1.f90.html b/sourcefile/example_ppm1.f90.html index bcc3e9cb8..5813d237d 100644 --- a/sourcefile/example_ppm1.f90.html +++ b/sourcefile/example_ppm1.f90.html @@ -709,7 +709,7 @@

                  Source Code

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/sourcefile/example_ppm2.f90.html b/sourcefile/example_ppm2.f90.html index 856a3d13c..afd80634a 100644 --- a/sourcefile/example_ppm2.f90.html +++ b/sourcefile/example_ppm2.f90.html @@ -718,7 +718,7 @@

                  Source Code

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/sourcefile/example_ppm3.f90.html b/sourcefile/example_ppm3.f90.html index d5dd92018..d838ef766 100644 --- a/sourcefile/example_ppm3.f90.html +++ b/sourcefile/example_ppm3.f90.html @@ -701,7 +701,7 @@

                  Source Code

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/sourcefile/example_surface_1.f90.html b/sourcefile/example_surface_1.f90.html index 38beb8bb2..622ca2f67 100644 --- a/sourcefile/example_surface_1.f90.html +++ b/sourcefile/example_surface_1.f90.html @@ -517,7 +517,7 @@

                  Source Code

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/sourcefile/example_volume_1.f90.html b/sourcefile/example_volume_1.f90.html index add4f4e01..40f80f819 100644 --- a/sourcefile/example_volume_1.f90.html +++ b/sourcefile/example_volume_1.f90.html @@ -541,7 +541,7 @@

                  Source Code

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/sourcefile/forcad.f90.html b/sourcefile/forcad.f90.html index aa1c36c25..5c5fc98b1 100644 --- a/sourcefile/forcad.f90.html +++ b/sourcefile/forcad.f90.html @@ -790,7 +790,7 @@

                  Source Code

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/sourcefile/forcad_nurbs_curve.f90.html b/sourcefile/forcad_nurbs_curve.f90.html index b0bbbe526..626e5d65e 100644 --- a/sourcefile/forcad_nurbs_curve.f90.html +++ b/sourcefile/forcad_nurbs_curve.f90.html @@ -3036,7 +3036,7 @@

                  Source Code

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/sourcefile/forcad_nurbs_surface.f90.html b/sourcefile/forcad_nurbs_surface.f90.html index ad351fe7e..50fcf6e3b 100644 --- a/sourcefile/forcad_nurbs_surface.f90.html +++ b/sourcefile/forcad_nurbs_surface.f90.html @@ -3829,7 +3829,7 @@

                  Source Code

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/sourcefile/forcad_nurbs_volume.f90.html b/sourcefile/forcad_nurbs_volume.f90.html index 77f54eb68..8eb66d5ed 100644 --- a/sourcefile/forcad_nurbs_volume.f90.html +++ b/sourcefile/forcad_nurbs_volume.f90.html @@ -4638,7 +4638,7 @@

                  Source Code

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/sourcefile/forcad_utils.f90.html b/sourcefile/forcad_utils.f90.html index 8f242f900..57dfa2a36 100644 --- a/sourcefile/forcad_utils.f90.html +++ b/sourcefile/forcad_utils.f90.html @@ -1791,7 +1791,7 @@

                  Source Code

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/sourcefile/nearest_point_1d.f90.html b/sourcefile/nearest_point_1d.f90.html index b09da78d7..de42c1844 100644 --- a/sourcefile/nearest_point_1d.f90.html +++ b/sourcefile/nearest_point_1d.f90.html @@ -417,7 +417,7 @@

                  Source Code

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/sourcefile/nearest_point_2d.f90.html b/sourcefile/nearest_point_2d.f90.html index 23e0e904f..ab92102c6 100644 --- a/sourcefile/nearest_point_2d.f90.html +++ b/sourcefile/nearest_point_2d.f90.html @@ -411,7 +411,7 @@

                  Source Code

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/sourcefile/nearest_point_2d_bench.f90.html b/sourcefile/nearest_point_2d_bench.f90.html index 6fb20396a..33a48d6df 100644 --- a/sourcefile/nearest_point_2d_bench.f90.html +++ b/sourcefile/nearest_point_2d_bench.f90.html @@ -400,7 +400,7 @@

                  Source Code

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/sourcefile/nearest_point_3d.f90.html b/sourcefile/nearest_point_3d.f90.html index d171cdd56..307eacda4 100644 --- a/sourcefile/nearest_point_3d.f90.html +++ b/sourcefile/nearest_point_3d.f90.html @@ -350,49 +350,53 @@

                  Source Code

                  !> The weights of the control points (Wc) are optional. Wc = [1.0_rk, 1.1_rk, 1.11_rk, 1.0_rk, 0.5_rk, 0.5_rk, 1.2_rk, 1.0_rk] - call shape%set(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], Xc=Xc, Wc=Wc) - - !----------------------------------------------------------------------------- - ! Creating the NURBS volume - !----------------------------------------------------------------------------- + call shape%set(& + 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],& + Xc=Xc, Wc=Wc) - !> Generate the NURBS volume with resolutions of 20, 20, 20 - call shape%create(30, 30, 30) - - !----------------------------------------------------------------------------- - ! Nearest point on the volume - !----------------------------------------------------------------------------- + !----------------------------------------------------------------------------- + ! Creating the NURBS volume + !----------------------------------------------------------------------------- + + !> Generate the NURBS volume with resolutions of 20, 20, 20 + call shape%create(30, 30, 30) - !> Find the nearest point on the volume to a given point - ! nearest_Xg: Coordinates of the nearest point on the volume (optional) - ! nearest_Xt: Corresponding parametric coordinates of the nearest point (optional) - ! id: id of the nearest point (optional) - call shape%nearest_point([1.5_rk, 3.5_rk, 1.1_rk], nearest_Xg, nearest_Xt, id) - print '(a,1x,g0,2x,g0,2x,g0,a,2x,g0,2x,g0,2x,g0,2x,a,1x,g0)',& - 'Nearest point on the volume:', nearest_Xg, ' with parametric coordinates:', nearest_Xt, ' and id:', id - - !----------------------------------------------------------------------------- - ! Nearest point on the volume (Optimization) - !----------------------------------------------------------------------------- + !----------------------------------------------------------------------------- + ! Nearest point on the volume + !----------------------------------------------------------------------------- + + !> Find the nearest point on the volume to a given point + ! nearest_Xg: Coordinates of the nearest point on the volume (optional) + ! nearest_Xt: Corresponding parametric coordinates of the nearest point (optional) + ! id: id of the nearest point (optional) + call shape%nearest_point([1.5_rk, 3.5_rk, 1.1_rk], nearest_Xg, nearest_Xt, id) + print '(a,1x,g0,2x,g0,2x,g0,a,2x,g0,2x,g0,2x,g0,2x,a,1x,g0)',& + 'Nearest point on the volume:', nearest_Xg, ' with parametric coordinates:', nearest_Xt, ' and id:', id - !> Find the nearest point on the volume to a given point - !> The optimization method is used to find the nearest point - !> The optimization method is based on the Newton-Raphson method - ! nearest_Xt: Corresponding parametric coordinates of the nearest point - ! nearest_Xg: Coordinates of the nearest point on the volume (optional) - call shape%nearest_point2([1.5_rk, 3.5_rk, 1.1_rk], 1.0e-11_rk, 500, nearest_Xt, nearest_Xg) - print '(a,1x,g0,2x,g0,2x,g0,a,2x,g0,2x,g0,2x,g0)',& - 'Nearest point on the volume:', nearest_Xg, ' with parametric coordinates:', nearest_Xt - - !----------------------------------------------------------------------------- - ! Finalizing - !----------------------------------------------------------------------------- + !----------------------------------------------------------------------------- + ! Nearest point on the volume (Optimization) + !----------------------------------------------------------------------------- + + !> Find the nearest point on the volume to a given point + !> The optimization method is used to find the nearest point + !> The optimization method is based on the Newton-Raphson method + ! nearest_Xt: Corresponding parametric coordinates of the nearest point + ! nearest_Xg: Coordinates of the nearest point on the volume (optional) + call shape%nearest_point2([1.5_rk, 3.5_rk, 1.1_rk], 1.0e-11_rk, 500, nearest_Xt, nearest_Xg) + print '(a,1x,g0,2x,g0,2x,g0,a,2x,g0,2x,g0,2x,g0)',& + 'Nearest point on the volume:', nearest_Xg, ' with parametric coordinates:', nearest_Xt - !> Finalize the NURBS volume object - call shape%finalize() - ! deallocate(nearest_Xg, nearest_Xt) + !----------------------------------------------------------------------------- + ! Finalizing + !----------------------------------------------------------------------------- -end program + !> Finalize the NURBS volume object + call shape%finalize() + ! deallocate(nearest_Xg, nearest_Xt) + +end program @@ -414,7 +418,7 @@

                  Source Code

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/sourcefile/put_to_nurbs.f90.html b/sourcefile/put_to_nurbs.f90.html index fc59bd578..2e26c41a8 100644 --- a/sourcefile/put_to_nurbs.f90.html +++ b/sourcefile/put_to_nurbs.f90.html @@ -404,7 +404,7 @@

                  Source Code

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/sourcefile/shape_c_1d.f90.html b/sourcefile/shape_c_1d.f90.html index 72459ed81..940081ec3 100644 --- a/sourcefile/shape_c_1d.f90.html +++ b/sourcefile/shape_c_1d.f90.html @@ -385,7 +385,7 @@

                  Source Code

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/sourcefile/shape_c_2d.f90.html b/sourcefile/shape_c_2d.f90.html index 89fedfa2a..aab3e0982 100644 --- a/sourcefile/shape_c_2d.f90.html +++ b/sourcefile/shape_c_2d.f90.html @@ -385,7 +385,7 @@

                  Source Code

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/sourcefile/shape_c_3d.f90.html b/sourcefile/shape_c_3d.f90.html index ebb69238a..7f0aa7c97 100644 --- a/sourcefile/shape_c_3d.f90.html +++ b/sourcefile/shape_c_3d.f90.html @@ -385,7 +385,7 @@

                  Source Code

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/sourcefile/shape_circle.f90.html b/sourcefile/shape_circle.f90.html index f58c98b97..486285b72 100644 --- a/sourcefile/shape_circle.f90.html +++ b/sourcefile/shape_circle.f90.html @@ -385,7 +385,7 @@

                  Source Code

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/sourcefile/shape_half_circle.f90.html b/sourcefile/shape_half_circle.f90.html index 4de1bc092..c030ba5b0 100644 --- a/sourcefile/shape_half_circle.f90.html +++ b/sourcefile/shape_half_circle.f90.html @@ -374,7 +374,7 @@

                  Source Code

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/sourcefile/shape_half_ring_2d.f90.html b/sourcefile/shape_half_ring_2d.f90.html index 6ae19be02..ab9f75244 100644 --- a/sourcefile/shape_half_ring_2d.f90.html +++ b/sourcefile/shape_half_ring_2d.f90.html @@ -374,7 +374,7 @@

                  Source Code

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/sourcefile/shape_half_ring_3d.f90.html b/sourcefile/shape_half_ring_3d.f90.html index fb365ef6d..fab2a3535 100644 --- a/sourcefile/shape_half_ring_3d.f90.html +++ b/sourcefile/shape_half_ring_3d.f90.html @@ -374,7 +374,7 @@

                  Source Code

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/sourcefile/shape_hexahedron.f90.html b/sourcefile/shape_hexahedron.f90.html index 9a81d5715..fb89c6bab 100644 --- a/sourcefile/shape_hexahedron.f90.html +++ b/sourcefile/shape_hexahedron.f90.html @@ -380,7 +380,7 @@

                  Source Code

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/sourcefile/shape_ring_2d.f90.html b/sourcefile/shape_ring_2d.f90.html index c0e677b9b..419402234 100644 --- a/sourcefile/shape_ring_2d.f90.html +++ b/sourcefile/shape_ring_2d.f90.html @@ -374,7 +374,7 @@

                  Source Code

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/sourcefile/shape_ring_3d.f90.html b/sourcefile/shape_ring_3d.f90.html index 2dd0eaff2..f574e0246 100644 --- a/sourcefile/shape_ring_3d.f90.html +++ b/sourcefile/shape_ring_3d.f90.html @@ -374,7 +374,7 @@

                  Source Code

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/sourcefile/shape_tetragon.f90.html b/sourcefile/shape_tetragon.f90.html index 212d9c6c8..3c6ffd9e5 100644 --- a/sourcefile/shape_tetragon.f90.html +++ b/sourcefile/shape_tetragon.f90.html @@ -387,7 +387,7 @@

                  Source Code

                  Documentation generated by FORD - on 2024-06-22T18:18:26.744704

                  + on 2024-06-22T18:21:15.937502


                  diff --git a/src/nearest_point_3d.f90 b/src/nearest_point_3d.f90 index 4908fd34f..41682e922 100644 --- a/src/nearest_point_3d.f90 +++ b/src/nearest_point_3d.f90 @@ -27,7 +27,11 @@ program nearest_point_3d !> The weights of the control points (Wc) are optional. Wc = [1.0_rk, 1.1_rk, 1.11_rk, 1.0_rk, 0.5_rk, 0.5_rk, 1.2_rk, 1.0_rk] - call shape%set(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], Xc=Xc, Wc=Wc) + call shape%set(& + 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],& + Xc=Xc, Wc=Wc) !----------------------------------------------------------------------------- ! Creating the NURBS volume diff --git a/tipuesearch/tipuesearch_content.js b/tipuesearch/tipuesearch_content.js index aacb6dcf4..9d02737cc 100644 --- a/tipuesearch/tipuesearch_content.js +++ b/tipuesearch/tipuesearch_content.js @@ -1 +1 @@ -var tipuesearch = {"pages":[{"title":" ForCAD ","text":"ForCAD ForCAD : A parallel Fortran library for geometric modeling using NURBS (Non-Uniform Rational B-Splines). ForCAD supports B-Spline , NURBS , Bezier , and Rational Bezier curves, surfaces, and volumes. Main Features Parallelized using OpenMP and do concurrent . Create NURBS objects by specifying control points, weights and knots. Refine NURBS objects by inserting or removing knots and elevating degree. Compute basis functions and derivatives of NURBS objects. Obtain IGA elements connectivity. Obtain visualized elements connectivity and coordinates for geometry and control geometry. Mesh insertion into a NURBS object. Export NURBS objects to VTK files for visualization. Includes predefined NURBS shapes: Circle, Half Circle, Tetragon, Hexahedron, 2D Ring, Half 2D Ring, 3D Ring, Half 3D Ring, C-shapes. Rotate and translate NURBS objects. Visualization using provided python PyVista scripts. Examples Installation Requirements A Fortran compiler, such as GNU Fortran ( gfortran ), Intel Fortran Compiler ( ifx/ifort ) or NVIDIA HPC SDK Fortran compiler ( nvfortran ). The Fortran Package Manager fpm . Optional: PyVista (Recommended) or ParaView for visualization. Clone the repository Clone the ForCAD repository from GitHub: git clone https://github.com/gha3mi/forcad.git cd forcad Install PyVista (Optional) To install PyVista, run the following command: pip install pyvista Running Examples with fpm fpm run --example After executing the examples, .vtk files will be generated in the vtk directory. To visualize these files, a show() method is provided which utilizes PyVista. Alternatively, other visualization tools like ParaView can also be used. Using ForCAD as a 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\" } 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 Roadmap For a detailed roadmap outlining upcoming features and enhancements, please refer to ROADMAP.md . Contributing To contribute to ForCAD, please review the CONTRIBUTING.md . Citation If you use ForCAD in your research, please cite it as follows: @software { seyed_ali_ghasemi_2024_10904447 , author = {Ghasemi, S. A.} , title = {gha3mi/ForCAD} , year = 2024 , publisher = {Zenodo} , doi = {10.5281/zenodo.10904447} , url = {https://doi.org/10.5281/zenodo.10904447} } References Piegl, L., & Tiller, W. (1995). The NURBS Book. In Monographs in Visual Communications. Springer Berlin Heidelberg. https://doi.org/10.1007/978-3-642-97385-7 An Introduction to NURBS. (2001). Elsevier. https://doi.org/10.1016/b978-1-55860-669-2.x5000-3 Sullivan et al., (2019). PyVista: 3D plotting and mesh analysis through a streamlined interface for the Visualization Toolkit (VTK). Journal of Open Source Software, 4(37), 1450, https://doi.org/10.21105/joss.01450 Ahrens, James, Geveci, Berk, Law, Charles, ParaView: An End-User Tool for Large Data Visualization, Visualization Handbook, Elsevier, 2005, ISBN-13: 9780123875822 Developer Info Seyed Ali Ghasemi","tags":"home","loc":"index.html"},{"title":"nurbs_volume – ForCAD ","text":"type, public :: nurbs_volume Components Type Visibility Attributes Name Initial real(kind=rk), private, allocatable :: Wc (:) Weights for the control points (1D array: [nc(1) nc(2) nc(3)]) real(kind=rk), private, allocatable :: Xc (:,:) Control points (2D array: [nc(1) nc(2) nc(3), dim]) real(kind=rk), private, allocatable :: Xg (:,:) Geometry points (2D array: [ng(1) ng(2) ng(3), dim]) real(kind=rk), private, allocatable :: Xt (:,:) Evaluation parameter values (2D array: [ng(1) ng(2) ng(3), dim] real(kind=rk), private, allocatable :: Xt1 (:) Evaluation parameter values in the first direction (1D array: [ng(1)]) real(kind=rk), private, allocatable :: Xt2 (:) Evaluation parameter values in the second direction (1D array: [ng(2)]) real(kind=rk), private, allocatable :: Xt3 (:) Evaluation parameter values in the third direction (1D array: [ng(3)]) integer, private :: degree (3) Degree (order) of the volume integer, private, allocatable :: elemConn (:,:) IGA element connectivity integer, private, allocatable :: elemConn_Xc_vis (:,:) Connectivity for visualization of control points integer, private, allocatable :: elemConn_Xg_vis (:,:) Connectivity for visualization of geometry points real(kind=rk), private, allocatable :: knot1 (:) Knot vector in the first direction (1D array) real(kind=rk), private, allocatable :: knot2 (:) Knot vector in the second direction (1D array) real(kind=rk), private, allocatable :: knot3 (:) Knot vector in the third direction (1D array) 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 generic, public :: basis => basis_vector , basis_scalar Compute the basis functions of the NURBS volume private pure subroutine basis_vector (this, res1, res2, res3, Xt1, Xt2, Xt3, Tgc) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(in), optional, contiguous :: Xt3 (:) real(kind=rk), intent(out), allocatable :: Tgc (:,:) private pure subroutine basis_scalar (this, Xt, Tgc) 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), contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: Tgc (:) procedure, public :: cmp_Xg Compute geometry points private pure function cmp_Xg (this, Xt) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this real(kind=rk), intent(in), contiguous :: Xt (:) Return Value real(kind=rk), allocatable, (:) procedure, public :: cmp_degree Compute degree of the NURBS volume private pure subroutine cmp_degree (this, dir) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), optional :: dir procedure, public :: cmp_degreeFace Compute degrees of the faces private pure function cmp_degreeFace (this, face) result(degree) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: face Return Value integer, (3) procedure, public :: cmp_elem Generate IGA element connectivity private pure function cmp_elem (this) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value integer, allocatable, (:,:) procedure, public :: cmp_elemFace Compute faces of the IGA elements private pure function cmp_elemFace (this, elem, face) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause number of nodes in each direction Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: elem integer, intent(in) :: face Return Value integer, allocatable, (:) procedure, public :: cmp_elemFace_Xc_vis Compute faces of the control points private pure function cmp_elemFace_Xc_vis (this, elem, face) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause number of nodes in each direction Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: elem integer, intent(in) :: face Return Value integer, allocatable, (:) procedure, public :: cmp_elemFace_Xg_vis Compute faces of the geometry points private pure function cmp_elemFace_Xg_vis (this, elem, face) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause number of nodes in each direction Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: elem integer, intent(in) :: face Return Value integer, allocatable, (:) procedure, public :: cmp_elem_Xc_vis Generate connectivity for control points private pure function cmp_elem_Xc_vis (this, p) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in), optional, contiguous :: p (:) Return Value integer, allocatable, (:,:) procedure, public :: cmp_elem_Xg_vis Generate connectivity for geometry points private pure function cmp_elem_Xg_vis (this, p) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in), optional, contiguous :: p (:) Return Value integer, allocatable, (:,:) procedure, public :: cmp_nc Compute number of required control points private pure subroutine cmp_nc (this, dir) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), optional :: dir procedure, public :: create Generate geometry points private pure subroutine create (this, res1, res2, res3, Xt1, Xt2, Xt3, Xt) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(in), optional, contiguous :: Xt3 (:) real(kind=rk), intent(in), optional, contiguous :: Xt (:,:) generic, public :: derivative => derivative_vector , derivative_scalar Compute the derivative of the NURBS volume private pure subroutine derivative_vector (this, res1, res2, res3, Xt1, Xt2, Xt3, dTgc, Tgc) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(in), optional, contiguous :: Xt3 (:) real(kind=rk), intent(out), allocatable :: dTgc (:,:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:,:) private pure subroutine derivative_scalar (this, Xt, dTgc, Tgc) 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), contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: dTgc (:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:) generic, public :: derivative2 => derivative2_vector , derivative2_scalar Compute the second derivative of the NURBS volume private pure subroutine derivative2_vector (this, res1, res2, res3, Xt1, Xt2, Xt3, d2Tgc, dTgc, Tgc) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(in), optional, contiguous :: Xt3 (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:,:) real(kind=rk), intent(out), optional, allocatable :: dTgc (:,:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:,:) private pure subroutine derivative2_scalar (this, Xt, d2Tgc, dTgc, Tgc) 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), contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:) real(kind=rk), intent(out), optional, allocatable :: dTgc (:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:) procedure, public :: elevate_degree Elevate the degree of the NURBS volume private pure subroutine elevate_degree (this, dir, t) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in) :: dir integer, intent(in) :: t 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 volume 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 generic, public :: get_Wc => get_Wc_all , get_Wci Get weights private pure function get_Wc_all (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_Wci (this, n) result(Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk) generic, public :: get_Xc => get_Xc_all , get_Xci , get_Xcid Get control points private pure function get_Xc_all (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_Xci (this, n) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk), allocatable, (:) private pure function get_Xcid (this, n, dir) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: n integer, intent(in) :: dir Return Value real(kind=rk) generic, public :: get_Xg => get_Xg_all , get_Xgi , get_Xgid Get geometry points private pure function get_Xg_all (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_Xgi (this, n) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk), allocatable, (:) private pure function get_Xgid (this, n, dir) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: n integer, intent(in) :: dir Return Value real(kind=rk) 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 Compute and return the continuity of the NURBS volume 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, (:) generic, public :: get_degree => get_degree_all , get_degree_dir Get degree of the NURBS volume private pure function get_degree_all (this) result(degree) 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_degree_dir (this, dir) result(degree) 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_elem Get IGA element connectivity private pure function get_elem (this) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value integer, allocatable, (:,:) procedure, public :: get_elem_Xc_vis Get connectivity for control points private pure function get_elem_Xc_vis (this) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value integer, allocatable, (:,:) procedure, public :: get_elem_Xg_vis Get connectivity for geometry points private pure function get_elem_Xg_vis (this) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value integer, allocatable, (:,:) generic, public :: get_knot => get_knoti , get_knot_all Get knot vector private pure function get_knoti (this, dir, i) 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 integer, intent(in) :: i Return Value real(kind=rk) private pure function get_knot_all (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 Compute and return the multiplicity of the knots 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_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 :: insert_knots Insert knots into the knot vector private pure subroutine insert_knots (this, dir, Xth, r) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in) :: dir real(kind=rk), intent(in), contiguous :: Xth (:) integer, intent(in), contiguous :: r (:) procedure, public :: is_rational Check if the NURBS volume is rational private pure function is_rational (this) result(r) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value logical 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 procedure, public :: nearest_point Find the nearest point on the NURBS volume (Approximation) private pure subroutine nearest_point (this, point_Xg, nearest_Xg, nearest_Xt, id) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this real(kind=rk), intent(in) :: point_Xg (:) real(kind=rk), intent(out), optional, allocatable :: nearest_Xg (:) real(kind=rk), intent(out), optional, allocatable :: nearest_Xt (:) integer, intent(out), optional :: id procedure, public :: nearest_point2 Find the nearest point on the NURBS volume (Minimization - Newton's method) private impure subroutine nearest_point2 (this, point_Xg, tol, maxit, nearest_Xt, nearest_Xg) 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) :: point_Xg (:) real(kind=rk), intent(in) :: tol integer, intent(in) :: maxit real(kind=rk), intent(out) :: nearest_Xt (3) real(kind=rk), intent(out), optional, allocatable :: nearest_Xg (:) procedure, public :: put_to_nurbs Put a shape to a NURBS volume private pure subroutine put_to_nurbs (this, X, elemConn) 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), contiguous :: X (:,:) integer, intent(in), contiguous :: elemConn (:,:) procedure, public :: remove_knots Remove knots from the knot vector private pure subroutine remove_knots (this, dir, Xth, r) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in) :: dir real(kind=rk), intent(in), contiguous :: Xth (:) integer, intent(in), contiguous :: r (:) procedure, public :: rotate_Xc Rotate control points private pure subroutine rotate_Xc (this, alpha, beta, theta) 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) :: alpha real(kind=rk), intent(in) :: beta real(kind=rk), intent(in) :: theta procedure, public :: rotate_Xg Rotate geometry points private pure subroutine rotate_Xg (this, alpha, beta, theta) 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) :: alpha real(kind=rk), intent(in) :: beta real(kind=rk), intent(in) :: theta generic, public :: set => set1 , set2 , set3 Set NURBS volume 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 volume object. Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) real(kind=rk), intent(in), contiguous :: knot3 (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) private pure subroutine set2 (this, Xth_dir1, Xth_dir2, Xth_dir3, degree, continuity1, continuity2, continuity3, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the NURBS volume object. Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: Xth_dir1 (:) real(kind=rk), intent(in), contiguous :: Xth_dir2 (:) real(kind=rk), intent(in), contiguous :: Xth_dir3 (:) integer, intent(in), contiguous :: degree (:) integer, intent(in), contiguous :: continuity1 (:) integer, intent(in), contiguous :: continuity2 (:) integer, intent(in), contiguous :: continuity3 (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) private pure subroutine set3 (this, nc, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set Bezier or Rational Bezier volume using control points and weights. Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), contiguous :: nc (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) procedure, public :: set1 Set knot vectors, control points and weights for the NURBS volume object 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 volume object. Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) real(kind=rk), intent(in), contiguous :: knot3 (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) procedure, public :: set2 Set NURBS volume using nodes of parameter space, degree, continuity, control points and weights private pure subroutine set2 (this, Xth_dir1, Xth_dir2, Xth_dir3, degree, continuity1, continuity2, continuity3, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the NURBS volume object. Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: Xth_dir1 (:) real(kind=rk), intent(in), contiguous :: Xth_dir2 (:) real(kind=rk), intent(in), contiguous :: Xth_dir3 (:) integer, intent(in), contiguous :: degree (:) integer, intent(in), contiguous :: continuity1 (:) integer, intent(in), contiguous :: continuity2 (:) integer, intent(in), contiguous :: continuity3 (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) procedure, public :: set3 Set Bezier or Rational Bezier volume using control points and weights private pure subroutine set3 (this, nc, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set Bezier or Rational Bezier volume using control points and weights. Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), contiguous :: nc (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) procedure, public :: set_C Set a C-shape private pure subroutine set_C (this, center, radius1, radius2, length) 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), contiguous :: center (:) real(kind=rk), intent(in) :: radius1 real(kind=rk), intent(in) :: radius2 real(kind=rk), intent(in) :: length procedure, public :: set_elem Set IGA element connectivity private pure subroutine set_elem (this, elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:) procedure, public :: set_elem_Xc_vis Set connectivity for control points private pure subroutine set_elem_Xc_vis (this, elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:) procedure, public :: set_elem_Xg_vis Set connectivity for geometry points private pure subroutine set_elem_Xg_vis (this, elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:) procedure, public :: set_half_ring Set a half ring private pure subroutine set_half_ring (this, center, radius1, radius2, length) 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), contiguous :: center (:) real(kind=rk), intent(in) :: radius1 real(kind=rk), intent(in) :: radius2 real(kind=rk), intent(in) :: length procedure, public :: set_hexahedron Set a hexahedron private pure subroutine set_hexahedron (this, L, nc, Wc) 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), contiguous :: L (:) integer, intent(in), contiguous :: nc (:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) procedure, public :: set_ring Set a ring private pure subroutine set_ring (this, center, radius1, radius2, length) 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), contiguous :: center (:) real(kind=rk), intent(in) :: radius1 real(kind=rk), intent(in) :: radius2 real(kind=rk), intent(in) :: length procedure, public :: show Show the NURBS object using PyVista private impure subroutine show (this, vtkfile_Xc, vtkfile_Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this character(len=*), intent(in) :: vtkfile_Xc character(len=*), intent(in) :: vtkfile_Xg procedure, public :: translate_Xc Translate control points private pure subroutine translate_Xc (this, vec) 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) :: vec (:) procedure, public :: translate_Xg Translate geometry points private pure subroutine translate_Xg (this, vec) 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) :: vec (:) procedure, private :: basis_scalar Compute the basis functions of the NURBS volume private pure subroutine basis_scalar (this, Xt, Tgc) 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), contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: Tgc (:) procedure, private :: basis_vector Compute the basis functions of the NURBS volume private pure subroutine basis_vector (this, res1, res2, res3, Xt1, Xt2, Xt3, Tgc) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(in), optional, contiguous :: Xt3 (:) real(kind=rk), intent(out), allocatable :: Tgc (:,:) procedure, private :: derivative2_scalar Compute the second derivative of the NURBS volume private pure subroutine derivative2_scalar (this, Xt, d2Tgc, dTgc, Tgc) 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), contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:) real(kind=rk), intent(out), optional, allocatable :: dTgc (:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:) procedure, private :: derivative2_vector Compute the second derivative of the NURBS volume private pure subroutine derivative2_vector (this, res1, res2, res3, Xt1, Xt2, Xt3, d2Tgc, dTgc, Tgc) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(in), optional, contiguous :: Xt3 (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:,:) real(kind=rk), intent(out), optional, allocatable :: dTgc (:,:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:,:) procedure, private :: derivative_scalar Compute the derivative of the NURBS volume private pure subroutine derivative_scalar (this, Xt, dTgc, Tgc) 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), contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: dTgc (:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:) procedure, private :: derivative_vector Compute the derivative of the NURBS volume private pure subroutine derivative_vector (this, res1, res2, res3, Xt1, Xt2, Xt3, dTgc, Tgc) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(in), optional, contiguous :: Xt3 (:) real(kind=rk), intent(out), allocatable :: dTgc (:,:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:,:) procedure, private :: get_Wc_all Get all weights private pure function get_Wc_all (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, private :: get_Wci Get i-th weight private pure function get_Wci (this, n) result(Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk) procedure, private :: get_Xc_all Get all control points private pure function get_Xc_all (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, private :: get_Xci Get i-th control point private pure function get_Xci (this, n) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk), allocatable, (:) procedure, private :: get_Xcid Get i-th control point in a specific direction private pure function get_Xcid (this, n, dir) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: n integer, intent(in) :: dir Return Value real(kind=rk) procedure, private :: get_Xg_all Get all geometry points private pure function get_Xg_all (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, private :: get_Xgi Get i-th geometry point private pure function get_Xgi (this, n) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk), allocatable, (:) procedure, private :: get_Xgid Get i-th geometry point in a specific direction private pure function get_Xgid (this, n, dir) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: n integer, intent(in) :: dir Return Value real(kind=rk) procedure, private :: get_degree_all Get degree of the NURBS volume in all directions private pure function get_degree_all (this) result(degree) 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, private :: get_degree_dir Get degree of the NURBS volume in a specific direction private pure function get_degree_dir (this, dir) result(degree) 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, private :: get_knot_all Get all knot vectors private pure function get_knot_all (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, private :: get_knoti Get i-th knot value private pure function get_knoti (this, dir, i) 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 integer, intent(in) :: i Return Value real(kind=rk)","tags":"","loc":"type/nurbs_volume.html"},{"title":"nurbs_curve – ForCAD ","text":"type, public :: nurbs_curve Components Type Visibility Attributes Name Initial real(kind=rk), private, allocatable :: Wc (:) Weights for control points (1D array: [nc]) real(kind=rk), private, allocatable :: Xc (:,:) Control points (2D array: [nc, dim]) real(kind=rk), private, allocatable :: Xg (:,:) Geometry points (2D array: [ng, dim]) real(kind=rk), private, allocatable :: Xt (:) Evaluation points (1D array: [ng]) integer, private :: degree Degree (order) of the curve integer, private, allocatable :: elemConn (:,:) IGA element connectivity integer, private, allocatable :: elemConn_Xc_vis (:,:) Connectivity for visualization of control points integer, private, allocatable :: elemConn_Xg_vis (:,:) Connectivity for visualization of geometry points real(kind=rk), private, allocatable :: knot (:) Knot vector (1D array) integer, private :: nc Number of control points integer, private :: ng Number of geometry points Type-Bound Procedures generic, public :: basis => basis_vector , basis_scalar Compute the basis functions of the NURBS curve private pure subroutine basis_vector (this, res, Xt, Tgc) 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, contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: Tgc (:,:) private pure subroutine basis_scalar (this, Xt, Tgc) 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) :: Xt real(kind=rk), intent(out), allocatable :: Tgc (:) procedure, public :: cmp_Xg Compute geometry points private pure function cmp_Xg (this, Xt) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this real(kind=rk), intent(in) :: Xt Return Value real(kind=rk), allocatable, (:) procedure, public :: cmp_degree Compute degree of the NURBS curve private pure subroutine cmp_degree (this) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this procedure, public :: cmp_elem Generate IGA element connectivity private pure function cmp_elem (this) result(elemConn) 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 :: cmp_elem_Xc_vis Generate connectivity for control points private pure function cmp_elem_Xc_vis (this, p) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in), optional :: p Return Value integer, allocatable, (:,:) procedure, public :: cmp_elem_Xg_vis Generate connectivity for geometry points private pure function cmp_elem_Xg_vis (this, p) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in), optional :: p Return Value integer, allocatable, (:,:) procedure, public :: cmp_nc Compute number of required control points private pure subroutine cmp_nc (this) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this 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, contiguous :: Xt (:) generic, public :: derivative => derivative_vector , derivative_scalar Compute the derivative of the NURBS curve private pure subroutine derivative_vector (this, res, Xt, dTgc, Tgc) 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, contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: dTgc (:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:,:) private pure subroutine derivative_scalar (this, Xt, dTgc, Tgc) 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) :: Xt real(kind=rk), intent(out), allocatable :: dTgc (:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:) generic, public :: derivative2 => derivative2_vector , derivative2_scalar Compute the second derivative of the NURBS curve private pure subroutine derivative2_vector (this, res, Xt, d2Tgc, dTgc, Tgc) 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, contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:) real(kind=rk), intent(out), optional, allocatable :: dTgc (:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:,:) private pure subroutine derivative2_scalar (this, Xt, d2Tgc, dTgc, Tgc) 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) :: Xt real(kind=rk), intent(out), allocatable :: d2Tgc (:) real(kind=rk), intent(out), optional, allocatable :: dTgc (:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:) procedure, public :: elevate_degree Elevate the degree of the curve private pure subroutine elevate_degree (this, t) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this integer, intent(in) :: t 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 NURBS 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 generic, public :: get_Wc => get_Wc_all , get_Wci Get weights private pure function get_Wc_all (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_Wci (this, n) result(Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk) generic, public :: get_Xc => get_Xc_all , get_Xci , get_Xcid Get control points private pure function get_Xc_all (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_Xci (this, n) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk), allocatable, (:) private pure function get_Xcid (this, n, dir) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in) :: n integer, intent(in) :: dir Return Value real(kind=rk) generic, public :: get_Xg => get_Xg_all , get_Xgi , get_Xgid Get geometry points private pure function get_Xg_all (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_Xgi (this, n) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk), allocatable, (:) private pure function get_Xgid (this, n, dir) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in) :: n integer, intent(in) :: dir Return Value real(kind=rk) 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 Compute and return the 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_degree Get degree of the NURBS curve private pure function get_degree (this) result(degree) 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_elem Get IGA element connectivity private pure function get_elem (this) result(elemConn) 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_vis Get connectivity for control points private pure function get_elem_Xc_vis (this) result(elemConn) 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_Xg_vis Get connectivity for geometry points private pure function get_elem_Xg_vis (this) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value integer, allocatable, (:,:) generic, public :: get_knot => get_knoti , get_knot_all Get knot vector private pure function get_knoti (this, i) result(knot) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in) :: i Return Value real(kind=rk) private pure function get_knot_all (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 Compute and return the multiplicity of the knots 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 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 :: insert_knots Insert knots into the knot vector private pure subroutine insert_knots (this, Xth, r) 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), contiguous :: Xth (:) integer, intent(in), contiguous :: r (:) procedure, public :: is_rational Check if the NURBS curve is rational private pure function is_rational (this) result(r) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value logical 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 procedure, public :: nearest_point Find the nearest point on the NURBS curve (Approximation) private pure subroutine nearest_point (this, point_Xg, nearest_Xg, nearest_Xt, id) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this real(kind=rk), intent(in) :: point_Xg (:) real(kind=rk), intent(out), optional, allocatable :: nearest_Xg (:) real(kind=rk), intent(out), optional :: nearest_Xt integer, intent(out), optional :: id procedure, public :: nearest_point2 Find the nearest point on the NURBS curve (Minimization - Newton's method) private impure subroutine nearest_point2 (this, point_Xg, tol, maxit, nearest_Xt, nearest_Xg) 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) :: point_Xg (:) real(kind=rk), intent(in) :: tol integer, intent(in) :: maxit real(kind=rk), intent(out) :: nearest_Xt real(kind=rk), intent(out), optional, allocatable :: nearest_Xg (:) procedure, public :: remove_knots Remove knots from the knot vector private pure subroutine remove_knots (this, Xth, r) 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), contiguous :: Xth (:) integer, intent(in), contiguous :: r (:) procedure, public :: rotate_Xc Rotate control points private pure subroutine rotate_Xc (this, alpha, beta, theta) 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) :: alpha real(kind=rk), intent(in) :: beta real(kind=rk), intent(in) :: theta procedure, public :: rotate_Xg Rotate geometry points private pure subroutine rotate_Xg (this, alpha, beta, theta) 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) :: alpha real(kind=rk), intent(in) :: beta real(kind=rk), intent(in) :: theta generic, public :: set => set1 , set2 , set3 Set NURBS curve private pure subroutine set1 (this, knot, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set knot vector, control points and weights for the NURBS curve object. Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: knot (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) private pure subroutine set2 (this, Xth_dir, degree, continuity, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set NURBS curve using nodes of parameter space (Xth), degree, continuity, control points and weights. Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: Xth_dir (:) integer, intent(in) :: degree integer, intent(in), contiguous :: continuity (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) private pure subroutine set3 (this, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set Bezier or Rational Bezier curve using control points and weights. Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) procedure, public :: set1 Set knot vector, control points and weights for the NURBS curve object private pure subroutine set1 (this, knot, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set knot vector, control points and weights for the NURBS curve object. Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: knot (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) procedure, public :: set2 Set NURBS curve using nodes of parameter space, degree, continuity, control points and weights private pure subroutine set2 (this, Xth_dir, degree, continuity, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set NURBS curve using nodes of parameter space (Xth), degree, continuity, control points and weights. Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: Xth_dir (:) integer, intent(in) :: degree integer, intent(in), contiguous :: continuity (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) procedure, public :: set3 Set Bezier or Rational Bezier curve using control points and weights private pure subroutine set3 (this, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set Bezier or Rational Bezier curve using control points and weights. Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) procedure, public :: set_C Set a C-shape private pure subroutine set_C (this, center, radius) 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), contiguous :: center (:) real(kind=rk), intent(in) :: radius procedure, public :: set_circle Set a circle private pure subroutine set_circle (this, center, radius) 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), contiguous :: center (:) real(kind=rk), intent(in) :: radius procedure, public :: set_elem Set IGA element connectivity private pure subroutine set_elem (this, elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:) procedure, public :: set_elem_Xc_vis Set connectivity for control points private pure subroutine set_elem_Xc_vis (this, elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:) procedure, public :: set_elem_Xg_vis Set connectivity for geometry points private pure subroutine set_elem_Xg_vis (this, elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:) procedure, public :: set_half_circle Set a half circle private pure subroutine set_half_circle (this, center, radius) 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), contiguous :: center (:) real(kind=rk), intent(in) :: radius procedure, public :: show Show the NURBS object using PyVista private impure subroutine show (this, vtkfile_Xc, vtkfile_Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this character(len=*), intent(in) :: vtkfile_Xc character(len=*), intent(in) :: vtkfile_Xg procedure, public :: translate_Xc Translate control points private pure subroutine translate_Xc (this, vec) 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) :: vec (:) procedure, public :: translate_Xg Translate geometry points private pure subroutine translate_Xg (this, vec) 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) :: vec (:) procedure, private :: basis_scalar Compute the basis functions of the NURBS curve private pure subroutine basis_scalar (this, Xt, Tgc) 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) :: Xt real(kind=rk), intent(out), allocatable :: Tgc (:) procedure, private :: basis_vector Compute the basis functions of the NURBS curve private pure subroutine basis_vector (this, res, Xt, Tgc) 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, contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: Tgc (:,:) procedure, private :: derivative2_scalar Compute the second derivative of the NURBS curve private pure subroutine derivative2_scalar (this, Xt, d2Tgc, dTgc, Tgc) 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) :: Xt real(kind=rk), intent(out), allocatable :: d2Tgc (:) real(kind=rk), intent(out), optional, allocatable :: dTgc (:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:) procedure, private :: derivative2_vector Compute the second derivative of the NURBS curve private pure subroutine derivative2_vector (this, res, Xt, d2Tgc, dTgc, Tgc) 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, contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:) real(kind=rk), intent(out), optional, allocatable :: dTgc (:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:,:) procedure, private :: derivative_scalar Compute the derivative of the NURBS curve private pure subroutine derivative_scalar (this, Xt, dTgc, Tgc) 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) :: Xt real(kind=rk), intent(out), allocatable :: dTgc (:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:) procedure, private :: derivative_vector Compute the derivative of the NURBS curve private pure subroutine derivative_vector (this, res, Xt, dTgc, Tgc) 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, contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: dTgc (:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:,:) procedure, private :: get_Wc_all Get all weights private pure function get_Wc_all (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, private :: get_Wci Get i-th weight private pure function get_Wci (this, n) result(Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk) procedure, private :: get_Xc_all Get all control points private pure function get_Xc_all (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, private :: get_Xci Get i-th control point private pure function get_Xci (this, n) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk), allocatable, (:) procedure, private :: get_Xcid Get i-th control point in a specific direction private pure function get_Xcid (this, n, dir) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in) :: n integer, intent(in) :: dir Return Value real(kind=rk) procedure, private :: get_Xg_all Get all geometry points private pure function get_Xg_all (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, private :: get_Xgi Get i-th geometry point private pure function get_Xgi (this, n) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk), allocatable, (:) procedure, private :: get_Xgid Get i-th geometry point in a specific direction private pure function get_Xgid (this, n, dir) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in) :: n integer, intent(in) :: dir Return Value real(kind=rk) procedure, private :: get_knot_all Get all knot vectors private pure function get_knot_all (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, private :: get_knoti Get i-th knot value private pure function get_knoti (this, i) result(knot) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in) :: i Return Value real(kind=rk)","tags":"","loc":"type/nurbs_curve.html"},{"title":"nurbs_surface – ForCAD ","text":"type, public :: nurbs_surface Components Type Visibility Attributes Name Initial real(kind=rk), private, allocatable :: Wc (:) Weights for control points (1D array: [nc(1)*nc(2)]) real(kind=rk), private, allocatable :: Xc (:,:) Control points (2D array: [nc(1)*nc(2), dim]) real(kind=rk), private, allocatable :: Xg (:,:) Geometry points (2D array: [ng(1)*ng(2), dim]) real(kind=rk), private, allocatable :: Xt (:,:) Evaluation parameter values (2D array: [ng(1)*ng(2), 2]) real(kind=rk), private, allocatable :: Xt1 (:) Evaluation parameter values in the first direction (1D array: [ng(1)]) real(kind=rk), private, allocatable :: Xt2 (:) Evaluation parameter values in the second direction (1D array: [ng(2)]) integer, private :: degree (2) Degree (order) of the surface integer, private, allocatable :: elemConn (:,:) IGA element connectivity integer, private, allocatable :: elemConn_Xc_vis (:,:) Connectivity for visualization of control points integer, private, allocatable :: elemConn_Xg_vis (:,:) Connectivity for visualization of geometry points real(kind=rk), private, allocatable :: knot1 (:) Knot vector in the first direction (1D array) real(kind=rk), private, allocatable :: knot2 (:) Knot vector in the second direction (1D array) 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 generic, public :: basis => basis_vector , basis_scalar Compute the basis functions of the NURBS surface private pure subroutine basis_vector (this, res1, res2, Xt1, Xt2, Tgc) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(out), allocatable :: Tgc (:,:) private pure subroutine basis_scalar (this, Xt, Tgc) 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) :: Xt (:) real(kind=rk), intent(out), allocatable :: Tgc (:) procedure, public :: cmp_Xg Compute geometry points private pure function cmp_Xg (this, Xt) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this real(kind=rk), intent(in), contiguous :: Xt (:) Return Value real(kind=rk), allocatable, (:) procedure, public :: cmp_degree Compute degree of the NURBS surface private pure subroutine cmp_degree (this, dir) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), optional :: dir procedure, public :: cmp_elem Generate IGA element connectivity private pure function cmp_elem (this) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value integer, allocatable, (:,:) procedure, public :: cmp_elem_Xc_vis Generate connectivity for control points private pure function cmp_elem_Xc_vis (this, p) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in), optional, contiguous :: p (:) Return Value integer, allocatable, (:,:) procedure, public :: cmp_elem_Xg_vis Generate connectivity for geometry points private pure function cmp_elem_Xg_vis (this, p) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in), optional, contiguous :: p (:) Return Value integer, allocatable, (:,:) procedure, public :: cmp_nc Compute number of required control points private pure subroutine cmp_nc (this, dir) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), optional :: dir procedure, public :: create Generate geometry points private pure subroutine create (this, res1, res2, Xt1, Xt2, Xt) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(in), optional, contiguous :: Xt (:,:) generic, public :: derivative => derivative_vector , derivative_scalar Compute the derivative of the NURBS surface private pure subroutine derivative_vector (this, res1, res2, Xt1, Xt2, dTgc, Tgc) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(out), allocatable :: dTgc (:,:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:,:) private pure subroutine derivative_scalar (this, Xt, dTgc, Tgc) 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), contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: dTgc (:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:) generic, public :: derivative2 => derivative2_vector , derivative2_scalar Compute the second derivative of the NURBS surface private pure subroutine derivative2_vector (this, res1, res2, Xt1, Xt2, d2Tgc, dTgc, Tgc) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:,:) real(kind=rk), intent(out), optional, allocatable :: dTgc (:,:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:,:) private pure subroutine derivative2_scalar (this, Xt, d2Tgc, dTgc, Tgc) 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), contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:) real(kind=rk), intent(out), optional, allocatable :: dTgc (:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:) procedure, public :: elevate_degree Elevate degree private pure subroutine elevate_degree (this, dir, t) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in) :: dir integer, intent(in) :: t 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 generic, public :: get_Wc => get_Wc_all , get_Wci Get weights private pure function get_Wc_all (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_Wci (this, n) result(Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk) generic, public :: get_Xc => get_Xc_all , get_Xci , get_Xcid Get control points private pure function get_Xc_all (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_Xci (this, n) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk), allocatable, (:) private pure function get_Xcid (this, n, dir) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: n integer, intent(in) :: dir Return Value real(kind=rk) generic, public :: get_Xg => get_Xg_all , get_Xgi , get_Xgid Get geometry points private pure function get_Xg_all (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_Xgi (this, n) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk), allocatable, (:) private pure function get_Xgid (this, n, dir) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: n integer, intent(in) :: dir Return Value real(kind=rk) 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 Compute and return the continuity of the NURBS 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, (:) generic, public :: get_degree => get_degree_all , get_degree_dir Get degree of the NURBS surface private pure function get_degree_all (this) result(degree) 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_degree_dir (this, dir) result(degree) 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_elem Get IGA element connectivity private pure function get_elem (this) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value integer, allocatable, (:,:) procedure, public :: get_elem_Xc_vis Get connectivity for control points private pure function get_elem_Xc_vis (this) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value integer, allocatable, (:,:) procedure, public :: get_elem_Xg_vis Get connectivity for geometry points private pure function get_elem_Xg_vis (this) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value integer, allocatable, (:,:) generic, public :: get_knot => get_knoti , get_knot_all Get knot vector private pure function get_knoti (this, dir, i) 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 integer, intent(in) :: i Return Value real(kind=rk) private pure function get_knot_all (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 Compute and return the 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 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 :: insert_knots Insert knots into the knot vector private pure subroutine insert_knots (this, dir, Xth, r) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in) :: dir real(kind=rk), intent(in), contiguous :: Xth (:) integer, intent(in), contiguous :: r (:) procedure, public :: is_rational Check if the NURBS surface is rational private pure function is_rational (this) result(r) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value logical 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 procedure, public :: nearest_point Find the nearest point on the NURBS surface (Approximation) private pure subroutine nearest_point (this, point_Xg, nearest_Xg, nearest_Xt, id) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this real(kind=rk), intent(in) :: point_Xg (:) real(kind=rk), intent(out), optional, allocatable :: nearest_Xg (:) real(kind=rk), intent(out), optional, allocatable :: nearest_Xt (:) integer, intent(out), optional :: id procedure, public :: nearest_point2 Find the nearest point on the NURBS surface (Minimization - Newton's method) private impure subroutine nearest_point2 (this, point_Xg, tol, maxit, nearest_Xt, nearest_Xg) 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) :: point_Xg (:) real(kind=rk), intent(in) :: tol integer, intent(in) :: maxit real(kind=rk), intent(out) :: nearest_Xt (2) real(kind=rk), intent(out), optional, allocatable :: nearest_Xg (:) procedure, public :: remove_knots Remove knots from the knot vector private pure subroutine remove_knots (this, dir, Xth, r) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in) :: dir real(kind=rk), intent(in), contiguous :: Xth (:) integer, intent(in), contiguous :: r (:) procedure, public :: rotate_Xc Rotate control points private pure subroutine rotate_Xc (this, alpha, beta, theta) 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) :: alpha real(kind=rk), intent(in) :: beta real(kind=rk), intent(in) :: theta procedure, public :: rotate_Xg Rotate geometry points private pure subroutine rotate_Xg (this, alpha, beta, theta) 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) :: alpha real(kind=rk), intent(in) :: beta real(kind=rk), intent(in) :: theta generic, public :: set => set1 , set2 , set3 Set NURBS surface private pure subroutine set1 (this, knot1, knot2, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set knot vectors, 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), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) private pure subroutine set2 (this, Xth_dir1, Xth_dir2, degree, continuity1, continuity2, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set NURBS surface using nodes of parameter space, degree, continuity, control points and weights Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: Xth_dir1 (:) real(kind=rk), intent(in), contiguous :: Xth_dir2 (:) integer, intent(in), contiguous :: degree (:) integer, intent(in), contiguous :: continuity1 (:) integer, intent(in), contiguous :: continuity2 (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) private pure subroutine set3 (this, nc, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set Bezier or Rational Bezier surface using control points and weights. Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), contiguous :: nc (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) procedure, public :: set1 Set knot vectors, control points and weights for the NURBS surface object private pure subroutine set1 (this, knot1, knot2, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set knot vectors, 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), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) procedure, public :: set2 Set NURBS surface using nodes of parameter space, degree, continuity, control points and weights private pure subroutine set2 (this, Xth_dir1, Xth_dir2, degree, continuity1, continuity2, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set NURBS surface using nodes of parameter space, degree, continuity, control points and weights Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: Xth_dir1 (:) real(kind=rk), intent(in), contiguous :: Xth_dir2 (:) integer, intent(in), contiguous :: degree (:) integer, intent(in), contiguous :: continuity1 (:) integer, intent(in), contiguous :: continuity2 (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) procedure, public :: set3 Set Bezier or Rational Bezier surface using control points and weights private pure subroutine set3 (this, nc, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set Bezier or Rational Bezier surface using control points and weights. Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), contiguous :: nc (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) procedure, public :: set_C Set a C-shape private pure subroutine set_C (this, center, radius1, radius2) 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), contiguous :: center (:) real(kind=rk), intent(in) :: radius1 real(kind=rk), intent(in) :: radius2 procedure, public :: set_elem Set IGA element connectivity private pure subroutine set_elem (this, elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:) procedure, public :: set_elem_Xc_vis Set connectivity for control points private pure subroutine set_elem_Xc_vis (this, elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:) procedure, public :: set_elem_Xg_vis Set connectivity for geometry points private pure subroutine set_elem_Xg_vis (this, elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:) procedure, public :: set_half_ring Set a half ring private pure subroutine set_half_ring (this, center, radius1, radius2) 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), contiguous :: center (:) real(kind=rk), intent(in) :: radius1 real(kind=rk), intent(in) :: radius2 procedure, public :: set_ring Set a ring private pure subroutine set_ring (this, center, radius1, radius2) 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), contiguous :: center (:) real(kind=rk), intent(in) :: radius1 real(kind=rk), intent(in) :: radius2 procedure, public :: set_tetragon Set a tetragon private pure subroutine set_tetragon (this, L, nc, Wc) 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) :: L (2) integer, intent(in) :: nc (2) real(kind=rk), intent(in), optional, contiguous :: Wc (:) procedure, public :: show Show the NURBS object using PyVista private impure subroutine show (this, vtkfile_Xc, vtkfile_Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this character(len=*), intent(in) :: vtkfile_Xc character(len=*), intent(in) :: vtkfile_Xg procedure, public :: translate_Xc Translate control points private pure subroutine translate_Xc (this, vec) 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) :: vec (:) procedure, public :: translate_Xg Translate geometry points private pure subroutine translate_Xg (this, vec) 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) :: vec (:) procedure, private :: basis_scalar Compute the basis functions of the NURBS surface private pure subroutine basis_scalar (this, Xt, Tgc) 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) :: Xt (:) real(kind=rk), intent(out), allocatable :: Tgc (:) procedure, private :: basis_vector Compute the basis functions of the NURBS surface private pure subroutine basis_vector (this, res1, res2, Xt1, Xt2, Tgc) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(out), allocatable :: Tgc (:,:) procedure, private :: derivative2_scalar Compute the second derivative of the NURBS surface private pure subroutine derivative2_scalar (this, Xt, d2Tgc, dTgc, Tgc) 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), contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:) real(kind=rk), intent(out), optional, allocatable :: dTgc (:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:) procedure, private :: derivative2_vector Compute the second derivative of the NURBS surface private pure subroutine derivative2_vector (this, res1, res2, Xt1, Xt2, d2Tgc, dTgc, Tgc) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:,:) real(kind=rk), intent(out), optional, allocatable :: dTgc (:,:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:,:) procedure, private :: derivative_scalar Compute the derivative of the NURBS surface private pure subroutine derivative_scalar (this, Xt, dTgc, Tgc) 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), contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: dTgc (:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:) procedure, private :: derivative_vector Compute the derivative of the NURBS surface private pure subroutine derivative_vector (this, res1, res2, Xt1, Xt2, dTgc, Tgc) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(out), allocatable :: dTgc (:,:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:,:) procedure, private :: get_Wc_all Get all weights private pure function get_Wc_all (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, private :: get_Wci Get i-th weight private pure function get_Wci (this, n) result(Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk) procedure, private :: get_Xc_all Get all control points private pure function get_Xc_all (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, private :: get_Xci Get i-th control point private pure function get_Xci (this, n) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk), allocatable, (:) procedure, private :: get_Xcid Get i-th control point in a specific direction private pure function get_Xcid (this, n, dir) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: n integer, intent(in) :: dir Return Value real(kind=rk) procedure, private :: get_Xg_all Get all geometry points private pure function get_Xg_all (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, private :: get_Xgi Get i-th geometry point private pure function get_Xgi (this, n) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk), allocatable, (:) procedure, private :: get_Xgid Get i-th geometry point in a specific direction private pure function get_Xgid (this, n, dir) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: n integer, intent(in) :: dir Return Value real(kind=rk) procedure, private :: get_degree_all Get degree of the NURBS surface in both directions private pure function get_degree_all (this) result(degree) 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, private :: get_degree_dir Get degree of the NURBS surface in a specific direction private pure function get_degree_dir (this, dir) result(degree) 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, private :: get_knot_all Get all knot vectors private pure function get_knot_all (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, private :: get_knoti Get i-th knot value private pure function get_knoti (this, dir, i) 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 integer, intent(in) :: i Return Value real(kind=rk)","tags":"","loc":"type/nurbs_surface.html"},{"title":"compute_Xg_nurbs_3d – ForCAD","text":"impure function compute_Xg_nurbs_3d(Xt, knot1, knot2, knot3, degree, nc, ng, Xc, Wc) result(Xg) Uses forcad_utils proc~~compute_xg_nurbs_3d~~UsesGraph proc~compute_xg_nurbs_3d compute_Xg_nurbs_3d module~forcad_utils forcad_utils proc~compute_xg_nurbs_3d->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:,:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) real(kind=rk), intent(in), contiguous :: knot3 (:) integer, intent(in) :: degree (3) integer, intent(in) :: nc (3) integer, intent(in) :: ng (3) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), contiguous :: Wc (:) Return Value real(kind=rk), allocatable, (:,:) Calls proc~~compute_xg_nurbs_3d~~CallsGraph proc~compute_xg_nurbs_3d compute_Xg_nurbs_3d proc~basis_bspline basis_bspline proc~compute_xg_nurbs_3d->proc~basis_bspline proc~kron kron proc~compute_xg_nurbs_3d->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_xg_nurbs_3d.html"},{"title":"compute_Xg_nurbs_3d_1point – ForCAD","text":"impure function compute_Xg_nurbs_3d_1point(Xt, knot1, knot2, knot3, degree, nc, Xc, Wc) result(Xg) Uses forcad_utils proc~~compute_xg_nurbs_3d_1point~~UsesGraph proc~compute_xg_nurbs_3d_1point compute_Xg_nurbs_3d_1point module~forcad_utils forcad_utils proc~compute_xg_nurbs_3d_1point->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) real(kind=rk), intent(in), contiguous :: knot3 (:) integer, intent(in) :: degree (3) integer, intent(in) :: nc (3) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), contiguous :: Wc (:) Return Value real(kind=rk), allocatable, (:) Calls proc~~compute_xg_nurbs_3d_1point~~CallsGraph proc~compute_xg_nurbs_3d_1point compute_Xg_nurbs_3d_1point proc~basis_bspline basis_bspline proc~compute_xg_nurbs_3d_1point->proc~basis_bspline proc~kron kron proc~compute_xg_nurbs_3d_1point->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_xg_nurbs_3d_1point.html"},{"title":"compute_Xg_bspline_3d – ForCAD","text":"impure function compute_Xg_bspline_3d(Xt, knot1, knot2, knot3, degree, nc, ng, Xc) result(Xg) Uses forcad_utils proc~~compute_xg_bspline_3d~~UsesGraph proc~compute_xg_bspline_3d compute_Xg_bspline_3d module~forcad_utils forcad_utils proc~compute_xg_bspline_3d->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:,:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) real(kind=rk), intent(in), contiguous :: knot3 (:) integer, intent(in) :: degree (3) integer, intent(in) :: nc (3) integer, intent(in) :: ng (3) real(kind=rk), intent(in), contiguous :: Xc (:,:) Return Value real(kind=rk), allocatable, (:,:) Calls proc~~compute_xg_bspline_3d~~CallsGraph proc~compute_xg_bspline_3d compute_Xg_bspline_3d proc~basis_bspline basis_bspline proc~compute_xg_bspline_3d->proc~basis_bspline proc~kron kron proc~compute_xg_bspline_3d->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_xg_bspline_3d.html"},{"title":"compute_Xg_bspline_3d_1point – ForCAD","text":"impure function compute_Xg_bspline_3d_1point(Xt, knot1, knot2, knot3, degree, nc, Xc) result(Xg) Uses forcad_utils proc~~compute_xg_bspline_3d_1point~~UsesGraph proc~compute_xg_bspline_3d_1point compute_Xg_bspline_3d_1point module~forcad_utils forcad_utils proc~compute_xg_bspline_3d_1point->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) real(kind=rk), intent(in), contiguous :: knot3 (:) integer, intent(in) :: degree (3) integer, intent(in) :: nc (3) real(kind=rk), intent(in), contiguous :: Xc (:,:) Return Value real(kind=rk), allocatable, (:) Calls proc~~compute_xg_bspline_3d_1point~~CallsGraph proc~compute_xg_bspline_3d_1point compute_Xg_bspline_3d_1point proc~basis_bspline basis_bspline proc~compute_xg_bspline_3d_1point->proc~basis_bspline proc~kron kron proc~compute_xg_bspline_3d_1point->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_xg_bspline_3d_1point.html"},{"title":"compute_Tgc_nurbs_3d_vector – ForCAD","text":"impure function compute_Tgc_nurbs_3d_vector(Xt, knot1, knot2, knot3, degree, nc, ng, Wc) result(Tgc) Uses forcad_utils proc~~compute_tgc_nurbs_3d_vector~~UsesGraph proc~compute_tgc_nurbs_3d_vector compute_Tgc_nurbs_3d_vector module~forcad_utils forcad_utils proc~compute_tgc_nurbs_3d_vector->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:,:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) real(kind=rk), intent(in), contiguous :: knot3 (:) integer, intent(in) :: degree (3) integer, intent(in) :: nc (3) integer, intent(in) :: ng (3) real(kind=rk), intent(in), contiguous :: Wc (:) Return Value real(kind=rk), allocatable, (:,:) Calls proc~~compute_tgc_nurbs_3d_vector~~CallsGraph proc~compute_tgc_nurbs_3d_vector compute_Tgc_nurbs_3d_vector proc~basis_bspline basis_bspline proc~compute_tgc_nurbs_3d_vector->proc~basis_bspline proc~kron kron proc~compute_tgc_nurbs_3d_vector->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_tgc_nurbs_3d_vector.html"},{"title":"compute_Tgc_nurbs_3d_scalar – ForCAD","text":"impure function compute_Tgc_nurbs_3d_scalar(Xt, knot1, knot2, knot3, degree, nc, Wc) result(Tgc) Uses forcad_utils proc~~compute_tgc_nurbs_3d_scalar~~UsesGraph proc~compute_tgc_nurbs_3d_scalar compute_Tgc_nurbs_3d_scalar module~forcad_utils forcad_utils proc~compute_tgc_nurbs_3d_scalar->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) real(kind=rk), intent(in), contiguous :: knot3 (:) integer, intent(in) :: degree (3) integer, intent(in) :: nc (3) real(kind=rk), intent(in), contiguous :: Wc (:) Return Value real(kind=rk), allocatable, (:) Calls proc~~compute_tgc_nurbs_3d_scalar~~CallsGraph proc~compute_tgc_nurbs_3d_scalar compute_Tgc_nurbs_3d_scalar proc~basis_bspline basis_bspline proc~compute_tgc_nurbs_3d_scalar->proc~basis_bspline proc~kron kron proc~compute_tgc_nurbs_3d_scalar->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_tgc_nurbs_3d_scalar.html"},{"title":"compute_Tgc_bspline_3d_vector – ForCAD","text":"impure function compute_Tgc_bspline_3d_vector(Xt, knot1, knot2, knot3, degree, nc, ng) result(Tgc) Uses forcad_utils proc~~compute_tgc_bspline_3d_vector~~UsesGraph proc~compute_tgc_bspline_3d_vector compute_Tgc_bspline_3d_vector module~forcad_utils forcad_utils proc~compute_tgc_bspline_3d_vector->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:,:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) real(kind=rk), intent(in), contiguous :: knot3 (:) integer, intent(in) :: degree (3) integer, intent(in) :: nc (3) integer, intent(in) :: ng (3) Return Value real(kind=rk), allocatable, (:,:) Calls proc~~compute_tgc_bspline_3d_vector~~CallsGraph proc~compute_tgc_bspline_3d_vector compute_Tgc_bspline_3d_vector proc~basis_bspline basis_bspline proc~compute_tgc_bspline_3d_vector->proc~basis_bspline proc~kron kron proc~compute_tgc_bspline_3d_vector->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_tgc_bspline_3d_vector.html"},{"title":"compute_Tgc_bspline_3d_scalar – ForCAD","text":"impure function compute_Tgc_bspline_3d_scalar(Xt, knot1, knot2, knot3, degree, nc) result(Tgc) Uses forcad_utils proc~~compute_tgc_bspline_3d_scalar~~UsesGraph proc~compute_tgc_bspline_3d_scalar compute_Tgc_bspline_3d_scalar module~forcad_utils forcad_utils proc~compute_tgc_bspline_3d_scalar->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) real(kind=rk), intent(in), contiguous :: knot3 (:) integer, intent(in) :: degree (3) integer, intent(in) :: nc (3) Return Value real(kind=rk), allocatable, (:) Calls proc~~compute_tgc_bspline_3d_scalar~~CallsGraph proc~compute_tgc_bspline_3d_scalar compute_Tgc_bspline_3d_scalar proc~basis_bspline basis_bspline proc~compute_tgc_bspline_3d_scalar->proc~basis_bspline proc~kron kron proc~compute_tgc_bspline_3d_scalar->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_tgc_bspline_3d_scalar.html"},{"title":"nearest_point_help_3d – ForCAD","text":"impure function nearest_point_help_3d(ng, Xg, point_Xg) result(distances) Uses forcad_utils proc~~nearest_point_help_3d~~UsesGraph proc~nearest_point_help_3d nearest_point_help_3d module~forcad_utils forcad_utils proc~nearest_point_help_3d->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. Arguments Type Intent Optional Attributes Name integer, intent(in) :: ng (3) real(kind=rk), intent(in), contiguous :: Xg (:,:) real(kind=rk), intent(in), contiguous :: point_Xg (:) Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"proc/nearest_point_help_3d.html"},{"title":"compute_dTgc_nurbs_3d_vector – ForCAD","text":"impure subroutine compute_dTgc_nurbs_3d_vector(Xt, knot1, knot2, knot3, degree, nc, ng, Wc, dTgc, Tgc) Uses forcad_utils proc~~compute_dtgc_nurbs_3d_vector~~UsesGraph proc~compute_dtgc_nurbs_3d_vector compute_dTgc_nurbs_3d_vector module~forcad_utils forcad_utils proc~compute_dtgc_nurbs_3d_vector->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:,:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) real(kind=rk), intent(in), contiguous :: knot3 (:) integer, intent(in) :: degree (3) integer, intent(in) :: nc (3) integer, intent(in) :: ng (3) real(kind=rk), intent(in), contiguous :: Wc (:) real(kind=rk), intent(out), allocatable :: dTgc (:,:,:) real(kind=rk), intent(out), allocatable :: Tgc (:,:) Calls proc~~compute_dtgc_nurbs_3d_vector~~CallsGraph proc~compute_dtgc_nurbs_3d_vector compute_dTgc_nurbs_3d_vector proc~basis_bspline_der basis_bspline_der proc~compute_dtgc_nurbs_3d_vector->proc~basis_bspline_der proc~kron kron proc~compute_dtgc_nurbs_3d_vector->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_dtgc_nurbs_3d_vector.html"},{"title":"compute_dTgc_nurbs_3d_scalar – ForCAD","text":"impure subroutine compute_dTgc_nurbs_3d_scalar(Xt, knot1, knot2, knot3, degree, nc, Wc, dTgc, Tgc) Uses forcad_utils proc~~compute_dtgc_nurbs_3d_scalar~~UsesGraph proc~compute_dtgc_nurbs_3d_scalar compute_dTgc_nurbs_3d_scalar module~forcad_utils forcad_utils proc~compute_dtgc_nurbs_3d_scalar->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) real(kind=rk), intent(in), contiguous :: knot3 (:) integer, intent(in) :: degree (3) integer, intent(in) :: nc (3) real(kind=rk), intent(in), contiguous :: Wc (:) real(kind=rk), intent(out), allocatable :: dTgc (:,:) real(kind=rk), intent(out), allocatable :: Tgc (:) Calls proc~~compute_dtgc_nurbs_3d_scalar~~CallsGraph proc~compute_dtgc_nurbs_3d_scalar compute_dTgc_nurbs_3d_scalar proc~basis_bspline_der basis_bspline_der proc~compute_dtgc_nurbs_3d_scalar->proc~basis_bspline_der proc~kron kron proc~compute_dtgc_nurbs_3d_scalar->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_dtgc_nurbs_3d_scalar.html"},{"title":"compute_dTgc_bspline_3d_vector – ForCAD","text":"impure subroutine compute_dTgc_bspline_3d_vector(Xt, knot1, knot2, knot3, degree, nc, ng, dTgc, Tgc) Uses forcad_utils proc~~compute_dtgc_bspline_3d_vector~~UsesGraph proc~compute_dtgc_bspline_3d_vector compute_dTgc_bspline_3d_vector module~forcad_utils forcad_utils proc~compute_dtgc_bspline_3d_vector->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:,:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) real(kind=rk), intent(in), contiguous :: knot3 (:) integer, intent(in) :: degree (3) integer, intent(in) :: nc (3) integer, intent(in) :: ng (3) real(kind=rk), intent(out), allocatable :: dTgc (:,:,:) real(kind=rk), intent(out), allocatable :: Tgc (:,:) Calls proc~~compute_dtgc_bspline_3d_vector~~CallsGraph proc~compute_dtgc_bspline_3d_vector compute_dTgc_bspline_3d_vector proc~basis_bspline_der basis_bspline_der proc~compute_dtgc_bspline_3d_vector->proc~basis_bspline_der proc~kron kron proc~compute_dtgc_bspline_3d_vector->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_dtgc_bspline_3d_vector.html"},{"title":"compute_dTgc_bspline_3d_scalar – ForCAD","text":"impure subroutine compute_dTgc_bspline_3d_scalar(Xt, knot1, knot2, knot3, degree, nc, dTgc, Tgc) Uses forcad_utils proc~~compute_dtgc_bspline_3d_scalar~~UsesGraph proc~compute_dtgc_bspline_3d_scalar compute_dTgc_bspline_3d_scalar module~forcad_utils forcad_utils proc~compute_dtgc_bspline_3d_scalar->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) real(kind=rk), intent(in), contiguous :: knot3 (:) integer, intent(in) :: degree (3) integer, intent(in) :: nc (3) real(kind=rk), intent(out), allocatable :: dTgc (:,:) real(kind=rk), intent(out), allocatable :: Tgc (:) Calls proc~~compute_dtgc_bspline_3d_scalar~~CallsGraph proc~compute_dtgc_bspline_3d_scalar compute_dTgc_bspline_3d_scalar proc~basis_bspline_der basis_bspline_der proc~compute_dtgc_bspline_3d_scalar->proc~basis_bspline_der proc~kron kron proc~compute_dtgc_bspline_3d_scalar->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_dtgc_bspline_3d_scalar.html"},{"title":"compute_d2Tgc_nurbs_3d_vector – ForCAD","text":"impure subroutine compute_d2Tgc_nurbs_3d_vector(Xt, knot1, knot2, knot3, degree, nc, ng, Wc, d2Tgc, dTgc, Tgc) Uses forcad_utils proc~~compute_d2tgc_nurbs_3d_vector~~UsesGraph proc~compute_d2tgc_nurbs_3d_vector compute_d2Tgc_nurbs_3d_vector module~forcad_utils forcad_utils proc~compute_d2tgc_nurbs_3d_vector->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:,:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) real(kind=rk), intent(in), contiguous :: knot3 (:) integer, intent(in) :: degree (3) integer, intent(in) :: nc (3) integer, intent(in) :: ng (3) real(kind=rk), intent(in), contiguous :: Wc (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:,:) real(kind=rk), intent(out), allocatable :: dTgc (:,:,:) real(kind=rk), intent(out), allocatable :: Tgc (:,:) Calls proc~~compute_d2tgc_nurbs_3d_vector~~CallsGraph proc~compute_d2tgc_nurbs_3d_vector compute_d2Tgc_nurbs_3d_vector proc~basis_bspline_2der basis_bspline_2der proc~compute_d2tgc_nurbs_3d_vector->proc~basis_bspline_2der proc~kron kron proc~compute_d2tgc_nurbs_3d_vector->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_d2tgc_nurbs_3d_vector.html"},{"title":"compute_d2Tgc_nurbs_3d_scalar – ForCAD","text":"impure subroutine compute_d2Tgc_nurbs_3d_scalar(Xt, knot1, knot2, knot3, degree, nc, Wc, d2Tgc, dTgc, Tgc) Uses forcad_utils proc~~compute_d2tgc_nurbs_3d_scalar~~UsesGraph proc~compute_d2tgc_nurbs_3d_scalar compute_d2Tgc_nurbs_3d_scalar module~forcad_utils forcad_utils proc~compute_d2tgc_nurbs_3d_scalar->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) real(kind=rk), intent(in), contiguous :: knot3 (:) integer, intent(in) :: degree (3) integer, intent(in) :: nc (3) real(kind=rk), intent(in), contiguous :: Wc (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:) real(kind=rk), intent(out), allocatable :: dTgc (:,:) real(kind=rk), intent(out), allocatable :: Tgc (:) Calls proc~~compute_d2tgc_nurbs_3d_scalar~~CallsGraph proc~compute_d2tgc_nurbs_3d_scalar compute_d2Tgc_nurbs_3d_scalar proc~basis_bspline_2der basis_bspline_2der proc~compute_d2tgc_nurbs_3d_scalar->proc~basis_bspline_2der proc~kron kron proc~compute_d2tgc_nurbs_3d_scalar->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_d2tgc_nurbs_3d_scalar.html"},{"title":"compute_d2Tgc_bspline_3d_vector – ForCAD","text":"impure subroutine compute_d2Tgc_bspline_3d_vector(Xt, knot1, knot2, knot3, degree, nc, ng, d2Tgc, dTgc, Tgc) Uses forcad_utils proc~~compute_d2tgc_bspline_3d_vector~~UsesGraph proc~compute_d2tgc_bspline_3d_vector compute_d2Tgc_bspline_3d_vector module~forcad_utils forcad_utils proc~compute_d2tgc_bspline_3d_vector->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:,:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) real(kind=rk), intent(in), contiguous :: knot3 (:) integer, intent(in) :: degree (3) integer, intent(in) :: nc (3) integer, intent(in) :: ng (3) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:,:) real(kind=rk), intent(out), allocatable :: dTgc (:,:,:) real(kind=rk), intent(out), allocatable :: Tgc (:,:) Calls proc~~compute_d2tgc_bspline_3d_vector~~CallsGraph proc~compute_d2tgc_bspline_3d_vector compute_d2Tgc_bspline_3d_vector proc~basis_bspline_2der basis_bspline_2der proc~compute_d2tgc_bspline_3d_vector->proc~basis_bspline_2der proc~kron kron proc~compute_d2tgc_bspline_3d_vector->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_d2tgc_bspline_3d_vector.html"},{"title":"compute_d2Tgc_bspline_3d_scalar – ForCAD","text":"impure subroutine compute_d2Tgc_bspline_3d_scalar(Xt, knot1, knot2, knot3, degree, nc, d2Tgc, dTgc, Tgc) Uses forcad_utils proc~~compute_d2tgc_bspline_3d_scalar~~UsesGraph proc~compute_d2tgc_bspline_3d_scalar compute_d2Tgc_bspline_3d_scalar module~forcad_utils forcad_utils proc~compute_d2tgc_bspline_3d_scalar->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) real(kind=rk), intent(in), contiguous :: knot3 (:) integer, intent(in) :: degree (3) integer, intent(in) :: nc (3) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:) real(kind=rk), intent(out), allocatable :: dTgc (:,:) real(kind=rk), intent(out), allocatable :: Tgc (:) Calls proc~~compute_d2tgc_bspline_3d_scalar~~CallsGraph proc~compute_d2tgc_bspline_3d_scalar compute_d2Tgc_bspline_3d_scalar proc~basis_bspline_2der basis_bspline_2der proc~compute_d2tgc_bspline_3d_scalar->proc~basis_bspline_2der proc~kron kron proc~compute_d2tgc_bspline_3d_scalar->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_d2tgc_bspline_3d_scalar.html"},{"title":"compute_Xg_nurbs_1d – ForCAD","text":"impure function compute_Xg_nurbs_1d(Xt, knot, degree, nc, ng, Xc, Wc) result(Xg) Uses forcad_utils proc~~compute_xg_nurbs_1d~~UsesGraph proc~compute_xg_nurbs_1d compute_Xg_nurbs_1d module~forcad_utils forcad_utils proc~compute_xg_nurbs_1d->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(in), contiguous :: knot (:) integer, intent(in) :: degree integer, intent(in) :: nc integer, intent(in) :: ng real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), contiguous :: Wc (:) Return Value real(kind=rk), allocatable, (:,:) Calls proc~~compute_xg_nurbs_1d~~CallsGraph proc~compute_xg_nurbs_1d compute_Xg_nurbs_1d proc~basis_bspline basis_bspline proc~compute_xg_nurbs_1d->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.","tags":"","loc":"proc/compute_xg_nurbs_1d.html"},{"title":"compute_Xg_nurbs_1d_1point – ForCAD","text":"impure function compute_Xg_nurbs_1d_1point(Xt, knot, degree, nc, Xc, Wc) result(Xg) Uses forcad_utils proc~~compute_xg_nurbs_1d_1point~~UsesGraph proc~compute_xg_nurbs_1d_1point compute_Xg_nurbs_1d_1point module~forcad_utils forcad_utils proc~compute_xg_nurbs_1d_1point->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: Xt real(kind=rk), intent(in), contiguous :: knot (:) integer, intent(in) :: degree integer, intent(in) :: nc real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), contiguous :: Wc (:) Return Value real(kind=rk), allocatable, (:) Calls proc~~compute_xg_nurbs_1d_1point~~CallsGraph proc~compute_xg_nurbs_1d_1point compute_Xg_nurbs_1d_1point proc~basis_bspline basis_bspline proc~compute_xg_nurbs_1d_1point->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.","tags":"","loc":"proc/compute_xg_nurbs_1d_1point.html"},{"title":"compute_Xg_bspline_1d – ForCAD","text":"impure function compute_Xg_bspline_1d(Xt, knot, degree, nc, ng, Xc) result(Xg) Uses forcad_utils proc~~compute_xg_bspline_1d~~UsesGraph proc~compute_xg_bspline_1d compute_Xg_bspline_1d module~forcad_utils forcad_utils proc~compute_xg_bspline_1d->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(in), contiguous :: knot (:) integer, intent(in) :: degree integer, intent(in) :: nc integer, intent(in) :: ng real(kind=rk), intent(in), contiguous :: Xc (:,:) Return Value real(kind=rk), allocatable, (:,:) Calls proc~~compute_xg_bspline_1d~~CallsGraph proc~compute_xg_bspline_1d compute_Xg_bspline_1d proc~basis_bspline basis_bspline proc~compute_xg_bspline_1d->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.","tags":"","loc":"proc/compute_xg_bspline_1d.html"},{"title":"compute_Xg_bspline_1d_1point – ForCAD","text":"impure function compute_Xg_bspline_1d_1point(Xt, knot, degree, nc, Xc) result(Xg) Uses forcad_utils proc~~compute_xg_bspline_1d_1point~~UsesGraph proc~compute_xg_bspline_1d_1point compute_Xg_bspline_1d_1point module~forcad_utils forcad_utils proc~compute_xg_bspline_1d_1point->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: Xt real(kind=rk), intent(in), contiguous :: knot (:) integer, intent(in) :: degree integer, intent(in) :: nc real(kind=rk), intent(in), contiguous :: Xc (:,:) Return Value real(kind=rk), allocatable, (:) Calls proc~~compute_xg_bspline_1d_1point~~CallsGraph proc~compute_xg_bspline_1d_1point compute_Xg_bspline_1d_1point proc~basis_bspline basis_bspline proc~compute_xg_bspline_1d_1point->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.","tags":"","loc":"proc/compute_xg_bspline_1d_1point.html"},{"title":"compute_Tgc_nurbs_1d_vector – ForCAD","text":"impure function compute_Tgc_nurbs_1d_vector(Xt, knot, degree, nc, ng, Wc) result(Tgc) Uses forcad_utils proc~~compute_tgc_nurbs_1d_vector~~UsesGraph proc~compute_tgc_nurbs_1d_vector compute_Tgc_nurbs_1d_vector module~forcad_utils forcad_utils proc~compute_tgc_nurbs_1d_vector->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(in), contiguous :: knot (:) integer, intent(in) :: degree integer, intent(in) :: nc integer, intent(in) :: ng real(kind=rk), intent(in), contiguous :: Wc (:) Return Value real(kind=rk), allocatable, (:,:) Calls proc~~compute_tgc_nurbs_1d_vector~~CallsGraph proc~compute_tgc_nurbs_1d_vector compute_Tgc_nurbs_1d_vector proc~basis_bspline basis_bspline proc~compute_tgc_nurbs_1d_vector->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.","tags":"","loc":"proc/compute_tgc_nurbs_1d_vector.html"},{"title":"compute_Tgc_nurbs_1d_scalar – ForCAD","text":"impure function compute_Tgc_nurbs_1d_scalar(Xt, knot, degree, nc, Wc) result(Tgc) Uses forcad_utils proc~~compute_tgc_nurbs_1d_scalar~~UsesGraph proc~compute_tgc_nurbs_1d_scalar compute_Tgc_nurbs_1d_scalar module~forcad_utils forcad_utils proc~compute_tgc_nurbs_1d_scalar->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: Xt real(kind=rk), intent(in), contiguous :: knot (:) integer, intent(in) :: degree integer, intent(in) :: nc real(kind=rk), intent(in), contiguous :: Wc (:) Return Value real(kind=rk), allocatable, (:) Calls proc~~compute_tgc_nurbs_1d_scalar~~CallsGraph proc~compute_tgc_nurbs_1d_scalar compute_Tgc_nurbs_1d_scalar proc~basis_bspline basis_bspline proc~compute_tgc_nurbs_1d_scalar->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.","tags":"","loc":"proc/compute_tgc_nurbs_1d_scalar.html"},{"title":"compute_Tgc_bspline_1d_vector – ForCAD","text":"impure function compute_Tgc_bspline_1d_vector(Xt, knot, degree, nc, ng) result(Tgc) Uses forcad_utils proc~~compute_tgc_bspline_1d_vector~~UsesGraph proc~compute_tgc_bspline_1d_vector compute_Tgc_bspline_1d_vector module~forcad_utils forcad_utils proc~compute_tgc_bspline_1d_vector->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(in), contiguous :: knot (:) integer, intent(in) :: degree integer, intent(in) :: nc integer, intent(in) :: ng Return Value real(kind=rk), allocatable, (:,:) Calls proc~~compute_tgc_bspline_1d_vector~~CallsGraph proc~compute_tgc_bspline_1d_vector compute_Tgc_bspline_1d_vector proc~basis_bspline basis_bspline proc~compute_tgc_bspline_1d_vector->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.","tags":"","loc":"proc/compute_tgc_bspline_1d_vector.html"},{"title":"compute_Tgc_bspline_1d_scalar – ForCAD","text":"impure function compute_Tgc_bspline_1d_scalar(Xt, knot, degree, nc) result(Tgc) Uses forcad_utils proc~~compute_tgc_bspline_1d_scalar~~UsesGraph proc~compute_tgc_bspline_1d_scalar compute_Tgc_bspline_1d_scalar module~forcad_utils forcad_utils proc~compute_tgc_bspline_1d_scalar->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: Xt real(kind=rk), intent(in), contiguous :: knot (:) integer, intent(in) :: degree integer, intent(in) :: nc Return Value real(kind=rk), allocatable, (:) Calls proc~~compute_tgc_bspline_1d_scalar~~CallsGraph proc~compute_tgc_bspline_1d_scalar compute_Tgc_bspline_1d_scalar proc~basis_bspline basis_bspline proc~compute_tgc_bspline_1d_scalar->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.","tags":"","loc":"proc/compute_tgc_bspline_1d_scalar.html"},{"title":"nearest_point_help_1d – ForCAD","text":"impure function nearest_point_help_1d(ng, Xg, point_Xg) result(distances) Uses forcad_utils proc~~nearest_point_help_1d~~UsesGraph proc~nearest_point_help_1d nearest_point_help_1d module~forcad_utils forcad_utils proc~nearest_point_help_1d->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. Arguments Type Intent Optional Attributes Name integer, intent(in) :: ng real(kind=rk), intent(in), contiguous :: Xg (:,:) real(kind=rk), intent(in), contiguous :: point_Xg (:) Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"proc/nearest_point_help_1d.html"},{"title":"compute_dTgc_nurbs_1d_vector – ForCAD","text":"impure subroutine compute_dTgc_nurbs_1d_vector(Xt, knot, degree, nc, ng, Wc, dTgc, Tgc) Uses forcad_utils proc~~compute_dtgc_nurbs_1d_vector~~UsesGraph proc~compute_dtgc_nurbs_1d_vector compute_dTgc_nurbs_1d_vector module~forcad_utils forcad_utils proc~compute_dtgc_nurbs_1d_vector->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(in), contiguous :: knot (:) integer, intent(in) :: degree integer, intent(in) :: nc integer, intent(in) :: ng real(kind=rk), intent(in), contiguous :: Wc (:) real(kind=rk), intent(out), allocatable :: dTgc (:,:) real(kind=rk), intent(out), allocatable :: Tgc (:,:) Calls proc~~compute_dtgc_nurbs_1d_vector~~CallsGraph proc~compute_dtgc_nurbs_1d_vector compute_dTgc_nurbs_1d_vector proc~basis_bspline_der basis_bspline_der proc~compute_dtgc_nurbs_1d_vector->proc~basis_bspline_der Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_dtgc_nurbs_1d_vector.html"},{"title":"compute_dTgc_nurbs_1d_scalar – ForCAD","text":"impure subroutine compute_dTgc_nurbs_1d_scalar(Xt, knot, degree, nc, Wc, dTgc, Tgc) Uses forcad_utils proc~~compute_dtgc_nurbs_1d_scalar~~UsesGraph proc~compute_dtgc_nurbs_1d_scalar compute_dTgc_nurbs_1d_scalar module~forcad_utils forcad_utils proc~compute_dtgc_nurbs_1d_scalar->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: Xt real(kind=rk), intent(in), contiguous :: knot (:) integer, intent(in) :: degree integer, intent(in) :: nc real(kind=rk), intent(in), contiguous :: Wc (:) real(kind=rk), intent(out), allocatable :: dTgc (:) real(kind=rk), intent(out), allocatable :: Tgc (:) Calls proc~~compute_dtgc_nurbs_1d_scalar~~CallsGraph proc~compute_dtgc_nurbs_1d_scalar compute_dTgc_nurbs_1d_scalar proc~basis_bspline_der basis_bspline_der proc~compute_dtgc_nurbs_1d_scalar->proc~basis_bspline_der Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_dtgc_nurbs_1d_scalar.html"},{"title":"compute_dTgc_bspline_1d_vector – ForCAD","text":"impure subroutine compute_dTgc_bspline_1d_vector(Xt, knot, degree, nc, ng, dTgc, Tgc) Uses forcad_utils proc~~compute_dtgc_bspline_1d_vector~~UsesGraph proc~compute_dtgc_bspline_1d_vector compute_dTgc_bspline_1d_vector module~forcad_utils forcad_utils proc~compute_dtgc_bspline_1d_vector->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(in), contiguous :: knot (:) integer, intent(in) :: degree integer, intent(in) :: nc integer, intent(in) :: ng real(kind=rk), intent(out), allocatable :: dTgc (:,:) real(kind=rk), intent(out), allocatable :: Tgc (:,:) Calls proc~~compute_dtgc_bspline_1d_vector~~CallsGraph proc~compute_dtgc_bspline_1d_vector compute_dTgc_bspline_1d_vector proc~basis_bspline_der basis_bspline_der proc~compute_dtgc_bspline_1d_vector->proc~basis_bspline_der Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_dtgc_bspline_1d_vector.html"},{"title":"compute_dTgc_bspline_1d_scalar – ForCAD","text":"impure subroutine compute_dTgc_bspline_1d_scalar(Xt, knot, degree, nc, dTgc, Tgc) Uses forcad_utils proc~~compute_dtgc_bspline_1d_scalar~~UsesGraph proc~compute_dtgc_bspline_1d_scalar compute_dTgc_bspline_1d_scalar module~forcad_utils forcad_utils proc~compute_dtgc_bspline_1d_scalar->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: Xt real(kind=rk), intent(in), contiguous :: knot (:) integer, intent(in) :: degree integer, intent(in) :: nc real(kind=rk), intent(out), allocatable :: dTgc (:) real(kind=rk), intent(out), allocatable :: Tgc (:) Calls proc~~compute_dtgc_bspline_1d_scalar~~CallsGraph proc~compute_dtgc_bspline_1d_scalar compute_dTgc_bspline_1d_scalar proc~basis_bspline_der basis_bspline_der proc~compute_dtgc_bspline_1d_scalar->proc~basis_bspline_der Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_dtgc_bspline_1d_scalar.html"},{"title":"compute_d2Tgc_nurbs_1d_vector – ForCAD","text":"impure subroutine compute_d2Tgc_nurbs_1d_vector(Xt, knot, degree, nc, ng, Wc, d2Tgc, dTgc, Tgc) Uses forcad_utils proc~~compute_d2tgc_nurbs_1d_vector~~UsesGraph proc~compute_d2tgc_nurbs_1d_vector compute_d2Tgc_nurbs_1d_vector module~forcad_utils forcad_utils proc~compute_d2tgc_nurbs_1d_vector->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(in), contiguous :: knot (:) integer, intent(in) :: degree integer, intent(in) :: nc integer, intent(in) :: ng real(kind=rk), intent(in), contiguous :: Wc (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:) real(kind=rk), intent(out), allocatable :: dTgc (:,:) real(kind=rk), intent(out), allocatable :: Tgc (:,:) Calls proc~~compute_d2tgc_nurbs_1d_vector~~CallsGraph proc~compute_d2tgc_nurbs_1d_vector compute_d2Tgc_nurbs_1d_vector proc~basis_bspline_2der basis_bspline_2der proc~compute_d2tgc_nurbs_1d_vector->proc~basis_bspline_2der Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_d2tgc_nurbs_1d_vector.html"},{"title":"compute_d2Tgc_nurbs_1d_scalar – ForCAD","text":"impure subroutine compute_d2Tgc_nurbs_1d_scalar(Xt, knot, degree, nc, Wc, d2Tgc, dTgc, Tgc) Uses forcad_utils proc~~compute_d2tgc_nurbs_1d_scalar~~UsesGraph proc~compute_d2tgc_nurbs_1d_scalar compute_d2Tgc_nurbs_1d_scalar module~forcad_utils forcad_utils proc~compute_d2tgc_nurbs_1d_scalar->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: Xt real(kind=rk), intent(in), contiguous :: knot (:) integer, intent(in) :: degree integer, intent(in) :: nc real(kind=rk), intent(in), contiguous :: Wc (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:) real(kind=rk), intent(out), allocatable :: dTgc (:) real(kind=rk), intent(out), allocatable :: Tgc (:) Calls proc~~compute_d2tgc_nurbs_1d_scalar~~CallsGraph proc~compute_d2tgc_nurbs_1d_scalar compute_d2Tgc_nurbs_1d_scalar proc~basis_bspline_2der basis_bspline_2der proc~compute_d2tgc_nurbs_1d_scalar->proc~basis_bspline_2der Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_d2tgc_nurbs_1d_scalar.html"},{"title":"compute_d2Tgc_bspline_1d_vector – ForCAD","text":"impure subroutine compute_d2Tgc_bspline_1d_vector(Xt, knot, degree, nc, ng, d2Tgc, dTgc, Tgc) Uses forcad_utils proc~~compute_d2tgc_bspline_1d_vector~~UsesGraph proc~compute_d2tgc_bspline_1d_vector compute_d2Tgc_bspline_1d_vector module~forcad_utils forcad_utils proc~compute_d2tgc_bspline_1d_vector->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(in), contiguous :: knot (:) integer, intent(in) :: degree integer, intent(in) :: nc integer, intent(in) :: ng real(kind=rk), intent(out), allocatable :: d2Tgc (:,:) real(kind=rk), intent(out), allocatable :: dTgc (:,:) real(kind=rk), intent(out), allocatable :: Tgc (:,:) Calls proc~~compute_d2tgc_bspline_1d_vector~~CallsGraph proc~compute_d2tgc_bspline_1d_vector compute_d2Tgc_bspline_1d_vector proc~basis_bspline_2der basis_bspline_2der proc~compute_d2tgc_bspline_1d_vector->proc~basis_bspline_2der Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_d2tgc_bspline_1d_vector.html"},{"title":"compute_d2Tgc_bspline_1d_scalar – ForCAD","text":"impure subroutine compute_d2Tgc_bspline_1d_scalar(Xt, knot, degree, nc, d2Tgc, dTgc, Tgc) Uses forcad_utils proc~~compute_d2tgc_bspline_1d_scalar~~UsesGraph proc~compute_d2tgc_bspline_1d_scalar compute_d2Tgc_bspline_1d_scalar module~forcad_utils forcad_utils proc~compute_d2tgc_bspline_1d_scalar->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: Xt real(kind=rk), intent(in), contiguous :: knot (:) integer, intent(in) :: degree integer, intent(in) :: nc real(kind=rk), intent(out), allocatable :: d2Tgc (:) real(kind=rk), intent(out), allocatable :: dTgc (:) real(kind=rk), intent(out), allocatable :: Tgc (:) Calls proc~~compute_d2tgc_bspline_1d_scalar~~CallsGraph proc~compute_d2tgc_bspline_1d_scalar compute_d2Tgc_bspline_1d_scalar proc~basis_bspline_2der basis_bspline_2der proc~compute_d2tgc_bspline_1d_scalar->proc~basis_bspline_2der Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_d2tgc_bspline_1d_scalar.html"},{"title":"compute_Xg_nurbs_2d – ForCAD","text":"impure function compute_Xg_nurbs_2d(Xt, knot1, knot2, degree, nc, ng, Xc, Wc) result(Xg) Uses forcad_utils proc~~compute_xg_nurbs_2d~~UsesGraph proc~compute_xg_nurbs_2d compute_Xg_nurbs_2d module~forcad_utils forcad_utils proc~compute_xg_nurbs_2d->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:,:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) integer, intent(in) :: degree (2) integer, intent(in) :: nc (2) integer, intent(in) :: ng (2) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), contiguous :: Wc (:) Return Value real(kind=rk), allocatable, (:,:) Calls proc~~compute_xg_nurbs_2d~~CallsGraph proc~compute_xg_nurbs_2d compute_Xg_nurbs_2d proc~basis_bspline basis_bspline proc~compute_xg_nurbs_2d->proc~basis_bspline proc~kron kron proc~compute_xg_nurbs_2d->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_xg_nurbs_2d.html"},{"title":"compute_Xg_nurbs_2d_1point – ForCAD","text":"impure function compute_Xg_nurbs_2d_1point(Xt, knot1, knot2, degree, nc, Xc, Wc) result(Xg) Uses forcad_utils proc~~compute_xg_nurbs_2d_1point~~UsesGraph proc~compute_xg_nurbs_2d_1point compute_Xg_nurbs_2d_1point module~forcad_utils forcad_utils proc~compute_xg_nurbs_2d_1point->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) integer, intent(in) :: degree (2) integer, intent(in) :: nc (2) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), contiguous :: Wc (:) Return Value real(kind=rk), allocatable, (:) Calls proc~~compute_xg_nurbs_2d_1point~~CallsGraph proc~compute_xg_nurbs_2d_1point compute_Xg_nurbs_2d_1point proc~basis_bspline basis_bspline proc~compute_xg_nurbs_2d_1point->proc~basis_bspline proc~kron kron proc~compute_xg_nurbs_2d_1point->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_xg_nurbs_2d_1point.html"},{"title":"compute_Xg_bspline_2d – ForCAD","text":"impure function compute_Xg_bspline_2d(Xt, knot1, knot2, degree, nc, ng, Xc) result(Xg) Uses forcad_utils proc~~compute_xg_bspline_2d~~UsesGraph proc~compute_xg_bspline_2d compute_Xg_bspline_2d module~forcad_utils forcad_utils proc~compute_xg_bspline_2d->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:,:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) integer, intent(in) :: degree (2) integer, intent(in) :: nc (2) integer, intent(in) :: ng (2) real(kind=rk), intent(in), contiguous :: Xc (:,:) Return Value real(kind=rk), allocatable, (:,:) Calls proc~~compute_xg_bspline_2d~~CallsGraph proc~compute_xg_bspline_2d compute_Xg_bspline_2d proc~basis_bspline basis_bspline proc~compute_xg_bspline_2d->proc~basis_bspline proc~kron kron proc~compute_xg_bspline_2d->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_xg_bspline_2d.html"},{"title":"compute_Xg_bspline_2d_1point – ForCAD","text":"impure function compute_Xg_bspline_2d_1point(Xt, knot1, knot2, degree, nc, Xc) result(Xg) Uses forcad_utils proc~~compute_xg_bspline_2d_1point~~UsesGraph proc~compute_xg_bspline_2d_1point compute_Xg_bspline_2d_1point module~forcad_utils forcad_utils proc~compute_xg_bspline_2d_1point->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) integer, intent(in) :: degree (2) integer, intent(in) :: nc (2) real(kind=rk), intent(in), contiguous :: Xc (:,:) Return Value real(kind=rk), allocatable, (:) Calls proc~~compute_xg_bspline_2d_1point~~CallsGraph proc~compute_xg_bspline_2d_1point compute_Xg_bspline_2d_1point proc~basis_bspline basis_bspline proc~compute_xg_bspline_2d_1point->proc~basis_bspline proc~kron kron proc~compute_xg_bspline_2d_1point->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_xg_bspline_2d_1point.html"},{"title":"compute_Tgc_nurbs_2d_vector – ForCAD","text":"impure function compute_Tgc_nurbs_2d_vector(Xt, knot1, knot2, degree, nc, ng, Wc) result(Tgc) Uses forcad_utils proc~~compute_tgc_nurbs_2d_vector~~UsesGraph proc~compute_tgc_nurbs_2d_vector compute_Tgc_nurbs_2d_vector module~forcad_utils forcad_utils proc~compute_tgc_nurbs_2d_vector->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:,:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) integer, intent(in) :: degree (2) integer, intent(in) :: nc (2) integer, intent(in) :: ng (2) real(kind=rk), intent(in), contiguous :: Wc (:) Return Value real(kind=rk), allocatable, (:,:) Calls proc~~compute_tgc_nurbs_2d_vector~~CallsGraph proc~compute_tgc_nurbs_2d_vector compute_Tgc_nurbs_2d_vector proc~basis_bspline basis_bspline proc~compute_tgc_nurbs_2d_vector->proc~basis_bspline proc~kron kron proc~compute_tgc_nurbs_2d_vector->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_tgc_nurbs_2d_vector.html"},{"title":"compute_Tgc_nurbs_2d_scalar – ForCAD","text":"impure function compute_Tgc_nurbs_2d_scalar(Xt, knot1, knot2, degree, nc, Wc) result(Tgc) Uses forcad_utils proc~~compute_tgc_nurbs_2d_scalar~~UsesGraph proc~compute_tgc_nurbs_2d_scalar compute_Tgc_nurbs_2d_scalar module~forcad_utils forcad_utils proc~compute_tgc_nurbs_2d_scalar->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) integer, intent(in) :: degree (2) integer, intent(in) :: nc (2) real(kind=rk), intent(in), contiguous :: Wc (:) Return Value real(kind=rk), allocatable, (:) Calls proc~~compute_tgc_nurbs_2d_scalar~~CallsGraph proc~compute_tgc_nurbs_2d_scalar compute_Tgc_nurbs_2d_scalar proc~basis_bspline basis_bspline proc~compute_tgc_nurbs_2d_scalar->proc~basis_bspline proc~kron kron proc~compute_tgc_nurbs_2d_scalar->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_tgc_nurbs_2d_scalar.html"},{"title":"compute_Tgc_bspline_2d_vector – ForCAD","text":"impure function compute_Tgc_bspline_2d_vector(Xt, knot1, knot2, degree, nc, ng) result(Tgc) Uses forcad_utils proc~~compute_tgc_bspline_2d_vector~~UsesGraph proc~compute_tgc_bspline_2d_vector compute_Tgc_bspline_2d_vector module~forcad_utils forcad_utils proc~compute_tgc_bspline_2d_vector->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:,:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) integer, intent(in) :: degree (2) integer, intent(in) :: nc (2) integer, intent(in) :: ng (2) Return Value real(kind=rk), allocatable, (:,:) Calls proc~~compute_tgc_bspline_2d_vector~~CallsGraph proc~compute_tgc_bspline_2d_vector compute_Tgc_bspline_2d_vector proc~basis_bspline basis_bspline proc~compute_tgc_bspline_2d_vector->proc~basis_bspline proc~kron kron proc~compute_tgc_bspline_2d_vector->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_tgc_bspline_2d_vector.html"},{"title":"compute_Tgc_bspline_2d_scalar – ForCAD","text":"impure function compute_Tgc_bspline_2d_scalar(Xt, knot1, knot2, degree, nc) result(Tgc) Uses forcad_utils proc~~compute_tgc_bspline_2d_scalar~~UsesGraph proc~compute_tgc_bspline_2d_scalar compute_Tgc_bspline_2d_scalar module~forcad_utils forcad_utils proc~compute_tgc_bspline_2d_scalar->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) integer, intent(in) :: degree (2) integer, intent(in) :: nc (2) Return Value real(kind=rk), allocatable, (:) Calls proc~~compute_tgc_bspline_2d_scalar~~CallsGraph proc~compute_tgc_bspline_2d_scalar compute_Tgc_bspline_2d_scalar proc~basis_bspline basis_bspline proc~compute_tgc_bspline_2d_scalar->proc~basis_bspline proc~kron kron proc~compute_tgc_bspline_2d_scalar->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_tgc_bspline_2d_scalar.html"},{"title":"nearest_point_help_2d – ForCAD","text":"impure function nearest_point_help_2d(ng, Xg, point_Xg) result(distances) Uses forcad_utils proc~~nearest_point_help_2d~~UsesGraph proc~nearest_point_help_2d nearest_point_help_2d module~forcad_utils forcad_utils proc~nearest_point_help_2d->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. Arguments Type Intent Optional Attributes Name integer, intent(in) :: ng (2) real(kind=rk), intent(in), contiguous :: Xg (:,:) real(kind=rk), intent(in), contiguous :: point_Xg (:) Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"proc/nearest_point_help_2d.html"},{"title":"compute_dTgc_nurbs_2d_vector – ForCAD","text":"impure subroutine compute_dTgc_nurbs_2d_vector(Xt, knot1, knot2, degree, nc, ng, Wc, dTgc, Tgc) Uses forcad_utils proc~~compute_dtgc_nurbs_2d_vector~~UsesGraph proc~compute_dtgc_nurbs_2d_vector compute_dTgc_nurbs_2d_vector module~forcad_utils forcad_utils proc~compute_dtgc_nurbs_2d_vector->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:,:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) integer, intent(in) :: degree (2) integer, intent(in) :: nc (2) integer, intent(in) :: ng (2) real(kind=rk), intent(in), contiguous :: Wc (:) real(kind=rk), intent(out), allocatable :: dTgc (:,:,:) real(kind=rk), intent(out), allocatable :: Tgc (:,:) Calls proc~~compute_dtgc_nurbs_2d_vector~~CallsGraph proc~compute_dtgc_nurbs_2d_vector compute_dTgc_nurbs_2d_vector proc~basis_bspline_der basis_bspline_der proc~compute_dtgc_nurbs_2d_vector->proc~basis_bspline_der proc~kron kron proc~compute_dtgc_nurbs_2d_vector->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_dtgc_nurbs_2d_vector.html"},{"title":"compute_dTgc_nurbs_2d_scalar – ForCAD","text":"impure subroutine compute_dTgc_nurbs_2d_scalar(Xt, knot1, knot2, degree, nc, Wc, dTgc, Tgc) Uses forcad_utils proc~~compute_dtgc_nurbs_2d_scalar~~UsesGraph proc~compute_dtgc_nurbs_2d_scalar compute_dTgc_nurbs_2d_scalar module~forcad_utils forcad_utils proc~compute_dtgc_nurbs_2d_scalar->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) integer, intent(in) :: degree (2) integer, intent(in) :: nc (2) real(kind=rk), intent(in), contiguous :: Wc (:) real(kind=rk), intent(out), allocatable :: dTgc (:,:) real(kind=rk), intent(out), allocatable :: Tgc (:) Calls proc~~compute_dtgc_nurbs_2d_scalar~~CallsGraph proc~compute_dtgc_nurbs_2d_scalar compute_dTgc_nurbs_2d_scalar proc~basis_bspline_der basis_bspline_der proc~compute_dtgc_nurbs_2d_scalar->proc~basis_bspline_der proc~kron kron proc~compute_dtgc_nurbs_2d_scalar->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_dtgc_nurbs_2d_scalar.html"},{"title":"compute_dTgc_bspline_2d_vector – ForCAD","text":"impure subroutine compute_dTgc_bspline_2d_vector(Xt, knot1, knot2, degree, nc, ng, dTgc, Tgc) Uses forcad_utils proc~~compute_dtgc_bspline_2d_vector~~UsesGraph proc~compute_dtgc_bspline_2d_vector compute_dTgc_bspline_2d_vector module~forcad_utils forcad_utils proc~compute_dtgc_bspline_2d_vector->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:,:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) integer, intent(in) :: degree (2) integer, intent(in) :: nc (2) integer, intent(in) :: ng (2) real(kind=rk), intent(out), allocatable :: dTgc (:,:,:) real(kind=rk), intent(out), allocatable :: Tgc (:,:) Calls proc~~compute_dtgc_bspline_2d_vector~~CallsGraph proc~compute_dtgc_bspline_2d_vector compute_dTgc_bspline_2d_vector proc~basis_bspline_der basis_bspline_der proc~compute_dtgc_bspline_2d_vector->proc~basis_bspline_der proc~kron kron proc~compute_dtgc_bspline_2d_vector->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_dtgc_bspline_2d_vector.html"},{"title":"compute_dTgc_bspline_2d_scalar – ForCAD","text":"impure subroutine compute_dTgc_bspline_2d_scalar(Xt, knot1, knot2, degree, nc, dTgc, Tgc) Uses forcad_utils proc~~compute_dtgc_bspline_2d_scalar~~UsesGraph proc~compute_dtgc_bspline_2d_scalar compute_dTgc_bspline_2d_scalar module~forcad_utils forcad_utils proc~compute_dtgc_bspline_2d_scalar->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) integer, intent(in) :: degree (2) integer, intent(in) :: nc (2) real(kind=rk), intent(out), allocatable :: dTgc (:,:) real(kind=rk), intent(out), allocatable :: Tgc (:) Calls proc~~compute_dtgc_bspline_2d_scalar~~CallsGraph proc~compute_dtgc_bspline_2d_scalar compute_dTgc_bspline_2d_scalar proc~basis_bspline_der basis_bspline_der proc~compute_dtgc_bspline_2d_scalar->proc~basis_bspline_der proc~kron kron proc~compute_dtgc_bspline_2d_scalar->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_dtgc_bspline_2d_scalar.html"},{"title":"compute_d2Tgc_nurbs_2d_vector – ForCAD","text":"impure subroutine compute_d2Tgc_nurbs_2d_vector(Xt, knot1, knot2, degree, nc, ng, Wc, d2Tgc, dTgc, Tgc) Uses forcad_utils proc~~compute_d2tgc_nurbs_2d_vector~~UsesGraph proc~compute_d2tgc_nurbs_2d_vector compute_d2Tgc_nurbs_2d_vector module~forcad_utils forcad_utils proc~compute_d2tgc_nurbs_2d_vector->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:,:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) integer, intent(in) :: degree (2) integer, intent(in) :: nc (2) integer, intent(in) :: ng (2) real(kind=rk), intent(in), contiguous :: Wc (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:,:) real(kind=rk), intent(out), allocatable :: dTgc (:,:,:) real(kind=rk), intent(out), allocatable :: Tgc (:,:) Calls proc~~compute_d2tgc_nurbs_2d_vector~~CallsGraph proc~compute_d2tgc_nurbs_2d_vector compute_d2Tgc_nurbs_2d_vector proc~basis_bspline_2der basis_bspline_2der proc~compute_d2tgc_nurbs_2d_vector->proc~basis_bspline_2der proc~kron kron proc~compute_d2tgc_nurbs_2d_vector->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_d2tgc_nurbs_2d_vector.html"},{"title":"compute_d2Tgc_nurbs_2d_scalar – ForCAD","text":"impure subroutine compute_d2Tgc_nurbs_2d_scalar(Xt, knot1, knot2, degree, nc, Wc, d2Tgc, dTgc, Tgc) Uses forcad_utils proc~~compute_d2tgc_nurbs_2d_scalar~~UsesGraph proc~compute_d2tgc_nurbs_2d_scalar compute_d2Tgc_nurbs_2d_scalar module~forcad_utils forcad_utils proc~compute_d2tgc_nurbs_2d_scalar->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) integer, intent(in) :: degree (2) integer, intent(in) :: nc (2) real(kind=rk), intent(in), contiguous :: Wc (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:) real(kind=rk), intent(out), allocatable :: dTgc (:,:) real(kind=rk), intent(out), allocatable :: Tgc (:) Calls proc~~compute_d2tgc_nurbs_2d_scalar~~CallsGraph proc~compute_d2tgc_nurbs_2d_scalar compute_d2Tgc_nurbs_2d_scalar proc~basis_bspline_2der basis_bspline_2der proc~compute_d2tgc_nurbs_2d_scalar->proc~basis_bspline_2der proc~kron kron proc~compute_d2tgc_nurbs_2d_scalar->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_d2tgc_nurbs_2d_scalar.html"},{"title":"compute_d2Tgc_bspline_2d_vector – ForCAD","text":"impure subroutine compute_d2Tgc_bspline_2d_vector(Xt, knot1, knot2, degree, nc, ng, d2Tgc, dTgc, Tgc) Uses forcad_utils proc~~compute_d2tgc_bspline_2d_vector~~UsesGraph proc~compute_d2tgc_bspline_2d_vector compute_d2Tgc_bspline_2d_vector module~forcad_utils forcad_utils proc~compute_d2tgc_bspline_2d_vector->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:,:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) integer, intent(in) :: degree (2) integer, intent(in) :: nc (2) integer, intent(in) :: ng (2) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:,:) real(kind=rk), intent(out), allocatable :: dTgc (:,:,:) real(kind=rk), intent(out), allocatable :: Tgc (:,:) Calls proc~~compute_d2tgc_bspline_2d_vector~~CallsGraph proc~compute_d2tgc_bspline_2d_vector compute_d2Tgc_bspline_2d_vector proc~basis_bspline_2der basis_bspline_2der proc~compute_d2tgc_bspline_2d_vector->proc~basis_bspline_2der proc~kron kron proc~compute_d2tgc_bspline_2d_vector->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_d2tgc_bspline_2d_vector.html"},{"title":"compute_d2Tgc_bspline_2d_scalar – ForCAD","text":"impure subroutine compute_d2Tgc_bspline_2d_scalar(Xt, knot1, knot2, degree, nc, d2Tgc, dTgc, Tgc) Uses forcad_utils proc~~compute_d2tgc_bspline_2d_scalar~~UsesGraph proc~compute_d2tgc_bspline_2d_scalar compute_d2Tgc_bspline_2d_scalar module~forcad_utils forcad_utils proc~compute_d2tgc_bspline_2d_scalar->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) integer, intent(in) :: degree (2) integer, intent(in) :: nc (2) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:) real(kind=rk), intent(out), allocatable :: dTgc (:,:) real(kind=rk), intent(out), allocatable :: Tgc (:) Calls proc~~compute_d2tgc_bspline_2d_scalar~~CallsGraph proc~compute_d2tgc_bspline_2d_scalar compute_d2Tgc_bspline_2d_scalar proc~basis_bspline_2der basis_bspline_2der proc~compute_d2tgc_bspline_2d_scalar->proc~basis_bspline_2der proc~kron kron proc~compute_d2tgc_bspline_2d_scalar->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_d2tgc_bspline_2d_scalar.html"},{"title":"cmp_Xg – ForCAD","text":"private pure function cmp_Xg(this, Xt) result(Xg) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this real(kind=rk), intent(in), contiguous :: Xt (:) Return Value real(kind=rk), allocatable, (:) Calls proc~~cmp_xg~~CallsGraph proc~cmp_xg nurbs_volume%cmp_Xg interface~compute_xg compute_Xg proc~cmp_xg->interface~compute_xg proc~is_rational nurbs_volume%is_rational proc~cmp_xg->proc~is_rational Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~cmp_xg~~CalledByGraph proc~cmp_xg nurbs_volume%cmp_Xg proc~nearest_point2 nurbs_volume%nearest_point2 proc~nearest_point2->proc~cmp_xg program~nearest_point_3d nearest_point_3d program~nearest_point_3d->proc~nearest_point2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_xg.html"},{"title":"cmp_degreeFace – ForCAD","text":"private pure function cmp_degreeFace(this, face) result(degree) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: face Return Value integer, (3) Called by proc~~cmp_degreeface~~CalledByGraph proc~cmp_degreeface nurbs_volume%cmp_degreeFace program~example3_volume example3_volume program~example3_volume->proc~cmp_degreeface Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_degreeface.html"},{"title":"cmp_elem – ForCAD","text":"private pure function cmp_elem(this) result(elemConn) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value integer, allocatable, (:,:) Calls proc~~cmp_elem~~CallsGraph proc~cmp_elem nurbs_volume%cmp_elem interface~elemconn_cn elemConn_Cn proc~cmp_elem->interface~elemconn_cn interface~unique unique proc~cmp_elem->interface~unique proc~get_multiplicity nurbs_volume%get_multiplicity proc~cmp_elem->proc~get_multiplicity proc~cmp_elemconn_cn_l cmp_elemConn_Cn_L interface~elemconn_cn->proc~cmp_elemconn_cn_l proc~cmp_elemconn_cn_s cmp_elemConn_Cn_S interface~elemconn_cn->proc~cmp_elemconn_cn_s proc~cmp_elemconn_cn_v cmp_elemConn_Cn_V interface~elemconn_cn->proc~cmp_elemconn_cn_v proc~unique_integer unique_integer interface~unique->proc~unique_integer proc~unique_real unique_real interface~unique->proc~unique_real interface~compute_multiplicity compute_multiplicity proc~get_multiplicity->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~cmp_elem~~CalledByGraph proc~cmp_elem nurbs_volume%cmp_elem program~example3_volume example3_volume program~example3_volume->proc~cmp_elem Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_elem.html"},{"title":"cmp_elemFace – ForCAD","text":"private pure function cmp_elemFace(this, elem, face) result(elemConn) number of nodes in each direction Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: elem integer, intent(in) :: face Return Value integer, allocatable, (:) Called by proc~~cmp_elemface~~CalledByGraph proc~cmp_elemface nurbs_volume%cmp_elemFace program~example3_volume example3_volume program~example3_volume->proc~cmp_elemface Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_elemface.html"},{"title":"cmp_elemFace_Xc_vis – ForCAD","text":"private pure function cmp_elemFace_Xc_vis(this, elem, face) result(elemConn) number of nodes in each direction Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: elem integer, intent(in) :: face Return Value integer, allocatable, (:)","tags":"","loc":"proc/cmp_elemface_xc_vis.html"},{"title":"cmp_elemFace_Xg_vis – ForCAD","text":"private pure function cmp_elemFace_Xg_vis(this, elem, face) result(elemConn) number of nodes in each direction Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: elem integer, intent(in) :: face Return Value integer, allocatable, (:)","tags":"","loc":"proc/cmp_elemface_xg_vis.html"},{"title":"cmp_elem_Xc_vis – ForCAD","text":"private pure function cmp_elem_Xc_vis(this, p) result(elemConn) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in), optional, contiguous :: p (:) Return Value integer, allocatable, (:,:) Calls proc~~cmp_elem_xc_vis~~CallsGraph proc~cmp_elem_xc_vis nurbs_volume%cmp_elem_Xc_vis interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xc_vis->interface~elemconn_c0 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v 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~~cmp_elem_xc_vis~~CalledByGraph proc~cmp_elem_xc_vis nurbs_volume%cmp_elem_Xc_vis proc~export_xc nurbs_volume%export_Xc proc~export_xc->proc~cmp_elem_xc_vis program~example3_volume example3_volume program~example3_volume->proc~export_xc program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~export_xc program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->proc~export_xc program~shape_c_3d shape_C_3d program~shape_c_3d->proc~export_xc program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~export_xc program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~export_xc program~shape_ring_3d shape_ring_3d program~shape_ring_3d->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/cmp_elem_xc_vis.html"},{"title":"cmp_elem_Xg_vis – ForCAD","text":"private pure function cmp_elem_Xg_vis(this, p) result(elemConn) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in), optional, contiguous :: p (:) Return Value integer, allocatable, (:,:) Calls proc~~cmp_elem_xg_vis~~CallsGraph proc~cmp_elem_xg_vis nurbs_volume%cmp_elem_Xg_vis interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xg_vis->interface~elemconn_c0 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v 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~~cmp_elem_xg_vis~~CalledByGraph proc~cmp_elem_xg_vis nurbs_volume%cmp_elem_Xg_vis proc~export_xg nurbs_volume%export_Xg proc~export_xg->proc~cmp_elem_xg_vis program~example3_volume example3_volume program~example3_volume->proc~export_xg program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~export_xg program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->proc~export_xg program~shape_c_3d shape_C_3d program~shape_c_3d->proc~export_xg program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~export_xg program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~export_xg program~shape_ring_3d shape_ring_3d program~shape_ring_3d->proc~export_xg Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/cmp_elem_xg_vis.html"},{"title":"get_Wc_all – ForCAD","text":"private pure function get_Wc_all(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, (:) Called by proc~~get_wc_all~~CalledByGraph proc~get_wc_all nurbs_volume%get_Wc_all none~get_wc nurbs_volume%get_Wc none~get_wc->proc~get_wc_all proc~modify_wc nurbs_volume%modify_Wc proc~modify_wc->none~get_wc proc~modify_xc nurbs_volume%modify_Xc proc~modify_xc->none~get_wc Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_wc_all.html"},{"title":"get_Wci – ForCAD","text":"private pure function get_Wci(this, n) result(Wc) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk) Called by proc~~get_wci~~CalledByGraph proc~get_wci nurbs_volume%get_Wci none~get_wc nurbs_volume%get_Wc none~get_wc->proc~get_wci proc~modify_wc nurbs_volume%modify_Wc proc~modify_wc->none~get_wc proc~modify_xc nurbs_volume%modify_Xc proc~modify_xc->none~get_wc Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_wci.html"},{"title":"get_Xc_all – ForCAD","text":"private pure function get_Xc_all(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, (:,:) Called by proc~~get_xc_all~~CalledByGraph proc~get_xc_all nurbs_volume%get_Xc_all none~get_xc nurbs_volume%get_Xc none~get_xc->proc~get_xc_all proc~modify_wc nurbs_volume%modify_Wc proc~modify_wc->none~get_xc proc~modify_xc nurbs_volume%modify_Xc proc~modify_xc->none~get_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_xc_all.html"},{"title":"get_Xci – ForCAD","text":"private pure function get_Xci(this, n) result(Xc) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk), allocatable, (:) Called by proc~~get_xci~~CalledByGraph proc~get_xci nurbs_volume%get_Xci none~get_xc nurbs_volume%get_Xc none~get_xc->proc~get_xci proc~modify_wc nurbs_volume%modify_Wc proc~modify_wc->none~get_xc proc~modify_xc nurbs_volume%modify_Xc proc~modify_xc->none~get_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_xci.html"},{"title":"get_Xcid – ForCAD","text":"private pure function get_Xcid(this, n, dir) result(Xc) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: n integer, intent(in) :: dir Return Value real(kind=rk) Called by proc~~get_xcid~~CalledByGraph proc~get_xcid nurbs_volume%get_Xcid none~get_xc nurbs_volume%get_Xc none~get_xc->proc~get_xcid proc~modify_wc nurbs_volume%modify_Wc proc~modify_wc->none~get_xc proc~modify_xc nurbs_volume%modify_Xc proc~modify_xc->none~get_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_xcid.html"},{"title":"get_Xg_all – ForCAD","text":"private pure function get_Xg_all(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_all.html"},{"title":"get_Xgi – ForCAD","text":"private pure function get_Xgi(this, n) result(Xg) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"proc/get_xgi.html"},{"title":"get_Xgid – ForCAD","text":"private pure function get_Xgid(this, n, dir) result(Xg) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: n integer, intent(in) :: dir Return Value real(kind=rk)","tags":"","loc":"proc/get_xgid.html"},{"title":"get_Xt – ForCAD","text":"private pure function get_Xt(this, dir) result(Xt) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: dir Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"proc/get_xt.html"},{"title":"get_continuity – ForCAD","text":"private pure function get_continuity(this, dir) result(c) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: dir Return Value integer, allocatable, (:) Calls proc~~get_continuity~~CallsGraph proc~get_continuity nurbs_volume%get_continuity interface~compute_multiplicity compute_multiplicity proc~get_continuity->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_degree_all – ForCAD","text":"private pure function get_degree_all(this) result(degree) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value integer, (3) Called by proc~~get_degree_all~~CalledByGraph proc~get_degree_all nurbs_volume%get_degree_all none~get_degree nurbs_volume%get_degree none~get_degree->proc~get_degree_all program~example3_volume example3_volume program~example3_volume->none~get_degree Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_degree_all.html"},{"title":"get_degree_dir – ForCAD","text":"private pure function get_degree_dir(this, dir) result(degree) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: dir Return Value integer Called by proc~~get_degree_dir~~CalledByGraph proc~get_degree_dir nurbs_volume%get_degree_dir none~get_degree nurbs_volume%get_degree none~get_degree->proc~get_degree_dir program~example3_volume example3_volume program~example3_volume->none~get_degree Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_degree_dir.html"},{"title":"get_elem – ForCAD","text":"private pure function get_elem(this) result(elemConn) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value integer, allocatable, (:,:)","tags":"","loc":"proc/get_elem.html"},{"title":"get_elem_Xc_vis – ForCAD","text":"private pure function get_elem_Xc_vis(this) result(elemConn) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value integer, allocatable, (:,:)","tags":"","loc":"proc/get_elem_xc_vis.html"},{"title":"get_elem_Xg_vis – ForCAD","text":"private pure function get_elem_Xg_vis(this) result(elemConn) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value integer, allocatable, (:,:)","tags":"","loc":"proc/get_elem_xg_vis.html"},{"title":"get_knot_all – ForCAD","text":"private pure function get_knot_all(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, (:) Called by proc~~get_knot_all~~CalledByGraph proc~get_knot_all nurbs_volume%get_knot_all none~get_knot nurbs_volume%get_knot none~get_knot->proc~get_knot_all proc~elevate_degree nurbs_volume%elevate_degree proc~elevate_degree->none~get_knot proc~insert_knots nurbs_volume%insert_knots proc~insert_knots->none~get_knot proc~modify_wc nurbs_volume%modify_Wc proc~modify_wc->none~get_knot proc~modify_xc nurbs_volume%modify_Xc proc~modify_xc->none~get_knot proc~remove_knots nurbs_volume%remove_knots proc~remove_knots->none~get_knot program~example3_volume example3_volume program~example3_volume->none~get_knot program~example3_volume->proc~elevate_degree program~example3_volume->proc~insert_knots program~example3_volume->proc~remove_knots Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_knot_all.html"},{"title":"get_knoti – ForCAD","text":"private pure function get_knoti(this, dir, i) result(knot) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: dir integer, intent(in) :: i Return Value real(kind=rk) Called by proc~~get_knoti~~CalledByGraph proc~get_knoti nurbs_volume%get_knoti none~get_knot nurbs_volume%get_knot none~get_knot->proc~get_knoti proc~elevate_degree nurbs_volume%elevate_degree proc~elevate_degree->none~get_knot proc~insert_knots nurbs_volume%insert_knots proc~insert_knots->none~get_knot proc~modify_wc nurbs_volume%modify_Wc proc~modify_wc->none~get_knot proc~modify_xc nurbs_volume%modify_Xc proc~modify_xc->none~get_knot proc~remove_knots nurbs_volume%remove_knots proc~remove_knots->none~get_knot program~example3_volume example3_volume program~example3_volume->none~get_knot program~example3_volume->proc~elevate_degree program~example3_volume->proc~insert_knots program~example3_volume->proc~remove_knots Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_knoti.html"},{"title":"get_multiplicity – ForCAD","text":"private pure function get_multiplicity(this, dir) result(m) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: dir Return Value integer, allocatable, (:) Calls proc~~get_multiplicity~~CallsGraph proc~get_multiplicity nurbs_volume%get_multiplicity interface~compute_multiplicity compute_multiplicity proc~get_multiplicity->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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 nurbs_volume%get_multiplicity proc~cmp_degree nurbs_volume%cmp_degree proc~cmp_degree->proc~get_multiplicity proc~cmp_elem nurbs_volume%cmp_elem proc~cmp_elem->proc~get_multiplicity proc~set1 nurbs_volume%set1 proc~set1->proc~cmp_degree proc~set3 nurbs_volume%set3 proc~set3->proc~cmp_degree program~example3_volume example3_volume program~example3_volume->proc~cmp_elem none~set nurbs_volume%set program~example3_volume->none~set proc~elevate_degree nurbs_volume%elevate_degree program~example3_volume->proc~elevate_degree proc~insert_knots nurbs_volume%insert_knots program~example3_volume->proc~insert_knots proc~remove_knots nurbs_volume%remove_knots program~example3_volume->proc~remove_knots none~set->proc~set1 none~set->proc~set3 proc~elevate_degree->none~set proc~insert_knots->none~set proc~modify_wc nurbs_volume%modify_Wc proc~modify_wc->none~set proc~modify_xc nurbs_volume%modify_Xc proc~modify_xc->none~set proc~remove_knots->none~set proc~set_c nurbs_volume%set_C proc~set_c->none~set proc~set_half_ring nurbs_volume%set_half_ring proc~set_half_ring->none~set proc~set_hexahedron nurbs_volume%set_hexahedron proc~set_hexahedron->none~set proc~set_ring nurbs_volume%set_ring proc~set_ring->none~set program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->none~set program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->none~set program~nearest_point_3d nearest_point_3d program~nearest_point_3d->none~set program~shape_c_3d shape_C_3d program~shape_c_3d->proc~set_c program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~set_half_ring program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~set_hexahedron program~shape_ring_3d shape_ring_3d program~shape_ring_3d->proc~set_ring Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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) Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: dir Return Value integer Calls proc~~get_nc~~CallsGraph proc~get_nc get_nc interface~compute_multiplicity compute_multiplicity proc~get_nc->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_nc.html"},{"title":"get_ng – ForCAD","text":"private pure function get_ng(this) result(ng) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value integer, (3)","tags":"","loc":"proc/get_ng.html"},{"title":"is_rational – ForCAD","text":"private pure function is_rational(this) result(r) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value logical Called by proc~~is_rational~~CalledByGraph proc~is_rational nurbs_volume%is_rational proc~basis_scalar nurbs_volume%basis_scalar proc~basis_scalar->proc~is_rational proc~basis_vector nurbs_volume%basis_vector proc~basis_vector->proc~is_rational proc~cmp_xg nurbs_volume%cmp_Xg proc~cmp_xg->proc~is_rational proc~create nurbs_volume%create proc~create->proc~is_rational proc~derivative2_scalar nurbs_volume%derivative2_scalar proc~derivative2_scalar->proc~is_rational proc~derivative2_vector nurbs_volume%derivative2_vector proc~derivative2_vector->proc~is_rational proc~derivative_scalar nurbs_volume%derivative_scalar proc~derivative_scalar->proc~is_rational proc~derivative_vector nurbs_volume%derivative_vector proc~derivative_vector->proc~is_rational none~derivative2 nurbs_volume%derivative2 none~derivative2->proc~derivative2_scalar none~derivative2->proc~derivative2_vector proc~nearest_point2 nurbs_volume%nearest_point2 proc~nearest_point2->proc~cmp_xg proc~nearest_point2->proc~create proc~nearest_point2->none~derivative2 program~example3_volume example3_volume program~example3_volume->proc~create program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~create program~nearest_point_3d nearest_point_3d program~nearest_point_3d->proc~create program~nearest_point_3d->proc~nearest_point2 program~shape_c_3d shape_C_3d program~shape_c_3d->proc~create program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~create program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~create program~shape_ring_3d shape_ring_3d program~shape_ring_3d->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/is_rational.html"},{"title":"basis_scalar – ForCAD","text":"private pure subroutine basis_scalar(this, Xt, Tgc) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: Tgc (:) Calls proc~~basis_scalar~~CallsGraph proc~basis_scalar nurbs_volume%basis_scalar interface~compute_tgc compute_Tgc proc~basis_scalar->interface~compute_tgc proc~is_rational nurbs_volume%is_rational proc~basis_scalar->proc~is_rational Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_scalar.html"},{"title":"basis_vector – ForCAD","text":"private pure subroutine basis_vector(this, res1, res2, res3, Xt1, Xt2, Xt3, Tgc) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(in), optional, contiguous :: Xt3 (:) real(kind=rk), intent(out), allocatable :: Tgc (:,:) Calls proc~~basis_vector~~CallsGraph proc~basis_vector nurbs_volume%basis_vector interface~compute_tgc compute_Tgc proc~basis_vector->interface~compute_tgc interface~ndgrid ndgrid proc~basis_vector->interface~ndgrid proc~is_rational nurbs_volume%is_rational proc~basis_vector->proc~is_rational proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 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.","tags":"","loc":"proc/basis_vector.html"},{"title":"cmp_degree – ForCAD","text":"private pure subroutine cmp_degree(this, dir) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), optional :: dir Calls proc~~cmp_degree~~CallsGraph proc~cmp_degree nurbs_volume%cmp_degree proc~get_multiplicity nurbs_volume%get_multiplicity proc~cmp_degree->proc~get_multiplicity interface~compute_multiplicity compute_multiplicity proc~get_multiplicity->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~cmp_degree~~CalledByGraph proc~cmp_degree nurbs_volume%cmp_degree proc~set1 nurbs_volume%set1 proc~set1->proc~cmp_degree proc~set3 nurbs_volume%set3 proc~set3->proc~cmp_degree none~set nurbs_volume%set none~set->proc~set1 none~set->proc~set3 proc~elevate_degree nurbs_volume%elevate_degree proc~elevate_degree->none~set proc~insert_knots nurbs_volume%insert_knots proc~insert_knots->none~set proc~modify_wc nurbs_volume%modify_Wc proc~modify_wc->none~set proc~modify_xc nurbs_volume%modify_Xc proc~modify_xc->none~set proc~remove_knots nurbs_volume%remove_knots proc~remove_knots->none~set proc~set_c nurbs_volume%set_C proc~set_c->none~set proc~set_half_ring nurbs_volume%set_half_ring proc~set_half_ring->none~set proc~set_hexahedron nurbs_volume%set_hexahedron proc~set_hexahedron->none~set proc~set_ring nurbs_volume%set_ring proc~set_ring->none~set program~example3_volume example3_volume program~example3_volume->none~set program~example3_volume->proc~elevate_degree program~example3_volume->proc~insert_knots program~example3_volume->proc~remove_knots program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->none~set program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->none~set program~nearest_point_3d nearest_point_3d program~nearest_point_3d->none~set program~shape_c_3d shape_C_3d program~shape_c_3d->proc~set_c program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~set_half_ring program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~set_hexahedron program~shape_ring_3d shape_ring_3d program~shape_ring_3d->proc~set_ring Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_degree.html"},{"title":"cmp_nc – ForCAD","text":"private pure subroutine cmp_nc(this, dir) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), optional :: dir Calls proc~~cmp_nc~~CallsGraph proc~cmp_nc nurbs_volume%cmp_nc interface~compute_multiplicity compute_multiplicity proc~cmp_nc->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~cmp_nc~~CalledByGraph proc~cmp_nc nurbs_volume%cmp_nc proc~set1 nurbs_volume%set1 proc~set1->proc~cmp_nc proc~set2 nurbs_volume%set2 proc~set2->proc~cmp_nc none~set nurbs_volume%set none~set->proc~set1 none~set->proc~set2 proc~elevate_degree nurbs_volume%elevate_degree proc~elevate_degree->none~set proc~insert_knots nurbs_volume%insert_knots proc~insert_knots->none~set proc~modify_wc nurbs_volume%modify_Wc proc~modify_wc->none~set proc~modify_xc nurbs_volume%modify_Xc proc~modify_xc->none~set proc~remove_knots nurbs_volume%remove_knots proc~remove_knots->none~set proc~set_c nurbs_volume%set_C proc~set_c->none~set proc~set_half_ring nurbs_volume%set_half_ring proc~set_half_ring->none~set proc~set_hexahedron nurbs_volume%set_hexahedron proc~set_hexahedron->none~set proc~set_ring nurbs_volume%set_ring proc~set_ring->none~set program~example3_volume example3_volume program~example3_volume->none~set program~example3_volume->proc~elevate_degree program~example3_volume->proc~insert_knots program~example3_volume->proc~remove_knots program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->none~set program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->none~set program~nearest_point_3d nearest_point_3d program~nearest_point_3d->none~set program~shape_c_3d shape_C_3d program~shape_c_3d->proc~set_c program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~set_half_ring program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~set_hexahedron program~shape_ring_3d shape_ring_3d program~shape_ring_3d->proc~set_ring Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_nc.html"},{"title":"create – ForCAD","text":"private pure subroutine create(this, res1, res2, res3, Xt1, Xt2, Xt3, Xt) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(in), optional, contiguous :: Xt3 (:) real(kind=rk), intent(in), optional, contiguous :: Xt (:,:) Calls proc~~create~~CallsGraph proc~create nurbs_volume%create interface~compute_xg compute_Xg proc~create->interface~compute_xg interface~ndgrid ndgrid proc~create->interface~ndgrid proc~is_rational nurbs_volume%is_rational proc~create->proc~is_rational proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 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 nurbs_volume%create proc~nearest_point2 nurbs_volume%nearest_point2 proc~nearest_point2->proc~create program~example3_volume example3_volume program~example3_volume->proc~create program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~create program~nearest_point_3d nearest_point_3d program~nearest_point_3d->proc~create program~nearest_point_3d->proc~nearest_point2 program~shape_c_3d shape_C_3d program~shape_c_3d->proc~create program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~create program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~create program~shape_ring_3d shape_ring_3d program~shape_ring_3d->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":"derivative2_scalar – ForCAD","text":"private pure subroutine derivative2_scalar(this, Xt, d2Tgc, dTgc, Tgc) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:) real(kind=rk), intent(out), optional, allocatable :: dTgc (:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:) Calls proc~~derivative2_scalar~~CallsGraph proc~derivative2_scalar nurbs_volume%derivative2_scalar interface~compute_d2tgc compute_d2Tgc proc~derivative2_scalar->interface~compute_d2tgc proc~is_rational nurbs_volume%is_rational proc~derivative2_scalar->proc~is_rational Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~derivative2_scalar~~CalledByGraph proc~derivative2_scalar nurbs_volume%derivative2_scalar none~derivative2 nurbs_volume%derivative2 none~derivative2->proc~derivative2_scalar proc~nearest_point2 nurbs_volume%nearest_point2 proc~nearest_point2->none~derivative2 program~nearest_point_3d nearest_point_3d program~nearest_point_3d->proc~nearest_point2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/derivative2_scalar.html"},{"title":"derivative2_vector – ForCAD","text":"private pure subroutine derivative2_vector(this, res1, res2, res3, Xt1, Xt2, Xt3, d2Tgc, dTgc, Tgc) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(in), optional, contiguous :: Xt3 (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:,:) real(kind=rk), intent(out), optional, allocatable :: dTgc (:,:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:,:) Calls proc~~derivative2_vector~~CallsGraph proc~derivative2_vector nurbs_volume%derivative2_vector interface~compute_d2tgc compute_d2Tgc proc~derivative2_vector->interface~compute_d2tgc interface~ndgrid ndgrid proc~derivative2_vector->interface~ndgrid proc~is_rational nurbs_volume%is_rational proc~derivative2_vector->proc~is_rational proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 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~~derivative2_vector~~CalledByGraph proc~derivative2_vector nurbs_volume%derivative2_vector none~derivative2 nurbs_volume%derivative2 none~derivative2->proc~derivative2_vector proc~nearest_point2 nurbs_volume%nearest_point2 proc~nearest_point2->none~derivative2 program~nearest_point_3d nearest_point_3d program~nearest_point_3d->proc~nearest_point2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/derivative2_vector.html"},{"title":"derivative_scalar – ForCAD","text":"private pure subroutine derivative_scalar(this, Xt, dTgc, Tgc) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: dTgc (:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:) Calls proc~~derivative_scalar~~CallsGraph proc~derivative_scalar nurbs_volume%derivative_scalar interface~compute_dtgc compute_dTgc proc~derivative_scalar->interface~compute_dtgc proc~is_rational nurbs_volume%is_rational proc~derivative_scalar->proc~is_rational Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/derivative_scalar.html"},{"title":"derivative_vector – ForCAD","text":"private pure subroutine derivative_vector(this, res1, res2, res3, Xt1, Xt2, Xt3, dTgc, Tgc) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(in), optional, contiguous :: Xt3 (:) real(kind=rk), intent(out), allocatable :: dTgc (:,:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:,:) Calls proc~~derivative_vector~~CallsGraph proc~derivative_vector nurbs_volume%derivative_vector interface~compute_dtgc compute_dTgc proc~derivative_vector->interface~compute_dtgc interface~ndgrid ndgrid proc~derivative_vector->interface~ndgrid proc~is_rational nurbs_volume%is_rational proc~derivative_vector->proc~is_rational proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 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.","tags":"","loc":"proc/derivative_vector.html"},{"title":"elevate_degree – ForCAD","text":"private pure subroutine elevate_degree(this, dir, t) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in) :: dir integer, intent(in) :: t Calls proc~~elevate_degree~~CallsGraph proc~elevate_degree nurbs_volume%elevate_degree none~get_knot nurbs_volume%get_knot proc~elevate_degree->none~get_knot none~set nurbs_volume%set proc~elevate_degree->none~set proc~elevate_degree_a_5_9 elevate_degree_A_5_9 proc~elevate_degree->proc~elevate_degree_a_5_9 proc~get_knot_all nurbs_volume%get_knot_all none~get_knot->proc~get_knot_all proc~get_knoti nurbs_volume%get_knoti none~get_knot->proc~get_knoti proc~set1 nurbs_volume%set1 none~set->proc~set1 proc~set2 nurbs_volume%set2 none~set->proc~set2 proc~set3 nurbs_volume%set3 none~set->proc~set3 interface~compute_multiplicity compute_multiplicity proc~elevate_degree_a_5_9->interface~compute_multiplicity proc~bincoeff bincoeff proc~elevate_degree_a_5_9->proc~bincoeff proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~factln factln proc~bincoeff->proc~factln proc~cmp_degree nurbs_volume%cmp_degree proc~set1->proc~cmp_degree proc~cmp_nc nurbs_volume%cmp_nc proc~set1->proc~cmp_nc proc~set2->proc~cmp_nc proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector proc~set3->proc~cmp_degree proc~get_multiplicity nurbs_volume%get_multiplicity proc~cmp_degree->proc~get_multiplicity proc~cmp_nc->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~get_multiplicity->interface~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~~elevate_degree~~CalledByGraph proc~elevate_degree nurbs_volume%elevate_degree program~example3_volume example3_volume program~example3_volume->proc~elevate_degree Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this character(len=*), intent(in) :: filename Calls proc~~export_xc~~CallsGraph proc~export_xc nurbs_volume%export_Xc proc~cmp_elem_xc_vis nurbs_volume%cmp_elem_Xc_vis proc~export_xc->proc~cmp_elem_xc_vis interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xc_vis->interface~elemconn_c0 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v 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 nurbs_volume%export_Xc program~example3_volume example3_volume program~example3_volume->proc~export_xc program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~export_xc program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->proc~export_xc program~shape_c_3d shape_C_3d program~shape_c_3d->proc~export_xc program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~export_xc program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~export_xc program~shape_ring_3d shape_ring_3d program~shape_ring_3d->proc~export_xc Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/export_xc.html"},{"title":"export_Xg – ForCAD","text":"private impure subroutine export_Xg(this, filename) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this character(len=*), intent(in) :: filename Calls proc~~export_xg~~CallsGraph proc~export_xg nurbs_volume%export_Xg proc~cmp_elem_xg_vis nurbs_volume%cmp_elem_Xg_vis proc~export_xg->proc~cmp_elem_xg_vis interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xg_vis->interface~elemconn_c0 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v 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 nurbs_volume%export_Xg program~example3_volume example3_volume program~example3_volume->proc~export_xg program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~export_xg program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->proc~export_xg program~shape_c_3d shape_C_3d program~shape_c_3d->proc~export_xg program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~export_xg program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~export_xg program~shape_ring_3d shape_ring_3d program~shape_ring_3d->proc~export_xg Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/export_xg.html"},{"title":"finalize – ForCAD","text":"private pure subroutine finalize(this) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this Called by proc~~finalize~~CalledByGraph proc~finalize nurbs_volume%finalize proc~nearest_point2 nurbs_volume%nearest_point2 proc~nearest_point2->proc~finalize program~example3_volume example3_volume program~example3_volume->proc~finalize program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~finalize program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->proc~finalize program~nearest_point_3d nearest_point_3d program~nearest_point_3d->proc~finalize program~nearest_point_3d->proc~nearest_point2 program~shape_c_3d shape_C_3d program~shape_c_3d->proc~finalize program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~finalize program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~finalize program~shape_ring_3d shape_ring_3d program~shape_ring_3d->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":"insert_knots – ForCAD","text":"private pure subroutine insert_knots(this, dir, Xth, r) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in) :: dir real(kind=rk), intent(in), contiguous :: Xth (:) integer, intent(in), contiguous :: r (:) Calls proc~~insert_knots~~CallsGraph proc~insert_knots nurbs_volume%insert_knots interface~compute_multiplicity compute_multiplicity proc~insert_knots->interface~compute_multiplicity none~get_knot nurbs_volume%get_knot proc~insert_knots->none~get_knot none~set nurbs_volume%set proc~insert_knots->none~set proc~findspan findspan proc~insert_knots->proc~findspan proc~insert_knot_a_5_1 insert_knot_A_5_1 proc~insert_knots->proc~insert_knot_a_5_1 proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_knot_all nurbs_volume%get_knot_all none~get_knot->proc~get_knot_all proc~get_knoti nurbs_volume%get_knoti none~get_knot->proc~get_knoti proc~set1 nurbs_volume%set1 none~set->proc~set1 proc~set2 nurbs_volume%set2 none~set->proc~set2 proc~set3 nurbs_volume%set3 none~set->proc~set3 proc~cmp_degree nurbs_volume%cmp_degree proc~set1->proc~cmp_degree proc~cmp_nc nurbs_volume%cmp_nc proc~set1->proc~cmp_nc proc~set2->proc~cmp_nc proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector proc~set3->proc~cmp_degree proc~get_multiplicity nurbs_volume%get_multiplicity proc~cmp_degree->proc~get_multiplicity proc~cmp_nc->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~get_multiplicity->interface~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~~insert_knots~~CalledByGraph proc~insert_knots nurbs_volume%insert_knots program~example3_volume example3_volume program~example3_volume->proc~insert_knots Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/insert_knots.html"},{"title":"modify_Wc – ForCAD","text":"private pure subroutine modify_Wc(this, W, num) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in) :: W integer, intent(in) :: num Calls proc~~modify_wc~~CallsGraph proc~modify_wc nurbs_volume%modify_Wc none~get_knot nurbs_volume%get_knot proc~modify_wc->none~get_knot none~get_wc nurbs_volume%get_Wc proc~modify_wc->none~get_wc none~get_xc nurbs_volume%get_Xc proc~modify_wc->none~get_xc none~set nurbs_volume%set proc~modify_wc->none~set proc~get_knot_all nurbs_volume%get_knot_all none~get_knot->proc~get_knot_all proc~get_knoti nurbs_volume%get_knoti none~get_knot->proc~get_knoti proc~get_wc_all nurbs_volume%get_Wc_all none~get_wc->proc~get_wc_all proc~get_wci nurbs_volume%get_Wci none~get_wc->proc~get_wci proc~get_xc_all nurbs_volume%get_Xc_all none~get_xc->proc~get_xc_all proc~get_xci nurbs_volume%get_Xci none~get_xc->proc~get_xci proc~get_xcid nurbs_volume%get_Xcid none~get_xc->proc~get_xcid proc~set1 nurbs_volume%set1 none~set->proc~set1 proc~set2 nurbs_volume%set2 none~set->proc~set2 proc~set3 nurbs_volume%set3 none~set->proc~set3 proc~cmp_degree nurbs_volume%cmp_degree proc~set1->proc~cmp_degree proc~cmp_nc nurbs_volume%cmp_nc proc~set1->proc~cmp_nc proc~set2->proc~cmp_nc proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector proc~set3->proc~cmp_degree proc~get_multiplicity nurbs_volume%get_multiplicity proc~cmp_degree->proc~get_multiplicity interface~compute_multiplicity compute_multiplicity proc~cmp_nc->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity->interface~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/modify_wc.html"},{"title":"modify_Xc – ForCAD","text":"private pure subroutine modify_Xc(this, X, num, dir) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in) :: X integer, intent(in) :: num integer, intent(in) :: dir Calls proc~~modify_xc~~CallsGraph proc~modify_xc nurbs_volume%modify_Xc none~get_knot nurbs_volume%get_knot proc~modify_xc->none~get_knot none~get_wc nurbs_volume%get_Wc proc~modify_xc->none~get_wc none~get_xc nurbs_volume%get_Xc proc~modify_xc->none~get_xc none~set nurbs_volume%set proc~modify_xc->none~set proc~get_knot_all nurbs_volume%get_knot_all none~get_knot->proc~get_knot_all proc~get_knoti nurbs_volume%get_knoti none~get_knot->proc~get_knoti proc~get_wc_all nurbs_volume%get_Wc_all none~get_wc->proc~get_wc_all proc~get_wci nurbs_volume%get_Wci none~get_wc->proc~get_wci proc~get_xc_all nurbs_volume%get_Xc_all none~get_xc->proc~get_xc_all proc~get_xci nurbs_volume%get_Xci none~get_xc->proc~get_xci proc~get_xcid nurbs_volume%get_Xcid none~get_xc->proc~get_xcid proc~set1 nurbs_volume%set1 none~set->proc~set1 proc~set2 nurbs_volume%set2 none~set->proc~set2 proc~set3 nurbs_volume%set3 none~set->proc~set3 proc~cmp_degree nurbs_volume%cmp_degree proc~set1->proc~cmp_degree proc~cmp_nc nurbs_volume%cmp_nc proc~set1->proc~cmp_nc proc~set2->proc~cmp_nc proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector proc~set3->proc~cmp_degree proc~get_multiplicity nurbs_volume%get_multiplicity proc~cmp_degree->proc~get_multiplicity interface~compute_multiplicity compute_multiplicity proc~cmp_nc->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity->interface~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":"nearest_point – ForCAD","text":"private pure subroutine nearest_point(this, point_Xg, nearest_Xg, nearest_Xt, id) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this real(kind=rk), intent(in) :: point_Xg (:) real(kind=rk), intent(out), optional, allocatable :: nearest_Xg (:) real(kind=rk), intent(out), optional, allocatable :: nearest_Xt (:) integer, intent(out), optional :: id Calls proc~~nearest_point~~CallsGraph proc~nearest_point nurbs_volume%nearest_point interface~nearest_point_help_3d nearest_point_help_3d proc~nearest_point->interface~nearest_point_help_3d Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~nearest_point~~CalledByGraph proc~nearest_point nurbs_volume%nearest_point program~nearest_point_3d nearest_point_3d program~nearest_point_3d->proc~nearest_point Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/nearest_point.html"},{"title":"nearest_point2 – ForCAD","text":"private impure subroutine nearest_point2(this, point_Xg, tol, maxit, nearest_Xt, nearest_Xg) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in) :: point_Xg (:) real(kind=rk), intent(in) :: tol integer, intent(in) :: maxit real(kind=rk), intent(out) :: nearest_Xt (3) real(kind=rk), intent(out), optional, allocatable :: nearest_Xg (:) Calls proc~~nearest_point2~~CallsGraph proc~nearest_point2 nurbs_volume%nearest_point2 interface~nearest_point_help_3d nearest_point_help_3d proc~nearest_point2->interface~nearest_point_help_3d none~derivative2 nurbs_volume%derivative2 proc~nearest_point2->none~derivative2 proc~cmp_xg nurbs_volume%cmp_Xg proc~nearest_point2->proc~cmp_xg proc~create nurbs_volume%create proc~nearest_point2->proc~create proc~finalize nurbs_volume%finalize proc~nearest_point2->proc~finalize proc~derivative2_scalar nurbs_volume%derivative2_scalar none~derivative2->proc~derivative2_scalar proc~derivative2_vector nurbs_volume%derivative2_vector none~derivative2->proc~derivative2_vector interface~compute_xg compute_Xg proc~cmp_xg->interface~compute_xg proc~is_rational nurbs_volume%is_rational proc~cmp_xg->proc~is_rational proc~create->interface~compute_xg interface~ndgrid ndgrid proc~create->interface~ndgrid proc~create->proc~is_rational proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 ndgrid3 interface~ndgrid->proc~ndgrid3 proc~derivative2_scalar->proc~is_rational interface~compute_d2tgc compute_d2Tgc proc~derivative2_scalar->interface~compute_d2tgc proc~derivative2_vector->interface~ndgrid proc~derivative2_vector->proc~is_rational proc~derivative2_vector->interface~compute_d2tgc Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~nearest_point2~~CalledByGraph proc~nearest_point2 nurbs_volume%nearest_point2 program~nearest_point_3d nearest_point_3d program~nearest_point_3d->proc~nearest_point2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/nearest_point2.html"},{"title":"put_to_nurbs – ForCAD","text":"private pure subroutine put_to_nurbs(this, X, elemConn) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: X (:,:) integer, intent(in), contiguous :: elemConn (:,:) Calls proc~~put_to_nurbs~~CallsGraph proc~put_to_nurbs nurbs_volume%put_to_nurbs proc~basis_bspline basis_bspline proc~put_to_nurbs->proc~basis_bspline proc~kron kron proc~put_to_nurbs->proc~kron proc~set_elem_xg_vis nurbs_volume%set_elem_Xg_vis proc~put_to_nurbs->proc~set_elem_xg_vis Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~put_to_nurbs~~CalledByGraph proc~put_to_nurbs nurbs_volume%put_to_nurbs program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->proc~put_to_nurbs Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/put_to_nurbs.html"},{"title":"remove_knots – ForCAD","text":"private pure subroutine remove_knots(this, dir, Xth, r) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in) :: dir real(kind=rk), intent(in), contiguous :: Xth (:) integer, intent(in), contiguous :: r (:) Calls proc~~remove_knots~~CallsGraph proc~remove_knots nurbs_volume%remove_knots interface~compute_multiplicity compute_multiplicity proc~remove_knots->interface~compute_multiplicity none~get_knot nurbs_volume%get_knot proc~remove_knots->none~get_knot none~set nurbs_volume%set proc~remove_knots->none~set proc~findspan findspan proc~remove_knots->proc~findspan proc~remove_knots_a_5_8 remove_knots_A_5_8 proc~remove_knots->proc~remove_knots_a_5_8 proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_knot_all nurbs_volume%get_knot_all none~get_knot->proc~get_knot_all proc~get_knoti nurbs_volume%get_knoti none~get_knot->proc~get_knoti proc~set1 nurbs_volume%set1 none~set->proc~set1 proc~set2 nurbs_volume%set2 none~set->proc~set2 proc~set3 nurbs_volume%set3 none~set->proc~set3 proc~cmp_degree nurbs_volume%cmp_degree proc~set1->proc~cmp_degree proc~cmp_nc nurbs_volume%cmp_nc proc~set1->proc~cmp_nc proc~set2->proc~cmp_nc proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector proc~set3->proc~cmp_degree proc~get_multiplicity nurbs_volume%get_multiplicity proc~cmp_degree->proc~get_multiplicity proc~cmp_nc->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~get_multiplicity->interface~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~~remove_knots~~CalledByGraph proc~remove_knots nurbs_volume%remove_knots program~example3_volume example3_volume program~example3_volume->proc~remove_knots Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/remove_knots.html"},{"title":"rotate_Xc – ForCAD","text":"private pure subroutine rotate_Xc(this, alpha, beta, theta) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in) :: alpha real(kind=rk), intent(in) :: beta real(kind=rk), intent(in) :: theta Calls proc~~rotate_xc~~CallsGraph proc~rotate_xc nurbs_volume%rotate_Xc proc~rotation rotation proc~rotate_xc->proc~rotation cosd cosd proc~rotation->cosd sind sind proc~rotation->sind Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~rotate_xc~~CalledByGraph proc~rotate_xc nurbs_volume%rotate_Xc program~example3_volume example3_volume program~example3_volume->proc~rotate_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/rotate_xc.html"},{"title":"rotate_Xg – ForCAD","text":"private pure subroutine rotate_Xg(this, alpha, beta, theta) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in) :: alpha real(kind=rk), intent(in) :: beta real(kind=rk), intent(in) :: theta Calls proc~~rotate_xg~~CallsGraph proc~rotate_xg nurbs_volume%rotate_Xg proc~rotation rotation proc~rotate_xg->proc~rotation cosd cosd proc~rotation->cosd sind sind proc~rotation->sind Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~rotate_xg~~CalledByGraph proc~rotate_xg nurbs_volume%rotate_Xg program~example3_volume example3_volume program~example3_volume->proc~rotate_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/rotate_xg.html"},{"title":"set1 – ForCAD","text":"private pure subroutine set1(this, knot1, knot2, knot3, Xc, Wc) Set control points and weights for the NURBS volume object. Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) real(kind=rk), intent(in), contiguous :: knot3 (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) Calls proc~~set1~~CallsGraph proc~set1 nurbs_volume%set1 proc~cmp_degree nurbs_volume%cmp_degree proc~set1->proc~cmp_degree proc~cmp_nc nurbs_volume%cmp_nc proc~set1->proc~cmp_nc proc~get_multiplicity nurbs_volume%get_multiplicity proc~cmp_degree->proc~get_multiplicity interface~compute_multiplicity compute_multiplicity proc~cmp_nc->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity->interface~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 nurbs_volume%set1 none~set nurbs_volume%set none~set->proc~set1 proc~elevate_degree nurbs_volume%elevate_degree proc~elevate_degree->none~set proc~insert_knots nurbs_volume%insert_knots proc~insert_knots->none~set proc~modify_wc nurbs_volume%modify_Wc proc~modify_wc->none~set proc~modify_xc nurbs_volume%modify_Xc proc~modify_xc->none~set proc~remove_knots nurbs_volume%remove_knots proc~remove_knots->none~set proc~set_c nurbs_volume%set_C proc~set_c->none~set proc~set_half_ring nurbs_volume%set_half_ring proc~set_half_ring->none~set proc~set_hexahedron nurbs_volume%set_hexahedron proc~set_hexahedron->none~set proc~set_ring nurbs_volume%set_ring proc~set_ring->none~set program~example3_volume example3_volume program~example3_volume->none~set program~example3_volume->proc~elevate_degree program~example3_volume->proc~insert_knots program~example3_volume->proc~remove_knots program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->none~set program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->none~set program~nearest_point_3d nearest_point_3d program~nearest_point_3d->none~set program~shape_c_3d shape_C_3d program~shape_c_3d->proc~set_c program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~set_half_ring program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~set_hexahedron program~shape_ring_3d shape_ring_3d program~shape_ring_3d->proc~set_ring Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/set1.html"},{"title":"set2 – ForCAD","text":"private pure subroutine set2(this, Xth_dir1, Xth_dir2, Xth_dir3, degree, continuity1, continuity2, continuity3, Xc, Wc) Set control points and weights for the NURBS volume object. Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: Xth_dir1 (:) real(kind=rk), intent(in), contiguous :: Xth_dir2 (:) real(kind=rk), intent(in), contiguous :: Xth_dir3 (:) integer, intent(in), contiguous :: degree (:) integer, intent(in), contiguous :: continuity1 (:) integer, intent(in), contiguous :: continuity2 (:) integer, intent(in), contiguous :: continuity3 (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) Calls proc~~set2~~CallsGraph proc~set2 nurbs_volume%set2 proc~cmp_nc nurbs_volume%cmp_nc proc~set2->proc~cmp_nc proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector interface~compute_multiplicity compute_multiplicity proc~cmp_nc->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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 nurbs_volume%set2 none~set nurbs_volume%set none~set->proc~set2 proc~elevate_degree nurbs_volume%elevate_degree proc~elevate_degree->none~set proc~insert_knots nurbs_volume%insert_knots proc~insert_knots->none~set proc~modify_wc nurbs_volume%modify_Wc proc~modify_wc->none~set proc~modify_xc nurbs_volume%modify_Xc proc~modify_xc->none~set proc~remove_knots nurbs_volume%remove_knots proc~remove_knots->none~set proc~set_c nurbs_volume%set_C proc~set_c->none~set proc~set_half_ring nurbs_volume%set_half_ring proc~set_half_ring->none~set proc~set_hexahedron nurbs_volume%set_hexahedron proc~set_hexahedron->none~set proc~set_ring nurbs_volume%set_ring proc~set_ring->none~set program~example3_volume example3_volume program~example3_volume->none~set program~example3_volume->proc~elevate_degree program~example3_volume->proc~insert_knots program~example3_volume->proc~remove_knots program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->none~set program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->none~set program~nearest_point_3d nearest_point_3d program~nearest_point_3d->none~set program~shape_c_3d shape_C_3d program~shape_c_3d->proc~set_c program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~set_half_ring program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~set_hexahedron program~shape_ring_3d shape_ring_3d program~shape_ring_3d->proc~set_ring Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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":"set3 – ForCAD","text":"private pure subroutine set3(this, nc, Xc, Wc) Set Bezier or Rational Bezier volume using control points and weights. Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), contiguous :: nc (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) Calls proc~~set3~~CallsGraph proc~set3 nurbs_volume%set3 proc~cmp_degree nurbs_volume%cmp_degree proc~set3->proc~cmp_degree proc~get_multiplicity nurbs_volume%get_multiplicity proc~cmp_degree->proc~get_multiplicity interface~compute_multiplicity compute_multiplicity proc~get_multiplicity->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~set3~~CalledByGraph proc~set3 nurbs_volume%set3 none~set nurbs_volume%set none~set->proc~set3 proc~elevate_degree nurbs_volume%elevate_degree proc~elevate_degree->none~set proc~insert_knots nurbs_volume%insert_knots proc~insert_knots->none~set proc~modify_wc nurbs_volume%modify_Wc proc~modify_wc->none~set proc~modify_xc nurbs_volume%modify_Xc proc~modify_xc->none~set proc~remove_knots nurbs_volume%remove_knots proc~remove_knots->none~set proc~set_c nurbs_volume%set_C proc~set_c->none~set proc~set_half_ring nurbs_volume%set_half_ring proc~set_half_ring->none~set proc~set_hexahedron nurbs_volume%set_hexahedron proc~set_hexahedron->none~set proc~set_ring nurbs_volume%set_ring proc~set_ring->none~set program~example3_volume example3_volume program~example3_volume->none~set program~example3_volume->proc~elevate_degree program~example3_volume->proc~insert_knots program~example3_volume->proc~remove_knots program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->none~set program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->none~set program~nearest_point_3d nearest_point_3d program~nearest_point_3d->none~set program~shape_c_3d shape_C_3d program~shape_c_3d->proc~set_c program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~set_half_ring program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~set_hexahedron program~shape_ring_3d shape_ring_3d program~shape_ring_3d->proc~set_ring Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/set3.html"},{"title":"set_C – ForCAD","text":"private pure subroutine set_C(this, center, radius1, radius2, length) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: center (:) real(kind=rk), intent(in) :: radius1 real(kind=rk), intent(in) :: radius2 real(kind=rk), intent(in) :: length Calls proc~~set_c~~CallsGraph proc~set_c nurbs_volume%set_C none~set nurbs_volume%set proc~set_c->none~set proc~set1 nurbs_volume%set1 none~set->proc~set1 proc~set2 nurbs_volume%set2 none~set->proc~set2 proc~set3 nurbs_volume%set3 none~set->proc~set3 proc~cmp_degree nurbs_volume%cmp_degree proc~set1->proc~cmp_degree proc~cmp_nc nurbs_volume%cmp_nc proc~set1->proc~cmp_nc proc~set2->proc~cmp_nc proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector proc~set3->proc~cmp_degree proc~get_multiplicity nurbs_volume%get_multiplicity proc~cmp_degree->proc~get_multiplicity interface~compute_multiplicity compute_multiplicity proc~cmp_nc->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity->interface~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~~set_c~~CalledByGraph proc~set_c nurbs_volume%set_C program~shape_c_3d shape_C_3d program~shape_c_3d->proc~set_c Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_c.html"},{"title":"set_elem – ForCAD","text":"private pure subroutine set_elem(this, elemConn) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:) Called by proc~~set_elem~~CalledByGraph proc~set_elem nurbs_volume%set_elem program~example3_volume example3_volume program~example3_volume->proc~set_elem Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_elem.html"},{"title":"set_elem_Xc_vis – ForCAD","text":"private pure subroutine set_elem_Xc_vis(this, elemConn) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:)","tags":"","loc":"proc/set_elem_xc_vis.html"},{"title":"set_elem_Xg_vis – ForCAD","text":"private pure subroutine set_elem_Xg_vis(this, elemConn) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:) Called by proc~~set_elem_xg_vis~~CalledByGraph proc~set_elem_xg_vis nurbs_volume%set_elem_Xg_vis proc~put_to_nurbs nurbs_volume%put_to_nurbs proc~put_to_nurbs->proc~set_elem_xg_vis program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->proc~put_to_nurbs Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_elem_xg_vis.html"},{"title":"set_half_ring – ForCAD","text":"private pure subroutine set_half_ring(this, center, radius1, radius2, length) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: center (:) real(kind=rk), intent(in) :: radius1 real(kind=rk), intent(in) :: radius2 real(kind=rk), intent(in) :: length Calls proc~~set_half_ring~~CallsGraph proc~set_half_ring nurbs_volume%set_half_ring none~set nurbs_volume%set proc~set_half_ring->none~set proc~set1 nurbs_volume%set1 none~set->proc~set1 proc~set2 nurbs_volume%set2 none~set->proc~set2 proc~set3 nurbs_volume%set3 none~set->proc~set3 proc~cmp_degree nurbs_volume%cmp_degree proc~set1->proc~cmp_degree proc~cmp_nc nurbs_volume%cmp_nc proc~set1->proc~cmp_nc proc~set2->proc~cmp_nc proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector proc~set3->proc~cmp_degree proc~get_multiplicity nurbs_volume%get_multiplicity proc~cmp_degree->proc~get_multiplicity interface~compute_multiplicity compute_multiplicity proc~cmp_nc->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity->interface~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~~set_half_ring~~CalledByGraph proc~set_half_ring nurbs_volume%set_half_ring program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~set_half_ring Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_half_ring.html"},{"title":"set_hexahedron – ForCAD","text":"private pure subroutine set_hexahedron(this, L, nc, Wc) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: L (:) integer, intent(in), contiguous :: nc (:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) Calls proc~~set_hexahedron~~CallsGraph proc~set_hexahedron nurbs_volume%set_hexahedron none~set nurbs_volume%set proc~set_hexahedron->none~set proc~hexahedron_xc hexahedron_Xc proc~set_hexahedron->proc~hexahedron_xc proc~set1 nurbs_volume%set1 none~set->proc~set1 proc~set2 nurbs_volume%set2 none~set->proc~set2 proc~set3 nurbs_volume%set3 none~set->proc~set3 proc~cmp_degree nurbs_volume%cmp_degree proc~set1->proc~cmp_degree proc~cmp_nc nurbs_volume%cmp_nc proc~set1->proc~cmp_nc proc~set2->proc~cmp_nc proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector proc~set3->proc~cmp_degree proc~get_multiplicity nurbs_volume%get_multiplicity proc~cmp_degree->proc~get_multiplicity interface~compute_multiplicity compute_multiplicity proc~cmp_nc->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity->interface~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~~set_hexahedron~~CalledByGraph proc~set_hexahedron nurbs_volume%set_hexahedron program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~set_hexahedron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_hexahedron.html"},{"title":"set_ring – ForCAD","text":"private pure subroutine set_ring(this, center, radius1, radius2, length) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: center (:) real(kind=rk), intent(in) :: radius1 real(kind=rk), intent(in) :: radius2 real(kind=rk), intent(in) :: length Calls proc~~set_ring~~CallsGraph proc~set_ring nurbs_volume%set_ring none~set nurbs_volume%set proc~set_ring->none~set proc~set1 nurbs_volume%set1 none~set->proc~set1 proc~set2 nurbs_volume%set2 none~set->proc~set2 proc~set3 nurbs_volume%set3 none~set->proc~set3 proc~cmp_degree nurbs_volume%cmp_degree proc~set1->proc~cmp_degree proc~cmp_nc nurbs_volume%cmp_nc proc~set1->proc~cmp_nc proc~set2->proc~cmp_nc proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector proc~set3->proc~cmp_degree proc~get_multiplicity nurbs_volume%get_multiplicity proc~cmp_degree->proc~get_multiplicity interface~compute_multiplicity compute_multiplicity proc~cmp_nc->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity->interface~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~~set_ring~~CalledByGraph proc~set_ring nurbs_volume%set_ring program~shape_ring_3d shape_ring_3d program~shape_ring_3d->proc~set_ring Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_ring.html"},{"title":"show – ForCAD","text":"private impure subroutine show(this, vtkfile_Xc, vtkfile_Xg) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this character(len=*), intent(in) :: vtkfile_Xc character(len=*), intent(in) :: vtkfile_Xg Called by proc~~show~~CalledByGraph proc~show nurbs_volume%show program~example3_volume example3_volume program~example3_volume->proc~show program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~show program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->proc~show program~shape_c_3d shape_C_3d program~shape_c_3d->proc~show program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~show program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~show program~shape_ring_3d shape_ring_3d program~shape_ring_3d->proc~show Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/show.html"},{"title":"translate_Xc – ForCAD","text":"private pure subroutine translate_Xc(this, vec) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in) :: vec (:) Called by proc~~translate_xc~~CalledByGraph proc~translate_xc nurbs_volume%translate_Xc program~example3_volume example3_volume program~example3_volume->proc~translate_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/translate_xc.html"},{"title":"translate_Xg – ForCAD","text":"private pure subroutine translate_Xg(this, vec) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in) :: vec (:) Called by proc~~translate_xg~~CalledByGraph proc~translate_xg nurbs_volume%translate_Xg program~example3_volume example3_volume program~example3_volume->proc~translate_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/translate_xg.html"},{"title":"compute_Tgc – ForCAD","text":"private interface compute_Tgc Called by interface~~compute_tgc~~CalledByGraph interface~compute_tgc compute_Tgc proc~basis_scalar nurbs_volume%basis_scalar proc~basis_scalar->interface~compute_tgc proc~basis_vector nurbs_volume%basis_vector proc~basis_vector->interface~compute_tgc Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Functions private pure function compute_Tgc_bspline_3d_scalar(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc) result(f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) Return Value real(kind=rk), allocatable, (:) private pure function compute_Tgc_bspline_3d_vector(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_ng) result(f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) integer, intent(in) :: f_ng (3) Return Value real(kind=rk), allocatable, (:,:) private pure function compute_Tgc_nurbs_3d_scalar(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_Wc) result(f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) real(kind=rk), intent(in), contiguous :: f_Wc (:) Return Value real(kind=rk), allocatable, (:) private pure function compute_Tgc_nurbs_3d_vector(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_ng, f_Wc) result(f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) integer, intent(in) :: f_ng (3) real(kind=rk), intent(in), contiguous :: f_Wc (:) Return Value real(kind=rk), allocatable, (:,:)","tags":"","loc":"interface/compute_tgc.html"},{"title":"compute_Xg – ForCAD","text":"private interface compute_Xg Called by interface~~compute_xg~~CalledByGraph interface~compute_xg compute_Xg proc~cmp_xg nurbs_volume%cmp_Xg proc~cmp_xg->interface~compute_xg proc~create nurbs_volume%create proc~create->interface~compute_xg proc~nearest_point2 nurbs_volume%nearest_point2 proc~nearest_point2->proc~cmp_xg proc~nearest_point2->proc~create program~example3_volume example3_volume program~example3_volume->proc~create program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~create program~nearest_point_3d nearest_point_3d program~nearest_point_3d->proc~create program~nearest_point_3d->proc~nearest_point2 program~shape_c_3d shape_C_3d program~shape_c_3d->proc~create program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~create program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~create program~shape_ring_3d shape_ring_3d program~shape_ring_3d->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. Functions private pure function compute_Xg_bspline_3d(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_ng, f_Xc) result(f_Xg) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) integer, intent(in) :: f_ng (3) real(kind=rk), intent(in), contiguous :: f_Xc (:,:) Return Value real(kind=rk), allocatable, (:,:) private pure function compute_Xg_bspline_3d_1point(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_Xc) result(f_Xg) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) real(kind=rk), intent(in), contiguous :: f_Xc (:,:) Return Value real(kind=rk), allocatable, (:) private pure function compute_Xg_nurbs_3d(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_ng, f_Xc, f_Wc) result(f_Xg) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) integer, intent(in) :: f_ng (3) real(kind=rk), intent(in), contiguous :: f_Xc (:,:) real(kind=rk), intent(in), contiguous :: f_Wc (:) Return Value real(kind=rk), allocatable, (:,:) private pure function compute_Xg_nurbs_3d_1point(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_Xc, f_Wc) result(f_Xg) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) real(kind=rk), intent(in), contiguous :: f_Xc (:,:) real(kind=rk), intent(in), contiguous :: f_Wc (:) Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"interface/compute_xg.html"},{"title":"compute_d2Tgc – ForCAD","text":"private interface compute_d2Tgc Called by interface~~compute_d2tgc~~CalledByGraph interface~compute_d2tgc compute_d2Tgc proc~derivative2_scalar nurbs_volume%derivative2_scalar proc~derivative2_scalar->interface~compute_d2tgc proc~derivative2_vector nurbs_volume%derivative2_vector proc~derivative2_vector->interface~compute_d2tgc none~derivative2 nurbs_volume%derivative2 none~derivative2->proc~derivative2_scalar none~derivative2->proc~derivative2_vector proc~nearest_point2 nurbs_volume%nearest_point2 proc~nearest_point2->none~derivative2 program~nearest_point_3d nearest_point_3d program~nearest_point_3d->proc~nearest_point2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Subroutines private pure subroutine compute_d2Tgc_bspline_3d_scalar(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_d2Tgc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) real(kind=rk), intent(out), allocatable :: f_d2Tgc (:,:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:) private pure subroutine compute_d2Tgc_bspline_3d_vector(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_ng, f_d2Tgc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) integer, intent(in) :: f_ng (3) real(kind=rk), intent(out), allocatable :: f_d2Tgc (:,:,:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:,:) private pure subroutine compute_d2Tgc_nurbs_3d_scalar(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_Wc, f_d2Tgc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) real(kind=rk), intent(in), contiguous :: f_Wc (:) real(kind=rk), intent(out), allocatable :: f_d2Tgc (:,:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:) private pure subroutine compute_d2Tgc_nurbs_3d_vector(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_ng, f_Wc, f_d2Tgc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) integer, intent(in) :: f_ng (3) real(kind=rk), intent(in), contiguous :: f_Wc (:) real(kind=rk), intent(out), allocatable :: f_d2Tgc (:,:,:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:,:)","tags":"","loc":"interface/compute_d2tgc.html"},{"title":"compute_dTgc – ForCAD","text":"private interface compute_dTgc Called by interface~~compute_dtgc~~CalledByGraph interface~compute_dtgc compute_dTgc proc~derivative_scalar nurbs_volume%derivative_scalar proc~derivative_scalar->interface~compute_dtgc proc~derivative_vector nurbs_volume%derivative_vector proc~derivative_vector->interface~compute_dtgc Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Subroutines private pure subroutine compute_dTgc_bspline_3d_scalar(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:) private pure subroutine compute_dTgc_bspline_3d_vector(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_ng, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) integer, intent(in) :: f_ng (3) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:,:) private pure subroutine compute_dTgc_nurbs_3d_scalar(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_Wc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) real(kind=rk), intent(in), contiguous :: f_Wc (:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:) private pure subroutine compute_dTgc_nurbs_3d_vector(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_ng, f_Wc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) integer, intent(in) :: f_ng (3) real(kind=rk), intent(in), contiguous :: f_Wc (:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:,:)","tags":"","loc":"interface/compute_dtgc.html"},{"title":"nearest_point_help_3d – ForCAD","text":"interface Called by interface~~nearest_point_help_3d~~CalledByGraph interface~nearest_point_help_3d nearest_point_help_3d proc~nearest_point nurbs_volume%nearest_point proc~nearest_point->interface~nearest_point_help_3d proc~nearest_point2 nurbs_volume%nearest_point2 proc~nearest_point2->interface~nearest_point_help_3d program~nearest_point_3d nearest_point_3d program~nearest_point_3d->proc~nearest_point program~nearest_point_3d->proc~nearest_point2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. private pure function nearest_point_help_3d(f_ng, f_Xg, f_point_Xg) result(f_distances) Arguments Type Intent Optional Attributes Name integer, intent(in) :: f_ng (3) real(kind=rk), intent(in), contiguous :: f_Xg (:,:) real(kind=rk), intent(in), contiguous :: f_point_Xg (:) Return Value real(kind=rk),allocatable,(:)","tags":"","loc":"interface/nearest_point_help_3d.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), allocatable, (:,:) Called by proc~~generate_xc~~CalledByGraph proc~generate_xc generate_Xc program~example3_surface example3_surface program~example3_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":"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), allocatable, (:,:) Called by proc~~generate_xc~2~~CalledByGraph proc~generate_xc~2 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":"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, (:)","tags":"","loc":"proc/basis_bernstein.html"},{"title":"basis_bspline – ForCAD","text":"public pure function basis_bspline(Xt, knot, nc, degree) result(B) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: Xt real(kind=rk), intent(in), contiguous :: knot (:) integer, intent(in) :: nc integer, intent(in) :: degree Return Value real(kind=rk), allocatable, (:) Called by proc~~basis_bspline~~CalledByGraph proc~basis_bspline basis_bspline proc~compute_tgc_bspline_1d_scalar compute_Tgc_bspline_1d_scalar proc~compute_tgc_bspline_1d_scalar->proc~basis_bspline proc~compute_tgc_bspline_1d_vector compute_Tgc_bspline_1d_vector proc~compute_tgc_bspline_1d_vector->proc~basis_bspline proc~compute_tgc_bspline_2d_scalar compute_Tgc_bspline_2d_scalar proc~compute_tgc_bspline_2d_scalar->proc~basis_bspline proc~compute_tgc_bspline_2d_vector compute_Tgc_bspline_2d_vector proc~compute_tgc_bspline_2d_vector->proc~basis_bspline proc~compute_tgc_bspline_3d_scalar compute_Tgc_bspline_3d_scalar proc~compute_tgc_bspline_3d_scalar->proc~basis_bspline proc~compute_tgc_bspline_3d_vector compute_Tgc_bspline_3d_vector proc~compute_tgc_bspline_3d_vector->proc~basis_bspline proc~compute_tgc_nurbs_1d_scalar compute_Tgc_nurbs_1d_scalar proc~compute_tgc_nurbs_1d_scalar->proc~basis_bspline proc~compute_tgc_nurbs_1d_vector compute_Tgc_nurbs_1d_vector proc~compute_tgc_nurbs_1d_vector->proc~basis_bspline proc~compute_tgc_nurbs_2d_scalar compute_Tgc_nurbs_2d_scalar proc~compute_tgc_nurbs_2d_scalar->proc~basis_bspline proc~compute_tgc_nurbs_2d_vector compute_Tgc_nurbs_2d_vector proc~compute_tgc_nurbs_2d_vector->proc~basis_bspline proc~compute_tgc_nurbs_3d_scalar compute_Tgc_nurbs_3d_scalar proc~compute_tgc_nurbs_3d_scalar->proc~basis_bspline proc~compute_tgc_nurbs_3d_vector compute_Tgc_nurbs_3d_vector proc~compute_tgc_nurbs_3d_vector->proc~basis_bspline proc~compute_xg_bspline_1d compute_Xg_bspline_1d proc~compute_xg_bspline_1d->proc~basis_bspline proc~compute_xg_bspline_1d_1point compute_Xg_bspline_1d_1point proc~compute_xg_bspline_1d_1point->proc~basis_bspline proc~compute_xg_bspline_2d compute_Xg_bspline_2d proc~compute_xg_bspline_2d->proc~basis_bspline proc~compute_xg_bspline_2d_1point compute_Xg_bspline_2d_1point proc~compute_xg_bspline_2d_1point->proc~basis_bspline proc~compute_xg_bspline_3d compute_Xg_bspline_3d proc~compute_xg_bspline_3d->proc~basis_bspline proc~compute_xg_bspline_3d_1point compute_Xg_bspline_3d_1point proc~compute_xg_bspline_3d_1point->proc~basis_bspline proc~compute_xg_nurbs_1d compute_Xg_nurbs_1d proc~compute_xg_nurbs_1d->proc~basis_bspline proc~compute_xg_nurbs_1d_1point compute_Xg_nurbs_1d_1point proc~compute_xg_nurbs_1d_1point->proc~basis_bspline proc~compute_xg_nurbs_2d compute_Xg_nurbs_2d proc~compute_xg_nurbs_2d->proc~basis_bspline proc~compute_xg_nurbs_2d_1point compute_Xg_nurbs_2d_1point proc~compute_xg_nurbs_2d_1point->proc~basis_bspline proc~compute_xg_nurbs_3d compute_Xg_nurbs_3d proc~compute_xg_nurbs_3d->proc~basis_bspline proc~compute_xg_nurbs_3d_1point compute_Xg_nurbs_3d_1point proc~compute_xg_nurbs_3d_1point->proc~basis_bspline proc~put_to_nurbs nurbs_volume%put_to_nurbs proc~put_to_nurbs->proc~basis_bspline program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->proc~put_to_nurbs Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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, degree, continuity) result(knot) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xth_dir (:) integer, intent(in) :: degree integer, intent(in), contiguous :: continuity (:) Return Value real(kind=rk), allocatable, (:) Calls proc~~compute_knot_vector~~CallsGraph proc~compute_knot_vector compute_knot_vector proc~repelem 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 compute_knot_vector proc~set2 nurbs_volume%set2 proc~set2->proc~compute_knot_vector proc~set2~2 nurbs_curve%set2 proc~set2~2->proc~compute_knot_vector proc~set2~3 nurbs_surface%set2 proc~set2~3->proc~compute_knot_vector none~set nurbs_volume%set none~set->proc~set2 none~set~2 nurbs_curve%set none~set~2->proc~set2~2 none~set~3 nurbs_surface%set none~set~3->proc~set2~3 proc~elevate_degree nurbs_volume%elevate_degree proc~elevate_degree->none~set proc~elevate_degree~2 nurbs_curve%elevate_degree proc~elevate_degree~2->none~set~2 proc~elevate_degree~3 nurbs_surface%elevate_degree proc~elevate_degree~3->none~set~3 proc~insert_knots nurbs_volume%insert_knots proc~insert_knots->none~set proc~insert_knots~2 nurbs_curve%insert_knots proc~insert_knots~2->none~set~2 proc~insert_knots~3 nurbs_surface%insert_knots proc~insert_knots~3->none~set~3 proc~modify_wc nurbs_volume%modify_Wc proc~modify_wc->none~set proc~modify_wc~2 nurbs_curve%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_wc~3 nurbs_surface%modify_Wc proc~modify_wc~3->none~set~3 proc~modify_xc nurbs_volume%modify_Xc proc~modify_xc->none~set proc~modify_xc~2 nurbs_curve%modify_Xc proc~modify_xc~2->none~set~2 proc~modify_xc~3 nurbs_surface%modify_Xc proc~modify_xc~3->none~set~3 proc~remove_knots nurbs_volume%remove_knots proc~remove_knots->none~set proc~remove_knots~2 nurbs_curve%remove_knots proc~remove_knots~2->none~set~2 proc~remove_knots~3 nurbs_surface%remove_knots proc~remove_knots~3->none~set~3 proc~set_c nurbs_volume%set_C proc~set_c->none~set proc~set_circle nurbs_curve%set_circle proc~set_circle->none~set~2 proc~set_c~2 nurbs_curve%set_C proc~set_c~2->none~set~2 proc~set_c~3 nurbs_surface%set_C proc~set_c~3->none~set~3 proc~set_half_circle nurbs_curve%set_half_circle proc~set_half_circle->none~set~2 proc~set_half_ring nurbs_volume%set_half_ring proc~set_half_ring->none~set proc~set_half_ring~2 nurbs_surface%set_half_ring proc~set_half_ring~2->none~set~3 proc~set_hexahedron nurbs_volume%set_hexahedron proc~set_hexahedron->none~set proc~set_ring nurbs_volume%set_ring proc~set_ring->none~set proc~set_ring~2 nurbs_surface%set_ring proc~set_ring~2->none~set~3 proc~set_tetragon nurbs_surface%set_tetragon proc~set_tetragon->none~set~3 program~example1_curve example1_curve program~example1_curve->none~set~2 program~example1_curve->proc~elevate_degree~2 program~example1_curve->proc~insert_knots~2 program~example1_curve->proc~remove_knots~2 program~example3_surface example3_surface program~example3_surface->none~set~3 program~example3_surface->proc~elevate_degree~3 program~example3_surface->proc~insert_knots~3 program~example3_surface->proc~remove_knots~3 program~example3_volume example3_volume program~example3_volume->none~set program~example3_volume->proc~elevate_degree program~example3_volume->proc~insert_knots program~example3_volume->proc~remove_knots program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->none~set~2 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->none~set~3 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->none~set program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->none~set program~nearest_point_1d nearest_point_1d program~nearest_point_1d->none~set~2 program~nearest_point_2d nearest_point_2d program~nearest_point_2d->none~set~3 program~nearest_point_3d nearest_point_3d program~nearest_point_3d->none~set program~example_ppm1 example_ppm1 program~example_ppm1->proc~set_ring~2 program~example_ppm1->proc~set_tetragon program~example_ppm2 example_ppm2 program~example_ppm2->proc~set_half_ring~2 program~example_ppm2->proc~set_tetragon program~example_ppm3 example_ppm3 program~example_ppm3->proc~modify_xc~3 program~example_ppm3->proc~set_tetragon program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->proc~set_tetragon program~shape_c_1d shape_C_1d program~shape_c_1d->proc~set_c~2 program~shape_c_2d shape_C_2d program~shape_c_2d->proc~set_c~3 program~shape_c_3d shape_C_3d program~shape_c_3d->proc~set_c program~shape_circle shape_circle program~shape_circle->proc~set_circle program~shape_half_circle shape_half_circle program~shape_half_circle->proc~set_half_circle program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~set_half_ring~2 program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~set_half_ring program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~set_hexahedron program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~set_ring~2 program~shape_ring_3d shape_ring_3d program~shape_ring_3d->proc~set_ring program~shape_tetragon shape_tetragon program~shape_tetragon->proc~set_tetragon Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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":"findspan – ForCAD","text":"public pure function findspan(n, degree, Xth, knot) result(s) Arguments Type Intent Optional Attributes Name integer, intent(in) :: n integer, intent(in) :: degree real(kind=rk), intent(in) :: Xth real(kind=rk), intent(in), contiguous :: knot (:) Return Value integer Called by proc~~findspan~~CalledByGraph proc~findspan findspan proc~insert_knots nurbs_volume%insert_knots proc~insert_knots->proc~findspan proc~insert_knots~2 nurbs_curve%insert_knots proc~insert_knots~2->proc~findspan proc~insert_knots~3 nurbs_surface%insert_knots proc~insert_knots~3->proc~findspan proc~remove_knots nurbs_volume%remove_knots proc~remove_knots->proc~findspan proc~remove_knots~2 nurbs_curve%remove_knots proc~remove_knots~2->proc~findspan proc~remove_knots~3 nurbs_surface%remove_knots proc~remove_knots~3->proc~findspan program~example1_curve example1_curve program~example1_curve->proc~insert_knots~2 program~example1_curve->proc~remove_knots~2 program~example3_surface example3_surface program~example3_surface->proc~insert_knots~3 program~example3_surface->proc~remove_knots~3 program~example3_volume example3_volume program~example3_volume->proc~insert_knots program~example3_volume->proc~remove_knots Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/findspan.html"},{"title":"hexahedron_Xc – ForCAD","text":"public pure function hexahedron_Xc(L, nc) result(Xc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: L (3) integer, intent(in) :: nc (3) Return Value real(kind=rk), allocatable, (:,:) Called by proc~~hexahedron_xc~~CalledByGraph proc~hexahedron_xc hexahedron_Xc proc~set_hexahedron nurbs_volume%set_hexahedron proc~set_hexahedron->proc~hexahedron_xc program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->proc~hexahedron_xc program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~set_hexahedron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/hexahedron_xc.html"},{"title":"kron – ForCAD","text":"public pure function kron(u, v) result(w) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: u (:) real(kind=rk), intent(in), contiguous :: v (:) Return Value real(kind=rk), (size(u)*size(v)) Called by proc~~kron~~CalledByGraph proc~kron kron proc~compute_d2tgc_bspline_2d_scalar compute_d2Tgc_bspline_2d_scalar proc~compute_d2tgc_bspline_2d_scalar->proc~kron proc~compute_d2tgc_bspline_2d_vector compute_d2Tgc_bspline_2d_vector proc~compute_d2tgc_bspline_2d_vector->proc~kron proc~compute_d2tgc_bspline_3d_scalar compute_d2Tgc_bspline_3d_scalar proc~compute_d2tgc_bspline_3d_scalar->proc~kron proc~compute_d2tgc_bspline_3d_vector compute_d2Tgc_bspline_3d_vector proc~compute_d2tgc_bspline_3d_vector->proc~kron proc~compute_d2tgc_nurbs_2d_scalar compute_d2Tgc_nurbs_2d_scalar proc~compute_d2tgc_nurbs_2d_scalar->proc~kron proc~compute_d2tgc_nurbs_2d_vector compute_d2Tgc_nurbs_2d_vector proc~compute_d2tgc_nurbs_2d_vector->proc~kron proc~compute_d2tgc_nurbs_3d_scalar compute_d2Tgc_nurbs_3d_scalar proc~compute_d2tgc_nurbs_3d_scalar->proc~kron proc~compute_d2tgc_nurbs_3d_vector compute_d2Tgc_nurbs_3d_vector proc~compute_d2tgc_nurbs_3d_vector->proc~kron proc~compute_dtgc_bspline_2d_scalar compute_dTgc_bspline_2d_scalar proc~compute_dtgc_bspline_2d_scalar->proc~kron proc~compute_dtgc_bspline_2d_vector compute_dTgc_bspline_2d_vector proc~compute_dtgc_bspline_2d_vector->proc~kron proc~compute_dtgc_bspline_3d_scalar compute_dTgc_bspline_3d_scalar proc~compute_dtgc_bspline_3d_scalar->proc~kron proc~compute_dtgc_bspline_3d_vector compute_dTgc_bspline_3d_vector proc~compute_dtgc_bspline_3d_vector->proc~kron proc~compute_dtgc_nurbs_2d_scalar compute_dTgc_nurbs_2d_scalar proc~compute_dtgc_nurbs_2d_scalar->proc~kron proc~compute_dtgc_nurbs_2d_vector compute_dTgc_nurbs_2d_vector proc~compute_dtgc_nurbs_2d_vector->proc~kron proc~compute_dtgc_nurbs_3d_scalar compute_dTgc_nurbs_3d_scalar proc~compute_dtgc_nurbs_3d_scalar->proc~kron proc~compute_dtgc_nurbs_3d_vector compute_dTgc_nurbs_3d_vector proc~compute_dtgc_nurbs_3d_vector->proc~kron proc~compute_tgc_bspline_2d_scalar compute_Tgc_bspline_2d_scalar proc~compute_tgc_bspline_2d_scalar->proc~kron proc~compute_tgc_bspline_2d_vector compute_Tgc_bspline_2d_vector proc~compute_tgc_bspline_2d_vector->proc~kron proc~compute_tgc_bspline_3d_scalar compute_Tgc_bspline_3d_scalar proc~compute_tgc_bspline_3d_scalar->proc~kron proc~compute_tgc_bspline_3d_vector compute_Tgc_bspline_3d_vector proc~compute_tgc_bspline_3d_vector->proc~kron proc~compute_tgc_nurbs_2d_scalar compute_Tgc_nurbs_2d_scalar proc~compute_tgc_nurbs_2d_scalar->proc~kron proc~compute_tgc_nurbs_2d_vector compute_Tgc_nurbs_2d_vector proc~compute_tgc_nurbs_2d_vector->proc~kron proc~compute_tgc_nurbs_3d_scalar compute_Tgc_nurbs_3d_scalar proc~compute_tgc_nurbs_3d_scalar->proc~kron proc~compute_tgc_nurbs_3d_vector compute_Tgc_nurbs_3d_vector proc~compute_tgc_nurbs_3d_vector->proc~kron proc~compute_xg_bspline_2d compute_Xg_bspline_2d proc~compute_xg_bspline_2d->proc~kron proc~compute_xg_bspline_2d_1point compute_Xg_bspline_2d_1point proc~compute_xg_bspline_2d_1point->proc~kron proc~compute_xg_bspline_3d compute_Xg_bspline_3d proc~compute_xg_bspline_3d->proc~kron proc~compute_xg_bspline_3d_1point compute_Xg_bspline_3d_1point proc~compute_xg_bspline_3d_1point->proc~kron proc~compute_xg_nurbs_2d compute_Xg_nurbs_2d proc~compute_xg_nurbs_2d->proc~kron proc~compute_xg_nurbs_2d_1point compute_Xg_nurbs_2d_1point proc~compute_xg_nurbs_2d_1point->proc~kron proc~compute_xg_nurbs_3d compute_Xg_nurbs_3d proc~compute_xg_nurbs_3d->proc~kron proc~compute_xg_nurbs_3d_1point compute_Xg_nurbs_3d_1point proc~compute_xg_nurbs_3d_1point->proc~kron proc~put_to_nurbs nurbs_volume%put_to_nurbs proc~put_to_nurbs->proc~kron program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->proc~put_to_nurbs Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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":"rotation – ForCAD","text":"public pure function rotation(alpha, beta, theta) result(R) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: alpha real(kind=rk), intent(in) :: beta real(kind=rk), intent(in) :: theta Return Value real(kind=rk), dimension(3,3) Calls proc~~rotation~~CallsGraph proc~rotation rotation cosd cosd proc~rotation->cosd sind sind proc~rotation->sind Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~rotation~~CalledByGraph proc~rotation rotation proc~rotate_xc nurbs_volume%rotate_Xc proc~rotate_xc->proc~rotation proc~rotate_xc~2 nurbs_curve%rotate_Xc proc~rotate_xc~2->proc~rotation proc~rotate_xc~3 nurbs_surface%rotate_Xc proc~rotate_xc~3->proc~rotation proc~rotate_xg nurbs_volume%rotate_Xg proc~rotate_xg->proc~rotation proc~rotate_xg~2 nurbs_curve%rotate_Xg proc~rotate_xg~2->proc~rotation proc~rotate_xg~3 nurbs_surface%rotate_Xg proc~rotate_xg~3->proc~rotation program~example1_curve example1_curve program~example1_curve->proc~rotate_xc~2 program~example1_curve->proc~rotate_xg~2 program~example3_surface example3_surface program~example3_surface->proc~rotate_xc~3 program~example3_surface->proc~rotate_xg~3 program~example3_volume example3_volume program~example3_volume->proc~rotate_xc program~example3_volume->proc~rotate_xg program~example_ppm2 example_ppm2 program~example_ppm2->proc~rotate_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/rotation.html"},{"title":"tetragon_Xc – ForCAD","text":"public pure function tetragon_Xc(L, nc) result(Xc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: L (2) integer, intent(in) :: nc (2) Return Value real(kind=rk), allocatable, (:,:) Called by proc~~tetragon_xc~~CalledByGraph proc~tetragon_xc tetragon_Xc proc~set_tetragon nurbs_surface%set_tetragon proc~set_tetragon->proc~tetragon_xc program~example_ppm1 example_ppm1 program~example_ppm1->proc~set_tetragon program~example_ppm2 example_ppm2 program~example_ppm2->proc~set_tetragon program~example_ppm3 example_ppm3 program~example_ppm3->proc~set_tetragon program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->proc~set_tetragon program~shape_tetragon shape_tetragon program~shape_tetragon->proc~set_tetragon Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/tetragon_xc.html"},{"title":"bincoeff – ForCAD","text":"private pure function bincoeff(n, k) result(b) Arguments Type Intent Optional Attributes Name integer, intent(in) :: n integer, intent(in) :: k Return Value real(kind=rk) Calls proc~~bincoeff~~CallsGraph proc~bincoeff bincoeff proc~factln factln proc~bincoeff->proc~factln Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~bincoeff~~CalledByGraph proc~bincoeff bincoeff proc~elevate_degree_a_5_9 elevate_degree_A_5_9 proc~elevate_degree_a_5_9->proc~bincoeff proc~elevate_degree nurbs_volume%elevate_degree proc~elevate_degree->proc~elevate_degree_a_5_9 proc~elevate_degree~2 nurbs_curve%elevate_degree proc~elevate_degree~2->proc~elevate_degree_a_5_9 proc~elevate_degree~3 nurbs_surface%elevate_degree proc~elevate_degree~3->proc~elevate_degree_a_5_9 program~example1_curve example1_curve program~example1_curve->proc~elevate_degree~2 program~example3_surface example3_surface program~example3_surface->proc~elevate_degree~3 program~example3_volume example3_volume program~example3_volume->proc~elevate_degree Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/bincoeff.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, allocatable, (:,:) Called by proc~~cmp_elemconn_c0_l~~CalledByGraph proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0 elemConn_C0 interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elem_xc_vis nurbs_volume%cmp_elem_Xc_vis proc~cmp_elem_xc_vis->interface~elemconn_c0 proc~cmp_elem_xc_vis~2 nurbs_curve%cmp_elem_Xc_vis proc~cmp_elem_xc_vis~2->interface~elemconn_c0 proc~cmp_elem_xc_vis~3 nurbs_surface%cmp_elem_Xc_vis proc~cmp_elem_xc_vis~3->interface~elemconn_c0 proc~cmp_elem_xg_vis nurbs_volume%cmp_elem_Xg_vis proc~cmp_elem_xg_vis->interface~elemconn_c0 proc~cmp_elem_xg_vis~2 nurbs_curve%cmp_elem_Xg_vis proc~cmp_elem_xg_vis~2->interface~elemconn_c0 proc~cmp_elem_xg_vis~3 nurbs_surface%cmp_elem_Xg_vis proc~cmp_elem_xg_vis~3->interface~elemconn_c0 proc~export_xc nurbs_volume%export_Xc proc~export_xc->proc~cmp_elem_xc_vis proc~export_xc~2 nurbs_curve%export_Xc proc~export_xc~2->proc~cmp_elem_xc_vis~2 proc~export_xc~3 nurbs_surface%export_Xc proc~export_xc~3->proc~cmp_elem_xc_vis~3 proc~export_xg nurbs_volume%export_Xg proc~export_xg->proc~cmp_elem_xg_vis proc~export_xg~2 nurbs_curve%export_Xg proc~export_xg~2->proc~cmp_elem_xg_vis~2 proc~export_xg~3 nurbs_surface%export_Xg proc~export_xg~3->proc~cmp_elem_xg_vis~3 program~example1_curve example1_curve program~example1_curve->proc~export_xc~2 program~example1_curve->proc~export_xg~2 program~example3_surface example3_surface program~example3_surface->proc~export_xc~3 program~example3_surface->proc~export_xg~3 program~example3_volume example3_volume program~example3_volume->proc~export_xc program~example3_volume->proc~export_xg program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~export_xc~2 program~example_nurbs_curve->proc~export_xg~2 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~export_xc~3 program~example_nurbs_surface->proc~export_xg~3 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~export_xc program~example_nurbs_volume->proc~export_xg program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->proc~export_xc program~example_put_to_nurbs->proc~export_xg program~shape_c_1d shape_C_1d program~shape_c_1d->proc~export_xc~2 program~shape_c_1d->proc~export_xg~2 program~shape_c_2d shape_C_2d program~shape_c_2d->proc~export_xc~3 program~shape_c_2d->proc~export_xg~3 program~shape_c_3d shape_C_3d program~shape_c_3d->proc~export_xc program~shape_c_3d->proc~export_xg program~shape_circle shape_circle program~shape_circle->proc~export_xc~2 program~shape_circle->proc~export_xg~2 program~shape_half_circle shape_half_circle program~shape_half_circle->proc~export_xc~2 program~shape_half_circle->proc~export_xg~2 program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~export_xc~3 program~shape_half_ring_2d->proc~export_xg~3 program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~export_xc program~shape_half_ring_3d->proc~export_xg program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~export_xc program~shape_hexahedron->proc~export_xg program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~export_xc~3 program~shape_ring_2d->proc~export_xg~3 program~shape_ring_3d shape_ring_3d program~shape_ring_3d->proc~export_xc program~shape_ring_3d->proc~export_xg program~shape_tetragon shape_tetragon program~shape_tetragon->proc~export_xc~3 program~shape_tetragon->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, allocatable, (:,:) Called by proc~~cmp_elemconn_c0_s~~CalledByGraph proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0 elemConn_C0 interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elem_xc_vis nurbs_volume%cmp_elem_Xc_vis proc~cmp_elem_xc_vis->interface~elemconn_c0 proc~cmp_elem_xc_vis~2 nurbs_curve%cmp_elem_Xc_vis proc~cmp_elem_xc_vis~2->interface~elemconn_c0 proc~cmp_elem_xc_vis~3 nurbs_surface%cmp_elem_Xc_vis proc~cmp_elem_xc_vis~3->interface~elemconn_c0 proc~cmp_elem_xg_vis nurbs_volume%cmp_elem_Xg_vis proc~cmp_elem_xg_vis->interface~elemconn_c0 proc~cmp_elem_xg_vis~2 nurbs_curve%cmp_elem_Xg_vis proc~cmp_elem_xg_vis~2->interface~elemconn_c0 proc~cmp_elem_xg_vis~3 nurbs_surface%cmp_elem_Xg_vis proc~cmp_elem_xg_vis~3->interface~elemconn_c0 proc~export_xc nurbs_volume%export_Xc proc~export_xc->proc~cmp_elem_xc_vis proc~export_xc~2 nurbs_curve%export_Xc proc~export_xc~2->proc~cmp_elem_xc_vis~2 proc~export_xc~3 nurbs_surface%export_Xc proc~export_xc~3->proc~cmp_elem_xc_vis~3 proc~export_xg nurbs_volume%export_Xg proc~export_xg->proc~cmp_elem_xg_vis proc~export_xg~2 nurbs_curve%export_Xg proc~export_xg~2->proc~cmp_elem_xg_vis~2 proc~export_xg~3 nurbs_surface%export_Xg proc~export_xg~3->proc~cmp_elem_xg_vis~3 program~example1_curve example1_curve program~example1_curve->proc~export_xc~2 program~example1_curve->proc~export_xg~2 program~example3_surface example3_surface program~example3_surface->proc~export_xc~3 program~example3_surface->proc~export_xg~3 program~example3_volume example3_volume program~example3_volume->proc~export_xc program~example3_volume->proc~export_xg program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~export_xc~2 program~example_nurbs_curve->proc~export_xg~2 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~export_xc~3 program~example_nurbs_surface->proc~export_xg~3 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~export_xc program~example_nurbs_volume->proc~export_xg program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->proc~export_xc program~example_put_to_nurbs->proc~export_xg program~shape_c_1d shape_C_1d program~shape_c_1d->proc~export_xc~2 program~shape_c_1d->proc~export_xg~2 program~shape_c_2d shape_C_2d program~shape_c_2d->proc~export_xc~3 program~shape_c_2d->proc~export_xg~3 program~shape_c_3d shape_C_3d program~shape_c_3d->proc~export_xc program~shape_c_3d->proc~export_xg program~shape_circle shape_circle program~shape_circle->proc~export_xc~2 program~shape_circle->proc~export_xg~2 program~shape_half_circle shape_half_circle program~shape_half_circle->proc~export_xc~2 program~shape_half_circle->proc~export_xg~2 program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~export_xc~3 program~shape_half_ring_2d->proc~export_xg~3 program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~export_xc program~shape_half_ring_3d->proc~export_xg program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~export_xc program~shape_hexahedron->proc~export_xg program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~export_xc~3 program~shape_ring_2d->proc~export_xg~3 program~shape_ring_3d shape_ring_3d program~shape_ring_3d->proc~export_xc program~shape_ring_3d->proc~export_xg program~shape_tetragon shape_tetragon program~shape_tetragon->proc~export_xc~3 program~shape_tetragon->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, allocatable, (:,:) Called by proc~~cmp_elemconn_c0_v~~CalledByGraph proc~cmp_elemconn_c0_v cmp_elemConn_C0_V interface~elemconn_c0 elemConn_C0 interface~elemconn_c0->proc~cmp_elemconn_c0_v proc~cmp_elem_xc_vis nurbs_volume%cmp_elem_Xc_vis proc~cmp_elem_xc_vis->interface~elemconn_c0 proc~cmp_elem_xc_vis~2 nurbs_curve%cmp_elem_Xc_vis proc~cmp_elem_xc_vis~2->interface~elemconn_c0 proc~cmp_elem_xc_vis~3 nurbs_surface%cmp_elem_Xc_vis proc~cmp_elem_xc_vis~3->interface~elemconn_c0 proc~cmp_elem_xg_vis nurbs_volume%cmp_elem_Xg_vis proc~cmp_elem_xg_vis->interface~elemconn_c0 proc~cmp_elem_xg_vis~2 nurbs_curve%cmp_elem_Xg_vis proc~cmp_elem_xg_vis~2->interface~elemconn_c0 proc~cmp_elem_xg_vis~3 nurbs_surface%cmp_elem_Xg_vis proc~cmp_elem_xg_vis~3->interface~elemconn_c0 proc~export_xc nurbs_volume%export_Xc proc~export_xc->proc~cmp_elem_xc_vis proc~export_xc~2 nurbs_curve%export_Xc proc~export_xc~2->proc~cmp_elem_xc_vis~2 proc~export_xc~3 nurbs_surface%export_Xc proc~export_xc~3->proc~cmp_elem_xc_vis~3 proc~export_xg nurbs_volume%export_Xg proc~export_xg->proc~cmp_elem_xg_vis proc~export_xg~2 nurbs_curve%export_Xg proc~export_xg~2->proc~cmp_elem_xg_vis~2 proc~export_xg~3 nurbs_surface%export_Xg proc~export_xg~3->proc~cmp_elem_xg_vis~3 program~example1_curve example1_curve program~example1_curve->proc~export_xc~2 program~example1_curve->proc~export_xg~2 program~example3_surface example3_surface program~example3_surface->proc~export_xc~3 program~example3_surface->proc~export_xg~3 program~example3_volume example3_volume program~example3_volume->proc~export_xc program~example3_volume->proc~export_xg program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~export_xc~2 program~example_nurbs_curve->proc~export_xg~2 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~export_xc~3 program~example_nurbs_surface->proc~export_xg~3 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~export_xc program~example_nurbs_volume->proc~export_xg program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->proc~export_xc program~example_put_to_nurbs->proc~export_xg program~shape_c_1d shape_C_1d program~shape_c_1d->proc~export_xc~2 program~shape_c_1d->proc~export_xg~2 program~shape_c_2d shape_C_2d program~shape_c_2d->proc~export_xc~3 program~shape_c_2d->proc~export_xg~3 program~shape_c_3d shape_C_3d program~shape_c_3d->proc~export_xc program~shape_c_3d->proc~export_xg program~shape_circle shape_circle program~shape_circle->proc~export_xc~2 program~shape_circle->proc~export_xg~2 program~shape_half_circle shape_half_circle program~shape_half_circle->proc~export_xc~2 program~shape_half_circle->proc~export_xg~2 program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~export_xc~3 program~shape_half_ring_2d->proc~export_xg~3 program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~export_xc program~shape_half_ring_3d->proc~export_xg program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~export_xc program~shape_hexahedron->proc~export_xg program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~export_xc~3 program~shape_ring_2d->proc~export_xg~3 program~shape_ring_3d shape_ring_3d program~shape_ring_3d->proc~export_xc program~shape_ring_3d->proc~export_xg program~shape_tetragon shape_tetragon program~shape_tetragon->proc~export_xc~3 program~shape_tetragon->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":"compute_multiplicity1 – ForCAD","text":"private pure function compute_multiplicity1(knot) result(multiplicity) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: knot (:) Return Value integer, allocatable, (:) Called by proc~~compute_multiplicity1~~CalledByGraph proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity compute_multiplicity interface~compute_multiplicity->proc~compute_multiplicity1 proc~cmp_nc nurbs_volume%cmp_nc proc~cmp_nc->interface~compute_multiplicity proc~cmp_nc~2 nurbs_curve%cmp_nc proc~cmp_nc~2->interface~compute_multiplicity proc~cmp_nc~3 nurbs_surface%cmp_nc proc~cmp_nc~3->interface~compute_multiplicity proc~elevate_degree_a_5_9 elevate_degree_A_5_9 proc~elevate_degree_a_5_9->interface~compute_multiplicity proc~get_continuity nurbs_volume%get_continuity proc~get_continuity->interface~compute_multiplicity proc~get_continuity~2 nurbs_curve%get_continuity proc~get_continuity~2->interface~compute_multiplicity proc~get_continuity~3 nurbs_surface%get_continuity proc~get_continuity~3->interface~compute_multiplicity proc~get_multiplicity nurbs_volume%get_multiplicity proc~get_multiplicity->interface~compute_multiplicity proc~get_multiplicity~2 nurbs_curve%get_multiplicity proc~get_multiplicity~2->interface~compute_multiplicity proc~get_multiplicity~3 nurbs_surface%get_multiplicity proc~get_multiplicity~3->interface~compute_multiplicity proc~get_nc get_nc proc~get_nc->interface~compute_multiplicity proc~get_nc~3 nurbs_surface%get_nc proc~get_nc~3->interface~compute_multiplicity proc~insert_knots nurbs_volume%insert_knots proc~insert_knots->interface~compute_multiplicity none~set nurbs_volume%set proc~insert_knots->none~set proc~insert_knots~2 nurbs_curve%insert_knots proc~insert_knots~2->interface~compute_multiplicity none~set~2 nurbs_curve%set proc~insert_knots~2->none~set~2 proc~insert_knots~3 nurbs_surface%insert_knots proc~insert_knots~3->interface~compute_multiplicity none~set~3 nurbs_surface%set proc~insert_knots~3->none~set~3 proc~remove_knots nurbs_volume%remove_knots proc~remove_knots->interface~compute_multiplicity proc~remove_knots->none~set proc~remove_knots~2 nurbs_curve%remove_knots proc~remove_knots~2->interface~compute_multiplicity proc~remove_knots~2->none~set~2 proc~remove_knots~3 nurbs_surface%remove_knots proc~remove_knots~3->interface~compute_multiplicity proc~remove_knots~3->none~set~3 proc~cmp_degree nurbs_volume%cmp_degree proc~cmp_degree->proc~get_multiplicity proc~cmp_degree~2 nurbs_curve%cmp_degree proc~cmp_degree~2->proc~get_multiplicity~2 proc~cmp_degree~3 nurbs_surface%cmp_degree proc~cmp_degree~3->proc~get_multiplicity~3 proc~cmp_elem nurbs_volume%cmp_elem proc~cmp_elem->proc~get_multiplicity proc~cmp_elem~2 nurbs_curve%cmp_elem proc~cmp_elem~2->proc~get_multiplicity~2 proc~cmp_elem~3 nurbs_surface%cmp_elem proc~cmp_elem~3->proc~get_multiplicity~3 proc~elevate_degree nurbs_volume%elevate_degree proc~elevate_degree->proc~elevate_degree_a_5_9 proc~elevate_degree->none~set proc~elevate_degree~2 nurbs_curve%elevate_degree proc~elevate_degree~2->proc~elevate_degree_a_5_9 proc~elevate_degree~2->none~set~2 proc~elevate_degree~3 nurbs_surface%elevate_degree proc~elevate_degree~3->proc~elevate_degree_a_5_9 proc~elevate_degree~3->none~set~3 proc~set1 nurbs_volume%set1 proc~set1->proc~cmp_nc proc~set1->proc~cmp_degree proc~set1~3 nurbs_surface%set1 proc~set1~3->proc~cmp_nc~3 proc~set1~3->proc~cmp_degree~3 proc~set2 nurbs_volume%set2 proc~set2->proc~cmp_nc proc~set2~3 nurbs_surface%set2 proc~set2~3->proc~cmp_nc~3 program~example1_curve example1_curve program~example1_curve->proc~insert_knots~2 program~example1_curve->proc~remove_knots~2 program~example1_curve->proc~elevate_degree~2 program~example1_curve->none~set~2 program~example3_surface example3_surface program~example3_surface->proc~insert_knots~3 program~example3_surface->proc~remove_knots~3 program~example3_surface->proc~elevate_degree~3 program~example3_surface->none~set~3 program~example3_volume example3_volume program~example3_volume->proc~insert_knots program~example3_volume->proc~remove_knots program~example3_volume->proc~cmp_elem program~example3_volume->proc~elevate_degree program~example3_volume->none~set none~set->proc~set1 none~set->proc~set2 proc~set3 nurbs_volume%set3 none~set->proc~set3 none~set~3->proc~set1~3 none~set~3->proc~set2~3 proc~set3~3 nurbs_surface%set3 none~set~3->proc~set3~3 proc~set1~2 nurbs_curve%set1 proc~set1~2->proc~cmp_degree~2 proc~set3->proc~cmp_degree proc~set3~2 nurbs_curve%set3 proc~set3~2->proc~cmp_degree~2 proc~set3~3->proc~cmp_degree~3 none~set~2->proc~set1~2 none~set~2->proc~set3~2 proc~modify_wc nurbs_volume%modify_Wc proc~modify_wc->none~set proc~modify_wc~3 nurbs_surface%modify_Wc proc~modify_wc~3->none~set~3 proc~modify_xc nurbs_volume%modify_Xc proc~modify_xc->none~set proc~modify_xc~3 nurbs_surface%modify_Xc proc~modify_xc~3->none~set~3 proc~set_c nurbs_volume%set_C proc~set_c->none~set proc~set_c~3 nurbs_surface%set_C proc~set_c~3->none~set~3 proc~set_half_ring nurbs_volume%set_half_ring proc~set_half_ring->none~set proc~set_half_ring~2 nurbs_surface%set_half_ring proc~set_half_ring~2->none~set~3 proc~set_hexahedron nurbs_volume%set_hexahedron proc~set_hexahedron->none~set proc~set_ring nurbs_volume%set_ring proc~set_ring->none~set proc~set_ring~2 nurbs_surface%set_ring proc~set_ring~2->none~set~3 proc~set_tetragon nurbs_surface%set_tetragon proc~set_tetragon->none~set~3 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->none~set~3 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->none~set program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->none~set program~nearest_point_2d nearest_point_2d program~nearest_point_2d->none~set~3 program~nearest_point_3d nearest_point_3d program~nearest_point_3d->none~set proc~modify_wc~2 nurbs_curve%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_xc~2 nurbs_curve%modify_Xc proc~modify_xc~2->none~set~2 proc~set_circle nurbs_curve%set_circle proc~set_circle->none~set~2 proc~set_c~2 nurbs_curve%set_C proc~set_c~2->none~set~2 proc~set_half_circle nurbs_curve%set_half_circle proc~set_half_circle->none~set~2 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->none~set~2 program~example_ppm1 example_ppm1 program~example_ppm1->proc~set_ring~2 program~example_ppm1->proc~set_tetragon program~example_ppm2 example_ppm2 program~example_ppm2->proc~set_half_ring~2 program~example_ppm2->proc~set_tetragon program~example_ppm3 example_ppm3 program~example_ppm3->proc~modify_xc~3 program~example_ppm3->proc~set_tetragon program~nearest_point_1d nearest_point_1d program~nearest_point_1d->none~set~2 program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->proc~set_tetragon program~shape_c_2d shape_C_2d program~shape_c_2d->proc~set_c~3 program~shape_c_3d shape_C_3d program~shape_c_3d->proc~set_c program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~set_half_ring~2 program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~set_half_ring program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~set_hexahedron program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~set_ring~2 program~shape_ring_3d shape_ring_3d program~shape_ring_3d->proc~set_ring program~shape_tetragon shape_tetragon program~shape_tetragon->proc~set_tetragon program~shape_c_1d shape_C_1d program~shape_c_1d->proc~set_c~2 program~shape_circle shape_circle program~shape_circle->proc~set_circle program~shape_half_circle shape_half_circle program~shape_half_circle->proc~set_half_circle Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_multiplicity1.html"},{"title":"compute_multiplicity2 – ForCAD","text":"private pure function compute_multiplicity2(knot, Xth) result(multiplicity) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: knot (:) real(kind=rk), intent(in) :: Xth Return Value integer Called by proc~~compute_multiplicity2~~CalledByGraph proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity compute_multiplicity interface~compute_multiplicity->proc~compute_multiplicity2 proc~cmp_nc nurbs_volume%cmp_nc proc~cmp_nc->interface~compute_multiplicity proc~cmp_nc~2 nurbs_curve%cmp_nc proc~cmp_nc~2->interface~compute_multiplicity proc~cmp_nc~3 nurbs_surface%cmp_nc proc~cmp_nc~3->interface~compute_multiplicity proc~elevate_degree_a_5_9 elevate_degree_A_5_9 proc~elevate_degree_a_5_9->interface~compute_multiplicity proc~get_continuity nurbs_volume%get_continuity proc~get_continuity->interface~compute_multiplicity proc~get_continuity~2 nurbs_curve%get_continuity proc~get_continuity~2->interface~compute_multiplicity proc~get_continuity~3 nurbs_surface%get_continuity proc~get_continuity~3->interface~compute_multiplicity proc~get_multiplicity nurbs_volume%get_multiplicity proc~get_multiplicity->interface~compute_multiplicity proc~get_multiplicity~2 nurbs_curve%get_multiplicity proc~get_multiplicity~2->interface~compute_multiplicity proc~get_multiplicity~3 nurbs_surface%get_multiplicity proc~get_multiplicity~3->interface~compute_multiplicity proc~get_nc get_nc proc~get_nc->interface~compute_multiplicity proc~get_nc~3 nurbs_surface%get_nc proc~get_nc~3->interface~compute_multiplicity proc~insert_knots nurbs_volume%insert_knots proc~insert_knots->interface~compute_multiplicity none~set nurbs_volume%set proc~insert_knots->none~set proc~insert_knots~2 nurbs_curve%insert_knots proc~insert_knots~2->interface~compute_multiplicity none~set~2 nurbs_curve%set proc~insert_knots~2->none~set~2 proc~insert_knots~3 nurbs_surface%insert_knots proc~insert_knots~3->interface~compute_multiplicity none~set~3 nurbs_surface%set proc~insert_knots~3->none~set~3 proc~remove_knots nurbs_volume%remove_knots proc~remove_knots->interface~compute_multiplicity proc~remove_knots->none~set proc~remove_knots~2 nurbs_curve%remove_knots proc~remove_knots~2->interface~compute_multiplicity proc~remove_knots~2->none~set~2 proc~remove_knots~3 nurbs_surface%remove_knots proc~remove_knots~3->interface~compute_multiplicity proc~remove_knots~3->none~set~3 proc~cmp_degree nurbs_volume%cmp_degree proc~cmp_degree->proc~get_multiplicity proc~cmp_degree~2 nurbs_curve%cmp_degree proc~cmp_degree~2->proc~get_multiplicity~2 proc~cmp_degree~3 nurbs_surface%cmp_degree proc~cmp_degree~3->proc~get_multiplicity~3 proc~cmp_elem nurbs_volume%cmp_elem proc~cmp_elem->proc~get_multiplicity proc~cmp_elem~2 nurbs_curve%cmp_elem proc~cmp_elem~2->proc~get_multiplicity~2 proc~cmp_elem~3 nurbs_surface%cmp_elem proc~cmp_elem~3->proc~get_multiplicity~3 proc~elevate_degree nurbs_volume%elevate_degree proc~elevate_degree->proc~elevate_degree_a_5_9 proc~elevate_degree->none~set proc~elevate_degree~2 nurbs_curve%elevate_degree proc~elevate_degree~2->proc~elevate_degree_a_5_9 proc~elevate_degree~2->none~set~2 proc~elevate_degree~3 nurbs_surface%elevate_degree proc~elevate_degree~3->proc~elevate_degree_a_5_9 proc~elevate_degree~3->none~set~3 proc~set1 nurbs_volume%set1 proc~set1->proc~cmp_nc proc~set1->proc~cmp_degree proc~set1~3 nurbs_surface%set1 proc~set1~3->proc~cmp_nc~3 proc~set1~3->proc~cmp_degree~3 proc~set2 nurbs_volume%set2 proc~set2->proc~cmp_nc proc~set2~3 nurbs_surface%set2 proc~set2~3->proc~cmp_nc~3 program~example1_curve example1_curve program~example1_curve->proc~insert_knots~2 program~example1_curve->proc~remove_knots~2 program~example1_curve->proc~elevate_degree~2 program~example1_curve->none~set~2 program~example3_surface example3_surface program~example3_surface->proc~insert_knots~3 program~example3_surface->proc~remove_knots~3 program~example3_surface->proc~elevate_degree~3 program~example3_surface->none~set~3 program~example3_volume example3_volume program~example3_volume->proc~insert_knots program~example3_volume->proc~remove_knots program~example3_volume->proc~cmp_elem program~example3_volume->proc~elevate_degree program~example3_volume->none~set none~set->proc~set1 none~set->proc~set2 proc~set3 nurbs_volume%set3 none~set->proc~set3 none~set~3->proc~set1~3 none~set~3->proc~set2~3 proc~set3~3 nurbs_surface%set3 none~set~3->proc~set3~3 proc~set1~2 nurbs_curve%set1 proc~set1~2->proc~cmp_degree~2 proc~set3->proc~cmp_degree proc~set3~2 nurbs_curve%set3 proc~set3~2->proc~cmp_degree~2 proc~set3~3->proc~cmp_degree~3 none~set~2->proc~set1~2 none~set~2->proc~set3~2 proc~modify_wc nurbs_volume%modify_Wc proc~modify_wc->none~set proc~modify_wc~3 nurbs_surface%modify_Wc proc~modify_wc~3->none~set~3 proc~modify_xc nurbs_volume%modify_Xc proc~modify_xc->none~set proc~modify_xc~3 nurbs_surface%modify_Xc proc~modify_xc~3->none~set~3 proc~set_c nurbs_volume%set_C proc~set_c->none~set proc~set_c~3 nurbs_surface%set_C proc~set_c~3->none~set~3 proc~set_half_ring nurbs_volume%set_half_ring proc~set_half_ring->none~set proc~set_half_ring~2 nurbs_surface%set_half_ring proc~set_half_ring~2->none~set~3 proc~set_hexahedron nurbs_volume%set_hexahedron proc~set_hexahedron->none~set proc~set_ring nurbs_volume%set_ring proc~set_ring->none~set proc~set_ring~2 nurbs_surface%set_ring proc~set_ring~2->none~set~3 proc~set_tetragon nurbs_surface%set_tetragon proc~set_tetragon->none~set~3 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->none~set~3 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->none~set program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->none~set program~nearest_point_2d nearest_point_2d program~nearest_point_2d->none~set~3 program~nearest_point_3d nearest_point_3d program~nearest_point_3d->none~set proc~modify_wc~2 nurbs_curve%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_xc~2 nurbs_curve%modify_Xc proc~modify_xc~2->none~set~2 proc~set_circle nurbs_curve%set_circle proc~set_circle->none~set~2 proc~set_c~2 nurbs_curve%set_C proc~set_c~2->none~set~2 proc~set_half_circle nurbs_curve%set_half_circle proc~set_half_circle->none~set~2 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->none~set~2 program~example_ppm1 example_ppm1 program~example_ppm1->proc~set_ring~2 program~example_ppm1->proc~set_tetragon program~example_ppm2 example_ppm2 program~example_ppm2->proc~set_half_ring~2 program~example_ppm2->proc~set_tetragon program~example_ppm3 example_ppm3 program~example_ppm3->proc~modify_xc~3 program~example_ppm3->proc~set_tetragon program~nearest_point_1d nearest_point_1d program~nearest_point_1d->none~set~2 program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->proc~set_tetragon program~shape_c_2d shape_C_2d program~shape_c_2d->proc~set_c~3 program~shape_c_3d shape_C_3d program~shape_c_3d->proc~set_c program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~set_half_ring~2 program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~set_half_ring program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~set_hexahedron program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~set_ring~2 program~shape_ring_3d shape_ring_3d program~shape_ring_3d->proc~set_ring program~shape_tetragon shape_tetragon program~shape_tetragon->proc~set_tetragon program~shape_c_1d shape_C_1d program~shape_c_1d->proc~set_c~2 program~shape_circle shape_circle program~shape_circle->proc~set_circle program~shape_half_circle shape_half_circle program~shape_half_circle->proc~set_half_circle Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_multiplicity2.html"},{"title":"factln – ForCAD","text":"private pure function factln(n) result(f) Arguments Type Intent Optional Attributes Name integer, intent(in) :: n Return Value real(kind=rk) Called by proc~~factln~~CalledByGraph proc~factln factln proc~bincoeff bincoeff proc~bincoeff->proc~factln proc~elevate_degree_a_5_9 elevate_degree_A_5_9 proc~elevate_degree_a_5_9->proc~bincoeff proc~elevate_degree nurbs_volume%elevate_degree proc~elevate_degree->proc~elevate_degree_a_5_9 proc~elevate_degree~2 nurbs_curve%elevate_degree proc~elevate_degree~2->proc~elevate_degree_a_5_9 proc~elevate_degree~3 nurbs_surface%elevate_degree proc~elevate_degree~3->proc~elevate_degree_a_5_9 program~example1_curve example1_curve program~example1_curve->proc~elevate_degree~2 program~example3_surface example3_surface program~example3_surface->proc~elevate_degree~3 program~example3_volume example3_volume program~example3_volume->proc~elevate_degree Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/factln.html"},{"title":"isinf – ForCAD","text":"private pure elemental function isinf(x) result(output) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: x Return Value logical","tags":"","loc":"proc/isinf.html"},{"title":"isnan – ForCAD","text":"private pure elemental function isnan(x) result(output) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: x Return Value logical","tags":"","loc":"proc/isnan.html"},{"title":"repelem – ForCAD","text":"private pure function repelem(a, b) result(c) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: a (:) integer, intent(in), contiguous :: b (:) Return Value real(kind=rk), (sum(b)) Called by proc~~repelem~~CalledByGraph proc~repelem repelem proc~compute_knot_vector compute_knot_vector proc~compute_knot_vector->proc~repelem proc~set2 nurbs_volume%set2 proc~set2->proc~compute_knot_vector proc~set2~2 nurbs_curve%set2 proc~set2~2->proc~compute_knot_vector proc~set2~3 nurbs_surface%set2 proc~set2~3->proc~compute_knot_vector none~set nurbs_volume%set none~set->proc~set2 none~set~2 nurbs_curve%set none~set~2->proc~set2~2 none~set~3 nurbs_surface%set none~set~3->proc~set2~3 proc~elevate_degree nurbs_volume%elevate_degree proc~elevate_degree->none~set proc~elevate_degree~2 nurbs_curve%elevate_degree proc~elevate_degree~2->none~set~2 proc~elevate_degree~3 nurbs_surface%elevate_degree proc~elevate_degree~3->none~set~3 proc~insert_knots nurbs_volume%insert_knots proc~insert_knots->none~set proc~insert_knots~2 nurbs_curve%insert_knots proc~insert_knots~2->none~set~2 proc~insert_knots~3 nurbs_surface%insert_knots proc~insert_knots~3->none~set~3 proc~modify_wc nurbs_volume%modify_Wc proc~modify_wc->none~set proc~modify_wc~2 nurbs_curve%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_wc~3 nurbs_surface%modify_Wc proc~modify_wc~3->none~set~3 proc~modify_xc nurbs_volume%modify_Xc proc~modify_xc->none~set proc~modify_xc~2 nurbs_curve%modify_Xc proc~modify_xc~2->none~set~2 proc~modify_xc~3 nurbs_surface%modify_Xc proc~modify_xc~3->none~set~3 proc~remove_knots nurbs_volume%remove_knots proc~remove_knots->none~set proc~remove_knots~2 nurbs_curve%remove_knots proc~remove_knots~2->none~set~2 proc~remove_knots~3 nurbs_surface%remove_knots proc~remove_knots~3->none~set~3 proc~set_c nurbs_volume%set_C proc~set_c->none~set proc~set_circle nurbs_curve%set_circle proc~set_circle->none~set~2 proc~set_c~2 nurbs_curve%set_C proc~set_c~2->none~set~2 proc~set_c~3 nurbs_surface%set_C proc~set_c~3->none~set~3 proc~set_half_circle nurbs_curve%set_half_circle proc~set_half_circle->none~set~2 proc~set_half_ring nurbs_volume%set_half_ring proc~set_half_ring->none~set proc~set_half_ring~2 nurbs_surface%set_half_ring proc~set_half_ring~2->none~set~3 proc~set_hexahedron nurbs_volume%set_hexahedron proc~set_hexahedron->none~set proc~set_ring nurbs_volume%set_ring proc~set_ring->none~set proc~set_ring~2 nurbs_surface%set_ring proc~set_ring~2->none~set~3 proc~set_tetragon nurbs_surface%set_tetragon proc~set_tetragon->none~set~3 program~example1_curve example1_curve program~example1_curve->none~set~2 program~example1_curve->proc~elevate_degree~2 program~example1_curve->proc~insert_knots~2 program~example1_curve->proc~remove_knots~2 program~example3_surface example3_surface program~example3_surface->none~set~3 program~example3_surface->proc~elevate_degree~3 program~example3_surface->proc~insert_knots~3 program~example3_surface->proc~remove_knots~3 program~example3_volume example3_volume program~example3_volume->none~set program~example3_volume->proc~elevate_degree program~example3_volume->proc~insert_knots program~example3_volume->proc~remove_knots program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->none~set~2 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->none~set~3 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->none~set program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->none~set program~nearest_point_1d nearest_point_1d program~nearest_point_1d->none~set~2 program~nearest_point_2d nearest_point_2d program~nearest_point_2d->none~set~3 program~nearest_point_3d nearest_point_3d program~nearest_point_3d->none~set program~example_ppm1 example_ppm1 program~example_ppm1->proc~set_ring~2 program~example_ppm1->proc~set_tetragon program~example_ppm2 example_ppm2 program~example_ppm2->proc~set_half_ring~2 program~example_ppm2->proc~set_tetragon program~example_ppm3 example_ppm3 program~example_ppm3->proc~modify_xc~3 program~example_ppm3->proc~set_tetragon program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->proc~set_tetragon program~shape_c_1d shape_C_1d program~shape_c_1d->proc~set_c~2 program~shape_c_2d shape_C_2d program~shape_c_2d->proc~set_c~3 program~shape_c_3d shape_C_3d program~shape_c_3d->proc~set_c program~shape_circle shape_circle program~shape_circle->proc~set_circle program~shape_half_circle shape_half_circle program~shape_half_circle->proc~set_half_circle program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~set_half_ring~2 program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~set_half_ring program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~set_hexahedron program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~set_ring~2 program~shape_ring_3d shape_ring_3d program~shape_ring_3d->proc~set_ring program~shape_tetragon shape_tetragon program~shape_tetragon->proc~set_tetragon Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/repelem.html"},{"title":"unique_integer – ForCAD","text":"private pure function unique_integer(vec) result(output) Arguments Type Intent Optional Attributes Name integer, intent(in), dimension(:), contiguous :: vec Return Value integer, dimension(:), allocatable Called by proc~~unique_integer~~CalledByGraph proc~unique_integer unique_integer interface~unique unique interface~unique->proc~unique_integer proc~cmp_elem nurbs_volume%cmp_elem proc~cmp_elem->interface~unique proc~cmp_elem~2 nurbs_curve%cmp_elem proc~cmp_elem~2->interface~unique proc~cmp_elem~3 nurbs_surface%cmp_elem proc~cmp_elem~3->interface~unique program~example3_volume example3_volume program~example3_volume->proc~cmp_elem Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/unique_integer.html"},{"title":"unique_real – ForCAD","text":"private pure function unique_real(vec) result(output) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), dimension(:), contiguous :: vec Return Value real(kind=rk), dimension(:), allocatable Called by proc~~unique_real~~CalledByGraph proc~unique_real unique_real interface~unique unique interface~unique->proc~unique_real proc~cmp_elem nurbs_volume%cmp_elem proc~cmp_elem->interface~unique proc~cmp_elem~2 nurbs_curve%cmp_elem proc~cmp_elem~2->interface~unique proc~cmp_elem~3 nurbs_surface%cmp_elem proc~cmp_elem~3->interface~unique program~example3_volume example3_volume program~example3_volume->proc~cmp_elem Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/unique_real.html"},{"title":"basis_bspline_2der – ForCAD","text":"public pure subroutine basis_bspline_2der(Xt, knot, nc, degree, d2B, dB, B) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: Xt real(kind=rk), intent(in), contiguous :: knot (:) integer, intent(in) :: nc integer, intent(in) :: degree real(kind=rk), intent(out), allocatable :: d2B (:) real(kind=rk), intent(out), optional, allocatable :: dB (:) real(kind=rk), intent(out), optional, allocatable :: B (:) Called by proc~~basis_bspline_2der~~CalledByGraph proc~basis_bspline_2der basis_bspline_2der proc~compute_d2tgc_bspline_1d_scalar compute_d2Tgc_bspline_1d_scalar proc~compute_d2tgc_bspline_1d_scalar->proc~basis_bspline_2der proc~compute_d2tgc_bspline_1d_vector compute_d2Tgc_bspline_1d_vector proc~compute_d2tgc_bspline_1d_vector->proc~basis_bspline_2der proc~compute_d2tgc_bspline_2d_scalar compute_d2Tgc_bspline_2d_scalar proc~compute_d2tgc_bspline_2d_scalar->proc~basis_bspline_2der proc~compute_d2tgc_bspline_2d_vector compute_d2Tgc_bspline_2d_vector proc~compute_d2tgc_bspline_2d_vector->proc~basis_bspline_2der proc~compute_d2tgc_bspline_3d_scalar compute_d2Tgc_bspline_3d_scalar proc~compute_d2tgc_bspline_3d_scalar->proc~basis_bspline_2der proc~compute_d2tgc_bspline_3d_vector compute_d2Tgc_bspline_3d_vector proc~compute_d2tgc_bspline_3d_vector->proc~basis_bspline_2der proc~compute_d2tgc_nurbs_1d_scalar compute_d2Tgc_nurbs_1d_scalar proc~compute_d2tgc_nurbs_1d_scalar->proc~basis_bspline_2der proc~compute_d2tgc_nurbs_1d_vector compute_d2Tgc_nurbs_1d_vector proc~compute_d2tgc_nurbs_1d_vector->proc~basis_bspline_2der proc~compute_d2tgc_nurbs_2d_scalar compute_d2Tgc_nurbs_2d_scalar proc~compute_d2tgc_nurbs_2d_scalar->proc~basis_bspline_2der proc~compute_d2tgc_nurbs_2d_vector compute_d2Tgc_nurbs_2d_vector proc~compute_d2tgc_nurbs_2d_vector->proc~basis_bspline_2der proc~compute_d2tgc_nurbs_3d_scalar compute_d2Tgc_nurbs_3d_scalar proc~compute_d2tgc_nurbs_3d_scalar->proc~basis_bspline_2der proc~compute_d2tgc_nurbs_3d_vector compute_d2Tgc_nurbs_3d_vector proc~compute_d2tgc_nurbs_3d_vector->proc~basis_bspline_2der Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_2der.html"},{"title":"basis_bspline_der – ForCAD","text":"public pure subroutine basis_bspline_der(Xt, knot, nc, degree, dB, B) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: Xt real(kind=rk), intent(in), contiguous :: knot (:) integer, intent(in) :: nc integer, intent(in) :: degree real(kind=rk), intent(out), allocatable :: dB (:) real(kind=rk), intent(out), optional, allocatable :: B (:) Called by proc~~basis_bspline_der~~CalledByGraph proc~basis_bspline_der basis_bspline_der proc~compute_dtgc_bspline_1d_scalar compute_dTgc_bspline_1d_scalar proc~compute_dtgc_bspline_1d_scalar->proc~basis_bspline_der proc~compute_dtgc_bspline_1d_vector compute_dTgc_bspline_1d_vector proc~compute_dtgc_bspline_1d_vector->proc~basis_bspline_der proc~compute_dtgc_bspline_2d_scalar compute_dTgc_bspline_2d_scalar proc~compute_dtgc_bspline_2d_scalar->proc~basis_bspline_der proc~compute_dtgc_bspline_2d_vector compute_dTgc_bspline_2d_vector proc~compute_dtgc_bspline_2d_vector->proc~basis_bspline_der proc~compute_dtgc_bspline_3d_scalar compute_dTgc_bspline_3d_scalar proc~compute_dtgc_bspline_3d_scalar->proc~basis_bspline_der proc~compute_dtgc_bspline_3d_vector compute_dTgc_bspline_3d_vector proc~compute_dtgc_bspline_3d_vector->proc~basis_bspline_der proc~compute_dtgc_nurbs_1d_scalar compute_dTgc_nurbs_1d_scalar proc~compute_dtgc_nurbs_1d_scalar->proc~basis_bspline_der proc~compute_dtgc_nurbs_1d_vector compute_dTgc_nurbs_1d_vector proc~compute_dtgc_nurbs_1d_vector->proc~basis_bspline_der proc~compute_dtgc_nurbs_2d_scalar compute_dTgc_nurbs_2d_scalar proc~compute_dtgc_nurbs_2d_scalar->proc~basis_bspline_der proc~compute_dtgc_nurbs_2d_vector compute_dTgc_nurbs_2d_vector proc~compute_dtgc_nurbs_2d_vector->proc~basis_bspline_der proc~compute_dtgc_nurbs_3d_scalar compute_dTgc_nurbs_3d_scalar proc~compute_dtgc_nurbs_3d_scalar->proc~basis_bspline_der proc~compute_dtgc_nurbs_3d_vector compute_dTgc_nurbs_3d_vector proc~compute_dtgc_nurbs_3d_vector->proc~basis_bspline_der Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_der.html"},{"title":"elevate_degree_A_5_9 – ForCAD","text":"public pure subroutine elevate_degree_A_5_9(t, knot, degree, Xcw, nc_new, knot_new, Xcw_new) Arguments Type Intent Optional Attributes Name integer, intent(in) :: t real(kind=rk), intent(in), contiguous :: knot (:) integer, intent(in) :: degree real(kind=rk), intent(in), contiguous :: Xcw (:,:) integer, intent(out) :: nc_new real(kind=rk), intent(out), allocatable :: knot_new (:) real(kind=rk), intent(out), allocatable :: Xcw_new (:,:) Calls proc~~elevate_degree_a_5_9~~CallsGraph proc~elevate_degree_a_5_9 elevate_degree_A_5_9 interface~compute_multiplicity compute_multiplicity proc~elevate_degree_a_5_9->interface~compute_multiplicity proc~bincoeff bincoeff proc~elevate_degree_a_5_9->proc~bincoeff proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~factln factln proc~bincoeff->proc~factln Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~elevate_degree_a_5_9~~CalledByGraph proc~elevate_degree_a_5_9 elevate_degree_A_5_9 proc~elevate_degree nurbs_volume%elevate_degree proc~elevate_degree->proc~elevate_degree_a_5_9 proc~elevate_degree~2 nurbs_curve%elevate_degree proc~elevate_degree~2->proc~elevate_degree_a_5_9 proc~elevate_degree~3 nurbs_surface%elevate_degree proc~elevate_degree~3->proc~elevate_degree_a_5_9 program~example1_curve example1_curve program~example1_curve->proc~elevate_degree~2 program~example3_surface example3_surface program~example3_surface->proc~elevate_degree~3 program~example3_volume example3_volume program~example3_volume->proc~elevate_degree Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_a_5_9.html"},{"title":"insert_knot_A_5_1 – ForCAD","text":"public pure subroutine insert_knot_A_5_1(p, UP, Pw, u, k, s, r, nq, UQ, Qw) Arguments Type Intent Optional Attributes Name integer, intent(in) :: p real(kind=rk), intent(in), contiguous :: UP (0:) real(kind=rk), intent(in), contiguous :: Pw (0:,:) real(kind=rk), intent(in) :: u integer, intent(in) :: k integer, intent(in) :: s integer, intent(in) :: r integer, intent(out) :: nq real(kind=rk), intent(out), allocatable :: UQ (:) real(kind=rk), intent(out), allocatable :: Qw (:,:) Called by proc~~insert_knot_a_5_1~~CalledByGraph proc~insert_knot_a_5_1 insert_knot_A_5_1 proc~insert_knots nurbs_volume%insert_knots proc~insert_knots->proc~insert_knot_a_5_1 proc~insert_knots~2 nurbs_curve%insert_knots proc~insert_knots~2->proc~insert_knot_a_5_1 proc~insert_knots~3 nurbs_surface%insert_knots proc~insert_knots~3->proc~insert_knot_a_5_1 program~example1_curve example1_curve program~example1_curve->proc~insert_knots~2 program~example3_surface example3_surface program~example3_surface->proc~insert_knots~3 program~example3_volume example3_volume program~example3_volume->proc~insert_knots Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/insert_knot_a_5_1.html"},{"title":"remove_knots_A_5_8 – ForCAD","text":"public pure subroutine remove_knots_A_5_8(p, knot, Pw, u, r, s, num, t, knot_new, Pw_new) Arguments Type Intent Optional Attributes Name integer, intent(in) :: p real(kind=rk), intent(in), contiguous :: knot (:) real(kind=rk), intent(in), contiguous :: Pw (:,:) real(kind=rk), intent(in) :: u integer, intent(in) :: r integer, intent(in) :: s integer, intent(in) :: num integer, intent(out) :: t real(kind=rk), intent(out), allocatable :: knot_new (:) real(kind=rk), intent(out), allocatable :: Pw_new (:,:) Called by proc~~remove_knots_a_5_8~~CalledByGraph proc~remove_knots_a_5_8 remove_knots_A_5_8 proc~remove_knots nurbs_volume%remove_knots proc~remove_knots->proc~remove_knots_a_5_8 proc~remove_knots~2 nurbs_curve%remove_knots proc~remove_knots~2->proc~remove_knots_a_5_8 proc~remove_knots~3 nurbs_surface%remove_knots proc~remove_knots~3->proc~remove_knots_a_5_8 program~example1_curve example1_curve program~example1_curve->proc~remove_knots~2 program~example3_surface example3_surface program~example3_surface->proc~remove_knots~3 program~example3_volume example3_volume program~example3_volume->proc~remove_knots Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/remove_knots_a_5_8.html"},{"title":"cmp_elemConn_Cn_L – ForCAD","text":"private pure subroutine cmp_elemConn_Cn_L(nnode, p, Xth, vecKnot_mul, elemConn) Arguments Type Intent Optional Attributes Name integer, intent(in) :: nnode integer, intent(in) :: p real(kind=rk), intent(in), contiguous :: Xth (:) integer, intent(in), contiguous :: vecKnot_mul (:) integer, intent(out), allocatable :: elemConn (:,:) Called by proc~~cmp_elemconn_cn_l~~CalledByGraph proc~cmp_elemconn_cn_l cmp_elemConn_Cn_L interface~elemconn_cn elemConn_Cn interface~elemconn_cn->proc~cmp_elemconn_cn_l proc~cmp_elem nurbs_volume%cmp_elem proc~cmp_elem->interface~elemconn_cn proc~cmp_elem~2 nurbs_curve%cmp_elem proc~cmp_elem~2->interface~elemconn_cn proc~cmp_elem~3 nurbs_surface%cmp_elem proc~cmp_elem~3->interface~elemconn_cn program~example3_volume example3_volume program~example3_volume->proc~cmp_elem Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_cn_l.html"},{"title":"cmp_elemConn_Cn_S – ForCAD","text":"private pure subroutine cmp_elemConn_Cn_S(nnode1, nnode2, p1, p2, Xth1, Xth2, vecKnot_mul1, vecKnot_mul2, elemConn) Arguments Type Intent Optional Attributes Name integer, intent(in) :: nnode1 integer, intent(in) :: nnode2 integer, intent(in) :: p1 integer, intent(in) :: p2 real(kind=rk), intent(in), contiguous :: Xth1 (:) real(kind=rk), intent(in), contiguous :: Xth2 (:) integer, intent(in), contiguous :: vecKnot_mul1 (:) integer, intent(in), contiguous :: vecKnot_mul2 (:) integer, intent(out), allocatable :: elemConn (:,:) Called by proc~~cmp_elemconn_cn_s~~CalledByGraph proc~cmp_elemconn_cn_s cmp_elemConn_Cn_S interface~elemconn_cn elemConn_Cn interface~elemconn_cn->proc~cmp_elemconn_cn_s proc~cmp_elem nurbs_volume%cmp_elem proc~cmp_elem->interface~elemconn_cn proc~cmp_elem~2 nurbs_curve%cmp_elem proc~cmp_elem~2->interface~elemconn_cn proc~cmp_elem~3 nurbs_surface%cmp_elem proc~cmp_elem~3->interface~elemconn_cn program~example3_volume example3_volume program~example3_volume->proc~cmp_elem Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_cn_s.html"},{"title":"cmp_elemConn_Cn_V – ForCAD","text":"private pure subroutine cmp_elemConn_Cn_V(nnode1, nnode2, nnode3, p1, p2, p3, Xth1, Xth2, Xth3, vecKnot_mul1, vecKnot_mul2, vecKnot_mul3, 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 real(kind=rk), intent(in), contiguous :: Xth1 (:) real(kind=rk), intent(in), contiguous :: Xth2 (:) real(kind=rk), intent(in), contiguous :: Xth3 (:) integer, intent(in), contiguous :: vecKnot_mul1 (:) integer, intent(in), contiguous :: vecKnot_mul2 (:) integer, intent(in), contiguous :: vecKnot_mul3 (:) integer, intent(out), allocatable :: elemConn (:,:) Called by proc~~cmp_elemconn_cn_v~~CalledByGraph proc~cmp_elemconn_cn_v cmp_elemConn_Cn_V interface~elemconn_cn elemConn_Cn interface~elemconn_cn->proc~cmp_elemconn_cn_v proc~cmp_elem nurbs_volume%cmp_elem proc~cmp_elem->interface~elemconn_cn proc~cmp_elem~2 nurbs_curve%cmp_elem proc~cmp_elem~2->interface~elemconn_cn proc~cmp_elem~3 nurbs_surface%cmp_elem proc~cmp_elem~3->interface~elemconn_cn program~example3_volume example3_volume program~example3_volume->proc~cmp_elem Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_cn_v.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), contiguous :: X_dir1 (:) real(kind=rk), intent(in), contiguous :: X_dir2 (:) real(kind=rk), intent(out), allocatable :: Xt (:,:) Called by proc~~ndgrid2~~CalledByGraph proc~ndgrid2 ndgrid2 interface~ndgrid ndgrid interface~ndgrid->proc~ndgrid2 proc~basis_vector nurbs_volume%basis_vector proc~basis_vector->interface~ndgrid proc~basis_vector~3 nurbs_surface%basis_vector proc~basis_vector~3->interface~ndgrid proc~create nurbs_volume%create proc~create->interface~ndgrid proc~create~3 nurbs_surface%create proc~create~3->interface~ndgrid proc~derivative2_vector nurbs_volume%derivative2_vector proc~derivative2_vector->interface~ndgrid proc~derivative2_vector~3 nurbs_surface%derivative2_vector proc~derivative2_vector~3->interface~ndgrid proc~derivative_vector nurbs_volume%derivative_vector proc~derivative_vector->interface~ndgrid proc~derivative_vector~3 nurbs_surface%derivative_vector proc~derivative_vector~3->interface~ndgrid none~derivative2 nurbs_volume%derivative2 none~derivative2->proc~derivative2_vector none~derivative2~3 nurbs_surface%derivative2 none~derivative2~3->proc~derivative2_vector~3 proc~nearest_point2 nurbs_volume%nearest_point2 proc~nearest_point2->proc~create proc~nearest_point2->none~derivative2 proc~nearest_point2~3 nurbs_surface%nearest_point2 proc~nearest_point2~3->proc~create~3 proc~nearest_point2~3->none~derivative2~3 program~example3_surface example3_surface program~example3_surface->proc~create~3 program~example3_volume example3_volume program~example3_volume->proc~create program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~create~3 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~create program~example_ppm1 example_ppm1 program~example_ppm1->proc~create~3 program~example_ppm2 example_ppm2 program~example_ppm2->proc~create~3 program~example_ppm3 example_ppm3 program~example_ppm3->proc~create~3 program~nearest_point_2d nearest_point_2d program~nearest_point_2d->proc~create~3 program~nearest_point_2d->proc~nearest_point2~3 program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->proc~create~3 program~nearest_point_3d nearest_point_3d program~nearest_point_3d->proc~create program~nearest_point_3d->proc~nearest_point2 program~shape_c_2d shape_C_2d program~shape_c_2d->proc~create~3 program~shape_c_3d shape_C_3d program~shape_c_3d->proc~create program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~create~3 program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~create program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~create program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~create~3 program~shape_ring_3d shape_ring_3d program~shape_ring_3d->proc~create program~shape_tetragon shape_tetragon program~shape_tetragon->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), contiguous :: X_dir1 (:) real(kind=rk), intent(in), contiguous :: X_dir2 (:) real(kind=rk), intent(in), contiguous :: X_dir3 (:) real(kind=rk), intent(out), allocatable :: Xt (:,:) Called by proc~~ndgrid3~~CalledByGraph proc~ndgrid3 ndgrid3 interface~ndgrid ndgrid interface~ndgrid->proc~ndgrid3 proc~basis_vector nurbs_volume%basis_vector proc~basis_vector->interface~ndgrid proc~basis_vector~3 nurbs_surface%basis_vector proc~basis_vector~3->interface~ndgrid proc~create nurbs_volume%create proc~create->interface~ndgrid proc~create~3 nurbs_surface%create proc~create~3->interface~ndgrid proc~derivative2_vector nurbs_volume%derivative2_vector proc~derivative2_vector->interface~ndgrid proc~derivative2_vector~3 nurbs_surface%derivative2_vector proc~derivative2_vector~3->interface~ndgrid proc~derivative_vector nurbs_volume%derivative_vector proc~derivative_vector->interface~ndgrid proc~derivative_vector~3 nurbs_surface%derivative_vector proc~derivative_vector~3->interface~ndgrid none~derivative2 nurbs_volume%derivative2 none~derivative2->proc~derivative2_vector none~derivative2~3 nurbs_surface%derivative2 none~derivative2~3->proc~derivative2_vector~3 proc~nearest_point2 nurbs_volume%nearest_point2 proc~nearest_point2->proc~create proc~nearest_point2->none~derivative2 proc~nearest_point2~3 nurbs_surface%nearest_point2 proc~nearest_point2~3->proc~create~3 proc~nearest_point2~3->none~derivative2~3 program~example3_surface example3_surface program~example3_surface->proc~create~3 program~example3_volume example3_volume program~example3_volume->proc~create program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~create~3 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~create program~example_ppm1 example_ppm1 program~example_ppm1->proc~create~3 program~example_ppm2 example_ppm2 program~example_ppm2->proc~create~3 program~example_ppm3 example_ppm3 program~example_ppm3->proc~create~3 program~nearest_point_2d nearest_point_2d program~nearest_point_2d->proc~create~3 program~nearest_point_2d->proc~nearest_point2~3 program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->proc~create~3 program~nearest_point_3d nearest_point_3d program~nearest_point_3d->proc~create program~nearest_point_3d->proc~nearest_point2 program~shape_c_2d shape_C_2d program~shape_c_2d->proc~create~3 program~shape_c_3d shape_C_3d program~shape_c_3d->proc~create program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~create~3 program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~create program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~create program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~create~3 program~shape_ring_3d shape_ring_3d program~shape_ring_3d->proc~create program~shape_tetragon shape_tetragon program~shape_tetragon->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":"compute_multiplicity – ForCAD","text":"public interface compute_multiplicity Calls interface~~compute_multiplicity~~CallsGraph interface~compute_multiplicity compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~compute_multiplicity~~CalledByGraph interface~compute_multiplicity compute_multiplicity proc~cmp_nc nurbs_volume%cmp_nc proc~cmp_nc->interface~compute_multiplicity proc~cmp_nc~2 nurbs_curve%cmp_nc proc~cmp_nc~2->interface~compute_multiplicity proc~cmp_nc~3 nurbs_surface%cmp_nc proc~cmp_nc~3->interface~compute_multiplicity proc~elevate_degree_a_5_9 elevate_degree_A_5_9 proc~elevate_degree_a_5_9->interface~compute_multiplicity proc~get_continuity nurbs_volume%get_continuity proc~get_continuity->interface~compute_multiplicity proc~get_continuity~2 nurbs_curve%get_continuity proc~get_continuity~2->interface~compute_multiplicity proc~get_continuity~3 nurbs_surface%get_continuity proc~get_continuity~3->interface~compute_multiplicity proc~get_multiplicity nurbs_volume%get_multiplicity proc~get_multiplicity->interface~compute_multiplicity proc~get_multiplicity~2 nurbs_curve%get_multiplicity proc~get_multiplicity~2->interface~compute_multiplicity proc~get_multiplicity~3 nurbs_surface%get_multiplicity proc~get_multiplicity~3->interface~compute_multiplicity proc~get_nc get_nc proc~get_nc->interface~compute_multiplicity proc~get_nc~3 nurbs_surface%get_nc proc~get_nc~3->interface~compute_multiplicity proc~insert_knots nurbs_volume%insert_knots proc~insert_knots->interface~compute_multiplicity none~set nurbs_volume%set proc~insert_knots->none~set proc~insert_knots~2 nurbs_curve%insert_knots proc~insert_knots~2->interface~compute_multiplicity none~set~2 nurbs_curve%set proc~insert_knots~2->none~set~2 proc~insert_knots~3 nurbs_surface%insert_knots proc~insert_knots~3->interface~compute_multiplicity none~set~3 nurbs_surface%set proc~insert_knots~3->none~set~3 proc~remove_knots nurbs_volume%remove_knots proc~remove_knots->interface~compute_multiplicity proc~remove_knots->none~set proc~remove_knots~2 nurbs_curve%remove_knots proc~remove_knots~2->interface~compute_multiplicity proc~remove_knots~2->none~set~2 proc~remove_knots~3 nurbs_surface%remove_knots proc~remove_knots~3->interface~compute_multiplicity proc~remove_knots~3->none~set~3 proc~cmp_degree nurbs_volume%cmp_degree proc~cmp_degree->proc~get_multiplicity proc~cmp_degree~2 nurbs_curve%cmp_degree proc~cmp_degree~2->proc~get_multiplicity~2 proc~cmp_degree~3 nurbs_surface%cmp_degree proc~cmp_degree~3->proc~get_multiplicity~3 proc~cmp_elem nurbs_volume%cmp_elem proc~cmp_elem->proc~get_multiplicity proc~cmp_elem~2 nurbs_curve%cmp_elem proc~cmp_elem~2->proc~get_multiplicity~2 proc~cmp_elem~3 nurbs_surface%cmp_elem proc~cmp_elem~3->proc~get_multiplicity~3 proc~elevate_degree nurbs_volume%elevate_degree proc~elevate_degree->proc~elevate_degree_a_5_9 proc~elevate_degree->none~set proc~elevate_degree~2 nurbs_curve%elevate_degree proc~elevate_degree~2->proc~elevate_degree_a_5_9 proc~elevate_degree~2->none~set~2 proc~elevate_degree~3 nurbs_surface%elevate_degree proc~elevate_degree~3->proc~elevate_degree_a_5_9 proc~elevate_degree~3->none~set~3 proc~set1 nurbs_volume%set1 proc~set1->proc~cmp_nc proc~set1->proc~cmp_degree proc~set1~3 nurbs_surface%set1 proc~set1~3->proc~cmp_nc~3 proc~set1~3->proc~cmp_degree~3 proc~set2 nurbs_volume%set2 proc~set2->proc~cmp_nc proc~set2~3 nurbs_surface%set2 proc~set2~3->proc~cmp_nc~3 program~example1_curve example1_curve program~example1_curve->proc~insert_knots~2 program~example1_curve->proc~remove_knots~2 program~example1_curve->proc~elevate_degree~2 program~example1_curve->none~set~2 program~example3_surface example3_surface program~example3_surface->proc~insert_knots~3 program~example3_surface->proc~remove_knots~3 program~example3_surface->proc~elevate_degree~3 program~example3_surface->none~set~3 program~example3_volume example3_volume program~example3_volume->proc~insert_knots program~example3_volume->proc~remove_knots program~example3_volume->proc~cmp_elem program~example3_volume->proc~elevate_degree program~example3_volume->none~set none~set->proc~set1 none~set->proc~set2 proc~set3 nurbs_volume%set3 none~set->proc~set3 none~set~3->proc~set1~3 none~set~3->proc~set2~3 proc~set3~3 nurbs_surface%set3 none~set~3->proc~set3~3 proc~set1~2 nurbs_curve%set1 proc~set1~2->proc~cmp_degree~2 proc~set3->proc~cmp_degree proc~set3~2 nurbs_curve%set3 proc~set3~2->proc~cmp_degree~2 proc~set3~3->proc~cmp_degree~3 none~set~2->proc~set1~2 none~set~2->proc~set3~2 proc~modify_wc nurbs_volume%modify_Wc proc~modify_wc->none~set proc~modify_wc~3 nurbs_surface%modify_Wc proc~modify_wc~3->none~set~3 proc~modify_xc nurbs_volume%modify_Xc proc~modify_xc->none~set proc~modify_xc~3 nurbs_surface%modify_Xc proc~modify_xc~3->none~set~3 proc~set_c nurbs_volume%set_C proc~set_c->none~set proc~set_c~3 nurbs_surface%set_C proc~set_c~3->none~set~3 proc~set_half_ring nurbs_volume%set_half_ring proc~set_half_ring->none~set proc~set_half_ring~2 nurbs_surface%set_half_ring proc~set_half_ring~2->none~set~3 proc~set_hexahedron nurbs_volume%set_hexahedron proc~set_hexahedron->none~set proc~set_ring nurbs_volume%set_ring proc~set_ring->none~set proc~set_ring~2 nurbs_surface%set_ring proc~set_ring~2->none~set~3 proc~set_tetragon nurbs_surface%set_tetragon proc~set_tetragon->none~set~3 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->none~set~3 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->none~set program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->none~set program~nearest_point_2d nearest_point_2d program~nearest_point_2d->none~set~3 program~nearest_point_3d nearest_point_3d program~nearest_point_3d->none~set proc~modify_wc~2 nurbs_curve%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_xc~2 nurbs_curve%modify_Xc proc~modify_xc~2->none~set~2 proc~set_circle nurbs_curve%set_circle proc~set_circle->none~set~2 proc~set_c~2 nurbs_curve%set_C proc~set_c~2->none~set~2 proc~set_half_circle nurbs_curve%set_half_circle proc~set_half_circle->none~set~2 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->none~set~2 program~example_ppm1 example_ppm1 program~example_ppm1->proc~set_ring~2 program~example_ppm1->proc~set_tetragon program~example_ppm2 example_ppm2 program~example_ppm2->proc~set_half_ring~2 program~example_ppm2->proc~set_tetragon program~example_ppm3 example_ppm3 program~example_ppm3->proc~modify_xc~3 program~example_ppm3->proc~set_tetragon program~nearest_point_1d nearest_point_1d program~nearest_point_1d->none~set~2 program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->proc~set_tetragon program~shape_c_2d shape_C_2d program~shape_c_2d->proc~set_c~3 program~shape_c_3d shape_C_3d program~shape_c_3d->proc~set_c program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~set_half_ring~2 program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~set_half_ring program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~set_hexahedron program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~set_ring~2 program~shape_ring_3d shape_ring_3d program~shape_ring_3d->proc~set_ring program~shape_tetragon shape_tetragon program~shape_tetragon->proc~set_tetragon program~shape_c_1d shape_C_1d program~shape_c_1d->proc~set_c~2 program~shape_circle shape_circle program~shape_circle->proc~set_circle program~shape_half_circle shape_half_circle program~shape_half_circle->proc~set_half_circle Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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 compute_multiplicity1 (knot) result(multiplicity) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: knot (:) Return Value integer, allocatable, (:) private pure function compute_multiplicity2 (knot, Xth) result(multiplicity) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: knot (:) real(kind=rk), intent(in) :: Xth Return Value integer","tags":"","loc":"interface/compute_multiplicity.html"},{"title":"elemConn_C0 – ForCAD","text":"public interface elemConn_C0 Calls interface~~elemconn_c0~~CallsGraph interface~elemconn_c0 elemConn_C0 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v 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 elemConn_C0 proc~cmp_elem_xc_vis nurbs_volume%cmp_elem_Xc_vis proc~cmp_elem_xc_vis->interface~elemconn_c0 proc~cmp_elem_xc_vis~2 nurbs_curve%cmp_elem_Xc_vis proc~cmp_elem_xc_vis~2->interface~elemconn_c0 proc~cmp_elem_xc_vis~3 nurbs_surface%cmp_elem_Xc_vis proc~cmp_elem_xc_vis~3->interface~elemconn_c0 proc~cmp_elem_xg_vis nurbs_volume%cmp_elem_Xg_vis proc~cmp_elem_xg_vis->interface~elemconn_c0 proc~cmp_elem_xg_vis~2 nurbs_curve%cmp_elem_Xg_vis proc~cmp_elem_xg_vis~2->interface~elemconn_c0 proc~cmp_elem_xg_vis~3 nurbs_surface%cmp_elem_Xg_vis proc~cmp_elem_xg_vis~3->interface~elemconn_c0 proc~export_xc nurbs_volume%export_Xc proc~export_xc->proc~cmp_elem_xc_vis proc~export_xc~2 nurbs_curve%export_Xc proc~export_xc~2->proc~cmp_elem_xc_vis~2 proc~export_xc~3 nurbs_surface%export_Xc proc~export_xc~3->proc~cmp_elem_xc_vis~3 proc~export_xg nurbs_volume%export_Xg proc~export_xg->proc~cmp_elem_xg_vis proc~export_xg~2 nurbs_curve%export_Xg proc~export_xg~2->proc~cmp_elem_xg_vis~2 proc~export_xg~3 nurbs_surface%export_Xg proc~export_xg~3->proc~cmp_elem_xg_vis~3 program~example1_curve example1_curve program~example1_curve->proc~export_xc~2 program~example1_curve->proc~export_xg~2 program~example3_surface example3_surface program~example3_surface->proc~export_xc~3 program~example3_surface->proc~export_xg~3 program~example3_volume example3_volume program~example3_volume->proc~export_xc program~example3_volume->proc~export_xg program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~export_xc~2 program~example_nurbs_curve->proc~export_xg~2 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~export_xc~3 program~example_nurbs_surface->proc~export_xg~3 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~export_xc program~example_nurbs_volume->proc~export_xg program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->proc~export_xc program~example_put_to_nurbs->proc~export_xg program~shape_c_1d shape_C_1d program~shape_c_1d->proc~export_xc~2 program~shape_c_1d->proc~export_xg~2 program~shape_c_2d shape_C_2d program~shape_c_2d->proc~export_xc~3 program~shape_c_2d->proc~export_xg~3 program~shape_c_3d shape_C_3d program~shape_c_3d->proc~export_xc program~shape_c_3d->proc~export_xg program~shape_circle shape_circle program~shape_circle->proc~export_xc~2 program~shape_circle->proc~export_xg~2 program~shape_half_circle shape_half_circle program~shape_half_circle->proc~export_xc~2 program~shape_half_circle->proc~export_xg~2 program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~export_xc~3 program~shape_half_ring_2d->proc~export_xg~3 program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~export_xc program~shape_half_ring_3d->proc~export_xg program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~export_xc program~shape_hexahedron->proc~export_xg program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~export_xc~3 program~shape_ring_2d->proc~export_xg~3 program~shape_ring_3d shape_ring_3d program~shape_ring_3d->proc~export_xc program~shape_ring_3d->proc~export_xg program~shape_tetragon shape_tetragon program~shape_tetragon->proc~export_xc~3 program~shape_tetragon->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, 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, 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, allocatable, (:,:)","tags":"","loc":"interface/elemconn_c0.html"},{"title":"elemConn_Cn – ForCAD","text":"public interface elemConn_Cn Calls interface~~elemconn_cn~~CallsGraph interface~elemconn_cn elemConn_Cn proc~cmp_elemconn_cn_l cmp_elemConn_Cn_L interface~elemconn_cn->proc~cmp_elemconn_cn_l proc~cmp_elemconn_cn_s cmp_elemConn_Cn_S interface~elemconn_cn->proc~cmp_elemconn_cn_s proc~cmp_elemconn_cn_v cmp_elemConn_Cn_V interface~elemconn_cn->proc~cmp_elemconn_cn_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_cn~~CalledByGraph interface~elemconn_cn elemConn_Cn proc~cmp_elem nurbs_volume%cmp_elem proc~cmp_elem->interface~elemconn_cn proc~cmp_elem~2 nurbs_curve%cmp_elem proc~cmp_elem~2->interface~elemconn_cn proc~cmp_elem~3 nurbs_surface%cmp_elem proc~cmp_elem~3->interface~elemconn_cn program~example3_volume example3_volume program~example3_volume->proc~cmp_elem Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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 cmp_elemConn_Cn_L (nnode, p, Xth, vecKnot_mul, elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name integer, intent(in) :: nnode integer, intent(in) :: p real(kind=rk), intent(in), contiguous :: Xth (:) integer, intent(in), contiguous :: vecKnot_mul (:) integer, intent(out), allocatable :: elemConn (:,:) private pure subroutine cmp_elemConn_Cn_S (nnode1, nnode2, p1, p2, Xth1, Xth2, vecKnot_mul1, vecKnot_mul2, 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 real(kind=rk), intent(in), contiguous :: Xth1 (:) real(kind=rk), intent(in), contiguous :: Xth2 (:) integer, intent(in), contiguous :: vecKnot_mul1 (:) integer, intent(in), contiguous :: vecKnot_mul2 (:) integer, intent(out), allocatable :: elemConn (:,:) private pure subroutine cmp_elemConn_Cn_V (nnode1, nnode2, nnode3, p1, p2, p3, Xth1, Xth2, Xth3, vecKnot_mul1, vecKnot_mul2, vecKnot_mul3, 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 real(kind=rk), intent(in), contiguous :: Xth1 (:) real(kind=rk), intent(in), contiguous :: Xth2 (:) real(kind=rk), intent(in), contiguous :: Xth3 (:) integer, intent(in), contiguous :: vecKnot_mul1 (:) integer, intent(in), contiguous :: vecKnot_mul2 (:) integer, intent(in), contiguous :: vecKnot_mul3 (:) integer, intent(out), allocatable :: elemConn (:,:)","tags":"","loc":"interface/elemconn_cn.html"},{"title":"ndgrid – ForCAD","text":"public interface ndgrid Calls interface~~ndgrid~~CallsGraph interface~ndgrid ndgrid proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 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 ndgrid proc~basis_vector nurbs_volume%basis_vector proc~basis_vector->interface~ndgrid proc~basis_vector~3 nurbs_surface%basis_vector proc~basis_vector~3->interface~ndgrid proc~create nurbs_volume%create proc~create->interface~ndgrid proc~create~3 nurbs_surface%create proc~create~3->interface~ndgrid proc~derivative2_vector nurbs_volume%derivative2_vector proc~derivative2_vector->interface~ndgrid proc~derivative2_vector~3 nurbs_surface%derivative2_vector proc~derivative2_vector~3->interface~ndgrid proc~derivative_vector nurbs_volume%derivative_vector proc~derivative_vector->interface~ndgrid proc~derivative_vector~3 nurbs_surface%derivative_vector proc~derivative_vector~3->interface~ndgrid none~derivative2 nurbs_volume%derivative2 none~derivative2->proc~derivative2_vector none~derivative2~3 nurbs_surface%derivative2 none~derivative2~3->proc~derivative2_vector~3 proc~nearest_point2 nurbs_volume%nearest_point2 proc~nearest_point2->proc~create proc~nearest_point2->none~derivative2 proc~nearest_point2~3 nurbs_surface%nearest_point2 proc~nearest_point2~3->proc~create~3 proc~nearest_point2~3->none~derivative2~3 program~example3_surface example3_surface program~example3_surface->proc~create~3 program~example3_volume example3_volume program~example3_volume->proc~create program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~create~3 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~create program~example_ppm1 example_ppm1 program~example_ppm1->proc~create~3 program~example_ppm2 example_ppm2 program~example_ppm2->proc~create~3 program~example_ppm3 example_ppm3 program~example_ppm3->proc~create~3 program~nearest_point_2d nearest_point_2d program~nearest_point_2d->proc~create~3 program~nearest_point_2d->proc~nearest_point2~3 program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->proc~create~3 program~nearest_point_3d nearest_point_3d program~nearest_point_3d->proc~create program~nearest_point_3d->proc~nearest_point2 program~shape_c_2d shape_C_2d program~shape_c_2d->proc~create~3 program~shape_c_3d shape_C_3d program~shape_c_3d->proc~create program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~create~3 program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~create program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~create program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~create~3 program~shape_ring_3d shape_ring_3d program~shape_ring_3d->proc~create program~shape_tetragon shape_tetragon program~shape_tetragon->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), contiguous :: X_dir1 (:) real(kind=rk), intent(in), contiguous :: X_dir2 (:) real(kind=rk), intent(out), 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), contiguous :: X_dir1 (:) real(kind=rk), intent(in), contiguous :: X_dir2 (:) real(kind=rk), intent(in), contiguous :: X_dir3 (:) real(kind=rk), intent(out), allocatable :: Xt (:,:)","tags":"","loc":"interface/ndgrid.html"},{"title":"unique – ForCAD","text":"public interface unique Calls interface~~unique~~CallsGraph interface~unique unique proc~unique_integer unique_integer interface~unique->proc~unique_integer proc~unique_real unique_real interface~unique->proc~unique_real Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~unique~~CalledByGraph interface~unique unique proc~cmp_elem nurbs_volume%cmp_elem proc~cmp_elem->interface~unique proc~cmp_elem~2 nurbs_curve%cmp_elem proc~cmp_elem~2->interface~unique proc~cmp_elem~3 nurbs_surface%cmp_elem proc~cmp_elem~3->interface~unique program~example3_volume example3_volume program~example3_volume->proc~cmp_elem Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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 unique_integer (vec) result(output) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name integer, intent(in), dimension(:), contiguous :: vec Return Value integer, dimension(:), allocatable private pure function unique_real (vec) result(output) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), dimension(:), contiguous :: vec Return Value real(kind=rk), dimension(:), allocatable","tags":"","loc":"interface/unique.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), allocatable, (:,:) Called by proc~~generate_xc~3~~CalledByGraph proc~generate_xc~3 generate_Xc program~example3_volume example3_volume program~example3_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), allocatable, (:,:) Called by proc~~generate_xc~4~~CalledByGraph proc~generate_xc~4 generate_Xc program~example_nurbs_curve example_nurbs_curve program~example_nurbs_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":"cmp_Xg – ForCAD","text":"private pure function cmp_Xg(this, Xt) result(Xg) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this real(kind=rk), intent(in) :: Xt Return Value real(kind=rk), allocatable, (:) Calls proc~~cmp_xg~2~~CallsGraph proc~cmp_xg~2 nurbs_curve%cmp_Xg interface~compute_xg~2 compute_Xg proc~cmp_xg~2->interface~compute_xg~2 proc~is_rational~2 nurbs_curve%is_rational proc~cmp_xg~2->proc~is_rational~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. Called by proc~~cmp_xg~2~~CalledByGraph proc~cmp_xg~2 nurbs_curve%cmp_Xg proc~nearest_point2~2 nurbs_curve%nearest_point2 proc~nearest_point2~2->proc~cmp_xg~2 program~nearest_point_1d nearest_point_1d program~nearest_point_1d->proc~nearest_point2~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_xg~2.html"},{"title":"cmp_elem – ForCAD","text":"private pure function cmp_elem(this) result(elemConn) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value integer, allocatable, (:,:) Calls proc~~cmp_elem~2~~CallsGraph proc~cmp_elem~2 nurbs_curve%cmp_elem interface~elemconn_cn elemConn_Cn proc~cmp_elem~2->interface~elemconn_cn interface~unique unique proc~cmp_elem~2->interface~unique proc~get_multiplicity~2 nurbs_curve%get_multiplicity proc~cmp_elem~2->proc~get_multiplicity~2 proc~cmp_elemconn_cn_l cmp_elemConn_Cn_L interface~elemconn_cn->proc~cmp_elemconn_cn_l proc~cmp_elemconn_cn_s cmp_elemConn_Cn_S interface~elemconn_cn->proc~cmp_elemconn_cn_s proc~cmp_elemconn_cn_v cmp_elemConn_Cn_V interface~elemconn_cn->proc~cmp_elemconn_cn_v proc~unique_integer unique_integer interface~unique->proc~unique_integer proc~unique_real unique_real interface~unique->proc~unique_real interface~compute_multiplicity compute_multiplicity proc~get_multiplicity~2->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_elem~2.html"},{"title":"cmp_elem_Xc_vis – ForCAD","text":"private pure function cmp_elem_Xc_vis(this, p) result(elemConn) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in), optional :: p Return Value integer, allocatable, (:,:) Calls proc~~cmp_elem_xc_vis~2~~CallsGraph proc~cmp_elem_xc_vis~2 nurbs_curve%cmp_elem_Xc_vis interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xc_vis~2->interface~elemconn_c0 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v 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~~cmp_elem_xc_vis~2~~CalledByGraph proc~cmp_elem_xc_vis~2 nurbs_curve%cmp_elem_Xc_vis proc~export_xc~2 nurbs_curve%export_Xc proc~export_xc~2->proc~cmp_elem_xc_vis~2 program~example1_curve example1_curve program~example1_curve->proc~export_xc~2 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~export_xc~2 program~shape_c_1d shape_C_1d program~shape_c_1d->proc~export_xc~2 program~shape_circle shape_circle program~shape_circle->proc~export_xc~2 program~shape_half_circle shape_half_circle program~shape_half_circle->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/cmp_elem_xc_vis~2.html"},{"title":"cmp_elem_Xg_vis – ForCAD","text":"private pure function cmp_elem_Xg_vis(this, p) result(elemConn) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in), optional :: p Return Value integer, allocatable, (:,:) Calls proc~~cmp_elem_xg_vis~2~~CallsGraph proc~cmp_elem_xg_vis~2 nurbs_curve%cmp_elem_Xg_vis interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xg_vis~2->interface~elemconn_c0 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v 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~~cmp_elem_xg_vis~2~~CalledByGraph proc~cmp_elem_xg_vis~2 nurbs_curve%cmp_elem_Xg_vis proc~export_xg~2 nurbs_curve%export_Xg proc~export_xg~2->proc~cmp_elem_xg_vis~2 program~example1_curve example1_curve program~example1_curve->proc~export_xg~2 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~export_xg~2 program~shape_c_1d shape_C_1d program~shape_c_1d->proc~export_xg~2 program~shape_circle shape_circle program~shape_circle->proc~export_xg~2 program~shape_half_circle shape_half_circle program~shape_half_circle->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_elem_xg_vis~2.html"},{"title":"get_Wc_all – ForCAD","text":"private pure function get_Wc_all(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, (:) Called by proc~~get_wc_all~2~~CalledByGraph proc~get_wc_all~2 nurbs_curve%get_Wc_all none~get_wc~2 nurbs_curve%get_Wc none~get_wc~2->proc~get_wc_all~2 proc~modify_wc~2 nurbs_curve%modify_Wc proc~modify_wc~2->none~get_wc~2 proc~modify_xc~2 nurbs_curve%modify_Xc proc~modify_xc~2->none~get_wc~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_wc_all~2.html"},{"title":"get_Wci – ForCAD","text":"private pure function get_Wci(this, n) result(Wc) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk) Called by proc~~get_wci~2~~CalledByGraph proc~get_wci~2 nurbs_curve%get_Wci none~get_wc~2 nurbs_curve%get_Wc none~get_wc~2->proc~get_wci~2 proc~modify_wc~2 nurbs_curve%modify_Wc proc~modify_wc~2->none~get_wc~2 proc~modify_xc~2 nurbs_curve%modify_Xc proc~modify_xc~2->none~get_wc~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_wci~2.html"},{"title":"get_Xc_all – ForCAD","text":"private pure function get_Xc_all(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, (:,:) Called by proc~~get_xc_all~2~~CalledByGraph proc~get_xc_all~2 nurbs_curve%get_Xc_all none~get_xc~2 nurbs_curve%get_Xc none~get_xc~2->proc~get_xc_all~2 proc~modify_wc~2 nurbs_curve%modify_Wc proc~modify_wc~2->none~get_xc~2 proc~modify_xc~2 nurbs_curve%modify_Xc proc~modify_xc~2->none~get_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_xc_all~2.html"},{"title":"get_Xci – ForCAD","text":"private pure function get_Xci(this, n) result(Xc) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk), allocatable, (:) Called by proc~~get_xci~2~~CalledByGraph proc~get_xci~2 nurbs_curve%get_Xci none~get_xc~2 nurbs_curve%get_Xc none~get_xc~2->proc~get_xci~2 proc~modify_wc~2 nurbs_curve%modify_Wc proc~modify_wc~2->none~get_xc~2 proc~modify_xc~2 nurbs_curve%modify_Xc proc~modify_xc~2->none~get_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_xci~2.html"},{"title":"get_Xcid – ForCAD","text":"private pure function get_Xcid(this, n, dir) result(Xc) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in) :: n integer, intent(in) :: dir Return Value real(kind=rk) Called by proc~~get_xcid~2~~CalledByGraph proc~get_xcid~2 nurbs_curve%get_Xcid none~get_xc~2 nurbs_curve%get_Xc none~get_xc~2->proc~get_xcid~2 proc~modify_wc~2 nurbs_curve%modify_Wc proc~modify_wc~2->none~get_xc~2 proc~modify_xc~2 nurbs_curve%modify_Xc proc~modify_xc~2->none~get_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_xcid~2.html"},{"title":"get_Xg_all – ForCAD","text":"private pure function get_Xg_all(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_all~2.html"},{"title":"get_Xgi – ForCAD","text":"private pure function get_Xgi(this, n) result(Xg) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"proc/get_xgi~2.html"},{"title":"get_Xgid – ForCAD","text":"private pure function get_Xgid(this, n, dir) result(Xg) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in) :: n integer, intent(in) :: dir Return Value real(kind=rk)","tags":"","loc":"proc/get_xgid~2.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~2.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~2~~CallsGraph proc~get_continuity~2 nurbs_curve%get_continuity interface~compute_multiplicity compute_multiplicity proc~get_continuity~2->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_degree – ForCAD","text":"private pure function get_degree(this) result(degree) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value integer Called by proc~~get_degree~~CalledByGraph proc~get_degree nurbs_curve%get_degree program~example1_curve example1_curve program~example1_curve->proc~get_degree Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_degree.html"},{"title":"get_elem – ForCAD","text":"private pure function get_elem(this) result(elemConn) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value integer, allocatable, (:,:)","tags":"","loc":"proc/get_elem~2.html"},{"title":"get_elem_Xc_vis – ForCAD","text":"private pure function get_elem_Xc_vis(this) result(elemConn) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value integer, allocatable, (:,:)","tags":"","loc":"proc/get_elem_xc_vis~2.html"},{"title":"get_elem_Xg_vis – ForCAD","text":"private pure function get_elem_Xg_vis(this) result(elemConn) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value integer, allocatable, (:,:)","tags":"","loc":"proc/get_elem_xg_vis~2.html"},{"title":"get_knot_all – ForCAD","text":"private pure function get_knot_all(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, (:) Called by proc~~get_knot_all~2~~CalledByGraph proc~get_knot_all~2 nurbs_curve%get_knot_all none~get_knot~2 nurbs_curve%get_knot none~get_knot~2->proc~get_knot_all~2 proc~modify_wc~2 nurbs_curve%modify_Wc proc~modify_wc~2->none~get_knot~2 proc~modify_xc~2 nurbs_curve%modify_Xc proc~modify_xc~2->none~get_knot~2 program~example1_curve example1_curve program~example1_curve->none~get_knot~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_knot_all~2.html"},{"title":"get_knoti – ForCAD","text":"private pure function get_knoti(this, i) result(knot) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in) :: i Return Value real(kind=rk) Called by proc~~get_knoti~2~~CalledByGraph proc~get_knoti~2 nurbs_curve%get_knoti none~get_knot~2 nurbs_curve%get_knot none~get_knot~2->proc~get_knoti~2 proc~modify_wc~2 nurbs_curve%modify_Wc proc~modify_wc~2->none~get_knot~2 proc~modify_xc~2 nurbs_curve%modify_Xc proc~modify_xc~2->none~get_knot~2 program~example1_curve example1_curve program~example1_curve->none~get_knot~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_knoti~2.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~2~~CallsGraph proc~get_multiplicity~2 nurbs_curve%get_multiplicity interface~compute_multiplicity compute_multiplicity proc~get_multiplicity~2->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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 nurbs_curve%get_multiplicity proc~cmp_degree~2 nurbs_curve%cmp_degree proc~cmp_degree~2->proc~get_multiplicity~2 proc~cmp_elem~2 nurbs_curve%cmp_elem proc~cmp_elem~2->proc~get_multiplicity~2 proc~set1~2 nurbs_curve%set1 proc~set1~2->proc~cmp_degree~2 proc~set3~2 nurbs_curve%set3 proc~set3~2->proc~cmp_degree~2 none~set~2 nurbs_curve%set none~set~2->proc~set1~2 none~set~2->proc~set3~2 proc~elevate_degree~2 nurbs_curve%elevate_degree proc~elevate_degree~2->none~set~2 proc~insert_knots~2 nurbs_curve%insert_knots proc~insert_knots~2->none~set~2 proc~modify_wc~2 nurbs_curve%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_xc~2 nurbs_curve%modify_Xc proc~modify_xc~2->none~set~2 proc~remove_knots~2 nurbs_curve%remove_knots proc~remove_knots~2->none~set~2 proc~set_circle nurbs_curve%set_circle proc~set_circle->none~set~2 proc~set_c~2 nurbs_curve%set_C proc~set_c~2->none~set~2 proc~set_half_circle nurbs_curve%set_half_circle proc~set_half_circle->none~set~2 program~example1_curve example1_curve program~example1_curve->none~set~2 program~example1_curve->proc~elevate_degree~2 program~example1_curve->proc~insert_knots~2 program~example1_curve->proc~remove_knots~2 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->none~set~2 program~nearest_point_1d nearest_point_1d program~nearest_point_1d->none~set~2 program~shape_c_1d shape_C_1d program~shape_c_1d->proc~set_c~2 program~shape_circle shape_circle program~shape_circle->proc~set_circle program~shape_half_circle shape_half_circle program~shape_half_circle->proc~set_half_circle Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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) result(nc) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value integer","tags":"","loc":"proc/get_nc~2.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~2.html"},{"title":"is_rational – ForCAD","text":"private pure function is_rational(this) result(r) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value logical Called by proc~~is_rational~2~~CalledByGraph proc~is_rational~2 nurbs_curve%is_rational proc~basis_scalar~2 nurbs_curve%basis_scalar proc~basis_scalar~2->proc~is_rational~2 proc~basis_vector~2 nurbs_curve%basis_vector proc~basis_vector~2->proc~is_rational~2 proc~cmp_xg~2 nurbs_curve%cmp_Xg proc~cmp_xg~2->proc~is_rational~2 proc~create~2 nurbs_curve%create proc~create~2->proc~is_rational~2 proc~derivative2_scalar~2 nurbs_curve%derivative2_scalar proc~derivative2_scalar~2->proc~is_rational~2 proc~derivative2_vector~2 nurbs_curve%derivative2_vector proc~derivative2_vector~2->proc~is_rational~2 proc~derivative_scalar~2 nurbs_curve%derivative_scalar proc~derivative_scalar~2->proc~is_rational~2 proc~derivative_vector~2 nurbs_curve%derivative_vector proc~derivative_vector~2->proc~is_rational~2 proc~elevate_degree~2 nurbs_curve%elevate_degree proc~elevate_degree~2->proc~is_rational~2 proc~insert_knots~2 nurbs_curve%insert_knots proc~insert_knots~2->proc~is_rational~2 proc~remove_knots~2 nurbs_curve%remove_knots proc~remove_knots~2->proc~is_rational~2 none~derivative2~2 nurbs_curve%derivative2 none~derivative2~2->proc~derivative2_scalar~2 none~derivative2~2->proc~derivative2_vector~2 proc~nearest_point2~2 nurbs_curve%nearest_point2 proc~nearest_point2~2->proc~cmp_xg~2 proc~nearest_point2~2->proc~create~2 proc~nearest_point2~2->none~derivative2~2 program~example1_curve example1_curve program~example1_curve->proc~create~2 program~example1_curve->proc~elevate_degree~2 program~example1_curve->proc~insert_knots~2 program~example1_curve->proc~remove_knots~2 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~create~2 program~nearest_point_1d nearest_point_1d program~nearest_point_1d->proc~create~2 program~nearest_point_1d->proc~nearest_point2~2 program~shape_c_1d shape_C_1d program~shape_c_1d->proc~create~2 program~shape_circle shape_circle program~shape_circle->proc~create~2 program~shape_half_circle shape_half_circle program~shape_half_circle->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/is_rational~2.html"},{"title":"basis_scalar – ForCAD","text":"private pure subroutine basis_scalar(this, Xt, Tgc) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in) :: Xt real(kind=rk), intent(out), allocatable :: Tgc (:) Calls proc~~basis_scalar~2~~CallsGraph proc~basis_scalar~2 nurbs_curve%basis_scalar interface~compute_tgc~2 compute_Tgc proc~basis_scalar~2->interface~compute_tgc~2 proc~is_rational~2 nurbs_curve%is_rational proc~basis_scalar~2->proc~is_rational~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_scalar~2.html"},{"title":"basis_vector – ForCAD","text":"private pure subroutine basis_vector(this, res, Xt, Tgc) 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, contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: Tgc (:,:) Calls proc~~basis_vector~2~~CallsGraph proc~basis_vector~2 nurbs_curve%basis_vector interface~compute_tgc~2 compute_Tgc proc~basis_vector~2->interface~compute_tgc~2 proc~is_rational~2 nurbs_curve%is_rational proc~basis_vector~2->proc~is_rational~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_vector~2.html"},{"title":"cmp_degree – ForCAD","text":"private pure subroutine cmp_degree(this) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this Calls proc~~cmp_degree~2~~CallsGraph proc~cmp_degree~2 nurbs_curve%cmp_degree proc~get_multiplicity~2 nurbs_curve%get_multiplicity proc~cmp_degree~2->proc~get_multiplicity~2 interface~compute_multiplicity compute_multiplicity proc~get_multiplicity~2->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~cmp_degree~2~~CalledByGraph proc~cmp_degree~2 nurbs_curve%cmp_degree proc~set1~2 nurbs_curve%set1 proc~set1~2->proc~cmp_degree~2 proc~set3~2 nurbs_curve%set3 proc~set3~2->proc~cmp_degree~2 none~set~2 nurbs_curve%set none~set~2->proc~set1~2 none~set~2->proc~set3~2 proc~elevate_degree~2 nurbs_curve%elevate_degree proc~elevate_degree~2->none~set~2 proc~insert_knots~2 nurbs_curve%insert_knots proc~insert_knots~2->none~set~2 proc~modify_wc~2 nurbs_curve%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_xc~2 nurbs_curve%modify_Xc proc~modify_xc~2->none~set~2 proc~remove_knots~2 nurbs_curve%remove_knots proc~remove_knots~2->none~set~2 proc~set_circle nurbs_curve%set_circle proc~set_circle->none~set~2 proc~set_c~2 nurbs_curve%set_C proc~set_c~2->none~set~2 proc~set_half_circle nurbs_curve%set_half_circle proc~set_half_circle->none~set~2 program~example1_curve example1_curve program~example1_curve->none~set~2 program~example1_curve->proc~elevate_degree~2 program~example1_curve->proc~insert_knots~2 program~example1_curve->proc~remove_knots~2 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->none~set~2 program~nearest_point_1d nearest_point_1d program~nearest_point_1d->none~set~2 program~shape_c_1d shape_C_1d program~shape_c_1d->proc~set_c~2 program~shape_circle shape_circle program~shape_circle->proc~set_circle program~shape_half_circle shape_half_circle program~shape_half_circle->proc~set_half_circle Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_degree~2.html"},{"title":"cmp_nc – ForCAD","text":"private pure subroutine cmp_nc(this) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this Calls proc~~cmp_nc~2~~CallsGraph proc~cmp_nc~2 nurbs_curve%cmp_nc interface~compute_multiplicity compute_multiplicity proc~cmp_nc~2->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_nc~2.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, contiguous :: Xt (:) Calls proc~~create~2~~CallsGraph proc~create~2 nurbs_curve%create interface~compute_xg~2 compute_Xg proc~create~2->interface~compute_xg~2 proc~is_rational~2 nurbs_curve%is_rational proc~create~2->proc~is_rational~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. Called by proc~~create~2~~CalledByGraph proc~create~2 nurbs_curve%create proc~nearest_point2~2 nurbs_curve%nearest_point2 proc~nearest_point2~2->proc~create~2 program~example1_curve example1_curve program~example1_curve->proc~create~2 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~create~2 program~nearest_point_1d nearest_point_1d program~nearest_point_1d->proc~create~2 program~nearest_point_1d->proc~nearest_point2~2 program~shape_c_1d shape_C_1d program~shape_c_1d->proc~create~2 program~shape_circle shape_circle program~shape_circle->proc~create~2 program~shape_half_circle shape_half_circle program~shape_half_circle->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":"derivative2_scalar – ForCAD","text":"private pure subroutine derivative2_scalar(this, Xt, d2Tgc, dTgc, Tgc) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in) :: Xt real(kind=rk), intent(out), allocatable :: d2Tgc (:) real(kind=rk), intent(out), optional, allocatable :: dTgc (:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:) Calls proc~~derivative2_scalar~2~~CallsGraph proc~derivative2_scalar~2 nurbs_curve%derivative2_scalar interface~compute_d2tgc~2 compute_d2Tgc proc~derivative2_scalar~2->interface~compute_d2tgc~2 proc~is_rational~2 nurbs_curve%is_rational proc~derivative2_scalar~2->proc~is_rational~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. Called by proc~~derivative2_scalar~2~~CalledByGraph proc~derivative2_scalar~2 nurbs_curve%derivative2_scalar none~derivative2~2 nurbs_curve%derivative2 none~derivative2~2->proc~derivative2_scalar~2 proc~nearest_point2~2 nurbs_curve%nearest_point2 proc~nearest_point2~2->none~derivative2~2 program~nearest_point_1d nearest_point_1d program~nearest_point_1d->proc~nearest_point2~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/derivative2_scalar~2.html"},{"title":"derivative2_vector – ForCAD","text":"private pure subroutine derivative2_vector(this, res, Xt, d2Tgc, dTgc, Tgc) 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, contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:) real(kind=rk), intent(out), optional, allocatable :: dTgc (:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:,:) Calls proc~~derivative2_vector~2~~CallsGraph proc~derivative2_vector~2 nurbs_curve%derivative2_vector interface~compute_d2tgc~2 compute_d2Tgc proc~derivative2_vector~2->interface~compute_d2tgc~2 proc~is_rational~2 nurbs_curve%is_rational proc~derivative2_vector~2->proc~is_rational~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. Called by proc~~derivative2_vector~2~~CalledByGraph proc~derivative2_vector~2 nurbs_curve%derivative2_vector none~derivative2~2 nurbs_curve%derivative2 none~derivative2~2->proc~derivative2_vector~2 proc~nearest_point2~2 nurbs_curve%nearest_point2 proc~nearest_point2~2->none~derivative2~2 program~nearest_point_1d nearest_point_1d program~nearest_point_1d->proc~nearest_point2~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/derivative2_vector~2.html"},{"title":"derivative_scalar – ForCAD","text":"private pure subroutine derivative_scalar(this, Xt, dTgc, Tgc) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in) :: Xt real(kind=rk), intent(out), allocatable :: dTgc (:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:) Calls proc~~derivative_scalar~2~~CallsGraph proc~derivative_scalar~2 nurbs_curve%derivative_scalar interface~compute_dtgc~2 compute_dTgc proc~derivative_scalar~2->interface~compute_dtgc~2 proc~is_rational~2 nurbs_curve%is_rational proc~derivative_scalar~2->proc~is_rational~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/derivative_scalar~2.html"},{"title":"derivative_vector – ForCAD","text":"private pure subroutine derivative_vector(this, res, Xt, dTgc, Tgc) 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, contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: dTgc (:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:,:) Calls proc~~derivative_vector~2~~CallsGraph proc~derivative_vector~2 nurbs_curve%derivative_vector interface~compute_dtgc~2 compute_dTgc proc~derivative_vector~2->interface~compute_dtgc~2 proc~is_rational~2 nurbs_curve%is_rational proc~derivative_vector~2->proc~is_rational~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/derivative_vector~2.html"},{"title":"elevate_degree – ForCAD","text":"private pure subroutine elevate_degree(this, t) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this integer, intent(in) :: t Calls proc~~elevate_degree~2~~CallsGraph proc~elevate_degree~2 nurbs_curve%elevate_degree none~set~2 nurbs_curve%set proc~elevate_degree~2->none~set~2 proc~elevate_degree_a_5_9 elevate_degree_A_5_9 proc~elevate_degree~2->proc~elevate_degree_a_5_9 proc~is_rational~2 nurbs_curve%is_rational proc~elevate_degree~2->proc~is_rational~2 proc~set1~2 nurbs_curve%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_curve%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_curve%set3 none~set~2->proc~set3~2 interface~compute_multiplicity compute_multiplicity proc~elevate_degree_a_5_9->interface~compute_multiplicity proc~bincoeff bincoeff proc~elevate_degree_a_5_9->proc~bincoeff proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~factln factln proc~bincoeff->proc~factln proc~cmp_degree~2 nurbs_curve%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~compute_knot_vector compute_knot_vector proc~set2~2->proc~compute_knot_vector proc~set3~2->proc~cmp_degree~2 proc~get_multiplicity~2 nurbs_curve%get_multiplicity proc~cmp_degree~2->proc~get_multiplicity~2 proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~get_multiplicity~2->interface~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~~elevate_degree~2~~CalledByGraph proc~elevate_degree~2 nurbs_curve%elevate_degree program~example1_curve example1_curve program~example1_curve->proc~elevate_degree~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/elevate_degree~2.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~2~~CallsGraph proc~export_xc~2 nurbs_curve%export_Xc proc~cmp_elem_xc_vis~2 nurbs_curve%cmp_elem_Xc_vis proc~export_xc~2->proc~cmp_elem_xc_vis~2 interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xc_vis~2->interface~elemconn_c0 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v 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 nurbs_curve%export_Xc program~example1_curve example1_curve program~example1_curve->proc~export_xc~2 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~export_xc~2 program~shape_c_1d shape_C_1d program~shape_c_1d->proc~export_xc~2 program~shape_circle shape_circle program~shape_circle->proc~export_xc~2 program~shape_half_circle shape_half_circle program~shape_half_circle->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_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this character(len=*), intent(in) :: filename Calls proc~~export_xg~2~~CallsGraph proc~export_xg~2 nurbs_curve%export_Xg proc~cmp_elem_xg_vis~2 nurbs_curve%cmp_elem_Xg_vis proc~export_xg~2->proc~cmp_elem_xg_vis~2 interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xg_vis~2->interface~elemconn_c0 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v 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 nurbs_curve%export_Xg program~example1_curve example1_curve program~example1_curve->proc~export_xg~2 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~export_xg~2 program~shape_c_1d shape_C_1d program~shape_c_1d->proc~export_xg~2 program~shape_circle shape_circle program~shape_circle->proc~export_xg~2 program~shape_half_circle shape_half_circle program~shape_half_circle->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_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this Called by proc~~finalize~2~~CalledByGraph proc~finalize~2 nurbs_curve%finalize proc~nearest_point2~2 nurbs_curve%nearest_point2 proc~nearest_point2~2->proc~finalize~2 program~example1_curve example1_curve program~example1_curve->proc~finalize~2 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~finalize~2 program~nearest_point_1d nearest_point_1d program~nearest_point_1d->proc~finalize~2 program~nearest_point_1d->proc~nearest_point2~2 program~shape_c_1d shape_C_1d program~shape_c_1d->proc~finalize~2 program~shape_circle shape_circle program~shape_circle->proc~finalize~2 program~shape_half_circle shape_half_circle program~shape_half_circle->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":"insert_knots – ForCAD","text":"private pure subroutine insert_knots(this, Xth, r) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: Xth (:) integer, intent(in), contiguous :: r (:) Calls proc~~insert_knots~2~~CallsGraph proc~insert_knots~2 nurbs_curve%insert_knots interface~compute_multiplicity compute_multiplicity proc~insert_knots~2->interface~compute_multiplicity none~set~2 nurbs_curve%set proc~insert_knots~2->none~set~2 proc~findspan findspan proc~insert_knots~2->proc~findspan proc~insert_knot_a_5_1 insert_knot_A_5_1 proc~insert_knots~2->proc~insert_knot_a_5_1 proc~is_rational~2 nurbs_curve%is_rational proc~insert_knots~2->proc~is_rational~2 proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~set1~2 nurbs_curve%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_curve%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_curve%set3 none~set~2->proc~set3~2 proc~cmp_degree~2 nurbs_curve%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~compute_knot_vector compute_knot_vector proc~set2~2->proc~compute_knot_vector proc~set3~2->proc~cmp_degree~2 proc~get_multiplicity~2 nurbs_curve%get_multiplicity proc~cmp_degree~2->proc~get_multiplicity~2 proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~get_multiplicity~2->interface~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~~insert_knots~2~~CalledByGraph proc~insert_knots~2 nurbs_curve%insert_knots program~example1_curve example1_curve program~example1_curve->proc~insert_knots~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/insert_knots~2.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~2~~CallsGraph proc~modify_wc~2 nurbs_curve%modify_Wc none~get_knot~2 nurbs_curve%get_knot proc~modify_wc~2->none~get_knot~2 none~get_wc~2 nurbs_curve%get_Wc proc~modify_wc~2->none~get_wc~2 none~get_xc~2 nurbs_curve%get_Xc proc~modify_wc~2->none~get_xc~2 none~set~2 nurbs_curve%set proc~modify_wc~2->none~set~2 proc~get_knot_all~2 nurbs_curve%get_knot_all none~get_knot~2->proc~get_knot_all~2 proc~get_knoti~2 nurbs_curve%get_knoti none~get_knot~2->proc~get_knoti~2 proc~get_wc_all~2 nurbs_curve%get_Wc_all none~get_wc~2->proc~get_wc_all~2 proc~get_wci~2 nurbs_curve%get_Wci none~get_wc~2->proc~get_wci~2 proc~get_xc_all~2 nurbs_curve%get_Xc_all none~get_xc~2->proc~get_xc_all~2 proc~get_xcid~2 nurbs_curve%get_Xcid none~get_xc~2->proc~get_xcid~2 proc~get_xci~2 nurbs_curve%get_Xci none~get_xc~2->proc~get_xci~2 proc~set1~2 nurbs_curve%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_curve%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_curve%set3 none~set~2->proc~set3~2 proc~cmp_degree~2 nurbs_curve%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~compute_knot_vector compute_knot_vector proc~set2~2->proc~compute_knot_vector proc~set3~2->proc~cmp_degree~2 proc~get_multiplicity~2 nurbs_curve%get_multiplicity proc~cmp_degree~2->proc~get_multiplicity~2 proc~repelem repelem proc~compute_knot_vector->proc~repelem interface~compute_multiplicity compute_multiplicity proc~get_multiplicity~2->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_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~2~~CallsGraph proc~modify_xc~2 nurbs_curve%modify_Xc none~get_knot~2 nurbs_curve%get_knot proc~modify_xc~2->none~get_knot~2 none~get_wc~2 nurbs_curve%get_Wc proc~modify_xc~2->none~get_wc~2 none~get_xc~2 nurbs_curve%get_Xc proc~modify_xc~2->none~get_xc~2 none~set~2 nurbs_curve%set proc~modify_xc~2->none~set~2 proc~get_knot_all~2 nurbs_curve%get_knot_all none~get_knot~2->proc~get_knot_all~2 proc~get_knoti~2 nurbs_curve%get_knoti none~get_knot~2->proc~get_knoti~2 proc~get_wc_all~2 nurbs_curve%get_Wc_all none~get_wc~2->proc~get_wc_all~2 proc~get_wci~2 nurbs_curve%get_Wci none~get_wc~2->proc~get_wci~2 proc~get_xc_all~2 nurbs_curve%get_Xc_all none~get_xc~2->proc~get_xc_all~2 proc~get_xcid~2 nurbs_curve%get_Xcid none~get_xc~2->proc~get_xcid~2 proc~get_xci~2 nurbs_curve%get_Xci none~get_xc~2->proc~get_xci~2 proc~set1~2 nurbs_curve%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_curve%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_curve%set3 none~set~2->proc~set3~2 proc~cmp_degree~2 nurbs_curve%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~compute_knot_vector compute_knot_vector proc~set2~2->proc~compute_knot_vector proc~set3~2->proc~cmp_degree~2 proc~get_multiplicity~2 nurbs_curve%get_multiplicity proc~cmp_degree~2->proc~get_multiplicity~2 proc~repelem repelem proc~compute_knot_vector->proc~repelem interface~compute_multiplicity compute_multiplicity proc~get_multiplicity~2->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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":"nearest_point – ForCAD","text":"private pure subroutine nearest_point(this, point_Xg, nearest_Xg, nearest_Xt, id) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this real(kind=rk), intent(in) :: point_Xg (:) real(kind=rk), intent(out), optional, allocatable :: nearest_Xg (:) real(kind=rk), intent(out), optional :: nearest_Xt integer, intent(out), optional :: id Calls proc~~nearest_point~2~~CallsGraph proc~nearest_point~2 nurbs_curve%nearest_point interface~nearest_point_help_1d nearest_point_help_1d proc~nearest_point~2->interface~nearest_point_help_1d Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~nearest_point~2~~CalledByGraph proc~nearest_point~2 nurbs_curve%nearest_point program~nearest_point_1d nearest_point_1d program~nearest_point_1d->proc~nearest_point~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/nearest_point~2.html"},{"title":"nearest_point2 – ForCAD","text":"private impure subroutine nearest_point2(this, point_Xg, tol, maxit, nearest_Xt, nearest_Xg) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in) :: point_Xg (:) real(kind=rk), intent(in) :: tol integer, intent(in) :: maxit real(kind=rk), intent(out) :: nearest_Xt real(kind=rk), intent(out), optional, allocatable :: nearest_Xg (:) Calls proc~~nearest_point2~2~~CallsGraph proc~nearest_point2~2 nurbs_curve%nearest_point2 interface~nearest_point_help_1d nearest_point_help_1d proc~nearest_point2~2->interface~nearest_point_help_1d none~derivative2~2 nurbs_curve%derivative2 proc~nearest_point2~2->none~derivative2~2 proc~cmp_xg~2 nurbs_curve%cmp_Xg proc~nearest_point2~2->proc~cmp_xg~2 proc~create~2 nurbs_curve%create proc~nearest_point2~2->proc~create~2 proc~finalize~2 nurbs_curve%finalize proc~nearest_point2~2->proc~finalize~2 proc~derivative2_scalar~2 nurbs_curve%derivative2_scalar none~derivative2~2->proc~derivative2_scalar~2 proc~derivative2_vector~2 nurbs_curve%derivative2_vector none~derivative2~2->proc~derivative2_vector~2 interface~compute_xg~2 compute_Xg proc~cmp_xg~2->interface~compute_xg~2 proc~is_rational~2 nurbs_curve%is_rational proc~cmp_xg~2->proc~is_rational~2 proc~create~2->interface~compute_xg~2 proc~create~2->proc~is_rational~2 proc~derivative2_scalar~2->proc~is_rational~2 interface~compute_d2tgc~2 compute_d2Tgc proc~derivative2_scalar~2->interface~compute_d2tgc~2 proc~derivative2_vector~2->proc~is_rational~2 proc~derivative2_vector~2->interface~compute_d2tgc~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. Called by proc~~nearest_point2~2~~CalledByGraph proc~nearest_point2~2 nurbs_curve%nearest_point2 program~nearest_point_1d nearest_point_1d program~nearest_point_1d->proc~nearest_point2~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/nearest_point2~2.html"},{"title":"remove_knots – ForCAD","text":"private pure subroutine remove_knots(this, Xth, r) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: Xth (:) integer, intent(in), contiguous :: r (:) Calls proc~~remove_knots~2~~CallsGraph proc~remove_knots~2 nurbs_curve%remove_knots interface~compute_multiplicity compute_multiplicity proc~remove_knots~2->interface~compute_multiplicity none~set~2 nurbs_curve%set proc~remove_knots~2->none~set~2 proc~findspan findspan proc~remove_knots~2->proc~findspan proc~is_rational~2 nurbs_curve%is_rational proc~remove_knots~2->proc~is_rational~2 proc~remove_knots_a_5_8 remove_knots_A_5_8 proc~remove_knots~2->proc~remove_knots_a_5_8 proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~set1~2 nurbs_curve%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_curve%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_curve%set3 none~set~2->proc~set3~2 proc~cmp_degree~2 nurbs_curve%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~compute_knot_vector compute_knot_vector proc~set2~2->proc~compute_knot_vector proc~set3~2->proc~cmp_degree~2 proc~get_multiplicity~2 nurbs_curve%get_multiplicity proc~cmp_degree~2->proc~get_multiplicity~2 proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~get_multiplicity~2->interface~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~~remove_knots~2~~CalledByGraph proc~remove_knots~2 nurbs_curve%remove_knots program~example1_curve example1_curve program~example1_curve->proc~remove_knots~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/remove_knots~2.html"},{"title":"rotate_Xc – ForCAD","text":"private pure subroutine rotate_Xc(this, alpha, beta, theta) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in) :: alpha real(kind=rk), intent(in) :: beta real(kind=rk), intent(in) :: theta Calls proc~~rotate_xc~2~~CallsGraph proc~rotate_xc~2 nurbs_curve%rotate_Xc proc~rotation rotation proc~rotate_xc~2->proc~rotation cosd cosd proc~rotation->cosd sind sind proc~rotation->sind Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~rotate_xc~2~~CalledByGraph proc~rotate_xc~2 nurbs_curve%rotate_Xc program~example1_curve example1_curve program~example1_curve->proc~rotate_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/rotate_xc~2.html"},{"title":"rotate_Xg – ForCAD","text":"private pure subroutine rotate_Xg(this, alpha, beta, theta) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in) :: alpha real(kind=rk), intent(in) :: beta real(kind=rk), intent(in) :: theta Calls proc~~rotate_xg~2~~CallsGraph proc~rotate_xg~2 nurbs_curve%rotate_Xg proc~rotation rotation proc~rotate_xg~2->proc~rotation cosd cosd proc~rotation->cosd sind sind proc~rotation->sind Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~rotate_xg~2~~CalledByGraph proc~rotate_xg~2 nurbs_curve%rotate_Xg program~example1_curve example1_curve program~example1_curve->proc~rotate_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/rotate_xg~2.html"},{"title":"set1 – ForCAD","text":"private pure subroutine set1(this, knot, Xc, Wc) Set knot vector, control points and weights for the NURBS curve object. Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: knot (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) Calls proc~~set1~2~~CallsGraph proc~set1~2 nurbs_curve%set1 proc~cmp_degree~2 nurbs_curve%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~get_multiplicity~2 nurbs_curve%get_multiplicity proc~cmp_degree~2->proc~get_multiplicity~2 interface~compute_multiplicity compute_multiplicity proc~get_multiplicity~2->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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 nurbs_curve%set1 none~set~2 nurbs_curve%set none~set~2->proc~set1~2 proc~elevate_degree~2 nurbs_curve%elevate_degree proc~elevate_degree~2->none~set~2 proc~insert_knots~2 nurbs_curve%insert_knots proc~insert_knots~2->none~set~2 proc~modify_wc~2 nurbs_curve%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_xc~2 nurbs_curve%modify_Xc proc~modify_xc~2->none~set~2 proc~remove_knots~2 nurbs_curve%remove_knots proc~remove_knots~2->none~set~2 proc~set_circle nurbs_curve%set_circle proc~set_circle->none~set~2 proc~set_c~2 nurbs_curve%set_C proc~set_c~2->none~set~2 proc~set_half_circle nurbs_curve%set_half_circle proc~set_half_circle->none~set~2 program~example1_curve example1_curve program~example1_curve->none~set~2 program~example1_curve->proc~elevate_degree~2 program~example1_curve->proc~insert_knots~2 program~example1_curve->proc~remove_knots~2 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->none~set~2 program~nearest_point_1d nearest_point_1d program~nearest_point_1d->none~set~2 program~shape_c_1d shape_C_1d program~shape_c_1d->proc~set_c~2 program~shape_circle shape_circle program~shape_circle->proc~set_circle program~shape_half_circle shape_half_circle program~shape_half_circle->proc~set_half_circle Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_dir, degree, continuity, Xc, Wc) Set NURBS curve using nodes of parameter space (Xth), degree, continuity, control points and weights. Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: Xth_dir (:) integer, intent(in) :: degree integer, intent(in), contiguous :: continuity (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) Calls proc~~set2~2~~CallsGraph proc~set2~2 nurbs_curve%set2 proc~compute_knot_vector compute_knot_vector proc~set2~2->proc~compute_knot_vector proc~repelem 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~2~~CalledByGraph proc~set2~2 nurbs_curve%set2 none~set~2 nurbs_curve%set none~set~2->proc~set2~2 proc~elevate_degree~2 nurbs_curve%elevate_degree proc~elevate_degree~2->none~set~2 proc~insert_knots~2 nurbs_curve%insert_knots proc~insert_knots~2->none~set~2 proc~modify_wc~2 nurbs_curve%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_xc~2 nurbs_curve%modify_Xc proc~modify_xc~2->none~set~2 proc~remove_knots~2 nurbs_curve%remove_knots proc~remove_knots~2->none~set~2 proc~set_circle nurbs_curve%set_circle proc~set_circle->none~set~2 proc~set_c~2 nurbs_curve%set_C proc~set_c~2->none~set~2 proc~set_half_circle nurbs_curve%set_half_circle proc~set_half_circle->none~set~2 program~example1_curve example1_curve program~example1_curve->none~set~2 program~example1_curve->proc~elevate_degree~2 program~example1_curve->proc~insert_knots~2 program~example1_curve->proc~remove_knots~2 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->none~set~2 program~nearest_point_1d nearest_point_1d program~nearest_point_1d->none~set~2 program~shape_c_1d shape_C_1d program~shape_c_1d->proc~set_c~2 program~shape_circle shape_circle program~shape_circle->proc~set_circle program~shape_half_circle shape_half_circle program~shape_half_circle->proc~set_half_circle Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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":"set3 – ForCAD","text":"private pure subroutine set3(this, Xc, Wc) Set Bezier or Rational Bezier curve using control points and weights. Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) Calls proc~~set3~2~~CallsGraph proc~set3~2 nurbs_curve%set3 proc~cmp_degree~2 nurbs_curve%cmp_degree proc~set3~2->proc~cmp_degree~2 proc~get_multiplicity~2 nurbs_curve%get_multiplicity proc~cmp_degree~2->proc~get_multiplicity~2 interface~compute_multiplicity compute_multiplicity proc~get_multiplicity~2->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~set3~2~~CalledByGraph proc~set3~2 nurbs_curve%set3 none~set~2 nurbs_curve%set none~set~2->proc~set3~2 proc~elevate_degree~2 nurbs_curve%elevate_degree proc~elevate_degree~2->none~set~2 proc~insert_knots~2 nurbs_curve%insert_knots proc~insert_knots~2->none~set~2 proc~modify_wc~2 nurbs_curve%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_xc~2 nurbs_curve%modify_Xc proc~modify_xc~2->none~set~2 proc~remove_knots~2 nurbs_curve%remove_knots proc~remove_knots~2->none~set~2 proc~set_circle nurbs_curve%set_circle proc~set_circle->none~set~2 proc~set_c~2 nurbs_curve%set_C proc~set_c~2->none~set~2 proc~set_half_circle nurbs_curve%set_half_circle proc~set_half_circle->none~set~2 program~example1_curve example1_curve program~example1_curve->none~set~2 program~example1_curve->proc~elevate_degree~2 program~example1_curve->proc~insert_knots~2 program~example1_curve->proc~remove_knots~2 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->none~set~2 program~nearest_point_1d nearest_point_1d program~nearest_point_1d->none~set~2 program~shape_c_1d shape_C_1d program~shape_c_1d->proc~set_c~2 program~shape_circle shape_circle program~shape_circle->proc~set_circle program~shape_half_circle shape_half_circle program~shape_half_circle->proc~set_half_circle Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/set3~2.html"},{"title":"set_C – ForCAD","text":"private pure subroutine set_C(this, center, radius) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: center (:) real(kind=rk), intent(in) :: radius Calls proc~~set_c~2~~CallsGraph proc~set_c~2 nurbs_curve%set_C none~set~2 nurbs_curve%set proc~set_c~2->none~set~2 proc~set1~2 nurbs_curve%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_curve%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_curve%set3 none~set~2->proc~set3~2 proc~cmp_degree~2 nurbs_curve%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~compute_knot_vector compute_knot_vector proc~set2~2->proc~compute_knot_vector proc~set3~2->proc~cmp_degree~2 proc~get_multiplicity~2 nurbs_curve%get_multiplicity proc~cmp_degree~2->proc~get_multiplicity~2 proc~repelem repelem proc~compute_knot_vector->proc~repelem interface~compute_multiplicity compute_multiplicity proc~get_multiplicity~2->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~set_c~2~~CalledByGraph proc~set_c~2 nurbs_curve%set_C program~shape_c_1d shape_C_1d program~shape_c_1d->proc~set_c~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_c~2.html"},{"title":"set_circle – ForCAD","text":"private pure subroutine set_circle(this, center, radius) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: center (:) real(kind=rk), intent(in) :: radius Calls proc~~set_circle~~CallsGraph proc~set_circle nurbs_curve%set_circle none~set~2 nurbs_curve%set proc~set_circle->none~set~2 proc~set1~2 nurbs_curve%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_curve%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_curve%set3 none~set~2->proc~set3~2 proc~cmp_degree~2 nurbs_curve%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~compute_knot_vector compute_knot_vector proc~set2~2->proc~compute_knot_vector proc~set3~2->proc~cmp_degree~2 proc~get_multiplicity~2 nurbs_curve%get_multiplicity proc~cmp_degree~2->proc~get_multiplicity~2 proc~repelem repelem proc~compute_knot_vector->proc~repelem interface~compute_multiplicity compute_multiplicity proc~get_multiplicity~2->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~set_circle~~CalledByGraph proc~set_circle nurbs_curve%set_circle program~shape_circle shape_circle program~shape_circle->proc~set_circle Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_circle.html"},{"title":"set_elem – ForCAD","text":"private pure subroutine set_elem(this, elemConn) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:)","tags":"","loc":"proc/set_elem~2.html"},{"title":"set_elem_Xc_vis – ForCAD","text":"private pure subroutine set_elem_Xc_vis(this, elemConn) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:)","tags":"","loc":"proc/set_elem_xc_vis~2.html"},{"title":"set_elem_Xg_vis – ForCAD","text":"private pure subroutine set_elem_Xg_vis(this, elemConn) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:)","tags":"","loc":"proc/set_elem_xg_vis~2.html"},{"title":"set_half_circle – ForCAD","text":"private pure subroutine set_half_circle(this, center, radius) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: center (:) real(kind=rk), intent(in) :: radius Calls proc~~set_half_circle~~CallsGraph proc~set_half_circle nurbs_curve%set_half_circle none~set~2 nurbs_curve%set proc~set_half_circle->none~set~2 proc~set1~2 nurbs_curve%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_curve%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_curve%set3 none~set~2->proc~set3~2 proc~cmp_degree~2 nurbs_curve%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~compute_knot_vector compute_knot_vector proc~set2~2->proc~compute_knot_vector proc~set3~2->proc~cmp_degree~2 proc~get_multiplicity~2 nurbs_curve%get_multiplicity proc~cmp_degree~2->proc~get_multiplicity~2 proc~repelem repelem proc~compute_knot_vector->proc~repelem interface~compute_multiplicity compute_multiplicity proc~get_multiplicity~2->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~set_half_circle~~CalledByGraph proc~set_half_circle nurbs_curve%set_half_circle program~shape_half_circle shape_half_circle program~shape_half_circle->proc~set_half_circle Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_half_circle.html"},{"title":"show – ForCAD","text":"private impure subroutine show(this, vtkfile_Xc, vtkfile_Xg) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this character(len=*), intent(in) :: vtkfile_Xc character(len=*), intent(in) :: vtkfile_Xg Called by proc~~show~2~~CalledByGraph proc~show~2 nurbs_curve%show program~example1_curve example1_curve program~example1_curve->proc~show~2 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~show~2 program~shape_c_1d shape_C_1d program~shape_c_1d->proc~show~2 program~shape_circle shape_circle program~shape_circle->proc~show~2 program~shape_half_circle shape_half_circle program~shape_half_circle->proc~show~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/show~2.html"},{"title":"translate_Xc – ForCAD","text":"private pure subroutine translate_Xc(this, vec) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in) :: vec (:) Called by proc~~translate_xc~2~~CalledByGraph proc~translate_xc~2 nurbs_curve%translate_Xc program~example1_curve example1_curve program~example1_curve->proc~translate_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/translate_xc~2.html"},{"title":"translate_Xg – ForCAD","text":"private pure subroutine translate_Xg(this, vec) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in) :: vec (:) Called by proc~~translate_xg~2~~CalledByGraph proc~translate_xg~2 nurbs_curve%translate_Xg program~example1_curve example1_curve program~example1_curve->proc~translate_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/translate_xg~2.html"},{"title":"compute_Tgc – ForCAD","text":"private interface compute_Tgc Called by interface~~compute_tgc~2~~CalledByGraph interface~compute_tgc~2 compute_Tgc proc~basis_scalar~2 nurbs_curve%basis_scalar proc~basis_scalar~2->interface~compute_tgc~2 proc~basis_vector~2 nurbs_curve%basis_vector proc~basis_vector~2->interface~compute_tgc~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. Functions private pure function compute_Tgc_bspline_1d_scalar(f_Xt, f_knot, f_degree, f_nc) result(f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: f_Xt real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc Return Value real(kind=rk), allocatable, (:) private pure function compute_Tgc_bspline_1d_vector(f_Xt, f_knot, f_degree, f_nc, f_ng) result(f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc integer, intent(in) :: f_ng Return Value real(kind=rk), allocatable, (:,:) private pure function compute_Tgc_nurbs_1d_scalar(f_Xt, f_knot, f_degree, f_nc, f_Wc) result(f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: f_Xt real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc real(kind=rk), intent(in), contiguous :: f_Wc (:) Return Value real(kind=rk), allocatable, (:) private pure function compute_Tgc_nurbs_1d_vector(f_Xt, f_knot, f_degree, f_nc, f_ng, f_Wc) result(f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc integer, intent(in) :: f_ng real(kind=rk), intent(in), contiguous :: f_Wc (:) Return Value real(kind=rk), allocatable, (:,:)","tags":"","loc":"interface/compute_tgc~2.html"},{"title":"compute_Xg – ForCAD","text":"private interface compute_Xg Called by interface~~compute_xg~2~~CalledByGraph interface~compute_xg~2 compute_Xg proc~cmp_xg~2 nurbs_curve%cmp_Xg proc~cmp_xg~2->interface~compute_xg~2 proc~create~2 nurbs_curve%create proc~create~2->interface~compute_xg~2 proc~nearest_point2~2 nurbs_curve%nearest_point2 proc~nearest_point2~2->proc~cmp_xg~2 proc~nearest_point2~2->proc~create~2 program~example1_curve example1_curve program~example1_curve->proc~create~2 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~create~2 program~nearest_point_1d nearest_point_1d program~nearest_point_1d->proc~create~2 program~nearest_point_1d->proc~nearest_point2~2 program~shape_c_1d shape_C_1d program~shape_c_1d->proc~create~2 program~shape_circle shape_circle program~shape_circle->proc~create~2 program~shape_half_circle shape_half_circle program~shape_half_circle->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. Functions private pure function compute_Xg_bspline_1d(f_Xt, f_knot, f_degree, f_nc, f_ng, f_Xc) result(f_Xg) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc integer, intent(in) :: f_ng real(kind=rk), intent(in), contiguous :: f_Xc (:,:) Return Value real(kind=rk), allocatable, (:,:) private pure function compute_Xg_bspline_1d_1point(f_Xt, f_knot, f_degree, f_nc, f_Xc) result(f_Xg) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: f_Xt real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc real(kind=rk), intent(in), contiguous :: f_Xc (:,:) Return Value real(kind=rk), allocatable, (:) private pure function compute_Xg_nurbs_1d(f_Xt, f_knot, f_degree, f_nc, f_ng, f_Xc, f_Wc) result(f_Xg) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc integer, intent(in) :: f_ng real(kind=rk), intent(in), contiguous :: f_Xc (:,:) real(kind=rk), intent(in), contiguous :: f_Wc (:) Return Value real(kind=rk), allocatable, (:,:) private pure function compute_Xg_nurbs_1d_1point(f_Xt, f_knot, f_degree, f_nc, f_Xc, f_Wc) result(f_Xg) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: f_Xt real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc real(kind=rk), intent(in), contiguous :: f_Xc (:,:) real(kind=rk), intent(in), contiguous :: f_Wc (:) Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"interface/compute_xg~2.html"},{"title":"compute_d2Tgc – ForCAD","text":"private interface compute_d2Tgc Called by interface~~compute_d2tgc~2~~CalledByGraph interface~compute_d2tgc~2 compute_d2Tgc proc~derivative2_scalar~2 nurbs_curve%derivative2_scalar proc~derivative2_scalar~2->interface~compute_d2tgc~2 proc~derivative2_vector~2 nurbs_curve%derivative2_vector proc~derivative2_vector~2->interface~compute_d2tgc~2 none~derivative2~2 nurbs_curve%derivative2 none~derivative2~2->proc~derivative2_scalar~2 none~derivative2~2->proc~derivative2_vector~2 proc~nearest_point2~2 nurbs_curve%nearest_point2 proc~nearest_point2~2->none~derivative2~2 program~nearest_point_1d nearest_point_1d program~nearest_point_1d->proc~nearest_point2~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. Subroutines private pure subroutine compute_d2Tgc_bspline_1d_scalar(f_Xt, f_knot, f_degree, f_nc, f_d2Tgc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: f_Xt real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc real(kind=rk), intent(out), allocatable :: f_d2Tgc (:) real(kind=rk), intent(out), allocatable :: f_dTgc (:) real(kind=rk), intent(out), allocatable :: f_Tgc (:) private pure subroutine compute_d2Tgc_bspline_1d_vector(f_Xt, f_knot, f_degree, f_nc, f_ng, f_d2Tgc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc integer, intent(in) :: f_ng real(kind=rk), intent(out), allocatable :: f_d2Tgc (:,:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:,:) private pure subroutine compute_d2Tgc_nurbs_1d_scalar(f_Xt, f_knot, f_degree, f_nc, f_Wc, f_d2Tgc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: f_Xt real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc real(kind=rk), intent(in), contiguous :: f_Wc (:) real(kind=rk), intent(out), allocatable :: f_d2Tgc (:) real(kind=rk), intent(out), allocatable :: f_dTgc (:) real(kind=rk), intent(out), allocatable :: f_Tgc (:) private pure subroutine compute_d2Tgc_nurbs_1d_vector(f_Xt, f_knot, f_degree, f_nc, f_ng, f_Wc, f_d2Tgc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc integer, intent(in) :: f_ng real(kind=rk), intent(in), contiguous :: f_Wc (:) real(kind=rk), intent(out), allocatable :: f_d2Tgc (:,:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:,:)","tags":"","loc":"interface/compute_d2tgc~2.html"},{"title":"compute_dTgc – ForCAD","text":"private interface compute_dTgc Called by interface~~compute_dtgc~2~~CalledByGraph interface~compute_dtgc~2 compute_dTgc proc~derivative_scalar~2 nurbs_curve%derivative_scalar proc~derivative_scalar~2->interface~compute_dtgc~2 proc~derivative_vector~2 nurbs_curve%derivative_vector proc~derivative_vector~2->interface~compute_dtgc~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. Subroutines private pure subroutine compute_dTgc_bspline_1d_scalar(f_Xt, f_knot, f_degree, f_nc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: f_Xt real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc real(kind=rk), intent(out), allocatable :: f_dTgc (:) real(kind=rk), intent(out), allocatable :: f_Tgc (:) private pure subroutine compute_dTgc_bspline_1d_vector(f_Xt, f_knot, f_degree, f_nc, f_ng, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc integer, intent(in) :: f_ng real(kind=rk), intent(out), allocatable :: f_dTgc (:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:,:) private pure subroutine compute_dTgc_nurbs_1d_scalar(f_Xt, f_knot, f_degree, f_nc, f_Wc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: f_Xt real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc real(kind=rk), intent(in), contiguous :: f_Wc (:) real(kind=rk), intent(out), allocatable :: f_dTgc (:) real(kind=rk), intent(out), allocatable :: f_Tgc (:) private pure subroutine compute_dTgc_nurbs_1d_vector(f_Xt, f_knot, f_degree, f_nc, f_ng, f_Wc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc integer, intent(in) :: f_ng real(kind=rk), intent(in), contiguous :: f_Wc (:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:,:)","tags":"","loc":"interface/compute_dtgc~2.html"},{"title":"nearest_point_help_1d – ForCAD","text":"interface Called by interface~~nearest_point_help_1d~~CalledByGraph interface~nearest_point_help_1d nearest_point_help_1d proc~nearest_point2~2 nurbs_curve%nearest_point2 proc~nearest_point2~2->interface~nearest_point_help_1d proc~nearest_point~2 nurbs_curve%nearest_point proc~nearest_point~2->interface~nearest_point_help_1d program~nearest_point_1d nearest_point_1d program~nearest_point_1d->proc~nearest_point2~2 program~nearest_point_1d->proc~nearest_point~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. private pure function nearest_point_help_1d(f_ng, f_Xg, f_point_Xg) result(f_distances) Arguments Type Intent Optional Attributes Name integer, intent(in) :: f_ng real(kind=rk), intent(in), contiguous :: f_Xg (:,:) real(kind=rk), intent(in), contiguous :: f_point_Xg (:) Return Value real(kind=rk),allocatable,(:)","tags":"","loc":"interface/nearest_point_help_1d.html"},{"title":"cmp_Xg – ForCAD","text":"private pure function cmp_Xg(this, Xt) result(Xg) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this real(kind=rk), intent(in), contiguous :: Xt (:) Return Value real(kind=rk), allocatable, (:) Calls proc~~cmp_xg~3~~CallsGraph proc~cmp_xg~3 nurbs_surface%cmp_Xg interface~compute_xg~3 compute_Xg proc~cmp_xg~3->interface~compute_xg~3 proc~is_rational~3 nurbs_surface%is_rational proc~cmp_xg~3->proc~is_rational~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. Called by proc~~cmp_xg~3~~CalledByGraph proc~cmp_xg~3 nurbs_surface%cmp_Xg proc~nearest_point2~3 nurbs_surface%nearest_point2 proc~nearest_point2~3->proc~cmp_xg~3 program~nearest_point_2d nearest_point_2d program~nearest_point_2d->proc~nearest_point2~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_xg~3.html"},{"title":"cmp_elem – ForCAD","text":"private pure function cmp_elem(this) result(elemConn) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value integer, allocatable, (:,:) Calls proc~~cmp_elem~3~~CallsGraph proc~cmp_elem~3 nurbs_surface%cmp_elem interface~elemconn_cn elemConn_Cn proc~cmp_elem~3->interface~elemconn_cn interface~unique unique proc~cmp_elem~3->interface~unique proc~get_multiplicity~3 nurbs_surface%get_multiplicity proc~cmp_elem~3->proc~get_multiplicity~3 proc~cmp_elemconn_cn_l cmp_elemConn_Cn_L interface~elemconn_cn->proc~cmp_elemconn_cn_l proc~cmp_elemconn_cn_s cmp_elemConn_Cn_S interface~elemconn_cn->proc~cmp_elemconn_cn_s proc~cmp_elemconn_cn_v cmp_elemConn_Cn_V interface~elemconn_cn->proc~cmp_elemconn_cn_v proc~unique_integer unique_integer interface~unique->proc~unique_integer proc~unique_real unique_real interface~unique->proc~unique_real interface~compute_multiplicity compute_multiplicity proc~get_multiplicity~3->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_elem~3.html"},{"title":"cmp_elem_Xc_vis – ForCAD","text":"private pure function cmp_elem_Xc_vis(this, p) result(elemConn) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in), optional, contiguous :: p (:) Return Value integer, allocatable, (:,:) Calls proc~~cmp_elem_xc_vis~3~~CallsGraph proc~cmp_elem_xc_vis~3 nurbs_surface%cmp_elem_Xc_vis interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xc_vis~3->interface~elemconn_c0 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v 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~~cmp_elem_xc_vis~3~~CalledByGraph proc~cmp_elem_xc_vis~3 nurbs_surface%cmp_elem_Xc_vis proc~export_xc~3 nurbs_surface%export_Xc proc~export_xc~3->proc~cmp_elem_xc_vis~3 program~example3_surface example3_surface program~example3_surface->proc~export_xc~3 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~export_xc~3 program~shape_c_2d shape_C_2d program~shape_c_2d->proc~export_xc~3 program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~export_xc~3 program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~export_xc~3 program~shape_tetragon shape_tetragon program~shape_tetragon->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/cmp_elem_xc_vis~3.html"},{"title":"cmp_elem_Xg_vis – ForCAD","text":"private pure function cmp_elem_Xg_vis(this, p) result(elemConn) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in), optional, contiguous :: p (:) Return Value integer, allocatable, (:,:) Calls proc~~cmp_elem_xg_vis~3~~CallsGraph proc~cmp_elem_xg_vis~3 nurbs_surface%cmp_elem_Xg_vis interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xg_vis~3->interface~elemconn_c0 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v 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~~cmp_elem_xg_vis~3~~CalledByGraph proc~cmp_elem_xg_vis~3 nurbs_surface%cmp_elem_Xg_vis proc~export_xg~3 nurbs_surface%export_Xg proc~export_xg~3->proc~cmp_elem_xg_vis~3 program~example3_surface example3_surface program~example3_surface->proc~export_xg~3 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~export_xg~3 program~shape_c_2d shape_C_2d program~shape_c_2d->proc~export_xg~3 program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~export_xg~3 program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~export_xg~3 program~shape_tetragon shape_tetragon program~shape_tetragon->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_elem_xg_vis~3.html"},{"title":"get_Wc_all – ForCAD","text":"private pure function get_Wc_all(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, (:) Called by proc~~get_wc_all~3~~CalledByGraph proc~get_wc_all~3 nurbs_surface%get_Wc_all none~get_wc~3 nurbs_surface%get_Wc none~get_wc~3->proc~get_wc_all~3 proc~modify_wc~3 nurbs_surface%modify_Wc proc~modify_wc~3->none~get_wc~3 proc~modify_xc~3 nurbs_surface%modify_Xc proc~modify_xc~3->none~get_wc~3 program~example_ppm3 example_ppm3 program~example_ppm3->proc~modify_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_wc_all~3.html"},{"title":"get_Wci – ForCAD","text":"private pure function get_Wci(this, n) result(Wc) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk) Called by proc~~get_wci~3~~CalledByGraph proc~get_wci~3 nurbs_surface%get_Wci none~get_wc~3 nurbs_surface%get_Wc none~get_wc~3->proc~get_wci~3 proc~modify_wc~3 nurbs_surface%modify_Wc proc~modify_wc~3->none~get_wc~3 proc~modify_xc~3 nurbs_surface%modify_Xc proc~modify_xc~3->none~get_wc~3 program~example_ppm3 example_ppm3 program~example_ppm3->proc~modify_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_wci~3.html"},{"title":"get_Xc_all – ForCAD","text":"private pure function get_Xc_all(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, (:,:) Called by proc~~get_xc_all~3~~CalledByGraph proc~get_xc_all~3 nurbs_surface%get_Xc_all none~get_xc~3 nurbs_surface%get_Xc none~get_xc~3->proc~get_xc_all~3 proc~modify_wc~3 nurbs_surface%modify_Wc proc~modify_wc~3->none~get_xc~3 proc~modify_xc~3 nurbs_surface%modify_Xc proc~modify_xc~3->none~get_xc~3 program~example_ppm3 example_ppm3 program~example_ppm3->proc~modify_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_xc_all~3.html"},{"title":"get_Xci – ForCAD","text":"private pure function get_Xci(this, n) result(Xc) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk), allocatable, (:) Called by proc~~get_xci~3~~CalledByGraph proc~get_xci~3 nurbs_surface%get_Xci none~get_xc~3 nurbs_surface%get_Xc none~get_xc~3->proc~get_xci~3 proc~modify_wc~3 nurbs_surface%modify_Wc proc~modify_wc~3->none~get_xc~3 proc~modify_xc~3 nurbs_surface%modify_Xc proc~modify_xc~3->none~get_xc~3 program~example_ppm3 example_ppm3 program~example_ppm3->proc~modify_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_xci~3.html"},{"title":"get_Xcid – ForCAD","text":"private pure function get_Xcid(this, n, dir) result(Xc) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: n integer, intent(in) :: dir Return Value real(kind=rk) Called by proc~~get_xcid~3~~CalledByGraph proc~get_xcid~3 nurbs_surface%get_Xcid none~get_xc~3 nurbs_surface%get_Xc none~get_xc~3->proc~get_xcid~3 proc~modify_wc~3 nurbs_surface%modify_Wc proc~modify_wc~3->none~get_xc~3 proc~modify_xc~3 nurbs_surface%modify_Xc proc~modify_xc~3->none~get_xc~3 program~example_ppm3 example_ppm3 program~example_ppm3->proc~modify_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_xcid~3.html"},{"title":"get_Xg_all – ForCAD","text":"private pure function get_Xg_all(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, (:,:) Called by proc~~get_xg_all~3~~CalledByGraph proc~get_xg_all~3 nurbs_surface%get_Xg_all none~get_xg~3 nurbs_surface%get_Xg none~get_xg~3->proc~get_xg_all~3 program~example_ppm1 example_ppm1 program~example_ppm1->none~get_xg~3 program~example_ppm2 example_ppm2 program~example_ppm2->none~get_xg~3 program~example_ppm3 example_ppm3 program~example_ppm3->none~get_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_xg_all~3.html"},{"title":"get_Xgi – ForCAD","text":"private pure function get_Xgi(this, n) result(Xg) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk), allocatable, (:) Called by proc~~get_xgi~3~~CalledByGraph proc~get_xgi~3 nurbs_surface%get_Xgi none~get_xg~3 nurbs_surface%get_Xg none~get_xg~3->proc~get_xgi~3 program~example_ppm1 example_ppm1 program~example_ppm1->none~get_xg~3 program~example_ppm2 example_ppm2 program~example_ppm2->none~get_xg~3 program~example_ppm3 example_ppm3 program~example_ppm3->none~get_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_xgi~3.html"},{"title":"get_Xgid – ForCAD","text":"private pure function get_Xgid(this, n, dir) result(Xg) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: n integer, intent(in) :: dir Return Value real(kind=rk) Called by proc~~get_xgid~3~~CalledByGraph proc~get_xgid~3 nurbs_surface%get_Xgid none~get_xg~3 nurbs_surface%get_Xg none~get_xg~3->proc~get_xgid~3 program~example_ppm1 example_ppm1 program~example_ppm1->none~get_xg~3 program~example_ppm2 example_ppm2 program~example_ppm2->none~get_xg~3 program~example_ppm3 example_ppm3 program~example_ppm3->none~get_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_xgid~3.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~3.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 nurbs_surface%get_continuity interface~compute_multiplicity compute_multiplicity proc~get_continuity~3->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_degree_all – ForCAD","text":"private pure function get_degree_all(this) result(degree) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value integer, (2) Called by proc~~get_degree_all~2~~CalledByGraph proc~get_degree_all~2 nurbs_surface%get_degree_all none~get_degree~3 nurbs_surface%get_degree none~get_degree~3->proc~get_degree_all~2 program~example3_surface example3_surface program~example3_surface->none~get_degree~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_degree_all~2.html"},{"title":"get_degree_dir – ForCAD","text":"private pure function get_degree_dir(this, dir) result(degree) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: dir Return Value integer Called by proc~~get_degree_dir~2~~CalledByGraph proc~get_degree_dir~2 nurbs_surface%get_degree_dir none~get_degree~3 nurbs_surface%get_degree none~get_degree~3->proc~get_degree_dir~2 program~example3_surface example3_surface program~example3_surface->none~get_degree~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_degree_dir~2.html"},{"title":"get_elem – ForCAD","text":"private pure function get_elem(this) result(elemConn) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value integer, allocatable, (:,:)","tags":"","loc":"proc/get_elem~3.html"},{"title":"get_elem_Xc_vis – ForCAD","text":"private pure function get_elem_Xc_vis(this) result(elemConn) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value integer, allocatable, (:,:)","tags":"","loc":"proc/get_elem_xc_vis~3.html"},{"title":"get_elem_Xg_vis – ForCAD","text":"private pure function get_elem_Xg_vis(this) result(elemConn) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value integer, allocatable, (:,:)","tags":"","loc":"proc/get_elem_xg_vis~3.html"},{"title":"get_knot_all – ForCAD","text":"private pure function get_knot_all(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, (:) Called by proc~~get_knot_all~3~~CalledByGraph proc~get_knot_all~3 nurbs_surface%get_knot_all none~get_knot~3 nurbs_surface%get_knot none~get_knot~3->proc~get_knot_all~3 proc~elevate_degree~3 nurbs_surface%elevate_degree proc~elevate_degree~3->none~get_knot~3 proc~insert_knots~3 nurbs_surface%insert_knots proc~insert_knots~3->none~get_knot~3 proc~modify_wc~3 nurbs_surface%modify_Wc proc~modify_wc~3->none~get_knot~3 proc~modify_xc~3 nurbs_surface%modify_Xc proc~modify_xc~3->none~get_knot~3 proc~remove_knots~3 nurbs_surface%remove_knots proc~remove_knots~3->none~get_knot~3 program~example3_surface example3_surface program~example3_surface->none~get_knot~3 program~example3_surface->proc~elevate_degree~3 program~example3_surface->proc~insert_knots~3 program~example3_surface->proc~remove_knots~3 program~example_ppm3 example_ppm3 program~example_ppm3->proc~modify_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_knot_all~3.html"},{"title":"get_knoti – ForCAD","text":"private pure function get_knoti(this, dir, i) result(knot) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: dir integer, intent(in) :: i Return Value real(kind=rk) Called by proc~~get_knoti~3~~CalledByGraph proc~get_knoti~3 nurbs_surface%get_knoti none~get_knot~3 nurbs_surface%get_knot none~get_knot~3->proc~get_knoti~3 proc~elevate_degree~3 nurbs_surface%elevate_degree proc~elevate_degree~3->none~get_knot~3 proc~insert_knots~3 nurbs_surface%insert_knots proc~insert_knots~3->none~get_knot~3 proc~modify_wc~3 nurbs_surface%modify_Wc proc~modify_wc~3->none~get_knot~3 proc~modify_xc~3 nurbs_surface%modify_Xc proc~modify_xc~3->none~get_knot~3 proc~remove_knots~3 nurbs_surface%remove_knots proc~remove_knots~3->none~get_knot~3 program~example3_surface example3_surface program~example3_surface->none~get_knot~3 program~example3_surface->proc~elevate_degree~3 program~example3_surface->proc~insert_knots~3 program~example3_surface->proc~remove_knots~3 program~example_ppm3 example_ppm3 program~example_ppm3->proc~modify_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_knoti~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 nurbs_surface%get_multiplicity interface~compute_multiplicity compute_multiplicity proc~get_multiplicity~3->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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 nurbs_surface%get_multiplicity proc~cmp_degree~3 nurbs_surface%cmp_degree proc~cmp_degree~3->proc~get_multiplicity~3 proc~cmp_elem~3 nurbs_surface%cmp_elem proc~cmp_elem~3->proc~get_multiplicity~3 proc~set1~3 nurbs_surface%set1 proc~set1~3->proc~cmp_degree~3 proc~set3~3 nurbs_surface%set3 proc~set3~3->proc~cmp_degree~3 none~set~3 nurbs_surface%set none~set~3->proc~set1~3 none~set~3->proc~set3~3 proc~elevate_degree~3 nurbs_surface%elevate_degree proc~elevate_degree~3->none~set~3 proc~insert_knots~3 nurbs_surface%insert_knots proc~insert_knots~3->none~set~3 proc~modify_wc~3 nurbs_surface%modify_Wc proc~modify_wc~3->none~set~3 proc~modify_xc~3 nurbs_surface%modify_Xc proc~modify_xc~3->none~set~3 proc~remove_knots~3 nurbs_surface%remove_knots proc~remove_knots~3->none~set~3 proc~set_c~3 nurbs_surface%set_C proc~set_c~3->none~set~3 proc~set_half_ring~2 nurbs_surface%set_half_ring proc~set_half_ring~2->none~set~3 proc~set_ring~2 nurbs_surface%set_ring proc~set_ring~2->none~set~3 proc~set_tetragon nurbs_surface%set_tetragon proc~set_tetragon->none~set~3 program~example3_surface example3_surface program~example3_surface->none~set~3 program~example3_surface->proc~elevate_degree~3 program~example3_surface->proc~insert_knots~3 program~example3_surface->proc~remove_knots~3 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->none~set~3 program~nearest_point_2d nearest_point_2d program~nearest_point_2d->none~set~3 program~example_ppm1 example_ppm1 program~example_ppm1->proc~set_ring~2 program~example_ppm1->proc~set_tetragon program~example_ppm2 example_ppm2 program~example_ppm2->proc~set_half_ring~2 program~example_ppm2->proc~set_tetragon program~example_ppm3 example_ppm3 program~example_ppm3->proc~modify_xc~3 program~example_ppm3->proc~set_tetragon program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->proc~set_tetragon program~shape_c_2d shape_C_2d program~shape_c_2d->proc~set_c~3 program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~set_half_ring~2 program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~set_ring~2 program~shape_tetragon shape_tetragon program~shape_tetragon->proc~set_tetragon Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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~3~~CallsGraph proc~get_nc~3 nurbs_surface%get_nc interface~compute_multiplicity compute_multiplicity proc~get_nc~3->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value integer, (2) Called by proc~~get_ng~3~~CalledByGraph proc~get_ng~3 nurbs_surface%get_ng program~example_ppm1 example_ppm1 program~example_ppm1->proc~get_ng~3 program~example_ppm2 example_ppm2 program~example_ppm2->proc~get_ng~3 program~example_ppm3 example_ppm3 program~example_ppm3->proc~get_ng~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_ng~3.html"},{"title":"is_rational – ForCAD","text":"private pure function is_rational(this) result(r) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value logical Called by proc~~is_rational~3~~CalledByGraph proc~is_rational~3 nurbs_surface%is_rational proc~basis_scalar~3 nurbs_surface%basis_scalar proc~basis_scalar~3->proc~is_rational~3 proc~basis_vector~3 nurbs_surface%basis_vector proc~basis_vector~3->proc~is_rational~3 proc~cmp_xg~3 nurbs_surface%cmp_Xg proc~cmp_xg~3->proc~is_rational~3 proc~create~3 nurbs_surface%create proc~create~3->proc~is_rational~3 proc~derivative2_scalar~3 nurbs_surface%derivative2_scalar proc~derivative2_scalar~3->proc~is_rational~3 proc~derivative2_vector~3 nurbs_surface%derivative2_vector proc~derivative2_vector~3->proc~is_rational~3 proc~derivative_scalar~3 nurbs_surface%derivative_scalar proc~derivative_scalar~3->proc~is_rational~3 proc~derivative_vector~3 nurbs_surface%derivative_vector proc~derivative_vector~3->proc~is_rational~3 proc~elevate_degree~3 nurbs_surface%elevate_degree proc~elevate_degree~3->proc~is_rational~3 proc~insert_knots~3 nurbs_surface%insert_knots proc~insert_knots~3->proc~is_rational~3 proc~remove_knots~3 nurbs_surface%remove_knots proc~remove_knots~3->proc~is_rational~3 none~derivative2~3 nurbs_surface%derivative2 none~derivative2~3->proc~derivative2_scalar~3 none~derivative2~3->proc~derivative2_vector~3 proc~nearest_point2~3 nurbs_surface%nearest_point2 proc~nearest_point2~3->proc~cmp_xg~3 proc~nearest_point2~3->proc~create~3 proc~nearest_point2~3->none~derivative2~3 program~example3_surface example3_surface program~example3_surface->proc~create~3 program~example3_surface->proc~elevate_degree~3 program~example3_surface->proc~insert_knots~3 program~example3_surface->proc~remove_knots~3 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~create~3 program~example_ppm1 example_ppm1 program~example_ppm1->proc~create~3 program~example_ppm2 example_ppm2 program~example_ppm2->proc~create~3 program~example_ppm3 example_ppm3 program~example_ppm3->proc~create~3 program~nearest_point_2d nearest_point_2d program~nearest_point_2d->proc~create~3 program~nearest_point_2d->proc~nearest_point2~3 program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->proc~create~3 program~shape_c_2d shape_C_2d program~shape_c_2d->proc~create~3 program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~create~3 program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~create~3 program~shape_tetragon shape_tetragon program~shape_tetragon->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/is_rational~3.html"},{"title":"basis_scalar – ForCAD","text":"private pure subroutine basis_scalar(this, Xt, Tgc) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in) :: Xt (:) real(kind=rk), intent(out), allocatable :: Tgc (:) Calls proc~~basis_scalar~3~~CallsGraph proc~basis_scalar~3 nurbs_surface%basis_scalar interface~compute_tgc~3 compute_Tgc proc~basis_scalar~3->interface~compute_tgc~3 proc~is_rational~3 nurbs_surface%is_rational proc~basis_scalar~3->proc~is_rational~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_scalar~3.html"},{"title":"basis_vector – ForCAD","text":"private pure subroutine basis_vector(this, res1, res2, Xt1, Xt2, Tgc) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(out), allocatable :: Tgc (:,:) Calls proc~~basis_vector~3~~CallsGraph proc~basis_vector~3 nurbs_surface%basis_vector interface~compute_tgc~3 compute_Tgc proc~basis_vector~3->interface~compute_tgc~3 interface~ndgrid ndgrid proc~basis_vector~3->interface~ndgrid proc~is_rational~3 nurbs_surface%is_rational proc~basis_vector~3->proc~is_rational~3 proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 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.","tags":"","loc":"proc/basis_vector~3.html"},{"title":"cmp_degree – ForCAD","text":"private pure subroutine cmp_degree(this, dir) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), optional :: dir Calls proc~~cmp_degree~3~~CallsGraph proc~cmp_degree~3 nurbs_surface%cmp_degree proc~get_multiplicity~3 nurbs_surface%get_multiplicity proc~cmp_degree~3->proc~get_multiplicity~3 interface~compute_multiplicity compute_multiplicity proc~get_multiplicity~3->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~cmp_degree~3~~CalledByGraph proc~cmp_degree~3 nurbs_surface%cmp_degree proc~set1~3 nurbs_surface%set1 proc~set1~3->proc~cmp_degree~3 proc~set3~3 nurbs_surface%set3 proc~set3~3->proc~cmp_degree~3 none~set~3 nurbs_surface%set none~set~3->proc~set1~3 none~set~3->proc~set3~3 proc~elevate_degree~3 nurbs_surface%elevate_degree proc~elevate_degree~3->none~set~3 proc~insert_knots~3 nurbs_surface%insert_knots proc~insert_knots~3->none~set~3 proc~modify_wc~3 nurbs_surface%modify_Wc proc~modify_wc~3->none~set~3 proc~modify_xc~3 nurbs_surface%modify_Xc proc~modify_xc~3->none~set~3 proc~remove_knots~3 nurbs_surface%remove_knots proc~remove_knots~3->none~set~3 proc~set_c~3 nurbs_surface%set_C proc~set_c~3->none~set~3 proc~set_half_ring~2 nurbs_surface%set_half_ring proc~set_half_ring~2->none~set~3 proc~set_ring~2 nurbs_surface%set_ring proc~set_ring~2->none~set~3 proc~set_tetragon nurbs_surface%set_tetragon proc~set_tetragon->none~set~3 program~example3_surface example3_surface program~example3_surface->none~set~3 program~example3_surface->proc~elevate_degree~3 program~example3_surface->proc~insert_knots~3 program~example3_surface->proc~remove_knots~3 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->none~set~3 program~nearest_point_2d nearest_point_2d program~nearest_point_2d->none~set~3 program~example_ppm1 example_ppm1 program~example_ppm1->proc~set_ring~2 program~example_ppm1->proc~set_tetragon program~example_ppm2 example_ppm2 program~example_ppm2->proc~set_half_ring~2 program~example_ppm2->proc~set_tetragon program~example_ppm3 example_ppm3 program~example_ppm3->proc~modify_xc~3 program~example_ppm3->proc~set_tetragon program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->proc~set_tetragon program~shape_c_2d shape_C_2d program~shape_c_2d->proc~set_c~3 program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~set_half_ring~2 program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~set_ring~2 program~shape_tetragon shape_tetragon program~shape_tetragon->proc~set_tetragon Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_degree~3.html"},{"title":"cmp_nc – ForCAD","text":"private pure subroutine cmp_nc(this, dir) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), optional :: dir Calls proc~~cmp_nc~3~~CallsGraph proc~cmp_nc~3 nurbs_surface%cmp_nc interface~compute_multiplicity compute_multiplicity proc~cmp_nc~3->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~cmp_nc~3~~CalledByGraph proc~cmp_nc~3 nurbs_surface%cmp_nc proc~set1~3 nurbs_surface%set1 proc~set1~3->proc~cmp_nc~3 proc~set2~3 nurbs_surface%set2 proc~set2~3->proc~cmp_nc~3 none~set~3 nurbs_surface%set none~set~3->proc~set1~3 none~set~3->proc~set2~3 proc~elevate_degree~3 nurbs_surface%elevate_degree proc~elevate_degree~3->none~set~3 proc~insert_knots~3 nurbs_surface%insert_knots proc~insert_knots~3->none~set~3 proc~modify_wc~3 nurbs_surface%modify_Wc proc~modify_wc~3->none~set~3 proc~modify_xc~3 nurbs_surface%modify_Xc proc~modify_xc~3->none~set~3 proc~remove_knots~3 nurbs_surface%remove_knots proc~remove_knots~3->none~set~3 proc~set_c~3 nurbs_surface%set_C proc~set_c~3->none~set~3 proc~set_half_ring~2 nurbs_surface%set_half_ring proc~set_half_ring~2->none~set~3 proc~set_ring~2 nurbs_surface%set_ring proc~set_ring~2->none~set~3 proc~set_tetragon nurbs_surface%set_tetragon proc~set_tetragon->none~set~3 program~example3_surface example3_surface program~example3_surface->none~set~3 program~example3_surface->proc~elevate_degree~3 program~example3_surface->proc~insert_knots~3 program~example3_surface->proc~remove_knots~3 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->none~set~3 program~nearest_point_2d nearest_point_2d program~nearest_point_2d->none~set~3 program~example_ppm1 example_ppm1 program~example_ppm1->proc~set_ring~2 program~example_ppm1->proc~set_tetragon program~example_ppm2 example_ppm2 program~example_ppm2->proc~set_half_ring~2 program~example_ppm2->proc~set_tetragon program~example_ppm3 example_ppm3 program~example_ppm3->proc~modify_xc~3 program~example_ppm3->proc~set_tetragon program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->proc~set_tetragon program~shape_c_2d shape_C_2d program~shape_c_2d->proc~set_c~3 program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~set_half_ring~2 program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~set_ring~2 program~shape_tetragon shape_tetragon program~shape_tetragon->proc~set_tetragon Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_nc~3.html"},{"title":"create – ForCAD","text":"private pure subroutine create(this, res1, res2, Xt1, Xt2, Xt) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(in), optional, contiguous :: Xt (:,:) Calls proc~~create~3~~CallsGraph proc~create~3 nurbs_surface%create interface~compute_xg~3 compute_Xg proc~create~3->interface~compute_xg~3 interface~ndgrid ndgrid proc~create~3->interface~ndgrid proc~is_rational~3 nurbs_surface%is_rational proc~create~3->proc~is_rational~3 proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 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 nurbs_surface%create proc~nearest_point2~3 nurbs_surface%nearest_point2 proc~nearest_point2~3->proc~create~3 program~example3_surface example3_surface program~example3_surface->proc~create~3 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~create~3 program~example_ppm1 example_ppm1 program~example_ppm1->proc~create~3 program~example_ppm2 example_ppm2 program~example_ppm2->proc~create~3 program~example_ppm3 example_ppm3 program~example_ppm3->proc~create~3 program~nearest_point_2d nearest_point_2d program~nearest_point_2d->proc~create~3 program~nearest_point_2d->proc~nearest_point2~3 program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->proc~create~3 program~shape_c_2d shape_C_2d program~shape_c_2d->proc~create~3 program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~create~3 program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~create~3 program~shape_tetragon shape_tetragon program~shape_tetragon->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":"derivative2_scalar – ForCAD","text":"private pure subroutine derivative2_scalar(this, Xt, d2Tgc, dTgc, Tgc) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:) real(kind=rk), intent(out), optional, allocatable :: dTgc (:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:) Calls proc~~derivative2_scalar~3~~CallsGraph proc~derivative2_scalar~3 nurbs_surface%derivative2_scalar interface~compute_d2tgc~3 compute_d2Tgc proc~derivative2_scalar~3->interface~compute_d2tgc~3 proc~is_rational~3 nurbs_surface%is_rational proc~derivative2_scalar~3->proc~is_rational~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. Called by proc~~derivative2_scalar~3~~CalledByGraph proc~derivative2_scalar~3 nurbs_surface%derivative2_scalar none~derivative2~3 nurbs_surface%derivative2 none~derivative2~3->proc~derivative2_scalar~3 proc~nearest_point2~3 nurbs_surface%nearest_point2 proc~nearest_point2~3->none~derivative2~3 program~nearest_point_2d nearest_point_2d program~nearest_point_2d->proc~nearest_point2~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/derivative2_scalar~3.html"},{"title":"derivative2_vector – ForCAD","text":"private pure subroutine derivative2_vector(this, res1, res2, Xt1, Xt2, d2Tgc, dTgc, Tgc) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:,:) real(kind=rk), intent(out), optional, allocatable :: dTgc (:,:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:,:) Calls proc~~derivative2_vector~3~~CallsGraph proc~derivative2_vector~3 nurbs_surface%derivative2_vector interface~compute_d2tgc~3 compute_d2Tgc proc~derivative2_vector~3->interface~compute_d2tgc~3 interface~ndgrid ndgrid proc~derivative2_vector~3->interface~ndgrid proc~is_rational~3 nurbs_surface%is_rational proc~derivative2_vector~3->proc~is_rational~3 proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 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~~derivative2_vector~3~~CalledByGraph proc~derivative2_vector~3 nurbs_surface%derivative2_vector none~derivative2~3 nurbs_surface%derivative2 none~derivative2~3->proc~derivative2_vector~3 proc~nearest_point2~3 nurbs_surface%nearest_point2 proc~nearest_point2~3->none~derivative2~3 program~nearest_point_2d nearest_point_2d program~nearest_point_2d->proc~nearest_point2~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/derivative2_vector~3.html"},{"title":"derivative_scalar – ForCAD","text":"private pure subroutine derivative_scalar(this, Xt, dTgc, Tgc) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: dTgc (:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:) Calls proc~~derivative_scalar~3~~CallsGraph proc~derivative_scalar~3 nurbs_surface%derivative_scalar interface~compute_dtgc~3 compute_dTgc proc~derivative_scalar~3->interface~compute_dtgc~3 proc~is_rational~3 nurbs_surface%is_rational proc~derivative_scalar~3->proc~is_rational~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/derivative_scalar~3.html"},{"title":"derivative_vector – ForCAD","text":"private pure subroutine derivative_vector(this, res1, res2, Xt1, Xt2, dTgc, Tgc) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(out), allocatable :: dTgc (:,:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:,:) Calls proc~~derivative_vector~3~~CallsGraph proc~derivative_vector~3 nurbs_surface%derivative_vector interface~compute_dtgc~3 compute_dTgc proc~derivative_vector~3->interface~compute_dtgc~3 interface~ndgrid ndgrid proc~derivative_vector~3->interface~ndgrid proc~is_rational~3 nurbs_surface%is_rational proc~derivative_vector~3->proc~is_rational~3 proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 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.","tags":"","loc":"proc/derivative_vector~3.html"},{"title":"elevate_degree – ForCAD","text":"private pure subroutine elevate_degree(this, dir, t) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in) :: dir integer, intent(in) :: t Calls proc~~elevate_degree~3~~CallsGraph proc~elevate_degree~3 nurbs_surface%elevate_degree none~get_knot~3 nurbs_surface%get_knot proc~elevate_degree~3->none~get_knot~3 none~set~3 nurbs_surface%set proc~elevate_degree~3->none~set~3 proc~elevate_degree_a_5_9 elevate_degree_A_5_9 proc~elevate_degree~3->proc~elevate_degree_a_5_9 proc~is_rational~3 nurbs_surface%is_rational proc~elevate_degree~3->proc~is_rational~3 proc~get_knot_all~3 nurbs_surface%get_knot_all none~get_knot~3->proc~get_knot_all~3 proc~get_knoti~3 nurbs_surface%get_knoti none~get_knot~3->proc~get_knoti~3 proc~set1~3 nurbs_surface%set1 none~set~3->proc~set1~3 proc~set2~3 nurbs_surface%set2 none~set~3->proc~set2~3 proc~set3~3 nurbs_surface%set3 none~set~3->proc~set3~3 interface~compute_multiplicity compute_multiplicity proc~elevate_degree_a_5_9->interface~compute_multiplicity proc~bincoeff bincoeff proc~elevate_degree_a_5_9->proc~bincoeff proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~factln factln proc~bincoeff->proc~factln proc~cmp_degree~3 nurbs_surface%cmp_degree proc~set1~3->proc~cmp_degree~3 proc~cmp_nc~3 nurbs_surface%cmp_nc proc~set1~3->proc~cmp_nc~3 proc~set2~3->proc~cmp_nc~3 proc~compute_knot_vector compute_knot_vector proc~set2~3->proc~compute_knot_vector proc~set3~3->proc~cmp_degree~3 proc~get_multiplicity~3 nurbs_surface%get_multiplicity proc~cmp_degree~3->proc~get_multiplicity~3 proc~cmp_nc~3->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~get_multiplicity~3->interface~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~~elevate_degree~3~~CalledByGraph proc~elevate_degree~3 nurbs_surface%elevate_degree program~example3_surface example3_surface program~example3_surface->proc~elevate_degree~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/elevate_degree~3.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~3~~CallsGraph proc~export_xc~3 nurbs_surface%export_Xc proc~cmp_elem_xc_vis~3 nurbs_surface%cmp_elem_Xc_vis proc~export_xc~3->proc~cmp_elem_xc_vis~3 interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xc_vis~3->interface~elemconn_c0 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v 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 nurbs_surface%export_Xc program~example3_surface example3_surface program~example3_surface->proc~export_xc~3 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~export_xc~3 program~shape_c_2d shape_C_2d program~shape_c_2d->proc~export_xc~3 program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~export_xc~3 program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~export_xc~3 program~shape_tetragon shape_tetragon program~shape_tetragon->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_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this character(len=*), intent(in) :: filename Calls proc~~export_xg~3~~CallsGraph proc~export_xg~3 nurbs_surface%export_Xg proc~cmp_elem_xg_vis~3 nurbs_surface%cmp_elem_Xg_vis proc~export_xg~3->proc~cmp_elem_xg_vis~3 interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xg_vis~3->interface~elemconn_c0 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v 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 nurbs_surface%export_Xg program~example3_surface example3_surface program~example3_surface->proc~export_xg~3 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~export_xg~3 program~shape_c_2d shape_C_2d program~shape_c_2d->proc~export_xg~3 program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~export_xg~3 program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~export_xg~3 program~shape_tetragon shape_tetragon program~shape_tetragon->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_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this Called by proc~~finalize~3~~CalledByGraph proc~finalize~3 nurbs_surface%finalize proc~nearest_point2~3 nurbs_surface%nearest_point2 proc~nearest_point2~3->proc~finalize~3 program~example3_surface example3_surface program~example3_surface->proc~finalize~3 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~finalize~3 program~example_ppm1 example_ppm1 program~example_ppm1->proc~finalize~3 program~example_ppm2 example_ppm2 program~example_ppm2->proc~finalize~3 program~example_ppm3 example_ppm3 program~example_ppm3->proc~finalize~3 program~nearest_point_2d nearest_point_2d program~nearest_point_2d->proc~finalize~3 program~nearest_point_2d->proc~nearest_point2~3 program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->proc~finalize~3 program~shape_c_2d shape_C_2d program~shape_c_2d->proc~finalize~3 program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~finalize~3 program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~finalize~3 program~shape_tetragon shape_tetragon program~shape_tetragon->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":"insert_knots – ForCAD","text":"private pure subroutine insert_knots(this, dir, Xth, r) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in) :: dir real(kind=rk), intent(in), contiguous :: Xth (:) integer, intent(in), contiguous :: r (:) Calls proc~~insert_knots~3~~CallsGraph proc~insert_knots~3 nurbs_surface%insert_knots interface~compute_multiplicity compute_multiplicity proc~insert_knots~3->interface~compute_multiplicity none~get_knot~3 nurbs_surface%get_knot proc~insert_knots~3->none~get_knot~3 none~set~3 nurbs_surface%set proc~insert_knots~3->none~set~3 proc~findspan findspan proc~insert_knots~3->proc~findspan proc~insert_knot_a_5_1 insert_knot_A_5_1 proc~insert_knots~3->proc~insert_knot_a_5_1 proc~is_rational~3 nurbs_surface%is_rational proc~insert_knots~3->proc~is_rational~3 proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_knot_all~3 nurbs_surface%get_knot_all none~get_knot~3->proc~get_knot_all~3 proc~get_knoti~3 nurbs_surface%get_knoti none~get_knot~3->proc~get_knoti~3 proc~set1~3 nurbs_surface%set1 none~set~3->proc~set1~3 proc~set2~3 nurbs_surface%set2 none~set~3->proc~set2~3 proc~set3~3 nurbs_surface%set3 none~set~3->proc~set3~3 proc~cmp_degree~3 nurbs_surface%cmp_degree proc~set1~3->proc~cmp_degree~3 proc~cmp_nc~3 nurbs_surface%cmp_nc proc~set1~3->proc~cmp_nc~3 proc~set2~3->proc~cmp_nc~3 proc~compute_knot_vector compute_knot_vector proc~set2~3->proc~compute_knot_vector proc~set3~3->proc~cmp_degree~3 proc~get_multiplicity~3 nurbs_surface%get_multiplicity proc~cmp_degree~3->proc~get_multiplicity~3 proc~cmp_nc~3->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~get_multiplicity~3->interface~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~~insert_knots~3~~CalledByGraph proc~insert_knots~3 nurbs_surface%insert_knots program~example3_surface example3_surface program~example3_surface->proc~insert_knots~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/insert_knots~3.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~3~~CallsGraph proc~modify_wc~3 nurbs_surface%modify_Wc none~get_knot~3 nurbs_surface%get_knot proc~modify_wc~3->none~get_knot~3 none~get_wc~3 nurbs_surface%get_Wc proc~modify_wc~3->none~get_wc~3 none~get_xc~3 nurbs_surface%get_Xc proc~modify_wc~3->none~get_xc~3 none~set~3 nurbs_surface%set proc~modify_wc~3->none~set~3 proc~get_knot_all~3 nurbs_surface%get_knot_all none~get_knot~3->proc~get_knot_all~3 proc~get_knoti~3 nurbs_surface%get_knoti none~get_knot~3->proc~get_knoti~3 proc~get_wc_all~3 nurbs_surface%get_Wc_all none~get_wc~3->proc~get_wc_all~3 proc~get_wci~3 nurbs_surface%get_Wci none~get_wc~3->proc~get_wci~3 proc~get_xc_all~3 nurbs_surface%get_Xc_all none~get_xc~3->proc~get_xc_all~3 proc~get_xcid~3 nurbs_surface%get_Xcid none~get_xc~3->proc~get_xcid~3 proc~get_xci~3 nurbs_surface%get_Xci none~get_xc~3->proc~get_xci~3 proc~set1~3 nurbs_surface%set1 none~set~3->proc~set1~3 proc~set2~3 nurbs_surface%set2 none~set~3->proc~set2~3 proc~set3~3 nurbs_surface%set3 none~set~3->proc~set3~3 proc~cmp_degree~3 nurbs_surface%cmp_degree proc~set1~3->proc~cmp_degree~3 proc~cmp_nc~3 nurbs_surface%cmp_nc proc~set1~3->proc~cmp_nc~3 proc~set2~3->proc~cmp_nc~3 proc~compute_knot_vector compute_knot_vector proc~set2~3->proc~compute_knot_vector proc~set3~3->proc~cmp_degree~3 proc~get_multiplicity~3 nurbs_surface%get_multiplicity proc~cmp_degree~3->proc~get_multiplicity~3 interface~compute_multiplicity compute_multiplicity proc~cmp_nc~3->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity~3->interface~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_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~3~~CallsGraph proc~modify_xc~3 nurbs_surface%modify_Xc none~get_knot~3 nurbs_surface%get_knot proc~modify_xc~3->none~get_knot~3 none~get_wc~3 nurbs_surface%get_Wc proc~modify_xc~3->none~get_wc~3 none~get_xc~3 nurbs_surface%get_Xc proc~modify_xc~3->none~get_xc~3 none~set~3 nurbs_surface%set proc~modify_xc~3->none~set~3 proc~get_knot_all~3 nurbs_surface%get_knot_all none~get_knot~3->proc~get_knot_all~3 proc~get_knoti~3 nurbs_surface%get_knoti none~get_knot~3->proc~get_knoti~3 proc~get_wc_all~3 nurbs_surface%get_Wc_all none~get_wc~3->proc~get_wc_all~3 proc~get_wci~3 nurbs_surface%get_Wci none~get_wc~3->proc~get_wci~3 proc~get_xc_all~3 nurbs_surface%get_Xc_all none~get_xc~3->proc~get_xc_all~3 proc~get_xcid~3 nurbs_surface%get_Xcid none~get_xc~3->proc~get_xcid~3 proc~get_xci~3 nurbs_surface%get_Xci none~get_xc~3->proc~get_xci~3 proc~set1~3 nurbs_surface%set1 none~set~3->proc~set1~3 proc~set2~3 nurbs_surface%set2 none~set~3->proc~set2~3 proc~set3~3 nurbs_surface%set3 none~set~3->proc~set3~3 proc~cmp_degree~3 nurbs_surface%cmp_degree proc~set1~3->proc~cmp_degree~3 proc~cmp_nc~3 nurbs_surface%cmp_nc proc~set1~3->proc~cmp_nc~3 proc~set2~3->proc~cmp_nc~3 proc~compute_knot_vector compute_knot_vector proc~set2~3->proc~compute_knot_vector proc~set3~3->proc~cmp_degree~3 proc~get_multiplicity~3 nurbs_surface%get_multiplicity proc~cmp_degree~3->proc~get_multiplicity~3 interface~compute_multiplicity compute_multiplicity proc~cmp_nc~3->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity~3->interface~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~~modify_xc~3~~CalledByGraph proc~modify_xc~3 nurbs_surface%modify_Xc program~example_ppm3 example_ppm3 program~example_ppm3->proc~modify_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/modify_xc~3.html"},{"title":"nearest_point – ForCAD","text":"private pure subroutine nearest_point(this, point_Xg, nearest_Xg, nearest_Xt, id) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this real(kind=rk), intent(in) :: point_Xg (:) real(kind=rk), intent(out), optional, allocatable :: nearest_Xg (:) real(kind=rk), intent(out), optional, allocatable :: nearest_Xt (:) integer, intent(out), optional :: id Calls proc~~nearest_point~3~~CallsGraph proc~nearest_point~3 nurbs_surface%nearest_point interface~nearest_point_help_2d nearest_point_help_2d proc~nearest_point~3->interface~nearest_point_help_2d Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~nearest_point~3~~CalledByGraph proc~nearest_point~3 nurbs_surface%nearest_point program~nearest_point_2d nearest_point_2d program~nearest_point_2d->proc~nearest_point~3 program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->proc~nearest_point~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/nearest_point~3.html"},{"title":"nearest_point2 – ForCAD","text":"private impure subroutine nearest_point2(this, point_Xg, tol, maxit, nearest_Xt, nearest_Xg) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in) :: point_Xg (:) real(kind=rk), intent(in) :: tol integer, intent(in) :: maxit real(kind=rk), intent(out) :: nearest_Xt (2) real(kind=rk), intent(out), optional, allocatable :: nearest_Xg (:) Calls proc~~nearest_point2~3~~CallsGraph proc~nearest_point2~3 nurbs_surface%nearest_point2 interface~nearest_point_help_2d nearest_point_help_2d proc~nearest_point2~3->interface~nearest_point_help_2d none~derivative2~3 nurbs_surface%derivative2 proc~nearest_point2~3->none~derivative2~3 proc~cmp_xg~3 nurbs_surface%cmp_Xg proc~nearest_point2~3->proc~cmp_xg~3 proc~create~3 nurbs_surface%create proc~nearest_point2~3->proc~create~3 proc~finalize~3 nurbs_surface%finalize proc~nearest_point2~3->proc~finalize~3 proc~derivative2_scalar~3 nurbs_surface%derivative2_scalar none~derivative2~3->proc~derivative2_scalar~3 proc~derivative2_vector~3 nurbs_surface%derivative2_vector none~derivative2~3->proc~derivative2_vector~3 interface~compute_xg~3 compute_Xg proc~cmp_xg~3->interface~compute_xg~3 proc~is_rational~3 nurbs_surface%is_rational proc~cmp_xg~3->proc~is_rational~3 proc~create~3->interface~compute_xg~3 interface~ndgrid ndgrid proc~create~3->interface~ndgrid proc~create~3->proc~is_rational~3 proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 ndgrid3 interface~ndgrid->proc~ndgrid3 proc~derivative2_scalar~3->proc~is_rational~3 interface~compute_d2tgc~3 compute_d2Tgc proc~derivative2_scalar~3->interface~compute_d2tgc~3 proc~derivative2_vector~3->interface~ndgrid proc~derivative2_vector~3->proc~is_rational~3 proc~derivative2_vector~3->interface~compute_d2tgc~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. Called by proc~~nearest_point2~3~~CalledByGraph proc~nearest_point2~3 nurbs_surface%nearest_point2 program~nearest_point_2d nearest_point_2d program~nearest_point_2d->proc~nearest_point2~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/nearest_point2~3.html"},{"title":"remove_knots – ForCAD","text":"private pure subroutine remove_knots(this, dir, Xth, r) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in) :: dir real(kind=rk), intent(in), contiguous :: Xth (:) integer, intent(in), contiguous :: r (:) Calls proc~~remove_knots~3~~CallsGraph proc~remove_knots~3 nurbs_surface%remove_knots interface~compute_multiplicity compute_multiplicity proc~remove_knots~3->interface~compute_multiplicity none~get_knot~3 nurbs_surface%get_knot proc~remove_knots~3->none~get_knot~3 none~set~3 nurbs_surface%set proc~remove_knots~3->none~set~3 proc~findspan findspan proc~remove_knots~3->proc~findspan proc~is_rational~3 nurbs_surface%is_rational proc~remove_knots~3->proc~is_rational~3 proc~remove_knots_a_5_8 remove_knots_A_5_8 proc~remove_knots~3->proc~remove_knots_a_5_8 proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_knot_all~3 nurbs_surface%get_knot_all none~get_knot~3->proc~get_knot_all~3 proc~get_knoti~3 nurbs_surface%get_knoti none~get_knot~3->proc~get_knoti~3 proc~set1~3 nurbs_surface%set1 none~set~3->proc~set1~3 proc~set2~3 nurbs_surface%set2 none~set~3->proc~set2~3 proc~set3~3 nurbs_surface%set3 none~set~3->proc~set3~3 proc~cmp_degree~3 nurbs_surface%cmp_degree proc~set1~3->proc~cmp_degree~3 proc~cmp_nc~3 nurbs_surface%cmp_nc proc~set1~3->proc~cmp_nc~3 proc~set2~3->proc~cmp_nc~3 proc~compute_knot_vector compute_knot_vector proc~set2~3->proc~compute_knot_vector proc~set3~3->proc~cmp_degree~3 proc~get_multiplicity~3 nurbs_surface%get_multiplicity proc~cmp_degree~3->proc~get_multiplicity~3 proc~cmp_nc~3->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~get_multiplicity~3->interface~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~~remove_knots~3~~CalledByGraph proc~remove_knots~3 nurbs_surface%remove_knots program~example3_surface example3_surface program~example3_surface->proc~remove_knots~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/remove_knots~3.html"},{"title":"rotate_Xc – ForCAD","text":"private pure subroutine rotate_Xc(this, alpha, beta, theta) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in) :: alpha real(kind=rk), intent(in) :: beta real(kind=rk), intent(in) :: theta Calls proc~~rotate_xc~3~~CallsGraph proc~rotate_xc~3 nurbs_surface%rotate_Xc proc~rotation rotation proc~rotate_xc~3->proc~rotation cosd cosd proc~rotation->cosd sind sind proc~rotation->sind Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~rotate_xc~3~~CalledByGraph proc~rotate_xc~3 nurbs_surface%rotate_Xc program~example3_surface example3_surface program~example3_surface->proc~rotate_xc~3 program~example_ppm2 example_ppm2 program~example_ppm2->proc~rotate_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/rotate_xc~3.html"},{"title":"rotate_Xg – ForCAD","text":"private pure subroutine rotate_Xg(this, alpha, beta, theta) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in) :: alpha real(kind=rk), intent(in) :: beta real(kind=rk), intent(in) :: theta Calls proc~~rotate_xg~3~~CallsGraph proc~rotate_xg~3 nurbs_surface%rotate_Xg proc~rotation rotation proc~rotate_xg~3->proc~rotation cosd cosd proc~rotation->cosd sind sind proc~rotation->sind Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~rotate_xg~3~~CalledByGraph proc~rotate_xg~3 nurbs_surface%rotate_Xg program~example3_surface example3_surface program~example3_surface->proc~rotate_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/rotate_xg~3.html"},{"title":"set1 – ForCAD","text":"private pure subroutine set1(this, knot1, knot2, Xc, Wc) Set knot vectors, 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), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) Calls proc~~set1~3~~CallsGraph proc~set1~3 nurbs_surface%set1 proc~cmp_degree~3 nurbs_surface%cmp_degree proc~set1~3->proc~cmp_degree~3 proc~cmp_nc~3 nurbs_surface%cmp_nc proc~set1~3->proc~cmp_nc~3 proc~get_multiplicity~3 nurbs_surface%get_multiplicity proc~cmp_degree~3->proc~get_multiplicity~3 interface~compute_multiplicity compute_multiplicity proc~cmp_nc~3->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity~3->interface~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 nurbs_surface%set1 none~set~3 nurbs_surface%set none~set~3->proc~set1~3 proc~elevate_degree~3 nurbs_surface%elevate_degree proc~elevate_degree~3->none~set~3 proc~insert_knots~3 nurbs_surface%insert_knots proc~insert_knots~3->none~set~3 proc~modify_wc~3 nurbs_surface%modify_Wc proc~modify_wc~3->none~set~3 proc~modify_xc~3 nurbs_surface%modify_Xc proc~modify_xc~3->none~set~3 proc~remove_knots~3 nurbs_surface%remove_knots proc~remove_knots~3->none~set~3 proc~set_c~3 nurbs_surface%set_C proc~set_c~3->none~set~3 proc~set_half_ring~2 nurbs_surface%set_half_ring proc~set_half_ring~2->none~set~3 proc~set_ring~2 nurbs_surface%set_ring proc~set_ring~2->none~set~3 proc~set_tetragon nurbs_surface%set_tetragon proc~set_tetragon->none~set~3 program~example3_surface example3_surface program~example3_surface->none~set~3 program~example3_surface->proc~elevate_degree~3 program~example3_surface->proc~insert_knots~3 program~example3_surface->proc~remove_knots~3 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->none~set~3 program~nearest_point_2d nearest_point_2d program~nearest_point_2d->none~set~3 program~example_ppm1 example_ppm1 program~example_ppm1->proc~set_ring~2 program~example_ppm1->proc~set_tetragon program~example_ppm2 example_ppm2 program~example_ppm2->proc~set_half_ring~2 program~example_ppm2->proc~set_tetragon program~example_ppm3 example_ppm3 program~example_ppm3->proc~modify_xc~3 program~example_ppm3->proc~set_tetragon program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->proc~set_tetragon program~shape_c_2d shape_C_2d program~shape_c_2d->proc~set_c~3 program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~set_half_ring~2 program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~set_ring~2 program~shape_tetragon shape_tetragon program~shape_tetragon->proc~set_tetragon Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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, degree, continuity1, continuity2, Xc, Wc) Set NURBS surface using nodes of parameter space, degree, continuity, control points and weights Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: Xth_dir1 (:) real(kind=rk), intent(in), contiguous :: Xth_dir2 (:) integer, intent(in), contiguous :: degree (:) integer, intent(in), contiguous :: continuity1 (:) integer, intent(in), contiguous :: continuity2 (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) Calls proc~~set2~3~~CallsGraph proc~set2~3 nurbs_surface%set2 proc~cmp_nc~3 nurbs_surface%cmp_nc proc~set2~3->proc~cmp_nc~3 proc~compute_knot_vector compute_knot_vector proc~set2~3->proc~compute_knot_vector interface~compute_multiplicity compute_multiplicity proc~cmp_nc~3->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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 nurbs_surface%set2 none~set~3 nurbs_surface%set none~set~3->proc~set2~3 proc~elevate_degree~3 nurbs_surface%elevate_degree proc~elevate_degree~3->none~set~3 proc~insert_knots~3 nurbs_surface%insert_knots proc~insert_knots~3->none~set~3 proc~modify_wc~3 nurbs_surface%modify_Wc proc~modify_wc~3->none~set~3 proc~modify_xc~3 nurbs_surface%modify_Xc proc~modify_xc~3->none~set~3 proc~remove_knots~3 nurbs_surface%remove_knots proc~remove_knots~3->none~set~3 proc~set_c~3 nurbs_surface%set_C proc~set_c~3->none~set~3 proc~set_half_ring~2 nurbs_surface%set_half_ring proc~set_half_ring~2->none~set~3 proc~set_ring~2 nurbs_surface%set_ring proc~set_ring~2->none~set~3 proc~set_tetragon nurbs_surface%set_tetragon proc~set_tetragon->none~set~3 program~example3_surface example3_surface program~example3_surface->none~set~3 program~example3_surface->proc~elevate_degree~3 program~example3_surface->proc~insert_knots~3 program~example3_surface->proc~remove_knots~3 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->none~set~3 program~nearest_point_2d nearest_point_2d program~nearest_point_2d->none~set~3 program~example_ppm1 example_ppm1 program~example_ppm1->proc~set_ring~2 program~example_ppm1->proc~set_tetragon program~example_ppm2 example_ppm2 program~example_ppm2->proc~set_half_ring~2 program~example_ppm2->proc~set_tetragon program~example_ppm3 example_ppm3 program~example_ppm3->proc~modify_xc~3 program~example_ppm3->proc~set_tetragon program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->proc~set_tetragon program~shape_c_2d shape_C_2d program~shape_c_2d->proc~set_c~3 program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~set_half_ring~2 program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~set_ring~2 program~shape_tetragon shape_tetragon program~shape_tetragon->proc~set_tetragon Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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":"set3 – ForCAD","text":"private pure subroutine set3(this, nc, Xc, Wc) Set Bezier or Rational Bezier surface using control points and weights. Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), contiguous :: nc (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) Calls proc~~set3~3~~CallsGraph proc~set3~3 nurbs_surface%set3 proc~cmp_degree~3 nurbs_surface%cmp_degree proc~set3~3->proc~cmp_degree~3 proc~get_multiplicity~3 nurbs_surface%get_multiplicity proc~cmp_degree~3->proc~get_multiplicity~3 interface~compute_multiplicity compute_multiplicity proc~get_multiplicity~3->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~set3~3~~CalledByGraph proc~set3~3 nurbs_surface%set3 none~set~3 nurbs_surface%set none~set~3->proc~set3~3 proc~elevate_degree~3 nurbs_surface%elevate_degree proc~elevate_degree~3->none~set~3 proc~insert_knots~3 nurbs_surface%insert_knots proc~insert_knots~3->none~set~3 proc~modify_wc~3 nurbs_surface%modify_Wc proc~modify_wc~3->none~set~3 proc~modify_xc~3 nurbs_surface%modify_Xc proc~modify_xc~3->none~set~3 proc~remove_knots~3 nurbs_surface%remove_knots proc~remove_knots~3->none~set~3 proc~set_c~3 nurbs_surface%set_C proc~set_c~3->none~set~3 proc~set_half_ring~2 nurbs_surface%set_half_ring proc~set_half_ring~2->none~set~3 proc~set_ring~2 nurbs_surface%set_ring proc~set_ring~2->none~set~3 proc~set_tetragon nurbs_surface%set_tetragon proc~set_tetragon->none~set~3 program~example3_surface example3_surface program~example3_surface->none~set~3 program~example3_surface->proc~elevate_degree~3 program~example3_surface->proc~insert_knots~3 program~example3_surface->proc~remove_knots~3 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->none~set~3 program~nearest_point_2d nearest_point_2d program~nearest_point_2d->none~set~3 program~example_ppm1 example_ppm1 program~example_ppm1->proc~set_ring~2 program~example_ppm1->proc~set_tetragon program~example_ppm2 example_ppm2 program~example_ppm2->proc~set_half_ring~2 program~example_ppm2->proc~set_tetragon program~example_ppm3 example_ppm3 program~example_ppm3->proc~modify_xc~3 program~example_ppm3->proc~set_tetragon program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->proc~set_tetragon program~shape_c_2d shape_C_2d program~shape_c_2d->proc~set_c~3 program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~set_half_ring~2 program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~set_ring~2 program~shape_tetragon shape_tetragon program~shape_tetragon->proc~set_tetragon Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/set3~3.html"},{"title":"set_C – ForCAD","text":"private pure subroutine set_C(this, center, radius1, radius2) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: center (:) real(kind=rk), intent(in) :: radius1 real(kind=rk), intent(in) :: radius2 Calls proc~~set_c~3~~CallsGraph proc~set_c~3 nurbs_surface%set_C none~set~3 nurbs_surface%set proc~set_c~3->none~set~3 proc~set1~3 nurbs_surface%set1 none~set~3->proc~set1~3 proc~set2~3 nurbs_surface%set2 none~set~3->proc~set2~3 proc~set3~3 nurbs_surface%set3 none~set~3->proc~set3~3 proc~cmp_degree~3 nurbs_surface%cmp_degree proc~set1~3->proc~cmp_degree~3 proc~cmp_nc~3 nurbs_surface%cmp_nc proc~set1~3->proc~cmp_nc~3 proc~set2~3->proc~cmp_nc~3 proc~compute_knot_vector compute_knot_vector proc~set2~3->proc~compute_knot_vector proc~set3~3->proc~cmp_degree~3 proc~get_multiplicity~3 nurbs_surface%get_multiplicity proc~cmp_degree~3->proc~get_multiplicity~3 interface~compute_multiplicity compute_multiplicity proc~cmp_nc~3->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity~3->interface~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~~set_c~3~~CalledByGraph proc~set_c~3 nurbs_surface%set_C program~shape_c_2d shape_C_2d program~shape_c_2d->proc~set_c~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_c~3.html"},{"title":"set_elem – ForCAD","text":"private pure subroutine set_elem(this, elemConn) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:)","tags":"","loc":"proc/set_elem~3.html"},{"title":"set_elem_Xc_vis – ForCAD","text":"private pure subroutine set_elem_Xc_vis(this, elemConn) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:)","tags":"","loc":"proc/set_elem_xc_vis~3.html"},{"title":"set_elem_Xg_vis – ForCAD","text":"private pure subroutine set_elem_Xg_vis(this, elemConn) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:)","tags":"","loc":"proc/set_elem_xg_vis~3.html"},{"title":"set_half_ring – ForCAD","text":"private pure subroutine set_half_ring(this, center, radius1, radius2) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: center (:) real(kind=rk), intent(in) :: radius1 real(kind=rk), intent(in) :: radius2 Calls proc~~set_half_ring~2~~CallsGraph proc~set_half_ring~2 nurbs_surface%set_half_ring none~set~3 nurbs_surface%set proc~set_half_ring~2->none~set~3 proc~set1~3 nurbs_surface%set1 none~set~3->proc~set1~3 proc~set2~3 nurbs_surface%set2 none~set~3->proc~set2~3 proc~set3~3 nurbs_surface%set3 none~set~3->proc~set3~3 proc~cmp_degree~3 nurbs_surface%cmp_degree proc~set1~3->proc~cmp_degree~3 proc~cmp_nc~3 nurbs_surface%cmp_nc proc~set1~3->proc~cmp_nc~3 proc~set2~3->proc~cmp_nc~3 proc~compute_knot_vector compute_knot_vector proc~set2~3->proc~compute_knot_vector proc~set3~3->proc~cmp_degree~3 proc~get_multiplicity~3 nurbs_surface%get_multiplicity proc~cmp_degree~3->proc~get_multiplicity~3 interface~compute_multiplicity compute_multiplicity proc~cmp_nc~3->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity~3->interface~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~~set_half_ring~2~~CalledByGraph proc~set_half_ring~2 nurbs_surface%set_half_ring program~example_ppm2 example_ppm2 program~example_ppm2->proc~set_half_ring~2 program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~set_half_ring~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_half_ring~2.html"},{"title":"set_ring – ForCAD","text":"private pure subroutine set_ring(this, center, radius1, radius2) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: center (:) real(kind=rk), intent(in) :: radius1 real(kind=rk), intent(in) :: radius2 Calls proc~~set_ring~2~~CallsGraph proc~set_ring~2 nurbs_surface%set_ring none~set~3 nurbs_surface%set proc~set_ring~2->none~set~3 proc~set1~3 nurbs_surface%set1 none~set~3->proc~set1~3 proc~set2~3 nurbs_surface%set2 none~set~3->proc~set2~3 proc~set3~3 nurbs_surface%set3 none~set~3->proc~set3~3 proc~cmp_degree~3 nurbs_surface%cmp_degree proc~set1~3->proc~cmp_degree~3 proc~cmp_nc~3 nurbs_surface%cmp_nc proc~set1~3->proc~cmp_nc~3 proc~set2~3->proc~cmp_nc~3 proc~compute_knot_vector compute_knot_vector proc~set2~3->proc~compute_knot_vector proc~set3~3->proc~cmp_degree~3 proc~get_multiplicity~3 nurbs_surface%get_multiplicity proc~cmp_degree~3->proc~get_multiplicity~3 interface~compute_multiplicity compute_multiplicity proc~cmp_nc~3->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity~3->interface~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~~set_ring~2~~CalledByGraph proc~set_ring~2 nurbs_surface%set_ring program~example_ppm1 example_ppm1 program~example_ppm1->proc~set_ring~2 program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~set_ring~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_ring~2.html"},{"title":"set_tetragon – ForCAD","text":"private pure subroutine set_tetragon(this, L, nc, Wc) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in) :: L (2) integer, intent(in) :: nc (2) real(kind=rk), intent(in), optional, contiguous :: Wc (:) Calls proc~~set_tetragon~~CallsGraph proc~set_tetragon nurbs_surface%set_tetragon none~set~3 nurbs_surface%set proc~set_tetragon->none~set~3 proc~tetragon_xc tetragon_Xc proc~set_tetragon->proc~tetragon_xc proc~set1~3 nurbs_surface%set1 none~set~3->proc~set1~3 proc~set2~3 nurbs_surface%set2 none~set~3->proc~set2~3 proc~set3~3 nurbs_surface%set3 none~set~3->proc~set3~3 proc~cmp_degree~3 nurbs_surface%cmp_degree proc~set1~3->proc~cmp_degree~3 proc~cmp_nc~3 nurbs_surface%cmp_nc proc~set1~3->proc~cmp_nc~3 proc~set2~3->proc~cmp_nc~3 proc~compute_knot_vector compute_knot_vector proc~set2~3->proc~compute_knot_vector proc~set3~3->proc~cmp_degree~3 proc~get_multiplicity~3 nurbs_surface%get_multiplicity proc~cmp_degree~3->proc~get_multiplicity~3 interface~compute_multiplicity compute_multiplicity proc~cmp_nc~3->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity~3->interface~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~~set_tetragon~~CalledByGraph proc~set_tetragon nurbs_surface%set_tetragon program~example_ppm1 example_ppm1 program~example_ppm1->proc~set_tetragon program~example_ppm2 example_ppm2 program~example_ppm2->proc~set_tetragon program~example_ppm3 example_ppm3 program~example_ppm3->proc~set_tetragon program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->proc~set_tetragon program~shape_tetragon shape_tetragon program~shape_tetragon->proc~set_tetragon Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_tetragon.html"},{"title":"show – ForCAD","text":"private impure subroutine show(this, vtkfile_Xc, vtkfile_Xg) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this character(len=*), intent(in) :: vtkfile_Xc character(len=*), intent(in) :: vtkfile_Xg Called by proc~~show~3~~CalledByGraph proc~show~3 nurbs_surface%show program~example3_surface example3_surface program~example3_surface->proc~show~3 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~show~3 program~shape_c_2d shape_C_2d program~shape_c_2d->proc~show~3 program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~show~3 program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~show~3 program~shape_tetragon shape_tetragon program~shape_tetragon->proc~show~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/show~3.html"},{"title":"translate_Xc – ForCAD","text":"private pure subroutine translate_Xc(this, vec) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in) :: vec (:) Called by proc~~translate_xc~3~~CalledByGraph proc~translate_xc~3 nurbs_surface%translate_Xc program~example3_surface example3_surface program~example3_surface->proc~translate_xc~3 program~example_ppm2 example_ppm2 program~example_ppm2->proc~translate_xc~3 program~example_ppm3 example_ppm3 program~example_ppm3->proc~translate_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/translate_xc~3.html"},{"title":"translate_Xg – ForCAD","text":"private pure subroutine translate_Xg(this, vec) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in) :: vec (:) Called by proc~~translate_xg~3~~CalledByGraph proc~translate_xg~3 nurbs_surface%translate_Xg program~example3_surface example3_surface program~example3_surface->proc~translate_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/translate_xg~3.html"},{"title":"compute_Tgc – ForCAD","text":"private interface compute_Tgc Called by interface~~compute_tgc~3~~CalledByGraph interface~compute_tgc~3 compute_Tgc proc~basis_scalar~3 nurbs_surface%basis_scalar proc~basis_scalar~3->interface~compute_tgc~3 proc~basis_vector~3 nurbs_surface%basis_vector proc~basis_vector~3->interface~compute_tgc~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. Functions private pure function compute_Tgc_bspline_2d_scalar(f_Xt, f_knot1, f_knot2, f_degree, f_nc) result(f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: f_nc (2) Return Value real(kind=rk), allocatable, (:) private pure function compute_Tgc_bspline_2d_vector(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_ng) result(f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: f_nc (2) integer, intent(in) :: f_ng (2) Return Value real(kind=rk), allocatable, (:,:) private pure function compute_Tgc_nurbs_2d_scalar(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_Wc) result(f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: f_nc (2) real(kind=rk), intent(in), contiguous :: f_Wc (:) Return Value real(kind=rk), allocatable, (:) private pure function compute_Tgc_nurbs_2d_vector(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_ng, f_Wc) result(f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: f_nc (2) integer, intent(in) :: f_ng (2) real(kind=rk), intent(in), contiguous :: f_Wc (:) Return Value real(kind=rk), allocatable, (:,:)","tags":"","loc":"interface/compute_tgc~3.html"},{"title":"compute_Xg – ForCAD","text":"private interface compute_Xg Called by interface~~compute_xg~3~~CalledByGraph interface~compute_xg~3 compute_Xg proc~cmp_xg~3 nurbs_surface%cmp_Xg proc~cmp_xg~3->interface~compute_xg~3 proc~create~3 nurbs_surface%create proc~create~3->interface~compute_xg~3 proc~nearest_point2~3 nurbs_surface%nearest_point2 proc~nearest_point2~3->proc~cmp_xg~3 proc~nearest_point2~3->proc~create~3 program~example3_surface example3_surface program~example3_surface->proc~create~3 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~create~3 program~example_ppm1 example_ppm1 program~example_ppm1->proc~create~3 program~example_ppm2 example_ppm2 program~example_ppm2->proc~create~3 program~example_ppm3 example_ppm3 program~example_ppm3->proc~create~3 program~nearest_point_2d nearest_point_2d program~nearest_point_2d->proc~create~3 program~nearest_point_2d->proc~nearest_point2~3 program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->proc~create~3 program~shape_c_2d shape_C_2d program~shape_c_2d->proc~create~3 program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~create~3 program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~create~3 program~shape_tetragon shape_tetragon program~shape_tetragon->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. Functions private pure function compute_Xg_bspline_2d(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_ng, f_Xc) result(f_Xg) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: f_nc (2) integer, intent(in) :: f_ng (2) real(kind=rk), intent(in), contiguous :: f_Xc (:,:) Return Value real(kind=rk), allocatable, (:,:) private pure function compute_Xg_bspline_2d_1point(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_Xc) result(f_Xg) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: f_nc (2) real(kind=rk), intent(in), contiguous :: f_Xc (:,:) Return Value real(kind=rk), allocatable, (:) private pure function compute_Xg_nurbs_2d(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_ng, f_Xc, f_Wc) result(f_Xg) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: f_nc (2) integer, intent(in) :: f_ng (2) real(kind=rk), intent(in), contiguous :: f_Xc (:,:) real(kind=rk), intent(in), contiguous :: f_Wc (:) Return Value real(kind=rk), allocatable, (:,:) private pure function compute_Xg_nurbs_2d_1point(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_Xc, f_Wc) result(f_Xg) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: f_nc (2) real(kind=rk), intent(in), contiguous :: f_Xc (:,:) real(kind=rk), intent(in), contiguous :: f_Wc (:) Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"interface/compute_xg~3.html"},{"title":"compute_d2Tgc – ForCAD","text":"private interface compute_d2Tgc Called by interface~~compute_d2tgc~3~~CalledByGraph interface~compute_d2tgc~3 compute_d2Tgc proc~derivative2_scalar~3 nurbs_surface%derivative2_scalar proc~derivative2_scalar~3->interface~compute_d2tgc~3 proc~derivative2_vector~3 nurbs_surface%derivative2_vector proc~derivative2_vector~3->interface~compute_d2tgc~3 none~derivative2~3 nurbs_surface%derivative2 none~derivative2~3->proc~derivative2_scalar~3 none~derivative2~3->proc~derivative2_vector~3 proc~nearest_point2~3 nurbs_surface%nearest_point2 proc~nearest_point2~3->none~derivative2~3 program~nearest_point_2d nearest_point_2d program~nearest_point_2d->proc~nearest_point2~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. Subroutines private pure subroutine compute_d2Tgc_bspline_2d_scalar(f_Xt, f_knot1, f_knot2, f_degree, nc, f_d2Tgc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: nc (2) real(kind=rk), intent(out), allocatable :: f_d2Tgc (:,:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:) private pure subroutine compute_d2Tgc_bspline_2d_vector(f_Xt, f_knot1, f_knot2, f_degree, nc, f_ng, f_d2Tgc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: nc (2) integer, intent(in) :: f_ng (2) real(kind=rk), intent(out), allocatable :: f_d2Tgc (:,:,:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:,:) private pure subroutine compute_d2Tgc_nurbs_2d_scalar(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_Wc, f_d2Tgc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: f_nc (2) real(kind=rk), intent(in), contiguous :: f_Wc (:) real(kind=rk), intent(out), allocatable :: f_d2Tgc (:,:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:) private pure subroutine compute_d2Tgc_nurbs_2d_vector(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_ng, f_Wc, f_d2Tgc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: f_nc (2) integer, intent(in) :: f_ng (2) real(kind=rk), intent(in), contiguous :: f_Wc (:) real(kind=rk), intent(out), allocatable :: f_d2Tgc (:,:,:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:,:)","tags":"","loc":"interface/compute_d2tgc~3.html"},{"title":"compute_dTgc – ForCAD","text":"private interface compute_dTgc Called by interface~~compute_dtgc~3~~CalledByGraph interface~compute_dtgc~3 compute_dTgc proc~derivative_scalar~3 nurbs_surface%derivative_scalar proc~derivative_scalar~3->interface~compute_dtgc~3 proc~derivative_vector~3 nurbs_surface%derivative_vector proc~derivative_vector~3->interface~compute_dtgc~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. Subroutines private pure subroutine compute_dTgc_bspline_2d_scalar(f_Xt, f_knot1, f_knot2, f_degree, nc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: nc (2) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:) private pure subroutine compute_dTgc_bspline_2d_vector(f_Xt, f_knot1, f_knot2, f_degree, nc, f_ng, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: nc (2) integer, intent(in) :: f_ng (2) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:,:) private pure subroutine compute_dTgc_nurbs_2d_scalar(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_Wc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: f_nc (2) real(kind=rk), intent(in), contiguous :: f_Wc (:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:) private pure subroutine compute_dTgc_nurbs_2d_vector(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_ng, f_Wc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: f_nc (2) integer, intent(in) :: f_ng (2) real(kind=rk), intent(in), contiguous :: f_Wc (:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:,:)","tags":"","loc":"interface/compute_dtgc~3.html"},{"title":"nearest_point_help_2d – ForCAD","text":"interface Called by interface~~nearest_point_help_2d~~CalledByGraph interface~nearest_point_help_2d nearest_point_help_2d proc~nearest_point2~3 nurbs_surface%nearest_point2 proc~nearest_point2~3->interface~nearest_point_help_2d proc~nearest_point~3 nurbs_surface%nearest_point proc~nearest_point~3->interface~nearest_point_help_2d program~nearest_point_2d nearest_point_2d program~nearest_point_2d->proc~nearest_point2~3 program~nearest_point_2d->proc~nearest_point~3 program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->proc~nearest_point~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. private pure function nearest_point_help_2d(f_ng, f_Xg, f_point_Xg) result(f_distances) Arguments Type Intent Optional Attributes Name integer, intent(in) :: f_ng (2) real(kind=rk), intent(in), contiguous :: f_Xg (:,:) real(kind=rk), intent(in), contiguous :: f_point_Xg (:) Return Value real(kind=rk),allocatable,(:)","tags":"","loc":"interface/nearest_point_help_2d.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), allocatable, (:,:) Called by proc~~generate_xc~5~~CalledByGraph proc~generate_xc~5 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":"forcad_nurbs_volume – ForCAD","text":"This module defines the 'nurbs_volume' type for representing a Non-Uniform Rational B-Spline (NURBS) volume. 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~example1_curve example1_curve program~example1_curve->module~forcad program~example3_surface example3_surface program~example3_surface->module~forcad program~example3_volume example3_volume program~example3_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 program~example_ppm1 example_ppm1 program~example_ppm1->module~forcad program~example_ppm2 example_ppm2 program~example_ppm2->module~forcad program~example_ppm3 example_ppm3 program~example_ppm3->module~forcad program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->module~forcad program~nearest_point_1d nearest_point_1d program~nearest_point_1d->module~forcad program~nearest_point_2d nearest_point_2d program~nearest_point_2d->module~forcad program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->module~forcad program~nearest_point_3d nearest_point_3d program~nearest_point_3d->module~forcad program~shape_c_1d shape_C_1d program~shape_c_1d->module~forcad program~shape_c_2d shape_C_2d program~shape_c_2d->module~forcad program~shape_c_3d shape_C_3d program~shape_c_3d->module~forcad program~shape_circle shape_circle program~shape_circle->module~forcad program~shape_half_circle shape_half_circle program~shape_half_circle->module~forcad program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->module~forcad program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->module~forcad program~shape_hexahedron shape_hexahedron program~shape_hexahedron->module~forcad program~shape_ring_2d shape_ring_2d program~shape_ring_2d->module~forcad program~shape_ring_3d shape_ring_3d program~shape_ring_3d->module~forcad program~shape_tetragon shape_tetragon program~shape_tetragon->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. Interfaces private interface compute_Tgc private pure function compute_Tgc_bspline_3d_scalar(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc) result(f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) Return Value real(kind=rk), allocatable, (:) private pure function compute_Tgc_bspline_3d_vector(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_ng) result(f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) integer, intent(in) :: f_ng (3) Return Value real(kind=rk), allocatable, (:,:) private pure function compute_Tgc_nurbs_3d_scalar(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_Wc) result(f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) real(kind=rk), intent(in), contiguous :: f_Wc (:) Return Value real(kind=rk), allocatable, (:) private pure function compute_Tgc_nurbs_3d_vector(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_ng, f_Wc) result(f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) integer, intent(in) :: f_ng (3) real(kind=rk), intent(in), contiguous :: f_Wc (:) Return Value real(kind=rk), allocatable, (:,:) private interface compute_Xg private pure function compute_Xg_bspline_3d(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_ng, f_Xc) result(f_Xg) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) integer, intent(in) :: f_ng (3) real(kind=rk), intent(in), contiguous :: f_Xc (:,:) Return Value real(kind=rk), allocatable, (:,:) private pure function compute_Xg_bspline_3d_1point(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_Xc) result(f_Xg) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) real(kind=rk), intent(in), contiguous :: f_Xc (:,:) Return Value real(kind=rk), allocatable, (:) private pure function compute_Xg_nurbs_3d(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_ng, f_Xc, f_Wc) result(f_Xg) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) integer, intent(in) :: f_ng (3) real(kind=rk), intent(in), contiguous :: f_Xc (:,:) real(kind=rk), intent(in), contiguous :: f_Wc (:) Return Value real(kind=rk), allocatable, (:,:) private pure function compute_Xg_nurbs_3d_1point(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_Xc, f_Wc) result(f_Xg) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) real(kind=rk), intent(in), contiguous :: f_Xc (:,:) real(kind=rk), intent(in), contiguous :: f_Wc (:) Return Value real(kind=rk), allocatable, (:) private interface compute_d2Tgc private pure subroutine compute_d2Tgc_bspline_3d_scalar(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_d2Tgc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) real(kind=rk), intent(out), allocatable :: f_d2Tgc (:,:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:) private pure subroutine compute_d2Tgc_bspline_3d_vector(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_ng, f_d2Tgc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) integer, intent(in) :: f_ng (3) real(kind=rk), intent(out), allocatable :: f_d2Tgc (:,:,:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:,:) private pure subroutine compute_d2Tgc_nurbs_3d_scalar(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_Wc, f_d2Tgc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) real(kind=rk), intent(in), contiguous :: f_Wc (:) real(kind=rk), intent(out), allocatable :: f_d2Tgc (:,:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:) private pure subroutine compute_d2Tgc_nurbs_3d_vector(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_ng, f_Wc, f_d2Tgc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) integer, intent(in) :: f_ng (3) real(kind=rk), intent(in), contiguous :: f_Wc (:) real(kind=rk), intent(out), allocatable :: f_d2Tgc (:,:,:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:,:) private interface compute_dTgc private pure subroutine compute_dTgc_bspline_3d_scalar(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:) private pure subroutine compute_dTgc_bspline_3d_vector(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_ng, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) integer, intent(in) :: f_ng (3) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:,:) private pure subroutine compute_dTgc_nurbs_3d_scalar(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_Wc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) real(kind=rk), intent(in), contiguous :: f_Wc (:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:) private pure subroutine compute_dTgc_nurbs_3d_vector(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_ng, f_Wc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) integer, intent(in) :: f_ng (3) real(kind=rk), intent(in), contiguous :: f_Wc (:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:,:) interface private pure function nearest_point_help_3d(f_ng, f_Xg, f_point_Xg) result(f_distances) Arguments Type Intent Optional Attributes Name integer, intent(in) :: f_ng (3) real(kind=rk), intent(in), contiguous :: f_Xg (:,:) real(kind=rk), intent(in), contiguous :: f_point_Xg (:) Return Value real(kind=rk), allocatable, (:) Derived Types type, public :: nurbs_volume Components Type Visibility Attributes Name Initial real(kind=rk), private, allocatable :: Wc (:) Weights for the control points (1D array: [nc(1) nc(2) nc(3)]) real(kind=rk), private, allocatable :: Xc (:,:) Control points (2D array: [nc(1) nc(2) nc(3), dim]) real(kind=rk), private, allocatable :: Xg (:,:) Geometry points (2D array: [ng(1) ng(2) ng(3), dim]) real(kind=rk), private, allocatable :: Xt (:,:) Evaluation parameter values (2D array: [ng(1) ng(2) ng(3), dim] real(kind=rk), private, allocatable :: Xt1 (:) Evaluation parameter values in the first direction (1D array: [ng(1)]) real(kind=rk), private, allocatable :: Xt2 (:) Evaluation parameter values in the second direction (1D array: [ng(2)]) real(kind=rk), private, allocatable :: Xt3 (:) Evaluation parameter values in the third direction (1D array: [ng(3)]) integer, private :: degree (3) Degree (order) of the volume integer, private, allocatable :: elemConn (:,:) IGA element connectivity integer, private, allocatable :: elemConn_Xc_vis (:,:) Connectivity for visualization of control points integer, private, allocatable :: elemConn_Xg_vis (:,:) Connectivity for visualization of geometry points real(kind=rk), private, allocatable :: knot1 (:) Knot vector in the first direction (1D array) real(kind=rk), private, allocatable :: knot2 (:) Knot vector in the second direction (1D array) real(kind=rk), private, allocatable :: knot3 (:) Knot vector in the third direction (1D array) 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 generic, public :: basis => basis_vector , basis_scalar Compute the basis functions of the NURBS volume Read more… procedure, public :: cmp_Xg Compute geometry points Read more… procedure, public :: cmp_degree Compute degree of the NURBS volume Read more… procedure, public :: cmp_degreeFace Compute degrees of the faces Read more… procedure, public :: cmp_elem Generate IGA element connectivity Read more… procedure, public :: cmp_elemFace Compute faces of the IGA elements Read more… procedure, public :: cmp_elemFace_Xc_vis Compute faces of the control points Read more… procedure, public :: cmp_elemFace_Xg_vis Compute faces of the geometry points Read more… procedure, public :: cmp_elem_Xc_vis Generate connectivity for control points Read more… procedure, public :: cmp_elem_Xg_vis Generate connectivity for geometry points Read more… procedure, public :: cmp_nc Compute number of required control points Read more… procedure, public :: create Generate geometry points Read more… generic, public :: derivative => derivative_vector , derivative_scalar Compute the derivative of the NURBS volume Read more… generic, public :: derivative2 => derivative2_vector , derivative2_scalar Compute the second derivative of the NURBS volume Read more… procedure, public :: elevate_degree Elevate the degree of the NURBS volume 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 volume object Read more… generic, public :: get_Wc => get_Wc_all , get_Wci Get weights Read more… generic, public :: get_Xc => get_Xc_all , get_Xci , get_Xcid Get control points Read more… generic, public :: get_Xg => get_Xg_all , get_Xgi , get_Xgid Get geometry points Read more… procedure, public :: get_Xt Get parameter values Read more… procedure, public :: get_continuity Compute and return the continuity of the NURBS volume Read more… generic, public :: get_degree => get_degree_all , get_degree_dir Get degree of the NURBS volume Read more… procedure, public :: get_elem Get IGA element connectivity Read more… procedure, public :: get_elem_Xc_vis Get connectivity for control points Read more… procedure, public :: get_elem_Xg_vis Get connectivity for geometry points Read more… generic, public :: get_knot => get_knoti , get_knot_all Get knot vector Read more… procedure, public :: get_multiplicity Compute and return the multiplicity of the knots Read more… procedure, public :: get_ng Get number of geometry points Read more… procedure, public :: insert_knots Insert knots into the knot vector Read more… procedure, public :: is_rational Check if the NURBS volume is rational Read more… procedure, public :: modify_Wc Modify weights Read more… procedure, public :: modify_Xc Modify control points Read more… procedure, public :: nearest_point Find the nearest point on the NURBS volume (Approximation) Read more… procedure, public :: nearest_point2 Find the nearest point on the NURBS volume (Minimization - Newton's method) Read more… procedure, public :: put_to_nurbs Put a shape to a NURBS volume Read more… procedure, public :: remove_knots Remove knots from the knot vector Read more… procedure, public :: rotate_Xc Rotate control points Read more… procedure, public :: rotate_Xg Rotate geometry points Read more… generic, public :: set => set1 , set2 , set3 Set NURBS volume Read more… procedure, public :: set1 Set knot vectors, control points and weights for the NURBS volume object Read more… procedure, public :: set2 Set NURBS volume using nodes of parameter space, degree, continuity, control points and weights Read more… procedure, public :: set3 Set Bezier or Rational Bezier volume using control points and weights Read more… procedure, public :: set_C Set a C-shape Read more… procedure, public :: set_elem Set IGA element connectivity Read more… procedure, public :: set_elem_Xc_vis Set connectivity for control points Read more… procedure, public :: set_elem_Xg_vis Set connectivity for geometry points Read more… procedure, public :: set_half_ring Set a half ring Read more… procedure, public :: set_hexahedron Set a hexahedron Read more… procedure, public :: set_ring Set a ring Read more… procedure, public :: show Show the NURBS object using PyVista Read more… procedure, public :: translate_Xc Translate control points Read more… procedure, public :: translate_Xg Translate geometry points Read more… procedure, private :: basis_scalar Compute the basis functions of the NURBS volume Read more… procedure, private :: basis_vector Compute the basis functions of the NURBS volume Read more… procedure, private :: derivative2_scalar Compute the second derivative of the NURBS volume Read more… procedure, private :: derivative2_vector Compute the second derivative of the NURBS volume Read more… procedure, private :: derivative_scalar Compute the derivative of the NURBS volume Read more… procedure, private :: derivative_vector Compute the derivative of the NURBS volume Read more… procedure, private :: get_Wc_all Get all weights Read more… procedure, private :: get_Wci Get i-th weight Read more… procedure, private :: get_Xc_all Get all control points Read more… procedure, private :: get_Xci Get i-th control point Read more… procedure, private :: get_Xcid Get i-th control point in a specific direction Read more… procedure, private :: get_Xg_all Get all geometry points Read more… procedure, private :: get_Xgi Get i-th geometry point Read more… procedure, private :: get_Xgid Get i-th geometry point in a specific direction Read more… procedure, private :: get_degree_all Get degree of the NURBS volume in all directions Read more… procedure, private :: get_degree_dir Get degree of the NURBS volume in a specific direction Read more… procedure, private :: get_knot_all Get all knot vectors Read more… procedure, private :: get_knoti Get i-th knot value Read more… Functions private pure function cmp_Xg (this, Xt) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this real(kind=rk), intent(in), contiguous :: Xt (:) Return Value real(kind=rk), allocatable, (:) private pure function cmp_degreeFace (this, face) result(degree) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: face Return Value integer, (3) private pure function cmp_elem (this) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value integer, allocatable, (:,:) private pure function cmp_elemFace (this, elem, face) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause number of nodes in each direction Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: elem integer, intent(in) :: face Return Value integer, allocatable, (:) private pure function cmp_elemFace_Xc_vis (this, elem, face) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause number of nodes in each direction Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: elem integer, intent(in) :: face Return Value integer, allocatable, (:) private pure function cmp_elemFace_Xg_vis (this, elem, face) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause number of nodes in each direction Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: elem integer, intent(in) :: face Return Value integer, allocatable, (:) private pure function cmp_elem_Xc_vis (this, p) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in), optional, contiguous :: p (:) Return Value integer, allocatable, (:,:) private pure function cmp_elem_Xg_vis (this, p) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in), optional, contiguous :: p (:) Return Value integer, allocatable, (:,:) private pure function get_Wc_all (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_Wci (this, n) result(Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk) private pure function get_Xc_all (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_Xci (this, n) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk), allocatable, (:) private pure function get_Xcid (this, n, dir) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: n integer, intent(in) :: dir Return Value real(kind=rk) private pure function get_Xg_all (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_Xgi (this, n) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk), allocatable, (:) private pure function get_Xgid (this, n, dir) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: n integer, intent(in) :: dir Return Value real(kind=rk) 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_degree_all (this) result(degree) 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_degree_dir (this, dir) result(degree) 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_elem (this) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value integer, allocatable, (:,:) private pure function get_elem_Xc_vis (this) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value integer, allocatable, (:,:) private pure function get_elem_Xg_vis (this) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value integer, allocatable, (:,:) private pure function get_knot_all (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_knoti (this, dir, i) 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 integer, intent(in) :: i Return Value real(kind=rk) 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 is_rational (this) result(r) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value logical Subroutines private pure subroutine basis_scalar (this, Xt, Tgc) 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), contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: Tgc (:) private pure subroutine basis_vector (this, res1, res2, res3, Xt1, Xt2, Xt3, Tgc) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(in), optional, contiguous :: Xt3 (:) real(kind=rk), intent(out), allocatable :: Tgc (:,:) private pure subroutine cmp_degree (this, dir) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), optional :: dir private pure subroutine cmp_nc (this, dir) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), optional :: dir private pure subroutine create (this, res1, res2, res3, Xt1, Xt2, Xt3, Xt) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(in), optional, contiguous :: Xt3 (:) real(kind=rk), intent(in), optional, contiguous :: Xt (:,:) private pure subroutine derivative2_scalar (this, Xt, d2Tgc, dTgc, Tgc) 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), contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:) real(kind=rk), intent(out), optional, allocatable :: dTgc (:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:) private pure subroutine derivative2_vector (this, res1, res2, res3, Xt1, Xt2, Xt3, d2Tgc, dTgc, Tgc) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(in), optional, contiguous :: Xt3 (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:,:) real(kind=rk), intent(out), optional, allocatable :: dTgc (:,:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:,:) private pure subroutine derivative_scalar (this, Xt, dTgc, Tgc) 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), contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: dTgc (:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:) private pure subroutine derivative_vector (this, res1, res2, res3, Xt1, Xt2, Xt3, dTgc, Tgc) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(in), optional, contiguous :: Xt3 (:) real(kind=rk), intent(out), allocatable :: dTgc (:,:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:,:) private pure subroutine elevate_degree (this, dir, t) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in) :: dir integer, intent(in) :: t 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 insert_knots (this, dir, Xth, r) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in) :: dir real(kind=rk), intent(in), contiguous :: Xth (:) integer, intent(in), contiguous :: r (:) 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 nearest_point (this, point_Xg, nearest_Xg, nearest_Xt, id) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this real(kind=rk), intent(in) :: point_Xg (:) real(kind=rk), intent(out), optional, allocatable :: nearest_Xg (:) real(kind=rk), intent(out), optional, allocatable :: nearest_Xt (:) integer, intent(out), optional :: id private impure subroutine nearest_point2 (this, point_Xg, tol, maxit, nearest_Xt, nearest_Xg) 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) :: point_Xg (:) real(kind=rk), intent(in) :: tol integer, intent(in) :: maxit real(kind=rk), intent(out) :: nearest_Xt (3) real(kind=rk), intent(out), optional, allocatable :: nearest_Xg (:) private pure subroutine put_to_nurbs (this, X, elemConn) 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), contiguous :: X (:,:) integer, intent(in), contiguous :: elemConn (:,:) private pure subroutine remove_knots (this, dir, Xth, r) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in) :: dir real(kind=rk), intent(in), contiguous :: Xth (:) integer, intent(in), contiguous :: r (:) private pure subroutine rotate_Xc (this, alpha, beta, theta) 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) :: alpha real(kind=rk), intent(in) :: beta real(kind=rk), intent(in) :: theta private pure subroutine rotate_Xg (this, alpha, beta, theta) 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) :: alpha real(kind=rk), intent(in) :: beta real(kind=rk), intent(in) :: theta 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 volume object. Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) real(kind=rk), intent(in), contiguous :: knot3 (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) private pure subroutine set2 (this, Xth_dir1, Xth_dir2, Xth_dir3, degree, continuity1, continuity2, continuity3, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the NURBS volume object. Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: Xth_dir1 (:) real(kind=rk), intent(in), contiguous :: Xth_dir2 (:) real(kind=rk), intent(in), contiguous :: Xth_dir3 (:) integer, intent(in), contiguous :: degree (:) integer, intent(in), contiguous :: continuity1 (:) integer, intent(in), contiguous :: continuity2 (:) integer, intent(in), contiguous :: continuity3 (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) private pure subroutine set3 (this, nc, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set Bezier or Rational Bezier volume using control points and weights. Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), contiguous :: nc (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) private pure subroutine set_C (this, center, radius1, radius2, length) 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), contiguous :: center (:) real(kind=rk), intent(in) :: radius1 real(kind=rk), intent(in) :: radius2 real(kind=rk), intent(in) :: length private pure subroutine set_elem (this, elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:) private pure subroutine set_elem_Xc_vis (this, elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:) private pure subroutine set_elem_Xg_vis (this, elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:) private pure subroutine set_half_ring (this, center, radius1, radius2, length) 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), contiguous :: center (:) real(kind=rk), intent(in) :: radius1 real(kind=rk), intent(in) :: radius2 real(kind=rk), intent(in) :: length private pure subroutine set_hexahedron (this, L, nc, Wc) 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), contiguous :: L (:) integer, intent(in), contiguous :: nc (:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) private pure subroutine set_ring (this, center, radius1, radius2, length) 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), contiguous :: center (:) real(kind=rk), intent(in) :: radius1 real(kind=rk), intent(in) :: radius2 real(kind=rk), intent(in) :: length private impure subroutine show (this, vtkfile_Xc, vtkfile_Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this character(len=*), intent(in) :: vtkfile_Xc character(len=*), intent(in) :: vtkfile_Xg private pure subroutine translate_Xc (this, vec) 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) :: vec (:) private pure subroutine translate_Xg (this, vec) 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) :: vec (:)","tags":"","loc":"module/forcad_nurbs_volume.html"},{"title":"forcad_utils – ForCAD","text":"This module contains parameters, functions and subroutines that are used in the library. Used by module~~forcad_utils~~UsedByGraph module~forcad_utils forcad_utils module~forcad forcad module~forcad->module~forcad_utils 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_nurbs_curve->module~forcad_utils module~forcad_nurbs_surface->module~forcad_utils module~forcad_nurbs_volume->module~forcad_utils proc~compute_d2tgc_bspline_1d_scalar compute_d2Tgc_bspline_1d_scalar proc~compute_d2tgc_bspline_1d_scalar->module~forcad_utils proc~compute_d2tgc_bspline_1d_vector compute_d2Tgc_bspline_1d_vector proc~compute_d2tgc_bspline_1d_vector->module~forcad_utils proc~compute_d2tgc_bspline_2d_scalar compute_d2Tgc_bspline_2d_scalar proc~compute_d2tgc_bspline_2d_scalar->module~forcad_utils proc~compute_d2tgc_bspline_2d_vector compute_d2Tgc_bspline_2d_vector proc~compute_d2tgc_bspline_2d_vector->module~forcad_utils proc~compute_d2tgc_bspline_3d_scalar compute_d2Tgc_bspline_3d_scalar proc~compute_d2tgc_bspline_3d_scalar->module~forcad_utils proc~compute_d2tgc_bspline_3d_vector compute_d2Tgc_bspline_3d_vector proc~compute_d2tgc_bspline_3d_vector->module~forcad_utils proc~compute_d2tgc_nurbs_1d_scalar compute_d2Tgc_nurbs_1d_scalar proc~compute_d2tgc_nurbs_1d_scalar->module~forcad_utils proc~compute_d2tgc_nurbs_1d_vector compute_d2Tgc_nurbs_1d_vector proc~compute_d2tgc_nurbs_1d_vector->module~forcad_utils proc~compute_d2tgc_nurbs_2d_scalar compute_d2Tgc_nurbs_2d_scalar proc~compute_d2tgc_nurbs_2d_scalar->module~forcad_utils proc~compute_d2tgc_nurbs_2d_vector compute_d2Tgc_nurbs_2d_vector proc~compute_d2tgc_nurbs_2d_vector->module~forcad_utils proc~compute_d2tgc_nurbs_3d_scalar compute_d2Tgc_nurbs_3d_scalar proc~compute_d2tgc_nurbs_3d_scalar->module~forcad_utils proc~compute_d2tgc_nurbs_3d_vector compute_d2Tgc_nurbs_3d_vector proc~compute_d2tgc_nurbs_3d_vector->module~forcad_utils proc~compute_dtgc_bspline_1d_scalar compute_dTgc_bspline_1d_scalar proc~compute_dtgc_bspline_1d_scalar->module~forcad_utils proc~compute_dtgc_bspline_1d_vector compute_dTgc_bspline_1d_vector proc~compute_dtgc_bspline_1d_vector->module~forcad_utils proc~compute_dtgc_bspline_2d_scalar compute_dTgc_bspline_2d_scalar proc~compute_dtgc_bspline_2d_scalar->module~forcad_utils proc~compute_dtgc_bspline_2d_vector compute_dTgc_bspline_2d_vector proc~compute_dtgc_bspline_2d_vector->module~forcad_utils proc~compute_dtgc_bspline_3d_scalar compute_dTgc_bspline_3d_scalar proc~compute_dtgc_bspline_3d_scalar->module~forcad_utils proc~compute_dtgc_bspline_3d_vector compute_dTgc_bspline_3d_vector proc~compute_dtgc_bspline_3d_vector->module~forcad_utils proc~compute_dtgc_nurbs_1d_scalar compute_dTgc_nurbs_1d_scalar proc~compute_dtgc_nurbs_1d_scalar->module~forcad_utils proc~compute_dtgc_nurbs_1d_vector compute_dTgc_nurbs_1d_vector proc~compute_dtgc_nurbs_1d_vector->module~forcad_utils proc~compute_dtgc_nurbs_2d_scalar compute_dTgc_nurbs_2d_scalar proc~compute_dtgc_nurbs_2d_scalar->module~forcad_utils proc~compute_dtgc_nurbs_2d_vector compute_dTgc_nurbs_2d_vector proc~compute_dtgc_nurbs_2d_vector->module~forcad_utils proc~compute_dtgc_nurbs_3d_scalar compute_dTgc_nurbs_3d_scalar proc~compute_dtgc_nurbs_3d_scalar->module~forcad_utils proc~compute_dtgc_nurbs_3d_vector compute_dTgc_nurbs_3d_vector proc~compute_dtgc_nurbs_3d_vector->module~forcad_utils proc~compute_tgc_bspline_1d_scalar compute_Tgc_bspline_1d_scalar proc~compute_tgc_bspline_1d_scalar->module~forcad_utils proc~compute_tgc_bspline_1d_vector compute_Tgc_bspline_1d_vector proc~compute_tgc_bspline_1d_vector->module~forcad_utils proc~compute_tgc_bspline_2d_scalar compute_Tgc_bspline_2d_scalar proc~compute_tgc_bspline_2d_scalar->module~forcad_utils proc~compute_tgc_bspline_2d_vector compute_Tgc_bspline_2d_vector proc~compute_tgc_bspline_2d_vector->module~forcad_utils proc~compute_tgc_bspline_3d_scalar compute_Tgc_bspline_3d_scalar proc~compute_tgc_bspline_3d_scalar->module~forcad_utils proc~compute_tgc_bspline_3d_vector compute_Tgc_bspline_3d_vector proc~compute_tgc_bspline_3d_vector->module~forcad_utils proc~compute_tgc_nurbs_1d_scalar compute_Tgc_nurbs_1d_scalar proc~compute_tgc_nurbs_1d_scalar->module~forcad_utils proc~compute_tgc_nurbs_1d_vector compute_Tgc_nurbs_1d_vector proc~compute_tgc_nurbs_1d_vector->module~forcad_utils proc~compute_tgc_nurbs_2d_scalar compute_Tgc_nurbs_2d_scalar proc~compute_tgc_nurbs_2d_scalar->module~forcad_utils proc~compute_tgc_nurbs_2d_vector compute_Tgc_nurbs_2d_vector proc~compute_tgc_nurbs_2d_vector->module~forcad_utils proc~compute_tgc_nurbs_3d_scalar compute_Tgc_nurbs_3d_scalar proc~compute_tgc_nurbs_3d_scalar->module~forcad_utils proc~compute_tgc_nurbs_3d_vector compute_Tgc_nurbs_3d_vector proc~compute_tgc_nurbs_3d_vector->module~forcad_utils proc~compute_xg_bspline_1d compute_Xg_bspline_1d proc~compute_xg_bspline_1d->module~forcad_utils proc~compute_xg_bspline_1d_1point compute_Xg_bspline_1d_1point proc~compute_xg_bspline_1d_1point->module~forcad_utils proc~compute_xg_bspline_2d compute_Xg_bspline_2d proc~compute_xg_bspline_2d->module~forcad_utils proc~compute_xg_bspline_2d_1point compute_Xg_bspline_2d_1point proc~compute_xg_bspline_2d_1point->module~forcad_utils proc~compute_xg_bspline_3d compute_Xg_bspline_3d proc~compute_xg_bspline_3d->module~forcad_utils proc~compute_xg_bspline_3d_1point compute_Xg_bspline_3d_1point proc~compute_xg_bspline_3d_1point->module~forcad_utils proc~compute_xg_nurbs_1d compute_Xg_nurbs_1d proc~compute_xg_nurbs_1d->module~forcad_utils proc~compute_xg_nurbs_1d_1point compute_Xg_nurbs_1d_1point proc~compute_xg_nurbs_1d_1point->module~forcad_utils proc~compute_xg_nurbs_2d compute_Xg_nurbs_2d proc~compute_xg_nurbs_2d->module~forcad_utils proc~compute_xg_nurbs_2d_1point compute_Xg_nurbs_2d_1point proc~compute_xg_nurbs_2d_1point->module~forcad_utils proc~compute_xg_nurbs_3d compute_Xg_nurbs_3d proc~compute_xg_nurbs_3d->module~forcad_utils proc~compute_xg_nurbs_3d_1point compute_Xg_nurbs_3d_1point proc~compute_xg_nurbs_3d_1point->module~forcad_utils proc~nearest_point_help_1d nearest_point_help_1d proc~nearest_point_help_1d->module~forcad_utils proc~nearest_point_help_2d nearest_point_help_2d proc~nearest_point_help_2d->module~forcad_utils proc~nearest_point_help_3d nearest_point_help_3d proc~nearest_point_help_3d->module~forcad_utils program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->module~forcad_utils program~example_put_to_nurbs->module~forcad program~example1_curve example1_curve program~example1_curve->module~forcad program~example3_surface example3_surface program~example3_surface->module~forcad program~example3_volume example3_volume program~example3_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 program~example_ppm1 example_ppm1 program~example_ppm1->module~forcad program~example_ppm2 example_ppm2 program~example_ppm2->module~forcad program~example_ppm3 example_ppm3 program~example_ppm3->module~forcad program~nearest_point_1d nearest_point_1d program~nearest_point_1d->module~forcad program~nearest_point_2d nearest_point_2d program~nearest_point_2d->module~forcad program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->module~forcad program~nearest_point_3d nearest_point_3d program~nearest_point_3d->module~forcad program~shape_c_1d shape_C_1d program~shape_c_1d->module~forcad program~shape_c_2d shape_C_2d program~shape_c_2d->module~forcad program~shape_c_3d shape_C_3d program~shape_c_3d->module~forcad program~shape_circle shape_circle program~shape_circle->module~forcad program~shape_half_circle shape_half_circle program~shape_half_circle->module~forcad program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->module~forcad program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->module~forcad program~shape_hexahedron shape_hexahedron program~shape_hexahedron->module~forcad program~shape_ring_2d shape_ring_2d program~shape_ring_2d->module~forcad program~shape_ring_3d shape_ring_3d program~shape_ring_3d->module~forcad program~shape_tetragon shape_tetragon program~shape_tetragon->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 compute_multiplicity private pure function compute_multiplicity1 (knot) result(multiplicity) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: knot (:) Return Value integer, allocatable, (:) private pure function compute_multiplicity2 (knot, Xth) result(multiplicity) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: knot (:) real(kind=rk), intent(in) :: Xth Return Value integer 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, 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, 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, allocatable, (:,:) public interface elemConn_Cn private pure subroutine cmp_elemConn_Cn_L (nnode, p, Xth, vecKnot_mul, elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name integer, intent(in) :: nnode integer, intent(in) :: p real(kind=rk), intent(in), contiguous :: Xth (:) integer, intent(in), contiguous :: vecKnot_mul (:) integer, intent(out), allocatable :: elemConn (:,:) private pure subroutine cmp_elemConn_Cn_S (nnode1, nnode2, p1, p2, Xth1, Xth2, vecKnot_mul1, vecKnot_mul2, 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 real(kind=rk), intent(in), contiguous :: Xth1 (:) real(kind=rk), intent(in), contiguous :: Xth2 (:) integer, intent(in), contiguous :: vecKnot_mul1 (:) integer, intent(in), contiguous :: vecKnot_mul2 (:) integer, intent(out), allocatable :: elemConn (:,:) private pure subroutine cmp_elemConn_Cn_V (nnode1, nnode2, nnode3, p1, p2, p3, Xth1, Xth2, Xth3, vecKnot_mul1, vecKnot_mul2, vecKnot_mul3, 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 real(kind=rk), intent(in), contiguous :: Xth1 (:) real(kind=rk), intent(in), contiguous :: Xth2 (:) real(kind=rk), intent(in), contiguous :: Xth3 (:) integer, intent(in), contiguous :: vecKnot_mul1 (:) integer, intent(in), contiguous :: vecKnot_mul2 (:) integer, intent(in), contiguous :: vecKnot_mul3 (:) integer, intent(out), allocatable :: elemConn (:,:) 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), contiguous :: X_dir1 (:) real(kind=rk), intent(in), contiguous :: X_dir2 (:) real(kind=rk), intent(out), 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), contiguous :: X_dir1 (:) real(kind=rk), intent(in), contiguous :: X_dir2 (:) real(kind=rk), intent(in), contiguous :: X_dir3 (:) real(kind=rk), intent(out), allocatable :: Xt (:,:) public interface unique private pure function unique_integer (vec) result(output) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name integer, intent(in), dimension(:), contiguous :: vec Return Value integer, dimension(:), allocatable private pure function unique_real (vec) result(output) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), dimension(:), contiguous :: vec Return Value real(kind=rk), dimension(:), allocatable 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, degree) 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), contiguous :: knot (:) integer, intent(in) :: nc integer, intent(in) :: degree Return Value real(kind=rk), allocatable, (:) public pure function compute_knot_vector (Xth_dir, degree, continuity) result(knot) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xth_dir (:) integer, intent(in) :: degree integer, intent(in), contiguous :: continuity (:) Return Value real(kind=rk), allocatable, (:) public pure function findspan (n, degree, Xth, knot) result(s) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name integer, intent(in) :: n integer, intent(in) :: degree real(kind=rk), intent(in) :: Xth real(kind=rk), intent(in), contiguous :: knot (:) Return Value integer public pure function hexahedron_Xc (L, nc) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: L (3) integer, intent(in) :: nc (3) Return Value real(kind=rk), 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), contiguous :: u (:) real(kind=rk), intent(in), contiguous :: v (:) Return Value real(kind=rk), (size(u)*size(v)) public pure function rotation (alpha, beta, theta) result(R) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: alpha real(kind=rk), intent(in) :: beta real(kind=rk), intent(in) :: theta Return Value real(kind=rk), dimension(3,3) public pure function tetragon_Xc (L, nc) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: L (2) integer, intent(in) :: nc (2) Return Value real(kind=rk), allocatable, (:,:) private pure function bincoeff (n, k) result(b) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name integer, intent(in) :: n integer, intent(in) :: k Return Value real(kind=rk) 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, 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, 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, allocatable, (:,:) private pure function compute_multiplicity1 (knot) result(multiplicity) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: knot (:) Return Value integer, allocatable, (:) private pure function compute_multiplicity2 (knot, Xth) result(multiplicity) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: knot (:) real(kind=rk), intent(in) :: Xth Return Value integer private pure function factln (n) result(f) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name integer, intent(in) :: n Return Value real(kind=rk) private pure elemental function isinf (x) result(output) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: x Return Value logical private pure elemental function isnan (x) result(output) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: x Return Value logical 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), contiguous :: a (:) integer, intent(in), contiguous :: b (:) Return Value real(kind=rk), (sum(b)) private pure function unique_integer (vec) result(output) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name integer, intent(in), dimension(:), contiguous :: vec Return Value integer, dimension(:), allocatable private pure function unique_real (vec) result(output) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), dimension(:), contiguous :: vec Return Value real(kind=rk), dimension(:), allocatable Subroutines public pure subroutine basis_bspline_2der (Xt, knot, nc, degree, d2B, dB, 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), contiguous :: knot (:) integer, intent(in) :: nc integer, intent(in) :: degree real(kind=rk), intent(out), allocatable :: d2B (:) real(kind=rk), intent(out), optional, allocatable :: dB (:) real(kind=rk), intent(out), optional, allocatable :: B (:) public pure subroutine basis_bspline_der (Xt, knot, nc, degree, dB, 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), contiguous :: knot (:) integer, intent(in) :: nc integer, intent(in) :: degree real(kind=rk), intent(out), allocatable :: dB (:) real(kind=rk), intent(out), optional, allocatable :: B (:) public pure subroutine elevate_degree_A_5_9 (t, knot, degree, Xcw, nc_new, knot_new, Xcw_new) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name integer, intent(in) :: t real(kind=rk), intent(in), contiguous :: knot (:) integer, intent(in) :: degree real(kind=rk), intent(in), contiguous :: Xcw (:,:) integer, intent(out) :: nc_new real(kind=rk), intent(out), allocatable :: knot_new (:) real(kind=rk), intent(out), allocatable :: Xcw_new (:,:) public pure subroutine insert_knot_A_5_1 (p, UP, Pw, u, k, s, r, nq, UQ, Qw) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name integer, intent(in) :: p real(kind=rk), intent(in), contiguous :: UP (0:) real(kind=rk), intent(in), contiguous :: Pw (0:,:) real(kind=rk), intent(in) :: u integer, intent(in) :: k integer, intent(in) :: s integer, intent(in) :: r integer, intent(out) :: nq real(kind=rk), intent(out), allocatable :: UQ (:) real(kind=rk), intent(out), allocatable :: Qw (:,:) public pure subroutine remove_knots_A_5_8 (p, knot, Pw, u, r, s, num, t, knot_new, Pw_new) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name integer, intent(in) :: p real(kind=rk), intent(in), contiguous :: knot (:) real(kind=rk), intent(in), contiguous :: Pw (:,:) real(kind=rk), intent(in) :: u integer, intent(in) :: r integer, intent(in) :: s integer, intent(in) :: num integer, intent(out) :: t real(kind=rk), intent(out), allocatable :: knot_new (:) real(kind=rk), intent(out), allocatable :: Pw_new (:,:) private pure subroutine cmp_elemConn_Cn_L (nnode, p, Xth, vecKnot_mul, elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name integer, intent(in) :: nnode integer, intent(in) :: p real(kind=rk), intent(in), contiguous :: Xth (:) integer, intent(in), contiguous :: vecKnot_mul (:) integer, intent(out), allocatable :: elemConn (:,:) private pure subroutine cmp_elemConn_Cn_S (nnode1, nnode2, p1, p2, Xth1, Xth2, vecKnot_mul1, vecKnot_mul2, 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 real(kind=rk), intent(in), contiguous :: Xth1 (:) real(kind=rk), intent(in), contiguous :: Xth2 (:) integer, intent(in), contiguous :: vecKnot_mul1 (:) integer, intent(in), contiguous :: vecKnot_mul2 (:) integer, intent(out), allocatable :: elemConn (:,:) private pure subroutine cmp_elemConn_Cn_V (nnode1, nnode2, nnode3, p1, p2, p3, Xth1, Xth2, Xth3, vecKnot_mul1, vecKnot_mul2, vecKnot_mul3, 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 real(kind=rk), intent(in), contiguous :: Xth1 (:) real(kind=rk), intent(in), contiguous :: Xth2 (:) real(kind=rk), intent(in), contiguous :: Xth3 (:) integer, intent(in), contiguous :: vecKnot_mul1 (:) integer, intent(in), contiguous :: vecKnot_mul2 (:) integer, intent(in), contiguous :: vecKnot_mul3 (:) integer, intent(out), allocatable :: elemConn (:,:) 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), contiguous :: X_dir1 (:) real(kind=rk), intent(in), contiguous :: X_dir2 (:) real(kind=rk), intent(out), 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), contiguous :: X_dir1 (:) real(kind=rk), intent(in), contiguous :: X_dir2 (:) real(kind=rk), intent(in), contiguous :: X_dir3 (:) real(kind=rk), intent(out), allocatable :: Xt (:,:)","tags":"","loc":"module/forcad_utils.html"},{"title":"forcad – ForCAD","text":"Uses forcad_nurbs_surface forcad_nurbs_curve forcad_nurbs_volume forcad_utils module~~forcad~~UsesGraph module~forcad forcad 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_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~example1_curve example1_curve program~example1_curve->module~forcad program~example3_surface example3_surface program~example3_surface->module~forcad program~example3_volume example3_volume program~example3_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 program~example_ppm1 example_ppm1 program~example_ppm1->module~forcad program~example_ppm2 example_ppm2 program~example_ppm2->module~forcad program~example_ppm3 example_ppm3 program~example_ppm3->module~forcad program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->module~forcad program~nearest_point_1d nearest_point_1d program~nearest_point_1d->module~forcad program~nearest_point_2d nearest_point_2d program~nearest_point_2d->module~forcad program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->module~forcad program~nearest_point_3d nearest_point_3d program~nearest_point_3d->module~forcad program~shape_c_1d shape_C_1d program~shape_c_1d->module~forcad program~shape_c_2d shape_C_2d program~shape_c_2d->module~forcad program~shape_c_3d shape_C_3d program~shape_c_3d->module~forcad program~shape_circle shape_circle program~shape_circle->module~forcad program~shape_half_circle shape_half_circle program~shape_half_circle->module~forcad program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->module~forcad program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->module~forcad program~shape_hexahedron shape_hexahedron program~shape_hexahedron->module~forcad program~shape_ring_2d shape_ring_2d program~shape_ring_2d->module~forcad program~shape_ring_3d shape_ring_3d program~shape_ring_3d->module~forcad program~shape_tetragon shape_tetragon program~shape_tetragon->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_curve – ForCAD","text":"This module defines the 'nurbs_curve' type for representing a Non-Uniform Rational B-Spline (NURBS) curve. 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~example1_curve example1_curve program~example1_curve->module~forcad program~example3_surface example3_surface program~example3_surface->module~forcad program~example3_volume example3_volume program~example3_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 program~example_ppm1 example_ppm1 program~example_ppm1->module~forcad program~example_ppm2 example_ppm2 program~example_ppm2->module~forcad program~example_ppm3 example_ppm3 program~example_ppm3->module~forcad program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->module~forcad program~nearest_point_1d nearest_point_1d program~nearest_point_1d->module~forcad program~nearest_point_2d nearest_point_2d program~nearest_point_2d->module~forcad program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->module~forcad program~nearest_point_3d nearest_point_3d program~nearest_point_3d->module~forcad program~shape_c_1d shape_C_1d program~shape_c_1d->module~forcad program~shape_c_2d shape_C_2d program~shape_c_2d->module~forcad program~shape_c_3d shape_C_3d program~shape_c_3d->module~forcad program~shape_circle shape_circle program~shape_circle->module~forcad program~shape_half_circle shape_half_circle program~shape_half_circle->module~forcad program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->module~forcad program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->module~forcad program~shape_hexahedron shape_hexahedron program~shape_hexahedron->module~forcad program~shape_ring_2d shape_ring_2d program~shape_ring_2d->module~forcad program~shape_ring_3d shape_ring_3d program~shape_ring_3d->module~forcad program~shape_tetragon shape_tetragon program~shape_tetragon->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. Interfaces private interface compute_Tgc private pure function compute_Tgc_bspline_1d_scalar(f_Xt, f_knot, f_degree, f_nc) result(f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: f_Xt real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc Return Value real(kind=rk), allocatable, (:) private pure function compute_Tgc_bspline_1d_vector(f_Xt, f_knot, f_degree, f_nc, f_ng) result(f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc integer, intent(in) :: f_ng Return Value real(kind=rk), allocatable, (:,:) private pure function compute_Tgc_nurbs_1d_scalar(f_Xt, f_knot, f_degree, f_nc, f_Wc) result(f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: f_Xt real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc real(kind=rk), intent(in), contiguous :: f_Wc (:) Return Value real(kind=rk), allocatable, (:) private pure function compute_Tgc_nurbs_1d_vector(f_Xt, f_knot, f_degree, f_nc, f_ng, f_Wc) result(f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc integer, intent(in) :: f_ng real(kind=rk), intent(in), contiguous :: f_Wc (:) Return Value real(kind=rk), allocatable, (:,:) private interface compute_Xg private pure function compute_Xg_bspline_1d(f_Xt, f_knot, f_degree, f_nc, f_ng, f_Xc) result(f_Xg) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc integer, intent(in) :: f_ng real(kind=rk), intent(in), contiguous :: f_Xc (:,:) Return Value real(kind=rk), allocatable, (:,:) private pure function compute_Xg_bspline_1d_1point(f_Xt, f_knot, f_degree, f_nc, f_Xc) result(f_Xg) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: f_Xt real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc real(kind=rk), intent(in), contiguous :: f_Xc (:,:) Return Value real(kind=rk), allocatable, (:) private pure function compute_Xg_nurbs_1d(f_Xt, f_knot, f_degree, f_nc, f_ng, f_Xc, f_Wc) result(f_Xg) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc integer, intent(in) :: f_ng real(kind=rk), intent(in), contiguous :: f_Xc (:,:) real(kind=rk), intent(in), contiguous :: f_Wc (:) Return Value real(kind=rk), allocatable, (:,:) private pure function compute_Xg_nurbs_1d_1point(f_Xt, f_knot, f_degree, f_nc, f_Xc, f_Wc) result(f_Xg) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: f_Xt real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc real(kind=rk), intent(in), contiguous :: f_Xc (:,:) real(kind=rk), intent(in), contiguous :: f_Wc (:) Return Value real(kind=rk), allocatable, (:) private interface compute_d2Tgc private pure subroutine compute_d2Tgc_bspline_1d_scalar(f_Xt, f_knot, f_degree, f_nc, f_d2Tgc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: f_Xt real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc real(kind=rk), intent(out), allocatable :: f_d2Tgc (:) real(kind=rk), intent(out), allocatable :: f_dTgc (:) real(kind=rk), intent(out), allocatable :: f_Tgc (:) private pure subroutine compute_d2Tgc_bspline_1d_vector(f_Xt, f_knot, f_degree, f_nc, f_ng, f_d2Tgc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc integer, intent(in) :: f_ng real(kind=rk), intent(out), allocatable :: f_d2Tgc (:,:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:,:) private pure subroutine compute_d2Tgc_nurbs_1d_scalar(f_Xt, f_knot, f_degree, f_nc, f_Wc, f_d2Tgc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: f_Xt real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc real(kind=rk), intent(in), contiguous :: f_Wc (:) real(kind=rk), intent(out), allocatable :: f_d2Tgc (:) real(kind=rk), intent(out), allocatable :: f_dTgc (:) real(kind=rk), intent(out), allocatable :: f_Tgc (:) private pure subroutine compute_d2Tgc_nurbs_1d_vector(f_Xt, f_knot, f_degree, f_nc, f_ng, f_Wc, f_d2Tgc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc integer, intent(in) :: f_ng real(kind=rk), intent(in), contiguous :: f_Wc (:) real(kind=rk), intent(out), allocatable :: f_d2Tgc (:,:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:,:) private interface compute_dTgc private pure subroutine compute_dTgc_bspline_1d_scalar(f_Xt, f_knot, f_degree, f_nc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: f_Xt real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc real(kind=rk), intent(out), allocatable :: f_dTgc (:) real(kind=rk), intent(out), allocatable :: f_Tgc (:) private pure subroutine compute_dTgc_bspline_1d_vector(f_Xt, f_knot, f_degree, f_nc, f_ng, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc integer, intent(in) :: f_ng real(kind=rk), intent(out), allocatable :: f_dTgc (:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:,:) private pure subroutine compute_dTgc_nurbs_1d_scalar(f_Xt, f_knot, f_degree, f_nc, f_Wc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: f_Xt real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc real(kind=rk), intent(in), contiguous :: f_Wc (:) real(kind=rk), intent(out), allocatable :: f_dTgc (:) real(kind=rk), intent(out), allocatable :: f_Tgc (:) private pure subroutine compute_dTgc_nurbs_1d_vector(f_Xt, f_knot, f_degree, f_nc, f_ng, f_Wc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc integer, intent(in) :: f_ng real(kind=rk), intent(in), contiguous :: f_Wc (:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:,:) interface private pure function nearest_point_help_1d(f_ng, f_Xg, f_point_Xg) result(f_distances) Arguments Type Intent Optional Attributes Name integer, intent(in) :: f_ng real(kind=rk), intent(in), contiguous :: f_Xg (:,:) real(kind=rk), intent(in), contiguous :: f_point_Xg (:) Return Value real(kind=rk), allocatable, (:) Derived Types type, public :: nurbs_curve Components Type Visibility Attributes Name Initial real(kind=rk), private, allocatable :: Wc (:) Weights for control points (1D array: [nc]) real(kind=rk), private, allocatable :: Xc (:,:) Control points (2D array: [nc, dim]) real(kind=rk), private, allocatable :: Xg (:,:) Geometry points (2D array: [ng, dim]) real(kind=rk), private, allocatable :: Xt (:) Evaluation points (1D array: [ng]) integer, private :: degree Degree (order) of the curve integer, private, allocatable :: elemConn (:,:) IGA element connectivity integer, private, allocatable :: elemConn_Xc_vis (:,:) Connectivity for visualization of control points integer, private, allocatable :: elemConn_Xg_vis (:,:) Connectivity for visualization of geometry points real(kind=rk), private, allocatable :: knot (:) Knot vector (1D array) integer, private :: nc Number of control points integer, private :: ng Number of geometry points Type-Bound Procedures generic, public :: basis => basis_vector , basis_scalar Compute the basis functions of the NURBS curve Read more… procedure, public :: cmp_Xg Compute geometry points Read more… procedure, public :: cmp_degree Compute degree of the NURBS curve Read more… procedure, public :: cmp_elem Generate IGA element connectivity Read more… procedure, public :: cmp_elem_Xc_vis Generate connectivity for control points Read more… procedure, public :: cmp_elem_Xg_vis Generate connectivity for geometry points Read more… procedure, public :: cmp_nc Compute number of required control points Read more… procedure, public :: create Generate geometry points Read more… generic, public :: derivative => derivative_vector , derivative_scalar Compute the derivative of the NURBS curve Read more… generic, public :: derivative2 => derivative2_vector , derivative2_scalar Compute the second derivative of the NURBS curve Read more… procedure, public :: elevate_degree Elevate the degree of the 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 NURBS curve object Read more… generic, public :: get_Wc => get_Wc_all , get_Wci Get weights Read more… generic, public :: get_Xc => get_Xc_all , get_Xci , get_Xcid Get control points Read more… generic, public :: get_Xg => get_Xg_all , get_Xgi , get_Xgid Get geometry points Read more… procedure, public :: get_Xt Get parameter values Read more… procedure, public :: get_continuity Compute and return the continuity of the curve Read more… procedure, public :: get_degree Get degree of the NURBS curve Read more… procedure, public :: get_elem Get IGA element connectivity Read more… procedure, public :: get_elem_Xc_vis Get connectivity for control points Read more… procedure, public :: get_elem_Xg_vis Get connectivity for geometry points Read more… generic, public :: get_knot => get_knoti , get_knot_all Get knot vector Read more… procedure, public :: get_multiplicity Compute and return the multiplicity of the knots 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 :: insert_knots Insert knots into the knot vector Read more… procedure, public :: is_rational Check if the NURBS curve is rational Read more… procedure, public :: modify_Wc Modify weights Read more… procedure, public :: modify_Xc Modify control points Read more… procedure, public :: nearest_point Find the nearest point on the NURBS curve (Approximation) Read more… procedure, public :: nearest_point2 Find the nearest point on the NURBS curve (Minimization - Newton's method) Read more… procedure, public :: remove_knots Remove knots from the knot vector Read more… procedure, public :: rotate_Xc Rotate control points Read more… procedure, public :: rotate_Xg Rotate geometry points Read more… generic, public :: set => set1 , set2 , set3 Set NURBS curve Read more… procedure, public :: set1 Set knot vector, control points and weights for the NURBS curve object Read more… procedure, public :: set2 Set NURBS curve using nodes of parameter space, degree, continuity, control points and weights Read more… procedure, public :: set3 Set Bezier or Rational Bezier curve using control points and weights Read more… procedure, public :: set_C Set a C-shape Read more… procedure, public :: set_circle Set a circle Read more… procedure, public :: set_elem Set IGA element connectivity Read more… procedure, public :: set_elem_Xc_vis Set connectivity for control points Read more… procedure, public :: set_elem_Xg_vis Set connectivity for geometry points Read more… procedure, public :: set_half_circle Set a half circle Read more… procedure, public :: show Show the NURBS object using PyVista Read more… procedure, public :: translate_Xc Translate control points Read more… procedure, public :: translate_Xg Translate geometry points Read more… procedure, private :: basis_scalar Compute the basis functions of the NURBS curve Read more… procedure, private :: basis_vector Compute the basis functions of the NURBS curve Read more… procedure, private :: derivative2_scalar Compute the second derivative of the NURBS curve Read more… procedure, private :: derivative2_vector Compute the second derivative of the NURBS curve Read more… procedure, private :: derivative_scalar Compute the derivative of the NURBS curve Read more… procedure, private :: derivative_vector Compute the derivative of the NURBS curve Read more… procedure, private :: get_Wc_all Get all weights Read more… procedure, private :: get_Wci Get i-th weight Read more… procedure, private :: get_Xc_all Get all control points Read more… procedure, private :: get_Xci Get i-th control point Read more… procedure, private :: get_Xcid Get i-th control point in a specific direction Read more… procedure, private :: get_Xg_all Get all geometry points Read more… procedure, private :: get_Xgi Get i-th geometry point Read more… procedure, private :: get_Xgid Get i-th geometry point in a specific direction Read more… procedure, private :: get_knot_all Get all knot vectors Read more… procedure, private :: get_knoti Get i-th knot value Read more… Functions private pure function cmp_Xg (this, Xt) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this real(kind=rk), intent(in) :: Xt Return Value real(kind=rk), allocatable, (:) private pure function cmp_elem (this) result(elemConn) 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 cmp_elem_Xc_vis (this, p) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in), optional :: p Return Value integer, allocatable, (:,:) private pure function cmp_elem_Xg_vis (this, p) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in), optional :: p Return Value integer, allocatable, (:,:) private pure function get_Wc_all (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_Wci (this, n) result(Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk) private pure function get_Xc_all (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_Xci (this, n) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk), allocatable, (:) private pure function get_Xcid (this, n, dir) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in) :: n integer, intent(in) :: dir Return Value real(kind=rk) private pure function get_Xg_all (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_Xgi (this, n) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk), allocatable, (:) private pure function get_Xgid (this, n, dir) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in) :: n integer, intent(in) :: dir Return Value real(kind=rk) 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_degree (this) result(degree) 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_elem (this) result(elemConn) 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_elem_Xc_vis (this) result(elemConn) 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_elem_Xg_vis (this) result(elemConn) 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_all (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_knoti (this, i) result(knot) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in) :: i Return Value real(kind=rk) 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 is_rational (this) result(r) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value logical Subroutines private pure subroutine basis_scalar (this, Xt, Tgc) 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) :: Xt real(kind=rk), intent(out), allocatable :: Tgc (:) private pure subroutine basis_vector (this, res, Xt, Tgc) 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, contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: Tgc (:,:) private pure subroutine cmp_degree (this) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this private pure subroutine cmp_nc (this) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this 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, contiguous :: Xt (:) private pure subroutine derivative2_scalar (this, Xt, d2Tgc, dTgc, Tgc) 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) :: Xt real(kind=rk), intent(out), allocatable :: d2Tgc (:) real(kind=rk), intent(out), optional, allocatable :: dTgc (:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:) private pure subroutine derivative2_vector (this, res, Xt, d2Tgc, dTgc, Tgc) 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, contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:) real(kind=rk), intent(out), optional, allocatable :: dTgc (:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:,:) private pure subroutine derivative_scalar (this, Xt, dTgc, Tgc) 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) :: Xt real(kind=rk), intent(out), allocatable :: dTgc (:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:) private pure subroutine derivative_vector (this, res, Xt, dTgc, Tgc) 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, contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: dTgc (:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:,:) private pure subroutine elevate_degree (this, t) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this integer, intent(in) :: t 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 insert_knots (this, Xth, r) 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), contiguous :: Xth (:) integer, intent(in), contiguous :: r (:) 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 nearest_point (this, point_Xg, nearest_Xg, nearest_Xt, id) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this real(kind=rk), intent(in) :: point_Xg (:) real(kind=rk), intent(out), optional, allocatable :: nearest_Xg (:) real(kind=rk), intent(out), optional :: nearest_Xt integer, intent(out), optional :: id private impure subroutine nearest_point2 (this, point_Xg, tol, maxit, nearest_Xt, nearest_Xg) 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) :: point_Xg (:) real(kind=rk), intent(in) :: tol integer, intent(in) :: maxit real(kind=rk), intent(out) :: nearest_Xt real(kind=rk), intent(out), optional, allocatable :: nearest_Xg (:) private pure subroutine remove_knots (this, Xth, r) 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), contiguous :: Xth (:) integer, intent(in), contiguous :: r (:) private pure subroutine rotate_Xc (this, alpha, beta, theta) 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) :: alpha real(kind=rk), intent(in) :: beta real(kind=rk), intent(in) :: theta private pure subroutine rotate_Xg (this, alpha, beta, theta) 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) :: alpha real(kind=rk), intent(in) :: beta real(kind=rk), intent(in) :: theta private pure subroutine set1 (this, knot, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set knot vector, control points and weights for the NURBS curve object. Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: knot (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) private pure subroutine set2 (this, Xth_dir, degree, continuity, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set NURBS curve using nodes of parameter space (Xth), degree, continuity, control points and weights. Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: Xth_dir (:) integer, intent(in) :: degree integer, intent(in), contiguous :: continuity (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) private pure subroutine set3 (this, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set Bezier or Rational Bezier curve using control points and weights. Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) private pure subroutine set_C (this, center, radius) 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), contiguous :: center (:) real(kind=rk), intent(in) :: radius private pure subroutine set_circle (this, center, radius) 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), contiguous :: center (:) real(kind=rk), intent(in) :: radius private pure subroutine set_elem (this, elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:) private pure subroutine set_elem_Xc_vis (this, elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:) private pure subroutine set_elem_Xg_vis (this, elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:) private pure subroutine set_half_circle (this, center, radius) 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), contiguous :: center (:) real(kind=rk), intent(in) :: radius private impure subroutine show (this, vtkfile_Xc, vtkfile_Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this character(len=*), intent(in) :: vtkfile_Xc character(len=*), intent(in) :: vtkfile_Xg private pure subroutine translate_Xc (this, vec) 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) :: vec (:) private pure subroutine translate_Xg (this, vec) 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) :: vec (:)","tags":"","loc":"module/forcad_nurbs_curve.html"},{"title":"forcad_nurbs_surface – ForCAD","text":"This module defines the 'nurbs_surface' type for representing a Non-Uniform Rational B-Spline (NURBS) surface. 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~example1_curve example1_curve program~example1_curve->module~forcad program~example3_surface example3_surface program~example3_surface->module~forcad program~example3_volume example3_volume program~example3_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 program~example_ppm1 example_ppm1 program~example_ppm1->module~forcad program~example_ppm2 example_ppm2 program~example_ppm2->module~forcad program~example_ppm3 example_ppm3 program~example_ppm3->module~forcad program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->module~forcad program~nearest_point_1d nearest_point_1d program~nearest_point_1d->module~forcad program~nearest_point_2d nearest_point_2d program~nearest_point_2d->module~forcad program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->module~forcad program~nearest_point_3d nearest_point_3d program~nearest_point_3d->module~forcad program~shape_c_1d shape_C_1d program~shape_c_1d->module~forcad program~shape_c_2d shape_C_2d program~shape_c_2d->module~forcad program~shape_c_3d shape_C_3d program~shape_c_3d->module~forcad program~shape_circle shape_circle program~shape_circle->module~forcad program~shape_half_circle shape_half_circle program~shape_half_circle->module~forcad program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->module~forcad program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->module~forcad program~shape_hexahedron shape_hexahedron program~shape_hexahedron->module~forcad program~shape_ring_2d shape_ring_2d program~shape_ring_2d->module~forcad program~shape_ring_3d shape_ring_3d program~shape_ring_3d->module~forcad program~shape_tetragon shape_tetragon program~shape_tetragon->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. Interfaces private interface compute_Tgc private pure function compute_Tgc_bspline_2d_scalar(f_Xt, f_knot1, f_knot2, f_degree, f_nc) result(f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: f_nc (2) Return Value real(kind=rk), allocatable, (:) private pure function compute_Tgc_bspline_2d_vector(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_ng) result(f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: f_nc (2) integer, intent(in) :: f_ng (2) Return Value real(kind=rk), allocatable, (:,:) private pure function compute_Tgc_nurbs_2d_scalar(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_Wc) result(f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: f_nc (2) real(kind=rk), intent(in), contiguous :: f_Wc (:) Return Value real(kind=rk), allocatable, (:) private pure function compute_Tgc_nurbs_2d_vector(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_ng, f_Wc) result(f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: f_nc (2) integer, intent(in) :: f_ng (2) real(kind=rk), intent(in), contiguous :: f_Wc (:) Return Value real(kind=rk), allocatable, (:,:) private interface compute_Xg private pure function compute_Xg_bspline_2d(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_ng, f_Xc) result(f_Xg) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: f_nc (2) integer, intent(in) :: f_ng (2) real(kind=rk), intent(in), contiguous :: f_Xc (:,:) Return Value real(kind=rk), allocatable, (:,:) private pure function compute_Xg_bspline_2d_1point(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_Xc) result(f_Xg) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: f_nc (2) real(kind=rk), intent(in), contiguous :: f_Xc (:,:) Return Value real(kind=rk), allocatable, (:) private pure function compute_Xg_nurbs_2d(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_ng, f_Xc, f_Wc) result(f_Xg) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: f_nc (2) integer, intent(in) :: f_ng (2) real(kind=rk), intent(in), contiguous :: f_Xc (:,:) real(kind=rk), intent(in), contiguous :: f_Wc (:) Return Value real(kind=rk), allocatable, (:,:) private pure function compute_Xg_nurbs_2d_1point(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_Xc, f_Wc) result(f_Xg) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: f_nc (2) real(kind=rk), intent(in), contiguous :: f_Xc (:,:) real(kind=rk), intent(in), contiguous :: f_Wc (:) Return Value real(kind=rk), allocatable, (:) private interface compute_d2Tgc private pure subroutine compute_d2Tgc_bspline_2d_scalar(f_Xt, f_knot1, f_knot2, f_degree, nc, f_d2Tgc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: nc (2) real(kind=rk), intent(out), allocatable :: f_d2Tgc (:,:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:) private pure subroutine compute_d2Tgc_bspline_2d_vector(f_Xt, f_knot1, f_knot2, f_degree, nc, f_ng, f_d2Tgc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: nc (2) integer, intent(in) :: f_ng (2) real(kind=rk), intent(out), allocatable :: f_d2Tgc (:,:,:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:,:) private pure subroutine compute_d2Tgc_nurbs_2d_scalar(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_Wc, f_d2Tgc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: f_nc (2) real(kind=rk), intent(in), contiguous :: f_Wc (:) real(kind=rk), intent(out), allocatable :: f_d2Tgc (:,:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:) private pure subroutine compute_d2Tgc_nurbs_2d_vector(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_ng, f_Wc, f_d2Tgc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: f_nc (2) integer, intent(in) :: f_ng (2) real(kind=rk), intent(in), contiguous :: f_Wc (:) real(kind=rk), intent(out), allocatable :: f_d2Tgc (:,:,:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:,:) private interface compute_dTgc private pure subroutine compute_dTgc_bspline_2d_scalar(f_Xt, f_knot1, f_knot2, f_degree, nc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: nc (2) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:) private pure subroutine compute_dTgc_bspline_2d_vector(f_Xt, f_knot1, f_knot2, f_degree, nc, f_ng, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: nc (2) integer, intent(in) :: f_ng (2) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:,:) private pure subroutine compute_dTgc_nurbs_2d_scalar(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_Wc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: f_nc (2) real(kind=rk), intent(in), contiguous :: f_Wc (:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:) private pure subroutine compute_dTgc_nurbs_2d_vector(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_ng, f_Wc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: f_nc (2) integer, intent(in) :: f_ng (2) real(kind=rk), intent(in), contiguous :: f_Wc (:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:,:) interface private pure function nearest_point_help_2d(f_ng, f_Xg, f_point_Xg) result(f_distances) Arguments Type Intent Optional Attributes Name integer, intent(in) :: f_ng (2) real(kind=rk), intent(in), contiguous :: f_Xg (:,:) real(kind=rk), intent(in), contiguous :: f_point_Xg (:) Return Value real(kind=rk), allocatable, (:) Derived Types type, public :: nurbs_surface Components Type Visibility Attributes Name Initial real(kind=rk), private, allocatable :: Wc (:) Weights for control points (1D array: [nc(1)*nc(2)]) real(kind=rk), private, allocatable :: Xc (:,:) Control points (2D array: [nc(1)*nc(2), dim]) real(kind=rk), private, allocatable :: Xg (:,:) Geometry points (2D array: [ng(1)*ng(2), dim]) real(kind=rk), private, allocatable :: Xt (:,:) Evaluation parameter values (2D array: [ng(1)*ng(2), 2]) real(kind=rk), private, allocatable :: Xt1 (:) Evaluation parameter values in the first direction (1D array: [ng(1)]) real(kind=rk), private, allocatable :: Xt2 (:) Evaluation parameter values in the second direction (1D array: [ng(2)]) integer, private :: degree (2) Degree (order) of the surface integer, private, allocatable :: elemConn (:,:) IGA element connectivity integer, private, allocatable :: elemConn_Xc_vis (:,:) Connectivity for visualization of control points integer, private, allocatable :: elemConn_Xg_vis (:,:) Connectivity for visualization of geometry points real(kind=rk), private, allocatable :: knot1 (:) Knot vector in the first direction (1D array) real(kind=rk), private, allocatable :: knot2 (:) Knot vector in the second direction (1D array) 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 generic, public :: basis => basis_vector , basis_scalar Compute the basis functions of the NURBS surface Read more… procedure, public :: cmp_Xg Compute geometry points Read more… procedure, public :: cmp_degree Compute degree of the NURBS surface Read more… procedure, public :: cmp_elem Generate IGA element connectivity Read more… procedure, public :: cmp_elem_Xc_vis Generate connectivity for control points Read more… procedure, public :: cmp_elem_Xg_vis Generate connectivity for geometry points Read more… procedure, public :: cmp_nc Compute number of required control points Read more… procedure, public :: create Generate geometry points Read more… generic, public :: derivative => derivative_vector , derivative_scalar Compute the derivative of the NURBS surface Read more… generic, public :: derivative2 => derivative2_vector , derivative2_scalar Compute the second derivative of the NURBS surface Read more… procedure, public :: elevate_degree Elevate degree 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… generic, public :: get_Wc => get_Wc_all , get_Wci Get weights Read more… generic, public :: get_Xc => get_Xc_all , get_Xci , get_Xcid Get control points Read more… generic, public :: get_Xg => get_Xg_all , get_Xgi , get_Xgid Get geometry points Read more… procedure, public :: get_Xt Get parameter values Read more… procedure, public :: get_continuity Compute and return the continuity of the NURBS surface Read more… generic, public :: get_degree => get_degree_all , get_degree_dir Get degree of the NURBS surface Read more… procedure, public :: get_elem Get IGA element connectivity Read more… procedure, public :: get_elem_Xc_vis Get connectivity for control points Read more… procedure, public :: get_elem_Xg_vis Get connectivity for geometry points Read more… generic, public :: get_knot => get_knoti , get_knot_all Get knot vector Read more… procedure, public :: get_multiplicity Compute and return the multiplicity of the knot vector 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 :: insert_knots Insert knots into the knot vector Read more… procedure, public :: is_rational Check if the NURBS surface is rational Read more… procedure, public :: modify_Wc Modify weights Read more… procedure, public :: modify_Xc Modify control points Read more… procedure, public :: nearest_point Find the nearest point on the NURBS surface (Approximation) Read more… procedure, public :: nearest_point2 Find the nearest point on the NURBS surface (Minimization - Newton's method) Read more… procedure, public :: remove_knots Remove knots from the knot vector Read more… procedure, public :: rotate_Xc Rotate control points Read more… procedure, public :: rotate_Xg Rotate geometry points Read more… generic, public :: set => set1 , set2 , set3 Set NURBS surface Read more… procedure, public :: set1 Set knot vectors, control points and weights for the NURBS surface object Read more… procedure, public :: set2 Set NURBS surface using nodes of parameter space, degree, continuity, control points and weights Read more… procedure, public :: set3 Set Bezier or Rational Bezier surface using control points and weights Read more… procedure, public :: set_C Set a C-shape Read more… procedure, public :: set_elem Set IGA element connectivity Read more… procedure, public :: set_elem_Xc_vis Set connectivity for control points Read more… procedure, public :: set_elem_Xg_vis Set connectivity for geometry points Read more… procedure, public :: set_half_ring Set a half ring Read more… procedure, public :: set_ring Set a ring Read more… procedure, public :: set_tetragon Set a tetragon Read more… procedure, public :: show Show the NURBS object using PyVista Read more… procedure, public :: translate_Xc Translate control points Read more… procedure, public :: translate_Xg Translate geometry points Read more… procedure, private :: basis_scalar Compute the basis functions of the NURBS surface Read more… procedure, private :: basis_vector Compute the basis functions of the NURBS surface Read more… procedure, private :: derivative2_scalar Compute the second derivative of the NURBS surface Read more… procedure, private :: derivative2_vector Compute the second derivative of the NURBS surface Read more… procedure, private :: derivative_scalar Compute the derivative of the NURBS surface Read more… procedure, private :: derivative_vector Compute the derivative of the NURBS surface Read more… procedure, private :: get_Wc_all Get all weights Read more… procedure, private :: get_Wci Get i-th weight Read more… procedure, private :: get_Xc_all Get all control points Read more… procedure, private :: get_Xci Get i-th control point Read more… procedure, private :: get_Xcid Get i-th control point in a specific direction Read more… procedure, private :: get_Xg_all Get all geometry points Read more… procedure, private :: get_Xgi Get i-th geometry point Read more… procedure, private :: get_Xgid Get i-th geometry point in a specific direction Read more… procedure, private :: get_degree_all Get degree of the NURBS surface in both directions Read more… procedure, private :: get_degree_dir Get degree of the NURBS surface in a specific direction Read more… procedure, private :: get_knot_all Get all knot vectors Read more… procedure, private :: get_knoti Get i-th knot value Read more… Functions private pure function cmp_Xg (this, Xt) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this real(kind=rk), intent(in), contiguous :: Xt (:) Return Value real(kind=rk), allocatable, (:) private pure function cmp_elem (this) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value integer, allocatable, (:,:) private pure function cmp_elem_Xc_vis (this, p) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in), optional, contiguous :: p (:) Return Value integer, allocatable, (:,:) private pure function cmp_elem_Xg_vis (this, p) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in), optional, contiguous :: p (:) Return Value integer, allocatable, (:,:) private pure function get_Wc_all (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_Wci (this, n) result(Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk) private pure function get_Xc_all (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_Xci (this, n) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk), allocatable, (:) private pure function get_Xcid (this, n, dir) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: n integer, intent(in) :: dir Return Value real(kind=rk) private pure function get_Xg_all (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_Xgi (this, n) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk), allocatable, (:) private pure function get_Xgid (this, n, dir) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: n integer, intent(in) :: dir Return Value real(kind=rk) 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_degree_all (this) result(degree) 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_degree_dir (this, dir) result(degree) 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_elem (this) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value integer, allocatable, (:,:) private pure function get_elem_Xc_vis (this) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value integer, allocatable, (:,:) private pure function get_elem_Xg_vis (this) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value integer, allocatable, (:,:) private pure function get_knot_all (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_knoti (this, dir, i) 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 integer, intent(in) :: i Return Value real(kind=rk) 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 is_rational (this) result(r) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value logical Subroutines private pure subroutine basis_scalar (this, Xt, Tgc) 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) :: Xt (:) real(kind=rk), intent(out), allocatable :: Tgc (:) private pure subroutine basis_vector (this, res1, res2, Xt1, Xt2, Tgc) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(out), allocatable :: Tgc (:,:) private pure subroutine cmp_degree (this, dir) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), optional :: dir private pure subroutine cmp_nc (this, dir) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), optional :: dir private pure subroutine create (this, res1, res2, Xt1, Xt2, Xt) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(in), optional, contiguous :: Xt (:,:) private pure subroutine derivative2_scalar (this, Xt, d2Tgc, dTgc, Tgc) 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), contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:) real(kind=rk), intent(out), optional, allocatable :: dTgc (:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:) private pure subroutine derivative2_vector (this, res1, res2, Xt1, Xt2, d2Tgc, dTgc, Tgc) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:,:) real(kind=rk), intent(out), optional, allocatable :: dTgc (:,:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:,:) private pure subroutine derivative_scalar (this, Xt, dTgc, Tgc) 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), contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: dTgc (:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:) private pure subroutine derivative_vector (this, res1, res2, Xt1, Xt2, dTgc, Tgc) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(out), allocatable :: dTgc (:,:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:,:) private pure subroutine elevate_degree (this, dir, t) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in) :: dir integer, intent(in) :: t 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 insert_knots (this, dir, Xth, r) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in) :: dir real(kind=rk), intent(in), contiguous :: Xth (:) integer, intent(in), contiguous :: r (:) 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 nearest_point (this, point_Xg, nearest_Xg, nearest_Xt, id) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this real(kind=rk), intent(in) :: point_Xg (:) real(kind=rk), intent(out), optional, allocatable :: nearest_Xg (:) real(kind=rk), intent(out), optional, allocatable :: nearest_Xt (:) integer, intent(out), optional :: id private impure subroutine nearest_point2 (this, point_Xg, tol, maxit, nearest_Xt, nearest_Xg) 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) :: point_Xg (:) real(kind=rk), intent(in) :: tol integer, intent(in) :: maxit real(kind=rk), intent(out) :: nearest_Xt (2) real(kind=rk), intent(out), optional, allocatable :: nearest_Xg (:) private pure subroutine remove_knots (this, dir, Xth, r) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in) :: dir real(kind=rk), intent(in), contiguous :: Xth (:) integer, intent(in), contiguous :: r (:) private pure subroutine rotate_Xc (this, alpha, beta, theta) 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) :: alpha real(kind=rk), intent(in) :: beta real(kind=rk), intent(in) :: theta private pure subroutine rotate_Xg (this, alpha, beta, theta) 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) :: alpha real(kind=rk), intent(in) :: beta real(kind=rk), intent(in) :: theta private pure subroutine set1 (this, knot1, knot2, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set knot vectors, 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), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) private pure subroutine set2 (this, Xth_dir1, Xth_dir2, degree, continuity1, continuity2, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set NURBS surface using nodes of parameter space, degree, continuity, control points and weights Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: Xth_dir1 (:) real(kind=rk), intent(in), contiguous :: Xth_dir2 (:) integer, intent(in), contiguous :: degree (:) integer, intent(in), contiguous :: continuity1 (:) integer, intent(in), contiguous :: continuity2 (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) private pure subroutine set3 (this, nc, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set Bezier or Rational Bezier surface using control points and weights. Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), contiguous :: nc (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) private pure subroutine set_C (this, center, radius1, radius2) 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), contiguous :: center (:) real(kind=rk), intent(in) :: radius1 real(kind=rk), intent(in) :: radius2 private pure subroutine set_elem (this, elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:) private pure subroutine set_elem_Xc_vis (this, elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:) private pure subroutine set_elem_Xg_vis (this, elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:) private pure subroutine set_half_ring (this, center, radius1, radius2) 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), contiguous :: center (:) real(kind=rk), intent(in) :: radius1 real(kind=rk), intent(in) :: radius2 private pure subroutine set_ring (this, center, radius1, radius2) 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), contiguous :: center (:) real(kind=rk), intent(in) :: radius1 real(kind=rk), intent(in) :: radius2 private pure subroutine set_tetragon (this, L, nc, Wc) 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) :: L (2) integer, intent(in) :: nc (2) real(kind=rk), intent(in), optional, contiguous :: Wc (:) private impure subroutine show (this, vtkfile_Xc, vtkfile_Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this character(len=*), intent(in) :: vtkfile_Xc character(len=*), intent(in) :: vtkfile_Xg private pure subroutine translate_Xc (this, vec) 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) :: vec (:) private pure subroutine translate_Xg (this, vec) 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) :: vec (:)","tags":"","loc":"module/forcad_nurbs_surface.html"},{"title":"example1_curve – ForCAD","text":"Uses forcad program~~example1_curve~~UsesGraph program~example1_curve example1_curve module~forcad forcad program~example1_curve->module~forcad 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_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. Define control points for the NURBS curve\nDefine weights for the control points (optional)\nDefine knot vector Set knot vector, control points, and weights for the NURBS curve object.\nWc is optional Deallocate local arrays Export control points to a VTK file Generate the NURBS curve with a resolution of 20 Export the generated curve to a VTK file Show the control geometry and geometry using PyVista Print size of the knot vector Insert knots 0.25, twice and 0.75, once Print size of the updated knot vector Print the degree of the curve Elevate the degree of the curve (2 times) Print the updated degree of the curve Print size of the knot vector Remove knots 0.25, twice and 0.75, once Print size of the updated knot vector Generate the refined curve with a resolution of 20 Export updated control points to a VTK file Export the refined generated curve to a VTK file Show the control geometry and geometry using PyVista Rotate the control points Rotate the generated curve Translate the control points Translate the generated curve Export the transformed control points to a VTK file Export the transformed generated volume to a VTK file Show the control geometry and geometry using PyVista Finalize the NURBS curve object Calls program~~example1_curve~~CallsGraph program~example1_curve example1_curve none~get_knot~2 nurbs_curve%get_knot program~example1_curve->none~get_knot~2 none~set~2 nurbs_curve%set program~example1_curve->none~set~2 proc~create~2 nurbs_curve%create program~example1_curve->proc~create~2 proc~elevate_degree~2 nurbs_curve%elevate_degree program~example1_curve->proc~elevate_degree~2 proc~export_xc~2 nurbs_curve%export_Xc program~example1_curve->proc~export_xc~2 proc~export_xg~2 nurbs_curve%export_Xg program~example1_curve->proc~export_xg~2 proc~finalize~2 nurbs_curve%finalize program~example1_curve->proc~finalize~2 proc~get_degree nurbs_curve%get_degree program~example1_curve->proc~get_degree proc~insert_knots~2 nurbs_curve%insert_knots program~example1_curve->proc~insert_knots~2 proc~remove_knots~2 nurbs_curve%remove_knots program~example1_curve->proc~remove_knots~2 proc~rotate_xc~2 nurbs_curve%rotate_Xc program~example1_curve->proc~rotate_xc~2 proc~rotate_xg~2 nurbs_curve%rotate_Xg program~example1_curve->proc~rotate_xg~2 proc~show~2 nurbs_curve%show program~example1_curve->proc~show~2 proc~translate_xc~2 nurbs_curve%translate_Xc program~example1_curve->proc~translate_xc~2 proc~translate_xg~2 nurbs_curve%translate_Xg program~example1_curve->proc~translate_xg~2 proc~get_knot_all~2 nurbs_curve%get_knot_all none~get_knot~2->proc~get_knot_all~2 proc~get_knoti~2 nurbs_curve%get_knoti none~get_knot~2->proc~get_knoti~2 proc~set1~2 nurbs_curve%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_curve%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_curve%set3 none~set~2->proc~set3~2 interface~compute_xg~2 compute_Xg proc~create~2->interface~compute_xg~2 proc~is_rational~2 nurbs_curve%is_rational proc~create~2->proc~is_rational~2 proc~elevate_degree~2->none~set~2 proc~elevate_degree_a_5_9 elevate_degree_A_5_9 proc~elevate_degree~2->proc~elevate_degree_a_5_9 proc~elevate_degree~2->proc~is_rational~2 proc~cmp_elem_xc_vis~2 nurbs_curve%cmp_elem_Xc_vis proc~export_xc~2->proc~cmp_elem_xc_vis~2 proc~cmp_elem_xg_vis~2 nurbs_curve%cmp_elem_Xg_vis proc~export_xg~2->proc~cmp_elem_xg_vis~2 proc~insert_knots~2->none~set~2 interface~compute_multiplicity compute_multiplicity proc~insert_knots~2->interface~compute_multiplicity proc~findspan findspan proc~insert_knots~2->proc~findspan proc~insert_knot_a_5_1 insert_knot_A_5_1 proc~insert_knots~2->proc~insert_knot_a_5_1 proc~insert_knots~2->proc~is_rational~2 proc~remove_knots~2->none~set~2 proc~remove_knots~2->interface~compute_multiplicity proc~remove_knots~2->proc~findspan proc~remove_knots~2->proc~is_rational~2 proc~remove_knots_a_5_8 remove_knots_A_5_8 proc~remove_knots~2->proc~remove_knots_a_5_8 proc~rotation rotation proc~rotate_xc~2->proc~rotation proc~rotate_xg~2->proc~rotation proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xc_vis~2->interface~elemconn_c0 proc~cmp_elem_xg_vis~2->interface~elemconn_c0 proc~elevate_degree_a_5_9->interface~compute_multiplicity proc~bincoeff bincoeff proc~elevate_degree_a_5_9->proc~bincoeff cosd cosd proc~rotation->cosd sind sind proc~rotation->sind proc~cmp_degree~2 nurbs_curve%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~compute_knot_vector compute_knot_vector proc~set2~2->proc~compute_knot_vector proc~set3~2->proc~cmp_degree~2 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v proc~factln factln proc~bincoeff->proc~factln proc~get_multiplicity~2 nurbs_curve%get_multiplicity proc~cmp_degree~2->proc~get_multiplicity~2 proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~get_multiplicity~2->interface~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 (6) Array for knot vector type( nurbs_curve ) :: nurbs Declare a NURBS curve object Source Code program example1_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 ( 6 ) !! 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 ,:) = [ 5.0_rk , 5.0_rk , 0.0_rk ] !> Define weights for the control points (optional) allocate ( Wc ( 3 )) Wc = [ 1.0_rk , 2.0_rk , 0.3_rk ] !> Define knot vector knot = [ 0.0_rk , 0.0_rk , 0.0_rk , 1.0_rk , 1.0_rk , 1.0_rk ] !> Set knot vector, control points, and weights for the NURBS curve object. !> Wc is optional call nurbs % set ( knot , Xc , Wc ) !> Deallocate local arrays deallocate ( 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 20 call nurbs % create ( res = 20 ) !> Export the generated curve to a VTK file call nurbs % export_Xg ( 'vtk/nurbs_curve_Xg.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call nurbs % show ( 'vtk/nurbs_curve_Xc.vtk' , 'vtk/nurbs_curve_Xg.vtk' ) !----------------------------------------------------------------------------- ! Refinements !----------------------------------------------------------------------------- !> Print size of the knot vector print * , size ( nurbs % get_knot ()) !> Insert knots 0.25, twice and 0.75, once call nurbs % insert_knots ([ 0.25_rk , 0.75_rk ], [ 2 , 1 ]) !> Print size of the updated knot vector print * , size ( nurbs % get_knot ()) !> Print the degree of the curve print * , nurbs % get_degree () !> Elevate the degree of the curve (2 times) call nurbs % elevate_degree ( 2 ) !> Print the updated degree of the curve print * , nurbs % get_degree () !> Print size of the knot vector print * , size ( nurbs % get_knot ()) !> Remove knots 0.25, twice and 0.75, once call nurbs % remove_knots ([ 0.25_rk , 0.75_rk ], [ 2 , 1 ]) !> Print size of the updated knot vector print * , size ( nurbs % get_knot ()) !> Generate the refined curve with a resolution of 20 call nurbs % create () !> Export updated control points to a VTK file call nurbs % export_Xc ( 'vtk/nurbs_curve_Xc2.vtk' ) !> Export the refined generated curve to a VTK file call nurbs % export_Xg ( 'vtk/nurbs_curve_Xg2.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call nurbs % show ( 'vtk/nurbs_curve_Xc2.vtk' , 'vtk/nurbs_curve_Xg2.vtk' ) !----------------------------------------------------------------------------- ! Transformations !----------------------------------------------------------------------------- !> Rotate the control points call nurbs % rotate_Xc ( alpha = 4 5.0_rk , beta = 0.0_rk , theta = 9 0.0_rk ) !> Rotate the generated curve call nurbs % rotate_Xg ( alpha =- 4 5.0_rk , beta = 0.0_rk , theta =- 9 0.0_rk ) !> Translate the control points call nurbs % translate_Xc ([ 1.0_rk , 2.0_rk , - 3.0_rk ]) !> Translate the generated curve call nurbs % translate_Xg ([ - 1.0_rk , - 2.0_rk , 3.0_rk ]) !> Export the transformed control points to a VTK file call nurbs % export_Xc ( 'vtk/nurbs_curve_Xc3.vtk' ) !> Export the transformed generated volume to a VTK file call nurbs % export_Xg ( 'vtk/nurbs_curve_Xg3.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call nurbs % show ( 'vtk/nurbs_curve_Xc3.vtk' , 'vtk/nurbs_curve_Xg3.vtk' ) !----------------------------------------------------------------------------- ! Finalizing !----------------------------------------------------------------------------- !> Finalize the NURBS curve object call nurbs % finalize () end program example1_curve","tags":"","loc":"program/example1_curve.html"},{"title":"example3_surface – ForCAD","text":"Uses forcad program~~example3_surface~~UsesGraph program~example3_surface example3_surface module~forcad forcad program~example3_surface->module~forcad 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_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 Deallocate local arrays 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 Show the control geometry and geometry using PyVista Print size of the knot vectors\nInsert knots 0.25, twice and 0.75, once in both directions\nPrint size of the knot vectors after inserting knots\nPrint the degrees Elevate degree by 2 in both directions\nPrint the degrees after elevating Print size of the knot vectors\nRemove knots 0.25, twice and 0.75, once in both directions\nPrint size of the knot vectors after removing knots\nGenerate the refined NURBS surface with resolutions of 30 in both dimensions Export updated control points to a VTK file Export the refined generated surface to a VTK file Show the control geometry and geometry using PyVista Rotate the control points Rotate the generated curve Translate the control points Translate the generated curve Export the transformed control points to a VTK file Export the transformed generated volume to a VTK file Show the control geometry and geometry using PyVista Finalize the NURBS surface object Calls program~~example3_surface~~CallsGraph program~example3_surface example3_surface none~get_degree~3 nurbs_surface%get_degree program~example3_surface->none~get_degree~3 none~get_knot~3 nurbs_surface%get_knot program~example3_surface->none~get_knot~3 none~set~3 nurbs_surface%set program~example3_surface->none~set~3 proc~create~3 nurbs_surface%create program~example3_surface->proc~create~3 proc~elevate_degree~3 nurbs_surface%elevate_degree program~example3_surface->proc~elevate_degree~3 proc~export_xc~3 nurbs_surface%export_Xc program~example3_surface->proc~export_xc~3 proc~export_xg~3 nurbs_surface%export_Xg program~example3_surface->proc~export_xg~3 proc~finalize~3 nurbs_surface%finalize program~example3_surface->proc~finalize~3 proc~generate_xc generate_Xc program~example3_surface->proc~generate_xc proc~insert_knots~3 nurbs_surface%insert_knots program~example3_surface->proc~insert_knots~3 proc~remove_knots~3 nurbs_surface%remove_knots program~example3_surface->proc~remove_knots~3 proc~rotate_xc~3 nurbs_surface%rotate_Xc program~example3_surface->proc~rotate_xc~3 proc~rotate_xg~3 nurbs_surface%rotate_Xg program~example3_surface->proc~rotate_xg~3 proc~show~3 nurbs_surface%show program~example3_surface->proc~show~3 proc~translate_xc~3 nurbs_surface%translate_Xc program~example3_surface->proc~translate_xc~3 proc~translate_xg~3 nurbs_surface%translate_Xg program~example3_surface->proc~translate_xg~3 proc~get_degree_all~2 nurbs_surface%get_degree_all none~get_degree~3->proc~get_degree_all~2 proc~get_degree_dir~2 nurbs_surface%get_degree_dir none~get_degree~3->proc~get_degree_dir~2 proc~get_knot_all~3 nurbs_surface%get_knot_all none~get_knot~3->proc~get_knot_all~3 proc~get_knoti~3 nurbs_surface%get_knoti none~get_knot~3->proc~get_knoti~3 proc~set1~3 nurbs_surface%set1 none~set~3->proc~set1~3 proc~set2~3 nurbs_surface%set2 none~set~3->proc~set2~3 proc~set3~3 nurbs_surface%set3 none~set~3->proc~set3~3 interface~compute_xg~3 compute_Xg proc~create~3->interface~compute_xg~3 interface~ndgrid ndgrid proc~create~3->interface~ndgrid proc~is_rational~3 nurbs_surface%is_rational proc~create~3->proc~is_rational~3 proc~elevate_degree~3->none~get_knot~3 proc~elevate_degree~3->none~set~3 proc~elevate_degree_a_5_9 elevate_degree_A_5_9 proc~elevate_degree~3->proc~elevate_degree_a_5_9 proc~elevate_degree~3->proc~is_rational~3 proc~cmp_elem_xc_vis~3 nurbs_surface%cmp_elem_Xc_vis proc~export_xc~3->proc~cmp_elem_xc_vis~3 proc~cmp_elem_xg_vis~3 nurbs_surface%cmp_elem_Xg_vis proc~export_xg~3->proc~cmp_elem_xg_vis~3 proc~insert_knots~3->none~get_knot~3 proc~insert_knots~3->none~set~3 interface~compute_multiplicity compute_multiplicity proc~insert_knots~3->interface~compute_multiplicity proc~findspan findspan proc~insert_knots~3->proc~findspan proc~insert_knot_a_5_1 insert_knot_A_5_1 proc~insert_knots~3->proc~insert_knot_a_5_1 proc~insert_knots~3->proc~is_rational~3 proc~remove_knots~3->none~get_knot~3 proc~remove_knots~3->none~set~3 proc~remove_knots~3->interface~compute_multiplicity proc~remove_knots~3->proc~findspan proc~remove_knots~3->proc~is_rational~3 proc~remove_knots_a_5_8 remove_knots_A_5_8 proc~remove_knots~3->proc~remove_knots_a_5_8 proc~rotation rotation proc~rotate_xc~3->proc~rotation proc~rotate_xg~3->proc~rotation proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 ndgrid3 interface~ndgrid->proc~ndgrid3 interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xc_vis~3->interface~elemconn_c0 proc~cmp_elem_xg_vis~3->interface~elemconn_c0 proc~elevate_degree_a_5_9->interface~compute_multiplicity proc~bincoeff bincoeff proc~elevate_degree_a_5_9->proc~bincoeff cosd cosd proc~rotation->cosd sind sind proc~rotation->sind proc~cmp_degree~3 nurbs_surface%cmp_degree proc~set1~3->proc~cmp_degree~3 proc~cmp_nc~3 nurbs_surface%cmp_nc proc~set1~3->proc~cmp_nc~3 proc~set2~3->proc~cmp_nc~3 proc~compute_knot_vector compute_knot_vector proc~set2~3->proc~compute_knot_vector proc~set3~3->proc~cmp_degree~3 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v proc~factln factln proc~bincoeff->proc~factln proc~get_multiplicity~3 nurbs_surface%get_multiplicity proc~cmp_degree~3->proc~get_multiplicity~3 proc~cmp_nc~3->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~get_multiplicity~3->interface~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), allocatable, (:,:) Source Code program example3_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 Wc ( 2 ) = 2.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 ) !> Deallocate local arrays deallocate ( 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' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call nurbs % show ( 'vtk/nurbs_surface_Xc.vtk' , 'vtk/nurbs_surface_Xg.vtk' ) !----------------------------------------------------------------------------- ! Refinements !----------------------------------------------------------------------------- !> Print size of the knot vectors print * , size ( nurbs % get_knot ( 1 )) print * , size ( nurbs % get_knot ( 2 )) !> Insert knots 0.25, twice and 0.75, once in both directions call nurbs % insert_knots ( 1 , [ 0.25_rk , 0.75_rk ], [ 2 , 1 ]) ! direction 1 call nurbs % insert_knots ( 2 , [ 0.25_rk , 0.75_rk ], [ 2 , 1 ]) ! direction 2 !> Print size of the knot vectors after inserting knots print * , size ( nurbs % get_knot ( 1 )) print * , size ( nurbs % get_knot ( 2 )) !> Print the degrees print * , nurbs % get_degree () !> Elevate degree by 2 in both directions call nurbs % elevate_degree ( 1 , 2 ) ! direction 1 call nurbs % elevate_degree ( 2 , 2 ) ! direction 2 !> Print the degrees after elevating print * , nurbs % get_degree () !> Print size of the knot vectors print * , size ( nurbs % get_knot ( 1 )) print * , size ( nurbs % get_knot ( 2 )) !> Remove knots 0.25, twice and 0.75, once in both directions call nurbs % remove_knots ( 1 , [ 0.25_rk , 0.75_rk ], [ 2 , 1 ]) ! direction 1 call nurbs % remove_knots ( 2 , [ 0.25_rk , 0.75_rk ], [ 2 , 1 ]) ! direction 2 !> Print size of the knot vectors after removing knots print * , size ( nurbs % get_knot ( 1 )) print * , size ( nurbs % get_knot ( 2 )) !> Generate the refined NURBS surface with resolutions of 30 in both dimensions call nurbs % create () !> Export updated control points to a VTK file call nurbs % export_Xc ( 'vtk/nurbs_surface_Xc2.vtk' ) !> Export the refined generated surface to a VTK file call nurbs % export_Xg ( 'vtk/nurbs_surface_Xg2.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call nurbs % show ( 'vtk/nurbs_surface_Xc2.vtk' , 'vtk/nurbs_surface_Xg2.vtk' ) !----------------------------------------------------------------------------- ! Transformations !----------------------------------------------------------------------------- !> Rotate the control points call nurbs % rotate_Xc ( alpha = 4 5.0_rk , beta = 0.0_rk , theta = 9 0.0_rk ) !> Rotate the generated curve call nurbs % rotate_Xg ( alpha =- 4 5.0_rk , beta = 0.0_rk , theta =- 9 0.0_rk ) !> Translate the control points call nurbs % translate_Xc ([ 1.0_rk , 2.0_rk , - 3.0_rk ]) !> Translate the generated curve call nurbs % translate_Xg ([ - 1.0_rk , - 2.0_rk , 3.0_rk ]) !> Export the transformed control points to a VTK file call nurbs % export_Xc ( 'vtk/nurbs_surface_Xc3.vtk' ) !> Export the transformed generated volume to a VTK file call nurbs % export_Xg ( 'vtk/nurbs_surface_Xg3.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call nurbs % show ( 'vtk/nurbs_surface_Xc3.vtk' , 'vtk/nurbs_surface_Xg3.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 ), 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 , rk ) y_spacing = 1.0_rk / real ( num_rows - 1 , rk ) 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 , rk ) * x_spacing control_points (( i - 1 ) * num_cols + j , 2 ) = y_offset + real ( i - 1 , rk ) * 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 example3_surface","tags":"","loc":"program/example3_surface.html"},{"title":"shape_half_circle – ForCAD","text":"Uses forcad program~~shape_half_circle~~UsesGraph program~shape_half_circle shape_half_circle module~forcad forcad program~shape_half_circle->module~forcad 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_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. Set up a half circle shape centered at the 0,0,0 with a radius of 1 Export the control points to a VTK file for visualization. Create the shape using the specified number of elements in each direction. Export the geometry to a VTK file for visualization. Show the control geometry and geometry using PyVista Finalize and clean up the shape object. Calls program~~shape_half_circle~~CallsGraph program~shape_half_circle shape_half_circle proc~create~2 nurbs_curve%create program~shape_half_circle->proc~create~2 proc~export_xc~2 nurbs_curve%export_Xc program~shape_half_circle->proc~export_xc~2 proc~export_xg~2 nurbs_curve%export_Xg program~shape_half_circle->proc~export_xg~2 proc~finalize~2 nurbs_curve%finalize program~shape_half_circle->proc~finalize~2 proc~set_half_circle nurbs_curve%set_half_circle program~shape_half_circle->proc~set_half_circle proc~show~2 nurbs_curve%show program~shape_half_circle->proc~show~2 interface~compute_xg~2 compute_Xg proc~create~2->interface~compute_xg~2 proc~is_rational~2 nurbs_curve%is_rational proc~create~2->proc~is_rational~2 proc~cmp_elem_xc_vis~2 nurbs_curve%cmp_elem_Xc_vis proc~export_xc~2->proc~cmp_elem_xc_vis~2 proc~cmp_elem_xg_vis~2 nurbs_curve%cmp_elem_Xg_vis proc~export_xg~2->proc~cmp_elem_xg_vis~2 none~set~2 nurbs_curve%set proc~set_half_circle->none~set~2 proc~set1~2 nurbs_curve%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_curve%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_curve%set3 none~set~2->proc~set3~2 interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xc_vis~2->interface~elemconn_c0 proc~cmp_elem_xg_vis~2->interface~elemconn_c0 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v proc~cmp_degree~2 nurbs_curve%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~compute_knot_vector compute_knot_vector proc~set2~2->proc~compute_knot_vector proc~set3~2->proc~cmp_degree~2 proc~get_multiplicity~2 nurbs_curve%get_multiplicity proc~cmp_degree~2->proc~get_multiplicity~2 proc~repelem repelem proc~compute_knot_vector->proc~repelem interface~compute_multiplicity compute_multiplicity proc~get_multiplicity~2->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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 type( nurbs_curve ) :: shape","tags":"","loc":"program/shape_half_circle.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_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_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 surface object to create, and finalize a NURBS 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 NURBS surface Define weights for the control points Set control points and weights for the NURBS surface object Deallocate local arrays Export initial control points to a VTK file Generate the NURBS surface with a resolution of 30x30 Export the generated surface to a VTK file Show the control geometry and geometry using PyVista Finalize the NURBS surface object Calls program~~example_nurbs_surface~~CallsGraph program~example_nurbs_surface example_nurbs_surface none~set~3 nurbs_surface%set program~example_nurbs_surface->none~set~3 proc~create~3 nurbs_surface%create program~example_nurbs_surface->proc~create~3 proc~export_xc~3 nurbs_surface%export_Xc program~example_nurbs_surface->proc~export_xc~3 proc~export_xg~3 nurbs_surface%export_Xg program~example_nurbs_surface->proc~export_xg~3 proc~finalize~3 nurbs_surface%finalize program~example_nurbs_surface->proc~finalize~3 proc~generate_xc~2 generate_Xc program~example_nurbs_surface->proc~generate_xc~2 proc~show~3 nurbs_surface%show program~example_nurbs_surface->proc~show~3 proc~set1~3 nurbs_surface%set1 none~set~3->proc~set1~3 proc~set2~3 nurbs_surface%set2 none~set~3->proc~set2~3 proc~set3~3 nurbs_surface%set3 none~set~3->proc~set3~3 interface~compute_xg~3 compute_Xg proc~create~3->interface~compute_xg~3 interface~ndgrid ndgrid proc~create~3->interface~ndgrid proc~is_rational~3 nurbs_surface%is_rational proc~create~3->proc~is_rational~3 proc~cmp_elem_xc_vis~3 nurbs_surface%cmp_elem_Xc_vis proc~export_xc~3->proc~cmp_elem_xc_vis~3 proc~cmp_elem_xg_vis~3 nurbs_surface%cmp_elem_Xg_vis proc~export_xg~3->proc~cmp_elem_xg_vis~3 proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 ndgrid3 interface~ndgrid->proc~ndgrid3 interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xc_vis~3->interface~elemconn_c0 proc~cmp_elem_xg_vis~3->interface~elemconn_c0 proc~cmp_degree~3 nurbs_surface%cmp_degree proc~set1~3->proc~cmp_degree~3 proc~cmp_nc~3 nurbs_surface%cmp_nc proc~set1~3->proc~cmp_nc~3 proc~set2~3->proc~cmp_nc~3 proc~compute_knot_vector compute_knot_vector proc~set2~3->proc~compute_knot_vector proc~set3~3->proc~cmp_degree~3 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v proc~get_multiplicity~3 nurbs_surface%get_multiplicity proc~cmp_degree~3->proc~get_multiplicity~3 interface~compute_multiplicity compute_multiplicity proc~cmp_nc~3->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity~3->interface~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 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), allocatable, (:,:) Source Code program example_nurbs_surface use forcad , only : rk , nurbs_surface implicit none type ( nurbs_surface ) :: nurbs !! Declare a NURBS surface object real ( rk ), allocatable :: Xc (:,:), Wc (:) !! Arrays for control points and weights !----------------------------------------------------------------------------- ! Setting up the NURBS surface !----------------------------------------------------------------------------- !> Define control points for the NURBS 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 NURBS surface object call nurbs % set ([ 10 , 10 ], Xc , Wc ) !> Deallocate local arrays deallocate ( Xc , Wc ) !> Export initial control points to a VTK file call nurbs % export_Xc ( 'vtk/demo_surface_Xc.vtk' ) !----------------------------------------------------------------------------- ! Creating the NURBS surface !----------------------------------------------------------------------------- !> Generate the NURBS surface with a resolution of 30x30 call nurbs % create ( res1 = 30 , res2 = 30 ) !> Export the generated surface to a VTK file call nurbs % export_Xg ( 'vtk/demo_surface_Xg.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call nurbs % show ( 'vtk/demo_surface_Xc.vtk' , 'vtk/demo_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 ), 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 , rk ) y_spacing = 1.0_rk / real ( num_rows - 1 , rk ) 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 , rk ) * x_spacing control_points (( i - 1 ) * num_cols + j , 2 ) = y_offset + real ( i - 1 , rk ) * 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_put_to_nurbs – ForCAD","text":"Uses forcad forcad_utils program~~example_put_to_nurbs~~UsesGraph program~example_put_to_nurbs example_put_to_nurbs module~forcad forcad program~example_put_to_nurbs->module~forcad module~forcad_utils forcad_utils program~example_put_to_nurbs->module~forcad_utils module~forcad->module~forcad_utils 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_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. You can create your shape or use a predefined one\nRead coordinates from file\nRead element connectivities from file\nSet a control shape that will be used to put the shape into\nThe contol shape is a hexahedron with 100x40x10 with 10x5x3 number of control points\nBy modifying the control shape you can modify the shape Map the shape into the shape Deallocate local variables Export the shape and the control shape to vtk files\nShow the control geometry and geometry using PyVista Finalize the control shape Calls program~~example_put_to_nurbs~~CallsGraph program~example_put_to_nurbs example_put_to_nurbs none~set nurbs_volume%set program~example_put_to_nurbs->none~set proc~export_xc nurbs_volume%export_Xc program~example_put_to_nurbs->proc~export_xc proc~export_xg nurbs_volume%export_Xg program~example_put_to_nurbs->proc~export_xg proc~finalize nurbs_volume%finalize program~example_put_to_nurbs->proc~finalize proc~hexahedron_xc hexahedron_Xc program~example_put_to_nurbs->proc~hexahedron_xc proc~put_to_nurbs nurbs_volume%put_to_nurbs program~example_put_to_nurbs->proc~put_to_nurbs proc~show nurbs_volume%show program~example_put_to_nurbs->proc~show proc~set1 nurbs_volume%set1 none~set->proc~set1 proc~set2 nurbs_volume%set2 none~set->proc~set2 proc~set3 nurbs_volume%set3 none~set->proc~set3 proc~cmp_elem_xc_vis nurbs_volume%cmp_elem_Xc_vis proc~export_xc->proc~cmp_elem_xc_vis proc~cmp_elem_xg_vis nurbs_volume%cmp_elem_Xg_vis proc~export_xg->proc~cmp_elem_xg_vis proc~basis_bspline basis_bspline proc~put_to_nurbs->proc~basis_bspline proc~kron kron proc~put_to_nurbs->proc~kron proc~set_elem_xg_vis nurbs_volume%set_elem_Xg_vis proc~put_to_nurbs->proc~set_elem_xg_vis interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xc_vis->interface~elemconn_c0 proc~cmp_elem_xg_vis->interface~elemconn_c0 proc~cmp_degree nurbs_volume%cmp_degree proc~set1->proc~cmp_degree proc~cmp_nc nurbs_volume%cmp_nc proc~set1->proc~cmp_nc proc~set2->proc~cmp_nc proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector proc~set3->proc~cmp_degree proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v proc~get_multiplicity nurbs_volume%get_multiplicity proc~cmp_degree->proc~get_multiplicity interface~compute_multiplicity compute_multiplicity proc~cmp_nc->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity->interface~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 :: X (:,:) type( nurbs_volume ) :: control_shape integer, allocatable :: elem (:,:) integer :: i integer :: nunit","tags":"","loc":"program/example_put_to_nurbs.html"},{"title":"nearest_point_2d_bench – ForCAD","text":"Uses forcad fortime program~~nearest_point_2d_bench~~UsesGraph program~nearest_point_2d_bench nearest_point_2d_bench fortime fortime program~nearest_point_2d_bench->fortime module~forcad forcad program~nearest_point_2d_bench->module~forcad 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_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. Set a tetragon with lengths of 2.0 and 3.0 and 3 and 4 control points in each direction\nThe weights of the control points (Wc) are optional. Generate the NURBS surface with resolutions of 30 in both dimensions Find the nearest point on the surface to a given point\nFinalize the NURBS surface object Calls program~~nearest_point_2d_bench~~CallsGraph program~nearest_point_2d_bench nearest_point_2d_bench proc~create~3 nurbs_surface%create program~nearest_point_2d_bench->proc~create~3 proc~finalize~3 nurbs_surface%finalize program~nearest_point_2d_bench->proc~finalize~3 proc~nearest_point~3 nurbs_surface%nearest_point program~nearest_point_2d_bench->proc~nearest_point~3 proc~set_tetragon nurbs_surface%set_tetragon program~nearest_point_2d_bench->proc~set_tetragon timer_start timer_start program~nearest_point_2d_bench->timer_start timer_stop timer_stop program~nearest_point_2d_bench->timer_stop interface~compute_xg~3 compute_Xg proc~create~3->interface~compute_xg~3 interface~ndgrid ndgrid proc~create~3->interface~ndgrid proc~is_rational~3 nurbs_surface%is_rational proc~create~3->proc~is_rational~3 interface~nearest_point_help_2d nearest_point_help_2d proc~nearest_point~3->interface~nearest_point_help_2d none~set~3 nurbs_surface%set proc~set_tetragon->none~set~3 proc~tetragon_xc tetragon_Xc proc~set_tetragon->proc~tetragon_xc proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 ndgrid3 interface~ndgrid->proc~ndgrid3 proc~set1~3 nurbs_surface%set1 none~set~3->proc~set1~3 proc~set2~3 nurbs_surface%set2 none~set~3->proc~set2~3 proc~set3~3 nurbs_surface%set3 none~set~3->proc~set3~3 proc~cmp_degree~3 nurbs_surface%cmp_degree proc~set1~3->proc~cmp_degree~3 proc~cmp_nc~3 nurbs_surface%cmp_nc proc~set1~3->proc~cmp_nc~3 proc~set2~3->proc~cmp_nc~3 proc~compute_knot_vector compute_knot_vector proc~set2~3->proc~compute_knot_vector proc~set3~3->proc~cmp_degree~3 proc~get_multiplicity~3 nurbs_surface%get_multiplicity proc~cmp_degree~3->proc~get_multiplicity~3 interface~compute_multiplicity compute_multiplicity proc~cmp_nc~3->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity~3->interface~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 integer :: i integer :: id id of the nearest point integer :: j real(kind=rk), allocatable :: nearest_Xg (:) Coordinates of the nearest point on the surface real(kind=rk), allocatable :: nearest_Xt (:) Corresponding parametric coordinates of the nearest point real(kind=rk), allocatable :: points (:,:) type( nurbs_surface ) :: shape Declare a NURBS surface object type(timer) :: t","tags":"","loc":"program/nearest_point_2d_bench.html"},{"title":"shape_C_3d – ForCAD","text":"Uses forcad program~~shape_c_3d~~UsesGraph program~shape_c_3d shape_C_3d module~forcad forcad program~shape_c_3d->module~forcad 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_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. Set a C-shape with radius 2.0 and center at [0.0, 0.0, 0.0] Export control points to a VTK file Generate the NURBS C-shape with a resolution of 100 Export the generated cirlce to a VTK file Show the control geometry and geometry using PyVista Finalize the NURBS curve object Calls program~~shape_c_3d~~CallsGraph program~shape_c_3d shape_C_3d proc~create nurbs_volume%create program~shape_c_3d->proc~create proc~export_xc nurbs_volume%export_Xc program~shape_c_3d->proc~export_xc proc~export_xg nurbs_volume%export_Xg program~shape_c_3d->proc~export_xg proc~finalize nurbs_volume%finalize program~shape_c_3d->proc~finalize proc~set_c nurbs_volume%set_C program~shape_c_3d->proc~set_c proc~show nurbs_volume%show program~shape_c_3d->proc~show interface~compute_xg compute_Xg proc~create->interface~compute_xg interface~ndgrid ndgrid proc~create->interface~ndgrid proc~is_rational nurbs_volume%is_rational proc~create->proc~is_rational proc~cmp_elem_xc_vis nurbs_volume%cmp_elem_Xc_vis proc~export_xc->proc~cmp_elem_xc_vis proc~cmp_elem_xg_vis nurbs_volume%cmp_elem_Xg_vis proc~export_xg->proc~cmp_elem_xg_vis none~set nurbs_volume%set proc~set_c->none~set proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 ndgrid3 interface~ndgrid->proc~ndgrid3 proc~set1 nurbs_volume%set1 none~set->proc~set1 proc~set2 nurbs_volume%set2 none~set->proc~set2 proc~set3 nurbs_volume%set3 none~set->proc~set3 interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xc_vis->interface~elemconn_c0 proc~cmp_elem_xg_vis->interface~elemconn_c0 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v proc~cmp_degree nurbs_volume%cmp_degree proc~set1->proc~cmp_degree proc~cmp_nc nurbs_volume%cmp_nc proc~set1->proc~cmp_nc proc~set2->proc~cmp_nc proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector proc~set3->proc~cmp_degree proc~get_multiplicity nurbs_volume%get_multiplicity proc~cmp_degree->proc~get_multiplicity interface~compute_multiplicity compute_multiplicity proc~cmp_nc->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity->interface~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 type( nurbs_volume ) :: shape","tags":"","loc":"program/shape_c_3d.html"},{"title":"example3_volume – ForCAD","text":"Uses forcad program~~example3_volume~~UsesGraph program~example3_volume example3_volume module~forcad forcad program~example3_volume->module~forcad 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_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 (optional)\nDefine knot vectors for all three dimensions\nSet knot vectors, control points, and weights for the NURBS volume object\nWc is optional. Deallocate local arrays Export the control points to a VTK file Generate the NURBS volume with resolutions of 20, 20, and 20 in the three dimensions Export the generated volume to a VTK file Show the control geometry and geometry using PyVista Print size of knot vectors\nInsert knots 0.25 and 0.75 in all three directions\nPrint size of knot vectors after inserting knots\nPrint degrees Elevate degree by 2 in all three directions\nPrint degrees after elevating Print size of knot vectors\nPrint size of knot vectors after removing knots\nGenerate the refined NURBS volume with resolutions of 40, 40, and 40 in the three dimensions Export updated control points to a VTK file Export the refined generated volume to a VTK file Show the control geometry and geometry using PyVista Rotate the control points Rotate the generated curve Translate the control points Translate the generated curve Export the transformed control points to a VTK file Export the transformed generated volume to a VTK file Show the control geometry and geometry using PyVista first compute and set the connectivities of volume elements get the connectivity of the face1 of the first element\nget the degree of the faces\nFinalize the NURBS volume object Calls program~~example3_volume~~CallsGraph program~example3_volume example3_volume none~get_degree nurbs_volume%get_degree program~example3_volume->none~get_degree none~get_knot nurbs_volume%get_knot program~example3_volume->none~get_knot none~set nurbs_volume%set program~example3_volume->none~set proc~cmp_degreeface nurbs_volume%cmp_degreeFace program~example3_volume->proc~cmp_degreeface proc~cmp_elem nurbs_volume%cmp_elem program~example3_volume->proc~cmp_elem proc~cmp_elemface nurbs_volume%cmp_elemFace program~example3_volume->proc~cmp_elemface proc~create nurbs_volume%create program~example3_volume->proc~create proc~elevate_degree nurbs_volume%elevate_degree program~example3_volume->proc~elevate_degree proc~export_xc nurbs_volume%export_Xc program~example3_volume->proc~export_xc proc~export_xg nurbs_volume%export_Xg program~example3_volume->proc~export_xg proc~finalize nurbs_volume%finalize program~example3_volume->proc~finalize proc~generate_xc~3 generate_Xc program~example3_volume->proc~generate_xc~3 proc~insert_knots nurbs_volume%insert_knots program~example3_volume->proc~insert_knots proc~remove_knots nurbs_volume%remove_knots program~example3_volume->proc~remove_knots proc~rotate_xc nurbs_volume%rotate_Xc program~example3_volume->proc~rotate_xc proc~rotate_xg nurbs_volume%rotate_Xg program~example3_volume->proc~rotate_xg proc~set_elem nurbs_volume%set_elem program~example3_volume->proc~set_elem proc~show nurbs_volume%show program~example3_volume->proc~show proc~translate_xc nurbs_volume%translate_Xc program~example3_volume->proc~translate_xc proc~translate_xg nurbs_volume%translate_Xg program~example3_volume->proc~translate_xg proc~get_degree_all nurbs_volume%get_degree_all none~get_degree->proc~get_degree_all proc~get_degree_dir nurbs_volume%get_degree_dir none~get_degree->proc~get_degree_dir proc~get_knot_all nurbs_volume%get_knot_all none~get_knot->proc~get_knot_all proc~get_knoti nurbs_volume%get_knoti none~get_knot->proc~get_knoti proc~set1 nurbs_volume%set1 none~set->proc~set1 proc~set2 nurbs_volume%set2 none~set->proc~set2 proc~set3 nurbs_volume%set3 none~set->proc~set3 interface~elemconn_cn elemConn_Cn proc~cmp_elem->interface~elemconn_cn interface~unique unique proc~cmp_elem->interface~unique proc~get_multiplicity nurbs_volume%get_multiplicity proc~cmp_elem->proc~get_multiplicity interface~compute_xg compute_Xg proc~create->interface~compute_xg interface~ndgrid ndgrid proc~create->interface~ndgrid proc~is_rational nurbs_volume%is_rational proc~create->proc~is_rational proc~elevate_degree->none~get_knot proc~elevate_degree->none~set proc~elevate_degree_a_5_9 elevate_degree_A_5_9 proc~elevate_degree->proc~elevate_degree_a_5_9 proc~cmp_elem_xc_vis nurbs_volume%cmp_elem_Xc_vis proc~export_xc->proc~cmp_elem_xc_vis proc~cmp_elem_xg_vis nurbs_volume%cmp_elem_Xg_vis proc~export_xg->proc~cmp_elem_xg_vis proc~insert_knots->none~get_knot proc~insert_knots->none~set interface~compute_multiplicity compute_multiplicity proc~insert_knots->interface~compute_multiplicity proc~findspan findspan proc~insert_knots->proc~findspan proc~insert_knot_a_5_1 insert_knot_A_5_1 proc~insert_knots->proc~insert_knot_a_5_1 proc~remove_knots->none~get_knot proc~remove_knots->none~set proc~remove_knots->interface~compute_multiplicity proc~remove_knots->proc~findspan proc~remove_knots_a_5_8 remove_knots_A_5_8 proc~remove_knots->proc~remove_knots_a_5_8 proc~rotation rotation proc~rotate_xc->proc~rotation proc~rotate_xg->proc~rotation proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~cmp_elemconn_cn_l cmp_elemConn_Cn_L interface~elemconn_cn->proc~cmp_elemconn_cn_l proc~cmp_elemconn_cn_s cmp_elemConn_Cn_S interface~elemconn_cn->proc~cmp_elemconn_cn_s proc~cmp_elemconn_cn_v cmp_elemConn_Cn_V interface~elemconn_cn->proc~cmp_elemconn_cn_v proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 ndgrid3 interface~ndgrid->proc~ndgrid3 proc~unique_integer unique_integer interface~unique->proc~unique_integer proc~unique_real unique_real interface~unique->proc~unique_real interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xc_vis->interface~elemconn_c0 proc~cmp_elem_xg_vis->interface~elemconn_c0 proc~elevate_degree_a_5_9->interface~compute_multiplicity proc~bincoeff bincoeff proc~elevate_degree_a_5_9->proc~bincoeff proc~get_multiplicity->interface~compute_multiplicity cosd cosd proc~rotation->cosd sind sind proc~rotation->sind proc~cmp_degree nurbs_volume%cmp_degree proc~set1->proc~cmp_degree proc~cmp_nc nurbs_volume%cmp_nc proc~set1->proc~cmp_nc proc~set2->proc~cmp_nc proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector proc~set3->proc~cmp_degree proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v proc~factln factln proc~bincoeff->proc~factln proc~cmp_degree->proc~get_multiplicity proc~cmp_nc->interface~compute_multiplicity proc~repelem 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. 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), allocatable, (:,:) Source Code program example3_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 (optional) allocate ( Wc ( size ( Xc , 1 )), source = 1.0_rk ) Wc ( 2 ) = 5.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 !> Wc is optional. call nurbs % set ( knot1 , knot2 , knot3 , Xc , Wc ) !> Deallocate local arrays deallocate ( 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 20, 20, and 20 in the three dimensions call nurbs % create ( 20 , 20 , 20 ) !> Export the generated volume to a VTK file call nurbs % export_Xg ( 'vtk/nurbs_volume_Xg.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call nurbs % show ( 'vtk/nurbs_volume_Xc.vtk' , 'vtk/nurbs_volume_Xg.vtk' ) !----------------------------------------------------------------------------- ! Refinements !----------------------------------------------------------------------------- !> Print size of knot vectors print * , size ( nurbs % get_knot ( 1 )) print * , size ( nurbs % get_knot ( 2 )) print * , size ( nurbs % get_knot ( 3 )) !> Insert knots 0.25 and 0.75 in all three directions call nurbs % insert_knots ( 1 , [ 0.25_rk , 0.75_rk ], [ 1 , 1 ]) ! direction 1 call nurbs % insert_knots ( 2 , [ 0.25_rk , 0.75_rk ], [ 1 , 1 ]) ! direction 2 call nurbs % insert_knots ( 3 , [ 0.25_rk , 0.75_rk ], [ 1 , 1 ]) ! direction 3 !> Print size of knot vectors after inserting knots print * , size ( nurbs % get_knot ( 1 )) print * , size ( nurbs % get_knot ( 2 )) print * , size ( nurbs % get_knot ( 3 )) !> Print degrees print * , nurbs % get_degree () !> Elevate degree by 2 in all three directions call nurbs % elevate_degree ( 1 , 2 ) ! direction 1 call nurbs % elevate_degree ( 2 , 2 ) ! direction 2 call nurbs % elevate_degree ( 3 , 2 ) ! direction 3 !> Print degrees after elevating print * , nurbs % get_degree () !> Print size of knot vectors print * , size ( nurbs % get_knot ( 1 )) print * , size ( nurbs % get_knot ( 2 )) print * , size ( nurbs % get_knot ( 3 )) call nurbs % remove_knots ( 1 , [ 0.25_rk , 0.75_rk ], [ 1 , 1 ]) ! direction 1 call nurbs % remove_knots ( 2 , [ 0.25_rk , 0.75_rk ], [ 1 , 1 ]) ! direction 2 call nurbs % remove_knots ( 3 , [ 0.25_rk , 0.75_rk ], [ 1 , 1 ]) ! direction 3 !> Print size of knot vectors after removing knots print * , size ( nurbs % get_knot ( 1 )) print * , size ( nurbs % get_knot ( 2 )) print * , size ( nurbs % get_knot ( 3 )) !> Generate the refined NURBS volume with resolutions of 40, 40, and 40 in the three dimensions call nurbs % create () !> Export updated control points to a VTK file call nurbs % export_Xc ( 'vtk/nurbs_volume_Xc2.vtk' ) !> Export the refined generated volume to a VTK file call nurbs % export_Xg ( 'vtk/nurbs_volume_Xg2.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call nurbs % show ( 'vtk/nurbs_volume_Xc2.vtk' , 'vtk/nurbs_volume_Xg2.vtk' ) !----------------------------------------------------------------------------- ! Transformations !----------------------------------------------------------------------------- !> Rotate the control points call nurbs % rotate_Xc ( alpha =- 4 5.0_rk , beta = 0.0_rk , theta = 9 0.0_rk ) !> Rotate the generated curve call nurbs % rotate_Xg ( alpha =- 4 5.0_rk , beta = 0.0_rk , theta = 9 0.0_rk ) !> Translate the control points call nurbs % translate_Xc ([ 1.0_rk , 2.0_rk , - 3.0_rk ]) !> Translate the generated curve call nurbs % translate_Xg ([ 1.0_rk , 2.0_rk , - 3.0_rk ]) !> Export the transformed control points to a VTK file call nurbs % export_Xc ( 'vtk/nurbs_volume_Xc3.vtk' ) !> Export the transformed generated volume to a VTK file call nurbs % export_Xg ( 'vtk/nurbs_volume_Xg3.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call nurbs % show ( 'vtk/nurbs_volume_Xc3.vtk' , 'vtk/nurbs_volume_Xg3.vtk' ) !----------------------------------------------------------------------------- ! Extract faces !----------------------------------------------------------------------------- !> first compute and set the connectivities of volume elements call nurbs % set_elem ( nurbs % cmp_elem ()) !> get the connectivity of the face1 of the first element print * , 'Face 1 of element 1:' , nurbs % cmp_elemFace ( elem = 1 , face = 1 ) print * , 'Face 2 of element 1:' , nurbs % cmp_elemFace ( elem = 1 , face = 2 ) print * , 'Face 3 of element 1:' , nurbs % cmp_elemFace ( elem = 1 , face = 3 ) print * , 'Face 4 of element 1:' , nurbs % cmp_elemFace ( elem = 1 , face = 4 ) print * , 'Face 5 of element 1:' , nurbs % cmp_elemFace ( elem = 1 , face = 5 ) print * , 'Face 6 of element 1:' , nurbs % cmp_elemFace ( elem = 1 , face = 6 ) !> get the degree of the faces print * , 'Degree of face 1:' , nurbs % cmp_degreeFace ( face = 1 ) print * , 'Degree of face 2:' , nurbs % cmp_degreeFace ( face = 2 ) print * , 'Degree of face 3:' , nurbs % cmp_degreeFace ( face = 3 ) print * , 'Degree of face 4:' , nurbs % cmp_degreeFace ( face = 4 ) print * , 'Degree of face 5:' , nurbs % cmp_degreeFace ( face = 5 ) print * , 'Degree of face 6:' , nurbs % cmp_degreeFace ( face = 6 ) !----------------------------------------------------------------------------- ! 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 ), 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 example3_volume","tags":"","loc":"program/example3_volume.html"},{"title":"shape_C_1d – ForCAD","text":"Uses forcad program~~shape_c_1d~~UsesGraph program~shape_c_1d shape_C_1d module~forcad forcad program~shape_c_1d->module~forcad 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_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. Set a C-shape with radius 2.0 and center at [0.0, 0.0, 0.0] Export control points to a VTK file Generate the NURBS C-shape with a resolution of 100 Export the generated cirlce to a VTK file Show the control geometry and geometry using PyVista Finalize the NURBS curve object Calls program~~shape_c_1d~~CallsGraph program~shape_c_1d shape_C_1d proc~create~2 nurbs_curve%create program~shape_c_1d->proc~create~2 proc~export_xc~2 nurbs_curve%export_Xc program~shape_c_1d->proc~export_xc~2 proc~export_xg~2 nurbs_curve%export_Xg program~shape_c_1d->proc~export_xg~2 proc~finalize~2 nurbs_curve%finalize program~shape_c_1d->proc~finalize~2 proc~set_c~2 nurbs_curve%set_C program~shape_c_1d->proc~set_c~2 proc~show~2 nurbs_curve%show program~shape_c_1d->proc~show~2 interface~compute_xg~2 compute_Xg proc~create~2->interface~compute_xg~2 proc~is_rational~2 nurbs_curve%is_rational proc~create~2->proc~is_rational~2 proc~cmp_elem_xc_vis~2 nurbs_curve%cmp_elem_Xc_vis proc~export_xc~2->proc~cmp_elem_xc_vis~2 proc~cmp_elem_xg_vis~2 nurbs_curve%cmp_elem_Xg_vis proc~export_xg~2->proc~cmp_elem_xg_vis~2 none~set~2 nurbs_curve%set proc~set_c~2->none~set~2 proc~set1~2 nurbs_curve%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_curve%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_curve%set3 none~set~2->proc~set3~2 interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xc_vis~2->interface~elemconn_c0 proc~cmp_elem_xg_vis~2->interface~elemconn_c0 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v proc~cmp_degree~2 nurbs_curve%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~compute_knot_vector compute_knot_vector proc~set2~2->proc~compute_knot_vector proc~set3~2->proc~cmp_degree~2 proc~get_multiplicity~2 nurbs_curve%get_multiplicity proc~cmp_degree~2->proc~get_multiplicity~2 proc~repelem repelem proc~compute_knot_vector->proc~repelem interface~compute_multiplicity compute_multiplicity proc~get_multiplicity~2->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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 type( nurbs_curve ) :: shape","tags":"","loc":"program/shape_c_1d.html"},{"title":"shape_half_ring_2d – ForCAD","text":"Uses forcad program~~shape_half_ring_2d~~UsesGraph program~shape_half_ring_2d shape_half_ring_2d module~forcad forcad program~shape_half_ring_2d->module~forcad 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_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. Set up a half ring shape centered at 0,0,0 with inner radius 1 and outer radius 2. Export the control points to a VTK file for visualization. Create the shape using the specified number of elements in each direction. Export the geometry to a VTK file for visualization. Show the control geometry and geometry using PyVista Finalize and clean up the shape object. Calls program~~shape_half_ring_2d~~CallsGraph program~shape_half_ring_2d shape_half_ring_2d proc~create~3 nurbs_surface%create program~shape_half_ring_2d->proc~create~3 proc~export_xc~3 nurbs_surface%export_Xc program~shape_half_ring_2d->proc~export_xc~3 proc~export_xg~3 nurbs_surface%export_Xg program~shape_half_ring_2d->proc~export_xg~3 proc~finalize~3 nurbs_surface%finalize program~shape_half_ring_2d->proc~finalize~3 proc~set_half_ring~2 nurbs_surface%set_half_ring program~shape_half_ring_2d->proc~set_half_ring~2 proc~show~3 nurbs_surface%show program~shape_half_ring_2d->proc~show~3 interface~compute_xg~3 compute_Xg proc~create~3->interface~compute_xg~3 interface~ndgrid ndgrid proc~create~3->interface~ndgrid proc~is_rational~3 nurbs_surface%is_rational proc~create~3->proc~is_rational~3 proc~cmp_elem_xc_vis~3 nurbs_surface%cmp_elem_Xc_vis proc~export_xc~3->proc~cmp_elem_xc_vis~3 proc~cmp_elem_xg_vis~3 nurbs_surface%cmp_elem_Xg_vis proc~export_xg~3->proc~cmp_elem_xg_vis~3 none~set~3 nurbs_surface%set proc~set_half_ring~2->none~set~3 proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 ndgrid3 interface~ndgrid->proc~ndgrid3 proc~set1~3 nurbs_surface%set1 none~set~3->proc~set1~3 proc~set2~3 nurbs_surface%set2 none~set~3->proc~set2~3 proc~set3~3 nurbs_surface%set3 none~set~3->proc~set3~3 interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xc_vis~3->interface~elemconn_c0 proc~cmp_elem_xg_vis~3->interface~elemconn_c0 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v proc~cmp_degree~3 nurbs_surface%cmp_degree proc~set1~3->proc~cmp_degree~3 proc~cmp_nc~3 nurbs_surface%cmp_nc proc~set1~3->proc~cmp_nc~3 proc~set2~3->proc~cmp_nc~3 proc~compute_knot_vector compute_knot_vector proc~set2~3->proc~compute_knot_vector proc~set3~3->proc~cmp_degree~3 proc~get_multiplicity~3 nurbs_surface%get_multiplicity proc~cmp_degree~3->proc~get_multiplicity~3 interface~compute_multiplicity compute_multiplicity proc~cmp_nc~3->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity~3->interface~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 type( nurbs_surface ) :: shape","tags":"","loc":"program/shape_half_ring_2d.html"},{"title":"shape_C_2d – ForCAD","text":"Uses forcad program~~shape_c_2d~~UsesGraph program~shape_c_2d shape_C_2d module~forcad forcad program~shape_c_2d->module~forcad 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_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. Set a C-shape with radius 2.0 and center at [0.0, 0.0, 0.0] Export control points to a VTK file Generate the NURBS C-shape with a resolution of 100 Export the generated cirlce to a VTK file Show the control geometry and geometry using PyVista Finalize the NURBS curve object Calls program~~shape_c_2d~~CallsGraph program~shape_c_2d shape_C_2d proc~create~3 nurbs_surface%create program~shape_c_2d->proc~create~3 proc~export_xc~3 nurbs_surface%export_Xc program~shape_c_2d->proc~export_xc~3 proc~export_xg~3 nurbs_surface%export_Xg program~shape_c_2d->proc~export_xg~3 proc~finalize~3 nurbs_surface%finalize program~shape_c_2d->proc~finalize~3 proc~set_c~3 nurbs_surface%set_C program~shape_c_2d->proc~set_c~3 proc~show~3 nurbs_surface%show program~shape_c_2d->proc~show~3 interface~compute_xg~3 compute_Xg proc~create~3->interface~compute_xg~3 interface~ndgrid ndgrid proc~create~3->interface~ndgrid proc~is_rational~3 nurbs_surface%is_rational proc~create~3->proc~is_rational~3 proc~cmp_elem_xc_vis~3 nurbs_surface%cmp_elem_Xc_vis proc~export_xc~3->proc~cmp_elem_xc_vis~3 proc~cmp_elem_xg_vis~3 nurbs_surface%cmp_elem_Xg_vis proc~export_xg~3->proc~cmp_elem_xg_vis~3 none~set~3 nurbs_surface%set proc~set_c~3->none~set~3 proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 ndgrid3 interface~ndgrid->proc~ndgrid3 proc~set1~3 nurbs_surface%set1 none~set~3->proc~set1~3 proc~set2~3 nurbs_surface%set2 none~set~3->proc~set2~3 proc~set3~3 nurbs_surface%set3 none~set~3->proc~set3~3 interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xc_vis~3->interface~elemconn_c0 proc~cmp_elem_xg_vis~3->interface~elemconn_c0 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v proc~cmp_degree~3 nurbs_surface%cmp_degree proc~set1~3->proc~cmp_degree~3 proc~cmp_nc~3 nurbs_surface%cmp_nc proc~set1~3->proc~cmp_nc~3 proc~set2~3->proc~cmp_nc~3 proc~compute_knot_vector compute_knot_vector proc~set2~3->proc~compute_knot_vector proc~set3~3->proc~cmp_degree~3 proc~get_multiplicity~3 nurbs_surface%get_multiplicity proc~cmp_degree~3->proc~get_multiplicity~3 interface~compute_multiplicity compute_multiplicity proc~cmp_nc~3->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity~3->interface~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 type( nurbs_surface ) :: shape","tags":"","loc":"program/shape_c_2d.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_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_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 curve object to create, and finalize a NURBS 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 NURBS curve Define weights for the control points Set control points and weights for the NURBS curve object Deallocate local arrays Export initial control points to a VTK file Generate the NURBS curve with a resolution of 500 Export the generated curve to a VTK file Show the control geometry and geometry using PyVista Finalize the NURBS curve object Calls program~~example_nurbs_curve~~CallsGraph program~example_nurbs_curve example_nurbs_curve none~set~2 nurbs_curve%set program~example_nurbs_curve->none~set~2 proc~create~2 nurbs_curve%create program~example_nurbs_curve->proc~create~2 proc~export_xc~2 nurbs_curve%export_Xc program~example_nurbs_curve->proc~export_xc~2 proc~export_xg~2 nurbs_curve%export_Xg program~example_nurbs_curve->proc~export_xg~2 proc~finalize~2 nurbs_curve%finalize program~example_nurbs_curve->proc~finalize~2 proc~generate_xc~4 generate_Xc program~example_nurbs_curve->proc~generate_xc~4 proc~show~2 nurbs_curve%show program~example_nurbs_curve->proc~show~2 proc~set1~2 nurbs_curve%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_curve%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_curve%set3 none~set~2->proc~set3~2 interface~compute_xg~2 compute_Xg proc~create~2->interface~compute_xg~2 proc~is_rational~2 nurbs_curve%is_rational proc~create~2->proc~is_rational~2 proc~cmp_elem_xc_vis~2 nurbs_curve%cmp_elem_Xc_vis proc~export_xc~2->proc~cmp_elem_xc_vis~2 proc~cmp_elem_xg_vis~2 nurbs_curve%cmp_elem_Xg_vis proc~export_xg~2->proc~cmp_elem_xg_vis~2 interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xc_vis~2->interface~elemconn_c0 proc~cmp_elem_xg_vis~2->interface~elemconn_c0 proc~cmp_degree~2 nurbs_curve%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~compute_knot_vector compute_knot_vector proc~set2~2->proc~compute_knot_vector proc~set3~2->proc~cmp_degree~2 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v proc~get_multiplicity~2 nurbs_curve%get_multiplicity proc~cmp_degree~2->proc~get_multiplicity~2 proc~repelem repelem proc~compute_knot_vector->proc~repelem interface~compute_multiplicity compute_multiplicity proc~get_multiplicity~2->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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( nurbs_curve ) :: nurbs Declare a NURBS 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), allocatable, (:,:) 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 !----------------------------------------------------------------------------- ! Setting up the NURBS curve !----------------------------------------------------------------------------- !> Define control points for the NURBS 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 NURBS curve object call nurbs % set ( Xc , Wc ) !> Deallocate local arrays deallocate ( Xc , Wc ) !> Export initial control points to a VTK file call nurbs % export_Xc ( 'vtk/demo_curve_Xc.vtk' ) !----------------------------------------------------------------------------- ! Creating the NURBS curve !----------------------------------------------------------------------------- !> Generate the NURBS curve with a resolution of 500 call nurbs % create ( res = 500 ) !> Export the generated curve to a VTK file call nurbs % export_Xg ( 'vtk/demo_curve_Xg.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call nurbs % show ( 'vtk/demo_curve_Xc.vtk' , 'vtk/demo_curve_Xg.vtk' ) !----------------------------------------------------------------------------- ! Finalizing !----------------------------------------------------------------------------- !> Finalize the NURBS curve object call nurbs % 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 ), 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 * real ( coil - 1 , rk ) / 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_nurbs_curve","tags":"","loc":"program/example_nurbs_curve.html"},{"title":"shape_tetragon – ForCAD","text":"Uses forcad program~~shape_tetragon~~UsesGraph program~shape_tetragon shape_tetragon module~forcad forcad program~shape_tetragon->module~forcad 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_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. Set a tetragon with lengths of 2.0 and 3.0 and 3 and 4 control points in each direction\nThe weights of the control points (Wc) are optional. 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 Show the control geometry and geometry using PyVista Finalize the NURBS surface object Calls program~~shape_tetragon~~CallsGraph program~shape_tetragon shape_tetragon proc~create~3 nurbs_surface%create program~shape_tetragon->proc~create~3 proc~export_xc~3 nurbs_surface%export_Xc program~shape_tetragon->proc~export_xc~3 proc~export_xg~3 nurbs_surface%export_Xg program~shape_tetragon->proc~export_xg~3 proc~finalize~3 nurbs_surface%finalize program~shape_tetragon->proc~finalize~3 proc~set_tetragon nurbs_surface%set_tetragon program~shape_tetragon->proc~set_tetragon proc~show~3 nurbs_surface%show program~shape_tetragon->proc~show~3 interface~compute_xg~3 compute_Xg proc~create~3->interface~compute_xg~3 interface~ndgrid ndgrid proc~create~3->interface~ndgrid proc~is_rational~3 nurbs_surface%is_rational proc~create~3->proc~is_rational~3 proc~cmp_elem_xc_vis~3 nurbs_surface%cmp_elem_Xc_vis proc~export_xc~3->proc~cmp_elem_xc_vis~3 proc~cmp_elem_xg_vis~3 nurbs_surface%cmp_elem_Xg_vis proc~export_xg~3->proc~cmp_elem_xg_vis~3 none~set~3 nurbs_surface%set proc~set_tetragon->none~set~3 proc~tetragon_xc tetragon_Xc proc~set_tetragon->proc~tetragon_xc proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 ndgrid3 interface~ndgrid->proc~ndgrid3 proc~set1~3 nurbs_surface%set1 none~set~3->proc~set1~3 proc~set2~3 nurbs_surface%set2 none~set~3->proc~set2~3 proc~set3~3 nurbs_surface%set3 none~set~3->proc~set3~3 interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xc_vis~3->interface~elemconn_c0 proc~cmp_elem_xg_vis~3->interface~elemconn_c0 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v proc~cmp_degree~3 nurbs_surface%cmp_degree proc~set1~3->proc~cmp_degree~3 proc~cmp_nc~3 nurbs_surface%cmp_nc proc~set1~3->proc~cmp_nc~3 proc~set2~3->proc~cmp_nc~3 proc~compute_knot_vector compute_knot_vector proc~set2~3->proc~compute_knot_vector proc~set3~3->proc~cmp_degree~3 proc~get_multiplicity~3 nurbs_surface%get_multiplicity proc~cmp_degree~3->proc~get_multiplicity~3 interface~compute_multiplicity compute_multiplicity proc~cmp_nc~3->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity~3->interface~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 type( nurbs_surface ) :: shape Declare a NURBS surface object","tags":"","loc":"program/shape_tetragon.html"},{"title":"shape_hexahedron – ForCAD","text":"Uses forcad program~~shape_hexahedron~~UsesGraph program~shape_hexahedron shape_hexahedron module~forcad forcad program~shape_hexahedron->module~forcad 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_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. Set up a hexahedron shape with dimensions L = [2.0, 4.0, 8.0] and a specified number of control points nc = [4, 6, 8].\nThe weights of the control points (Wc) are optional. Export the control points to a VTK file for visualization. Create the shape using the specified number of elements in each direction. Export the geometry to a VTK file for visualization. Show the control geometry and geometry using PyVista Finalize and clean up the shape object. Calls program~~shape_hexahedron~~CallsGraph program~shape_hexahedron shape_hexahedron proc~create nurbs_volume%create program~shape_hexahedron->proc~create proc~export_xc nurbs_volume%export_Xc program~shape_hexahedron->proc~export_xc proc~export_xg nurbs_volume%export_Xg program~shape_hexahedron->proc~export_xg proc~finalize nurbs_volume%finalize program~shape_hexahedron->proc~finalize proc~set_hexahedron nurbs_volume%set_hexahedron program~shape_hexahedron->proc~set_hexahedron proc~show nurbs_volume%show program~shape_hexahedron->proc~show interface~compute_xg compute_Xg proc~create->interface~compute_xg interface~ndgrid ndgrid proc~create->interface~ndgrid proc~is_rational nurbs_volume%is_rational proc~create->proc~is_rational proc~cmp_elem_xc_vis nurbs_volume%cmp_elem_Xc_vis proc~export_xc->proc~cmp_elem_xc_vis proc~cmp_elem_xg_vis nurbs_volume%cmp_elem_Xg_vis proc~export_xg->proc~cmp_elem_xg_vis none~set nurbs_volume%set proc~set_hexahedron->none~set proc~hexahedron_xc hexahedron_Xc proc~set_hexahedron->proc~hexahedron_xc proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 ndgrid3 interface~ndgrid->proc~ndgrid3 proc~set1 nurbs_volume%set1 none~set->proc~set1 proc~set2 nurbs_volume%set2 none~set->proc~set2 proc~set3 nurbs_volume%set3 none~set->proc~set3 interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xc_vis->interface~elemconn_c0 proc~cmp_elem_xg_vis->interface~elemconn_c0 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v proc~cmp_degree nurbs_volume%cmp_degree proc~set1->proc~cmp_degree proc~cmp_nc nurbs_volume%cmp_nc proc~set1->proc~cmp_nc proc~set2->proc~cmp_nc proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector proc~set3->proc~cmp_degree proc~get_multiplicity nurbs_volume%get_multiplicity proc~cmp_degree->proc~get_multiplicity interface~compute_multiplicity compute_multiplicity proc~cmp_nc->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity->interface~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 type( nurbs_volume ) :: shape","tags":"","loc":"program/shape_hexahedron.html"},{"title":"shape_ring_2d – ForCAD","text":"Uses forcad program~~shape_ring_2d~~UsesGraph program~shape_ring_2d shape_ring_2d module~forcad forcad program~shape_ring_2d->module~forcad 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_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. Set up a ring shape with inner radius 1.0 and outer radius 2.0. Export the control points to a VTK file for visualization. Create the shape using the specified number of elements in each direction. Export the geometry to a VTK file for visualization. Show the control geometry and geometry using PyVista Finalize and clean up the shape object. Calls program~~shape_ring_2d~~CallsGraph program~shape_ring_2d shape_ring_2d proc~create~3 nurbs_surface%create program~shape_ring_2d->proc~create~3 proc~export_xc~3 nurbs_surface%export_Xc program~shape_ring_2d->proc~export_xc~3 proc~export_xg~3 nurbs_surface%export_Xg program~shape_ring_2d->proc~export_xg~3 proc~finalize~3 nurbs_surface%finalize program~shape_ring_2d->proc~finalize~3 proc~set_ring~2 nurbs_surface%set_ring program~shape_ring_2d->proc~set_ring~2 proc~show~3 nurbs_surface%show program~shape_ring_2d->proc~show~3 interface~compute_xg~3 compute_Xg proc~create~3->interface~compute_xg~3 interface~ndgrid ndgrid proc~create~3->interface~ndgrid proc~is_rational~3 nurbs_surface%is_rational proc~create~3->proc~is_rational~3 proc~cmp_elem_xc_vis~3 nurbs_surface%cmp_elem_Xc_vis proc~export_xc~3->proc~cmp_elem_xc_vis~3 proc~cmp_elem_xg_vis~3 nurbs_surface%cmp_elem_Xg_vis proc~export_xg~3->proc~cmp_elem_xg_vis~3 none~set~3 nurbs_surface%set proc~set_ring~2->none~set~3 proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 ndgrid3 interface~ndgrid->proc~ndgrid3 proc~set1~3 nurbs_surface%set1 none~set~3->proc~set1~3 proc~set2~3 nurbs_surface%set2 none~set~3->proc~set2~3 proc~set3~3 nurbs_surface%set3 none~set~3->proc~set3~3 interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xc_vis~3->interface~elemconn_c0 proc~cmp_elem_xg_vis~3->interface~elemconn_c0 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v proc~cmp_degree~3 nurbs_surface%cmp_degree proc~set1~3->proc~cmp_degree~3 proc~cmp_nc~3 nurbs_surface%cmp_nc proc~set1~3->proc~cmp_nc~3 proc~set2~3->proc~cmp_nc~3 proc~compute_knot_vector compute_knot_vector proc~set2~3->proc~compute_knot_vector proc~set3~3->proc~cmp_degree~3 proc~get_multiplicity~3 nurbs_surface%get_multiplicity proc~cmp_degree~3->proc~get_multiplicity~3 interface~compute_multiplicity compute_multiplicity proc~cmp_nc~3->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity~3->interface~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 type( nurbs_surface ) :: shape","tags":"","loc":"program/shape_ring_2d.html"},{"title":"example_ppm2 – ForCAD","text":"Uses forcad forcolormap fortime forimage program~~example_ppm2~~UsesGraph program~example_ppm2 example_ppm2 forcolormap forcolormap program~example_ppm2->forcolormap forimage forimage program~example_ppm2->forimage fortime fortime program~example_ppm2->fortime module~forcad forcad program~example_ppm2->module~forcad 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_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. Visualization of NURBS surfaces using ForCAD, ForImage and ForColorMap libraries\nThis example converts NURBS surfaces (vector) to an image (raster) using ForCAD, ForImage and ForColorMap libraries. Set the shape parameters for a tetragon\nSet the shape parameters for a ring\nSet the shape parameters for a ring\nSet the shape parameters for a ring\nSet the shape parameters for a ring Calls program~~example_ppm2~~CallsGraph program~example_ppm2 example_ppm2 compute_rgb compute_rgb program~example_ppm2->compute_rgb export_pnm export_pnm program~example_ppm2->export_pnm get_b get_b program~example_ppm2->get_b get_g get_g program~example_ppm2->get_g get_r get_r program~example_ppm2->get_r none~get_xg~3 nurbs_surface%get_Xg program~example_ppm2->none~get_xg~3 proc~create~3 nurbs_surface%create program~example_ppm2->proc~create~3 proc~finalize~3 nurbs_surface%finalize program~example_ppm2->proc~finalize~3 proc~get_ng~3 nurbs_surface%get_ng program~example_ppm2->proc~get_ng~3 proc~rotate_xc~3 nurbs_surface%rotate_Xc program~example_ppm2->proc~rotate_xc~3 proc~set_half_ring~2 nurbs_surface%set_half_ring program~example_ppm2->proc~set_half_ring~2 proc~set_tetragon nurbs_surface%set_tetragon program~example_ppm2->proc~set_tetragon proc~translate_xc~3 nurbs_surface%translate_Xc program~example_ppm2->proc~translate_xc~3 set set program~example_ppm2->set set_pnm set_pnm program~example_ppm2->set_pnm timer_start timer_start program~example_ppm2->timer_start timer_stop timer_stop program~example_ppm2->timer_stop proc~get_xg_all~3 nurbs_surface%get_Xg_all none~get_xg~3->proc~get_xg_all~3 proc~get_xgid~3 nurbs_surface%get_Xgid none~get_xg~3->proc~get_xgid~3 proc~get_xgi~3 nurbs_surface%get_Xgi none~get_xg~3->proc~get_xgi~3 interface~compute_xg~3 compute_Xg proc~create~3->interface~compute_xg~3 interface~ndgrid ndgrid proc~create~3->interface~ndgrid proc~is_rational~3 nurbs_surface%is_rational proc~create~3->proc~is_rational~3 proc~rotation rotation proc~rotate_xc~3->proc~rotation none~set~3 nurbs_surface%set proc~set_half_ring~2->none~set~3 proc~set_tetragon->none~set~3 proc~tetragon_xc tetragon_Xc proc~set_tetragon->proc~tetragon_xc proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 ndgrid3 interface~ndgrid->proc~ndgrid3 proc~set1~3 nurbs_surface%set1 none~set~3->proc~set1~3 proc~set2~3 nurbs_surface%set2 none~set~3->proc~set2~3 proc~set3~3 nurbs_surface%set3 none~set~3->proc~set3~3 cosd cosd proc~rotation->cosd sind sind proc~rotation->sind proc~cmp_degree~3 nurbs_surface%cmp_degree proc~set1~3->proc~cmp_degree~3 proc~cmp_nc~3 nurbs_surface%cmp_nc proc~set1~3->proc~cmp_nc~3 proc~set2~3->proc~cmp_nc~3 proc~compute_knot_vector compute_knot_vector proc~set2~3->proc~compute_knot_vector proc~set3~3->proc~cmp_degree~3 proc~get_multiplicity~3 nurbs_surface%get_multiplicity proc~cmp_degree~3->proc~get_multiplicity~3 interface~compute_multiplicity compute_multiplicity proc~cmp_nc~3->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity~3->interface~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 :: Xg (:,:) real(kind=rk) :: aspect_ratio type(color) :: background_color integer :: blue real(kind=rk) :: center (3) type(colormap) :: cmap integer :: green integer :: height integer :: i integer, allocatable :: idx (:,:) type(format_pnm) :: image real(kind=rk) :: inner_radius integer :: ng (2) real(kind=rk) :: outer_radius integer(kind=ik), allocatable :: px (:,:) integer :: red integer :: res1 integer :: res2 type( nurbs_surface ) :: shape type(timer) :: t integer :: width real(kind=rk), allocatable :: z_values (:)","tags":"","loc":"program/example_ppm2.html"},{"title":"shape_half_ring_3d – ForCAD","text":"Uses forcad program~~shape_half_ring_3d~~UsesGraph program~shape_half_ring_3d shape_half_ring_3d module~forcad forcad program~shape_half_ring_3d->module~forcad 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_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. Set up a half ring centered at 0,0,0 with inner radius 1, outer radius 2, and length 1. Export the control points to a VTK file for visualization. Create the shape using the specified number of elements in each direction. Export the geometry to a VTK file for visualization. Show the control geometry and geometry using PyVista Finalize and clean up the shape object. Calls program~~shape_half_ring_3d~~CallsGraph program~shape_half_ring_3d shape_half_ring_3d proc~create nurbs_volume%create program~shape_half_ring_3d->proc~create proc~export_xc nurbs_volume%export_Xc program~shape_half_ring_3d->proc~export_xc proc~export_xg nurbs_volume%export_Xg program~shape_half_ring_3d->proc~export_xg proc~finalize nurbs_volume%finalize program~shape_half_ring_3d->proc~finalize proc~set_half_ring nurbs_volume%set_half_ring program~shape_half_ring_3d->proc~set_half_ring proc~show nurbs_volume%show program~shape_half_ring_3d->proc~show interface~compute_xg compute_Xg proc~create->interface~compute_xg interface~ndgrid ndgrid proc~create->interface~ndgrid proc~is_rational nurbs_volume%is_rational proc~create->proc~is_rational proc~cmp_elem_xc_vis nurbs_volume%cmp_elem_Xc_vis proc~export_xc->proc~cmp_elem_xc_vis proc~cmp_elem_xg_vis nurbs_volume%cmp_elem_Xg_vis proc~export_xg->proc~cmp_elem_xg_vis none~set nurbs_volume%set proc~set_half_ring->none~set proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 ndgrid3 interface~ndgrid->proc~ndgrid3 proc~set1 nurbs_volume%set1 none~set->proc~set1 proc~set2 nurbs_volume%set2 none~set->proc~set2 proc~set3 nurbs_volume%set3 none~set->proc~set3 interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xc_vis->interface~elemconn_c0 proc~cmp_elem_xg_vis->interface~elemconn_c0 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v proc~cmp_degree nurbs_volume%cmp_degree proc~set1->proc~cmp_degree proc~cmp_nc nurbs_volume%cmp_nc proc~set1->proc~cmp_nc proc~set2->proc~cmp_nc proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector proc~set3->proc~cmp_degree proc~get_multiplicity nurbs_volume%get_multiplicity proc~cmp_degree->proc~get_multiplicity interface~compute_multiplicity compute_multiplicity proc~cmp_nc->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity->interface~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 type( nurbs_volume ) :: shape","tags":"","loc":"program/shape_half_ring_3d.html"},{"title":"nearest_point_1d – ForCAD","text":"Uses forcad program~~nearest_point_1d~~UsesGraph program~nearest_point_1d nearest_point_1d module~forcad forcad program~nearest_point_1d->module~forcad 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_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. Define control points for the NURBS curve\nDefine weights for the control points (optional)\nDefine knot vector Set knot vector, control points, and weights for the NURBS curve object.\nWc is optional Generate the NURBS curve with a resolution of 20 Find the nearest point on the curve to a given point\nFind the nearest point on the curve to a given point\nThe optimization method is used to find the nearest point\nThe optimization method is based on the Newton-Raphson method\nFinalize the NURBS curve object Calls program~~nearest_point_1d~~CallsGraph program~nearest_point_1d nearest_point_1d none~set~2 nurbs_curve%set program~nearest_point_1d->none~set~2 proc~create~2 nurbs_curve%create program~nearest_point_1d->proc~create~2 proc~finalize~2 nurbs_curve%finalize program~nearest_point_1d->proc~finalize~2 proc~nearest_point2~2 nurbs_curve%nearest_point2 program~nearest_point_1d->proc~nearest_point2~2 proc~nearest_point~2 nurbs_curve%nearest_point program~nearest_point_1d->proc~nearest_point~2 proc~set1~2 nurbs_curve%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_curve%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_curve%set3 none~set~2->proc~set3~2 interface~compute_xg~2 compute_Xg proc~create~2->interface~compute_xg~2 proc~is_rational~2 nurbs_curve%is_rational proc~create~2->proc~is_rational~2 proc~nearest_point2~2->proc~create~2 proc~nearest_point2~2->proc~finalize~2 interface~nearest_point_help_1d nearest_point_help_1d proc~nearest_point2~2->interface~nearest_point_help_1d none~derivative2~2 nurbs_curve%derivative2 proc~nearest_point2~2->none~derivative2~2 proc~cmp_xg~2 nurbs_curve%cmp_Xg proc~nearest_point2~2->proc~cmp_xg~2 proc~nearest_point~2->interface~nearest_point_help_1d proc~derivative2_scalar~2 nurbs_curve%derivative2_scalar none~derivative2~2->proc~derivative2_scalar~2 proc~derivative2_vector~2 nurbs_curve%derivative2_vector none~derivative2~2->proc~derivative2_vector~2 proc~cmp_xg~2->interface~compute_xg~2 proc~cmp_xg~2->proc~is_rational~2 proc~cmp_degree~2 nurbs_curve%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~compute_knot_vector compute_knot_vector proc~set2~2->proc~compute_knot_vector proc~set3~2->proc~cmp_degree~2 proc~get_multiplicity~2 nurbs_curve%get_multiplicity proc~cmp_degree~2->proc~get_multiplicity~2 proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~derivative2_scalar~2->proc~is_rational~2 interface~compute_d2tgc~2 compute_d2Tgc proc~derivative2_scalar~2->interface~compute_d2tgc~2 proc~derivative2_vector~2->proc~is_rational~2 proc~derivative2_vector~2->interface~compute_d2tgc~2 interface~compute_multiplicity compute_multiplicity proc~get_multiplicity~2->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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 integer :: id Variable for the id of the nearest point real(kind=rk) :: knot (6) Array for knot vector real(kind=rk), allocatable :: nearest_Xg (:) Array for the nearest point on the curve real(kind=rk) :: nearest_Xt Array for the parametric coordinates of the nearest point type( nurbs_curve ) :: shape Declare a NURBS curve object","tags":"","loc":"program/nearest_point_1d.html"},{"title":"shape_circle – ForCAD","text":"Uses forcad program~~shape_circle~~UsesGraph program~shape_circle shape_circle module~forcad forcad program~shape_circle->module~forcad 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_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. Set a circle with radius 2.0 and center at [0.0, 0.0, 0.0] Export control points to a VTK file Generate the NURBS circle with a resolution of 100 Export the generated cirlce to a VTK file Show the control geometry and geometry using PyVista Finalize the NURBS curve object Calls program~~shape_circle~~CallsGraph program~shape_circle shape_circle proc~create~2 nurbs_curve%create program~shape_circle->proc~create~2 proc~export_xc~2 nurbs_curve%export_Xc program~shape_circle->proc~export_xc~2 proc~export_xg~2 nurbs_curve%export_Xg program~shape_circle->proc~export_xg~2 proc~finalize~2 nurbs_curve%finalize program~shape_circle->proc~finalize~2 proc~set_circle nurbs_curve%set_circle program~shape_circle->proc~set_circle proc~show~2 nurbs_curve%show program~shape_circle->proc~show~2 interface~compute_xg~2 compute_Xg proc~create~2->interface~compute_xg~2 proc~is_rational~2 nurbs_curve%is_rational proc~create~2->proc~is_rational~2 proc~cmp_elem_xc_vis~2 nurbs_curve%cmp_elem_Xc_vis proc~export_xc~2->proc~cmp_elem_xc_vis~2 proc~cmp_elem_xg_vis~2 nurbs_curve%cmp_elem_Xg_vis proc~export_xg~2->proc~cmp_elem_xg_vis~2 none~set~2 nurbs_curve%set proc~set_circle->none~set~2 proc~set1~2 nurbs_curve%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_curve%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_curve%set3 none~set~2->proc~set3~2 interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xc_vis~2->interface~elemconn_c0 proc~cmp_elem_xg_vis~2->interface~elemconn_c0 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v proc~cmp_degree~2 nurbs_curve%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~compute_knot_vector compute_knot_vector proc~set2~2->proc~compute_knot_vector proc~set3~2->proc~cmp_degree~2 proc~get_multiplicity~2 nurbs_curve%get_multiplicity proc~cmp_degree~2->proc~get_multiplicity~2 proc~repelem repelem proc~compute_knot_vector->proc~repelem interface~compute_multiplicity compute_multiplicity proc~get_multiplicity~2->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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 type( nurbs_curve ) :: shape","tags":"","loc":"program/shape_circle.html"},{"title":"example_ppm3 – ForCAD","text":"Uses forcad forcolormap fortime forimage program~~example_ppm3~~UsesGraph program~example_ppm3 example_ppm3 forcolormap forcolormap program~example_ppm3->forcolormap forimage forimage program~example_ppm3->forimage fortime fortime program~example_ppm3->fortime module~forcad forcad program~example_ppm3->module~forcad 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_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. Visualization of NURBS surfaces using ForCAD, ForImage and ForColorMap libraries\nThis example converts NURBS surfaces (vector) to an image (raster) using ForCAD, ForImage and ForColorMap libraries. Set the shape parameters for a tetragon Calls program~~example_ppm3~~CallsGraph program~example_ppm3 example_ppm3 compute_rgb compute_rgb program~example_ppm3->compute_rgb export_pnm export_pnm program~example_ppm3->export_pnm get_b get_b program~example_ppm3->get_b get_g get_g program~example_ppm3->get_g get_r get_r program~example_ppm3->get_r none~get_xg~3 nurbs_surface%get_Xg program~example_ppm3->none~get_xg~3 proc~create~3 nurbs_surface%create program~example_ppm3->proc~create~3 proc~finalize~3 nurbs_surface%finalize program~example_ppm3->proc~finalize~3 proc~get_ng~3 nurbs_surface%get_ng program~example_ppm3->proc~get_ng~3 proc~modify_xc~3 nurbs_surface%modify_Xc program~example_ppm3->proc~modify_xc~3 proc~set_tetragon nurbs_surface%set_tetragon program~example_ppm3->proc~set_tetragon proc~translate_xc~3 nurbs_surface%translate_Xc program~example_ppm3->proc~translate_xc~3 set set program~example_ppm3->set set_pnm set_pnm program~example_ppm3->set_pnm timer_start timer_start program~example_ppm3->timer_start timer_stop timer_stop program~example_ppm3->timer_stop proc~get_xg_all~3 nurbs_surface%get_Xg_all none~get_xg~3->proc~get_xg_all~3 proc~get_xgid~3 nurbs_surface%get_Xgid none~get_xg~3->proc~get_xgid~3 proc~get_xgi~3 nurbs_surface%get_Xgi none~get_xg~3->proc~get_xgi~3 interface~compute_xg~3 compute_Xg proc~create~3->interface~compute_xg~3 interface~ndgrid ndgrid proc~create~3->interface~ndgrid proc~is_rational~3 nurbs_surface%is_rational proc~create~3->proc~is_rational~3 none~get_knot~3 nurbs_surface%get_knot proc~modify_xc~3->none~get_knot~3 none~get_wc~3 nurbs_surface%get_Wc proc~modify_xc~3->none~get_wc~3 none~get_xc~3 nurbs_surface%get_Xc proc~modify_xc~3->none~get_xc~3 none~set~3 nurbs_surface%set proc~modify_xc~3->none~set~3 proc~set_tetragon->none~set~3 proc~tetragon_xc tetragon_Xc proc~set_tetragon->proc~tetragon_xc proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 ndgrid3 interface~ndgrid->proc~ndgrid3 proc~get_knot_all~3 nurbs_surface%get_knot_all none~get_knot~3->proc~get_knot_all~3 proc~get_knoti~3 nurbs_surface%get_knoti none~get_knot~3->proc~get_knoti~3 proc~get_wc_all~3 nurbs_surface%get_Wc_all none~get_wc~3->proc~get_wc_all~3 proc~get_wci~3 nurbs_surface%get_Wci none~get_wc~3->proc~get_wci~3 proc~get_xc_all~3 nurbs_surface%get_Xc_all none~get_xc~3->proc~get_xc_all~3 proc~get_xcid~3 nurbs_surface%get_Xcid none~get_xc~3->proc~get_xcid~3 proc~get_xci~3 nurbs_surface%get_Xci none~get_xc~3->proc~get_xci~3 proc~set1~3 nurbs_surface%set1 none~set~3->proc~set1~3 proc~set2~3 nurbs_surface%set2 none~set~3->proc~set2~3 proc~set3~3 nurbs_surface%set3 none~set~3->proc~set3~3 proc~cmp_degree~3 nurbs_surface%cmp_degree proc~set1~3->proc~cmp_degree~3 proc~cmp_nc~3 nurbs_surface%cmp_nc proc~set1~3->proc~cmp_nc~3 proc~set2~3->proc~cmp_nc~3 proc~compute_knot_vector compute_knot_vector proc~set2~3->proc~compute_knot_vector proc~set3~3->proc~cmp_degree~3 proc~get_multiplicity~3 nurbs_surface%get_multiplicity proc~cmp_degree~3->proc~get_multiplicity~3 interface~compute_multiplicity compute_multiplicity proc~cmp_nc~3->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity~3->interface~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 :: Xg (:,:) real(kind=rk) :: aspect_ratio type(color) :: background_color integer :: blue type(colormap) :: cmap integer :: green integer :: height integer :: i integer, allocatable :: idx (:,:) type(format_pnm) :: image integer :: ng (2) integer(kind=ik), allocatable :: px (:,:) integer :: red integer :: res1 integer :: res2 type( nurbs_surface ) :: shape type(timer) :: t integer :: width real(kind=rk), allocatable :: z_values (:)","tags":"","loc":"program/example_ppm3.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_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_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 volume object to create, and finalize a NURBS 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 NURBS volume Define weights for the control points Set control points and weights for the NURBS volume object Deallocate local arrays Export initial control points to a VTK file Generate the NURBS volume with a resolution of 15X15X15 Export the generated volume to a VTK file Show the control geometry and geometry using PyVista Finalize the NURBS volume object Calls program~~example_nurbs_volume~~CallsGraph program~example_nurbs_volume example_nurbs_volume none~set nurbs_volume%set program~example_nurbs_volume->none~set proc~create nurbs_volume%create program~example_nurbs_volume->proc~create proc~export_xc nurbs_volume%export_Xc program~example_nurbs_volume->proc~export_xc proc~export_xg nurbs_volume%export_Xg program~example_nurbs_volume->proc~export_xg proc~finalize nurbs_volume%finalize program~example_nurbs_volume->proc~finalize proc~generate_xc~5 generate_Xc program~example_nurbs_volume->proc~generate_xc~5 proc~show nurbs_volume%show program~example_nurbs_volume->proc~show proc~set1 nurbs_volume%set1 none~set->proc~set1 proc~set2 nurbs_volume%set2 none~set->proc~set2 proc~set3 nurbs_volume%set3 none~set->proc~set3 interface~compute_xg compute_Xg proc~create->interface~compute_xg interface~ndgrid ndgrid proc~create->interface~ndgrid proc~is_rational nurbs_volume%is_rational proc~create->proc~is_rational proc~cmp_elem_xc_vis nurbs_volume%cmp_elem_Xc_vis proc~export_xc->proc~cmp_elem_xc_vis proc~cmp_elem_xg_vis nurbs_volume%cmp_elem_Xg_vis proc~export_xg->proc~cmp_elem_xg_vis proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 ndgrid3 interface~ndgrid->proc~ndgrid3 interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xc_vis->interface~elemconn_c0 proc~cmp_elem_xg_vis->interface~elemconn_c0 proc~cmp_degree nurbs_volume%cmp_degree proc~set1->proc~cmp_degree proc~cmp_nc nurbs_volume%cmp_nc proc~set1->proc~cmp_nc proc~set2->proc~cmp_nc proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector proc~set3->proc~cmp_degree proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v proc~get_multiplicity nurbs_volume%get_multiplicity proc~cmp_degree->proc~get_multiplicity interface~compute_multiplicity compute_multiplicity proc~cmp_nc->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity->interface~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 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), 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 !----------------------------------------------------------------------------- ! Setting up the NURBS volume !----------------------------------------------------------------------------- !> Define control points for the NURBS 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 NURBS volume object call nurbs % set ([ 2 , 2 , 2 ], Xc , Wc ) !> Deallocate local arrays deallocate ( Xc , Wc ) !> Export initial control points to a VTK file call nurbs % export_Xc ( 'vtk/demo_volume_Xc.vtk' ) !----------------------------------------------------------------------------- ! Creating the NURBS volume !----------------------------------------------------------------------------- !> Generate the NURBS volume with a resolution of 15X15X15 call nurbs % create ( 15 , 15 , 15 ) !> Export the generated volume to a VTK file call nurbs % export_Xg ( 'vtk/demo_volume_Xg.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call nurbs % show ( 'vtk/demo_volume_Xc.vtk' , 'vtk/demo_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 ), 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":"shape_ring_3d – ForCAD","text":"Uses forcad program~~shape_ring_3d~~UsesGraph program~shape_ring_3d shape_ring_3d module~forcad forcad program~shape_ring_3d->module~forcad 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_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. Set up a ring shape centered at 0,0,0 with inner radius 1, outer radius 2, and length 1. Export the control points to a VTK file for visualization. Create the shape using the specified number of elements in each direction. Export the geometry to a VTK file for visualization. Show the control geometry and geometry using PyVista Finalize and clean up the shape object. Calls program~~shape_ring_3d~~CallsGraph program~shape_ring_3d shape_ring_3d proc~create nurbs_volume%create program~shape_ring_3d->proc~create proc~export_xc nurbs_volume%export_Xc program~shape_ring_3d->proc~export_xc proc~export_xg nurbs_volume%export_Xg program~shape_ring_3d->proc~export_xg proc~finalize nurbs_volume%finalize program~shape_ring_3d->proc~finalize proc~set_ring nurbs_volume%set_ring program~shape_ring_3d->proc~set_ring proc~show nurbs_volume%show program~shape_ring_3d->proc~show interface~compute_xg compute_Xg proc~create->interface~compute_xg interface~ndgrid ndgrid proc~create->interface~ndgrid proc~is_rational nurbs_volume%is_rational proc~create->proc~is_rational proc~cmp_elem_xc_vis nurbs_volume%cmp_elem_Xc_vis proc~export_xc->proc~cmp_elem_xc_vis proc~cmp_elem_xg_vis nurbs_volume%cmp_elem_Xg_vis proc~export_xg->proc~cmp_elem_xg_vis none~set nurbs_volume%set proc~set_ring->none~set proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 ndgrid3 interface~ndgrid->proc~ndgrid3 proc~set1 nurbs_volume%set1 none~set->proc~set1 proc~set2 nurbs_volume%set2 none~set->proc~set2 proc~set3 nurbs_volume%set3 none~set->proc~set3 interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xc_vis->interface~elemconn_c0 proc~cmp_elem_xg_vis->interface~elemconn_c0 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v proc~cmp_degree nurbs_volume%cmp_degree proc~set1->proc~cmp_degree proc~cmp_nc nurbs_volume%cmp_nc proc~set1->proc~cmp_nc proc~set2->proc~cmp_nc proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector proc~set3->proc~cmp_degree proc~get_multiplicity nurbs_volume%get_multiplicity proc~cmp_degree->proc~get_multiplicity interface~compute_multiplicity compute_multiplicity proc~cmp_nc->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity->interface~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 type( nurbs_volume ) :: shape","tags":"","loc":"program/shape_ring_3d.html"},{"title":"nearest_point_3d – ForCAD","text":"Uses forcad program~~nearest_point_3d~~UsesGraph program~nearest_point_3d nearest_point_3d module~forcad forcad program~nearest_point_3d->module~forcad 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_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. The weights of the control points (Wc) are optional. Generate the NURBS volume with resolutions of 20, 20, 20 Find the nearest point on the volume to a given point\nFind the nearest point on the volume to a given point\nThe optimization method is used to find the nearest point\nThe optimization method is based on the Newton-Raphson method\nFinalize the NURBS volume object Calls program~~nearest_point_3d~~CallsGraph program~nearest_point_3d nearest_point_3d none~set nurbs_volume%set program~nearest_point_3d->none~set proc~create nurbs_volume%create program~nearest_point_3d->proc~create proc~finalize nurbs_volume%finalize program~nearest_point_3d->proc~finalize proc~nearest_point nurbs_volume%nearest_point program~nearest_point_3d->proc~nearest_point proc~nearest_point2 nurbs_volume%nearest_point2 program~nearest_point_3d->proc~nearest_point2 proc~set1 nurbs_volume%set1 none~set->proc~set1 proc~set2 nurbs_volume%set2 none~set->proc~set2 proc~set3 nurbs_volume%set3 none~set->proc~set3 interface~compute_xg compute_Xg proc~create->interface~compute_xg interface~ndgrid ndgrid proc~create->interface~ndgrid proc~is_rational nurbs_volume%is_rational proc~create->proc~is_rational interface~nearest_point_help_3d nearest_point_help_3d proc~nearest_point->interface~nearest_point_help_3d proc~nearest_point2->proc~create proc~nearest_point2->proc~finalize proc~nearest_point2->interface~nearest_point_help_3d none~derivative2 nurbs_volume%derivative2 proc~nearest_point2->none~derivative2 proc~cmp_xg nurbs_volume%cmp_Xg proc~nearest_point2->proc~cmp_xg proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 ndgrid3 interface~ndgrid->proc~ndgrid3 proc~derivative2_scalar nurbs_volume%derivative2_scalar none~derivative2->proc~derivative2_scalar proc~derivative2_vector nurbs_volume%derivative2_vector none~derivative2->proc~derivative2_vector proc~cmp_xg->interface~compute_xg proc~cmp_xg->proc~is_rational proc~cmp_degree nurbs_volume%cmp_degree proc~set1->proc~cmp_degree proc~cmp_nc nurbs_volume%cmp_nc proc~set1->proc~cmp_nc proc~set2->proc~cmp_nc proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector proc~set3->proc~cmp_degree proc~get_multiplicity nurbs_volume%get_multiplicity proc~cmp_degree->proc~get_multiplicity interface~compute_multiplicity compute_multiplicity proc~cmp_nc->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~derivative2_scalar->proc~is_rational interface~compute_d2tgc compute_d2Tgc proc~derivative2_scalar->interface~compute_d2tgc proc~derivative2_vector->interface~ndgrid proc~derivative2_vector->proc~is_rational proc~derivative2_vector->interface~compute_d2tgc proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity->interface~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) :: Wc (8) Weights of the control points real(kind=rk) :: Xc (8,3) Control points integer :: id id of the nearest point real(kind=rk), allocatable :: nearest_Xg (:) Coordinates of the nearest point on the volume real(kind=rk), allocatable :: nearest_Xt (:) Corresponding parametric coordinates of the nearest point type( nurbs_volume ) :: shape Declare a NURBS volume object","tags":"","loc":"program/nearest_point_3d.html"},{"title":"example_ppm1 – ForCAD","text":"Uses forcad forcolormap fortime forimage program~~example_ppm1~~UsesGraph program~example_ppm1 example_ppm1 forcolormap forcolormap program~example_ppm1->forcolormap forimage forimage program~example_ppm1->forimage fortime fortime program~example_ppm1->fortime module~forcad forcad program~example_ppm1->module~forcad 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_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. Visualization of NURBS surfaces using ForCAD, ForImage and ForColorMap libraries\nThis example converts NURBS surfaces (vector) to an image (raster) using ForCAD, ForImage and ForColorMap libraries. Set the shape parameters for a tetragon\nSet the shape parameters for a ring\nSet the shape parameters for a ring\nSet the shape parameters for a ring\nSet the shape parameters for a ring Calls program~~example_ppm1~~CallsGraph program~example_ppm1 example_ppm1 compute_rgb compute_rgb program~example_ppm1->compute_rgb export_pnm export_pnm program~example_ppm1->export_pnm get_b get_b program~example_ppm1->get_b get_g get_g program~example_ppm1->get_g get_r get_r program~example_ppm1->get_r none~get_xg~3 nurbs_surface%get_Xg program~example_ppm1->none~get_xg~3 proc~create~3 nurbs_surface%create program~example_ppm1->proc~create~3 proc~finalize~3 nurbs_surface%finalize program~example_ppm1->proc~finalize~3 proc~get_ng~3 nurbs_surface%get_ng program~example_ppm1->proc~get_ng~3 proc~set_ring~2 nurbs_surface%set_ring program~example_ppm1->proc~set_ring~2 proc~set_tetragon nurbs_surface%set_tetragon program~example_ppm1->proc~set_tetragon set set program~example_ppm1->set set_pnm set_pnm program~example_ppm1->set_pnm timer_start timer_start program~example_ppm1->timer_start timer_stop timer_stop program~example_ppm1->timer_stop proc~get_xg_all~3 nurbs_surface%get_Xg_all none~get_xg~3->proc~get_xg_all~3 proc~get_xgid~3 nurbs_surface%get_Xgid none~get_xg~3->proc~get_xgid~3 proc~get_xgi~3 nurbs_surface%get_Xgi none~get_xg~3->proc~get_xgi~3 interface~compute_xg~3 compute_Xg proc~create~3->interface~compute_xg~3 interface~ndgrid ndgrid proc~create~3->interface~ndgrid proc~is_rational~3 nurbs_surface%is_rational proc~create~3->proc~is_rational~3 none~set~3 nurbs_surface%set proc~set_ring~2->none~set~3 proc~set_tetragon->none~set~3 proc~tetragon_xc tetragon_Xc proc~set_tetragon->proc~tetragon_xc proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 ndgrid3 interface~ndgrid->proc~ndgrid3 proc~set1~3 nurbs_surface%set1 none~set~3->proc~set1~3 proc~set2~3 nurbs_surface%set2 none~set~3->proc~set2~3 proc~set3~3 nurbs_surface%set3 none~set~3->proc~set3~3 proc~cmp_degree~3 nurbs_surface%cmp_degree proc~set1~3->proc~cmp_degree~3 proc~cmp_nc~3 nurbs_surface%cmp_nc proc~set1~3->proc~cmp_nc~3 proc~set2~3->proc~cmp_nc~3 proc~compute_knot_vector compute_knot_vector proc~set2~3->proc~compute_knot_vector proc~set3~3->proc~cmp_degree~3 proc~get_multiplicity~3 nurbs_surface%get_multiplicity proc~cmp_degree~3->proc~get_multiplicity~3 interface~compute_multiplicity compute_multiplicity proc~cmp_nc~3->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity~3->interface~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 :: Xg (:,:) real(kind=rk) :: aspect_ratio type(color) :: background_color integer :: blue real(kind=rk) :: center (3) type(colormap) :: cmap integer :: green integer :: height integer :: i integer, allocatable :: idx (:,:) type(format_pnm) :: image real(kind=rk) :: inner_radius integer :: ng (2) real(kind=rk) :: outer_radius integer(kind=ik), allocatable :: px (:,:) integer :: red integer :: res1 integer :: res2 type( nurbs_surface ) :: shape type(timer) :: t integer :: width real(kind=rk), allocatable :: z_values (:)","tags":"","loc":"program/example_ppm1.html"},{"title":"nearest_point_2d – ForCAD","text":"Uses forcad program~~nearest_point_2d~~UsesGraph program~nearest_point_2d nearest_point_2d module~forcad forcad program~nearest_point_2d->module~forcad 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_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. Set a surface with 4 control points\nThe weights of the control points (Wc) are optional. Generate the NURBS surface with resolutions of 30 in both dimensions Find the nearest point on the surface to a given point\nFind the nearest point on the surface to a given point\nThe optimization method is used to find the nearest point\nThe optimization method is based on the Newton-Raphson method\nFinalize the NURBS surface object Calls program~~nearest_point_2d~~CallsGraph program~nearest_point_2d nearest_point_2d none~set~3 nurbs_surface%set program~nearest_point_2d->none~set~3 proc~create~3 nurbs_surface%create program~nearest_point_2d->proc~create~3 proc~finalize~3 nurbs_surface%finalize program~nearest_point_2d->proc~finalize~3 proc~nearest_point2~3 nurbs_surface%nearest_point2 program~nearest_point_2d->proc~nearest_point2~3 proc~nearest_point~3 nurbs_surface%nearest_point program~nearest_point_2d->proc~nearest_point~3 proc~set1~3 nurbs_surface%set1 none~set~3->proc~set1~3 proc~set2~3 nurbs_surface%set2 none~set~3->proc~set2~3 proc~set3~3 nurbs_surface%set3 none~set~3->proc~set3~3 interface~compute_xg~3 compute_Xg proc~create~3->interface~compute_xg~3 interface~ndgrid ndgrid proc~create~3->interface~ndgrid proc~is_rational~3 nurbs_surface%is_rational proc~create~3->proc~is_rational~3 proc~nearest_point2~3->proc~create~3 proc~nearest_point2~3->proc~finalize~3 interface~nearest_point_help_2d nearest_point_help_2d proc~nearest_point2~3->interface~nearest_point_help_2d none~derivative2~3 nurbs_surface%derivative2 proc~nearest_point2~3->none~derivative2~3 proc~cmp_xg~3 nurbs_surface%cmp_Xg proc~nearest_point2~3->proc~cmp_xg~3 proc~nearest_point~3->interface~nearest_point_help_2d proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 ndgrid3 interface~ndgrid->proc~ndgrid3 proc~derivative2_scalar~3 nurbs_surface%derivative2_scalar none~derivative2~3->proc~derivative2_scalar~3 proc~derivative2_vector~3 nurbs_surface%derivative2_vector none~derivative2~3->proc~derivative2_vector~3 proc~cmp_xg~3->interface~compute_xg~3 proc~cmp_xg~3->proc~is_rational~3 proc~cmp_degree~3 nurbs_surface%cmp_degree proc~set1~3->proc~cmp_degree~3 proc~cmp_nc~3 nurbs_surface%cmp_nc proc~set1~3->proc~cmp_nc~3 proc~set2~3->proc~cmp_nc~3 proc~compute_knot_vector compute_knot_vector proc~set2~3->proc~compute_knot_vector proc~set3~3->proc~cmp_degree~3 proc~get_multiplicity~3 nurbs_surface%get_multiplicity proc~cmp_degree~3->proc~get_multiplicity~3 interface~compute_multiplicity compute_multiplicity proc~cmp_nc~3->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~derivative2_scalar~3->proc~is_rational~3 interface~compute_d2tgc~3 compute_d2Tgc proc~derivative2_scalar~3->interface~compute_d2tgc~3 proc~derivative2_vector~3->interface~ndgrid proc~derivative2_vector~3->proc~is_rational~3 proc~derivative2_vector~3->interface~compute_d2tgc~3 proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity~3->interface~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) :: Wc (4) Weights of the control points real(kind=rk) :: Xc (4,3) Control points integer :: id id of the nearest point real(kind=rk), allocatable :: nearest_Xg (:) Coordinates of the nearest point on the surface real(kind=rk), allocatable :: nearest_Xt (:) Corresponding parametric coordinates of the nearest point type( nurbs_surface ) :: shape Declare a NURBS surface object","tags":"","loc":"program/nearest_point_2d.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~demo_curve.f90 demo_curve.f90 sourcefile~demo_curve.f90->sourcefile~forcad.f90 sourcefile~demo_surface.f90 demo_surface.f90 sourcefile~demo_surface.f90->sourcefile~forcad.f90 sourcefile~demo_volume.f90 demo_volume.f90 sourcefile~demo_volume.f90->sourcefile~forcad.f90 sourcefile~example_curve_1.f90 example_curve_1.f90 sourcefile~example_curve_1.f90->sourcefile~forcad.f90 sourcefile~example_ppm1.f90 example_ppm1.f90 sourcefile~example_ppm1.f90->sourcefile~forcad.f90 sourcefile~example_ppm2.f90 example_ppm2.f90 sourcefile~example_ppm2.f90->sourcefile~forcad.f90 sourcefile~example_ppm3.f90 example_ppm3.f90 sourcefile~example_ppm3.f90->sourcefile~forcad.f90 sourcefile~example_surface_1.f90 example_surface_1.f90 sourcefile~example_surface_1.f90->sourcefile~forcad.f90 sourcefile~example_volume_1.f90 example_volume_1.f90 sourcefile~example_volume_1.f90->sourcefile~forcad.f90 sourcefile~nearest_point_1d.f90 nearest_point_1d.f90 sourcefile~nearest_point_1d.f90->sourcefile~forcad.f90 sourcefile~nearest_point_2d.f90 nearest_point_2d.f90 sourcefile~nearest_point_2d.f90->sourcefile~forcad.f90 sourcefile~nearest_point_2d_bench.f90 nearest_point_2d_bench.f90 sourcefile~nearest_point_2d_bench.f90->sourcefile~forcad.f90 sourcefile~nearest_point_3d.f90 nearest_point_3d.f90 sourcefile~nearest_point_3d.f90->sourcefile~forcad.f90 sourcefile~put_to_nurbs.f90 put_to_nurbs.f90 sourcefile~put_to_nurbs.f90->sourcefile~forcad.f90 sourcefile~shape_c_1d.f90 shape_C_1d.f90 sourcefile~shape_c_1d.f90->sourcefile~forcad.f90 sourcefile~shape_c_2d.f90 shape_C_2d.f90 sourcefile~shape_c_2d.f90->sourcefile~forcad.f90 sourcefile~shape_c_3d.f90 shape_C_3d.f90 sourcefile~shape_c_3d.f90->sourcefile~forcad.f90 sourcefile~shape_circle.f90 shape_circle.f90 sourcefile~shape_circle.f90->sourcefile~forcad.f90 sourcefile~shape_half_circle.f90 shape_half_circle.f90 sourcefile~shape_half_circle.f90->sourcefile~forcad.f90 sourcefile~shape_half_ring_2d.f90 shape_half_ring_2d.f90 sourcefile~shape_half_ring_2d.f90->sourcefile~forcad.f90 sourcefile~shape_half_ring_3d.f90 shape_half_ring_3d.f90 sourcefile~shape_half_ring_3d.f90->sourcefile~forcad.f90 sourcefile~shape_hexahedron.f90 shape_hexahedron.f90 sourcefile~shape_hexahedron.f90->sourcefile~forcad.f90 sourcefile~shape_ring_2d.f90 shape_ring_2d.f90 sourcefile~shape_ring_2d.f90->sourcefile~forcad.f90 sourcefile~shape_ring_3d.f90 shape_ring_3d.f90 sourcefile~shape_ring_3d.f90->sourcefile~forcad.f90 sourcefile~shape_tetragon.f90 shape_tetragon.f90 sourcefile~shape_tetragon.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 !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> This module defines the 'nurbs_volume' type for representing a Non-Uniform Rational B-Spline (NURBS) volume. module forcad_nurbs_volume use forcad_utils , only : rk , basis_bspline , elemConn_C0 , kron , ndgrid , compute_multiplicity , compute_knot_vector , & basis_bspline_der , insert_knot_A_5_1 , findspan , elevate_degree_A_5_9 , hexahedron_Xc , remove_knots_A_5_8 , & elemConn_Cn , unique , rotation implicit none private public nurbs_volume !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause type nurbs_volume real ( rk ), allocatable , private :: Xc (:,:) !! Control points (2D array: [nc(1)*nc(2)*nc(3), dim]) real ( rk ), allocatable , private :: Xg (:,:) !! Geometry points (2D array: [ng(1)*ng(2)*ng(3), dim]) real ( rk ), allocatable , private :: Wc (:) !! Weights for the control points (1D array: [nc(1)*nc(2)*nc(3)]) real ( rk ), allocatable , private :: Xt1 (:) !! Evaluation parameter values in the first direction (1D array: [ng(1)]) real ( rk ), allocatable , private :: Xt2 (:) !! Evaluation parameter values in the second direction (1D array: [ng(2)]) real ( rk ), allocatable , private :: Xt3 (:) !! Evaluation parameter values in the third direction (1D array: [ng(3)]) real ( rk ), allocatable , private :: Xt (:,:) !! Evaluation parameter values (2D array: [ng(1)*ng(2)*ng(3), dim] real ( rk ), allocatable , private :: knot1 (:) !! Knot vector in the first direction (1D array) real ( rk ), allocatable , private :: knot2 (:) !! Knot vector in the second direction (1D array) real ( rk ), allocatable , private :: knot3 (:) !! Knot vector in the third direction (1D array) integer , private :: degree ( 3 ) !! Degree (order) of the volume integer , private :: nc ( 3 ) !! Number of control points in each direction integer , private :: ng ( 3 ) !! Number of geometry points in each direction integer , allocatable , private :: elemConn_Xc_vis (:,:) !! Connectivity for visualization of control points integer , allocatable , private :: elemConn_Xg_vis (:,:) !! Connectivity for visualization of geometry points integer , allocatable , private :: elemConn (:,:) !! IGA element connectivity contains procedure :: set1 !!> Set knot vectors, control points and weights for the NURBS volume object procedure :: set2 !!> Set NURBS volume using nodes of parameter space, degree, continuity, control points and weights procedure :: set3 !!> Set Bezier or Rational Bezier volume using control points and weights generic :: set => set1 , set2 , set3 !!> Set NURBS volume procedure :: create !!> Generate geometry points procedure :: cmp_Xg !!> Compute geometry points procedure , private :: get_Xc_all !!> Get all control points procedure , private :: get_Xci !!> Get i-th control point procedure , private :: get_Xcid !!> Get i-th control point in a specific direction generic :: get_Xc => get_Xc_all , get_Xci , get_Xcid !!> Get control points procedure , private :: get_Xg_all !!> Get all geometry points procedure , private :: get_Xgi !!> Get i-th geometry point procedure , private :: get_Xgid !!> Get i-th geometry point in a specific direction generic :: get_Xg => get_Xg_all , get_Xgi , get_Xgid !!> Get geometry points procedure , private :: get_Wc_all !!> Get all weights procedure , private :: get_Wci !!> Get i-th weight generic :: get_Wc => get_Wc_all , get_Wci !!> Get weights procedure :: get_Xt !!> Get parameter values procedure , private :: get_knot_all !!> Get all knot vectors procedure , private :: get_knoti !!> Get i-th knot value generic :: get_knot => get_knoti , get_knot_all !!> Get knot vector procedure :: get_ng !!> Get number of geometry points procedure :: cmp_degree !!> Compute degree of the NURBS volume procedure , private :: get_degree_all !!> Get degree of the NURBS volume in all directions procedure , private :: get_degree_dir !!> Get degree of the NURBS volume in a specific direction generic :: get_degree => get_degree_all , get_degree_dir !!> Get degree of the NURBS volume procedure :: finalize !!> Finalize the NURBS volume object procedure :: cmp_elem_Xc_vis !!> Generate connectivity for control points procedure :: cmp_elem_Xg_vis !!> Generate connectivity for geometry points procedure :: cmp_elem !!> Generate IGA element connectivity procedure :: get_elem_Xc_vis !!> Get connectivity for control points procedure :: get_elem_Xg_vis !!> Get connectivity for geometry points procedure :: get_elem !!> Get IGA element connectivity procedure :: set_elem_Xc_vis !!> Set connectivity for control points procedure :: set_elem_Xg_vis !!> Set connectivity for geometry points procedure :: set_elem !!> Set IGA element connectivity 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 !!> Compute and return the multiplicity of the knots procedure :: get_continuity !!> Compute and return the continuity of the NURBS volume procedure :: cmp_nc !!> Compute number of required control points procedure , private :: basis_vector !!> Compute the basis functions of the NURBS volume procedure , private :: basis_scalar !!> Compute the basis functions of the NURBS volume generic :: basis => basis_vector , basis_scalar !!> Compute the basis functions of the NURBS volume procedure , private :: derivative_vector !!> Compute the derivative of the NURBS volume procedure , private :: derivative_scalar !!> Compute the derivative of the NURBS volume generic :: derivative => derivative_vector , derivative_scalar !!> Compute the derivative of the NURBS volume procedure , private :: derivative2_vector !!> Compute the second derivative of the NURBS volume procedure , private :: derivative2_scalar !!> Compute the second derivative of the NURBS volume generic :: derivative2 => derivative2_vector , derivative2_scalar !!> Compute the second derivative of the NURBS volume procedure :: insert_knots !!> Insert knots into the knot vector procedure :: elevate_degree !!> Elevate the degree of the NURBS volume procedure :: is_rational !!> Check if the NURBS volume is rational procedure :: put_to_nurbs !!> Put a shape to a NURBS volume procedure :: remove_knots !!> Remove knots from the knot vector procedure :: rotate_Xc !!> Rotate control points procedure :: rotate_Xg !!> Rotate geometry points procedure :: translate_Xc !!> Translate control points procedure :: translate_Xg !!> Translate geometry points procedure :: show !!> Show the NURBS object using PyVista procedure :: nearest_point !!> Find the nearest point on the NURBS volume (Approximation) procedure :: nearest_point2 !!> Find the nearest point on the NURBS volume (Minimization - Newton's method) ! Faces procedure :: cmp_elemFace_Xc_vis !!> Compute faces of the control points procedure :: cmp_elemFace_Xg_vis !!> Compute faces of the geometry points procedure :: cmp_elemFace !!> Compute faces of the IGA elements procedure :: cmp_degreeFace !!> Compute degrees of the faces ! Shapes procedure :: set_hexahedron !!> Set a hexahedron procedure :: set_ring !!> Set a ring procedure :: set_half_ring !!> Set a half ring procedure :: set_C !!> Set a C-shape end type !=============================================================================== interface compute_Xg pure function compute_Xg_nurbs_3d ( f_Xt , f_knot1 , f_knot2 , f_knot3 , f_degree , f_nc , f_ng , f_Xc , f_Wc ) result ( f_Xg ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:,:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:), f_knot3 (:) integer , intent ( in ) :: f_degree ( 3 ) integer , intent ( in ) :: f_nc ( 3 ) integer , intent ( in ) :: f_ng ( 3 ) real ( rk ), intent ( in ), contiguous :: f_Xc (:,:) real ( rk ), intent ( in ), contiguous :: f_Wc (:) real ( rk ), allocatable :: f_Xg (:,:) end function pure function compute_Xg_bspline_3d ( f_Xt , f_knot1 , f_knot2 , f_knot3 , f_degree , f_nc , f_ng , f_Xc ) result ( f_Xg ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:,:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:), f_knot3 (:) integer , intent ( in ) :: f_degree ( 3 ) integer , intent ( in ) :: f_nc ( 3 ) integer , intent ( in ) :: f_ng ( 3 ) real ( rk ), intent ( in ), contiguous :: f_Xc (:,:) real ( rk ), allocatable :: f_Xg (:,:) end function pure function compute_Xg_nurbs_3d_1point ( f_Xt , f_knot1 , f_knot2 , f_knot3 , f_degree , f_nc , f_Xc , f_Wc ) result ( f_Xg ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:), f_knot3 (:) integer , intent ( in ) :: f_degree ( 3 ) integer , intent ( in ) :: f_nc ( 3 ) real ( rk ), intent ( in ), contiguous :: f_Xc (:,:) real ( rk ), intent ( in ), contiguous :: f_Wc (:) real ( rk ), allocatable :: f_Xg (:) end function pure function compute_Xg_bspline_3d_1point ( f_Xt , f_knot1 , f_knot2 , f_knot3 , f_degree , f_nc , f_Xc ) result ( f_Xg ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:), f_knot3 (:) integer , intent ( in ) :: f_degree ( 3 ) integer , intent ( in ) :: f_nc ( 3 ) real ( rk ), intent ( in ), contiguous :: f_Xc (:,:) real ( rk ), allocatable :: f_Xg (:) end function end interface interface compute_dTgc pure subroutine compute_dTgc_nurbs_3d_vector ( f_Xt , f_knot1 , f_knot2 , f_knot3 , f_degree , f_nc , f_ng , f_Wc , f_dTgc , f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:,:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:), f_knot3 (:) integer , intent ( in ) :: f_degree ( 3 ) integer , intent ( in ) :: f_nc ( 3 ) integer , intent ( in ) :: f_ng ( 3 ) real ( rk ), intent ( in ), contiguous :: f_Wc (:) real ( rk ), allocatable , intent ( out ) :: f_dTgc (:,:,:) real ( rk ), allocatable , intent ( out ) :: f_Tgc (:,:) end subroutine pure subroutine compute_dTgc_bspline_3d_vector ( f_Xt , f_knot1 , f_knot2 , f_knot3 , f_degree , f_nc , f_ng , f_dTgc , f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:,:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:), f_knot3 (:) integer , intent ( in ) :: f_degree ( 3 ) integer , intent ( in ) :: f_nc ( 3 ) integer , intent ( in ) :: f_ng ( 3 ) real ( rk ), allocatable , intent ( out ) :: f_dTgc (:,:,:) real ( rk ), allocatable , intent ( out ) :: f_Tgc (:,:) end subroutine pure subroutine compute_dTgc_nurbs_3d_scalar ( f_Xt , f_knot1 , f_knot2 , f_knot3 , f_degree , f_nc , f_Wc , f_dTgc , f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:), f_knot3 (:) integer , intent ( in ) :: f_degree ( 3 ) integer , intent ( in ) :: f_nc ( 3 ) real ( rk ), intent ( in ), contiguous :: f_Wc (:) real ( rk ), allocatable , intent ( out ) :: f_dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: f_Tgc (:) end subroutine pure subroutine compute_dTgc_bspline_3d_scalar ( f_Xt , f_knot1 , f_knot2 , f_knot3 , f_degree , f_nc , f_dTgc , f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:), f_knot3 (:) integer , intent ( in ) :: f_degree ( 3 ) integer , intent ( in ) :: f_nc ( 3 ) real ( rk ), allocatable , intent ( out ) :: f_dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: f_Tgc (:) end subroutine end interface interface compute_d2Tgc pure subroutine compute_d2Tgc_nurbs_3d_vector (& f_Xt , f_knot1 , f_knot2 , f_knot3 , f_degree , f_nc , f_ng , f_Wc , f_d2Tgc , f_dTgc , f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:,:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:), f_knot3 (:) integer , intent ( in ) :: f_degree ( 3 ) integer , intent ( in ) :: f_nc ( 3 ) integer , intent ( in ) :: f_ng ( 3 ) real ( rk ), intent ( in ), contiguous :: f_Wc (:) real ( rk ), allocatable , intent ( out ) :: f_d2Tgc (:,:,:) real ( rk ), allocatable , intent ( out ) :: f_dTgc (:,:,:) real ( rk ), allocatable , intent ( out ) :: f_Tgc (:,:) end subroutine pure subroutine compute_d2Tgc_bspline_3d_vector (& f_Xt , f_knot1 , f_knot2 , f_knot3 , f_degree , f_nc , f_ng , f_d2Tgc , f_dTgc , f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:,:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:), f_knot3 (:) integer , intent ( in ) :: f_degree ( 3 ) integer , intent ( in ) :: f_nc ( 3 ) integer , intent ( in ) :: f_ng ( 3 ) real ( rk ), allocatable , intent ( out ) :: f_d2Tgc (:,:,:) real ( rk ), allocatable , intent ( out ) :: f_dTgc (:,:,:) real ( rk ), allocatable , intent ( out ) :: f_Tgc (:,:) end subroutine pure subroutine compute_d2Tgc_nurbs_3d_scalar ( f_Xt , f_knot1 , f_knot2 , f_knot3 , f_degree , f_nc , f_Wc , f_d2Tgc , f_dTgc , f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:), f_knot3 (:) integer , intent ( in ) :: f_degree ( 3 ) integer , intent ( in ) :: f_nc ( 3 ) real ( rk ), intent ( in ), contiguous :: f_Wc (:) real ( rk ), allocatable , intent ( out ) :: f_d2Tgc (:,:) real ( rk ), allocatable , intent ( out ) :: f_dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: f_Tgc (:) end subroutine pure subroutine compute_d2Tgc_bspline_3d_scalar ( f_Xt , f_knot1 , f_knot2 , f_knot3 , f_degree , f_nc , f_d2Tgc , f_dTgc , f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:), f_knot3 (:) integer , intent ( in ) :: f_degree ( 3 ) integer , intent ( in ) :: f_nc ( 3 ) real ( rk ), allocatable , intent ( out ) :: f_d2Tgc (:,:) real ( rk ), allocatable , intent ( out ) :: f_dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: f_Tgc (:) end subroutine end interface interface compute_Tgc pure function compute_Tgc_nurbs_3d_vector ( f_Xt , f_knot1 , f_knot2 , f_knot3 , f_degree , f_nc , f_ng , f_Wc ) result ( f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:,:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:), f_knot3 (:) integer , intent ( in ) :: f_degree ( 3 ) integer , intent ( in ) :: f_nc ( 3 ) integer , intent ( in ) :: f_ng ( 3 ) real ( rk ), intent ( in ), contiguous :: f_Wc (:) real ( rk ), allocatable :: f_Tgc (:,:) end function pure function compute_Tgc_bspline_3d_vector ( f_Xt , f_knot1 , f_knot2 , f_knot3 , f_degree , f_nc , f_ng ) result ( f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:,:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:), f_knot3 (:) integer , intent ( in ) :: f_degree ( 3 ) integer , intent ( in ) :: f_nc ( 3 ) integer , intent ( in ) :: f_ng ( 3 ) real ( rk ), allocatable :: f_Tgc (:,:) end function pure function compute_Tgc_nurbs_3d_scalar ( f_Xt , f_knot1 , f_knot2 , f_knot3 , f_degree , f_nc , f_Wc ) result ( f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:), f_knot3 (:) integer , intent ( in ) :: f_degree ( 3 ) integer , intent ( in ) :: f_nc ( 3 ) real ( rk ), intent ( in ), contiguous :: f_Wc (:) real ( rk ), allocatable :: f_Tgc (:) end function pure function compute_Tgc_bspline_3d_scalar ( f_Xt , f_knot1 , f_knot2 , f_knot3 , f_degree , f_nc ) result ( f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:), f_knot3 (:) integer , intent ( in ) :: f_degree ( 3 ) integer , intent ( in ) :: f_nc ( 3 ) real ( rk ), allocatable :: f_Tgc (:) end function end interface interface pure function nearest_point_help_3d ( f_ng , f_Xg , f_point_Xg ) result ( f_distances ) import :: rk integer , intent ( in ) :: f_ng ( 3 ) real ( rk ), intent ( in ), contiguous :: f_Xg (:,:) real ( rk ), intent ( in ), contiguous :: f_point_Xg (:) real ( rk ), allocatable :: f_distances (:) end function end interface contains !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Set control points and weights for the NURBS volume object. pure subroutine set1 ( this , knot1 , knot2 , knot3 , Xc , Wc ) class ( nurbs_volume ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:), knot3 (:) real ( rk ), intent ( in ), contiguous :: Xc (:,:) real ( rk ), intent ( in ), contiguous , optional :: Wc (:) if ( allocated ( this % knot1 )) deallocate ( this % knot1 ) if ( allocated ( this % knot2 )) deallocate ( this % knot2 ) if ( allocated ( this % knot3 )) deallocate ( this % knot3 ) if ( allocated ( this % Xc )) deallocate ( this % Xc ) this % knot1 = knot1 this % knot2 = knot2 this % knot3 = knot3 call this % cmp_degree () call this % cmp_nc () this % Xc = Xc if ( present ( Wc )) then if ( size ( Wc ) /= this % nc ( 1 ) * this % nc ( 2 ) * this % nc ( 3 )) then error stop 'Number of weights does not match the number of control points.' else if ( allocated ( this % Wc )) deallocate ( this % Wc ) this % Wc = Wc end if end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Set control points and weights for the NURBS volume object. pure subroutine set2 ( this , Xth_dir1 , Xth_dir2 , Xth_dir3 , degree , continuity1 , continuity2 , continuity3 , Xc , Wc ) class ( nurbs_volume ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: Xth_dir1 (:), Xth_dir2 (:), Xth_dir3 (:) integer , intent ( in ), contiguous :: degree (:) integer , intent ( in ), contiguous :: continuity1 (:), continuity2 (:), continuity3 (:) real ( rk ), intent ( in ), contiguous :: Xc (:,:) real ( rk ), intent ( in ), contiguous , optional :: Wc (:) this % knot1 = compute_knot_vector ( Xth_dir1 , degree ( 1 ), continuity1 ) this % knot2 = compute_knot_vector ( Xth_dir2 , degree ( 2 ), continuity2 ) this % knot3 = compute_knot_vector ( Xth_dir3 , degree ( 3 ), continuity3 ) this % degree ( 1 ) = degree ( 1 ) this % degree ( 2 ) = degree ( 2 ) this % degree ( 3 ) = degree ( 3 ) call this % cmp_nc () this % Xc = Xc if ( present ( Wc )) this % Wc = Wc end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Set Bezier or Rational Bezier volume using control points and weights. pure subroutine set3 ( this , nc , Xc , Wc ) class ( nurbs_volume ), intent ( inout ) :: this integer , intent ( in ), contiguous :: nc (:) real ( rk ), intent ( in ), contiguous :: Xc (:,:) real ( rk ), intent ( in ), contiguous , optional :: Wc (:) if ( allocated ( this % Xc )) deallocate ( this % Xc ) this % Xc = Xc this % nc = nc if ( allocated ( this % knot1 )) deallocate ( this % knot1 ) allocate ( this % knot1 ( 2 * this % nc ( 1 ))) this % knot1 ( 1 : this % nc ( 1 )) = 0.0_rk this % knot1 ( this % nc ( 1 ) + 1 : 2 * this % nc ( 1 )) = 1.0_rk if ( allocated ( this % knot2 )) deallocate ( this % knot2 ) allocate ( this % knot2 ( 2 * this % nc ( 2 ))) this % knot2 ( 1 : this % nc ( 2 )) = 0.0_rk this % knot2 ( this % nc ( 2 ) + 1 : 2 * this % nc ( 2 )) = 1.0_rk if ( allocated ( this % knot3 )) deallocate ( this % knot3 ) allocate ( this % knot3 ( 2 * this % nc ( 3 ))) this % knot3 ( 1 : this % nc ( 3 )) = 0.0_rk this % knot3 ( this % nc ( 3 ) + 1 : 2 * this % nc ( 3 )) = 1.0_rk call this % cmp_degree () if ( present ( Wc )) then if ( size ( Wc ) /= this % nc ( 1 ) * this % nc ( 2 ) * this % nc ( 3 )) then error stop 'Number of weights does not match the number of control points.' else if ( allocated ( this % Wc )) deallocate ( this % Wc ) this % Wc = Wc end if end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine create ( this , res1 , res2 , res3 , Xt1 , Xt2 , Xt3 , Xt ) class ( nurbs_volume ), intent ( inout ) :: this integer , intent ( in ), optional :: res1 , res2 , res3 real ( rk ), intent ( in ), contiguous , optional :: Xt1 (:), Xt2 (:), Xt3 (:) real ( rk ), intent ( in ), contiguous , optional :: Xt (:,:) integer :: i ! check if (. not . allocated ( this % Xc )) then error stop 'Control points are not set.' end if if (. not . allocated ( this % knot1 ) . or . . not . allocated ( this % knot2 ) . or . . not . allocated ( this % knot3 )) then error stop 'Knot vector(s) is/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 if ( present ( Xt )) then this % Xt = Xt else ! 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 , this % Xt ) end if if ( allocated ( this % Xg )) deallocate ( this % Xg ) allocate ( this % Xg ( this % ng ( 1 ) * this % ng ( 2 ) * this % ng ( 3 ), size ( this % Xc , 2 ))) if ( this % is_rational ()) then ! NURBS this % Xg = compute_Xg (& this % Xt , this % knot1 , this % knot2 , this % knot3 , this % degree , this % nc , this % ng , this % Xc , this % Wc ) else ! B-Spline this % Xg = compute_Xg (& this % Xt , this % knot1 , this % knot2 , this % knot3 , this % degree , this % nc , this % ng , this % Xc ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function cmp_Xg ( this , Xt ) result ( Xg ) class ( nurbs_volume ), intent ( in ) :: this real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), allocatable :: Xg (:) ! check if (. not . allocated ( this % Xc )) then error stop 'Control points are not set.' end if if (. not . allocated ( this % knot1 ) . or . . not . allocated ( this % knot2 ) . or . . not . allocated ( this % knot3 )) then error stop 'Knot vector(s) is/are not set.' end if if ( this % is_rational ()) then ! NURBS Xg = compute_Xg ( Xt , this % knot1 , this % knot2 , this % knot3 , this % degree , this % nc , this % Xc , this % Wc ) else ! B-Spline Xg = compute_Xg ( Xt , this % knot1 , this % knot2 , this % knot3 , this % degree , this % nc , this % Xc ) end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xc_all ( 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_Xci ( this , n ) result ( Xc ) class ( nurbs_volume ), intent ( in ) :: this integer , intent ( in ) :: n real ( rk ), allocatable :: Xc (:) if ( allocated ( this % Xc )) then if ( n < lbound ( this % Xc , 1 ) . or . n > ubound ( this % Xc , 1 )) then error stop 'Invalid index for control points.' end if Xc = this % Xc ( n ,:) else error stop 'Control points are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xcid ( this , n , dir ) result ( Xc ) class ( nurbs_volume ), intent ( in ) :: this integer , intent ( in ) :: n integer , intent ( in ) :: dir real ( rk ) :: Xc if ( allocated ( this % Xc )) then if ( n < lbound ( this % Xc , 1 ) . or . n > ubound ( this % Xc , 1 )) then error stop 'Invalid index for control points.' end if if ( dir < lbound ( this % Xc , 2 ) . or . dir > ubound ( this % Xc , 2 )) then error stop 'Invalid direction for control points.' end if Xc = this % Xc ( n , dir ) else error stop 'Control points are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xg_all ( 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_Xgi ( this , n ) result ( Xg ) class ( nurbs_volume ), intent ( in ) :: this integer , intent ( in ) :: n real ( rk ), allocatable :: Xg (:) if ( allocated ( this % Xg )) then if ( n < lbound ( this % Xg , 1 ) . or . n > ubound ( this % Xg , 1 )) then error stop 'Invalid index for geometry points.' end if Xg = this % Xg ( n ,:) else error stop 'Control points are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xgid ( this , n , dir ) result ( Xg ) class ( nurbs_volume ), intent ( in ) :: this integer , intent ( in ) :: n integer , intent ( in ) :: dir real ( rk ) :: Xg if ( allocated ( this % Xg )) then if ( n < lbound ( this % Xg , 1 ) . or . n > ubound ( this % Xg , 1 )) then error stop 'Invalid index for geometry points.' end if if ( dir < lbound ( this % Xg , 2 ) . or . dir > ubound ( this % Xg , 2 )) then error stop 'Invalid direction for geometry points.' end if Xg = this % Xg ( n , dir ) else error stop 'Control points are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Wc_all ( 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 NURBS volume is not rational or weights are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Wci ( this , n ) result ( Wc ) class ( nurbs_volume ), intent ( in ) :: this integer , intent ( in ) :: n real ( rk ) :: Wc if ( allocated ( this % Wc )) then if ( n < lbound ( this % Wc , 1 ) . or . n > ubound ( this % Wc , 1 )) then error stop 'Invalid index for weights.' end if Wc = this % Wc ( n ) else error stop 'The NURBS volume is not rational or weights are not set.' 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 subroutine cmp_degree ( this , dir ) class ( nurbs_volume ), intent ( inout ) :: this integer , intent ( in ), optional :: dir integer , allocatable :: m1 (:), m2 (:), m3 (:) if ( present ( dir )) then if ( dir == 1 ) then m1 = this % get_multiplicity ( 1 ) this % degree ( 1 ) = m1 ( 1 ) - 1 else if ( dir == 2 ) then m2 = this % get_multiplicity ( 2 ) this % degree ( 2 ) = m2 ( 1 ) - 1 else if ( dir == 3 ) then m3 = this % get_multiplicity ( 3 ) this % degree ( 3 ) = m3 ( 1 ) - 1 else error stop 'Invalid direction for degree.' end if else m1 = this % get_multiplicity ( 1 ) this % degree ( 1 ) = m1 ( 1 ) - 1 m2 = this % get_multiplicity ( 2 ) this % degree ( 2 ) = m2 ( 1 ) - 1 m3 = this % get_multiplicity ( 3 ) this % degree ( 3 ) = m3 ( 1 ) - 1 end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_degree_all ( this ) result ( degree ) class ( nurbs_volume ), intent ( in ) :: this integer :: degree ( 3 ) degree ( 1 ) = this % degree ( 1 ) degree ( 2 ) = this % degree ( 2 ) degree ( 3 ) = this % degree ( 3 ) end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_degree_dir ( this , dir ) result ( degree ) class ( nurbs_volume ), intent ( in ) :: this integer , intent ( in ) :: dir integer :: degree if ( dir == 1 ) then degree = this % degree ( 1 ) else if ( dir == 2 ) then degree = this % degree ( 2 ) else if ( dir == 3 ) then degree = this % degree ( 3 ) else error stop 'Invalid direction for degree.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_knot_all ( 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 function get_knoti ( this , dir , i ) result ( knot ) class ( nurbs_volume ), intent ( in ) :: this integer , intent ( in ) :: dir integer , intent ( in ) :: i real ( rk ) :: knot if ( dir == 1 ) then if ( allocated ( this % knot1 )) then if ( i < 1 . or . i > size ( this % knot1 )) then error stop 'Invalid index for knot vector.' else knot = this % knot1 ( i ) end if else error stop 'Knot vector is not set.' end if elseif ( dir == 2 ) then if ( allocated ( this % knot2 )) then if ( i < 1 . or . i > size ( this % knot2 )) then error stop 'Invalid index for knot vector.' else knot = this % knot2 ( i ) end if else error stop 'Knot vector is not set.' end if elseif ( dir == 3 ) then if ( allocated ( this % knot3 )) then if ( i < 1 . or . i > size ( this % knot3 )) then error stop 'Invalid index for knot vector.' else knot = this % knot3 ( i ) end if 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 % Xt )) deallocate ( this % Xt ) if ( allocated ( this % knot1 )) deallocate ( this % knot1 ) if ( allocated ( this % knot2 )) deallocate ( this % knot2 ) if ( allocated ( this % knot3 )) deallocate ( this % knot3 ) if ( allocated ( this % elemConn_Xc_vis )) deallocate ( this % elemConn_Xc_vis ) if ( allocated ( this % elemConn_Xg_vis )) deallocate ( this % elemConn_Xg_vis ) if ( allocated ( this % elemConn )) deallocate ( this % elemConn ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function cmp_elem_Xc_vis ( this , p ) result ( elemConn ) class ( nurbs_volume ), intent ( in ) :: this integer , allocatable :: elemConn (:,:) integer , intent ( in ), contiguous , 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 function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function cmp_elem_Xg_vis ( this , p ) result ( elemConn ) class ( nurbs_volume ), intent ( in ) :: this integer , allocatable :: elemConn (:,:) integer , intent ( in ), contiguous , 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 function !=============================================================================== !=============================================================================== !> 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 , nc , nunit integer , allocatable :: elemConn (:,:) ! check if (. not . allocated ( this % Xc )) then error stop 'Control points are not set.' end if if (. not . allocated ( this % elemConn_Xc_vis )) then elemConn = this % cmp_elem_Xc_vis () else elemConn = this % elemConn_Xc_vis end if nc = size ( this % Xc , 1 ) open ( newunit = nunit , file = filename , action = 'write' ) write ( nunit , '(a)' ) '# vtk DataFile Version 2.0' write ( nunit , '(a)' ) 'Generated by ForCAD' write ( nunit , '(a)' ) 'ASCII' write ( nunit , '(a)' ) 'DATASET UNSTRUCTURED_GRID' write ( nunit , '(a,\" \",g0,\" \",a)' ) 'POINTS' , nc , 'double' if ( size ( this % Xc , 2 ) == 2 ) then write ( nunit , '(g0,\" \",g0,\" \",g0)' ) ( this % Xc ( i , 1 ), this % Xc ( i , 2 ), 0.0_rk , i = 1 , nc ) elseif ( size ( this % Xc , 2 ) == 3 ) then write ( nunit , '(g0,\" \",g0,\" \",g0)' ) ( this % Xc ( i , 1 ), this % Xc ( i , 2 ), this % Xc ( i , 3 ) , i = 1 , nc ) else error stop 'Invalid dimension for control points.' end if write ( nunit , '(a,\" \",g0,\" \",g0)' ) 'CELLS' , size ( elemConn , 1 ), size ( elemConn , 1 ) * ( size ( elemConn , 2 ) + 1 ) write ( nunit , '(g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0)' )& ( 8 , elemConn ( i , 1 ) - 1 , elemConn ( i , 2 ) - 1 , elemConn ( i , 4 ) - 1 , elemConn ( i , 3 ) - 1 ,& elemConn ( i , 5 ) - 1 , elemConn ( i , 6 ) - 1 , elemConn ( i , 8 ) - 1 , elemConn ( i , 7 ) - 1 , 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 , ng , nunit integer , allocatable :: elemConn (:,:) ! check if (. not . allocated ( this % Xg )) then error stop 'Geometry points are not set.' end if if (. not . allocated ( this % elemConn_Xg_vis )) then elemConn = this % cmp_elem_Xg_vis () else elemConn = this % elemConn_Xg_vis end if ng = size ( this % Xg , 1 ) open ( newunit = nunit , file = filename , action = 'write' ) write ( nunit , '(a)' ) '# vtk DataFile Version 2.0' write ( nunit , '(a)' ) 'Generated by ForCAD' write ( nunit , '(a)' ) 'ASCII' write ( nunit , '(a)' ) 'DATASET UNSTRUCTURED_GRID' write ( nunit , '(a,\" \",g0,\" \",a)' ) 'POINTS' , ng , 'double' if ( size ( this % Xg , 2 ) == 2 ) then write ( nunit , '(g0,\" \",g0,\" \",g0)' ) ( this % Xg ( i , 1 ), this % Xg ( i , 2 ), 0.0_rk , i = 1 , ng ) elseif ( size ( this % Xg , 2 ) == 3 ) then write ( nunit , '(g0,\" \",g0,\" \",g0)' ) ( this % Xg ( i , 1 ), this % Xg ( i , 2 ), this % Xg ( i , 3 ) , i = 1 , ng ) else error stop 'Invalid dimension for geometry points.' end if write ( nunit , '(a,\" \",g0,\" \",g0)' ) 'CELLS' , size ( elemConn , 1 ), size ( elemConn , 1 ) * ( size ( elemConn , 2 ) + 1 ) write ( nunit , '(g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0)' )& ( 8 , elemConn ( i , 1 ) - 1 , elemConn ( i , 2 ) - 1 , elemConn ( i , 4 ) - 1 , elemConn ( i , 3 ) - 1 ,& elemConn ( i , 5 ) - 1 , elemConn ( i , 6 ) - 1 , elemConn ( i , 8 ) - 1 , elemConn ( i , 7 ) - 1 , 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 if ( allocated ( this % Wc )) then call this % set ( knot1 = this % get_knot ( 1 ), knot2 = this % get_knot ( 2 ), knot3 = this % get_knot ( 3 ),& Xc = this % get_Xc (), Wc = this % get_Wc ()) else call this % set ( knot1 = this % get_knot ( 1 ), knot2 = this % get_knot ( 2 ), knot3 = this % get_knot ( 3 ),& Xc = this % get_Xc ()) end if 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 if ( allocated ( this % knot1 ) . and . allocated ( this % knot2 ) . and . allocated ( this % knot3 )) then call this % set ( knot1 = this % get_knot ( 1 ), knot2 = this % get_knot ( 2 ), knot3 = this % get_knot ( 3 ),& Xc = this % get_Xc (), Wc = this % get_Wc ()) else call this % set ( nc = this % nc , Xc = this % get_Xc (), Wc = this % get_Wc ()) end if else error stop 'The NURBS volume 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 % degree ( 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 % degree ( 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 % degree ( 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 subroutine cmp_nc ( this , dir ) class ( nurbs_volume ), intent ( inout ) :: this integer , intent ( in ), optional :: dir if ( present ( dir )) then if ( dir == 1 ) then ! check if (. not . allocated ( this % knot1 )) then error stop 'Knot vector is not set.' else this % nc ( 1 ) = sum ( compute_multiplicity ( this % knot1 )) - this % degree ( 1 ) - 1 end if elseif ( dir == 2 ) then ! check if (. not . allocated ( this % knot2 )) then error stop 'Knot vector is not set.' else this % nc ( 2 ) = sum ( compute_multiplicity ( this % knot2 )) - this % degree ( 2 ) - 1 end if elseif ( dir == 3 ) then ! check if (. not . allocated ( this % knot3 )) then error stop 'Knot vector is not set.' else this % nc ( 3 ) = sum ( compute_multiplicity ( this % knot3 )) - this % degree ( 3 ) - 1 end if else error stop 'Invalid direction.' end if else ! check if (. not . allocated ( this % knot1 )) then error stop 'Knot vector is not set.' else this % nc ( 1 ) = sum ( compute_multiplicity ( this % knot1 )) - this % degree ( 1 ) - 1 end if ! check if (. not . allocated ( this % knot2 )) then error stop 'Knot vector is not set.' else this % nc ( 2 ) = sum ( compute_multiplicity ( this % knot2 )) - this % degree ( 2 ) - 1 end if ! check if (. not . allocated ( this % knot3 )) then error stop 'Knot vector is not set.' else this % nc ( 3 ) = sum ( compute_multiplicity ( this % knot3 )) - this % degree ( 3 ) - 1 end if end if end subroutine !=============================================================================== !=============================================================================== !> 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 % degree ( 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 % degree ( 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 % degree ( 3 ) - 1 end if else error stop 'Invalid direction.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine derivative_vector ( this , res1 , res2 , res3 , Xt1 , Xt2 , Xt3 , dTgc , Tgc ) class ( nurbs_volume ), intent ( inout ) :: this integer , intent ( in ), optional :: res1 , res2 , res3 real ( rk ), intent ( in ), contiguous , optional :: Xt1 (:), Xt2 (:), Xt3 (:) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:,:) real ( rk ), allocatable , intent ( out ), optional :: Tgc (:,:) integer :: i real ( rk ), allocatable :: Xt (:,:) ! 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 ( this % is_rational ()) then ! NURBS call compute_dTgc ( Xt , this % knot1 , this % knot2 , this % knot3 , this % degree , this % nc , this % ng , this % Wc , dTgc , Tgc ) else call compute_dTgc ( Xt , this % knot1 , this % knot2 , this % knot3 , this % degree , this % nc , this % ng , dTgc , Tgc ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine derivative_scalar ( this , Xt , dTgc , Tgc ) class ( nurbs_volume ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:) real ( rk ), allocatable , intent ( out ), optional :: Tgc (:) if ( this % is_rational ()) then ! NURBS call compute_dTgc ( Xt , this % knot1 , this % knot2 , this % knot3 , this % degree , this % nc , this % Wc , dTgc , Tgc ) else call compute_dTgc ( Xt , this % knot1 , this % knot2 , this % knot3 , this % degree , this % nc , dTgc , Tgc ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine derivative2_vector ( this , res1 , res2 , res3 , Xt1 , Xt2 , Xt3 , d2Tgc , dTgc , Tgc ) class ( nurbs_volume ), intent ( inout ) :: this integer , intent ( in ), optional :: res1 , res2 , res3 real ( rk ), intent ( in ), contiguous , optional :: Xt1 (:), Xt2 (:), Xt3 (:) real ( rk ), allocatable , intent ( out ) :: d2Tgc (:,:,:) real ( rk ), allocatable , intent ( out ), optional :: dTgc (:,:,:) real ( rk ), allocatable , intent ( out ), optional :: Tgc (:,:) integer :: i real ( rk ), allocatable :: Xt (:,:) ! 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 ( this % is_rational ()) then ! NURBS call compute_d2Tgc ( Xt , this % knot1 , this % knot2 , this % knot3 , this % degree , this % nc , this % ng , this % Wc , d2Tgc , dTgc , Tgc ) else call compute_d2Tgc ( Xt , this % knot1 , this % knot2 , this % knot3 , this % degree , this % nc , this % ng , d2Tgc , dTgc , Tgc ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine derivative2_scalar ( this , Xt , d2Tgc , dTgc , Tgc ) class ( nurbs_volume ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), allocatable , intent ( out ) :: d2Tgc (:,:) real ( rk ), allocatable , intent ( out ), optional :: dTgc (:,:) real ( rk ), allocatable , intent ( out ), optional :: Tgc (:) if ( this % is_rational ()) then ! NURBS call compute_d2Tgc ( Xt , this % knot1 , this % knot2 , this % knot3 , this % degree , this % nc , this % Wc , d2Tgc , dTgc , Tgc ) else call compute_d2Tgc ( Xt , this % knot1 , this % knot2 , this % knot3 , this % degree , this % nc , d2Tgc , dTgc , Tgc ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine basis_vector ( this , res1 , res2 , res3 , Xt1 , Xt2 , Xt3 , Tgc ) class ( nurbs_volume ), intent ( inout ) :: this integer , intent ( in ), optional :: res1 , res2 , res3 real ( rk ), intent ( in ), contiguous , optional :: Xt1 (:), Xt2 (:), Xt3 (:) real ( rk ), allocatable , intent ( out ) :: Tgc (:,:) integer :: i real ( rk ), allocatable :: Xt (:,:) ! 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 ( this % is_rational ()) then ! NURBS Tgc = compute_Tgc ( Xt , this % knot1 , this % knot2 , this % knot3 , this % degree , this % nc , this % ng , this % Wc ) else Tgc = compute_Tgc ( Xt , this % knot1 , this % knot2 , this % knot3 , this % degree , this % nc , this % ng ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine basis_scalar ( this , Xt , Tgc ) class ( nurbs_volume ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), allocatable , intent ( out ) :: Tgc (:) if ( this % is_rational ()) then ! NURBS Tgc = compute_Tgc ( Xt , this % knot1 , this % knot2 , this % knot3 , this % degree , this % nc , this % Wc ) else Tgc = compute_Tgc ( Xt , this % knot1 , this % knot2 , this % knot3 , this % degree , this % nc ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine insert_knots ( this , dir , Xth , r ) class ( nurbs_volume ), intent ( inout ) :: this integer , intent ( in ) :: dir real ( rk ), intent ( in ), contiguous :: Xth (:) integer , intent ( in ), contiguous :: r (:) integer :: k , i , s , dim , j , n_new real ( rk ), allocatable :: Xc (:,:), Xcw (:,:), Xcw_new (:,:), Xc_new (:,:), Wc_new (:), knot_new (:) real ( rk ), allocatable :: Xc4 (:,:,:,:) if ( dir == 1 ) then ! direction 1 if ( allocated ( this % Wc )) then ! NURBS do i = 1 , size ( Xth ) k = findspan ( this % nc ( 1 ) - 1 , this % degree ( 1 ), Xth ( i ), this % knot1 ) if ( this % knot1 ( k + 1 ) == Xth ( i )) then s = compute_multiplicity ( this % knot1 , Xth ( i )) else s = 0 end if dim = size ( this % Xc , 2 ) allocate ( Xcw ( size ( this % Xc , 1 ), dim + 1 )) do j = 1 , size ( this % Xc , 1 ) Xcw ( j , 1 : dim ) = this % Xc ( j , 1 : dim ) * this % Wc ( j ) end do Xcw (:, dim + 1 ) = this % Wc (:) Xcw = reshape ( Xcw ,[ this % nc ( 1 ), this % nc ( 2 ) * this % nc ( 3 ) * ( dim + 1 )]) call insert_knot_A_5_1 (& this % degree ( 1 ),& this % knot1 ,& Xcw ,& Xth ( i ),& k ,& s ,& r ( i ),& n_new ,& knot_new ,& Xcw_new ) Xcw_new = reshape ( Xcw_new ,[( n_new + 1 ) * this % nc ( 2 ) * this % nc ( 3 ), dim + 1 ]) allocate ( Xc_new ( 1 :( n_new + 1 ) * this % nc ( 2 ) * this % nc ( 3 ), 1 : dim )) allocate ( Wc_new ( 1 :( n_new + 1 ) * this % nc ( 2 ) * this % nc ( 3 ))) do j = 1 , ( n_new + 1 ) * this % nc ( 2 ) * this % nc ( 3 ) Xc_new ( j , 1 : dim ) = Xcw_new ( j , 1 : dim ) / Xcw_new ( j , dim + 1 ) end do Wc_new (:) = Xcw_new (:, dim + 1 ) call this % set ( knot1 = knot_new , knot2 = this % get_knot ( 2 ), knot3 = this % get_knot ( 3 ), Xc = Xc_new , Wc = Wc_new ) deallocate ( Xcw , Xcw_new , Xc_new , Wc_new ) end do else ! B-Spline do i = 1 , size ( Xth ) k = findspan ( this % nc ( 1 ) - 1 , this % degree ( 1 ), Xth ( i ), this % knot1 ) if ( this % knot1 ( k + 1 ) == Xth ( i )) then s = compute_multiplicity ( this % knot1 , Xth ( i )) else s = 0 end if dim = size ( this % Xc , 2 ) Xc = reshape ( this % Xc ,[ this % nc ( 1 ), this % nc ( 2 ) * this % nc ( 3 ) * dim ]) call insert_knot_A_5_1 (& this % degree ( 1 ),& this % knot1 ,& Xc ,& Xth ( i ),& k ,& s ,& r ( i ),& n_new ,& knot_new ,& Xc_new ) Xc_new = reshape ( Xc_new ,[( n_new + 1 ) * this % nc ( 2 ) * this % nc ( 3 ), dim ]) call this % set ( knot1 = knot_new , knot2 = this % get_knot ( 2 ), knot3 = this % get_knot ( 3 ), Xc = Xc_new ) end do end if elseif ( dir == 2 ) then ! direction 2 if ( allocated ( this % Wc )) then ! NURBS do i = 1 , size ( Xth ) k = findspan ( this % nc ( 2 ) - 1 , this % degree ( 2 ), Xth ( i ), this % knot2 ) if ( this % knot2 ( k + 1 ) == Xth ( i )) then s = compute_multiplicity ( this % knot2 , Xth ( i )) else s = 0 end if dim = size ( this % Xc , 2 ) allocate ( Xcw ( size ( this % Xc , 1 ), dim + 1 )) do j = 1 , size ( this % Xc , 1 ) Xcw ( j , 1 : dim ) = this % Xc ( j , 1 : dim ) * this % Wc ( j ) end do Xcw (:, dim + 1 ) = this % Wc (:) Xc4 = reshape ( Xcw , [ this % nc ( 1 ), this % nc ( 2 ), this % nc ( 3 ), dim + 1 ]) Xc4 = reshape ( Xc4 , [ this % nc ( 2 ), this % nc ( 1 ), this % nc ( 3 ), dim + 1 ], order = [ 2 , 1 , 3 , 4 ]) Xcw = reshape ( Xc4 ,[ this % nc ( 2 ), this % nc ( 1 ) * this % nc ( 3 ) * ( dim + 1 )]) call insert_knot_A_5_1 (& this % degree ( 2 ),& this % knot2 ,& Xcw ,& Xth ( i ),& k ,& s ,& r ( i ),& n_new ,& knot_new ,& Xcw_new ) Xc4 = reshape ( Xcw_new , [ n_new + 1 , this % nc ( 1 ), this % nc ( 3 ), dim + 1 ]) Xc4 = reshape ( Xc4 , [ this % nc ( 1 ), n_new + 1 , this % nc ( 3 ), dim + 1 ], order = [ 2 , 1 , 3 , 4 ]) Xcw_new = reshape ( Xc4 ,[ this % nc ( 1 ) * ( n_new + 1 ) * this % nc ( 3 ), dim + 1 ]) allocate ( Xc_new ( 1 : this % nc ( 1 ) * ( n_new + 1 ) * this % nc ( 3 ), 1 : dim )) allocate ( Wc_new ( 1 : this % nc ( 1 ) * ( n_new + 1 ) * this % nc ( 3 ))) do j = 1 , this % nc ( 1 ) * ( n_new + 1 ) * this % nc ( 3 ) Xc_new ( j , 1 : dim ) = Xcw_new ( j , 1 : dim ) / Xcw_new ( j , dim + 1 ) end do Wc_new (:) = Xcw_new (:, dim + 1 ) call this % set ( knot1 = this % get_knot ( 1 ), knot2 = knot_new , knot3 = this % get_knot ( 3 ), Xc = Xc_new , Wc = Wc_new ) deallocate ( Xcw , Xcw_new , Xc_new , Wc_new ) end do else ! B-Spline do i = 1 , size ( Xth ) k = findspan ( this % nc ( 2 ) - 1 , this % degree ( 2 ), Xth ( i ), this % knot2 ) if ( this % knot2 ( k + 1 ) == Xth ( i )) then s = compute_multiplicity ( this % knot2 , Xth ( i )) else s = 0 end if dim = size ( this % Xc , 2 ) Xc4 = reshape ( this % Xc , [ this % nc ( 1 ), this % nc ( 2 ), this % nc ( 3 ), dim ]) Xc4 = reshape ( Xc4 , [ this % nc ( 2 ), this % nc ( 1 ), this % nc ( 3 ), dim ], order = [ 2 , 1 , 3 , 4 ]) Xc = reshape ( Xc4 ,[ this % nc ( 2 ), this % nc ( 1 ) * this % nc ( 3 ) * dim ]) call insert_knot_A_5_1 (& this % degree ( 2 ),& this % knot2 ,& Xc ,& Xth ( i ),& k ,& s ,& r ( i ),& n_new ,& knot_new ,& Xc_new ) Xc4 = reshape ( Xc_new , [ n_new + 1 , this % nc ( 1 ), this % nc ( 3 ), dim ]) Xc4 = reshape ( Xc4 , [ this % nc ( 1 ), n_new + 1 , this % nc ( 3 ), dim ], order = [ 2 , 1 , 3 , 4 ]) Xc_new = reshape ( Xc4 ,[ this % nc ( 1 ) * ( n_new + 1 ) * this % nc ( 3 ), dim ]) call this % set ( knot1 = this % get_knot ( 1 ), knot2 = knot_new , knot3 = this % get_knot ( 3 ), Xc = Xc_new ) end do end if elseif ( dir == 3 ) then ! direction 3 if ( allocated ( this % Wc )) then ! NURBS do i = 1 , size ( Xth ) k = findspan ( this % nc ( 3 ) - 1 , this % degree ( 3 ), Xth ( i ), this % knot3 ) if ( this % knot3 ( k + 1 ) == Xth ( i )) then s = compute_multiplicity ( this % knot3 , Xth ( i )) else s = 0 end if dim = size ( this % Xc , 2 ) allocate ( Xcw ( size ( this % Xc , 1 ), dim + 1 )) do j = 1 , size ( this % Xc , 1 ) Xcw ( j , 1 : dim ) = this % Xc ( j , 1 : dim ) * this % Wc ( j ) end do Xcw (:, dim + 1 ) = this % Wc (:) Xc4 = reshape ( Xcw , [ this % nc ( 1 ), this % nc ( 2 ), this % nc ( 3 ), dim + 1 ]) Xc4 = reshape ( Xc4 , [ this % nc ( 3 ), this % nc ( 2 ), this % nc ( 1 ), dim + 1 ], order = [ 3 , 2 , 1 , 4 ]) Xcw = reshape ( Xc4 ,[ this % nc ( 3 ), this % nc ( 2 ) * this % nc ( 1 ) * ( dim + 1 )]) call insert_knot_A_5_1 (& this % degree ( 3 ),& this % knot3 ,& Xcw ,& Xth ( i ),& k ,& s ,& r ( i ),& n_new ,& knot_new ,& Xcw_new ) Xc4 = reshape ( Xcw_new , [ n_new + 1 , this % nc ( 2 ), this % nc ( 1 ), dim + 1 ]) Xc4 = reshape ( Xc4 , [ this % nc ( 1 ), this % nc ( 2 ), n_new + 1 , dim + 1 ], order = [ 3 , 2 , 1 , 4 ]) Xcw_new = reshape ( Xc4 ,[ this % nc ( 1 ) * this % nc ( 2 ) * ( n_new + 1 ), dim + 1 ]) allocate ( Xc_new ( 1 : this % nc ( 1 ) * this % nc ( 2 ) * ( n_new + 1 ), 1 : dim )) allocate ( Wc_new ( 1 : this % nc ( 1 ) * this % nc ( 2 ) * ( n_new + 1 ))) do j = 1 , this % nc ( 1 ) * this % nc ( 2 ) * ( n_new + 1 ) Xc_new ( j , 1 : dim ) = Xcw_new ( j , 1 : dim ) / Xcw_new ( j , dim + 1 ) end do Wc_new (:) = Xcw_new (:, dim + 1 ) call this % set ( knot1 = this % get_knot ( 1 ), knot2 = this % get_knot ( 2 ), knot3 = knot_new , Xc = Xc_new , Wc = Wc_new ) deallocate ( Xcw , Xcw_new , Xc_new , Wc_new ) end do else ! B-Spline do i = 1 , size ( Xth ) k = findspan ( this % nc ( 3 ) - 1 , this % degree ( 3 ), Xth ( i ), this % knot3 ) if ( this % knot3 ( k + 1 ) == Xth ( i )) then s = compute_multiplicity ( this % knot3 , Xth ( i )) else s = 0 end if dim = size ( this % Xc , 2 ) Xc4 = reshape ( this % Xc , [ this % nc ( 1 ), this % nc ( 2 ), this % nc ( 3 ), dim ]) Xc4 = reshape ( Xc4 , [ this % nc ( 3 ), this % nc ( 2 ), this % nc ( 1 ), dim ], order = [ 3 , 2 , 1 , 4 ]) Xc = reshape ( Xc4 ,[ this % nc ( 3 ), this % nc ( 2 ) * this % nc ( 1 ) * dim ]) call insert_knot_A_5_1 (& this % degree ( 3 ),& this % knot3 ,& Xc ,& Xth ( i ),& k ,& s ,& r ( i ),& n_new ,& knot_new ,& Xc_new ) Xc4 = reshape ( Xc_new , [ n_new + 1 , this % nc ( 2 ), this % nc ( 1 ), dim ]) Xc4 = reshape ( Xc4 , [ this % nc ( 1 ), this % nc ( 2 ), n_new + 1 , dim ], order = [ 3 , 2 , 1 , 4 ]) Xc_new = reshape ( Xc4 , [ this % nc ( 1 ) * this % nc ( 2 ) * ( n_new + 1 ), dim ]) call this % set ( knot1 = this % get_knot ( 1 ), knot2 = this % get_knot ( 2 ), knot3 = knot_new , Xc = Xc_new ) end do end if else error stop 'Invalid direction.' end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine elevate_degree ( this , dir , t ) class ( nurbs_volume ), intent ( inout ) :: this integer , intent ( in ) :: dir integer , intent ( in ) :: t real ( rk ), allocatable :: Xc (:,:), Xcw (:,:), Xcw_new (:,:), Xc_new (:,:), Wc_new (:), knot_new (:) integer :: nc_new , dim , j real ( rk ), allocatable :: Xc4 (:,:,:,:) if ( dir == 1 ) then ! direction 1 if ( allocated ( this % Wc )) then ! NURBS dim = size ( this % Xc , 2 ) allocate ( Xcw ( size ( this % Xc , 1 ), dim + 1 )) do j = 1 , size ( this % Xc , 1 ) Xcw ( j , 1 : dim ) = this % Xc ( j , 1 : dim ) * this % Wc ( j ) end do Xcw (:, dim + 1 ) = this % Wc (:) Xcw = reshape ( Xcw ,[ this % nc ( 1 ), this % nc ( 2 ) * this % nc ( 3 ) * ( dim + 1 )], order = [ 1 , 2 ]) call elevate_degree_A_5_9 ( t , this % knot1 , this % degree ( 1 ), Xcw , nc_new , knot_new , Xcw_new ) Xcw_new = reshape ( Xcw_new ,[ nc_new * this % nc ( 2 ) * this % nc ( 3 ), dim + 1 ], order = [ 1 , 2 ]) allocate ( Xc_new ( 1 : nc_new * this % nc ( 2 ) * this % nc ( 3 ), 1 : dim )) allocate ( Wc_new ( 1 : nc_new * this % nc ( 2 ) * this % nc ( 3 ))) do j = 1 , nc_new * this % nc ( 2 ) * this % nc ( 3 ) Xc_new ( j , 1 : dim ) = Xcw_new ( j , 1 : dim ) / Xcw_new ( j , dim + 1 ) end do Wc_new (:) = Xcw_new (:, dim + 1 ) call this % set ( knot1 = knot_new , knot2 = this % get_knot ( 2 ), knot3 = this % get_knot ( 3 ), Xc = Xc_new , Wc = Wc_new ) deallocate ( Xcw , Xcw_new , Xc_new , Wc_new ) else ! B-Spline dim = size ( this % Xc , 2 ) Xc = reshape ( this % Xc ,[ this % nc ( 1 ), this % nc ( 2 ) * this % nc ( 3 ) * dim ], order = [ 1 , 2 ]) call elevate_degree_A_5_9 ( t , this % knot1 , this % degree ( 1 ), Xc , nc_new , knot_new , Xc_new ) Xc_new = reshape ( Xc_new ,[ nc_new * this % nc ( 2 ) * this % nc ( 3 ), dim ], order = [ 1 , 2 ]) call this % set ( knot1 = knot_new , knot2 = this % get_knot ( 2 ), knot3 = this % get_knot ( 3 ), Xc = Xc_new ) end if elseif ( dir == 2 ) then ! direction 2 if ( allocated ( this % Wc )) then ! NURBS dim = size ( this % Xc , 2 ) allocate ( Xcw ( size ( this % Xc , 1 ), dim + 1 )) do j = 1 , size ( this % Xc , 1 ) Xcw ( j , 1 : dim ) = this % Xc ( j , 1 : dim ) * this % Wc ( j ) end do Xcw (:, dim + 1 ) = this % Wc (:) Xc4 = reshape ( Xcw , [ this % nc ( 1 ), this % nc ( 2 ), this % nc ( 3 ), dim + 1 ]) Xc4 = reshape ( Xc4 , [ this % nc ( 2 ), this % nc ( 1 ), this % nc ( 3 ), dim + 1 ], order = [ 2 , 1 , 3 , 4 ]) Xcw = reshape ( Xc4 ,[ this % nc ( 2 ), this % nc ( 1 ) * this % nc ( 3 ) * ( dim + 1 )]) call elevate_degree_A_5_9 ( t , this % knot2 , this % degree ( 2 ), Xcw , nc_new , knot_new , Xcw_new ) Xc4 = reshape ( Xcw_new , [ nc_new , this % nc ( 1 ), this % nc ( 3 ), dim + 1 ]) Xc4 = reshape ( Xc4 , [ this % nc ( 1 ), nc_new , this % nc ( 3 ), dim + 1 ], order = [ 2 , 1 , 3 , 4 ]) Xcw_new = reshape ( Xc4 ,[ this % nc ( 1 ) * nc_new * this % nc ( 3 ), dim + 1 ]) allocate ( Xc_new ( 1 : this % nc ( 1 ) * nc_new * this % nc ( 3 ), 1 : dim )) allocate ( Wc_new ( 1 : this % nc ( 1 ) * nc_new * this % nc ( 3 ))) do j = 1 , this % nc ( 1 ) * nc_new * this % nc ( 3 ) Xc_new ( j , 1 : dim ) = Xcw_new ( j , 1 : dim ) / Xcw_new ( j , dim + 1 ) end do Wc_new (:) = Xcw_new (:, dim + 1 ) call this % set ( knot1 = this % get_knot ( 1 ), knot2 = knot_new , knot3 = this % get_knot ( 3 ), Xc = Xc_new , Wc = Wc_new ) deallocate ( Xcw , Xcw_new , Xc_new , Wc_new ) else ! B-Spline dim = size ( this % Xc , 2 ) Xc4 = reshape ( this % Xc , [ this % nc ( 1 ), this % nc ( 2 ), this % nc ( 3 ), dim ]) Xc4 = reshape ( Xc4 , [ this % nc ( 2 ), this % nc ( 1 ), this % nc ( 3 ), dim ], order = [ 2 , 1 , 3 , 4 ]) Xc = reshape ( Xc4 ,[ this % nc ( 2 ), this % nc ( 1 ) * this % nc ( 3 ) * dim ]) call elevate_degree_A_5_9 ( t , this % knot2 , this % degree ( 2 ), Xc , nc_new , knot_new , Xc_new ) Xc4 = reshape ( Xc_new , [ nc_new , this % nc ( 1 ), this % nc ( 3 ), dim ]) Xc4 = reshape ( Xc4 , [ this % nc ( 1 ), nc_new , this % nc ( 3 ), dim ], order = [ 2 , 1 , 3 , 4 ]) Xc_new = reshape ( Xc4 ,[ this % nc ( 1 ) * nc_new * this % nc ( 3 ), dim ]) call this % set ( knot1 = this % get_knot ( 1 ), knot2 = knot_new , knot3 = this % get_knot ( 3 ), Xc = Xc_new ) end if elseif ( dir == 3 ) then ! direction 3 if ( allocated ( this % Wc )) then ! NURBS dim = size ( this % Xc , 2 ) allocate ( Xcw ( size ( this % Xc , 1 ), dim + 1 )) do j = 1 , size ( this % Xc , 1 ) Xcw ( j , 1 : dim ) = this % Xc ( j , 1 : dim ) * this % Wc ( j ) end do Xcw (:, dim + 1 ) = this % Wc (:) Xc4 = reshape ( Xcw , [ this % nc ( 1 ), this % nc ( 2 ), this % nc ( 3 ), dim + 1 ]) Xc4 = reshape ( Xc4 , [ this % nc ( 3 ), this % nc ( 2 ), this % nc ( 1 ), dim + 1 ], order = [ 3 , 2 , 1 , 4 ]) Xcw = reshape ( Xc4 ,[ this % nc ( 3 ), this % nc ( 2 ) * this % nc ( 1 ) * ( dim + 1 )]) call elevate_degree_A_5_9 ( t , this % knot3 , this % degree ( 3 ), Xcw , nc_new , knot_new , Xcw_new ) Xc4 = reshape ( Xcw_new , [ nc_new , this % nc ( 2 ), this % nc ( 1 ), dim + 1 ]) Xc4 = reshape ( Xc4 , [ this % nc ( 1 ), this % nc ( 2 ), nc_new , dim + 1 ], order = [ 3 , 2 , 1 , 4 ]) Xcw_new = reshape ( Xc4 ,[ this % nc ( 1 ) * this % nc ( 2 ) * nc_new , dim + 1 ]) allocate ( Xc_new ( 1 : this % nc ( 1 ) * this % nc ( 2 ) * nc_new , 1 : dim )) allocate ( Wc_new ( 1 : this % nc ( 1 ) * this % nc ( 2 ) * nc_new )) do j = 1 , this % nc ( 1 ) * this % nc ( 2 ) * nc_new Xc_new ( j , 1 : dim ) = Xcw_new ( j , 1 : dim ) / Xcw_new ( j , dim + 1 ) end do Wc_new (:) = Xcw_new (:, dim + 1 ) call this % set ( knot1 = this % get_knot ( 1 ), knot2 = this % get_knot ( 2 ), knot3 = knot_new , Xc = Xc_new , Wc = Wc_new ) deallocate ( Xcw , Xcw_new , Xc_new , Wc_new ) else ! B-Spline dim = size ( this % Xc , 2 ) Xc4 = reshape ( this % Xc , [ this % nc ( 1 ), this % nc ( 2 ), this % nc ( 3 ), dim ]) Xc4 = reshape ( Xc4 , [ this % nc ( 3 ), this % nc ( 2 ), this % nc ( 1 ), dim ], order = [ 3 , 2 , 1 , 4 ]) Xc = reshape ( Xc4 ,[ this % nc ( 3 ), this % nc ( 2 ) * this % nc ( 1 ) * dim ]) call elevate_degree_A_5_9 ( t , this % knot3 , this % degree ( 3 ), Xc , nc_new , knot_new , Xc_new ) Xc4 = reshape ( Xc_new , [ nc_new , this % nc ( 2 ), this % nc ( 1 ), dim ]) Xc4 = reshape ( Xc4 , [ this % nc ( 1 ), this % nc ( 2 ), nc_new , dim ], order = [ 3 , 2 , 1 , 4 ]) Xc_new = reshape ( Xc4 ,[ this % nc ( 1 ) * this % nc ( 2 ) * nc_new , dim ]) call this % set ( knot1 = this % get_knot ( 1 ), knot2 = this % get_knot ( 2 ), knot3 = knot_new , Xc = Xc_new ) end if else error stop 'Invalid direction.' end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function is_rational ( this ) result ( r ) class ( nurbs_volume ), intent ( in ) :: this logical :: r r = . false . if ( allocated ( this % Wc )) then if ( any ( this % Wc /= this % Wc ( 1 ))) then r = . true . end if end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine set_elem_Xc_vis ( this , elemConn ) class ( nurbs_volume ), intent ( inout ) :: this integer , intent ( in ), contiguous :: elemConn (:,:) if ( allocated ( this % elemConn_Xc_vis )) deallocate ( this % elemConn_Xc_vis ) this % elemConn_Xc_vis = elemConn end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine set_elem_Xg_vis ( this , elemConn ) class ( nurbs_volume ), intent ( inout ) :: this integer , intent ( in ), contiguous :: elemConn (:,:) if ( allocated ( this % elemConn_Xg_vis )) deallocate ( this % elemConn_Xg_vis ) this % elemConn_Xg_vis = elemConn end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine set_elem ( this , elemConn ) class ( nurbs_volume ), intent ( inout ) :: this integer , intent ( in ), contiguous :: elemConn (:,:) if ( allocated ( this % elemConn )) deallocate ( this % elemConn ) this % elemConn = elemConn end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_elem_Xc_vis ( this ) result ( elemConn ) class ( nurbs_volume ), intent ( in ) :: this integer , allocatable :: elemConn (:,:) elemConn = this % elemConn_Xc_vis end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_elem_Xg_vis ( this ) result ( elemConn ) class ( nurbs_volume ), intent ( in ) :: this integer , allocatable :: elemConn (:,:) elemConn = this % elemConn_Xg_vis end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_elem ( this ) result ( elemConn ) class ( nurbs_volume ), intent ( in ) :: this integer , allocatable :: elemConn (:,:) elemConn = this % elemConn end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine set_hexahedron ( this , L , nc , Wc ) class ( nurbs_volume ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: L (:) integer , intent ( in ), contiguous :: nc (:) real ( rk ), intent ( in ), contiguous , optional :: Wc (:) if ( present ( Wc )) then call this % set ( nc , hexahedron_Xc ( L , nc ), Wc ) else call this % set ( nc , hexahedron_Xc ( L , nc )) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine put_to_nurbs ( this , X , elemConn ) class ( nurbs_volume ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: X (:,:) integer , intent ( in ), contiguous :: elemConn (:,:) integer :: i real ( rk ), allocatable :: Tgc1 (:), Tgc2 (:), Tgc3 (:), Tgc (:) real ( rk ), allocatable :: Xt (:,:) real ( rk ) :: min_X1 , max_X1 , min_X2 , max_X2 , min_X3 , max_X3 ! Assuming knot vectors are in the range [0,1] ! Normalize the X coordinates to the range [0,1] allocate ( Xt ( size ( X , 1 ), size ( X , 2 ))) min_X1 = minval ( X (:, 1 )) max_X1 = maxval ( X (:, 1 )) min_X2 = minval ( X (:, 2 )) max_X2 = maxval ( X (:, 2 )) min_X3 = minval ( X (:, 3 )) max_X3 = maxval ( X (:, 3 )) Xt (:, 1 ) = ( X (:, 1 ) - min_X1 ) / ( max_X1 - min_X1 ) Xt (:, 2 ) = ( X (:, 2 ) - min_X2 ) / ( max_X2 - min_X2 ) Xt (:, 3 ) = ( X (:, 3 ) - min_X3 ) / ( max_X3 - min_X3 ) allocate ( this % Xg ( size ( Xt , 1 ), size ( this % Xc , 2 ))) allocate ( Tgc ( this % nc ( 1 ) * this % nc ( 2 ) * this % nc ( 3 ))) 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 % degree ( 1 )) Tgc2 = basis_bspline ( Xt ( i , 2 ), this % knot2 , this % nc ( 2 ), this % degree ( 2 )) Tgc3 = basis_bspline ( Xt ( i , 3 ), this % knot3 , this % nc ( 3 ), this % degree ( 3 )) Tgc = kron ( Tgc3 , kron ( Tgc2 , Tgc1 )) Tgc = Tgc * ( this % Wc / ( dot_product ( Tgc , this % Wc ))) this % Xg ( i ,:) = matmul ( Tgc , this % Xc ) end do else ! B-Spline volume do i = 1 , size ( Xt , 1 ) Tgc1 = basis_bspline ( Xt ( i , 1 ), this % knot1 , this % nc ( 1 ), this % degree ( 1 )) Tgc2 = basis_bspline ( Xt ( i , 2 ), this % knot2 , this % nc ( 2 ), this % degree ( 2 )) Tgc3 = basis_bspline ( Xt ( i , 3 ), this % knot3 , this % nc ( 3 ), this % degree ( 3 )) Tgc = kron ( Tgc3 , kron ( Tgc2 , Tgc1 )) this % Xg ( i ,:) = matmul ( Tgc , this % Xc ) end do end if call this % set_elem_Xg_vis ( elemConn ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine remove_knots ( this , dir , Xth , r ) class ( nurbs_volume ), intent ( inout ) :: this integer , intent ( in ) :: dir real ( rk ), intent ( in ), contiguous :: Xth (:) integer , intent ( in ), contiguous :: r (:) integer :: k , i , s , dim , j , nc_new , t real ( rk ), allocatable :: Xc (:,:), Xcw (:,:), Xcw_new (:,:), Xc_new (:,:), Wc_new (:), knot_new (:) real ( rk ), allocatable :: Xc4 (:,:,:,:) if ( dir == 1 ) then ! direction 1 if ( allocated ( this % Wc )) then ! NURBS do i = 1 , size ( Xth ) k = findspan ( this % nc ( 1 ) - 1 , this % degree ( 1 ), Xth ( i ), this % knot1 ) if ( this % knot1 ( k + 1 ) == Xth ( i )) then s = compute_multiplicity ( this % knot1 , Xth ( i )) else s = 0 end if k = k + 1 dim = size ( this % Xc , 2 ) allocate ( Xcw ( size ( this % Xc , 1 ), dim + 1 )) do j = 1 , size ( this % Xc , 1 ) Xcw ( j , 1 : dim ) = this % Xc ( j , 1 : dim ) * this % Wc ( j ) end do Xcw (:, dim + 1 ) = this % Wc (:) Xcw = reshape ( Xcw ,[ this % nc ( 1 ), this % nc ( 2 ) * this % nc ( 3 ) * ( dim + 1 )], order = [ 1 , 2 ]) call remove_knots_A_5_8 (& this % degree ( 1 ),& this % knot1 ,& Xcw ,& Xth ( i ),& k ,& s ,& r ( i ),& t ,& knot_new ,& Xcw_new ) if ( allocated ( Xcw )) deallocate ( Xcw ) if ( t == 0 ) then ! no change else nc_new = size ( Xcw_new , 1 ) Xcw_new = reshape ( Xcw_new ,[( nc_new ) * this % nc ( 2 ) * this % nc ( 3 ), dim + 1 ], order = [ 1 , 2 ]) allocate ( Xc_new ( 1 :( nc_new ) * this % nc ( 2 ) * this % nc ( 3 ), 1 : dim )) allocate ( Wc_new ( 1 :( nc_new ) * this % nc ( 2 ) * this % nc ( 3 ))) do j = 1 , ( nc_new ) * this % nc ( 2 ) * this % nc ( 3 ) Xc_new ( j , 1 : dim ) = Xcw_new ( j , 1 : dim ) / Xcw_new ( j , dim + 1 ) end do Wc_new (:) = Xcw_new (:, dim + 1 ) call this % set ( knot1 = knot_new , knot2 = this % get_knot ( 2 ), knot3 = this % get_knot ( 3 ), Xc = Xc_new , Wc = Wc_new ) deallocate ( Xcw_new , Xc_new , Wc_new ) end if end do else ! B-Spline do i = 1 , size ( Xth ) k = findspan ( this % nc ( 1 ) - 1 , this % degree ( 1 ), Xth ( i ), this % knot1 ) if ( this % knot1 ( k + 1 ) == Xth ( i )) then s = compute_multiplicity ( this % knot1 , Xth ( i )) else s = 0 end if k = k + 1 dim = size ( this % Xc , 2 ) Xc = reshape ( this % Xc ,[ this % nc ( 1 ), this % nc ( 2 ) * this % nc ( 3 ) * dim ]) call remove_knots_A_5_8 (& this % degree ( 1 ),& this % knot1 ,& Xc ,& Xth ( i ),& k ,& s ,& r ( i ),& t ,& knot_new ,& Xc_new ) if ( allocated ( Xc )) deallocate ( Xc ) if ( t == 0 ) then ! no change else nc_new = size ( Xcw_new , 1 ) Xc_new = reshape ( Xc_new ,[( nc_new ) * this % nc ( 2 ) * this % nc ( 3 ), dim ]) call this % set ( knot1 = knot_new , knot2 = this % get_knot ( 2 ), knot3 = this % get_knot ( 3 ), Xc = Xc_new ) end if end do end if elseif ( dir == 2 ) then ! direction 2 if ( allocated ( this % Wc )) then ! NURBS do i = 1 , size ( Xth ) k = findspan ( this % nc ( 2 ) - 1 , this % degree ( 2 ), Xth ( i ), this % knot2 ) if ( this % knot2 ( k + 1 ) == Xth ( i )) then s = compute_multiplicity ( this % knot2 , Xth ( i )) else s = 0 end if k = k + 1 dim = size ( this % Xc , 2 ) allocate ( Xcw ( size ( this % Xc , 1 ), dim + 1 )) do j = 1 , size ( this % Xc , 1 ) Xcw ( j , 1 : dim ) = this % Xc ( j , 1 : dim ) * this % Wc ( j ) end do Xcw (:, dim + 1 ) = this % Wc (:) Xc4 = reshape ( Xcw , [ this % nc ( 1 ), this % nc ( 2 ), this % nc ( 3 ), dim + 1 ]) Xc4 = reshape ( Xc4 , [ this % nc ( 2 ), this % nc ( 1 ), this % nc ( 3 ), dim + 1 ], order = [ 2 , 1 , 3 , 4 ]) Xcw = reshape ( Xc4 ,[ this % nc ( 2 ), this % nc ( 1 ) * this % nc ( 3 ) * ( dim + 1 )]) call remove_knots_A_5_8 (& this % degree ( 2 ),& this % knot2 ,& Xcw ,& Xth ( i ),& k ,& s ,& r ( i ),& t ,& knot_new ,& Xcw_new ) if ( allocated ( Xcw )) deallocate ( Xcw ) if ( t == 0 ) then ! no change else nc_new = size ( Xcw_new , 1 ) Xc4 = reshape ( Xcw_new , [ nc_new , this % nc ( 1 ), this % nc ( 3 ), dim + 1 ]) Xc4 = reshape ( Xc4 , [ this % nc ( 1 ), nc_new , this % nc ( 3 ), dim + 1 ], order = [ 2 , 1 , 3 , 4 ]) Xcw_new = reshape ( Xc4 ,[ this % nc ( 1 ) * ( nc_new ) * this % nc ( 3 ), dim + 1 ]) allocate ( Xc_new ( 1 : this % nc ( 1 ) * ( nc_new ) * this % nc ( 3 ), 1 : dim )) allocate ( Wc_new ( 1 : this % nc ( 1 ) * ( nc_new ) * this % nc ( 3 ))) do j = 1 , this % nc ( 1 ) * ( nc_new ) * this % nc ( 3 ) Xc_new ( j , 1 : dim ) = Xcw_new ( j , 1 : dim ) / Xcw_new ( j , dim + 1 ) end do Wc_new (:) = Xcw_new (:, dim + 1 ) call this % set ( knot1 = this % get_knot ( 1 ), knot2 = knot_new , knot3 = this % get_knot ( 3 ), Xc = Xc_new , Wc = Wc_new ) deallocate ( Xcw_new , Xc_new , Wc_new ) end if end do else ! B-Spline do i = 1 , size ( Xth ) k = findspan ( this % nc ( 2 ) - 1 , this % degree ( 2 ), Xth ( i ), this % knot2 ) if ( this % knot2 ( k + 1 ) == Xth ( i )) then s = compute_multiplicity ( this % knot2 , Xth ( i )) else s = 0 end if k = k + 1 dim = size ( this % Xc , 2 ) Xc4 = reshape ( this % Xc , [ this % nc ( 1 ), this % nc ( 2 ), this % nc ( 3 ), dim ]) Xc4 = reshape ( Xc4 , [ this % nc ( 2 ), this % nc ( 1 ), this % nc ( 3 ), dim ], order = [ 2 , 1 , 3 , 4 ]) Xc = reshape ( Xc4 , [ this % nc ( 2 ), this % nc ( 1 ) * this % nc ( 3 ) * dim ]) call remove_knots_A_5_8 (& this % degree ( 2 ),& this % knot2 ,& Xc ,& Xth ( i ),& k ,& s ,& r ( i ),& t ,& knot_new ,& Xc_new ) if ( allocated ( Xc )) deallocate ( Xc ) if ( t == 0 ) then ! no change else nc_new = size ( Xcw_new , 1 ) Xc4 = reshape ( Xc_new , [ nc_new , this % nc ( 1 ), this % nc ( 3 ), dim ]) Xc4 = reshape ( Xc4 , [ this % nc ( 1 ), nc_new , this % nc ( 3 ), dim ], order = [ 2 , 1 , 3 , 4 ]) Xc_new = reshape ( Xc4 , [ this % nc ( 1 ) * ( nc_new ) * this % nc ( 3 ), dim ]) call this % set ( knot1 = this % get_knot ( 1 ), knot2 = knot_new , knot3 = this % get_knot ( 3 ), Xc = Xc_new ) end if end do end if elseif ( dir == 3 ) then ! direction 3 if ( allocated ( this % Wc )) then ! NURBS do i = 1 , size ( Xth ) k = findspan ( this % nc ( 3 ) - 1 , this % degree ( 3 ), Xth ( i ), this % knot3 ) if ( this % knot3 ( k + 1 ) == Xth ( i )) then s = compute_multiplicity ( this % knot3 , Xth ( i )) else s = 0 end if k = k + 1 dim = size ( this % Xc , 2 ) allocate ( Xcw ( size ( this % Xc , 1 ), dim + 1 )) do j = 1 , size ( this % Xc , 1 ) Xcw ( j , 1 : dim ) = this % Xc ( j , 1 : dim ) * this % Wc ( j ) end do Xcw (:, dim + 1 ) = this % Wc (:) Xc4 = reshape ( Xcw , [ this % nc ( 1 ), this % nc ( 2 ), this % nc ( 3 ), dim + 1 ]) Xc4 = reshape ( Xc4 , [ this % nc ( 3 ), this % nc ( 2 ), this % nc ( 1 ), dim + 1 ], order = [ 3 , 2 , 1 , 4 ]) Xcw = reshape ( Xc4 , [ this % nc ( 3 ), this % nc ( 2 ) * this % nc ( 1 ) * ( dim + 1 )]) call remove_knots_A_5_8 (& this % degree ( 3 ),& this % knot3 ,& Xcw ,& Xth ( i ),& k ,& s ,& r ( i ),& t ,& knot_new ,& Xcw_new ) if ( allocated ( Xcw )) deallocate ( Xcw ) if ( t == 0 ) then ! no change else nc_new = size ( Xcw_new , 1 ) Xc4 = reshape ( Xcw_new , [ nc_new , this % nc ( 2 ), this % nc ( 1 ), dim + 1 ]) Xc4 = reshape ( Xc4 , [ this % nc ( 1 ), this % nc ( 2 ), nc_new , dim + 1 ], order = [ 3 , 2 , 1 , 4 ]) Xcw_new = reshape ( Xc4 , [ this % nc ( 1 ) * this % nc ( 2 ) * ( nc_new ), dim + 1 ]) allocate ( Xc_new ( 1 : this % nc ( 1 ) * this % nc ( 2 ) * ( nc_new ), 1 : dim )) allocate ( Wc_new ( 1 : this % nc ( 1 ) * this % nc ( 2 ) * ( nc_new ))) do j = 1 , this % nc ( 1 ) * this % nc ( 2 ) * ( nc_new ) Xc_new ( j , 1 : dim ) = Xcw_new ( j , 1 : dim ) / Xcw_new ( j , dim + 1 ) end do Wc_new (:) = Xcw_new (:, dim + 1 ) call this % set ( knot1 = this % get_knot ( 1 ), knot2 = this % get_knot ( 2 ), knot3 = knot_new , Xc = Xc_new , Wc = Wc_new ) deallocate ( Xcw_new , Xc_new , Wc_new ) end if end do else ! B-Spline do i = 1 , size ( Xth ) k = findspan ( this % nc ( 3 ) - 1 , this % degree ( 3 ), Xth ( i ), this % knot3 ) if ( this % knot3 ( k + 1 ) == Xth ( i )) then s = compute_multiplicity ( this % knot3 , Xth ( i )) else s = 0 end if k = k + 1 dim = size ( this % Xc , 2 ) Xc4 = reshape ( this % Xc , [ this % nc ( 1 ), this % nc ( 2 ), this % nc ( 3 ), dim ]) Xc4 = reshape ( Xc4 , [ this % nc ( 3 ), this % nc ( 2 ), this % nc ( 1 ), dim ], order = [ 3 , 2 , 1 , 4 ]) Xc = reshape ( Xc4 , [ this % nc ( 3 ), this % nc ( 2 ) * this % nc ( 1 ) * dim ]) call remove_knots_A_5_8 (& this % degree ( 3 ),& this % knot3 ,& Xc ,& Xth ( i ),& k ,& s ,& r ( i ),& t ,& knot_new ,& Xc_new ) if ( allocated ( Xc )) deallocate ( Xc ) if ( t == 0 ) then ! no change else nc_new = size ( Xcw_new , 1 ) Xc4 = reshape ( Xc_new , [ nc_new , this % nc ( 2 ), this % nc ( 1 ), dim ]) Xc4 = reshape ( Xc4 , [ this % nc ( 1 ), this % nc ( 2 ), nc_new , dim ], order = [ 3 , 2 , 1 , 4 ]) Xc_new = reshape ( Xc4 , [ this % nc ( 1 ) * this % nc ( 2 ) * ( nc_new ), dim ]) call this % set ( knot1 = this % get_knot ( 1 ), knot2 = this % get_knot ( 2 ), knot3 = knot_new , Xc = Xc_new ) end if end do end if else error stop 'Invalid direction.' end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function cmp_elem ( this ) result ( elemConn ) class ( nurbs_volume ), intent ( in ) :: this integer , allocatable :: elemConn (:,:) call elemConn_Cn ( this % nc ( 1 ), this % nc ( 2 ), this % nc ( 3 ),& this % degree ( 1 ), this % degree ( 2 ), this % degree ( 3 ),& unique ( this % knot1 ), unique ( this % knot2 ), unique ( this % knot3 ),& this % get_multiplicity ( 1 ), this % get_multiplicity ( 2 ), this % get_multiplicity ( 3 ),& elemConn ) end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine rotate_Xc ( this , alpha , beta , theta ) class ( nurbs_volume ), intent ( inout ) :: this real ( rk ), intent ( in ) :: alpha , beta , theta integer :: i do i = 1 , this % nc ( 1 ) * this % nc ( 2 ) * this % nc ( 3 ) this % Xc ( i , :) = matmul ( rotation ( alpha , beta , theta ), this % Xc ( i , :)) end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine rotate_Xg ( this , alpha , beta , theta ) class ( nurbs_volume ), intent ( inout ) :: this real ( rk ), intent ( in ) :: alpha , beta , theta integer :: i do i = 1 , this % ng ( 1 ) * this % ng ( 2 ) * this % ng ( 3 ) this % Xg ( i , :) = matmul ( rotation ( alpha , beta , theta ), this % Xg ( i , :)) end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine translate_Xc ( this , vec ) class ( nurbs_volume ), intent ( inout ) :: this real ( rk ), intent ( in ) :: vec (:) integer :: i do i = 1 , this % nc ( 1 ) * this % nc ( 2 ) * this % nc ( 3 ) this % Xc ( i , :) = this % Xc ( i , :) + vec end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine translate_Xg ( this , vec ) class ( nurbs_volume ), intent ( inout ) :: this real ( rk ), intent ( in ) :: vec (:) integer :: i do i = 1 , this % ng ( 1 ) * this % ng ( 2 ) * this % ng ( 3 ) this % Xg ( i , :) = this % Xg ( i , :) + vec end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine show ( this , vtkfile_Xc , vtkfile_Xg ) class ( nurbs_volume ), intent ( inout ) :: this character ( len =* ), intent ( in ) :: vtkfile_Xc , vtkfile_Xg character ( len = 3000 ) :: pyvista_script pyvista_script = & \"import pyvista as pv\" // achar ( 10 ) // & \"pv.global_theme.color = 'white'\" // achar ( 10 ) // & \"Xc = pv.read('\" // trim ( vtkfile_Xc ) // \"')\" // achar ( 10 ) // & \"Xg = pv.read('\" // trim ( vtkfile_Xg ) // \"')\" // achar ( 10 ) // & \"p = pv.Plotter(lighting='light kit')\" // achar ( 10 ) // & \"actor_Xcp = p.add_mesh(\" // achar ( 10 ) // & \" Xc,\" // achar ( 10 ) // & \" style='points',\" // achar ( 10 ) // & \" point_size=10,\" // achar ( 10 ) // & \" color='red',\" // achar ( 10 ) // & \" render_points_as_spheres=True,\" // achar ( 10 ) // & \" opacity=0.5,\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"actor_Xcw = p.add_mesh(\" // achar ( 10 ) // & \" Xc,\" // achar ( 10 ) // & \" show_edges=True,\" // achar ( 10 ) // & \" color='yellow',\" // achar ( 10 ) // & \" line_width=3,\" // achar ( 10 ) // & \" style='wireframe',\" // achar ( 10 ) // & \" opacity=0.2\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"actor_Xg = p.add_mesh(\" // achar ( 10 ) // & \" Xg,\" // achar ( 10 ) // & \" show_edges=False,\" // achar ( 10 ) // & \" color='cyan',\" // achar ( 10 ) // & \" line_width=7,\" // achar ( 10 ) // & \" metallic=0.6,\" // achar ( 10 ) // & \" pbr=True,\" // achar ( 10 ) // & \" split_sharp_edges=True,\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"p.add_axes(interactive=False)\" // achar ( 10 ) // & \"def point_picker_callback(point):\" // achar ( 10 ) // & \" mesh = Xc\" // achar ( 10 ) // & \" point_id = mesh.find_closest_point(point)\" // achar ( 10 ) // & \" point_coords = mesh.points[point_id]\" // achar ( 10 ) // & \" label = f'ID: {point_id + 1}\\n({point_coords[0]:.3f}, {point_coords[1]:.3f}, {point_coords[2]:.3f})'\" // achar ( 10 ) // & \" p.add_point_labels(\" // achar ( 10 ) // & \" [point_coords],\" // achar ( 10 ) // & \" [label],\" // achar ( 10 ) // & \" font_size=14,\" // achar ( 10 ) // & \" text_color='black',\" // achar ( 10 ) // & \" show_points=False,\" // achar ( 10 ) // & \" fill_shape=False,\" // achar ( 10 ) // & \" shape=None,\" // achar ( 10 ) // & \" )\" // achar ( 10 ) // & \"picker = p.enable_point_picking(callback=point_picker_callback, show_message=False)\" // achar ( 10 ) // & \"window_size = p.window_size\" // achar ( 10 ) // & \"y_pos = window_size[1]\" // achar ( 10 ) // & \"def Xcp_toggle_vis(flag):\" // achar ( 10 ) // & \" actor_Xcp.SetVisibility(flag)\" // achar ( 10 ) // & \"def Xcw_toggle_vis(flag):\" // achar ( 10 ) // & \" actor_Xcw.SetVisibility(flag)\" // achar ( 10 ) // & \"def Xg_toggle_vis(flag):\" // achar ( 10 ) // & \" actor_Xg.SetVisibility(flag)\" // achar ( 10 ) // & \"p.add_checkbox_button_widget(\" // achar ( 10 ) // & \" Xcp_toggle_vis,\" // achar ( 10 ) // & \" value=True,\" // achar ( 10 ) // & \" color_on='red',\" // achar ( 10 ) // & \" size=25,\" // achar ( 10 ) // & \" position=(0, y_pos - 1 * 25),\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"p.add_checkbox_button_widget(\" // achar ( 10 ) // & \" Xcw_toggle_vis,\" // achar ( 10 ) // & \" value=True,\" // achar ( 10 ) // & \" color_on='yellow',\" // achar ( 10 ) // & \" size=25,\" // achar ( 10 ) // & \" position=(0, y_pos - 2 * 25),\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"p.add_checkbox_button_widget(\" // achar ( 10 ) // & \" Xg_toggle_vis,\" // achar ( 10 ) // & \" value=True,\" // achar ( 10 ) // & \" color_on='cyan',\" // achar ( 10 ) // & \" size=25,\" // achar ( 10 ) // & \" position=(0, y_pos - 3 * 25),\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"p.add_text(\" // achar ( 10 ) // & \" 'Xc (Points)',\" // achar ( 10 ) // & \" position=(25 + 3, y_pos - 1 * 25),\" // achar ( 10 ) // & \" font_size=8,\" // achar ( 10 ) // & \" color='black',\" // achar ( 10 ) // & \" font='times',\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"p.add_text(\" // achar ( 10 ) // & \" 'Xc (Control geometry)',\" // achar ( 10 ) // & \" position=(25 + 3, y_pos - 2 * 25),\" // achar ( 10 ) // & \" font_size=8,\" // achar ( 10 ) // & \" color='black',\" // achar ( 10 ) // & \" font='times',\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"p.add_text(\" // achar ( 10 ) // & \" 'Xg (Geometry)',\" // achar ( 10 ) // & \" position=(25 + 3, y_pos - 3 * 25),\" // achar ( 10 ) // & \" font_size=8,\" // achar ( 10 ) // & \" color='black',\" // achar ( 10 ) // & \" font='times',\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"p.add_text('ForCAD', position=(0.0, 10.0), font_size=14, color='black', font='times')\" // achar ( 10 ) // & \"p.add_text(\" // achar ( 10 ) // & \" 'https://github.com/gha3mi/forcad',\" // achar ( 10 ) // & \" position=(0.0, 0.0),\" // achar ( 10 ) // & \" font_size=7,\" // achar ( 10 ) // & \" color='blue',\" // achar ( 10 ) // & \" font='times',\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"p.show(title='ForCAD', interactive=True)\" call execute_command_line ( 'python -c \"' // trim ( adjustl ( pyvista_script )) // '\"' ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine set_ring ( this , center , radius1 , radius2 , length ) class ( nurbs_volume ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: center (:) real ( rk ), intent ( in ) :: radius1 , radius2 , length real ( rk ), allocatable :: Xc (:,:), Wc (:), knot1 (:), knot2 (:), knot3 (:) integer :: i ! Define control points for ring allocate ( Xc ( 28 , 3 )) Xc ( 1 ,:) = [ 1.0_rk , 0.0_rk , 0.0_rk ] Xc ( 2 ,:) = [ 1.0_rk , sqrt ( 3.0_rk ), 0.0_rk ] Xc ( 3 ,:) = [ - 0.5_rk , sqrt ( 3.0_rk ) / 2.0_rk , 0.0_rk ] Xc ( 4 ,:) = [ - 2.0_rk , 0.0_rk , 0.0_rk ] Xc ( 5 ,:) = [ - 0.5_rk , - sqrt ( 3.0_rk ) / 2.0_rk , 0.0_rk ] Xc ( 6 ,:) = [ 1.0_rk , - sqrt ( 3.0_rk ), 0.0_rk ] Xc ( 7 ,:) = [ 1.0_rk , 0.0_rk , 0.0_rk ] Xc ( 1 : 7 , 1 : 2 ) = Xc ( 1 : 7 , 1 : 2 ) * radius1 Xc ( 8 ,:) = [ 1.0_rk , 0.0_rk , 0.0_rk ] Xc ( 9 ,:) = [ 1.0_rk , sqrt ( 3.0_rk ), 0.0_rk ] Xc ( 10 ,:) = [ - 0.5_rk , sqrt ( 3.0_rk ) / 2.0_rk , 0.0_rk ] Xc ( 11 ,:) = [ - 2.0_rk , 0.0_rk , 0.0_rk ] Xc ( 12 ,:) = [ - 0.5_rk , - sqrt ( 3.0_rk ) / 2.0_rk , 0.0_rk ] Xc ( 13 ,:) = [ 1.0_rk , - sqrt ( 3.0_rk ), 0.0_rk ] Xc ( 14 ,:) = [ 1.0_rk , 0.0_rk , 0.0_rk ] Xc ( 8 : 14 , 1 : 2 ) = Xc ( 8 : 14 , 1 : 2 ) * radius2 Xc ( 15 ,:) = [ 1.0_rk , 0.0_rk , length ] Xc ( 16 ,:) = [ 1.0_rk , sqrt ( 3.0_rk ), length ] Xc ( 17 ,:) = [ - 0.5_rk , sqrt ( 3.0_rk ) / 2.0_rk , length ] Xc ( 18 ,:) = [ - 2.0_rk , 0.0_rk , length ] Xc ( 19 ,:) = [ - 0.5_rk , - sqrt ( 3.0_rk ) / 2.0_rk , length ] Xc ( 20 ,:) = [ 1.0_rk , - sqrt ( 3.0_rk ), length ] Xc ( 21 ,:) = [ 1.0_rk , 0.0_rk , length ] Xc ( 15 : 21 , 1 : 2 ) = Xc ( 15 : 21 , 1 : 2 ) * radius1 Xc ( 22 ,:) = [ 1.0_rk , 0.0_rk , length ] Xc ( 23 ,:) = [ 1.0_rk , sqrt ( 3.0_rk ), length ] Xc ( 24 ,:) = [ - 0.5_rk , sqrt ( 3.0_rk ) / 2.0_rk , length ] Xc ( 25 ,:) = [ - 2.0_rk , 0.0_rk , length ] Xc ( 26 ,:) = [ - 0.5_rk , - sqrt ( 3.0_rk ) / 2.0_rk , length ] Xc ( 27 ,:) = [ 1.0_rk , - sqrt ( 3.0_rk ), length ] Xc ( 28 ,:) = [ 1.0_rk , 0.0_rk , length ] Xc ( 22 : 28 , 1 : 2 ) = Xc ( 22 : 28 , 1 : 2 ) * radius2 ! Translate the control points do i = 1 , size ( Xc , 1 ) Xc ( i ,:) = center + Xc ( i ,:) end do ! Define weights for the control points Wc = [ 1.0_rk , 0.5_rk , 1.0_rk , 0.5_rk , 1.0_rk , 0.5_rk , 1.0_rk ,& 1.0_rk , 0.5_rk , 1.0_rk , 0.5_rk , 1.0_rk , 0.5_rk , 1.0_rk ,& 1.0_rk , 0.5_rk , 1.0_rk , 0.5_rk , 1.0_rk , 0.5_rk , 1.0_rk ,& 1.0_rk , 0.5_rk , 1.0_rk , 0.5_rk , 1.0_rk , 0.5_rk , 1.0_rk ] ! Define knot vector knot1 = [ 0.0_rk , 0.0_rk , 0.0_rk , 1.0_rk / 3.0_rk , 1.0_rk / 3.0_rk , 2.0_rk / 3.0_rk , 2.0_rk / 3.0_rk , 1.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 vector, control points, and weights call this % set ( knot1 , knot2 , knot3 , Xc , Wc ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine set_C ( this , center , radius1 , radius2 , length ) class ( nurbs_volume ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: center (:) real ( rk ), intent ( in ) :: radius1 , radius2 , length real ( rk ), allocatable :: Xc (:,:), Wc (:), knot1 (:), knot2 (:), knot3 (:) integer :: i ! Define control points for C-shape allocate ( Xc ( 20 , 3 )) Xc ( 1 ,:) = [ 1.0_rk , 0.0_rk , 0.0_rk ] Xc ( 2 ,:) = [ 1.0_rk , sqrt ( 3.0_rk ), 0.0_rk ] Xc ( 3 ,:) = [ - 0.5_rk , sqrt ( 3.0_rk ) / 2.0_rk , 0.0_rk ] Xc ( 4 ,:) = [ - 2.0_rk , 0.0_rk , 0.0_rk ] Xc ( 5 ,:) = [ - 0.5_rk , - sqrt ( 3.0_rk ) / 2.0_rk , 0.0_rk ] Xc ( 1 : 5 , 1 : 2 ) = Xc ( 1 : 5 , 1 : 2 ) * radius1 Xc ( 6 ,:) = [ 1.0_rk , 0.0_rk , 0.0_rk ] Xc ( 7 ,:) = [ 1.0_rk , sqrt ( 3.0_rk ), 0.0_rk ] Xc ( 8 ,:) = [ - 0.5_rk , sqrt ( 3.0_rk ) / 2.0_rk , 0.0_rk ] Xc ( 9 ,:) = [ - 2.0_rk , 0.0_rk , 0.0_rk ] Xc ( 10 ,:) = [ - 0.5_rk , - sqrt ( 3.0_rk ) / 2.0_rk , 0.0_rk ] Xc ( 6 : 10 , 1 : 2 ) = Xc ( 6 : 10 , 1 : 2 ) * radius2 Xc ( 11 ,:) = [ 1.0_rk , 0.0_rk , length ] Xc ( 12 ,:) = [ 1.0_rk , sqrt ( 3.0_rk ), length ] Xc ( 13 ,:) = [ - 0.5_rk , sqrt ( 3.0_rk ) / 2.0_rk , length ] Xc ( 14 ,:) = [ - 2.0_rk , 0.0_rk , length ] Xc ( 15 ,:) = [ - 0.5_rk , - sqrt ( 3.0_rk ) / 2.0_rk , length ] Xc ( 11 : 15 , 1 : 2 ) = Xc ( 11 : 15 , 1 : 2 ) * radius1 Xc ( 16 ,:) = [ 1.0_rk , 0.0_rk , length ] Xc ( 17 ,:) = [ 1.0_rk , sqrt ( 3.0_rk ), length ] Xc ( 18 ,:) = [ - 0.5_rk , sqrt ( 3.0_rk ) / 2.0_rk , length ] Xc ( 19 ,:) = [ - 2.0_rk , 0.0_rk , length ] Xc ( 20 ,:) = [ - 0.5_rk , - sqrt ( 3.0_rk ) / 2.0_rk , length ] Xc ( 16 : 20 , 1 : 2 ) = Xc ( 16 : 20 , 1 : 2 ) * radius2 ! Translate the control points do i = 1 , size ( Xc , 1 ) Xc ( i ,:) = center + Xc ( i ,:) end do ! Define weights for the control points Wc = [ 1.0_rk , 0.5_rk , 1.0_rk , 0.5_rk , 1.0_rk ,& 1.0_rk , 0.5_rk , 1.0_rk , 0.5_rk , 1.0_rk ,& 1.0_rk , 0.5_rk , 1.0_rk , 0.5_rk , 1.0_rk ,& 1.0_rk , 0.5_rk , 1.0_rk , 0.5_rk , 1.0_rk ] ! Define knot vector knot1 = [ 0.0_rk , 0.0_rk , 0.0_rk , 1.0_rk / 2.0_rk , 1.0_rk / 2.0_rk , 1.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 vector, control points, and weights call this % set ( knot1 , knot2 , knot3 , Xc , Wc ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine set_half_ring ( this , center , radius1 , radius2 , length ) class ( nurbs_volume ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: center (:) real ( rk ), intent ( in ) :: radius1 , radius2 , length real ( rk ), allocatable :: Xc (:,:), Wc (:), knot1 (:), knot2 (:), knot3 (:) integer :: i ! Define control points for half ring allocate ( Xc ( 20 , 3 )) Xc ( 1 ,:) = [ 0.5_rk , 0.0_rk , 0.0_rk ] Xc ( 2 ,:) = [ 0.5_rk , 0.5_rk , 0.0_rk ] Xc ( 3 ,:) = [ 0.0_rk , 0.5_rk , 0.0_rk ] Xc ( 4 ,:) = [ - 0.5_rk , 0.5_rk , 0.0_rk ] Xc ( 5 ,:) = [ - 0.5_rk , 0.0_rk , 0.0_rk ] Xc ( 1 : 5 , 1 : 2 ) = Xc ( 1 : 5 , 1 : 2 ) * radius1 Xc ( 6 ,:) = [ 0.5_rk , 0.0_rk , 0.0_rk ] Xc ( 7 ,:) = [ 0.5_rk , 0.5_rk , 0.0_rk ] Xc ( 8 ,:) = [ 0.0_rk , 0.5_rk , 0.0_rk ] Xc ( 9 ,:) = [ - 0.5_rk , 0.5_rk , 0.0_rk ] Xc ( 10 ,:) = [ - 0.5_rk , 0.0_rk , 0.0_rk ] Xc ( 6 : 10 , 1 : 2 ) = Xc ( 6 : 10 , 1 : 2 ) * radius2 Xc ( 11 ,:) = [ 0.5_rk , 0.0_rk , length ] Xc ( 12 ,:) = [ 0.5_rk , 0.5_rk , length ] Xc ( 13 ,:) = [ 0.0_rk , 0.5_rk , length ] Xc ( 14 ,:) = [ - 0.5_rk , 0.5_rk , length ] Xc ( 15 ,:) = [ - 0.5_rk , 0.0_rk , length ] Xc ( 11 : 15 , 1 : 2 ) = Xc ( 11 : 15 , 1 : 2 ) * radius1 Xc ( 16 ,:) = [ 0.5_rk , 0.0_rk , length ] Xc ( 17 ,:) = [ 0.5_rk , 0.5_rk , length ] Xc ( 18 ,:) = [ 0.0_rk , 0.5_rk , length ] Xc ( 19 ,:) = [ - 0.5_rk , 0.5_rk , length ] Xc ( 20 ,:) = [ - 0.5_rk , 0.0_rk , length ] Xc ( 16 : 20 , 1 : 2 ) = Xc ( 16 : 20 , 1 : 2 ) * radius2 ! Translate the control points do i = 1 , size ( Xc , 1 ) Xc ( i ,:) = center + Xc ( i ,:) end do ! Define weights for the control points Wc = [ 1.0_rk , 1.0_rk / sqrt ( 2.0_rk ), 1.0_rk , 1.0_rk / sqrt ( 2.0_rk ), 1.0_rk ,& 1.0_rk , 1.0_rk / sqrt ( 2.0_rk ), 1.0_rk , 1.0_rk / sqrt ( 2.0_rk ), 1.0_rk ,& 1.0_rk , 1.0_rk / sqrt ( 2.0_rk ), 1.0_rk , 1.0_rk / sqrt ( 2.0_rk ), 1.0_rk ,& 1.0_rk , 1.0_rk / sqrt ( 2.0_rk ), 1.0_rk , 1.0_rk / sqrt ( 2.0_rk ), 1.0_rk ] ! Define knot vector knot1 = [ 0.0_rk , 0.0_rk , 0.0_rk , 1.0_rk / 2.0_rk , & 1.0_rk / 2.0_rk , 1.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 vector, control points, and weights call this % set ( knot1 , knot2 , knot3 , Xc , Wc ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine nearest_point ( this , point_Xg , nearest_Xg , nearest_Xt , id ) class ( nurbs_volume ), intent ( in ) :: this real ( rk ), intent ( in ) :: point_Xg (:) real ( rk ), intent ( out ), allocatable , optional :: nearest_Xg (:) real ( rk ), intent ( out ), allocatable , optional :: nearest_Xt (:) integer , intent ( out ), optional :: id integer :: id_ real ( rk ), allocatable :: distances (:) allocate ( distances ( this % ng ( 1 ) * this % ng ( 2 ) * this % ng ( 3 ))) distances = nearest_point_help_3d ( this % ng , this % Xg , point_Xg ) id_ = minloc ( distances , dim = 1 ) if ( present ( id )) id = id_ if ( present ( nearest_Xg )) nearest_Xg = this % Xg ( id_ ,:) if ( present ( nearest_Xt )) nearest_Xt = this % Xt ( id_ ,:) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine nearest_point2 ( this , point_Xg , tol , maxit , nearest_Xt , nearest_Xg ) class ( nurbs_volume ), intent ( inout ) :: this real ( rk ), intent ( in ) :: point_Xg (:) real ( rk ), intent ( in ) :: tol integer , intent ( in ) :: maxit real ( rk ), intent ( out ) :: nearest_Xt ( 3 ) real ( rk ), allocatable , intent ( out ), optional :: nearest_Xg (:) real ( rk ) :: xk ( 3 ), obj , grad ( 3 ), hess ( 3 , 3 ), dk ( 3 ), alphak , tau , beta , det_inv , Ainv ( 3 , 3 ), lower_bounds ( 3 ), upper_bounds ( 3 ) real ( rk ), allocatable :: Xg (:), Tgc (:), dTgc (:,:), d2Tgc (:,:), distances (:) integer :: k , l logical :: convergenz type ( nurbs_volume ) :: copy_this k = 0 ! lower and upper bounds lower_bounds = [ minval ( this % knot1 ), minval ( this % knot2 ), minval ( this % knot3 )] upper_bounds = [ maxval ( this % knot1 ), maxval ( this % knot2 ), maxval ( this % knot3 )] ! guess initial point copy_this = this call this % create ( 50 , 50 , 50 ) allocate ( distances ( copy_this % ng ( 1 ) * copy_this % ng ( 2 ) * copy_this % ng ( 3 ))) distances = nearest_point_help_3d ( copy_this % ng , copy_this % Xg , point_Xg ) xk = copy_this % Xt ( minloc ( distances , dim = 1 ),:) call copy_this % finalize () ! Check if xk is within the knot vector range if ( xk ( 1 ) < minval ( this % knot1 )) then xk ( 1 ) = minval ( this % knot1 ) else if ( xk ( 1 ) > maxval ( this % knot1 )) then xk ( 1 ) = maxval ( this % knot1 ) end if if ( xk ( 2 ) < minval ( this % knot2 )) then xk ( 2 ) = minval ( this % knot2 ) else if ( xk ( 2 ) > maxval ( this % knot2 )) then xk ( 2 ) = maxval ( this % knot2 ) end if if ( xk ( 3 ) < minval ( this % knot3 )) then xk ( 3 ) = minval ( this % knot3 ) else if ( xk ( 3 ) > maxval ( this % knot3 )) then xk ( 3 ) = maxval ( this % knot3 ) end if convergenz = . false . allocate ( Xg ( size ( this % Xc , 2 ))) ! allocate(dTgc(size(this%Xc,1), 2)) ! allocate(d2Tgc(size(this%Xc,1), 2)) do while (. not . convergenz . and . k < maxit ) ! objection, gradient and hessian Xg = this % cmp_Xg ( xk ) call this % derivative2 ( Xt = xk , d2Tgc = d2Tgc , dTgc = dTgc , Tgc = Tgc ) ! Tgc is not needed obj = norm2 ( Xg - point_Xg ) + 0.001_rk ! add a small number to avoid division by zero grad ( 1 ) = dot_product (( Xg - point_Xg ) / obj , matmul ( dTgc (:, 1 ), this % Xc )) grad ( 2 ) = dot_product (( Xg - point_Xg ) / obj , matmul ( dTgc (:, 2 ), this % Xc )) grad ( 3 ) = dot_product (( Xg - point_Xg ) / obj , matmul ( dTgc (:, 3 ), this % Xc )) hess ( 1 , 1 ) = ( dot_product ( matmul ( dTgc (:, 1 ), this % Xc ), matmul ( dTgc (:, 1 ), this % Xc )) + dot_product (( Xg - point_Xg ), & matmul ( d2Tgc ( 1 : this % nc ( 1 ) * this % nc ( 2 ) * this % nc ( 3 ) , 1 ), this % Xc )) ) / obj & - ( dot_product ( Xg - point_Xg , matmul ( dTgc (:, 1 ), this % Xc )) * grad ( 1 ) ) / obj ** 2 hess ( 2 , 1 ) = ( dot_product ( matmul ( dTgc (:, 1 ), this % Xc ), matmul ( dTgc (:, 2 ), this % Xc )) + dot_product (( Xg - point_Xg ), & matmul ( d2Tgc ( this % nc ( 1 ) * this % nc ( 2 ) * this % nc ( 3 ) + 1 : 2 * this % nc ( 1 ) * this % nc ( 2 ) * this % nc ( 3 ) , 1 ), this % Xc )) ) / obj & - ( dot_product ( Xg - point_Xg , matmul ( dTgc (:, 2 ), this % Xc )) * grad ( 1 ) ) / obj ** 2 hess ( 3 , 1 ) = ( dot_product ( matmul ( dTgc (:, 1 ), this % Xc ), matmul ( dTgc (:, 3 ), this % Xc )) + dot_product (( Xg - point_Xg ), & matmul ( d2Tgc ( 2 * this % nc ( 1 ) * this % nc ( 2 ) * this % nc ( 3 ) + 1 : 3 * this % nc ( 1 ) * this % nc ( 2 ) * this % nc ( 3 ) , 1 ), this % Xc )) ) / obj & - ( dot_product ( Xg - point_Xg , matmul ( dTgc (:, 3 ), this % Xc )) * grad ( 1 ) ) / obj ** 2 hess ( 1 , 2 ) = ( dot_product ( matmul ( dTgc (:, 2 ), this % Xc ), matmul ( dTgc (:, 1 ), this % Xc )) + dot_product (( Xg - point_Xg ), & matmul ( d2Tgc ( 1 : this % nc ( 1 ) * this % nc ( 2 ) * this % nc ( 3 ) , 2 ), this % Xc )) ) / obj & - ( dot_product ( Xg - point_Xg , matmul ( dTgc (:, 1 ), this % Xc )) * grad ( 2 ) ) / obj ** 2 hess ( 2 , 2 ) = ( dot_product ( matmul ( dTgc (:, 2 ), this % Xc ), matmul ( dTgc (:, 2 ), this % Xc )) + dot_product (( Xg - point_Xg ), & matmul ( d2Tgc ( this % nc ( 1 ) * this % nc ( 2 ) * this % nc ( 3 ) + 1 : 2 * this % nc ( 1 ) * this % nc ( 2 ) * this % nc ( 3 ) , 2 ), this % Xc )) ) / obj & - ( dot_product ( Xg - point_Xg , matmul ( dTgc (:, 2 ), this % Xc )) * grad ( 2 ) ) / obj ** 2 hess ( 3 , 2 ) = ( dot_product ( matmul ( dTgc (:, 2 ), this % Xc ), matmul ( dTgc (:, 3 ), this % Xc )) + dot_product (( Xg - point_Xg ), & matmul ( d2Tgc ( 2 * this % nc ( 1 ) * this % nc ( 2 ) * this % nc ( 3 ) + 1 : 3 * this % nc ( 1 ) * this % nc ( 2 ) * this % nc ( 3 ) , 2 ), this % Xc )) ) / obj & - ( dot_product ( Xg - point_Xg , matmul ( dTgc (:, 3 ), this % Xc )) * grad ( 2 ) ) / obj ** 2 hess ( 1 , 3 ) = ( dot_product ( matmul ( dTgc (:, 3 ), this % Xc ), matmul ( dTgc (:, 1 ), this % Xc )) + dot_product (( Xg - point_Xg ), & matmul ( d2Tgc ( 1 : this % nc ( 1 ) * this % nc ( 2 ) * this % nc ( 3 ) , 3 ), this % Xc )) ) / obj & - ( dot_product ( Xg - point_Xg , matmul ( dTgc (:, 1 ), this % Xc )) * grad ( 3 ) ) / obj ** 2 hess ( 2 , 3 ) = ( dot_product ( matmul ( dTgc (:, 3 ), this % Xc ), matmul ( dTgc (:, 2 ), this % Xc )) + dot_product (( Xg - point_Xg ), & matmul ( d2Tgc ( this % nc ( 1 ) * this % nc ( 2 ) * this % nc ( 3 ) + 1 : 2 * this % nc ( 1 ) * this % nc ( 2 ) * this % nc ( 3 ) , 3 ), this % Xc )) ) / obj & - ( dot_product ( Xg - point_Xg , matmul ( dTgc (:, 2 ), this % Xc )) * grad ( 3 ) ) / obj ** 2 hess ( 3 , 3 ) = ( dot_product ( matmul ( dTgc (:, 3 ), this % Xc ), matmul ( dTgc (:, 3 ), this % Xc )) + dot_product (( Xg - point_Xg ), & matmul ( d2Tgc ( 2 * this % nc ( 1 ) * this % nc ( 2 ) * this % nc ( 3 ) + 1 : 3 * this % nc ( 1 ) * this % nc ( 2 ) * this % nc ( 3 ) , 3 ), this % Xc )) ) / obj & - ( dot_product ( Xg - point_Xg , matmul ( dTgc (:, 3 ), this % Xc )) * grad ( 3 ) ) / obj ** 2 ! debug print '(i3,1x,3e20.10,1x,e20.10)' , k , xk , norm2 ( grad ) if ( norm2 ( grad ) <= tol ) then convergenz = . true . nearest_Xt = xk if ( present ( nearest_Xg )) nearest_Xg = this % cmp_Xg ( nearest_Xt ) else ! Inverse of Hessian det_inv = 1.0_rk / (& + hess ( 1 , 1 ) * hess ( 2 , 2 ) * hess ( 3 , 3 ) - hess ( 1 , 1 ) * hess ( 2 , 3 ) * hess ( 3 , 2 )& - hess ( 1 , 2 ) * hess ( 2 , 1 ) * hess ( 3 , 3 ) + hess ( 1 , 2 ) * hess ( 2 , 3 ) * hess ( 3 , 1 )& + hess ( 1 , 3 ) * hess ( 2 , 1 ) * hess ( 3 , 2 ) - hess ( 1 , 3 ) * hess ( 2 , 2 ) * hess ( 3 , 1 )) Ainv ( 1 , 1 ) = + ( hess ( 2 , 2 ) * hess ( 3 , 3 ) - hess ( 2 , 3 ) * hess ( 3 , 2 )) Ainv ( 2 , 1 ) = - ( hess ( 2 , 1 ) * hess ( 3 , 3 ) - hess ( 2 , 3 ) * hess ( 3 , 1 )) Ainv ( 3 , 1 ) = + ( hess ( 2 , 1 ) * hess ( 3 , 2 ) - hess ( 2 , 2 ) * hess ( 3 , 1 )) Ainv ( 1 , 2 ) = - ( hess ( 1 , 2 ) * hess ( 3 , 3 ) - hess ( 1 , 3 ) * hess ( 3 , 2 )) Ainv ( 2 , 2 ) = + ( hess ( 1 , 1 ) * hess ( 3 , 3 ) - hess ( 1 , 3 ) * hess ( 3 , 1 )) Ainv ( 3 , 2 ) = - ( hess ( 1 , 1 ) * hess ( 3 , 2 ) - hess ( 1 , 2 ) * hess ( 3 , 1 )) Ainv ( 1 , 3 ) = + ( hess ( 1 , 2 ) * hess ( 2 , 3 ) - hess ( 1 , 3 ) * hess ( 2 , 2 )) Ainv ( 2 , 3 ) = - ( hess ( 1 , 1 ) * hess ( 2 , 3 ) - hess ( 1 , 3 ) * hess ( 2 , 1 )) Ainv ( 3 , 3 ) = + ( hess ( 1 , 1 ) * hess ( 2 , 2 ) - hess ( 1 , 2 ) * hess ( 2 , 1 )) Ainv = det_inv * Ainv dk = - matmul ( Ainv , grad ) ! Backtracking-Armijo Line Search alphak = 1.0_rk tau = 0.5_rk ! 0 < tau < 1 beta = 1.0e-4_rk ! 0 < beta < 1 l = 0 do while (. not . norm2 ( this % cmp_Xg ( xk + alphak * dk ) - point_Xg ) <= obj + alphak * beta * dot_product ( grad , dk ) . and . l < 50 ) alphak = tau * alphak l = l + 1 end do xk = xk + alphak * dk ! Check if xk is within the knot vector range xk = max ( min ( xk , upper_bounds ), lower_bounds ) k = k + 1 end if end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function cmp_elemFace ( this , elem , face ) result ( elemConn ) class ( nurbs_volume ), intent ( in ) :: this integer , intent ( in ) :: elem integer , intent ( in ) :: face integer , allocatable :: elemConn (:) integer :: n ( 3 ), ii , jj , k !> number of nodes in each direction n = this % degree + 1 select case ( face ) case ( 1 ) allocate ( elemConn ( n ( 1 ) * n ( 2 ))) elemConn = this % elemConn ( elem , 1 : n ( 1 ) * n ( 2 )) case ( 2 ) allocate ( elemConn ( n ( 1 ) * n ( 2 ))) elemConn = this % elemConn ( elem , n ( 1 ) * n ( 2 ) * n ( 3 ) - n ( 1 ) * n ( 2 ) + 1 : n ( 1 ) * n ( 2 ) * n ( 3 )) case ( 3 ) allocate ( elemConn ( n ( 1 ) * n ( 3 ))) k = 0 do jj = 1 , n ( 3 ) do ii = 1 , n ( 1 ) k = k + 1 elemConn ( k ) = this % elemConn ( elem , n ( 1 ) * n ( 2 ) * jj + ii - n ( 1 ) * n ( 2 )) end do end do case ( 4 ) allocate ( elemConn ( n ( 1 ) * n ( 3 ))) k = 0 do jj = 1 , n ( 3 ) do ii = 1 , n ( 1 ) k = k + 1 elemConn ( k ) = this % elemConn ( elem , n ( 1 ) * n ( 2 ) * jj + ii - n ( 1 )) end do end do case ( 5 ) allocate ( elemConn ( n ( 2 ) * n ( 3 ))) do ii = 1 , n ( 2 ) * n ( 3 ) elemConn ( ii ) = this % elemConn ( elem , n ( 1 ) * ii - n ( 1 ) + 1 ) end do case ( 6 ) allocate ( elemConn ( n ( 2 ) * n ( 3 ))) do ii = 1 , n ( 2 ) * n ( 3 ) elemConn ( ii ) = this % elemConn ( elem , n ( 1 ) * ii ) end do end select end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function cmp_elemFace_Xc_vis ( this , elem , face ) result ( elemConn ) class ( nurbs_volume ), intent ( in ) :: this integer , intent ( in ) :: elem integer , intent ( in ) :: face integer , allocatable :: elemConn (:) integer :: n ( 3 ), ii , jj , k !> number of nodes in each direction n = [ 2 , 2 , 2 ] select case ( face ) case ( 1 ) allocate ( elemConn ( n ( 1 ) * n ( 2 ))) elemConn = this % elemConn_Xc_vis ( elem , 1 : n ( 1 ) * n ( 2 )) case ( 2 ) allocate ( elemConn ( n ( 1 ) * n ( 2 ))) elemConn = this % elemConn_Xc_vis ( elem , n ( 1 ) * n ( 2 ) * n ( 3 ) - n ( 1 ) * n ( 2 ) + 1 : n ( 1 ) * n ( 2 ) * n ( 3 )) case ( 3 ) allocate ( elemConn ( n ( 1 ) * n ( 3 ))) k = 0 do jj = 1 , n ( 3 ) do ii = 1 , n ( 1 ) k = k + 1 elemConn ( k ) = this % elemConn_Xc_vis ( elem , n ( 1 ) * n ( 2 ) * jj + ii - n ( 1 ) * n ( 2 )) end do end do case ( 4 ) allocate ( elemConn ( n ( 1 ) * n ( 3 ))) k = 0 do jj = 1 , n ( 3 ) do ii = 1 , n ( 1 ) k = k + 1 elemConn ( k ) = this % elemConn_Xc_vis ( elem , n ( 1 ) * n ( 2 ) * jj + ii - n ( 1 )) end do end do case ( 5 ) allocate ( elemConn ( n ( 2 ) * n ( 3 ))) do ii = 1 , n ( 2 ) * n ( 3 ) elemConn ( ii ) = this % elemConn_Xc_vis ( elem , n ( 1 ) * ii - n ( 1 ) + 1 ) end do case ( 6 ) allocate ( elemConn ( n ( 2 ) * n ( 3 ))) do ii = 1 , n ( 2 ) * n ( 3 ) elemConn ( ii ) = this % elemConn_Xc_vis ( elem , n ( 1 ) * ii ) end do end select end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function cmp_elemFace_Xg_vis ( this , elem , face ) result ( elemConn ) class ( nurbs_volume ), intent ( in ) :: this integer , intent ( in ) :: elem integer , intent ( in ) :: face integer , allocatable :: elemConn (:) integer :: n ( 3 ), ii , jj , k !> number of nodes in each direction n = [ 2 , 2 , 2 ] select case ( face ) case ( 1 ) allocate ( elemConn ( n ( 1 ) * n ( 2 ))) elemConn = this % elemConn_Xg_vis ( elem , 1 : n ( 1 ) * n ( 2 )) case ( 2 ) allocate ( elemConn ( n ( 1 ) * n ( 2 ))) elemConn = this % elemConn_Xg_vis ( elem , n ( 1 ) * n ( 2 ) * n ( 3 ) - n ( 1 ) * n ( 2 ) + 1 : n ( 1 ) * n ( 2 ) * n ( 3 )) case ( 3 ) allocate ( elemConn ( n ( 1 ) * n ( 3 ))) k = 0 do jj = 1 , n ( 3 ) do ii = 1 , n ( 1 ) k = k + 1 elemConn ( k ) = this % elemConn_Xg_vis ( elem , n ( 1 ) * n ( 2 ) * jj + ii - n ( 1 ) * n ( 2 )) end do end do case ( 4 ) allocate ( elemConn ( n ( 1 ) * n ( 3 ))) k = 0 do jj = 1 , n ( 3 ) do ii = 1 , n ( 1 ) k = k + 1 elemConn ( k ) = this % elemConn_Xg_vis ( elem , n ( 1 ) * n ( 2 ) * jj + ii - n ( 1 )) end do end do case ( 5 ) allocate ( elemConn ( n ( 2 ) * n ( 3 ))) do ii = 1 , n ( 2 ) * n ( 3 ) elemConn ( ii ) = this % elemConn_Xg_vis ( elem , n ( 1 ) * ii - n ( 1 ) + 1 ) end do case ( 6 ) allocate ( elemConn ( n ( 2 ) * n ( 3 ))) do ii = 1 , n ( 2 ) * n ( 3 ) elemConn ( ii ) = this % elemConn_Xg_vis ( elem , n ( 1 ) * ii ) end do end select end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function cmp_degreeFace ( this , face ) result ( degree ) class ( nurbs_volume ), intent ( in ) :: this integer , intent ( in ) :: face integer :: degree ( 3 ) select case ( face ) case ( 1 ) degree = [ this % degree ( 1 ), this % degree ( 2 ), 0 ] case ( 2 ) degree = [ this % degree ( 1 ), this % degree ( 2 ), 0 ] case ( 3 ) degree = [ this % degree ( 1 ), 0 , this % degree ( 3 )] case ( 4 ) degree = [ this % degree ( 1 ), 0 , this % degree ( 3 )] case ( 5 ) degree = [ 0 , this % degree ( 2 ), this % degree ( 3 )] case ( 6 ) degree = [ 0 , this % degree ( 2 ), this % degree ( 3 )] case default error stop 'Invalid face number' end select end function !=============================================================================== end module forcad_nurbs_volume !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function compute_Xg_nurbs_3d ( Xt , knot1 , knot2 , knot3 , degree , nc , ng , Xc , Wc ) result ( Xg ) use forcad_utils , only : rk , basis_bspline , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:,:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:), knot3 (:) integer , intent ( in ) :: degree ( 3 ) integer , intent ( in ) :: nc ( 3 ) integer , intent ( in ) :: ng ( 3 ) real ( rk ), intent ( in ), contiguous :: Xc (:,:) real ( rk ), intent ( in ), contiguous :: Wc (:) real ( rk ), allocatable :: Xg (:,:) real ( rk ), allocatable :: Tgc (:) integer :: i allocate ( Xg ( ng ( 1 ) * ng ( 2 ) * ng ( 3 ), size ( Xc , 2 ))) allocate ( Tgc ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ))) !$OMP PARALLEL DO PRIVATE(Tgc) do i = 1 , ng ( 1 ) * ng ( 2 ) * ng ( 3 ) Tgc = kron ( basis_bspline ( Xt ( i , 3 ), knot3 , nc ( 3 ), degree ( 3 )),& kron (& basis_bspline ( Xt ( i , 2 ), knot2 , nc ( 2 ), degree ( 2 )),& basis_bspline ( Xt ( i , 1 ), knot1 , nc ( 1 ), degree ( 1 )))) Tgc = Tgc * ( Wc / ( dot_product ( Tgc , Wc ))) Xg ( i ,:) = matmul ( Tgc , Xc ) end do !$OMP END PARALLEL DO end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function compute_Xg_nurbs_3d_1point ( Xt , knot1 , knot2 , knot3 , degree , nc , Xc , Wc ) result ( Xg ) use forcad_utils , only : rk , basis_bspline , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:), knot3 (:) integer , intent ( in ) :: degree ( 3 ) integer , intent ( in ) :: nc ( 3 ) real ( rk ), intent ( in ), contiguous :: Xc (:,:) real ( rk ), intent ( in ), contiguous :: Wc (:) real ( rk ), allocatable :: Xg (:) real ( rk ), allocatable :: Tgc (:) allocate ( Xg ( size ( Xc , 2 ))) allocate ( Tgc ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ))) Tgc = kron ( basis_bspline ( Xt ( 3 ), knot3 , nc ( 3 ), degree ( 3 )),& kron (& basis_bspline ( Xt ( 2 ), knot2 , nc ( 2 ), degree ( 2 )),& basis_bspline ( Xt ( 1 ), knot1 , nc ( 1 ), degree ( 1 )))) Tgc = Tgc * ( Wc / ( dot_product ( Tgc , Wc ))) Xg = matmul ( Tgc , Xc ) end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function compute_Xg_bspline_3d ( Xt , knot1 , knot2 , knot3 , degree , nc , ng , Xc ) result ( Xg ) use forcad_utils , only : rk , basis_bspline , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:,:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:), knot3 (:) integer , intent ( in ) :: degree ( 3 ) integer , intent ( in ) :: nc ( 3 ) integer , intent ( in ) :: ng ( 3 ) real ( rk ), intent ( in ), contiguous :: Xc (:,:) real ( rk ), allocatable :: Xg (:,:) integer :: i allocate ( Xg ( ng ( 1 ) * ng ( 2 ) * ng ( 3 ), size ( Xc , 2 ))) !$OMP PARALLEL DO do i = 1 , ng ( 1 ) * ng ( 2 ) * ng ( 3 ) Xg ( i ,:) = matmul ( kron ( basis_bspline ( Xt ( i , 3 ), knot3 , nc ( 3 ), degree ( 3 )), kron (& basis_bspline ( Xt ( i , 2 ), knot2 , nc ( 2 ), degree ( 2 )),& basis_bspline ( Xt ( i , 1 ), knot1 , nc ( 1 ), degree ( 1 )))),& Xc ) end do !$OMP END PARALLEL DO end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function compute_Xg_bspline_3d_1point ( Xt , knot1 , knot2 , knot3 , degree , nc , Xc ) result ( Xg ) use forcad_utils , only : rk , basis_bspline , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:), knot3 (:) integer , intent ( in ) :: degree ( 3 ) integer , intent ( in ) :: nc ( 3 ) real ( rk ), intent ( in ), contiguous :: Xc (:,:) real ( rk ), allocatable :: Xg (:) allocate ( Xg ( size ( Xc , 2 ))) Xg = matmul ( kron ( basis_bspline ( Xt ( 3 ), knot3 , nc ( 3 ), degree ( 3 )), kron (& basis_bspline ( Xt ( 2 ), knot2 , nc ( 2 ), degree ( 2 )),& basis_bspline ( Xt ( 1 ), knot1 , nc ( 1 ), degree ( 1 )))),& Xc ) end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine compute_dTgc_nurbs_3d_vector ( Xt , knot1 , knot2 , knot3 , degree , nc , ng , Wc , dTgc , Tgc ) use forcad_utils , only : rk , basis_bspline_der , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:,:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:), knot3 (:) integer , intent ( in ) :: degree ( 3 ) integer , intent ( in ) :: nc ( 3 ) integer , intent ( in ) :: ng ( 3 ) real ( rk ), intent ( in ), contiguous :: Wc (:) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:,:) real ( rk ), allocatable , intent ( out ) :: Tgc (:,:) real ( rk ), allocatable :: dBi (:,:), dB1 (:), dB2 (:), dB3 (:) real ( rk ), allocatable :: Bi (:), B1 (:), B2 (:), B3 (:) integer :: i allocate ( dTgc ( ng ( 1 ) * ng ( 2 ) * ng ( 3 ), nc ( 1 ) * nc ( 2 ) * nc ( 3 ), 3 )) allocate ( Tgc ( ng ( 1 ) * ng ( 2 ) * ng ( 3 ), nc ( 1 ) * nc ( 2 ) * nc ( 3 ))) allocate ( Bi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 )), dBi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ), 3 )) do i = 1 , size ( Xt , 1 ) call basis_bspline_der ( Xt ( i , 1 ), knot1 , nc ( 1 ), degree ( 1 ), dB1 , B1 ) call basis_bspline_der ( Xt ( i , 2 ), knot2 , nc ( 2 ), degree ( 2 ), dB2 , B2 ) call basis_bspline_der ( Xt ( i , 3 ), knot3 , nc ( 3 ), degree ( 3 ), dB3 , B3 ) Bi = kron ( B3 , kron ( B2 , B1 )) Tgc ( i ,:) = Bi * ( Wc / ( dot_product ( Bi , Wc ))) dBi (:, 1 ) = kron ( kron ( B3 , B2 ), dB1 ) dBi (:, 2 ) = kron ( kron ( B3 , dB2 ), B1 ) dBi (:, 3 ) = kron ( kron ( dB3 , B2 ), B1 ) dTgc ( i ,:, 1 ) = ( dBi (:, 1 ) * Wc - Tgc ( i ,:) * dot_product ( dBi (:, 1 ), Wc ) ) / dot_product ( Bi , Wc ) dTgc ( i ,:, 2 ) = ( dBi (:, 2 ) * Wc - Tgc ( i ,:) * dot_product ( dBi (:, 2 ), Wc ) ) / dot_product ( Bi , Wc ) dTgc ( i ,:, 3 ) = ( dBi (:, 3 ) * Wc - Tgc ( i ,:) * dot_product ( dBi (:, 3 ), Wc ) ) / dot_product ( Bi , Wc ) end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine compute_dTgc_nurbs_3d_scalar ( Xt , knot1 , knot2 , knot3 , degree , nc , Wc , dTgc , Tgc ) use forcad_utils , only : rk , basis_bspline_der , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:), knot3 (:) integer , intent ( in ) :: degree ( 3 ) integer , intent ( in ) :: nc ( 3 ) real ( rk ), intent ( in ), contiguous :: Wc (:) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: Tgc (:) real ( rk ), allocatable :: dB1 (:), dB2 (:), dB3 (:), dBi (:,:) real ( rk ), allocatable :: B1 (:), B2 (:), B3 (:), Bi (:) allocate ( dTgc ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ), 3 )) allocate ( Tgc ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ))) allocate ( dBi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ), 3 ), Bi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ))) call basis_bspline_der ( Xt ( 1 ), knot1 , nc ( 1 ), degree ( 1 ), dB1 , B1 ) call basis_bspline_der ( Xt ( 2 ), knot2 , nc ( 2 ), degree ( 2 ), dB2 , B2 ) call basis_bspline_der ( Xt ( 3 ), knot3 , nc ( 3 ), degree ( 3 ), dB3 , B3 ) Bi = kron ( B3 , kron ( B2 , B1 )) Tgc = Bi * ( Wc / ( dot_product ( Bi , Wc ))) dBi (:, 1 ) = kron ( kron ( B3 , B2 ), dB1 ) dBi (:, 2 ) = kron ( kron ( B3 , dB2 ), B1 ) dBi (:, 3 ) = kron ( kron ( dB3 , B2 ), B1 ) dTgc (:, 1 ) = ( dBi (:, 1 ) * Wc - Tgc * dot_product ( dBi (:, 1 ), Wc ) ) / dot_product ( Bi , Wc ) dTgc (:, 2 ) = ( dBi (:, 2 ) * Wc - Tgc * dot_product ( dBi (:, 2 ), Wc ) ) / dot_product ( Bi , Wc ) dTgc (:, 3 ) = ( dBi (:, 3 ) * Wc - Tgc * dot_product ( dBi (:, 3 ), Wc ) ) / dot_product ( Bi , Wc ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine compute_dTgc_bspline_3d_vector ( Xt , knot1 , knot2 , knot3 , degree , nc , ng , dTgc , Tgc ) use forcad_utils , only : rk , basis_bspline_der , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:,:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:), knot3 (:) integer , intent ( in ) :: degree ( 3 ) integer , intent ( in ) :: nc ( 3 ) integer , intent ( in ) :: ng ( 3 ) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:,:) real ( rk ), allocatable , intent ( out ) :: Tgc (:,:) real ( rk ), allocatable :: dB1 (:), dB2 (:), dB3 (:) real ( rk ), allocatable :: B1 (:), B2 (:), B3 (:) integer :: i allocate ( dTgc ( ng ( 1 ) * ng ( 2 ) * ng ( 3 ), nc ( 1 ) * nc ( 2 ) * nc ( 3 ), 3 )) allocate ( Tgc ( ng ( 1 ) * ng ( 2 ) * ng ( 3 ), nc ( 1 ) * nc ( 2 ) * nc ( 3 ))) !$OMP PARALLEL DO PRIVATE(dB1, dB2, dB3) do i = 1 , size ( Xt , 1 ) call basis_bspline_der ( Xt ( i , 1 ), knot1 , nc ( 1 ), degree ( 1 ), dB1 , B1 ) call basis_bspline_der ( Xt ( i , 2 ), knot2 , nc ( 2 ), degree ( 2 ), dB2 , B2 ) call basis_bspline_der ( Xt ( i , 3 ), knot3 , nc ( 3 ), degree ( 3 ), dB3 , B3 ) Tgc ( i ,:) = kron ( B3 , kron ( B2 , B1 )) dTgc ( i ,:, 1 ) = kron ( kron ( B3 , B2 ), dB1 ) dTgc ( i ,:, 2 ) = kron ( kron ( B3 , dB2 ), B1 ) dTgc ( i ,:, 3 ) = kron ( kron ( dB3 , B2 ), B1 ) end do !$OMP END PARALLEL DO end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine compute_dTgc_bspline_3d_scalar ( Xt , knot1 , knot2 , knot3 , degree , nc , dTgc , Tgc ) use forcad_utils , only : rk , basis_bspline_der , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:), knot3 (:) integer , intent ( in ) :: degree ( 3 ) integer , intent ( in ) :: nc ( 3 ) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: Tgc (:) real ( rk ), allocatable :: dB1 (:), dB2 (:), dB3 (:) real ( rk ), allocatable :: B1 (:), B2 (:), B3 (:) allocate ( dTgc ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ), 3 )) allocate ( Tgc ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ))) call basis_bspline_der ( Xt ( 1 ), knot1 , nc ( 1 ), degree ( 1 ), dB1 , B1 ) call basis_bspline_der ( Xt ( 2 ), knot2 , nc ( 2 ), degree ( 2 ), dB2 , B2 ) call basis_bspline_der ( Xt ( 3 ), knot3 , nc ( 3 ), degree ( 3 ), dB3 , B3 ) Tgc = kron ( B3 , kron ( B2 , B1 )) dTgc (:, 1 ) = kron ( kron ( B3 , B2 ), dB1 ) dTgc (:, 2 ) = kron ( kron ( B3 , dB2 ), B1 ) dTgc (:, 3 ) = kron ( kron ( dB3 , B2 ), B1 ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine compute_d2Tgc_nurbs_3d_vector ( Xt , knot1 , knot2 , knot3 , degree , nc , ng , Wc , d2Tgc , dTgc , Tgc ) use forcad_utils , only : rk , basis_bspline_2der , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:,:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:), knot3 (:) integer , intent ( in ) :: degree ( 3 ) integer , intent ( in ) :: nc ( 3 ) integer , intent ( in ) :: ng ( 3 ) real ( rk ), intent ( in ), contiguous :: Wc (:) real ( rk ), allocatable , intent ( out ) :: d2Tgc (:,:,:) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:,:) real ( rk ), allocatable , intent ( out ) :: Tgc (:,:) real ( rk ), allocatable :: d2Bi (:,:), d2B1 (:), d2B2 (:), d2B3 (:) real ( rk ), allocatable :: dBi (:,:), dB1 (:), dB2 (:), dB3 (:) real ( rk ), allocatable :: Bi (:), B1 (:), B2 (:), B3 (:) real ( rk ), allocatable :: Tgci (:), dTgci (:) integer :: i allocate ( B1 ( nc ( 1 )), B2 ( nc ( 2 )), B3 ( nc ( 3 ))) allocate ( dB1 ( nc ( 1 )), dB2 ( nc ( 2 )), dB3 ( nc ( 3 ))) allocate ( d2B1 ( nc ( 1 )), d2B2 ( nc ( 2 )), d2B3 ( nc ( 3 ))) allocate ( Bi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 )), dBi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ), 3 ), d2Bi ( 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ), 3 )) allocate ( Tgci ( nc ( 1 ) * nc ( 2 ) * nc ( 3 )), dTgci ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ))) allocate ( d2Tgc ( ng ( 1 ) * ng ( 2 ) * ng ( 3 ), 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ), 3 )) allocate ( dTgc ( ng ( 1 ) * ng ( 2 ) * ng ( 3 ), nc ( 1 ) * nc ( 2 ) * nc ( 3 ), 3 )) allocate ( Tgc ( ng ( 1 ) * ng ( 2 ) * ng ( 3 ), nc ( 1 ) * nc ( 2 ) * nc ( 3 ))) do i = 1 , size ( Xt , 1 ) call basis_bspline_2der ( Xt ( i , 1 ), knot1 , nc ( 1 ), degree ( 1 ), d2B1 , dB1 , B1 ) call basis_bspline_2der ( Xt ( i , 2 ), knot2 , nc ( 2 ), degree ( 2 ), d2B2 , dB2 , B2 ) call basis_bspline_2der ( Xt ( i , 3 ), knot3 , nc ( 3 ), degree ( 3 ), d2B3 , dB3 , B3 ) Bi = kron ( B3 , kron ( B2 , B1 )) Tgc ( i ,:) = Bi * ( Wc / ( dot_product ( Bi , Wc ))) dBi (:, 1 ) = kron ( kron ( B3 , B2 ), dB1 ) dBi (:, 2 ) = kron ( kron ( B3 , dB2 ), B1 ) dBi (:, 3 ) = kron ( kron ( dB3 , B2 ), B1 ) dTgc ( i ,:, 1 ) = ( dBi (:, 1 ) * Wc - Tgc ( i ,:) * dot_product ( dBi (:, 1 ), Wc ) ) / dot_product ( Bi , Wc ) dTgc ( i ,:, 2 ) = ( dBi (:, 2 ) * Wc - Tgc ( i ,:) * dot_product ( dBi (:, 2 ), Wc ) ) / dot_product ( Bi , Wc ) dTgc ( i ,:, 3 ) = ( dBi (:, 3 ) * Wc - Tgc ( i ,:) * dot_product ( dBi (:, 3 ), Wc ) ) / dot_product ( Bi , Wc ) d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ) = kron ( kron ( B3 , B2 ), d2B1 ) d2Bi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ) = kron ( kron ( B3 , dB2 ), dB1 ) d2Bi ( 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ) = kron ( kron ( dB3 , B2 ), dB1 ) d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ) = kron ( kron ( B3 , dB2 ), dB1 ) d2Bi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ) = kron ( kron ( B3 , d2B2 ), B1 ) d2Bi ( 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ) = kron ( kron ( dB3 , dB2 ), B1 ) d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ) = kron ( kron ( dB3 , B2 ), dB1 ) d2Bi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ) = kron ( kron ( dB3 , dB2 ), B1 ) d2Bi ( 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ) = kron ( kron ( d2B3 , B2 ), B1 ) d2Tgc ( i , 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ) = ( d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ) * Wc & - 2.0_rk * dTgc ( i , :, 1 ) * dot_product ( dBi (:, 1 ), Wc ) & - Tgc ( i ,:) * dot_product ( d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ), Wc )) / dot_product ( Bi , Wc ) d2Tgc ( i , nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ) = ( d2Bi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ) * Wc & - dTgc ( i , :, 1 ) * dot_product ( dBi (:, 2 ), Wc ) - dTgc ( i , :, 2 ) * dot_product ( dBi (:, 1 ), Wc ) & - Tgc ( i ,:) * dot_product ( d2Bi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ), Wc )) / dot_product ( Bi , Wc ) d2Tgc ( i , 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ) = ( d2Bi ( 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ) * Wc & - dTgc ( i , :, 1 ) * dot_product ( dBi (:, 3 ), Wc ) - dTgc ( i , :, 3 ) * dot_product ( dBi (:, 1 ), Wc ) & - Tgc ( i ,:) * dot_product ( d2Bi ( 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ), Wc )) / dot_product ( Bi , Wc ) d2Tgc ( i , 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ) = ( d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ) * Wc & - dTgc ( i , :, 1 ) * dot_product ( dBi (:, 2 ), Wc ) - dTgc ( i , :, 2 ) * dot_product ( dBi (:, 1 ), Wc ) & - Tgc ( i ,:) * dot_product ( d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ), Wc )) / dot_product ( Bi , Wc ) d2Tgc ( i , nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ) = ( d2Bi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ) * Wc & - 2.0_rk * dTgc ( i , :, 2 ) * dot_product ( dBi (:, 2 ), Wc ) & - Tgc ( i ,:) * dot_product ( d2Bi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ), Wc )) / dot_product ( Bi , Wc ) d2Tgc ( i , 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ) = ( d2Bi ( 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ) * Wc & - dTgc ( i , :, 2 ) * dot_product ( dBi (:, 3 ), Wc ) - dTgc ( i , :, 3 ) * dot_product ( dBi (:, 2 ), Wc ) & - Tgc ( i ,:) * dot_product ( d2Bi ( 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ), Wc )) / dot_product ( Bi , Wc ) d2Tgc ( i , 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ) = ( d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ) * Wc & - dTgc ( i , :, 1 ) * dot_product ( dBi (:, 3 ), Wc ) - dTgc ( i , :, 3 ) * dot_product ( dBi (:, 1 ), Wc ) & - Tgc ( i ,:) * dot_product ( d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ), Wc )) / dot_product ( Bi , Wc ) d2Tgc ( i , nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ) = ( d2Bi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ) * Wc & - dTgc ( i , :, 2 ) * dot_product ( dBi (:, 3 ), Wc ) - dTgc ( i , :, 3 ) * dot_product ( dBi (:, 2 ), Wc ) & - Tgc ( i ,:) * dot_product ( d2Bi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ), Wc )) / dot_product ( Bi , Wc ) d2Tgc ( i , 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ) = ( d2Bi ( 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ) * Wc & - 2.0_rk * dTgc ( i , :, 3 ) * dot_product ( dBi (:, 3 ), Wc ) & - Tgc ( i ,:) * dot_product ( d2Bi ( 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ), Wc )) / dot_product ( Bi , Wc ) end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine compute_d2Tgc_nurbs_3d_scalar ( Xt , knot1 , knot2 , knot3 , degree , nc , Wc , d2Tgc , dTgc , Tgc ) use forcad_utils , only : rk , basis_bspline_2der , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:), knot3 (:) integer , intent ( in ) :: degree ( 3 ) integer , intent ( in ) :: nc ( 3 ) real ( rk ), intent ( in ), contiguous :: Wc (:) real ( rk ), allocatable , intent ( out ) :: d2Tgc (:,:) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: Tgc (:) real ( rk ), allocatable :: d2Bi (:,:), d2B1 (:), d2B2 (:), d2B3 (:) real ( rk ), allocatable :: dBi (:,:), dB1 (:), dB2 (:), dB3 (:) real ( rk ), allocatable :: Bi (:), B1 (:), B2 (:), B3 (:) allocate ( B1 ( nc ( 1 )), B2 ( nc ( 2 )), B3 ( nc ( 3 ))) allocate ( dB1 ( nc ( 1 )), dB2 ( nc ( 2 )), dB3 ( nc ( 3 ))) allocate ( d2B1 ( nc ( 1 )), d2B2 ( nc ( 2 )), d2B3 ( nc ( 3 ))) allocate ( Bi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 )), dBi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ), 3 ), d2Bi ( 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ), 3 )) allocate ( d2Tgc ( 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ), 3 )) allocate ( dTgc ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ), 3 )) allocate ( Tgc ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ))) call basis_bspline_2der ( Xt ( 1 ), knot1 , nc ( 1 ), degree ( 1 ), d2B1 , dB1 , B1 ) call basis_bspline_2der ( Xt ( 2 ), knot2 , nc ( 2 ), degree ( 2 ), d2B2 , dB2 , B2 ) call basis_bspline_2der ( Xt ( 3 ), knot3 , nc ( 3 ), degree ( 3 ), d2B3 , dB3 , B3 ) Bi = kron ( B3 , kron ( B2 , B1 )) Tgc = Bi * ( Wc / ( dot_product ( Bi , Wc ))) dBi (:, 1 ) = kron ( kron ( B3 , B2 ), dB1 ) dBi (:, 2 ) = kron ( kron ( B3 , dB2 ), B1 ) dBi (:, 3 ) = kron ( kron ( dB3 , B2 ), B1 ) dTgc (:, 1 ) = ( dBi (:, 1 ) * Wc - Tgc * dot_product ( dBi (:, 1 ), Wc ) ) / dot_product ( Bi , Wc ) dTgc (:, 2 ) = ( dBi (:, 2 ) * Wc - Tgc * dot_product ( dBi (:, 2 ), Wc ) ) / dot_product ( Bi , Wc ) dTgc (:, 3 ) = ( dBi (:, 3 ) * Wc - Tgc * dot_product ( dBi (:, 3 ), Wc ) ) / dot_product ( Bi , Wc ) d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ) = kron ( kron ( B3 , B2 ), d2B1 ) d2Bi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ) = kron ( kron ( B3 , dB2 ), dB1 ) d2Bi ( 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ) = kron ( kron ( dB3 , B2 ), dB1 ) d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ) = kron ( kron ( B3 , dB2 ), dB1 ) d2Bi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ) = kron ( kron ( B3 , d2B2 ), B1 ) d2Bi ( 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ) = kron ( kron ( dB3 , dB2 ), B1 ) d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ) = kron ( kron ( dB3 , B2 ), dB1 ) d2Bi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ) = kron ( kron ( dB3 , dB2 ), B1 ) d2Bi ( 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ) = kron ( kron ( d2B3 , B2 ), B1 ) d2Tgc ( 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ) = ( d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ) * Wc & - 2.0_rk * dTgc (:, 1 ) * dot_product ( dBi (:, 1 ), Wc ) & - Tgc * dot_product ( d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ), Wc )) / dot_product ( Bi , Wc ) d2Tgc ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ) = ( d2Bi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ) * Wc & - dTgc (:, 1 ) * dot_product ( dBi (:, 2 ), Wc ) - dTgc (:, 2 ) * dot_product ( dBi (:, 1 ), Wc ) & - Tgc * dot_product ( d2Bi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ), Wc )) / dot_product ( Bi , Wc ) d2Tgc ( 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ) = ( d2Bi ( 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ) * Wc & - dTgc (:, 1 ) * dot_product ( dBi (:, 3 ), Wc ) - dTgc (:, 3 ) * dot_product ( dBi (:, 1 ), Wc ) & - Tgc * dot_product ( d2Bi ( 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ), Wc )) / dot_product ( Bi , Wc ) d2Tgc ( 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ) = ( d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ) * Wc & - dTgc (:, 1 ) * dot_product ( dBi (:, 2 ), Wc ) - dTgc (:, 2 ) * dot_product ( dBi (:, 1 ), Wc ) & - Tgc * dot_product ( d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ), Wc )) / dot_product ( Bi , Wc ) d2Tgc ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ) = ( d2Bi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ) * Wc & - 2.0_rk * dTgc (:, 2 ) * dot_product ( dBi (:, 2 ), Wc ) & - Tgc * dot_product ( d2Bi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ), Wc )) / dot_product ( Bi , Wc ) d2Tgc ( 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ) = ( d2Bi ( 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ) * Wc & - dTgc (:, 2 ) * dot_product ( dBi (:, 3 ), Wc ) - dTgc (:, 3 ) * dot_product ( dBi (:, 2 ), Wc ) & - Tgc * dot_product ( d2Bi ( 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ), Wc )) / dot_product ( Bi , Wc ) d2Tgc ( 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ) = ( d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ) * Wc & - dTgc (:, 1 ) * dot_product ( dBi (:, 3 ), Wc ) - dTgc (:, 3 ) * dot_product ( dBi (:, 1 ), Wc ) & - Tgc * dot_product ( d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ), Wc )) / dot_product ( Bi , Wc ) d2Tgc ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ) = ( d2Bi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ) * Wc & - dTgc (:, 2 ) * dot_product ( dBi (:, 3 ), Wc ) - dTgc (:, 3 ) * dot_product ( dBi (:, 2 ), Wc ) & - Tgc * dot_product ( d2Bi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ), Wc )) / dot_product ( Bi , Wc ) d2Tgc ( 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ) = ( d2Bi ( 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ) * Wc & - 2.0_rk * dTgc (:, 3 ) * dot_product ( dBi (:, 3 ), Wc ) & - Tgc * dot_product ( d2Bi ( 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ), Wc )) / dot_product ( Bi , Wc ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine compute_d2Tgc_bspline_3d_vector ( Xt , knot1 , knot2 , knot3 , degree , nc , ng , d2Tgc , dTgc , Tgc ) use forcad_utils , only : rk , basis_bspline_2der , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:,:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:), knot3 (:) integer , intent ( in ) :: degree ( 3 ) integer , intent ( in ) :: nc ( 3 ) integer , intent ( in ) :: ng ( 3 ) real ( rk ), allocatable , intent ( out ) :: d2Tgc (:,:,:) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:,:) real ( rk ), allocatable , intent ( out ) :: Tgc (:,:) real ( rk ), allocatable :: d2B1 (:), d2B2 (:), d2B3 (:) real ( rk ), allocatable :: dB1 (:), dB2 (:), dB3 (:) real ( rk ), allocatable :: B1 (:), B2 (:), B3 (:) integer :: i allocate ( d2Tgc ( ng ( 1 ) * ng ( 2 ) * ng ( 3 ), 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ), 3 )) allocate ( dTgc ( ng ( 1 ) * ng ( 2 ) * ng ( 3 ), nc ( 1 ) * nc ( 2 ) * nc ( 3 ), 3 )) allocate ( Tgc ( ng ( 1 ) * ng ( 2 ) * ng ( 3 ), nc ( 1 ) * nc ( 2 ) * nc ( 3 ))) do i = 1 , size ( Xt , 1 ) call basis_bspline_2der ( Xt ( i , 1 ), knot1 , nc ( 1 ), degree ( 1 ), d2B1 , dB1 , B1 ) call basis_bspline_2der ( Xt ( i , 2 ), knot2 , nc ( 2 ), degree ( 2 ), d2B2 , dB2 , B2 ) call basis_bspline_2der ( Xt ( i , 3 ), knot3 , nc ( 3 ), degree ( 3 ), d2B3 , dB3 , B3 ) Tgc ( i ,:) = kron ( B3 , kron ( B2 , B1 )) dTgc ( i ,:, 1 ) = kron ( kron ( B3 , B2 ), dB1 ) dTgc ( i ,:, 2 ) = kron ( kron ( B3 , dB2 ), B1 ) dTgc ( i ,:, 3 ) = kron ( kron ( dB3 , B2 ), B1 ) d2Tgc ( i , 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ) = kron ( kron ( B3 , B2 ), d2B1 ) d2Tgc ( i , nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ) = kron ( kron ( B3 , dB2 ), dB1 ) d2Tgc ( i , 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ) = kron ( kron ( dB3 , B2 ), dB1 ) d2Tgc ( i , 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ) = kron ( kron ( B3 , dB2 ), dB1 ) d2Tgc ( i , nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ) = kron ( kron ( B3 , d2B2 ), B1 ) d2Tgc ( i , 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ) = kron ( kron ( dB3 , dB2 ), B1 ) d2Tgc ( i , 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ) = kron ( kron ( dB3 , B2 ), dB1 ) d2Tgc ( i , nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ) = kron ( kron ( dB3 , dB2 ), B1 ) d2Tgc ( i , 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ) = kron ( kron ( d2B3 , B2 ), B1 ) end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine compute_d2Tgc_bspline_3d_scalar ( Xt , knot1 , knot2 , knot3 , degree , nc , d2Tgc , dTgc , Tgc ) use forcad_utils , only : rk , basis_bspline_2der , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:), knot3 (:) integer , intent ( in ) :: degree ( 3 ) integer , intent ( in ) :: nc ( 3 ) real ( rk ), allocatable , intent ( out ) :: d2Tgc (:,:) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: Tgc (:) real ( rk ), allocatable :: d2B1 (:), d2B2 (:), d2B3 (:) real ( rk ), allocatable :: dB1 (:), dB2 (:), dB3 (:) real ( rk ), allocatable :: B1 (:), B2 (:), B3 (:) allocate ( d2Tgc ( 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ), 3 )) allocate ( dTgc ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ), 3 )) allocate ( Tgc ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ))) call basis_bspline_2der ( Xt ( 1 ), knot1 , nc ( 1 ), degree ( 1 ), d2B1 , dB1 , B1 ) call basis_bspline_2der ( Xt ( 2 ), knot2 , nc ( 2 ), degree ( 2 ), d2B2 , dB2 , B2 ) call basis_bspline_2der ( Xt ( 3 ), knot3 , nc ( 3 ), degree ( 3 ), d2B3 , dB3 , B3 ) Tgc = kron ( B3 , kron ( B2 , B1 )) dTgc (:, 1 ) = kron ( kron ( B3 , B2 ), dB1 ) dTgc (:, 2 ) = kron ( kron ( B3 , dB2 ), B1 ) dTgc (:, 3 ) = kron ( kron ( dB3 , B2 ), B1 ) d2Tgc ( 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ) = kron ( kron ( B3 , B2 ), d2B1 ) d2Tgc ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ) = kron ( kron ( B3 , dB2 ), dB1 ) d2Tgc ( 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ) = kron ( kron ( dB3 , B2 ), dB1 ) d2Tgc ( 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ) = kron ( kron ( B3 , dB2 ), dB1 ) d2Tgc ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ) = kron ( kron ( B3 , d2B2 ), B1 ) d2Tgc ( 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ) = kron ( kron ( dB3 , dB2 ), B1 ) d2Tgc ( 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ) = kron ( kron ( dB3 , B2 ), dB1 ) d2Tgc ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ) = kron ( kron ( dB3 , dB2 ), B1 ) d2Tgc ( 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ) = kron ( kron ( d2B3 , B2 ), B1 ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function compute_Tgc_nurbs_3d_vector ( Xt , knot1 , knot2 , knot3 , degree , nc , ng , Wc ) result ( Tgc ) use forcad_utils , only : rk , basis_bspline , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:,:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:), knot3 (:) integer , intent ( in ) :: degree ( 3 ) integer , intent ( in ) :: nc ( 3 ) integer , intent ( in ) :: ng ( 3 ) real ( rk ), intent ( in ), contiguous :: Wc (:) real ( rk ), allocatable :: Tgc (:,:) real ( rk ), allocatable :: Tgci (:) integer :: i allocate ( Tgc ( ng ( 1 ) * ng ( 2 ) * ng ( 3 ), nc ( 1 ) * nc ( 2 ) * nc ( 3 ))) allocate ( Tgci ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ))) !$OMP PARALLEL DO PRIVATE(Tgci) do i = 1 , size ( Xt , 1 ) Tgci = kron ( basis_bspline ( Xt ( i , 3 ), knot3 , nc ( 3 ), degree ( 3 )), kron (& basis_bspline ( Xt ( i , 2 ), knot2 , nc ( 2 ), degree ( 2 )),& basis_bspline ( Xt ( i , 1 ), knot1 , nc ( 1 ), degree ( 1 )))) Tgc ( i ,:) = Tgci * ( Wc / ( dot_product ( Tgci , Wc ))) end do !$OMP END PARALLEL DO end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function compute_Tgc_nurbs_3d_scalar ( Xt , knot1 , knot2 , knot3 , degree , nc , Wc ) result ( Tgc ) use forcad_utils , only : rk , basis_bspline , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:), knot3 (:) integer , intent ( in ) :: degree ( 3 ) integer , intent ( in ) :: nc ( 3 ) real ( rk ), intent ( in ), contiguous :: Wc (:) real ( rk ), allocatable :: Tgc (:) allocate ( Tgc ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ))) Tgc = kron ( basis_bspline ( Xt ( 3 ), knot3 , nc ( 3 ), degree ( 3 )), kron (& basis_bspline ( Xt ( 2 ), knot2 , nc ( 2 ), degree ( 2 )),& basis_bspline ( Xt ( 1 ), knot1 , nc ( 1 ), degree ( 1 )))) Tgc = Tgc * ( Wc / ( dot_product ( Tgc , Wc ))) end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function compute_Tgc_bspline_3d_vector ( Xt , knot1 , knot2 , knot3 , degree , nc , ng ) result ( Tgc ) use forcad_utils , only : rk , basis_bspline , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:,:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:), knot3 (:) integer , intent ( in ) :: degree ( 3 ) integer , intent ( in ) :: nc ( 3 ) integer , intent ( in ) :: ng ( 3 ) real ( rk ), allocatable :: Tgc (:,:) integer :: i allocate ( Tgc ( ng ( 1 ) * ng ( 2 ) * ng ( 3 ), nc ( 1 ) * nc ( 2 ) * nc ( 3 ))) !$OMP PARALLEL DO do i = 1 , size ( Xt , 1 ) Tgc ( i ,:) = kron ( basis_bspline ( Xt ( i , 3 ), knot3 , nc ( 3 ), degree ( 3 )), kron (& basis_bspline ( Xt ( i , 2 ), knot2 , nc ( 2 ), degree ( 2 )),& basis_bspline ( Xt ( i , 1 ), knot1 , nc ( 1 ), degree ( 1 )))) end do !$OMP END PARALLEL DO end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function compute_Tgc_bspline_3d_scalar ( Xt , knot1 , knot2 , knot3 , degree , nc ) result ( Tgc ) use forcad_utils , only : rk , basis_bspline , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:), knot3 (:) integer , intent ( in ) :: degree ( 3 ) integer , intent ( in ) :: nc ( 3 ) real ( rk ), allocatable :: Tgc (:) allocate ( Tgc ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ))) Tgc = kron ( basis_bspline ( Xt ( 3 ), knot3 , nc ( 3 ), degree ( 3 )), kron (& basis_bspline ( Xt ( 2 ), knot2 , nc ( 2 ), degree ( 2 )),& basis_bspline ( Xt ( 1 ), knot1 , nc ( 1 ), degree ( 1 )))) end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function nearest_point_help_3d ( ng , Xg , point_Xg ) result ( distances ) use forcad_utils , only : rk implicit none integer , intent ( in ) :: ng ( 3 ) real ( rk ), intent ( in ), contiguous :: Xg (:,:) real ( rk ), intent ( in ), contiguous :: point_Xg (:) real ( rk ), allocatable :: distances (:) integer :: i allocate ( distances ( ng ( 1 ) * ng ( 2 ) * ng ( 3 ))) !$OMP PARALLEL DO do i = 1 , ng ( 1 ) * ng ( 2 ) * ng ( 3 ) distances ( i ) = norm2 ( Xg ( i ,:) - point_Xg ) end do !$OMP END PARALLEL DO end function !===============================================================================","tags":"","loc":"sourcefile/forcad_nurbs_volume.f90.html"},{"title":"example_curve_1.f90 – ForCAD","text":"This file depends on sourcefile~~example_curve_1.f90~~EfferentGraph sourcefile~example_curve_1.f90 example_curve_1.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~example_curve_1.f90->sourcefile~forcad.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_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 example1_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 ( 6 ) !! 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 ,:) = [ 5.0_rk , 5.0_rk , 0.0_rk ] !> Define weights for the control points (optional) allocate ( Wc ( 3 )) Wc = [ 1.0_rk , 2.0_rk , 0.3_rk ] !> Define knot vector knot = [ 0.0_rk , 0.0_rk , 0.0_rk , 1.0_rk , 1.0_rk , 1.0_rk ] !> Set knot vector, control points, and weights for the NURBS curve object. !> Wc is optional call nurbs % set ( knot , Xc , Wc ) !> Deallocate local arrays deallocate ( 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 20 call nurbs % create ( res = 20 ) !> Export the generated curve to a VTK file call nurbs % export_Xg ( 'vtk/nurbs_curve_Xg.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call nurbs % show ( 'vtk/nurbs_curve_Xc.vtk' , 'vtk/nurbs_curve_Xg.vtk' ) !----------------------------------------------------------------------------- ! Refinements !----------------------------------------------------------------------------- !> Print size of the knot vector print * , size ( nurbs % get_knot ()) !> Insert knots 0.25, twice and 0.75, once call nurbs % insert_knots ([ 0.25_rk , 0.75_rk ], [ 2 , 1 ]) !> Print size of the updated knot vector print * , size ( nurbs % get_knot ()) !> Print the degree of the curve print * , nurbs % get_degree () !> Elevate the degree of the curve (2 times) call nurbs % elevate_degree ( 2 ) !> Print the updated degree of the curve print * , nurbs % get_degree () !> Print size of the knot vector print * , size ( nurbs % get_knot ()) !> Remove knots 0.25, twice and 0.75, once call nurbs % remove_knots ([ 0.25_rk , 0.75_rk ], [ 2 , 1 ]) !> Print size of the updated knot vector print * , size ( nurbs % get_knot ()) !> Generate the refined curve with a resolution of 20 call nurbs % create () !> Export updated control points to a VTK file call nurbs % export_Xc ( 'vtk/nurbs_curve_Xc2.vtk' ) !> Export the refined generated curve to a VTK file call nurbs % export_Xg ( 'vtk/nurbs_curve_Xg2.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call nurbs % show ( 'vtk/nurbs_curve_Xc2.vtk' , 'vtk/nurbs_curve_Xg2.vtk' ) !----------------------------------------------------------------------------- ! Transformations !----------------------------------------------------------------------------- !> Rotate the control points call nurbs % rotate_Xc ( alpha = 4 5.0_rk , beta = 0.0_rk , theta = 9 0.0_rk ) !> Rotate the generated curve call nurbs % rotate_Xg ( alpha =- 4 5.0_rk , beta = 0.0_rk , theta =- 9 0.0_rk ) !> Translate the control points call nurbs % translate_Xc ([ 1.0_rk , 2.0_rk , - 3.0_rk ]) !> Translate the generated curve call nurbs % translate_Xg ([ - 1.0_rk , - 2.0_rk , 3.0_rk ]) !> Export the transformed control points to a VTK file call nurbs % export_Xc ( 'vtk/nurbs_curve_Xc3.vtk' ) !> Export the transformed generated volume to a VTK file call nurbs % export_Xg ( 'vtk/nurbs_curve_Xg3.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call nurbs % show ( 'vtk/nurbs_curve_Xc3.vtk' , 'vtk/nurbs_curve_Xg3.vtk' ) !----------------------------------------------------------------------------- ! Finalizing !----------------------------------------------------------------------------- !> Finalize the NURBS curve object call nurbs % finalize () end program example1_curve","tags":"","loc":"sourcefile/example_curve_1.f90.html"},{"title":"example_surface_1.f90 – ForCAD","text":"This file depends on sourcefile~~example_surface_1.f90~~EfferentGraph sourcefile~example_surface_1.f90 example_surface_1.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~example_surface_1.f90->sourcefile~forcad.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_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 example3_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 Wc ( 2 ) = 2.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 ) !> Deallocate local arrays deallocate ( 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' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call nurbs % show ( 'vtk/nurbs_surface_Xc.vtk' , 'vtk/nurbs_surface_Xg.vtk' ) !----------------------------------------------------------------------------- ! Refinements !----------------------------------------------------------------------------- !> Print size of the knot vectors print * , size ( nurbs % get_knot ( 1 )) print * , size ( nurbs % get_knot ( 2 )) !> Insert knots 0.25, twice and 0.75, once in both directions call nurbs % insert_knots ( 1 , [ 0.25_rk , 0.75_rk ], [ 2 , 1 ]) ! direction 1 call nurbs % insert_knots ( 2 , [ 0.25_rk , 0.75_rk ], [ 2 , 1 ]) ! direction 2 !> Print size of the knot vectors after inserting knots print * , size ( nurbs % get_knot ( 1 )) print * , size ( nurbs % get_knot ( 2 )) !> Print the degrees print * , nurbs % get_degree () !> Elevate degree by 2 in both directions call nurbs % elevate_degree ( 1 , 2 ) ! direction 1 call nurbs % elevate_degree ( 2 , 2 ) ! direction 2 !> Print the degrees after elevating print * , nurbs % get_degree () !> Print size of the knot vectors print * , size ( nurbs % get_knot ( 1 )) print * , size ( nurbs % get_knot ( 2 )) !> Remove knots 0.25, twice and 0.75, once in both directions call nurbs % remove_knots ( 1 , [ 0.25_rk , 0.75_rk ], [ 2 , 1 ]) ! direction 1 call nurbs % remove_knots ( 2 , [ 0.25_rk , 0.75_rk ], [ 2 , 1 ]) ! direction 2 !> Print size of the knot vectors after removing knots print * , size ( nurbs % get_knot ( 1 )) print * , size ( nurbs % get_knot ( 2 )) !> Generate the refined NURBS surface with resolutions of 30 in both dimensions call nurbs % create () !> Export updated control points to a VTK file call nurbs % export_Xc ( 'vtk/nurbs_surface_Xc2.vtk' ) !> Export the refined generated surface to a VTK file call nurbs % export_Xg ( 'vtk/nurbs_surface_Xg2.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call nurbs % show ( 'vtk/nurbs_surface_Xc2.vtk' , 'vtk/nurbs_surface_Xg2.vtk' ) !----------------------------------------------------------------------------- ! Transformations !----------------------------------------------------------------------------- !> Rotate the control points call nurbs % rotate_Xc ( alpha = 4 5.0_rk , beta = 0.0_rk , theta = 9 0.0_rk ) !> Rotate the generated curve call nurbs % rotate_Xg ( alpha =- 4 5.0_rk , beta = 0.0_rk , theta =- 9 0.0_rk ) !> Translate the control points call nurbs % translate_Xc ([ 1.0_rk , 2.0_rk , - 3.0_rk ]) !> Translate the generated curve call nurbs % translate_Xg ([ - 1.0_rk , - 2.0_rk , 3.0_rk ]) !> Export the transformed control points to a VTK file call nurbs % export_Xc ( 'vtk/nurbs_surface_Xc3.vtk' ) !> Export the transformed generated volume to a VTK file call nurbs % export_Xg ( 'vtk/nurbs_surface_Xg3.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call nurbs % show ( 'vtk/nurbs_surface_Xc3.vtk' , 'vtk/nurbs_surface_Xg3.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 ), 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 , rk ) y_spacing = 1.0_rk / real ( num_rows - 1 , rk ) 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 , rk ) * x_spacing control_points (( i - 1 ) * num_cols + j , 2 ) = y_offset + real ( i - 1 , rk ) * 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 example3_surface","tags":"","loc":"sourcefile/example_surface_1.f90.html"},{"title":"shape_half_circle.f90 – ForCAD","text":"This file depends on sourcefile~~shape_half_circle.f90~~EfferentGraph sourcefile~shape_half_circle.f90 shape_half_circle.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~shape_half_circle.f90->sourcefile~forcad.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_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 program shape_half_circle use forcad , only : rk , nurbs_curve implicit none type ( nurbs_curve ) :: shape !> Set up a half circle shape centered at the 0,0,0 with a radius of 1 call shape % set_half_circle ([ 0.0_rk , 0.0_rk , 0.0_rk ], 1.0_rk ) !> Export the control points to a VTK file for visualization. call shape % export_Xc ( 'vtk/shape_half_circle_Xc.vtk' ) !> Create the shape using the specified number of elements in each direction. call shape % create ( 60 ) !> Export the geometry to a VTK file for visualization. call shape % export_Xg ( 'vtk/shape_half_circle_Xg.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call shape % show ( 'vtk/shape_half_circle_Xc.vtk' , 'vtk/shape_half_circle_Xg.vtk' ) !> Finalize and clean up the shape object. call shape % finalize () end program","tags":"","loc":"sourcefile/shape_half_circle.f90.html"},{"title":"demo_surface.f90 – ForCAD","text":"This file depends on sourcefile~~demo_surface.f90~~EfferentGraph sourcefile~demo_surface.f90 demo_surface.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~demo_surface.f90->sourcefile~forcad.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_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 surface object to create, and finalize a NURBS 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_nurbs_surface use forcad , only : rk , nurbs_surface implicit none type ( nurbs_surface ) :: nurbs !! Declare a NURBS surface object real ( rk ), allocatable :: Xc (:,:), Wc (:) !! Arrays for control points and weights !----------------------------------------------------------------------------- ! Setting up the NURBS surface !----------------------------------------------------------------------------- !> Define control points for the NURBS 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 NURBS surface object call nurbs % set ([ 10 , 10 ], Xc , Wc ) !> Deallocate local arrays deallocate ( Xc , Wc ) !> Export initial control points to a VTK file call nurbs % export_Xc ( 'vtk/demo_surface_Xc.vtk' ) !----------------------------------------------------------------------------- ! Creating the NURBS surface !----------------------------------------------------------------------------- !> Generate the NURBS surface with a resolution of 30x30 call nurbs % create ( res1 = 30 , res2 = 30 ) !> Export the generated surface to a VTK file call nurbs % export_Xg ( 'vtk/demo_surface_Xg.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call nurbs % show ( 'vtk/demo_surface_Xc.vtk' , 'vtk/demo_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 ), 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 , rk ) y_spacing = 1.0_rk / real ( num_rows - 1 , rk ) 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 , rk ) * x_spacing control_points (( i - 1 ) * num_cols + j , 2 ) = y_offset + real ( i - 1 , rk ) * 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/demo_surface.f90.html"},{"title":"put_to_nurbs.f90 – ForCAD","text":"This file depends on sourcefile~~put_to_nurbs.f90~~EfferentGraph sourcefile~put_to_nurbs.f90 put_to_nurbs.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~put_to_nurbs.f90->sourcefile~forcad.f90 sourcefile~forcad_utils.f90 forcad_utils.f90 sourcefile~put_to_nurbs.f90->sourcefile~forcad_utils.f90 sourcefile~forcad.f90->sourcefile~forcad_utils.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_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 program example_put_to_nurbs use forcad use forcad_utils , only : hexahedron_Xc implicit none type ( nurbs_volume ) :: control_shape real ( rk ), allocatable :: X (:,:) integer , allocatable :: elem (:,:) integer :: i , nunit !> You can create your shape or use a predefined one !> Read coordinates from file allocate ( X ( 23200 , 3 )) open ( newunit = nunit , file = 'example/put_to_nurbs_X.txt' ) do i = 1 , 23200 read ( nunit , * ) X ( i , 1 ), X ( i , 2 ), X ( i , 3 ) end do close ( nunit ) !> Read element connectivities from file allocate ( elem ( 20577 , 8 )) open ( newunit = nunit , file = 'example/put_to_nurbs_elem.txt' ) do i = 1 , 20577 read ( nunit , * ) elem ( i , 1 ), elem ( i , 2 ), elem ( i , 4 ), elem ( i , 3 ), elem ( i , 5 ), elem ( i , 6 ), elem ( i , 8 ), elem ( i , 7 ) end do close ( nunit ) !> Set a control shape that will be used to put the shape into !> The contol shape is a hexahedron with 100x40x10 with 10x5x3 number of control points !> By modifying the control shape you can modify the shape call control_shape % set ( nc = [ 10 , 5 , 3 ], Xc = hexahedron_Xc ( L = [ 10 0.0_rk , 4 0.0_rk , 1 0.0_rk ], nc = [ 10 , 5 , 3 ])) !> Map the shape into the shape call control_shape % put_to_nurbs ( X , elem ) !> Deallocate local variables deallocate ( X , elem ) !> Export the shape and the control shape to vtk files call control_shape % export_Xc ( 'vtk/control_shape.vtk' ) call control_shape % export_Xg ( 'vtk/shape.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call control_shape % show ( 'vtk/control_shape.vtk' , 'vtk/shape.vtk' ) !> Finalize the control shape call control_shape % finalize () end program","tags":"","loc":"sourcefile/put_to_nurbs.f90.html"},{"title":"nearest_point_2d_bench.f90 – ForCAD","text":"This file depends on sourcefile~~nearest_point_2d_bench.f90~~EfferentGraph sourcefile~nearest_point_2d_bench.f90 nearest_point_2d_bench.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~nearest_point_2d_bench.f90->sourcefile~forcad.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_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 program nearest_point_2d_bench use forcad , only : rk , nurbs_surface use fortime implicit none type ( nurbs_surface ) :: shape !! Declare a NURBS surface object real ( rk ), allocatable :: nearest_Xg (:) !! Coordinates of the nearest point on the surface real ( rk ), allocatable :: nearest_Xt (:) !! Corresponding parametric coordinates of the nearest point integer :: id !! id of the nearest point real ( rk ), allocatable :: points (:,:) integer :: i , j type ( timer ) :: t !----------------------------------------------------------------------------- ! Setting up the NURBS tetrangon !----------------------------------------------------------------------------- !> Set a tetragon with lengths of 2.0 and 3.0 and 3 and 4 control points in each direction !> The weights of the control points (Wc) are optional. call shape % set_tetragon ( L = [ 2.0_rk , 3.0_rk ], nc = [ 3 , 4 ]) !----------------------------------------------------------------------------- ! Creating the NURBS surface !----------------------------------------------------------------------------- !> Generate the NURBS surface with resolutions of 30 in both dimensions call shape % create ( 100 , 100 ) !----------------------------------------------------------------------------- ! Nearest point on the surface !----------------------------------------------------------------------------- !> Find the nearest point on the surface to a given point ! nearest_Xg: Coordinates of the nearest point on the surface (optional) ! nearest_Xt: Corresponding parametric coordinates of the nearest point (optional) ! id: id of the nearest point (optional) do j = 1 , 40 allocate ( points ( j * 1000 , 3 )) print * , j * 1000 call random_number ( points ) call t % timer_start () do concurrent ( i = 1 : size ( points , 1 )) call shape % nearest_point ( points ( i ,:), nearest_Xg , nearest_Xt , id ) end do call t % timer_stop () deallocate ( points ) end do !----------------------------------------------------------------------------- ! Finalizing !----------------------------------------------------------------------------- !> Finalize the NURBS surface object call shape % finalize () deallocate ( nearest_Xg , nearest_Xt ) end program","tags":"","loc":"sourcefile/nearest_point_2d_bench.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_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_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~put_to_nurbs.f90 put_to_nurbs.f90 sourcefile~put_to_nurbs.f90->sourcefile~forcad_utils.f90 sourcefile~put_to_nurbs.f90->sourcefile~forcad.f90 sourcefile~demo_curve.f90 demo_curve.f90 sourcefile~demo_curve.f90->sourcefile~forcad.f90 sourcefile~demo_surface.f90 demo_surface.f90 sourcefile~demo_surface.f90->sourcefile~forcad.f90 sourcefile~demo_volume.f90 demo_volume.f90 sourcefile~demo_volume.f90->sourcefile~forcad.f90 sourcefile~example_curve_1.f90 example_curve_1.f90 sourcefile~example_curve_1.f90->sourcefile~forcad.f90 sourcefile~example_ppm1.f90 example_ppm1.f90 sourcefile~example_ppm1.f90->sourcefile~forcad.f90 sourcefile~example_ppm2.f90 example_ppm2.f90 sourcefile~example_ppm2.f90->sourcefile~forcad.f90 sourcefile~example_ppm3.f90 example_ppm3.f90 sourcefile~example_ppm3.f90->sourcefile~forcad.f90 sourcefile~example_surface_1.f90 example_surface_1.f90 sourcefile~example_surface_1.f90->sourcefile~forcad.f90 sourcefile~example_volume_1.f90 example_volume_1.f90 sourcefile~example_volume_1.f90->sourcefile~forcad.f90 sourcefile~nearest_point_1d.f90 nearest_point_1d.f90 sourcefile~nearest_point_1d.f90->sourcefile~forcad.f90 sourcefile~nearest_point_2d.f90 nearest_point_2d.f90 sourcefile~nearest_point_2d.f90->sourcefile~forcad.f90 sourcefile~nearest_point_2d_bench.f90 nearest_point_2d_bench.f90 sourcefile~nearest_point_2d_bench.f90->sourcefile~forcad.f90 sourcefile~nearest_point_3d.f90 nearest_point_3d.f90 sourcefile~nearest_point_3d.f90->sourcefile~forcad.f90 sourcefile~shape_c_1d.f90 shape_C_1d.f90 sourcefile~shape_c_1d.f90->sourcefile~forcad.f90 sourcefile~shape_c_2d.f90 shape_C_2d.f90 sourcefile~shape_c_2d.f90->sourcefile~forcad.f90 sourcefile~shape_c_3d.f90 shape_C_3d.f90 sourcefile~shape_c_3d.f90->sourcefile~forcad.f90 sourcefile~shape_circle.f90 shape_circle.f90 sourcefile~shape_circle.f90->sourcefile~forcad.f90 sourcefile~shape_half_circle.f90 shape_half_circle.f90 sourcefile~shape_half_circle.f90->sourcefile~forcad.f90 sourcefile~shape_half_ring_2d.f90 shape_half_ring_2d.f90 sourcefile~shape_half_ring_2d.f90->sourcefile~forcad.f90 sourcefile~shape_half_ring_3d.f90 shape_half_ring_3d.f90 sourcefile~shape_half_ring_3d.f90->sourcefile~forcad.f90 sourcefile~shape_hexahedron.f90 shape_hexahedron.f90 sourcefile~shape_hexahedron.f90->sourcefile~forcad.f90 sourcefile~shape_ring_2d.f90 shape_ring_2d.f90 sourcefile~shape_ring_2d.f90->sourcefile~forcad.f90 sourcefile~shape_ring_3d.f90 shape_ring_3d.f90 sourcefile~shape_ring_3d.f90->sourcefile~forcad.f90 sourcefile~shape_tetragon.f90 shape_tetragon.f90 sourcefile~shape_tetragon.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 !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> This module contains parameters, functions and subroutines that are used in the library. module forcad_utils implicit none private public :: rk , basis_bernstein , basis_bspline , elemConn_C0 , kron , ndgrid , compute_multiplicity , compute_knot_vector , & basis_bspline_der , insert_knot_A_5_1 , findspan , elevate_degree_A_5_9 , hexahedron_Xc , tetragon_Xc , remove_knots_A_5_8 , & elemConn_Cn , unique , rotation , basis_bspline_2der 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 elemConn_Cn module procedure cmp_elemConn_Cn_L module procedure cmp_elemConn_Cn_S module procedure cmp_elemConn_Cn_V end interface !=============================================================================== !=============================================================================== interface ndgrid module procedure ndgrid2 module procedure ndgrid3 end interface !=============================================================================== !=============================================================================== interface compute_multiplicity module procedure compute_multiplicity1 module procedure compute_multiplicity2 end interface !=============================================================================== !=============================================================================== interface unique module procedure unique_integer module procedure unique_real end interface !=============================================================================== contains !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function basis_bspline ( Xt , knot , nc , degree ) result ( B ) integer , intent ( in ) :: degree real ( rk ), intent ( in ), contiguous :: 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 : degree ), source = 0.0_rk ) do p = 0 , degree do concurrent ( 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 (:, degree ) end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine basis_bspline_der ( Xt , knot , nc , degree , dB , B ) integer , intent ( in ) :: degree real ( rk ), intent ( in ), contiguous :: knot (:) integer , intent ( in ) :: nc real ( rk ), intent ( in ) :: Xt real ( rk ), allocatable , intent ( out ) :: dB (:) real ( rk ), allocatable , intent ( out ), optional :: B (:) real ( rk ), allocatable :: N (:,:), dN_dXt (:,:) real ( rk ) :: temp , Xth_i , Xth_i1 , Xth_ip , Xth_ip1 integer :: i , p temp = abs ( Xt - knot ( size ( knot ))) allocate ( N ( nc , 0 : degree ), source = 0.0_rk ) allocate ( dN_dXt ( nc , 0 : degree ), source = 0.0_rk ) do p = 0 , degree do concurrent ( 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 . Xth_i <= Xt . and . Xt <= Xth_i1 ) then N ( i , 0 ) = 1.0_rk dN_dXt ( i , 0 ) = 0.0_rk end if if ( Xth_ip /= Xth_i ) then N ( i , p ) = ( Xt - Xth_i ) / ( Xth_ip - Xth_i ) * N ( i , p - 1 ) dN_dXt ( i , p ) = ( N ( i , p - 1 ) + ( Xt - Xth_i ) * dN_dXt ( i , p - 1 ) ) / ( Xth_ip - Xth_i ) end if if ( Xth_ip1 /= Xth_i1 ) then N ( i , p ) = N ( i , p ) + ( Xth_ip1 - Xt ) / ( Xth_ip1 - Xth_i1 ) * N ( i + 1 , p - 1 ) dN_dXt ( i , p ) = dN_dXt ( i , p ) - ( N ( i + 1 , p - 1 ) - ( Xth_ip1 - Xt ) * dN_dXt ( i + 1 , p - 1 ) ) / ( Xth_ip1 - Xth_i1 ) end if end do end do dB = dN_dXt (:, degree ) if ( present ( B )) B = N (:, degree ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine basis_bspline_2der ( Xt , knot , nc , degree , d2B , dB , B ) integer , intent ( in ) :: degree real ( rk ), intent ( in ), contiguous :: knot (:) integer , intent ( in ) :: nc real ( rk ), intent ( in ) :: Xt real ( rk ), allocatable , intent ( out ) :: d2B (:) real ( rk ), allocatable , intent ( out ), optional :: dB (:) real ( rk ), allocatable , intent ( out ), optional :: B (:) real ( rk ), allocatable :: N (:,:), dN_dXt (:,:), d2N_dXt2 (:,:) real ( rk ) :: temp , Xth_i , Xth_i1 , Xth_ip , Xth_ip1 integer :: i , p temp = abs ( Xt - knot ( size ( knot ))) allocate ( N ( nc , 0 : degree ), source = 0.0_rk ) allocate ( dN_dXt ( nc , 0 : degree ), source = 0.0_rk ) allocate ( d2N_dXt2 ( nc , 0 : degree ), source = 0.0_rk ) do p = 0 , degree do concurrent ( 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 . Xth_i <= Xt . and . Xt <= Xth_i1 ) then N ( i , 0 ) = 1.0_rk dN_dXt ( i , 0 ) = 0.0_rk d2N_dXt2 ( i , 0 ) = 0.0_rk end if if ( Xth_ip /= Xth_i ) then N ( i , p ) = ( Xt - Xth_i ) / ( Xth_ip - Xth_i ) * N ( i , p - 1 ) ! dN_dXt(i,p) = p*(N(i,p-1)/(Xth_ip - Xth_i)) dN_dXt ( i , p ) = ( N ( i , p - 1 ) + ( Xt - Xth_i ) * dN_dXt ( i , p - 1 ) ) / ( Xth_ip - Xth_i ) d2N_dXt2 ( i , p ) = ( 2 * dN_dXt ( i , p - 1 ) + ( Xt - Xth_i ) * d2N_dXt2 ( i , p - 1 )) / ( Xth_ip - Xth_i ) end if if ( Xth_ip1 /= Xth_i1 ) then N ( i , p ) = N ( i , p ) + ( Xth_ip1 - Xt ) / ( Xth_ip1 - Xth_i1 ) * N ( i + 1 , p - 1 ) ! dN_dXt(i,p) = dN_dXt(i,p) - p*( N(i+1,p-1)/(Xth_ip1 - Xth_i1)) dN_dXt ( i , p ) = dN_dXt ( i , p ) - ( N ( i + 1 , p - 1 ) - ( Xth_ip1 - Xt ) * dN_dXt ( i + 1 , p - 1 ) ) / ( Xth_ip1 - Xth_i1 ) d2N_dXt2 ( i , p ) = d2N_dXt2 ( i , p ) - ( 2 * dN_dXt ( i + 1 , p - 1 ) - ( Xth_ip1 - Xt ) * d2N_dXt2 ( i + 1 , p - 1 )) / ( Xth_ip1 - Xth_i1 ) end if end do end do d2B = d2N_dXt2 (:, degree ) if ( present ( dB )) dB = dN_dXt (:, degree ) if ( present ( B )) B = N (:, degree ) end subroutine !=============================================================================== !=============================================================================== !> 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 :: p , degree degree = nc - 1 allocate ( B ( nc ), source = 0.0_rk ) do concurrent ( p = 0 : degree ) B ( p + 1 ) = gamma ( real ( nc , kind = rk )) / ( gamma ( real ( p + 1 , kind = rk )) * gamma ( real ( nc - p , kind = rk ))) if ( Xt == 0.0_rk . and . p == 0 ) then B ( p + 1 ) = B ( p + 1 ) * ( 1.0_rk - Xt ) ** ( degree - p ) else if ( Xt == 0.0_rk . and . degree - p == 0 ) then B ( p + 1 ) = B ( p + 1 ) * ( Xt ** p ) else B ( p + 1 ) = B ( p + 1 ) * ( Xt ** p ) * ( 1.0_rk - Xt ) ** ( degree - p ) end if end do end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function kron ( u , v ) result ( w ) real ( rk ), intent ( in ), contiguous :: u (:), v (:) real ( rk ) :: w ( size ( u ) * size ( v )) integer :: i , j , n n = size ( v ) do concurrent ( i = 1 : size ( u ), j = 1 : n ) w (( i - 1 ) * n + j ) = u ( i ) * v ( j ) end do end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine ndgrid2 ( X_dir1 , X_dir2 , Xt ) real ( rk ), intent ( in ), contiguous :: X_dir1 (:), X_dir2 (:) real ( rk ), allocatable , intent ( out ) :: Xt (:,:) integer :: s1 , s2 , i , j s1 = size ( X_dir1 ) s2 = size ( X_dir2 ) allocate ( Xt ( s1 * s2 , 2 )) do concurrent ( j = 1 : s2 , i = 1 : s1 ) Xt (( j - 1 ) * s1 + i , 1 ) = X_dir1 ( i ) Xt (( j - 1 ) * s1 + i , 2 ) = X_dir2 ( j ) end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine ndgrid3 ( X_dir1 , X_dir2 , X_dir3 , Xt ) real ( rk ), intent ( in ), contiguous :: X_dir1 (:), X_dir2 (:), X_dir3 (:) real ( rk ), allocatable , intent ( out ) :: Xt (:,:) integer :: s1 , s2 , s3 , i , j , k s1 = size ( X_dir1 ) s2 = size ( X_dir2 ) s3 = size ( X_dir3 ) allocate ( Xt ( s1 * s2 * s3 , 3 )) do concurrent ( k = 1 : s3 , j = 1 : s2 , i = 1 : s1 ) Xt ((( k - 1 ) * s2 + ( j - 1 )) * s1 + i , 1 ) = X_dir1 ( i ) Xt ((( k - 1 ) * s2 + ( j - 1 )) * s1 + i , 2 ) = X_dir2 ( j ) Xt ((( k - 1 ) * s2 + ( j - 1 )) * s1 + i , 3 ) = X_dir3 ( k ) end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function repelem ( a , b ) result ( c ) real ( rk ), intent ( in ), contiguous :: a (:) integer , intent ( in ), contiguous :: b (:) real ( rk ) :: c ( sum ( b )) 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 !=============================================================================== !=============================================================================== !> 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 , allocatable :: elemConn (:,:) integer :: i , l integer , allocatable :: nodes (:) if ( mod ( nnode - 1 , p ) /= 0 ) error stop 'cmp_elemConn_C0_L: nnode-1 must be divisible by p' allocate ( elemConn ( ( nnode - 1 ) / p , p + 1 )) 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 , allocatable :: elemConn (:,:) integer :: i , j , l integer , allocatable :: nodes (:,:) if ( mod ( nnode1 - 1 , p1 ) /= 0 ) error stop 'cmp_elemConn_C0_S: nnode1-1 must be divisible by p1' if ( mod ( nnode2 - 1 , p2 ) /= 0 ) error stop 'cmp_elemConn_C0_S: nnode2-1 must be divisible by p2' allocate ( elemConn ( (( nnode1 - 1 ) / p1 ) * (( nnode2 - 1 ) / p2 ), ( p1 + 1 ) * ( p2 + 1 ))) 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 , allocatable :: elemConn (:,:) integer :: i , j , k , l integer , allocatable :: nodes (:,:,:) if ( mod ( nnode1 - 1 , p1 ) /= 0 ) error stop 'cmp_elemConn_C0_V: nnode1-1 must be divisible by p1' if ( mod ( nnode2 - 1 , p2 ) /= 0 ) error stop 'cmp_elemConn_C0_V: nnode2-1 must be divisible by p2' if ( mod ( nnode3 - 1 , p3 ) /= 0 ) error stop 'cmp_elemConn_C0_V: nnode3-1 must be divisible by p3' allocate ( elemConn ( (( nnode1 - 1 ) / p1 ) * (( nnode2 - 1 ) / p2 ) * (( nnode3 - 1 ) / p3 ) ,( p1 + 1 ) * ( p2 + 1 ) * ( p3 + 1 ))) 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 subroutine cmp_elemConn_Cn_L ( nnode , p , Xth , vecKnot_mul , elemConn ) integer , intent ( in ) :: p , nnode integer , intent ( in ), contiguous :: vecKnot_mul (:) real ( rk ), intent ( in ), contiguous :: Xth (:) integer , allocatable , intent ( out ) :: elemConn (:,:) integer , allocatable :: nodes (:) integer :: i , nnel , m , nelem nnel = p + 1 nodes = [( i , i = 1 , nnode )] nelem = size ( Xth ) - 1 allocate ( elemConn ( nelem , nnel )) m = - p do i = 1 , nelem m = m + vecKnot_mul ( i ) elemConn ( i ,:) = nodes ( m : m + p ) end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine cmp_elemConn_Cn_S ( nnode1 , nnode2 , p1 , p2 ,& Xth1 , Xth2 , vecKnot_mul1 , vecKnot_mul2 , elemConn ) integer , intent ( in ) :: p1 , p2 , nnode1 , nnode2 integer , intent ( in ), contiguous :: vecKnot_mul1 (:), vecKnot_mul2 (:) real ( rk ), intent ( in ), contiguous :: Xth1 (:), Xth2 (:) integer , allocatable , intent ( out ) :: elemConn (:,:) integer , allocatable :: nodes (:,:), nodes_vec (:) integer :: nnd_total , i , j , l , nnel1 , nnel2 , m , n , nelem1 , nelem2 , nelem nnel1 = p1 + 1 nnel2 = p2 + 1 nnd_total = nnode1 * nnode2 allocate ( nodes_vec ( nnd_total )) Nodes_vec = [( i , i = 1 , nnd_total )] nodes = reshape ( nodes_vec ,[ nnode1 , nnode2 ]) nelem1 = size ( Xth1 ) - 1 nelem2 = size ( Xth2 ) - 1 nelem = nelem1 * nelem2 allocate ( elemConn ( nelem , nnel1 * nnel2 )) l = 0 n = - p2 do j = 1 , nelem2 n = n + vecKnot_mul2 ( j ) m = - p1 do i = 1 , nelem1 m = m + vecKnot_mul1 ( i ) l = l + 1 elemConn ( l ,:) = reshape ( nodes ( m : m + p1 , n : n + p2 ), [ nnel1 * nnel2 ]) end do end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine cmp_elemConn_Cn_V ( nnode1 , nnode2 , nnode3 , p1 , p2 , p3 ,& Xth1 , Xth2 , Xth3 , vecKnot_mul1 , vecKnot_mul2 , vecKnot_mul3 , elemConn ) integer , intent ( in ) :: p1 , p2 , p3 , nnode1 , nnode2 , nnode3 integer , intent ( in ), contiguous :: vecKnot_mul1 (:), vecKnot_mul2 (:), vecKnot_mul3 (:) real ( rk ), intent ( in ), contiguous :: Xth1 (:), Xth2 (:), Xth3 (:) integer , allocatable , intent ( out ) :: elemConn (:,:) integer , allocatable :: nodes (:,:,:), nodes_vec (:) integer :: nnd_total , i , j , k , l , nnel1 , nnel2 , nnel3 , m , n , o , nelem1 , nelem2 , nelem3 , nelem nnel1 = p1 + 1 nnel2 = p2 + 1 nnel3 = p3 + 1 nnd_total = nnode1 * nnode2 * nnode3 allocate ( nodes_vec ( nnd_total )) Nodes_vec = [( i , i = 1 , nnd_total )] nodes = reshape ( nodes_vec ,[ nnode1 , nnode2 , nnode3 ]) nelem1 = size ( Xth1 ) - 1 nelem2 = size ( Xth2 ) - 1 nelem3 = size ( Xth3 ) - 1 nelem = nelem1 * nelem2 * nelem3 allocate ( elemConn ( nelem , nnel1 * nnel2 * nnel3 )) l = 0 o = - p3 do k = 1 , nelem3 o = o + vecKnot_mul3 ( k ) n = - p2 do j = 1 , nelem2 n = n + vecKnot_mul2 ( j ) m = - p1 do i = 1 , nelem1 m = m + vecKnot_mul1 ( i ) l = l + 1 elemConn ( l ,:) = reshape ( nodes ( m : m + p1 , n : n + p2 , o : o + p3 ), [ nnel1 * nnel2 * nnel3 ]) end do end do end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function compute_multiplicity1 ( knot ) result ( multiplicity ) real ( rk ), intent ( in ), contiguous :: knot (:) integer , 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_multiplicity2 ( knot , Xth ) result ( multiplicity ) real ( rk ), intent ( in ), contiguous :: knot (:) real ( rk ), intent ( in ) :: Xth integer :: multiplicity integer :: i , count , size_knot size_knot = size ( knot ) multiplicity = 0 i = 1 do while ( i <= size_knot ) if ( knot ( i ) == Xth ) then count = 1 do while ( i + count <= size_knot . and . knot ( i + count ) == Xth ) count = count + 1 end do if ( count > multiplicity ) then multiplicity = count end if i = i + count else i = i + 1 end if end do end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function compute_knot_vector ( Xth_dir , degree , continuity ) result ( knot ) real ( rk ), intent ( in ), contiguous :: Xth_dir (:) integer , intent ( in ) :: degree integer , intent ( in ), contiguous :: continuity (:) real ( rk ), allocatable :: knot (:) knot = repelem ( Xth_dir , ( degree - continuity )) end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause elemental pure function isinf ( x ) result ( output ) real ( rk ), intent ( in ) :: x logical :: output output = . false . if ( x > huge ( x )) output = . true . if ( x < - huge ( x )) output = . true . end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause elemental pure function isnan ( x ) result ( output ) real ( rk ), intent ( in ) :: x logical :: output output = . false . if ( x /= x ) output = . true . end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine insert_knot_A_5_1 ( p , UP , Pw , u , k , s , r , nq , UQ , Qw ) integer , intent ( in ) :: p , k , s , r real ( rk ), intent ( in ), contiguous :: UP ( 0 :), Pw ( 0 :,:) real ( rk ), intent ( in ) :: u real ( rk ), allocatable , intent ( out ) :: UQ (:), Qw (:,:) integer , intent ( out ) :: nq integer :: i , j , L , mp , dim , np real ( rk ), allocatable :: Rw (:,:) real ( rk ) :: alpha dim = size ( Pw , 2 ) np = size ( Pw , 1 ) - 1 mp = np + p + 1 nq = np + r allocate ( UQ ( 0 : mp + r )) allocate ( Qw ( 0 : nq , 1 : dim )) allocate ( Rw ( 0 : p , 1 : dim )) UQ ( 0 : k ) = UP ( 0 : k ) UQ ( k + 1 : k + r ) = u UQ ( k + 1 + r : mp + r ) = UP ( k + 1 : mp ) Qw ( 0 : k - p ,:) = Pw ( 0 : k - p ,:) Qw ( k - s + r : np + r ,:) = Pw ( k - s : np ,:) Rw ( 0 : p - s ,:) = Pw ( k - p : k - s ,:) do j = 1 , r L = k - p + j do i = 0 , p - j - s alpha = ( u - UP ( L + i )) / ( UP ( i + k + 1 ) - UP ( L + i )) Rw ( i ,:) = alpha * Rw ( i + 1 ,:) + ( 1.0_rk - alpha ) * Rw ( i ,:) end do Qw ( L ,:) = Rw ( 0 ,:) Qw ( k + r - j - s ,:) = Rw ( p - j - s ,:) end do Qw ( L + 1 : k - s - 1 ,:) = Rw ( 1 : k - s - 1 - L ,:) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function findspan ( n , degree , Xth , knot ) result ( s ) integer , intent ( in ) :: n , degree real ( rk ), intent ( in ) :: Xth real ( rk ), intent ( in ), contiguous :: knot (:) integer :: s integer :: low , high , mid if ( Xth == knot ( n + 2 )) then s = n return end if low = degree high = n + 1 mid = ( low + high ) / 2 do while ( Xth < knot ( mid + 1 ) . or . Xth >= knot ( mid + 2 )) if ( Xth < knot ( mid + 1 )) then high = mid else low = mid end if mid = ( low + high ) / 2 end do s = mid end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine elevate_degree_A_5_9 ( t , knot , degree , Xcw , nc_new , knot_new , Xcw_new ) integer , intent ( in ) :: t real ( rk ), intent ( in ), contiguous :: Xcw (:,:), knot (:) integer , intent ( in ) :: degree integer , intent ( out ) :: nc_new real ( rk ), allocatable , intent ( out ) :: Xcw_new (:,:), knot_new (:) real ( rk ), allocatable :: bezalfs (:,:), bpts (:,:), ebpts (:,:), Nextbpts (:,:), alfs (:) real ( rk ) :: inv , alpha1 , alpha2 , Xth1 , Xth2 , numer , den integer :: n , lbz , rbz , sv , tr , kj , first , knoti , last , alpha3 , dim , nc integer :: i , j , q , s , m , ph , ph2 , mpi , mh , r , a , b , Xcwi , oldr , mul integer , allocatable :: mlp (:) nc = size ( Xcw , 1 ) dim = size ( Xcw , 2 ) mlp = compute_multiplicity ( knot ) mlp = mlp + t nc_new = sum ( mlp ) - ( mlp ( 1 ) - 1 ) - 1 allocate ( Xcw_new ( nc_new , dim ), source = 0.0_rk ) allocate ( bezalfs ( degree + 1 , degree + t + 1 ), source = 0.0_rk ) allocate ( bpts ( degree + 1 , dim ), source = 0.0_rk ) allocate ( ebpts ( degree + t + 1 , dim ), source = 0.0_rk ) allocate ( Nextbpts ( degree + 1 , dim ), source = 0.0_rk ) allocate ( alfs ( degree ), source = 0.0_rk ) n = nc - 1 m = n + degree + 1 ph = degree + t ph2 = ph / 2 bezalfs ( 1 , 1 ) = 1.0_rk bezalfs ( degree + 1 , ph + 1 ) = 1.0_rk do i = 1 , ph2 inv = 1.0_rk / bincoeff ( ph , i ) mpi = min ( degree , i ) do j = max ( 0 , i - t ), mpi bezalfs ( j + 1 , i + 1 ) = inv * bincoeff ( degree , j ) * bincoeff ( t , i - j ) end do end do do i = ph2 + 1 , ph - 1 mpi = min ( degree , i ) do j = max ( 0 , i - t ), mpi bezalfs ( j + 1 , i + 1 ) = bezalfs ( degree - j + 1 , ph - i + 1 ) end do end do mh = ph knoti = ph + 1 r = - 1 a = degree b = degree + 1 Xcwi = 1 Xth1 = knot ( 1 ) Xcw_new ( 1 ,:) = Xcw ( 1 ,:) allocate ( knot_new ( sum ( mlp )), source = 0.0_rk ) knot_new ( 1 : ph + 1 ) = Xth1 do i = 0 , degree bpts ( i + 1 ,:) = Xcw ( i + 1 ,:) end do do while ( b < m ) i = b do while ( b < m . and . knot ( b + 1 ) == knot ( b + 2 )) b = b + 1 if ( b + 2 > size ( knot )) then exit end if end do mul = b - i + 1 mh = mh + mul + t Xth2 = knot ( b + 1 ) oldr = r r = degree - mul if ( oldr > 0 ) then lbz = ( oldr + 2 ) / 2 else lbz = 1 end if if ( r > 0 ) then rbz = ph - ( r + 1 ) / 2 else rbz = ph end if if ( r > 0 ) then numer = Xth2 - Xth1 do q = degree , mul + 1 , - 1 alfs ( q - mul ) = numer / ( knot ( a + q + 1 ) - Xth1 ) end do do j = 1 , r sv = r - j s = mul + j do q = degree , s , - 1 bpts ( q + 1 ,:) = ( 1.0_rk - alfs ( q - s + 1 )) * bpts ( q ,:) + alfs ( q - s + 1 ) * bpts ( q + 1 ,:) end do Nextbpts ( sv + 1 ,:) = bpts ( degree + 1 ,:) end do end if do i = lbz , ph ebpts ( i + 1 ,:) = 0.0_rk mpi = min ( degree , i ) do j = max ( 0 , i - t ), mpi ebpts ( i + 1 ,:) = bezalfs ( j + 1 , i + 1 ) * bpts ( j + 1 ,:) + ebpts ( i + 1 ,:) end do end do if ( oldr > 1 ) then first = knoti - 2 last = knoti den = Xth2 - Xth1 alpha3 = floor (( Xth2 - knot ( knoti )) / den ) do tr = 1 , oldr - 1 i = first j = last kj = j - knoti + 1 do while ( j - i > tr ) if ( i < Xcwi ) then alpha1 = ( Xth2 - knot ( i + 1 )) / ( Xth1 - knot ( i + 1 )) Xcw_new ( i + 1 ,:) = ( 1 - alpha1 ) * Xcw_new ( i ,:) + alpha1 * Xcw_new ( i + 1 ,:) end if if ( j >= lbz ) then if ( j - tr <= knoti - ph + oldr ) then alpha2 = ( Xth2 - knot_new ( j - tr + 1 )) / den ebpts ( kj + 1 ,:) = alpha2 * ebpts ( kj + 1 ,:) + ( 1 - alpha2 ) * ebpts ( kj + 2 ,:) else ebpts ( kj + 1 ,:) = ( 1 - alpha3 ) * ebpts (:, kj + 2 ) + alpha3 * ebpts ( kj + 1 ,:) end if end if i = i + 1 j = j - 1 kj = kj - 1 end do first = first - 1 last = last + 1 end do end if if ( a /= degree ) then do i = 0 , ph - oldr - 1 knot_new ( knoti + 1 ) = Xth1 knoti = knoti + 1 end do end if do j = lbz , rbz Xcw_new ( Xcwi + 1 ,:) = ebpts ( j + 1 ,:) Xcwi = Xcwi + 1 end do if ( b < m ) then do j = 0 , r - 1 bpts ( j + 1 ,:) = Nextbpts ( j + 1 ,:) end do do j = r , degree bpts ( j + 1 ,:) = Xcw ( b - degree + j + 1 ,:) end do a = b b = b + 1 Xth1 = Xth2 else do i = 0 , ph knot_new ( knoti + i + 1 ) = Xth2 end do end if end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function bincoeff ( n , k ) result ( b ) integer , intent ( in ) :: n , k real ( rk ) :: b b = floor ( 0.5_rk + exp ( factln ( n ) - factln ( k ) - factln ( n - k ))) end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function factln ( n ) result ( f ) integer , intent ( in ) :: n real ( rk ) :: f if ( n <= 1 ) then f = 0.0_rk return end if f = log ( gamma ( real ( n + 1 , rk ))) end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function hexahedron_Xc ( L , nc ) result ( Xc ) real ( rk ), intent ( in ) :: L ( 3 ) integer , intent ( in ) :: nc ( 3 ) real ( rk ), allocatable :: Xc (:,:) real ( rk ) :: dx , dy , dz integer :: i , j , k , nci dx = L ( 1 ) / real ( nc ( 1 ) - 1 , rk ) dy = L ( 2 ) / real ( nc ( 2 ) - 1 , rk ) dz = L ( 3 ) / real ( nc ( 3 ) - 1 , rk ) allocate ( Xc ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ), 3 )) nci = 1 do k = 0 , nc ( 3 ) - 1 do j = 0 , nc ( 2 ) - 1 do i = 0 , nc ( 1 ) - 1 Xc ( nci , 1 ) = real ( i , rk ) * dx Xc ( nci , 2 ) = real ( j , rk ) * dy Xc ( nci , 3 ) = real ( k , rk ) * dz nci = nci + 1 end do end do end do end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function tetragon_Xc ( L , nc ) result ( Xc ) real ( rk ), intent ( in ) :: L ( 2 ) integer , intent ( in ) :: nc ( 2 ) real ( rk ), allocatable :: Xc (:,:) real ( rk ) :: dx , dy integer :: i , j , nci dx = L ( 1 ) / real ( nc ( 1 ) - 1 , rk ) dy = L ( 2 ) / real ( nc ( 2 ) - 1 , rk ) allocate ( Xc ( nc ( 1 ) * nc ( 2 ), 3 )) nci = 1 do j = 0 , nc ( 2 ) - 1 do i = 0 , nc ( 1 ) - 1 Xc ( nci , 1 ) = real ( i , rk ) * dx Xc ( nci , 2 ) = real ( j , rk ) * dy Xc ( nci , 3 ) = 0.0_rk nci = nci + 1 end do end do end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine remove_knots_A_5_8 ( p , knot , Pw , u , r , s , num , t , knot_new , Pw_new ) real ( rk ), intent ( in ) :: u integer , intent ( in ) :: p , r , s , num real ( rk ), intent ( in ), contiguous :: knot (:) real ( rk ), intent ( in ), contiguous :: Pw (:,:) real ( rk ), allocatable , intent ( out ) :: knot_new (:) real ( rk ), allocatable , intent ( out ) :: Pw_new (:,:) real ( rk ), allocatable :: Pw_copy (:,:), knot_copy (:) integer , intent ( out ) :: t real ( rk ) :: tol , alfi , alfj real ( rk ), allocatable :: temp (:,:) integer :: i , j , ii , jj , remflag , off , first , last , ord , fout , m , k , n , nc , dim , tt dim = size ( Pw , 2 ) nc = size ( Pw , 1 ) n = nc m = n + p + 1 ord = p + 1 fout = ( 2 * r - s - p ) / 2 last = r - s first = r - p Pw_copy = Pw knot_copy = knot ! TODO: tol = 1.0e-6_rk * minval ( Pw (:, dim )) / ( 1.0_rk + maxval ( sqrt ( sum ( Pw ** 2 , 2 )))) allocate ( temp ( 2 * p + 1 , dim ), source = 0.0_rk ) t = 0 do tt = 0 , num - 1 off = first - 1 temp ( 1 ,:) = Pw_copy ( off ,:) temp ( last + 1 - off + 1 ,:) = Pw_copy ( last + 1 ,:) i = first j = last ii = 1 jj = last - off remflag = 0 do while ( j - i > t ) alfi = ( u - knot_copy ( i )) / ( knot_copy ( i + ord + t ) - knot_copy ( i )) alfj = ( u - knot_copy ( j - t )) / ( knot_copy ( j + ord ) - knot_copy ( j - t )) temp ( ii + 1 ,:) = ( Pw_copy ( i ,:) - ( 1.0_rk - alfi ) * temp ( ii - 1 + 1 ,:)) / alfi temp ( jj + 1 ,:) = ( Pw_copy ( j ,:) - alfj * temp ( jj + 1 + 1 ,:)) / ( 1.0_rk - alfj ) i = i + 1 ii = ii + 1 j = j - 1 jj = jj - 1 end do if ( j - i <= t ) then if ( norm2 ( temp ( ii - 1 + 1 ,:) - temp ( jj + 1 + 1 ,:)) <= tol ) then remflag = 1 else alfi = ( u - knot_copy ( i )) / ( knot_copy ( i + ord + t ) - knot_copy ( i )) if ( norm2 ( Pw_copy ( i ,:) - ( alfi * temp ( ii + t + 1 + 1 ,:) + ( 1.0_rk - alfi ) * temp ( ii - 1 + 1 ,:))) <= tol ) then remflag = 1 end if end if end if if ( remflag == 0 ) then exit else i = first j = last do while ( j - i > t ) Pw_copy ( i ,:) = temp ( i - off + 1 ,:) Pw_copy ( j ,:) = temp ( j - off + 1 ,:) i = i + 1 j = j - 1 end do end if first = first - 1 last = last + 1 t = t + 1 end do if ( t == 0 ) then return end if do k = r + 1 , m knot_copy ( k - t ) = knot_copy ( k ) end do j = fout i = j do k = 1 , t - 1 if ( mod ( k , 2 ) == 1 ) then i = i + 1 else j = j - 1 end if end do do k = i + 1 , n Pw_copy ( j ,:) = Pw_copy ( k ,:) j = j + 1 end do knot_new = knot_copy ( 1 : size ( knot_copy ) - t ) Pw_new = Pw_copy ( 1 : size ( Pw_copy , 1 ) - t ,:) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function unique_integer ( vec ) result ( output ) integer , dimension (:), intent ( in ), contiguous :: vec integer , dimension (:), allocatable :: output integer :: i , j , k allocate ( output ( 0 )) do i = 1 , size ( vec ) k = 0 do j = 1 , size ( output ) if ( vec ( i ) == output ( j )) then k = k + 1 exit end if end do if ( k == 0 ) then output = [ output , vec ( i )] end if end do end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function unique_real ( vec ) result ( output ) real ( rk ), dimension (:), intent ( in ), contiguous :: vec real ( rk ), dimension (:), allocatable :: output integer :: i , j , k allocate ( output ( 0 )) do i = 1 , size ( vec ) k = 0 do j = 1 , size ( output ) if ( vec ( i ) == output ( j )) then k = k + 1 exit end if end do if ( k == 0 ) then output = [ output , vec ( i )] end if end do end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function rotation ( alpha , beta , theta ) result ( R ) real ( rk ), intent ( in ) :: alpha , beta , theta real ( rk ), dimension ( 3 , 3 ) :: R R ( 1 , 1 ) = cosd ( beta ) * cosd ( theta ) R ( 2 , 1 ) = cosd ( beta ) * sind ( theta ) R ( 3 , 1 ) = - sind ( beta ) R ( 1 , 2 ) = sind ( alpha ) * sind ( beta ) * cosd ( theta ) - cosd ( alpha ) * sind ( theta ) R ( 2 , 2 ) = sind ( alpha ) * sind ( beta ) * sind ( theta ) + cosd ( alpha ) * cosd ( theta ) R ( 3 , 2 ) = sind ( alpha ) * cosd ( beta ) R ( 1 , 3 ) = cosd ( alpha ) * sind ( beta ) * cosd ( theta ) + sind ( alpha ) * sind ( theta ) R ( 2 , 3 ) = cosd ( alpha ) * sind ( beta ) * sind ( theta ) - sind ( alpha ) * cosd ( theta ) R ( 3 , 3 ) = cosd ( alpha ) * cosd ( beta ) end function !=============================================================================== end module forcad_utils","tags":"","loc":"sourcefile/forcad_utils.f90.html"},{"title":"shape_C_3d.f90 – ForCAD","text":"This file depends on sourcefile~~shape_c_3d.f90~~EfferentGraph sourcefile~shape_c_3d.f90 shape_C_3d.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~shape_c_3d.f90->sourcefile~forcad.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_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 program shape_C_3d use forcad , only : rk , nurbs_volume implicit none type ( nurbs_volume ) :: shape !----------------------------------------------------------------------------- ! Setting up NURBS C-shape !----------------------------------------------------------------------------- !> Set a C-shape with radius 2.0 and center at [0.0, 0.0, 0.0] call shape % set_C ( center = [ 0.0_rk , 0.0_rk , 0.0_rk ], radius1 = 1.0_rk , radius2 = 2.0_rk , length = 2.0_rk ) !> Export control points to a VTK file call shape % export_Xc ( 'vtk/shape_C_3d_Xc.vtk' ) !----------------------------------------------------------------------------- ! Creating C-shape !----------------------------------------------------------------------------- !> Generate the NURBS C-shape with a resolution of 100 call shape % create ( 100 , 60 , 10 ) !> Export the generated cirlce to a VTK file call shape % export_Xg ( 'vtk/shape_C_3d_Xg.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call shape % show ( 'vtk/shape_C_3d_Xc.vtk' , 'vtk/shape_C_3d_Xg.vtk' ) !----------------------------------------------------------------------------- ! Finalizing !----------------------------------------------------------------------------- !> Finalize the NURBS curve object call shape % finalize () end program","tags":"","loc":"sourcefile/shape_c_3d.f90.html"},{"title":"example_volume_1.f90 – ForCAD","text":"This file depends on sourcefile~~example_volume_1.f90~~EfferentGraph sourcefile~example_volume_1.f90 example_volume_1.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~example_volume_1.f90->sourcefile~forcad.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_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 example3_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 (optional) allocate ( Wc ( size ( Xc , 1 )), source = 1.0_rk ) Wc ( 2 ) = 5.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 !> Wc is optional. call nurbs % set ( knot1 , knot2 , knot3 , Xc , Wc ) !> Deallocate local arrays deallocate ( 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 20, 20, and 20 in the three dimensions call nurbs % create ( 20 , 20 , 20 ) !> Export the generated volume to a VTK file call nurbs % export_Xg ( 'vtk/nurbs_volume_Xg.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call nurbs % show ( 'vtk/nurbs_volume_Xc.vtk' , 'vtk/nurbs_volume_Xg.vtk' ) !----------------------------------------------------------------------------- ! Refinements !----------------------------------------------------------------------------- !> Print size of knot vectors print * , size ( nurbs % get_knot ( 1 )) print * , size ( nurbs % get_knot ( 2 )) print * , size ( nurbs % get_knot ( 3 )) !> Insert knots 0.25 and 0.75 in all three directions call nurbs % insert_knots ( 1 , [ 0.25_rk , 0.75_rk ], [ 1 , 1 ]) ! direction 1 call nurbs % insert_knots ( 2 , [ 0.25_rk , 0.75_rk ], [ 1 , 1 ]) ! direction 2 call nurbs % insert_knots ( 3 , [ 0.25_rk , 0.75_rk ], [ 1 , 1 ]) ! direction 3 !> Print size of knot vectors after inserting knots print * , size ( nurbs % get_knot ( 1 )) print * , size ( nurbs % get_knot ( 2 )) print * , size ( nurbs % get_knot ( 3 )) !> Print degrees print * , nurbs % get_degree () !> Elevate degree by 2 in all three directions call nurbs % elevate_degree ( 1 , 2 ) ! direction 1 call nurbs % elevate_degree ( 2 , 2 ) ! direction 2 call nurbs % elevate_degree ( 3 , 2 ) ! direction 3 !> Print degrees after elevating print * , nurbs % get_degree () !> Print size of knot vectors print * , size ( nurbs % get_knot ( 1 )) print * , size ( nurbs % get_knot ( 2 )) print * , size ( nurbs % get_knot ( 3 )) call nurbs % remove_knots ( 1 , [ 0.25_rk , 0.75_rk ], [ 1 , 1 ]) ! direction 1 call nurbs % remove_knots ( 2 , [ 0.25_rk , 0.75_rk ], [ 1 , 1 ]) ! direction 2 call nurbs % remove_knots ( 3 , [ 0.25_rk , 0.75_rk ], [ 1 , 1 ]) ! direction 3 !> Print size of knot vectors after removing knots print * , size ( nurbs % get_knot ( 1 )) print * , size ( nurbs % get_knot ( 2 )) print * , size ( nurbs % get_knot ( 3 )) !> Generate the refined NURBS volume with resolutions of 40, 40, and 40 in the three dimensions call nurbs % create () !> Export updated control points to a VTK file call nurbs % export_Xc ( 'vtk/nurbs_volume_Xc2.vtk' ) !> Export the refined generated volume to a VTK file call nurbs % export_Xg ( 'vtk/nurbs_volume_Xg2.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call nurbs % show ( 'vtk/nurbs_volume_Xc2.vtk' , 'vtk/nurbs_volume_Xg2.vtk' ) !----------------------------------------------------------------------------- ! Transformations !----------------------------------------------------------------------------- !> Rotate the control points call nurbs % rotate_Xc ( alpha =- 4 5.0_rk , beta = 0.0_rk , theta = 9 0.0_rk ) !> Rotate the generated curve call nurbs % rotate_Xg ( alpha =- 4 5.0_rk , beta = 0.0_rk , theta = 9 0.0_rk ) !> Translate the control points call nurbs % translate_Xc ([ 1.0_rk , 2.0_rk , - 3.0_rk ]) !> Translate the generated curve call nurbs % translate_Xg ([ 1.0_rk , 2.0_rk , - 3.0_rk ]) !> Export the transformed control points to a VTK file call nurbs % export_Xc ( 'vtk/nurbs_volume_Xc3.vtk' ) !> Export the transformed generated volume to a VTK file call nurbs % export_Xg ( 'vtk/nurbs_volume_Xg3.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call nurbs % show ( 'vtk/nurbs_volume_Xc3.vtk' , 'vtk/nurbs_volume_Xg3.vtk' ) !----------------------------------------------------------------------------- ! Extract faces !----------------------------------------------------------------------------- !> first compute and set the connectivities of volume elements call nurbs % set_elem ( nurbs % cmp_elem ()) !> get the connectivity of the face1 of the first element print * , 'Face 1 of element 1:' , nurbs % cmp_elemFace ( elem = 1 , face = 1 ) print * , 'Face 2 of element 1:' , nurbs % cmp_elemFace ( elem = 1 , face = 2 ) print * , 'Face 3 of element 1:' , nurbs % cmp_elemFace ( elem = 1 , face = 3 ) print * , 'Face 4 of element 1:' , nurbs % cmp_elemFace ( elem = 1 , face = 4 ) print * , 'Face 5 of element 1:' , nurbs % cmp_elemFace ( elem = 1 , face = 5 ) print * , 'Face 6 of element 1:' , nurbs % cmp_elemFace ( elem = 1 , face = 6 ) !> get the degree of the faces print * , 'Degree of face 1:' , nurbs % cmp_degreeFace ( face = 1 ) print * , 'Degree of face 2:' , nurbs % cmp_degreeFace ( face = 2 ) print * , 'Degree of face 3:' , nurbs % cmp_degreeFace ( face = 3 ) print * , 'Degree of face 4:' , nurbs % cmp_degreeFace ( face = 4 ) print * , 'Degree of face 5:' , nurbs % cmp_degreeFace ( face = 5 ) print * , 'Degree of face 6:' , nurbs % cmp_degreeFace ( face = 6 ) !----------------------------------------------------------------------------- ! 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 ), 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 example3_volume","tags":"","loc":"sourcefile/example_volume_1.f90.html"},{"title":"shape_C_1d.f90 – ForCAD","text":"This file depends on sourcefile~~shape_c_1d.f90~~EfferentGraph sourcefile~shape_c_1d.f90 shape_C_1d.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~shape_c_1d.f90->sourcefile~forcad.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_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 program shape_C_1d use forcad , only : rk , nurbs_curve implicit none type ( nurbs_curve ) :: shape !----------------------------------------------------------------------------- ! Setting up NURBS C-shape !----------------------------------------------------------------------------- !> Set a C-shape with radius 2.0 and center at [0.0, 0.0, 0.0] call shape % set_C ( center = [ 0.0_rk , 0.0_rk , 0.0_rk ], radius = 2.0_rk ) !> Export control points to a VTK file call shape % export_Xc ( 'vtk/shape_C_1d_Xc.vtk' ) !----------------------------------------------------------------------------- ! Creating C-shape !----------------------------------------------------------------------------- !> Generate the NURBS C-shape with a resolution of 100 call shape % create ( res = 100 ) !> Export the generated cirlce to a VTK file call shape % export_Xg ( 'vtk/shape_C_1d_Xg.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call shape % show ( 'vtk/shape_C_1d_Xc.vtk' , 'vtk/shape_C_1d_Xg.vtk' ) !----------------------------------------------------------------------------- ! Finalizing !----------------------------------------------------------------------------- !> Finalize the NURBS curve object call shape % finalize () end program","tags":"","loc":"sourcefile/shape_c_1d.f90.html"},{"title":"shape_half_ring_2d.f90 – ForCAD","text":"This file depends on sourcefile~~shape_half_ring_2d.f90~~EfferentGraph sourcefile~shape_half_ring_2d.f90 shape_half_ring_2d.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~shape_half_ring_2d.f90->sourcefile~forcad.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_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 program shape_half_ring_2d use forcad , only : rk , nurbs_surface implicit none type ( nurbs_surface ) :: shape !> Set up a half ring shape centered at 0,0,0 with inner radius 1 and outer radius 2. call shape % set_half_ring ([ 0.0_rk , 0.0_rk , 0.0_rk ], 1.0_rk , 2.0_rk ) !> Export the control points to a VTK file for visualization. call shape % export_Xc ( 'vtk/shape_half_ring_2d_Xc.vtk' ) !> Create the shape using the specified number of elements in each direction. call shape % create ( 60 , 15 ) !> Export the geometry to a VTK file for visualization. call shape % export_Xg ( 'vtk/shape_half_ring_2d_Xg.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call shape % show ( 'vtk/shape_half_ring_2d_Xc.vtk' , 'vtk/shape_half_ring_2d_Xg.vtk' ) !> Finalize and clean up the shape object. call shape % finalize () end program","tags":"","loc":"sourcefile/shape_half_ring_2d.f90.html"},{"title":"shape_C_2d.f90 – ForCAD","text":"This file depends on sourcefile~~shape_c_2d.f90~~EfferentGraph sourcefile~shape_c_2d.f90 shape_C_2d.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~shape_c_2d.f90->sourcefile~forcad.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_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 program shape_C_2d use forcad , only : rk , nurbs_surface implicit none type ( nurbs_surface ) :: shape !----------------------------------------------------------------------------- ! Setting up NURBS C-shape !----------------------------------------------------------------------------- !> Set a C-shape with radius 2.0 and center at [0.0, 0.0, 0.0] call shape % set_C ( center = [ 0.0_rk , 0.0_rk , 0.0_rk ], radius1 = 1.0_rk , radius2 = 2.0_rk ) !> Export control points to a VTK file call shape % export_Xc ( 'vtk/shape_C_2d_Xc.vtk' ) !----------------------------------------------------------------------------- ! Creating C-shape !----------------------------------------------------------------------------- !> Generate the NURBS C-shape with a resolution of 100 call shape % create ( 100 , 60 ) !> Export the generated cirlce to a VTK file call shape % export_Xg ( 'vtk/shape_C_2d_Xg.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call shape % show ( 'vtk/shape_C_2d_Xc.vtk' , 'vtk/shape_C_2d_Xg.vtk' ) !----------------------------------------------------------------------------- ! Finalizing !----------------------------------------------------------------------------- !> Finalize the NURBS curve object call shape % finalize () end program","tags":"","loc":"sourcefile/shape_c_2d.f90.html"},{"title":"demo_curve.f90 – ForCAD","text":"This file depends on sourcefile~~demo_curve.f90~~EfferentGraph sourcefile~demo_curve.f90 demo_curve.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~demo_curve.f90->sourcefile~forcad.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_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 curve object to create, and finalize a NURBS 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_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 !----------------------------------------------------------------------------- ! Setting up the NURBS curve !----------------------------------------------------------------------------- !> Define control points for the NURBS 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 NURBS curve object call nurbs % set ( Xc , Wc ) !> Deallocate local arrays deallocate ( Xc , Wc ) !> Export initial control points to a VTK file call nurbs % export_Xc ( 'vtk/demo_curve_Xc.vtk' ) !----------------------------------------------------------------------------- ! Creating the NURBS curve !----------------------------------------------------------------------------- !> Generate the NURBS curve with a resolution of 500 call nurbs % create ( res = 500 ) !> Export the generated curve to a VTK file call nurbs % export_Xg ( 'vtk/demo_curve_Xg.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call nurbs % show ( 'vtk/demo_curve_Xc.vtk' , 'vtk/demo_curve_Xg.vtk' ) !----------------------------------------------------------------------------- ! Finalizing !----------------------------------------------------------------------------- !> Finalize the NURBS curve object call nurbs % 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 ), 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 * real ( coil - 1 , rk ) / 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_nurbs_curve","tags":"","loc":"sourcefile/demo_curve.f90.html"},{"title":"shape_tetragon.f90 – ForCAD","text":"This file depends on sourcefile~~shape_tetragon.f90~~EfferentGraph sourcefile~shape_tetragon.f90 shape_tetragon.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~shape_tetragon.f90->sourcefile~forcad.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_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 program shape_tetragon use forcad implicit none type ( nurbs_surface ) :: shape !! Declare a NURBS surface object !----------------------------------------------------------------------------- ! Setting up the NURBS tetrangon !----------------------------------------------------------------------------- !> Set a tetragon with lengths of 2.0 and 3.0 and 3 and 4 control points in each direction !> The weights of the control points (Wc) are optional. call shape % set_tetragon ( L = [ 2.0_rk , 3.0_rk ], nc = [ 3 , 4 ]) !> Export the control points to a VTK file call shape % export_Xc ( 'vtk/shape_tetragon_Xc.vtk' ) !----------------------------------------------------------------------------- ! Creating the NURBS surface !----------------------------------------------------------------------------- !> Generate the NURBS surface with resolutions of 30 in both dimensions call shape % create ( 30 , 30 ) !> Export the generated surface to a VTK file call shape % export_Xg ( 'vtk/shape_tetragon_Xg.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call shape % show ( 'vtk/shape_tetragon_Xc.vtk' , 'vtk/shape_tetragon_Xg.vtk' ) !----------------------------------------------------------------------------- ! Finalizing !----------------------------------------------------------------------------- !> Finalize the NURBS surface object call shape % finalize () end program","tags":"","loc":"sourcefile/shape_tetragon.f90.html"},{"title":"forcad.f90 – ForCAD","text":"This file depends on sourcefile~~forcad.f90~~EfferentGraph sourcefile~forcad.f90 forcad.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_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~demo_curve.f90 demo_curve.f90 sourcefile~demo_curve.f90->sourcefile~forcad.f90 sourcefile~demo_surface.f90 demo_surface.f90 sourcefile~demo_surface.f90->sourcefile~forcad.f90 sourcefile~demo_volume.f90 demo_volume.f90 sourcefile~demo_volume.f90->sourcefile~forcad.f90 sourcefile~example_curve_1.f90 example_curve_1.f90 sourcefile~example_curve_1.f90->sourcefile~forcad.f90 sourcefile~example_ppm1.f90 example_ppm1.f90 sourcefile~example_ppm1.f90->sourcefile~forcad.f90 sourcefile~example_ppm2.f90 example_ppm2.f90 sourcefile~example_ppm2.f90->sourcefile~forcad.f90 sourcefile~example_ppm3.f90 example_ppm3.f90 sourcefile~example_ppm3.f90->sourcefile~forcad.f90 sourcefile~example_surface_1.f90 example_surface_1.f90 sourcefile~example_surface_1.f90->sourcefile~forcad.f90 sourcefile~example_volume_1.f90 example_volume_1.f90 sourcefile~example_volume_1.f90->sourcefile~forcad.f90 sourcefile~nearest_point_1d.f90 nearest_point_1d.f90 sourcefile~nearest_point_1d.f90->sourcefile~forcad.f90 sourcefile~nearest_point_2d.f90 nearest_point_2d.f90 sourcefile~nearest_point_2d.f90->sourcefile~forcad.f90 sourcefile~nearest_point_2d_bench.f90 nearest_point_2d_bench.f90 sourcefile~nearest_point_2d_bench.f90->sourcefile~forcad.f90 sourcefile~nearest_point_3d.f90 nearest_point_3d.f90 sourcefile~nearest_point_3d.f90->sourcefile~forcad.f90 sourcefile~put_to_nurbs.f90 put_to_nurbs.f90 sourcefile~put_to_nurbs.f90->sourcefile~forcad.f90 sourcefile~shape_c_1d.f90 shape_C_1d.f90 sourcefile~shape_c_1d.f90->sourcefile~forcad.f90 sourcefile~shape_c_2d.f90 shape_C_2d.f90 sourcefile~shape_c_2d.f90->sourcefile~forcad.f90 sourcefile~shape_c_3d.f90 shape_C_3d.f90 sourcefile~shape_c_3d.f90->sourcefile~forcad.f90 sourcefile~shape_circle.f90 shape_circle.f90 sourcefile~shape_circle.f90->sourcefile~forcad.f90 sourcefile~shape_half_circle.f90 shape_half_circle.f90 sourcefile~shape_half_circle.f90->sourcefile~forcad.f90 sourcefile~shape_half_ring_2d.f90 shape_half_ring_2d.f90 sourcefile~shape_half_ring_2d.f90->sourcefile~forcad.f90 sourcefile~shape_half_ring_3d.f90 shape_half_ring_3d.f90 sourcefile~shape_half_ring_3d.f90->sourcefile~forcad.f90 sourcefile~shape_hexahedron.f90 shape_hexahedron.f90 sourcefile~shape_hexahedron.f90->sourcefile~forcad.f90 sourcefile~shape_ring_2d.f90 shape_ring_2d.f90 sourcefile~shape_ring_2d.f90->sourcefile~forcad.f90 sourcefile~shape_ring_3d.f90 shape_ring_3d.f90 sourcefile~shape_ring_3d.f90->sourcefile~forcad.f90 sourcefile~shape_tetragon.f90 shape_tetragon.f90 sourcefile~shape_tetragon.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 !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause module forcad use forcad_utils use forcad_nurbs_curve use forcad_nurbs_surface use forcad_nurbs_volume private public rk , nurbs_curve , nurbs_surface , nurbs_volume end module forcad","tags":"","loc":"sourcefile/forcad.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~demo_curve.f90 demo_curve.f90 sourcefile~demo_curve.f90->sourcefile~forcad.f90 sourcefile~demo_surface.f90 demo_surface.f90 sourcefile~demo_surface.f90->sourcefile~forcad.f90 sourcefile~demo_volume.f90 demo_volume.f90 sourcefile~demo_volume.f90->sourcefile~forcad.f90 sourcefile~example_curve_1.f90 example_curve_1.f90 sourcefile~example_curve_1.f90->sourcefile~forcad.f90 sourcefile~example_ppm1.f90 example_ppm1.f90 sourcefile~example_ppm1.f90->sourcefile~forcad.f90 sourcefile~example_ppm2.f90 example_ppm2.f90 sourcefile~example_ppm2.f90->sourcefile~forcad.f90 sourcefile~example_ppm3.f90 example_ppm3.f90 sourcefile~example_ppm3.f90->sourcefile~forcad.f90 sourcefile~example_surface_1.f90 example_surface_1.f90 sourcefile~example_surface_1.f90->sourcefile~forcad.f90 sourcefile~example_volume_1.f90 example_volume_1.f90 sourcefile~example_volume_1.f90->sourcefile~forcad.f90 sourcefile~nearest_point_1d.f90 nearest_point_1d.f90 sourcefile~nearest_point_1d.f90->sourcefile~forcad.f90 sourcefile~nearest_point_2d.f90 nearest_point_2d.f90 sourcefile~nearest_point_2d.f90->sourcefile~forcad.f90 sourcefile~nearest_point_2d_bench.f90 nearest_point_2d_bench.f90 sourcefile~nearest_point_2d_bench.f90->sourcefile~forcad.f90 sourcefile~nearest_point_3d.f90 nearest_point_3d.f90 sourcefile~nearest_point_3d.f90->sourcefile~forcad.f90 sourcefile~put_to_nurbs.f90 put_to_nurbs.f90 sourcefile~put_to_nurbs.f90->sourcefile~forcad.f90 sourcefile~shape_c_1d.f90 shape_C_1d.f90 sourcefile~shape_c_1d.f90->sourcefile~forcad.f90 sourcefile~shape_c_2d.f90 shape_C_2d.f90 sourcefile~shape_c_2d.f90->sourcefile~forcad.f90 sourcefile~shape_c_3d.f90 shape_C_3d.f90 sourcefile~shape_c_3d.f90->sourcefile~forcad.f90 sourcefile~shape_circle.f90 shape_circle.f90 sourcefile~shape_circle.f90->sourcefile~forcad.f90 sourcefile~shape_half_circle.f90 shape_half_circle.f90 sourcefile~shape_half_circle.f90->sourcefile~forcad.f90 sourcefile~shape_half_ring_2d.f90 shape_half_ring_2d.f90 sourcefile~shape_half_ring_2d.f90->sourcefile~forcad.f90 sourcefile~shape_half_ring_3d.f90 shape_half_ring_3d.f90 sourcefile~shape_half_ring_3d.f90->sourcefile~forcad.f90 sourcefile~shape_hexahedron.f90 shape_hexahedron.f90 sourcefile~shape_hexahedron.f90->sourcefile~forcad.f90 sourcefile~shape_ring_2d.f90 shape_ring_2d.f90 sourcefile~shape_ring_2d.f90->sourcefile~forcad.f90 sourcefile~shape_ring_3d.f90 shape_ring_3d.f90 sourcefile~shape_ring_3d.f90->sourcefile~forcad.f90 sourcefile~shape_tetragon.f90 shape_tetragon.f90 sourcefile~shape_tetragon.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 !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> This module defines the 'nurbs_curve' type for representing a Non-Uniform Rational B-Spline (NURBS) curve. module forcad_nurbs_curve use forcad_utils , only : rk , basis_bspline , elemConn_C0 , compute_multiplicity , compute_knot_vector , basis_bspline_der ,& insert_knot_A_5_1 , findspan , elevate_degree_A_5_9 , remove_knots_A_5_8 , & elemConn_Cn , unique , rotation implicit none private public nurbs_curve !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause type nurbs_curve real ( rk ), allocatable , private :: Xc (:,:) !! Control points (2D array: [nc, dim]) real ( rk ), allocatable , private :: Xg (:,:) !! Geometry points (2D array: [ng, dim]) real ( rk ), allocatable , private :: Wc (:) !! Weights for control points (1D array: [nc]) real ( rk ), allocatable , private :: Xt (:) !! Evaluation points (1D array: [ng]) real ( rk ), allocatable , private :: knot (:) !! Knot vector (1D array) integer , private :: degree !! Degree (order) of the curve integer , private :: nc !! Number of control points integer , private :: ng !! Number of geometry points integer , allocatable , private :: elemConn_Xc_vis (:,:) !! Connectivity for visualization of control points integer , allocatable , private :: elemConn_Xg_vis (:,:) !! Connectivity for visualization of geometry points integer , allocatable , private :: elemConn (:,:) !! IGA element connectivity contains procedure :: set1 !!> Set knot vector, control points and weights for the NURBS curve object procedure :: set2 !!> Set NURBS curve using nodes of parameter space, degree, continuity, control points and weights procedure :: set3 !!> Set Bezier or Rational Bezier curve using control points and weights generic :: set => set1 , set2 , set3 !!> Set NURBS curve procedure :: create !!> Generate geometry points procedure :: cmp_Xg !!> Compute geometry points procedure , private :: get_Xc_all !!> Get all control points procedure , private :: get_Xci !!> Get i-th control point procedure , private :: get_Xcid !!> Get i-th control point in a specific direction generic :: get_Xc => get_Xc_all , get_Xci , get_Xcid !!> Get control points procedure , private :: get_Xg_all !!> Get all geometry points procedure , private :: get_Xgi !!> Get i-th geometry point procedure , private :: get_Xgid !!> Get i-th geometry point in a specific direction generic :: get_Xg => get_Xg_all , get_Xgi , get_Xgid !!> Get geometry points procedure , private :: get_Wc_all !!> Get all weights procedure , private :: get_Wci !!> Get i-th weight generic :: get_Wc => get_Wc_all , get_Wci !!> Get weights procedure :: get_Xt !!> Get parameter values procedure , private :: get_knot_all !!> Get all knot vectors procedure , private :: get_knoti !!> Get i-th knot value generic :: get_knot => get_knoti , get_knot_all !!> Get knot vector procedure :: get_ng !!> Get number of geometry points procedure :: cmp_degree !!> Compute degree of the NURBS curve procedure :: get_degree !!> Get degree of the NURBS curve procedure :: finalize !!> Finalize the NURBS curve object procedure :: cmp_elem_Xc_vis !!> Generate connectivity for control points procedure :: cmp_elem_Xg_vis !!> Generate connectivity for geometry points procedure :: cmp_elem !!> Generate IGA element connectivity procedure :: get_elem_Xc_vis !!> Get connectivity for control points procedure :: get_elem_Xg_vis !!> Get connectivity for geometry points procedure :: get_elem !!> Get IGA element connectivity procedure :: set_elem_Xc_vis !!> Set connectivity for control points procedure :: set_elem_Xg_vis !!> Set connectivity for geometry points procedure :: set_elem !!> Set IGA element connectivity 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 !!> Compute and return the multiplicity of the knots procedure :: get_continuity !!> Compute and return the continuity of the curve procedure :: cmp_nc !!> Compute number of required control points procedure :: get_nc !!> Get number of control points procedure :: insert_knots !!> Insert knots into the knot vector procedure :: elevate_degree !!> Elevate the degree of the curve procedure , private :: basis_vector !!> Compute the basis functions of the NURBS curve procedure , private :: basis_scalar !!> Compute the basis functions of the NURBS curve generic :: basis => basis_vector , basis_scalar !!> Compute the basis functions of the NURBS curve procedure , private :: derivative_vector !!> Compute the derivative of the NURBS curve procedure , private :: derivative_scalar !!> Compute the derivative of the NURBS curve generic :: derivative => derivative_vector , derivative_scalar !!> Compute the derivative of the NURBS curve procedure , private :: derivative2_vector !!> Compute the second derivative of the NURBS curve procedure , private :: derivative2_scalar !!> Compute the second derivative of the NURBS curve generic :: derivative2 => derivative2_vector , derivative2_scalar !!> Compute the second derivative of the NURBS curve procedure :: is_rational !!> Check if the NURBS curve is rational procedure :: remove_knots !!> Remove knots from the knot vector procedure :: rotate_Xc !!> Rotate control points procedure :: rotate_Xg !!> Rotate geometry points procedure :: translate_Xc !!> Translate control points procedure :: translate_Xg !!> Translate geometry points procedure :: show !!> Show the NURBS object using PyVista procedure :: nearest_point !!> Find the nearest point on the NURBS curve (Approximation) procedure :: nearest_point2 !!> Find the nearest point on the NURBS curve (Minimization - Newton's method) ! Shapes procedure :: set_circle !!> Set a circle procedure :: set_half_circle !!> Set a half circle procedure :: set_C !!> Set a C-shape end type !=============================================================================== interface compute_Xg pure function compute_Xg_nurbs_1d ( f_Xt , f_knot , f_degree , f_nc , f_ng , f_Xc , f_Wc ) result ( f_Xg ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:) real ( rk ), intent ( in ), contiguous :: f_knot (:) integer , intent ( in ) :: f_degree integer , intent ( in ) :: f_nc integer , intent ( in ) :: f_ng real ( rk ), intent ( in ), contiguous :: f_Xc (:,:) real ( rk ), intent ( in ), contiguous :: f_Wc (:) real ( rk ), allocatable :: f_Xg (:,:) end function pure function compute_Xg_bspline_1d ( f_Xt , f_knot , f_degree , f_nc , f_ng , f_Xc ) result ( f_Xg ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:) real ( rk ), intent ( in ), contiguous :: f_knot (:) integer , intent ( in ) :: f_degree integer , intent ( in ) :: f_nc integer , intent ( in ) :: f_ng real ( rk ), intent ( in ), contiguous :: f_Xc (:,:) real ( rk ), allocatable :: f_Xg (:,:) end function pure function compute_Xg_nurbs_1d_1point ( f_Xt , f_knot , f_degree , f_nc , f_Xc , f_Wc ) result ( f_Xg ) import :: rk real ( rk ), intent ( in ) :: f_Xt real ( rk ), intent ( in ), contiguous :: f_knot (:) integer , intent ( in ) :: f_degree integer , intent ( in ) :: f_nc real ( rk ), intent ( in ), contiguous :: f_Xc (:,:) real ( rk ), intent ( in ), contiguous :: f_Wc (:) real ( rk ), allocatable :: f_Xg (:) end function pure function compute_Xg_bspline_1d_1point ( f_Xt , f_knot , f_degree , f_nc , f_Xc ) result ( f_Xg ) import :: rk real ( rk ), intent ( in ) :: f_Xt real ( rk ), intent ( in ), contiguous :: f_knot (:) integer , intent ( in ) :: f_degree integer , intent ( in ) :: f_nc real ( rk ), intent ( in ), contiguous :: f_Xc (:,:) real ( rk ), allocatable :: f_Xg (:) end function end interface interface compute_d2Tgc pure subroutine compute_d2Tgc_nurbs_1d_vector ( f_Xt , f_knot , f_degree , f_nc , f_ng , f_Wc , f_d2Tgc , f_dTgc , f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:) real ( rk ), intent ( in ), contiguous :: f_knot (:) integer , intent ( in ) :: f_degree integer , intent ( in ) :: f_nc integer , intent ( in ) :: f_ng real ( rk ), intent ( in ), contiguous :: f_Wc (:) real ( rk ), allocatable , intent ( out ) :: f_d2Tgc (:,:) real ( rk ), allocatable , intent ( out ) :: f_dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: f_Tgc (:,:) end subroutine pure subroutine compute_d2Tgc_bspline_1d_vector ( f_Xt , f_knot , f_degree , f_nc , f_ng , f_d2Tgc , f_dTgc , f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:) real ( rk ), intent ( in ), contiguous :: f_knot (:) integer , intent ( in ) :: f_degree integer , intent ( in ) :: f_nc integer , intent ( in ) :: f_ng real ( rk ), allocatable , intent ( out ) :: f_d2Tgc (:,:) real ( rk ), allocatable , intent ( out ) :: f_dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: f_Tgc (:,:) end subroutine pure subroutine compute_d2Tgc_nurbs_1d_scalar ( f_Xt , f_knot , f_degree , f_nc , f_Wc , f_d2Tgc , f_dTgc , f_Tgc ) import :: rk real ( rk ), intent ( in ) :: f_Xt real ( rk ), intent ( in ), contiguous :: f_knot (:) integer , intent ( in ) :: f_degree integer , intent ( in ) :: f_nc real ( rk ), intent ( in ), contiguous :: f_Wc (:) real ( rk ), allocatable , intent ( out ) :: f_d2Tgc (:) real ( rk ), allocatable , intent ( out ) :: f_dTgc (:) real ( rk ), allocatable , intent ( out ) :: f_Tgc (:) end subroutine pure subroutine compute_d2Tgc_bspline_1d_scalar ( f_Xt , f_knot , f_degree , f_nc , f_d2Tgc , f_dTgc , f_Tgc ) import :: rk real ( rk ), intent ( in ) :: f_Xt real ( rk ), intent ( in ), contiguous :: f_knot (:) integer , intent ( in ) :: f_degree integer , intent ( in ) :: f_nc real ( rk ), allocatable , intent ( out ) :: f_d2Tgc (:) real ( rk ), allocatable , intent ( out ) :: f_dTgc (:) real ( rk ), allocatable , intent ( out ) :: f_Tgc (:) end subroutine end interface interface compute_dTgc pure subroutine compute_dTgc_nurbs_1d_vector ( f_Xt , f_knot , f_degree , f_nc , f_ng , f_Wc , f_dTgc , f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:) real ( rk ), intent ( in ), contiguous :: f_knot (:) integer , intent ( in ) :: f_degree integer , intent ( in ) :: f_nc integer , intent ( in ) :: f_ng real ( rk ), intent ( in ), contiguous :: f_Wc (:) real ( rk ), allocatable , intent ( out ) :: f_dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: f_Tgc (:,:) end subroutine pure subroutine compute_dTgc_bspline_1d_vector ( f_Xt , f_knot , f_degree , f_nc , f_ng , f_dTgc , f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:) real ( rk ), intent ( in ), contiguous :: f_knot (:) integer , intent ( in ) :: f_degree integer , intent ( in ) :: f_nc integer , intent ( in ) :: f_ng real ( rk ), allocatable , intent ( out ) :: f_dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: f_Tgc (:,:) end subroutine pure subroutine compute_dTgc_nurbs_1d_scalar ( f_Xt , f_knot , f_degree , f_nc , f_Wc , f_dTgc , f_Tgc ) import :: rk real ( rk ), intent ( in ) :: f_Xt real ( rk ), intent ( in ), contiguous :: f_knot (:) integer , intent ( in ) :: f_degree integer , intent ( in ) :: f_nc real ( rk ), intent ( in ), contiguous :: f_Wc (:) real ( rk ), allocatable , intent ( out ) :: f_dTgc (:) real ( rk ), allocatable , intent ( out ) :: f_Tgc (:) end subroutine pure subroutine compute_dTgc_bspline_1d_scalar ( f_Xt , f_knot , f_degree , f_nc , f_dTgc , f_Tgc ) import :: rk real ( rk ), intent ( in ) :: f_Xt real ( rk ), intent ( in ), contiguous :: f_knot (:) integer , intent ( in ) :: f_degree integer , intent ( in ) :: f_nc real ( rk ), allocatable , intent ( out ) :: f_dTgc (:) real ( rk ), allocatable , intent ( out ) :: f_Tgc (:) end subroutine end interface interface compute_Tgc pure function compute_Tgc_nurbs_1d_vector ( f_Xt , f_knot , f_degree , f_nc , f_ng , f_Wc ) result ( f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:) real ( rk ), intent ( in ), contiguous :: f_knot (:) integer , intent ( in ) :: f_degree integer , intent ( in ) :: f_nc integer , intent ( in ) :: f_ng real ( rk ), intent ( in ), contiguous :: f_Wc (:) real ( rk ), allocatable :: f_Tgc (:,:) end function pure function compute_Tgc_bspline_1d_vector ( f_Xt , f_knot , f_degree , f_nc , f_ng ) result ( f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:) real ( rk ), intent ( in ), contiguous :: f_knot (:) integer , intent ( in ) :: f_degree integer , intent ( in ) :: f_nc integer , intent ( in ) :: f_ng real ( rk ), allocatable :: f_Tgc (:,:) end function pure function compute_Tgc_nurbs_1d_scalar ( f_Xt , f_knot , f_degree , f_nc , f_Wc ) result ( f_Tgc ) import :: rk real ( rk ), intent ( in ) :: f_Xt real ( rk ), intent ( in ), contiguous :: f_knot (:) integer , intent ( in ) :: f_degree integer , intent ( in ) :: f_nc real ( rk ), intent ( in ), contiguous :: f_Wc (:) real ( rk ), allocatable :: f_Tgc (:) end function pure function compute_Tgc_bspline_1d_scalar ( f_Xt , f_knot , f_degree , f_nc ) result ( f_Tgc ) import :: rk real ( rk ), intent ( in ) :: f_Xt real ( rk ), intent ( in ), contiguous :: f_knot (:) integer , intent ( in ) :: f_degree integer , intent ( in ) :: f_nc real ( rk ), allocatable :: f_Tgc (:) end function end interface interface pure function nearest_point_help_1d ( f_ng , f_Xg , f_point_Xg ) result ( f_distances ) import :: rk integer , intent ( in ) :: f_ng real ( rk ), intent ( in ), contiguous :: f_Xg (:,:) real ( rk ), intent ( in ), contiguous :: f_point_Xg (:) real ( rk ), allocatable :: f_distances (:) end function end interface contains !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Set knot vector, control points and weights for the NURBS curve object. pure subroutine set1 ( this , knot , Xc , Wc ) class ( nurbs_curve ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: knot (:) real ( rk ), intent ( in ), contiguous :: Xc (:,:) real ( rk ), intent ( in ), contiguous , optional :: Wc (:) if ( allocated ( this % knot )) deallocate ( this % knot ) if ( allocated ( this % Xc )) deallocate ( this % Xc ) this % knot = knot call this % cmp_degree () 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 if ( allocated ( this % Wc )) deallocate ( this % Wc ) this % Wc = Wc end if end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Set NURBS curve using nodes of parameter space (Xth), degree, continuity, control points and weights. pure subroutine set2 ( this , Xth_dir , degree , continuity , Xc , Wc ) class ( nurbs_curve ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: Xth_dir (:) integer , intent ( in ) :: degree integer , intent ( in ), contiguous :: continuity (:) real ( rk ), intent ( in ), contiguous :: Xc (:,:) real ( rk ), intent ( in ), contiguous , optional :: Wc (:) if ( allocated ( this % knot )) deallocate ( this % knot ) if ( allocated ( this % Xc )) deallocate ( this % Xc ) this % knot = compute_knot_vector ( Xth_dir , degree , continuity ) this % degree = degree 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 if ( allocated ( this % Wc )) deallocate ( this % Wc ) this % Wc = Wc end if end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Set Bezier or Rational Bezier curve using control points and weights. pure subroutine set3 ( this , Xc , Wc ) class ( nurbs_curve ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: Xc (:,:) real ( rk ), intent ( in ), contiguous , optional :: Wc (:) if ( allocated ( this % knot )) deallocate ( this % knot ) if ( allocated ( this % Xc )) deallocate ( this % Xc ) this % Xc = Xc this % nc = size ( this % Xc , 1 ) if ( allocated ( this % knot )) deallocate ( this % knot ) allocate ( this % knot ( 2 * this % nc )) this % knot ( 1 : this % nc ) = 0.0_rk this % knot ( this % nc + 1 : 2 * this % nc ) = 1.0_rk call this % cmp_degree () if ( present ( Wc )) then if ( size ( Wc ) /= this % nc ) then error stop 'Number of weights does not match the number of control points.' else if ( allocated ( this % Wc )) deallocate ( this % Wc ) 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 ), contiguous , optional :: Xt (:) integer :: i ! check if (. not . allocated ( this % Xc )) then error stop 'Control points are not set.' end if if (. not . allocated ( this % knot )) then error stop 'Knot vector is 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 ) if ( this % is_rational ()) then ! NURBS this % Xg = compute_Xg (& this % Xt , this % knot , this % degree , this % nc , this % ng , this % Xc , this % Wc ) else ! B-Spline this % Xg = compute_Xg (& this % Xt , this % knot , this % degree , this % nc , this % ng , this % Xc ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function cmp_Xg ( this , Xt ) result ( Xg ) class ( nurbs_curve ), intent ( in ) :: this real ( rk ), intent ( in ) :: Xt real ( rk ), allocatable :: Xg (:) ! check if (. not . allocated ( this % Xc )) then error stop 'Control points are not set.' end if if (. not . allocated ( this % knot )) then error stop 'Knot vector is not set.' end if if ( this % is_rational ()) then ! NURBS Xg = compute_Xg ( Xt , this % knot , this % degree , this % nc , this % Xc , this % Wc ) else ! B-Spline Xg = compute_Xg ( Xt , this % knot , this % degree , this % nc , this % Xc ) end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xc_all ( 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_Xci ( this , n ) result ( Xc ) class ( nurbs_curve ), intent ( in ) :: this integer , intent ( in ) :: n real ( rk ), allocatable :: Xc (:) if ( allocated ( this % Xc )) then if ( n < lbound ( this % Xc , 1 ) . or . n > ubound ( this % Xc , 1 )) then error stop 'Invalid index for control points.' end if Xc = this % Xc ( n ,:) else error stop 'Control points are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xcid ( this , n , dir ) result ( Xc ) class ( nurbs_curve ), intent ( in ) :: this integer , intent ( in ) :: n integer , intent ( in ) :: dir real ( rk ) :: Xc if ( allocated ( this % Xc )) then if ( n < lbound ( this % Xc , 1 ) . or . n > ubound ( this % Xc , 1 )) then error stop 'Invalid index for control points.' end if if ( dir < lbound ( this % Xc , 2 ) . or . dir > ubound ( this % Xc , 2 )) then error stop 'Invalid index for control points.' end if Xc = this % Xc ( n , dir ) else error stop 'Control points are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xg_all ( 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_Xgi ( this , n ) result ( Xg ) class ( nurbs_curve ), intent ( in ) :: this integer , intent ( in ) :: n real ( rk ), allocatable :: Xg (:) if ( allocated ( this % Xg )) then if ( n < lbound ( this % Xg , 1 ) . or . n > ubound ( this % Xg , 1 )) then error stop 'Invalid index for geometry points.' end if Xg = this % Xg ( n ,:) else error stop 'Control points are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xgid ( this , n , dir ) result ( Xg ) class ( nurbs_curve ), intent ( in ) :: this integer , intent ( in ) :: n integer , intent ( in ) :: dir real ( rk ) :: Xg if ( allocated ( this % Xg )) then if ( n < lbound ( this % Xg , 1 ) . or . n > ubound ( this % Xg , 1 )) then error stop 'Invalid index for geometry points.' end if if ( dir < lbound ( this % Xg , 2 ) . or . dir > ubound ( this % Xg , 2 )) then error stop 'Invalid index for geometry points.' end if Xg = this % Xg ( n , dir ) else error stop 'Control points are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Wc_all ( 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 NURBS curve is not rational or weights are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Wci ( this , n ) result ( Wc ) class ( nurbs_curve ), intent ( in ) :: this integer , intent ( in ) :: n real ( rk ) :: Wc if ( allocated ( this % Wc )) then if ( n < lbound ( this % Wc , 1 ) . or . n > ubound ( this % Wc , 1 )) then error stop 'Invalid index for weights.' end if Wc = this % Wc ( n ) else error stop 'The NURBS curve is not rational or weights 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 subroutine cmp_degree ( this ) class ( nurbs_curve ), intent ( inout ) :: this integer , allocatable :: m (:) m = this % get_multiplicity () this % degree = m ( 1 ) - 1 end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_degree ( this ) result ( degree ) class ( nurbs_curve ), intent ( in ) :: this integer :: degree degree = this % degree end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_knot_all ( 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 function get_knoti ( this , i ) result ( knot ) class ( nurbs_curve ), intent ( in ) :: this integer , intent ( in ) :: i real ( rk ) :: knot if ( allocated ( this % knot )) then if ( i < 1 . or . i > size ( this % knot )) then error stop 'Invalid index for knot vector.' else knot = this % knot ( i ) end if 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 ) if ( allocated ( this % elemConn_Xc_vis )) deallocate ( this % elemConn_Xc_vis ) if ( allocated ( this % elemConn_Xg_vis )) deallocate ( this % elemConn_Xg_vis ) if ( allocated ( this % elemConn )) deallocate ( this % elemConn ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function cmp_elem_Xc_vis ( this , p ) result ( elemConn ) class ( nurbs_curve ), intent ( in ) :: this integer , allocatable :: 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 function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function cmp_elem_Xg_vis ( this , p ) result ( elemConn ) class ( nurbs_curve ), intent ( in ) :: this integer , allocatable :: 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 function !=============================================================================== !=============================================================================== !> 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 , nc , nunit integer , allocatable :: elemConn (:,:) ! check if (. not . allocated ( this % Xc )) then error stop 'Control points are not set.' end if if (. not . allocated ( this % elemConn_Xc_vis )) then elemConn = this % cmp_elem_Xc_vis () else elemConn = this % elemConn_Xc_vis end if nc = size ( this % Xc , 1 ) open ( newunit = nunit , file = filename , action = 'write' ) write ( nunit , '(a)' ) '# vtk DataFile Version 2.0' write ( nunit , '(a)' ) 'Generated by ForCAD' write ( nunit , '(a)' ) 'ASCII' write ( nunit , '(a)' ) 'DATASET UNSTRUCTURED_GRID' write ( nunit , '(a,\" \",g0,\" \",a)' ) 'POINTS' , nc , 'double' if ( size ( this % Xc , 2 ) == 2 ) then write ( nunit , '(g0,\" \",g0,\" \",g0)' ) ( this % Xc ( i , 1 ), this % Xc ( i , 2 ), 0.0_rk , i = 1 , nc ) elseif ( size ( this % Xc , 2 ) == 3 ) then write ( nunit , '(g0,\" \",g0,\" \",g0)' ) ( this % Xc ( i , 1 ), this % Xc ( i , 2 ), this % Xc ( i , 3 ) , i = 1 , nc ) else error stop 'Invalid dimension of the control points.' end if write ( nunit , '(a,\" \",g0,\" \",g0)' ) 'CELLS' , size ( elemConn , 1 ), size ( elemConn , 1 ) * ( size ( elemConn , 2 ) + 1 ) write ( nunit , '(g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0)' )& ( 2 , elemConn ( i , 1 ) - 1 , elemConn ( i , 2 ) - 1 , 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 , ng , nunit integer , allocatable :: elemConn (:,:) ! check if (. not . allocated ( this % Xg )) then error stop 'Geometry points are not set.' end if if (. not . allocated ( this % elemConn_Xg_vis )) then elemConn = this % cmp_elem_Xg_vis () else elemConn = this % elemConn_Xg_vis end if ng = size ( this % Xg , 1 ) open ( newunit = nunit , file = filename , action = 'write' ) write ( nunit , '(a)' ) '# vtk DataFile Version 2.0' write ( nunit , '(a)' ) 'Generated by ForCAD' write ( nunit , '(a)' ) 'ASCII' write ( nunit , '(a)' ) 'DATASET UNSTRUCTURED_GRID' write ( nunit , '(a,\" \",g0,\" \",a)' ) 'POINTS' , ng , 'double' if ( size ( this % Xg , 2 ) == 2 ) then write ( nunit , '(g0,\" \",g0,\" \",g0)' ) ( this % Xg ( i , 1 ), this % Xg ( i , 2 ), 0.0_rk , i = 1 , ng ) elseif ( size ( this % Xg , 2 ) == 3 ) then write ( nunit , '(g0,\" \",g0,\" \",g0)' ) ( this % Xg ( i , 1 ), this % Xg ( i , 2 ), this % Xg ( i , 3 ) , i = 1 , ng ) else error stop 'Invalid dimension of the geometry points.' end if write ( nunit , '(a,\" \",g0,\" \",g0)' ) 'CELLS' , size ( elemConn , 1 ), size ( elemConn , 1 ) * ( size ( elemConn , 2 ) + 1 ) write ( nunit , '(g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0)' )& ( 2 , elemConn ( i , 1 ) - 1 , elemConn ( i , 2 ) - 1 , 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 if ( allocated ( this % Wc )) then call this % set ( knot = this % get_knot (), Xc = this % get_Xc (), Wc = this % get_Wc ()) else call this % set ( knot = this % get_knot (), Xc = this % get_Xc ()) end if 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 if ( allocated ( this % knot )) then call this % set ( knot = this % get_knot (), Xc = this % get_Xc (), Wc = this % get_Wc ()) else call this % set ( Xc = this % get_Xc (), Wc = this % get_Wc ()) end if else error stop 'The NURBS 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 % degree - compute_multiplicity ( this % knot ) end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine cmp_nc ( this ) class ( nurbs_curve ), intent ( inout ) :: this this % nc = sum ( compute_multiplicity ( this % knot )) - this % degree - 1 end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_nc ( this ) result ( nc ) class ( nurbs_curve ), intent ( in ) :: this integer :: nc nc = this % nc end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine insert_knots ( this , Xth , r ) class ( nurbs_curve ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: Xth (:) integer , intent ( in ), contiguous :: r (:) integer :: k , i , s , dim , j , n_new real ( rk ), allocatable :: Xcw (:,:), Xcw_new (:,:), Xc_new (:,:), Wc_new (:), knot_new (:) if ( this % is_rational ()) then ! NURBS do i = 1 , size ( Xth ) k = findspan ( this % nc - 1 , this % degree , Xth ( i ), this % knot ) if ( this % knot ( k + 1 ) == Xth ( i )) then s = compute_multiplicity ( this % knot , Xth ( i )) else s = 0 end if dim = size ( this % Xc , 2 ) allocate ( Xcw ( size ( this % Xc , 1 ), dim + 1 )) do j = 1 , size ( this % Xc , 1 ) Xcw ( j , 1 : dim ) = this % Xc ( j , 1 : dim ) * this % Wc ( j ) end do Xcw (:, dim + 1 ) = this % Wc (:) call insert_knot_A_5_1 (& this % degree ,& this % knot ,& Xcw ,& Xth ( i ),& k ,& s ,& r ( i ),& n_new ,& knot_new ,& Xcw_new ) allocate ( Xc_new ( 1 : n_new + 1 , 1 : dim )) allocate ( Wc_new ( 1 : n_new + 1 )) do j = 1 , n_new + 1 Xc_new ( j , 1 : dim ) = Xcw_new ( j - 1 , 1 : dim ) / Xcw_new ( j - 1 , dim + 1 ) Wc_new ( j ) = Xcw_new ( j - 1 , dim + 1 ) end do call this % set ( knot = knot_new , Xc = Xc_new , Wc = Wc_new ) deallocate ( Xcw , Xcw_new , Xc_new , Wc_new ) end do else ! B-Spline do i = 1 , size ( Xth ) k = findspan ( this % nc - 1 , this % degree , Xth ( i ), this % knot ) if ( this % knot ( k + 1 ) == Xth ( i )) then s = compute_multiplicity ( this % knot , Xth ( i )) else s = 0 end if call insert_knot_A_5_1 (& this % degree ,& this % knot ,& this % Xc ,& Xth ( i ),& k ,& s ,& r ( i ),& n_new ,& knot_new ,& Xc_new ) call this % set ( knot = knot_new , Xc = Xc_new ) end do end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine elevate_degree ( this , t ) class ( nurbs_curve ), intent ( inout ) :: this integer , intent ( in ) :: t real ( rk ), allocatable :: Xcw (:,:), Xcw_new (:,:), knot_new (:), Xc_new (:,:), Wc_new (:) integer :: dim , j , nc_new if ( this % is_rational ()) then ! NURBS dim = size ( this % Xc , 2 ) allocate ( Xcw ( size ( this % Xc , 1 ), dim + 1 )) do j = 1 , size ( this % Xc , 1 ) Xcw ( j , 1 : dim ) = this % Xc ( j , 1 : dim ) * this % Wc ( j ) Xcw ( j , dim + 1 ) = this % Wc ( j ) end do call elevate_degree_A_5_9 ( t , this % knot , this % degree , Xcw , nc_new , knot_new , Xcw_new ) allocate ( Xc_new ( 1 : nc_new , 1 : dim )) allocate ( Wc_new ( 1 : nc_new )) do j = 1 , nc_new Xc_new ( j , 1 : dim ) = Xcw_new ( j , 1 : dim ) / Xcw_new ( j , dim + 1 ) end do Wc_new (:) = Xcw_new (:, dim + 1 ) call this % set ( knot = knot_new , Xc = Xc_new , Wc = Wc_new ) deallocate ( Xcw , Xcw_new , Xc_new , Wc_new ) else ! B-Spline dim = size ( this % Xc , 2 ) call elevate_degree_A_5_9 ( t , this % knot , this % degree , this % Xc , nc_new , knot_new , Xc_new ) call this % set ( knot = knot_new , Xc = Xc_new ) deallocate ( Xc_new ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine derivative_vector ( this , res , Xt , dTgc , Tgc ) class ( nurbs_curve ), intent ( inout ) :: this integer , intent ( in ), optional :: res real ( rk ), intent ( in ), contiguous , optional :: Xt (:) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:) real ( rk ), allocatable , intent ( out ), optional :: Tgc (:,:) integer :: i ! 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 ) if ( this % is_rational ()) then ! NURBS call compute_dTgc ( this % Xt , this % knot , this % degree , this % nc , this % ng , this % Wc , dTgc , Tgc ) else ! B-Spline call compute_dTgc ( this % Xt , this % knot , this % degree , this % nc , this % ng , dTgc , Tgc ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine derivative_scalar ( this , Xt , dTgc , Tgc ) class ( nurbs_curve ), intent ( inout ) :: this real ( rk ), intent ( in ) :: Xt real ( rk ), allocatable , intent ( out ) :: dTgc (:) real ( rk ), allocatable , intent ( out ), optional :: Tgc (:) if ( this % is_rational ()) then ! NURBS call compute_dTgc ( Xt , this % knot , this % degree , this % nc , this % Wc , dTgc , Tgc ) else ! B-Spline call compute_dTgc ( Xt , this % knot , this % degree , this % nc , dTgc , Tgc ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine derivative2_vector ( this , res , Xt , d2Tgc , dTgc , Tgc ) class ( nurbs_curve ), intent ( inout ) :: this integer , intent ( in ), optional :: res real ( rk ), intent ( in ), contiguous , optional :: Xt (:) real ( rk ), allocatable , intent ( out ) :: d2Tgc (:,:) real ( rk ), allocatable , intent ( out ), optional :: dTgc (:,:) real ( rk ), allocatable , intent ( out ), optional :: Tgc (:,:) integer :: i ! 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 ) if ( this % is_rational ()) then ! NURBS call compute_d2Tgc ( this % Xt , this % knot , this % degree , this % nc , this % ng , this % Wc , d2Tgc , dTgc , Tgc ) else ! B-Spline call compute_d2Tgc ( this % Xt , this % knot , this % degree , this % nc , this % ng , d2Tgc , dTgc , Tgc ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine derivative2_scalar ( this , Xt , d2Tgc , dTgc , Tgc ) class ( nurbs_curve ), intent ( inout ) :: this real ( rk ), intent ( in ) :: Xt real ( rk ), allocatable , intent ( out ) :: d2Tgc (:) real ( rk ), allocatable , intent ( out ), optional :: dTgc (:) real ( rk ), allocatable , intent ( out ), optional :: Tgc (:) if ( this % is_rational ()) then ! NURBS call compute_d2Tgc ( Xt , this % knot , this % degree , this % nc , this % Wc , d2Tgc , dTgc , Tgc ) else ! B-Spline call compute_d2Tgc ( Xt , this % knot , this % degree , this % nc , d2Tgc , dTgc , Tgc ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine basis_vector ( this , res , Xt , Tgc ) class ( nurbs_curve ), intent ( inout ) :: this integer , intent ( in ), optional :: res real ( rk ), intent ( in ), contiguous , optional :: Xt (:) real ( rk ), allocatable , intent ( out ) :: Tgc (:,:) integer :: i ! 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 ) if ( this % is_rational ()) then ! NURBS Tgc = compute_Tgc ( this % Xt , this % knot , this % degree , this % nc , this % ng , this % Wc ) else ! B-Spline Tgc = compute_Tgc ( this % Xt , this % knot , this % degree , this % nc , this % ng ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine basis_scalar ( this , Xt , Tgc ) class ( nurbs_curve ), intent ( inout ) :: this real ( rk ), intent ( in ) :: Xt real ( rk ), allocatable , intent ( out ) :: Tgc (:) if ( this % is_rational ()) then ! NURBS Tgc = compute_Tgc ( Xt , this % knot , this % degree , this % nc , this % Wc ) else ! B-Spline Tgc = compute_Tgc ( Xt , this % knot , this % degree , this % nc ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function is_rational ( this ) result ( r ) class ( nurbs_curve ), intent ( in ) :: this logical :: r r = . false . if ( allocated ( this % Wc )) then if ( any ( this % Wc /= this % Wc ( 1 ))) then r = . true . end if end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine set_elem_Xc_vis ( this , elemConn ) class ( nurbs_curve ), intent ( inout ) :: this integer , intent ( in ), contiguous :: elemConn (:,:) if ( allocated ( this % elemConn_Xc_vis )) deallocate ( this % elemConn_Xc_vis ) this % elemConn_Xc_vis = elemConn end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine set_elem_Xg_vis ( this , elemConn ) class ( nurbs_curve ), intent ( inout ) :: this integer , intent ( in ), contiguous :: elemConn (:,:) if ( allocated ( this % elemConn_Xg_vis )) deallocate ( this % elemConn_Xg_vis ) this % elemConn_Xg_vis = elemConn end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine set_elem ( this , elemConn ) class ( nurbs_curve ), intent ( inout ) :: this integer , intent ( in ), contiguous :: elemConn (:,:) if ( allocated ( this % elemConn )) deallocate ( this % elemConn ) this % elemConn = elemConn end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_elem_Xc_vis ( this ) result ( elemConn ) class ( nurbs_curve ), intent ( in ) :: this integer , allocatable :: elemConn (:,:) elemConn = this % elemConn_Xc_vis end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_elem_Xg_vis ( this ) result ( elemConn ) class ( nurbs_curve ), intent ( in ) :: this integer , allocatable :: elemConn (:,:) elemConn = this % elemConn_Xg_vis end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_elem ( this ) result ( elemConn ) class ( nurbs_curve ), intent ( in ) :: this integer , allocatable :: elemConn (:,:) elemConn = this % elemConn end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine remove_knots ( this , Xth , r ) class ( nurbs_curve ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: Xth (:) integer , intent ( in ), contiguous :: r (:) integer :: k , i , s , dim , j , nc_new , t real ( rk ), allocatable :: Xcw (:,:), Xcw_new (:,:), Xc_new (:,:), Wc_new (:), knot_new (:) if ( this % is_rational ()) then ! NURBS do i = 1 , size ( Xth ) k = findspan ( this % nc - 1 , this % degree , Xth ( i ), this % knot ) if ( this % knot ( k + 1 ) == Xth ( i )) then s = compute_multiplicity ( this % knot , Xth ( i )) else s = 0 end if k = k + 1 dim = size ( this % Xc , 2 ) allocate ( Xcw ( size ( this % Xc , 1 ), dim + 1 )) do j = 1 , size ( this % Xc , 1 ) Xcw ( j , 1 : dim ) = this % Xc ( j , 1 : dim ) * this % Wc ( j ) end do Xcw (:, dim + 1 ) = this % Wc (:) call remove_knots_A_5_8 (& this % degree ,& this % knot ,& Xcw ,& Xth ( i ),& k ,& s ,& r ( i ),& t ,& knot_new ,& Xcw_new ) if ( allocated ( Xcw )) deallocate ( Xcw ) if ( t == 0 ) then ! no change else nc_new = size ( Xcw_new , 1 ) allocate ( Xc_new ( nc_new , dim )) allocate ( Wc_new ( nc_new )) do j = 1 , nc_new Xc_new ( j ,:) = Xcw_new ( j , 1 : dim ) / Xcw_new ( j , dim + 1 ) end do Wc_new (:) = Xcw_new (:, dim + 1 ) call this % set ( knot = knot_new , Xc = Xc_new , Wc = Wc_new ) if ( allocated ( Xcw_new )) deallocate ( Xcw_new ) if ( allocated ( Xc_new )) deallocate ( Xc_new ) if ( allocated ( Wc_new )) deallocate ( Wc_new ) end if end do else ! B-Spline do i = 1 , size ( Xth ) k = findspan ( this % nc - 1 , this % degree , Xth ( i ), this % knot ) if ( this % knot ( k + 1 ) == Xth ( i )) then s = compute_multiplicity ( this % knot , Xth ( i )) else s = 0 end if k = k + 1 call remove_knots_A_5_8 (& this % degree ,& this % knot ,& this % Xc ,& Xth ( i ),& k ,& s ,& r ( i ),& t ,& knot_new ,& Xc_new ) if ( t == 0 ) then ! no change else call this % set ( knot = knot_new , Xc = Xc_new ) end if end do end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine set_circle ( this , center , radius ) class ( nurbs_curve ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: center (:) real ( rk ), intent ( in ) :: radius real ( rk ), allocatable :: Xc (:,:), Wc (:), knot (:) integer :: i ! Define control points for circle allocate ( Xc ( 7 , 3 )) Xc ( 1 ,:) = [ 1.0_rk , 0.0_rk , 0.0_rk ] Xc ( 2 ,:) = [ 1.0_rk , sqrt ( 3.0_rk ), 0.0_rk ] Xc ( 3 ,:) = [ - 0.5_rk , sqrt ( 3.0_rk ) / 2.0_rk , 0.0_rk ] Xc ( 4 ,:) = [ - 2.0_rk , 0.0_rk , 0.0_rk ] Xc ( 5 ,:) = [ - 0.5_rk , - sqrt ( 3.0_rk ) / 2.0_rk , 0.0_rk ] Xc ( 6 ,:) = [ 1.0_rk , - sqrt ( 3.0_rk ), 0.0_rk ] Xc ( 7 ,:) = [ 1.0_rk , 0.0_rk , 0.0_rk ] ! Scale and translate the control points do i = 1 , size ( Xc , 1 ) Xc ( i ,:) = center + Xc ( i ,:) * radius end do ! Define weights for the control points Wc = [ 1.0_rk , 0.5_rk , 1.0_rk , 0.5_rk , 1.0_rk , 0.5_rk , 1.0_rk ] ! Define knot vector knot = [ 0.0_rk , 0.0_rk , 0.0_rk , 1.0_rk / 3.0_rk , 1.0_rk / 3.0_rk , 2.0_rk / 3.0_rk , 2.0_rk / 3.0_rk , 1.0_rk , 1.0_rk , 1.0_rk ] ! Set knot vector, control points, and weights call this % set ( knot , Xc , Wc ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine set_C ( this , center , radius ) class ( nurbs_curve ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: center (:) real ( rk ), intent ( in ) :: radius real ( rk ), allocatable :: Xc (:,:), Wc (:), knot (:) integer :: i ! Define control points for C-shape allocate ( Xc ( 5 , 3 )) Xc ( 1 ,:) = [ 1.0_rk , 0.0_rk , 0.0_rk ] Xc ( 2 ,:) = [ 1.0_rk , sqrt ( 3.0_rk ), 0.0_rk ] Xc ( 3 ,:) = [ - 0.5_rk , sqrt ( 3.0_rk ) / 2.0_rk , 0.0_rk ] Xc ( 4 ,:) = [ - 2.0_rk , 0.0_rk , 0.0_rk ] Xc ( 5 ,:) = [ - 0.5_rk , - sqrt ( 3.0_rk ) / 2.0_rk , 0.0_rk ] ! Scale and translate the control points do i = 1 , size ( Xc , 1 ) Xc ( i ,:) = center + Xc ( i ,:) * radius end do ! Define weights for the control points Wc = [ 1.0_rk , 0.5_rk , 1.0_rk , 0.5_rk , 1.0_rk ] ! Define knot vector knot = [ 0.0_rk , 0.0_rk , 0.0_rk , 1.0_rk / 2.0_rk , 1.0_rk / 2.0_rk , 1.0_rk , 1.0_rk , 1.0_rk ] ! Set knot vector, control points, and weights call this % set ( knot , Xc , Wc ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function cmp_elem ( this ) result ( elemConn ) class ( nurbs_curve ), intent ( in ) :: this integer , allocatable :: elemConn (:,:) call elemConn_Cn ( this % nc , this % degree , unique ( this % knot ), this % get_multiplicity (),& elemConn ) end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine rotate_Xc ( this , alpha , beta , theta ) class ( nurbs_curve ), intent ( inout ) :: this real ( rk ), intent ( in ) :: alpha , beta , theta integer :: i do i = 1 , this % nc this % Xc ( i , :) = matmul ( rotation ( alpha , beta , theta ), this % Xc ( i , :)) end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine rotate_Xg ( this , alpha , beta , theta ) class ( nurbs_curve ), intent ( inout ) :: this real ( rk ), intent ( in ) :: alpha , beta , theta integer :: i do i = 1 , this % ng this % Xg ( i , :) = matmul ( rotation ( alpha , beta , theta ), this % Xg ( i , :)) end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine translate_Xc ( this , vec ) class ( nurbs_curve ), intent ( inout ) :: this real ( rk ), intent ( in ) :: vec (:) integer :: i do i = 1 , this % nc this % Xc ( i , :) = this % Xc ( i , :) + vec end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine translate_Xg ( this , vec ) class ( nurbs_curve ), intent ( inout ) :: this real ( rk ), intent ( in ) :: vec (:) integer :: i do i = 1 , this % nc this % Xg ( i , :) = this % Xg ( i , :) + vec end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine show ( this , vtkfile_Xc , vtkfile_Xg ) class ( nurbs_curve ), intent ( inout ) :: this character ( len =* ), intent ( in ) :: vtkfile_Xc , vtkfile_Xg character ( len = 3000 ) :: pyvista_script pyvista_script = & \"import pyvista as pv\" // achar ( 10 ) // & \"pv.global_theme.color = 'white'\" // achar ( 10 ) // & \"Xc = pv.read('\" // trim ( vtkfile_Xc ) // \"')\" // achar ( 10 ) // & \"Xg = pv.read('\" // trim ( vtkfile_Xg ) // \"')\" // achar ( 10 ) // & \"p = pv.Plotter(lighting='light kit')\" // achar ( 10 ) // & \"actor_Xcp = p.add_mesh(\" // achar ( 10 ) // & \" Xc,\" // achar ( 10 ) // & \" style='points',\" // achar ( 10 ) // & \" point_size=10,\" // achar ( 10 ) // & \" color='red',\" // achar ( 10 ) // & \" render_points_as_spheres=True,\" // achar ( 10 ) // & \" opacity=0.5,\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"actor_Xcw = p.add_mesh(\" // achar ( 10 ) // & \" Xc,\" // achar ( 10 ) // & \" show_edges=True,\" // achar ( 10 ) // & \" color='yellow',\" // achar ( 10 ) // & \" line_width=3,\" // achar ( 10 ) // & \" style='wireframe',\" // achar ( 10 ) // & \" opacity=0.2\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"actor_Xg = p.add_mesh(\" // achar ( 10 ) // & \" Xg,\" // achar ( 10 ) // & \" show_edges=False,\" // achar ( 10 ) // & \" color='cyan',\" // achar ( 10 ) // & \" line_width=7,\" // achar ( 10 ) // & \" metallic=0.6,\" // achar ( 10 ) // & \" pbr=True,\" // achar ( 10 ) // & \" split_sharp_edges=True,\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"p.add_axes(interactive=False)\" // achar ( 10 ) // & \"def point_picker_callback(point):\" // achar ( 10 ) // & \" mesh = Xc\" // achar ( 10 ) // & \" point_id = mesh.find_closest_point(point)\" // achar ( 10 ) // & \" point_coords = mesh.points[point_id]\" // achar ( 10 ) // & \" label = f'ID: {point_id + 1}\\n({point_coords[0]:.3f}, {point_coords[1]:.3f}, {point_coords[2]:.3f})'\" // achar ( 10 ) // & \" p.add_point_labels(\" // achar ( 10 ) // & \" [point_coords],\" // achar ( 10 ) // & \" [label],\" // achar ( 10 ) // & \" font_size=14,\" // achar ( 10 ) // & \" text_color='black',\" // achar ( 10 ) // & \" show_points=False,\" // achar ( 10 ) // & \" fill_shape=False,\" // achar ( 10 ) // & \" shape=None,\" // achar ( 10 ) // & \" )\" // achar ( 10 ) // & \"picker = p.enable_point_picking(callback=point_picker_callback, show_message=False)\" // achar ( 10 ) // & \"window_size = p.window_size\" // achar ( 10 ) // & \"y_pos = window_size[1]\" // achar ( 10 ) // & \"def Xcp_toggle_vis(flag):\" // achar ( 10 ) // & \" actor_Xcp.SetVisibility(flag)\" // achar ( 10 ) // & \"def Xcw_toggle_vis(flag):\" // achar ( 10 ) // & \" actor_Xcw.SetVisibility(flag)\" // achar ( 10 ) // & \"def Xg_toggle_vis(flag):\" // achar ( 10 ) // & \" actor_Xg.SetVisibility(flag)\" // achar ( 10 ) // & \"p.add_checkbox_button_widget(\" // achar ( 10 ) // & \" Xcp_toggle_vis,\" // achar ( 10 ) // & \" value=True,\" // achar ( 10 ) // & \" color_on='red',\" // achar ( 10 ) // & \" size=25,\" // achar ( 10 ) // & \" position=(0, y_pos - 1 * 25),\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"p.add_checkbox_button_widget(\" // achar ( 10 ) // & \" Xcw_toggle_vis,\" // achar ( 10 ) // & \" value=True,\" // achar ( 10 ) // & \" color_on='yellow',\" // achar ( 10 ) // & \" size=25,\" // achar ( 10 ) // & \" position=(0, y_pos - 2 * 25),\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"p.add_checkbox_button_widget(\" // achar ( 10 ) // & \" Xg_toggle_vis,\" // achar ( 10 ) // & \" value=True,\" // achar ( 10 ) // & \" color_on='cyan',\" // achar ( 10 ) // & \" size=25,\" // achar ( 10 ) // & \" position=(0, y_pos - 3 * 25),\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"p.add_text(\" // achar ( 10 ) // & \" 'Xc (Points)',\" // achar ( 10 ) // & \" position=(25 + 3, y_pos - 1 * 25),\" // achar ( 10 ) // & \" font_size=8,\" // achar ( 10 ) // & \" color='black',\" // achar ( 10 ) // & \" font='times',\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"p.add_text(\" // achar ( 10 ) // & \" 'Xc (Control geometry)',\" // achar ( 10 ) // & \" position=(25 + 3, y_pos - 2 * 25),\" // achar ( 10 ) // & \" font_size=8,\" // achar ( 10 ) // & \" color='black',\" // achar ( 10 ) // & \" font='times',\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"p.add_text(\" // achar ( 10 ) // & \" 'Xg (Geometry)',\" // achar ( 10 ) // & \" position=(25 + 3, y_pos - 3 * 25),\" // achar ( 10 ) // & \" font_size=8,\" // achar ( 10 ) // & \" color='black',\" // achar ( 10 ) // & \" font='times',\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"p.add_text('ForCAD', position=(0.0, 10.0), font_size=14, color='black', font='times')\" // achar ( 10 ) // & \"p.add_text(\" // achar ( 10 ) // & \" 'https://github.com/gha3mi/forcad',\" // achar ( 10 ) // & \" position=(0.0, 0.0),\" // achar ( 10 ) // & \" font_size=7,\" // achar ( 10 ) // & \" color='blue',\" // achar ( 10 ) // & \" font='times',\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"p.show(title='ForCAD', interactive=True)\" call execute_command_line ( 'python -c \"' // trim ( adjustl ( pyvista_script )) // '\"' ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine set_half_circle ( this , center , radius ) class ( nurbs_curve ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: center (:) real ( rk ), intent ( in ) :: radius real ( rk ), allocatable :: Xc (:,:), Wc (:), knot (:) integer :: i ! Define control points for half circle allocate ( Xc ( 5 , 3 )) Xc ( 1 ,:) = [ 0.5_rk , 0.0_rk , 0.0_rk ] Xc ( 2 ,:) = [ 0.5_rk , 0.5_rk , 0.0_rk ] Xc ( 3 ,:) = [ 0.0_rk , 0.5_rk , 0.0_rk ] Xc ( 4 ,:) = [ - 0.5_rk , 0.5_rk , 0.0_rk ] Xc ( 5 ,:) = [ - 0.5_rk , 0.0_rk , 0.0_rk ] ! Scale and translate the control points do i = 1 , size ( Xc , 1 ) Xc ( i ,:) = center + Xc ( i ,:) * radius end do ! Define weights for the control points Wc = [ 1.0_rk , 1.0_rk / sqrt ( 2.0_rk ), 1.0_rk , 1.0_rk / sqrt ( 2.0_rk ), 1.0_rk ] ! Define knot vector knot = [ 0.0_rk , 0.0_rk , 0.0_rk , 1.0_rk / 2.0_rk , & 1.0_rk / 2.0_rk , 1.0_rk , 1.0_rk , 1.0_rk ] ! Set knot vector, control points, and weights call this % set ( knot , Xc , Wc ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine nearest_point ( this , point_Xg , nearest_Xg , nearest_Xt , id ) class ( nurbs_curve ), intent ( in ) :: this real ( rk ), intent ( in ) :: point_Xg (:) real ( rk ), intent ( out ), allocatable , optional :: nearest_Xg (:) real ( rk ), intent ( out ), optional :: nearest_Xt integer , intent ( out ), optional :: id integer :: id_ real ( rk ), allocatable :: distances (:) allocate ( distances ( this % ng )) distances = nearest_point_help_1d ( this % ng , this % Xg , point_Xg ) id_ = minloc ( distances , dim = 1 ) if ( present ( id )) id = id_ if ( present ( nearest_Xg )) nearest_Xg = this % Xg ( id_ ,:) if ( present ( nearest_Xt )) nearest_Xt = this % Xt ( id_ ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine nearest_point2 ( this , point_Xg , tol , maxit , nearest_Xt , nearest_Xg ) class ( nurbs_curve ), intent ( inout ) :: this real ( rk ), intent ( in ) :: point_Xg (:) real ( rk ), intent ( in ) :: tol integer , intent ( in ) :: maxit real ( rk ), intent ( out ) :: nearest_Xt real ( rk ), allocatable , intent ( out ), optional :: nearest_Xg (:) real ( rk ) :: xk , obj , grad , hess , dk , alphak , tau , beta , lower_bounds , upper_bounds real ( rk ), allocatable :: Xg (:), Tgc (:), dTgc (:), d2Tgc (:), distances (:) integer :: k , l logical :: convergenz type ( nurbs_curve ) :: copy_this k = 0 ! lower and upper bounds lower_bounds = minval ( this % knot ) upper_bounds = maxval ( this % knot ) ! guess initial point copy_this = this call this % create ( 10 ) allocate ( distances ( copy_this % ng )) distances = nearest_point_help_1d ( copy_this % ng , copy_this % Xg , point_Xg ) xk = copy_this % Xt ( minloc ( distances , dim = 1 )) call copy_this % finalize () ! Check if xk is within the knot vector range if ( xk < minval ( this % knot )) then xk = minval ( this % knot ) else if ( xk > maxval ( this % knot )) then xk = maxval ( this % knot ) end if convergenz = . false . allocate ( Xg ( size ( this % Xc , 2 ))) ! allocate(dTgc(size(this%Xc,1))) ! allocate(d2Tgc(size(this%Xc,1))) do while (. not . convergenz . and . k < maxit ) ! objection, gradient and hessian Xg = this % cmp_Xg ( xk ) call this % derivative2 ( Xt = xk , d2Tgc = d2Tgc , dTgc = dTgc , Tgc = Tgc ) ! Tgc is not needed obj = norm2 ( Xg - point_Xg ) + 0.001_rk ! add a small number to avoid division by zero grad = dot_product (( Xg - point_Xg ) / obj , matmul ( dTgc , this % Xc )) hess = dot_product ( matmul ( dTgc , this % Xc ) - ( Xg - point_Xg ) / obj * grad , matmul ( dTgc , this % Xc )) / obj & + dot_product (( Xg - point_Xg ) / obj , matmul ( d2Tgc , this % Xc )) ! debug print '(i3,1x,e20.10,1x,e20.10)' , k , xk , abs ( grad ) if ( abs ( grad ) <= tol ) then convergenz = . true . nearest_Xt = xk if ( present ( nearest_Xg )) nearest_Xg = this % cmp_Xg ( nearest_Xt ) else dk = - grad / hess ! Backtracking-Armijo Line Search alphak = 1.0_rk tau = 0.5_rk ! 0 < tau < 1 beta = 1.0e-4_rk ! 0 < beta < 1 l = 0 do while (. not . norm2 ( this % cmp_Xg ( xk + alphak * dk ) - point_Xg ) <= obj + alphak * beta * grad * dk . and . l < 50 ) alphak = tau * alphak l = l + 1 end do xk = xk + alphak * dk ! Check if xk is within the knot vector range xk = max ( min ( xk , upper_bounds ), lower_bounds ) k = k + 1 end if end do end subroutine !=============================================================================== end module forcad_nurbs_curve !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function compute_Xg_nurbs_1d ( Xt , knot , degree , nc , ng , Xc , Wc ) result ( Xg ) use forcad_utils , only : rk , basis_bspline implicit none real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), intent ( in ), contiguous :: knot (:) integer , intent ( in ) :: degree integer , intent ( in ) :: nc integer , intent ( in ) :: ng real ( rk ), intent ( in ), contiguous :: Xc (:,:) real ( rk ), intent ( in ), contiguous :: Wc (:) real ( rk ), allocatable :: Xg (:,:) real ( rk ), allocatable :: Tgc (:) integer :: i allocate ( Xg ( ng , size ( Xc , 2 ))) allocate ( Tgc ( nc )) !$OMP PARALLEL DO PRIVATE(Tgc) do i = 1 , ng Tgc = basis_bspline ( Xt ( i ), knot , nc , degree ) Tgc = Tgc * ( Wc / ( dot_product ( Tgc , Wc ))) Xg ( i ,:) = matmul ( Tgc , Xc ) end do !$OMP END PARALLEL DO end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function compute_Xg_nurbs_1d_1point ( Xt , knot , degree , nc , Xc , Wc ) result ( Xg ) use forcad_utils , only : rk , basis_bspline implicit none real ( rk ), intent ( in ) :: Xt real ( rk ), intent ( in ), contiguous :: knot (:) integer , intent ( in ) :: degree integer , intent ( in ) :: nc real ( rk ), intent ( in ), contiguous :: Xc (:,:) real ( rk ), intent ( in ), contiguous :: Wc (:) real ( rk ), allocatable :: Xg (:) real ( rk ), allocatable :: Tgc (:) allocate ( Xg ( size ( Xc ))) allocate ( Tgc ( nc )) Tgc = basis_bspline ( Xt , knot , nc , degree ) Tgc = Tgc * ( Wc / ( dot_product ( Tgc , Wc ))) Xg = matmul ( Tgc , Xc ) end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function compute_Xg_bspline_1d ( Xt , knot , degree , nc , ng , Xc ) result ( Xg ) use forcad_utils , only : rk , basis_bspline implicit none real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), intent ( in ), contiguous :: knot (:) integer , intent ( in ) :: degree integer , intent ( in ) :: nc integer , intent ( in ) :: ng real ( rk ), intent ( in ), contiguous :: Xc (:,:) real ( rk ), allocatable :: Xg (:,:) integer :: i allocate ( Xg ( ng , size ( Xc , 2 ))) !$OMP PARALLEL DO do i = 1 , ng Xg ( i ,:) = matmul ( basis_bspline ( Xt ( i ), knot , nc , degree ), Xc ) end do !$OMP END PARALLEL DO end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function compute_Xg_bspline_1d_1point ( Xt , knot , degree , nc , Xc ) result ( Xg ) use forcad_utils , only : rk , basis_bspline implicit none real ( rk ), intent ( in ) :: Xt real ( rk ), intent ( in ), contiguous :: knot (:) integer , intent ( in ) :: degree integer , intent ( in ) :: nc real ( rk ), intent ( in ), contiguous :: Xc (:,:) real ( rk ), allocatable :: Xg (:) allocate ( Xg ( size ( Xc ))) Xg = matmul ( basis_bspline ( Xt , knot , nc , degree ), Xc ) end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine compute_dTgc_nurbs_1d_vector ( Xt , knot , degree , nc , ng , Wc , dTgc , Tgc ) use forcad_utils , only : rk , basis_bspline_der implicit none real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), intent ( in ), contiguous :: knot (:) integer , intent ( in ) :: degree integer , intent ( in ) :: nc integer , intent ( in ) :: ng real ( rk ), intent ( in ), contiguous :: Wc (:) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: Tgc (:,:) real ( rk ), allocatable :: dBi (:), Bi (:) integer :: i allocate ( dTgc ( ng , nc ), Tgc ( ng , nc ), dBi ( nc ), Bi ( nc )) do i = 1 , size ( Xt ) call basis_bspline_der ( Xt ( i ), knot , nc , degree , dBi , Bi ) Tgc ( i ,:) = Bi * ( Wc / ( dot_product ( Bi , Wc ))) dTgc ( i ,:) = ( dBi * Wc - Tgc ( i ,:) * dot_product ( dBi , Wc ) ) / dot_product ( Bi , Wc ) end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine compute_dTgc_nurbs_1d_scalar ( Xt , knot , degree , nc , Wc , dTgc , Tgc ) use forcad_utils , only : rk , basis_bspline_der implicit none real ( rk ), intent ( in ) :: Xt real ( rk ), intent ( in ), contiguous :: knot (:) integer , intent ( in ) :: degree integer , intent ( in ) :: nc real ( rk ), intent ( in ), contiguous :: Wc (:) real ( rk ), allocatable , intent ( out ) :: dTgc (:) real ( rk ), allocatable , intent ( out ) :: Tgc (:) real ( rk ), allocatable :: dBi (:), Bi (:) allocate ( dTgc ( nc ), Tgc ( nc )) call basis_bspline_der ( Xt , knot , nc , degree , dBi , Bi ) Tgc = Bi * ( Wc / ( dot_product ( Bi , Wc ))) dTgc = ( dBi * Wc - Tgc * dot_product ( dBi , Wc ) ) / dot_product ( Bi , Wc ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine compute_dTgc_bspline_1d_vector ( Xt , knot , degree , nc , ng , dTgc , Tgc ) use forcad_utils , only : rk , basis_bspline_der implicit none real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), intent ( in ), contiguous :: knot (:) integer , intent ( in ) :: degree integer , intent ( in ) :: nc integer , intent ( in ) :: ng real ( rk ), allocatable , intent ( out ) :: dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: Tgc (:,:) real ( rk ), allocatable :: dBi (:), Bi (:) integer :: i allocate ( dTgc ( ng , nc ), Tgc ( ng , nc ), dBi ( nc ), Bi ( nc )) do i = 1 , size ( Xt ) call basis_bspline_der ( Xt ( i ), knot , nc , degree , dBi , Bi ) Tgc ( i ,:) = Bi dTgc ( i ,:) = dBi end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine compute_dTgc_bspline_1d_scalar ( Xt , knot , degree , nc , dTgc , Tgc ) use forcad_utils , only : rk , basis_bspline_der implicit none real ( rk ), intent ( in ) :: Xt real ( rk ), intent ( in ), contiguous :: knot (:) integer , intent ( in ) :: degree integer , intent ( in ) :: nc real ( rk ), allocatable , intent ( out ) :: dTgc (:) real ( rk ), allocatable , intent ( out ) :: Tgc (:) allocate ( dTgc ( nc ), Tgc ( nc )) call basis_bspline_der ( Xt , knot , nc , degree , dTgc , Tgc ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine compute_d2Tgc_nurbs_1d_vector ( Xt , knot , degree , nc , ng , Wc , d2Tgc , dTgc , Tgc ) use forcad_utils , only : rk , basis_bspline_2der implicit none real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), intent ( in ), contiguous :: knot (:) integer , intent ( in ) :: degree integer , intent ( in ) :: nc integer , intent ( in ) :: ng real ( rk ), intent ( in ), contiguous :: Wc (:) real ( rk ), allocatable , intent ( out ) :: d2Tgc (:,:) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: Tgc (:,:) real ( rk ), allocatable :: d2Bi (:), dBi (:), Tgci (:), dTgci (:), Bi (:) integer :: i allocate ( d2Tgc ( ng , nc ), dTgc ( ng , nc ), Tgc ( ng , nc ), d2Bi ( nc ), dTgci ( nc ), dBi ( nc ), Tgci ( nc ), Bi ( nc )) do i = 1 , size ( Xt ) call basis_bspline_2der ( Xt ( i ), knot , nc , degree , d2Bi , dBi , Bi ) Tgci = Bi * ( Wc / ( dot_product ( Bi , Wc ))) Tgc ( i ,:) = Tgci dTgci = ( dBi * Wc - Tgci * dot_product ( dBi , Wc ) ) / dot_product ( Bi , Wc ) dTgc ( i ,:) = dTgci d2Tgc ( i ,:) = ( d2Bi * Wc - 2.0_rk * dTgci * dot_product ( dBi , Wc ) - Tgci * dot_product ( d2Bi , Wc )) / dot_product ( Bi , Wc ) end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine compute_d2Tgc_nurbs_1d_scalar ( Xt , knot , degree , nc , Wc , d2Tgc , dTgc , Tgc ) use forcad_utils , only : rk , basis_bspline_2der implicit none real ( rk ), intent ( in ) :: Xt real ( rk ), intent ( in ), contiguous :: knot (:) integer , intent ( in ) :: degree integer , intent ( in ) :: nc real ( rk ), intent ( in ), contiguous :: Wc (:) real ( rk ), allocatable , intent ( out ) :: d2Tgc (:) real ( rk ), allocatable , intent ( out ) :: dTgc (:) real ( rk ), allocatable , intent ( out ) :: Tgc (:) real ( rk ), allocatable :: d2Bi (:), dBi (:), Bi (:) allocate ( d2Tgc ( nc ), dTgc ( nc ), Tgc ( nc ), d2Bi ( nc ), dBi ( nc ), Bi ( nc )) call basis_bspline_2der ( Xt , knot , nc , degree , d2Bi , dBi , Bi ) Tgc = Bi * ( Wc / ( dot_product ( Bi , Wc ))) dTgc = ( dBi * Wc - Tgc * dot_product ( dBi , Wc ) ) / dot_product ( Bi , Wc ) d2Tgc = ( d2Bi * Wc - 2.0_rk * dTgc * dot_product ( dBi , Wc ) - Tgc * dot_product ( d2Bi , Wc )) / dot_product ( Bi , Wc ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine compute_d2Tgc_bspline_1d_vector ( Xt , knot , degree , nc , ng , d2Tgc , dTgc , Tgc ) use forcad_utils , only : rk , basis_bspline_2der implicit none real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), intent ( in ), contiguous :: knot (:) integer , intent ( in ) :: degree integer , intent ( in ) :: nc integer , intent ( in ) :: ng real ( rk ), allocatable , intent ( out ) :: d2Tgc (:,:) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: Tgc (:,:) real ( rk ), allocatable :: d2Tgci (:), dTgci (:), Tgci (:) integer :: i allocate ( d2Tgc ( ng , nc ), dTgc ( ng , nc ), Tgc ( ng , nc ), dTgci ( nc ), Tgci ( nc ), d2Tgci ( nc )) do i = 1 , size ( Xt ) call basis_bspline_2der ( Xt ( i ), knot , nc , degree , d2Tgci , dTgci , Tgci ) Tgc ( i ,:) = Tgci dTgc ( i ,:) = dTgci d2Tgc ( i ,:) = d2Tgci end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine compute_d2Tgc_bspline_1d_scalar ( Xt , knot , degree , nc , d2Tgc , dTgc , Tgc ) use forcad_utils , only : rk , basis_bspline_2der implicit none real ( rk ), intent ( in ) :: Xt real ( rk ), intent ( in ), contiguous :: knot (:) integer , intent ( in ) :: degree integer , intent ( in ) :: nc real ( rk ), allocatable , intent ( out ) :: d2Tgc (:) real ( rk ), allocatable , intent ( out ) :: dTgc (:) real ( rk ), allocatable , intent ( out ) :: Tgc (:) allocate ( d2Tgc ( nc ), dTgc ( nc ), Tgc ( nc )) call basis_bspline_2der ( Xt , knot , nc , degree , d2Tgc , dTgc , Tgc ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function compute_Tgc_nurbs_1d_vector ( Xt , knot , degree , nc , ng , Wc ) result ( Tgc ) use forcad_utils , only : rk , basis_bspline implicit none real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), intent ( in ), contiguous :: knot (:) integer , intent ( in ) :: degree integer , intent ( in ) :: nc integer , intent ( in ) :: ng real ( rk ), intent ( in ), contiguous :: Wc (:) real ( rk ), allocatable :: Tgc (:,:) real ( rk ), allocatable :: Tgci (:) integer :: i allocate ( Tgc ( ng , nc ), Tgci ( nc )) !$OMP PARALLEL DO PRIVATE(Tgci) do i = 1 , size ( Xt , 1 ) Tgci = basis_bspline ( Xt ( i ), knot , nc , degree ) Tgc ( i ,:) = Tgci * ( Wc / ( dot_product ( Tgci , Wc ))) end do !$OMP END PARALLEL DO end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function compute_Tgc_nurbs_1d_scalar ( Xt , knot , degree , nc , Wc ) result ( Tgc ) use forcad_utils , only : rk , basis_bspline implicit none real ( rk ), intent ( in ) :: Xt real ( rk ), intent ( in ), contiguous :: knot (:) integer , intent ( in ) :: degree integer , intent ( in ) :: nc real ( rk ), intent ( in ), contiguous :: Wc (:) real ( rk ), allocatable :: Tgc (:) allocate ( Tgc ( nc )) Tgc = basis_bspline ( Xt , knot , nc , degree ) Tgc = Tgc * ( Wc / ( dot_product ( Tgc , Wc ))) end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function compute_Tgc_bspline_1d_vector ( Xt , knot , degree , nc , ng ) result ( Tgc ) use forcad_utils , only : rk , basis_bspline implicit none real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), intent ( in ), contiguous :: knot (:) integer , intent ( in ) :: degree integer , intent ( in ) :: nc integer , intent ( in ) :: ng real ( rk ), allocatable :: Tgc (:,:) integer :: i allocate ( Tgc ( ng , nc )) !$OMP PARALLEL DO do i = 1 , size ( Xt , 1 ) Tgc ( i ,:) = basis_bspline ( Xt ( i ), knot , nc , degree ) end do !$OMP END PARALLEL DO end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function compute_Tgc_bspline_1d_scalar ( Xt , knot , degree , nc ) result ( Tgc ) use forcad_utils , only : rk , basis_bspline implicit none real ( rk ), intent ( in ) :: Xt real ( rk ), intent ( in ), contiguous :: knot (:) integer , intent ( in ) :: degree integer , intent ( in ) :: nc real ( rk ), allocatable :: Tgc (:) allocate ( Tgc ( nc )) Tgc = basis_bspline ( Xt , knot , nc , degree ) end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function nearest_point_help_1d ( ng , Xg , point_Xg ) result ( distances ) use forcad_utils , only : rk implicit none integer , intent ( in ) :: ng real ( rk ), intent ( in ), contiguous :: Xg (:,:) real ( rk ), intent ( in ), contiguous :: point_Xg (:) real ( rk ), allocatable :: distances (:) integer :: i allocate ( distances ( ng )) !$OMP PARALLEL DO do i = 1 , ng distances ( i ) = norm2 ( Xg ( i ,:) - point_Xg ) end do !$OMP END PARALLEL DO end function !===============================================================================","tags":"","loc":"sourcefile/forcad_nurbs_curve.f90.html"},{"title":"shape_hexahedron.f90 – ForCAD","text":"This file depends on sourcefile~~shape_hexahedron.f90~~EfferentGraph sourcefile~shape_hexahedron.f90 shape_hexahedron.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~shape_hexahedron.f90->sourcefile~forcad.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_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 program shape_hexahedron use forcad , only : rk , nurbs_volume implicit none type ( nurbs_volume ) :: shape !> Set up a hexahedron shape with dimensions L = [2.0, 4.0, 8.0] and a specified number of control points nc = [4, 6, 8]. !> The weights of the control points (Wc) are optional. call shape % set_hexahedron ( L = [ 2.0_rk , 4.0_rk , 8.0_rk ], nc = [ 4 , 6 , 8 ]) ! Additional modifications can be made to control points and weights, or the NURBS can be refined using knot insertion or degree elevation. ! call shape%insert_knots(...) ! call shape%elevate_degree(...) ! ... !> Export the control points to a VTK file for visualization. call shape % export_Xc ( 'vtk/shape_hexahedron_Xc.vtk' ) !> Create the shape using the specified number of elements in each direction. call shape % create ( 8 , 16 , 32 ) !> Export the geometry to a VTK file for visualization. call shape % export_Xg ( 'vtk/shape_hexahedron_Xg.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call shape % show ( 'vtk/shape_hexahedron_Xc.vtk' , 'vtk/shape_hexahedron_Xg.vtk' ) !> Finalize and clean up the shape object. call shape % finalize () end program","tags":"","loc":"sourcefile/shape_hexahedron.f90.html"},{"title":"shape_ring_2d.f90 – ForCAD","text":"This file depends on sourcefile~~shape_ring_2d.f90~~EfferentGraph sourcefile~shape_ring_2d.f90 shape_ring_2d.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~shape_ring_2d.f90->sourcefile~forcad.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_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 program shape_ring_2d use forcad , only : rk , nurbs_surface implicit none type ( nurbs_surface ) :: shape !> Set up a ring shape with inner radius 1.0 and outer radius 2.0. call shape % set_ring ([ 0.0_rk , 0.0_rk , 0.0_rk ], 1.0_rk , 2.0_rk ) !> Export the control points to a VTK file for visualization. call shape % export_Xc ( 'vtk/shape_ring_2d_Xc.vtk' ) !> Create the shape using the specified number of elements in each direction. call shape % create ( 60 , 15 ) !> Export the geometry to a VTK file for visualization. call shape % export_Xg ( 'vtk/shape_ring_2d_Xg.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call shape % show ( 'vtk/shape_ring_2d_Xc.vtk' , 'vtk/shape_ring_2d_Xg.vtk' ) !> Finalize and clean up the shape object. call shape % finalize () end program","tags":"","loc":"sourcefile/shape_ring_2d.f90.html"},{"title":"example_ppm2.f90 – ForCAD","text":"This file depends on sourcefile~~example_ppm2.f90~~EfferentGraph sourcefile~example_ppm2.f90 example_ppm2.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~example_ppm2.f90->sourcefile~forcad.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_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 !> Visualization of NURBS surfaces using ForCAD, ForImage and ForColorMap libraries !> This example converts NURBS surfaces (vector) to an image (raster) using ForCAD, ForImage and ForColorMap libraries. program example_ppm2 use forcad , only : rk , nurbs_surface use forimage , only : ik , format_pnm , color use forcolormap , only : colormap use fortime , only : timer implicit none type ( nurbs_surface ) :: shape type ( format_pnm ) :: image type ( color ) :: background_color type ( colormap ) :: cmap integer ( ik ), allocatable :: px (:, :) real ( rk ), allocatable :: Xg (:,:), z_values (:) real ( rk ) :: center ( 3 ), inner_radius , outer_radius , aspect_ratio integer :: height , width , ng ( 2 ), red , green , blue , res1 , res2 , i integer , allocatable :: idx (:,:) type ( timer ) :: t !----------------------------------------------------------------------------- ! Set the image size and calculate the aspect ratio !----------------------------------------------------------------------------- width = 2000 height = 2000 aspect_ratio = real ( width , rk ) / real ( height , rk ) allocate ( px ( height , 3 * width )) !----------------------------------------------------------------------------- ! Set the background color using ForColor class of ForImage !----------------------------------------------------------------------------- call t % timer_start () call background_color % set ( 'white' , use_library = . true .) do i = 1 , width px (:, 3 * ( i - 1 ) + 1 ) = background_color % get_r () px (:, 3 * ( i - 1 ) + 2 ) = background_color % get_g () px (:, 3 * ( i - 1 ) + 3 ) = background_color % get_b () end do call t % timer_stop ( message = 'Setting the background color' ) !----------------------------------------------------------------------------- ! Set a shape object using ForCAD library !----------------------------------------------------------------------------- call t % timer_start () !> Set the shape parameters for a tetragon res1 = 2000 res2 = 2000 call shape % set_tetragon ( L = [ 1.0_rk , 1.0_rk ], nc = [ 2 , 2 ]) call shape % create ( res1 , res2 ) Xg = shape % get_Xg () ng = shape % get_ng () call shape % finalize () call t % timer_stop ( message = 'Creating a tetragon' ) !----------------------------------------------------------------------------- ! Set the z-values of the geometry points !----------------------------------------------------------------------------- ! circular gradient z_values = (( Xg (:, 1 ) - minval ( Xg (:, 1 ))) / ( maxval ( Xg (:, 1 )) - minval ( Xg (:, 1 )))) ** 2 & + (( Xg (:, 2 ) - minval ( Xg (:, 2 ))) / ( maxval ( Xg (:, 2 )) - minval ( Xg (:, 2 ))) ** 2 ) !----------------------------------------------------------------------------- ! Set the colormap using ForColorMap library !----------------------------------------------------------------------------- call cmap % set ( 'buda' , 0.0_rk , 1.0_rk ) !----------------------------------------------------------------------------- ! Set colors to the shape !----------------------------------------------------------------------------- call t % timer_start () Xg (:, 2 ) = Xg (:, 2 ) * aspect_ratio allocate ( idx ( ng ( 1 ) * ng ( 2 ), 2 )) idx (:, 1 ) = min ( max ( 1 , int ( Xg (:, 1 ) * width ) + 1 ), width ) idx (:, 2 ) = min ( max ( 1 , int ( Xg (:, 2 ) * height ) + 1 ), height ) do i = 1 , ng ( 1 ) * ng ( 2 ) call cmap % compute_RGB ( z_values ( i ), red , green , blue ) px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 1 ) = red px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 2 ) = green px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 3 ) = blue end do deallocate ( idx ) call t % timer_stop ( message = 'Setting the colors' ) !----------------------------------------------------------------------------- ! Set a shape object using ForCAD library !----------------------------------------------------------------------------- !> Set the shape parameters for a ring call t % timer_start () center = [ 0.0_rk , 0.0_rk , 0.0_rk ] outer_radius = 0.24_rk * 2.0_rk inner_radius = 0.0_rk * 2.0_rk res1 = 3500 res2 = 1000 center ( 2 ) = center ( 2 ) / aspect_ratio call shape % set_half_ring ( center , inner_radius , outer_radius ) call shape % rotate_Xc ( 0.0_rk , 0.0_rk , 4 5.0_rk ) call shape % translate_Xc ([ 0.25_rk , 0.25_rk , 0.0_rk ]) call shape % create ( res1 , res2 ) Xg = shape % get_Xg () ng = shape % get_ng () call shape % finalize () call t % timer_stop ( message = 'Creating a ring' ) !----------------------------------------------------------------------------- ! Set the z-values of the geometry points !----------------------------------------------------------------------------- ! circular gradient z_values = (( Xg (:, 1 ) - minval ( Xg (:, 1 ))) / ( maxval ( Xg (:, 1 )) - minval ( Xg (:, 1 )))) ** 2 & + (( Xg (:, 2 ) - minval ( Xg (:, 2 ))) / ( maxval ( Xg (:, 2 )) - minval ( Xg (:, 2 ))) ** 2 ) !----------------------------------------------------------------------------- ! Set the colormap using ForColorMap library !----------------------------------------------------------------------------- call cmap % set ( 'managua' , 0.0_rk , 2.2_rk ) !----------------------------------------------------------------------------- ! Set colors to the shape !----------------------------------------------------------------------------- call t % timer_start () Xg (:, 2 ) = Xg (:, 2 ) * aspect_ratio allocate ( idx ( ng ( 1 ) * ng ( 2 ), 2 )) idx (:, 1 ) = min ( max ( 1 , int ( Xg (:, 1 ) * width ) + 1 ), width ) idx (:, 2 ) = min ( max ( 1 , int ( Xg (:, 2 ) * height ) + 1 ), height ) do i = 1 , ng ( 1 ) * ng ( 2 ) call cmap % compute_RGB ( z_values ( i ), red , green , blue ) px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 1 ) = red px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 2 ) = green px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 3 ) = blue end do deallocate ( idx ) call t % timer_stop ( message = 'Setting the colors' ) !----------------------------------------------------------------------------- ! Set a shape object using ForCAD library !----------------------------------------------------------------------------- !> Set the shape parameters for a ring call t % timer_start () center = [ 0.0_rk , 0.0_rk , 0.0_rk ] outer_radius = 0.24_rk * 2.0_rk inner_radius = 0.08_rk * 2.0_rk res1 = 3500 res2 = 1000 center ( 2 ) = center ( 2 ) / aspect_ratio call shape % set_half_ring ( center , inner_radius , outer_radius ) call shape % rotate_Xc ( 0.0_rk , 0.0_rk , - 4 5.0_rk ) call shape % translate_Xc ([ 0.75_rk , 0.25_rk , 0.0_rk ]) call shape % create ( res1 , res2 ) Xg = shape % get_Xg () ng = shape % get_ng () call shape % finalize () call t % timer_stop ( message = 'Creating a ring' ) !----------------------------------------------------------------------------- ! Set the z-values of the geometry points !----------------------------------------------------------------------------- ! linear gradient in the y-direction z_values = ( Xg (:, 2 ) - minval ( Xg (:, 2 ))) / ( maxval ( Xg (:, 2 )) - minval ( Xg (:, 2 ))) !----------------------------------------------------------------------------- ! Set the colormap using ForColorMap library !----------------------------------------------------------------------------- call cmap % set ( 'lipari' , 0.0_rk , 1.0_rk ) !----------------------------------------------------------------------------- ! Set colors to the shape !----------------------------------------------------------------------------- call t % timer_start () Xg (:, 2 ) = Xg (:, 2 ) * aspect_ratio allocate ( idx ( ng ( 1 ) * ng ( 2 ), 2 )) idx (:, 1 ) = min ( max ( 1 , int ( Xg (:, 1 ) * width ) + 1 ), width ) idx (:, 2 ) = min ( max ( 1 , int ( Xg (:, 2 ) * height ) + 1 ), height ) do i = 1 , ng ( 1 ) * ng ( 2 ) call cmap % compute_RGB ( z_values ( i ), red , green , blue ) px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 1 ) = red px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 2 ) = green px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 3 ) = blue end do deallocate ( idx ) call t % timer_stop ( message = 'Setting the colors' ) !----------------------------------------------------------------------------- ! Set a shape object using ForCAD library !----------------------------------------------------------------------------- call t % timer_start () !> Set the shape parameters for a ring center = [ 0.0_rk , 0.0_rk , 0.0_rk ] outer_radius = 0.24_rk * 2.0_rk inner_radius = 0.01_rk * 2.0_rk res1 = 3500 res2 = 1000 center ( 2 ) = center ( 2 ) / aspect_ratio call shape % set_half_ring ( center , inner_radius , outer_radius ) call shape % rotate_Xc ( 0.0_rk , 0.0_rk , - 9 0.0_rk ) call shape % translate_Xc ([ 0.25_rk , 0.75_rk , 0.0_rk ]) call shape % create ( res1 , res2 ) Xg = shape % get_Xg () ng = shape % get_ng () call shape % finalize () call t % timer_stop ( message = 'Creating a ring' ) !----------------------------------------------------------------------------- ! Set the z-values of the geometry points !----------------------------------------------------------------------------- ! linear gradient in the x-direction z_values = ( Xg (:, 1 ) - minval ( Xg (:, 1 ))) / ( maxval ( Xg (:, 1 )) - minval ( Xg (:, 1 ))) !----------------------------------------------------------------------------- ! Set the colormap using ForColorMap library !----------------------------------------------------------------------------- call cmap % set ( 'oslo10' , 0.0_rk , 1.0_rk ) !----------------------------------------------------------------------------- ! Set colors to the shape !----------------------------------------------------------------------------- call t % timer_start () Xg (:, 2 ) = Xg (:, 2 ) * aspect_ratio allocate ( idx ( ng ( 1 ) * ng ( 2 ), 2 )) idx (:, 1 ) = min ( max ( 1 , int ( Xg (:, 1 ) * width ) + 1 ), width ) idx (:, 2 ) = min ( max ( 1 , int ( Xg (:, 2 ) * height ) + 1 ), height ) do i = 1 , ng ( 1 ) * ng ( 2 ) call cmap % compute_RGB ( z_values ( i ), red , green , blue ) px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 1 ) = red px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 2 ) = green px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 3 ) = blue end do deallocate ( idx ) call t % timer_stop ( message = 'Setting the colors' ) !----------------------------------------------------------------------------- ! Set a shape object using ForCAD library !----------------------------------------------------------------------------- call t % timer_start () !> Set the shape parameters for a ring center = [ 0.0_rk , 0.0_rk , 0.0_rk ] outer_radius = 0.24_rk * 2.0_rk inner_radius = 0.22_rk * 2.0_rk res1 = 3500 res2 = 1000 center ( 2 ) = center ( 2 ) / aspect_ratio call shape % set_half_ring ( center , inner_radius , outer_radius ) call shape % rotate_Xc ( 0.0_rk , 0.0_rk , 0.0_rk ) call shape % translate_Xc ([ 0.75_rk , 0.75_rk , 0.0_rk ]) call shape % create ( res1 , res2 ) Xg = shape % get_Xg () ng = shape % get_ng () call shape % finalize () call t % timer_stop ( message = 'Creating a ring' ) !----------------------------------------------------------------------------- ! Set the z-values of the geometry points !----------------------------------------------------------------------------- ! linear gradient in the x-direction z_values = ( Xg (:, 1 ) - minval ( Xg (:, 1 ))) / ( maxval ( Xg (:, 1 )) - minval ( Xg (:, 1 ))) !----------------------------------------------------------------------------- ! Set the colormap using ForColorMap library !----------------------------------------------------------------------------- red = 255 green = 215 blue = 0 !----------------------------------------------------------------------------- ! Set colors to the shape !----------------------------------------------------------------------------- call t % timer_start () Xg (:, 2 ) = Xg (:, 2 ) * aspect_ratio allocate ( idx ( ng ( 1 ) * ng ( 2 ), 2 )) idx (:, 1 ) = min ( max ( 1 , int ( Xg (:, 1 ) * width ) + 1 ), width ) idx (:, 2 ) = min ( max ( 1 , int ( Xg (:, 2 ) * height ) + 1 ), height ) do i = 1 , ng ( 1 ) * ng ( 2 ) px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 1 ) = red px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 2 ) = green px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 3 ) = blue end do deallocate ( idx ) call t % timer_stop ( message = 'Setting the colors' ) !----------------------------------------------------------------------------- ! Save the image to a PPM file using ForImage library !----------------------------------------------------------------------------- call t % timer_start () call image % set_pnm (& encoding = 'binary' , & file_format = 'ppm' , & width = width , & height = height , & max_color = 255 , & comment = 'example: ForCAD + ForImage + ForColor + ForColormap' , & pixels = px & ) call image % export_pnm ( 'ppm/example_ppm2' ) call image % finalize () call t % timer_stop ( message = 'Saving the image' ) ! Clean up call cmap % finalize () deallocate ( px , Xg , z_values ) end program","tags":"","loc":"sourcefile/example_ppm2.f90.html"},{"title":"shape_half_ring_3d.f90 – ForCAD","text":"This file depends on sourcefile~~shape_half_ring_3d.f90~~EfferentGraph sourcefile~shape_half_ring_3d.f90 shape_half_ring_3d.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~shape_half_ring_3d.f90->sourcefile~forcad.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_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 program shape_half_ring_3d use forcad , only : rk , nurbs_volume implicit none type ( nurbs_volume ) :: shape !> Set up a half ring centered at 0,0,0 with inner radius 1, outer radius 2, and length 1. call shape % set_half_ring ([ 0.0_rk , 0.0_rk , 0.0_rk ], 1.0_rk , 2.0_rk , 1.0_rk ) !> Export the control points to a VTK file for visualization. call shape % export_Xc ( 'vtk/shape_half_ring_3d_Xc.vtk' ) !> Create the shape using the specified number of elements in each direction. call shape % create ( 60 , 15 , 10 ) !> Export the geometry to a VTK file for visualization. call shape % export_Xg ( 'vtk/shape_half_ring_3d_Xg.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call shape % show ( 'vtk/shape_half_ring_3d_Xc.vtk' , 'vtk/shape_half_ring_3d_Xg.vtk' ) !> Finalize and clean up the shape object. call shape % finalize () end program","tags":"","loc":"sourcefile/shape_half_ring_3d.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~demo_curve.f90 demo_curve.f90 sourcefile~demo_curve.f90->sourcefile~forcad.f90 sourcefile~demo_surface.f90 demo_surface.f90 sourcefile~demo_surface.f90->sourcefile~forcad.f90 sourcefile~demo_volume.f90 demo_volume.f90 sourcefile~demo_volume.f90->sourcefile~forcad.f90 sourcefile~example_curve_1.f90 example_curve_1.f90 sourcefile~example_curve_1.f90->sourcefile~forcad.f90 sourcefile~example_ppm1.f90 example_ppm1.f90 sourcefile~example_ppm1.f90->sourcefile~forcad.f90 sourcefile~example_ppm2.f90 example_ppm2.f90 sourcefile~example_ppm2.f90->sourcefile~forcad.f90 sourcefile~example_ppm3.f90 example_ppm3.f90 sourcefile~example_ppm3.f90->sourcefile~forcad.f90 sourcefile~example_surface_1.f90 example_surface_1.f90 sourcefile~example_surface_1.f90->sourcefile~forcad.f90 sourcefile~example_volume_1.f90 example_volume_1.f90 sourcefile~example_volume_1.f90->sourcefile~forcad.f90 sourcefile~nearest_point_1d.f90 nearest_point_1d.f90 sourcefile~nearest_point_1d.f90->sourcefile~forcad.f90 sourcefile~nearest_point_2d.f90 nearest_point_2d.f90 sourcefile~nearest_point_2d.f90->sourcefile~forcad.f90 sourcefile~nearest_point_2d_bench.f90 nearest_point_2d_bench.f90 sourcefile~nearest_point_2d_bench.f90->sourcefile~forcad.f90 sourcefile~nearest_point_3d.f90 nearest_point_3d.f90 sourcefile~nearest_point_3d.f90->sourcefile~forcad.f90 sourcefile~put_to_nurbs.f90 put_to_nurbs.f90 sourcefile~put_to_nurbs.f90->sourcefile~forcad.f90 sourcefile~shape_c_1d.f90 shape_C_1d.f90 sourcefile~shape_c_1d.f90->sourcefile~forcad.f90 sourcefile~shape_c_2d.f90 shape_C_2d.f90 sourcefile~shape_c_2d.f90->sourcefile~forcad.f90 sourcefile~shape_c_3d.f90 shape_C_3d.f90 sourcefile~shape_c_3d.f90->sourcefile~forcad.f90 sourcefile~shape_circle.f90 shape_circle.f90 sourcefile~shape_circle.f90->sourcefile~forcad.f90 sourcefile~shape_half_circle.f90 shape_half_circle.f90 sourcefile~shape_half_circle.f90->sourcefile~forcad.f90 sourcefile~shape_half_ring_2d.f90 shape_half_ring_2d.f90 sourcefile~shape_half_ring_2d.f90->sourcefile~forcad.f90 sourcefile~shape_half_ring_3d.f90 shape_half_ring_3d.f90 sourcefile~shape_half_ring_3d.f90->sourcefile~forcad.f90 sourcefile~shape_hexahedron.f90 shape_hexahedron.f90 sourcefile~shape_hexahedron.f90->sourcefile~forcad.f90 sourcefile~shape_ring_2d.f90 shape_ring_2d.f90 sourcefile~shape_ring_2d.f90->sourcefile~forcad.f90 sourcefile~shape_ring_3d.f90 shape_ring_3d.f90 sourcefile~shape_ring_3d.f90->sourcefile~forcad.f90 sourcefile~shape_tetragon.f90 shape_tetragon.f90 sourcefile~shape_tetragon.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 !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> This module defines the 'nurbs_surface' type for representing a Non-Uniform Rational B-Spline (NURBS) surface. module forcad_nurbs_surface use forcad_utils , only : rk , basis_bspline , elemConn_C0 , kron , ndgrid , compute_multiplicity , compute_knot_vector , & basis_bspline_der , insert_knot_A_5_1 , findspan , elevate_degree_A_5_9 , remove_knots_A_5_8 , tetragon_Xc , & elemConn_Cn , unique , rotation implicit none private public nurbs_surface !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause type nurbs_surface real ( rk ), allocatable , private :: Xc (:,:) !! Control points (2D array: [nc(1)*nc(2), dim]) real ( rk ), allocatable , private :: Xg (:,:) !! Geometry points (2D array: [ng(1)*ng(2), dim]) real ( rk ), allocatable , private :: Wc (:) !! Weights for control points (1D array: [nc(1)*nc(2)]) real ( rk ), allocatable , private :: Xt1 (:) !! Evaluation parameter values in the first direction (1D array: [ng(1)]) real ( rk ), allocatable , private :: Xt2 (:) !! Evaluation parameter values in the second direction (1D array: [ng(2)]) real ( rk ), allocatable , private :: Xt (:,:) !! Evaluation parameter values (2D array: [ng(1)*ng(2), 2]) real ( rk ), allocatable , private :: knot1 (:) !! Knot vector in the first direction (1D array) real ( rk ), allocatable , private :: knot2 (:) !! Knot vector in the second direction (1D array) integer , private :: degree ( 2 ) !! Degree (order) of the surface integer , private :: nc ( 2 ) !! Number of control points in each direction integer , private :: ng ( 2 ) !! Number of geometry points in each direction integer , allocatable , private :: elemConn_Xc_vis (:,:) !! Connectivity for visualization of control points integer , allocatable , private :: elemConn_Xg_vis (:,:) !! Connectivity for visualization of geometry points integer , allocatable , private :: elemConn (:,:) !! IGA element connectivity contains procedure :: set1 !!> Set knot vectors, control points and weights for the NURBS surface object procedure :: set2 !!> Set NURBS surface using nodes of parameter space, degree, continuity, control points and weights procedure :: set3 !!> Set Bezier or Rational Bezier surface using control points and weights generic :: set => set1 , set2 , set3 !!> Set NURBS surface procedure :: create !!> Generate geometry points procedure :: cmp_Xg !!> Compute geometry points procedure , private :: get_Xc_all !!> Get all control points procedure , private :: get_Xci !!> Get i-th control point procedure , private :: get_Xcid !!> Get i-th control point in a specific direction generic :: get_Xc => get_Xc_all , get_Xci , get_Xcid !!> Get control points procedure , private :: get_Xg_all !!> Get all geometry points procedure , private :: get_Xgi !!> Get i-th geometry point procedure , private :: get_Xgid !!> Get i-th geometry point in a specific direction generic :: get_Xg => get_Xg_all , get_Xgi , get_Xgid !!> Get geometry points procedure , private :: get_Wc_all !!> Get all weights procedure , private :: get_Wci !!> Get i-th weight generic :: get_Wc => get_Wc_all , get_Wci !!> Get weights procedure :: get_Xt !!> Get parameter values procedure , private :: get_knot_all !!> Get all knot vectors procedure , private :: get_knoti !!> Get i-th knot value generic :: get_knot => get_knoti , get_knot_all !!> Get knot vector procedure :: get_ng !!> Get number of geometry points procedure :: cmp_degree !!> Compute degree of the NURBS surface procedure , private :: get_degree_all !!> Get degree of the NURBS surface in both directions procedure , private :: get_degree_dir !!> Get degree of the NURBS surface in a specific direction generic :: get_degree => get_degree_all , get_degree_dir !!> Get degree of the NURBS surface procedure :: finalize !!> Finalize the NURBS surface object procedure :: cmp_elem_Xc_vis !!> Generate connectivity for control points procedure :: cmp_elem_Xg_vis !!> Generate connectivity for geometry points procedure :: cmp_elem !!> Generate IGA element connectivity procedure :: get_elem_Xc_vis !!> Get connectivity for control points procedure :: get_elem_Xg_vis !!> Get connectivity for geometry points procedure :: get_elem !!> Get IGA element connectivity procedure :: set_elem_Xc_vis !!> Set connectivity for control points procedure :: set_elem_Xg_vis !!> Set connectivity for geometry points procedure :: set_elem !!> Set IGA element connectivity 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 !!> Compute and return the multiplicity of the knot vector procedure :: get_continuity !!> Compute and return the continuity of the NURBS surface procedure :: cmp_nc !!> Compute number of required control points procedure :: get_nc !!> Get number of control points procedure , private :: basis_vector !!> Compute the basis functions of the NURBS surface procedure , private :: basis_scalar !!> Compute the basis functions of the NURBS surface generic :: basis => basis_vector , basis_scalar !!> Compute the basis functions of the NURBS surface procedure , private :: derivative_vector !!> Compute the derivative of the NURBS surface procedure , private :: derivative_scalar !!> Compute the derivative of the NURBS surface generic :: derivative => derivative_vector , derivative_scalar !!> Compute the derivative of the NURBS surface procedure , private :: derivative2_vector !!> Compute the second derivative of the NURBS surface procedure , private :: derivative2_scalar !!> Compute the second derivative of the NURBS surface generic :: derivative2 => derivative2_vector , derivative2_scalar !!> Compute the second derivative of the NURBS surface procedure :: insert_knots !!> Insert knots into the knot vector procedure :: elevate_degree !!> Elevate degree procedure :: is_rational !!> Check if the NURBS surface is rational procedure :: remove_knots !!> Remove knots from the knot vector procedure :: rotate_Xc !!> Rotate control points procedure :: rotate_Xg !!> Rotate geometry points procedure :: translate_Xc !!> Translate control points procedure :: translate_Xg !!> Translate geometry points procedure :: show !!> Show the NURBS object using PyVista procedure :: nearest_point !!> Find the nearest point on the NURBS surface (Approximation) procedure :: nearest_point2 !!> Find the nearest point on the NURBS surface (Minimization - Newton's method) ! Shapes procedure :: set_tetragon !!> Set a tetragon procedure :: set_ring !!> Set a ring procedure :: set_half_ring !!> Set a half ring procedure :: set_C !!> Set a C-shape end type !=============================================================================== interface compute_Xg pure function compute_Xg_nurbs_2d ( f_Xt , f_knot1 , f_knot2 , f_degree , f_nc , f_ng , f_Xc , f_Wc ) result ( f_Xg ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:,:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:) integer , intent ( in ) :: f_degree ( 2 ) integer , intent ( in ) :: f_nc ( 2 ) integer , intent ( in ) :: f_ng ( 2 ) real ( rk ), intent ( in ), contiguous :: f_Xc (:,:) real ( rk ), intent ( in ), contiguous :: f_Wc (:) real ( rk ), allocatable :: f_Xg (:,:) end function pure function compute_Xg_bspline_2d ( f_Xt , f_knot1 , f_knot2 , f_degree , f_nc , f_ng , f_Xc ) result ( f_Xg ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:,:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:) real ( rk ), intent ( in ), contiguous :: f_knot2 (:) integer , intent ( in ) :: f_degree ( 2 ) integer , intent ( in ) :: f_nc ( 2 ) integer , intent ( in ) :: f_ng ( 2 ) real ( rk ), intent ( in ), contiguous :: f_Xc (:,:) real ( rk ), allocatable :: f_Xg (:,:) end function pure function compute_Xg_nurbs_2d_1point ( f_Xt , f_knot1 , f_knot2 , f_degree , f_nc , f_Xc , f_Wc ) result ( f_Xg ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:) integer , intent ( in ) :: f_degree ( 2 ) integer , intent ( in ) :: f_nc ( 2 ) real ( rk ), intent ( in ), contiguous :: f_Xc (:,:) real ( rk ), intent ( in ), contiguous :: f_Wc (:) real ( rk ), allocatable :: f_Xg (:) end function pure function compute_Xg_bspline_2d_1point ( f_Xt , f_knot1 , f_knot2 , f_degree , f_nc , f_Xc ) result ( f_Xg ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:) real ( rk ), intent ( in ), contiguous :: f_knot2 (:) integer , intent ( in ) :: f_degree ( 2 ) integer , intent ( in ) :: f_nc ( 2 ) real ( rk ), intent ( in ), contiguous :: f_Xc (:,:) real ( rk ), allocatable :: f_Xg (:) end function end interface interface compute_dTgc pure subroutine compute_dTgc_nurbs_2d_vector ( f_Xt , f_knot1 , f_knot2 , f_degree , f_nc , f_ng , f_Wc , f_dTgc , f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:,:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:) integer , intent ( in ) :: f_degree ( 2 ) integer , intent ( in ) :: f_nc ( 2 ) integer , intent ( in ) :: f_ng ( 2 ) real ( rk ), intent ( in ), contiguous :: f_Wc (:) real ( rk ), allocatable , intent ( out ) :: f_dTgc (:,:,:) real ( rk ), allocatable , intent ( out ) :: f_Tgc (:,:) end subroutine pure subroutine compute_dTgc_bspline_2d_vector ( f_Xt , f_knot1 , f_knot2 , f_degree , nc , f_ng , f_dTgc , f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:,:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:) integer , intent ( in ) :: f_degree ( 2 ) integer , intent ( in ) :: nc ( 2 ) integer , intent ( in ) :: f_ng ( 2 ) real ( rk ), allocatable , intent ( out ) :: f_dTgc (:,:,:) real ( rk ), allocatable , intent ( out ) :: f_Tgc (:,:) end subroutine pure subroutine compute_dTgc_nurbs_2d_scalar ( f_Xt , f_knot1 , f_knot2 , f_degree , f_nc , f_Wc , f_dTgc , f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:) integer , intent ( in ) :: f_degree ( 2 ) integer , intent ( in ) :: f_nc ( 2 ) real ( rk ), intent ( in ), contiguous :: f_Wc (:) real ( rk ), allocatable , intent ( out ) :: f_dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: f_Tgc (:) end subroutine pure subroutine compute_dTgc_bspline_2d_scalar ( f_Xt , f_knot1 , f_knot2 , f_degree , nc , f_dTgc , f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:) integer , intent ( in ) :: f_degree ( 2 ) integer , intent ( in ) :: nc ( 2 ) real ( rk ), allocatable , intent ( out ) :: f_dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: f_Tgc (:) end subroutine end interface interface compute_d2Tgc pure subroutine compute_d2Tgc_nurbs_2d_vector ( f_Xt , f_knot1 , f_knot2 , f_degree , f_nc , f_ng , f_Wc , f_d2Tgc , f_dTgc , f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:,:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:) integer , intent ( in ) :: f_degree ( 2 ) integer , intent ( in ) :: f_nc ( 2 ) integer , intent ( in ) :: f_ng ( 2 ) real ( rk ), intent ( in ), contiguous :: f_Wc (:) real ( rk ), allocatable , intent ( out ) :: f_d2Tgc (:,:,:) real ( rk ), allocatable , intent ( out ) :: f_dTgc (:,:,:) real ( rk ), allocatable , intent ( out ) :: f_Tgc (:,:) end subroutine pure subroutine compute_d2Tgc_bspline_2d_vector ( f_Xt , f_knot1 , f_knot2 , f_degree , nc , f_ng , f_d2Tgc , f_dTgc , f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:,:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:) integer , intent ( in ) :: f_degree ( 2 ) integer , intent ( in ) :: nc ( 2 ) integer , intent ( in ) :: f_ng ( 2 ) real ( rk ), allocatable , intent ( out ) :: f_d2Tgc (:,:,:) real ( rk ), allocatable , intent ( out ) :: f_dTgc (:,:,:) real ( rk ), allocatable , intent ( out ) :: f_Tgc (:,:) end subroutine pure subroutine compute_d2Tgc_nurbs_2d_scalar ( f_Xt , f_knot1 , f_knot2 , f_degree , f_nc , f_Wc , f_d2Tgc , f_dTgc , f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:) integer , intent ( in ) :: f_degree ( 2 ) integer , intent ( in ) :: f_nc ( 2 ) real ( rk ), intent ( in ), contiguous :: f_Wc (:) real ( rk ), allocatable , intent ( out ) :: f_d2Tgc (:,:) real ( rk ), allocatable , intent ( out ) :: f_dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: f_Tgc (:) end subroutine pure subroutine compute_d2Tgc_bspline_2d_scalar ( f_Xt , f_knot1 , f_knot2 , f_degree , nc , f_d2Tgc , f_dTgc , f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:) integer , intent ( in ) :: f_degree ( 2 ) integer , intent ( in ) :: nc ( 2 ) real ( rk ), allocatable , intent ( out ) :: f_d2Tgc (:,:) real ( rk ), allocatable , intent ( out ) :: f_dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: f_Tgc (:) end subroutine end interface interface compute_Tgc pure function compute_Tgc_nurbs_2d_vector ( f_Xt , f_knot1 , f_knot2 , f_degree , f_nc , f_ng , f_Wc ) result ( f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:,:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:) integer , intent ( in ) :: f_degree ( 2 ) integer , intent ( in ) :: f_nc ( 2 ) integer , intent ( in ) :: f_ng ( 2 ) real ( rk ), intent ( in ), contiguous :: f_Wc (:) real ( rk ), allocatable :: f_Tgc (:,:) end function pure function compute_Tgc_bspline_2d_vector ( f_Xt , f_knot1 , f_knot2 , f_degree , f_nc , f_ng ) result ( f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:,:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:) integer , intent ( in ) :: f_degree ( 2 ) integer , intent ( in ) :: f_nc ( 2 ) integer , intent ( in ) :: f_ng ( 2 ) real ( rk ), allocatable :: f_Tgc (:,:) end function pure function compute_Tgc_nurbs_2d_scalar ( f_Xt , f_knot1 , f_knot2 , f_degree , f_nc , f_Wc ) result ( f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:) integer , intent ( in ) :: f_degree ( 2 ) integer , intent ( in ) :: f_nc ( 2 ) real ( rk ), intent ( in ), contiguous :: f_Wc (:) real ( rk ), allocatable :: f_Tgc (:) end function pure function compute_Tgc_bspline_2d_scalar ( f_Xt , f_knot1 , f_knot2 , f_degree , f_nc ) result ( f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:) integer , intent ( in ) :: f_degree ( 2 ) integer , intent ( in ) :: f_nc ( 2 ) real ( rk ), allocatable :: f_Tgc (:) end function end interface interface pure function nearest_point_help_2d ( f_ng , f_Xg , f_point_Xg ) result ( f_distances ) import :: rk integer , intent ( in ) :: f_ng ( 2 ) real ( rk ), intent ( in ), contiguous :: f_Xg (:,:) real ( rk ), intent ( in ), contiguous :: f_point_Xg (:) real ( rk ), allocatable :: f_distances (:) end function end interface contains !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Set knot vectors, 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 ), contiguous :: knot1 (:) real ( rk ), intent ( in ), contiguous :: knot2 (:) real ( rk ), intent ( in ), contiguous :: Xc (:,:) real ( rk ), intent ( in ), contiguous , optional :: Wc (:) if ( allocated ( this % knot1 )) deallocate ( this % knot1 ) if ( allocated ( this % knot2 )) deallocate ( this % knot2 ) if ( allocated ( this % Xc )) deallocate ( this % Xc ) this % knot1 = knot1 this % knot2 = knot2 call this % cmp_degree () call this % cmp_nc () this % Xc = Xc if ( present ( Wc )) then if ( size ( Wc ) /= this % nc ( 1 ) * this % nc ( 2 )) then error stop 'Number of weights does not match the number of control points.' else if ( allocated ( this % Wc )) deallocate ( this % Wc ) this % Wc = Wc end if end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Set NURBS surface using nodes of parameter space, degree, continuity, control points and weights pure subroutine set2 ( this , Xth_dir1 , Xth_dir2 , degree , continuity1 , continuity2 , Xc , Wc ) class ( nurbs_surface ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: Xth_dir1 (:), Xth_dir2 (:) integer , intent ( in ), contiguous :: degree (:) integer , intent ( in ), contiguous :: continuity1 (:), continuity2 (:) real ( rk ), intent ( in ), contiguous :: Xc (:,:) real ( rk ), intent ( in ), contiguous , optional :: Wc (:) this % knot1 = compute_knot_vector ( Xth_dir1 , degree ( 1 ), continuity1 ) this % knot2 = compute_knot_vector ( Xth_dir2 , degree ( 2 ), continuity2 ) this % degree ( 1 ) = degree ( 1 ) this % degree ( 2 ) = degree ( 2 ) call this % cmp_nc () this % Xc = Xc if ( present ( Wc )) this % Wc = Wc end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Set Bezier or Rational Bezier surface using control points and weights. pure subroutine set3 ( this , nc , Xc , Wc ) class ( nurbs_surface ), intent ( inout ) :: this integer , intent ( in ), contiguous :: nc (:) real ( rk ), intent ( in ), contiguous :: Xc (:,:) real ( rk ), intent ( in ), contiguous , optional :: Wc (:) if ( allocated ( this % Xc )) deallocate ( this % Xc ) this % Xc = Xc this % nc = nc if ( allocated ( this % knot1 )) deallocate ( this % knot1 ) allocate ( this % knot1 ( 2 * this % nc ( 1 ))) this % knot1 ( 1 : this % nc ( 1 )) = 0.0_rk this % knot1 ( this % nc ( 1 ) + 1 : 2 * this % nc ( 1 )) = 1.0_rk if ( allocated ( this % knot2 )) deallocate ( this % knot2 ) allocate ( this % knot2 ( 2 * this % nc ( 2 ))) this % knot2 ( 1 : this % nc ( 2 )) = 0.0_rk this % knot2 ( this % nc ( 2 ) + 1 : 2 * this % nc ( 2 )) = 1.0_rk call this % cmp_degree () if ( present ( Wc )) then if ( size ( Wc ) /= this % nc ( 1 ) * this % nc ( 2 )) then error stop 'Number of weights does not match the number of control points.' else if ( allocated ( this % Wc )) deallocate ( this % Wc ) this % Wc = Wc end if end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine create ( this , res1 , res2 , Xt1 , Xt2 , Xt ) class ( nurbs_surface ), intent ( inout ) :: this integer , intent ( in ), optional :: res1 , res2 real ( rk ), intent ( in ), contiguous , optional :: Xt1 (:), Xt2 (:) real ( rk ), contiguous , intent ( in ), optional :: Xt (:,:) integer :: i ! check if (. not . allocated ( this % Xc )) then error stop 'Control points are not set.' end if if (. not . allocated ( this % knot1 ) . or . . not . allocated ( this % knot2 )) then error stop 'Knot vector(s) is/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 if ( present ( Xt )) then this % Xt = Xt else ! 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 , this % Xt ) end if if ( allocated ( this % Xg )) deallocate ( this % Xg ) if ( this % is_rational ()) then ! NURBS this % Xg = compute_Xg (& this % Xt , this % knot1 , this % knot2 , this % degree , this % nc , this % ng , this % Xc , this % Wc ) else ! B-Spline this % Xg = compute_Xg (& this % Xt , this % knot1 , this % knot2 , this % degree , this % nc , this % ng , this % Xc ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function cmp_Xg ( this , Xt ) result ( Xg ) class ( nurbs_surface ), intent ( in ) :: this real ( rk ), contiguous , intent ( in ) :: Xt (:) real ( rk ), allocatable :: Xg (:) ! check if (. not . allocated ( this % Xc )) then error stop 'Control points are not set.' end if if (. not . allocated ( this % knot1 ) . or . . not . allocated ( this % knot2 )) then error stop 'Knot vector(s) is/are not set.' end if if ( this % is_rational ()) then ! NURBS Xg = compute_Xg ( Xt , this % knot1 , this % knot2 , this % degree , this % nc , this % Xc , this % Wc ) else ! B-Spline Xg = compute_Xg ( Xt , this % knot1 , this % knot2 , this % degree , this % nc , this % Xc ) end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xc_all ( 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_Xci ( this , n ) result ( Xc ) class ( nurbs_surface ), intent ( in ) :: this integer , intent ( in ) :: n real ( rk ), allocatable :: Xc (:) if ( allocated ( this % Xc )) then if ( n < lbound ( this % Xc , 1 ) . or . n > ubound ( this % Xc , 1 )) then error stop 'Invalid index for control points.' end if Xc = this % Xc ( n ,:) else error stop 'Control points are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xcid ( this , n , dir ) result ( Xc ) class ( nurbs_surface ), intent ( in ) :: this integer , intent ( in ) :: n integer , intent ( in ) :: dir real ( rk ) :: Xc if ( allocated ( this % Xc )) then if ( n < lbound ( this % Xc , 1 ) . or . n > ubound ( this % Xc , 1 )) then error stop 'Invalid index for control points.' end if if ( dir < lbound ( this % Xc , 2 ) . or . dir > ubound ( this % Xc , 2 )) then error stop 'Invalid direction for control points.' end if Xc = this % Xc ( n , dir ) else error stop 'Control points are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xg_all ( 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_Xgi ( this , n ) result ( Xg ) class ( nurbs_surface ), intent ( in ) :: this integer , intent ( in ) :: n real ( rk ), allocatable :: Xg (:) if ( allocated ( this % Xg )) then if ( n < lbound ( this % Xg , 1 ) . or . n > ubound ( this % Xg , 1 )) then error stop 'Invalid index for geometry points.' end if Xg = this % Xg ( n ,:) else error stop 'Control points are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xgid ( this , n , dir ) result ( Xg ) class ( nurbs_surface ), intent ( in ) :: this integer , intent ( in ) :: n integer , intent ( in ) :: dir real ( rk ) :: Xg if ( allocated ( this % Xg )) then if ( n < lbound ( this % Xg , 1 ) . or . n > ubound ( this % Xg , 1 )) then error stop 'Invalid index for geometry points.' end if if ( dir < lbound ( this % Xg , 2 ) . or . dir > ubound ( this % Xg , 2 )) then error stop 'Invalid direction for geometry points.' end if Xg = this % Xg ( n , dir ) else error stop 'Control points are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Wc_all ( 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 NURBS surface is not rational or weights are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Wci ( this , n ) result ( Wc ) class ( nurbs_surface ), intent ( in ) :: this integer , intent ( in ) :: n real ( rk ) :: Wc if ( allocated ( this % Wc )) then if ( n < lbound ( this % Wc , 1 ) . or . n > ubound ( this % Wc , 1 )) then error stop 'Invalid index for weights.' end if Wc = this % Wc ( n ) else error stop 'The NURBS surface is not rational or weights are not set.' 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 subroutine cmp_degree ( this , dir ) class ( nurbs_surface ), intent ( inout ) :: this integer , intent ( in ), optional :: dir integer , allocatable :: m1 (:), m2 (:) if ( present ( dir )) then if ( dir == 1 ) then m1 = this % get_multiplicity ( 1 ) this % degree ( 1 ) = m1 ( 1 ) - 1 else if ( dir == 2 ) then m2 = this % get_multiplicity ( 2 ) this % degree ( 2 ) = m2 ( 1 ) - 1 else error stop 'Invalid direction for degree.' end if else m1 = this % get_multiplicity ( 1 ) this % degree ( 1 ) = m1 ( 1 ) - 1 m2 = this % get_multiplicity ( 2 ) this % degree ( 2 ) = m2 ( 1 ) - 1 end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_degree_all ( this ) result ( degree ) class ( nurbs_surface ), intent ( in ) :: this integer :: degree ( 2 ) degree = this % degree end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_degree_dir ( this , dir ) result ( degree ) class ( nurbs_surface ), intent ( in ) :: this integer , intent ( in ) :: dir integer :: degree if ( dir == 1 ) then degree = this % degree ( 1 ) else if ( dir == 2 ) then degree = this % degree ( 2 ) else error stop 'Invalid direction for degree.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_knot_all ( 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 function get_knoti ( this , dir , i ) result ( knot ) class ( nurbs_surface ), intent ( in ) :: this integer , intent ( in ) :: dir integer , intent ( in ) :: i real ( rk ) :: knot if ( dir == 1 ) then if ( allocated ( this % knot1 )) then if ( i < 1 . or . i > size ( this % knot1 )) then error stop 'Invalid index for knot vector.' else knot = this % knot1 ( i ) end if else error stop 'Knot vector is not set.' end if elseif ( dir == 2 ) then if ( allocated ( this % knot2 )) then if ( i < 1 . or . i > size ( this % knot2 )) then error stop 'Invalid index for knot vector.' else knot = this % knot2 ( i ) end if 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 % Xt )) deallocate ( this % Xt ) if ( allocated ( this % knot1 )) deallocate ( this % knot1 ) if ( allocated ( this % knot2 )) deallocate ( this % knot2 ) if ( allocated ( this % elemConn_Xc_vis )) deallocate ( this % elemConn_Xc_vis ) if ( allocated ( this % elemConn_Xg_vis )) deallocate ( this % elemConn_Xg_vis ) if ( allocated ( this % elemConn )) deallocate ( this % elemConn ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function cmp_elem_Xc_vis ( this , p ) result ( elemConn ) class ( nurbs_surface ), intent ( in ) :: this integer , allocatable :: elemConn (:,:) integer , intent ( in ), contiguous , 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 function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function cmp_elem_Xg_vis ( this , p ) result ( elemConn ) class ( nurbs_surface ), intent ( in ) :: this integer , allocatable :: elemConn (:,:) integer , intent ( in ), contiguous , 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 function !=============================================================================== !=============================================================================== !> 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 , nc , nunit integer , allocatable :: elemConn (:,:) ! check if (. not . allocated ( this % Xc )) then error stop 'Control points are not set.' end if if (. not . allocated ( this % elemConn_Xc_vis )) then elemConn = this % cmp_elem_Xc_vis () else elemConn = this % elemConn_Xc_vis end if nc = size ( this % Xc , 1 ) open ( newunit = nunit , file = filename , action = 'write' ) write ( nunit , '(a)' ) '# vtk DataFile Version 2.0' write ( nunit , '(a)' ) 'Generated by ForCAD' write ( nunit , '(a)' ) 'ASCII' write ( nunit , '(a)' ) 'DATASET UNSTRUCTURED_GRID' write ( nunit , '(a,\" \",g0,\" \",a)' ) 'POINTS' , nc , 'double' if ( size ( this % Xc , 2 ) == 2 ) then write ( nunit , '(g0,\" \",g0,\" \",g0)' ) ( this % Xc ( i , 1 ), this % Xc ( i , 2 ), 0.0_rk , i = 1 , nc ) elseif ( size ( this % Xc , 2 ) == 3 ) then write ( nunit , '(g0,\" \",g0,\" \",g0)' ) ( this % Xc ( i , 1 ), this % Xc ( i , 2 ), this % Xc ( i , 3 ) , i = 1 , nc ) else error stop 'Invalid dimension for control points.' end if write ( nunit , '(a,\" \",g0,\" \",g0)' ) 'CELLS' , size ( elemConn , 1 ), size ( elemConn , 1 ) * ( size ( elemConn , 2 ) + 1 ) write ( nunit , '(g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0)' )& ( 4 , elemConn ( i , 1 ) - 1 , elemConn ( i , 2 ) - 1 , elemConn ( i , 4 ) - 1 , elemConn ( i , 3 ) - 1 , 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 , ng , nunit integer , allocatable :: elemConn (:,:) ! check if (. not . allocated ( this % Xg )) then error stop 'Geometry points are not set.' end if if (. not . allocated ( this % elemConn_Xg_vis )) then elemConn = this % cmp_elem_Xg_vis () else elemConn = this % elemConn_Xg_vis end if ng = size ( this % Xg , 1 ) open ( newunit = nunit , file = filename , action = 'write' ) write ( nunit , '(a)' ) '# vtk DataFile Version 2.0' write ( nunit , '(a)' ) 'Generated by ForCAD' write ( nunit , '(a)' ) 'ASCII' write ( nunit , '(a)' ) 'DATASET UNSTRUCTURED_GRID' write ( nunit , '(a,\" \",g0,\" \",a)' ) 'POINTS' , ng , 'double' if ( size ( this % Xg , 2 ) == 2 ) then write ( nunit , '(g0,\" \",g0,\" \",g0)' ) ( this % Xg ( i , 1 ), this % Xg ( i , 2 ), 0.0_rk , i = 1 , ng ) elseif ( size ( this % Xg , 2 ) == 3 ) then write ( nunit , '(g0,\" \",g0,\" \",g0)' ) ( this % Xg ( i , 1 ), this % Xg ( i , 2 ), this % Xg ( i , 3 ) , i = 1 , ng ) else error stop 'Invalid dimension for geometry points.' end if write ( nunit , '(a,\" \",g0,\" \",g0)' ) 'CELLS' , size ( elemConn , 1 ), size ( elemConn , 1 ) * ( size ( elemConn , 2 ) + 1 ) write ( nunit , '(g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0)' )& ( 4 , elemConn ( i , 1 ) - 1 , elemConn ( i , 2 ) - 1 , elemConn ( i , 4 ) - 1 , elemConn ( i , 3 ) - 1 , 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 if ( allocated ( this % Wc )) then call this % set ( knot1 = this % get_knot ( 1 ), knot2 = this % get_knot ( 2 ), Xc = this % get_Xc (), Wc = this % get_Wc ()) else call this % set ( knot1 = this % get_knot ( 1 ), knot2 = this % get_knot ( 2 ), Xc = this % get_Xc ()) end if 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 if ( allocated ( this % knot1 ) . and . allocated ( this % knot2 )) then call this % set ( knot1 = this % get_knot ( 1 ), knot2 = this % get_knot ( 2 ), Xc = this % get_Xc (), Wc = this % get_Wc ()) else call this % set ( nc = this % nc , Xc = this % get_Xc (), Wc = this % get_Wc ()) end if 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 % degree ( 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 % degree ( 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 subroutine cmp_nc ( this , dir ) class ( nurbs_surface ), intent ( inout ) :: this integer , intent ( in ), optional :: dir if ( present ( dir )) then if ( dir == 1 ) then ! check if (. not . allocated ( this % knot1 )) then error stop 'Knot vector is not set.' else this % nc ( 1 ) = sum ( compute_multiplicity ( this % knot1 )) - this % degree ( 1 ) - 1 end if elseif ( dir == 2 ) then ! check if (. not . allocated ( this % knot2 )) then error stop 'Knot vector is not set.' else this % nc ( 2 ) = sum ( compute_multiplicity ( this % knot2 )) - this % degree ( 2 ) - 1 end if else error stop 'Invalid direction.' end if else ! check if (. not . allocated ( this % knot1 )) then error stop 'Knot vector is not set.' else this % nc ( 1 ) = sum ( compute_multiplicity ( this % knot1 )) - this % degree ( 1 ) - 1 end if ! check if (. not . allocated ( this % knot2 )) then error stop 'Knot vector is not set.' else this % nc ( 2 ) = sum ( compute_multiplicity ( this % knot2 )) - this % degree ( 2 ) - 1 end if end if end subroutine !=============================================================================== !=============================================================================== !> 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 % degree ( 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 % degree ( 2 ) - 1 end if else error stop 'Invalid direction.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine derivative_vector ( this , res1 , res2 , Xt1 , Xt2 , dTgc , Tgc ) class ( nurbs_surface ), intent ( inout ) :: this integer , intent ( in ), optional :: res1 , res2 real ( rk ), intent ( in ), contiguous , optional :: Xt1 (:), Xt2 (:) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:,:) real ( rk ), allocatable , intent ( out ), optional :: Tgc (:,:) integer :: i real ( rk ), allocatable :: Xt (:,:) ! 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 ( this % is_rational ()) then ! NURBS call compute_dTgc ( Xt , this % knot1 , this % knot2 , this % degree , this % nc , this % ng , this % Wc , dTgc , Tgc ) else ! B-Spline call compute_dTgc ( Xt , this % knot1 , this % knot2 , this % degree , this % nc , this % ng , dTgc , Tgc ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine derivative_scalar ( this , Xt , dTgc , Tgc ) class ( nurbs_surface ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:) real ( rk ), allocatable , intent ( out ), optional :: Tgc (:) if ( this % is_rational ()) then ! NURBS call compute_dTgc ( Xt , this % knot1 , this % knot2 , this % degree , this % nc , this % Wc , dTgc , Tgc ) else ! B-Spline call compute_dTgc ( Xt , this % knot1 , this % knot2 , this % degree , this % nc , dTgc , Tgc ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine derivative2_vector ( this , res1 , res2 , Xt1 , Xt2 , d2Tgc , dTgc , Tgc ) class ( nurbs_surface ), intent ( inout ) :: this integer , intent ( in ), optional :: res1 , res2 real ( rk ), intent ( in ), contiguous , optional :: Xt1 (:), Xt2 (:) real ( rk ), allocatable , intent ( out ) :: d2Tgc (:,:,:) real ( rk ), allocatable , intent ( out ), optional :: dTgc (:,:,:) real ( rk ), allocatable , intent ( out ), optional :: Tgc (:,:) integer :: i real ( rk ), allocatable :: Xt (:,:) ! 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 ( this % is_rational ()) then ! NURBS call compute_d2Tgc ( Xt , this % knot1 , this % knot2 , this % degree , this % nc , this % ng , this % Wc , d2Tgc , dTgc , Tgc ) else ! B-Spline call compute_d2Tgc ( Xt , this % knot1 , this % knot2 , this % degree , this % nc , this % ng , d2Tgc , dTgc , Tgc ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine derivative2_scalar ( this , Xt , d2Tgc , dTgc , Tgc ) class ( nurbs_surface ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), allocatable , intent ( out ) :: d2Tgc (:,:) real ( rk ), allocatable , intent ( out ), optional :: dTgc (:,:) real ( rk ), allocatable , intent ( out ), optional :: Tgc (:) if ( this % is_rational ()) then ! NURBS call compute_d2Tgc ( Xt , this % knot1 , this % knot2 , this % degree , this % nc , this % Wc , d2Tgc , dTgc , Tgc ) else ! B-Spline call compute_d2Tgc ( Xt , this % knot1 , this % knot2 , this % degree , this % nc , d2Tgc , dTgc , Tgc ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine basis_vector ( this , res1 , res2 , Xt1 , Xt2 , Tgc ) class ( nurbs_surface ), intent ( inout ) :: this integer , intent ( in ), optional :: res1 , res2 real ( rk ), intent ( in ), contiguous , optional :: Xt1 (:), Xt2 (:) real ( rk ), allocatable , intent ( out ) :: Tgc (:,:) integer :: i real ( rk ), allocatable :: Xt (:,:) ! 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 ( this % is_rational ()) then ! NURBS Tgc = compute_Tgc ( Xt , this % knot1 , this % knot2 , this % degree , this % nc , this % ng , this % Wc ) else ! B-Spline Tgc = compute_Tgc ( Xt , this % knot1 , this % knot2 , this % degree , this % nc , this % ng ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine basis_scalar ( this , Xt , Tgc ) class ( nurbs_surface ), intent ( inout ) :: this real ( rk ), intent ( in ) :: Xt (:) real ( rk ), allocatable , intent ( out ) :: Tgc (:) if ( this % is_rational ()) then ! NURBS Tgc = compute_Tgc ( Xt , this % knot1 , this % knot2 , this % degree , this % nc , this % Wc ) else ! B-Spline Tgc = compute_Tgc ( Xt , this % knot1 , this % knot2 , this % degree , this % nc ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine insert_knots ( this , dir , Xth , r ) class ( nurbs_surface ), intent ( inout ) :: this integer , intent ( in ) :: dir real ( rk ), intent ( in ), contiguous :: Xth (:) integer , intent ( in ), contiguous :: r (:) integer :: k , i , s , dim , j , n_new real ( rk ), allocatable :: Xc (:,:), Xcw (:,:), Xcw_new (:,:), Xc_new (:,:), Wc_new (:), knot_new (:) real ( rk ), allocatable :: Xc3 (:,:,:) if ( dir == 1 ) then ! direction 1 if ( this % is_rational ()) then ! NURBS do i = 1 , size ( Xth ) k = findspan ( this % nc ( 1 ) - 1 , this % degree ( 1 ), Xth ( i ), this % knot1 ) if ( this % knot1 ( k + 1 ) == Xth ( i )) then s = compute_multiplicity ( this % knot1 , Xth ( i )) else s = 0 end if dim = size ( this % Xc , 2 ) allocate ( Xcw ( size ( this % Xc , 1 ), dim + 1 )) do j = 1 , size ( this % Xc , 1 ) Xcw ( j , 1 : dim ) = this % Xc ( j , 1 : dim ) * this % Wc ( j ) end do Xcw (:, dim + 1 ) = this % Wc (:) Xcw = reshape ( Xcw ,[ this % nc ( 1 ), this % nc ( 2 ) * ( dim + 1 )]) call insert_knot_A_5_1 (& this % degree ( 1 ),& this % knot1 ,& Xcw ,& Xth ( i ),& k ,& s ,& r ( i ),& n_new ,& knot_new ,& Xcw_new ) Xcw_new = reshape ( Xcw_new ,[ this % nc ( 2 ) * ( n_new + 1 ), dim + 1 ]) allocate ( Xc_new ( 1 : this % nc ( 2 ) * ( n_new + 1 ), 1 : dim )) allocate ( Wc_new ( 1 : this % nc ( 2 ) * ( n_new + 1 ))) do j = 1 , this % nc ( 2 ) * ( n_new + 1 ) Xc_new ( j , 1 : dim ) = Xcw_new ( j , 1 : dim ) / Xcw_new ( j , dim + 1 ) end do Wc_new (:) = Xcw_new (:, dim + 1 ) call this % set ( knot1 = knot_new , knot2 = this % get_knot ( 2 ), Xc = Xc_new , Wc = Wc_new ) deallocate ( Xcw , Xcw_new , Xc_new , Wc_new ) end do else ! B-Spline do i = 1 , size ( Xth ) k = findspan ( this % nc ( 1 ) - 1 , this % degree ( 1 ), Xth ( i ), this % knot1 ) if ( this % knot1 ( k + 1 ) == Xth ( i )) then s = compute_multiplicity ( this % knot1 , Xth ( i )) else s = 0 end if dim = size ( this % Xc , 2 ) Xc = reshape ( this % Xc ,[ this % nc ( 1 ), this % nc ( 2 ) * dim ]) call insert_knot_A_5_1 (& this % degree ( 1 ),& this % knot1 ,& Xc ,& Xth ( i ),& k ,& s ,& r ( i ),& n_new ,& knot_new ,& Xc_new ) Xc_new = reshape ( Xc_new ,[( this % nc ( 2 )) * ( n_new + 1 ), dim ]) call this % set ( knot1 = knot_new , knot2 = this % get_knot ( 2 ), Xc = Xc_new ) end do end if elseif ( dir == 2 ) then ! direction 2 if ( this % is_rational ()) then ! NURBS do i = 1 , size ( Xth ) k = findspan ( this % nc ( 2 ) - 1 , this % degree ( 2 ), Xth ( i ), this % knot2 ) if ( this % knot2 ( k + 1 ) == Xth ( i )) then s = compute_multiplicity ( this % knot2 , Xth ( i )) else s = 0 end if dim = size ( this % Xc , 2 ) allocate ( Xcw ( size ( this % Xc , 1 ), dim + 1 )) do j = 1 , size ( this % Xc , 1 ) Xcw ( j , 1 : dim ) = this % Xc ( j , 1 : dim ) * this % Wc ( j ) end do Xcw (:, dim + 1 ) = this % Wc (:) Xc3 = reshape ( Xcw , [ this % nc ( 1 ), this % nc ( 2 ), dim + 1 ]) Xc3 = reshape ( Xc3 , [ this % nc ( 2 ), this % nc ( 1 ), dim + 1 ], order = [ 2 , 1 , 3 ]) Xcw = reshape ( Xc3 ,[ this % nc ( 2 ), this % nc ( 1 ) * ( dim + 1 )]) call insert_knot_A_5_1 (& this % degree ( 2 ),& this % knot2 ,& Xcw ,& Xth ( i ),& k ,& s ,& r ( i ),& n_new ,& knot_new ,& Xcw_new ) Xc3 = reshape ( Xcw_new , [ n_new + 1 , this % nc ( 1 ), dim + 1 ]) Xc3 = reshape ( Xc3 , [ this % nc ( 1 ), n_new + 1 , dim + 1 ], order = [ 2 , 1 , 3 ]) Xcw_new = reshape ( Xc3 ,[( this % nc ( 1 )) * ( n_new + 1 ), dim + 1 ]) allocate ( Xc_new ( 1 :( n_new + 1 ) * this % nc ( 1 ), 1 : dim )) allocate ( Wc_new ( 1 :( n_new + 1 ) * this % nc ( 1 ))) do j = 1 , ( n_new + 1 ) * this % nc ( 1 ) Xc_new ( j , 1 : dim ) = Xcw_new ( j , 1 : dim ) / Xcw_new ( j , dim + 1 ) end do Wc_new (:) = Xcw_new (:, dim + 1 ) call this % set ( knot1 = this % get_knot ( 1 ), knot2 = knot_new , Xc = Xc_new , Wc = Wc_new ) deallocate ( Xcw , Xcw_new , Xc_new , Wc_new ) end do else ! B-Spline do i = 1 , size ( Xth ) k = findspan ( this % nc ( 2 ) - 1 , this % degree ( 2 ), Xth ( i ), this % knot2 ) if ( this % knot2 ( k + 1 ) == Xth ( i )) then s = compute_multiplicity ( this % knot2 , Xth ( i )) else s = 0 end if dim = size ( this % Xc , 2 ) Xc3 = reshape ( this % Xc , [ this % nc ( 1 ), this % nc ( 2 ), dim ]) Xc3 = reshape ( Xc3 , [ this % nc ( 2 ), this % nc ( 1 ), dim ], order = [ 2 , 1 , 3 ]) Xc = reshape ( Xc3 ,[ this % nc ( 2 ), this % nc ( 1 ) * dim ]) call insert_knot_A_5_1 (& this % degree ( 2 ),& this % knot2 ,& Xc ,& Xth ( i ),& k ,& s ,& r ( i ),& n_new ,& knot_new ,& Xc_new ) Xc3 = reshape ( Xc_new , [ n_new + 1 , this % nc ( 1 ), dim ]) Xc3 = reshape ( Xc3 , [ this % nc ( 1 ), n_new + 1 , dim ], order = [ 2 , 1 , 3 ]) Xc_new = reshape ( Xc3 ,[( this % nc ( 1 )) * ( n_new + 1 ), dim ]) call this % set ( knot1 = this % get_knot ( 1 ), knot2 = knot_new , Xc = Xc_new ) end do end if else error stop 'Invalid direction.' end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine elevate_degree ( this , dir , t ) class ( nurbs_surface ), intent ( inout ) :: this integer , intent ( in ) :: dir integer , intent ( in ) :: t real ( rk ), allocatable :: Xc (:,:), Xcw (:,:), Xcw_new (:,:), knot_new (:), Xc_new (:,:), Wc_new (:) integer :: dim , j , nc_new real ( rk ), allocatable :: Xc3 (:,:,:) if ( dir == 1 ) then ! direction 1 if ( this % is_rational ()) then ! NURBS dim = size ( this % Xc , 2 ) allocate ( Xcw ( size ( this % Xc , 1 ), dim + 1 )) do j = 1 , size ( this % Xc , 1 ) Xcw ( j , 1 : dim ) = this % Xc ( j , 1 : dim ) * this % Wc ( j ) end do Xcw (:, dim + 1 ) = this % Wc (:) Xcw = reshape ( Xcw ,[ this % nc ( 1 ), this % nc ( 2 ) * ( dim + 1 )], order = [ 1 , 2 ]) call elevate_degree_A_5_9 ( t , this % knot1 , this % degree ( 1 ), Xcw , nc_new , knot_new , Xcw_new ) Xcw_new = reshape ( Xcw_new ,[ this % nc ( 2 ) * nc_new , dim + 1 ], order = [ 1 , 2 ]) allocate ( Xc_new ( 1 : this % nc ( 2 ) * nc_new , 1 : dim )) allocate ( Wc_new ( 1 : this % nc ( 2 ) * nc_new )) do j = 1 , this % nc ( 2 ) * nc_new Xc_new ( j , 1 : dim ) = Xcw_new ( j , 1 : dim ) / Xcw_new ( j , dim + 1 ) end do Wc_new (:) = Xcw_new (:, dim + 1 ) call this % set ( knot1 = knot_new , knot2 = this % get_knot ( 2 ), Xc = Xc_new , Wc = Wc_new ) deallocate ( Xcw , Xcw_new , Xc_new , Wc_new ) else ! B-Spline dim = size ( this % Xc , 2 ) Xc = reshape ( this % Xc ,[ this % nc ( 1 ), this % nc ( 2 ) * ( dim )], order = [ 1 , 2 ]) call elevate_degree_A_5_9 ( t , this % knot1 , this % degree ( 1 ), Xc , nc_new , knot_new , Xc_new ) Xc_new = reshape ( Xc_new ,[ this % nc ( 2 ) * nc_new , dim ], order = [ 1 , 2 ]) call this % set ( knot1 = knot_new , knot2 = this % get_knot ( 2 ), Xc = Xc_new ) deallocate ( Xc , Xc_new ) end if elseif ( dir == 2 ) then ! direction 2 if ( this % is_rational ()) then ! NURBS dim = size ( this % Xc , 2 ) allocate ( Xcw ( size ( this % Xc , 1 ), dim + 1 )) do j = 1 , size ( this % Xc , 1 ) Xcw ( j , 1 : dim ) = this % Xc ( j , 1 : dim ) * this % Wc ( j ) end do Xcw (:, dim + 1 ) = this % Wc (:) Xc3 = reshape ( Xcw , [ this % nc ( 1 ), this % nc ( 2 ), dim + 1 ]) Xc3 = reshape ( Xc3 , [ this % nc ( 2 ), this % nc ( 1 ), dim + 1 ], order = [ 2 , 1 , 3 ]) Xcw = reshape ( Xc3 ,[ this % nc ( 2 ), this % nc ( 1 ) * ( dim + 1 )]) call elevate_degree_A_5_9 ( t , this % knot2 , this % degree ( 2 ), Xcw , nc_new , knot_new , Xcw_new ) Xc3 = reshape ( Xcw_new , [ nc_new , this % nc ( 1 ), dim + 1 ]) Xc3 = reshape ( Xc3 , [ this % nc ( 1 ), nc_new , dim + 1 ], order = [ 2 , 1 , 3 ]) Xcw_new = reshape ( Xc3 ,[( this % nc ( 1 )) * nc_new , dim + 1 ]) allocate ( Xc_new ( 1 : nc_new * this % nc ( 1 ), 1 : dim )) allocate ( Wc_new ( 1 : nc_new * this % nc ( 1 ))) do j = 1 , nc_new * this % nc ( 1 ) Xc_new ( j , 1 : dim ) = Xcw_new ( j , 1 : dim ) / Xcw_new ( j , dim + 1 ) end do Wc_new (:) = Xcw_new (:, dim + 1 ) call this % set ( knot1 = this % get_knot ( 1 ), knot2 = knot_new , Xc = Xc_new , Wc = Wc_new ) deallocate ( Xcw , Xcw_new , Xc_new , Wc_new ) else ! B-Spline dim = size ( this % Xc , 2 ) Xc3 = reshape ( this % Xc , [ this % nc ( 1 ), this % nc ( 2 ), dim ]) Xc3 = reshape ( Xc3 , [ this % nc ( 2 ), this % nc ( 1 ), dim ], order = [ 2 , 1 , 3 ]) Xc = reshape ( Xc3 ,[ this % nc ( 2 ), this % nc ( 1 ) * dim ]) call elevate_degree_A_5_9 ( t , this % knot2 , this % degree ( 2 ), Xc , nc_new , knot_new , Xc_new ) Xc3 = reshape ( Xc_new , [ nc_new , this % nc ( 1 ), dim ]) Xc3 = reshape ( Xc3 , [ this % nc ( 1 ), nc_new , dim ], order = [ 2 , 1 , 3 ]) Xc_new = reshape ( Xc3 ,[( this % nc ( 1 )) * nc_new , dim ]) call this % set ( knot1 = this % get_knot ( 1 ), knot2 = knot_new , Xc = Xc_new ) end if else error stop 'Invalid direction.' end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function is_rational ( this ) result ( r ) class ( nurbs_surface ), intent ( in ) :: this logical :: r r = . false . if ( allocated ( this % Wc )) then if ( any ( this % Wc /= this % Wc ( 1 ))) then r = . true . end if end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine set_elem_Xc_vis ( this , elemConn ) class ( nurbs_surface ), intent ( inout ) :: this integer , intent ( in ), contiguous :: elemConn (:,:) if ( allocated ( this % elemConn_Xc_vis )) deallocate ( this % elemConn_Xc_vis ) this % elemConn_Xc_vis = elemConn end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine set_elem_Xg_vis ( this , elemConn ) class ( nurbs_surface ), intent ( inout ) :: this integer , intent ( in ), contiguous :: elemConn (:,:) if ( allocated ( this % elemConn_Xg_vis )) deallocate ( this % elemConn_Xg_vis ) this % elemConn_Xg_vis = elemConn end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine set_elem ( this , elemConn ) class ( nurbs_surface ), intent ( inout ) :: this integer , intent ( in ), contiguous :: elemConn (:,:) if ( allocated ( this % elemConn )) deallocate ( this % elemConn ) this % elemConn = elemConn end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_elem_Xc_vis ( this ) result ( elemConn ) class ( nurbs_surface ), intent ( in ) :: this integer , allocatable :: elemConn (:,:) elemConn = this % elemConn_Xc_vis end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_elem_Xg_vis ( this ) result ( elemConn ) class ( nurbs_surface ), intent ( in ) :: this integer , allocatable :: elemConn (:,:) elemConn = this % elemConn_Xg_vis end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_elem ( this ) result ( elemConn ) class ( nurbs_surface ), intent ( in ) :: this integer , allocatable :: elemConn (:,:) elemConn = this % elemConn end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine remove_knots ( this , dir , Xth , r ) class ( nurbs_surface ), intent ( inout ) :: this integer , intent ( in ) :: dir real ( rk ), intent ( in ), contiguous :: Xth (:) integer , intent ( in ), contiguous :: r (:) integer :: k , i , s , dim , j , nc_new , t real ( rk ), allocatable :: Xc (:,:), Xcw (:,:), Xcw_new (:,:), Xc_new (:,:), Wc_new (:), knot_new (:) real ( rk ), allocatable :: Xc3 (:,:,:) if ( dir == 1 ) then ! direction 1 if ( this % is_rational ()) then ! NURBS do i = 1 , size ( Xth ) k = findspan ( this % nc ( 1 ) - 1 , this % degree ( 1 ), Xth ( i ), this % knot1 ) if ( this % knot1 ( k + 1 ) == Xth ( i )) then s = compute_multiplicity ( this % knot1 , Xth ( i )) else s = 0 end if k = k + 1 dim = size ( this % Xc , 2 ) allocate ( Xcw ( size ( this % Xc , 1 ), dim + 1 )) do j = 1 , size ( this % Xc , 1 ) Xcw ( j , 1 : dim ) = this % Xc ( j , 1 : dim ) * this % Wc ( j ) end do Xcw (:, dim + 1 ) = this % Wc (:) Xcw = reshape ( Xcw ,[ this % nc ( 1 ), this % nc ( 2 ) * ( dim + 1 )], order = [ 1 , 2 ]) call remove_knots_A_5_8 (& this % degree ( 1 ),& this % knot1 ,& Xcw ,& Xth ( i ),& k ,& s ,& r ( i ),& t ,& knot_new ,& Xcw_new ) if ( allocated ( Xcw )) deallocate ( Xcw ) if ( t == 0 ) then ! no change else nc_new = size ( Xcw_new , 1 ) Xcw_new = reshape ( Xcw_new ,[ this % nc ( 2 ) * ( nc_new ), dim + 1 ], order = [ 1 , 2 ]) allocate ( Xc_new ( 1 : this % nc ( 2 ) * ( nc_new ), 1 : dim )) allocate ( Wc_new ( 1 : this % nc ( 2 ) * ( nc_new ))) do j = 1 , this % nc ( 2 ) * ( nc_new ) Xc_new ( j , 1 : dim ) = Xcw_new ( j , 1 : dim ) / Xcw_new ( j , dim + 1 ) end do Wc_new (:) = Xcw_new (:, dim + 1 ) call this % set ( knot1 = knot_new , knot2 = this % get_knot ( 2 ), Xc = Xc_new , Wc = Wc_new ) deallocate ( Xcw_new , Xc_new , Wc_new ) end if end do else ! B-Spline do i = 1 , size ( Xth ) k = findspan ( this % nc ( 1 ) - 1 , this % degree ( 1 ), Xth ( i ), this % knot1 ) if ( this % knot1 ( k + 1 ) == Xth ( i )) then s = compute_multiplicity ( this % knot1 , Xth ( i )) else s = 0 end if k = k + 1 dim = size ( this % Xc , 2 ) Xc = reshape ( this % Xc ,[ this % nc ( 1 ), this % nc ( 2 ) * dim ], order = [ 1 , 2 ]) call remove_knots_A_5_8 (& this % degree ( 1 ),& this % knot1 ,& Xc ,& Xth ( i ),& k ,& s ,& r ( i ),& t ,& knot_new ,& Xc_new ) if ( allocated ( Xc )) deallocate ( Xc ) if ( t == 0 ) then ! no change else nc_new = size ( Xc_new , 1 ) Xc_new = reshape ( Xc_new ,[( this % nc ( 2 )) * ( nc_new ), dim ], order = [ 1 , 2 ]) call this % set ( knot1 = knot_new , knot2 = this % get_knot ( 2 ), Xc = Xc_new ) end if end do end if elseif ( dir == 2 ) then ! direction 2 if ( this % is_rational ()) then ! NURBS do i = 1 , size ( Xth ) k = findspan ( this % nc ( 2 ) - 1 , this % degree ( 2 ), Xth ( i ), this % knot2 ) if ( this % knot2 ( k + 1 ) == Xth ( i )) then s = compute_multiplicity ( this % knot2 , Xth ( i )) else s = 0 end if k = k + 1 dim = size ( this % Xc , 2 ) allocate ( Xcw ( size ( this % Xc , 1 ), dim + 1 )) do j = 1 , size ( this % Xc , 1 ) Xcw ( j , 1 : dim ) = this % Xc ( j , 1 : dim ) * this % Wc ( j ) end do Xcw (:, dim + 1 ) = this % Wc (:) Xc3 = reshape ( Xcw , [ this % nc ( 1 ), this % nc ( 2 ), dim + 1 ]) Xc3 = reshape ( Xc3 , [ this % nc ( 2 ), this % nc ( 1 ), dim + 1 ], order = [ 2 , 1 , 3 ]) Xcw = reshape ( Xc3 , [ this % nc ( 2 ), this % nc ( 1 ) * ( dim + 1 )]) call remove_knots_A_5_8 (& this % degree ( 2 ),& this % knot2 ,& Xcw ,& Xth ( i ),& k ,& s ,& r ( i ),& t ,& knot_new ,& Xcw_new ) if ( allocated ( Xcw )) deallocate ( Xcw ) if ( t == 0 ) then ! no change else nc_new = size ( Xcw_new , 1 ) Xc3 = reshape ( Xcw_new , [ nc_new , this % nc ( 1 ), dim + 1 ]) Xc3 = reshape ( Xc3 , [ this % nc ( 1 ), nc_new , dim + 1 ], order = [ 2 , 1 , 3 ]) Xcw_new = reshape ( Xc3 ,[( this % nc ( 1 )) * ( nc_new ), dim + 1 ]) allocate ( Xc_new ( 1 :( nc_new ) * this % nc ( 1 ), 1 : dim )) allocate ( Wc_new ( 1 :( nc_new ) * this % nc ( 1 ))) do j = 1 , ( nc_new ) * this % nc ( 1 ) Xc_new ( j , 1 : dim ) = Xcw_new ( j , 1 : dim ) / Xcw_new ( j , dim + 1 ) end do Wc_new (:) = Xcw_new (:, dim + 1 ) call this % set ( knot1 = this % get_knot ( 1 ), knot2 = knot_new , Xc = Xc_new , Wc = Wc_new ) deallocate ( Xcw_new , Xc_new , Wc_new ) end if end do else ! B-Spline do i = 1 , size ( Xth ) k = findspan ( this % nc ( 2 ) - 1 , this % degree ( 2 ), Xth ( i ), this % knot2 ) if ( this % knot2 ( k + 1 ) == Xth ( i )) then s = compute_multiplicity ( this % knot2 , Xth ( i )) else s = 0 end if k = k + 1 dim = size ( this % Xc , 2 ) Xc3 = reshape ( this % Xc , [ this % nc ( 1 ), this % nc ( 2 ), dim ]) Xc3 = reshape ( Xc3 , [ this % nc ( 2 ), this % nc ( 1 ), dim ], order = [ 2 , 1 , 3 ]) Xc = reshape ( Xc3 ,[ this % nc ( 2 ), this % nc ( 1 ) * dim ]) call remove_knots_A_5_8 (& this % degree ( 2 ),& this % knot2 ,& Xc ,& Xth ( i ),& k ,& s ,& r ( i ),& t ,& knot_new ,& Xc_new ) if ( allocated ( Xc )) deallocate ( Xc ) if ( t == 0 ) then ! no change else nc_new = size ( Xc_new , 1 ) Xc3 = reshape ( Xc_new , [ nc_new , this % nc ( 1 ), dim ]) Xc3 = reshape ( Xc3 , [ this % nc ( 1 ), nc_new , dim ], order = [ 2 , 1 , 3 ]) Xc_new = reshape ( Xc3 ,[( this % nc ( 1 )) * ( nc_new ), dim ]) call this % set ( knot1 = this % get_knot ( 1 ), knot2 = knot_new , Xc = Xc_new ) end if end do end if else error stop 'Invalid direction.' end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine set_tetragon ( this , L , nc , Wc ) class ( nurbs_surface ), intent ( inout ) :: this real ( rk ), intent ( in ) :: L ( 2 ) integer , intent ( in ) :: nc ( 2 ) real ( rk ), intent ( in ), contiguous , optional :: Wc (:) call this % set ( nc = nc , Xc = tetragon_Xc ( L , nc ), Wc = Wc ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function cmp_elem ( this ) result ( elemConn ) class ( nurbs_surface ), intent ( in ) :: this integer , allocatable :: elemConn (:,:) call elemConn_Cn ( this % nc ( 1 ), this % nc ( 2 ),& this % degree ( 1 ), this % degree ( 2 ),& unique ( this % knot1 ), unique ( this % knot2 ),& this % get_multiplicity ( 1 ), this % get_multiplicity ( 2 ),& elemConn ) end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine rotate_Xc ( this , alpha , beta , theta ) class ( nurbs_surface ), intent ( inout ) :: this real ( rk ), intent ( in ) :: alpha , beta , theta integer :: i do i = 1 , this % nc ( 1 ) * this % nc ( 2 ) this % Xc ( i , :) = matmul ( rotation ( alpha , beta , theta ), this % Xc ( i , :)) end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine rotate_Xg ( this , alpha , beta , theta ) class ( nurbs_surface ), intent ( inout ) :: this real ( rk ), intent ( in ) :: alpha , beta , theta integer :: i do i = 1 , this % ng ( 1 ) * this % ng ( 2 ) this % Xg ( i , :) = matmul ( rotation ( alpha , beta , theta ), this % Xg ( i , :)) end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine translate_Xc ( this , vec ) class ( nurbs_surface ), intent ( inout ) :: this real ( rk ), intent ( in ) :: vec (:) integer :: i do i = 1 , this % nc ( 1 ) * this % nc ( 2 ) this % Xc ( i , :) = this % Xc ( i , :) + vec end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine translate_Xg ( this , vec ) class ( nurbs_surface ), intent ( inout ) :: this real ( rk ), intent ( in ) :: vec (:) integer :: i do i = 1 , this % ng ( 1 ) * this % ng ( 2 ) this % Xg ( i , :) = this % Xg ( i , :) + vec end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine show ( this , vtkfile_Xc , vtkfile_Xg ) class ( nurbs_surface ), intent ( inout ) :: this character ( len =* ), intent ( in ) :: vtkfile_Xc , vtkfile_Xg character ( len = 3000 ) :: pyvista_script pyvista_script = & \"import pyvista as pv\" // achar ( 10 ) // & \"pv.global_theme.color = 'white'\" // achar ( 10 ) // & \"Xc = pv.read('\" // trim ( vtkfile_Xc ) // \"')\" // achar ( 10 ) // & \"Xg = pv.read('\" // trim ( vtkfile_Xg ) // \"')\" // achar ( 10 ) // & \"p = pv.Plotter(lighting='light kit')\" // achar ( 10 ) // & \"actor_Xcp = p.add_mesh(\" // achar ( 10 ) // & \" Xc,\" // achar ( 10 ) // & \" style='points',\" // achar ( 10 ) // & \" point_size=10,\" // achar ( 10 ) // & \" color='red',\" // achar ( 10 ) // & \" render_points_as_spheres=True,\" // achar ( 10 ) // & \" opacity=0.5,\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"actor_Xcw = p.add_mesh(\" // achar ( 10 ) // & \" Xc,\" // achar ( 10 ) // & \" show_edges=True,\" // achar ( 10 ) // & \" color='yellow',\" // achar ( 10 ) // & \" line_width=3,\" // achar ( 10 ) // & \" style='wireframe',\" // achar ( 10 ) // & \" opacity=0.2\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"actor_Xg = p.add_mesh(\" // achar ( 10 ) // & \" Xg,\" // achar ( 10 ) // & \" show_edges=False,\" // achar ( 10 ) // & \" color='cyan',\" // achar ( 10 ) // & \" line_width=7,\" // achar ( 10 ) // & \" metallic=0.6,\" // achar ( 10 ) // & \" pbr=True,\" // achar ( 10 ) // & \" split_sharp_edges=True,\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"p.add_axes(interactive=False)\" // achar ( 10 ) // & \"def point_picker_callback(point):\" // achar ( 10 ) // & \" mesh = Xc\" // achar ( 10 ) // & \" point_id = mesh.find_closest_point(point)\" // achar ( 10 ) // & \" point_coords = mesh.points[point_id]\" // achar ( 10 ) // & \" label = f'ID: {point_id + 1}\\n({point_coords[0]:.3f}, {point_coords[1]:.3f}, {point_coords[2]:.3f})'\" // achar ( 10 ) // & \" p.add_point_labels(\" // achar ( 10 ) // & \" [point_coords],\" // achar ( 10 ) // & \" [label],\" // achar ( 10 ) // & \" font_size=14,\" // achar ( 10 ) // & \" text_color='black',\" // achar ( 10 ) // & \" show_points=False,\" // achar ( 10 ) // & \" fill_shape=False,\" // achar ( 10 ) // & \" shape=None,\" // achar ( 10 ) // & \" )\" // achar ( 10 ) // & \"picker = p.enable_point_picking(callback=point_picker_callback, show_message=False)\" // achar ( 10 ) // & \"window_size = p.window_size\" // achar ( 10 ) // & \"y_pos = window_size[1]\" // achar ( 10 ) // & \"def Xcp_toggle_vis(flag):\" // achar ( 10 ) // & \" actor_Xcp.SetVisibility(flag)\" // achar ( 10 ) // & \"def Xcw_toggle_vis(flag):\" // achar ( 10 ) // & \" actor_Xcw.SetVisibility(flag)\" // achar ( 10 ) // & \"def Xg_toggle_vis(flag):\" // achar ( 10 ) // & \" actor_Xg.SetVisibility(flag)\" // achar ( 10 ) // & \"p.add_checkbox_button_widget(\" // achar ( 10 ) // & \" Xcp_toggle_vis,\" // achar ( 10 ) // & \" value=True,\" // achar ( 10 ) // & \" color_on='red',\" // achar ( 10 ) // & \" size=25,\" // achar ( 10 ) // & \" position=(0, y_pos - 1 * 25),\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"p.add_checkbox_button_widget(\" // achar ( 10 ) // & \" Xcw_toggle_vis,\" // achar ( 10 ) // & \" value=True,\" // achar ( 10 ) // & \" color_on='yellow',\" // achar ( 10 ) // & \" size=25,\" // achar ( 10 ) // & \" position=(0, y_pos - 2 * 25),\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"p.add_checkbox_button_widget(\" // achar ( 10 ) // & \" Xg_toggle_vis,\" // achar ( 10 ) // & \" value=True,\" // achar ( 10 ) // & \" color_on='cyan',\" // achar ( 10 ) // & \" size=25,\" // achar ( 10 ) // & \" position=(0, y_pos - 3 * 25),\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"p.add_text(\" // achar ( 10 ) // & \" 'Xc (Points)',\" // achar ( 10 ) // & \" position=(25 + 3, y_pos - 1 * 25),\" // achar ( 10 ) // & \" font_size=8,\" // achar ( 10 ) // & \" color='black',\" // achar ( 10 ) // & \" font='times',\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"p.add_text(\" // achar ( 10 ) // & \" 'Xc (Control geometry)',\" // achar ( 10 ) // & \" position=(25 + 3, y_pos - 2 * 25),\" // achar ( 10 ) // & \" font_size=8,\" // achar ( 10 ) // & \" color='black',\" // achar ( 10 ) // & \" font='times',\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"p.add_text(\" // achar ( 10 ) // & \" 'Xg (Geometry)',\" // achar ( 10 ) // & \" position=(25 + 3, y_pos - 3 * 25),\" // achar ( 10 ) // & \" font_size=8,\" // achar ( 10 ) // & \" color='black',\" // achar ( 10 ) // & \" font='times',\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"p.add_text('ForCAD', position=(0.0, 10.0), font_size=14, color='black', font='times')\" // achar ( 10 ) // & \"p.add_text(\" // achar ( 10 ) // & \" 'https://github.com/gha3mi/forcad',\" // achar ( 10 ) // & \" position=(0.0, 0.0),\" // achar ( 10 ) // & \" font_size=7,\" // achar ( 10 ) // & \" color='blue',\" // achar ( 10 ) // & \" font='times',\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"p.show(title='ForCAD', interactive=True)\" call execute_command_line ( 'python -c \"' // trim ( adjustl ( pyvista_script )) // '\"' ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine set_ring ( this , center , radius1 , radius2 ) class ( nurbs_surface ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: center (:) real ( rk ), intent ( in ) :: radius1 , radius2 real ( rk ), allocatable :: Xc (:,:), Wc (:), knot1 (:), knot2 (:) integer :: i ! Define control points for ring allocate ( Xc ( 14 , 3 )) Xc ( 1 ,:) = [ 1.0_rk , 0.0_rk , 0.0_rk ] Xc ( 2 ,:) = [ 1.0_rk , sqrt ( 3.0_rk ), 0.0_rk ] Xc ( 3 ,:) = [ - 0.5_rk , sqrt ( 3.0_rk ) / 2.0_rk , 0.0_rk ] Xc ( 4 ,:) = [ - 2.0_rk , 0.0_rk , 0.0_rk ] Xc ( 5 ,:) = [ - 0.5_rk , - sqrt ( 3.0_rk ) / 2.0_rk , 0.0_rk ] Xc ( 6 ,:) = [ 1.0_rk , - sqrt ( 3.0_rk ), 0.0_rk ] Xc ( 7 ,:) = [ 1.0_rk , 0.0_rk , 0.0_rk ] Xc ( 1 : 7 , 1 : 2 ) = Xc ( 1 : 7 , 1 : 2 ) * radius1 Xc ( 8 ,:) = [ 1.0_rk , 0.0_rk , 0.0_rk ] Xc ( 9 ,:) = [ 1.0_rk , sqrt ( 3.0_rk ), 0.0_rk ] Xc ( 10 ,:) = [ - 0.5_rk , sqrt ( 3.0_rk ) / 2.0_rk , 0.0_rk ] Xc ( 11 ,:) = [ - 2.0_rk , 0.0_rk , 0.0_rk ] Xc ( 12 ,:) = [ - 0.5_rk , - sqrt ( 3.0_rk ) / 2.0_rk , 0.0_rk ] Xc ( 13 ,:) = [ 1.0_rk , - sqrt ( 3.0_rk ), 0.0_rk ] Xc ( 14 ,:) = [ 1.0_rk , 0.0_rk , 0.0_rk ] Xc ( 8 : 14 , 1 : 2 ) = Xc ( 8 : 14 , 1 : 2 ) * radius2 ! Translate the control points do i = 1 , size ( Xc , 1 ) Xc ( i ,:) = center + Xc ( i ,:) end do ! Define weights for the control points Wc = [ 1.0_rk , 0.5_rk , 1.0_rk , 0.5_rk , 1.0_rk , 0.5_rk , 1.0_rk ,& 1.0_rk , 0.5_rk , 1.0_rk , 0.5_rk , 1.0_rk , 0.5_rk , 1.0_rk ] ! Define knot vector knot1 = [ 0.0_rk , 0.0_rk , 0.0_rk , 1.0_rk / 3.0_rk , 1.0_rk / 3.0_rk , 2.0_rk / 3.0_rk , 2.0_rk / 3.0_rk , 1.0_rk , 1.0_rk , 1.0_rk ] knot2 = [ 0.0_rk , 0.0_rk , 1.0_rk , 1.0_rk ] ! Set knot vector, control points, and weights call this % set ( knot1 , knot2 , Xc , Wc ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine set_C ( this , center , radius1 , radius2 ) class ( nurbs_surface ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: center (:) real ( rk ), intent ( in ) :: radius1 , radius2 real ( rk ), allocatable :: Xc (:,:), Wc (:), knot1 (:), knot2 (:) integer :: i ! Define control points for C-shape allocate ( Xc ( 10 , 3 )) Xc ( 1 ,:) = [ 1.0_rk , 0.0_rk , 0.0_rk ] Xc ( 2 ,:) = [ 1.0_rk , sqrt ( 3.0_rk ), 0.0_rk ] Xc ( 3 ,:) = [ - 0.5_rk , sqrt ( 3.0_rk ) / 2.0_rk , 0.0_rk ] Xc ( 4 ,:) = [ - 2.0_rk , 0.0_rk , 0.0_rk ] Xc ( 5 ,:) = [ - 0.5_rk , - sqrt ( 3.0_rk ) / 2.0_rk , 0.0_rk ] Xc ( 1 : 5 , 1 : 2 ) = Xc ( 1 : 5 , 1 : 2 ) * radius1 Xc ( 6 ,:) = [ 1.0_rk , 0.0_rk , 0.0_rk ] Xc ( 7 ,:) = [ 1.0_rk , sqrt ( 3.0_rk ), 0.0_rk ] Xc ( 8 ,:) = [ - 0.5_rk , sqrt ( 3.0_rk ) / 2.0_rk , 0.0_rk ] Xc ( 9 ,:) = [ - 2.0_rk , 0.0_rk , 0.0_rk ] Xc ( 10 ,:) = [ - 0.5_rk , - sqrt ( 3.0_rk ) / 2.0_rk , 0.0_rk ] Xc ( 6 : 10 , 1 : 2 ) = Xc ( 6 : 10 , 1 : 2 ) * radius2 ! Translate the control points do i = 1 , size ( Xc , 1 ) Xc ( i ,:) = center + Xc ( i ,:) end do ! Define weights for the control points Wc = [ 1.0_rk , 0.5_rk , 1.0_rk , 0.5_rk , 1.0_rk ,& 1.0_rk , 0.5_rk , 1.0_rk , 0.5_rk , 1.0_rk ] ! Define knot vector knot1 = [ 0.0_rk , 0.0_rk , 0.0_rk , 1.0_rk / 2.0_rk , 1.0_rk / 2.0_rk , 1.0_rk , 1.0_rk , 1.0_rk ] knot2 = [ 0.0_rk , 0.0_rk , 1.0_rk , 1.0_rk ] ! Set knot vector, control points, and weights call this % set ( knot1 , knot2 , Xc , Wc ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine set_half_ring ( this , center , radius1 , radius2 ) class ( nurbs_surface ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: center (:) real ( rk ), intent ( in ) :: radius1 , radius2 real ( rk ), allocatable :: Xc (:,:), Wc (:), knot1 (:), knot2 (:) integer :: i ! Define control points for half ring allocate ( Xc ( 10 , 3 )) Xc ( 1 ,:) = [ 0.5_rk , 0.0_rk , 0.0_rk ] Xc ( 2 ,:) = [ 0.5_rk , 0.5_rk , 0.0_rk ] Xc ( 3 ,:) = [ 0.0_rk , 0.5_rk , 0.0_rk ] Xc ( 4 ,:) = [ - 0.5_rk , 0.5_rk , 0.0_rk ] Xc ( 5 ,:) = [ - 0.5_rk , 0.0_rk , 0.0_rk ] Xc ( 1 : 5 , 1 : 2 ) = Xc ( 1 : 5 , 1 : 2 ) * radius1 Xc ( 6 ,:) = [ 0.5_rk , 0.0_rk , 0.0_rk ] Xc ( 7 ,:) = [ 0.5_rk , 0.5_rk , 0.0_rk ] Xc ( 8 ,:) = [ 0.0_rk , 0.5_rk , 0.0_rk ] Xc ( 9 ,:) = [ - 0.5_rk , 0.5_rk , 0.0_rk ] Xc ( 10 ,:) = [ - 0.5_rk , 0.0_rk , 0.0_rk ] Xc ( 6 : 10 , 1 : 2 ) = Xc ( 6 : 10 , 1 : 2 ) * radius2 ! Translate the control points do i = 1 , size ( Xc , 1 ) Xc ( i ,:) = center + Xc ( i ,:) end do ! Define weights for the control points Wc = [ 1.0_rk , 1.0_rk / sqrt ( 2.0_rk ), 1.0_rk , 1.0_rk / sqrt ( 2.0_rk ), 1.0_rk ,& 1.0_rk , 1.0_rk / sqrt ( 2.0_rk ), 1.0_rk , 1.0_rk / sqrt ( 2.0_rk ), 1.0_rk ] ! Define knot vector knot1 = [ 0.0_rk , 0.0_rk , 0.0_rk , 1.0_rk / 2.0_rk , & 1.0_rk / 2.0_rk , 1.0_rk , 1.0_rk , 1.0_rk ] knot2 = [ 0.0_rk , 0.0_rk , 1.0_rk , 1.0_rk ] ! Set knot vector, control points, and weights call this % set ( knot1 , knot2 , Xc , Wc ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine nearest_point ( this , point_Xg , nearest_Xg , nearest_Xt , id ) class ( nurbs_surface ), intent ( in ) :: this real ( rk ), intent ( in ) :: point_Xg (:) real ( rk ), intent ( out ), allocatable , optional :: nearest_Xg (:) real ( rk ), intent ( out ), allocatable , optional :: nearest_Xt (:) integer , intent ( out ), optional :: id integer :: id_ real ( rk ), allocatable :: distances (:) allocate ( distances ( this % ng ( 1 ) * this % ng ( 2 ))) distances = nearest_point_help_2d ( this % ng , this % Xg , point_Xg ) id_ = minloc ( distances , dim = 1 ) if ( present ( id )) id = id_ if ( present ( nearest_Xg )) nearest_Xg = this % Xg ( id_ ,:) if ( present ( nearest_Xt )) nearest_Xt = this % Xt ( id_ ,:) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine nearest_point2 ( this , point_Xg , tol , maxit , nearest_Xt , nearest_Xg ) class ( nurbs_surface ), intent ( inout ) :: this real ( rk ), intent ( in ) :: point_Xg (:) real ( rk ), intent ( in ) :: tol integer , intent ( in ) :: maxit real ( rk ), intent ( out ) :: nearest_Xt ( 2 ) real ( rk ), allocatable , intent ( out ), optional :: nearest_Xg (:) real ( rk ) :: xk ( 2 ), obj , grad ( 2 ), hess ( 2 , 2 ), dk ( 2 ), alphak , tau , beta , det_inv , Ainv ( 2 , 2 ), lower_bounds ( 2 ), upper_bounds ( 2 ) real ( rk ), allocatable :: Xg (:), Tgc (:), dTgc (:,:), d2Tgc (:,:), distances (:) integer :: k , l logical :: convergenz type ( nurbs_surface ) :: copy_this k = 0 ! lower and upper bounds lower_bounds = [ minval ( this % knot1 ), minval ( this % knot2 )] upper_bounds = [ maxval ( this % knot1 ), maxval ( this % knot2 )] ! guess initial point copy_this = this call this % create ( 10 , 10 ) allocate ( distances ( copy_this % ng ( 1 ) * copy_this % ng ( 2 ))) distances = nearest_point_help_2d ( copy_this % ng , copy_this % Xg , point_Xg ) xk = copy_this % Xt ( minloc ( distances , dim = 1 ),:) call copy_this % finalize () ! Check if xk is within the knot vector range if ( xk ( 1 ) < minval ( this % knot1 )) then xk ( 1 ) = minval ( this % knot1 ) else if ( xk ( 1 ) > maxval ( this % knot1 )) then xk ( 1 ) = maxval ( this % knot1 ) end if if ( xk ( 2 ) < minval ( this % knot2 )) then xk ( 2 ) = minval ( this % knot2 ) else if ( xk ( 2 ) > maxval ( this % knot2 )) then xk ( 2 ) = maxval ( this % knot2 ) end if convergenz = . false . allocate ( Xg ( size ( this % Xc , 2 ))) ! allocate(dTgc(size(this%Xc,1), 2)) ! allocate(d2Tgc(size(this%Xc,1), 2)) do while (. not . convergenz . and . k < maxit ) ! objection, gradient and hessian Xg = this % cmp_Xg ( xk ) call this % derivative2 ( Xt = xk , d2Tgc = d2Tgc , dTgc = dTgc , Tgc = Tgc ) ! Tgc is not needed obj = norm2 ( Xg - point_Xg ) + 0.001_rk ! add a small number to avoid division by zero grad ( 1 ) = dot_product (( Xg - point_Xg ) / obj , matmul ( dTgc (:, 1 ), this % Xc )) grad ( 2 ) = dot_product (( Xg - point_Xg ) / obj , matmul ( dTgc (:, 2 ), this % Xc )) hess ( 1 , 1 ) = ( dot_product ( matmul ( dTgc (:, 1 ), this % Xc ), matmul ( dTgc (:, 1 ), this % Xc )) + & dot_product (( Xg - point_Xg ), matmul ( d2Tgc ( 1 : this % nc ( 1 ) * this % nc ( 2 ) , 1 ), this % Xc )) ) / obj & - ( dot_product ( Xg - point_Xg , matmul ( dTgc (:, 1 ), this % Xc )) * grad ( 1 ) ) / obj ** 2 hess ( 2 , 1 ) = ( dot_product ( matmul ( dTgc (:, 1 ), this % Xc ), matmul ( dTgc (:, 2 ), this % Xc )) + & dot_product (( Xg - point_Xg ), matmul ( d2Tgc ( this % nc ( 1 ) * this % nc ( 2 ) + 1 : 2 * this % nc ( 1 ) * this % nc ( 2 ), 1 ), this % Xc )) ) / obj & - ( dot_product ( Xg - point_Xg , matmul ( dTgc (:, 2 ), this % Xc )) * grad ( 1 ) ) / obj ** 2 hess ( 1 , 2 ) = ( dot_product ( matmul ( dTgc (:, 2 ), this % Xc ), matmul ( dTgc (:, 1 ), this % Xc )) + & dot_product (( Xg - point_Xg ), matmul ( d2Tgc ( 1 : this % nc ( 1 ) * this % nc ( 2 ) , 2 ), this % Xc )) ) / obj & - ( dot_product ( Xg - point_Xg , matmul ( dTgc (:, 1 ), this % Xc )) * grad ( 2 ) ) / obj ** 2 hess ( 2 , 2 ) = ( dot_product ( matmul ( dTgc (:, 2 ), this % Xc ), matmul ( dTgc (:, 2 ), this % Xc )) + & dot_product (( Xg - point_Xg ), matmul ( d2Tgc ( this % nc ( 1 ) * this % nc ( 2 ) + 1 : 2 * this % nc ( 1 ) * this % nc ( 2 ), 2 ), this % Xc )) ) / obj & - ( dot_product ( Xg - point_Xg , matmul ( dTgc (:, 2 ), this % Xc )) * grad ( 2 ) ) / obj ** 2 ! debug print '(i3,1x,2e20.10,1x,e20.10)' , k , xk , norm2 ( grad ) if ( norm2 ( grad ) <= tol ) then convergenz = . true . nearest_Xt = xk if ( present ( nearest_Xg )) nearest_Xg = this % cmp_Xg ( nearest_Xt ) else ! Inverse of Hessian det_inv = 1.0_rk / ( hess ( 1 , 1 ) * hess ( 2 , 2 ) - hess ( 1 , 2 ) * hess ( 2 , 1 )) Ainv ( 1 , 1 ) = hess ( 2 , 2 ) Ainv ( 2 , 1 ) = - hess ( 2 , 1 ) Ainv ( 1 , 2 ) = - hess ( 1 , 2 ) Ainv ( 2 , 2 ) = hess ( 1 , 1 ) Ainv = Ainv * det_inv dk = - matmul ( Ainv , grad ) ! Backtracking-Armijo Line Search alphak = 1.0_rk tau = 0.5_rk ! 0 < tau < 1 beta = 1.0e-4_rk ! 0 < beta < 1 l = 0 do while (. not . norm2 ( this % cmp_Xg ( xk + alphak * dk ) - point_Xg ) <= obj + alphak * beta * dot_product ( grad , dk ) . and . l < 50 ) alphak = tau * alphak l = l + 1 end do xk = xk + alphak * dk ! Check if xk is within the knot vector range xk = max ( min ( xk , upper_bounds ), lower_bounds ) k = k + 1 end if end do end subroutine !=============================================================================== end module forcad_nurbs_surface !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function compute_Xg_nurbs_2d ( Xt , knot1 , knot2 , degree , nc , ng , Xc , Wc ) result ( Xg ) use forcad_utils , only : rk , basis_bspline , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:,:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:) integer , intent ( in ) :: degree ( 2 ) integer , intent ( in ) :: nc ( 2 ) integer , intent ( in ) :: ng ( 2 ) real ( rk ), intent ( in ), contiguous :: Xc (:,:) real ( rk ), intent ( in ), contiguous :: Wc (:) real ( rk ), allocatable :: Xg (:,:) real ( rk ), allocatable :: Tgc (:) integer :: i allocate ( Xg ( ng ( 1 ) * ng ( 2 ), size ( Xc , 2 ))) allocate ( Tgc ( nc ( 1 ) * nc ( 2 ))) !$OMP PARALLEL DO PRIVATE(Tgc) do i = 1 , ng ( 1 ) * ng ( 2 ) Tgc = kron (& basis_bspline ( Xt ( i , 2 ), knot2 , nc ( 2 ), degree ( 2 )),& basis_bspline ( Xt ( i , 1 ), knot1 , nc ( 1 ), degree ( 1 ))) Tgc = Tgc * ( Wc / ( dot_product ( Tgc , Wc ))) Xg ( i ,:) = matmul ( Tgc , Xc ) end do !$OMP END PARALLEL DO end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function compute_Xg_nurbs_2d_1point ( Xt , knot1 , knot2 , degree , nc , Xc , Wc ) result ( Xg ) use forcad_utils , only : rk , basis_bspline , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:) integer , intent ( in ) :: degree ( 2 ) integer , intent ( in ) :: nc ( 2 ) real ( rk ), intent ( in ), contiguous :: Xc (:,:) real ( rk ), intent ( in ), contiguous :: Wc (:) real ( rk ), allocatable :: Xg (:) real ( rk ), allocatable :: Tgc (:) allocate ( Xg ( size ( Xc , 2 ))) allocate ( Tgc ( nc ( 1 ) * nc ( 2 ))) Tgc = kron (& basis_bspline ( Xt ( 2 ), knot2 , nc ( 2 ), degree ( 2 )),& basis_bspline ( Xt ( 1 ), knot1 , nc ( 1 ), degree ( 1 ))) Tgc = Tgc * ( Wc / ( dot_product ( Tgc , Wc ))) Xg = matmul ( Tgc , Xc ) end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function compute_Xg_bspline_2d ( Xt , knot1 , knot2 , degree , nc , ng , Xc ) result ( Xg ) use forcad_utils , only : rk , basis_bspline , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:,:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:) integer , intent ( in ) :: degree ( 2 ) integer , intent ( in ) :: nc ( 2 ) integer , intent ( in ) :: ng ( 2 ) real ( rk ), intent ( in ), contiguous :: Xc (:,:) real ( rk ), allocatable :: Xg (:,:) integer :: i allocate ( Xg ( ng ( 1 ) * ng ( 2 ), size ( Xc , 2 ))) !$OMP PARALLEL DO do i = 1 , ng ( 1 ) * ng ( 2 ) Xg ( i ,:) = matmul ( kron (& basis_bspline ( Xt ( i , 2 ), knot2 , nc ( 2 ), degree ( 2 )),& basis_bspline ( Xt ( i , 1 ), knot1 , nc ( 1 ), degree ( 1 ))),& Xc ) end do !$OMP END PARALLEL DO end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function compute_Xg_bspline_2d_1point ( Xt , knot1 , knot2 , degree , nc , Xc ) result ( Xg ) use forcad_utils , only : rk , basis_bspline , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:) integer , intent ( in ) :: degree ( 2 ) integer , intent ( in ) :: nc ( 2 ) real ( rk ), intent ( in ), contiguous :: Xc (:,:) real ( rk ), allocatable :: Xg (:) allocate ( Xg ( size ( Xc , 2 ))) Xg = matmul ( kron (& basis_bspline ( Xt ( 2 ), knot2 , nc ( 2 ), degree ( 2 )),& basis_bspline ( Xt ( 1 ), knot1 , nc ( 1 ), degree ( 1 ))),& Xc ) end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine compute_dTgc_nurbs_2d_vector ( Xt , knot1 , knot2 , degree , nc , ng , Wc , dTgc , Tgc ) use forcad_utils , only : rk , basis_bspline_der , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:,:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:) integer , intent ( in ) :: degree ( 2 ) integer , intent ( in ) :: nc ( 2 ) integer , intent ( in ) :: ng ( 2 ) real ( rk ), intent ( in ), contiguous :: Wc (:) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:,:) real ( rk ), allocatable , intent ( out ) :: Tgc (:,:) real ( rk ), allocatable :: dBi (:,:), dB1 (:), dB2 (:) real ( rk ), allocatable :: Bi (:), B1 (:), B2 (:) integer :: i allocate ( dTgc ( ng ( 1 ) * ng ( 2 ), nc ( 1 ) * nc ( 2 ), 2 ), Tgc ( ng ( 1 ) * ng ( 2 ), nc ( 1 ) * nc ( 2 ))) allocate ( Bi ( nc ( 1 ) * nc ( 2 )), dBi ( nc ( 1 ) * nc ( 2 ), 2 )) do i = 1 , size ( Xt , 1 ) call basis_bspline_der ( Xt ( i , 1 ), knot1 , nc ( 1 ), degree ( 1 ), dB1 , B1 ) call basis_bspline_der ( Xt ( i , 2 ), knot2 , nc ( 2 ), degree ( 2 ), dB2 , B2 ) Bi = kron ( B2 , B1 ) Tgc ( i ,:) = Bi * ( Wc / ( dot_product ( Bi , Wc ))) dBi (:, 1 ) = kron ( B2 , dB1 ) dBi (:, 2 ) = kron ( dB2 , B1 ) dTgc ( i ,:, 1 ) = ( dBi (:, 1 ) * Wc - Tgc ( i ,:) * dot_product ( dBi (:, 1 ), Wc ) ) / dot_product ( Bi , Wc ) dTgc ( i ,:, 2 ) = ( dBi (:, 2 ) * Wc - Tgc ( i ,:) * dot_product ( dBi (:, 2 ), Wc ) ) / dot_product ( Bi , Wc ) end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine compute_dTgc_nurbs_2d_scalar ( Xt , knot1 , knot2 , degree , nc , Wc , dTgc , Tgc ) use forcad_utils , only : rk , basis_bspline_der , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:) integer , intent ( in ) :: degree ( 2 ) integer , intent ( in ) :: nc ( 2 ) real ( rk ), intent ( in ), contiguous :: Wc (:) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: Tgc (:) real ( rk ), allocatable :: dB1 (:), dB2 (:), dBi (:,:) real ( rk ), allocatable :: B1 (:), B2 (:), Bi (:) allocate ( dTgc ( nc ( 1 ) * nc ( 2 ), 2 ), Tgc ( nc ( 1 ) * nc ( 2 ))) allocate ( dBi ( nc ( 1 ) * nc ( 2 ), 2 ), Bi ( nc ( 1 ) * nc ( 2 ))) call basis_bspline_der ( Xt ( 1 ), knot1 , nc ( 1 ), degree ( 1 ), dB1 , B1 ) call basis_bspline_der ( Xt ( 2 ), knot2 , nc ( 2 ), degree ( 2 ), dB2 , B2 ) Bi = kron ( B2 , B1 ) Tgc = Bi * ( Wc / ( dot_product ( Bi , Wc ))) dBi (:, 1 ) = kron ( B2 , dB1 ) dBi (:, 2 ) = kron ( dB2 , B1 ) dTgc (:, 1 ) = ( dBi (:, 1 ) * Wc - Tgc * dot_product ( dBi (:, 1 ), Wc ) ) / dot_product ( Bi , Wc ) dTgc (:, 2 ) = ( dBi (:, 2 ) * Wc - Tgc * dot_product ( dBi (:, 2 ), Wc ) ) / dot_product ( Bi , Wc ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine compute_dTgc_bspline_2d_vector ( Xt , knot1 , knot2 , degree , nc , ng , dTgc , Tgc ) use forcad_utils , only : rk , basis_bspline_der , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:,:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:) integer , intent ( in ) :: degree ( 2 ) integer , intent ( in ) :: nc ( 2 ) integer , intent ( in ) :: ng ( 2 ) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:,:) real ( rk ), allocatable , intent ( out ) :: Tgc (:,:) real ( rk ), allocatable :: dB1 (:), dB2 (:) real ( rk ), allocatable :: B1 (:), B2 (:) integer :: i allocate ( dTgc ( ng ( 1 ) * ng ( 2 ), nc ( 1 ) * nc ( 2 ), 2 )) !$OMP PARALLEL DO PRIVATE(dB1, dB2) do i = 1 , size ( Xt , 1 ) call basis_bspline_der ( Xt ( i , 1 ), knot1 , nc ( 1 ), degree ( 1 ), dB1 , B1 ) call basis_bspline_der ( Xt ( i , 2 ), knot2 , nc ( 2 ), degree ( 2 ), dB2 , B2 ) Tgc ( i ,:) = kron ( B2 , B1 ) dTgc ( i ,:, 1 ) = kron ( B2 , dB1 ) dTgc ( i ,:, 2 ) = kron ( dB2 , B1 ) end do !$OMP END PARALLEL DO end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine compute_dTgc_bspline_2d_scalar ( Xt , knot1 , knot2 , degree , nc , dTgc , Tgc ) use forcad_utils , only : rk , basis_bspline_der , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:) integer , intent ( in ) :: degree ( 2 ) integer , intent ( in ) :: nc ( 2 ) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: Tgc (:) real ( rk ), allocatable :: dTgc1 (:), dTgc2 (:) real ( rk ), allocatable :: Tgc1 (:), Tgc2 (:) allocate ( dTgc ( nc ( 1 ) * nc ( 2 ), 2 )) call basis_bspline_der ( Xt ( 1 ), knot1 , nc ( 1 ), degree ( 1 ), dTgc1 , Tgc1 ) call basis_bspline_der ( Xt ( 2 ), knot2 , nc ( 2 ), degree ( 2 ), dTgc2 , Tgc2 ) Tgc = kron ( Tgc2 , Tgc1 ) dTgc (:, 1 ) = kron ( Tgc2 , dTgc1 ) dTgc (:, 2 ) = kron ( dTgc2 , Tgc1 ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine compute_d2Tgc_nurbs_2d_vector ( Xt , knot1 , knot2 , degree , nc , ng , Wc , d2Tgc , dTgc , Tgc ) use forcad_utils , only : rk , basis_bspline_2der , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:,:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:) integer , intent ( in ) :: degree ( 2 ) integer , intent ( in ) :: nc ( 2 ) integer , intent ( in ) :: ng ( 2 ) real ( rk ), intent ( in ), contiguous :: Wc (:) real ( rk ), allocatable , intent ( out ) :: d2Tgc (:,:,:) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:,:) real ( rk ), allocatable , intent ( out ) :: Tgc (:,:) real ( rk ), allocatable :: d2Bi (:,:), d2B1 (:), d2B2 (:) real ( rk ), allocatable :: dBi (:,:), dB1 (:), dB2 (:) real ( rk ), allocatable :: Bi (:), B1 (:), B2 (:) real ( rk ), allocatable :: Tgci (:), dTgci (:) integer :: i allocate ( d2Tgc ( ng ( 1 ) * ng ( 2 ), 2 * nc ( 1 ) * nc ( 2 ), 2 )) allocate ( B1 ( nc ( 1 )), B2 ( nc ( 2 ))) allocate ( dB1 ( nc ( 1 )), dB2 ( nc ( 2 ))) allocate ( d2B1 ( nc ( 1 )), d2B2 ( nc ( 2 ))) allocate ( Bi ( nc ( 1 ) * nc ( 2 )), dBi ( nc ( 1 ) * nc ( 2 ), 2 ), d2Bi ( 2 * nc ( 1 ) * nc ( 2 ), 2 )) allocate ( Tgci ( nc ( 1 ) * nc ( 2 )), dTgci ( nc ( 1 ) * nc ( 2 ))) allocate ( Tgc ( ng ( 1 ) * ng ( 2 ), nc ( 1 ) * nc ( 2 )), dTgc ( ng ( 1 ) * ng ( 2 ), nc ( 1 ) * nc ( 2 ), 2 )) do i = 1 , size ( Xt , 1 ) call basis_bspline_2der ( Xt ( i , 1 ), knot1 , nc ( 1 ), degree ( 1 ), d2B1 , dB1 , B1 ) call basis_bspline_2der ( Xt ( i , 2 ), knot2 , nc ( 2 ), degree ( 2 ), d2B2 , dB2 , B2 ) Bi = kron ( B2 , B1 ) Tgc ( i ,:) = Bi * ( Wc / ( dot_product ( Bi , Wc ))) dBi (:, 1 ) = kron ( B2 , dB1 ) dBi (:, 2 ) = kron ( dB2 , B1 ) dTgc ( i ,:, 1 ) = ( dBi (:, 1 ) * Wc - Tgc ( i ,:) * dot_product ( dBi (:, 1 ), Wc ) ) / dot_product ( Bi , Wc ) dTgc ( i ,:, 2 ) = ( dBi (:, 2 ) * Wc - Tgc ( i ,:) * dot_product ( dBi (:, 2 ), Wc ) ) / dot_product ( Bi , Wc ) d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) , 1 ) = kron ( B2 , d2B1 ) d2Bi ( nc ( 1 ) * nc ( 2 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ), 1 ) = kron ( dB2 , dB1 ) d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) , 2 ) = kron ( dB2 , dB1 ) d2Bi ( nc ( 1 ) * nc ( 2 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ), 2 ) = kron ( d2B2 , B1 ) d2Tgc ( i , 1 : nc ( 1 ) * nc ( 2 ) , 1 ) = & ( d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) , 1 ) * Wc - 2.0_rk * dTgc ( i ,:, 1 ) * dot_product ( dBi (:, 1 ), Wc ) & - Tgc ( i ,:) * dot_product ( d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) , 1 ), Wc )) / dot_product ( Bi , Wc ) d2Tgc ( i , nc ( 1 ) * nc ( 2 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ), 1 ) = & ( d2Bi ( nc ( 1 ) * nc ( 2 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ), 1 ) * Wc - dTgc ( i ,:, 1 ) * dot_product ( dBi (:, 2 ), Wc ) - dTgc ( i ,:, 2 ) * dot_product ( dBi (:, 1 ), Wc ) & - Tgc ( i ,:) * dot_product ( d2Bi ( nc ( 1 ) * nc ( 2 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ), 1 ), Wc )) / dot_product ( Bi , Wc ) d2Tgc ( i , 1 : nc ( 1 ) * nc ( 2 ) , 2 ) = & ( d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) , 2 ) * Wc - dTgc ( i ,:, 1 ) * dot_product ( dBi (:, 2 ), Wc ) - dTgc ( i ,:, 2 ) * dot_product ( dBi (:, 1 ), Wc ) & - Tgc ( i ,:) * dot_product ( d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) , 2 ), Wc )) / dot_product ( Bi , Wc ) d2Tgc ( i , nc ( 1 ) * nc ( 2 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ), 2 ) = & ( d2Bi ( nc ( 1 ) * nc ( 2 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ), 2 ) * Wc - 2.0_rk * dTgc ( i ,:, 2 ) * dot_product ( dBi (:, 2 ), Wc ) & - Tgc ( i ,:) * dot_product ( d2Bi ( nc ( 1 ) * nc ( 2 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ), 2 ), Wc )) / dot_product ( Bi , Wc ) end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine compute_d2Tgc_nurbs_2d_scalar ( Xt , knot1 , knot2 , degree , nc , Wc , d2Tgc , dTgc , Tgc ) use forcad_utils , only : rk , basis_bspline_2der , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:) integer , intent ( in ) :: degree ( 2 ) integer , intent ( in ) :: nc ( 2 ) real ( rk ), intent ( in ), contiguous :: Wc (:) real ( rk ), allocatable , intent ( out ) :: d2Tgc (:,:) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: Tgc (:) real ( rk ), allocatable :: d2Bi (:,:), d2B1 (:), d2B2 (:) real ( rk ), allocatable :: dBi (:,:), dB1 (:), dB2 (:) real ( rk ), allocatable :: Bi (:), B1 (:), B2 (:) allocate ( B1 ( nc ( 1 )), B2 ( nc ( 2 ))) allocate ( dB1 ( nc ( 1 )), dB2 ( nc ( 2 ))) allocate ( d2B1 ( nc ( 1 )), d2B2 ( nc ( 2 ))) allocate ( Bi ( nc ( 1 ) * nc ( 2 )), dBi ( nc ( 1 ) * nc ( 2 ), 2 ), d2Bi ( 2 * nc ( 1 ) * nc ( 2 ), 2 )) allocate ( Tgc ( nc ( 1 ) * nc ( 2 )), dTgc ( nc ( 1 ) * nc ( 2 ), 2 ), d2Tgc ( 2 * nc ( 1 ) * nc ( 2 ), 2 )) call basis_bspline_2der ( Xt ( 1 ), knot1 , nc ( 1 ), degree ( 1 ), d2B1 , dB1 , B1 ) call basis_bspline_2der ( Xt ( 2 ), knot2 , nc ( 2 ), degree ( 2 ), d2B2 , dB2 , B2 ) Bi = kron ( B2 , B1 ) Tgc = Bi * ( Wc / ( dot_product ( Bi , Wc ))) dBi (:, 1 ) = kron ( B2 , dB1 ) dBi (:, 2 ) = kron ( dB2 , B1 ) dTgc (:, 1 ) = ( dBi (:, 1 ) * Wc - Tgc * dot_product ( dBi (:, 1 ), Wc ) ) / dot_product ( Bi , Wc ) dTgc (:, 2 ) = ( dBi (:, 2 ) * Wc - Tgc * dot_product ( dBi (:, 2 ), Wc ) ) / dot_product ( Bi , Wc ) d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) , 1 ) = kron ( B2 , d2B1 ) d2Bi ( nc ( 1 ) * nc ( 2 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ), 1 ) = kron ( dB2 , dB1 ) d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) , 2 ) = kron ( dB2 , dB1 ) d2Bi ( nc ( 1 ) * nc ( 2 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ), 2 ) = kron ( d2B2 , B1 ) d2Tgc ( 1 : nc ( 1 ) * nc ( 2 ) , 1 ) = & ( d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) , 1 ) * Wc - 2.0_rk * dTgc (:, 1 ) * dot_product ( dBi (:, 1 ), Wc ) & - Tgc * dot_product ( d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) , 1 ), Wc )) / dot_product ( Bi , Wc ) d2Tgc ( nc ( 1 ) * nc ( 2 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ), 1 ) = & ( d2Bi ( nc ( 1 ) * nc ( 2 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ), 1 ) * Wc - dTgc (:, 1 ) * dot_product ( dBi (:, 2 ), Wc ) - dTgc (:, 2 ) * dot_product ( dBi (:, 1 ), Wc ) & - Tgc * dot_product ( d2Bi ( nc ( 1 ) * nc ( 2 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ), 1 ), Wc )) / dot_product ( Bi , Wc ) d2Tgc ( 1 : nc ( 1 ) * nc ( 2 ) , 2 ) = & ( d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) , 2 ) * Wc - dTgc (:, 1 ) * dot_product ( dBi (:, 2 ), Wc ) - dTgc (:, 2 ) * dot_product ( dBi (:, 1 ), Wc ) & - Tgc * dot_product ( d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) , 2 ), Wc )) / dot_product ( Bi , Wc ) d2Tgc ( nc ( 1 ) * nc ( 2 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ), 2 ) = & ( d2Bi ( nc ( 1 ) * nc ( 2 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ), 2 ) * Wc - 2.0_rk * dTgc (:, 2 ) * dot_product ( dBi (:, 2 ), Wc ) & - Tgc * dot_product ( d2Bi ( nc ( 1 ) * nc ( 2 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ), 2 ), Wc )) / dot_product ( Bi , Wc ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine compute_d2Tgc_bspline_2d_vector ( Xt , knot1 , knot2 , degree , nc , ng , d2Tgc , dTgc , Tgc ) use forcad_utils , only : rk , basis_bspline_2der , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:,:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:) integer , intent ( in ) :: degree ( 2 ) integer , intent ( in ) :: nc ( 2 ) integer , intent ( in ) :: ng ( 2 ) real ( rk ), allocatable , intent ( out ) :: d2Tgc (:,:,:) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:,:) real ( rk ), allocatable , intent ( out ) :: Tgc (:,:) real ( rk ), allocatable :: d2B1 (:), d2B2 (:) real ( rk ), allocatable :: dB1 (:), dB2 (:) real ( rk ), allocatable :: B1 (:), B2 (:) integer :: i allocate ( d2Tgc ( ng ( 1 ) * ng ( 2 ), 2 * nc ( 1 ) * nc ( 2 ), 2 )) allocate ( dTgc ( ng ( 1 ) * ng ( 2 ), nc ( 1 ) * nc ( 2 ), 2 )) allocate ( Tgc ( ng ( 1 ) * ng ( 2 ), nc ( 1 ) * nc ( 2 ))) do i = 1 , size ( Xt , 1 ) call basis_bspline_2der ( Xt ( i , 1 ), knot1 , nc ( 1 ), degree ( 1 ), d2B1 , dB1 , B1 ) call basis_bspline_2der ( Xt ( i , 2 ), knot2 , nc ( 2 ), degree ( 2 ), d2B2 , dB2 , B2 ) Tgc ( i ,:) = kron ( B2 , B1 ) dTgc ( i ,:, 1 ) = kron ( B2 , dB1 ) dTgc ( i ,:, 2 ) = kron ( dB2 , B1 ) d2Tgc ( i , 1 : nc ( 1 ) * nc ( 2 ) , 1 ) = kron ( B2 , d2B1 ) d2Tgc ( i , nc ( 1 ) * nc ( 2 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ), 1 ) = kron ( dB2 , dB1 ) d2Tgc ( i , 1 : nc ( 1 ) * nc ( 2 ) , 2 ) = kron ( dB2 , dB1 ) d2Tgc ( i , nc ( 1 ) * nc ( 2 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ), 2 ) = kron ( d2B2 , B1 ) end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine compute_d2Tgc_bspline_2d_scalar ( Xt , knot1 , knot2 , degree , nc , d2Tgc , dTgc , Tgc ) use forcad_utils , only : rk , basis_bspline_2der , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:) integer , intent ( in ) :: degree ( 2 ) integer , intent ( in ) :: nc ( 2 ) real ( rk ), allocatable , intent ( out ) :: d2Tgc (:,:) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: Tgc (:) real ( rk ), allocatable :: d2B1 (:), d2B2 (:) real ( rk ), allocatable :: dB1 (:), dB2 (:) real ( rk ), allocatable :: B1 (:), B2 (:) allocate ( d2Tgc ( 2 * nc ( 1 ) * nc ( 2 ), 2 )) allocate ( dTgc ( nc ( 1 ) * nc ( 2 ), 2 )) allocate ( Tgc ( nc ( 1 ) * nc ( 2 ))) call basis_bspline_2der ( Xt ( 1 ), knot1 , nc ( 1 ), degree ( 1 ), d2B1 , dB1 , B1 ) call basis_bspline_2der ( Xt ( 2 ), knot2 , nc ( 2 ), degree ( 2 ), d2B2 , dB2 , B2 ) Tgc = kron ( B2 , B1 ) dTgc (:, 1 ) = kron ( B2 , dB1 ) dTgc (:, 2 ) = kron ( dB2 , B1 ) d2Tgc ( 1 : nc ( 1 ) * nc ( 2 ) , 1 ) = kron ( B2 , d2B1 ) d2Tgc ( nc ( 1 ) * nc ( 2 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ), 1 ) = kron ( dB2 , dB1 ) d2Tgc ( 1 : nc ( 1 ) * nc ( 2 ) , 2 ) = kron ( dB2 , dB1 ) d2Tgc ( nc ( 1 ) * nc ( 2 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ), 2 ) = kron ( d2B2 , B1 ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function compute_Tgc_nurbs_2d_vector ( Xt , knot1 , knot2 , degree , nc , ng , Wc ) result ( Tgc ) use forcad_utils , only : rk , basis_bspline , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:,:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:) integer , intent ( in ) :: degree ( 2 ) integer , intent ( in ) :: nc ( 2 ) integer , intent ( in ) :: ng ( 2 ) real ( rk ), intent ( in ), contiguous :: Wc (:) real ( rk ), allocatable :: Tgc (:,:) real ( rk ), allocatable :: Tgci (:) integer :: i allocate ( Tgc ( ng ( 1 ) * ng ( 2 ), nc ( 1 ) * nc ( 2 ))) allocate ( Tgci ( nc ( 1 ) * nc ( 2 ))) !$OMP PARALLEL DO PRIVATE(Tgci) do i = 1 , size ( Xt , 1 ) Tgci = kron (& basis_bspline ( Xt ( i , 2 ), knot2 , nc ( 2 ), degree ( 2 )),& basis_bspline ( Xt ( i , 1 ), knot1 , nc ( 1 ), degree ( 1 ))) Tgc ( i ,:) = Tgci * ( Wc / ( dot_product ( Tgci , Wc ))) end do !$OMP END PARALLEL DO end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function compute_Tgc_nurbs_2d_scalar ( Xt , knot1 , knot2 , degree , nc , Wc ) result ( Tgc ) use forcad_utils , only : rk , basis_bspline , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:) integer , intent ( in ) :: degree ( 2 ) integer , intent ( in ) :: nc ( 2 ) real ( rk ), intent ( in ), contiguous :: Wc (:) real ( rk ), allocatable :: Tgc (:) allocate ( Tgc ( nc ( 1 ) * nc ( 2 ))) Tgc = kron (& basis_bspline ( Xt ( 2 ), knot2 , nc ( 2 ), degree ( 2 )),& basis_bspline ( Xt ( 1 ), knot1 , nc ( 1 ), degree ( 1 ))) Tgc = Tgc * ( Wc / ( dot_product ( Tgc , Wc ))) end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function compute_Tgc_bspline_2d_vector ( Xt , knot1 , knot2 , degree , nc , ng ) result ( Tgc ) use forcad_utils , only : rk , basis_bspline , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:,:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:) integer , intent ( in ) :: degree ( 2 ) integer , intent ( in ) :: nc ( 2 ) integer , intent ( in ) :: ng ( 2 ) real ( rk ), allocatable :: Tgc (:,:) integer :: i allocate ( Tgc ( ng ( 1 ) * ng ( 2 ), nc ( 1 ) * nc ( 2 ))) !$OMP PARALLEL DO do i = 1 , size ( Xt , 1 ) Tgc ( i ,:) = kron (& basis_bspline ( Xt ( i , 2 ), knot2 , nc ( 2 ), degree ( 2 )),& basis_bspline ( Xt ( i , 1 ), knot1 , nc ( 1 ), degree ( 1 ))) end do !$OMP END PARALLEL DO end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function compute_Tgc_bspline_2d_scalar ( Xt , knot1 , knot2 , degree , nc ) result ( Tgc ) use forcad_utils , only : rk , basis_bspline , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:) integer , intent ( in ) :: degree ( 2 ) integer , intent ( in ) :: nc ( 2 ) real ( rk ), allocatable :: Tgc (:) allocate ( Tgc ( nc ( 1 ) * nc ( 2 ))) Tgc = kron (& basis_bspline ( Xt ( 2 ), knot2 , nc ( 2 ), degree ( 2 )),& basis_bspline ( Xt ( 1 ), knot1 , nc ( 1 ), degree ( 1 ))) end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function nearest_point_help_2d ( ng , Xg , point_Xg ) result ( distances ) use forcad_utils , only : rk implicit none integer , intent ( in ) :: ng ( 2 ) real ( rk ), intent ( in ), contiguous :: Xg (:,:) real ( rk ), intent ( in ), contiguous :: point_Xg (:) real ( rk ), allocatable :: distances (:) integer :: i allocate ( distances ( ng ( 1 ) * ng ( 2 ))) !$OMP PARALLEL DO do i = 1 , ng ( 1 ) * ng ( 2 ) distances ( i ) = norm2 ( Xg ( i ,:) - point_Xg ) end do !$OMP END PARALLEL DO end function !===============================================================================","tags":"","loc":"sourcefile/forcad_nurbs_surface.f90.html"},{"title":"nearest_point_1d.f90 – ForCAD","text":"This file depends on sourcefile~~nearest_point_1d.f90~~EfferentGraph sourcefile~nearest_point_1d.f90 nearest_point_1d.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~nearest_point_1d.f90->sourcefile~forcad.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_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 program nearest_point_1d use forcad , only : rk , nurbs_curve implicit none type ( nurbs_curve ) :: shape !! Declare a NURBS curve object real ( rk ), allocatable :: Xc (:,:), Wc (:) !! Arrays for control points and weights real ( rk ) :: knot ( 6 ) !! Array for knot vector real ( rk ), allocatable :: nearest_Xg (:) !! Array for the nearest point on the curve real ( rk ) :: nearest_Xt !! Array for the parametric coordinates of the nearest point integer :: id !! Variable for the id of the nearest point !----------------------------------------------------------------------------- ! 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 ,:) = [ 5.0_rk , 5.0_rk , 0.0_rk ] !> Define weights for the control points (optional) allocate ( Wc ( 3 )) Wc = [ 1.0_rk , 1.1_rk , 1.0_rk ] !> Define knot vector knot = [ 0.0_rk , 0.0_rk , 0.0_rk , 1.0_rk , 1.0_rk , 1.0_rk ] !> Set knot vector, control points, and weights for the NURBS curve object. !> Wc is optional call shape % set ( knot , Xc , Wc ) !----------------------------------------------------------------------------- ! Creating the NURBS curve !----------------------------------------------------------------------------- !> Generate the NURBS curve with a resolution of 20 call shape % create ( 20 ) !----------------------------------------------------------------------------- ! Nearest point on the curve !----------------------------------------------------------------------------- !> Find the nearest point on the curve to a given point ! nearest_Xg: Coordinates of the nearest point on the curve (optional) ! nearest_Xt: Corresponding parametric coordinates of the nearest point (optional) ! id: id of the nearest point (optional) call shape % nearest_point ([ 4.5_rk , 4.5_rk , 5.0_rk ], nearest_Xg , nearest_Xt , id ) print '(a,1x,g0,2x,g0,2x,g0,a,2x,g0,2x,a,1x,g0)' ,& 'Nearest point on the curve:' , nearest_Xg , ' with parametric coordinates:' , nearest_Xt , ' and id:' , id !----------------------------------------------------------------------------- ! Nearest point on the curve (Optimization) !----------------------------------------------------------------------------- !> Find the nearest point on the curve to a given point !> The optimization method is used to find the nearest point !> The optimization method is based on the Newton-Raphson method ! nearest_Xt: Corresponding parametric coordinates of the nearest point ! nearest_Xg: Coordinates of the nearest point on the curve (optional) call shape % nearest_point2 ([ 4.5_rk , 4.5_rk , 5.0_rk ], 1.0e-11_rk , 30 , nearest_Xt , nearest_Xg ) print '(a,1x,g0,2x,g0,a,2x,g0,2x,g0)' ,& 'Nearest point on the curve:' , nearest_Xg , ' with parametric coordinates:' , nearest_Xt !----------------------------------------------------------------------------- ! Finalizing !----------------------------------------------------------------------------- !> Finalize the NURBS curve object call shape % finalize () deallocate ( nearest_Xg , Xc , Wc ) end program","tags":"","loc":"sourcefile/nearest_point_1d.f90.html"},{"title":"shape_circle.f90 – ForCAD","text":"This file depends on sourcefile~~shape_circle.f90~~EfferentGraph sourcefile~shape_circle.f90 shape_circle.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~shape_circle.f90->sourcefile~forcad.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_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 program shape_circle use forcad , only : rk , nurbs_curve implicit none type ( nurbs_curve ) :: shape !----------------------------------------------------------------------------- ! Setting up NURBS circle !----------------------------------------------------------------------------- !> Set a circle with radius 2.0 and center at [0.0, 0.0, 0.0] call shape % set_circle ( center = [ 0.0_rk , 0.0_rk , 0.0_rk ], radius = 2.0_rk ) !> Export control points to a VTK file call shape % export_Xc ( 'vtk/shape_circle_Xc.vtk' ) !----------------------------------------------------------------------------- ! Creating circle !----------------------------------------------------------------------------- !> Generate the NURBS circle with a resolution of 100 call shape % create ( res = 100 ) !> Export the generated cirlce to a VTK file call shape % export_Xg ( 'vtk/shape_circle_Xg.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call shape % show ( 'vtk/shape_circle_Xc.vtk' , 'vtk/shape_circle_Xg.vtk' ) !----------------------------------------------------------------------------- ! Finalizing !----------------------------------------------------------------------------- !> Finalize the NURBS curve object call shape % finalize () end program","tags":"","loc":"sourcefile/shape_circle.f90.html"},{"title":"example_ppm3.f90 – ForCAD","text":"This file depends on sourcefile~~example_ppm3.f90~~EfferentGraph sourcefile~example_ppm3.f90 example_ppm3.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~example_ppm3.f90->sourcefile~forcad.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_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 !> Visualization of NURBS surfaces using ForCAD, ForImage and ForColorMap libraries !> This example converts NURBS surfaces (vector) to an image (raster) using ForCAD, ForImage and ForColorMap libraries. program example_ppm3 use forcad , only : rk , nurbs_surface use forimage , only : ik , format_pnm , color use forcolormap , only : colormap use fortime , only : timer implicit none type ( nurbs_surface ) :: shape type ( format_pnm ) :: image type ( color ) :: background_color type ( colormap ) :: cmap integer ( ik ), allocatable :: px (:, :) real ( rk ), allocatable :: Xg (:,:), z_values (:) real ( rk ) :: aspect_ratio integer :: height , width , ng ( 2 ), red , green , blue , res1 , res2 , i integer , allocatable :: idx (:,:) type ( timer ) :: t !----------------------------------------------------------------------------- ! Set the image size and calculate the aspect ratio !----------------------------------------------------------------------------- width = 2000 height = 2000 aspect_ratio = real ( width , rk ) / real ( height , rk ) allocate ( px ( height , 3 * width )) !----------------------------------------------------------------------------- ! Set the background color using ForColor class of ForImage !----------------------------------------------------------------------------- call t % timer_start () call background_color % set ( 'white' , use_library = . true .) do i = 1 , width px (:, 3 * ( i - 1 ) + 1 ) = background_color % get_r () px (:, 3 * ( i - 1 ) + 2 ) = background_color % get_g () px (:, 3 * ( i - 1 ) + 3 ) = background_color % get_b () end do call t % timer_stop ( message = 'Setting the background color' ) !----------------------------------------------------------------------------- ! Set a shape object using ForCAD library !----------------------------------------------------------------------------- call t % timer_start () !> Set the shape parameters for a tetragon res1 = 2000 res2 = 2000 call shape % set_tetragon ( L = [ 1.0_rk , 1.0_rk ], nc = [ 2 , 2 ]) call shape % create ( res1 , res2 ) Xg = shape % get_Xg () ng = shape % get_ng () call shape % finalize () call t % timer_stop ( message = 'Creating a tetragon' ) !----------------------------------------------------------------------------- ! Set the z-values of the geometry points !----------------------------------------------------------------------------- ! circular gradient z_values = (( Xg (:, 1 ) - minval ( Xg (:, 1 ))) / ( maxval ( Xg (:, 1 )) - minval ( Xg (:, 1 )))) ** 2 & + (( Xg (:, 2 ) - minval ( Xg (:, 2 ))) / ( maxval ( Xg (:, 2 )) - minval ( Xg (:, 2 ))) ** 2 ) !----------------------------------------------------------------------------- ! Set the colormap using ForColorMap library !----------------------------------------------------------------------------- call cmap % set ( 'buda' , 0.0_rk , 1.0_rk ) !----------------------------------------------------------------------------- ! Set colors to the shape !----------------------------------------------------------------------------- call t % timer_start () Xg (:, 2 ) = Xg (:, 2 ) * aspect_ratio allocate ( idx ( ng ( 1 ) * ng ( 2 ), 2 )) idx (:, 1 ) = min ( max ( 1 , int ( Xg (:, 1 ) * width ) + 1 ), width ) idx (:, 2 ) = min ( max ( 1 , int ( Xg (:, 2 ) * height ) + 1 ), height ) do i = 1 , ng ( 1 ) * ng ( 2 ) call cmap % compute_RGB ( z_values ( i ), red , green , blue ) px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 1 ) = red px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 2 ) = green px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 3 ) = blue end do deallocate ( idx ) call t % timer_stop ( message = 'Setting colors' ) !----------------------------------------------------------------------------- ! Set a shape object using ForCAD library !----------------------------------------------------------------------------- call t % timer_start () res1 = 2000 res2 = 2000 call shape % set_tetragon ( L = [ 0.48_rk , 0.48_rk ], nc = [ 2 , 2 ]) call shape % translate_Xc ([ 0.01_rk , 0.01_rk , 0.0_rk ]) call shape % create ( res1 , res2 ) Xg = shape % get_Xg () ng = shape % get_ng () call shape % finalize () call t % timer_stop ( message = 'Creating a ring' ) !----------------------------------------------------------------------------- ! Set the z-values of the geometry points !----------------------------------------------------------------------------- ! circular gradient z_values = (( Xg (:, 1 ) - minval ( Xg (:, 1 ))) / ( maxval ( Xg (:, 1 )) - minval ( Xg (:, 1 )))) ** 2 & + (( Xg (:, 2 ) - minval ( Xg (:, 2 ))) / ( maxval ( Xg (:, 2 )) - minval ( Xg (:, 2 ))) ** 2 ) !----------------------------------------------------------------------------- ! Set the colormap using ForColorMap library !----------------------------------------------------------------------------- call cmap % set ( 'managua' , 0.0_rk , 2.2_rk ) !----------------------------------------------------------------------------- ! Set colors to the shape !----------------------------------------------------------------------------- call t % timer_start () Xg (:, 2 ) = Xg (:, 2 ) * aspect_ratio allocate ( idx ( ng ( 1 ) * ng ( 2 ), 2 )) idx (:, 1 ) = min ( max ( 1 , int ( Xg (:, 1 ) * width ) + 1 ), width ) idx (:, 2 ) = min ( max ( 1 , int ( Xg (:, 2 ) * height ) + 1 ), height ) do i = 1 , ng ( 1 ) * ng ( 2 ) call cmap % compute_RGB ( z_values ( i ), red , green , blue ) px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 1 ) = red px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 2 ) = green px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 3 ) = blue end do deallocate ( idx ) call t % timer_stop ( message = 'Setting colors' ) !----------------------------------------------------------------------------- ! Set a shape object using ForCAD library !----------------------------------------------------------------------------- call t % timer_start () res1 = 2000 res2 = 2000 call shape % set_tetragon ( L = [ 0.48_rk , 0.48_rk ], nc = [ 3 , 2 ]) call shape % translate_Xc ([ 0.51_rk , 0.01_rk , 0.0_rk ]) call shape % modify_Xc ( 0.24_rk , 2 , 2 ) call shape % modify_Xc ( 0.26_rk , 5 , 2 ) call shape % create ( res1 , res2 ) Xg = shape % get_Xg () ng = shape % get_ng () call shape % finalize () call t % timer_stop ( message = 'Creating a ring' ) !----------------------------------------------------------------------------- ! Set the z-values of the geometry points !----------------------------------------------------------------------------- ! linear gradient in the y-direction z_values = ( Xg (:, 2 ) - minval ( Xg (:, 2 ))) / ( maxval ( Xg (:, 2 )) - minval ( Xg (:, 2 ))) !----------------------------------------------------------------------------- ! Set the colormap using ForColorMap library !----------------------------------------------------------------------------- call cmap % set ( 'lipari' , 0.0_rk , 1.0_rk ) !----------------------------------------------------------------------------- ! Set colors to the shape !----------------------------------------------------------------------------- call t % timer_start () Xg (:, 2 ) = Xg (:, 2 ) * aspect_ratio allocate ( idx ( ng ( 1 ) * ng ( 2 ), 2 )) idx (:, 1 ) = min ( max ( 1 , int ( Xg (:, 1 ) * width ) + 1 ), width ) idx (:, 2 ) = min ( max ( 1 , int ( Xg (:, 2 ) * height ) + 1 ), height ) do i = 1 , ng ( 1 ) * ng ( 2 ) call cmap % compute_RGB ( z_values ( i ), red , green , blue ) px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 1 ) = red px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 2 ) = green px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 3 ) = blue end do deallocate ( idx ) call t % timer_stop ( message = 'Setting colors' ) !----------------------------------------------------------------------------- ! Set a shape object using ForCAD library !----------------------------------------------------------------------------- call t % timer_start () res1 = 2000 res2 = 2000 call shape % set_tetragon ( L = [ 0.48_rk , 0.48_rk ], nc = [ 2 , 3 ]) call shape % translate_Xc ([ 0.01_rk , 0.51_rk , 0.0_rk ]) call shape % modify_Xc ( 0.26_rk , 3 , 1 ) call shape % modify_Xc ( 0.24_rk , 4 , 1 ) call shape % create ( res1 , res2 ) Xg = shape % get_Xg () ng = shape % get_ng () call shape % finalize () call t % timer_stop ( message = 'Creating a ring' ) !----------------------------------------------------------------------------- ! Set the z-values of the geometry points !----------------------------------------------------------------------------- ! linear gradient in the x-direction z_values = ( Xg (:, 1 ) - minval ( Xg (:, 1 ))) / ( maxval ( Xg (:, 1 )) - minval ( Xg (:, 1 ))) !----------------------------------------------------------------------------- ! Set the colormap using ForColorMap library !----------------------------------------------------------------------------- call cmap % set ( 'oslo10' , 0.0_rk , 1.0_rk ) !----------------------------------------------------------------------------- ! Set colors to the shape !----------------------------------------------------------------------------- call t % timer_start () Xg (:, 2 ) = Xg (:, 2 ) * aspect_ratio allocate ( idx ( ng ( 1 ) * ng ( 2 ), 2 )) idx (:, 1 ) = min ( max ( 1 , int ( Xg (:, 1 ) * width ) + 1 ), width ) idx (:, 2 ) = min ( max ( 1 , int ( Xg (:, 2 ) * height ) + 1 ), height ) do i = 1 , ng ( 1 ) * ng ( 2 ) call cmap % compute_RGB ( z_values ( i ), red , green , blue ) px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 1 ) = red px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 2 ) = green px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 3 ) = blue end do deallocate ( idx ) call t % timer_stop ( message = 'Setting colors' ) !----------------------------------------------------------------------------- ! Set a shape object using ForCAD library !----------------------------------------------------------------------------- call t % timer_start () res1 = 2000 res2 = 2000 call shape % set_tetragon ( L = [ 0.48_rk , 0.48_rk ], nc = [ 3 , 3 ]) call shape % translate_Xc ([ 0.51_rk , 0.51_rk , 0.0_rk ]) call shape % modify_Xc ( 0.7_rk , 1 , 2 ) call shape % modify_Xc ( 0.7_rk , 3 , 2 ) call shape % modify_Xc ( 0.8_rk , 7 , 2 ) call shape % modify_Xc ( 0.8_rk , 9 , 2 ) call shape % create ( res1 , res2 ) Xg = shape % get_Xg () ng = shape % get_ng () call shape % finalize () call t % timer_stop ( message = 'Creating a ring' ) !----------------------------------------------------------------------------- ! Set the z-values of the geometry points !----------------------------------------------------------------------------- ! linear gradient in the x-direction z_values = ( Xg (:, 1 ) - minval ( Xg (:, 1 ))) / ( maxval ( Xg (:, 1 )) - minval ( Xg (:, 1 ))) !----------------------------------------------------------------------------- ! Set the colormap using ForColorMap library !----------------------------------------------------------------------------- red = 255 green = 215 blue = 0 !----------------------------------------------------------------------------- ! Set colors to the shape !----------------------------------------------------------------------------- call t % timer_start () Xg (:, 2 ) = Xg (:, 2 ) * aspect_ratio allocate ( idx ( ng ( 1 ) * ng ( 2 ), 2 )) idx (:, 1 ) = min ( max ( 1 , int ( Xg (:, 1 ) * width ) + 1 ), width ) idx (:, 2 ) = min ( max ( 1 , int ( Xg (:, 2 ) * height ) + 1 ), height ) do i = 1 , ng ( 1 ) * ng ( 2 ) px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 1 ) = red px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 2 ) = green px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 3 ) = blue end do deallocate ( idx ) call t % timer_stop ( message = 'Setting colors' ) !----------------------------------------------------------------------------- ! Save the image to a PPM file using ForImage library !----------------------------------------------------------------------------- call t % timer_start () call image % set_pnm (& encoding = 'binary' , & file_format = 'ppm' , & width = width , & height = height , & max_color = 255 , & comment = 'example: ForCAD + ForImage + ForColor + ForColormap' , & pixels = px & ) call image % export_pnm ( 'ppm/example_ppm3' ) call image % finalize () call t % timer_stop ( message = 'Saving the image' ) ! Clean up call cmap % finalize () deallocate ( px , Xg , z_values ) end program","tags":"","loc":"sourcefile/example_ppm3.f90.html"},{"title":"demo_volume.f90 – ForCAD","text":"This file depends on sourcefile~~demo_volume.f90~~EfferentGraph sourcefile~demo_volume.f90 demo_volume.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~demo_volume.f90->sourcefile~forcad.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_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 volume object to create, and finalize a NURBS 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_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 !----------------------------------------------------------------------------- ! Setting up the NURBS volume !----------------------------------------------------------------------------- !> Define control points for the NURBS 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 NURBS volume object call nurbs % set ([ 2 , 2 , 2 ], Xc , Wc ) !> Deallocate local arrays deallocate ( Xc , Wc ) !> Export initial control points to a VTK file call nurbs % export_Xc ( 'vtk/demo_volume_Xc.vtk' ) !----------------------------------------------------------------------------- ! Creating the NURBS volume !----------------------------------------------------------------------------- !> Generate the NURBS volume with a resolution of 15X15X15 call nurbs % create ( 15 , 15 , 15 ) !> Export the generated volume to a VTK file call nurbs % export_Xg ( 'vtk/demo_volume_Xg.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call nurbs % show ( 'vtk/demo_volume_Xc.vtk' , 'vtk/demo_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 ), 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/demo_volume.f90.html"},{"title":"shape_ring_3d.f90 – ForCAD","text":"This file depends on sourcefile~~shape_ring_3d.f90~~EfferentGraph sourcefile~shape_ring_3d.f90 shape_ring_3d.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~shape_ring_3d.f90->sourcefile~forcad.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_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 program shape_ring_3d use forcad , only : rk , nurbs_volume implicit none type ( nurbs_volume ) :: shape !> Set up a ring shape centered at 0,0,0 with inner radius 1, outer radius 2, and length 1. call shape % set_ring ([ 0.0_rk , 0.0_rk , 0.0_rk ], 1.0_rk , 2.0_rk , 1.0_rk ) !> Export the control points to a VTK file for visualization. call shape % export_Xc ( 'vtk/shape_ring_3d_Xc.vtk' ) !> Create the shape using the specified number of elements in each direction. call shape % create ( 60 , 15 , 10 ) !> Export the geometry to a VTK file for visualization. call shape % export_Xg ( 'vtk/shape_ring_3d_Xg.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call shape % show ( 'vtk/shape_ring_3d_Xc.vtk' , 'vtk/shape_ring_3d_Xg.vtk' ) !> Finalize and clean up the shape object. call shape % finalize () end program","tags":"","loc":"sourcefile/shape_ring_3d.f90.html"},{"title":"nearest_point_3d.f90 – ForCAD","text":"This file depends on sourcefile~~nearest_point_3d.f90~~EfferentGraph sourcefile~nearest_point_3d.f90 nearest_point_3d.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~nearest_point_3d.f90->sourcefile~forcad.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_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 program nearest_point_3d use forcad , only : rk , nurbs_volume implicit none type ( nurbs_volume ) :: shape !! Declare a NURBS volume object real ( rk ), allocatable :: nearest_Xg (:) !! Coordinates of the nearest point on the volume real ( rk ), allocatable :: nearest_Xt (:) !! Corresponding parametric coordinates of the nearest point integer :: id !! id of the nearest point real ( rk ) :: Xc ( 8 , 3 ) !! Control points real ( rk ) :: Wc ( 8 ) !! Weights of the control points !----------------------------------------------------------------------------- ! Setting up the NURBS hexahedron !----------------------------------------------------------------------------- Xc ( 1 ,:) = [ 0.0_rk , 0.0_rk , 0.0_rk ] Xc ( 2 ,:) = [ 2.0_rk , 0.0_rk , 0.0_rk ] Xc ( 3 ,:) = [ 0.0_rk , 4.0_rk , 0.0_rk ] Xc ( 4 ,:) = [ 2.0_rk , 4.0_rk , 0.0_rk ] Xc ( 5 ,:) = [ 0.0_rk , 0.0_rk , 2.0_rk ] Xc ( 6 ,:) = [ 2.0_rk , 0.0_rk , 2.0_rk ] Xc ( 7 ,:) = [ 0.0_rk , 4.0_rk , 2.0_rk ] Xc ( 8 ,:) = [ 2.0_rk , 4.0_rk , 2.0_rk ] !> The weights of the control points (Wc) are optional. Wc = [ 1.0_rk , 1.1_rk , 1.11_rk , 1.0_rk , 0.5_rk , 0.5_rk , 1.2_rk , 1.0_rk ] call shape % set ( 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 ], Xc = Xc , Wc = Wc ) !----------------------------------------------------------------------------- ! Creating the NURBS volume !----------------------------------------------------------------------------- !> Generate the NURBS volume with resolutions of 20, 20, 20 call shape % create ( 30 , 30 , 30 ) !----------------------------------------------------------------------------- ! Nearest point on the volume !----------------------------------------------------------------------------- !> Find the nearest point on the volume to a given point ! nearest_Xg: Coordinates of the nearest point on the volume (optional) ! nearest_Xt: Corresponding parametric coordinates of the nearest point (optional) ! id: id of the nearest point (optional) call shape % nearest_point ([ 1.5_rk , 3.5_rk , 1.1_rk ], nearest_Xg , nearest_Xt , id ) print '(a,1x,g0,2x,g0,2x,g0,a,2x,g0,2x,g0,2x,g0,2x,a,1x,g0)' ,& 'Nearest point on the volume:' , nearest_Xg , ' with parametric coordinates:' , nearest_Xt , ' and id:' , id !----------------------------------------------------------------------------- ! Nearest point on the volume (Optimization) !----------------------------------------------------------------------------- !> Find the nearest point on the volume to a given point !> The optimization method is used to find the nearest point !> The optimization method is based on the Newton-Raphson method ! nearest_Xt: Corresponding parametric coordinates of the nearest point ! nearest_Xg: Coordinates of the nearest point on the volume (optional) call shape % nearest_point2 ([ 1.5_rk , 3.5_rk , 1.1_rk ], 1.0e-11_rk , 500 , nearest_Xt , nearest_Xg ) print '(a,1x,g0,2x,g0,2x,g0,a,2x,g0,2x,g0,2x,g0)' ,& 'Nearest point on the volume:' , nearest_Xg , ' with parametric coordinates:' , nearest_Xt !----------------------------------------------------------------------------- ! Finalizing !----------------------------------------------------------------------------- !> Finalize the NURBS volume object call shape % finalize () ! deallocate(nearest_Xg, nearest_Xt) end program","tags":"","loc":"sourcefile/nearest_point_3d.f90.html"},{"title":"example_ppm1.f90 – ForCAD","text":"This file depends on sourcefile~~example_ppm1.f90~~EfferentGraph sourcefile~example_ppm1.f90 example_ppm1.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~example_ppm1.f90->sourcefile~forcad.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_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 !> Visualization of NURBS surfaces using ForCAD, ForImage and ForColorMap libraries !> This example converts NURBS surfaces (vector) to an image (raster) using ForCAD, ForImage and ForColorMap libraries. program example_ppm1 use forcad , only : rk , nurbs_surface use forimage , only : ik , format_pnm , color use forcolormap , only : colormap use fortime , only : timer implicit none type ( nurbs_surface ) :: shape type ( format_pnm ) :: image type ( color ) :: background_color type ( colormap ) :: cmap integer ( ik ), allocatable :: px (:, :) real ( rk ), allocatable :: Xg (:,:), z_values (:) real ( rk ) :: center ( 3 ), inner_radius , outer_radius , aspect_ratio integer :: height , width , ng ( 2 ), red , green , blue , res1 , res2 , i integer , allocatable :: idx (:,:) type ( timer ) :: t !----------------------------------------------------------------------------- ! Set the image size and calculate the aspect ratio !----------------------------------------------------------------------------- width = 2000 height = 2000 aspect_ratio = real ( width , rk ) / real ( height , rk ) allocate ( px ( height , 3 * width )) !----------------------------------------------------------------------------- ! Set the background color using ForColor class of ForImage !----------------------------------------------------------------------------- call t % timer_start () call background_color % set ( 'white' , use_library = . true .) do i = 1 , width px (:, 3 * ( i - 1 ) + 1 ) = background_color % get_r () px (:, 3 * ( i - 1 ) + 2 ) = background_color % get_g () px (:, 3 * ( i - 1 ) + 3 ) = background_color % get_b () end do call t % timer_stop ( message = 'Setting the background color' ) !----------------------------------------------------------------------------- ! Set a shape object using ForCAD library !----------------------------------------------------------------------------- call t % timer_start () !> Set the shape parameters for a tetragon res1 = 2000 res2 = 2000 call shape % set_tetragon ( L = [ 1.0_rk , 1.0_rk ], nc = [ 2 , 2 ]) call shape % create ( res1 , res2 ) Xg = shape % get_Xg () ng = shape % get_ng () call shape % finalize () call t % timer_stop ( message = 'Creating a tetragon' ) !----------------------------------------------------------------------------- ! Set the z-values of the geometry points !----------------------------------------------------------------------------- ! circular gradient z_values = (( Xg (:, 1 ) - minval ( Xg (:, 1 ))) / ( maxval ( Xg (:, 1 )) - minval ( Xg (:, 1 )))) ** 2 & + (( Xg (:, 2 ) - minval ( Xg (:, 2 ))) / ( maxval ( Xg (:, 2 )) - minval ( Xg (:, 2 ))) ** 2 ) !----------------------------------------------------------------------------- ! Set the colormap using ForColorMap library !----------------------------------------------------------------------------- call cmap % set ( 'buda' , 0.0_rk , 1.0_rk ) !----------------------------------------------------------------------------- ! Set colors to the shape !----------------------------------------------------------------------------- call t % timer_start () Xg (:, 2 ) = Xg (:, 2 ) * aspect_ratio allocate ( idx ( ng ( 1 ) * ng ( 2 ), 2 )) idx (:, 1 ) = min ( max ( 1 , int ( Xg (:, 1 ) * width ) + 1 ), width ) idx (:, 2 ) = min ( max ( 1 , int ( Xg (:, 2 ) * height ) + 1 ), height ) do i = 1 , ng ( 1 ) * ng ( 2 ) call cmap % compute_RGB ( z_values ( i ), red , green , blue ) px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 1 ) = red px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 2 ) = green px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 3 ) = blue end do deallocate ( idx ) call t % timer_stop ( message = 'Setting colors' ) !----------------------------------------------------------------------------- ! Set a shape object using ForCAD library !----------------------------------------------------------------------------- call t % timer_start () !> Set the shape parameters for a ring center = [ 0.25_rk , 0.25_rk , 0.0_rk ] outer_radius = 0.24_rk inner_radius = 0.0_rk res1 = 3500 res2 = 1000 center ( 2 ) = center ( 2 ) / aspect_ratio call shape % set_ring ( center , inner_radius , outer_radius ) call shape % create ( res1 , res2 ) Xg = shape % get_Xg () ng = shape % get_ng () call shape % finalize () call t % timer_stop ( message = 'Creating a ring' ) !----------------------------------------------------------------------------- ! Set the z-values of the geometry points !----------------------------------------------------------------------------- ! circular gradient z_values = (( Xg (:, 1 ) - minval ( Xg (:, 1 ))) / ( maxval ( Xg (:, 1 )) - minval ( Xg (:, 1 )))) ** 2 & + (( Xg (:, 2 ) - minval ( Xg (:, 2 ))) / ( maxval ( Xg (:, 2 )) - minval ( Xg (:, 2 ))) ** 2 ) !----------------------------------------------------------------------------- ! Set the colormap using ForColorMap library !----------------------------------------------------------------------------- call cmap % set ( 'managua' , 0.0_rk , 2.2_rk ) !----------------------------------------------------------------------------- ! Set colors to the shape !----------------------------------------------------------------------------- call t % timer_start () Xg (:, 2 ) = Xg (:, 2 ) * aspect_ratio allocate ( idx ( ng ( 1 ) * ng ( 2 ), 2 )) idx (:, 1 ) = min ( max ( 1 , int ( Xg (:, 1 ) * width ) + 1 ), width ) idx (:, 2 ) = min ( max ( 1 , int ( Xg (:, 2 ) * height ) + 1 ), height ) do i = 1 , ng ( 1 ) * ng ( 2 ) call cmap % compute_RGB ( z_values ( i ), red , green , blue ) px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 1 ) = red px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 2 ) = green px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 3 ) = blue end do deallocate ( idx ) call t % timer_stop ( message = 'Setting colors' ) !----------------------------------------------------------------------------- ! Set a shape object using ForCAD library !----------------------------------------------------------------------------- call t % timer_start () !> Set the shape parameters for a ring center = [ 0.75_rk , 0.25_rk , 0.0_rk ] outer_radius = 0.24_rk inner_radius = 0.08_rk res1 = 3500 res2 = 1000 center ( 2 ) = center ( 2 ) / aspect_ratio call shape % set_ring ( center , inner_radius , outer_radius ) call shape % create ( res1 , res2 ) Xg = shape % get_Xg () ng = shape % get_ng () call shape % finalize () call t % timer_stop ( message = 'Creating a ring' ) !----------------------------------------------------------------------------- ! Set the z-values of the geometry points !----------------------------------------------------------------------------- ! linear gradient in the y-direction z_values = ( Xg (:, 2 ) - minval ( Xg (:, 2 ))) / ( maxval ( Xg (:, 2 )) - minval ( Xg (:, 2 ))) !----------------------------------------------------------------------------- ! Set the colormap using ForColorMap library !----------------------------------------------------------------------------- call cmap % set ( 'lipari' , 0.0_rk , 1.0_rk ) !----------------------------------------------------------------------------- ! Set colors to the shape !----------------------------------------------------------------------------- call t % timer_start () Xg (:, 2 ) = Xg (:, 2 ) * aspect_ratio allocate ( idx ( ng ( 1 ) * ng ( 2 ), 2 )) idx (:, 1 ) = min ( max ( 1 , int ( Xg (:, 1 ) * width ) + 1 ), width ) idx (:, 2 ) = min ( max ( 1 , int ( Xg (:, 2 ) * height ) + 1 ), height ) do i = 1 , ng ( 1 ) * ng ( 2 ) call cmap % compute_RGB ( z_values ( i ), red , green , blue ) px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 1 ) = red px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 2 ) = green px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 3 ) = blue end do deallocate ( idx ) call t % timer_stop ( message = 'Setting colors' ) !----------------------------------------------------------------------------- ! Set a shape object using ForCAD library !----------------------------------------------------------------------------- call t % timer_start () !> Set the shape parameters for a ring center = [ 0.25_rk , 0.75_rk , 0.0_rk ] outer_radius = 0.24_rk inner_radius = 0.01_rk res1 = 3500 res2 = 1000 center ( 2 ) = center ( 2 ) / aspect_ratio call shape % set_ring ( center , inner_radius , outer_radius ) call shape % create ( res1 , res2 ) Xg = shape % get_Xg () ng = shape % get_ng () call shape % finalize () call t % timer_stop ( message = 'Creating a ring' ) !----------------------------------------------------------------------------- ! Set the z-values of the geometry points !----------------------------------------------------------------------------- ! linear gradient in the x-direction z_values = ( Xg (:, 1 ) - minval ( Xg (:, 1 ))) / ( maxval ( Xg (:, 1 )) - minval ( Xg (:, 1 ))) !----------------------------------------------------------------------------- ! Set the colormap using ForColorMap library !----------------------------------------------------------------------------- call cmap % set ( 'oslo10' , 0.0_rk , 1.0_rk ) !----------------------------------------------------------------------------- ! Set colors to the shape !----------------------------------------------------------------------------- call t % timer_start () Xg (:, 2 ) = Xg (:, 2 ) * aspect_ratio allocate ( idx ( ng ( 1 ) * ng ( 2 ), 2 )) idx (:, 1 ) = min ( max ( 1 , int ( Xg (:, 1 ) * width ) + 1 ), width ) idx (:, 2 ) = min ( max ( 1 , int ( Xg (:, 2 ) * height ) + 1 ), height ) do i = 1 , ng ( 1 ) * ng ( 2 ) call cmap % compute_RGB ( z_values ( i ), red , green , blue ) px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 1 ) = red px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 2 ) = green px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 3 ) = blue end do deallocate ( idx ) call t % timer_stop ( message = 'Setting colors' ) !----------------------------------------------------------------------------- ! Set a shape object using ForCAD library !----------------------------------------------------------------------------- call t % timer_start () !> Set the shape parameters for a ring center = [ 0.75_rk , 0.75_rk , 0.0_rk ] outer_radius = 0.24_rk inner_radius = 0.22_rk res1 = 3500 res2 = 1000 center ( 2 ) = center ( 2 ) / aspect_ratio call shape % set_ring ( center , inner_radius , outer_radius ) call shape % create ( res1 , res2 ) Xg = shape % get_Xg () ng = shape % get_ng () call shape % finalize () call t % timer_stop ( message = 'Creating a ring' ) !----------------------------------------------------------------------------- ! Set the z-values of the geometry points !----------------------------------------------------------------------------- ! linear gradient in the x-direction z_values = ( Xg (:, 1 ) - minval ( Xg (:, 1 ))) / ( maxval ( Xg (:, 1 )) - minval ( Xg (:, 1 ))) !----------------------------------------------------------------------------- ! Set the colormap using ForColorMap library !----------------------------------------------------------------------------- red = 255 green = 215 blue = 0 !----------------------------------------------------------------------------- ! Set colors to the shape !----------------------------------------------------------------------------- call t % timer_start () Xg (:, 2 ) = Xg (:, 2 ) * aspect_ratio allocate ( idx ( ng ( 1 ) * ng ( 2 ), 2 )) idx (:, 1 ) = min ( max ( 1 , int ( Xg (:, 1 ) * width ) + 1 ), width ) idx (:, 2 ) = min ( max ( 1 , int ( Xg (:, 2 ) * height ) + 1 ), height ) do i = 1 , ng ( 1 ) * ng ( 2 ) px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 1 ) = red px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 2 ) = green px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 3 ) = blue end do deallocate ( idx ) call t % timer_stop ( message = 'Setting colors' ) !----------------------------------------------------------------------------- ! Save the image to a PPM file using ForImage library !----------------------------------------------------------------------------- call t % timer_start () call image % set_pnm (& encoding = 'binary' , & file_format = 'ppm' , & width = width , & height = height , & max_color = 255 , & comment = 'example: ForCAD + ForImage + ForColor + ForColormap' , & pixels = px & ) call image % export_pnm ( 'ppm/example_ppm1' ) call image % finalize () call t % timer_stop ( message = 'Saving the image' ) ! Clean up call cmap % finalize () deallocate ( px , Xg , z_values ) end program","tags":"","loc":"sourcefile/example_ppm1.f90.html"},{"title":"nearest_point_2d.f90 – ForCAD","text":"This file depends on sourcefile~~nearest_point_2d.f90~~EfferentGraph sourcefile~nearest_point_2d.f90 nearest_point_2d.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~nearest_point_2d.f90->sourcefile~forcad.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_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 program nearest_point_2d use forcad , only : rk , nurbs_surface implicit none type ( nurbs_surface ) :: shape !! Declare a NURBS surface object real ( rk ), allocatable :: nearest_Xg (:) !! Coordinates of the nearest point on the surface real ( rk ), allocatable :: nearest_Xt (:) !! Corresponding parametric coordinates of the nearest point integer :: id !! id of the nearest point real ( rk ) :: Xc ( 4 , 3 ) !! Control points real ( rk ) :: Wc ( 4 ) !! Weights of the control points !----------------------------------------------------------------------------- ! Setting up the NURBS tetrangon !----------------------------------------------------------------------------- !> Set a surface with 4 control points Xc ( 1 ,:) = [ 0.0_rk , 0.0_rk , 0.0_rk ] Xc ( 2 ,:) = [ 2.0_rk , 0.0_rk , 0.0_rk ] Xc ( 3 ,:) = [ 0.0_rk , 2.0_rk , 0.0_rk ] Xc ( 4 ,:) = [ 2.0_rk , 2.0_rk , 0.0_rk ] !> The weights of the control points (Wc) are optional. Wc = [ 1.0_rk , 1.1_rk , 0.7_rk , 1.0_rk ] call shape % set ( 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 ], Xc = Xc , Wc = Wc ) !----------------------------------------------------------------------------- ! Creating the NURBS surface !----------------------------------------------------------------------------- !> Generate the NURBS surface with resolutions of 30 in both dimensions call shape % create ( 30 , 30 ) !----------------------------------------------------------------------------- ! Nearest point on the surface (Approximation) !----------------------------------------------------------------------------- !> Find the nearest point on the surface to a given point ! nearest_Xg: Coordinates of the nearest point on the surface (optional) ! nearest_Xt: Corresponding parametric coordinates of the nearest point (optional) ! id: id of the nearest point (optional) call shape % nearest_point ([ 1.3_rk , 1.0_rk , 1.999999999_rk ], nearest_Xg , nearest_Xt , id ) print '(a,1x,g0,2x,g0,2x,g0,a,2x,g0,2x,g0,2x,a,1x,g0)' ,& 'Nearest point on the surface:' , nearest_Xg , ' with parametric coordinates:' , nearest_Xt , ' and id:' , id !----------------------------------------------------------------------------- ! Nearest point on the surface (Optimization) !----------------------------------------------------------------------------- !> Find the nearest point on the surface to a given point !> The optimization method is used to find the nearest point !> The optimization method is based on the Newton-Raphson method ! nearest_Xt: Corresponding parametric coordinates of the nearest point ! nearest_Xg: Coordinates of the nearest point on the surface (optional) call shape % nearest_point2 ([ 1.3_rk , 1.0_rk , 1.999999999_rk ], 1.0e-11_rk , 30 , nearest_Xt , nearest_Xg ) print '(a,1x,g0,2x,g0,2x,g0,a,2x,g0,2x,g0)' ,& 'Nearest point on the surface:' , nearest_Xg , ' with parametric coordinates:' , nearest_Xt !----------------------------------------------------------------------------- ! Finalizing !----------------------------------------------------------------------------- !> Finalize the NURBS surface object call shape % finalize () ! deallocate(nearest_Xg, nearest_Xt) end program","tags":"","loc":"sourcefile/nearest_point_2d.f90.html"}]} \ No newline at end of file +var tipuesearch = {"pages":[{"title":" ForCAD ","text":"ForCAD ForCAD : A parallel Fortran library for geometric modeling using NURBS (Non-Uniform Rational B-Splines). ForCAD supports B-Spline , NURBS , Bezier , and Rational Bezier curves, surfaces, and volumes. Main Features Parallelized using OpenMP and do concurrent . Create NURBS objects by specifying control points, weights and knots. Refine NURBS objects by inserting or removing knots and elevating degree. Compute basis functions and derivatives of NURBS objects. Obtain IGA elements connectivity. Obtain visualized elements connectivity and coordinates for geometry and control geometry. Mesh insertion into a NURBS object. Export NURBS objects to VTK files for visualization. Includes predefined NURBS shapes: Circle, Half Circle, Tetragon, Hexahedron, 2D Ring, Half 2D Ring, 3D Ring, Half 3D Ring, C-shapes. Rotate and translate NURBS objects. Visualization using provided python PyVista scripts. Examples Installation Requirements A Fortran compiler, such as GNU Fortran ( gfortran ), Intel Fortran Compiler ( ifx/ifort ) or NVIDIA HPC SDK Fortran compiler ( nvfortran ). The Fortran Package Manager fpm . Optional: PyVista (Recommended) or ParaView for visualization. Clone the repository Clone the ForCAD repository from GitHub: git clone https://github.com/gha3mi/forcad.git cd forcad Install PyVista (Optional) To install PyVista, run the following command: pip install pyvista Running Examples with fpm fpm run --example After executing the examples, .vtk files will be generated in the vtk directory. To visualize these files, a show() method is provided which utilizes PyVista. Alternatively, other visualization tools like ParaView can also be used. Using ForCAD as a 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\" } 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 Roadmap For a detailed roadmap outlining upcoming features and enhancements, please refer to ROADMAP.md . Contributing To contribute to ForCAD, please review the CONTRIBUTING.md . Citation If you use ForCAD in your research, please cite it as follows: @software { seyed_ali_ghasemi_2024_10904447 , author = {Ghasemi, S. A.} , title = {gha3mi/ForCAD} , year = 2024 , publisher = {Zenodo} , doi = {10.5281/zenodo.10904447} , url = {https://doi.org/10.5281/zenodo.10904447} } References Piegl, L., & Tiller, W. (1995). The NURBS Book. In Monographs in Visual Communications. Springer Berlin Heidelberg. https://doi.org/10.1007/978-3-642-97385-7 An Introduction to NURBS. (2001). Elsevier. https://doi.org/10.1016/b978-1-55860-669-2.x5000-3 Sullivan et al., (2019). PyVista: 3D plotting and mesh analysis through a streamlined interface for the Visualization Toolkit (VTK). Journal of Open Source Software, 4(37), 1450, https://doi.org/10.21105/joss.01450 Ahrens, James, Geveci, Berk, Law, Charles, ParaView: An End-User Tool for Large Data Visualization, Visualization Handbook, Elsevier, 2005, ISBN-13: 9780123875822 Developer Info Seyed Ali Ghasemi","tags":"home","loc":"index.html"},{"title":"nurbs_volume – ForCAD ","text":"type, public :: nurbs_volume Components Type Visibility Attributes Name Initial real(kind=rk), private, allocatable :: Wc (:) Weights for the control points (1D array: [nc(1) nc(2) nc(3)]) real(kind=rk), private, allocatable :: Xc (:,:) Control points (2D array: [nc(1) nc(2) nc(3), dim]) real(kind=rk), private, allocatable :: Xg (:,:) Geometry points (2D array: [ng(1) ng(2) ng(3), dim]) real(kind=rk), private, allocatable :: Xt (:,:) Evaluation parameter values (2D array: [ng(1) ng(2) ng(3), dim] real(kind=rk), private, allocatable :: Xt1 (:) Evaluation parameter values in the first direction (1D array: [ng(1)]) real(kind=rk), private, allocatable :: Xt2 (:) Evaluation parameter values in the second direction (1D array: [ng(2)]) real(kind=rk), private, allocatable :: Xt3 (:) Evaluation parameter values in the third direction (1D array: [ng(3)]) integer, private :: degree (3) Degree (order) of the volume integer, private, allocatable :: elemConn (:,:) IGA element connectivity integer, private, allocatable :: elemConn_Xc_vis (:,:) Connectivity for visualization of control points integer, private, allocatable :: elemConn_Xg_vis (:,:) Connectivity for visualization of geometry points real(kind=rk), private, allocatable :: knot1 (:) Knot vector in the first direction (1D array) real(kind=rk), private, allocatable :: knot2 (:) Knot vector in the second direction (1D array) real(kind=rk), private, allocatable :: knot3 (:) Knot vector in the third direction (1D array) 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 generic, public :: basis => basis_vector , basis_scalar Compute the basis functions of the NURBS volume private pure subroutine basis_vector (this, res1, res2, res3, Xt1, Xt2, Xt3, Tgc) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(in), optional, contiguous :: Xt3 (:) real(kind=rk), intent(out), allocatable :: Tgc (:,:) private pure subroutine basis_scalar (this, Xt, Tgc) 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), contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: Tgc (:) procedure, public :: cmp_Xg Compute geometry points private pure function cmp_Xg (this, Xt) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this real(kind=rk), intent(in), contiguous :: Xt (:) Return Value real(kind=rk), allocatable, (:) procedure, public :: cmp_degree Compute degree of the NURBS volume private pure subroutine cmp_degree (this, dir) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), optional :: dir procedure, public :: cmp_degreeFace Compute degrees of the faces private pure function cmp_degreeFace (this, face) result(degree) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: face Return Value integer, (3) procedure, public :: cmp_elem Generate IGA element connectivity private pure function cmp_elem (this) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value integer, allocatable, (:,:) procedure, public :: cmp_elemFace Compute faces of the IGA elements private pure function cmp_elemFace (this, elem, face) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause number of nodes in each direction Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: elem integer, intent(in) :: face Return Value integer, allocatable, (:) procedure, public :: cmp_elemFace_Xc_vis Compute faces of the control points private pure function cmp_elemFace_Xc_vis (this, elem, face) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause number of nodes in each direction Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: elem integer, intent(in) :: face Return Value integer, allocatable, (:) procedure, public :: cmp_elemFace_Xg_vis Compute faces of the geometry points private pure function cmp_elemFace_Xg_vis (this, elem, face) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause number of nodes in each direction Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: elem integer, intent(in) :: face Return Value integer, allocatable, (:) procedure, public :: cmp_elem_Xc_vis Generate connectivity for control points private pure function cmp_elem_Xc_vis (this, p) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in), optional, contiguous :: p (:) Return Value integer, allocatable, (:,:) procedure, public :: cmp_elem_Xg_vis Generate connectivity for geometry points private pure function cmp_elem_Xg_vis (this, p) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in), optional, contiguous :: p (:) Return Value integer, allocatable, (:,:) procedure, public :: cmp_nc Compute number of required control points private pure subroutine cmp_nc (this, dir) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), optional :: dir procedure, public :: create Generate geometry points private pure subroutine create (this, res1, res2, res3, Xt1, Xt2, Xt3, Xt) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(in), optional, contiguous :: Xt3 (:) real(kind=rk), intent(in), optional, contiguous :: Xt (:,:) generic, public :: derivative => derivative_vector , derivative_scalar Compute the derivative of the NURBS volume private pure subroutine derivative_vector (this, res1, res2, res3, Xt1, Xt2, Xt3, dTgc, Tgc) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(in), optional, contiguous :: Xt3 (:) real(kind=rk), intent(out), allocatable :: dTgc (:,:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:,:) private pure subroutine derivative_scalar (this, Xt, dTgc, Tgc) 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), contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: dTgc (:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:) generic, public :: derivative2 => derivative2_vector , derivative2_scalar Compute the second derivative of the NURBS volume private pure subroutine derivative2_vector (this, res1, res2, res3, Xt1, Xt2, Xt3, d2Tgc, dTgc, Tgc) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(in), optional, contiguous :: Xt3 (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:,:) real(kind=rk), intent(out), optional, allocatable :: dTgc (:,:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:,:) private pure subroutine derivative2_scalar (this, Xt, d2Tgc, dTgc, Tgc) 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), contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:) real(kind=rk), intent(out), optional, allocatable :: dTgc (:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:) procedure, public :: elevate_degree Elevate the degree of the NURBS volume private pure subroutine elevate_degree (this, dir, t) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in) :: dir integer, intent(in) :: t 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 volume 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 generic, public :: get_Wc => get_Wc_all , get_Wci Get weights private pure function get_Wc_all (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_Wci (this, n) result(Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk) generic, public :: get_Xc => get_Xc_all , get_Xci , get_Xcid Get control points private pure function get_Xc_all (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_Xci (this, n) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk), allocatable, (:) private pure function get_Xcid (this, n, dir) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: n integer, intent(in) :: dir Return Value real(kind=rk) generic, public :: get_Xg => get_Xg_all , get_Xgi , get_Xgid Get geometry points private pure function get_Xg_all (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_Xgi (this, n) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk), allocatable, (:) private pure function get_Xgid (this, n, dir) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: n integer, intent(in) :: dir Return Value real(kind=rk) 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 Compute and return the continuity of the NURBS volume 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, (:) generic, public :: get_degree => get_degree_all , get_degree_dir Get degree of the NURBS volume private pure function get_degree_all (this) result(degree) 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_degree_dir (this, dir) result(degree) 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_elem Get IGA element connectivity private pure function get_elem (this) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value integer, allocatable, (:,:) procedure, public :: get_elem_Xc_vis Get connectivity for control points private pure function get_elem_Xc_vis (this) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value integer, allocatable, (:,:) procedure, public :: get_elem_Xg_vis Get connectivity for geometry points private pure function get_elem_Xg_vis (this) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value integer, allocatable, (:,:) generic, public :: get_knot => get_knoti , get_knot_all Get knot vector private pure function get_knoti (this, dir, i) 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 integer, intent(in) :: i Return Value real(kind=rk) private pure function get_knot_all (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 Compute and return the multiplicity of the knots 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_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 :: insert_knots Insert knots into the knot vector private pure subroutine insert_knots (this, dir, Xth, r) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in) :: dir real(kind=rk), intent(in), contiguous :: Xth (:) integer, intent(in), contiguous :: r (:) procedure, public :: is_rational Check if the NURBS volume is rational private pure function is_rational (this) result(r) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value logical 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 procedure, public :: nearest_point Find the nearest point on the NURBS volume (Approximation) private pure subroutine nearest_point (this, point_Xg, nearest_Xg, nearest_Xt, id) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this real(kind=rk), intent(in) :: point_Xg (:) real(kind=rk), intent(out), optional, allocatable :: nearest_Xg (:) real(kind=rk), intent(out), optional, allocatable :: nearest_Xt (:) integer, intent(out), optional :: id procedure, public :: nearest_point2 Find the nearest point on the NURBS volume (Minimization - Newton's method) private impure subroutine nearest_point2 (this, point_Xg, tol, maxit, nearest_Xt, nearest_Xg) 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) :: point_Xg (:) real(kind=rk), intent(in) :: tol integer, intent(in) :: maxit real(kind=rk), intent(out) :: nearest_Xt (3) real(kind=rk), intent(out), optional, allocatable :: nearest_Xg (:) procedure, public :: put_to_nurbs Put a shape to a NURBS volume private pure subroutine put_to_nurbs (this, X, elemConn) 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), contiguous :: X (:,:) integer, intent(in), contiguous :: elemConn (:,:) procedure, public :: remove_knots Remove knots from the knot vector private pure subroutine remove_knots (this, dir, Xth, r) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in) :: dir real(kind=rk), intent(in), contiguous :: Xth (:) integer, intent(in), contiguous :: r (:) procedure, public :: rotate_Xc Rotate control points private pure subroutine rotate_Xc (this, alpha, beta, theta) 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) :: alpha real(kind=rk), intent(in) :: beta real(kind=rk), intent(in) :: theta procedure, public :: rotate_Xg Rotate geometry points private pure subroutine rotate_Xg (this, alpha, beta, theta) 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) :: alpha real(kind=rk), intent(in) :: beta real(kind=rk), intent(in) :: theta generic, public :: set => set1 , set2 , set3 Set NURBS volume 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 volume object. Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) real(kind=rk), intent(in), contiguous :: knot3 (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) private pure subroutine set2 (this, Xth_dir1, Xth_dir2, Xth_dir3, degree, continuity1, continuity2, continuity3, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the NURBS volume object. Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: Xth_dir1 (:) real(kind=rk), intent(in), contiguous :: Xth_dir2 (:) real(kind=rk), intent(in), contiguous :: Xth_dir3 (:) integer, intent(in), contiguous :: degree (:) integer, intent(in), contiguous :: continuity1 (:) integer, intent(in), contiguous :: continuity2 (:) integer, intent(in), contiguous :: continuity3 (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) private pure subroutine set3 (this, nc, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set Bezier or Rational Bezier volume using control points and weights. Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), contiguous :: nc (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) procedure, public :: set1 Set knot vectors, control points and weights for the NURBS volume object 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 volume object. Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) real(kind=rk), intent(in), contiguous :: knot3 (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) procedure, public :: set2 Set NURBS volume using nodes of parameter space, degree, continuity, control points and weights private pure subroutine set2 (this, Xth_dir1, Xth_dir2, Xth_dir3, degree, continuity1, continuity2, continuity3, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the NURBS volume object. Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: Xth_dir1 (:) real(kind=rk), intent(in), contiguous :: Xth_dir2 (:) real(kind=rk), intent(in), contiguous :: Xth_dir3 (:) integer, intent(in), contiguous :: degree (:) integer, intent(in), contiguous :: continuity1 (:) integer, intent(in), contiguous :: continuity2 (:) integer, intent(in), contiguous :: continuity3 (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) procedure, public :: set3 Set Bezier or Rational Bezier volume using control points and weights private pure subroutine set3 (this, nc, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set Bezier or Rational Bezier volume using control points and weights. Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), contiguous :: nc (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) procedure, public :: set_C Set a C-shape private pure subroutine set_C (this, center, radius1, radius2, length) 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), contiguous :: center (:) real(kind=rk), intent(in) :: radius1 real(kind=rk), intent(in) :: radius2 real(kind=rk), intent(in) :: length procedure, public :: set_elem Set IGA element connectivity private pure subroutine set_elem (this, elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:) procedure, public :: set_elem_Xc_vis Set connectivity for control points private pure subroutine set_elem_Xc_vis (this, elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:) procedure, public :: set_elem_Xg_vis Set connectivity for geometry points private pure subroutine set_elem_Xg_vis (this, elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:) procedure, public :: set_half_ring Set a half ring private pure subroutine set_half_ring (this, center, radius1, radius2, length) 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), contiguous :: center (:) real(kind=rk), intent(in) :: radius1 real(kind=rk), intent(in) :: radius2 real(kind=rk), intent(in) :: length procedure, public :: set_hexahedron Set a hexahedron private pure subroutine set_hexahedron (this, L, nc, Wc) 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), contiguous :: L (:) integer, intent(in), contiguous :: nc (:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) procedure, public :: set_ring Set a ring private pure subroutine set_ring (this, center, radius1, radius2, length) 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), contiguous :: center (:) real(kind=rk), intent(in) :: radius1 real(kind=rk), intent(in) :: radius2 real(kind=rk), intent(in) :: length procedure, public :: show Show the NURBS object using PyVista private impure subroutine show (this, vtkfile_Xc, vtkfile_Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this character(len=*), intent(in) :: vtkfile_Xc character(len=*), intent(in) :: vtkfile_Xg procedure, public :: translate_Xc Translate control points private pure subroutine translate_Xc (this, vec) 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) :: vec (:) procedure, public :: translate_Xg Translate geometry points private pure subroutine translate_Xg (this, vec) 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) :: vec (:) procedure, private :: basis_scalar Compute the basis functions of the NURBS volume private pure subroutine basis_scalar (this, Xt, Tgc) 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), contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: Tgc (:) procedure, private :: basis_vector Compute the basis functions of the NURBS volume private pure subroutine basis_vector (this, res1, res2, res3, Xt1, Xt2, Xt3, Tgc) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(in), optional, contiguous :: Xt3 (:) real(kind=rk), intent(out), allocatable :: Tgc (:,:) procedure, private :: derivative2_scalar Compute the second derivative of the NURBS volume private pure subroutine derivative2_scalar (this, Xt, d2Tgc, dTgc, Tgc) 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), contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:) real(kind=rk), intent(out), optional, allocatable :: dTgc (:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:) procedure, private :: derivative2_vector Compute the second derivative of the NURBS volume private pure subroutine derivative2_vector (this, res1, res2, res3, Xt1, Xt2, Xt3, d2Tgc, dTgc, Tgc) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(in), optional, contiguous :: Xt3 (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:,:) real(kind=rk), intent(out), optional, allocatable :: dTgc (:,:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:,:) procedure, private :: derivative_scalar Compute the derivative of the NURBS volume private pure subroutine derivative_scalar (this, Xt, dTgc, Tgc) 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), contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: dTgc (:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:) procedure, private :: derivative_vector Compute the derivative of the NURBS volume private pure subroutine derivative_vector (this, res1, res2, res3, Xt1, Xt2, Xt3, dTgc, Tgc) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(in), optional, contiguous :: Xt3 (:) real(kind=rk), intent(out), allocatable :: dTgc (:,:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:,:) procedure, private :: get_Wc_all Get all weights private pure function get_Wc_all (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, private :: get_Wci Get i-th weight private pure function get_Wci (this, n) result(Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk) procedure, private :: get_Xc_all Get all control points private pure function get_Xc_all (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, private :: get_Xci Get i-th control point private pure function get_Xci (this, n) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk), allocatable, (:) procedure, private :: get_Xcid Get i-th control point in a specific direction private pure function get_Xcid (this, n, dir) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: n integer, intent(in) :: dir Return Value real(kind=rk) procedure, private :: get_Xg_all Get all geometry points private pure function get_Xg_all (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, private :: get_Xgi Get i-th geometry point private pure function get_Xgi (this, n) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk), allocatable, (:) procedure, private :: get_Xgid Get i-th geometry point in a specific direction private pure function get_Xgid (this, n, dir) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: n integer, intent(in) :: dir Return Value real(kind=rk) procedure, private :: get_degree_all Get degree of the NURBS volume in all directions private pure function get_degree_all (this) result(degree) 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, private :: get_degree_dir Get degree of the NURBS volume in a specific direction private pure function get_degree_dir (this, dir) result(degree) 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, private :: get_knot_all Get all knot vectors private pure function get_knot_all (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, private :: get_knoti Get i-th knot value private pure function get_knoti (this, dir, i) 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 integer, intent(in) :: i Return Value real(kind=rk)","tags":"","loc":"type/nurbs_volume.html"},{"title":"nurbs_surface – ForCAD ","text":"type, public :: nurbs_surface Components Type Visibility Attributes Name Initial real(kind=rk), private, allocatable :: Wc (:) Weights for control points (1D array: [nc(1)*nc(2)]) real(kind=rk), private, allocatable :: Xc (:,:) Control points (2D array: [nc(1)*nc(2), dim]) real(kind=rk), private, allocatable :: Xg (:,:) Geometry points (2D array: [ng(1)*ng(2), dim]) real(kind=rk), private, allocatable :: Xt (:,:) Evaluation parameter values (2D array: [ng(1)*ng(2), 2]) real(kind=rk), private, allocatable :: Xt1 (:) Evaluation parameter values in the first direction (1D array: [ng(1)]) real(kind=rk), private, allocatable :: Xt2 (:) Evaluation parameter values in the second direction (1D array: [ng(2)]) integer, private :: degree (2) Degree (order) of the surface integer, private, allocatable :: elemConn (:,:) IGA element connectivity integer, private, allocatable :: elemConn_Xc_vis (:,:) Connectivity for visualization of control points integer, private, allocatable :: elemConn_Xg_vis (:,:) Connectivity for visualization of geometry points real(kind=rk), private, allocatable :: knot1 (:) Knot vector in the first direction (1D array) real(kind=rk), private, allocatable :: knot2 (:) Knot vector in the second direction (1D array) 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 generic, public :: basis => basis_vector , basis_scalar Compute the basis functions of the NURBS surface private pure subroutine basis_vector (this, res1, res2, Xt1, Xt2, Tgc) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(out), allocatable :: Tgc (:,:) private pure subroutine basis_scalar (this, Xt, Tgc) 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) :: Xt (:) real(kind=rk), intent(out), allocatable :: Tgc (:) procedure, public :: cmp_Xg Compute geometry points private pure function cmp_Xg (this, Xt) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this real(kind=rk), intent(in), contiguous :: Xt (:) Return Value real(kind=rk), allocatable, (:) procedure, public :: cmp_degree Compute degree of the NURBS surface private pure subroutine cmp_degree (this, dir) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), optional :: dir procedure, public :: cmp_elem Generate IGA element connectivity private pure function cmp_elem (this) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value integer, allocatable, (:,:) procedure, public :: cmp_elem_Xc_vis Generate connectivity for control points private pure function cmp_elem_Xc_vis (this, p) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in), optional, contiguous :: p (:) Return Value integer, allocatable, (:,:) procedure, public :: cmp_elem_Xg_vis Generate connectivity for geometry points private pure function cmp_elem_Xg_vis (this, p) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in), optional, contiguous :: p (:) Return Value integer, allocatable, (:,:) procedure, public :: cmp_nc Compute number of required control points private pure subroutine cmp_nc (this, dir) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), optional :: dir procedure, public :: create Generate geometry points private pure subroutine create (this, res1, res2, Xt1, Xt2, Xt) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(in), optional, contiguous :: Xt (:,:) generic, public :: derivative => derivative_vector , derivative_scalar Compute the derivative of the NURBS surface private pure subroutine derivative_vector (this, res1, res2, Xt1, Xt2, dTgc, Tgc) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(out), allocatable :: dTgc (:,:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:,:) private pure subroutine derivative_scalar (this, Xt, dTgc, Tgc) 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), contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: dTgc (:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:) generic, public :: derivative2 => derivative2_vector , derivative2_scalar Compute the second derivative of the NURBS surface private pure subroutine derivative2_vector (this, res1, res2, Xt1, Xt2, d2Tgc, dTgc, Tgc) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:,:) real(kind=rk), intent(out), optional, allocatable :: dTgc (:,:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:,:) private pure subroutine derivative2_scalar (this, Xt, d2Tgc, dTgc, Tgc) 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), contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:) real(kind=rk), intent(out), optional, allocatable :: dTgc (:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:) procedure, public :: elevate_degree Elevate degree private pure subroutine elevate_degree (this, dir, t) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in) :: dir integer, intent(in) :: t 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 generic, public :: get_Wc => get_Wc_all , get_Wci Get weights private pure function get_Wc_all (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_Wci (this, n) result(Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk) generic, public :: get_Xc => get_Xc_all , get_Xci , get_Xcid Get control points private pure function get_Xc_all (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_Xci (this, n) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk), allocatable, (:) private pure function get_Xcid (this, n, dir) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: n integer, intent(in) :: dir Return Value real(kind=rk) generic, public :: get_Xg => get_Xg_all , get_Xgi , get_Xgid Get geometry points private pure function get_Xg_all (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_Xgi (this, n) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk), allocatable, (:) private pure function get_Xgid (this, n, dir) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: n integer, intent(in) :: dir Return Value real(kind=rk) 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 Compute and return the continuity of the NURBS 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, (:) generic, public :: get_degree => get_degree_all , get_degree_dir Get degree of the NURBS surface private pure function get_degree_all (this) result(degree) 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_degree_dir (this, dir) result(degree) 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_elem Get IGA element connectivity private pure function get_elem (this) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value integer, allocatable, (:,:) procedure, public :: get_elem_Xc_vis Get connectivity for control points private pure function get_elem_Xc_vis (this) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value integer, allocatable, (:,:) procedure, public :: get_elem_Xg_vis Get connectivity for geometry points private pure function get_elem_Xg_vis (this) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value integer, allocatable, (:,:) generic, public :: get_knot => get_knoti , get_knot_all Get knot vector private pure function get_knoti (this, dir, i) 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 integer, intent(in) :: i Return Value real(kind=rk) private pure function get_knot_all (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 Compute and return the 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 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 :: insert_knots Insert knots into the knot vector private pure subroutine insert_knots (this, dir, Xth, r) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in) :: dir real(kind=rk), intent(in), contiguous :: Xth (:) integer, intent(in), contiguous :: r (:) procedure, public :: is_rational Check if the NURBS surface is rational private pure function is_rational (this) result(r) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value logical 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 procedure, public :: nearest_point Find the nearest point on the NURBS surface (Approximation) private pure subroutine nearest_point (this, point_Xg, nearest_Xg, nearest_Xt, id) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this real(kind=rk), intent(in) :: point_Xg (:) real(kind=rk), intent(out), optional, allocatable :: nearest_Xg (:) real(kind=rk), intent(out), optional, allocatable :: nearest_Xt (:) integer, intent(out), optional :: id procedure, public :: nearest_point2 Find the nearest point on the NURBS surface (Minimization - Newton's method) private impure subroutine nearest_point2 (this, point_Xg, tol, maxit, nearest_Xt, nearest_Xg) 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) :: point_Xg (:) real(kind=rk), intent(in) :: tol integer, intent(in) :: maxit real(kind=rk), intent(out) :: nearest_Xt (2) real(kind=rk), intent(out), optional, allocatable :: nearest_Xg (:) procedure, public :: remove_knots Remove knots from the knot vector private pure subroutine remove_knots (this, dir, Xth, r) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in) :: dir real(kind=rk), intent(in), contiguous :: Xth (:) integer, intent(in), contiguous :: r (:) procedure, public :: rotate_Xc Rotate control points private pure subroutine rotate_Xc (this, alpha, beta, theta) 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) :: alpha real(kind=rk), intent(in) :: beta real(kind=rk), intent(in) :: theta procedure, public :: rotate_Xg Rotate geometry points private pure subroutine rotate_Xg (this, alpha, beta, theta) 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) :: alpha real(kind=rk), intent(in) :: beta real(kind=rk), intent(in) :: theta generic, public :: set => set1 , set2 , set3 Set NURBS surface private pure subroutine set1 (this, knot1, knot2, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set knot vectors, 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), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) private pure subroutine set2 (this, Xth_dir1, Xth_dir2, degree, continuity1, continuity2, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set NURBS surface using nodes of parameter space, degree, continuity, control points and weights Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: Xth_dir1 (:) real(kind=rk), intent(in), contiguous :: Xth_dir2 (:) integer, intent(in), contiguous :: degree (:) integer, intent(in), contiguous :: continuity1 (:) integer, intent(in), contiguous :: continuity2 (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) private pure subroutine set3 (this, nc, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set Bezier or Rational Bezier surface using control points and weights. Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), contiguous :: nc (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) procedure, public :: set1 Set knot vectors, control points and weights for the NURBS surface object private pure subroutine set1 (this, knot1, knot2, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set knot vectors, 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), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) procedure, public :: set2 Set NURBS surface using nodes of parameter space, degree, continuity, control points and weights private pure subroutine set2 (this, Xth_dir1, Xth_dir2, degree, continuity1, continuity2, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set NURBS surface using nodes of parameter space, degree, continuity, control points and weights Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: Xth_dir1 (:) real(kind=rk), intent(in), contiguous :: Xth_dir2 (:) integer, intent(in), contiguous :: degree (:) integer, intent(in), contiguous :: continuity1 (:) integer, intent(in), contiguous :: continuity2 (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) procedure, public :: set3 Set Bezier or Rational Bezier surface using control points and weights private pure subroutine set3 (this, nc, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set Bezier or Rational Bezier surface using control points and weights. Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), contiguous :: nc (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) procedure, public :: set_C Set a C-shape private pure subroutine set_C (this, center, radius1, radius2) 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), contiguous :: center (:) real(kind=rk), intent(in) :: radius1 real(kind=rk), intent(in) :: radius2 procedure, public :: set_elem Set IGA element connectivity private pure subroutine set_elem (this, elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:) procedure, public :: set_elem_Xc_vis Set connectivity for control points private pure subroutine set_elem_Xc_vis (this, elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:) procedure, public :: set_elem_Xg_vis Set connectivity for geometry points private pure subroutine set_elem_Xg_vis (this, elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:) procedure, public :: set_half_ring Set a half ring private pure subroutine set_half_ring (this, center, radius1, radius2) 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), contiguous :: center (:) real(kind=rk), intent(in) :: radius1 real(kind=rk), intent(in) :: radius2 procedure, public :: set_ring Set a ring private pure subroutine set_ring (this, center, radius1, radius2) 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), contiguous :: center (:) real(kind=rk), intent(in) :: radius1 real(kind=rk), intent(in) :: radius2 procedure, public :: set_tetragon Set a tetragon private pure subroutine set_tetragon (this, L, nc, Wc) 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) :: L (2) integer, intent(in) :: nc (2) real(kind=rk), intent(in), optional, contiguous :: Wc (:) procedure, public :: show Show the NURBS object using PyVista private impure subroutine show (this, vtkfile_Xc, vtkfile_Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this character(len=*), intent(in) :: vtkfile_Xc character(len=*), intent(in) :: vtkfile_Xg procedure, public :: translate_Xc Translate control points private pure subroutine translate_Xc (this, vec) 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) :: vec (:) procedure, public :: translate_Xg Translate geometry points private pure subroutine translate_Xg (this, vec) 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) :: vec (:) procedure, private :: basis_scalar Compute the basis functions of the NURBS surface private pure subroutine basis_scalar (this, Xt, Tgc) 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) :: Xt (:) real(kind=rk), intent(out), allocatable :: Tgc (:) procedure, private :: basis_vector Compute the basis functions of the NURBS surface private pure subroutine basis_vector (this, res1, res2, Xt1, Xt2, Tgc) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(out), allocatable :: Tgc (:,:) procedure, private :: derivative2_scalar Compute the second derivative of the NURBS surface private pure subroutine derivative2_scalar (this, Xt, d2Tgc, dTgc, Tgc) 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), contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:) real(kind=rk), intent(out), optional, allocatable :: dTgc (:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:) procedure, private :: derivative2_vector Compute the second derivative of the NURBS surface private pure subroutine derivative2_vector (this, res1, res2, Xt1, Xt2, d2Tgc, dTgc, Tgc) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:,:) real(kind=rk), intent(out), optional, allocatable :: dTgc (:,:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:,:) procedure, private :: derivative_scalar Compute the derivative of the NURBS surface private pure subroutine derivative_scalar (this, Xt, dTgc, Tgc) 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), contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: dTgc (:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:) procedure, private :: derivative_vector Compute the derivative of the NURBS surface private pure subroutine derivative_vector (this, res1, res2, Xt1, Xt2, dTgc, Tgc) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(out), allocatable :: dTgc (:,:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:,:) procedure, private :: get_Wc_all Get all weights private pure function get_Wc_all (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, private :: get_Wci Get i-th weight private pure function get_Wci (this, n) result(Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk) procedure, private :: get_Xc_all Get all control points private pure function get_Xc_all (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, private :: get_Xci Get i-th control point private pure function get_Xci (this, n) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk), allocatable, (:) procedure, private :: get_Xcid Get i-th control point in a specific direction private pure function get_Xcid (this, n, dir) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: n integer, intent(in) :: dir Return Value real(kind=rk) procedure, private :: get_Xg_all Get all geometry points private pure function get_Xg_all (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, private :: get_Xgi Get i-th geometry point private pure function get_Xgi (this, n) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk), allocatable, (:) procedure, private :: get_Xgid Get i-th geometry point in a specific direction private pure function get_Xgid (this, n, dir) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: n integer, intent(in) :: dir Return Value real(kind=rk) procedure, private :: get_degree_all Get degree of the NURBS surface in both directions private pure function get_degree_all (this) result(degree) 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, private :: get_degree_dir Get degree of the NURBS surface in a specific direction private pure function get_degree_dir (this, dir) result(degree) 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, private :: get_knot_all Get all knot vectors private pure function get_knot_all (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, private :: get_knoti Get i-th knot value private pure function get_knoti (this, dir, i) 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 integer, intent(in) :: i Return Value real(kind=rk)","tags":"","loc":"type/nurbs_surface.html"},{"title":"nurbs_curve – ForCAD ","text":"type, public :: nurbs_curve Components Type Visibility Attributes Name Initial real(kind=rk), private, allocatable :: Wc (:) Weights for control points (1D array: [nc]) real(kind=rk), private, allocatable :: Xc (:,:) Control points (2D array: [nc, dim]) real(kind=rk), private, allocatable :: Xg (:,:) Geometry points (2D array: [ng, dim]) real(kind=rk), private, allocatable :: Xt (:) Evaluation points (1D array: [ng]) integer, private :: degree Degree (order) of the curve integer, private, allocatable :: elemConn (:,:) IGA element connectivity integer, private, allocatable :: elemConn_Xc_vis (:,:) Connectivity for visualization of control points integer, private, allocatable :: elemConn_Xg_vis (:,:) Connectivity for visualization of geometry points real(kind=rk), private, allocatable :: knot (:) Knot vector (1D array) integer, private :: nc Number of control points integer, private :: ng Number of geometry points Type-Bound Procedures generic, public :: basis => basis_vector , basis_scalar Compute the basis functions of the NURBS curve private pure subroutine basis_vector (this, res, Xt, Tgc) 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, contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: Tgc (:,:) private pure subroutine basis_scalar (this, Xt, Tgc) 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) :: Xt real(kind=rk), intent(out), allocatable :: Tgc (:) procedure, public :: cmp_Xg Compute geometry points private pure function cmp_Xg (this, Xt) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this real(kind=rk), intent(in) :: Xt Return Value real(kind=rk), allocatable, (:) procedure, public :: cmp_degree Compute degree of the NURBS curve private pure subroutine cmp_degree (this) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this procedure, public :: cmp_elem Generate IGA element connectivity private pure function cmp_elem (this) result(elemConn) 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 :: cmp_elem_Xc_vis Generate connectivity for control points private pure function cmp_elem_Xc_vis (this, p) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in), optional :: p Return Value integer, allocatable, (:,:) procedure, public :: cmp_elem_Xg_vis Generate connectivity for geometry points private pure function cmp_elem_Xg_vis (this, p) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in), optional :: p Return Value integer, allocatable, (:,:) procedure, public :: cmp_nc Compute number of required control points private pure subroutine cmp_nc (this) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this 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, contiguous :: Xt (:) generic, public :: derivative => derivative_vector , derivative_scalar Compute the derivative of the NURBS curve private pure subroutine derivative_vector (this, res, Xt, dTgc, Tgc) 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, contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: dTgc (:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:,:) private pure subroutine derivative_scalar (this, Xt, dTgc, Tgc) 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) :: Xt real(kind=rk), intent(out), allocatable :: dTgc (:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:) generic, public :: derivative2 => derivative2_vector , derivative2_scalar Compute the second derivative of the NURBS curve private pure subroutine derivative2_vector (this, res, Xt, d2Tgc, dTgc, Tgc) 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, contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:) real(kind=rk), intent(out), optional, allocatable :: dTgc (:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:,:) private pure subroutine derivative2_scalar (this, Xt, d2Tgc, dTgc, Tgc) 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) :: Xt real(kind=rk), intent(out), allocatable :: d2Tgc (:) real(kind=rk), intent(out), optional, allocatable :: dTgc (:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:) procedure, public :: elevate_degree Elevate the degree of the curve private pure subroutine elevate_degree (this, t) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this integer, intent(in) :: t 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 NURBS 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 generic, public :: get_Wc => get_Wc_all , get_Wci Get weights private pure function get_Wc_all (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_Wci (this, n) result(Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk) generic, public :: get_Xc => get_Xc_all , get_Xci , get_Xcid Get control points private pure function get_Xc_all (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_Xci (this, n) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk), allocatable, (:) private pure function get_Xcid (this, n, dir) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in) :: n integer, intent(in) :: dir Return Value real(kind=rk) generic, public :: get_Xg => get_Xg_all , get_Xgi , get_Xgid Get geometry points private pure function get_Xg_all (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_Xgi (this, n) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk), allocatable, (:) private pure function get_Xgid (this, n, dir) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in) :: n integer, intent(in) :: dir Return Value real(kind=rk) 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 Compute and return the 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_degree Get degree of the NURBS curve private pure function get_degree (this) result(degree) 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_elem Get IGA element connectivity private pure function get_elem (this) result(elemConn) 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_vis Get connectivity for control points private pure function get_elem_Xc_vis (this) result(elemConn) 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_Xg_vis Get connectivity for geometry points private pure function get_elem_Xg_vis (this) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value integer, allocatable, (:,:) generic, public :: get_knot => get_knoti , get_knot_all Get knot vector private pure function get_knoti (this, i) result(knot) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in) :: i Return Value real(kind=rk) private pure function get_knot_all (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 Compute and return the multiplicity of the knots 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 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 :: insert_knots Insert knots into the knot vector private pure subroutine insert_knots (this, Xth, r) 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), contiguous :: Xth (:) integer, intent(in), contiguous :: r (:) procedure, public :: is_rational Check if the NURBS curve is rational private pure function is_rational (this) result(r) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value logical 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 procedure, public :: nearest_point Find the nearest point on the NURBS curve (Approximation) private pure subroutine nearest_point (this, point_Xg, nearest_Xg, nearest_Xt, id) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this real(kind=rk), intent(in) :: point_Xg (:) real(kind=rk), intent(out), optional, allocatable :: nearest_Xg (:) real(kind=rk), intent(out), optional :: nearest_Xt integer, intent(out), optional :: id procedure, public :: nearest_point2 Find the nearest point on the NURBS curve (Minimization - Newton's method) private impure subroutine nearest_point2 (this, point_Xg, tol, maxit, nearest_Xt, nearest_Xg) 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) :: point_Xg (:) real(kind=rk), intent(in) :: tol integer, intent(in) :: maxit real(kind=rk), intent(out) :: nearest_Xt real(kind=rk), intent(out), optional, allocatable :: nearest_Xg (:) procedure, public :: remove_knots Remove knots from the knot vector private pure subroutine remove_knots (this, Xth, r) 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), contiguous :: Xth (:) integer, intent(in), contiguous :: r (:) procedure, public :: rotate_Xc Rotate control points private pure subroutine rotate_Xc (this, alpha, beta, theta) 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) :: alpha real(kind=rk), intent(in) :: beta real(kind=rk), intent(in) :: theta procedure, public :: rotate_Xg Rotate geometry points private pure subroutine rotate_Xg (this, alpha, beta, theta) 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) :: alpha real(kind=rk), intent(in) :: beta real(kind=rk), intent(in) :: theta generic, public :: set => set1 , set2 , set3 Set NURBS curve private pure subroutine set1 (this, knot, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set knot vector, control points and weights for the NURBS curve object. Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: knot (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) private pure subroutine set2 (this, Xth_dir, degree, continuity, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set NURBS curve using nodes of parameter space (Xth), degree, continuity, control points and weights. Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: Xth_dir (:) integer, intent(in) :: degree integer, intent(in), contiguous :: continuity (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) private pure subroutine set3 (this, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set Bezier or Rational Bezier curve using control points and weights. Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) procedure, public :: set1 Set knot vector, control points and weights for the NURBS curve object private pure subroutine set1 (this, knot, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set knot vector, control points and weights for the NURBS curve object. Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: knot (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) procedure, public :: set2 Set NURBS curve using nodes of parameter space, degree, continuity, control points and weights private pure subroutine set2 (this, Xth_dir, degree, continuity, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set NURBS curve using nodes of parameter space (Xth), degree, continuity, control points and weights. Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: Xth_dir (:) integer, intent(in) :: degree integer, intent(in), contiguous :: continuity (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) procedure, public :: set3 Set Bezier or Rational Bezier curve using control points and weights private pure subroutine set3 (this, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set Bezier or Rational Bezier curve using control points and weights. Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) procedure, public :: set_C Set a C-shape private pure subroutine set_C (this, center, radius) 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), contiguous :: center (:) real(kind=rk), intent(in) :: radius procedure, public :: set_circle Set a circle private pure subroutine set_circle (this, center, radius) 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), contiguous :: center (:) real(kind=rk), intent(in) :: radius procedure, public :: set_elem Set IGA element connectivity private pure subroutine set_elem (this, elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:) procedure, public :: set_elem_Xc_vis Set connectivity for control points private pure subroutine set_elem_Xc_vis (this, elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:) procedure, public :: set_elem_Xg_vis Set connectivity for geometry points private pure subroutine set_elem_Xg_vis (this, elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:) procedure, public :: set_half_circle Set a half circle private pure subroutine set_half_circle (this, center, radius) 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), contiguous :: center (:) real(kind=rk), intent(in) :: radius procedure, public :: show Show the NURBS object using PyVista private impure subroutine show (this, vtkfile_Xc, vtkfile_Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this character(len=*), intent(in) :: vtkfile_Xc character(len=*), intent(in) :: vtkfile_Xg procedure, public :: translate_Xc Translate control points private pure subroutine translate_Xc (this, vec) 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) :: vec (:) procedure, public :: translate_Xg Translate geometry points private pure subroutine translate_Xg (this, vec) 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) :: vec (:) procedure, private :: basis_scalar Compute the basis functions of the NURBS curve private pure subroutine basis_scalar (this, Xt, Tgc) 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) :: Xt real(kind=rk), intent(out), allocatable :: Tgc (:) procedure, private :: basis_vector Compute the basis functions of the NURBS curve private pure subroutine basis_vector (this, res, Xt, Tgc) 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, contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: Tgc (:,:) procedure, private :: derivative2_scalar Compute the second derivative of the NURBS curve private pure subroutine derivative2_scalar (this, Xt, d2Tgc, dTgc, Tgc) 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) :: Xt real(kind=rk), intent(out), allocatable :: d2Tgc (:) real(kind=rk), intent(out), optional, allocatable :: dTgc (:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:) procedure, private :: derivative2_vector Compute the second derivative of the NURBS curve private pure subroutine derivative2_vector (this, res, Xt, d2Tgc, dTgc, Tgc) 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, contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:) real(kind=rk), intent(out), optional, allocatable :: dTgc (:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:,:) procedure, private :: derivative_scalar Compute the derivative of the NURBS curve private pure subroutine derivative_scalar (this, Xt, dTgc, Tgc) 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) :: Xt real(kind=rk), intent(out), allocatable :: dTgc (:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:) procedure, private :: derivative_vector Compute the derivative of the NURBS curve private pure subroutine derivative_vector (this, res, Xt, dTgc, Tgc) 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, contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: dTgc (:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:,:) procedure, private :: get_Wc_all Get all weights private pure function get_Wc_all (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, private :: get_Wci Get i-th weight private pure function get_Wci (this, n) result(Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk) procedure, private :: get_Xc_all Get all control points private pure function get_Xc_all (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, private :: get_Xci Get i-th control point private pure function get_Xci (this, n) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk), allocatable, (:) procedure, private :: get_Xcid Get i-th control point in a specific direction private pure function get_Xcid (this, n, dir) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in) :: n integer, intent(in) :: dir Return Value real(kind=rk) procedure, private :: get_Xg_all Get all geometry points private pure function get_Xg_all (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, private :: get_Xgi Get i-th geometry point private pure function get_Xgi (this, n) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk), allocatable, (:) procedure, private :: get_Xgid Get i-th geometry point in a specific direction private pure function get_Xgid (this, n, dir) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in) :: n integer, intent(in) :: dir Return Value real(kind=rk) procedure, private :: get_knot_all Get all knot vectors private pure function get_knot_all (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, private :: get_knoti Get i-th knot value private pure function get_knoti (this, i) result(knot) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in) :: i Return Value real(kind=rk)","tags":"","loc":"type/nurbs_curve.html"},{"title":"compute_Xg_nurbs_3d – ForCAD","text":"impure function compute_Xg_nurbs_3d(Xt, knot1, knot2, knot3, degree, nc, ng, Xc, Wc) result(Xg) Uses forcad_utils proc~~compute_xg_nurbs_3d~~UsesGraph proc~compute_xg_nurbs_3d compute_Xg_nurbs_3d module~forcad_utils forcad_utils proc~compute_xg_nurbs_3d->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:,:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) real(kind=rk), intent(in), contiguous :: knot3 (:) integer, intent(in) :: degree (3) integer, intent(in) :: nc (3) integer, intent(in) :: ng (3) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), contiguous :: Wc (:) Return Value real(kind=rk), allocatable, (:,:) Calls proc~~compute_xg_nurbs_3d~~CallsGraph proc~compute_xg_nurbs_3d compute_Xg_nurbs_3d proc~basis_bspline basis_bspline proc~compute_xg_nurbs_3d->proc~basis_bspline proc~kron kron proc~compute_xg_nurbs_3d->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_xg_nurbs_3d.html"},{"title":"compute_Xg_nurbs_3d_1point – ForCAD","text":"impure function compute_Xg_nurbs_3d_1point(Xt, knot1, knot2, knot3, degree, nc, Xc, Wc) result(Xg) Uses forcad_utils proc~~compute_xg_nurbs_3d_1point~~UsesGraph proc~compute_xg_nurbs_3d_1point compute_Xg_nurbs_3d_1point module~forcad_utils forcad_utils proc~compute_xg_nurbs_3d_1point->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) real(kind=rk), intent(in), contiguous :: knot3 (:) integer, intent(in) :: degree (3) integer, intent(in) :: nc (3) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), contiguous :: Wc (:) Return Value real(kind=rk), allocatable, (:) Calls proc~~compute_xg_nurbs_3d_1point~~CallsGraph proc~compute_xg_nurbs_3d_1point compute_Xg_nurbs_3d_1point proc~basis_bspline basis_bspline proc~compute_xg_nurbs_3d_1point->proc~basis_bspline proc~kron kron proc~compute_xg_nurbs_3d_1point->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_xg_nurbs_3d_1point.html"},{"title":"compute_Xg_bspline_3d – ForCAD","text":"impure function compute_Xg_bspline_3d(Xt, knot1, knot2, knot3, degree, nc, ng, Xc) result(Xg) Uses forcad_utils proc~~compute_xg_bspline_3d~~UsesGraph proc~compute_xg_bspline_3d compute_Xg_bspline_3d module~forcad_utils forcad_utils proc~compute_xg_bspline_3d->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:,:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) real(kind=rk), intent(in), contiguous :: knot3 (:) integer, intent(in) :: degree (3) integer, intent(in) :: nc (3) integer, intent(in) :: ng (3) real(kind=rk), intent(in), contiguous :: Xc (:,:) Return Value real(kind=rk), allocatable, (:,:) Calls proc~~compute_xg_bspline_3d~~CallsGraph proc~compute_xg_bspline_3d compute_Xg_bspline_3d proc~basis_bspline basis_bspline proc~compute_xg_bspline_3d->proc~basis_bspline proc~kron kron proc~compute_xg_bspline_3d->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_xg_bspline_3d.html"},{"title":"compute_Xg_bspline_3d_1point – ForCAD","text":"impure function compute_Xg_bspline_3d_1point(Xt, knot1, knot2, knot3, degree, nc, Xc) result(Xg) Uses forcad_utils proc~~compute_xg_bspline_3d_1point~~UsesGraph proc~compute_xg_bspline_3d_1point compute_Xg_bspline_3d_1point module~forcad_utils forcad_utils proc~compute_xg_bspline_3d_1point->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) real(kind=rk), intent(in), contiguous :: knot3 (:) integer, intent(in) :: degree (3) integer, intent(in) :: nc (3) real(kind=rk), intent(in), contiguous :: Xc (:,:) Return Value real(kind=rk), allocatable, (:) Calls proc~~compute_xg_bspline_3d_1point~~CallsGraph proc~compute_xg_bspline_3d_1point compute_Xg_bspline_3d_1point proc~basis_bspline basis_bspline proc~compute_xg_bspline_3d_1point->proc~basis_bspline proc~kron kron proc~compute_xg_bspline_3d_1point->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_xg_bspline_3d_1point.html"},{"title":"compute_Tgc_nurbs_3d_vector – ForCAD","text":"impure function compute_Tgc_nurbs_3d_vector(Xt, knot1, knot2, knot3, degree, nc, ng, Wc) result(Tgc) Uses forcad_utils proc~~compute_tgc_nurbs_3d_vector~~UsesGraph proc~compute_tgc_nurbs_3d_vector compute_Tgc_nurbs_3d_vector module~forcad_utils forcad_utils proc~compute_tgc_nurbs_3d_vector->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:,:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) real(kind=rk), intent(in), contiguous :: knot3 (:) integer, intent(in) :: degree (3) integer, intent(in) :: nc (3) integer, intent(in) :: ng (3) real(kind=rk), intent(in), contiguous :: Wc (:) Return Value real(kind=rk), allocatable, (:,:) Calls proc~~compute_tgc_nurbs_3d_vector~~CallsGraph proc~compute_tgc_nurbs_3d_vector compute_Tgc_nurbs_3d_vector proc~basis_bspline basis_bspline proc~compute_tgc_nurbs_3d_vector->proc~basis_bspline proc~kron kron proc~compute_tgc_nurbs_3d_vector->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_tgc_nurbs_3d_vector.html"},{"title":"compute_Tgc_nurbs_3d_scalar – ForCAD","text":"impure function compute_Tgc_nurbs_3d_scalar(Xt, knot1, knot2, knot3, degree, nc, Wc) result(Tgc) Uses forcad_utils proc~~compute_tgc_nurbs_3d_scalar~~UsesGraph proc~compute_tgc_nurbs_3d_scalar compute_Tgc_nurbs_3d_scalar module~forcad_utils forcad_utils proc~compute_tgc_nurbs_3d_scalar->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) real(kind=rk), intent(in), contiguous :: knot3 (:) integer, intent(in) :: degree (3) integer, intent(in) :: nc (3) real(kind=rk), intent(in), contiguous :: Wc (:) Return Value real(kind=rk), allocatable, (:) Calls proc~~compute_tgc_nurbs_3d_scalar~~CallsGraph proc~compute_tgc_nurbs_3d_scalar compute_Tgc_nurbs_3d_scalar proc~basis_bspline basis_bspline proc~compute_tgc_nurbs_3d_scalar->proc~basis_bspline proc~kron kron proc~compute_tgc_nurbs_3d_scalar->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_tgc_nurbs_3d_scalar.html"},{"title":"compute_Tgc_bspline_3d_vector – ForCAD","text":"impure function compute_Tgc_bspline_3d_vector(Xt, knot1, knot2, knot3, degree, nc, ng) result(Tgc) Uses forcad_utils proc~~compute_tgc_bspline_3d_vector~~UsesGraph proc~compute_tgc_bspline_3d_vector compute_Tgc_bspline_3d_vector module~forcad_utils forcad_utils proc~compute_tgc_bspline_3d_vector->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:,:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) real(kind=rk), intent(in), contiguous :: knot3 (:) integer, intent(in) :: degree (3) integer, intent(in) :: nc (3) integer, intent(in) :: ng (3) Return Value real(kind=rk), allocatable, (:,:) Calls proc~~compute_tgc_bspline_3d_vector~~CallsGraph proc~compute_tgc_bspline_3d_vector compute_Tgc_bspline_3d_vector proc~basis_bspline basis_bspline proc~compute_tgc_bspline_3d_vector->proc~basis_bspline proc~kron kron proc~compute_tgc_bspline_3d_vector->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_tgc_bspline_3d_vector.html"},{"title":"compute_Tgc_bspline_3d_scalar – ForCAD","text":"impure function compute_Tgc_bspline_3d_scalar(Xt, knot1, knot2, knot3, degree, nc) result(Tgc) Uses forcad_utils proc~~compute_tgc_bspline_3d_scalar~~UsesGraph proc~compute_tgc_bspline_3d_scalar compute_Tgc_bspline_3d_scalar module~forcad_utils forcad_utils proc~compute_tgc_bspline_3d_scalar->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) real(kind=rk), intent(in), contiguous :: knot3 (:) integer, intent(in) :: degree (3) integer, intent(in) :: nc (3) Return Value real(kind=rk), allocatable, (:) Calls proc~~compute_tgc_bspline_3d_scalar~~CallsGraph proc~compute_tgc_bspline_3d_scalar compute_Tgc_bspline_3d_scalar proc~basis_bspline basis_bspline proc~compute_tgc_bspline_3d_scalar->proc~basis_bspline proc~kron kron proc~compute_tgc_bspline_3d_scalar->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_tgc_bspline_3d_scalar.html"},{"title":"nearest_point_help_3d – ForCAD","text":"impure function nearest_point_help_3d(ng, Xg, point_Xg) result(distances) Uses forcad_utils proc~~nearest_point_help_3d~~UsesGraph proc~nearest_point_help_3d nearest_point_help_3d module~forcad_utils forcad_utils proc~nearest_point_help_3d->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. Arguments Type Intent Optional Attributes Name integer, intent(in) :: ng (3) real(kind=rk), intent(in), contiguous :: Xg (:,:) real(kind=rk), intent(in), contiguous :: point_Xg (:) Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"proc/nearest_point_help_3d.html"},{"title":"compute_dTgc_nurbs_3d_vector – ForCAD","text":"impure subroutine compute_dTgc_nurbs_3d_vector(Xt, knot1, knot2, knot3, degree, nc, ng, Wc, dTgc, Tgc) Uses forcad_utils proc~~compute_dtgc_nurbs_3d_vector~~UsesGraph proc~compute_dtgc_nurbs_3d_vector compute_dTgc_nurbs_3d_vector module~forcad_utils forcad_utils proc~compute_dtgc_nurbs_3d_vector->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:,:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) real(kind=rk), intent(in), contiguous :: knot3 (:) integer, intent(in) :: degree (3) integer, intent(in) :: nc (3) integer, intent(in) :: ng (3) real(kind=rk), intent(in), contiguous :: Wc (:) real(kind=rk), intent(out), allocatable :: dTgc (:,:,:) real(kind=rk), intent(out), allocatable :: Tgc (:,:) Calls proc~~compute_dtgc_nurbs_3d_vector~~CallsGraph proc~compute_dtgc_nurbs_3d_vector compute_dTgc_nurbs_3d_vector proc~basis_bspline_der basis_bspline_der proc~compute_dtgc_nurbs_3d_vector->proc~basis_bspline_der proc~kron kron proc~compute_dtgc_nurbs_3d_vector->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_dtgc_nurbs_3d_vector.html"},{"title":"compute_dTgc_nurbs_3d_scalar – ForCAD","text":"impure subroutine compute_dTgc_nurbs_3d_scalar(Xt, knot1, knot2, knot3, degree, nc, Wc, dTgc, Tgc) Uses forcad_utils proc~~compute_dtgc_nurbs_3d_scalar~~UsesGraph proc~compute_dtgc_nurbs_3d_scalar compute_dTgc_nurbs_3d_scalar module~forcad_utils forcad_utils proc~compute_dtgc_nurbs_3d_scalar->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) real(kind=rk), intent(in), contiguous :: knot3 (:) integer, intent(in) :: degree (3) integer, intent(in) :: nc (3) real(kind=rk), intent(in), contiguous :: Wc (:) real(kind=rk), intent(out), allocatable :: dTgc (:,:) real(kind=rk), intent(out), allocatable :: Tgc (:) Calls proc~~compute_dtgc_nurbs_3d_scalar~~CallsGraph proc~compute_dtgc_nurbs_3d_scalar compute_dTgc_nurbs_3d_scalar proc~basis_bspline_der basis_bspline_der proc~compute_dtgc_nurbs_3d_scalar->proc~basis_bspline_der proc~kron kron proc~compute_dtgc_nurbs_3d_scalar->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_dtgc_nurbs_3d_scalar.html"},{"title":"compute_dTgc_bspline_3d_vector – ForCAD","text":"impure subroutine compute_dTgc_bspline_3d_vector(Xt, knot1, knot2, knot3, degree, nc, ng, dTgc, Tgc) Uses forcad_utils proc~~compute_dtgc_bspline_3d_vector~~UsesGraph proc~compute_dtgc_bspline_3d_vector compute_dTgc_bspline_3d_vector module~forcad_utils forcad_utils proc~compute_dtgc_bspline_3d_vector->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:,:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) real(kind=rk), intent(in), contiguous :: knot3 (:) integer, intent(in) :: degree (3) integer, intent(in) :: nc (3) integer, intent(in) :: ng (3) real(kind=rk), intent(out), allocatable :: dTgc (:,:,:) real(kind=rk), intent(out), allocatable :: Tgc (:,:) Calls proc~~compute_dtgc_bspline_3d_vector~~CallsGraph proc~compute_dtgc_bspline_3d_vector compute_dTgc_bspline_3d_vector proc~basis_bspline_der basis_bspline_der proc~compute_dtgc_bspline_3d_vector->proc~basis_bspline_der proc~kron kron proc~compute_dtgc_bspline_3d_vector->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_dtgc_bspline_3d_vector.html"},{"title":"compute_dTgc_bspline_3d_scalar – ForCAD","text":"impure subroutine compute_dTgc_bspline_3d_scalar(Xt, knot1, knot2, knot3, degree, nc, dTgc, Tgc) Uses forcad_utils proc~~compute_dtgc_bspline_3d_scalar~~UsesGraph proc~compute_dtgc_bspline_3d_scalar compute_dTgc_bspline_3d_scalar module~forcad_utils forcad_utils proc~compute_dtgc_bspline_3d_scalar->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) real(kind=rk), intent(in), contiguous :: knot3 (:) integer, intent(in) :: degree (3) integer, intent(in) :: nc (3) real(kind=rk), intent(out), allocatable :: dTgc (:,:) real(kind=rk), intent(out), allocatable :: Tgc (:) Calls proc~~compute_dtgc_bspline_3d_scalar~~CallsGraph proc~compute_dtgc_bspline_3d_scalar compute_dTgc_bspline_3d_scalar proc~basis_bspline_der basis_bspline_der proc~compute_dtgc_bspline_3d_scalar->proc~basis_bspline_der proc~kron kron proc~compute_dtgc_bspline_3d_scalar->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_dtgc_bspline_3d_scalar.html"},{"title":"compute_d2Tgc_nurbs_3d_vector – ForCAD","text":"impure subroutine compute_d2Tgc_nurbs_3d_vector(Xt, knot1, knot2, knot3, degree, nc, ng, Wc, d2Tgc, dTgc, Tgc) Uses forcad_utils proc~~compute_d2tgc_nurbs_3d_vector~~UsesGraph proc~compute_d2tgc_nurbs_3d_vector compute_d2Tgc_nurbs_3d_vector module~forcad_utils forcad_utils proc~compute_d2tgc_nurbs_3d_vector->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:,:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) real(kind=rk), intent(in), contiguous :: knot3 (:) integer, intent(in) :: degree (3) integer, intent(in) :: nc (3) integer, intent(in) :: ng (3) real(kind=rk), intent(in), contiguous :: Wc (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:,:) real(kind=rk), intent(out), allocatable :: dTgc (:,:,:) real(kind=rk), intent(out), allocatable :: Tgc (:,:) Calls proc~~compute_d2tgc_nurbs_3d_vector~~CallsGraph proc~compute_d2tgc_nurbs_3d_vector compute_d2Tgc_nurbs_3d_vector proc~basis_bspline_2der basis_bspline_2der proc~compute_d2tgc_nurbs_3d_vector->proc~basis_bspline_2der proc~kron kron proc~compute_d2tgc_nurbs_3d_vector->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_d2tgc_nurbs_3d_vector.html"},{"title":"compute_d2Tgc_nurbs_3d_scalar – ForCAD","text":"impure subroutine compute_d2Tgc_nurbs_3d_scalar(Xt, knot1, knot2, knot3, degree, nc, Wc, d2Tgc, dTgc, Tgc) Uses forcad_utils proc~~compute_d2tgc_nurbs_3d_scalar~~UsesGraph proc~compute_d2tgc_nurbs_3d_scalar compute_d2Tgc_nurbs_3d_scalar module~forcad_utils forcad_utils proc~compute_d2tgc_nurbs_3d_scalar->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) real(kind=rk), intent(in), contiguous :: knot3 (:) integer, intent(in) :: degree (3) integer, intent(in) :: nc (3) real(kind=rk), intent(in), contiguous :: Wc (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:) real(kind=rk), intent(out), allocatable :: dTgc (:,:) real(kind=rk), intent(out), allocatable :: Tgc (:) Calls proc~~compute_d2tgc_nurbs_3d_scalar~~CallsGraph proc~compute_d2tgc_nurbs_3d_scalar compute_d2Tgc_nurbs_3d_scalar proc~basis_bspline_2der basis_bspline_2der proc~compute_d2tgc_nurbs_3d_scalar->proc~basis_bspline_2der proc~kron kron proc~compute_d2tgc_nurbs_3d_scalar->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_d2tgc_nurbs_3d_scalar.html"},{"title":"compute_d2Tgc_bspline_3d_vector – ForCAD","text":"impure subroutine compute_d2Tgc_bspline_3d_vector(Xt, knot1, knot2, knot3, degree, nc, ng, d2Tgc, dTgc, Tgc) Uses forcad_utils proc~~compute_d2tgc_bspline_3d_vector~~UsesGraph proc~compute_d2tgc_bspline_3d_vector compute_d2Tgc_bspline_3d_vector module~forcad_utils forcad_utils proc~compute_d2tgc_bspline_3d_vector->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:,:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) real(kind=rk), intent(in), contiguous :: knot3 (:) integer, intent(in) :: degree (3) integer, intent(in) :: nc (3) integer, intent(in) :: ng (3) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:,:) real(kind=rk), intent(out), allocatable :: dTgc (:,:,:) real(kind=rk), intent(out), allocatable :: Tgc (:,:) Calls proc~~compute_d2tgc_bspline_3d_vector~~CallsGraph proc~compute_d2tgc_bspline_3d_vector compute_d2Tgc_bspline_3d_vector proc~basis_bspline_2der basis_bspline_2der proc~compute_d2tgc_bspline_3d_vector->proc~basis_bspline_2der proc~kron kron proc~compute_d2tgc_bspline_3d_vector->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_d2tgc_bspline_3d_vector.html"},{"title":"compute_d2Tgc_bspline_3d_scalar – ForCAD","text":"impure subroutine compute_d2Tgc_bspline_3d_scalar(Xt, knot1, knot2, knot3, degree, nc, d2Tgc, dTgc, Tgc) Uses forcad_utils proc~~compute_d2tgc_bspline_3d_scalar~~UsesGraph proc~compute_d2tgc_bspline_3d_scalar compute_d2Tgc_bspline_3d_scalar module~forcad_utils forcad_utils proc~compute_d2tgc_bspline_3d_scalar->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) real(kind=rk), intent(in), contiguous :: knot3 (:) integer, intent(in) :: degree (3) integer, intent(in) :: nc (3) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:) real(kind=rk), intent(out), allocatable :: dTgc (:,:) real(kind=rk), intent(out), allocatable :: Tgc (:) Calls proc~~compute_d2tgc_bspline_3d_scalar~~CallsGraph proc~compute_d2tgc_bspline_3d_scalar compute_d2Tgc_bspline_3d_scalar proc~basis_bspline_2der basis_bspline_2der proc~compute_d2tgc_bspline_3d_scalar->proc~basis_bspline_2der proc~kron kron proc~compute_d2tgc_bspline_3d_scalar->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_d2tgc_bspline_3d_scalar.html"},{"title":"compute_Xg_nurbs_2d – ForCAD","text":"impure function compute_Xg_nurbs_2d(Xt, knot1, knot2, degree, nc, ng, Xc, Wc) result(Xg) Uses forcad_utils proc~~compute_xg_nurbs_2d~~UsesGraph proc~compute_xg_nurbs_2d compute_Xg_nurbs_2d module~forcad_utils forcad_utils proc~compute_xg_nurbs_2d->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:,:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) integer, intent(in) :: degree (2) integer, intent(in) :: nc (2) integer, intent(in) :: ng (2) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), contiguous :: Wc (:) Return Value real(kind=rk), allocatable, (:,:) Calls proc~~compute_xg_nurbs_2d~~CallsGraph proc~compute_xg_nurbs_2d compute_Xg_nurbs_2d proc~basis_bspline basis_bspline proc~compute_xg_nurbs_2d->proc~basis_bspline proc~kron kron proc~compute_xg_nurbs_2d->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_xg_nurbs_2d.html"},{"title":"compute_Xg_nurbs_2d_1point – ForCAD","text":"impure function compute_Xg_nurbs_2d_1point(Xt, knot1, knot2, degree, nc, Xc, Wc) result(Xg) Uses forcad_utils proc~~compute_xg_nurbs_2d_1point~~UsesGraph proc~compute_xg_nurbs_2d_1point compute_Xg_nurbs_2d_1point module~forcad_utils forcad_utils proc~compute_xg_nurbs_2d_1point->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) integer, intent(in) :: degree (2) integer, intent(in) :: nc (2) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), contiguous :: Wc (:) Return Value real(kind=rk), allocatable, (:) Calls proc~~compute_xg_nurbs_2d_1point~~CallsGraph proc~compute_xg_nurbs_2d_1point compute_Xg_nurbs_2d_1point proc~basis_bspline basis_bspline proc~compute_xg_nurbs_2d_1point->proc~basis_bspline proc~kron kron proc~compute_xg_nurbs_2d_1point->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_xg_nurbs_2d_1point.html"},{"title":"compute_Xg_bspline_2d – ForCAD","text":"impure function compute_Xg_bspline_2d(Xt, knot1, knot2, degree, nc, ng, Xc) result(Xg) Uses forcad_utils proc~~compute_xg_bspline_2d~~UsesGraph proc~compute_xg_bspline_2d compute_Xg_bspline_2d module~forcad_utils forcad_utils proc~compute_xg_bspline_2d->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:,:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) integer, intent(in) :: degree (2) integer, intent(in) :: nc (2) integer, intent(in) :: ng (2) real(kind=rk), intent(in), contiguous :: Xc (:,:) Return Value real(kind=rk), allocatable, (:,:) Calls proc~~compute_xg_bspline_2d~~CallsGraph proc~compute_xg_bspline_2d compute_Xg_bspline_2d proc~basis_bspline basis_bspline proc~compute_xg_bspline_2d->proc~basis_bspline proc~kron kron proc~compute_xg_bspline_2d->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_xg_bspline_2d.html"},{"title":"compute_Xg_bspline_2d_1point – ForCAD","text":"impure function compute_Xg_bspline_2d_1point(Xt, knot1, knot2, degree, nc, Xc) result(Xg) Uses forcad_utils proc~~compute_xg_bspline_2d_1point~~UsesGraph proc~compute_xg_bspline_2d_1point compute_Xg_bspline_2d_1point module~forcad_utils forcad_utils proc~compute_xg_bspline_2d_1point->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) integer, intent(in) :: degree (2) integer, intent(in) :: nc (2) real(kind=rk), intent(in), contiguous :: Xc (:,:) Return Value real(kind=rk), allocatable, (:) Calls proc~~compute_xg_bspline_2d_1point~~CallsGraph proc~compute_xg_bspline_2d_1point compute_Xg_bspline_2d_1point proc~basis_bspline basis_bspline proc~compute_xg_bspline_2d_1point->proc~basis_bspline proc~kron kron proc~compute_xg_bspline_2d_1point->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_xg_bspline_2d_1point.html"},{"title":"compute_Tgc_nurbs_2d_vector – ForCAD","text":"impure function compute_Tgc_nurbs_2d_vector(Xt, knot1, knot2, degree, nc, ng, Wc) result(Tgc) Uses forcad_utils proc~~compute_tgc_nurbs_2d_vector~~UsesGraph proc~compute_tgc_nurbs_2d_vector compute_Tgc_nurbs_2d_vector module~forcad_utils forcad_utils proc~compute_tgc_nurbs_2d_vector->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:,:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) integer, intent(in) :: degree (2) integer, intent(in) :: nc (2) integer, intent(in) :: ng (2) real(kind=rk), intent(in), contiguous :: Wc (:) Return Value real(kind=rk), allocatable, (:,:) Calls proc~~compute_tgc_nurbs_2d_vector~~CallsGraph proc~compute_tgc_nurbs_2d_vector compute_Tgc_nurbs_2d_vector proc~basis_bspline basis_bspline proc~compute_tgc_nurbs_2d_vector->proc~basis_bspline proc~kron kron proc~compute_tgc_nurbs_2d_vector->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_tgc_nurbs_2d_vector.html"},{"title":"compute_Tgc_nurbs_2d_scalar – ForCAD","text":"impure function compute_Tgc_nurbs_2d_scalar(Xt, knot1, knot2, degree, nc, Wc) result(Tgc) Uses forcad_utils proc~~compute_tgc_nurbs_2d_scalar~~UsesGraph proc~compute_tgc_nurbs_2d_scalar compute_Tgc_nurbs_2d_scalar module~forcad_utils forcad_utils proc~compute_tgc_nurbs_2d_scalar->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) integer, intent(in) :: degree (2) integer, intent(in) :: nc (2) real(kind=rk), intent(in), contiguous :: Wc (:) Return Value real(kind=rk), allocatable, (:) Calls proc~~compute_tgc_nurbs_2d_scalar~~CallsGraph proc~compute_tgc_nurbs_2d_scalar compute_Tgc_nurbs_2d_scalar proc~basis_bspline basis_bspline proc~compute_tgc_nurbs_2d_scalar->proc~basis_bspline proc~kron kron proc~compute_tgc_nurbs_2d_scalar->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_tgc_nurbs_2d_scalar.html"},{"title":"compute_Tgc_bspline_2d_vector – ForCAD","text":"impure function compute_Tgc_bspline_2d_vector(Xt, knot1, knot2, degree, nc, ng) result(Tgc) Uses forcad_utils proc~~compute_tgc_bspline_2d_vector~~UsesGraph proc~compute_tgc_bspline_2d_vector compute_Tgc_bspline_2d_vector module~forcad_utils forcad_utils proc~compute_tgc_bspline_2d_vector->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:,:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) integer, intent(in) :: degree (2) integer, intent(in) :: nc (2) integer, intent(in) :: ng (2) Return Value real(kind=rk), allocatable, (:,:) Calls proc~~compute_tgc_bspline_2d_vector~~CallsGraph proc~compute_tgc_bspline_2d_vector compute_Tgc_bspline_2d_vector proc~basis_bspline basis_bspline proc~compute_tgc_bspline_2d_vector->proc~basis_bspline proc~kron kron proc~compute_tgc_bspline_2d_vector->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_tgc_bspline_2d_vector.html"},{"title":"compute_Tgc_bspline_2d_scalar – ForCAD","text":"impure function compute_Tgc_bspline_2d_scalar(Xt, knot1, knot2, degree, nc) result(Tgc) Uses forcad_utils proc~~compute_tgc_bspline_2d_scalar~~UsesGraph proc~compute_tgc_bspline_2d_scalar compute_Tgc_bspline_2d_scalar module~forcad_utils forcad_utils proc~compute_tgc_bspline_2d_scalar->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) integer, intent(in) :: degree (2) integer, intent(in) :: nc (2) Return Value real(kind=rk), allocatable, (:) Calls proc~~compute_tgc_bspline_2d_scalar~~CallsGraph proc~compute_tgc_bspline_2d_scalar compute_Tgc_bspline_2d_scalar proc~basis_bspline basis_bspline proc~compute_tgc_bspline_2d_scalar->proc~basis_bspline proc~kron kron proc~compute_tgc_bspline_2d_scalar->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_tgc_bspline_2d_scalar.html"},{"title":"nearest_point_help_2d – ForCAD","text":"impure function nearest_point_help_2d(ng, Xg, point_Xg) result(distances) Uses forcad_utils proc~~nearest_point_help_2d~~UsesGraph proc~nearest_point_help_2d nearest_point_help_2d module~forcad_utils forcad_utils proc~nearest_point_help_2d->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. Arguments Type Intent Optional Attributes Name integer, intent(in) :: ng (2) real(kind=rk), intent(in), contiguous :: Xg (:,:) real(kind=rk), intent(in), contiguous :: point_Xg (:) Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"proc/nearest_point_help_2d.html"},{"title":"compute_dTgc_nurbs_2d_vector – ForCAD","text":"impure subroutine compute_dTgc_nurbs_2d_vector(Xt, knot1, knot2, degree, nc, ng, Wc, dTgc, Tgc) Uses forcad_utils proc~~compute_dtgc_nurbs_2d_vector~~UsesGraph proc~compute_dtgc_nurbs_2d_vector compute_dTgc_nurbs_2d_vector module~forcad_utils forcad_utils proc~compute_dtgc_nurbs_2d_vector->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:,:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) integer, intent(in) :: degree (2) integer, intent(in) :: nc (2) integer, intent(in) :: ng (2) real(kind=rk), intent(in), contiguous :: Wc (:) real(kind=rk), intent(out), allocatable :: dTgc (:,:,:) real(kind=rk), intent(out), allocatable :: Tgc (:,:) Calls proc~~compute_dtgc_nurbs_2d_vector~~CallsGraph proc~compute_dtgc_nurbs_2d_vector compute_dTgc_nurbs_2d_vector proc~basis_bspline_der basis_bspline_der proc~compute_dtgc_nurbs_2d_vector->proc~basis_bspline_der proc~kron kron proc~compute_dtgc_nurbs_2d_vector->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_dtgc_nurbs_2d_vector.html"},{"title":"compute_dTgc_nurbs_2d_scalar – ForCAD","text":"impure subroutine compute_dTgc_nurbs_2d_scalar(Xt, knot1, knot2, degree, nc, Wc, dTgc, Tgc) Uses forcad_utils proc~~compute_dtgc_nurbs_2d_scalar~~UsesGraph proc~compute_dtgc_nurbs_2d_scalar compute_dTgc_nurbs_2d_scalar module~forcad_utils forcad_utils proc~compute_dtgc_nurbs_2d_scalar->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) integer, intent(in) :: degree (2) integer, intent(in) :: nc (2) real(kind=rk), intent(in), contiguous :: Wc (:) real(kind=rk), intent(out), allocatable :: dTgc (:,:) real(kind=rk), intent(out), allocatable :: Tgc (:) Calls proc~~compute_dtgc_nurbs_2d_scalar~~CallsGraph proc~compute_dtgc_nurbs_2d_scalar compute_dTgc_nurbs_2d_scalar proc~basis_bspline_der basis_bspline_der proc~compute_dtgc_nurbs_2d_scalar->proc~basis_bspline_der proc~kron kron proc~compute_dtgc_nurbs_2d_scalar->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_dtgc_nurbs_2d_scalar.html"},{"title":"compute_dTgc_bspline_2d_vector – ForCAD","text":"impure subroutine compute_dTgc_bspline_2d_vector(Xt, knot1, knot2, degree, nc, ng, dTgc, Tgc) Uses forcad_utils proc~~compute_dtgc_bspline_2d_vector~~UsesGraph proc~compute_dtgc_bspline_2d_vector compute_dTgc_bspline_2d_vector module~forcad_utils forcad_utils proc~compute_dtgc_bspline_2d_vector->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:,:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) integer, intent(in) :: degree (2) integer, intent(in) :: nc (2) integer, intent(in) :: ng (2) real(kind=rk), intent(out), allocatable :: dTgc (:,:,:) real(kind=rk), intent(out), allocatable :: Tgc (:,:) Calls proc~~compute_dtgc_bspline_2d_vector~~CallsGraph proc~compute_dtgc_bspline_2d_vector compute_dTgc_bspline_2d_vector proc~basis_bspline_der basis_bspline_der proc~compute_dtgc_bspline_2d_vector->proc~basis_bspline_der proc~kron kron proc~compute_dtgc_bspline_2d_vector->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_dtgc_bspline_2d_vector.html"},{"title":"compute_dTgc_bspline_2d_scalar – ForCAD","text":"impure subroutine compute_dTgc_bspline_2d_scalar(Xt, knot1, knot2, degree, nc, dTgc, Tgc) Uses forcad_utils proc~~compute_dtgc_bspline_2d_scalar~~UsesGraph proc~compute_dtgc_bspline_2d_scalar compute_dTgc_bspline_2d_scalar module~forcad_utils forcad_utils proc~compute_dtgc_bspline_2d_scalar->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) integer, intent(in) :: degree (2) integer, intent(in) :: nc (2) real(kind=rk), intent(out), allocatable :: dTgc (:,:) real(kind=rk), intent(out), allocatable :: Tgc (:) Calls proc~~compute_dtgc_bspline_2d_scalar~~CallsGraph proc~compute_dtgc_bspline_2d_scalar compute_dTgc_bspline_2d_scalar proc~basis_bspline_der basis_bspline_der proc~compute_dtgc_bspline_2d_scalar->proc~basis_bspline_der proc~kron kron proc~compute_dtgc_bspline_2d_scalar->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_dtgc_bspline_2d_scalar.html"},{"title":"compute_d2Tgc_nurbs_2d_vector – ForCAD","text":"impure subroutine compute_d2Tgc_nurbs_2d_vector(Xt, knot1, knot2, degree, nc, ng, Wc, d2Tgc, dTgc, Tgc) Uses forcad_utils proc~~compute_d2tgc_nurbs_2d_vector~~UsesGraph proc~compute_d2tgc_nurbs_2d_vector compute_d2Tgc_nurbs_2d_vector module~forcad_utils forcad_utils proc~compute_d2tgc_nurbs_2d_vector->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:,:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) integer, intent(in) :: degree (2) integer, intent(in) :: nc (2) integer, intent(in) :: ng (2) real(kind=rk), intent(in), contiguous :: Wc (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:,:) real(kind=rk), intent(out), allocatable :: dTgc (:,:,:) real(kind=rk), intent(out), allocatable :: Tgc (:,:) Calls proc~~compute_d2tgc_nurbs_2d_vector~~CallsGraph proc~compute_d2tgc_nurbs_2d_vector compute_d2Tgc_nurbs_2d_vector proc~basis_bspline_2der basis_bspline_2der proc~compute_d2tgc_nurbs_2d_vector->proc~basis_bspline_2der proc~kron kron proc~compute_d2tgc_nurbs_2d_vector->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_d2tgc_nurbs_2d_vector.html"},{"title":"compute_d2Tgc_nurbs_2d_scalar – ForCAD","text":"impure subroutine compute_d2Tgc_nurbs_2d_scalar(Xt, knot1, knot2, degree, nc, Wc, d2Tgc, dTgc, Tgc) Uses forcad_utils proc~~compute_d2tgc_nurbs_2d_scalar~~UsesGraph proc~compute_d2tgc_nurbs_2d_scalar compute_d2Tgc_nurbs_2d_scalar module~forcad_utils forcad_utils proc~compute_d2tgc_nurbs_2d_scalar->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) integer, intent(in) :: degree (2) integer, intent(in) :: nc (2) real(kind=rk), intent(in), contiguous :: Wc (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:) real(kind=rk), intent(out), allocatable :: dTgc (:,:) real(kind=rk), intent(out), allocatable :: Tgc (:) Calls proc~~compute_d2tgc_nurbs_2d_scalar~~CallsGraph proc~compute_d2tgc_nurbs_2d_scalar compute_d2Tgc_nurbs_2d_scalar proc~basis_bspline_2der basis_bspline_2der proc~compute_d2tgc_nurbs_2d_scalar->proc~basis_bspline_2der proc~kron kron proc~compute_d2tgc_nurbs_2d_scalar->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_d2tgc_nurbs_2d_scalar.html"},{"title":"compute_d2Tgc_bspline_2d_vector – ForCAD","text":"impure subroutine compute_d2Tgc_bspline_2d_vector(Xt, knot1, knot2, degree, nc, ng, d2Tgc, dTgc, Tgc) Uses forcad_utils proc~~compute_d2tgc_bspline_2d_vector~~UsesGraph proc~compute_d2tgc_bspline_2d_vector compute_d2Tgc_bspline_2d_vector module~forcad_utils forcad_utils proc~compute_d2tgc_bspline_2d_vector->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:,:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) integer, intent(in) :: degree (2) integer, intent(in) :: nc (2) integer, intent(in) :: ng (2) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:,:) real(kind=rk), intent(out), allocatable :: dTgc (:,:,:) real(kind=rk), intent(out), allocatable :: Tgc (:,:) Calls proc~~compute_d2tgc_bspline_2d_vector~~CallsGraph proc~compute_d2tgc_bspline_2d_vector compute_d2Tgc_bspline_2d_vector proc~basis_bspline_2der basis_bspline_2der proc~compute_d2tgc_bspline_2d_vector->proc~basis_bspline_2der proc~kron kron proc~compute_d2tgc_bspline_2d_vector->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_d2tgc_bspline_2d_vector.html"},{"title":"compute_d2Tgc_bspline_2d_scalar – ForCAD","text":"impure subroutine compute_d2Tgc_bspline_2d_scalar(Xt, knot1, knot2, degree, nc, d2Tgc, dTgc, Tgc) Uses forcad_utils proc~~compute_d2tgc_bspline_2d_scalar~~UsesGraph proc~compute_d2tgc_bspline_2d_scalar compute_d2Tgc_bspline_2d_scalar module~forcad_utils forcad_utils proc~compute_d2tgc_bspline_2d_scalar->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) integer, intent(in) :: degree (2) integer, intent(in) :: nc (2) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:) real(kind=rk), intent(out), allocatable :: dTgc (:,:) real(kind=rk), intent(out), allocatable :: Tgc (:) Calls proc~~compute_d2tgc_bspline_2d_scalar~~CallsGraph proc~compute_d2tgc_bspline_2d_scalar compute_d2Tgc_bspline_2d_scalar proc~basis_bspline_2der basis_bspline_2der proc~compute_d2tgc_bspline_2d_scalar->proc~basis_bspline_2der proc~kron kron proc~compute_d2tgc_bspline_2d_scalar->proc~kron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_d2tgc_bspline_2d_scalar.html"},{"title":"compute_Xg_nurbs_1d – ForCAD","text":"impure function compute_Xg_nurbs_1d(Xt, knot, degree, nc, ng, Xc, Wc) result(Xg) Uses forcad_utils proc~~compute_xg_nurbs_1d~~UsesGraph proc~compute_xg_nurbs_1d compute_Xg_nurbs_1d module~forcad_utils forcad_utils proc~compute_xg_nurbs_1d->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(in), contiguous :: knot (:) integer, intent(in) :: degree integer, intent(in) :: nc integer, intent(in) :: ng real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), contiguous :: Wc (:) Return Value real(kind=rk), allocatable, (:,:) Calls proc~~compute_xg_nurbs_1d~~CallsGraph proc~compute_xg_nurbs_1d compute_Xg_nurbs_1d proc~basis_bspline basis_bspline proc~compute_xg_nurbs_1d->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.","tags":"","loc":"proc/compute_xg_nurbs_1d.html"},{"title":"compute_Xg_nurbs_1d_1point – ForCAD","text":"impure function compute_Xg_nurbs_1d_1point(Xt, knot, degree, nc, Xc, Wc) result(Xg) Uses forcad_utils proc~~compute_xg_nurbs_1d_1point~~UsesGraph proc~compute_xg_nurbs_1d_1point compute_Xg_nurbs_1d_1point module~forcad_utils forcad_utils proc~compute_xg_nurbs_1d_1point->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: Xt real(kind=rk), intent(in), contiguous :: knot (:) integer, intent(in) :: degree integer, intent(in) :: nc real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), contiguous :: Wc (:) Return Value real(kind=rk), allocatable, (:) Calls proc~~compute_xg_nurbs_1d_1point~~CallsGraph proc~compute_xg_nurbs_1d_1point compute_Xg_nurbs_1d_1point proc~basis_bspline basis_bspline proc~compute_xg_nurbs_1d_1point->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.","tags":"","loc":"proc/compute_xg_nurbs_1d_1point.html"},{"title":"compute_Xg_bspline_1d – ForCAD","text":"impure function compute_Xg_bspline_1d(Xt, knot, degree, nc, ng, Xc) result(Xg) Uses forcad_utils proc~~compute_xg_bspline_1d~~UsesGraph proc~compute_xg_bspline_1d compute_Xg_bspline_1d module~forcad_utils forcad_utils proc~compute_xg_bspline_1d->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(in), contiguous :: knot (:) integer, intent(in) :: degree integer, intent(in) :: nc integer, intent(in) :: ng real(kind=rk), intent(in), contiguous :: Xc (:,:) Return Value real(kind=rk), allocatable, (:,:) Calls proc~~compute_xg_bspline_1d~~CallsGraph proc~compute_xg_bspline_1d compute_Xg_bspline_1d proc~basis_bspline basis_bspline proc~compute_xg_bspline_1d->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.","tags":"","loc":"proc/compute_xg_bspline_1d.html"},{"title":"compute_Xg_bspline_1d_1point – ForCAD","text":"impure function compute_Xg_bspline_1d_1point(Xt, knot, degree, nc, Xc) result(Xg) Uses forcad_utils proc~~compute_xg_bspline_1d_1point~~UsesGraph proc~compute_xg_bspline_1d_1point compute_Xg_bspline_1d_1point module~forcad_utils forcad_utils proc~compute_xg_bspline_1d_1point->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: Xt real(kind=rk), intent(in), contiguous :: knot (:) integer, intent(in) :: degree integer, intent(in) :: nc real(kind=rk), intent(in), contiguous :: Xc (:,:) Return Value real(kind=rk), allocatable, (:) Calls proc~~compute_xg_bspline_1d_1point~~CallsGraph proc~compute_xg_bspline_1d_1point compute_Xg_bspline_1d_1point proc~basis_bspline basis_bspline proc~compute_xg_bspline_1d_1point->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.","tags":"","loc":"proc/compute_xg_bspline_1d_1point.html"},{"title":"compute_Tgc_nurbs_1d_vector – ForCAD","text":"impure function compute_Tgc_nurbs_1d_vector(Xt, knot, degree, nc, ng, Wc) result(Tgc) Uses forcad_utils proc~~compute_tgc_nurbs_1d_vector~~UsesGraph proc~compute_tgc_nurbs_1d_vector compute_Tgc_nurbs_1d_vector module~forcad_utils forcad_utils proc~compute_tgc_nurbs_1d_vector->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(in), contiguous :: knot (:) integer, intent(in) :: degree integer, intent(in) :: nc integer, intent(in) :: ng real(kind=rk), intent(in), contiguous :: Wc (:) Return Value real(kind=rk), allocatable, (:,:) Calls proc~~compute_tgc_nurbs_1d_vector~~CallsGraph proc~compute_tgc_nurbs_1d_vector compute_Tgc_nurbs_1d_vector proc~basis_bspline basis_bspline proc~compute_tgc_nurbs_1d_vector->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.","tags":"","loc":"proc/compute_tgc_nurbs_1d_vector.html"},{"title":"compute_Tgc_nurbs_1d_scalar – ForCAD","text":"impure function compute_Tgc_nurbs_1d_scalar(Xt, knot, degree, nc, Wc) result(Tgc) Uses forcad_utils proc~~compute_tgc_nurbs_1d_scalar~~UsesGraph proc~compute_tgc_nurbs_1d_scalar compute_Tgc_nurbs_1d_scalar module~forcad_utils forcad_utils proc~compute_tgc_nurbs_1d_scalar->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: Xt real(kind=rk), intent(in), contiguous :: knot (:) integer, intent(in) :: degree integer, intent(in) :: nc real(kind=rk), intent(in), contiguous :: Wc (:) Return Value real(kind=rk), allocatable, (:) Calls proc~~compute_tgc_nurbs_1d_scalar~~CallsGraph proc~compute_tgc_nurbs_1d_scalar compute_Tgc_nurbs_1d_scalar proc~basis_bspline basis_bspline proc~compute_tgc_nurbs_1d_scalar->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.","tags":"","loc":"proc/compute_tgc_nurbs_1d_scalar.html"},{"title":"compute_Tgc_bspline_1d_vector – ForCAD","text":"impure function compute_Tgc_bspline_1d_vector(Xt, knot, degree, nc, ng) result(Tgc) Uses forcad_utils proc~~compute_tgc_bspline_1d_vector~~UsesGraph proc~compute_tgc_bspline_1d_vector compute_Tgc_bspline_1d_vector module~forcad_utils forcad_utils proc~compute_tgc_bspline_1d_vector->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(in), contiguous :: knot (:) integer, intent(in) :: degree integer, intent(in) :: nc integer, intent(in) :: ng Return Value real(kind=rk), allocatable, (:,:) Calls proc~~compute_tgc_bspline_1d_vector~~CallsGraph proc~compute_tgc_bspline_1d_vector compute_Tgc_bspline_1d_vector proc~basis_bspline basis_bspline proc~compute_tgc_bspline_1d_vector->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.","tags":"","loc":"proc/compute_tgc_bspline_1d_vector.html"},{"title":"compute_Tgc_bspline_1d_scalar – ForCAD","text":"impure function compute_Tgc_bspline_1d_scalar(Xt, knot, degree, nc) result(Tgc) Uses forcad_utils proc~~compute_tgc_bspline_1d_scalar~~UsesGraph proc~compute_tgc_bspline_1d_scalar compute_Tgc_bspline_1d_scalar module~forcad_utils forcad_utils proc~compute_tgc_bspline_1d_scalar->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: Xt real(kind=rk), intent(in), contiguous :: knot (:) integer, intent(in) :: degree integer, intent(in) :: nc Return Value real(kind=rk), allocatable, (:) Calls proc~~compute_tgc_bspline_1d_scalar~~CallsGraph proc~compute_tgc_bspline_1d_scalar compute_Tgc_bspline_1d_scalar proc~basis_bspline basis_bspline proc~compute_tgc_bspline_1d_scalar->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.","tags":"","loc":"proc/compute_tgc_bspline_1d_scalar.html"},{"title":"nearest_point_help_1d – ForCAD","text":"impure function nearest_point_help_1d(ng, Xg, point_Xg) result(distances) Uses forcad_utils proc~~nearest_point_help_1d~~UsesGraph proc~nearest_point_help_1d nearest_point_help_1d module~forcad_utils forcad_utils proc~nearest_point_help_1d->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. Arguments Type Intent Optional Attributes Name integer, intent(in) :: ng real(kind=rk), intent(in), contiguous :: Xg (:,:) real(kind=rk), intent(in), contiguous :: point_Xg (:) Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"proc/nearest_point_help_1d.html"},{"title":"compute_dTgc_nurbs_1d_vector – ForCAD","text":"impure subroutine compute_dTgc_nurbs_1d_vector(Xt, knot, degree, nc, ng, Wc, dTgc, Tgc) Uses forcad_utils proc~~compute_dtgc_nurbs_1d_vector~~UsesGraph proc~compute_dtgc_nurbs_1d_vector compute_dTgc_nurbs_1d_vector module~forcad_utils forcad_utils proc~compute_dtgc_nurbs_1d_vector->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(in), contiguous :: knot (:) integer, intent(in) :: degree integer, intent(in) :: nc integer, intent(in) :: ng real(kind=rk), intent(in), contiguous :: Wc (:) real(kind=rk), intent(out), allocatable :: dTgc (:,:) real(kind=rk), intent(out), allocatable :: Tgc (:,:) Calls proc~~compute_dtgc_nurbs_1d_vector~~CallsGraph proc~compute_dtgc_nurbs_1d_vector compute_dTgc_nurbs_1d_vector proc~basis_bspline_der basis_bspline_der proc~compute_dtgc_nurbs_1d_vector->proc~basis_bspline_der Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_dtgc_nurbs_1d_vector.html"},{"title":"compute_dTgc_nurbs_1d_scalar – ForCAD","text":"impure subroutine compute_dTgc_nurbs_1d_scalar(Xt, knot, degree, nc, Wc, dTgc, Tgc) Uses forcad_utils proc~~compute_dtgc_nurbs_1d_scalar~~UsesGraph proc~compute_dtgc_nurbs_1d_scalar compute_dTgc_nurbs_1d_scalar module~forcad_utils forcad_utils proc~compute_dtgc_nurbs_1d_scalar->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: Xt real(kind=rk), intent(in), contiguous :: knot (:) integer, intent(in) :: degree integer, intent(in) :: nc real(kind=rk), intent(in), contiguous :: Wc (:) real(kind=rk), intent(out), allocatable :: dTgc (:) real(kind=rk), intent(out), allocatable :: Tgc (:) Calls proc~~compute_dtgc_nurbs_1d_scalar~~CallsGraph proc~compute_dtgc_nurbs_1d_scalar compute_dTgc_nurbs_1d_scalar proc~basis_bspline_der basis_bspline_der proc~compute_dtgc_nurbs_1d_scalar->proc~basis_bspline_der Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_dtgc_nurbs_1d_scalar.html"},{"title":"compute_dTgc_bspline_1d_vector – ForCAD","text":"impure subroutine compute_dTgc_bspline_1d_vector(Xt, knot, degree, nc, ng, dTgc, Tgc) Uses forcad_utils proc~~compute_dtgc_bspline_1d_vector~~UsesGraph proc~compute_dtgc_bspline_1d_vector compute_dTgc_bspline_1d_vector module~forcad_utils forcad_utils proc~compute_dtgc_bspline_1d_vector->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(in), contiguous :: knot (:) integer, intent(in) :: degree integer, intent(in) :: nc integer, intent(in) :: ng real(kind=rk), intent(out), allocatable :: dTgc (:,:) real(kind=rk), intent(out), allocatable :: Tgc (:,:) Calls proc~~compute_dtgc_bspline_1d_vector~~CallsGraph proc~compute_dtgc_bspline_1d_vector compute_dTgc_bspline_1d_vector proc~basis_bspline_der basis_bspline_der proc~compute_dtgc_bspline_1d_vector->proc~basis_bspline_der Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_dtgc_bspline_1d_vector.html"},{"title":"compute_dTgc_bspline_1d_scalar – ForCAD","text":"impure subroutine compute_dTgc_bspline_1d_scalar(Xt, knot, degree, nc, dTgc, Tgc) Uses forcad_utils proc~~compute_dtgc_bspline_1d_scalar~~UsesGraph proc~compute_dtgc_bspline_1d_scalar compute_dTgc_bspline_1d_scalar module~forcad_utils forcad_utils proc~compute_dtgc_bspline_1d_scalar->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: Xt real(kind=rk), intent(in), contiguous :: knot (:) integer, intent(in) :: degree integer, intent(in) :: nc real(kind=rk), intent(out), allocatable :: dTgc (:) real(kind=rk), intent(out), allocatable :: Tgc (:) Calls proc~~compute_dtgc_bspline_1d_scalar~~CallsGraph proc~compute_dtgc_bspline_1d_scalar compute_dTgc_bspline_1d_scalar proc~basis_bspline_der basis_bspline_der proc~compute_dtgc_bspline_1d_scalar->proc~basis_bspline_der Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_dtgc_bspline_1d_scalar.html"},{"title":"compute_d2Tgc_nurbs_1d_vector – ForCAD","text":"impure subroutine compute_d2Tgc_nurbs_1d_vector(Xt, knot, degree, nc, ng, Wc, d2Tgc, dTgc, Tgc) Uses forcad_utils proc~~compute_d2tgc_nurbs_1d_vector~~UsesGraph proc~compute_d2tgc_nurbs_1d_vector compute_d2Tgc_nurbs_1d_vector module~forcad_utils forcad_utils proc~compute_d2tgc_nurbs_1d_vector->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(in), contiguous :: knot (:) integer, intent(in) :: degree integer, intent(in) :: nc integer, intent(in) :: ng real(kind=rk), intent(in), contiguous :: Wc (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:) real(kind=rk), intent(out), allocatable :: dTgc (:,:) real(kind=rk), intent(out), allocatable :: Tgc (:,:) Calls proc~~compute_d2tgc_nurbs_1d_vector~~CallsGraph proc~compute_d2tgc_nurbs_1d_vector compute_d2Tgc_nurbs_1d_vector proc~basis_bspline_2der basis_bspline_2der proc~compute_d2tgc_nurbs_1d_vector->proc~basis_bspline_2der Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_d2tgc_nurbs_1d_vector.html"},{"title":"compute_d2Tgc_nurbs_1d_scalar – ForCAD","text":"impure subroutine compute_d2Tgc_nurbs_1d_scalar(Xt, knot, degree, nc, Wc, d2Tgc, dTgc, Tgc) Uses forcad_utils proc~~compute_d2tgc_nurbs_1d_scalar~~UsesGraph proc~compute_d2tgc_nurbs_1d_scalar compute_d2Tgc_nurbs_1d_scalar module~forcad_utils forcad_utils proc~compute_d2tgc_nurbs_1d_scalar->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: Xt real(kind=rk), intent(in), contiguous :: knot (:) integer, intent(in) :: degree integer, intent(in) :: nc real(kind=rk), intent(in), contiguous :: Wc (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:) real(kind=rk), intent(out), allocatable :: dTgc (:) real(kind=rk), intent(out), allocatable :: Tgc (:) Calls proc~~compute_d2tgc_nurbs_1d_scalar~~CallsGraph proc~compute_d2tgc_nurbs_1d_scalar compute_d2Tgc_nurbs_1d_scalar proc~basis_bspline_2der basis_bspline_2der proc~compute_d2tgc_nurbs_1d_scalar->proc~basis_bspline_2der Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_d2tgc_nurbs_1d_scalar.html"},{"title":"compute_d2Tgc_bspline_1d_vector – ForCAD","text":"impure subroutine compute_d2Tgc_bspline_1d_vector(Xt, knot, degree, nc, ng, d2Tgc, dTgc, Tgc) Uses forcad_utils proc~~compute_d2tgc_bspline_1d_vector~~UsesGraph proc~compute_d2tgc_bspline_1d_vector compute_d2Tgc_bspline_1d_vector module~forcad_utils forcad_utils proc~compute_d2tgc_bspline_1d_vector->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(in), contiguous :: knot (:) integer, intent(in) :: degree integer, intent(in) :: nc integer, intent(in) :: ng real(kind=rk), intent(out), allocatable :: d2Tgc (:,:) real(kind=rk), intent(out), allocatable :: dTgc (:,:) real(kind=rk), intent(out), allocatable :: Tgc (:,:) Calls proc~~compute_d2tgc_bspline_1d_vector~~CallsGraph proc~compute_d2tgc_bspline_1d_vector compute_d2Tgc_bspline_1d_vector proc~basis_bspline_2der basis_bspline_2der proc~compute_d2tgc_bspline_1d_vector->proc~basis_bspline_2der Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_d2tgc_bspline_1d_vector.html"},{"title":"compute_d2Tgc_bspline_1d_scalar – ForCAD","text":"impure subroutine compute_d2Tgc_bspline_1d_scalar(Xt, knot, degree, nc, d2Tgc, dTgc, Tgc) Uses forcad_utils proc~~compute_d2tgc_bspline_1d_scalar~~UsesGraph proc~compute_d2tgc_bspline_1d_scalar compute_d2Tgc_bspline_1d_scalar module~forcad_utils forcad_utils proc~compute_d2tgc_bspline_1d_scalar->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. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: Xt real(kind=rk), intent(in), contiguous :: knot (:) integer, intent(in) :: degree integer, intent(in) :: nc real(kind=rk), intent(out), allocatable :: d2Tgc (:) real(kind=rk), intent(out), allocatable :: dTgc (:) real(kind=rk), intent(out), allocatable :: Tgc (:) Calls proc~~compute_d2tgc_bspline_1d_scalar~~CallsGraph proc~compute_d2tgc_bspline_1d_scalar compute_d2Tgc_bspline_1d_scalar proc~basis_bspline_2der basis_bspline_2der proc~compute_d2tgc_bspline_1d_scalar->proc~basis_bspline_2der Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_d2tgc_bspline_1d_scalar.html"},{"title":"cmp_Xg – ForCAD","text":"private pure function cmp_Xg(this, Xt) result(Xg) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this real(kind=rk), intent(in), contiguous :: Xt (:) Return Value real(kind=rk), allocatable, (:) Calls proc~~cmp_xg~~CallsGraph proc~cmp_xg nurbs_volume%cmp_Xg interface~compute_xg compute_Xg proc~cmp_xg->interface~compute_xg proc~is_rational nurbs_volume%is_rational proc~cmp_xg->proc~is_rational Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~cmp_xg~~CalledByGraph proc~cmp_xg nurbs_volume%cmp_Xg proc~nearest_point2 nurbs_volume%nearest_point2 proc~nearest_point2->proc~cmp_xg program~nearest_point_3d nearest_point_3d program~nearest_point_3d->proc~nearest_point2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_xg.html"},{"title":"cmp_degreeFace – ForCAD","text":"private pure function cmp_degreeFace(this, face) result(degree) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: face Return Value integer, (3) Called by proc~~cmp_degreeface~~CalledByGraph proc~cmp_degreeface nurbs_volume%cmp_degreeFace program~example3_volume example3_volume program~example3_volume->proc~cmp_degreeface Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_degreeface.html"},{"title":"cmp_elem – ForCAD","text":"private pure function cmp_elem(this) result(elemConn) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value integer, allocatable, (:,:) Calls proc~~cmp_elem~~CallsGraph proc~cmp_elem nurbs_volume%cmp_elem interface~elemconn_cn elemConn_Cn proc~cmp_elem->interface~elemconn_cn interface~unique unique proc~cmp_elem->interface~unique proc~get_multiplicity nurbs_volume%get_multiplicity proc~cmp_elem->proc~get_multiplicity proc~cmp_elemconn_cn_l cmp_elemConn_Cn_L interface~elemconn_cn->proc~cmp_elemconn_cn_l proc~cmp_elemconn_cn_s cmp_elemConn_Cn_S interface~elemconn_cn->proc~cmp_elemconn_cn_s proc~cmp_elemconn_cn_v cmp_elemConn_Cn_V interface~elemconn_cn->proc~cmp_elemconn_cn_v proc~unique_integer unique_integer interface~unique->proc~unique_integer proc~unique_real unique_real interface~unique->proc~unique_real interface~compute_multiplicity compute_multiplicity proc~get_multiplicity->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~cmp_elem~~CalledByGraph proc~cmp_elem nurbs_volume%cmp_elem program~example3_volume example3_volume program~example3_volume->proc~cmp_elem Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_elem.html"},{"title":"cmp_elemFace – ForCAD","text":"private pure function cmp_elemFace(this, elem, face) result(elemConn) number of nodes in each direction Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: elem integer, intent(in) :: face Return Value integer, allocatable, (:) Called by proc~~cmp_elemface~~CalledByGraph proc~cmp_elemface nurbs_volume%cmp_elemFace program~example3_volume example3_volume program~example3_volume->proc~cmp_elemface Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_elemface.html"},{"title":"cmp_elemFace_Xc_vis – ForCAD","text":"private pure function cmp_elemFace_Xc_vis(this, elem, face) result(elemConn) number of nodes in each direction Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: elem integer, intent(in) :: face Return Value integer, allocatable, (:)","tags":"","loc":"proc/cmp_elemface_xc_vis.html"},{"title":"cmp_elemFace_Xg_vis – ForCAD","text":"private pure function cmp_elemFace_Xg_vis(this, elem, face) result(elemConn) number of nodes in each direction Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: elem integer, intent(in) :: face Return Value integer, allocatable, (:)","tags":"","loc":"proc/cmp_elemface_xg_vis.html"},{"title":"cmp_elem_Xc_vis – ForCAD","text":"private pure function cmp_elem_Xc_vis(this, p) result(elemConn) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in), optional, contiguous :: p (:) Return Value integer, allocatable, (:,:) Calls proc~~cmp_elem_xc_vis~~CallsGraph proc~cmp_elem_xc_vis nurbs_volume%cmp_elem_Xc_vis interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xc_vis->interface~elemconn_c0 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v 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~~cmp_elem_xc_vis~~CalledByGraph proc~cmp_elem_xc_vis nurbs_volume%cmp_elem_Xc_vis proc~export_xc nurbs_volume%export_Xc proc~export_xc->proc~cmp_elem_xc_vis program~example3_volume example3_volume program~example3_volume->proc~export_xc program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~export_xc program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->proc~export_xc program~shape_c_3d shape_C_3d program~shape_c_3d->proc~export_xc program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~export_xc program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~export_xc program~shape_ring_3d shape_ring_3d program~shape_ring_3d->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/cmp_elem_xc_vis.html"},{"title":"cmp_elem_Xg_vis – ForCAD","text":"private pure function cmp_elem_Xg_vis(this, p) result(elemConn) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in), optional, contiguous :: p (:) Return Value integer, allocatable, (:,:) Calls proc~~cmp_elem_xg_vis~~CallsGraph proc~cmp_elem_xg_vis nurbs_volume%cmp_elem_Xg_vis interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xg_vis->interface~elemconn_c0 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v 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~~cmp_elem_xg_vis~~CalledByGraph proc~cmp_elem_xg_vis nurbs_volume%cmp_elem_Xg_vis proc~export_xg nurbs_volume%export_Xg proc~export_xg->proc~cmp_elem_xg_vis program~example3_volume example3_volume program~example3_volume->proc~export_xg program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~export_xg program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->proc~export_xg program~shape_c_3d shape_C_3d program~shape_c_3d->proc~export_xg program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~export_xg program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~export_xg program~shape_ring_3d shape_ring_3d program~shape_ring_3d->proc~export_xg Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/cmp_elem_xg_vis.html"},{"title":"get_Wc_all – ForCAD","text":"private pure function get_Wc_all(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, (:) Called by proc~~get_wc_all~~CalledByGraph proc~get_wc_all nurbs_volume%get_Wc_all none~get_wc nurbs_volume%get_Wc none~get_wc->proc~get_wc_all proc~modify_wc nurbs_volume%modify_Wc proc~modify_wc->none~get_wc proc~modify_xc nurbs_volume%modify_Xc proc~modify_xc->none~get_wc Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_wc_all.html"},{"title":"get_Wci – ForCAD","text":"private pure function get_Wci(this, n) result(Wc) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk) Called by proc~~get_wci~~CalledByGraph proc~get_wci nurbs_volume%get_Wci none~get_wc nurbs_volume%get_Wc none~get_wc->proc~get_wci proc~modify_wc nurbs_volume%modify_Wc proc~modify_wc->none~get_wc proc~modify_xc nurbs_volume%modify_Xc proc~modify_xc->none~get_wc Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_wci.html"},{"title":"get_Xc_all – ForCAD","text":"private pure function get_Xc_all(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, (:,:) Called by proc~~get_xc_all~~CalledByGraph proc~get_xc_all nurbs_volume%get_Xc_all none~get_xc nurbs_volume%get_Xc none~get_xc->proc~get_xc_all proc~modify_wc nurbs_volume%modify_Wc proc~modify_wc->none~get_xc proc~modify_xc nurbs_volume%modify_Xc proc~modify_xc->none~get_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_xc_all.html"},{"title":"get_Xci – ForCAD","text":"private pure function get_Xci(this, n) result(Xc) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk), allocatable, (:) Called by proc~~get_xci~~CalledByGraph proc~get_xci nurbs_volume%get_Xci none~get_xc nurbs_volume%get_Xc none~get_xc->proc~get_xci proc~modify_wc nurbs_volume%modify_Wc proc~modify_wc->none~get_xc proc~modify_xc nurbs_volume%modify_Xc proc~modify_xc->none~get_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_xci.html"},{"title":"get_Xcid – ForCAD","text":"private pure function get_Xcid(this, n, dir) result(Xc) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: n integer, intent(in) :: dir Return Value real(kind=rk) Called by proc~~get_xcid~~CalledByGraph proc~get_xcid nurbs_volume%get_Xcid none~get_xc nurbs_volume%get_Xc none~get_xc->proc~get_xcid proc~modify_wc nurbs_volume%modify_Wc proc~modify_wc->none~get_xc proc~modify_xc nurbs_volume%modify_Xc proc~modify_xc->none~get_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_xcid.html"},{"title":"get_Xg_all – ForCAD","text":"private pure function get_Xg_all(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_all.html"},{"title":"get_Xgi – ForCAD","text":"private pure function get_Xgi(this, n) result(Xg) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"proc/get_xgi.html"},{"title":"get_Xgid – ForCAD","text":"private pure function get_Xgid(this, n, dir) result(Xg) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: n integer, intent(in) :: dir Return Value real(kind=rk)","tags":"","loc":"proc/get_xgid.html"},{"title":"get_Xt – ForCAD","text":"private pure function get_Xt(this, dir) result(Xt) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: dir Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"proc/get_xt.html"},{"title":"get_continuity – ForCAD","text":"private pure function get_continuity(this, dir) result(c) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: dir Return Value integer, allocatable, (:) Calls proc~~get_continuity~~CallsGraph proc~get_continuity nurbs_volume%get_continuity interface~compute_multiplicity compute_multiplicity proc~get_continuity->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_degree_all – ForCAD","text":"private pure function get_degree_all(this) result(degree) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value integer, (3) Called by proc~~get_degree_all~~CalledByGraph proc~get_degree_all nurbs_volume%get_degree_all none~get_degree nurbs_volume%get_degree none~get_degree->proc~get_degree_all program~example3_volume example3_volume program~example3_volume->none~get_degree Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_degree_all.html"},{"title":"get_degree_dir – ForCAD","text":"private pure function get_degree_dir(this, dir) result(degree) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: dir Return Value integer Called by proc~~get_degree_dir~~CalledByGraph proc~get_degree_dir nurbs_volume%get_degree_dir none~get_degree nurbs_volume%get_degree none~get_degree->proc~get_degree_dir program~example3_volume example3_volume program~example3_volume->none~get_degree Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_degree_dir.html"},{"title":"get_elem – ForCAD","text":"private pure function get_elem(this) result(elemConn) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value integer, allocatable, (:,:)","tags":"","loc":"proc/get_elem.html"},{"title":"get_elem_Xc_vis – ForCAD","text":"private pure function get_elem_Xc_vis(this) result(elemConn) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value integer, allocatable, (:,:)","tags":"","loc":"proc/get_elem_xc_vis.html"},{"title":"get_elem_Xg_vis – ForCAD","text":"private pure function get_elem_Xg_vis(this) result(elemConn) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value integer, allocatable, (:,:)","tags":"","loc":"proc/get_elem_xg_vis.html"},{"title":"get_knot_all – ForCAD","text":"private pure function get_knot_all(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, (:) Called by proc~~get_knot_all~~CalledByGraph proc~get_knot_all nurbs_volume%get_knot_all none~get_knot nurbs_volume%get_knot none~get_knot->proc~get_knot_all proc~elevate_degree nurbs_volume%elevate_degree proc~elevate_degree->none~get_knot proc~insert_knots nurbs_volume%insert_knots proc~insert_knots->none~get_knot proc~modify_wc nurbs_volume%modify_Wc proc~modify_wc->none~get_knot proc~modify_xc nurbs_volume%modify_Xc proc~modify_xc->none~get_knot proc~remove_knots nurbs_volume%remove_knots proc~remove_knots->none~get_knot program~example3_volume example3_volume program~example3_volume->none~get_knot program~example3_volume->proc~elevate_degree program~example3_volume->proc~insert_knots program~example3_volume->proc~remove_knots Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_knot_all.html"},{"title":"get_knoti – ForCAD","text":"private pure function get_knoti(this, dir, i) result(knot) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: dir integer, intent(in) :: i Return Value real(kind=rk) Called by proc~~get_knoti~~CalledByGraph proc~get_knoti nurbs_volume%get_knoti none~get_knot nurbs_volume%get_knot none~get_knot->proc~get_knoti proc~elevate_degree nurbs_volume%elevate_degree proc~elevate_degree->none~get_knot proc~insert_knots nurbs_volume%insert_knots proc~insert_knots->none~get_knot proc~modify_wc nurbs_volume%modify_Wc proc~modify_wc->none~get_knot proc~modify_xc nurbs_volume%modify_Xc proc~modify_xc->none~get_knot proc~remove_knots nurbs_volume%remove_knots proc~remove_knots->none~get_knot program~example3_volume example3_volume program~example3_volume->none~get_knot program~example3_volume->proc~elevate_degree program~example3_volume->proc~insert_knots program~example3_volume->proc~remove_knots Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_knoti.html"},{"title":"get_multiplicity – ForCAD","text":"private pure function get_multiplicity(this, dir) result(m) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: dir Return Value integer, allocatable, (:) Calls proc~~get_multiplicity~~CallsGraph proc~get_multiplicity nurbs_volume%get_multiplicity interface~compute_multiplicity compute_multiplicity proc~get_multiplicity->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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 nurbs_volume%get_multiplicity proc~cmp_degree nurbs_volume%cmp_degree proc~cmp_degree->proc~get_multiplicity proc~cmp_elem nurbs_volume%cmp_elem proc~cmp_elem->proc~get_multiplicity proc~set1 nurbs_volume%set1 proc~set1->proc~cmp_degree proc~set3 nurbs_volume%set3 proc~set3->proc~cmp_degree program~example3_volume example3_volume program~example3_volume->proc~cmp_elem none~set nurbs_volume%set program~example3_volume->none~set proc~elevate_degree nurbs_volume%elevate_degree program~example3_volume->proc~elevate_degree proc~insert_knots nurbs_volume%insert_knots program~example3_volume->proc~insert_knots proc~remove_knots nurbs_volume%remove_knots program~example3_volume->proc~remove_knots none~set->proc~set1 none~set->proc~set3 proc~elevate_degree->none~set proc~insert_knots->none~set proc~modify_wc nurbs_volume%modify_Wc proc~modify_wc->none~set proc~modify_xc nurbs_volume%modify_Xc proc~modify_xc->none~set proc~remove_knots->none~set proc~set_c nurbs_volume%set_C proc~set_c->none~set proc~set_half_ring nurbs_volume%set_half_ring proc~set_half_ring->none~set proc~set_hexahedron nurbs_volume%set_hexahedron proc~set_hexahedron->none~set proc~set_ring nurbs_volume%set_ring proc~set_ring->none~set program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->none~set program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->none~set program~nearest_point_3d nearest_point_3d program~nearest_point_3d->none~set program~shape_c_3d shape_C_3d program~shape_c_3d->proc~set_c program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~set_half_ring program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~set_hexahedron program~shape_ring_3d shape_ring_3d program~shape_ring_3d->proc~set_ring Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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) Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: dir Return Value integer Calls proc~~get_nc~~CallsGraph proc~get_nc get_nc interface~compute_multiplicity compute_multiplicity proc~get_nc->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_nc.html"},{"title":"get_ng – ForCAD","text":"private pure function get_ng(this) result(ng) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value integer, (3)","tags":"","loc":"proc/get_ng.html"},{"title":"is_rational – ForCAD","text":"private pure function is_rational(this) result(r) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value logical Called by proc~~is_rational~~CalledByGraph proc~is_rational nurbs_volume%is_rational proc~basis_scalar nurbs_volume%basis_scalar proc~basis_scalar->proc~is_rational proc~basis_vector nurbs_volume%basis_vector proc~basis_vector->proc~is_rational proc~cmp_xg nurbs_volume%cmp_Xg proc~cmp_xg->proc~is_rational proc~create nurbs_volume%create proc~create->proc~is_rational proc~derivative2_scalar nurbs_volume%derivative2_scalar proc~derivative2_scalar->proc~is_rational proc~derivative2_vector nurbs_volume%derivative2_vector proc~derivative2_vector->proc~is_rational proc~derivative_scalar nurbs_volume%derivative_scalar proc~derivative_scalar->proc~is_rational proc~derivative_vector nurbs_volume%derivative_vector proc~derivative_vector->proc~is_rational none~derivative2 nurbs_volume%derivative2 none~derivative2->proc~derivative2_scalar none~derivative2->proc~derivative2_vector proc~nearest_point2 nurbs_volume%nearest_point2 proc~nearest_point2->proc~cmp_xg proc~nearest_point2->proc~create proc~nearest_point2->none~derivative2 program~example3_volume example3_volume program~example3_volume->proc~create program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~create program~nearest_point_3d nearest_point_3d program~nearest_point_3d->proc~create program~nearest_point_3d->proc~nearest_point2 program~shape_c_3d shape_C_3d program~shape_c_3d->proc~create program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~create program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~create program~shape_ring_3d shape_ring_3d program~shape_ring_3d->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/is_rational.html"},{"title":"basis_scalar – ForCAD","text":"private pure subroutine basis_scalar(this, Xt, Tgc) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: Tgc (:) Calls proc~~basis_scalar~~CallsGraph proc~basis_scalar nurbs_volume%basis_scalar interface~compute_tgc compute_Tgc proc~basis_scalar->interface~compute_tgc proc~is_rational nurbs_volume%is_rational proc~basis_scalar->proc~is_rational Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_scalar.html"},{"title":"basis_vector – ForCAD","text":"private pure subroutine basis_vector(this, res1, res2, res3, Xt1, Xt2, Xt3, Tgc) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(in), optional, contiguous :: Xt3 (:) real(kind=rk), intent(out), allocatable :: Tgc (:,:) Calls proc~~basis_vector~~CallsGraph proc~basis_vector nurbs_volume%basis_vector interface~compute_tgc compute_Tgc proc~basis_vector->interface~compute_tgc interface~ndgrid ndgrid proc~basis_vector->interface~ndgrid proc~is_rational nurbs_volume%is_rational proc~basis_vector->proc~is_rational proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 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.","tags":"","loc":"proc/basis_vector.html"},{"title":"cmp_degree – ForCAD","text":"private pure subroutine cmp_degree(this, dir) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), optional :: dir Calls proc~~cmp_degree~~CallsGraph proc~cmp_degree nurbs_volume%cmp_degree proc~get_multiplicity nurbs_volume%get_multiplicity proc~cmp_degree->proc~get_multiplicity interface~compute_multiplicity compute_multiplicity proc~get_multiplicity->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~cmp_degree~~CalledByGraph proc~cmp_degree nurbs_volume%cmp_degree proc~set1 nurbs_volume%set1 proc~set1->proc~cmp_degree proc~set3 nurbs_volume%set3 proc~set3->proc~cmp_degree none~set nurbs_volume%set none~set->proc~set1 none~set->proc~set3 proc~elevate_degree nurbs_volume%elevate_degree proc~elevate_degree->none~set proc~insert_knots nurbs_volume%insert_knots proc~insert_knots->none~set proc~modify_wc nurbs_volume%modify_Wc proc~modify_wc->none~set proc~modify_xc nurbs_volume%modify_Xc proc~modify_xc->none~set proc~remove_knots nurbs_volume%remove_knots proc~remove_knots->none~set proc~set_c nurbs_volume%set_C proc~set_c->none~set proc~set_half_ring nurbs_volume%set_half_ring proc~set_half_ring->none~set proc~set_hexahedron nurbs_volume%set_hexahedron proc~set_hexahedron->none~set proc~set_ring nurbs_volume%set_ring proc~set_ring->none~set program~example3_volume example3_volume program~example3_volume->none~set program~example3_volume->proc~elevate_degree program~example3_volume->proc~insert_knots program~example3_volume->proc~remove_knots program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->none~set program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->none~set program~nearest_point_3d nearest_point_3d program~nearest_point_3d->none~set program~shape_c_3d shape_C_3d program~shape_c_3d->proc~set_c program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~set_half_ring program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~set_hexahedron program~shape_ring_3d shape_ring_3d program~shape_ring_3d->proc~set_ring Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_degree.html"},{"title":"cmp_nc – ForCAD","text":"private pure subroutine cmp_nc(this, dir) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), optional :: dir Calls proc~~cmp_nc~~CallsGraph proc~cmp_nc nurbs_volume%cmp_nc interface~compute_multiplicity compute_multiplicity proc~cmp_nc->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~cmp_nc~~CalledByGraph proc~cmp_nc nurbs_volume%cmp_nc proc~set1 nurbs_volume%set1 proc~set1->proc~cmp_nc proc~set2 nurbs_volume%set2 proc~set2->proc~cmp_nc none~set nurbs_volume%set none~set->proc~set1 none~set->proc~set2 proc~elevate_degree nurbs_volume%elevate_degree proc~elevate_degree->none~set proc~insert_knots nurbs_volume%insert_knots proc~insert_knots->none~set proc~modify_wc nurbs_volume%modify_Wc proc~modify_wc->none~set proc~modify_xc nurbs_volume%modify_Xc proc~modify_xc->none~set proc~remove_knots nurbs_volume%remove_knots proc~remove_knots->none~set proc~set_c nurbs_volume%set_C proc~set_c->none~set proc~set_half_ring nurbs_volume%set_half_ring proc~set_half_ring->none~set proc~set_hexahedron nurbs_volume%set_hexahedron proc~set_hexahedron->none~set proc~set_ring nurbs_volume%set_ring proc~set_ring->none~set program~example3_volume example3_volume program~example3_volume->none~set program~example3_volume->proc~elevate_degree program~example3_volume->proc~insert_knots program~example3_volume->proc~remove_knots program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->none~set program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->none~set program~nearest_point_3d nearest_point_3d program~nearest_point_3d->none~set program~shape_c_3d shape_C_3d program~shape_c_3d->proc~set_c program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~set_half_ring program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~set_hexahedron program~shape_ring_3d shape_ring_3d program~shape_ring_3d->proc~set_ring Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_nc.html"},{"title":"create – ForCAD","text":"private pure subroutine create(this, res1, res2, res3, Xt1, Xt2, Xt3, Xt) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(in), optional, contiguous :: Xt3 (:) real(kind=rk), intent(in), optional, contiguous :: Xt (:,:) Calls proc~~create~~CallsGraph proc~create nurbs_volume%create interface~compute_xg compute_Xg proc~create->interface~compute_xg interface~ndgrid ndgrid proc~create->interface~ndgrid proc~is_rational nurbs_volume%is_rational proc~create->proc~is_rational proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 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 nurbs_volume%create proc~nearest_point2 nurbs_volume%nearest_point2 proc~nearest_point2->proc~create program~example3_volume example3_volume program~example3_volume->proc~create program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~create program~nearest_point_3d nearest_point_3d program~nearest_point_3d->proc~create program~nearest_point_3d->proc~nearest_point2 program~shape_c_3d shape_C_3d program~shape_c_3d->proc~create program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~create program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~create program~shape_ring_3d shape_ring_3d program~shape_ring_3d->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":"derivative2_scalar – ForCAD","text":"private pure subroutine derivative2_scalar(this, Xt, d2Tgc, dTgc, Tgc) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:) real(kind=rk), intent(out), optional, allocatable :: dTgc (:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:) Calls proc~~derivative2_scalar~~CallsGraph proc~derivative2_scalar nurbs_volume%derivative2_scalar interface~compute_d2tgc compute_d2Tgc proc~derivative2_scalar->interface~compute_d2tgc proc~is_rational nurbs_volume%is_rational proc~derivative2_scalar->proc~is_rational Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~derivative2_scalar~~CalledByGraph proc~derivative2_scalar nurbs_volume%derivative2_scalar none~derivative2 nurbs_volume%derivative2 none~derivative2->proc~derivative2_scalar proc~nearest_point2 nurbs_volume%nearest_point2 proc~nearest_point2->none~derivative2 program~nearest_point_3d nearest_point_3d program~nearest_point_3d->proc~nearest_point2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/derivative2_scalar.html"},{"title":"derivative2_vector – ForCAD","text":"private pure subroutine derivative2_vector(this, res1, res2, res3, Xt1, Xt2, Xt3, d2Tgc, dTgc, Tgc) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(in), optional, contiguous :: Xt3 (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:,:) real(kind=rk), intent(out), optional, allocatable :: dTgc (:,:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:,:) Calls proc~~derivative2_vector~~CallsGraph proc~derivative2_vector nurbs_volume%derivative2_vector interface~compute_d2tgc compute_d2Tgc proc~derivative2_vector->interface~compute_d2tgc interface~ndgrid ndgrid proc~derivative2_vector->interface~ndgrid proc~is_rational nurbs_volume%is_rational proc~derivative2_vector->proc~is_rational proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 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~~derivative2_vector~~CalledByGraph proc~derivative2_vector nurbs_volume%derivative2_vector none~derivative2 nurbs_volume%derivative2 none~derivative2->proc~derivative2_vector proc~nearest_point2 nurbs_volume%nearest_point2 proc~nearest_point2->none~derivative2 program~nearest_point_3d nearest_point_3d program~nearest_point_3d->proc~nearest_point2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/derivative2_vector.html"},{"title":"derivative_scalar – ForCAD","text":"private pure subroutine derivative_scalar(this, Xt, dTgc, Tgc) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: dTgc (:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:) Calls proc~~derivative_scalar~~CallsGraph proc~derivative_scalar nurbs_volume%derivative_scalar interface~compute_dtgc compute_dTgc proc~derivative_scalar->interface~compute_dtgc proc~is_rational nurbs_volume%is_rational proc~derivative_scalar->proc~is_rational Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/derivative_scalar.html"},{"title":"derivative_vector – ForCAD","text":"private pure subroutine derivative_vector(this, res1, res2, res3, Xt1, Xt2, Xt3, dTgc, Tgc) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(in), optional, contiguous :: Xt3 (:) real(kind=rk), intent(out), allocatable :: dTgc (:,:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:,:) Calls proc~~derivative_vector~~CallsGraph proc~derivative_vector nurbs_volume%derivative_vector interface~compute_dtgc compute_dTgc proc~derivative_vector->interface~compute_dtgc interface~ndgrid ndgrid proc~derivative_vector->interface~ndgrid proc~is_rational nurbs_volume%is_rational proc~derivative_vector->proc~is_rational proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 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.","tags":"","loc":"proc/derivative_vector.html"},{"title":"elevate_degree – ForCAD","text":"private pure subroutine elevate_degree(this, dir, t) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in) :: dir integer, intent(in) :: t Calls proc~~elevate_degree~~CallsGraph proc~elevate_degree nurbs_volume%elevate_degree none~get_knot nurbs_volume%get_knot proc~elevate_degree->none~get_knot none~set nurbs_volume%set proc~elevate_degree->none~set proc~elevate_degree_a_5_9 elevate_degree_A_5_9 proc~elevate_degree->proc~elevate_degree_a_5_9 proc~get_knot_all nurbs_volume%get_knot_all none~get_knot->proc~get_knot_all proc~get_knoti nurbs_volume%get_knoti none~get_knot->proc~get_knoti proc~set1 nurbs_volume%set1 none~set->proc~set1 proc~set2 nurbs_volume%set2 none~set->proc~set2 proc~set3 nurbs_volume%set3 none~set->proc~set3 interface~compute_multiplicity compute_multiplicity proc~elevate_degree_a_5_9->interface~compute_multiplicity proc~bincoeff bincoeff proc~elevate_degree_a_5_9->proc~bincoeff proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~factln factln proc~bincoeff->proc~factln proc~cmp_degree nurbs_volume%cmp_degree proc~set1->proc~cmp_degree proc~cmp_nc nurbs_volume%cmp_nc proc~set1->proc~cmp_nc proc~set2->proc~cmp_nc proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector proc~set3->proc~cmp_degree proc~get_multiplicity nurbs_volume%get_multiplicity proc~cmp_degree->proc~get_multiplicity proc~cmp_nc->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~get_multiplicity->interface~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~~elevate_degree~~CalledByGraph proc~elevate_degree nurbs_volume%elevate_degree program~example3_volume example3_volume program~example3_volume->proc~elevate_degree Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this character(len=*), intent(in) :: filename Calls proc~~export_xc~~CallsGraph proc~export_xc nurbs_volume%export_Xc proc~cmp_elem_xc_vis nurbs_volume%cmp_elem_Xc_vis proc~export_xc->proc~cmp_elem_xc_vis interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xc_vis->interface~elemconn_c0 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v 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 nurbs_volume%export_Xc program~example3_volume example3_volume program~example3_volume->proc~export_xc program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~export_xc program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->proc~export_xc program~shape_c_3d shape_C_3d program~shape_c_3d->proc~export_xc program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~export_xc program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~export_xc program~shape_ring_3d shape_ring_3d program~shape_ring_3d->proc~export_xc Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/export_xc.html"},{"title":"export_Xg – ForCAD","text":"private impure subroutine export_Xg(this, filename) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this character(len=*), intent(in) :: filename Calls proc~~export_xg~~CallsGraph proc~export_xg nurbs_volume%export_Xg proc~cmp_elem_xg_vis nurbs_volume%cmp_elem_Xg_vis proc~export_xg->proc~cmp_elem_xg_vis interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xg_vis->interface~elemconn_c0 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v 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 nurbs_volume%export_Xg program~example3_volume example3_volume program~example3_volume->proc~export_xg program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~export_xg program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->proc~export_xg program~shape_c_3d shape_C_3d program~shape_c_3d->proc~export_xg program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~export_xg program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~export_xg program~shape_ring_3d shape_ring_3d program~shape_ring_3d->proc~export_xg Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/export_xg.html"},{"title":"finalize – ForCAD","text":"private pure subroutine finalize(this) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this Called by proc~~finalize~~CalledByGraph proc~finalize nurbs_volume%finalize proc~nearest_point2 nurbs_volume%nearest_point2 proc~nearest_point2->proc~finalize program~example3_volume example3_volume program~example3_volume->proc~finalize program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~finalize program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->proc~finalize program~nearest_point_3d nearest_point_3d program~nearest_point_3d->proc~finalize program~nearest_point_3d->proc~nearest_point2 program~shape_c_3d shape_C_3d program~shape_c_3d->proc~finalize program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~finalize program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~finalize program~shape_ring_3d shape_ring_3d program~shape_ring_3d->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":"insert_knots – ForCAD","text":"private pure subroutine insert_knots(this, dir, Xth, r) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in) :: dir real(kind=rk), intent(in), contiguous :: Xth (:) integer, intent(in), contiguous :: r (:) Calls proc~~insert_knots~~CallsGraph proc~insert_knots nurbs_volume%insert_knots interface~compute_multiplicity compute_multiplicity proc~insert_knots->interface~compute_multiplicity none~get_knot nurbs_volume%get_knot proc~insert_knots->none~get_knot none~set nurbs_volume%set proc~insert_knots->none~set proc~findspan findspan proc~insert_knots->proc~findspan proc~insert_knot_a_5_1 insert_knot_A_5_1 proc~insert_knots->proc~insert_knot_a_5_1 proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_knot_all nurbs_volume%get_knot_all none~get_knot->proc~get_knot_all proc~get_knoti nurbs_volume%get_knoti none~get_knot->proc~get_knoti proc~set1 nurbs_volume%set1 none~set->proc~set1 proc~set2 nurbs_volume%set2 none~set->proc~set2 proc~set3 nurbs_volume%set3 none~set->proc~set3 proc~cmp_degree nurbs_volume%cmp_degree proc~set1->proc~cmp_degree proc~cmp_nc nurbs_volume%cmp_nc proc~set1->proc~cmp_nc proc~set2->proc~cmp_nc proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector proc~set3->proc~cmp_degree proc~get_multiplicity nurbs_volume%get_multiplicity proc~cmp_degree->proc~get_multiplicity proc~cmp_nc->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~get_multiplicity->interface~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~~insert_knots~~CalledByGraph proc~insert_knots nurbs_volume%insert_knots program~example3_volume example3_volume program~example3_volume->proc~insert_knots Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/insert_knots.html"},{"title":"modify_Wc – ForCAD","text":"private pure subroutine modify_Wc(this, W, num) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in) :: W integer, intent(in) :: num Calls proc~~modify_wc~~CallsGraph proc~modify_wc nurbs_volume%modify_Wc none~get_knot nurbs_volume%get_knot proc~modify_wc->none~get_knot none~get_wc nurbs_volume%get_Wc proc~modify_wc->none~get_wc none~get_xc nurbs_volume%get_Xc proc~modify_wc->none~get_xc none~set nurbs_volume%set proc~modify_wc->none~set proc~get_knot_all nurbs_volume%get_knot_all none~get_knot->proc~get_knot_all proc~get_knoti nurbs_volume%get_knoti none~get_knot->proc~get_knoti proc~get_wc_all nurbs_volume%get_Wc_all none~get_wc->proc~get_wc_all proc~get_wci nurbs_volume%get_Wci none~get_wc->proc~get_wci proc~get_xc_all nurbs_volume%get_Xc_all none~get_xc->proc~get_xc_all proc~get_xci nurbs_volume%get_Xci none~get_xc->proc~get_xci proc~get_xcid nurbs_volume%get_Xcid none~get_xc->proc~get_xcid proc~set1 nurbs_volume%set1 none~set->proc~set1 proc~set2 nurbs_volume%set2 none~set->proc~set2 proc~set3 nurbs_volume%set3 none~set->proc~set3 proc~cmp_degree nurbs_volume%cmp_degree proc~set1->proc~cmp_degree proc~cmp_nc nurbs_volume%cmp_nc proc~set1->proc~cmp_nc proc~set2->proc~cmp_nc proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector proc~set3->proc~cmp_degree proc~get_multiplicity nurbs_volume%get_multiplicity proc~cmp_degree->proc~get_multiplicity interface~compute_multiplicity compute_multiplicity proc~cmp_nc->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity->interface~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/modify_wc.html"},{"title":"modify_Xc – ForCAD","text":"private pure subroutine modify_Xc(this, X, num, dir) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in) :: X integer, intent(in) :: num integer, intent(in) :: dir Calls proc~~modify_xc~~CallsGraph proc~modify_xc nurbs_volume%modify_Xc none~get_knot nurbs_volume%get_knot proc~modify_xc->none~get_knot none~get_wc nurbs_volume%get_Wc proc~modify_xc->none~get_wc none~get_xc nurbs_volume%get_Xc proc~modify_xc->none~get_xc none~set nurbs_volume%set proc~modify_xc->none~set proc~get_knot_all nurbs_volume%get_knot_all none~get_knot->proc~get_knot_all proc~get_knoti nurbs_volume%get_knoti none~get_knot->proc~get_knoti proc~get_wc_all nurbs_volume%get_Wc_all none~get_wc->proc~get_wc_all proc~get_wci nurbs_volume%get_Wci none~get_wc->proc~get_wci proc~get_xc_all nurbs_volume%get_Xc_all none~get_xc->proc~get_xc_all proc~get_xci nurbs_volume%get_Xci none~get_xc->proc~get_xci proc~get_xcid nurbs_volume%get_Xcid none~get_xc->proc~get_xcid proc~set1 nurbs_volume%set1 none~set->proc~set1 proc~set2 nurbs_volume%set2 none~set->proc~set2 proc~set3 nurbs_volume%set3 none~set->proc~set3 proc~cmp_degree nurbs_volume%cmp_degree proc~set1->proc~cmp_degree proc~cmp_nc nurbs_volume%cmp_nc proc~set1->proc~cmp_nc proc~set2->proc~cmp_nc proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector proc~set3->proc~cmp_degree proc~get_multiplicity nurbs_volume%get_multiplicity proc~cmp_degree->proc~get_multiplicity interface~compute_multiplicity compute_multiplicity proc~cmp_nc->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity->interface~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":"nearest_point – ForCAD","text":"private pure subroutine nearest_point(this, point_Xg, nearest_Xg, nearest_Xt, id) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this real(kind=rk), intent(in) :: point_Xg (:) real(kind=rk), intent(out), optional, allocatable :: nearest_Xg (:) real(kind=rk), intent(out), optional, allocatable :: nearest_Xt (:) integer, intent(out), optional :: id Calls proc~~nearest_point~~CallsGraph proc~nearest_point nurbs_volume%nearest_point interface~nearest_point_help_3d nearest_point_help_3d proc~nearest_point->interface~nearest_point_help_3d Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~nearest_point~~CalledByGraph proc~nearest_point nurbs_volume%nearest_point program~nearest_point_3d nearest_point_3d program~nearest_point_3d->proc~nearest_point Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/nearest_point.html"},{"title":"nearest_point2 – ForCAD","text":"private impure subroutine nearest_point2(this, point_Xg, tol, maxit, nearest_Xt, nearest_Xg) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in) :: point_Xg (:) real(kind=rk), intent(in) :: tol integer, intent(in) :: maxit real(kind=rk), intent(out) :: nearest_Xt (3) real(kind=rk), intent(out), optional, allocatable :: nearest_Xg (:) Calls proc~~nearest_point2~~CallsGraph proc~nearest_point2 nurbs_volume%nearest_point2 interface~nearest_point_help_3d nearest_point_help_3d proc~nearest_point2->interface~nearest_point_help_3d none~derivative2 nurbs_volume%derivative2 proc~nearest_point2->none~derivative2 proc~cmp_xg nurbs_volume%cmp_Xg proc~nearest_point2->proc~cmp_xg proc~create nurbs_volume%create proc~nearest_point2->proc~create proc~finalize nurbs_volume%finalize proc~nearest_point2->proc~finalize proc~derivative2_scalar nurbs_volume%derivative2_scalar none~derivative2->proc~derivative2_scalar proc~derivative2_vector nurbs_volume%derivative2_vector none~derivative2->proc~derivative2_vector interface~compute_xg compute_Xg proc~cmp_xg->interface~compute_xg proc~is_rational nurbs_volume%is_rational proc~cmp_xg->proc~is_rational proc~create->interface~compute_xg interface~ndgrid ndgrid proc~create->interface~ndgrid proc~create->proc~is_rational proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 ndgrid3 interface~ndgrid->proc~ndgrid3 proc~derivative2_scalar->proc~is_rational interface~compute_d2tgc compute_d2Tgc proc~derivative2_scalar->interface~compute_d2tgc proc~derivative2_vector->interface~ndgrid proc~derivative2_vector->proc~is_rational proc~derivative2_vector->interface~compute_d2tgc Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~nearest_point2~~CalledByGraph proc~nearest_point2 nurbs_volume%nearest_point2 program~nearest_point_3d nearest_point_3d program~nearest_point_3d->proc~nearest_point2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/nearest_point2.html"},{"title":"put_to_nurbs – ForCAD","text":"private pure subroutine put_to_nurbs(this, X, elemConn) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: X (:,:) integer, intent(in), contiguous :: elemConn (:,:) Calls proc~~put_to_nurbs~~CallsGraph proc~put_to_nurbs nurbs_volume%put_to_nurbs proc~basis_bspline basis_bspline proc~put_to_nurbs->proc~basis_bspline proc~kron kron proc~put_to_nurbs->proc~kron proc~set_elem_xg_vis nurbs_volume%set_elem_Xg_vis proc~put_to_nurbs->proc~set_elem_xg_vis Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~put_to_nurbs~~CalledByGraph proc~put_to_nurbs nurbs_volume%put_to_nurbs program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->proc~put_to_nurbs Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/put_to_nurbs.html"},{"title":"remove_knots – ForCAD","text":"private pure subroutine remove_knots(this, dir, Xth, r) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in) :: dir real(kind=rk), intent(in), contiguous :: Xth (:) integer, intent(in), contiguous :: r (:) Calls proc~~remove_knots~~CallsGraph proc~remove_knots nurbs_volume%remove_knots interface~compute_multiplicity compute_multiplicity proc~remove_knots->interface~compute_multiplicity none~get_knot nurbs_volume%get_knot proc~remove_knots->none~get_knot none~set nurbs_volume%set proc~remove_knots->none~set proc~findspan findspan proc~remove_knots->proc~findspan proc~remove_knots_a_5_8 remove_knots_A_5_8 proc~remove_knots->proc~remove_knots_a_5_8 proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_knot_all nurbs_volume%get_knot_all none~get_knot->proc~get_knot_all proc~get_knoti nurbs_volume%get_knoti none~get_knot->proc~get_knoti proc~set1 nurbs_volume%set1 none~set->proc~set1 proc~set2 nurbs_volume%set2 none~set->proc~set2 proc~set3 nurbs_volume%set3 none~set->proc~set3 proc~cmp_degree nurbs_volume%cmp_degree proc~set1->proc~cmp_degree proc~cmp_nc nurbs_volume%cmp_nc proc~set1->proc~cmp_nc proc~set2->proc~cmp_nc proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector proc~set3->proc~cmp_degree proc~get_multiplicity nurbs_volume%get_multiplicity proc~cmp_degree->proc~get_multiplicity proc~cmp_nc->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~get_multiplicity->interface~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~~remove_knots~~CalledByGraph proc~remove_knots nurbs_volume%remove_knots program~example3_volume example3_volume program~example3_volume->proc~remove_knots Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/remove_knots.html"},{"title":"rotate_Xc – ForCAD","text":"private pure subroutine rotate_Xc(this, alpha, beta, theta) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in) :: alpha real(kind=rk), intent(in) :: beta real(kind=rk), intent(in) :: theta Calls proc~~rotate_xc~~CallsGraph proc~rotate_xc nurbs_volume%rotate_Xc proc~rotation rotation proc~rotate_xc->proc~rotation cosd cosd proc~rotation->cosd sind sind proc~rotation->sind Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~rotate_xc~~CalledByGraph proc~rotate_xc nurbs_volume%rotate_Xc program~example3_volume example3_volume program~example3_volume->proc~rotate_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/rotate_xc.html"},{"title":"rotate_Xg – ForCAD","text":"private pure subroutine rotate_Xg(this, alpha, beta, theta) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in) :: alpha real(kind=rk), intent(in) :: beta real(kind=rk), intent(in) :: theta Calls proc~~rotate_xg~~CallsGraph proc~rotate_xg nurbs_volume%rotate_Xg proc~rotation rotation proc~rotate_xg->proc~rotation cosd cosd proc~rotation->cosd sind sind proc~rotation->sind Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~rotate_xg~~CalledByGraph proc~rotate_xg nurbs_volume%rotate_Xg program~example3_volume example3_volume program~example3_volume->proc~rotate_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/rotate_xg.html"},{"title":"set1 – ForCAD","text":"private pure subroutine set1(this, knot1, knot2, knot3, Xc, Wc) Set control points and weights for the NURBS volume object. Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) real(kind=rk), intent(in), contiguous :: knot3 (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) Calls proc~~set1~~CallsGraph proc~set1 nurbs_volume%set1 proc~cmp_degree nurbs_volume%cmp_degree proc~set1->proc~cmp_degree proc~cmp_nc nurbs_volume%cmp_nc proc~set1->proc~cmp_nc proc~get_multiplicity nurbs_volume%get_multiplicity proc~cmp_degree->proc~get_multiplicity interface~compute_multiplicity compute_multiplicity proc~cmp_nc->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity->interface~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 nurbs_volume%set1 none~set nurbs_volume%set none~set->proc~set1 proc~elevate_degree nurbs_volume%elevate_degree proc~elevate_degree->none~set proc~insert_knots nurbs_volume%insert_knots proc~insert_knots->none~set proc~modify_wc nurbs_volume%modify_Wc proc~modify_wc->none~set proc~modify_xc nurbs_volume%modify_Xc proc~modify_xc->none~set proc~remove_knots nurbs_volume%remove_knots proc~remove_knots->none~set proc~set_c nurbs_volume%set_C proc~set_c->none~set proc~set_half_ring nurbs_volume%set_half_ring proc~set_half_ring->none~set proc~set_hexahedron nurbs_volume%set_hexahedron proc~set_hexahedron->none~set proc~set_ring nurbs_volume%set_ring proc~set_ring->none~set program~example3_volume example3_volume program~example3_volume->none~set program~example3_volume->proc~elevate_degree program~example3_volume->proc~insert_knots program~example3_volume->proc~remove_knots program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->none~set program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->none~set program~nearest_point_3d nearest_point_3d program~nearest_point_3d->none~set program~shape_c_3d shape_C_3d program~shape_c_3d->proc~set_c program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~set_half_ring program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~set_hexahedron program~shape_ring_3d shape_ring_3d program~shape_ring_3d->proc~set_ring Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/set1.html"},{"title":"set2 – ForCAD","text":"private pure subroutine set2(this, Xth_dir1, Xth_dir2, Xth_dir3, degree, continuity1, continuity2, continuity3, Xc, Wc) Set control points and weights for the NURBS volume object. Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: Xth_dir1 (:) real(kind=rk), intent(in), contiguous :: Xth_dir2 (:) real(kind=rk), intent(in), contiguous :: Xth_dir3 (:) integer, intent(in), contiguous :: degree (:) integer, intent(in), contiguous :: continuity1 (:) integer, intent(in), contiguous :: continuity2 (:) integer, intent(in), contiguous :: continuity3 (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) Calls proc~~set2~~CallsGraph proc~set2 nurbs_volume%set2 proc~cmp_nc nurbs_volume%cmp_nc proc~set2->proc~cmp_nc proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector interface~compute_multiplicity compute_multiplicity proc~cmp_nc->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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 nurbs_volume%set2 none~set nurbs_volume%set none~set->proc~set2 proc~elevate_degree nurbs_volume%elevate_degree proc~elevate_degree->none~set proc~insert_knots nurbs_volume%insert_knots proc~insert_knots->none~set proc~modify_wc nurbs_volume%modify_Wc proc~modify_wc->none~set proc~modify_xc nurbs_volume%modify_Xc proc~modify_xc->none~set proc~remove_knots nurbs_volume%remove_knots proc~remove_knots->none~set proc~set_c nurbs_volume%set_C proc~set_c->none~set proc~set_half_ring nurbs_volume%set_half_ring proc~set_half_ring->none~set proc~set_hexahedron nurbs_volume%set_hexahedron proc~set_hexahedron->none~set proc~set_ring nurbs_volume%set_ring proc~set_ring->none~set program~example3_volume example3_volume program~example3_volume->none~set program~example3_volume->proc~elevate_degree program~example3_volume->proc~insert_knots program~example3_volume->proc~remove_knots program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->none~set program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->none~set program~nearest_point_3d nearest_point_3d program~nearest_point_3d->none~set program~shape_c_3d shape_C_3d program~shape_c_3d->proc~set_c program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~set_half_ring program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~set_hexahedron program~shape_ring_3d shape_ring_3d program~shape_ring_3d->proc~set_ring Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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":"set3 – ForCAD","text":"private pure subroutine set3(this, nc, Xc, Wc) Set Bezier or Rational Bezier volume using control points and weights. Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), contiguous :: nc (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) Calls proc~~set3~~CallsGraph proc~set3 nurbs_volume%set3 proc~cmp_degree nurbs_volume%cmp_degree proc~set3->proc~cmp_degree proc~get_multiplicity nurbs_volume%get_multiplicity proc~cmp_degree->proc~get_multiplicity interface~compute_multiplicity compute_multiplicity proc~get_multiplicity->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~set3~~CalledByGraph proc~set3 nurbs_volume%set3 none~set nurbs_volume%set none~set->proc~set3 proc~elevate_degree nurbs_volume%elevate_degree proc~elevate_degree->none~set proc~insert_knots nurbs_volume%insert_knots proc~insert_knots->none~set proc~modify_wc nurbs_volume%modify_Wc proc~modify_wc->none~set proc~modify_xc nurbs_volume%modify_Xc proc~modify_xc->none~set proc~remove_knots nurbs_volume%remove_knots proc~remove_knots->none~set proc~set_c nurbs_volume%set_C proc~set_c->none~set proc~set_half_ring nurbs_volume%set_half_ring proc~set_half_ring->none~set proc~set_hexahedron nurbs_volume%set_hexahedron proc~set_hexahedron->none~set proc~set_ring nurbs_volume%set_ring proc~set_ring->none~set program~example3_volume example3_volume program~example3_volume->none~set program~example3_volume->proc~elevate_degree program~example3_volume->proc~insert_knots program~example3_volume->proc~remove_knots program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->none~set program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->none~set program~nearest_point_3d nearest_point_3d program~nearest_point_3d->none~set program~shape_c_3d shape_C_3d program~shape_c_3d->proc~set_c program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~set_half_ring program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~set_hexahedron program~shape_ring_3d shape_ring_3d program~shape_ring_3d->proc~set_ring Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/set3.html"},{"title":"set_C – ForCAD","text":"private pure subroutine set_C(this, center, radius1, radius2, length) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: center (:) real(kind=rk), intent(in) :: radius1 real(kind=rk), intent(in) :: radius2 real(kind=rk), intent(in) :: length Calls proc~~set_c~~CallsGraph proc~set_c nurbs_volume%set_C none~set nurbs_volume%set proc~set_c->none~set proc~set1 nurbs_volume%set1 none~set->proc~set1 proc~set2 nurbs_volume%set2 none~set->proc~set2 proc~set3 nurbs_volume%set3 none~set->proc~set3 proc~cmp_degree nurbs_volume%cmp_degree proc~set1->proc~cmp_degree proc~cmp_nc nurbs_volume%cmp_nc proc~set1->proc~cmp_nc proc~set2->proc~cmp_nc proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector proc~set3->proc~cmp_degree proc~get_multiplicity nurbs_volume%get_multiplicity proc~cmp_degree->proc~get_multiplicity interface~compute_multiplicity compute_multiplicity proc~cmp_nc->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity->interface~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~~set_c~~CalledByGraph proc~set_c nurbs_volume%set_C program~shape_c_3d shape_C_3d program~shape_c_3d->proc~set_c Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_c.html"},{"title":"set_elem – ForCAD","text":"private pure subroutine set_elem(this, elemConn) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:) Called by proc~~set_elem~~CalledByGraph proc~set_elem nurbs_volume%set_elem program~example3_volume example3_volume program~example3_volume->proc~set_elem Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_elem.html"},{"title":"set_elem_Xc_vis – ForCAD","text":"private pure subroutine set_elem_Xc_vis(this, elemConn) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:)","tags":"","loc":"proc/set_elem_xc_vis.html"},{"title":"set_elem_Xg_vis – ForCAD","text":"private pure subroutine set_elem_Xg_vis(this, elemConn) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:) Called by proc~~set_elem_xg_vis~~CalledByGraph proc~set_elem_xg_vis nurbs_volume%set_elem_Xg_vis proc~put_to_nurbs nurbs_volume%put_to_nurbs proc~put_to_nurbs->proc~set_elem_xg_vis program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->proc~put_to_nurbs Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_elem_xg_vis.html"},{"title":"set_half_ring – ForCAD","text":"private pure subroutine set_half_ring(this, center, radius1, radius2, length) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: center (:) real(kind=rk), intent(in) :: radius1 real(kind=rk), intent(in) :: radius2 real(kind=rk), intent(in) :: length Calls proc~~set_half_ring~~CallsGraph proc~set_half_ring nurbs_volume%set_half_ring none~set nurbs_volume%set proc~set_half_ring->none~set proc~set1 nurbs_volume%set1 none~set->proc~set1 proc~set2 nurbs_volume%set2 none~set->proc~set2 proc~set3 nurbs_volume%set3 none~set->proc~set3 proc~cmp_degree nurbs_volume%cmp_degree proc~set1->proc~cmp_degree proc~cmp_nc nurbs_volume%cmp_nc proc~set1->proc~cmp_nc proc~set2->proc~cmp_nc proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector proc~set3->proc~cmp_degree proc~get_multiplicity nurbs_volume%get_multiplicity proc~cmp_degree->proc~get_multiplicity interface~compute_multiplicity compute_multiplicity proc~cmp_nc->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity->interface~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~~set_half_ring~~CalledByGraph proc~set_half_ring nurbs_volume%set_half_ring program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~set_half_ring Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_half_ring.html"},{"title":"set_hexahedron – ForCAD","text":"private pure subroutine set_hexahedron(this, L, nc, Wc) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: L (:) integer, intent(in), contiguous :: nc (:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) Calls proc~~set_hexahedron~~CallsGraph proc~set_hexahedron nurbs_volume%set_hexahedron none~set nurbs_volume%set proc~set_hexahedron->none~set proc~hexahedron_xc hexahedron_Xc proc~set_hexahedron->proc~hexahedron_xc proc~set1 nurbs_volume%set1 none~set->proc~set1 proc~set2 nurbs_volume%set2 none~set->proc~set2 proc~set3 nurbs_volume%set3 none~set->proc~set3 proc~cmp_degree nurbs_volume%cmp_degree proc~set1->proc~cmp_degree proc~cmp_nc nurbs_volume%cmp_nc proc~set1->proc~cmp_nc proc~set2->proc~cmp_nc proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector proc~set3->proc~cmp_degree proc~get_multiplicity nurbs_volume%get_multiplicity proc~cmp_degree->proc~get_multiplicity interface~compute_multiplicity compute_multiplicity proc~cmp_nc->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity->interface~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~~set_hexahedron~~CalledByGraph proc~set_hexahedron nurbs_volume%set_hexahedron program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~set_hexahedron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_hexahedron.html"},{"title":"set_ring – ForCAD","text":"private pure subroutine set_ring(this, center, radius1, radius2, length) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: center (:) real(kind=rk), intent(in) :: radius1 real(kind=rk), intent(in) :: radius2 real(kind=rk), intent(in) :: length Calls proc~~set_ring~~CallsGraph proc~set_ring nurbs_volume%set_ring none~set nurbs_volume%set proc~set_ring->none~set proc~set1 nurbs_volume%set1 none~set->proc~set1 proc~set2 nurbs_volume%set2 none~set->proc~set2 proc~set3 nurbs_volume%set3 none~set->proc~set3 proc~cmp_degree nurbs_volume%cmp_degree proc~set1->proc~cmp_degree proc~cmp_nc nurbs_volume%cmp_nc proc~set1->proc~cmp_nc proc~set2->proc~cmp_nc proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector proc~set3->proc~cmp_degree proc~get_multiplicity nurbs_volume%get_multiplicity proc~cmp_degree->proc~get_multiplicity interface~compute_multiplicity compute_multiplicity proc~cmp_nc->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity->interface~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~~set_ring~~CalledByGraph proc~set_ring nurbs_volume%set_ring program~shape_ring_3d shape_ring_3d program~shape_ring_3d->proc~set_ring Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_ring.html"},{"title":"show – ForCAD","text":"private impure subroutine show(this, vtkfile_Xc, vtkfile_Xg) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this character(len=*), intent(in) :: vtkfile_Xc character(len=*), intent(in) :: vtkfile_Xg Called by proc~~show~~CalledByGraph proc~show nurbs_volume%show program~example3_volume example3_volume program~example3_volume->proc~show program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~show program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->proc~show program~shape_c_3d shape_C_3d program~shape_c_3d->proc~show program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~show program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~show program~shape_ring_3d shape_ring_3d program~shape_ring_3d->proc~show Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/show.html"},{"title":"translate_Xc – ForCAD","text":"private pure subroutine translate_Xc(this, vec) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in) :: vec (:) Called by proc~~translate_xc~~CalledByGraph proc~translate_xc nurbs_volume%translate_Xc program~example3_volume example3_volume program~example3_volume->proc~translate_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/translate_xc.html"},{"title":"translate_Xg – ForCAD","text":"private pure subroutine translate_Xg(this, vec) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in) :: vec (:) Called by proc~~translate_xg~~CalledByGraph proc~translate_xg nurbs_volume%translate_Xg program~example3_volume example3_volume program~example3_volume->proc~translate_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/translate_xg.html"},{"title":"compute_Tgc – ForCAD","text":"private interface compute_Tgc Called by interface~~compute_tgc~~CalledByGraph interface~compute_tgc compute_Tgc proc~basis_scalar nurbs_volume%basis_scalar proc~basis_scalar->interface~compute_tgc proc~basis_vector nurbs_volume%basis_vector proc~basis_vector->interface~compute_tgc Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Functions private pure function compute_Tgc_bspline_3d_scalar(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc) result(f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) Return Value real(kind=rk), allocatable, (:) private pure function compute_Tgc_bspline_3d_vector(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_ng) result(f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) integer, intent(in) :: f_ng (3) Return Value real(kind=rk), allocatable, (:,:) private pure function compute_Tgc_nurbs_3d_scalar(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_Wc) result(f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) real(kind=rk), intent(in), contiguous :: f_Wc (:) Return Value real(kind=rk), allocatable, (:) private pure function compute_Tgc_nurbs_3d_vector(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_ng, f_Wc) result(f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) integer, intent(in) :: f_ng (3) real(kind=rk), intent(in), contiguous :: f_Wc (:) Return Value real(kind=rk), allocatable, (:,:)","tags":"","loc":"interface/compute_tgc.html"},{"title":"compute_Xg – ForCAD","text":"private interface compute_Xg Called by interface~~compute_xg~~CalledByGraph interface~compute_xg compute_Xg proc~cmp_xg nurbs_volume%cmp_Xg proc~cmp_xg->interface~compute_xg proc~create nurbs_volume%create proc~create->interface~compute_xg proc~nearest_point2 nurbs_volume%nearest_point2 proc~nearest_point2->proc~cmp_xg proc~nearest_point2->proc~create program~example3_volume example3_volume program~example3_volume->proc~create program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~create program~nearest_point_3d nearest_point_3d program~nearest_point_3d->proc~create program~nearest_point_3d->proc~nearest_point2 program~shape_c_3d shape_C_3d program~shape_c_3d->proc~create program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~create program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~create program~shape_ring_3d shape_ring_3d program~shape_ring_3d->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. Functions private pure function compute_Xg_bspline_3d(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_ng, f_Xc) result(f_Xg) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) integer, intent(in) :: f_ng (3) real(kind=rk), intent(in), contiguous :: f_Xc (:,:) Return Value real(kind=rk), allocatable, (:,:) private pure function compute_Xg_bspline_3d_1point(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_Xc) result(f_Xg) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) real(kind=rk), intent(in), contiguous :: f_Xc (:,:) Return Value real(kind=rk), allocatable, (:) private pure function compute_Xg_nurbs_3d(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_ng, f_Xc, f_Wc) result(f_Xg) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) integer, intent(in) :: f_ng (3) real(kind=rk), intent(in), contiguous :: f_Xc (:,:) real(kind=rk), intent(in), contiguous :: f_Wc (:) Return Value real(kind=rk), allocatable, (:,:) private pure function compute_Xg_nurbs_3d_1point(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_Xc, f_Wc) result(f_Xg) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) real(kind=rk), intent(in), contiguous :: f_Xc (:,:) real(kind=rk), intent(in), contiguous :: f_Wc (:) Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"interface/compute_xg.html"},{"title":"compute_d2Tgc – ForCAD","text":"private interface compute_d2Tgc Called by interface~~compute_d2tgc~~CalledByGraph interface~compute_d2tgc compute_d2Tgc proc~derivative2_scalar nurbs_volume%derivative2_scalar proc~derivative2_scalar->interface~compute_d2tgc proc~derivative2_vector nurbs_volume%derivative2_vector proc~derivative2_vector->interface~compute_d2tgc none~derivative2 nurbs_volume%derivative2 none~derivative2->proc~derivative2_scalar none~derivative2->proc~derivative2_vector proc~nearest_point2 nurbs_volume%nearest_point2 proc~nearest_point2->none~derivative2 program~nearest_point_3d nearest_point_3d program~nearest_point_3d->proc~nearest_point2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Subroutines private pure subroutine compute_d2Tgc_bspline_3d_scalar(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_d2Tgc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) real(kind=rk), intent(out), allocatable :: f_d2Tgc (:,:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:) private pure subroutine compute_d2Tgc_bspline_3d_vector(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_ng, f_d2Tgc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) integer, intent(in) :: f_ng (3) real(kind=rk), intent(out), allocatable :: f_d2Tgc (:,:,:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:,:) private pure subroutine compute_d2Tgc_nurbs_3d_scalar(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_Wc, f_d2Tgc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) real(kind=rk), intent(in), contiguous :: f_Wc (:) real(kind=rk), intent(out), allocatable :: f_d2Tgc (:,:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:) private pure subroutine compute_d2Tgc_nurbs_3d_vector(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_ng, f_Wc, f_d2Tgc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) integer, intent(in) :: f_ng (3) real(kind=rk), intent(in), contiguous :: f_Wc (:) real(kind=rk), intent(out), allocatable :: f_d2Tgc (:,:,:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:,:)","tags":"","loc":"interface/compute_d2tgc.html"},{"title":"compute_dTgc – ForCAD","text":"private interface compute_dTgc Called by interface~~compute_dtgc~~CalledByGraph interface~compute_dtgc compute_dTgc proc~derivative_scalar nurbs_volume%derivative_scalar proc~derivative_scalar->interface~compute_dtgc proc~derivative_vector nurbs_volume%derivative_vector proc~derivative_vector->interface~compute_dtgc Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Subroutines private pure subroutine compute_dTgc_bspline_3d_scalar(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:) private pure subroutine compute_dTgc_bspline_3d_vector(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_ng, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) integer, intent(in) :: f_ng (3) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:,:) private pure subroutine compute_dTgc_nurbs_3d_scalar(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_Wc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) real(kind=rk), intent(in), contiguous :: f_Wc (:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:) private pure subroutine compute_dTgc_nurbs_3d_vector(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_ng, f_Wc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) integer, intent(in) :: f_ng (3) real(kind=rk), intent(in), contiguous :: f_Wc (:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:,:)","tags":"","loc":"interface/compute_dtgc.html"},{"title":"nearest_point_help_3d – ForCAD","text":"interface Called by interface~~nearest_point_help_3d~~CalledByGraph interface~nearest_point_help_3d nearest_point_help_3d proc~nearest_point nurbs_volume%nearest_point proc~nearest_point->interface~nearest_point_help_3d proc~nearest_point2 nurbs_volume%nearest_point2 proc~nearest_point2->interface~nearest_point_help_3d program~nearest_point_3d nearest_point_3d program~nearest_point_3d->proc~nearest_point program~nearest_point_3d->proc~nearest_point2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. private pure function nearest_point_help_3d(f_ng, f_Xg, f_point_Xg) result(f_distances) Arguments Type Intent Optional Attributes Name integer, intent(in) :: f_ng (3) real(kind=rk), intent(in), contiguous :: f_Xg (:,:) real(kind=rk), intent(in), contiguous :: f_point_Xg (:) Return Value real(kind=rk),allocatable,(:)","tags":"","loc":"interface/nearest_point_help_3d.html"},{"title":"cmp_Xg – ForCAD","text":"private pure function cmp_Xg(this, Xt) result(Xg) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this real(kind=rk), intent(in), contiguous :: Xt (:) Return Value real(kind=rk), allocatable, (:) Calls proc~~cmp_xg~2~~CallsGraph proc~cmp_xg~2 nurbs_surface%cmp_Xg interface~compute_xg~2 compute_Xg proc~cmp_xg~2->interface~compute_xg~2 proc~is_rational~2 nurbs_surface%is_rational proc~cmp_xg~2->proc~is_rational~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. Called by proc~~cmp_xg~2~~CalledByGraph proc~cmp_xg~2 nurbs_surface%cmp_Xg proc~nearest_point2~2 nurbs_surface%nearest_point2 proc~nearest_point2~2->proc~cmp_xg~2 program~nearest_point_2d nearest_point_2d program~nearest_point_2d->proc~nearest_point2~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_xg~2.html"},{"title":"cmp_elem – ForCAD","text":"private pure function cmp_elem(this) result(elemConn) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value integer, allocatable, (:,:) Calls proc~~cmp_elem~2~~CallsGraph proc~cmp_elem~2 nurbs_surface%cmp_elem interface~elemconn_cn elemConn_Cn proc~cmp_elem~2->interface~elemconn_cn interface~unique unique proc~cmp_elem~2->interface~unique proc~get_multiplicity~2 nurbs_surface%get_multiplicity proc~cmp_elem~2->proc~get_multiplicity~2 proc~cmp_elemconn_cn_l cmp_elemConn_Cn_L interface~elemconn_cn->proc~cmp_elemconn_cn_l proc~cmp_elemconn_cn_s cmp_elemConn_Cn_S interface~elemconn_cn->proc~cmp_elemconn_cn_s proc~cmp_elemconn_cn_v cmp_elemConn_Cn_V interface~elemconn_cn->proc~cmp_elemconn_cn_v proc~unique_integer unique_integer interface~unique->proc~unique_integer proc~unique_real unique_real interface~unique->proc~unique_real interface~compute_multiplicity compute_multiplicity proc~get_multiplicity~2->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_elem~2.html"},{"title":"cmp_elem_Xc_vis – ForCAD","text":"private pure function cmp_elem_Xc_vis(this, p) result(elemConn) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in), optional, contiguous :: p (:) Return Value integer, allocatable, (:,:) Calls proc~~cmp_elem_xc_vis~2~~CallsGraph proc~cmp_elem_xc_vis~2 nurbs_surface%cmp_elem_Xc_vis interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xc_vis~2->interface~elemconn_c0 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v 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~~cmp_elem_xc_vis~2~~CalledByGraph proc~cmp_elem_xc_vis~2 nurbs_surface%cmp_elem_Xc_vis proc~export_xc~2 nurbs_surface%export_Xc proc~export_xc~2->proc~cmp_elem_xc_vis~2 program~example3_surface example3_surface program~example3_surface->proc~export_xc~2 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~export_xc~2 program~shape_c_2d shape_C_2d program~shape_c_2d->proc~export_xc~2 program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~export_xc~2 program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~export_xc~2 program~shape_tetragon shape_tetragon program~shape_tetragon->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/cmp_elem_xc_vis~2.html"},{"title":"cmp_elem_Xg_vis – ForCAD","text":"private pure function cmp_elem_Xg_vis(this, p) result(elemConn) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in), optional, contiguous :: p (:) Return Value integer, allocatable, (:,:) Calls proc~~cmp_elem_xg_vis~2~~CallsGraph proc~cmp_elem_xg_vis~2 nurbs_surface%cmp_elem_Xg_vis interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xg_vis~2->interface~elemconn_c0 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v 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~~cmp_elem_xg_vis~2~~CalledByGraph proc~cmp_elem_xg_vis~2 nurbs_surface%cmp_elem_Xg_vis proc~export_xg~2 nurbs_surface%export_Xg proc~export_xg~2->proc~cmp_elem_xg_vis~2 program~example3_surface example3_surface program~example3_surface->proc~export_xg~2 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~export_xg~2 program~shape_c_2d shape_C_2d program~shape_c_2d->proc~export_xg~2 program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~export_xg~2 program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~export_xg~2 program~shape_tetragon shape_tetragon program~shape_tetragon->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_elem_xg_vis~2.html"},{"title":"get_Wc_all – ForCAD","text":"private pure function get_Wc_all(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, (:) Called by proc~~get_wc_all~2~~CalledByGraph proc~get_wc_all~2 nurbs_surface%get_Wc_all none~get_wc~2 nurbs_surface%get_Wc none~get_wc~2->proc~get_wc_all~2 proc~modify_wc~2 nurbs_surface%modify_Wc proc~modify_wc~2->none~get_wc~2 proc~modify_xc~2 nurbs_surface%modify_Xc proc~modify_xc~2->none~get_wc~2 program~example_ppm3 example_ppm3 program~example_ppm3->proc~modify_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_wc_all~2.html"},{"title":"get_Wci – ForCAD","text":"private pure function get_Wci(this, n) result(Wc) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk) Called by proc~~get_wci~2~~CalledByGraph proc~get_wci~2 nurbs_surface%get_Wci none~get_wc~2 nurbs_surface%get_Wc none~get_wc~2->proc~get_wci~2 proc~modify_wc~2 nurbs_surface%modify_Wc proc~modify_wc~2->none~get_wc~2 proc~modify_xc~2 nurbs_surface%modify_Xc proc~modify_xc~2->none~get_wc~2 program~example_ppm3 example_ppm3 program~example_ppm3->proc~modify_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_wci~2.html"},{"title":"get_Xc_all – ForCAD","text":"private pure function get_Xc_all(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, (:,:) Called by proc~~get_xc_all~2~~CalledByGraph proc~get_xc_all~2 nurbs_surface%get_Xc_all none~get_xc~2 nurbs_surface%get_Xc none~get_xc~2->proc~get_xc_all~2 proc~modify_wc~2 nurbs_surface%modify_Wc proc~modify_wc~2->none~get_xc~2 proc~modify_xc~2 nurbs_surface%modify_Xc proc~modify_xc~2->none~get_xc~2 program~example_ppm3 example_ppm3 program~example_ppm3->proc~modify_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_xc_all~2.html"},{"title":"get_Xci – ForCAD","text":"private pure function get_Xci(this, n) result(Xc) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk), allocatable, (:) Called by proc~~get_xci~2~~CalledByGraph proc~get_xci~2 nurbs_surface%get_Xci none~get_xc~2 nurbs_surface%get_Xc none~get_xc~2->proc~get_xci~2 proc~modify_wc~2 nurbs_surface%modify_Wc proc~modify_wc~2->none~get_xc~2 proc~modify_xc~2 nurbs_surface%modify_Xc proc~modify_xc~2->none~get_xc~2 program~example_ppm3 example_ppm3 program~example_ppm3->proc~modify_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_xci~2.html"},{"title":"get_Xcid – ForCAD","text":"private pure function get_Xcid(this, n, dir) result(Xc) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: n integer, intent(in) :: dir Return Value real(kind=rk) Called by proc~~get_xcid~2~~CalledByGraph proc~get_xcid~2 nurbs_surface%get_Xcid none~get_xc~2 nurbs_surface%get_Xc none~get_xc~2->proc~get_xcid~2 proc~modify_wc~2 nurbs_surface%modify_Wc proc~modify_wc~2->none~get_xc~2 proc~modify_xc~2 nurbs_surface%modify_Xc proc~modify_xc~2->none~get_xc~2 program~example_ppm3 example_ppm3 program~example_ppm3->proc~modify_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_xcid~2.html"},{"title":"get_Xg_all – ForCAD","text":"private pure function get_Xg_all(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, (:,:) Called by proc~~get_xg_all~2~~CalledByGraph proc~get_xg_all~2 nurbs_surface%get_Xg_all none~get_xg~2 nurbs_surface%get_Xg none~get_xg~2->proc~get_xg_all~2 program~example_ppm1 example_ppm1 program~example_ppm1->none~get_xg~2 program~example_ppm2 example_ppm2 program~example_ppm2->none~get_xg~2 program~example_ppm3 example_ppm3 program~example_ppm3->none~get_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_xg_all~2.html"},{"title":"get_Xgi – ForCAD","text":"private pure function get_Xgi(this, n) result(Xg) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk), allocatable, (:) Called by proc~~get_xgi~2~~CalledByGraph proc~get_xgi~2 nurbs_surface%get_Xgi none~get_xg~2 nurbs_surface%get_Xg none~get_xg~2->proc~get_xgi~2 program~example_ppm1 example_ppm1 program~example_ppm1->none~get_xg~2 program~example_ppm2 example_ppm2 program~example_ppm2->none~get_xg~2 program~example_ppm3 example_ppm3 program~example_ppm3->none~get_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_xgi~2.html"},{"title":"get_Xgid – ForCAD","text":"private pure function get_Xgid(this, n, dir) result(Xg) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: n integer, intent(in) :: dir Return Value real(kind=rk) Called by proc~~get_xgid~2~~CalledByGraph proc~get_xgid~2 nurbs_surface%get_Xgid none~get_xg~2 nurbs_surface%get_Xg none~get_xg~2->proc~get_xgid~2 program~example_ppm1 example_ppm1 program~example_ppm1->none~get_xg~2 program~example_ppm2 example_ppm2 program~example_ppm2->none~get_xg~2 program~example_ppm3 example_ppm3 program~example_ppm3->none~get_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_xgid~2.html"},{"title":"get_Xt – ForCAD","text":"private pure function get_Xt(this, dir) result(Xt) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: dir Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"proc/get_xt~2.html"},{"title":"get_continuity – ForCAD","text":"private pure function get_continuity(this, dir) result(c) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: dir Return Value integer, allocatable, (:) Calls proc~~get_continuity~2~~CallsGraph proc~get_continuity~2 nurbs_surface%get_continuity interface~compute_multiplicity compute_multiplicity proc~get_continuity~2->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_degree_all – ForCAD","text":"private pure function get_degree_all(this) result(degree) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value integer, (2) Called by proc~~get_degree_all~2~~CalledByGraph proc~get_degree_all~2 nurbs_surface%get_degree_all none~get_degree~2 nurbs_surface%get_degree none~get_degree~2->proc~get_degree_all~2 program~example3_surface example3_surface program~example3_surface->none~get_degree~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_degree_all~2.html"},{"title":"get_degree_dir – ForCAD","text":"private pure function get_degree_dir(this, dir) result(degree) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: dir Return Value integer Called by proc~~get_degree_dir~2~~CalledByGraph proc~get_degree_dir~2 nurbs_surface%get_degree_dir none~get_degree~2 nurbs_surface%get_degree none~get_degree~2->proc~get_degree_dir~2 program~example3_surface example3_surface program~example3_surface->none~get_degree~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_degree_dir~2.html"},{"title":"get_elem – ForCAD","text":"private pure function get_elem(this) result(elemConn) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value integer, allocatable, (:,:)","tags":"","loc":"proc/get_elem~2.html"},{"title":"get_elem_Xc_vis – ForCAD","text":"private pure function get_elem_Xc_vis(this) result(elemConn) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value integer, allocatable, (:,:)","tags":"","loc":"proc/get_elem_xc_vis~2.html"},{"title":"get_elem_Xg_vis – ForCAD","text":"private pure function get_elem_Xg_vis(this) result(elemConn) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value integer, allocatable, (:,:)","tags":"","loc":"proc/get_elem_xg_vis~2.html"},{"title":"get_knot_all – ForCAD","text":"private pure function get_knot_all(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, (:) Called by proc~~get_knot_all~2~~CalledByGraph proc~get_knot_all~2 nurbs_surface%get_knot_all none~get_knot~2 nurbs_surface%get_knot none~get_knot~2->proc~get_knot_all~2 proc~elevate_degree~2 nurbs_surface%elevate_degree proc~elevate_degree~2->none~get_knot~2 proc~insert_knots~2 nurbs_surface%insert_knots proc~insert_knots~2->none~get_knot~2 proc~modify_wc~2 nurbs_surface%modify_Wc proc~modify_wc~2->none~get_knot~2 proc~modify_xc~2 nurbs_surface%modify_Xc proc~modify_xc~2->none~get_knot~2 proc~remove_knots~2 nurbs_surface%remove_knots proc~remove_knots~2->none~get_knot~2 program~example3_surface example3_surface program~example3_surface->none~get_knot~2 program~example3_surface->proc~elevate_degree~2 program~example3_surface->proc~insert_knots~2 program~example3_surface->proc~remove_knots~2 program~example_ppm3 example_ppm3 program~example_ppm3->proc~modify_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_knot_all~2.html"},{"title":"get_knoti – ForCAD","text":"private pure function get_knoti(this, dir, i) result(knot) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: dir integer, intent(in) :: i Return Value real(kind=rk) Called by proc~~get_knoti~2~~CalledByGraph proc~get_knoti~2 nurbs_surface%get_knoti none~get_knot~2 nurbs_surface%get_knot none~get_knot~2->proc~get_knoti~2 proc~elevate_degree~2 nurbs_surface%elevate_degree proc~elevate_degree~2->none~get_knot~2 proc~insert_knots~2 nurbs_surface%insert_knots proc~insert_knots~2->none~get_knot~2 proc~modify_wc~2 nurbs_surface%modify_Wc proc~modify_wc~2->none~get_knot~2 proc~modify_xc~2 nurbs_surface%modify_Xc proc~modify_xc~2->none~get_knot~2 proc~remove_knots~2 nurbs_surface%remove_knots proc~remove_knots~2->none~get_knot~2 program~example3_surface example3_surface program~example3_surface->none~get_knot~2 program~example3_surface->proc~elevate_degree~2 program~example3_surface->proc~insert_knots~2 program~example3_surface->proc~remove_knots~2 program~example_ppm3 example_ppm3 program~example_ppm3->proc~modify_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_knoti~2.html"},{"title":"get_multiplicity – ForCAD","text":"private pure function get_multiplicity(this, dir) result(m) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: dir Return Value integer, allocatable, (:) Calls proc~~get_multiplicity~2~~CallsGraph proc~get_multiplicity~2 nurbs_surface%get_multiplicity interface~compute_multiplicity compute_multiplicity proc~get_multiplicity~2->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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 nurbs_surface%get_multiplicity proc~cmp_degree~2 nurbs_surface%cmp_degree proc~cmp_degree~2->proc~get_multiplicity~2 proc~cmp_elem~2 nurbs_surface%cmp_elem proc~cmp_elem~2->proc~get_multiplicity~2 proc~set1~2 nurbs_surface%set1 proc~set1~2->proc~cmp_degree~2 proc~set3~2 nurbs_surface%set3 proc~set3~2->proc~cmp_degree~2 none~set~2 nurbs_surface%set none~set~2->proc~set1~2 none~set~2->proc~set3~2 proc~elevate_degree~2 nurbs_surface%elevate_degree proc~elevate_degree~2->none~set~2 proc~insert_knots~2 nurbs_surface%insert_knots proc~insert_knots~2->none~set~2 proc~modify_wc~2 nurbs_surface%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_xc~2 nurbs_surface%modify_Xc proc~modify_xc~2->none~set~2 proc~remove_knots~2 nurbs_surface%remove_knots proc~remove_knots~2->none~set~2 proc~set_c~2 nurbs_surface%set_C proc~set_c~2->none~set~2 proc~set_half_ring~2 nurbs_surface%set_half_ring proc~set_half_ring~2->none~set~2 proc~set_ring~2 nurbs_surface%set_ring proc~set_ring~2->none~set~2 proc~set_tetragon nurbs_surface%set_tetragon proc~set_tetragon->none~set~2 program~example3_surface example3_surface program~example3_surface->none~set~2 program~example3_surface->proc~elevate_degree~2 program~example3_surface->proc~insert_knots~2 program~example3_surface->proc~remove_knots~2 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->none~set~2 program~nearest_point_2d nearest_point_2d program~nearest_point_2d->none~set~2 program~example_ppm1 example_ppm1 program~example_ppm1->proc~set_ring~2 program~example_ppm1->proc~set_tetragon program~example_ppm2 example_ppm2 program~example_ppm2->proc~set_half_ring~2 program~example_ppm2->proc~set_tetragon program~example_ppm3 example_ppm3 program~example_ppm3->proc~modify_xc~2 program~example_ppm3->proc~set_tetragon program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->proc~set_tetragon program~shape_c_2d shape_C_2d program~shape_c_2d->proc~set_c~2 program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~set_half_ring~2 program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~set_ring~2 program~shape_tetragon shape_tetragon program~shape_tetragon->proc~set_tetragon Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_multiplicity~2.html"},{"title":"get_nc – ForCAD","text":"private pure function get_nc(this, dir) result(nc) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: dir Return Value integer Calls proc~~get_nc~2~~CallsGraph proc~get_nc~2 nurbs_surface%get_nc interface~compute_multiplicity compute_multiplicity proc~get_nc~2->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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) Called by proc~~get_ng~2~~CalledByGraph proc~get_ng~2 nurbs_surface%get_ng program~example_ppm1 example_ppm1 program~example_ppm1->proc~get_ng~2 program~example_ppm2 example_ppm2 program~example_ppm2->proc~get_ng~2 program~example_ppm3 example_ppm3 program~example_ppm3->proc~get_ng~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_ng~2.html"},{"title":"is_rational – ForCAD","text":"private pure function is_rational(this) result(r) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value logical Called by proc~~is_rational~2~~CalledByGraph proc~is_rational~2 nurbs_surface%is_rational proc~basis_scalar~2 nurbs_surface%basis_scalar proc~basis_scalar~2->proc~is_rational~2 proc~basis_vector~2 nurbs_surface%basis_vector proc~basis_vector~2->proc~is_rational~2 proc~cmp_xg~2 nurbs_surface%cmp_Xg proc~cmp_xg~2->proc~is_rational~2 proc~create~2 nurbs_surface%create proc~create~2->proc~is_rational~2 proc~derivative2_scalar~2 nurbs_surface%derivative2_scalar proc~derivative2_scalar~2->proc~is_rational~2 proc~derivative2_vector~2 nurbs_surface%derivative2_vector proc~derivative2_vector~2->proc~is_rational~2 proc~derivative_scalar~2 nurbs_surface%derivative_scalar proc~derivative_scalar~2->proc~is_rational~2 proc~derivative_vector~2 nurbs_surface%derivative_vector proc~derivative_vector~2->proc~is_rational~2 proc~elevate_degree~2 nurbs_surface%elevate_degree proc~elevate_degree~2->proc~is_rational~2 proc~insert_knots~2 nurbs_surface%insert_knots proc~insert_knots~2->proc~is_rational~2 proc~remove_knots~2 nurbs_surface%remove_knots proc~remove_knots~2->proc~is_rational~2 none~derivative2~2 nurbs_surface%derivative2 none~derivative2~2->proc~derivative2_scalar~2 none~derivative2~2->proc~derivative2_vector~2 proc~nearest_point2~2 nurbs_surface%nearest_point2 proc~nearest_point2~2->proc~cmp_xg~2 proc~nearest_point2~2->proc~create~2 proc~nearest_point2~2->none~derivative2~2 program~example3_surface example3_surface program~example3_surface->proc~create~2 program~example3_surface->proc~elevate_degree~2 program~example3_surface->proc~insert_knots~2 program~example3_surface->proc~remove_knots~2 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~create~2 program~example_ppm1 example_ppm1 program~example_ppm1->proc~create~2 program~example_ppm2 example_ppm2 program~example_ppm2->proc~create~2 program~example_ppm3 example_ppm3 program~example_ppm3->proc~create~2 program~nearest_point_2d nearest_point_2d program~nearest_point_2d->proc~create~2 program~nearest_point_2d->proc~nearest_point2~2 program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->proc~create~2 program~shape_c_2d shape_C_2d program~shape_c_2d->proc~create~2 program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~create~2 program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~create~2 program~shape_tetragon shape_tetragon program~shape_tetragon->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/is_rational~2.html"},{"title":"basis_scalar – ForCAD","text":"private pure subroutine basis_scalar(this, Xt, Tgc) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in) :: Xt (:) real(kind=rk), intent(out), allocatable :: Tgc (:) Calls proc~~basis_scalar~2~~CallsGraph proc~basis_scalar~2 nurbs_surface%basis_scalar interface~compute_tgc~2 compute_Tgc proc~basis_scalar~2->interface~compute_tgc~2 proc~is_rational~2 nurbs_surface%is_rational proc~basis_scalar~2->proc~is_rational~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_scalar~2.html"},{"title":"basis_vector – ForCAD","text":"private pure subroutine basis_vector(this, res1, res2, Xt1, Xt2, Tgc) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(out), allocatable :: Tgc (:,:) Calls proc~~basis_vector~2~~CallsGraph proc~basis_vector~2 nurbs_surface%basis_vector interface~compute_tgc~2 compute_Tgc proc~basis_vector~2->interface~compute_tgc~2 interface~ndgrid ndgrid proc~basis_vector~2->interface~ndgrid proc~is_rational~2 nurbs_surface%is_rational proc~basis_vector~2->proc~is_rational~2 proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 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.","tags":"","loc":"proc/basis_vector~2.html"},{"title":"cmp_degree – ForCAD","text":"private pure subroutine cmp_degree(this, dir) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), optional :: dir Calls proc~~cmp_degree~2~~CallsGraph proc~cmp_degree~2 nurbs_surface%cmp_degree proc~get_multiplicity~2 nurbs_surface%get_multiplicity proc~cmp_degree~2->proc~get_multiplicity~2 interface~compute_multiplicity compute_multiplicity proc~get_multiplicity~2->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~cmp_degree~2~~CalledByGraph proc~cmp_degree~2 nurbs_surface%cmp_degree proc~set1~2 nurbs_surface%set1 proc~set1~2->proc~cmp_degree~2 proc~set3~2 nurbs_surface%set3 proc~set3~2->proc~cmp_degree~2 none~set~2 nurbs_surface%set none~set~2->proc~set1~2 none~set~2->proc~set3~2 proc~elevate_degree~2 nurbs_surface%elevate_degree proc~elevate_degree~2->none~set~2 proc~insert_knots~2 nurbs_surface%insert_knots proc~insert_knots~2->none~set~2 proc~modify_wc~2 nurbs_surface%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_xc~2 nurbs_surface%modify_Xc proc~modify_xc~2->none~set~2 proc~remove_knots~2 nurbs_surface%remove_knots proc~remove_knots~2->none~set~2 proc~set_c~2 nurbs_surface%set_C proc~set_c~2->none~set~2 proc~set_half_ring~2 nurbs_surface%set_half_ring proc~set_half_ring~2->none~set~2 proc~set_ring~2 nurbs_surface%set_ring proc~set_ring~2->none~set~2 proc~set_tetragon nurbs_surface%set_tetragon proc~set_tetragon->none~set~2 program~example3_surface example3_surface program~example3_surface->none~set~2 program~example3_surface->proc~elevate_degree~2 program~example3_surface->proc~insert_knots~2 program~example3_surface->proc~remove_knots~2 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->none~set~2 program~nearest_point_2d nearest_point_2d program~nearest_point_2d->none~set~2 program~example_ppm1 example_ppm1 program~example_ppm1->proc~set_ring~2 program~example_ppm1->proc~set_tetragon program~example_ppm2 example_ppm2 program~example_ppm2->proc~set_half_ring~2 program~example_ppm2->proc~set_tetragon program~example_ppm3 example_ppm3 program~example_ppm3->proc~modify_xc~2 program~example_ppm3->proc~set_tetragon program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->proc~set_tetragon program~shape_c_2d shape_C_2d program~shape_c_2d->proc~set_c~2 program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~set_half_ring~2 program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~set_ring~2 program~shape_tetragon shape_tetragon program~shape_tetragon->proc~set_tetragon Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_degree~2.html"},{"title":"cmp_nc – ForCAD","text":"private pure subroutine cmp_nc(this, dir) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), optional :: dir Calls proc~~cmp_nc~2~~CallsGraph proc~cmp_nc~2 nurbs_surface%cmp_nc interface~compute_multiplicity compute_multiplicity proc~cmp_nc~2->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~cmp_nc~2~~CalledByGraph proc~cmp_nc~2 nurbs_surface%cmp_nc proc~set1~2 nurbs_surface%set1 proc~set1~2->proc~cmp_nc~2 proc~set2~2 nurbs_surface%set2 proc~set2~2->proc~cmp_nc~2 none~set~2 nurbs_surface%set none~set~2->proc~set1~2 none~set~2->proc~set2~2 proc~elevate_degree~2 nurbs_surface%elevate_degree proc~elevate_degree~2->none~set~2 proc~insert_knots~2 nurbs_surface%insert_knots proc~insert_knots~2->none~set~2 proc~modify_wc~2 nurbs_surface%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_xc~2 nurbs_surface%modify_Xc proc~modify_xc~2->none~set~2 proc~remove_knots~2 nurbs_surface%remove_knots proc~remove_knots~2->none~set~2 proc~set_c~2 nurbs_surface%set_C proc~set_c~2->none~set~2 proc~set_half_ring~2 nurbs_surface%set_half_ring proc~set_half_ring~2->none~set~2 proc~set_ring~2 nurbs_surface%set_ring proc~set_ring~2->none~set~2 proc~set_tetragon nurbs_surface%set_tetragon proc~set_tetragon->none~set~2 program~example3_surface example3_surface program~example3_surface->none~set~2 program~example3_surface->proc~elevate_degree~2 program~example3_surface->proc~insert_knots~2 program~example3_surface->proc~remove_knots~2 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->none~set~2 program~nearest_point_2d nearest_point_2d program~nearest_point_2d->none~set~2 program~example_ppm1 example_ppm1 program~example_ppm1->proc~set_ring~2 program~example_ppm1->proc~set_tetragon program~example_ppm2 example_ppm2 program~example_ppm2->proc~set_half_ring~2 program~example_ppm2->proc~set_tetragon program~example_ppm3 example_ppm3 program~example_ppm3->proc~modify_xc~2 program~example_ppm3->proc~set_tetragon program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->proc~set_tetragon program~shape_c_2d shape_C_2d program~shape_c_2d->proc~set_c~2 program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~set_half_ring~2 program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~set_ring~2 program~shape_tetragon shape_tetragon program~shape_tetragon->proc~set_tetragon Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_nc~2.html"},{"title":"create – ForCAD","text":"private pure subroutine create(this, res1, res2, Xt1, Xt2, Xt) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(in), optional, contiguous :: Xt (:,:) Calls proc~~create~2~~CallsGraph proc~create~2 nurbs_surface%create interface~compute_xg~2 compute_Xg proc~create~2->interface~compute_xg~2 interface~ndgrid ndgrid proc~create~2->interface~ndgrid proc~is_rational~2 nurbs_surface%is_rational proc~create~2->proc~is_rational~2 proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 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 nurbs_surface%create proc~nearest_point2~2 nurbs_surface%nearest_point2 proc~nearest_point2~2->proc~create~2 program~example3_surface example3_surface program~example3_surface->proc~create~2 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~create~2 program~example_ppm1 example_ppm1 program~example_ppm1->proc~create~2 program~example_ppm2 example_ppm2 program~example_ppm2->proc~create~2 program~example_ppm3 example_ppm3 program~example_ppm3->proc~create~2 program~nearest_point_2d nearest_point_2d program~nearest_point_2d->proc~create~2 program~nearest_point_2d->proc~nearest_point2~2 program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->proc~create~2 program~shape_c_2d shape_C_2d program~shape_c_2d->proc~create~2 program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~create~2 program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~create~2 program~shape_tetragon shape_tetragon program~shape_tetragon->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":"derivative2_scalar – ForCAD","text":"private pure subroutine derivative2_scalar(this, Xt, d2Tgc, dTgc, Tgc) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:) real(kind=rk), intent(out), optional, allocatable :: dTgc (:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:) Calls proc~~derivative2_scalar~2~~CallsGraph proc~derivative2_scalar~2 nurbs_surface%derivative2_scalar interface~compute_d2tgc~2 compute_d2Tgc proc~derivative2_scalar~2->interface~compute_d2tgc~2 proc~is_rational~2 nurbs_surface%is_rational proc~derivative2_scalar~2->proc~is_rational~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. Called by proc~~derivative2_scalar~2~~CalledByGraph proc~derivative2_scalar~2 nurbs_surface%derivative2_scalar none~derivative2~2 nurbs_surface%derivative2 none~derivative2~2->proc~derivative2_scalar~2 proc~nearest_point2~2 nurbs_surface%nearest_point2 proc~nearest_point2~2->none~derivative2~2 program~nearest_point_2d nearest_point_2d program~nearest_point_2d->proc~nearest_point2~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/derivative2_scalar~2.html"},{"title":"derivative2_vector – ForCAD","text":"private pure subroutine derivative2_vector(this, res1, res2, Xt1, Xt2, d2Tgc, dTgc, Tgc) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:,:) real(kind=rk), intent(out), optional, allocatable :: dTgc (:,:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:,:) Calls proc~~derivative2_vector~2~~CallsGraph proc~derivative2_vector~2 nurbs_surface%derivative2_vector interface~compute_d2tgc~2 compute_d2Tgc proc~derivative2_vector~2->interface~compute_d2tgc~2 interface~ndgrid ndgrid proc~derivative2_vector~2->interface~ndgrid proc~is_rational~2 nurbs_surface%is_rational proc~derivative2_vector~2->proc~is_rational~2 proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 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~~derivative2_vector~2~~CalledByGraph proc~derivative2_vector~2 nurbs_surface%derivative2_vector none~derivative2~2 nurbs_surface%derivative2 none~derivative2~2->proc~derivative2_vector~2 proc~nearest_point2~2 nurbs_surface%nearest_point2 proc~nearest_point2~2->none~derivative2~2 program~nearest_point_2d nearest_point_2d program~nearest_point_2d->proc~nearest_point2~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/derivative2_vector~2.html"},{"title":"derivative_scalar – ForCAD","text":"private pure subroutine derivative_scalar(this, Xt, dTgc, Tgc) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: dTgc (:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:) Calls proc~~derivative_scalar~2~~CallsGraph proc~derivative_scalar~2 nurbs_surface%derivative_scalar interface~compute_dtgc~2 compute_dTgc proc~derivative_scalar~2->interface~compute_dtgc~2 proc~is_rational~2 nurbs_surface%is_rational proc~derivative_scalar~2->proc~is_rational~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/derivative_scalar~2.html"},{"title":"derivative_vector – ForCAD","text":"private pure subroutine derivative_vector(this, res1, res2, Xt1, Xt2, dTgc, Tgc) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(out), allocatable :: dTgc (:,:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:,:) Calls proc~~derivative_vector~2~~CallsGraph proc~derivative_vector~2 nurbs_surface%derivative_vector interface~compute_dtgc~2 compute_dTgc proc~derivative_vector~2->interface~compute_dtgc~2 interface~ndgrid ndgrid proc~derivative_vector~2->interface~ndgrid proc~is_rational~2 nurbs_surface%is_rational proc~derivative_vector~2->proc~is_rational~2 proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 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.","tags":"","loc":"proc/derivative_vector~2.html"},{"title":"elevate_degree – ForCAD","text":"private pure subroutine elevate_degree(this, dir, t) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in) :: dir integer, intent(in) :: t Calls proc~~elevate_degree~2~~CallsGraph proc~elevate_degree~2 nurbs_surface%elevate_degree none~get_knot~2 nurbs_surface%get_knot proc~elevate_degree~2->none~get_knot~2 none~set~2 nurbs_surface%set proc~elevate_degree~2->none~set~2 proc~elevate_degree_a_5_9 elevate_degree_A_5_9 proc~elevate_degree~2->proc~elevate_degree_a_5_9 proc~is_rational~2 nurbs_surface%is_rational proc~elevate_degree~2->proc~is_rational~2 proc~get_knot_all~2 nurbs_surface%get_knot_all none~get_knot~2->proc~get_knot_all~2 proc~get_knoti~2 nurbs_surface%get_knoti none~get_knot~2->proc~get_knoti~2 proc~set1~2 nurbs_surface%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_surface%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_surface%set3 none~set~2->proc~set3~2 interface~compute_multiplicity compute_multiplicity proc~elevate_degree_a_5_9->interface~compute_multiplicity proc~bincoeff bincoeff proc~elevate_degree_a_5_9->proc~bincoeff proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~factln factln proc~bincoeff->proc~factln proc~cmp_degree~2 nurbs_surface%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~cmp_nc~2 nurbs_surface%cmp_nc proc~set1~2->proc~cmp_nc~2 proc~set2~2->proc~cmp_nc~2 proc~compute_knot_vector compute_knot_vector proc~set2~2->proc~compute_knot_vector proc~set3~2->proc~cmp_degree~2 proc~get_multiplicity~2 nurbs_surface%get_multiplicity proc~cmp_degree~2->proc~get_multiplicity~2 proc~cmp_nc~2->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~get_multiplicity~2->interface~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~~elevate_degree~2~~CalledByGraph proc~elevate_degree~2 nurbs_surface%elevate_degree program~example3_surface example3_surface program~example3_surface->proc~elevate_degree~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/elevate_degree~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 nurbs_surface%export_Xc proc~cmp_elem_xc_vis~2 nurbs_surface%cmp_elem_Xc_vis proc~export_xc~2->proc~cmp_elem_xc_vis~2 interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xc_vis~2->interface~elemconn_c0 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v 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 nurbs_surface%export_Xc program~example3_surface example3_surface program~example3_surface->proc~export_xc~2 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~export_xc~2 program~shape_c_2d shape_C_2d program~shape_c_2d->proc~export_xc~2 program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~export_xc~2 program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~export_xc~2 program~shape_tetragon shape_tetragon program~shape_tetragon->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 nurbs_surface%export_Xg proc~cmp_elem_xg_vis~2 nurbs_surface%cmp_elem_Xg_vis proc~export_xg~2->proc~cmp_elem_xg_vis~2 interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xg_vis~2->interface~elemconn_c0 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v 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 nurbs_surface%export_Xg program~example3_surface example3_surface program~example3_surface->proc~export_xg~2 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~export_xg~2 program~shape_c_2d shape_C_2d program~shape_c_2d->proc~export_xg~2 program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~export_xg~2 program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~export_xg~2 program~shape_tetragon shape_tetragon program~shape_tetragon->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 nurbs_surface%finalize proc~nearest_point2~2 nurbs_surface%nearest_point2 proc~nearest_point2~2->proc~finalize~2 program~example3_surface example3_surface program~example3_surface->proc~finalize~2 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~finalize~2 program~example_ppm1 example_ppm1 program~example_ppm1->proc~finalize~2 program~example_ppm2 example_ppm2 program~example_ppm2->proc~finalize~2 program~example_ppm3 example_ppm3 program~example_ppm3->proc~finalize~2 program~nearest_point_2d nearest_point_2d program~nearest_point_2d->proc~finalize~2 program~nearest_point_2d->proc~nearest_point2~2 program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->proc~finalize~2 program~shape_c_2d shape_C_2d program~shape_c_2d->proc~finalize~2 program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~finalize~2 program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~finalize~2 program~shape_tetragon shape_tetragon program~shape_tetragon->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":"insert_knots – ForCAD","text":"private pure subroutine insert_knots(this, dir, Xth, r) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in) :: dir real(kind=rk), intent(in), contiguous :: Xth (:) integer, intent(in), contiguous :: r (:) Calls proc~~insert_knots~2~~CallsGraph proc~insert_knots~2 nurbs_surface%insert_knots interface~compute_multiplicity compute_multiplicity proc~insert_knots~2->interface~compute_multiplicity none~get_knot~2 nurbs_surface%get_knot proc~insert_knots~2->none~get_knot~2 none~set~2 nurbs_surface%set proc~insert_knots~2->none~set~2 proc~findspan findspan proc~insert_knots~2->proc~findspan proc~insert_knot_a_5_1 insert_knot_A_5_1 proc~insert_knots~2->proc~insert_knot_a_5_1 proc~is_rational~2 nurbs_surface%is_rational proc~insert_knots~2->proc~is_rational~2 proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_knot_all~2 nurbs_surface%get_knot_all none~get_knot~2->proc~get_knot_all~2 proc~get_knoti~2 nurbs_surface%get_knoti none~get_knot~2->proc~get_knoti~2 proc~set1~2 nurbs_surface%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_surface%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_surface%set3 none~set~2->proc~set3~2 proc~cmp_degree~2 nurbs_surface%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~cmp_nc~2 nurbs_surface%cmp_nc proc~set1~2->proc~cmp_nc~2 proc~set2~2->proc~cmp_nc~2 proc~compute_knot_vector compute_knot_vector proc~set2~2->proc~compute_knot_vector proc~set3~2->proc~cmp_degree~2 proc~get_multiplicity~2 nurbs_surface%get_multiplicity proc~cmp_degree~2->proc~get_multiplicity~2 proc~cmp_nc~2->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~get_multiplicity~2->interface~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~~insert_knots~2~~CalledByGraph proc~insert_knots~2 nurbs_surface%insert_knots program~example3_surface example3_surface program~example3_surface->proc~insert_knots~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/insert_knots~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 nurbs_surface%modify_Wc none~get_knot~2 nurbs_surface%get_knot proc~modify_wc~2->none~get_knot~2 none~get_wc~2 nurbs_surface%get_Wc proc~modify_wc~2->none~get_wc~2 none~get_xc~2 nurbs_surface%get_Xc proc~modify_wc~2->none~get_xc~2 none~set~2 nurbs_surface%set proc~modify_wc~2->none~set~2 proc~get_knot_all~2 nurbs_surface%get_knot_all none~get_knot~2->proc~get_knot_all~2 proc~get_knoti~2 nurbs_surface%get_knoti none~get_knot~2->proc~get_knoti~2 proc~get_wc_all~2 nurbs_surface%get_Wc_all none~get_wc~2->proc~get_wc_all~2 proc~get_wci~2 nurbs_surface%get_Wci none~get_wc~2->proc~get_wci~2 proc~get_xc_all~2 nurbs_surface%get_Xc_all none~get_xc~2->proc~get_xc_all~2 proc~get_xcid~2 nurbs_surface%get_Xcid none~get_xc~2->proc~get_xcid~2 proc~get_xci~2 nurbs_surface%get_Xci none~get_xc~2->proc~get_xci~2 proc~set1~2 nurbs_surface%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_surface%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_surface%set3 none~set~2->proc~set3~2 proc~cmp_degree~2 nurbs_surface%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~cmp_nc~2 nurbs_surface%cmp_nc proc~set1~2->proc~cmp_nc~2 proc~set2~2->proc~cmp_nc~2 proc~compute_knot_vector compute_knot_vector proc~set2~2->proc~compute_knot_vector proc~set3~2->proc~cmp_degree~2 proc~get_multiplicity~2 nurbs_surface%get_multiplicity proc~cmp_degree~2->proc~get_multiplicity~2 interface~compute_multiplicity compute_multiplicity proc~cmp_nc~2->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity~2->interface~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 nurbs_surface%modify_Xc none~get_knot~2 nurbs_surface%get_knot proc~modify_xc~2->none~get_knot~2 none~get_wc~2 nurbs_surface%get_Wc proc~modify_xc~2->none~get_wc~2 none~get_xc~2 nurbs_surface%get_Xc proc~modify_xc~2->none~get_xc~2 none~set~2 nurbs_surface%set proc~modify_xc~2->none~set~2 proc~get_knot_all~2 nurbs_surface%get_knot_all none~get_knot~2->proc~get_knot_all~2 proc~get_knoti~2 nurbs_surface%get_knoti none~get_knot~2->proc~get_knoti~2 proc~get_wc_all~2 nurbs_surface%get_Wc_all none~get_wc~2->proc~get_wc_all~2 proc~get_wci~2 nurbs_surface%get_Wci none~get_wc~2->proc~get_wci~2 proc~get_xc_all~2 nurbs_surface%get_Xc_all none~get_xc~2->proc~get_xc_all~2 proc~get_xcid~2 nurbs_surface%get_Xcid none~get_xc~2->proc~get_xcid~2 proc~get_xci~2 nurbs_surface%get_Xci none~get_xc~2->proc~get_xci~2 proc~set1~2 nurbs_surface%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_surface%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_surface%set3 none~set~2->proc~set3~2 proc~cmp_degree~2 nurbs_surface%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~cmp_nc~2 nurbs_surface%cmp_nc proc~set1~2->proc~cmp_nc~2 proc~set2~2->proc~cmp_nc~2 proc~compute_knot_vector compute_knot_vector proc~set2~2->proc~compute_knot_vector proc~set3~2->proc~cmp_degree~2 proc~get_multiplicity~2 nurbs_surface%get_multiplicity proc~cmp_degree~2->proc~get_multiplicity~2 interface~compute_multiplicity compute_multiplicity proc~cmp_nc~2->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity~2->interface~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~~modify_xc~2~~CalledByGraph proc~modify_xc~2 nurbs_surface%modify_Xc program~example_ppm3 example_ppm3 program~example_ppm3->proc~modify_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/modify_xc~2.html"},{"title":"nearest_point – ForCAD","text":"private pure subroutine nearest_point(this, point_Xg, nearest_Xg, nearest_Xt, id) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this real(kind=rk), intent(in) :: point_Xg (:) real(kind=rk), intent(out), optional, allocatable :: nearest_Xg (:) real(kind=rk), intent(out), optional, allocatable :: nearest_Xt (:) integer, intent(out), optional :: id Calls proc~~nearest_point~2~~CallsGraph proc~nearest_point~2 nurbs_surface%nearest_point interface~nearest_point_help_2d nearest_point_help_2d proc~nearest_point~2->interface~nearest_point_help_2d Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~nearest_point~2~~CalledByGraph proc~nearest_point~2 nurbs_surface%nearest_point program~nearest_point_2d nearest_point_2d program~nearest_point_2d->proc~nearest_point~2 program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->proc~nearest_point~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/nearest_point~2.html"},{"title":"nearest_point2 – ForCAD","text":"private impure subroutine nearest_point2(this, point_Xg, tol, maxit, nearest_Xt, nearest_Xg) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in) :: point_Xg (:) real(kind=rk), intent(in) :: tol integer, intent(in) :: maxit real(kind=rk), intent(out) :: nearest_Xt (2) real(kind=rk), intent(out), optional, allocatable :: nearest_Xg (:) Calls proc~~nearest_point2~2~~CallsGraph proc~nearest_point2~2 nurbs_surface%nearest_point2 interface~nearest_point_help_2d nearest_point_help_2d proc~nearest_point2~2->interface~nearest_point_help_2d none~derivative2~2 nurbs_surface%derivative2 proc~nearest_point2~2->none~derivative2~2 proc~cmp_xg~2 nurbs_surface%cmp_Xg proc~nearest_point2~2->proc~cmp_xg~2 proc~create~2 nurbs_surface%create proc~nearest_point2~2->proc~create~2 proc~finalize~2 nurbs_surface%finalize proc~nearest_point2~2->proc~finalize~2 proc~derivative2_scalar~2 nurbs_surface%derivative2_scalar none~derivative2~2->proc~derivative2_scalar~2 proc~derivative2_vector~2 nurbs_surface%derivative2_vector none~derivative2~2->proc~derivative2_vector~2 interface~compute_xg~2 compute_Xg proc~cmp_xg~2->interface~compute_xg~2 proc~is_rational~2 nurbs_surface%is_rational proc~cmp_xg~2->proc~is_rational~2 proc~create~2->interface~compute_xg~2 interface~ndgrid ndgrid proc~create~2->interface~ndgrid proc~create~2->proc~is_rational~2 proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 ndgrid3 interface~ndgrid->proc~ndgrid3 proc~derivative2_scalar~2->proc~is_rational~2 interface~compute_d2tgc~2 compute_d2Tgc proc~derivative2_scalar~2->interface~compute_d2tgc~2 proc~derivative2_vector~2->interface~ndgrid proc~derivative2_vector~2->proc~is_rational~2 proc~derivative2_vector~2->interface~compute_d2tgc~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. Called by proc~~nearest_point2~2~~CalledByGraph proc~nearest_point2~2 nurbs_surface%nearest_point2 program~nearest_point_2d nearest_point_2d program~nearest_point_2d->proc~nearest_point2~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/nearest_point2~2.html"},{"title":"remove_knots – ForCAD","text":"private pure subroutine remove_knots(this, dir, Xth, r) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in) :: dir real(kind=rk), intent(in), contiguous :: Xth (:) integer, intent(in), contiguous :: r (:) Calls proc~~remove_knots~2~~CallsGraph proc~remove_knots~2 nurbs_surface%remove_knots interface~compute_multiplicity compute_multiplicity proc~remove_knots~2->interface~compute_multiplicity none~get_knot~2 nurbs_surface%get_knot proc~remove_knots~2->none~get_knot~2 none~set~2 nurbs_surface%set proc~remove_knots~2->none~set~2 proc~findspan findspan proc~remove_knots~2->proc~findspan proc~is_rational~2 nurbs_surface%is_rational proc~remove_knots~2->proc~is_rational~2 proc~remove_knots_a_5_8 remove_knots_A_5_8 proc~remove_knots~2->proc~remove_knots_a_5_8 proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_knot_all~2 nurbs_surface%get_knot_all none~get_knot~2->proc~get_knot_all~2 proc~get_knoti~2 nurbs_surface%get_knoti none~get_knot~2->proc~get_knoti~2 proc~set1~2 nurbs_surface%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_surface%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_surface%set3 none~set~2->proc~set3~2 proc~cmp_degree~2 nurbs_surface%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~cmp_nc~2 nurbs_surface%cmp_nc proc~set1~2->proc~cmp_nc~2 proc~set2~2->proc~cmp_nc~2 proc~compute_knot_vector compute_knot_vector proc~set2~2->proc~compute_knot_vector proc~set3~2->proc~cmp_degree~2 proc~get_multiplicity~2 nurbs_surface%get_multiplicity proc~cmp_degree~2->proc~get_multiplicity~2 proc~cmp_nc~2->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~get_multiplicity~2->interface~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~~remove_knots~2~~CalledByGraph proc~remove_knots~2 nurbs_surface%remove_knots program~example3_surface example3_surface program~example3_surface->proc~remove_knots~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/remove_knots~2.html"},{"title":"rotate_Xc – ForCAD","text":"private pure subroutine rotate_Xc(this, alpha, beta, theta) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in) :: alpha real(kind=rk), intent(in) :: beta real(kind=rk), intent(in) :: theta Calls proc~~rotate_xc~2~~CallsGraph proc~rotate_xc~2 nurbs_surface%rotate_Xc proc~rotation rotation proc~rotate_xc~2->proc~rotation cosd cosd proc~rotation->cosd sind sind proc~rotation->sind Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~rotate_xc~2~~CalledByGraph proc~rotate_xc~2 nurbs_surface%rotate_Xc program~example3_surface example3_surface program~example3_surface->proc~rotate_xc~2 program~example_ppm2 example_ppm2 program~example_ppm2->proc~rotate_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/rotate_xc~2.html"},{"title":"rotate_Xg – ForCAD","text":"private pure subroutine rotate_Xg(this, alpha, beta, theta) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in) :: alpha real(kind=rk), intent(in) :: beta real(kind=rk), intent(in) :: theta Calls proc~~rotate_xg~2~~CallsGraph proc~rotate_xg~2 nurbs_surface%rotate_Xg proc~rotation rotation proc~rotate_xg~2->proc~rotation cosd cosd proc~rotation->cosd sind sind proc~rotation->sind Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~rotate_xg~2~~CalledByGraph proc~rotate_xg~2 nurbs_surface%rotate_Xg program~example3_surface example3_surface program~example3_surface->proc~rotate_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/rotate_xg~2.html"},{"title":"set1 – ForCAD","text":"private pure subroutine set1(this, knot1, knot2, Xc, Wc) Set knot vectors, 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), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) Calls proc~~set1~2~~CallsGraph proc~set1~2 nurbs_surface%set1 proc~cmp_degree~2 nurbs_surface%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~cmp_nc~2 nurbs_surface%cmp_nc proc~set1~2->proc~cmp_nc~2 proc~get_multiplicity~2 nurbs_surface%get_multiplicity proc~cmp_degree~2->proc~get_multiplicity~2 interface~compute_multiplicity compute_multiplicity proc~cmp_nc~2->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity~2->interface~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 nurbs_surface%set1 none~set~2 nurbs_surface%set none~set~2->proc~set1~2 proc~elevate_degree~2 nurbs_surface%elevate_degree proc~elevate_degree~2->none~set~2 proc~insert_knots~2 nurbs_surface%insert_knots proc~insert_knots~2->none~set~2 proc~modify_wc~2 nurbs_surface%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_xc~2 nurbs_surface%modify_Xc proc~modify_xc~2->none~set~2 proc~remove_knots~2 nurbs_surface%remove_knots proc~remove_knots~2->none~set~2 proc~set_c~2 nurbs_surface%set_C proc~set_c~2->none~set~2 proc~set_half_ring~2 nurbs_surface%set_half_ring proc~set_half_ring~2->none~set~2 proc~set_ring~2 nurbs_surface%set_ring proc~set_ring~2->none~set~2 proc~set_tetragon nurbs_surface%set_tetragon proc~set_tetragon->none~set~2 program~example3_surface example3_surface program~example3_surface->none~set~2 program~example3_surface->proc~elevate_degree~2 program~example3_surface->proc~insert_knots~2 program~example3_surface->proc~remove_knots~2 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->none~set~2 program~nearest_point_2d nearest_point_2d program~nearest_point_2d->none~set~2 program~example_ppm1 example_ppm1 program~example_ppm1->proc~set_ring~2 program~example_ppm1->proc~set_tetragon program~example_ppm2 example_ppm2 program~example_ppm2->proc~set_half_ring~2 program~example_ppm2->proc~set_tetragon program~example_ppm3 example_ppm3 program~example_ppm3->proc~modify_xc~2 program~example_ppm3->proc~set_tetragon program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->proc~set_tetragon program~shape_c_2d shape_C_2d program~shape_c_2d->proc~set_c~2 program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~set_half_ring~2 program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~set_ring~2 program~shape_tetragon shape_tetragon program~shape_tetragon->proc~set_tetragon Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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, degree, continuity1, continuity2, Xc, Wc) Set NURBS surface using nodes of parameter space, degree, continuity, control points and weights Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: Xth_dir1 (:) real(kind=rk), intent(in), contiguous :: Xth_dir2 (:) integer, intent(in), contiguous :: degree (:) integer, intent(in), contiguous :: continuity1 (:) integer, intent(in), contiguous :: continuity2 (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) Calls proc~~set2~2~~CallsGraph proc~set2~2 nurbs_surface%set2 proc~cmp_nc~2 nurbs_surface%cmp_nc proc~set2~2->proc~cmp_nc~2 proc~compute_knot_vector compute_knot_vector proc~set2~2->proc~compute_knot_vector interface~compute_multiplicity compute_multiplicity proc~cmp_nc~2->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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 nurbs_surface%set2 none~set~2 nurbs_surface%set none~set~2->proc~set2~2 proc~elevate_degree~2 nurbs_surface%elevate_degree proc~elevate_degree~2->none~set~2 proc~insert_knots~2 nurbs_surface%insert_knots proc~insert_knots~2->none~set~2 proc~modify_wc~2 nurbs_surface%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_xc~2 nurbs_surface%modify_Xc proc~modify_xc~2->none~set~2 proc~remove_knots~2 nurbs_surface%remove_knots proc~remove_knots~2->none~set~2 proc~set_c~2 nurbs_surface%set_C proc~set_c~2->none~set~2 proc~set_half_ring~2 nurbs_surface%set_half_ring proc~set_half_ring~2->none~set~2 proc~set_ring~2 nurbs_surface%set_ring proc~set_ring~2->none~set~2 proc~set_tetragon nurbs_surface%set_tetragon proc~set_tetragon->none~set~2 program~example3_surface example3_surface program~example3_surface->none~set~2 program~example3_surface->proc~elevate_degree~2 program~example3_surface->proc~insert_knots~2 program~example3_surface->proc~remove_knots~2 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->none~set~2 program~nearest_point_2d nearest_point_2d program~nearest_point_2d->none~set~2 program~example_ppm1 example_ppm1 program~example_ppm1->proc~set_ring~2 program~example_ppm1->proc~set_tetragon program~example_ppm2 example_ppm2 program~example_ppm2->proc~set_half_ring~2 program~example_ppm2->proc~set_tetragon program~example_ppm3 example_ppm3 program~example_ppm3->proc~modify_xc~2 program~example_ppm3->proc~set_tetragon program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->proc~set_tetragon program~shape_c_2d shape_C_2d program~shape_c_2d->proc~set_c~2 program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~set_half_ring~2 program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~set_ring~2 program~shape_tetragon shape_tetragon program~shape_tetragon->proc~set_tetragon Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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":"set3 – ForCAD","text":"private pure subroutine set3(this, nc, Xc, Wc) Set Bezier or Rational Bezier surface using control points and weights. Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), contiguous :: nc (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) Calls proc~~set3~2~~CallsGraph proc~set3~2 nurbs_surface%set3 proc~cmp_degree~2 nurbs_surface%cmp_degree proc~set3~2->proc~cmp_degree~2 proc~get_multiplicity~2 nurbs_surface%get_multiplicity proc~cmp_degree~2->proc~get_multiplicity~2 interface~compute_multiplicity compute_multiplicity proc~get_multiplicity~2->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~set3~2~~CalledByGraph proc~set3~2 nurbs_surface%set3 none~set~2 nurbs_surface%set none~set~2->proc~set3~2 proc~elevate_degree~2 nurbs_surface%elevate_degree proc~elevate_degree~2->none~set~2 proc~insert_knots~2 nurbs_surface%insert_knots proc~insert_knots~2->none~set~2 proc~modify_wc~2 nurbs_surface%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_xc~2 nurbs_surface%modify_Xc proc~modify_xc~2->none~set~2 proc~remove_knots~2 nurbs_surface%remove_knots proc~remove_knots~2->none~set~2 proc~set_c~2 nurbs_surface%set_C proc~set_c~2->none~set~2 proc~set_half_ring~2 nurbs_surface%set_half_ring proc~set_half_ring~2->none~set~2 proc~set_ring~2 nurbs_surface%set_ring proc~set_ring~2->none~set~2 proc~set_tetragon nurbs_surface%set_tetragon proc~set_tetragon->none~set~2 program~example3_surface example3_surface program~example3_surface->none~set~2 program~example3_surface->proc~elevate_degree~2 program~example3_surface->proc~insert_knots~2 program~example3_surface->proc~remove_knots~2 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->none~set~2 program~nearest_point_2d nearest_point_2d program~nearest_point_2d->none~set~2 program~example_ppm1 example_ppm1 program~example_ppm1->proc~set_ring~2 program~example_ppm1->proc~set_tetragon program~example_ppm2 example_ppm2 program~example_ppm2->proc~set_half_ring~2 program~example_ppm2->proc~set_tetragon program~example_ppm3 example_ppm3 program~example_ppm3->proc~modify_xc~2 program~example_ppm3->proc~set_tetragon program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->proc~set_tetragon program~shape_c_2d shape_C_2d program~shape_c_2d->proc~set_c~2 program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~set_half_ring~2 program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~set_ring~2 program~shape_tetragon shape_tetragon program~shape_tetragon->proc~set_tetragon Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/set3~2.html"},{"title":"set_C – ForCAD","text":"private pure subroutine set_C(this, center, radius1, radius2) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: center (:) real(kind=rk), intent(in) :: radius1 real(kind=rk), intent(in) :: radius2 Calls proc~~set_c~2~~CallsGraph proc~set_c~2 nurbs_surface%set_C none~set~2 nurbs_surface%set proc~set_c~2->none~set~2 proc~set1~2 nurbs_surface%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_surface%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_surface%set3 none~set~2->proc~set3~2 proc~cmp_degree~2 nurbs_surface%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~cmp_nc~2 nurbs_surface%cmp_nc proc~set1~2->proc~cmp_nc~2 proc~set2~2->proc~cmp_nc~2 proc~compute_knot_vector compute_knot_vector proc~set2~2->proc~compute_knot_vector proc~set3~2->proc~cmp_degree~2 proc~get_multiplicity~2 nurbs_surface%get_multiplicity proc~cmp_degree~2->proc~get_multiplicity~2 interface~compute_multiplicity compute_multiplicity proc~cmp_nc~2->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity~2->interface~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~~set_c~2~~CalledByGraph proc~set_c~2 nurbs_surface%set_C program~shape_c_2d shape_C_2d program~shape_c_2d->proc~set_c~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_c~2.html"},{"title":"set_elem – ForCAD","text":"private pure subroutine set_elem(this, elemConn) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:)","tags":"","loc":"proc/set_elem~2.html"},{"title":"set_elem_Xc_vis – ForCAD","text":"private pure subroutine set_elem_Xc_vis(this, elemConn) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:)","tags":"","loc":"proc/set_elem_xc_vis~2.html"},{"title":"set_elem_Xg_vis – ForCAD","text":"private pure subroutine set_elem_Xg_vis(this, elemConn) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:)","tags":"","loc":"proc/set_elem_xg_vis~2.html"},{"title":"set_half_ring – ForCAD","text":"private pure subroutine set_half_ring(this, center, radius1, radius2) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: center (:) real(kind=rk), intent(in) :: radius1 real(kind=rk), intent(in) :: radius2 Calls proc~~set_half_ring~2~~CallsGraph proc~set_half_ring~2 nurbs_surface%set_half_ring none~set~2 nurbs_surface%set proc~set_half_ring~2->none~set~2 proc~set1~2 nurbs_surface%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_surface%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_surface%set3 none~set~2->proc~set3~2 proc~cmp_degree~2 nurbs_surface%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~cmp_nc~2 nurbs_surface%cmp_nc proc~set1~2->proc~cmp_nc~2 proc~set2~2->proc~cmp_nc~2 proc~compute_knot_vector compute_knot_vector proc~set2~2->proc~compute_knot_vector proc~set3~2->proc~cmp_degree~2 proc~get_multiplicity~2 nurbs_surface%get_multiplicity proc~cmp_degree~2->proc~get_multiplicity~2 interface~compute_multiplicity compute_multiplicity proc~cmp_nc~2->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity~2->interface~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~~set_half_ring~2~~CalledByGraph proc~set_half_ring~2 nurbs_surface%set_half_ring program~example_ppm2 example_ppm2 program~example_ppm2->proc~set_half_ring~2 program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~set_half_ring~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_half_ring~2.html"},{"title":"set_ring – ForCAD","text":"private pure subroutine set_ring(this, center, radius1, radius2) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: center (:) real(kind=rk), intent(in) :: radius1 real(kind=rk), intent(in) :: radius2 Calls proc~~set_ring~2~~CallsGraph proc~set_ring~2 nurbs_surface%set_ring none~set~2 nurbs_surface%set proc~set_ring~2->none~set~2 proc~set1~2 nurbs_surface%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_surface%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_surface%set3 none~set~2->proc~set3~2 proc~cmp_degree~2 nurbs_surface%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~cmp_nc~2 nurbs_surface%cmp_nc proc~set1~2->proc~cmp_nc~2 proc~set2~2->proc~cmp_nc~2 proc~compute_knot_vector compute_knot_vector proc~set2~2->proc~compute_knot_vector proc~set3~2->proc~cmp_degree~2 proc~get_multiplicity~2 nurbs_surface%get_multiplicity proc~cmp_degree~2->proc~get_multiplicity~2 interface~compute_multiplicity compute_multiplicity proc~cmp_nc~2->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity~2->interface~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~~set_ring~2~~CalledByGraph proc~set_ring~2 nurbs_surface%set_ring program~example_ppm1 example_ppm1 program~example_ppm1->proc~set_ring~2 program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~set_ring~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_ring~2.html"},{"title":"set_tetragon – ForCAD","text":"private pure subroutine set_tetragon(this, L, nc, Wc) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in) :: L (2) integer, intent(in) :: nc (2) real(kind=rk), intent(in), optional, contiguous :: Wc (:) Calls proc~~set_tetragon~~CallsGraph proc~set_tetragon nurbs_surface%set_tetragon none~set~2 nurbs_surface%set proc~set_tetragon->none~set~2 proc~tetragon_xc tetragon_Xc proc~set_tetragon->proc~tetragon_xc proc~set1~2 nurbs_surface%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_surface%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_surface%set3 none~set~2->proc~set3~2 proc~cmp_degree~2 nurbs_surface%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~cmp_nc~2 nurbs_surface%cmp_nc proc~set1~2->proc~cmp_nc~2 proc~set2~2->proc~cmp_nc~2 proc~compute_knot_vector compute_knot_vector proc~set2~2->proc~compute_knot_vector proc~set3~2->proc~cmp_degree~2 proc~get_multiplicity~2 nurbs_surface%get_multiplicity proc~cmp_degree~2->proc~get_multiplicity~2 interface~compute_multiplicity compute_multiplicity proc~cmp_nc~2->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity~2->interface~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~~set_tetragon~~CalledByGraph proc~set_tetragon nurbs_surface%set_tetragon program~example_ppm1 example_ppm1 program~example_ppm1->proc~set_tetragon program~example_ppm2 example_ppm2 program~example_ppm2->proc~set_tetragon program~example_ppm3 example_ppm3 program~example_ppm3->proc~set_tetragon program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->proc~set_tetragon program~shape_tetragon shape_tetragon program~shape_tetragon->proc~set_tetragon Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_tetragon.html"},{"title":"show – ForCAD","text":"private impure subroutine show(this, vtkfile_Xc, vtkfile_Xg) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this character(len=*), intent(in) :: vtkfile_Xc character(len=*), intent(in) :: vtkfile_Xg Called by proc~~show~2~~CalledByGraph proc~show~2 nurbs_surface%show program~example3_surface example3_surface program~example3_surface->proc~show~2 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~show~2 program~shape_c_2d shape_C_2d program~shape_c_2d->proc~show~2 program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~show~2 program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~show~2 program~shape_tetragon shape_tetragon program~shape_tetragon->proc~show~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/show~2.html"},{"title":"translate_Xc – ForCAD","text":"private pure subroutine translate_Xc(this, vec) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in) :: vec (:) Called by proc~~translate_xc~2~~CalledByGraph proc~translate_xc~2 nurbs_surface%translate_Xc program~example3_surface example3_surface program~example3_surface->proc~translate_xc~2 program~example_ppm2 example_ppm2 program~example_ppm2->proc~translate_xc~2 program~example_ppm3 example_ppm3 program~example_ppm3->proc~translate_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/translate_xc~2.html"},{"title":"translate_Xg – ForCAD","text":"private pure subroutine translate_Xg(this, vec) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in) :: vec (:) Called by proc~~translate_xg~2~~CalledByGraph proc~translate_xg~2 nurbs_surface%translate_Xg program~example3_surface example3_surface program~example3_surface->proc~translate_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/translate_xg~2.html"},{"title":"compute_Tgc – ForCAD","text":"private interface compute_Tgc Called by interface~~compute_tgc~2~~CalledByGraph interface~compute_tgc~2 compute_Tgc proc~basis_scalar~2 nurbs_surface%basis_scalar proc~basis_scalar~2->interface~compute_tgc~2 proc~basis_vector~2 nurbs_surface%basis_vector proc~basis_vector~2->interface~compute_tgc~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. Functions private pure function compute_Tgc_bspline_2d_scalar(f_Xt, f_knot1, f_knot2, f_degree, f_nc) result(f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: f_nc (2) Return Value real(kind=rk), allocatable, (:) private pure function compute_Tgc_bspline_2d_vector(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_ng) result(f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: f_nc (2) integer, intent(in) :: f_ng (2) Return Value real(kind=rk), allocatable, (:,:) private pure function compute_Tgc_nurbs_2d_scalar(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_Wc) result(f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: f_nc (2) real(kind=rk), intent(in), contiguous :: f_Wc (:) Return Value real(kind=rk), allocatable, (:) private pure function compute_Tgc_nurbs_2d_vector(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_ng, f_Wc) result(f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: f_nc (2) integer, intent(in) :: f_ng (2) real(kind=rk), intent(in), contiguous :: f_Wc (:) Return Value real(kind=rk), allocatable, (:,:)","tags":"","loc":"interface/compute_tgc~2.html"},{"title":"compute_Xg – ForCAD","text":"private interface compute_Xg Called by interface~~compute_xg~2~~CalledByGraph interface~compute_xg~2 compute_Xg proc~cmp_xg~2 nurbs_surface%cmp_Xg proc~cmp_xg~2->interface~compute_xg~2 proc~create~2 nurbs_surface%create proc~create~2->interface~compute_xg~2 proc~nearest_point2~2 nurbs_surface%nearest_point2 proc~nearest_point2~2->proc~cmp_xg~2 proc~nearest_point2~2->proc~create~2 program~example3_surface example3_surface program~example3_surface->proc~create~2 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~create~2 program~example_ppm1 example_ppm1 program~example_ppm1->proc~create~2 program~example_ppm2 example_ppm2 program~example_ppm2->proc~create~2 program~example_ppm3 example_ppm3 program~example_ppm3->proc~create~2 program~nearest_point_2d nearest_point_2d program~nearest_point_2d->proc~create~2 program~nearest_point_2d->proc~nearest_point2~2 program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->proc~create~2 program~shape_c_2d shape_C_2d program~shape_c_2d->proc~create~2 program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~create~2 program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~create~2 program~shape_tetragon shape_tetragon program~shape_tetragon->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. Functions private pure function compute_Xg_bspline_2d(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_ng, f_Xc) result(f_Xg) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: f_nc (2) integer, intent(in) :: f_ng (2) real(kind=rk), intent(in), contiguous :: f_Xc (:,:) Return Value real(kind=rk), allocatable, (:,:) private pure function compute_Xg_bspline_2d_1point(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_Xc) result(f_Xg) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: f_nc (2) real(kind=rk), intent(in), contiguous :: f_Xc (:,:) Return Value real(kind=rk), allocatable, (:) private pure function compute_Xg_nurbs_2d(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_ng, f_Xc, f_Wc) result(f_Xg) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: f_nc (2) integer, intent(in) :: f_ng (2) real(kind=rk), intent(in), contiguous :: f_Xc (:,:) real(kind=rk), intent(in), contiguous :: f_Wc (:) Return Value real(kind=rk), allocatable, (:,:) private pure function compute_Xg_nurbs_2d_1point(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_Xc, f_Wc) result(f_Xg) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: f_nc (2) real(kind=rk), intent(in), contiguous :: f_Xc (:,:) real(kind=rk), intent(in), contiguous :: f_Wc (:) Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"interface/compute_xg~2.html"},{"title":"compute_d2Tgc – ForCAD","text":"private interface compute_d2Tgc Called by interface~~compute_d2tgc~2~~CalledByGraph interface~compute_d2tgc~2 compute_d2Tgc proc~derivative2_scalar~2 nurbs_surface%derivative2_scalar proc~derivative2_scalar~2->interface~compute_d2tgc~2 proc~derivative2_vector~2 nurbs_surface%derivative2_vector proc~derivative2_vector~2->interface~compute_d2tgc~2 none~derivative2~2 nurbs_surface%derivative2 none~derivative2~2->proc~derivative2_scalar~2 none~derivative2~2->proc~derivative2_vector~2 proc~nearest_point2~2 nurbs_surface%nearest_point2 proc~nearest_point2~2->none~derivative2~2 program~nearest_point_2d nearest_point_2d program~nearest_point_2d->proc~nearest_point2~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. Subroutines private pure subroutine compute_d2Tgc_bspline_2d_scalar(f_Xt, f_knot1, f_knot2, f_degree, nc, f_d2Tgc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: nc (2) real(kind=rk), intent(out), allocatable :: f_d2Tgc (:,:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:) private pure subroutine compute_d2Tgc_bspline_2d_vector(f_Xt, f_knot1, f_knot2, f_degree, nc, f_ng, f_d2Tgc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: nc (2) integer, intent(in) :: f_ng (2) real(kind=rk), intent(out), allocatable :: f_d2Tgc (:,:,:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:,:) private pure subroutine compute_d2Tgc_nurbs_2d_scalar(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_Wc, f_d2Tgc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: f_nc (2) real(kind=rk), intent(in), contiguous :: f_Wc (:) real(kind=rk), intent(out), allocatable :: f_d2Tgc (:,:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:) private pure subroutine compute_d2Tgc_nurbs_2d_vector(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_ng, f_Wc, f_d2Tgc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: f_nc (2) integer, intent(in) :: f_ng (2) real(kind=rk), intent(in), contiguous :: f_Wc (:) real(kind=rk), intent(out), allocatable :: f_d2Tgc (:,:,:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:,:)","tags":"","loc":"interface/compute_d2tgc~2.html"},{"title":"compute_dTgc – ForCAD","text":"private interface compute_dTgc Called by interface~~compute_dtgc~2~~CalledByGraph interface~compute_dtgc~2 compute_dTgc proc~derivative_scalar~2 nurbs_surface%derivative_scalar proc~derivative_scalar~2->interface~compute_dtgc~2 proc~derivative_vector~2 nurbs_surface%derivative_vector proc~derivative_vector~2->interface~compute_dtgc~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. Subroutines private pure subroutine compute_dTgc_bspline_2d_scalar(f_Xt, f_knot1, f_knot2, f_degree, nc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: nc (2) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:) private pure subroutine compute_dTgc_bspline_2d_vector(f_Xt, f_knot1, f_knot2, f_degree, nc, f_ng, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: nc (2) integer, intent(in) :: f_ng (2) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:,:) private pure subroutine compute_dTgc_nurbs_2d_scalar(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_Wc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: f_nc (2) real(kind=rk), intent(in), contiguous :: f_Wc (:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:) private pure subroutine compute_dTgc_nurbs_2d_vector(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_ng, f_Wc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: f_nc (2) integer, intent(in) :: f_ng (2) real(kind=rk), intent(in), contiguous :: f_Wc (:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:,:)","tags":"","loc":"interface/compute_dtgc~2.html"},{"title":"nearest_point_help_2d – ForCAD","text":"interface Called by interface~~nearest_point_help_2d~~CalledByGraph interface~nearest_point_help_2d nearest_point_help_2d proc~nearest_point2~2 nurbs_surface%nearest_point2 proc~nearest_point2~2->interface~nearest_point_help_2d proc~nearest_point~2 nurbs_surface%nearest_point proc~nearest_point~2->interface~nearest_point_help_2d program~nearest_point_2d nearest_point_2d program~nearest_point_2d->proc~nearest_point2~2 program~nearest_point_2d->proc~nearest_point~2 program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->proc~nearest_point~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. private pure function nearest_point_help_2d(f_ng, f_Xg, f_point_Xg) result(f_distances) Arguments Type Intent Optional Attributes Name integer, intent(in) :: f_ng (2) real(kind=rk), intent(in), contiguous :: f_Xg (:,:) real(kind=rk), intent(in), contiguous :: f_point_Xg (:) Return Value real(kind=rk),allocatable,(:)","tags":"","loc":"interface/nearest_point_help_2d.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), allocatable, (:,:) Called by proc~~generate_xc~~CalledByGraph proc~generate_xc generate_Xc program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->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), allocatable, (:,:) Called by proc~~generate_xc~2~~CalledByGraph proc~generate_xc~2 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), allocatable, (:,:) Called by proc~~generate_xc~3~~CalledByGraph proc~generate_xc~3 generate_Xc program~example3_surface example3_surface program~example3_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, (:)","tags":"","loc":"proc/basis_bernstein.html"},{"title":"basis_bspline – ForCAD","text":"public pure function basis_bspline(Xt, knot, nc, degree) result(B) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: Xt real(kind=rk), intent(in), contiguous :: knot (:) integer, intent(in) :: nc integer, intent(in) :: degree Return Value real(kind=rk), allocatable, (:) Called by proc~~basis_bspline~~CalledByGraph proc~basis_bspline basis_bspline proc~compute_tgc_bspline_1d_scalar compute_Tgc_bspline_1d_scalar proc~compute_tgc_bspline_1d_scalar->proc~basis_bspline proc~compute_tgc_bspline_1d_vector compute_Tgc_bspline_1d_vector proc~compute_tgc_bspline_1d_vector->proc~basis_bspline proc~compute_tgc_bspline_2d_scalar compute_Tgc_bspline_2d_scalar proc~compute_tgc_bspline_2d_scalar->proc~basis_bspline proc~compute_tgc_bspline_2d_vector compute_Tgc_bspline_2d_vector proc~compute_tgc_bspline_2d_vector->proc~basis_bspline proc~compute_tgc_bspline_3d_scalar compute_Tgc_bspline_3d_scalar proc~compute_tgc_bspline_3d_scalar->proc~basis_bspline proc~compute_tgc_bspline_3d_vector compute_Tgc_bspline_3d_vector proc~compute_tgc_bspline_3d_vector->proc~basis_bspline proc~compute_tgc_nurbs_1d_scalar compute_Tgc_nurbs_1d_scalar proc~compute_tgc_nurbs_1d_scalar->proc~basis_bspline proc~compute_tgc_nurbs_1d_vector compute_Tgc_nurbs_1d_vector proc~compute_tgc_nurbs_1d_vector->proc~basis_bspline proc~compute_tgc_nurbs_2d_scalar compute_Tgc_nurbs_2d_scalar proc~compute_tgc_nurbs_2d_scalar->proc~basis_bspline proc~compute_tgc_nurbs_2d_vector compute_Tgc_nurbs_2d_vector proc~compute_tgc_nurbs_2d_vector->proc~basis_bspline proc~compute_tgc_nurbs_3d_scalar compute_Tgc_nurbs_3d_scalar proc~compute_tgc_nurbs_3d_scalar->proc~basis_bspline proc~compute_tgc_nurbs_3d_vector compute_Tgc_nurbs_3d_vector proc~compute_tgc_nurbs_3d_vector->proc~basis_bspline proc~compute_xg_bspline_1d compute_Xg_bspline_1d proc~compute_xg_bspline_1d->proc~basis_bspline proc~compute_xg_bspline_1d_1point compute_Xg_bspline_1d_1point proc~compute_xg_bspline_1d_1point->proc~basis_bspline proc~compute_xg_bspline_2d compute_Xg_bspline_2d proc~compute_xg_bspline_2d->proc~basis_bspline proc~compute_xg_bspline_2d_1point compute_Xg_bspline_2d_1point proc~compute_xg_bspline_2d_1point->proc~basis_bspline proc~compute_xg_bspline_3d compute_Xg_bspline_3d proc~compute_xg_bspline_3d->proc~basis_bspline proc~compute_xg_bspline_3d_1point compute_Xg_bspline_3d_1point proc~compute_xg_bspline_3d_1point->proc~basis_bspline proc~compute_xg_nurbs_1d compute_Xg_nurbs_1d proc~compute_xg_nurbs_1d->proc~basis_bspline proc~compute_xg_nurbs_1d_1point compute_Xg_nurbs_1d_1point proc~compute_xg_nurbs_1d_1point->proc~basis_bspline proc~compute_xg_nurbs_2d compute_Xg_nurbs_2d proc~compute_xg_nurbs_2d->proc~basis_bspline proc~compute_xg_nurbs_2d_1point compute_Xg_nurbs_2d_1point proc~compute_xg_nurbs_2d_1point->proc~basis_bspline proc~compute_xg_nurbs_3d compute_Xg_nurbs_3d proc~compute_xg_nurbs_3d->proc~basis_bspline proc~compute_xg_nurbs_3d_1point compute_Xg_nurbs_3d_1point proc~compute_xg_nurbs_3d_1point->proc~basis_bspline proc~put_to_nurbs nurbs_volume%put_to_nurbs proc~put_to_nurbs->proc~basis_bspline program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->proc~put_to_nurbs Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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, degree, continuity) result(knot) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xth_dir (:) integer, intent(in) :: degree integer, intent(in), contiguous :: continuity (:) Return Value real(kind=rk), allocatable, (:) Calls proc~~compute_knot_vector~~CallsGraph proc~compute_knot_vector compute_knot_vector proc~repelem 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 compute_knot_vector proc~set2 nurbs_volume%set2 proc~set2->proc~compute_knot_vector proc~set2~2 nurbs_surface%set2 proc~set2~2->proc~compute_knot_vector proc~set2~3 nurbs_curve%set2 proc~set2~3->proc~compute_knot_vector none~set nurbs_volume%set none~set->proc~set2 none~set~2 nurbs_surface%set none~set~2->proc~set2~2 none~set~3 nurbs_curve%set none~set~3->proc~set2~3 proc~elevate_degree nurbs_volume%elevate_degree proc~elevate_degree->none~set proc~elevate_degree~2 nurbs_surface%elevate_degree proc~elevate_degree~2->none~set~2 proc~elevate_degree~3 nurbs_curve%elevate_degree proc~elevate_degree~3->none~set~3 proc~insert_knots nurbs_volume%insert_knots proc~insert_knots->none~set proc~insert_knots~2 nurbs_surface%insert_knots proc~insert_knots~2->none~set~2 proc~insert_knots~3 nurbs_curve%insert_knots proc~insert_knots~3->none~set~3 proc~modify_wc nurbs_volume%modify_Wc proc~modify_wc->none~set proc~modify_wc~2 nurbs_surface%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_wc~3 nurbs_curve%modify_Wc proc~modify_wc~3->none~set~3 proc~modify_xc nurbs_volume%modify_Xc proc~modify_xc->none~set proc~modify_xc~2 nurbs_surface%modify_Xc proc~modify_xc~2->none~set~2 proc~modify_xc~3 nurbs_curve%modify_Xc proc~modify_xc~3->none~set~3 proc~remove_knots nurbs_volume%remove_knots proc~remove_knots->none~set proc~remove_knots~2 nurbs_surface%remove_knots proc~remove_knots~2->none~set~2 proc~remove_knots~3 nurbs_curve%remove_knots proc~remove_knots~3->none~set~3 proc~set_c nurbs_volume%set_C proc~set_c->none~set proc~set_circle nurbs_curve%set_circle proc~set_circle->none~set~3 proc~set_c~2 nurbs_surface%set_C proc~set_c~2->none~set~2 proc~set_c~3 nurbs_curve%set_C proc~set_c~3->none~set~3 proc~set_half_circle nurbs_curve%set_half_circle proc~set_half_circle->none~set~3 proc~set_half_ring nurbs_volume%set_half_ring proc~set_half_ring->none~set proc~set_half_ring~2 nurbs_surface%set_half_ring proc~set_half_ring~2->none~set~2 proc~set_hexahedron nurbs_volume%set_hexahedron proc~set_hexahedron->none~set proc~set_ring nurbs_volume%set_ring proc~set_ring->none~set proc~set_ring~2 nurbs_surface%set_ring proc~set_ring~2->none~set~2 proc~set_tetragon nurbs_surface%set_tetragon proc~set_tetragon->none~set~2 program~example1_curve example1_curve program~example1_curve->none~set~3 program~example1_curve->proc~elevate_degree~3 program~example1_curve->proc~insert_knots~3 program~example1_curve->proc~remove_knots~3 program~example3_surface example3_surface program~example3_surface->none~set~2 program~example3_surface->proc~elevate_degree~2 program~example3_surface->proc~insert_knots~2 program~example3_surface->proc~remove_knots~2 program~example3_volume example3_volume program~example3_volume->none~set program~example3_volume->proc~elevate_degree program~example3_volume->proc~insert_knots program~example3_volume->proc~remove_knots program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->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 program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->none~set program~nearest_point_1d nearest_point_1d program~nearest_point_1d->none~set~3 program~nearest_point_2d nearest_point_2d program~nearest_point_2d->none~set~2 program~nearest_point_3d nearest_point_3d program~nearest_point_3d->none~set program~example_ppm1 example_ppm1 program~example_ppm1->proc~set_ring~2 program~example_ppm1->proc~set_tetragon program~example_ppm2 example_ppm2 program~example_ppm2->proc~set_half_ring~2 program~example_ppm2->proc~set_tetragon program~example_ppm3 example_ppm3 program~example_ppm3->proc~modify_xc~2 program~example_ppm3->proc~set_tetragon program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->proc~set_tetragon program~shape_c_1d shape_C_1d program~shape_c_1d->proc~set_c~3 program~shape_c_2d shape_C_2d program~shape_c_2d->proc~set_c~2 program~shape_c_3d shape_C_3d program~shape_c_3d->proc~set_c program~shape_circle shape_circle program~shape_circle->proc~set_circle program~shape_half_circle shape_half_circle program~shape_half_circle->proc~set_half_circle program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~set_half_ring~2 program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~set_half_ring program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~set_hexahedron program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~set_ring~2 program~shape_ring_3d shape_ring_3d program~shape_ring_3d->proc~set_ring program~shape_tetragon shape_tetragon program~shape_tetragon->proc~set_tetragon Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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":"findspan – ForCAD","text":"public pure function findspan(n, degree, Xth, knot) result(s) Arguments Type Intent Optional Attributes Name integer, intent(in) :: n integer, intent(in) :: degree real(kind=rk), intent(in) :: Xth real(kind=rk), intent(in), contiguous :: knot (:) Return Value integer Called by proc~~findspan~~CalledByGraph proc~findspan findspan proc~insert_knots nurbs_volume%insert_knots proc~insert_knots->proc~findspan proc~insert_knots~2 nurbs_surface%insert_knots proc~insert_knots~2->proc~findspan proc~insert_knots~3 nurbs_curve%insert_knots proc~insert_knots~3->proc~findspan proc~remove_knots nurbs_volume%remove_knots proc~remove_knots->proc~findspan proc~remove_knots~2 nurbs_surface%remove_knots proc~remove_knots~2->proc~findspan proc~remove_knots~3 nurbs_curve%remove_knots proc~remove_knots~3->proc~findspan program~example1_curve example1_curve program~example1_curve->proc~insert_knots~3 program~example1_curve->proc~remove_knots~3 program~example3_surface example3_surface program~example3_surface->proc~insert_knots~2 program~example3_surface->proc~remove_knots~2 program~example3_volume example3_volume program~example3_volume->proc~insert_knots program~example3_volume->proc~remove_knots Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/findspan.html"},{"title":"hexahedron_Xc – ForCAD","text":"public pure function hexahedron_Xc(L, nc) result(Xc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: L (3) integer, intent(in) :: nc (3) Return Value real(kind=rk), allocatable, (:,:) Called by proc~~hexahedron_xc~~CalledByGraph proc~hexahedron_xc hexahedron_Xc proc~set_hexahedron nurbs_volume%set_hexahedron proc~set_hexahedron->proc~hexahedron_xc program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->proc~hexahedron_xc program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~set_hexahedron Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/hexahedron_xc.html"},{"title":"kron – ForCAD","text":"public pure function kron(u, v) result(w) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: u (:) real(kind=rk), intent(in), contiguous :: v (:) Return Value real(kind=rk), (size(u)*size(v)) Called by proc~~kron~~CalledByGraph proc~kron kron proc~compute_d2tgc_bspline_2d_scalar compute_d2Tgc_bspline_2d_scalar proc~compute_d2tgc_bspline_2d_scalar->proc~kron proc~compute_d2tgc_bspline_2d_vector compute_d2Tgc_bspline_2d_vector proc~compute_d2tgc_bspline_2d_vector->proc~kron proc~compute_d2tgc_bspline_3d_scalar compute_d2Tgc_bspline_3d_scalar proc~compute_d2tgc_bspline_3d_scalar->proc~kron proc~compute_d2tgc_bspline_3d_vector compute_d2Tgc_bspline_3d_vector proc~compute_d2tgc_bspline_3d_vector->proc~kron proc~compute_d2tgc_nurbs_2d_scalar compute_d2Tgc_nurbs_2d_scalar proc~compute_d2tgc_nurbs_2d_scalar->proc~kron proc~compute_d2tgc_nurbs_2d_vector compute_d2Tgc_nurbs_2d_vector proc~compute_d2tgc_nurbs_2d_vector->proc~kron proc~compute_d2tgc_nurbs_3d_scalar compute_d2Tgc_nurbs_3d_scalar proc~compute_d2tgc_nurbs_3d_scalar->proc~kron proc~compute_d2tgc_nurbs_3d_vector compute_d2Tgc_nurbs_3d_vector proc~compute_d2tgc_nurbs_3d_vector->proc~kron proc~compute_dtgc_bspline_2d_scalar compute_dTgc_bspline_2d_scalar proc~compute_dtgc_bspline_2d_scalar->proc~kron proc~compute_dtgc_bspline_2d_vector compute_dTgc_bspline_2d_vector proc~compute_dtgc_bspline_2d_vector->proc~kron proc~compute_dtgc_bspline_3d_scalar compute_dTgc_bspline_3d_scalar proc~compute_dtgc_bspline_3d_scalar->proc~kron proc~compute_dtgc_bspline_3d_vector compute_dTgc_bspline_3d_vector proc~compute_dtgc_bspline_3d_vector->proc~kron proc~compute_dtgc_nurbs_2d_scalar compute_dTgc_nurbs_2d_scalar proc~compute_dtgc_nurbs_2d_scalar->proc~kron proc~compute_dtgc_nurbs_2d_vector compute_dTgc_nurbs_2d_vector proc~compute_dtgc_nurbs_2d_vector->proc~kron proc~compute_dtgc_nurbs_3d_scalar compute_dTgc_nurbs_3d_scalar proc~compute_dtgc_nurbs_3d_scalar->proc~kron proc~compute_dtgc_nurbs_3d_vector compute_dTgc_nurbs_3d_vector proc~compute_dtgc_nurbs_3d_vector->proc~kron proc~compute_tgc_bspline_2d_scalar compute_Tgc_bspline_2d_scalar proc~compute_tgc_bspline_2d_scalar->proc~kron proc~compute_tgc_bspline_2d_vector compute_Tgc_bspline_2d_vector proc~compute_tgc_bspline_2d_vector->proc~kron proc~compute_tgc_bspline_3d_scalar compute_Tgc_bspline_3d_scalar proc~compute_tgc_bspline_3d_scalar->proc~kron proc~compute_tgc_bspline_3d_vector compute_Tgc_bspline_3d_vector proc~compute_tgc_bspline_3d_vector->proc~kron proc~compute_tgc_nurbs_2d_scalar compute_Tgc_nurbs_2d_scalar proc~compute_tgc_nurbs_2d_scalar->proc~kron proc~compute_tgc_nurbs_2d_vector compute_Tgc_nurbs_2d_vector proc~compute_tgc_nurbs_2d_vector->proc~kron proc~compute_tgc_nurbs_3d_scalar compute_Tgc_nurbs_3d_scalar proc~compute_tgc_nurbs_3d_scalar->proc~kron proc~compute_tgc_nurbs_3d_vector compute_Tgc_nurbs_3d_vector proc~compute_tgc_nurbs_3d_vector->proc~kron proc~compute_xg_bspline_2d compute_Xg_bspline_2d proc~compute_xg_bspline_2d->proc~kron proc~compute_xg_bspline_2d_1point compute_Xg_bspline_2d_1point proc~compute_xg_bspline_2d_1point->proc~kron proc~compute_xg_bspline_3d compute_Xg_bspline_3d proc~compute_xg_bspline_3d->proc~kron proc~compute_xg_bspline_3d_1point compute_Xg_bspline_3d_1point proc~compute_xg_bspline_3d_1point->proc~kron proc~compute_xg_nurbs_2d compute_Xg_nurbs_2d proc~compute_xg_nurbs_2d->proc~kron proc~compute_xg_nurbs_2d_1point compute_Xg_nurbs_2d_1point proc~compute_xg_nurbs_2d_1point->proc~kron proc~compute_xg_nurbs_3d compute_Xg_nurbs_3d proc~compute_xg_nurbs_3d->proc~kron proc~compute_xg_nurbs_3d_1point compute_Xg_nurbs_3d_1point proc~compute_xg_nurbs_3d_1point->proc~kron proc~put_to_nurbs nurbs_volume%put_to_nurbs proc~put_to_nurbs->proc~kron program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->proc~put_to_nurbs Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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":"rotation – ForCAD","text":"public pure function rotation(alpha, beta, theta) result(R) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: alpha real(kind=rk), intent(in) :: beta real(kind=rk), intent(in) :: theta Return Value real(kind=rk), dimension(3,3) Calls proc~~rotation~~CallsGraph proc~rotation rotation cosd cosd proc~rotation->cosd sind sind proc~rotation->sind Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~rotation~~CalledByGraph proc~rotation rotation proc~rotate_xc nurbs_volume%rotate_Xc proc~rotate_xc->proc~rotation proc~rotate_xc~2 nurbs_surface%rotate_Xc proc~rotate_xc~2->proc~rotation proc~rotate_xc~3 nurbs_curve%rotate_Xc proc~rotate_xc~3->proc~rotation proc~rotate_xg nurbs_volume%rotate_Xg proc~rotate_xg->proc~rotation proc~rotate_xg~2 nurbs_surface%rotate_Xg proc~rotate_xg~2->proc~rotation proc~rotate_xg~3 nurbs_curve%rotate_Xg proc~rotate_xg~3->proc~rotation program~example1_curve example1_curve program~example1_curve->proc~rotate_xc~3 program~example1_curve->proc~rotate_xg~3 program~example3_surface example3_surface program~example3_surface->proc~rotate_xc~2 program~example3_surface->proc~rotate_xg~2 program~example3_volume example3_volume program~example3_volume->proc~rotate_xc program~example3_volume->proc~rotate_xg program~example_ppm2 example_ppm2 program~example_ppm2->proc~rotate_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/rotation.html"},{"title":"tetragon_Xc – ForCAD","text":"public pure function tetragon_Xc(L, nc) result(Xc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: L (2) integer, intent(in) :: nc (2) Return Value real(kind=rk), allocatable, (:,:) Called by proc~~tetragon_xc~~CalledByGraph proc~tetragon_xc tetragon_Xc proc~set_tetragon nurbs_surface%set_tetragon proc~set_tetragon->proc~tetragon_xc program~example_ppm1 example_ppm1 program~example_ppm1->proc~set_tetragon program~example_ppm2 example_ppm2 program~example_ppm2->proc~set_tetragon program~example_ppm3 example_ppm3 program~example_ppm3->proc~set_tetragon program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->proc~set_tetragon program~shape_tetragon shape_tetragon program~shape_tetragon->proc~set_tetragon Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/tetragon_xc.html"},{"title":"bincoeff – ForCAD","text":"private pure function bincoeff(n, k) result(b) Arguments Type Intent Optional Attributes Name integer, intent(in) :: n integer, intent(in) :: k Return Value real(kind=rk) Calls proc~~bincoeff~~CallsGraph proc~bincoeff bincoeff proc~factln factln proc~bincoeff->proc~factln Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~bincoeff~~CalledByGraph proc~bincoeff bincoeff proc~elevate_degree_a_5_9 elevate_degree_A_5_9 proc~elevate_degree_a_5_9->proc~bincoeff proc~elevate_degree nurbs_volume%elevate_degree proc~elevate_degree->proc~elevate_degree_a_5_9 proc~elevate_degree~2 nurbs_surface%elevate_degree proc~elevate_degree~2->proc~elevate_degree_a_5_9 proc~elevate_degree~3 nurbs_curve%elevate_degree proc~elevate_degree~3->proc~elevate_degree_a_5_9 program~example1_curve example1_curve program~example1_curve->proc~elevate_degree~3 program~example3_surface example3_surface program~example3_surface->proc~elevate_degree~2 program~example3_volume example3_volume program~example3_volume->proc~elevate_degree Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/bincoeff.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, allocatable, (:,:) Called by proc~~cmp_elemconn_c0_l~~CalledByGraph proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0 elemConn_C0 interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elem_xc_vis nurbs_volume%cmp_elem_Xc_vis proc~cmp_elem_xc_vis->interface~elemconn_c0 proc~cmp_elem_xc_vis~2 nurbs_surface%cmp_elem_Xc_vis proc~cmp_elem_xc_vis~2->interface~elemconn_c0 proc~cmp_elem_xc_vis~3 nurbs_curve%cmp_elem_Xc_vis proc~cmp_elem_xc_vis~3->interface~elemconn_c0 proc~cmp_elem_xg_vis nurbs_volume%cmp_elem_Xg_vis proc~cmp_elem_xg_vis->interface~elemconn_c0 proc~cmp_elem_xg_vis~2 nurbs_surface%cmp_elem_Xg_vis proc~cmp_elem_xg_vis~2->interface~elemconn_c0 proc~cmp_elem_xg_vis~3 nurbs_curve%cmp_elem_Xg_vis proc~cmp_elem_xg_vis~3->interface~elemconn_c0 proc~export_xc nurbs_volume%export_Xc proc~export_xc->proc~cmp_elem_xc_vis proc~export_xc~2 nurbs_surface%export_Xc proc~export_xc~2->proc~cmp_elem_xc_vis~2 proc~export_xc~3 nurbs_curve%export_Xc proc~export_xc~3->proc~cmp_elem_xc_vis~3 proc~export_xg nurbs_volume%export_Xg proc~export_xg->proc~cmp_elem_xg_vis proc~export_xg~2 nurbs_surface%export_Xg proc~export_xg~2->proc~cmp_elem_xg_vis~2 proc~export_xg~3 nurbs_curve%export_Xg proc~export_xg~3->proc~cmp_elem_xg_vis~3 program~example1_curve example1_curve program~example1_curve->proc~export_xc~3 program~example1_curve->proc~export_xg~3 program~example3_surface example3_surface program~example3_surface->proc~export_xc~2 program~example3_surface->proc~export_xg~2 program~example3_volume example3_volume program~example3_volume->proc~export_xc program~example3_volume->proc~export_xg program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~export_xc~3 program~example_nurbs_curve->proc~export_xg~3 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~export_xc~2 program~example_nurbs_surface->proc~export_xg~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~export_xc program~example_nurbs_volume->proc~export_xg program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->proc~export_xc program~example_put_to_nurbs->proc~export_xg program~shape_c_1d shape_C_1d program~shape_c_1d->proc~export_xc~3 program~shape_c_1d->proc~export_xg~3 program~shape_c_2d shape_C_2d program~shape_c_2d->proc~export_xc~2 program~shape_c_2d->proc~export_xg~2 program~shape_c_3d shape_C_3d program~shape_c_3d->proc~export_xc program~shape_c_3d->proc~export_xg program~shape_circle shape_circle program~shape_circle->proc~export_xc~3 program~shape_circle->proc~export_xg~3 program~shape_half_circle shape_half_circle program~shape_half_circle->proc~export_xc~3 program~shape_half_circle->proc~export_xg~3 program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~export_xc~2 program~shape_half_ring_2d->proc~export_xg~2 program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~export_xc program~shape_half_ring_3d->proc~export_xg program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~export_xc program~shape_hexahedron->proc~export_xg program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~export_xc~2 program~shape_ring_2d->proc~export_xg~2 program~shape_ring_3d shape_ring_3d program~shape_ring_3d->proc~export_xc program~shape_ring_3d->proc~export_xg program~shape_tetragon shape_tetragon program~shape_tetragon->proc~export_xc~2 program~shape_tetragon->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, allocatable, (:,:) Called by proc~~cmp_elemconn_c0_s~~CalledByGraph proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0 elemConn_C0 interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elem_xc_vis nurbs_volume%cmp_elem_Xc_vis proc~cmp_elem_xc_vis->interface~elemconn_c0 proc~cmp_elem_xc_vis~2 nurbs_surface%cmp_elem_Xc_vis proc~cmp_elem_xc_vis~2->interface~elemconn_c0 proc~cmp_elem_xc_vis~3 nurbs_curve%cmp_elem_Xc_vis proc~cmp_elem_xc_vis~3->interface~elemconn_c0 proc~cmp_elem_xg_vis nurbs_volume%cmp_elem_Xg_vis proc~cmp_elem_xg_vis->interface~elemconn_c0 proc~cmp_elem_xg_vis~2 nurbs_surface%cmp_elem_Xg_vis proc~cmp_elem_xg_vis~2->interface~elemconn_c0 proc~cmp_elem_xg_vis~3 nurbs_curve%cmp_elem_Xg_vis proc~cmp_elem_xg_vis~3->interface~elemconn_c0 proc~export_xc nurbs_volume%export_Xc proc~export_xc->proc~cmp_elem_xc_vis proc~export_xc~2 nurbs_surface%export_Xc proc~export_xc~2->proc~cmp_elem_xc_vis~2 proc~export_xc~3 nurbs_curve%export_Xc proc~export_xc~3->proc~cmp_elem_xc_vis~3 proc~export_xg nurbs_volume%export_Xg proc~export_xg->proc~cmp_elem_xg_vis proc~export_xg~2 nurbs_surface%export_Xg proc~export_xg~2->proc~cmp_elem_xg_vis~2 proc~export_xg~3 nurbs_curve%export_Xg proc~export_xg~3->proc~cmp_elem_xg_vis~3 program~example1_curve example1_curve program~example1_curve->proc~export_xc~3 program~example1_curve->proc~export_xg~3 program~example3_surface example3_surface program~example3_surface->proc~export_xc~2 program~example3_surface->proc~export_xg~2 program~example3_volume example3_volume program~example3_volume->proc~export_xc program~example3_volume->proc~export_xg program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~export_xc~3 program~example_nurbs_curve->proc~export_xg~3 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~export_xc~2 program~example_nurbs_surface->proc~export_xg~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~export_xc program~example_nurbs_volume->proc~export_xg program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->proc~export_xc program~example_put_to_nurbs->proc~export_xg program~shape_c_1d shape_C_1d program~shape_c_1d->proc~export_xc~3 program~shape_c_1d->proc~export_xg~3 program~shape_c_2d shape_C_2d program~shape_c_2d->proc~export_xc~2 program~shape_c_2d->proc~export_xg~2 program~shape_c_3d shape_C_3d program~shape_c_3d->proc~export_xc program~shape_c_3d->proc~export_xg program~shape_circle shape_circle program~shape_circle->proc~export_xc~3 program~shape_circle->proc~export_xg~3 program~shape_half_circle shape_half_circle program~shape_half_circle->proc~export_xc~3 program~shape_half_circle->proc~export_xg~3 program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~export_xc~2 program~shape_half_ring_2d->proc~export_xg~2 program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~export_xc program~shape_half_ring_3d->proc~export_xg program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~export_xc program~shape_hexahedron->proc~export_xg program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~export_xc~2 program~shape_ring_2d->proc~export_xg~2 program~shape_ring_3d shape_ring_3d program~shape_ring_3d->proc~export_xc program~shape_ring_3d->proc~export_xg program~shape_tetragon shape_tetragon program~shape_tetragon->proc~export_xc~2 program~shape_tetragon->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, allocatable, (:,:) Called by proc~~cmp_elemconn_c0_v~~CalledByGraph proc~cmp_elemconn_c0_v cmp_elemConn_C0_V interface~elemconn_c0 elemConn_C0 interface~elemconn_c0->proc~cmp_elemconn_c0_v proc~cmp_elem_xc_vis nurbs_volume%cmp_elem_Xc_vis proc~cmp_elem_xc_vis->interface~elemconn_c0 proc~cmp_elem_xc_vis~2 nurbs_surface%cmp_elem_Xc_vis proc~cmp_elem_xc_vis~2->interface~elemconn_c0 proc~cmp_elem_xc_vis~3 nurbs_curve%cmp_elem_Xc_vis proc~cmp_elem_xc_vis~3->interface~elemconn_c0 proc~cmp_elem_xg_vis nurbs_volume%cmp_elem_Xg_vis proc~cmp_elem_xg_vis->interface~elemconn_c0 proc~cmp_elem_xg_vis~2 nurbs_surface%cmp_elem_Xg_vis proc~cmp_elem_xg_vis~2->interface~elemconn_c0 proc~cmp_elem_xg_vis~3 nurbs_curve%cmp_elem_Xg_vis proc~cmp_elem_xg_vis~3->interface~elemconn_c0 proc~export_xc nurbs_volume%export_Xc proc~export_xc->proc~cmp_elem_xc_vis proc~export_xc~2 nurbs_surface%export_Xc proc~export_xc~2->proc~cmp_elem_xc_vis~2 proc~export_xc~3 nurbs_curve%export_Xc proc~export_xc~3->proc~cmp_elem_xc_vis~3 proc~export_xg nurbs_volume%export_Xg proc~export_xg->proc~cmp_elem_xg_vis proc~export_xg~2 nurbs_surface%export_Xg proc~export_xg~2->proc~cmp_elem_xg_vis~2 proc~export_xg~3 nurbs_curve%export_Xg proc~export_xg~3->proc~cmp_elem_xg_vis~3 program~example1_curve example1_curve program~example1_curve->proc~export_xc~3 program~example1_curve->proc~export_xg~3 program~example3_surface example3_surface program~example3_surface->proc~export_xc~2 program~example3_surface->proc~export_xg~2 program~example3_volume example3_volume program~example3_volume->proc~export_xc program~example3_volume->proc~export_xg program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~export_xc~3 program~example_nurbs_curve->proc~export_xg~3 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~export_xc~2 program~example_nurbs_surface->proc~export_xg~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~export_xc program~example_nurbs_volume->proc~export_xg program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->proc~export_xc program~example_put_to_nurbs->proc~export_xg program~shape_c_1d shape_C_1d program~shape_c_1d->proc~export_xc~3 program~shape_c_1d->proc~export_xg~3 program~shape_c_2d shape_C_2d program~shape_c_2d->proc~export_xc~2 program~shape_c_2d->proc~export_xg~2 program~shape_c_3d shape_C_3d program~shape_c_3d->proc~export_xc program~shape_c_3d->proc~export_xg program~shape_circle shape_circle program~shape_circle->proc~export_xc~3 program~shape_circle->proc~export_xg~3 program~shape_half_circle shape_half_circle program~shape_half_circle->proc~export_xc~3 program~shape_half_circle->proc~export_xg~3 program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~export_xc~2 program~shape_half_ring_2d->proc~export_xg~2 program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~export_xc program~shape_half_ring_3d->proc~export_xg program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~export_xc program~shape_hexahedron->proc~export_xg program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~export_xc~2 program~shape_ring_2d->proc~export_xg~2 program~shape_ring_3d shape_ring_3d program~shape_ring_3d->proc~export_xc program~shape_ring_3d->proc~export_xg program~shape_tetragon shape_tetragon program~shape_tetragon->proc~export_xc~2 program~shape_tetragon->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":"compute_multiplicity1 – ForCAD","text":"private pure function compute_multiplicity1(knot) result(multiplicity) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: knot (:) Return Value integer, allocatable, (:) Called by proc~~compute_multiplicity1~~CalledByGraph proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity compute_multiplicity interface~compute_multiplicity->proc~compute_multiplicity1 proc~cmp_nc nurbs_volume%cmp_nc proc~cmp_nc->interface~compute_multiplicity proc~cmp_nc~2 nurbs_surface%cmp_nc proc~cmp_nc~2->interface~compute_multiplicity proc~cmp_nc~3 nurbs_curve%cmp_nc proc~cmp_nc~3->interface~compute_multiplicity proc~elevate_degree_a_5_9 elevate_degree_A_5_9 proc~elevate_degree_a_5_9->interface~compute_multiplicity proc~get_continuity nurbs_volume%get_continuity proc~get_continuity->interface~compute_multiplicity proc~get_continuity~2 nurbs_surface%get_continuity proc~get_continuity~2->interface~compute_multiplicity proc~get_continuity~3 nurbs_curve%get_continuity proc~get_continuity~3->interface~compute_multiplicity proc~get_multiplicity nurbs_volume%get_multiplicity proc~get_multiplicity->interface~compute_multiplicity proc~get_multiplicity~2 nurbs_surface%get_multiplicity proc~get_multiplicity~2->interface~compute_multiplicity proc~get_multiplicity~3 nurbs_curve%get_multiplicity proc~get_multiplicity~3->interface~compute_multiplicity proc~get_nc get_nc proc~get_nc->interface~compute_multiplicity proc~get_nc~2 nurbs_surface%get_nc proc~get_nc~2->interface~compute_multiplicity proc~insert_knots nurbs_volume%insert_knots proc~insert_knots->interface~compute_multiplicity none~set nurbs_volume%set proc~insert_knots->none~set proc~insert_knots~2 nurbs_surface%insert_knots proc~insert_knots~2->interface~compute_multiplicity none~set~2 nurbs_surface%set proc~insert_knots~2->none~set~2 proc~insert_knots~3 nurbs_curve%insert_knots proc~insert_knots~3->interface~compute_multiplicity none~set~3 nurbs_curve%set proc~insert_knots~3->none~set~3 proc~remove_knots nurbs_volume%remove_knots proc~remove_knots->interface~compute_multiplicity proc~remove_knots->none~set proc~remove_knots~2 nurbs_surface%remove_knots proc~remove_knots~2->interface~compute_multiplicity proc~remove_knots~2->none~set~2 proc~remove_knots~3 nurbs_curve%remove_knots proc~remove_knots~3->interface~compute_multiplicity proc~remove_knots~3->none~set~3 proc~cmp_degree nurbs_volume%cmp_degree proc~cmp_degree->proc~get_multiplicity proc~cmp_degree~2 nurbs_surface%cmp_degree proc~cmp_degree~2->proc~get_multiplicity~2 proc~cmp_degree~3 nurbs_curve%cmp_degree proc~cmp_degree~3->proc~get_multiplicity~3 proc~cmp_elem nurbs_volume%cmp_elem proc~cmp_elem->proc~get_multiplicity proc~cmp_elem~2 nurbs_surface%cmp_elem proc~cmp_elem~2->proc~get_multiplicity~2 proc~cmp_elem~3 nurbs_curve%cmp_elem proc~cmp_elem~3->proc~get_multiplicity~3 proc~elevate_degree nurbs_volume%elevate_degree proc~elevate_degree->proc~elevate_degree_a_5_9 proc~elevate_degree->none~set proc~elevate_degree~2 nurbs_surface%elevate_degree proc~elevate_degree~2->proc~elevate_degree_a_5_9 proc~elevate_degree~2->none~set~2 proc~elevate_degree~3 nurbs_curve%elevate_degree proc~elevate_degree~3->proc~elevate_degree_a_5_9 proc~elevate_degree~3->none~set~3 proc~set1 nurbs_volume%set1 proc~set1->proc~cmp_nc proc~set1->proc~cmp_degree proc~set1~2 nurbs_surface%set1 proc~set1~2->proc~cmp_nc~2 proc~set1~2->proc~cmp_degree~2 proc~set2 nurbs_volume%set2 proc~set2->proc~cmp_nc proc~set2~2 nurbs_surface%set2 proc~set2~2->proc~cmp_nc~2 program~example1_curve example1_curve program~example1_curve->proc~insert_knots~3 program~example1_curve->proc~remove_knots~3 program~example1_curve->proc~elevate_degree~3 program~example1_curve->none~set~3 program~example3_surface example3_surface program~example3_surface->proc~insert_knots~2 program~example3_surface->proc~remove_knots~2 program~example3_surface->proc~elevate_degree~2 program~example3_surface->none~set~2 program~example3_volume example3_volume program~example3_volume->proc~insert_knots program~example3_volume->proc~remove_knots program~example3_volume->proc~cmp_elem program~example3_volume->proc~elevate_degree program~example3_volume->none~set none~set->proc~set1 none~set->proc~set2 proc~set3 nurbs_volume%set3 none~set->proc~set3 none~set~2->proc~set1~2 none~set~2->proc~set2~2 proc~set3~2 nurbs_surface%set3 none~set~2->proc~set3~2 proc~set1~3 nurbs_curve%set1 proc~set1~3->proc~cmp_degree~3 proc~set3->proc~cmp_degree proc~set3~2->proc~cmp_degree~2 proc~set3~3 nurbs_curve%set3 proc~set3~3->proc~cmp_degree~3 none~set~3->proc~set1~3 none~set~3->proc~set3~3 proc~modify_wc nurbs_volume%modify_Wc proc~modify_wc->none~set proc~modify_wc~2 nurbs_surface%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_xc nurbs_volume%modify_Xc proc~modify_xc->none~set proc~modify_xc~2 nurbs_surface%modify_Xc proc~modify_xc~2->none~set~2 proc~set_c nurbs_volume%set_C proc~set_c->none~set proc~set_c~2 nurbs_surface%set_C proc~set_c~2->none~set~2 proc~set_half_ring nurbs_volume%set_half_ring proc~set_half_ring->none~set proc~set_half_ring~2 nurbs_surface%set_half_ring proc~set_half_ring~2->none~set~2 proc~set_hexahedron nurbs_volume%set_hexahedron proc~set_hexahedron->none~set proc~set_ring nurbs_volume%set_ring proc~set_ring->none~set proc~set_ring~2 nurbs_surface%set_ring proc~set_ring~2->none~set~2 proc~set_tetragon nurbs_surface%set_tetragon proc~set_tetragon->none~set~2 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->none~set~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->none~set program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->none~set program~nearest_point_2d nearest_point_2d program~nearest_point_2d->none~set~2 program~nearest_point_3d nearest_point_3d program~nearest_point_3d->none~set proc~modify_wc~3 nurbs_curve%modify_Wc proc~modify_wc~3->none~set~3 proc~modify_xc~3 nurbs_curve%modify_Xc proc~modify_xc~3->none~set~3 proc~set_circle nurbs_curve%set_circle proc~set_circle->none~set~3 proc~set_c~3 nurbs_curve%set_C proc~set_c~3->none~set~3 proc~set_half_circle nurbs_curve%set_half_circle proc~set_half_circle->none~set~3 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->none~set~3 program~example_ppm1 example_ppm1 program~example_ppm1->proc~set_ring~2 program~example_ppm1->proc~set_tetragon program~example_ppm2 example_ppm2 program~example_ppm2->proc~set_half_ring~2 program~example_ppm2->proc~set_tetragon program~example_ppm3 example_ppm3 program~example_ppm3->proc~modify_xc~2 program~example_ppm3->proc~set_tetragon program~nearest_point_1d nearest_point_1d program~nearest_point_1d->none~set~3 program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->proc~set_tetragon program~shape_c_2d shape_C_2d program~shape_c_2d->proc~set_c~2 program~shape_c_3d shape_C_3d program~shape_c_3d->proc~set_c program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~set_half_ring~2 program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~set_half_ring program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~set_hexahedron program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~set_ring~2 program~shape_ring_3d shape_ring_3d program~shape_ring_3d->proc~set_ring program~shape_tetragon shape_tetragon program~shape_tetragon->proc~set_tetragon program~shape_c_1d shape_C_1d program~shape_c_1d->proc~set_c~3 program~shape_circle shape_circle program~shape_circle->proc~set_circle program~shape_half_circle shape_half_circle program~shape_half_circle->proc~set_half_circle Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_multiplicity1.html"},{"title":"compute_multiplicity2 – ForCAD","text":"private pure function compute_multiplicity2(knot, Xth) result(multiplicity) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: knot (:) real(kind=rk), intent(in) :: Xth Return Value integer Called by proc~~compute_multiplicity2~~CalledByGraph proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity compute_multiplicity interface~compute_multiplicity->proc~compute_multiplicity2 proc~cmp_nc nurbs_volume%cmp_nc proc~cmp_nc->interface~compute_multiplicity proc~cmp_nc~2 nurbs_surface%cmp_nc proc~cmp_nc~2->interface~compute_multiplicity proc~cmp_nc~3 nurbs_curve%cmp_nc proc~cmp_nc~3->interface~compute_multiplicity proc~elevate_degree_a_5_9 elevate_degree_A_5_9 proc~elevate_degree_a_5_9->interface~compute_multiplicity proc~get_continuity nurbs_volume%get_continuity proc~get_continuity->interface~compute_multiplicity proc~get_continuity~2 nurbs_surface%get_continuity proc~get_continuity~2->interface~compute_multiplicity proc~get_continuity~3 nurbs_curve%get_continuity proc~get_continuity~3->interface~compute_multiplicity proc~get_multiplicity nurbs_volume%get_multiplicity proc~get_multiplicity->interface~compute_multiplicity proc~get_multiplicity~2 nurbs_surface%get_multiplicity proc~get_multiplicity~2->interface~compute_multiplicity proc~get_multiplicity~3 nurbs_curve%get_multiplicity proc~get_multiplicity~3->interface~compute_multiplicity proc~get_nc get_nc proc~get_nc->interface~compute_multiplicity proc~get_nc~2 nurbs_surface%get_nc proc~get_nc~2->interface~compute_multiplicity proc~insert_knots nurbs_volume%insert_knots proc~insert_knots->interface~compute_multiplicity none~set nurbs_volume%set proc~insert_knots->none~set proc~insert_knots~2 nurbs_surface%insert_knots proc~insert_knots~2->interface~compute_multiplicity none~set~2 nurbs_surface%set proc~insert_knots~2->none~set~2 proc~insert_knots~3 nurbs_curve%insert_knots proc~insert_knots~3->interface~compute_multiplicity none~set~3 nurbs_curve%set proc~insert_knots~3->none~set~3 proc~remove_knots nurbs_volume%remove_knots proc~remove_knots->interface~compute_multiplicity proc~remove_knots->none~set proc~remove_knots~2 nurbs_surface%remove_knots proc~remove_knots~2->interface~compute_multiplicity proc~remove_knots~2->none~set~2 proc~remove_knots~3 nurbs_curve%remove_knots proc~remove_knots~3->interface~compute_multiplicity proc~remove_knots~3->none~set~3 proc~cmp_degree nurbs_volume%cmp_degree proc~cmp_degree->proc~get_multiplicity proc~cmp_degree~2 nurbs_surface%cmp_degree proc~cmp_degree~2->proc~get_multiplicity~2 proc~cmp_degree~3 nurbs_curve%cmp_degree proc~cmp_degree~3->proc~get_multiplicity~3 proc~cmp_elem nurbs_volume%cmp_elem proc~cmp_elem->proc~get_multiplicity proc~cmp_elem~2 nurbs_surface%cmp_elem proc~cmp_elem~2->proc~get_multiplicity~2 proc~cmp_elem~3 nurbs_curve%cmp_elem proc~cmp_elem~3->proc~get_multiplicity~3 proc~elevate_degree nurbs_volume%elevate_degree proc~elevate_degree->proc~elevate_degree_a_5_9 proc~elevate_degree->none~set proc~elevate_degree~2 nurbs_surface%elevate_degree proc~elevate_degree~2->proc~elevate_degree_a_5_9 proc~elevate_degree~2->none~set~2 proc~elevate_degree~3 nurbs_curve%elevate_degree proc~elevate_degree~3->proc~elevate_degree_a_5_9 proc~elevate_degree~3->none~set~3 proc~set1 nurbs_volume%set1 proc~set1->proc~cmp_nc proc~set1->proc~cmp_degree proc~set1~2 nurbs_surface%set1 proc~set1~2->proc~cmp_nc~2 proc~set1~2->proc~cmp_degree~2 proc~set2 nurbs_volume%set2 proc~set2->proc~cmp_nc proc~set2~2 nurbs_surface%set2 proc~set2~2->proc~cmp_nc~2 program~example1_curve example1_curve program~example1_curve->proc~insert_knots~3 program~example1_curve->proc~remove_knots~3 program~example1_curve->proc~elevate_degree~3 program~example1_curve->none~set~3 program~example3_surface example3_surface program~example3_surface->proc~insert_knots~2 program~example3_surface->proc~remove_knots~2 program~example3_surface->proc~elevate_degree~2 program~example3_surface->none~set~2 program~example3_volume example3_volume program~example3_volume->proc~insert_knots program~example3_volume->proc~remove_knots program~example3_volume->proc~cmp_elem program~example3_volume->proc~elevate_degree program~example3_volume->none~set none~set->proc~set1 none~set->proc~set2 proc~set3 nurbs_volume%set3 none~set->proc~set3 none~set~2->proc~set1~2 none~set~2->proc~set2~2 proc~set3~2 nurbs_surface%set3 none~set~2->proc~set3~2 proc~set1~3 nurbs_curve%set1 proc~set1~3->proc~cmp_degree~3 proc~set3->proc~cmp_degree proc~set3~2->proc~cmp_degree~2 proc~set3~3 nurbs_curve%set3 proc~set3~3->proc~cmp_degree~3 none~set~3->proc~set1~3 none~set~3->proc~set3~3 proc~modify_wc nurbs_volume%modify_Wc proc~modify_wc->none~set proc~modify_wc~2 nurbs_surface%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_xc nurbs_volume%modify_Xc proc~modify_xc->none~set proc~modify_xc~2 nurbs_surface%modify_Xc proc~modify_xc~2->none~set~2 proc~set_c nurbs_volume%set_C proc~set_c->none~set proc~set_c~2 nurbs_surface%set_C proc~set_c~2->none~set~2 proc~set_half_ring nurbs_volume%set_half_ring proc~set_half_ring->none~set proc~set_half_ring~2 nurbs_surface%set_half_ring proc~set_half_ring~2->none~set~2 proc~set_hexahedron nurbs_volume%set_hexahedron proc~set_hexahedron->none~set proc~set_ring nurbs_volume%set_ring proc~set_ring->none~set proc~set_ring~2 nurbs_surface%set_ring proc~set_ring~2->none~set~2 proc~set_tetragon nurbs_surface%set_tetragon proc~set_tetragon->none~set~2 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->none~set~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->none~set program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->none~set program~nearest_point_2d nearest_point_2d program~nearest_point_2d->none~set~2 program~nearest_point_3d nearest_point_3d program~nearest_point_3d->none~set proc~modify_wc~3 nurbs_curve%modify_Wc proc~modify_wc~3->none~set~3 proc~modify_xc~3 nurbs_curve%modify_Xc proc~modify_xc~3->none~set~3 proc~set_circle nurbs_curve%set_circle proc~set_circle->none~set~3 proc~set_c~3 nurbs_curve%set_C proc~set_c~3->none~set~3 proc~set_half_circle nurbs_curve%set_half_circle proc~set_half_circle->none~set~3 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->none~set~3 program~example_ppm1 example_ppm1 program~example_ppm1->proc~set_ring~2 program~example_ppm1->proc~set_tetragon program~example_ppm2 example_ppm2 program~example_ppm2->proc~set_half_ring~2 program~example_ppm2->proc~set_tetragon program~example_ppm3 example_ppm3 program~example_ppm3->proc~modify_xc~2 program~example_ppm3->proc~set_tetragon program~nearest_point_1d nearest_point_1d program~nearest_point_1d->none~set~3 program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->proc~set_tetragon program~shape_c_2d shape_C_2d program~shape_c_2d->proc~set_c~2 program~shape_c_3d shape_C_3d program~shape_c_3d->proc~set_c program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~set_half_ring~2 program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~set_half_ring program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~set_hexahedron program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~set_ring~2 program~shape_ring_3d shape_ring_3d program~shape_ring_3d->proc~set_ring program~shape_tetragon shape_tetragon program~shape_tetragon->proc~set_tetragon program~shape_c_1d shape_C_1d program~shape_c_1d->proc~set_c~3 program~shape_circle shape_circle program~shape_circle->proc~set_circle program~shape_half_circle shape_half_circle program~shape_half_circle->proc~set_half_circle Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_multiplicity2.html"},{"title":"factln – ForCAD","text":"private pure function factln(n) result(f) Arguments Type Intent Optional Attributes Name integer, intent(in) :: n Return Value real(kind=rk) Called by proc~~factln~~CalledByGraph proc~factln factln proc~bincoeff bincoeff proc~bincoeff->proc~factln proc~elevate_degree_a_5_9 elevate_degree_A_5_9 proc~elevate_degree_a_5_9->proc~bincoeff proc~elevate_degree nurbs_volume%elevate_degree proc~elevate_degree->proc~elevate_degree_a_5_9 proc~elevate_degree~2 nurbs_surface%elevate_degree proc~elevate_degree~2->proc~elevate_degree_a_5_9 proc~elevate_degree~3 nurbs_curve%elevate_degree proc~elevate_degree~3->proc~elevate_degree_a_5_9 program~example1_curve example1_curve program~example1_curve->proc~elevate_degree~3 program~example3_surface example3_surface program~example3_surface->proc~elevate_degree~2 program~example3_volume example3_volume program~example3_volume->proc~elevate_degree Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/factln.html"},{"title":"isinf – ForCAD","text":"private pure elemental function isinf(x) result(output) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: x Return Value logical","tags":"","loc":"proc/isinf.html"},{"title":"isnan – ForCAD","text":"private pure elemental function isnan(x) result(output) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: x Return Value logical","tags":"","loc":"proc/isnan.html"},{"title":"repelem – ForCAD","text":"private pure function repelem(a, b) result(c) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: a (:) integer, intent(in), contiguous :: b (:) Return Value real(kind=rk), (sum(b)) Called by proc~~repelem~~CalledByGraph proc~repelem repelem proc~compute_knot_vector compute_knot_vector proc~compute_knot_vector->proc~repelem proc~set2 nurbs_volume%set2 proc~set2->proc~compute_knot_vector proc~set2~2 nurbs_surface%set2 proc~set2~2->proc~compute_knot_vector proc~set2~3 nurbs_curve%set2 proc~set2~3->proc~compute_knot_vector none~set nurbs_volume%set none~set->proc~set2 none~set~2 nurbs_surface%set none~set~2->proc~set2~2 none~set~3 nurbs_curve%set none~set~3->proc~set2~3 proc~elevate_degree nurbs_volume%elevate_degree proc~elevate_degree->none~set proc~elevate_degree~2 nurbs_surface%elevate_degree proc~elevate_degree~2->none~set~2 proc~elevate_degree~3 nurbs_curve%elevate_degree proc~elevate_degree~3->none~set~3 proc~insert_knots nurbs_volume%insert_knots proc~insert_knots->none~set proc~insert_knots~2 nurbs_surface%insert_knots proc~insert_knots~2->none~set~2 proc~insert_knots~3 nurbs_curve%insert_knots proc~insert_knots~3->none~set~3 proc~modify_wc nurbs_volume%modify_Wc proc~modify_wc->none~set proc~modify_wc~2 nurbs_surface%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_wc~3 nurbs_curve%modify_Wc proc~modify_wc~3->none~set~3 proc~modify_xc nurbs_volume%modify_Xc proc~modify_xc->none~set proc~modify_xc~2 nurbs_surface%modify_Xc proc~modify_xc~2->none~set~2 proc~modify_xc~3 nurbs_curve%modify_Xc proc~modify_xc~3->none~set~3 proc~remove_knots nurbs_volume%remove_knots proc~remove_knots->none~set proc~remove_knots~2 nurbs_surface%remove_knots proc~remove_knots~2->none~set~2 proc~remove_knots~3 nurbs_curve%remove_knots proc~remove_knots~3->none~set~3 proc~set_c nurbs_volume%set_C proc~set_c->none~set proc~set_circle nurbs_curve%set_circle proc~set_circle->none~set~3 proc~set_c~2 nurbs_surface%set_C proc~set_c~2->none~set~2 proc~set_c~3 nurbs_curve%set_C proc~set_c~3->none~set~3 proc~set_half_circle nurbs_curve%set_half_circle proc~set_half_circle->none~set~3 proc~set_half_ring nurbs_volume%set_half_ring proc~set_half_ring->none~set proc~set_half_ring~2 nurbs_surface%set_half_ring proc~set_half_ring~2->none~set~2 proc~set_hexahedron nurbs_volume%set_hexahedron proc~set_hexahedron->none~set proc~set_ring nurbs_volume%set_ring proc~set_ring->none~set proc~set_ring~2 nurbs_surface%set_ring proc~set_ring~2->none~set~2 proc~set_tetragon nurbs_surface%set_tetragon proc~set_tetragon->none~set~2 program~example1_curve example1_curve program~example1_curve->none~set~3 program~example1_curve->proc~elevate_degree~3 program~example1_curve->proc~insert_knots~3 program~example1_curve->proc~remove_knots~3 program~example3_surface example3_surface program~example3_surface->none~set~2 program~example3_surface->proc~elevate_degree~2 program~example3_surface->proc~insert_knots~2 program~example3_surface->proc~remove_knots~2 program~example3_volume example3_volume program~example3_volume->none~set program~example3_volume->proc~elevate_degree program~example3_volume->proc~insert_knots program~example3_volume->proc~remove_knots program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->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 program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->none~set program~nearest_point_1d nearest_point_1d program~nearest_point_1d->none~set~3 program~nearest_point_2d nearest_point_2d program~nearest_point_2d->none~set~2 program~nearest_point_3d nearest_point_3d program~nearest_point_3d->none~set program~example_ppm1 example_ppm1 program~example_ppm1->proc~set_ring~2 program~example_ppm1->proc~set_tetragon program~example_ppm2 example_ppm2 program~example_ppm2->proc~set_half_ring~2 program~example_ppm2->proc~set_tetragon program~example_ppm3 example_ppm3 program~example_ppm3->proc~modify_xc~2 program~example_ppm3->proc~set_tetragon program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->proc~set_tetragon program~shape_c_1d shape_C_1d program~shape_c_1d->proc~set_c~3 program~shape_c_2d shape_C_2d program~shape_c_2d->proc~set_c~2 program~shape_c_3d shape_C_3d program~shape_c_3d->proc~set_c program~shape_circle shape_circle program~shape_circle->proc~set_circle program~shape_half_circle shape_half_circle program~shape_half_circle->proc~set_half_circle program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~set_half_ring~2 program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~set_half_ring program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~set_hexahedron program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~set_ring~2 program~shape_ring_3d shape_ring_3d program~shape_ring_3d->proc~set_ring program~shape_tetragon shape_tetragon program~shape_tetragon->proc~set_tetragon Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/repelem.html"},{"title":"unique_integer – ForCAD","text":"private pure function unique_integer(vec) result(output) Arguments Type Intent Optional Attributes Name integer, intent(in), dimension(:), contiguous :: vec Return Value integer, dimension(:), allocatable Called by proc~~unique_integer~~CalledByGraph proc~unique_integer unique_integer interface~unique unique interface~unique->proc~unique_integer proc~cmp_elem nurbs_volume%cmp_elem proc~cmp_elem->interface~unique proc~cmp_elem~2 nurbs_surface%cmp_elem proc~cmp_elem~2->interface~unique proc~cmp_elem~3 nurbs_curve%cmp_elem proc~cmp_elem~3->interface~unique program~example3_volume example3_volume program~example3_volume->proc~cmp_elem Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/unique_integer.html"},{"title":"unique_real – ForCAD","text":"private pure function unique_real(vec) result(output) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), dimension(:), contiguous :: vec Return Value real(kind=rk), dimension(:), allocatable Called by proc~~unique_real~~CalledByGraph proc~unique_real unique_real interface~unique unique interface~unique->proc~unique_real proc~cmp_elem nurbs_volume%cmp_elem proc~cmp_elem->interface~unique proc~cmp_elem~2 nurbs_surface%cmp_elem proc~cmp_elem~2->interface~unique proc~cmp_elem~3 nurbs_curve%cmp_elem proc~cmp_elem~3->interface~unique program~example3_volume example3_volume program~example3_volume->proc~cmp_elem Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/unique_real.html"},{"title":"basis_bspline_2der – ForCAD","text":"public pure subroutine basis_bspline_2der(Xt, knot, nc, degree, d2B, dB, B) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: Xt real(kind=rk), intent(in), contiguous :: knot (:) integer, intent(in) :: nc integer, intent(in) :: degree real(kind=rk), intent(out), allocatable :: d2B (:) real(kind=rk), intent(out), optional, allocatable :: dB (:) real(kind=rk), intent(out), optional, allocatable :: B (:) Called by proc~~basis_bspline_2der~~CalledByGraph proc~basis_bspline_2der basis_bspline_2der proc~compute_d2tgc_bspline_1d_scalar compute_d2Tgc_bspline_1d_scalar proc~compute_d2tgc_bspline_1d_scalar->proc~basis_bspline_2der proc~compute_d2tgc_bspline_1d_vector compute_d2Tgc_bspline_1d_vector proc~compute_d2tgc_bspline_1d_vector->proc~basis_bspline_2der proc~compute_d2tgc_bspline_2d_scalar compute_d2Tgc_bspline_2d_scalar proc~compute_d2tgc_bspline_2d_scalar->proc~basis_bspline_2der proc~compute_d2tgc_bspline_2d_vector compute_d2Tgc_bspline_2d_vector proc~compute_d2tgc_bspline_2d_vector->proc~basis_bspline_2der proc~compute_d2tgc_bspline_3d_scalar compute_d2Tgc_bspline_3d_scalar proc~compute_d2tgc_bspline_3d_scalar->proc~basis_bspline_2der proc~compute_d2tgc_bspline_3d_vector compute_d2Tgc_bspline_3d_vector proc~compute_d2tgc_bspline_3d_vector->proc~basis_bspline_2der proc~compute_d2tgc_nurbs_1d_scalar compute_d2Tgc_nurbs_1d_scalar proc~compute_d2tgc_nurbs_1d_scalar->proc~basis_bspline_2der proc~compute_d2tgc_nurbs_1d_vector compute_d2Tgc_nurbs_1d_vector proc~compute_d2tgc_nurbs_1d_vector->proc~basis_bspline_2der proc~compute_d2tgc_nurbs_2d_scalar compute_d2Tgc_nurbs_2d_scalar proc~compute_d2tgc_nurbs_2d_scalar->proc~basis_bspline_2der proc~compute_d2tgc_nurbs_2d_vector compute_d2Tgc_nurbs_2d_vector proc~compute_d2tgc_nurbs_2d_vector->proc~basis_bspline_2der proc~compute_d2tgc_nurbs_3d_scalar compute_d2Tgc_nurbs_3d_scalar proc~compute_d2tgc_nurbs_3d_scalar->proc~basis_bspline_2der proc~compute_d2tgc_nurbs_3d_vector compute_d2Tgc_nurbs_3d_vector proc~compute_d2tgc_nurbs_3d_vector->proc~basis_bspline_2der Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_2der.html"},{"title":"basis_bspline_der – ForCAD","text":"public pure subroutine basis_bspline_der(Xt, knot, nc, degree, dB, B) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: Xt real(kind=rk), intent(in), contiguous :: knot (:) integer, intent(in) :: nc integer, intent(in) :: degree real(kind=rk), intent(out), allocatable :: dB (:) real(kind=rk), intent(out), optional, allocatable :: B (:) Called by proc~~basis_bspline_der~~CalledByGraph proc~basis_bspline_der basis_bspline_der proc~compute_dtgc_bspline_1d_scalar compute_dTgc_bspline_1d_scalar proc~compute_dtgc_bspline_1d_scalar->proc~basis_bspline_der proc~compute_dtgc_bspline_1d_vector compute_dTgc_bspline_1d_vector proc~compute_dtgc_bspline_1d_vector->proc~basis_bspline_der proc~compute_dtgc_bspline_2d_scalar compute_dTgc_bspline_2d_scalar proc~compute_dtgc_bspline_2d_scalar->proc~basis_bspline_der proc~compute_dtgc_bspline_2d_vector compute_dTgc_bspline_2d_vector proc~compute_dtgc_bspline_2d_vector->proc~basis_bspline_der proc~compute_dtgc_bspline_3d_scalar compute_dTgc_bspline_3d_scalar proc~compute_dtgc_bspline_3d_scalar->proc~basis_bspline_der proc~compute_dtgc_bspline_3d_vector compute_dTgc_bspline_3d_vector proc~compute_dtgc_bspline_3d_vector->proc~basis_bspline_der proc~compute_dtgc_nurbs_1d_scalar compute_dTgc_nurbs_1d_scalar proc~compute_dtgc_nurbs_1d_scalar->proc~basis_bspline_der proc~compute_dtgc_nurbs_1d_vector compute_dTgc_nurbs_1d_vector proc~compute_dtgc_nurbs_1d_vector->proc~basis_bspline_der proc~compute_dtgc_nurbs_2d_scalar compute_dTgc_nurbs_2d_scalar proc~compute_dtgc_nurbs_2d_scalar->proc~basis_bspline_der proc~compute_dtgc_nurbs_2d_vector compute_dTgc_nurbs_2d_vector proc~compute_dtgc_nurbs_2d_vector->proc~basis_bspline_der proc~compute_dtgc_nurbs_3d_scalar compute_dTgc_nurbs_3d_scalar proc~compute_dtgc_nurbs_3d_scalar->proc~basis_bspline_der proc~compute_dtgc_nurbs_3d_vector compute_dTgc_nurbs_3d_vector proc~compute_dtgc_nurbs_3d_vector->proc~basis_bspline_der Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_der.html"},{"title":"elevate_degree_A_5_9 – ForCAD","text":"public pure subroutine elevate_degree_A_5_9(t, knot, degree, Xcw, nc_new, knot_new, Xcw_new) Arguments Type Intent Optional Attributes Name integer, intent(in) :: t real(kind=rk), intent(in), contiguous :: knot (:) integer, intent(in) :: degree real(kind=rk), intent(in), contiguous :: Xcw (:,:) integer, intent(out) :: nc_new real(kind=rk), intent(out), allocatable :: knot_new (:) real(kind=rk), intent(out), allocatable :: Xcw_new (:,:) Calls proc~~elevate_degree_a_5_9~~CallsGraph proc~elevate_degree_a_5_9 elevate_degree_A_5_9 interface~compute_multiplicity compute_multiplicity proc~elevate_degree_a_5_9->interface~compute_multiplicity proc~bincoeff bincoeff proc~elevate_degree_a_5_9->proc~bincoeff proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~factln factln proc~bincoeff->proc~factln Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~elevate_degree_a_5_9~~CalledByGraph proc~elevate_degree_a_5_9 elevate_degree_A_5_9 proc~elevate_degree nurbs_volume%elevate_degree proc~elevate_degree->proc~elevate_degree_a_5_9 proc~elevate_degree~2 nurbs_surface%elevate_degree proc~elevate_degree~2->proc~elevate_degree_a_5_9 proc~elevate_degree~3 nurbs_curve%elevate_degree proc~elevate_degree~3->proc~elevate_degree_a_5_9 program~example1_curve example1_curve program~example1_curve->proc~elevate_degree~3 program~example3_surface example3_surface program~example3_surface->proc~elevate_degree~2 program~example3_volume example3_volume program~example3_volume->proc~elevate_degree Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_a_5_9.html"},{"title":"insert_knot_A_5_1 – ForCAD","text":"public pure subroutine insert_knot_A_5_1(p, UP, Pw, u, k, s, r, nq, UQ, Qw) Arguments Type Intent Optional Attributes Name integer, intent(in) :: p real(kind=rk), intent(in), contiguous :: UP (0:) real(kind=rk), intent(in), contiguous :: Pw (0:,:) real(kind=rk), intent(in) :: u integer, intent(in) :: k integer, intent(in) :: s integer, intent(in) :: r integer, intent(out) :: nq real(kind=rk), intent(out), allocatable :: UQ (:) real(kind=rk), intent(out), allocatable :: Qw (:,:) Called by proc~~insert_knot_a_5_1~~CalledByGraph proc~insert_knot_a_5_1 insert_knot_A_5_1 proc~insert_knots nurbs_volume%insert_knots proc~insert_knots->proc~insert_knot_a_5_1 proc~insert_knots~2 nurbs_surface%insert_knots proc~insert_knots~2->proc~insert_knot_a_5_1 proc~insert_knots~3 nurbs_curve%insert_knots proc~insert_knots~3->proc~insert_knot_a_5_1 program~example1_curve example1_curve program~example1_curve->proc~insert_knots~3 program~example3_surface example3_surface program~example3_surface->proc~insert_knots~2 program~example3_volume example3_volume program~example3_volume->proc~insert_knots Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/insert_knot_a_5_1.html"},{"title":"remove_knots_A_5_8 – ForCAD","text":"public pure subroutine remove_knots_A_5_8(p, knot, Pw, u, r, s, num, t, knot_new, Pw_new) Arguments Type Intent Optional Attributes Name integer, intent(in) :: p real(kind=rk), intent(in), contiguous :: knot (:) real(kind=rk), intent(in), contiguous :: Pw (:,:) real(kind=rk), intent(in) :: u integer, intent(in) :: r integer, intent(in) :: s integer, intent(in) :: num integer, intent(out) :: t real(kind=rk), intent(out), allocatable :: knot_new (:) real(kind=rk), intent(out), allocatable :: Pw_new (:,:) Called by proc~~remove_knots_a_5_8~~CalledByGraph proc~remove_knots_a_5_8 remove_knots_A_5_8 proc~remove_knots nurbs_volume%remove_knots proc~remove_knots->proc~remove_knots_a_5_8 proc~remove_knots~2 nurbs_surface%remove_knots proc~remove_knots~2->proc~remove_knots_a_5_8 proc~remove_knots~3 nurbs_curve%remove_knots proc~remove_knots~3->proc~remove_knots_a_5_8 program~example1_curve example1_curve program~example1_curve->proc~remove_knots~3 program~example3_surface example3_surface program~example3_surface->proc~remove_knots~2 program~example3_volume example3_volume program~example3_volume->proc~remove_knots Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/remove_knots_a_5_8.html"},{"title":"cmp_elemConn_Cn_L – ForCAD","text":"private pure subroutine cmp_elemConn_Cn_L(nnode, p, Xth, vecKnot_mul, elemConn) Arguments Type Intent Optional Attributes Name integer, intent(in) :: nnode integer, intent(in) :: p real(kind=rk), intent(in), contiguous :: Xth (:) integer, intent(in), contiguous :: vecKnot_mul (:) integer, intent(out), allocatable :: elemConn (:,:) Called by proc~~cmp_elemconn_cn_l~~CalledByGraph proc~cmp_elemconn_cn_l cmp_elemConn_Cn_L interface~elemconn_cn elemConn_Cn interface~elemconn_cn->proc~cmp_elemconn_cn_l proc~cmp_elem nurbs_volume%cmp_elem proc~cmp_elem->interface~elemconn_cn proc~cmp_elem~2 nurbs_surface%cmp_elem proc~cmp_elem~2->interface~elemconn_cn proc~cmp_elem~3 nurbs_curve%cmp_elem proc~cmp_elem~3->interface~elemconn_cn program~example3_volume example3_volume program~example3_volume->proc~cmp_elem Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_cn_l.html"},{"title":"cmp_elemConn_Cn_S – ForCAD","text":"private pure subroutine cmp_elemConn_Cn_S(nnode1, nnode2, p1, p2, Xth1, Xth2, vecKnot_mul1, vecKnot_mul2, elemConn) Arguments Type Intent Optional Attributes Name integer, intent(in) :: nnode1 integer, intent(in) :: nnode2 integer, intent(in) :: p1 integer, intent(in) :: p2 real(kind=rk), intent(in), contiguous :: Xth1 (:) real(kind=rk), intent(in), contiguous :: Xth2 (:) integer, intent(in), contiguous :: vecKnot_mul1 (:) integer, intent(in), contiguous :: vecKnot_mul2 (:) integer, intent(out), allocatable :: elemConn (:,:) Called by proc~~cmp_elemconn_cn_s~~CalledByGraph proc~cmp_elemconn_cn_s cmp_elemConn_Cn_S interface~elemconn_cn elemConn_Cn interface~elemconn_cn->proc~cmp_elemconn_cn_s proc~cmp_elem nurbs_volume%cmp_elem proc~cmp_elem->interface~elemconn_cn proc~cmp_elem~2 nurbs_surface%cmp_elem proc~cmp_elem~2->interface~elemconn_cn proc~cmp_elem~3 nurbs_curve%cmp_elem proc~cmp_elem~3->interface~elemconn_cn program~example3_volume example3_volume program~example3_volume->proc~cmp_elem Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_cn_s.html"},{"title":"cmp_elemConn_Cn_V – ForCAD","text":"private pure subroutine cmp_elemConn_Cn_V(nnode1, nnode2, nnode3, p1, p2, p3, Xth1, Xth2, Xth3, vecKnot_mul1, vecKnot_mul2, vecKnot_mul3, 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 real(kind=rk), intent(in), contiguous :: Xth1 (:) real(kind=rk), intent(in), contiguous :: Xth2 (:) real(kind=rk), intent(in), contiguous :: Xth3 (:) integer, intent(in), contiguous :: vecKnot_mul1 (:) integer, intent(in), contiguous :: vecKnot_mul2 (:) integer, intent(in), contiguous :: vecKnot_mul3 (:) integer, intent(out), allocatable :: elemConn (:,:) Called by proc~~cmp_elemconn_cn_v~~CalledByGraph proc~cmp_elemconn_cn_v cmp_elemConn_Cn_V interface~elemconn_cn elemConn_Cn interface~elemconn_cn->proc~cmp_elemconn_cn_v proc~cmp_elem nurbs_volume%cmp_elem proc~cmp_elem->interface~elemconn_cn proc~cmp_elem~2 nurbs_surface%cmp_elem proc~cmp_elem~2->interface~elemconn_cn proc~cmp_elem~3 nurbs_curve%cmp_elem proc~cmp_elem~3->interface~elemconn_cn program~example3_volume example3_volume program~example3_volume->proc~cmp_elem Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_cn_v.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), contiguous :: X_dir1 (:) real(kind=rk), intent(in), contiguous :: X_dir2 (:) real(kind=rk), intent(out), allocatable :: Xt (:,:) Called by proc~~ndgrid2~~CalledByGraph proc~ndgrid2 ndgrid2 interface~ndgrid ndgrid interface~ndgrid->proc~ndgrid2 proc~basis_vector nurbs_volume%basis_vector proc~basis_vector->interface~ndgrid proc~basis_vector~2 nurbs_surface%basis_vector proc~basis_vector~2->interface~ndgrid proc~create nurbs_volume%create proc~create->interface~ndgrid proc~create~2 nurbs_surface%create proc~create~2->interface~ndgrid proc~derivative2_vector nurbs_volume%derivative2_vector proc~derivative2_vector->interface~ndgrid proc~derivative2_vector~2 nurbs_surface%derivative2_vector proc~derivative2_vector~2->interface~ndgrid proc~derivative_vector nurbs_volume%derivative_vector proc~derivative_vector->interface~ndgrid proc~derivative_vector~2 nurbs_surface%derivative_vector proc~derivative_vector~2->interface~ndgrid none~derivative2 nurbs_volume%derivative2 none~derivative2->proc~derivative2_vector none~derivative2~2 nurbs_surface%derivative2 none~derivative2~2->proc~derivative2_vector~2 proc~nearest_point2 nurbs_volume%nearest_point2 proc~nearest_point2->proc~create proc~nearest_point2->none~derivative2 proc~nearest_point2~2 nurbs_surface%nearest_point2 proc~nearest_point2~2->proc~create~2 proc~nearest_point2~2->none~derivative2~2 program~example3_surface example3_surface program~example3_surface->proc~create~2 program~example3_volume example3_volume program~example3_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 program~example_ppm1 example_ppm1 program~example_ppm1->proc~create~2 program~example_ppm2 example_ppm2 program~example_ppm2->proc~create~2 program~example_ppm3 example_ppm3 program~example_ppm3->proc~create~2 program~nearest_point_2d nearest_point_2d program~nearest_point_2d->proc~create~2 program~nearest_point_2d->proc~nearest_point2~2 program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->proc~create~2 program~nearest_point_3d nearest_point_3d program~nearest_point_3d->proc~create program~nearest_point_3d->proc~nearest_point2 program~shape_c_2d shape_C_2d program~shape_c_2d->proc~create~2 program~shape_c_3d shape_C_3d program~shape_c_3d->proc~create program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~create~2 program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~create program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~create program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~create~2 program~shape_ring_3d shape_ring_3d program~shape_ring_3d->proc~create program~shape_tetragon shape_tetragon program~shape_tetragon->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), contiguous :: X_dir1 (:) real(kind=rk), intent(in), contiguous :: X_dir2 (:) real(kind=rk), intent(in), contiguous :: X_dir3 (:) real(kind=rk), intent(out), allocatable :: Xt (:,:) Called by proc~~ndgrid3~~CalledByGraph proc~ndgrid3 ndgrid3 interface~ndgrid ndgrid interface~ndgrid->proc~ndgrid3 proc~basis_vector nurbs_volume%basis_vector proc~basis_vector->interface~ndgrid proc~basis_vector~2 nurbs_surface%basis_vector proc~basis_vector~2->interface~ndgrid proc~create nurbs_volume%create proc~create->interface~ndgrid proc~create~2 nurbs_surface%create proc~create~2->interface~ndgrid proc~derivative2_vector nurbs_volume%derivative2_vector proc~derivative2_vector->interface~ndgrid proc~derivative2_vector~2 nurbs_surface%derivative2_vector proc~derivative2_vector~2->interface~ndgrid proc~derivative_vector nurbs_volume%derivative_vector proc~derivative_vector->interface~ndgrid proc~derivative_vector~2 nurbs_surface%derivative_vector proc~derivative_vector~2->interface~ndgrid none~derivative2 nurbs_volume%derivative2 none~derivative2->proc~derivative2_vector none~derivative2~2 nurbs_surface%derivative2 none~derivative2~2->proc~derivative2_vector~2 proc~nearest_point2 nurbs_volume%nearest_point2 proc~nearest_point2->proc~create proc~nearest_point2->none~derivative2 proc~nearest_point2~2 nurbs_surface%nearest_point2 proc~nearest_point2~2->proc~create~2 proc~nearest_point2~2->none~derivative2~2 program~example3_surface example3_surface program~example3_surface->proc~create~2 program~example3_volume example3_volume program~example3_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 program~example_ppm1 example_ppm1 program~example_ppm1->proc~create~2 program~example_ppm2 example_ppm2 program~example_ppm2->proc~create~2 program~example_ppm3 example_ppm3 program~example_ppm3->proc~create~2 program~nearest_point_2d nearest_point_2d program~nearest_point_2d->proc~create~2 program~nearest_point_2d->proc~nearest_point2~2 program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->proc~create~2 program~nearest_point_3d nearest_point_3d program~nearest_point_3d->proc~create program~nearest_point_3d->proc~nearest_point2 program~shape_c_2d shape_C_2d program~shape_c_2d->proc~create~2 program~shape_c_3d shape_C_3d program~shape_c_3d->proc~create program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~create~2 program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~create program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~create program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~create~2 program~shape_ring_3d shape_ring_3d program~shape_ring_3d->proc~create program~shape_tetragon shape_tetragon program~shape_tetragon->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":"compute_multiplicity – ForCAD","text":"public interface compute_multiplicity Calls interface~~compute_multiplicity~~CallsGraph interface~compute_multiplicity compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~compute_multiplicity~~CalledByGraph interface~compute_multiplicity compute_multiplicity proc~cmp_nc nurbs_volume%cmp_nc proc~cmp_nc->interface~compute_multiplicity proc~cmp_nc~2 nurbs_surface%cmp_nc proc~cmp_nc~2->interface~compute_multiplicity proc~cmp_nc~3 nurbs_curve%cmp_nc proc~cmp_nc~3->interface~compute_multiplicity proc~elevate_degree_a_5_9 elevate_degree_A_5_9 proc~elevate_degree_a_5_9->interface~compute_multiplicity proc~get_continuity nurbs_volume%get_continuity proc~get_continuity->interface~compute_multiplicity proc~get_continuity~2 nurbs_surface%get_continuity proc~get_continuity~2->interface~compute_multiplicity proc~get_continuity~3 nurbs_curve%get_continuity proc~get_continuity~3->interface~compute_multiplicity proc~get_multiplicity nurbs_volume%get_multiplicity proc~get_multiplicity->interface~compute_multiplicity proc~get_multiplicity~2 nurbs_surface%get_multiplicity proc~get_multiplicity~2->interface~compute_multiplicity proc~get_multiplicity~3 nurbs_curve%get_multiplicity proc~get_multiplicity~3->interface~compute_multiplicity proc~get_nc get_nc proc~get_nc->interface~compute_multiplicity proc~get_nc~2 nurbs_surface%get_nc proc~get_nc~2->interface~compute_multiplicity proc~insert_knots nurbs_volume%insert_knots proc~insert_knots->interface~compute_multiplicity none~set nurbs_volume%set proc~insert_knots->none~set proc~insert_knots~2 nurbs_surface%insert_knots proc~insert_knots~2->interface~compute_multiplicity none~set~2 nurbs_surface%set proc~insert_knots~2->none~set~2 proc~insert_knots~3 nurbs_curve%insert_knots proc~insert_knots~3->interface~compute_multiplicity none~set~3 nurbs_curve%set proc~insert_knots~3->none~set~3 proc~remove_knots nurbs_volume%remove_knots proc~remove_knots->interface~compute_multiplicity proc~remove_knots->none~set proc~remove_knots~2 nurbs_surface%remove_knots proc~remove_knots~2->interface~compute_multiplicity proc~remove_knots~2->none~set~2 proc~remove_knots~3 nurbs_curve%remove_knots proc~remove_knots~3->interface~compute_multiplicity proc~remove_knots~3->none~set~3 proc~cmp_degree nurbs_volume%cmp_degree proc~cmp_degree->proc~get_multiplicity proc~cmp_degree~2 nurbs_surface%cmp_degree proc~cmp_degree~2->proc~get_multiplicity~2 proc~cmp_degree~3 nurbs_curve%cmp_degree proc~cmp_degree~3->proc~get_multiplicity~3 proc~cmp_elem nurbs_volume%cmp_elem proc~cmp_elem->proc~get_multiplicity proc~cmp_elem~2 nurbs_surface%cmp_elem proc~cmp_elem~2->proc~get_multiplicity~2 proc~cmp_elem~3 nurbs_curve%cmp_elem proc~cmp_elem~3->proc~get_multiplicity~3 proc~elevate_degree nurbs_volume%elevate_degree proc~elevate_degree->proc~elevate_degree_a_5_9 proc~elevate_degree->none~set proc~elevate_degree~2 nurbs_surface%elevate_degree proc~elevate_degree~2->proc~elevate_degree_a_5_9 proc~elevate_degree~2->none~set~2 proc~elevate_degree~3 nurbs_curve%elevate_degree proc~elevate_degree~3->proc~elevate_degree_a_5_9 proc~elevate_degree~3->none~set~3 proc~set1 nurbs_volume%set1 proc~set1->proc~cmp_nc proc~set1->proc~cmp_degree proc~set1~2 nurbs_surface%set1 proc~set1~2->proc~cmp_nc~2 proc~set1~2->proc~cmp_degree~2 proc~set2 nurbs_volume%set2 proc~set2->proc~cmp_nc proc~set2~2 nurbs_surface%set2 proc~set2~2->proc~cmp_nc~2 program~example1_curve example1_curve program~example1_curve->proc~insert_knots~3 program~example1_curve->proc~remove_knots~3 program~example1_curve->proc~elevate_degree~3 program~example1_curve->none~set~3 program~example3_surface example3_surface program~example3_surface->proc~insert_knots~2 program~example3_surface->proc~remove_knots~2 program~example3_surface->proc~elevate_degree~2 program~example3_surface->none~set~2 program~example3_volume example3_volume program~example3_volume->proc~insert_knots program~example3_volume->proc~remove_knots program~example3_volume->proc~cmp_elem program~example3_volume->proc~elevate_degree program~example3_volume->none~set none~set->proc~set1 none~set->proc~set2 proc~set3 nurbs_volume%set3 none~set->proc~set3 none~set~2->proc~set1~2 none~set~2->proc~set2~2 proc~set3~2 nurbs_surface%set3 none~set~2->proc~set3~2 proc~set1~3 nurbs_curve%set1 proc~set1~3->proc~cmp_degree~3 proc~set3->proc~cmp_degree proc~set3~2->proc~cmp_degree~2 proc~set3~3 nurbs_curve%set3 proc~set3~3->proc~cmp_degree~3 none~set~3->proc~set1~3 none~set~3->proc~set3~3 proc~modify_wc nurbs_volume%modify_Wc proc~modify_wc->none~set proc~modify_wc~2 nurbs_surface%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_xc nurbs_volume%modify_Xc proc~modify_xc->none~set proc~modify_xc~2 nurbs_surface%modify_Xc proc~modify_xc~2->none~set~2 proc~set_c nurbs_volume%set_C proc~set_c->none~set proc~set_c~2 nurbs_surface%set_C proc~set_c~2->none~set~2 proc~set_half_ring nurbs_volume%set_half_ring proc~set_half_ring->none~set proc~set_half_ring~2 nurbs_surface%set_half_ring proc~set_half_ring~2->none~set~2 proc~set_hexahedron nurbs_volume%set_hexahedron proc~set_hexahedron->none~set proc~set_ring nurbs_volume%set_ring proc~set_ring->none~set proc~set_ring~2 nurbs_surface%set_ring proc~set_ring~2->none~set~2 proc~set_tetragon nurbs_surface%set_tetragon proc~set_tetragon->none~set~2 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->none~set~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->none~set program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->none~set program~nearest_point_2d nearest_point_2d program~nearest_point_2d->none~set~2 program~nearest_point_3d nearest_point_3d program~nearest_point_3d->none~set proc~modify_wc~3 nurbs_curve%modify_Wc proc~modify_wc~3->none~set~3 proc~modify_xc~3 nurbs_curve%modify_Xc proc~modify_xc~3->none~set~3 proc~set_circle nurbs_curve%set_circle proc~set_circle->none~set~3 proc~set_c~3 nurbs_curve%set_C proc~set_c~3->none~set~3 proc~set_half_circle nurbs_curve%set_half_circle proc~set_half_circle->none~set~3 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->none~set~3 program~example_ppm1 example_ppm1 program~example_ppm1->proc~set_ring~2 program~example_ppm1->proc~set_tetragon program~example_ppm2 example_ppm2 program~example_ppm2->proc~set_half_ring~2 program~example_ppm2->proc~set_tetragon program~example_ppm3 example_ppm3 program~example_ppm3->proc~modify_xc~2 program~example_ppm3->proc~set_tetragon program~nearest_point_1d nearest_point_1d program~nearest_point_1d->none~set~3 program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->proc~set_tetragon program~shape_c_2d shape_C_2d program~shape_c_2d->proc~set_c~2 program~shape_c_3d shape_C_3d program~shape_c_3d->proc~set_c program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~set_half_ring~2 program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~set_half_ring program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~set_hexahedron program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~set_ring~2 program~shape_ring_3d shape_ring_3d program~shape_ring_3d->proc~set_ring program~shape_tetragon shape_tetragon program~shape_tetragon->proc~set_tetragon program~shape_c_1d shape_C_1d program~shape_c_1d->proc~set_c~3 program~shape_circle shape_circle program~shape_circle->proc~set_circle program~shape_half_circle shape_half_circle program~shape_half_circle->proc~set_half_circle Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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 compute_multiplicity1 (knot) result(multiplicity) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: knot (:) Return Value integer, allocatable, (:) private pure function compute_multiplicity2 (knot, Xth) result(multiplicity) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: knot (:) real(kind=rk), intent(in) :: Xth Return Value integer","tags":"","loc":"interface/compute_multiplicity.html"},{"title":"elemConn_C0 – ForCAD","text":"public interface elemConn_C0 Calls interface~~elemconn_c0~~CallsGraph interface~elemconn_c0 elemConn_C0 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v 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 elemConn_C0 proc~cmp_elem_xc_vis nurbs_volume%cmp_elem_Xc_vis proc~cmp_elem_xc_vis->interface~elemconn_c0 proc~cmp_elem_xc_vis~2 nurbs_surface%cmp_elem_Xc_vis proc~cmp_elem_xc_vis~2->interface~elemconn_c0 proc~cmp_elem_xc_vis~3 nurbs_curve%cmp_elem_Xc_vis proc~cmp_elem_xc_vis~3->interface~elemconn_c0 proc~cmp_elem_xg_vis nurbs_volume%cmp_elem_Xg_vis proc~cmp_elem_xg_vis->interface~elemconn_c0 proc~cmp_elem_xg_vis~2 nurbs_surface%cmp_elem_Xg_vis proc~cmp_elem_xg_vis~2->interface~elemconn_c0 proc~cmp_elem_xg_vis~3 nurbs_curve%cmp_elem_Xg_vis proc~cmp_elem_xg_vis~3->interface~elemconn_c0 proc~export_xc nurbs_volume%export_Xc proc~export_xc->proc~cmp_elem_xc_vis proc~export_xc~2 nurbs_surface%export_Xc proc~export_xc~2->proc~cmp_elem_xc_vis~2 proc~export_xc~3 nurbs_curve%export_Xc proc~export_xc~3->proc~cmp_elem_xc_vis~3 proc~export_xg nurbs_volume%export_Xg proc~export_xg->proc~cmp_elem_xg_vis proc~export_xg~2 nurbs_surface%export_Xg proc~export_xg~2->proc~cmp_elem_xg_vis~2 proc~export_xg~3 nurbs_curve%export_Xg proc~export_xg~3->proc~cmp_elem_xg_vis~3 program~example1_curve example1_curve program~example1_curve->proc~export_xc~3 program~example1_curve->proc~export_xg~3 program~example3_surface example3_surface program~example3_surface->proc~export_xc~2 program~example3_surface->proc~export_xg~2 program~example3_volume example3_volume program~example3_volume->proc~export_xc program~example3_volume->proc~export_xg program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~export_xc~3 program~example_nurbs_curve->proc~export_xg~3 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~export_xc~2 program~example_nurbs_surface->proc~export_xg~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~export_xc program~example_nurbs_volume->proc~export_xg program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->proc~export_xc program~example_put_to_nurbs->proc~export_xg program~shape_c_1d shape_C_1d program~shape_c_1d->proc~export_xc~3 program~shape_c_1d->proc~export_xg~3 program~shape_c_2d shape_C_2d program~shape_c_2d->proc~export_xc~2 program~shape_c_2d->proc~export_xg~2 program~shape_c_3d shape_C_3d program~shape_c_3d->proc~export_xc program~shape_c_3d->proc~export_xg program~shape_circle shape_circle program~shape_circle->proc~export_xc~3 program~shape_circle->proc~export_xg~3 program~shape_half_circle shape_half_circle program~shape_half_circle->proc~export_xc~3 program~shape_half_circle->proc~export_xg~3 program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~export_xc~2 program~shape_half_ring_2d->proc~export_xg~2 program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~export_xc program~shape_half_ring_3d->proc~export_xg program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~export_xc program~shape_hexahedron->proc~export_xg program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~export_xc~2 program~shape_ring_2d->proc~export_xg~2 program~shape_ring_3d shape_ring_3d program~shape_ring_3d->proc~export_xc program~shape_ring_3d->proc~export_xg program~shape_tetragon shape_tetragon program~shape_tetragon->proc~export_xc~2 program~shape_tetragon->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, 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, 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, allocatable, (:,:)","tags":"","loc":"interface/elemconn_c0.html"},{"title":"elemConn_Cn – ForCAD","text":"public interface elemConn_Cn Calls interface~~elemconn_cn~~CallsGraph interface~elemconn_cn elemConn_Cn proc~cmp_elemconn_cn_l cmp_elemConn_Cn_L interface~elemconn_cn->proc~cmp_elemconn_cn_l proc~cmp_elemconn_cn_s cmp_elemConn_Cn_S interface~elemconn_cn->proc~cmp_elemconn_cn_s proc~cmp_elemconn_cn_v cmp_elemConn_Cn_V interface~elemconn_cn->proc~cmp_elemconn_cn_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_cn~~CalledByGraph interface~elemconn_cn elemConn_Cn proc~cmp_elem nurbs_volume%cmp_elem proc~cmp_elem->interface~elemconn_cn proc~cmp_elem~2 nurbs_surface%cmp_elem proc~cmp_elem~2->interface~elemconn_cn proc~cmp_elem~3 nurbs_curve%cmp_elem proc~cmp_elem~3->interface~elemconn_cn program~example3_volume example3_volume program~example3_volume->proc~cmp_elem Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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 cmp_elemConn_Cn_L (nnode, p, Xth, vecKnot_mul, elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name integer, intent(in) :: nnode integer, intent(in) :: p real(kind=rk), intent(in), contiguous :: Xth (:) integer, intent(in), contiguous :: vecKnot_mul (:) integer, intent(out), allocatable :: elemConn (:,:) private pure subroutine cmp_elemConn_Cn_S (nnode1, nnode2, p1, p2, Xth1, Xth2, vecKnot_mul1, vecKnot_mul2, 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 real(kind=rk), intent(in), contiguous :: Xth1 (:) real(kind=rk), intent(in), contiguous :: Xth2 (:) integer, intent(in), contiguous :: vecKnot_mul1 (:) integer, intent(in), contiguous :: vecKnot_mul2 (:) integer, intent(out), allocatable :: elemConn (:,:) private pure subroutine cmp_elemConn_Cn_V (nnode1, nnode2, nnode3, p1, p2, p3, Xth1, Xth2, Xth3, vecKnot_mul1, vecKnot_mul2, vecKnot_mul3, 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 real(kind=rk), intent(in), contiguous :: Xth1 (:) real(kind=rk), intent(in), contiguous :: Xth2 (:) real(kind=rk), intent(in), contiguous :: Xth3 (:) integer, intent(in), contiguous :: vecKnot_mul1 (:) integer, intent(in), contiguous :: vecKnot_mul2 (:) integer, intent(in), contiguous :: vecKnot_mul3 (:) integer, intent(out), allocatable :: elemConn (:,:)","tags":"","loc":"interface/elemconn_cn.html"},{"title":"ndgrid – ForCAD","text":"public interface ndgrid Calls interface~~ndgrid~~CallsGraph interface~ndgrid ndgrid proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 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 ndgrid proc~basis_vector nurbs_volume%basis_vector proc~basis_vector->interface~ndgrid proc~basis_vector~2 nurbs_surface%basis_vector proc~basis_vector~2->interface~ndgrid proc~create nurbs_volume%create proc~create->interface~ndgrid proc~create~2 nurbs_surface%create proc~create~2->interface~ndgrid proc~derivative2_vector nurbs_volume%derivative2_vector proc~derivative2_vector->interface~ndgrid proc~derivative2_vector~2 nurbs_surface%derivative2_vector proc~derivative2_vector~2->interface~ndgrid proc~derivative_vector nurbs_volume%derivative_vector proc~derivative_vector->interface~ndgrid proc~derivative_vector~2 nurbs_surface%derivative_vector proc~derivative_vector~2->interface~ndgrid none~derivative2 nurbs_volume%derivative2 none~derivative2->proc~derivative2_vector none~derivative2~2 nurbs_surface%derivative2 none~derivative2~2->proc~derivative2_vector~2 proc~nearest_point2 nurbs_volume%nearest_point2 proc~nearest_point2->proc~create proc~nearest_point2->none~derivative2 proc~nearest_point2~2 nurbs_surface%nearest_point2 proc~nearest_point2~2->proc~create~2 proc~nearest_point2~2->none~derivative2~2 program~example3_surface example3_surface program~example3_surface->proc~create~2 program~example3_volume example3_volume program~example3_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 program~example_ppm1 example_ppm1 program~example_ppm1->proc~create~2 program~example_ppm2 example_ppm2 program~example_ppm2->proc~create~2 program~example_ppm3 example_ppm3 program~example_ppm3->proc~create~2 program~nearest_point_2d nearest_point_2d program~nearest_point_2d->proc~create~2 program~nearest_point_2d->proc~nearest_point2~2 program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->proc~create~2 program~nearest_point_3d nearest_point_3d program~nearest_point_3d->proc~create program~nearest_point_3d->proc~nearest_point2 program~shape_c_2d shape_C_2d program~shape_c_2d->proc~create~2 program~shape_c_3d shape_C_3d program~shape_c_3d->proc~create program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->proc~create~2 program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~create program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~create program~shape_ring_2d shape_ring_2d program~shape_ring_2d->proc~create~2 program~shape_ring_3d shape_ring_3d program~shape_ring_3d->proc~create program~shape_tetragon shape_tetragon program~shape_tetragon->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), contiguous :: X_dir1 (:) real(kind=rk), intent(in), contiguous :: X_dir2 (:) real(kind=rk), intent(out), 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), contiguous :: X_dir1 (:) real(kind=rk), intent(in), contiguous :: X_dir2 (:) real(kind=rk), intent(in), contiguous :: X_dir3 (:) real(kind=rk), intent(out), allocatable :: Xt (:,:)","tags":"","loc":"interface/ndgrid.html"},{"title":"unique – ForCAD","text":"public interface unique Calls interface~~unique~~CallsGraph interface~unique unique proc~unique_integer unique_integer interface~unique->proc~unique_integer proc~unique_real unique_real interface~unique->proc~unique_real Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~unique~~CalledByGraph interface~unique unique proc~cmp_elem nurbs_volume%cmp_elem proc~cmp_elem->interface~unique proc~cmp_elem~2 nurbs_surface%cmp_elem proc~cmp_elem~2->interface~unique proc~cmp_elem~3 nurbs_curve%cmp_elem proc~cmp_elem~3->interface~unique program~example3_volume example3_volume program~example3_volume->proc~cmp_elem Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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 unique_integer (vec) result(output) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name integer, intent(in), dimension(:), contiguous :: vec Return Value integer, dimension(:), allocatable private pure function unique_real (vec) result(output) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), dimension(:), contiguous :: vec Return Value real(kind=rk), dimension(:), allocatable","tags":"","loc":"interface/unique.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), allocatable, (:,:) Called by proc~~generate_xc~4~~CalledByGraph proc~generate_xc~4 generate_Xc program~example3_volume example3_volume program~example3_volume->proc~generate_xc~4 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/generate_xc~4.html"},{"title":"generate_Xc – ForCAD","text":"function generate_Xc(L) result(control_points) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: L Return Value real(kind=rk), allocatable, (:,:) Called by proc~~generate_xc~5~~CalledByGraph proc~generate_xc~5 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":"cmp_Xg – ForCAD","text":"private pure function cmp_Xg(this, Xt) result(Xg) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this real(kind=rk), intent(in) :: Xt Return Value real(kind=rk), allocatable, (:) Calls proc~~cmp_xg~3~~CallsGraph proc~cmp_xg~3 nurbs_curve%cmp_Xg interface~compute_xg~3 compute_Xg proc~cmp_xg~3->interface~compute_xg~3 proc~is_rational~3 nurbs_curve%is_rational proc~cmp_xg~3->proc~is_rational~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. Called by proc~~cmp_xg~3~~CalledByGraph proc~cmp_xg~3 nurbs_curve%cmp_Xg proc~nearest_point2~3 nurbs_curve%nearest_point2 proc~nearest_point2~3->proc~cmp_xg~3 program~nearest_point_1d nearest_point_1d program~nearest_point_1d->proc~nearest_point2~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_xg~3.html"},{"title":"cmp_elem – ForCAD","text":"private pure function cmp_elem(this) result(elemConn) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value integer, allocatable, (:,:) Calls proc~~cmp_elem~3~~CallsGraph proc~cmp_elem~3 nurbs_curve%cmp_elem interface~elemconn_cn elemConn_Cn proc~cmp_elem~3->interface~elemconn_cn interface~unique unique proc~cmp_elem~3->interface~unique proc~get_multiplicity~3 nurbs_curve%get_multiplicity proc~cmp_elem~3->proc~get_multiplicity~3 proc~cmp_elemconn_cn_l cmp_elemConn_Cn_L interface~elemconn_cn->proc~cmp_elemconn_cn_l proc~cmp_elemconn_cn_s cmp_elemConn_Cn_S interface~elemconn_cn->proc~cmp_elemconn_cn_s proc~cmp_elemconn_cn_v cmp_elemConn_Cn_V interface~elemconn_cn->proc~cmp_elemconn_cn_v proc~unique_integer unique_integer interface~unique->proc~unique_integer proc~unique_real unique_real interface~unique->proc~unique_real interface~compute_multiplicity compute_multiplicity proc~get_multiplicity~3->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_elem~3.html"},{"title":"cmp_elem_Xc_vis – ForCAD","text":"private pure function cmp_elem_Xc_vis(this, p) result(elemConn) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in), optional :: p Return Value integer, allocatable, (:,:) Calls proc~~cmp_elem_xc_vis~3~~CallsGraph proc~cmp_elem_xc_vis~3 nurbs_curve%cmp_elem_Xc_vis interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xc_vis~3->interface~elemconn_c0 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v 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~~cmp_elem_xc_vis~3~~CalledByGraph proc~cmp_elem_xc_vis~3 nurbs_curve%cmp_elem_Xc_vis proc~export_xc~3 nurbs_curve%export_Xc proc~export_xc~3->proc~cmp_elem_xc_vis~3 program~example1_curve example1_curve program~example1_curve->proc~export_xc~3 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~export_xc~3 program~shape_c_1d shape_C_1d program~shape_c_1d->proc~export_xc~3 program~shape_circle shape_circle program~shape_circle->proc~export_xc~3 program~shape_half_circle shape_half_circle program~shape_half_circle->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/cmp_elem_xc_vis~3.html"},{"title":"cmp_elem_Xg_vis – ForCAD","text":"private pure function cmp_elem_Xg_vis(this, p) result(elemConn) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in), optional :: p Return Value integer, allocatable, (:,:) Calls proc~~cmp_elem_xg_vis~3~~CallsGraph proc~cmp_elem_xg_vis~3 nurbs_curve%cmp_elem_Xg_vis interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xg_vis~3->interface~elemconn_c0 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v 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~~cmp_elem_xg_vis~3~~CalledByGraph proc~cmp_elem_xg_vis~3 nurbs_curve%cmp_elem_Xg_vis proc~export_xg~3 nurbs_curve%export_Xg proc~export_xg~3->proc~cmp_elem_xg_vis~3 program~example1_curve example1_curve program~example1_curve->proc~export_xg~3 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~export_xg~3 program~shape_c_1d shape_C_1d program~shape_c_1d->proc~export_xg~3 program~shape_circle shape_circle program~shape_circle->proc~export_xg~3 program~shape_half_circle shape_half_circle program~shape_half_circle->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_elem_xg_vis~3.html"},{"title":"get_Wc_all – ForCAD","text":"private pure function get_Wc_all(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, (:) Called by proc~~get_wc_all~3~~CalledByGraph proc~get_wc_all~3 nurbs_curve%get_Wc_all none~get_wc~3 nurbs_curve%get_Wc none~get_wc~3->proc~get_wc_all~3 proc~modify_wc~3 nurbs_curve%modify_Wc proc~modify_wc~3->none~get_wc~3 proc~modify_xc~3 nurbs_curve%modify_Xc proc~modify_xc~3->none~get_wc~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_wc_all~3.html"},{"title":"get_Wci – ForCAD","text":"private pure function get_Wci(this, n) result(Wc) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk) Called by proc~~get_wci~3~~CalledByGraph proc~get_wci~3 nurbs_curve%get_Wci none~get_wc~3 nurbs_curve%get_Wc none~get_wc~3->proc~get_wci~3 proc~modify_wc~3 nurbs_curve%modify_Wc proc~modify_wc~3->none~get_wc~3 proc~modify_xc~3 nurbs_curve%modify_Xc proc~modify_xc~3->none~get_wc~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_wci~3.html"},{"title":"get_Xc_all – ForCAD","text":"private pure function get_Xc_all(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, (:,:) Called by proc~~get_xc_all~3~~CalledByGraph proc~get_xc_all~3 nurbs_curve%get_Xc_all none~get_xc~3 nurbs_curve%get_Xc none~get_xc~3->proc~get_xc_all~3 proc~modify_wc~3 nurbs_curve%modify_Wc proc~modify_wc~3->none~get_xc~3 proc~modify_xc~3 nurbs_curve%modify_Xc proc~modify_xc~3->none~get_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_xc_all~3.html"},{"title":"get_Xci – ForCAD","text":"private pure function get_Xci(this, n) result(Xc) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk), allocatable, (:) Called by proc~~get_xci~3~~CalledByGraph proc~get_xci~3 nurbs_curve%get_Xci none~get_xc~3 nurbs_curve%get_Xc none~get_xc~3->proc~get_xci~3 proc~modify_wc~3 nurbs_curve%modify_Wc proc~modify_wc~3->none~get_xc~3 proc~modify_xc~3 nurbs_curve%modify_Xc proc~modify_xc~3->none~get_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_xci~3.html"},{"title":"get_Xcid – ForCAD","text":"private pure function get_Xcid(this, n, dir) result(Xc) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in) :: n integer, intent(in) :: dir Return Value real(kind=rk) Called by proc~~get_xcid~3~~CalledByGraph proc~get_xcid~3 nurbs_curve%get_Xcid none~get_xc~3 nurbs_curve%get_Xc none~get_xc~3->proc~get_xcid~3 proc~modify_wc~3 nurbs_curve%modify_Wc proc~modify_wc~3->none~get_xc~3 proc~modify_xc~3 nurbs_curve%modify_Xc proc~modify_xc~3->none~get_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_xcid~3.html"},{"title":"get_Xg_all – ForCAD","text":"private pure function get_Xg_all(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_all~3.html"},{"title":"get_Xgi – ForCAD","text":"private pure function get_Xgi(this, n) result(Xg) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"proc/get_xgi~3.html"},{"title":"get_Xgid – ForCAD","text":"private pure function get_Xgid(this, n, dir) result(Xg) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in) :: n integer, intent(in) :: dir Return Value real(kind=rk)","tags":"","loc":"proc/get_xgid~3.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~3.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 nurbs_curve%get_continuity interface~compute_multiplicity compute_multiplicity proc~get_continuity~3->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_degree – ForCAD","text":"private pure function get_degree(this) result(degree) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value integer Called by proc~~get_degree~~CalledByGraph proc~get_degree nurbs_curve%get_degree program~example1_curve example1_curve program~example1_curve->proc~get_degree Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_degree.html"},{"title":"get_elem – ForCAD","text":"private pure function get_elem(this) result(elemConn) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value integer, allocatable, (:,:)","tags":"","loc":"proc/get_elem~3.html"},{"title":"get_elem_Xc_vis – ForCAD","text":"private pure function get_elem_Xc_vis(this) result(elemConn) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value integer, allocatable, (:,:)","tags":"","loc":"proc/get_elem_xc_vis~3.html"},{"title":"get_elem_Xg_vis – ForCAD","text":"private pure function get_elem_Xg_vis(this) result(elemConn) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value integer, allocatable, (:,:)","tags":"","loc":"proc/get_elem_xg_vis~3.html"},{"title":"get_knot_all – ForCAD","text":"private pure function get_knot_all(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, (:) Called by proc~~get_knot_all~3~~CalledByGraph proc~get_knot_all~3 nurbs_curve%get_knot_all none~get_knot~3 nurbs_curve%get_knot none~get_knot~3->proc~get_knot_all~3 proc~modify_wc~3 nurbs_curve%modify_Wc proc~modify_wc~3->none~get_knot~3 proc~modify_xc~3 nurbs_curve%modify_Xc proc~modify_xc~3->none~get_knot~3 program~example1_curve example1_curve program~example1_curve->none~get_knot~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_knot_all~3.html"},{"title":"get_knoti – ForCAD","text":"private pure function get_knoti(this, i) result(knot) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in) :: i Return Value real(kind=rk) Called by proc~~get_knoti~3~~CalledByGraph proc~get_knoti~3 nurbs_curve%get_knoti none~get_knot~3 nurbs_curve%get_knot none~get_knot~3->proc~get_knoti~3 proc~modify_wc~3 nurbs_curve%modify_Wc proc~modify_wc~3->none~get_knot~3 proc~modify_xc~3 nurbs_curve%modify_Xc proc~modify_xc~3->none~get_knot~3 program~example1_curve example1_curve program~example1_curve->none~get_knot~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_knoti~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 nurbs_curve%get_multiplicity interface~compute_multiplicity compute_multiplicity proc~get_multiplicity~3->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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 nurbs_curve%get_multiplicity proc~cmp_degree~3 nurbs_curve%cmp_degree proc~cmp_degree~3->proc~get_multiplicity~3 proc~cmp_elem~3 nurbs_curve%cmp_elem proc~cmp_elem~3->proc~get_multiplicity~3 proc~set1~3 nurbs_curve%set1 proc~set1~3->proc~cmp_degree~3 proc~set3~3 nurbs_curve%set3 proc~set3~3->proc~cmp_degree~3 none~set~3 nurbs_curve%set none~set~3->proc~set1~3 none~set~3->proc~set3~3 proc~elevate_degree~3 nurbs_curve%elevate_degree proc~elevate_degree~3->none~set~3 proc~insert_knots~3 nurbs_curve%insert_knots proc~insert_knots~3->none~set~3 proc~modify_wc~3 nurbs_curve%modify_Wc proc~modify_wc~3->none~set~3 proc~modify_xc~3 nurbs_curve%modify_Xc proc~modify_xc~3->none~set~3 proc~remove_knots~3 nurbs_curve%remove_knots proc~remove_knots~3->none~set~3 proc~set_circle nurbs_curve%set_circle proc~set_circle->none~set~3 proc~set_c~3 nurbs_curve%set_C proc~set_c~3->none~set~3 proc~set_half_circle nurbs_curve%set_half_circle proc~set_half_circle->none~set~3 program~example1_curve example1_curve program~example1_curve->none~set~3 program~example1_curve->proc~elevate_degree~3 program~example1_curve->proc~insert_knots~3 program~example1_curve->proc~remove_knots~3 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->none~set~3 program~nearest_point_1d nearest_point_1d program~nearest_point_1d->none~set~3 program~shape_c_1d shape_C_1d program~shape_c_1d->proc~set_c~3 program~shape_circle shape_circle program~shape_circle->proc~set_circle program~shape_half_circle shape_half_circle program~shape_half_circle->proc~set_half_circle Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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","tags":"","loc":"proc/get_nc~3.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~3.html"},{"title":"is_rational – ForCAD","text":"private pure function is_rational(this) result(r) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value logical Called by proc~~is_rational~3~~CalledByGraph proc~is_rational~3 nurbs_curve%is_rational proc~basis_scalar~3 nurbs_curve%basis_scalar proc~basis_scalar~3->proc~is_rational~3 proc~basis_vector~3 nurbs_curve%basis_vector proc~basis_vector~3->proc~is_rational~3 proc~cmp_xg~3 nurbs_curve%cmp_Xg proc~cmp_xg~3->proc~is_rational~3 proc~create~3 nurbs_curve%create proc~create~3->proc~is_rational~3 proc~derivative2_scalar~3 nurbs_curve%derivative2_scalar proc~derivative2_scalar~3->proc~is_rational~3 proc~derivative2_vector~3 nurbs_curve%derivative2_vector proc~derivative2_vector~3->proc~is_rational~3 proc~derivative_scalar~3 nurbs_curve%derivative_scalar proc~derivative_scalar~3->proc~is_rational~3 proc~derivative_vector~3 nurbs_curve%derivative_vector proc~derivative_vector~3->proc~is_rational~3 proc~elevate_degree~3 nurbs_curve%elevate_degree proc~elevate_degree~3->proc~is_rational~3 proc~insert_knots~3 nurbs_curve%insert_knots proc~insert_knots~3->proc~is_rational~3 proc~remove_knots~3 nurbs_curve%remove_knots proc~remove_knots~3->proc~is_rational~3 none~derivative2~3 nurbs_curve%derivative2 none~derivative2~3->proc~derivative2_scalar~3 none~derivative2~3->proc~derivative2_vector~3 proc~nearest_point2~3 nurbs_curve%nearest_point2 proc~nearest_point2~3->proc~cmp_xg~3 proc~nearest_point2~3->proc~create~3 proc~nearest_point2~3->none~derivative2~3 program~example1_curve example1_curve program~example1_curve->proc~create~3 program~example1_curve->proc~elevate_degree~3 program~example1_curve->proc~insert_knots~3 program~example1_curve->proc~remove_knots~3 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~create~3 program~nearest_point_1d nearest_point_1d program~nearest_point_1d->proc~create~3 program~nearest_point_1d->proc~nearest_point2~3 program~shape_c_1d shape_C_1d program~shape_c_1d->proc~create~3 program~shape_circle shape_circle program~shape_circle->proc~create~3 program~shape_half_circle shape_half_circle program~shape_half_circle->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/is_rational~3.html"},{"title":"basis_scalar – ForCAD","text":"private pure subroutine basis_scalar(this, Xt, Tgc) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in) :: Xt real(kind=rk), intent(out), allocatable :: Tgc (:) Calls proc~~basis_scalar~3~~CallsGraph proc~basis_scalar~3 nurbs_curve%basis_scalar interface~compute_tgc~3 compute_Tgc proc~basis_scalar~3->interface~compute_tgc~3 proc~is_rational~3 nurbs_curve%is_rational proc~basis_scalar~3->proc~is_rational~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_scalar~3.html"},{"title":"basis_vector – ForCAD","text":"private pure subroutine basis_vector(this, res, Xt, Tgc) 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, contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: Tgc (:,:) Calls proc~~basis_vector~3~~CallsGraph proc~basis_vector~3 nurbs_curve%basis_vector interface~compute_tgc~3 compute_Tgc proc~basis_vector~3->interface~compute_tgc~3 proc~is_rational~3 nurbs_curve%is_rational proc~basis_vector~3->proc~is_rational~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_vector~3.html"},{"title":"cmp_degree – ForCAD","text":"private pure subroutine cmp_degree(this) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this Calls proc~~cmp_degree~3~~CallsGraph proc~cmp_degree~3 nurbs_curve%cmp_degree proc~get_multiplicity~3 nurbs_curve%get_multiplicity proc~cmp_degree~3->proc~get_multiplicity~3 interface~compute_multiplicity compute_multiplicity proc~get_multiplicity~3->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~cmp_degree~3~~CalledByGraph proc~cmp_degree~3 nurbs_curve%cmp_degree proc~set1~3 nurbs_curve%set1 proc~set1~3->proc~cmp_degree~3 proc~set3~3 nurbs_curve%set3 proc~set3~3->proc~cmp_degree~3 none~set~3 nurbs_curve%set none~set~3->proc~set1~3 none~set~3->proc~set3~3 proc~elevate_degree~3 nurbs_curve%elevate_degree proc~elevate_degree~3->none~set~3 proc~insert_knots~3 nurbs_curve%insert_knots proc~insert_knots~3->none~set~3 proc~modify_wc~3 nurbs_curve%modify_Wc proc~modify_wc~3->none~set~3 proc~modify_xc~3 nurbs_curve%modify_Xc proc~modify_xc~3->none~set~3 proc~remove_knots~3 nurbs_curve%remove_knots proc~remove_knots~3->none~set~3 proc~set_circle nurbs_curve%set_circle proc~set_circle->none~set~3 proc~set_c~3 nurbs_curve%set_C proc~set_c~3->none~set~3 proc~set_half_circle nurbs_curve%set_half_circle proc~set_half_circle->none~set~3 program~example1_curve example1_curve program~example1_curve->none~set~3 program~example1_curve->proc~elevate_degree~3 program~example1_curve->proc~insert_knots~3 program~example1_curve->proc~remove_knots~3 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->none~set~3 program~nearest_point_1d nearest_point_1d program~nearest_point_1d->none~set~3 program~shape_c_1d shape_C_1d program~shape_c_1d->proc~set_c~3 program~shape_circle shape_circle program~shape_circle->proc~set_circle program~shape_half_circle shape_half_circle program~shape_half_circle->proc~set_half_circle Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_degree~3.html"},{"title":"cmp_nc – ForCAD","text":"private pure subroutine cmp_nc(this) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this Calls proc~~cmp_nc~3~~CallsGraph proc~cmp_nc~3 nurbs_curve%cmp_nc interface~compute_multiplicity compute_multiplicity proc~cmp_nc~3->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_nc~3.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, contiguous :: Xt (:) Calls proc~~create~3~~CallsGraph proc~create~3 nurbs_curve%create interface~compute_xg~3 compute_Xg proc~create~3->interface~compute_xg~3 proc~is_rational~3 nurbs_curve%is_rational proc~create~3->proc~is_rational~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. Called by proc~~create~3~~CalledByGraph proc~create~3 nurbs_curve%create proc~nearest_point2~3 nurbs_curve%nearest_point2 proc~nearest_point2~3->proc~create~3 program~example1_curve example1_curve program~example1_curve->proc~create~3 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~create~3 program~nearest_point_1d nearest_point_1d program~nearest_point_1d->proc~create~3 program~nearest_point_1d->proc~nearest_point2~3 program~shape_c_1d shape_C_1d program~shape_c_1d->proc~create~3 program~shape_circle shape_circle program~shape_circle->proc~create~3 program~shape_half_circle shape_half_circle program~shape_half_circle->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":"derivative2_scalar – ForCAD","text":"private pure subroutine derivative2_scalar(this, Xt, d2Tgc, dTgc, Tgc) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in) :: Xt real(kind=rk), intent(out), allocatable :: d2Tgc (:) real(kind=rk), intent(out), optional, allocatable :: dTgc (:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:) Calls proc~~derivative2_scalar~3~~CallsGraph proc~derivative2_scalar~3 nurbs_curve%derivative2_scalar interface~compute_d2tgc~3 compute_d2Tgc proc~derivative2_scalar~3->interface~compute_d2tgc~3 proc~is_rational~3 nurbs_curve%is_rational proc~derivative2_scalar~3->proc~is_rational~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. Called by proc~~derivative2_scalar~3~~CalledByGraph proc~derivative2_scalar~3 nurbs_curve%derivative2_scalar none~derivative2~3 nurbs_curve%derivative2 none~derivative2~3->proc~derivative2_scalar~3 proc~nearest_point2~3 nurbs_curve%nearest_point2 proc~nearest_point2~3->none~derivative2~3 program~nearest_point_1d nearest_point_1d program~nearest_point_1d->proc~nearest_point2~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/derivative2_scalar~3.html"},{"title":"derivative2_vector – ForCAD","text":"private pure subroutine derivative2_vector(this, res, Xt, d2Tgc, dTgc, Tgc) 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, contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:) real(kind=rk), intent(out), optional, allocatable :: dTgc (:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:,:) Calls proc~~derivative2_vector~3~~CallsGraph proc~derivative2_vector~3 nurbs_curve%derivative2_vector interface~compute_d2tgc~3 compute_d2Tgc proc~derivative2_vector~3->interface~compute_d2tgc~3 proc~is_rational~3 nurbs_curve%is_rational proc~derivative2_vector~3->proc~is_rational~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. Called by proc~~derivative2_vector~3~~CalledByGraph proc~derivative2_vector~3 nurbs_curve%derivative2_vector none~derivative2~3 nurbs_curve%derivative2 none~derivative2~3->proc~derivative2_vector~3 proc~nearest_point2~3 nurbs_curve%nearest_point2 proc~nearest_point2~3->none~derivative2~3 program~nearest_point_1d nearest_point_1d program~nearest_point_1d->proc~nearest_point2~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/derivative2_vector~3.html"},{"title":"derivative_scalar – ForCAD","text":"private pure subroutine derivative_scalar(this, Xt, dTgc, Tgc) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in) :: Xt real(kind=rk), intent(out), allocatable :: dTgc (:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:) Calls proc~~derivative_scalar~3~~CallsGraph proc~derivative_scalar~3 nurbs_curve%derivative_scalar interface~compute_dtgc~3 compute_dTgc proc~derivative_scalar~3->interface~compute_dtgc~3 proc~is_rational~3 nurbs_curve%is_rational proc~derivative_scalar~3->proc~is_rational~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/derivative_scalar~3.html"},{"title":"derivative_vector – ForCAD","text":"private pure subroutine derivative_vector(this, res, Xt, dTgc, Tgc) 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, contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: dTgc (:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:,:) Calls proc~~derivative_vector~3~~CallsGraph proc~derivative_vector~3 nurbs_curve%derivative_vector interface~compute_dtgc~3 compute_dTgc proc~derivative_vector~3->interface~compute_dtgc~3 proc~is_rational~3 nurbs_curve%is_rational proc~derivative_vector~3->proc~is_rational~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/derivative_vector~3.html"},{"title":"elevate_degree – ForCAD","text":"private pure subroutine elevate_degree(this, t) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this integer, intent(in) :: t Calls proc~~elevate_degree~3~~CallsGraph proc~elevate_degree~3 nurbs_curve%elevate_degree none~set~3 nurbs_curve%set proc~elevate_degree~3->none~set~3 proc~elevate_degree_a_5_9 elevate_degree_A_5_9 proc~elevate_degree~3->proc~elevate_degree_a_5_9 proc~is_rational~3 nurbs_curve%is_rational proc~elevate_degree~3->proc~is_rational~3 proc~set1~3 nurbs_curve%set1 none~set~3->proc~set1~3 proc~set2~3 nurbs_curve%set2 none~set~3->proc~set2~3 proc~set3~3 nurbs_curve%set3 none~set~3->proc~set3~3 interface~compute_multiplicity compute_multiplicity proc~elevate_degree_a_5_9->interface~compute_multiplicity proc~bincoeff bincoeff proc~elevate_degree_a_5_9->proc~bincoeff proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~factln factln proc~bincoeff->proc~factln proc~cmp_degree~3 nurbs_curve%cmp_degree proc~set1~3->proc~cmp_degree~3 proc~compute_knot_vector compute_knot_vector proc~set2~3->proc~compute_knot_vector proc~set3~3->proc~cmp_degree~3 proc~get_multiplicity~3 nurbs_curve%get_multiplicity proc~cmp_degree~3->proc~get_multiplicity~3 proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~get_multiplicity~3->interface~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~~elevate_degree~3~~CalledByGraph proc~elevate_degree~3 nurbs_curve%elevate_degree program~example1_curve example1_curve program~example1_curve->proc~elevate_degree~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/elevate_degree~3.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~3~~CallsGraph proc~export_xc~3 nurbs_curve%export_Xc proc~cmp_elem_xc_vis~3 nurbs_curve%cmp_elem_Xc_vis proc~export_xc~3->proc~cmp_elem_xc_vis~3 interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xc_vis~3->interface~elemconn_c0 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v 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 nurbs_curve%export_Xc program~example1_curve example1_curve program~example1_curve->proc~export_xc~3 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~export_xc~3 program~shape_c_1d shape_C_1d program~shape_c_1d->proc~export_xc~3 program~shape_circle shape_circle program~shape_circle->proc~export_xc~3 program~shape_half_circle shape_half_circle program~shape_half_circle->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_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this character(len=*), intent(in) :: filename Calls proc~~export_xg~3~~CallsGraph proc~export_xg~3 nurbs_curve%export_Xg proc~cmp_elem_xg_vis~3 nurbs_curve%cmp_elem_Xg_vis proc~export_xg~3->proc~cmp_elem_xg_vis~3 interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xg_vis~3->interface~elemconn_c0 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v 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 nurbs_curve%export_Xg program~example1_curve example1_curve program~example1_curve->proc~export_xg~3 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~export_xg~3 program~shape_c_1d shape_C_1d program~shape_c_1d->proc~export_xg~3 program~shape_circle shape_circle program~shape_circle->proc~export_xg~3 program~shape_half_circle shape_half_circle program~shape_half_circle->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_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this Called by proc~~finalize~3~~CalledByGraph proc~finalize~3 nurbs_curve%finalize proc~nearest_point2~3 nurbs_curve%nearest_point2 proc~nearest_point2~3->proc~finalize~3 program~example1_curve example1_curve program~example1_curve->proc~finalize~3 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~finalize~3 program~nearest_point_1d nearest_point_1d program~nearest_point_1d->proc~finalize~3 program~nearest_point_1d->proc~nearest_point2~3 program~shape_c_1d shape_C_1d program~shape_c_1d->proc~finalize~3 program~shape_circle shape_circle program~shape_circle->proc~finalize~3 program~shape_half_circle shape_half_circle program~shape_half_circle->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":"insert_knots – ForCAD","text":"private pure subroutine insert_knots(this, Xth, r) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: Xth (:) integer, intent(in), contiguous :: r (:) Calls proc~~insert_knots~3~~CallsGraph proc~insert_knots~3 nurbs_curve%insert_knots interface~compute_multiplicity compute_multiplicity proc~insert_knots~3->interface~compute_multiplicity none~set~3 nurbs_curve%set proc~insert_knots~3->none~set~3 proc~findspan findspan proc~insert_knots~3->proc~findspan proc~insert_knot_a_5_1 insert_knot_A_5_1 proc~insert_knots~3->proc~insert_knot_a_5_1 proc~is_rational~3 nurbs_curve%is_rational proc~insert_knots~3->proc~is_rational~3 proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~set1~3 nurbs_curve%set1 none~set~3->proc~set1~3 proc~set2~3 nurbs_curve%set2 none~set~3->proc~set2~3 proc~set3~3 nurbs_curve%set3 none~set~3->proc~set3~3 proc~cmp_degree~3 nurbs_curve%cmp_degree proc~set1~3->proc~cmp_degree~3 proc~compute_knot_vector compute_knot_vector proc~set2~3->proc~compute_knot_vector proc~set3~3->proc~cmp_degree~3 proc~get_multiplicity~3 nurbs_curve%get_multiplicity proc~cmp_degree~3->proc~get_multiplicity~3 proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~get_multiplicity~3->interface~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~~insert_knots~3~~CalledByGraph proc~insert_knots~3 nurbs_curve%insert_knots program~example1_curve example1_curve program~example1_curve->proc~insert_knots~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/insert_knots~3.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~3~~CallsGraph proc~modify_wc~3 nurbs_curve%modify_Wc none~get_knot~3 nurbs_curve%get_knot proc~modify_wc~3->none~get_knot~3 none~get_wc~3 nurbs_curve%get_Wc proc~modify_wc~3->none~get_wc~3 none~get_xc~3 nurbs_curve%get_Xc proc~modify_wc~3->none~get_xc~3 none~set~3 nurbs_curve%set proc~modify_wc~3->none~set~3 proc~get_knot_all~3 nurbs_curve%get_knot_all none~get_knot~3->proc~get_knot_all~3 proc~get_knoti~3 nurbs_curve%get_knoti none~get_knot~3->proc~get_knoti~3 proc~get_wc_all~3 nurbs_curve%get_Wc_all none~get_wc~3->proc~get_wc_all~3 proc~get_wci~3 nurbs_curve%get_Wci none~get_wc~3->proc~get_wci~3 proc~get_xc_all~3 nurbs_curve%get_Xc_all none~get_xc~3->proc~get_xc_all~3 proc~get_xcid~3 nurbs_curve%get_Xcid none~get_xc~3->proc~get_xcid~3 proc~get_xci~3 nurbs_curve%get_Xci none~get_xc~3->proc~get_xci~3 proc~set1~3 nurbs_curve%set1 none~set~3->proc~set1~3 proc~set2~3 nurbs_curve%set2 none~set~3->proc~set2~3 proc~set3~3 nurbs_curve%set3 none~set~3->proc~set3~3 proc~cmp_degree~3 nurbs_curve%cmp_degree proc~set1~3->proc~cmp_degree~3 proc~compute_knot_vector compute_knot_vector proc~set2~3->proc~compute_knot_vector proc~set3~3->proc~cmp_degree~3 proc~get_multiplicity~3 nurbs_curve%get_multiplicity proc~cmp_degree~3->proc~get_multiplicity~3 proc~repelem repelem proc~compute_knot_vector->proc~repelem interface~compute_multiplicity compute_multiplicity proc~get_multiplicity~3->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_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~3~~CallsGraph proc~modify_xc~3 nurbs_curve%modify_Xc none~get_knot~3 nurbs_curve%get_knot proc~modify_xc~3->none~get_knot~3 none~get_wc~3 nurbs_curve%get_Wc proc~modify_xc~3->none~get_wc~3 none~get_xc~3 nurbs_curve%get_Xc proc~modify_xc~3->none~get_xc~3 none~set~3 nurbs_curve%set proc~modify_xc~3->none~set~3 proc~get_knot_all~3 nurbs_curve%get_knot_all none~get_knot~3->proc~get_knot_all~3 proc~get_knoti~3 nurbs_curve%get_knoti none~get_knot~3->proc~get_knoti~3 proc~get_wc_all~3 nurbs_curve%get_Wc_all none~get_wc~3->proc~get_wc_all~3 proc~get_wci~3 nurbs_curve%get_Wci none~get_wc~3->proc~get_wci~3 proc~get_xc_all~3 nurbs_curve%get_Xc_all none~get_xc~3->proc~get_xc_all~3 proc~get_xcid~3 nurbs_curve%get_Xcid none~get_xc~3->proc~get_xcid~3 proc~get_xci~3 nurbs_curve%get_Xci none~get_xc~3->proc~get_xci~3 proc~set1~3 nurbs_curve%set1 none~set~3->proc~set1~3 proc~set2~3 nurbs_curve%set2 none~set~3->proc~set2~3 proc~set3~3 nurbs_curve%set3 none~set~3->proc~set3~3 proc~cmp_degree~3 nurbs_curve%cmp_degree proc~set1~3->proc~cmp_degree~3 proc~compute_knot_vector compute_knot_vector proc~set2~3->proc~compute_knot_vector proc~set3~3->proc~cmp_degree~3 proc~get_multiplicity~3 nurbs_curve%get_multiplicity proc~cmp_degree~3->proc~get_multiplicity~3 proc~repelem repelem proc~compute_knot_vector->proc~repelem interface~compute_multiplicity compute_multiplicity proc~get_multiplicity~3->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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":"nearest_point – ForCAD","text":"private pure subroutine nearest_point(this, point_Xg, nearest_Xg, nearest_Xt, id) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this real(kind=rk), intent(in) :: point_Xg (:) real(kind=rk), intent(out), optional, allocatable :: nearest_Xg (:) real(kind=rk), intent(out), optional :: nearest_Xt integer, intent(out), optional :: id Calls proc~~nearest_point~3~~CallsGraph proc~nearest_point~3 nurbs_curve%nearest_point interface~nearest_point_help_1d nearest_point_help_1d proc~nearest_point~3->interface~nearest_point_help_1d Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~nearest_point~3~~CalledByGraph proc~nearest_point~3 nurbs_curve%nearest_point program~nearest_point_1d nearest_point_1d program~nearest_point_1d->proc~nearest_point~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/nearest_point~3.html"},{"title":"nearest_point2 – ForCAD","text":"private impure subroutine nearest_point2(this, point_Xg, tol, maxit, nearest_Xt, nearest_Xg) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in) :: point_Xg (:) real(kind=rk), intent(in) :: tol integer, intent(in) :: maxit real(kind=rk), intent(out) :: nearest_Xt real(kind=rk), intent(out), optional, allocatable :: nearest_Xg (:) Calls proc~~nearest_point2~3~~CallsGraph proc~nearest_point2~3 nurbs_curve%nearest_point2 interface~nearest_point_help_1d nearest_point_help_1d proc~nearest_point2~3->interface~nearest_point_help_1d none~derivative2~3 nurbs_curve%derivative2 proc~nearest_point2~3->none~derivative2~3 proc~cmp_xg~3 nurbs_curve%cmp_Xg proc~nearest_point2~3->proc~cmp_xg~3 proc~create~3 nurbs_curve%create proc~nearest_point2~3->proc~create~3 proc~finalize~3 nurbs_curve%finalize proc~nearest_point2~3->proc~finalize~3 proc~derivative2_scalar~3 nurbs_curve%derivative2_scalar none~derivative2~3->proc~derivative2_scalar~3 proc~derivative2_vector~3 nurbs_curve%derivative2_vector none~derivative2~3->proc~derivative2_vector~3 interface~compute_xg~3 compute_Xg proc~cmp_xg~3->interface~compute_xg~3 proc~is_rational~3 nurbs_curve%is_rational proc~cmp_xg~3->proc~is_rational~3 proc~create~3->interface~compute_xg~3 proc~create~3->proc~is_rational~3 proc~derivative2_scalar~3->proc~is_rational~3 interface~compute_d2tgc~3 compute_d2Tgc proc~derivative2_scalar~3->interface~compute_d2tgc~3 proc~derivative2_vector~3->proc~is_rational~3 proc~derivative2_vector~3->interface~compute_d2tgc~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. Called by proc~~nearest_point2~3~~CalledByGraph proc~nearest_point2~3 nurbs_curve%nearest_point2 program~nearest_point_1d nearest_point_1d program~nearest_point_1d->proc~nearest_point2~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/nearest_point2~3.html"},{"title":"remove_knots – ForCAD","text":"private pure subroutine remove_knots(this, Xth, r) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: Xth (:) integer, intent(in), contiguous :: r (:) Calls proc~~remove_knots~3~~CallsGraph proc~remove_knots~3 nurbs_curve%remove_knots interface~compute_multiplicity compute_multiplicity proc~remove_knots~3->interface~compute_multiplicity none~set~3 nurbs_curve%set proc~remove_knots~3->none~set~3 proc~findspan findspan proc~remove_knots~3->proc~findspan proc~is_rational~3 nurbs_curve%is_rational proc~remove_knots~3->proc~is_rational~3 proc~remove_knots_a_5_8 remove_knots_A_5_8 proc~remove_knots~3->proc~remove_knots_a_5_8 proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~set1~3 nurbs_curve%set1 none~set~3->proc~set1~3 proc~set2~3 nurbs_curve%set2 none~set~3->proc~set2~3 proc~set3~3 nurbs_curve%set3 none~set~3->proc~set3~3 proc~cmp_degree~3 nurbs_curve%cmp_degree proc~set1~3->proc~cmp_degree~3 proc~compute_knot_vector compute_knot_vector proc~set2~3->proc~compute_knot_vector proc~set3~3->proc~cmp_degree~3 proc~get_multiplicity~3 nurbs_curve%get_multiplicity proc~cmp_degree~3->proc~get_multiplicity~3 proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~get_multiplicity~3->interface~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~~remove_knots~3~~CalledByGraph proc~remove_knots~3 nurbs_curve%remove_knots program~example1_curve example1_curve program~example1_curve->proc~remove_knots~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/remove_knots~3.html"},{"title":"rotate_Xc – ForCAD","text":"private pure subroutine rotate_Xc(this, alpha, beta, theta) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in) :: alpha real(kind=rk), intent(in) :: beta real(kind=rk), intent(in) :: theta Calls proc~~rotate_xc~3~~CallsGraph proc~rotate_xc~3 nurbs_curve%rotate_Xc proc~rotation rotation proc~rotate_xc~3->proc~rotation cosd cosd proc~rotation->cosd sind sind proc~rotation->sind Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~rotate_xc~3~~CalledByGraph proc~rotate_xc~3 nurbs_curve%rotate_Xc program~example1_curve example1_curve program~example1_curve->proc~rotate_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/rotate_xc~3.html"},{"title":"rotate_Xg – ForCAD","text":"private pure subroutine rotate_Xg(this, alpha, beta, theta) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in) :: alpha real(kind=rk), intent(in) :: beta real(kind=rk), intent(in) :: theta Calls proc~~rotate_xg~3~~CallsGraph proc~rotate_xg~3 nurbs_curve%rotate_Xg proc~rotation rotation proc~rotate_xg~3->proc~rotation cosd cosd proc~rotation->cosd sind sind proc~rotation->sind Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~rotate_xg~3~~CalledByGraph proc~rotate_xg~3 nurbs_curve%rotate_Xg program~example1_curve example1_curve program~example1_curve->proc~rotate_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/rotate_xg~3.html"},{"title":"set1 – ForCAD","text":"private pure subroutine set1(this, knot, Xc, Wc) Set knot vector, control points and weights for the NURBS curve object. Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: knot (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) Calls proc~~set1~3~~CallsGraph proc~set1~3 nurbs_curve%set1 proc~cmp_degree~3 nurbs_curve%cmp_degree proc~set1~3->proc~cmp_degree~3 proc~get_multiplicity~3 nurbs_curve%get_multiplicity proc~cmp_degree~3->proc~get_multiplicity~3 interface~compute_multiplicity compute_multiplicity proc~get_multiplicity~3->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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 nurbs_curve%set1 none~set~3 nurbs_curve%set none~set~3->proc~set1~3 proc~elevate_degree~3 nurbs_curve%elevate_degree proc~elevate_degree~3->none~set~3 proc~insert_knots~3 nurbs_curve%insert_knots proc~insert_knots~3->none~set~3 proc~modify_wc~3 nurbs_curve%modify_Wc proc~modify_wc~3->none~set~3 proc~modify_xc~3 nurbs_curve%modify_Xc proc~modify_xc~3->none~set~3 proc~remove_knots~3 nurbs_curve%remove_knots proc~remove_knots~3->none~set~3 proc~set_circle nurbs_curve%set_circle proc~set_circle->none~set~3 proc~set_c~3 nurbs_curve%set_C proc~set_c~3->none~set~3 proc~set_half_circle nurbs_curve%set_half_circle proc~set_half_circle->none~set~3 program~example1_curve example1_curve program~example1_curve->none~set~3 program~example1_curve->proc~elevate_degree~3 program~example1_curve->proc~insert_knots~3 program~example1_curve->proc~remove_knots~3 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->none~set~3 program~nearest_point_1d nearest_point_1d program~nearest_point_1d->none~set~3 program~shape_c_1d shape_C_1d program~shape_c_1d->proc~set_c~3 program~shape_circle shape_circle program~shape_circle->proc~set_circle program~shape_half_circle shape_half_circle program~shape_half_circle->proc~set_half_circle Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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, degree, continuity, Xc, Wc) Set NURBS curve using nodes of parameter space (Xth), degree, continuity, control points and weights. Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: Xth_dir (:) integer, intent(in) :: degree integer, intent(in), contiguous :: continuity (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) Calls proc~~set2~3~~CallsGraph proc~set2~3 nurbs_curve%set2 proc~compute_knot_vector compute_knot_vector proc~set2~3->proc~compute_knot_vector proc~repelem 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 nurbs_curve%set2 none~set~3 nurbs_curve%set none~set~3->proc~set2~3 proc~elevate_degree~3 nurbs_curve%elevate_degree proc~elevate_degree~3->none~set~3 proc~insert_knots~3 nurbs_curve%insert_knots proc~insert_knots~3->none~set~3 proc~modify_wc~3 nurbs_curve%modify_Wc proc~modify_wc~3->none~set~3 proc~modify_xc~3 nurbs_curve%modify_Xc proc~modify_xc~3->none~set~3 proc~remove_knots~3 nurbs_curve%remove_knots proc~remove_knots~3->none~set~3 proc~set_circle nurbs_curve%set_circle proc~set_circle->none~set~3 proc~set_c~3 nurbs_curve%set_C proc~set_c~3->none~set~3 proc~set_half_circle nurbs_curve%set_half_circle proc~set_half_circle->none~set~3 program~example1_curve example1_curve program~example1_curve->none~set~3 program~example1_curve->proc~elevate_degree~3 program~example1_curve->proc~insert_knots~3 program~example1_curve->proc~remove_knots~3 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->none~set~3 program~nearest_point_1d nearest_point_1d program~nearest_point_1d->none~set~3 program~shape_c_1d shape_C_1d program~shape_c_1d->proc~set_c~3 program~shape_circle shape_circle program~shape_circle->proc~set_circle program~shape_half_circle shape_half_circle program~shape_half_circle->proc~set_half_circle Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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":"set3 – ForCAD","text":"private pure subroutine set3(this, Xc, Wc) Set Bezier or Rational Bezier curve using control points and weights. Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) Calls proc~~set3~3~~CallsGraph proc~set3~3 nurbs_curve%set3 proc~cmp_degree~3 nurbs_curve%cmp_degree proc~set3~3->proc~cmp_degree~3 proc~get_multiplicity~3 nurbs_curve%get_multiplicity proc~cmp_degree~3->proc~get_multiplicity~3 interface~compute_multiplicity compute_multiplicity proc~get_multiplicity~3->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~set3~3~~CalledByGraph proc~set3~3 nurbs_curve%set3 none~set~3 nurbs_curve%set none~set~3->proc~set3~3 proc~elevate_degree~3 nurbs_curve%elevate_degree proc~elevate_degree~3->none~set~3 proc~insert_knots~3 nurbs_curve%insert_knots proc~insert_knots~3->none~set~3 proc~modify_wc~3 nurbs_curve%modify_Wc proc~modify_wc~3->none~set~3 proc~modify_xc~3 nurbs_curve%modify_Xc proc~modify_xc~3->none~set~3 proc~remove_knots~3 nurbs_curve%remove_knots proc~remove_knots~3->none~set~3 proc~set_circle nurbs_curve%set_circle proc~set_circle->none~set~3 proc~set_c~3 nurbs_curve%set_C proc~set_c~3->none~set~3 proc~set_half_circle nurbs_curve%set_half_circle proc~set_half_circle->none~set~3 program~example1_curve example1_curve program~example1_curve->none~set~3 program~example1_curve->proc~elevate_degree~3 program~example1_curve->proc~insert_knots~3 program~example1_curve->proc~remove_knots~3 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->none~set~3 program~nearest_point_1d nearest_point_1d program~nearest_point_1d->none~set~3 program~shape_c_1d shape_C_1d program~shape_c_1d->proc~set_c~3 program~shape_circle shape_circle program~shape_circle->proc~set_circle program~shape_half_circle shape_half_circle program~shape_half_circle->proc~set_half_circle Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/set3~3.html"},{"title":"set_C – ForCAD","text":"private pure subroutine set_C(this, center, radius) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: center (:) real(kind=rk), intent(in) :: radius Calls proc~~set_c~3~~CallsGraph proc~set_c~3 nurbs_curve%set_C none~set~3 nurbs_curve%set proc~set_c~3->none~set~3 proc~set1~3 nurbs_curve%set1 none~set~3->proc~set1~3 proc~set2~3 nurbs_curve%set2 none~set~3->proc~set2~3 proc~set3~3 nurbs_curve%set3 none~set~3->proc~set3~3 proc~cmp_degree~3 nurbs_curve%cmp_degree proc~set1~3->proc~cmp_degree~3 proc~compute_knot_vector compute_knot_vector proc~set2~3->proc~compute_knot_vector proc~set3~3->proc~cmp_degree~3 proc~get_multiplicity~3 nurbs_curve%get_multiplicity proc~cmp_degree~3->proc~get_multiplicity~3 proc~repelem repelem proc~compute_knot_vector->proc~repelem interface~compute_multiplicity compute_multiplicity proc~get_multiplicity~3->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~set_c~3~~CalledByGraph proc~set_c~3 nurbs_curve%set_C program~shape_c_1d shape_C_1d program~shape_c_1d->proc~set_c~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_c~3.html"},{"title":"set_circle – ForCAD","text":"private pure subroutine set_circle(this, center, radius) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: center (:) real(kind=rk), intent(in) :: radius Calls proc~~set_circle~~CallsGraph proc~set_circle nurbs_curve%set_circle none~set~3 nurbs_curve%set proc~set_circle->none~set~3 proc~set1~3 nurbs_curve%set1 none~set~3->proc~set1~3 proc~set2~3 nurbs_curve%set2 none~set~3->proc~set2~3 proc~set3~3 nurbs_curve%set3 none~set~3->proc~set3~3 proc~cmp_degree~3 nurbs_curve%cmp_degree proc~set1~3->proc~cmp_degree~3 proc~compute_knot_vector compute_knot_vector proc~set2~3->proc~compute_knot_vector proc~set3~3->proc~cmp_degree~3 proc~get_multiplicity~3 nurbs_curve%get_multiplicity proc~cmp_degree~3->proc~get_multiplicity~3 proc~repelem repelem proc~compute_knot_vector->proc~repelem interface~compute_multiplicity compute_multiplicity proc~get_multiplicity~3->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~set_circle~~CalledByGraph proc~set_circle nurbs_curve%set_circle program~shape_circle shape_circle program~shape_circle->proc~set_circle Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_circle.html"},{"title":"set_elem – ForCAD","text":"private pure subroutine set_elem(this, elemConn) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:)","tags":"","loc":"proc/set_elem~3.html"},{"title":"set_elem_Xc_vis – ForCAD","text":"private pure subroutine set_elem_Xc_vis(this, elemConn) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:)","tags":"","loc":"proc/set_elem_xc_vis~3.html"},{"title":"set_elem_Xg_vis – ForCAD","text":"private pure subroutine set_elem_Xg_vis(this, elemConn) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:)","tags":"","loc":"proc/set_elem_xg_vis~3.html"},{"title":"set_half_circle – ForCAD","text":"private pure subroutine set_half_circle(this, center, radius) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: center (:) real(kind=rk), intent(in) :: radius Calls proc~~set_half_circle~~CallsGraph proc~set_half_circle nurbs_curve%set_half_circle none~set~3 nurbs_curve%set proc~set_half_circle->none~set~3 proc~set1~3 nurbs_curve%set1 none~set~3->proc~set1~3 proc~set2~3 nurbs_curve%set2 none~set~3->proc~set2~3 proc~set3~3 nurbs_curve%set3 none~set~3->proc~set3~3 proc~cmp_degree~3 nurbs_curve%cmp_degree proc~set1~3->proc~cmp_degree~3 proc~compute_knot_vector compute_knot_vector proc~set2~3->proc~compute_knot_vector proc~set3~3->proc~cmp_degree~3 proc~get_multiplicity~3 nurbs_curve%get_multiplicity proc~cmp_degree~3->proc~get_multiplicity~3 proc~repelem repelem proc~compute_knot_vector->proc~repelem interface~compute_multiplicity compute_multiplicity proc~get_multiplicity~3->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~~set_half_circle~~CalledByGraph proc~set_half_circle nurbs_curve%set_half_circle program~shape_half_circle shape_half_circle program~shape_half_circle->proc~set_half_circle Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_half_circle.html"},{"title":"show – ForCAD","text":"private impure subroutine show(this, vtkfile_Xc, vtkfile_Xg) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this character(len=*), intent(in) :: vtkfile_Xc character(len=*), intent(in) :: vtkfile_Xg Called by proc~~show~3~~CalledByGraph proc~show~3 nurbs_curve%show program~example1_curve example1_curve program~example1_curve->proc~show~3 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~show~3 program~shape_c_1d shape_C_1d program~shape_c_1d->proc~show~3 program~shape_circle shape_circle program~shape_circle->proc~show~3 program~shape_half_circle shape_half_circle program~shape_half_circle->proc~show~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/show~3.html"},{"title":"translate_Xc – ForCAD","text":"private pure subroutine translate_Xc(this, vec) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in) :: vec (:) Called by proc~~translate_xc~3~~CalledByGraph proc~translate_xc~3 nurbs_curve%translate_Xc program~example1_curve example1_curve program~example1_curve->proc~translate_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/translate_xc~3.html"},{"title":"translate_Xg – ForCAD","text":"private pure subroutine translate_Xg(this, vec) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in) :: vec (:) Called by proc~~translate_xg~3~~CalledByGraph proc~translate_xg~3 nurbs_curve%translate_Xg program~example1_curve example1_curve program~example1_curve->proc~translate_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/translate_xg~3.html"},{"title":"compute_Tgc – ForCAD","text":"private interface compute_Tgc Called by interface~~compute_tgc~3~~CalledByGraph interface~compute_tgc~3 compute_Tgc proc~basis_scalar~3 nurbs_curve%basis_scalar proc~basis_scalar~3->interface~compute_tgc~3 proc~basis_vector~3 nurbs_curve%basis_vector proc~basis_vector~3->interface~compute_tgc~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. Functions private pure function compute_Tgc_bspline_1d_scalar(f_Xt, f_knot, f_degree, f_nc) result(f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: f_Xt real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc Return Value real(kind=rk), allocatable, (:) private pure function compute_Tgc_bspline_1d_vector(f_Xt, f_knot, f_degree, f_nc, f_ng) result(f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc integer, intent(in) :: f_ng Return Value real(kind=rk), allocatable, (:,:) private pure function compute_Tgc_nurbs_1d_scalar(f_Xt, f_knot, f_degree, f_nc, f_Wc) result(f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: f_Xt real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc real(kind=rk), intent(in), contiguous :: f_Wc (:) Return Value real(kind=rk), allocatable, (:) private pure function compute_Tgc_nurbs_1d_vector(f_Xt, f_knot, f_degree, f_nc, f_ng, f_Wc) result(f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc integer, intent(in) :: f_ng real(kind=rk), intent(in), contiguous :: f_Wc (:) Return Value real(kind=rk), allocatable, (:,:)","tags":"","loc":"interface/compute_tgc~3.html"},{"title":"compute_Xg – ForCAD","text":"private interface compute_Xg Called by interface~~compute_xg~3~~CalledByGraph interface~compute_xg~3 compute_Xg proc~cmp_xg~3 nurbs_curve%cmp_Xg proc~cmp_xg~3->interface~compute_xg~3 proc~create~3 nurbs_curve%create proc~create~3->interface~compute_xg~3 proc~nearest_point2~3 nurbs_curve%nearest_point2 proc~nearest_point2~3->proc~cmp_xg~3 proc~nearest_point2~3->proc~create~3 program~example1_curve example1_curve program~example1_curve->proc~create~3 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~create~3 program~nearest_point_1d nearest_point_1d program~nearest_point_1d->proc~create~3 program~nearest_point_1d->proc~nearest_point2~3 program~shape_c_1d shape_C_1d program~shape_c_1d->proc~create~3 program~shape_circle shape_circle program~shape_circle->proc~create~3 program~shape_half_circle shape_half_circle program~shape_half_circle->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. Functions private pure function compute_Xg_bspline_1d(f_Xt, f_knot, f_degree, f_nc, f_ng, f_Xc) result(f_Xg) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc integer, intent(in) :: f_ng real(kind=rk), intent(in), contiguous :: f_Xc (:,:) Return Value real(kind=rk), allocatable, (:,:) private pure function compute_Xg_bspline_1d_1point(f_Xt, f_knot, f_degree, f_nc, f_Xc) result(f_Xg) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: f_Xt real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc real(kind=rk), intent(in), contiguous :: f_Xc (:,:) Return Value real(kind=rk), allocatable, (:) private pure function compute_Xg_nurbs_1d(f_Xt, f_knot, f_degree, f_nc, f_ng, f_Xc, f_Wc) result(f_Xg) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc integer, intent(in) :: f_ng real(kind=rk), intent(in), contiguous :: f_Xc (:,:) real(kind=rk), intent(in), contiguous :: f_Wc (:) Return Value real(kind=rk), allocatable, (:,:) private pure function compute_Xg_nurbs_1d_1point(f_Xt, f_knot, f_degree, f_nc, f_Xc, f_Wc) result(f_Xg) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: f_Xt real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc real(kind=rk), intent(in), contiguous :: f_Xc (:,:) real(kind=rk), intent(in), contiguous :: f_Wc (:) Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"interface/compute_xg~3.html"},{"title":"compute_d2Tgc – ForCAD","text":"private interface compute_d2Tgc Called by interface~~compute_d2tgc~3~~CalledByGraph interface~compute_d2tgc~3 compute_d2Tgc proc~derivative2_scalar~3 nurbs_curve%derivative2_scalar proc~derivative2_scalar~3->interface~compute_d2tgc~3 proc~derivative2_vector~3 nurbs_curve%derivative2_vector proc~derivative2_vector~3->interface~compute_d2tgc~3 none~derivative2~3 nurbs_curve%derivative2 none~derivative2~3->proc~derivative2_scalar~3 none~derivative2~3->proc~derivative2_vector~3 proc~nearest_point2~3 nurbs_curve%nearest_point2 proc~nearest_point2~3->none~derivative2~3 program~nearest_point_1d nearest_point_1d program~nearest_point_1d->proc~nearest_point2~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. Subroutines private pure subroutine compute_d2Tgc_bspline_1d_scalar(f_Xt, f_knot, f_degree, f_nc, f_d2Tgc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: f_Xt real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc real(kind=rk), intent(out), allocatable :: f_d2Tgc (:) real(kind=rk), intent(out), allocatable :: f_dTgc (:) real(kind=rk), intent(out), allocatable :: f_Tgc (:) private pure subroutine compute_d2Tgc_bspline_1d_vector(f_Xt, f_knot, f_degree, f_nc, f_ng, f_d2Tgc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc integer, intent(in) :: f_ng real(kind=rk), intent(out), allocatable :: f_d2Tgc (:,:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:,:) private pure subroutine compute_d2Tgc_nurbs_1d_scalar(f_Xt, f_knot, f_degree, f_nc, f_Wc, f_d2Tgc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: f_Xt real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc real(kind=rk), intent(in), contiguous :: f_Wc (:) real(kind=rk), intent(out), allocatable :: f_d2Tgc (:) real(kind=rk), intent(out), allocatable :: f_dTgc (:) real(kind=rk), intent(out), allocatable :: f_Tgc (:) private pure subroutine compute_d2Tgc_nurbs_1d_vector(f_Xt, f_knot, f_degree, f_nc, f_ng, f_Wc, f_d2Tgc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc integer, intent(in) :: f_ng real(kind=rk), intent(in), contiguous :: f_Wc (:) real(kind=rk), intent(out), allocatable :: f_d2Tgc (:,:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:,:)","tags":"","loc":"interface/compute_d2tgc~3.html"},{"title":"compute_dTgc – ForCAD","text":"private interface compute_dTgc Called by interface~~compute_dtgc~3~~CalledByGraph interface~compute_dtgc~3 compute_dTgc proc~derivative_scalar~3 nurbs_curve%derivative_scalar proc~derivative_scalar~3->interface~compute_dtgc~3 proc~derivative_vector~3 nurbs_curve%derivative_vector proc~derivative_vector~3->interface~compute_dtgc~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. Subroutines private pure subroutine compute_dTgc_bspline_1d_scalar(f_Xt, f_knot, f_degree, f_nc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: f_Xt real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc real(kind=rk), intent(out), allocatable :: f_dTgc (:) real(kind=rk), intent(out), allocatable :: f_Tgc (:) private pure subroutine compute_dTgc_bspline_1d_vector(f_Xt, f_knot, f_degree, f_nc, f_ng, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc integer, intent(in) :: f_ng real(kind=rk), intent(out), allocatable :: f_dTgc (:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:,:) private pure subroutine compute_dTgc_nurbs_1d_scalar(f_Xt, f_knot, f_degree, f_nc, f_Wc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: f_Xt real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc real(kind=rk), intent(in), contiguous :: f_Wc (:) real(kind=rk), intent(out), allocatable :: f_dTgc (:) real(kind=rk), intent(out), allocatable :: f_Tgc (:) private pure subroutine compute_dTgc_nurbs_1d_vector(f_Xt, f_knot, f_degree, f_nc, f_ng, f_Wc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc integer, intent(in) :: f_ng real(kind=rk), intent(in), contiguous :: f_Wc (:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:,:)","tags":"","loc":"interface/compute_dtgc~3.html"},{"title":"nearest_point_help_1d – ForCAD","text":"interface Called by interface~~nearest_point_help_1d~~CalledByGraph interface~nearest_point_help_1d nearest_point_help_1d proc~nearest_point2~3 nurbs_curve%nearest_point2 proc~nearest_point2~3->interface~nearest_point_help_1d proc~nearest_point~3 nurbs_curve%nearest_point proc~nearest_point~3->interface~nearest_point_help_1d program~nearest_point_1d nearest_point_1d program~nearest_point_1d->proc~nearest_point2~3 program~nearest_point_1d->proc~nearest_point~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. private pure function nearest_point_help_1d(f_ng, f_Xg, f_point_Xg) result(f_distances) Arguments Type Intent Optional Attributes Name integer, intent(in) :: f_ng real(kind=rk), intent(in), contiguous :: f_Xg (:,:) real(kind=rk), intent(in), contiguous :: f_point_Xg (:) Return Value real(kind=rk),allocatable,(:)","tags":"","loc":"interface/nearest_point_help_1d.html"},{"title":"forcad_nurbs_volume – ForCAD","text":"This module defines the 'nurbs_volume' type for representing a Non-Uniform Rational B-Spline (NURBS) volume. 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~example1_curve example1_curve program~example1_curve->module~forcad program~example3_surface example3_surface program~example3_surface->module~forcad program~example3_volume example3_volume program~example3_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 program~example_ppm1 example_ppm1 program~example_ppm1->module~forcad program~example_ppm2 example_ppm2 program~example_ppm2->module~forcad program~example_ppm3 example_ppm3 program~example_ppm3->module~forcad program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->module~forcad program~nearest_point_1d nearest_point_1d program~nearest_point_1d->module~forcad program~nearest_point_2d nearest_point_2d program~nearest_point_2d->module~forcad program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->module~forcad program~nearest_point_3d nearest_point_3d program~nearest_point_3d->module~forcad program~shape_c_1d shape_C_1d program~shape_c_1d->module~forcad program~shape_c_2d shape_C_2d program~shape_c_2d->module~forcad program~shape_c_3d shape_C_3d program~shape_c_3d->module~forcad program~shape_circle shape_circle program~shape_circle->module~forcad program~shape_half_circle shape_half_circle program~shape_half_circle->module~forcad program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->module~forcad program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->module~forcad program~shape_hexahedron shape_hexahedron program~shape_hexahedron->module~forcad program~shape_ring_2d shape_ring_2d program~shape_ring_2d->module~forcad program~shape_ring_3d shape_ring_3d program~shape_ring_3d->module~forcad program~shape_tetragon shape_tetragon program~shape_tetragon->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. Interfaces private interface compute_Tgc private pure function compute_Tgc_bspline_3d_scalar(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc) result(f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) Return Value real(kind=rk), allocatable, (:) private pure function compute_Tgc_bspline_3d_vector(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_ng) result(f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) integer, intent(in) :: f_ng (3) Return Value real(kind=rk), allocatable, (:,:) private pure function compute_Tgc_nurbs_3d_scalar(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_Wc) result(f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) real(kind=rk), intent(in), contiguous :: f_Wc (:) Return Value real(kind=rk), allocatable, (:) private pure function compute_Tgc_nurbs_3d_vector(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_ng, f_Wc) result(f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) integer, intent(in) :: f_ng (3) real(kind=rk), intent(in), contiguous :: f_Wc (:) Return Value real(kind=rk), allocatable, (:,:) private interface compute_Xg private pure function compute_Xg_bspline_3d(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_ng, f_Xc) result(f_Xg) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) integer, intent(in) :: f_ng (3) real(kind=rk), intent(in), contiguous :: f_Xc (:,:) Return Value real(kind=rk), allocatable, (:,:) private pure function compute_Xg_bspline_3d_1point(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_Xc) result(f_Xg) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) real(kind=rk), intent(in), contiguous :: f_Xc (:,:) Return Value real(kind=rk), allocatable, (:) private pure function compute_Xg_nurbs_3d(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_ng, f_Xc, f_Wc) result(f_Xg) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) integer, intent(in) :: f_ng (3) real(kind=rk), intent(in), contiguous :: f_Xc (:,:) real(kind=rk), intent(in), contiguous :: f_Wc (:) Return Value real(kind=rk), allocatable, (:,:) private pure function compute_Xg_nurbs_3d_1point(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_Xc, f_Wc) result(f_Xg) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) real(kind=rk), intent(in), contiguous :: f_Xc (:,:) real(kind=rk), intent(in), contiguous :: f_Wc (:) Return Value real(kind=rk), allocatable, (:) private interface compute_d2Tgc private pure subroutine compute_d2Tgc_bspline_3d_scalar(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_d2Tgc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) real(kind=rk), intent(out), allocatable :: f_d2Tgc (:,:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:) private pure subroutine compute_d2Tgc_bspline_3d_vector(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_ng, f_d2Tgc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) integer, intent(in) :: f_ng (3) real(kind=rk), intent(out), allocatable :: f_d2Tgc (:,:,:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:,:) private pure subroutine compute_d2Tgc_nurbs_3d_scalar(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_Wc, f_d2Tgc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) real(kind=rk), intent(in), contiguous :: f_Wc (:) real(kind=rk), intent(out), allocatable :: f_d2Tgc (:,:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:) private pure subroutine compute_d2Tgc_nurbs_3d_vector(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_ng, f_Wc, f_d2Tgc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) integer, intent(in) :: f_ng (3) real(kind=rk), intent(in), contiguous :: f_Wc (:) real(kind=rk), intent(out), allocatable :: f_d2Tgc (:,:,:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:,:) private interface compute_dTgc private pure subroutine compute_dTgc_bspline_3d_scalar(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:) private pure subroutine compute_dTgc_bspline_3d_vector(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_ng, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) integer, intent(in) :: f_ng (3) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:,:) private pure subroutine compute_dTgc_nurbs_3d_scalar(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_Wc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) real(kind=rk), intent(in), contiguous :: f_Wc (:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:) private pure subroutine compute_dTgc_nurbs_3d_vector(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_ng, f_Wc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) real(kind=rk), intent(in), contiguous :: f_knot3 (:) integer, intent(in) :: f_degree (3) integer, intent(in) :: f_nc (3) integer, intent(in) :: f_ng (3) real(kind=rk), intent(in), contiguous :: f_Wc (:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:,:) interface private pure function nearest_point_help_3d(f_ng, f_Xg, f_point_Xg) result(f_distances) Arguments Type Intent Optional Attributes Name integer, intent(in) :: f_ng (3) real(kind=rk), intent(in), contiguous :: f_Xg (:,:) real(kind=rk), intent(in), contiguous :: f_point_Xg (:) Return Value real(kind=rk), allocatable, (:) Derived Types type, public :: nurbs_volume Components Type Visibility Attributes Name Initial real(kind=rk), private, allocatable :: Wc (:) Weights for the control points (1D array: [nc(1) nc(2) nc(3)]) real(kind=rk), private, allocatable :: Xc (:,:) Control points (2D array: [nc(1) nc(2) nc(3), dim]) real(kind=rk), private, allocatable :: Xg (:,:) Geometry points (2D array: [ng(1) ng(2) ng(3), dim]) real(kind=rk), private, allocatable :: Xt (:,:) Evaluation parameter values (2D array: [ng(1) ng(2) ng(3), dim] real(kind=rk), private, allocatable :: Xt1 (:) Evaluation parameter values in the first direction (1D array: [ng(1)]) real(kind=rk), private, allocatable :: Xt2 (:) Evaluation parameter values in the second direction (1D array: [ng(2)]) real(kind=rk), private, allocatable :: Xt3 (:) Evaluation parameter values in the third direction (1D array: [ng(3)]) integer, private :: degree (3) Degree (order) of the volume integer, private, allocatable :: elemConn (:,:) IGA element connectivity integer, private, allocatable :: elemConn_Xc_vis (:,:) Connectivity for visualization of control points integer, private, allocatable :: elemConn_Xg_vis (:,:) Connectivity for visualization of geometry points real(kind=rk), private, allocatable :: knot1 (:) Knot vector in the first direction (1D array) real(kind=rk), private, allocatable :: knot2 (:) Knot vector in the second direction (1D array) real(kind=rk), private, allocatable :: knot3 (:) Knot vector in the third direction (1D array) 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 generic, public :: basis => basis_vector , basis_scalar Compute the basis functions of the NURBS volume Read more… procedure, public :: cmp_Xg Compute geometry points Read more… procedure, public :: cmp_degree Compute degree of the NURBS volume Read more… procedure, public :: cmp_degreeFace Compute degrees of the faces Read more… procedure, public :: cmp_elem Generate IGA element connectivity Read more… procedure, public :: cmp_elemFace Compute faces of the IGA elements Read more… procedure, public :: cmp_elemFace_Xc_vis Compute faces of the control points Read more… procedure, public :: cmp_elemFace_Xg_vis Compute faces of the geometry points Read more… procedure, public :: cmp_elem_Xc_vis Generate connectivity for control points Read more… procedure, public :: cmp_elem_Xg_vis Generate connectivity for geometry points Read more… procedure, public :: cmp_nc Compute number of required control points Read more… procedure, public :: create Generate geometry points Read more… generic, public :: derivative => derivative_vector , derivative_scalar Compute the derivative of the NURBS volume Read more… generic, public :: derivative2 => derivative2_vector , derivative2_scalar Compute the second derivative of the NURBS volume Read more… procedure, public :: elevate_degree Elevate the degree of the NURBS volume 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 volume object Read more… generic, public :: get_Wc => get_Wc_all , get_Wci Get weights Read more… generic, public :: get_Xc => get_Xc_all , get_Xci , get_Xcid Get control points Read more… generic, public :: get_Xg => get_Xg_all , get_Xgi , get_Xgid Get geometry points Read more… procedure, public :: get_Xt Get parameter values Read more… procedure, public :: get_continuity Compute and return the continuity of the NURBS volume Read more… generic, public :: get_degree => get_degree_all , get_degree_dir Get degree of the NURBS volume Read more… procedure, public :: get_elem Get IGA element connectivity Read more… procedure, public :: get_elem_Xc_vis Get connectivity for control points Read more… procedure, public :: get_elem_Xg_vis Get connectivity for geometry points Read more… generic, public :: get_knot => get_knoti , get_knot_all Get knot vector Read more… procedure, public :: get_multiplicity Compute and return the multiplicity of the knots Read more… procedure, public :: get_ng Get number of geometry points Read more… procedure, public :: insert_knots Insert knots into the knot vector Read more… procedure, public :: is_rational Check if the NURBS volume is rational Read more… procedure, public :: modify_Wc Modify weights Read more… procedure, public :: modify_Xc Modify control points Read more… procedure, public :: nearest_point Find the nearest point on the NURBS volume (Approximation) Read more… procedure, public :: nearest_point2 Find the nearest point on the NURBS volume (Minimization - Newton's method) Read more… procedure, public :: put_to_nurbs Put a shape to a NURBS volume Read more… procedure, public :: remove_knots Remove knots from the knot vector Read more… procedure, public :: rotate_Xc Rotate control points Read more… procedure, public :: rotate_Xg Rotate geometry points Read more… generic, public :: set => set1 , set2 , set3 Set NURBS volume Read more… procedure, public :: set1 Set knot vectors, control points and weights for the NURBS volume object Read more… procedure, public :: set2 Set NURBS volume using nodes of parameter space, degree, continuity, control points and weights Read more… procedure, public :: set3 Set Bezier or Rational Bezier volume using control points and weights Read more… procedure, public :: set_C Set a C-shape Read more… procedure, public :: set_elem Set IGA element connectivity Read more… procedure, public :: set_elem_Xc_vis Set connectivity for control points Read more… procedure, public :: set_elem_Xg_vis Set connectivity for geometry points Read more… procedure, public :: set_half_ring Set a half ring Read more… procedure, public :: set_hexahedron Set a hexahedron Read more… procedure, public :: set_ring Set a ring Read more… procedure, public :: show Show the NURBS object using PyVista Read more… procedure, public :: translate_Xc Translate control points Read more… procedure, public :: translate_Xg Translate geometry points Read more… procedure, private :: basis_scalar Compute the basis functions of the NURBS volume Read more… procedure, private :: basis_vector Compute the basis functions of the NURBS volume Read more… procedure, private :: derivative2_scalar Compute the second derivative of the NURBS volume Read more… procedure, private :: derivative2_vector Compute the second derivative of the NURBS volume Read more… procedure, private :: derivative_scalar Compute the derivative of the NURBS volume Read more… procedure, private :: derivative_vector Compute the derivative of the NURBS volume Read more… procedure, private :: get_Wc_all Get all weights Read more… procedure, private :: get_Wci Get i-th weight Read more… procedure, private :: get_Xc_all Get all control points Read more… procedure, private :: get_Xci Get i-th control point Read more… procedure, private :: get_Xcid Get i-th control point in a specific direction Read more… procedure, private :: get_Xg_all Get all geometry points Read more… procedure, private :: get_Xgi Get i-th geometry point Read more… procedure, private :: get_Xgid Get i-th geometry point in a specific direction Read more… procedure, private :: get_degree_all Get degree of the NURBS volume in all directions Read more… procedure, private :: get_degree_dir Get degree of the NURBS volume in a specific direction Read more… procedure, private :: get_knot_all Get all knot vectors Read more… procedure, private :: get_knoti Get i-th knot value Read more… Functions private pure function cmp_Xg (this, Xt) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this real(kind=rk), intent(in), contiguous :: Xt (:) Return Value real(kind=rk), allocatable, (:) private pure function cmp_degreeFace (this, face) result(degree) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: face Return Value integer, (3) private pure function cmp_elem (this) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value integer, allocatable, (:,:) private pure function cmp_elemFace (this, elem, face) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause number of nodes in each direction Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: elem integer, intent(in) :: face Return Value integer, allocatable, (:) private pure function cmp_elemFace_Xc_vis (this, elem, face) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause number of nodes in each direction Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: elem integer, intent(in) :: face Return Value integer, allocatable, (:) private pure function cmp_elemFace_Xg_vis (this, elem, face) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause number of nodes in each direction Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: elem integer, intent(in) :: face Return Value integer, allocatable, (:) private pure function cmp_elem_Xc_vis (this, p) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in), optional, contiguous :: p (:) Return Value integer, allocatable, (:,:) private pure function cmp_elem_Xg_vis (this, p) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in), optional, contiguous :: p (:) Return Value integer, allocatable, (:,:) private pure function get_Wc_all (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_Wci (this, n) result(Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk) private pure function get_Xc_all (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_Xci (this, n) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk), allocatable, (:) private pure function get_Xcid (this, n, dir) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: n integer, intent(in) :: dir Return Value real(kind=rk) private pure function get_Xg_all (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_Xgi (this, n) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk), allocatable, (:) private pure function get_Xgid (this, n, dir) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: n integer, intent(in) :: dir Return Value real(kind=rk) 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_degree_all (this) result(degree) 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_degree_dir (this, dir) result(degree) 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_elem (this) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value integer, allocatable, (:,:) private pure function get_elem_Xc_vis (this) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value integer, allocatable, (:,:) private pure function get_elem_Xg_vis (this) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value integer, allocatable, (:,:) private pure function get_knot_all (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_knoti (this, dir, i) 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 integer, intent(in) :: i Return Value real(kind=rk) 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 is_rational (this) result(r) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value logical Subroutines private pure subroutine basis_scalar (this, Xt, Tgc) 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), contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: Tgc (:) private pure subroutine basis_vector (this, res1, res2, res3, Xt1, Xt2, Xt3, Tgc) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(in), optional, contiguous :: Xt3 (:) real(kind=rk), intent(out), allocatable :: Tgc (:,:) private pure subroutine cmp_degree (this, dir) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), optional :: dir private pure subroutine cmp_nc (this, dir) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), optional :: dir private pure subroutine create (this, res1, res2, res3, Xt1, Xt2, Xt3, Xt) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(in), optional, contiguous :: Xt3 (:) real(kind=rk), intent(in), optional, contiguous :: Xt (:,:) private pure subroutine derivative2_scalar (this, Xt, d2Tgc, dTgc, Tgc) 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), contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:) real(kind=rk), intent(out), optional, allocatable :: dTgc (:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:) private pure subroutine derivative2_vector (this, res1, res2, res3, Xt1, Xt2, Xt3, d2Tgc, dTgc, Tgc) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(in), optional, contiguous :: Xt3 (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:,:) real(kind=rk), intent(out), optional, allocatable :: dTgc (:,:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:,:) private pure subroutine derivative_scalar (this, Xt, dTgc, Tgc) 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), contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: dTgc (:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:) private pure subroutine derivative_vector (this, res1, res2, res3, Xt1, Xt2, Xt3, dTgc, Tgc) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(in), optional, contiguous :: Xt3 (:) real(kind=rk), intent(out), allocatable :: dTgc (:,:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:,:) private pure subroutine elevate_degree (this, dir, t) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in) :: dir integer, intent(in) :: t 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 insert_knots (this, dir, Xth, r) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in) :: dir real(kind=rk), intent(in), contiguous :: Xth (:) integer, intent(in), contiguous :: r (:) 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 nearest_point (this, point_Xg, nearest_Xg, nearest_Xt, id) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this real(kind=rk), intent(in) :: point_Xg (:) real(kind=rk), intent(out), optional, allocatable :: nearest_Xg (:) real(kind=rk), intent(out), optional, allocatable :: nearest_Xt (:) integer, intent(out), optional :: id private impure subroutine nearest_point2 (this, point_Xg, tol, maxit, nearest_Xt, nearest_Xg) 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) :: point_Xg (:) real(kind=rk), intent(in) :: tol integer, intent(in) :: maxit real(kind=rk), intent(out) :: nearest_Xt (3) real(kind=rk), intent(out), optional, allocatable :: nearest_Xg (:) private pure subroutine put_to_nurbs (this, X, elemConn) 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), contiguous :: X (:,:) integer, intent(in), contiguous :: elemConn (:,:) private pure subroutine remove_knots (this, dir, Xth, r) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in) :: dir real(kind=rk), intent(in), contiguous :: Xth (:) integer, intent(in), contiguous :: r (:) private pure subroutine rotate_Xc (this, alpha, beta, theta) 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) :: alpha real(kind=rk), intent(in) :: beta real(kind=rk), intent(in) :: theta private pure subroutine rotate_Xg (this, alpha, beta, theta) 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) :: alpha real(kind=rk), intent(in) :: beta real(kind=rk), intent(in) :: theta 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 volume object. Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) real(kind=rk), intent(in), contiguous :: knot3 (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) private pure subroutine set2 (this, Xth_dir1, Xth_dir2, Xth_dir3, degree, continuity1, continuity2, continuity3, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the NURBS volume object. Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: Xth_dir1 (:) real(kind=rk), intent(in), contiguous :: Xth_dir2 (:) real(kind=rk), intent(in), contiguous :: Xth_dir3 (:) integer, intent(in), contiguous :: degree (:) integer, intent(in), contiguous :: continuity1 (:) integer, intent(in), contiguous :: continuity2 (:) integer, intent(in), contiguous :: continuity3 (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) private pure subroutine set3 (this, nc, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set Bezier or Rational Bezier volume using control points and weights. Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), contiguous :: nc (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) private pure subroutine set_C (this, center, radius1, radius2, length) 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), contiguous :: center (:) real(kind=rk), intent(in) :: radius1 real(kind=rk), intent(in) :: radius2 real(kind=rk), intent(in) :: length private pure subroutine set_elem (this, elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:) private pure subroutine set_elem_Xc_vis (this, elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:) private pure subroutine set_elem_Xg_vis (this, elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:) private pure subroutine set_half_ring (this, center, radius1, radius2, length) 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), contiguous :: center (:) real(kind=rk), intent(in) :: radius1 real(kind=rk), intent(in) :: radius2 real(kind=rk), intent(in) :: length private pure subroutine set_hexahedron (this, L, nc, Wc) 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), contiguous :: L (:) integer, intent(in), contiguous :: nc (:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) private pure subroutine set_ring (this, center, radius1, radius2, length) 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), contiguous :: center (:) real(kind=rk), intent(in) :: radius1 real(kind=rk), intent(in) :: radius2 real(kind=rk), intent(in) :: length private impure subroutine show (this, vtkfile_Xc, vtkfile_Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this character(len=*), intent(in) :: vtkfile_Xc character(len=*), intent(in) :: vtkfile_Xg private pure subroutine translate_Xc (this, vec) 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) :: vec (:) private pure subroutine translate_Xg (this, vec) 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) :: vec (:)","tags":"","loc":"module/forcad_nurbs_volume.html"},{"title":"forcad – ForCAD","text":"Uses forcad_utils forcad_nurbs_volume forcad_nurbs_surface forcad_nurbs_curve module~~forcad~~UsesGraph module~forcad forcad 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_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~example1_curve example1_curve program~example1_curve->module~forcad program~example3_surface example3_surface program~example3_surface->module~forcad program~example3_volume example3_volume program~example3_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 program~example_ppm1 example_ppm1 program~example_ppm1->module~forcad program~example_ppm2 example_ppm2 program~example_ppm2->module~forcad program~example_ppm3 example_ppm3 program~example_ppm3->module~forcad program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->module~forcad program~nearest_point_1d nearest_point_1d program~nearest_point_1d->module~forcad program~nearest_point_2d nearest_point_2d program~nearest_point_2d->module~forcad program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->module~forcad program~nearest_point_3d nearest_point_3d program~nearest_point_3d->module~forcad program~shape_c_1d shape_C_1d program~shape_c_1d->module~forcad program~shape_c_2d shape_C_2d program~shape_c_2d->module~forcad program~shape_c_3d shape_C_3d program~shape_c_3d->module~forcad program~shape_circle shape_circle program~shape_circle->module~forcad program~shape_half_circle shape_half_circle program~shape_half_circle->module~forcad program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->module~forcad program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->module~forcad program~shape_hexahedron shape_hexahedron program~shape_hexahedron->module~forcad program~shape_ring_2d shape_ring_2d program~shape_ring_2d->module~forcad program~shape_ring_3d shape_ring_3d program~shape_ring_3d->module~forcad program~shape_tetragon shape_tetragon program~shape_tetragon->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_surface – ForCAD","text":"This module defines the 'nurbs_surface' type for representing a Non-Uniform Rational B-Spline (NURBS) surface. 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~example1_curve example1_curve program~example1_curve->module~forcad program~example3_surface example3_surface program~example3_surface->module~forcad program~example3_volume example3_volume program~example3_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 program~example_ppm1 example_ppm1 program~example_ppm1->module~forcad program~example_ppm2 example_ppm2 program~example_ppm2->module~forcad program~example_ppm3 example_ppm3 program~example_ppm3->module~forcad program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->module~forcad program~nearest_point_1d nearest_point_1d program~nearest_point_1d->module~forcad program~nearest_point_2d nearest_point_2d program~nearest_point_2d->module~forcad program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->module~forcad program~nearest_point_3d nearest_point_3d program~nearest_point_3d->module~forcad program~shape_c_1d shape_C_1d program~shape_c_1d->module~forcad program~shape_c_2d shape_C_2d program~shape_c_2d->module~forcad program~shape_c_3d shape_C_3d program~shape_c_3d->module~forcad program~shape_circle shape_circle program~shape_circle->module~forcad program~shape_half_circle shape_half_circle program~shape_half_circle->module~forcad program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->module~forcad program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->module~forcad program~shape_hexahedron shape_hexahedron program~shape_hexahedron->module~forcad program~shape_ring_2d shape_ring_2d program~shape_ring_2d->module~forcad program~shape_ring_3d shape_ring_3d program~shape_ring_3d->module~forcad program~shape_tetragon shape_tetragon program~shape_tetragon->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. Interfaces private interface compute_Tgc private pure function compute_Tgc_bspline_2d_scalar(f_Xt, f_knot1, f_knot2, f_degree, f_nc) result(f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: f_nc (2) Return Value real(kind=rk), allocatable, (:) private pure function compute_Tgc_bspline_2d_vector(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_ng) result(f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: f_nc (2) integer, intent(in) :: f_ng (2) Return Value real(kind=rk), allocatable, (:,:) private pure function compute_Tgc_nurbs_2d_scalar(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_Wc) result(f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: f_nc (2) real(kind=rk), intent(in), contiguous :: f_Wc (:) Return Value real(kind=rk), allocatable, (:) private pure function compute_Tgc_nurbs_2d_vector(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_ng, f_Wc) result(f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: f_nc (2) integer, intent(in) :: f_ng (2) real(kind=rk), intent(in), contiguous :: f_Wc (:) Return Value real(kind=rk), allocatable, (:,:) private interface compute_Xg private pure function compute_Xg_bspline_2d(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_ng, f_Xc) result(f_Xg) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: f_nc (2) integer, intent(in) :: f_ng (2) real(kind=rk), intent(in), contiguous :: f_Xc (:,:) Return Value real(kind=rk), allocatable, (:,:) private pure function compute_Xg_bspline_2d_1point(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_Xc) result(f_Xg) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: f_nc (2) real(kind=rk), intent(in), contiguous :: f_Xc (:,:) Return Value real(kind=rk), allocatable, (:) private pure function compute_Xg_nurbs_2d(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_ng, f_Xc, f_Wc) result(f_Xg) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: f_nc (2) integer, intent(in) :: f_ng (2) real(kind=rk), intent(in), contiguous :: f_Xc (:,:) real(kind=rk), intent(in), contiguous :: f_Wc (:) Return Value real(kind=rk), allocatable, (:,:) private pure function compute_Xg_nurbs_2d_1point(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_Xc, f_Wc) result(f_Xg) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: f_nc (2) real(kind=rk), intent(in), contiguous :: f_Xc (:,:) real(kind=rk), intent(in), contiguous :: f_Wc (:) Return Value real(kind=rk), allocatable, (:) private interface compute_d2Tgc private pure subroutine compute_d2Tgc_bspline_2d_scalar(f_Xt, f_knot1, f_knot2, f_degree, nc, f_d2Tgc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: nc (2) real(kind=rk), intent(out), allocatable :: f_d2Tgc (:,:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:) private pure subroutine compute_d2Tgc_bspline_2d_vector(f_Xt, f_knot1, f_knot2, f_degree, nc, f_ng, f_d2Tgc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: nc (2) integer, intent(in) :: f_ng (2) real(kind=rk), intent(out), allocatable :: f_d2Tgc (:,:,:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:,:) private pure subroutine compute_d2Tgc_nurbs_2d_scalar(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_Wc, f_d2Tgc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: f_nc (2) real(kind=rk), intent(in), contiguous :: f_Wc (:) real(kind=rk), intent(out), allocatable :: f_d2Tgc (:,:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:) private pure subroutine compute_d2Tgc_nurbs_2d_vector(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_ng, f_Wc, f_d2Tgc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: f_nc (2) integer, intent(in) :: f_ng (2) real(kind=rk), intent(in), contiguous :: f_Wc (:) real(kind=rk), intent(out), allocatable :: f_d2Tgc (:,:,:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:,:) private interface compute_dTgc private pure subroutine compute_dTgc_bspline_2d_scalar(f_Xt, f_knot1, f_knot2, f_degree, nc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: nc (2) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:) private pure subroutine compute_dTgc_bspline_2d_vector(f_Xt, f_knot1, f_knot2, f_degree, nc, f_ng, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: nc (2) integer, intent(in) :: f_ng (2) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:,:) private pure subroutine compute_dTgc_nurbs_2d_scalar(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_Wc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: f_nc (2) real(kind=rk), intent(in), contiguous :: f_Wc (:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:) private pure subroutine compute_dTgc_nurbs_2d_vector(f_Xt, f_knot1, f_knot2, f_degree, f_nc, f_ng, f_Wc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:,:) real(kind=rk), intent(in), contiguous :: f_knot1 (:) real(kind=rk), intent(in), contiguous :: f_knot2 (:) integer, intent(in) :: f_degree (2) integer, intent(in) :: f_nc (2) integer, intent(in) :: f_ng (2) real(kind=rk), intent(in), contiguous :: f_Wc (:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:,:) interface private pure function nearest_point_help_2d(f_ng, f_Xg, f_point_Xg) result(f_distances) Arguments Type Intent Optional Attributes Name integer, intent(in) :: f_ng (2) real(kind=rk), intent(in), contiguous :: f_Xg (:,:) real(kind=rk), intent(in), contiguous :: f_point_Xg (:) Return Value real(kind=rk), allocatable, (:) Derived Types type, public :: nurbs_surface Components Type Visibility Attributes Name Initial real(kind=rk), private, allocatable :: Wc (:) Weights for control points (1D array: [nc(1)*nc(2)]) real(kind=rk), private, allocatable :: Xc (:,:) Control points (2D array: [nc(1)*nc(2), dim]) real(kind=rk), private, allocatable :: Xg (:,:) Geometry points (2D array: [ng(1)*ng(2), dim]) real(kind=rk), private, allocatable :: Xt (:,:) Evaluation parameter values (2D array: [ng(1)*ng(2), 2]) real(kind=rk), private, allocatable :: Xt1 (:) Evaluation parameter values in the first direction (1D array: [ng(1)]) real(kind=rk), private, allocatable :: Xt2 (:) Evaluation parameter values in the second direction (1D array: [ng(2)]) integer, private :: degree (2) Degree (order) of the surface integer, private, allocatable :: elemConn (:,:) IGA element connectivity integer, private, allocatable :: elemConn_Xc_vis (:,:) Connectivity for visualization of control points integer, private, allocatable :: elemConn_Xg_vis (:,:) Connectivity for visualization of geometry points real(kind=rk), private, allocatable :: knot1 (:) Knot vector in the first direction (1D array) real(kind=rk), private, allocatable :: knot2 (:) Knot vector in the second direction (1D array) 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 generic, public :: basis => basis_vector , basis_scalar Compute the basis functions of the NURBS surface Read more… procedure, public :: cmp_Xg Compute geometry points Read more… procedure, public :: cmp_degree Compute degree of the NURBS surface Read more… procedure, public :: cmp_elem Generate IGA element connectivity Read more… procedure, public :: cmp_elem_Xc_vis Generate connectivity for control points Read more… procedure, public :: cmp_elem_Xg_vis Generate connectivity for geometry points Read more… procedure, public :: cmp_nc Compute number of required control points Read more… procedure, public :: create Generate geometry points Read more… generic, public :: derivative => derivative_vector , derivative_scalar Compute the derivative of the NURBS surface Read more… generic, public :: derivative2 => derivative2_vector , derivative2_scalar Compute the second derivative of the NURBS surface Read more… procedure, public :: elevate_degree Elevate degree 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… generic, public :: get_Wc => get_Wc_all , get_Wci Get weights Read more… generic, public :: get_Xc => get_Xc_all , get_Xci , get_Xcid Get control points Read more… generic, public :: get_Xg => get_Xg_all , get_Xgi , get_Xgid Get geometry points Read more… procedure, public :: get_Xt Get parameter values Read more… procedure, public :: get_continuity Compute and return the continuity of the NURBS surface Read more… generic, public :: get_degree => get_degree_all , get_degree_dir Get degree of the NURBS surface Read more… procedure, public :: get_elem Get IGA element connectivity Read more… procedure, public :: get_elem_Xc_vis Get connectivity for control points Read more… procedure, public :: get_elem_Xg_vis Get connectivity for geometry points Read more… generic, public :: get_knot => get_knoti , get_knot_all Get knot vector Read more… procedure, public :: get_multiplicity Compute and return the multiplicity of the knot vector 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 :: insert_knots Insert knots into the knot vector Read more… procedure, public :: is_rational Check if the NURBS surface is rational Read more… procedure, public :: modify_Wc Modify weights Read more… procedure, public :: modify_Xc Modify control points Read more… procedure, public :: nearest_point Find the nearest point on the NURBS surface (Approximation) Read more… procedure, public :: nearest_point2 Find the nearest point on the NURBS surface (Minimization - Newton's method) Read more… procedure, public :: remove_knots Remove knots from the knot vector Read more… procedure, public :: rotate_Xc Rotate control points Read more… procedure, public :: rotate_Xg Rotate geometry points Read more… generic, public :: set => set1 , set2 , set3 Set NURBS surface Read more… procedure, public :: set1 Set knot vectors, control points and weights for the NURBS surface object Read more… procedure, public :: set2 Set NURBS surface using nodes of parameter space, degree, continuity, control points and weights Read more… procedure, public :: set3 Set Bezier or Rational Bezier surface using control points and weights Read more… procedure, public :: set_C Set a C-shape Read more… procedure, public :: set_elem Set IGA element connectivity Read more… procedure, public :: set_elem_Xc_vis Set connectivity for control points Read more… procedure, public :: set_elem_Xg_vis Set connectivity for geometry points Read more… procedure, public :: set_half_ring Set a half ring Read more… procedure, public :: set_ring Set a ring Read more… procedure, public :: set_tetragon Set a tetragon Read more… procedure, public :: show Show the NURBS object using PyVista Read more… procedure, public :: translate_Xc Translate control points Read more… procedure, public :: translate_Xg Translate geometry points Read more… procedure, private :: basis_scalar Compute the basis functions of the NURBS surface Read more… procedure, private :: basis_vector Compute the basis functions of the NURBS surface Read more… procedure, private :: derivative2_scalar Compute the second derivative of the NURBS surface Read more… procedure, private :: derivative2_vector Compute the second derivative of the NURBS surface Read more… procedure, private :: derivative_scalar Compute the derivative of the NURBS surface Read more… procedure, private :: derivative_vector Compute the derivative of the NURBS surface Read more… procedure, private :: get_Wc_all Get all weights Read more… procedure, private :: get_Wci Get i-th weight Read more… procedure, private :: get_Xc_all Get all control points Read more… procedure, private :: get_Xci Get i-th control point Read more… procedure, private :: get_Xcid Get i-th control point in a specific direction Read more… procedure, private :: get_Xg_all Get all geometry points Read more… procedure, private :: get_Xgi Get i-th geometry point Read more… procedure, private :: get_Xgid Get i-th geometry point in a specific direction Read more… procedure, private :: get_degree_all Get degree of the NURBS surface in both directions Read more… procedure, private :: get_degree_dir Get degree of the NURBS surface in a specific direction Read more… procedure, private :: get_knot_all Get all knot vectors Read more… procedure, private :: get_knoti Get i-th knot value Read more… Functions private pure function cmp_Xg (this, Xt) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this real(kind=rk), intent(in), contiguous :: Xt (:) Return Value real(kind=rk), allocatable, (:) private pure function cmp_elem (this) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value integer, allocatable, (:,:) private pure function cmp_elem_Xc_vis (this, p) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in), optional, contiguous :: p (:) Return Value integer, allocatable, (:,:) private pure function cmp_elem_Xg_vis (this, p) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in), optional, contiguous :: p (:) Return Value integer, allocatable, (:,:) private pure function get_Wc_all (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_Wci (this, n) result(Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk) private pure function get_Xc_all (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_Xci (this, n) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk), allocatable, (:) private pure function get_Xcid (this, n, dir) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: n integer, intent(in) :: dir Return Value real(kind=rk) private pure function get_Xg_all (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_Xgi (this, n) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk), allocatable, (:) private pure function get_Xgid (this, n, dir) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: n integer, intent(in) :: dir Return Value real(kind=rk) 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_degree_all (this) result(degree) 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_degree_dir (this, dir) result(degree) 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_elem (this) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value integer, allocatable, (:,:) private pure function get_elem_Xc_vis (this) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value integer, allocatable, (:,:) private pure function get_elem_Xg_vis (this) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value integer, allocatable, (:,:) private pure function get_knot_all (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_knoti (this, dir, i) 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 integer, intent(in) :: i Return Value real(kind=rk) 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 is_rational (this) result(r) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value logical Subroutines private pure subroutine basis_scalar (this, Xt, Tgc) 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) :: Xt (:) real(kind=rk), intent(out), allocatable :: Tgc (:) private pure subroutine basis_vector (this, res1, res2, Xt1, Xt2, Tgc) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(out), allocatable :: Tgc (:,:) private pure subroutine cmp_degree (this, dir) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), optional :: dir private pure subroutine cmp_nc (this, dir) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), optional :: dir private pure subroutine create (this, res1, res2, Xt1, Xt2, Xt) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(in), optional, contiguous :: Xt (:,:) private pure subroutine derivative2_scalar (this, Xt, d2Tgc, dTgc, Tgc) 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), contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:) real(kind=rk), intent(out), optional, allocatable :: dTgc (:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:) private pure subroutine derivative2_vector (this, res1, res2, Xt1, Xt2, d2Tgc, dTgc, Tgc) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:,:) real(kind=rk), intent(out), optional, allocatable :: dTgc (:,:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:,:) private pure subroutine derivative_scalar (this, Xt, dTgc, Tgc) 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), contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: dTgc (:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:) private pure subroutine derivative_vector (this, res1, res2, Xt1, Xt2, dTgc, Tgc) 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, contiguous :: Xt1 (:) real(kind=rk), intent(in), optional, contiguous :: Xt2 (:) real(kind=rk), intent(out), allocatable :: dTgc (:,:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:,:) private pure subroutine elevate_degree (this, dir, t) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in) :: dir integer, intent(in) :: t 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 insert_knots (this, dir, Xth, r) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in) :: dir real(kind=rk), intent(in), contiguous :: Xth (:) integer, intent(in), contiguous :: r (:) 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 nearest_point (this, point_Xg, nearest_Xg, nearest_Xt, id) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this real(kind=rk), intent(in) :: point_Xg (:) real(kind=rk), intent(out), optional, allocatable :: nearest_Xg (:) real(kind=rk), intent(out), optional, allocatable :: nearest_Xt (:) integer, intent(out), optional :: id private impure subroutine nearest_point2 (this, point_Xg, tol, maxit, nearest_Xt, nearest_Xg) 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) :: point_Xg (:) real(kind=rk), intent(in) :: tol integer, intent(in) :: maxit real(kind=rk), intent(out) :: nearest_Xt (2) real(kind=rk), intent(out), optional, allocatable :: nearest_Xg (:) private pure subroutine remove_knots (this, dir, Xth, r) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in) :: dir real(kind=rk), intent(in), contiguous :: Xth (:) integer, intent(in), contiguous :: r (:) private pure subroutine rotate_Xc (this, alpha, beta, theta) 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) :: alpha real(kind=rk), intent(in) :: beta real(kind=rk), intent(in) :: theta private pure subroutine rotate_Xg (this, alpha, beta, theta) 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) :: alpha real(kind=rk), intent(in) :: beta real(kind=rk), intent(in) :: theta private pure subroutine set1 (this, knot1, knot2, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set knot vectors, 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), contiguous :: knot1 (:) real(kind=rk), intent(in), contiguous :: knot2 (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) private pure subroutine set2 (this, Xth_dir1, Xth_dir2, degree, continuity1, continuity2, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set NURBS surface using nodes of parameter space, degree, continuity, control points and weights Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: Xth_dir1 (:) real(kind=rk), intent(in), contiguous :: Xth_dir2 (:) integer, intent(in), contiguous :: degree (:) integer, intent(in), contiguous :: continuity1 (:) integer, intent(in), contiguous :: continuity2 (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) private pure subroutine set3 (this, nc, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set Bezier or Rational Bezier surface using control points and weights. Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), contiguous :: nc (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) private pure subroutine set_C (this, center, radius1, radius2) 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), contiguous :: center (:) real(kind=rk), intent(in) :: radius1 real(kind=rk), intent(in) :: radius2 private pure subroutine set_elem (this, elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:) private pure subroutine set_elem_Xc_vis (this, elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:) private pure subroutine set_elem_Xg_vis (this, elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:) private pure subroutine set_half_ring (this, center, radius1, radius2) 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), contiguous :: center (:) real(kind=rk), intent(in) :: radius1 real(kind=rk), intent(in) :: radius2 private pure subroutine set_ring (this, center, radius1, radius2) 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), contiguous :: center (:) real(kind=rk), intent(in) :: radius1 real(kind=rk), intent(in) :: radius2 private pure subroutine set_tetragon (this, L, nc, Wc) 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) :: L (2) integer, intent(in) :: nc (2) real(kind=rk), intent(in), optional, contiguous :: Wc (:) private impure subroutine show (this, vtkfile_Xc, vtkfile_Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this character(len=*), intent(in) :: vtkfile_Xc character(len=*), intent(in) :: vtkfile_Xg private pure subroutine translate_Xc (this, vec) 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) :: vec (:) private pure subroutine translate_Xg (this, vec) 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) :: vec (:)","tags":"","loc":"module/forcad_nurbs_surface.html"},{"title":"forcad_utils – ForCAD","text":"This module contains parameters, functions and subroutines that are used in the library. Used by module~~forcad_utils~~UsedByGraph module~forcad_utils forcad_utils module~forcad forcad module~forcad->module~forcad_utils 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_nurbs_curve->module~forcad_utils module~forcad_nurbs_surface->module~forcad_utils module~forcad_nurbs_volume->module~forcad_utils proc~compute_d2tgc_bspline_1d_scalar compute_d2Tgc_bspline_1d_scalar proc~compute_d2tgc_bspline_1d_scalar->module~forcad_utils proc~compute_d2tgc_bspline_1d_vector compute_d2Tgc_bspline_1d_vector proc~compute_d2tgc_bspline_1d_vector->module~forcad_utils proc~compute_d2tgc_bspline_2d_scalar compute_d2Tgc_bspline_2d_scalar proc~compute_d2tgc_bspline_2d_scalar->module~forcad_utils proc~compute_d2tgc_bspline_2d_vector compute_d2Tgc_bspline_2d_vector proc~compute_d2tgc_bspline_2d_vector->module~forcad_utils proc~compute_d2tgc_bspline_3d_scalar compute_d2Tgc_bspline_3d_scalar proc~compute_d2tgc_bspline_3d_scalar->module~forcad_utils proc~compute_d2tgc_bspline_3d_vector compute_d2Tgc_bspline_3d_vector proc~compute_d2tgc_bspline_3d_vector->module~forcad_utils proc~compute_d2tgc_nurbs_1d_scalar compute_d2Tgc_nurbs_1d_scalar proc~compute_d2tgc_nurbs_1d_scalar->module~forcad_utils proc~compute_d2tgc_nurbs_1d_vector compute_d2Tgc_nurbs_1d_vector proc~compute_d2tgc_nurbs_1d_vector->module~forcad_utils proc~compute_d2tgc_nurbs_2d_scalar compute_d2Tgc_nurbs_2d_scalar proc~compute_d2tgc_nurbs_2d_scalar->module~forcad_utils proc~compute_d2tgc_nurbs_2d_vector compute_d2Tgc_nurbs_2d_vector proc~compute_d2tgc_nurbs_2d_vector->module~forcad_utils proc~compute_d2tgc_nurbs_3d_scalar compute_d2Tgc_nurbs_3d_scalar proc~compute_d2tgc_nurbs_3d_scalar->module~forcad_utils proc~compute_d2tgc_nurbs_3d_vector compute_d2Tgc_nurbs_3d_vector proc~compute_d2tgc_nurbs_3d_vector->module~forcad_utils proc~compute_dtgc_bspline_1d_scalar compute_dTgc_bspline_1d_scalar proc~compute_dtgc_bspline_1d_scalar->module~forcad_utils proc~compute_dtgc_bspline_1d_vector compute_dTgc_bspline_1d_vector proc~compute_dtgc_bspline_1d_vector->module~forcad_utils proc~compute_dtgc_bspline_2d_scalar compute_dTgc_bspline_2d_scalar proc~compute_dtgc_bspline_2d_scalar->module~forcad_utils proc~compute_dtgc_bspline_2d_vector compute_dTgc_bspline_2d_vector proc~compute_dtgc_bspline_2d_vector->module~forcad_utils proc~compute_dtgc_bspline_3d_scalar compute_dTgc_bspline_3d_scalar proc~compute_dtgc_bspline_3d_scalar->module~forcad_utils proc~compute_dtgc_bspline_3d_vector compute_dTgc_bspline_3d_vector proc~compute_dtgc_bspline_3d_vector->module~forcad_utils proc~compute_dtgc_nurbs_1d_scalar compute_dTgc_nurbs_1d_scalar proc~compute_dtgc_nurbs_1d_scalar->module~forcad_utils proc~compute_dtgc_nurbs_1d_vector compute_dTgc_nurbs_1d_vector proc~compute_dtgc_nurbs_1d_vector->module~forcad_utils proc~compute_dtgc_nurbs_2d_scalar compute_dTgc_nurbs_2d_scalar proc~compute_dtgc_nurbs_2d_scalar->module~forcad_utils proc~compute_dtgc_nurbs_2d_vector compute_dTgc_nurbs_2d_vector proc~compute_dtgc_nurbs_2d_vector->module~forcad_utils proc~compute_dtgc_nurbs_3d_scalar compute_dTgc_nurbs_3d_scalar proc~compute_dtgc_nurbs_3d_scalar->module~forcad_utils proc~compute_dtgc_nurbs_3d_vector compute_dTgc_nurbs_3d_vector proc~compute_dtgc_nurbs_3d_vector->module~forcad_utils proc~compute_tgc_bspline_1d_scalar compute_Tgc_bspline_1d_scalar proc~compute_tgc_bspline_1d_scalar->module~forcad_utils proc~compute_tgc_bspline_1d_vector compute_Tgc_bspline_1d_vector proc~compute_tgc_bspline_1d_vector->module~forcad_utils proc~compute_tgc_bspline_2d_scalar compute_Tgc_bspline_2d_scalar proc~compute_tgc_bspline_2d_scalar->module~forcad_utils proc~compute_tgc_bspline_2d_vector compute_Tgc_bspline_2d_vector proc~compute_tgc_bspline_2d_vector->module~forcad_utils proc~compute_tgc_bspline_3d_scalar compute_Tgc_bspline_3d_scalar proc~compute_tgc_bspline_3d_scalar->module~forcad_utils proc~compute_tgc_bspline_3d_vector compute_Tgc_bspline_3d_vector proc~compute_tgc_bspline_3d_vector->module~forcad_utils proc~compute_tgc_nurbs_1d_scalar compute_Tgc_nurbs_1d_scalar proc~compute_tgc_nurbs_1d_scalar->module~forcad_utils proc~compute_tgc_nurbs_1d_vector compute_Tgc_nurbs_1d_vector proc~compute_tgc_nurbs_1d_vector->module~forcad_utils proc~compute_tgc_nurbs_2d_scalar compute_Tgc_nurbs_2d_scalar proc~compute_tgc_nurbs_2d_scalar->module~forcad_utils proc~compute_tgc_nurbs_2d_vector compute_Tgc_nurbs_2d_vector proc~compute_tgc_nurbs_2d_vector->module~forcad_utils proc~compute_tgc_nurbs_3d_scalar compute_Tgc_nurbs_3d_scalar proc~compute_tgc_nurbs_3d_scalar->module~forcad_utils proc~compute_tgc_nurbs_3d_vector compute_Tgc_nurbs_3d_vector proc~compute_tgc_nurbs_3d_vector->module~forcad_utils proc~compute_xg_bspline_1d compute_Xg_bspline_1d proc~compute_xg_bspline_1d->module~forcad_utils proc~compute_xg_bspline_1d_1point compute_Xg_bspline_1d_1point proc~compute_xg_bspline_1d_1point->module~forcad_utils proc~compute_xg_bspline_2d compute_Xg_bspline_2d proc~compute_xg_bspline_2d->module~forcad_utils proc~compute_xg_bspline_2d_1point compute_Xg_bspline_2d_1point proc~compute_xg_bspline_2d_1point->module~forcad_utils proc~compute_xg_bspline_3d compute_Xg_bspline_3d proc~compute_xg_bspline_3d->module~forcad_utils proc~compute_xg_bspline_3d_1point compute_Xg_bspline_3d_1point proc~compute_xg_bspline_3d_1point->module~forcad_utils proc~compute_xg_nurbs_1d compute_Xg_nurbs_1d proc~compute_xg_nurbs_1d->module~forcad_utils proc~compute_xg_nurbs_1d_1point compute_Xg_nurbs_1d_1point proc~compute_xg_nurbs_1d_1point->module~forcad_utils proc~compute_xg_nurbs_2d compute_Xg_nurbs_2d proc~compute_xg_nurbs_2d->module~forcad_utils proc~compute_xg_nurbs_2d_1point compute_Xg_nurbs_2d_1point proc~compute_xg_nurbs_2d_1point->module~forcad_utils proc~compute_xg_nurbs_3d compute_Xg_nurbs_3d proc~compute_xg_nurbs_3d->module~forcad_utils proc~compute_xg_nurbs_3d_1point compute_Xg_nurbs_3d_1point proc~compute_xg_nurbs_3d_1point->module~forcad_utils proc~nearest_point_help_1d nearest_point_help_1d proc~nearest_point_help_1d->module~forcad_utils proc~nearest_point_help_2d nearest_point_help_2d proc~nearest_point_help_2d->module~forcad_utils proc~nearest_point_help_3d nearest_point_help_3d proc~nearest_point_help_3d->module~forcad_utils program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->module~forcad_utils program~example_put_to_nurbs->module~forcad program~example1_curve example1_curve program~example1_curve->module~forcad program~example3_surface example3_surface program~example3_surface->module~forcad program~example3_volume example3_volume program~example3_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 program~example_ppm1 example_ppm1 program~example_ppm1->module~forcad program~example_ppm2 example_ppm2 program~example_ppm2->module~forcad program~example_ppm3 example_ppm3 program~example_ppm3->module~forcad program~nearest_point_1d nearest_point_1d program~nearest_point_1d->module~forcad program~nearest_point_2d nearest_point_2d program~nearest_point_2d->module~forcad program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->module~forcad program~nearest_point_3d nearest_point_3d program~nearest_point_3d->module~forcad program~shape_c_1d shape_C_1d program~shape_c_1d->module~forcad program~shape_c_2d shape_C_2d program~shape_c_2d->module~forcad program~shape_c_3d shape_C_3d program~shape_c_3d->module~forcad program~shape_circle shape_circle program~shape_circle->module~forcad program~shape_half_circle shape_half_circle program~shape_half_circle->module~forcad program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->module~forcad program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->module~forcad program~shape_hexahedron shape_hexahedron program~shape_hexahedron->module~forcad program~shape_ring_2d shape_ring_2d program~shape_ring_2d->module~forcad program~shape_ring_3d shape_ring_3d program~shape_ring_3d->module~forcad program~shape_tetragon shape_tetragon program~shape_tetragon->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 compute_multiplicity private pure function compute_multiplicity1 (knot) result(multiplicity) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: knot (:) Return Value integer, allocatable, (:) private pure function compute_multiplicity2 (knot, Xth) result(multiplicity) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: knot (:) real(kind=rk), intent(in) :: Xth Return Value integer 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, 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, 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, allocatable, (:,:) public interface elemConn_Cn private pure subroutine cmp_elemConn_Cn_L (nnode, p, Xth, vecKnot_mul, elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name integer, intent(in) :: nnode integer, intent(in) :: p real(kind=rk), intent(in), contiguous :: Xth (:) integer, intent(in), contiguous :: vecKnot_mul (:) integer, intent(out), allocatable :: elemConn (:,:) private pure subroutine cmp_elemConn_Cn_S (nnode1, nnode2, p1, p2, Xth1, Xth2, vecKnot_mul1, vecKnot_mul2, 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 real(kind=rk), intent(in), contiguous :: Xth1 (:) real(kind=rk), intent(in), contiguous :: Xth2 (:) integer, intent(in), contiguous :: vecKnot_mul1 (:) integer, intent(in), contiguous :: vecKnot_mul2 (:) integer, intent(out), allocatable :: elemConn (:,:) private pure subroutine cmp_elemConn_Cn_V (nnode1, nnode2, nnode3, p1, p2, p3, Xth1, Xth2, Xth3, vecKnot_mul1, vecKnot_mul2, vecKnot_mul3, 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 real(kind=rk), intent(in), contiguous :: Xth1 (:) real(kind=rk), intent(in), contiguous :: Xth2 (:) real(kind=rk), intent(in), contiguous :: Xth3 (:) integer, intent(in), contiguous :: vecKnot_mul1 (:) integer, intent(in), contiguous :: vecKnot_mul2 (:) integer, intent(in), contiguous :: vecKnot_mul3 (:) integer, intent(out), allocatable :: elemConn (:,:) 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), contiguous :: X_dir1 (:) real(kind=rk), intent(in), contiguous :: X_dir2 (:) real(kind=rk), intent(out), 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), contiguous :: X_dir1 (:) real(kind=rk), intent(in), contiguous :: X_dir2 (:) real(kind=rk), intent(in), contiguous :: X_dir3 (:) real(kind=rk), intent(out), allocatable :: Xt (:,:) public interface unique private pure function unique_integer (vec) result(output) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name integer, intent(in), dimension(:), contiguous :: vec Return Value integer, dimension(:), allocatable private pure function unique_real (vec) result(output) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), dimension(:), contiguous :: vec Return Value real(kind=rk), dimension(:), allocatable 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, degree) 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), contiguous :: knot (:) integer, intent(in) :: nc integer, intent(in) :: degree Return Value real(kind=rk), allocatable, (:) public pure function compute_knot_vector (Xth_dir, degree, continuity) result(knot) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: Xth_dir (:) integer, intent(in) :: degree integer, intent(in), contiguous :: continuity (:) Return Value real(kind=rk), allocatable, (:) public pure function findspan (n, degree, Xth, knot) result(s) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name integer, intent(in) :: n integer, intent(in) :: degree real(kind=rk), intent(in) :: Xth real(kind=rk), intent(in), contiguous :: knot (:) Return Value integer public pure function hexahedron_Xc (L, nc) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: L (3) integer, intent(in) :: nc (3) Return Value real(kind=rk), 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), contiguous :: u (:) real(kind=rk), intent(in), contiguous :: v (:) Return Value real(kind=rk), (size(u)*size(v)) public pure function rotation (alpha, beta, theta) result(R) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: alpha real(kind=rk), intent(in) :: beta real(kind=rk), intent(in) :: theta Return Value real(kind=rk), dimension(3,3) public pure function tetragon_Xc (L, nc) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: L (2) integer, intent(in) :: nc (2) Return Value real(kind=rk), allocatable, (:,:) private pure function bincoeff (n, k) result(b) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name integer, intent(in) :: n integer, intent(in) :: k Return Value real(kind=rk) 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, 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, 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, allocatable, (:,:) private pure function compute_multiplicity1 (knot) result(multiplicity) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: knot (:) Return Value integer, allocatable, (:) private pure function compute_multiplicity2 (knot, Xth) result(multiplicity) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: knot (:) real(kind=rk), intent(in) :: Xth Return Value integer private pure function factln (n) result(f) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name integer, intent(in) :: n Return Value real(kind=rk) private pure elemental function isinf (x) result(output) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: x Return Value logical private pure elemental function isnan (x) result(output) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: x Return Value logical 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), contiguous :: a (:) integer, intent(in), contiguous :: b (:) Return Value real(kind=rk), (sum(b)) private pure function unique_integer (vec) result(output) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name integer, intent(in), dimension(:), contiguous :: vec Return Value integer, dimension(:), allocatable private pure function unique_real (vec) result(output) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), dimension(:), contiguous :: vec Return Value real(kind=rk), dimension(:), allocatable Subroutines public pure subroutine basis_bspline_2der (Xt, knot, nc, degree, d2B, dB, 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), contiguous :: knot (:) integer, intent(in) :: nc integer, intent(in) :: degree real(kind=rk), intent(out), allocatable :: d2B (:) real(kind=rk), intent(out), optional, allocatable :: dB (:) real(kind=rk), intent(out), optional, allocatable :: B (:) public pure subroutine basis_bspline_der (Xt, knot, nc, degree, dB, 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), contiguous :: knot (:) integer, intent(in) :: nc integer, intent(in) :: degree real(kind=rk), intent(out), allocatable :: dB (:) real(kind=rk), intent(out), optional, allocatable :: B (:) public pure subroutine elevate_degree_A_5_9 (t, knot, degree, Xcw, nc_new, knot_new, Xcw_new) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name integer, intent(in) :: t real(kind=rk), intent(in), contiguous :: knot (:) integer, intent(in) :: degree real(kind=rk), intent(in), contiguous :: Xcw (:,:) integer, intent(out) :: nc_new real(kind=rk), intent(out), allocatable :: knot_new (:) real(kind=rk), intent(out), allocatable :: Xcw_new (:,:) public pure subroutine insert_knot_A_5_1 (p, UP, Pw, u, k, s, r, nq, UQ, Qw) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name integer, intent(in) :: p real(kind=rk), intent(in), contiguous :: UP (0:) real(kind=rk), intent(in), contiguous :: Pw (0:,:) real(kind=rk), intent(in) :: u integer, intent(in) :: k integer, intent(in) :: s integer, intent(in) :: r integer, intent(out) :: nq real(kind=rk), intent(out), allocatable :: UQ (:) real(kind=rk), intent(out), allocatable :: Qw (:,:) public pure subroutine remove_knots_A_5_8 (p, knot, Pw, u, r, s, num, t, knot_new, Pw_new) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name integer, intent(in) :: p real(kind=rk), intent(in), contiguous :: knot (:) real(kind=rk), intent(in), contiguous :: Pw (:,:) real(kind=rk), intent(in) :: u integer, intent(in) :: r integer, intent(in) :: s integer, intent(in) :: num integer, intent(out) :: t real(kind=rk), intent(out), allocatable :: knot_new (:) real(kind=rk), intent(out), allocatable :: Pw_new (:,:) private pure subroutine cmp_elemConn_Cn_L (nnode, p, Xth, vecKnot_mul, elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name integer, intent(in) :: nnode integer, intent(in) :: p real(kind=rk), intent(in), contiguous :: Xth (:) integer, intent(in), contiguous :: vecKnot_mul (:) integer, intent(out), allocatable :: elemConn (:,:) private pure subroutine cmp_elemConn_Cn_S (nnode1, nnode2, p1, p2, Xth1, Xth2, vecKnot_mul1, vecKnot_mul2, 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 real(kind=rk), intent(in), contiguous :: Xth1 (:) real(kind=rk), intent(in), contiguous :: Xth2 (:) integer, intent(in), contiguous :: vecKnot_mul1 (:) integer, intent(in), contiguous :: vecKnot_mul2 (:) integer, intent(out), allocatable :: elemConn (:,:) private pure subroutine cmp_elemConn_Cn_V (nnode1, nnode2, nnode3, p1, p2, p3, Xth1, Xth2, Xth3, vecKnot_mul1, vecKnot_mul2, vecKnot_mul3, 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 real(kind=rk), intent(in), contiguous :: Xth1 (:) real(kind=rk), intent(in), contiguous :: Xth2 (:) real(kind=rk), intent(in), contiguous :: Xth3 (:) integer, intent(in), contiguous :: vecKnot_mul1 (:) integer, intent(in), contiguous :: vecKnot_mul2 (:) integer, intent(in), contiguous :: vecKnot_mul3 (:) integer, intent(out), allocatable :: elemConn (:,:) 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), contiguous :: X_dir1 (:) real(kind=rk), intent(in), contiguous :: X_dir2 (:) real(kind=rk), intent(out), 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), contiguous :: X_dir1 (:) real(kind=rk), intent(in), contiguous :: X_dir2 (:) real(kind=rk), intent(in), contiguous :: X_dir3 (:) real(kind=rk), intent(out), allocatable :: Xt (:,:)","tags":"","loc":"module/forcad_utils.html"},{"title":"forcad_nurbs_curve – ForCAD","text":"This module defines the 'nurbs_curve' type for representing a Non-Uniform Rational B-Spline (NURBS) curve. 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~example1_curve example1_curve program~example1_curve->module~forcad program~example3_surface example3_surface program~example3_surface->module~forcad program~example3_volume example3_volume program~example3_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 program~example_ppm1 example_ppm1 program~example_ppm1->module~forcad program~example_ppm2 example_ppm2 program~example_ppm2->module~forcad program~example_ppm3 example_ppm3 program~example_ppm3->module~forcad program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->module~forcad program~nearest_point_1d nearest_point_1d program~nearest_point_1d->module~forcad program~nearest_point_2d nearest_point_2d program~nearest_point_2d->module~forcad program~nearest_point_2d_bench nearest_point_2d_bench program~nearest_point_2d_bench->module~forcad program~nearest_point_3d nearest_point_3d program~nearest_point_3d->module~forcad program~shape_c_1d shape_C_1d program~shape_c_1d->module~forcad program~shape_c_2d shape_C_2d program~shape_c_2d->module~forcad program~shape_c_3d shape_C_3d program~shape_c_3d->module~forcad program~shape_circle shape_circle program~shape_circle->module~forcad program~shape_half_circle shape_half_circle program~shape_half_circle->module~forcad program~shape_half_ring_2d shape_half_ring_2d program~shape_half_ring_2d->module~forcad program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->module~forcad program~shape_hexahedron shape_hexahedron program~shape_hexahedron->module~forcad program~shape_ring_2d shape_ring_2d program~shape_ring_2d->module~forcad program~shape_ring_3d shape_ring_3d program~shape_ring_3d->module~forcad program~shape_tetragon shape_tetragon program~shape_tetragon->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. Interfaces private interface compute_Tgc private pure function compute_Tgc_bspline_1d_scalar(f_Xt, f_knot, f_degree, f_nc) result(f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: f_Xt real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc Return Value real(kind=rk), allocatable, (:) private pure function compute_Tgc_bspline_1d_vector(f_Xt, f_knot, f_degree, f_nc, f_ng) result(f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc integer, intent(in) :: f_ng Return Value real(kind=rk), allocatable, (:,:) private pure function compute_Tgc_nurbs_1d_scalar(f_Xt, f_knot, f_degree, f_nc, f_Wc) result(f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: f_Xt real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc real(kind=rk), intent(in), contiguous :: f_Wc (:) Return Value real(kind=rk), allocatable, (:) private pure function compute_Tgc_nurbs_1d_vector(f_Xt, f_knot, f_degree, f_nc, f_ng, f_Wc) result(f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc integer, intent(in) :: f_ng real(kind=rk), intent(in), contiguous :: f_Wc (:) Return Value real(kind=rk), allocatable, (:,:) private interface compute_Xg private pure function compute_Xg_bspline_1d(f_Xt, f_knot, f_degree, f_nc, f_ng, f_Xc) result(f_Xg) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc integer, intent(in) :: f_ng real(kind=rk), intent(in), contiguous :: f_Xc (:,:) Return Value real(kind=rk), allocatable, (:,:) private pure function compute_Xg_bspline_1d_1point(f_Xt, f_knot, f_degree, f_nc, f_Xc) result(f_Xg) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: f_Xt real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc real(kind=rk), intent(in), contiguous :: f_Xc (:,:) Return Value real(kind=rk), allocatable, (:) private pure function compute_Xg_nurbs_1d(f_Xt, f_knot, f_degree, f_nc, f_ng, f_Xc, f_Wc) result(f_Xg) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc integer, intent(in) :: f_ng real(kind=rk), intent(in), contiguous :: f_Xc (:,:) real(kind=rk), intent(in), contiguous :: f_Wc (:) Return Value real(kind=rk), allocatable, (:,:) private pure function compute_Xg_nurbs_1d_1point(f_Xt, f_knot, f_degree, f_nc, f_Xc, f_Wc) result(f_Xg) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: f_Xt real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc real(kind=rk), intent(in), contiguous :: f_Xc (:,:) real(kind=rk), intent(in), contiguous :: f_Wc (:) Return Value real(kind=rk), allocatable, (:) private interface compute_d2Tgc private pure subroutine compute_d2Tgc_bspline_1d_scalar(f_Xt, f_knot, f_degree, f_nc, f_d2Tgc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: f_Xt real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc real(kind=rk), intent(out), allocatable :: f_d2Tgc (:) real(kind=rk), intent(out), allocatable :: f_dTgc (:) real(kind=rk), intent(out), allocatable :: f_Tgc (:) private pure subroutine compute_d2Tgc_bspline_1d_vector(f_Xt, f_knot, f_degree, f_nc, f_ng, f_d2Tgc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc integer, intent(in) :: f_ng real(kind=rk), intent(out), allocatable :: f_d2Tgc (:,:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:,:) private pure subroutine compute_d2Tgc_nurbs_1d_scalar(f_Xt, f_knot, f_degree, f_nc, f_Wc, f_d2Tgc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: f_Xt real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc real(kind=rk), intent(in), contiguous :: f_Wc (:) real(kind=rk), intent(out), allocatable :: f_d2Tgc (:) real(kind=rk), intent(out), allocatable :: f_dTgc (:) real(kind=rk), intent(out), allocatable :: f_Tgc (:) private pure subroutine compute_d2Tgc_nurbs_1d_vector(f_Xt, f_knot, f_degree, f_nc, f_ng, f_Wc, f_d2Tgc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc integer, intent(in) :: f_ng real(kind=rk), intent(in), contiguous :: f_Wc (:) real(kind=rk), intent(out), allocatable :: f_d2Tgc (:,:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:,:) private interface compute_dTgc private pure subroutine compute_dTgc_bspline_1d_scalar(f_Xt, f_knot, f_degree, f_nc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: f_Xt real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc real(kind=rk), intent(out), allocatable :: f_dTgc (:) real(kind=rk), intent(out), allocatable :: f_Tgc (:) private pure subroutine compute_dTgc_bspline_1d_vector(f_Xt, f_knot, f_degree, f_nc, f_ng, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc integer, intent(in) :: f_ng real(kind=rk), intent(out), allocatable :: f_dTgc (:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:,:) private pure subroutine compute_dTgc_nurbs_1d_scalar(f_Xt, f_knot, f_degree, f_nc, f_Wc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: f_Xt real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc real(kind=rk), intent(in), contiguous :: f_Wc (:) real(kind=rk), intent(out), allocatable :: f_dTgc (:) real(kind=rk), intent(out), allocatable :: f_Tgc (:) private pure subroutine compute_dTgc_nurbs_1d_vector(f_Xt, f_knot, f_degree, f_nc, f_ng, f_Wc, f_dTgc, f_Tgc) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: f_Xt (:) real(kind=rk), intent(in), contiguous :: f_knot (:) integer, intent(in) :: f_degree integer, intent(in) :: f_nc integer, intent(in) :: f_ng real(kind=rk), intent(in), contiguous :: f_Wc (:) real(kind=rk), intent(out), allocatable :: f_dTgc (:,:) real(kind=rk), intent(out), allocatable :: f_Tgc (:,:) interface private pure function nearest_point_help_1d(f_ng, f_Xg, f_point_Xg) result(f_distances) Arguments Type Intent Optional Attributes Name integer, intent(in) :: f_ng real(kind=rk), intent(in), contiguous :: f_Xg (:,:) real(kind=rk), intent(in), contiguous :: f_point_Xg (:) Return Value real(kind=rk), allocatable, (:) Derived Types type, public :: nurbs_curve Components Type Visibility Attributes Name Initial real(kind=rk), private, allocatable :: Wc (:) Weights for control points (1D array: [nc]) real(kind=rk), private, allocatable :: Xc (:,:) Control points (2D array: [nc, dim]) real(kind=rk), private, allocatable :: Xg (:,:) Geometry points (2D array: [ng, dim]) real(kind=rk), private, allocatable :: Xt (:) Evaluation points (1D array: [ng]) integer, private :: degree Degree (order) of the curve integer, private, allocatable :: elemConn (:,:) IGA element connectivity integer, private, allocatable :: elemConn_Xc_vis (:,:) Connectivity for visualization of control points integer, private, allocatable :: elemConn_Xg_vis (:,:) Connectivity for visualization of geometry points real(kind=rk), private, allocatable :: knot (:) Knot vector (1D array) integer, private :: nc Number of control points integer, private :: ng Number of geometry points Type-Bound Procedures generic, public :: basis => basis_vector , basis_scalar Compute the basis functions of the NURBS curve Read more… procedure, public :: cmp_Xg Compute geometry points Read more… procedure, public :: cmp_degree Compute degree of the NURBS curve Read more… procedure, public :: cmp_elem Generate IGA element connectivity Read more… procedure, public :: cmp_elem_Xc_vis Generate connectivity for control points Read more… procedure, public :: cmp_elem_Xg_vis Generate connectivity for geometry points Read more… procedure, public :: cmp_nc Compute number of required control points Read more… procedure, public :: create Generate geometry points Read more… generic, public :: derivative => derivative_vector , derivative_scalar Compute the derivative of the NURBS curve Read more… generic, public :: derivative2 => derivative2_vector , derivative2_scalar Compute the second derivative of the NURBS curve Read more… procedure, public :: elevate_degree Elevate the degree of the 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 NURBS curve object Read more… generic, public :: get_Wc => get_Wc_all , get_Wci Get weights Read more… generic, public :: get_Xc => get_Xc_all , get_Xci , get_Xcid Get control points Read more… generic, public :: get_Xg => get_Xg_all , get_Xgi , get_Xgid Get geometry points Read more… procedure, public :: get_Xt Get parameter values Read more… procedure, public :: get_continuity Compute and return the continuity of the curve Read more… procedure, public :: get_degree Get degree of the NURBS curve Read more… procedure, public :: get_elem Get IGA element connectivity Read more… procedure, public :: get_elem_Xc_vis Get connectivity for control points Read more… procedure, public :: get_elem_Xg_vis Get connectivity for geometry points Read more… generic, public :: get_knot => get_knoti , get_knot_all Get knot vector Read more… procedure, public :: get_multiplicity Compute and return the multiplicity of the knots 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 :: insert_knots Insert knots into the knot vector Read more… procedure, public :: is_rational Check if the NURBS curve is rational Read more… procedure, public :: modify_Wc Modify weights Read more… procedure, public :: modify_Xc Modify control points Read more… procedure, public :: nearest_point Find the nearest point on the NURBS curve (Approximation) Read more… procedure, public :: nearest_point2 Find the nearest point on the NURBS curve (Minimization - Newton's method) Read more… procedure, public :: remove_knots Remove knots from the knot vector Read more… procedure, public :: rotate_Xc Rotate control points Read more… procedure, public :: rotate_Xg Rotate geometry points Read more… generic, public :: set => set1 , set2 , set3 Set NURBS curve Read more… procedure, public :: set1 Set knot vector, control points and weights for the NURBS curve object Read more… procedure, public :: set2 Set NURBS curve using nodes of parameter space, degree, continuity, control points and weights Read more… procedure, public :: set3 Set Bezier or Rational Bezier curve using control points and weights Read more… procedure, public :: set_C Set a C-shape Read more… procedure, public :: set_circle Set a circle Read more… procedure, public :: set_elem Set IGA element connectivity Read more… procedure, public :: set_elem_Xc_vis Set connectivity for control points Read more… procedure, public :: set_elem_Xg_vis Set connectivity for geometry points Read more… procedure, public :: set_half_circle Set a half circle Read more… procedure, public :: show Show the NURBS object using PyVista Read more… procedure, public :: translate_Xc Translate control points Read more… procedure, public :: translate_Xg Translate geometry points Read more… procedure, private :: basis_scalar Compute the basis functions of the NURBS curve Read more… procedure, private :: basis_vector Compute the basis functions of the NURBS curve Read more… procedure, private :: derivative2_scalar Compute the second derivative of the NURBS curve Read more… procedure, private :: derivative2_vector Compute the second derivative of the NURBS curve Read more… procedure, private :: derivative_scalar Compute the derivative of the NURBS curve Read more… procedure, private :: derivative_vector Compute the derivative of the NURBS curve Read more… procedure, private :: get_Wc_all Get all weights Read more… procedure, private :: get_Wci Get i-th weight Read more… procedure, private :: get_Xc_all Get all control points Read more… procedure, private :: get_Xci Get i-th control point Read more… procedure, private :: get_Xcid Get i-th control point in a specific direction Read more… procedure, private :: get_Xg_all Get all geometry points Read more… procedure, private :: get_Xgi Get i-th geometry point Read more… procedure, private :: get_Xgid Get i-th geometry point in a specific direction Read more… procedure, private :: get_knot_all Get all knot vectors Read more… procedure, private :: get_knoti Get i-th knot value Read more… Functions private pure function cmp_Xg (this, Xt) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this real(kind=rk), intent(in) :: Xt Return Value real(kind=rk), allocatable, (:) private pure function cmp_elem (this) result(elemConn) 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 cmp_elem_Xc_vis (this, p) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in), optional :: p Return Value integer, allocatable, (:,:) private pure function cmp_elem_Xg_vis (this, p) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in), optional :: p Return Value integer, allocatable, (:,:) private pure function get_Wc_all (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_Wci (this, n) result(Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk) private pure function get_Xc_all (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_Xci (this, n) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk), allocatable, (:) private pure function get_Xcid (this, n, dir) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in) :: n integer, intent(in) :: dir Return Value real(kind=rk) private pure function get_Xg_all (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_Xgi (this, n) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in) :: n Return Value real(kind=rk), allocatable, (:) private pure function get_Xgid (this, n, dir) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in) :: n integer, intent(in) :: dir Return Value real(kind=rk) 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_degree (this) result(degree) 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_elem (this) result(elemConn) 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_elem_Xc_vis (this) result(elemConn) 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_elem_Xg_vis (this) result(elemConn) 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_all (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_knoti (this, i) result(knot) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(in) :: i Return Value real(kind=rk) 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 is_rational (this) result(r) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value logical Subroutines private pure subroutine basis_scalar (this, Xt, Tgc) 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) :: Xt real(kind=rk), intent(out), allocatable :: Tgc (:) private pure subroutine basis_vector (this, res, Xt, Tgc) 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, contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: Tgc (:,:) private pure subroutine cmp_degree (this) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this private pure subroutine cmp_nc (this) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this 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, contiguous :: Xt (:) private pure subroutine derivative2_scalar (this, Xt, d2Tgc, dTgc, Tgc) 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) :: Xt real(kind=rk), intent(out), allocatable :: d2Tgc (:) real(kind=rk), intent(out), optional, allocatable :: dTgc (:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:) private pure subroutine derivative2_vector (this, res, Xt, d2Tgc, dTgc, Tgc) 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, contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: d2Tgc (:,:) real(kind=rk), intent(out), optional, allocatable :: dTgc (:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:,:) private pure subroutine derivative_scalar (this, Xt, dTgc, Tgc) 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) :: Xt real(kind=rk), intent(out), allocatable :: dTgc (:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:) private pure subroutine derivative_vector (this, res, Xt, dTgc, Tgc) 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, contiguous :: Xt (:) real(kind=rk), intent(out), allocatable :: dTgc (:,:) real(kind=rk), intent(out), optional, allocatable :: Tgc (:,:) private pure subroutine elevate_degree (this, t) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this integer, intent(in) :: t 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 insert_knots (this, Xth, r) 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), contiguous :: Xth (:) integer, intent(in), contiguous :: r (:) 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 nearest_point (this, point_Xg, nearest_Xg, nearest_Xt, id) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this real(kind=rk), intent(in) :: point_Xg (:) real(kind=rk), intent(out), optional, allocatable :: nearest_Xg (:) real(kind=rk), intent(out), optional :: nearest_Xt integer, intent(out), optional :: id private impure subroutine nearest_point2 (this, point_Xg, tol, maxit, nearest_Xt, nearest_Xg) 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) :: point_Xg (:) real(kind=rk), intent(in) :: tol integer, intent(in) :: maxit real(kind=rk), intent(out) :: nearest_Xt real(kind=rk), intent(out), optional, allocatable :: nearest_Xg (:) private pure subroutine remove_knots (this, Xth, r) 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), contiguous :: Xth (:) integer, intent(in), contiguous :: r (:) private pure subroutine rotate_Xc (this, alpha, beta, theta) 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) :: alpha real(kind=rk), intent(in) :: beta real(kind=rk), intent(in) :: theta private pure subroutine rotate_Xg (this, alpha, beta, theta) 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) :: alpha real(kind=rk), intent(in) :: beta real(kind=rk), intent(in) :: theta private pure subroutine set1 (this, knot, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set knot vector, control points and weights for the NURBS curve object. Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: knot (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) private pure subroutine set2 (this, Xth_dir, degree, continuity, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set NURBS curve using nodes of parameter space (Xth), degree, continuity, control points and weights. Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: Xth_dir (:) integer, intent(in) :: degree integer, intent(in), contiguous :: continuity (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) private pure subroutine set3 (this, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set Bezier or Rational Bezier curve using control points and weights. Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) private pure subroutine set_C (this, center, radius) 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), contiguous :: center (:) real(kind=rk), intent(in) :: radius private pure subroutine set_circle (this, center, radius) 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), contiguous :: center (:) real(kind=rk), intent(in) :: radius private pure subroutine set_elem (this, elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:) private pure subroutine set_elem_Xc_vis (this, elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:) private pure subroutine set_elem_Xg_vis (this, elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:) private pure subroutine set_half_circle (this, center, radius) 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), contiguous :: center (:) real(kind=rk), intent(in) :: radius private impure subroutine show (this, vtkfile_Xc, vtkfile_Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this character(len=*), intent(in) :: vtkfile_Xc character(len=*), intent(in) :: vtkfile_Xg private pure subroutine translate_Xc (this, vec) 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) :: vec (:) private pure subroutine translate_Xg (this, vec) 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) :: vec (:)","tags":"","loc":"module/forcad_nurbs_curve.html"},{"title":"nearest_point_2d_bench – ForCAD","text":"Uses forcad fortime program~~nearest_point_2d_bench~~UsesGraph program~nearest_point_2d_bench nearest_point_2d_bench fortime fortime program~nearest_point_2d_bench->fortime module~forcad forcad program~nearest_point_2d_bench->module~forcad 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_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. Set a tetragon with lengths of 2.0 and 3.0 and 3 and 4 control points in each direction\nThe weights of the control points (Wc) are optional. Generate the NURBS surface with resolutions of 30 in both dimensions Find the nearest point on the surface to a given point\nFinalize the NURBS surface object Calls program~~nearest_point_2d_bench~~CallsGraph program~nearest_point_2d_bench nearest_point_2d_bench proc~create~2 nurbs_surface%create program~nearest_point_2d_bench->proc~create~2 proc~finalize~2 nurbs_surface%finalize program~nearest_point_2d_bench->proc~finalize~2 proc~nearest_point~2 nurbs_surface%nearest_point program~nearest_point_2d_bench->proc~nearest_point~2 proc~set_tetragon nurbs_surface%set_tetragon program~nearest_point_2d_bench->proc~set_tetragon timer_start timer_start program~nearest_point_2d_bench->timer_start timer_stop timer_stop program~nearest_point_2d_bench->timer_stop interface~compute_xg~2 compute_Xg proc~create~2->interface~compute_xg~2 interface~ndgrid ndgrid proc~create~2->interface~ndgrid proc~is_rational~2 nurbs_surface%is_rational proc~create~2->proc~is_rational~2 interface~nearest_point_help_2d nearest_point_help_2d proc~nearest_point~2->interface~nearest_point_help_2d none~set~2 nurbs_surface%set proc~set_tetragon->none~set~2 proc~tetragon_xc tetragon_Xc proc~set_tetragon->proc~tetragon_xc proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 ndgrid3 interface~ndgrid->proc~ndgrid3 proc~set1~2 nurbs_surface%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_surface%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_surface%set3 none~set~2->proc~set3~2 proc~cmp_degree~2 nurbs_surface%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~cmp_nc~2 nurbs_surface%cmp_nc proc~set1~2->proc~cmp_nc~2 proc~set2~2->proc~cmp_nc~2 proc~compute_knot_vector compute_knot_vector proc~set2~2->proc~compute_knot_vector proc~set3~2->proc~cmp_degree~2 proc~get_multiplicity~2 nurbs_surface%get_multiplicity proc~cmp_degree~2->proc~get_multiplicity~2 interface~compute_multiplicity compute_multiplicity proc~cmp_nc~2->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity~2->interface~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 integer :: i integer :: id id of the nearest point integer :: j real(kind=rk), allocatable :: nearest_Xg (:) Coordinates of the nearest point on the surface real(kind=rk), allocatable :: nearest_Xt (:) Corresponding parametric coordinates of the nearest point real(kind=rk), allocatable :: points (:,:) type( nurbs_surface ) :: shape Declare a NURBS surface object type(timer) :: t","tags":"","loc":"program/nearest_point_2d_bench.html"},{"title":"shape_ring_3d – ForCAD","text":"Uses forcad program~~shape_ring_3d~~UsesGraph program~shape_ring_3d shape_ring_3d module~forcad forcad program~shape_ring_3d->module~forcad 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_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. Set up a ring shape centered at 0,0,0 with inner radius 1, outer radius 2, and length 1. Export the control points to a VTK file for visualization. Create the shape using the specified number of elements in each direction. Export the geometry to a VTK file for visualization. Show the control geometry and geometry using PyVista Finalize and clean up the shape object. Calls program~~shape_ring_3d~~CallsGraph program~shape_ring_3d shape_ring_3d proc~create nurbs_volume%create program~shape_ring_3d->proc~create proc~export_xc nurbs_volume%export_Xc program~shape_ring_3d->proc~export_xc proc~export_xg nurbs_volume%export_Xg program~shape_ring_3d->proc~export_xg proc~finalize nurbs_volume%finalize program~shape_ring_3d->proc~finalize proc~set_ring nurbs_volume%set_ring program~shape_ring_3d->proc~set_ring proc~show nurbs_volume%show program~shape_ring_3d->proc~show interface~compute_xg compute_Xg proc~create->interface~compute_xg interface~ndgrid ndgrid proc~create->interface~ndgrid proc~is_rational nurbs_volume%is_rational proc~create->proc~is_rational proc~cmp_elem_xc_vis nurbs_volume%cmp_elem_Xc_vis proc~export_xc->proc~cmp_elem_xc_vis proc~cmp_elem_xg_vis nurbs_volume%cmp_elem_Xg_vis proc~export_xg->proc~cmp_elem_xg_vis none~set nurbs_volume%set proc~set_ring->none~set proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 ndgrid3 interface~ndgrid->proc~ndgrid3 proc~set1 nurbs_volume%set1 none~set->proc~set1 proc~set2 nurbs_volume%set2 none~set->proc~set2 proc~set3 nurbs_volume%set3 none~set->proc~set3 interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xc_vis->interface~elemconn_c0 proc~cmp_elem_xg_vis->interface~elemconn_c0 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v proc~cmp_degree nurbs_volume%cmp_degree proc~set1->proc~cmp_degree proc~cmp_nc nurbs_volume%cmp_nc proc~set1->proc~cmp_nc proc~set2->proc~cmp_nc proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector proc~set3->proc~cmp_degree proc~get_multiplicity nurbs_volume%get_multiplicity proc~cmp_degree->proc~get_multiplicity interface~compute_multiplicity compute_multiplicity proc~cmp_nc->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity->interface~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 type( nurbs_volume ) :: shape","tags":"","loc":"program/shape_ring_3d.html"},{"title":"shape_circle – ForCAD","text":"Uses forcad program~~shape_circle~~UsesGraph program~shape_circle shape_circle module~forcad forcad program~shape_circle->module~forcad 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_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. Set a circle with radius 2.0 and center at [0.0, 0.0, 0.0] Export control points to a VTK file Generate the NURBS circle with a resolution of 100 Export the generated cirlce to a VTK file Show the control geometry and geometry using PyVista Finalize the NURBS curve object Calls program~~shape_circle~~CallsGraph program~shape_circle shape_circle proc~create~3 nurbs_curve%create program~shape_circle->proc~create~3 proc~export_xc~3 nurbs_curve%export_Xc program~shape_circle->proc~export_xc~3 proc~export_xg~3 nurbs_curve%export_Xg program~shape_circle->proc~export_xg~3 proc~finalize~3 nurbs_curve%finalize program~shape_circle->proc~finalize~3 proc~set_circle nurbs_curve%set_circle program~shape_circle->proc~set_circle proc~show~3 nurbs_curve%show program~shape_circle->proc~show~3 interface~compute_xg~3 compute_Xg proc~create~3->interface~compute_xg~3 proc~is_rational~3 nurbs_curve%is_rational proc~create~3->proc~is_rational~3 proc~cmp_elem_xc_vis~3 nurbs_curve%cmp_elem_Xc_vis proc~export_xc~3->proc~cmp_elem_xc_vis~3 proc~cmp_elem_xg_vis~3 nurbs_curve%cmp_elem_Xg_vis proc~export_xg~3->proc~cmp_elem_xg_vis~3 none~set~3 nurbs_curve%set proc~set_circle->none~set~3 proc~set1~3 nurbs_curve%set1 none~set~3->proc~set1~3 proc~set2~3 nurbs_curve%set2 none~set~3->proc~set2~3 proc~set3~3 nurbs_curve%set3 none~set~3->proc~set3~3 interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xc_vis~3->interface~elemconn_c0 proc~cmp_elem_xg_vis~3->interface~elemconn_c0 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v proc~cmp_degree~3 nurbs_curve%cmp_degree proc~set1~3->proc~cmp_degree~3 proc~compute_knot_vector compute_knot_vector proc~set2~3->proc~compute_knot_vector proc~set3~3->proc~cmp_degree~3 proc~get_multiplicity~3 nurbs_curve%get_multiplicity proc~cmp_degree~3->proc~get_multiplicity~3 proc~repelem repelem proc~compute_knot_vector->proc~repelem interface~compute_multiplicity compute_multiplicity proc~get_multiplicity~3->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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 type( nurbs_curve ) :: shape","tags":"","loc":"program/shape_circle.html"},{"title":"shape_half_circle – ForCAD","text":"Uses forcad program~~shape_half_circle~~UsesGraph program~shape_half_circle shape_half_circle module~forcad forcad program~shape_half_circle->module~forcad 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_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. Set up a half circle shape centered at the 0,0,0 with a radius of 1 Export the control points to a VTK file for visualization. Create the shape using the specified number of elements in each direction. Export the geometry to a VTK file for visualization. Show the control geometry and geometry using PyVista Finalize and clean up the shape object. Calls program~~shape_half_circle~~CallsGraph program~shape_half_circle shape_half_circle proc~create~3 nurbs_curve%create program~shape_half_circle->proc~create~3 proc~export_xc~3 nurbs_curve%export_Xc program~shape_half_circle->proc~export_xc~3 proc~export_xg~3 nurbs_curve%export_Xg program~shape_half_circle->proc~export_xg~3 proc~finalize~3 nurbs_curve%finalize program~shape_half_circle->proc~finalize~3 proc~set_half_circle nurbs_curve%set_half_circle program~shape_half_circle->proc~set_half_circle proc~show~3 nurbs_curve%show program~shape_half_circle->proc~show~3 interface~compute_xg~3 compute_Xg proc~create~3->interface~compute_xg~3 proc~is_rational~3 nurbs_curve%is_rational proc~create~3->proc~is_rational~3 proc~cmp_elem_xc_vis~3 nurbs_curve%cmp_elem_Xc_vis proc~export_xc~3->proc~cmp_elem_xc_vis~3 proc~cmp_elem_xg_vis~3 nurbs_curve%cmp_elem_Xg_vis proc~export_xg~3->proc~cmp_elem_xg_vis~3 none~set~3 nurbs_curve%set proc~set_half_circle->none~set~3 proc~set1~3 nurbs_curve%set1 none~set~3->proc~set1~3 proc~set2~3 nurbs_curve%set2 none~set~3->proc~set2~3 proc~set3~3 nurbs_curve%set3 none~set~3->proc~set3~3 interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xc_vis~3->interface~elemconn_c0 proc~cmp_elem_xg_vis~3->interface~elemconn_c0 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v proc~cmp_degree~3 nurbs_curve%cmp_degree proc~set1~3->proc~cmp_degree~3 proc~compute_knot_vector compute_knot_vector proc~set2~3->proc~compute_knot_vector proc~set3~3->proc~cmp_degree~3 proc~get_multiplicity~3 nurbs_curve%get_multiplicity proc~cmp_degree~3->proc~get_multiplicity~3 proc~repelem repelem proc~compute_knot_vector->proc~repelem interface~compute_multiplicity compute_multiplicity proc~get_multiplicity~3->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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 type( nurbs_curve ) :: shape","tags":"","loc":"program/shape_half_circle.html"},{"title":"shape_ring_2d – ForCAD","text":"Uses forcad program~~shape_ring_2d~~UsesGraph program~shape_ring_2d shape_ring_2d module~forcad forcad program~shape_ring_2d->module~forcad 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_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. Set up a ring shape with inner radius 1.0 and outer radius 2.0. Export the control points to a VTK file for visualization. Create the shape using the specified number of elements in each direction. Export the geometry to a VTK file for visualization. Show the control geometry and geometry using PyVista Finalize and clean up the shape object. Calls program~~shape_ring_2d~~CallsGraph program~shape_ring_2d shape_ring_2d proc~create~2 nurbs_surface%create program~shape_ring_2d->proc~create~2 proc~export_xc~2 nurbs_surface%export_Xc program~shape_ring_2d->proc~export_xc~2 proc~export_xg~2 nurbs_surface%export_Xg program~shape_ring_2d->proc~export_xg~2 proc~finalize~2 nurbs_surface%finalize program~shape_ring_2d->proc~finalize~2 proc~set_ring~2 nurbs_surface%set_ring program~shape_ring_2d->proc~set_ring~2 proc~show~2 nurbs_surface%show program~shape_ring_2d->proc~show~2 interface~compute_xg~2 compute_Xg proc~create~2->interface~compute_xg~2 interface~ndgrid ndgrid proc~create~2->interface~ndgrid proc~is_rational~2 nurbs_surface%is_rational proc~create~2->proc~is_rational~2 proc~cmp_elem_xc_vis~2 nurbs_surface%cmp_elem_Xc_vis proc~export_xc~2->proc~cmp_elem_xc_vis~2 proc~cmp_elem_xg_vis~2 nurbs_surface%cmp_elem_Xg_vis proc~export_xg~2->proc~cmp_elem_xg_vis~2 none~set~2 nurbs_surface%set proc~set_ring~2->none~set~2 proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 ndgrid3 interface~ndgrid->proc~ndgrid3 proc~set1~2 nurbs_surface%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_surface%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_surface%set3 none~set~2->proc~set3~2 interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xc_vis~2->interface~elemconn_c0 proc~cmp_elem_xg_vis~2->interface~elemconn_c0 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v proc~cmp_degree~2 nurbs_surface%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~cmp_nc~2 nurbs_surface%cmp_nc proc~set1~2->proc~cmp_nc~2 proc~set2~2->proc~cmp_nc~2 proc~compute_knot_vector compute_knot_vector proc~set2~2->proc~compute_knot_vector proc~set3~2->proc~cmp_degree~2 proc~get_multiplicity~2 nurbs_surface%get_multiplicity proc~cmp_degree~2->proc~get_multiplicity~2 interface~compute_multiplicity compute_multiplicity proc~cmp_nc~2->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity~2->interface~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 type( nurbs_surface ) :: shape","tags":"","loc":"program/shape_ring_2d.html"},{"title":"shape_half_ring_2d – ForCAD","text":"Uses forcad program~~shape_half_ring_2d~~UsesGraph program~shape_half_ring_2d shape_half_ring_2d module~forcad forcad program~shape_half_ring_2d->module~forcad 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_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. Set up a half ring shape centered at 0,0,0 with inner radius 1 and outer radius 2. Export the control points to a VTK file for visualization. Create the shape using the specified number of elements in each direction. Export the geometry to a VTK file for visualization. Show the control geometry and geometry using PyVista Finalize and clean up the shape object. Calls program~~shape_half_ring_2d~~CallsGraph program~shape_half_ring_2d shape_half_ring_2d proc~create~2 nurbs_surface%create program~shape_half_ring_2d->proc~create~2 proc~export_xc~2 nurbs_surface%export_Xc program~shape_half_ring_2d->proc~export_xc~2 proc~export_xg~2 nurbs_surface%export_Xg program~shape_half_ring_2d->proc~export_xg~2 proc~finalize~2 nurbs_surface%finalize program~shape_half_ring_2d->proc~finalize~2 proc~set_half_ring~2 nurbs_surface%set_half_ring program~shape_half_ring_2d->proc~set_half_ring~2 proc~show~2 nurbs_surface%show program~shape_half_ring_2d->proc~show~2 interface~compute_xg~2 compute_Xg proc~create~2->interface~compute_xg~2 interface~ndgrid ndgrid proc~create~2->interface~ndgrid proc~is_rational~2 nurbs_surface%is_rational proc~create~2->proc~is_rational~2 proc~cmp_elem_xc_vis~2 nurbs_surface%cmp_elem_Xc_vis proc~export_xc~2->proc~cmp_elem_xc_vis~2 proc~cmp_elem_xg_vis~2 nurbs_surface%cmp_elem_Xg_vis proc~export_xg~2->proc~cmp_elem_xg_vis~2 none~set~2 nurbs_surface%set proc~set_half_ring~2->none~set~2 proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 ndgrid3 interface~ndgrid->proc~ndgrid3 proc~set1~2 nurbs_surface%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_surface%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_surface%set3 none~set~2->proc~set3~2 interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xc_vis~2->interface~elemconn_c0 proc~cmp_elem_xg_vis~2->interface~elemconn_c0 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v proc~cmp_degree~2 nurbs_surface%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~cmp_nc~2 nurbs_surface%cmp_nc proc~set1~2->proc~cmp_nc~2 proc~set2~2->proc~cmp_nc~2 proc~compute_knot_vector compute_knot_vector proc~set2~2->proc~compute_knot_vector proc~set3~2->proc~cmp_degree~2 proc~get_multiplicity~2 nurbs_surface%get_multiplicity proc~cmp_degree~2->proc~get_multiplicity~2 interface~compute_multiplicity compute_multiplicity proc~cmp_nc~2->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity~2->interface~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 type( nurbs_surface ) :: shape","tags":"","loc":"program/shape_half_ring_2d.html"},{"title":"nearest_point_1d – ForCAD","text":"Uses forcad program~~nearest_point_1d~~UsesGraph program~nearest_point_1d nearest_point_1d module~forcad forcad program~nearest_point_1d->module~forcad 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_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. Define control points for the NURBS curve\nDefine weights for the control points (optional)\nDefine knot vector Set knot vector, control points, and weights for the NURBS curve object.\nWc is optional Generate the NURBS curve with a resolution of 20 Find the nearest point on the curve to a given point\nFind the nearest point on the curve to a given point\nThe optimization method is used to find the nearest point\nThe optimization method is based on the Newton-Raphson method\nFinalize the NURBS curve object Calls program~~nearest_point_1d~~CallsGraph program~nearest_point_1d nearest_point_1d none~set~3 nurbs_curve%set program~nearest_point_1d->none~set~3 proc~create~3 nurbs_curve%create program~nearest_point_1d->proc~create~3 proc~finalize~3 nurbs_curve%finalize program~nearest_point_1d->proc~finalize~3 proc~nearest_point2~3 nurbs_curve%nearest_point2 program~nearest_point_1d->proc~nearest_point2~3 proc~nearest_point~3 nurbs_curve%nearest_point program~nearest_point_1d->proc~nearest_point~3 proc~set1~3 nurbs_curve%set1 none~set~3->proc~set1~3 proc~set2~3 nurbs_curve%set2 none~set~3->proc~set2~3 proc~set3~3 nurbs_curve%set3 none~set~3->proc~set3~3 interface~compute_xg~3 compute_Xg proc~create~3->interface~compute_xg~3 proc~is_rational~3 nurbs_curve%is_rational proc~create~3->proc~is_rational~3 proc~nearest_point2~3->proc~create~3 proc~nearest_point2~3->proc~finalize~3 interface~nearest_point_help_1d nearest_point_help_1d proc~nearest_point2~3->interface~nearest_point_help_1d none~derivative2~3 nurbs_curve%derivative2 proc~nearest_point2~3->none~derivative2~3 proc~cmp_xg~3 nurbs_curve%cmp_Xg proc~nearest_point2~3->proc~cmp_xg~3 proc~nearest_point~3->interface~nearest_point_help_1d proc~derivative2_scalar~3 nurbs_curve%derivative2_scalar none~derivative2~3->proc~derivative2_scalar~3 proc~derivative2_vector~3 nurbs_curve%derivative2_vector none~derivative2~3->proc~derivative2_vector~3 proc~cmp_xg~3->interface~compute_xg~3 proc~cmp_xg~3->proc~is_rational~3 proc~cmp_degree~3 nurbs_curve%cmp_degree proc~set1~3->proc~cmp_degree~3 proc~compute_knot_vector compute_knot_vector proc~set2~3->proc~compute_knot_vector proc~set3~3->proc~cmp_degree~3 proc~get_multiplicity~3 nurbs_curve%get_multiplicity proc~cmp_degree~3->proc~get_multiplicity~3 proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~derivative2_scalar~3->proc~is_rational~3 interface~compute_d2tgc~3 compute_d2Tgc proc~derivative2_scalar~3->interface~compute_d2tgc~3 proc~derivative2_vector~3->proc~is_rational~3 proc~derivative2_vector~3->interface~compute_d2tgc~3 interface~compute_multiplicity compute_multiplicity proc~get_multiplicity~3->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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 integer :: id Variable for the id of the nearest point real(kind=rk) :: knot (6) Array for knot vector real(kind=rk), allocatable :: nearest_Xg (:) Array for the nearest point on the curve real(kind=rk) :: nearest_Xt Array for the parametric coordinates of the nearest point type( nurbs_curve ) :: shape Declare a NURBS curve object","tags":"","loc":"program/nearest_point_1d.html"},{"title":"shape_hexahedron – ForCAD","text":"Uses forcad program~~shape_hexahedron~~UsesGraph program~shape_hexahedron shape_hexahedron module~forcad forcad program~shape_hexahedron->module~forcad 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_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. Set up a hexahedron shape with dimensions L = [2.0, 4.0, 8.0] and a specified number of control points nc = [4, 6, 8].\nThe weights of the control points (Wc) are optional. Export the control points to a VTK file for visualization. Create the shape using the specified number of elements in each direction. Export the geometry to a VTK file for visualization. Show the control geometry and geometry using PyVista Finalize and clean up the shape object. Calls program~~shape_hexahedron~~CallsGraph program~shape_hexahedron shape_hexahedron proc~create nurbs_volume%create program~shape_hexahedron->proc~create proc~export_xc nurbs_volume%export_Xc program~shape_hexahedron->proc~export_xc proc~export_xg nurbs_volume%export_Xg program~shape_hexahedron->proc~export_xg proc~finalize nurbs_volume%finalize program~shape_hexahedron->proc~finalize proc~set_hexahedron nurbs_volume%set_hexahedron program~shape_hexahedron->proc~set_hexahedron proc~show nurbs_volume%show program~shape_hexahedron->proc~show interface~compute_xg compute_Xg proc~create->interface~compute_xg interface~ndgrid ndgrid proc~create->interface~ndgrid proc~is_rational nurbs_volume%is_rational proc~create->proc~is_rational proc~cmp_elem_xc_vis nurbs_volume%cmp_elem_Xc_vis proc~export_xc->proc~cmp_elem_xc_vis proc~cmp_elem_xg_vis nurbs_volume%cmp_elem_Xg_vis proc~export_xg->proc~cmp_elem_xg_vis none~set nurbs_volume%set proc~set_hexahedron->none~set proc~hexahedron_xc hexahedron_Xc proc~set_hexahedron->proc~hexahedron_xc proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 ndgrid3 interface~ndgrid->proc~ndgrid3 proc~set1 nurbs_volume%set1 none~set->proc~set1 proc~set2 nurbs_volume%set2 none~set->proc~set2 proc~set3 nurbs_volume%set3 none~set->proc~set3 interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xc_vis->interface~elemconn_c0 proc~cmp_elem_xg_vis->interface~elemconn_c0 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v proc~cmp_degree nurbs_volume%cmp_degree proc~set1->proc~cmp_degree proc~cmp_nc nurbs_volume%cmp_nc proc~set1->proc~cmp_nc proc~set2->proc~cmp_nc proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector proc~set3->proc~cmp_degree proc~get_multiplicity nurbs_volume%get_multiplicity proc~cmp_degree->proc~get_multiplicity interface~compute_multiplicity compute_multiplicity proc~cmp_nc->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity->interface~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 type( nurbs_volume ) :: shape","tags":"","loc":"program/shape_hexahedron.html"},{"title":"example_ppm1 – ForCAD","text":"Uses forcolormap forcad forimage fortime program~~example_ppm1~~UsesGraph program~example_ppm1 example_ppm1 forcolormap forcolormap program~example_ppm1->forcolormap forimage forimage program~example_ppm1->forimage fortime fortime program~example_ppm1->fortime module~forcad forcad program~example_ppm1->module~forcad 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_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. Visualization of NURBS surfaces using ForCAD, ForImage and ForColorMap libraries\nThis example converts NURBS surfaces (vector) to an image (raster) using ForCAD, ForImage and ForColorMap libraries. Set the shape parameters for a tetragon\nSet the shape parameters for a ring\nSet the shape parameters for a ring\nSet the shape parameters for a ring\nSet the shape parameters for a ring Calls program~~example_ppm1~~CallsGraph program~example_ppm1 example_ppm1 compute_rgb compute_rgb program~example_ppm1->compute_rgb export_pnm export_pnm program~example_ppm1->export_pnm get_b get_b program~example_ppm1->get_b get_g get_g program~example_ppm1->get_g get_r get_r program~example_ppm1->get_r none~get_xg~2 nurbs_surface%get_Xg program~example_ppm1->none~get_xg~2 proc~create~2 nurbs_surface%create program~example_ppm1->proc~create~2 proc~finalize~2 nurbs_surface%finalize program~example_ppm1->proc~finalize~2 proc~get_ng~2 nurbs_surface%get_ng program~example_ppm1->proc~get_ng~2 proc~set_ring~2 nurbs_surface%set_ring program~example_ppm1->proc~set_ring~2 proc~set_tetragon nurbs_surface%set_tetragon program~example_ppm1->proc~set_tetragon set set program~example_ppm1->set set_pnm set_pnm program~example_ppm1->set_pnm timer_start timer_start program~example_ppm1->timer_start timer_stop timer_stop program~example_ppm1->timer_stop proc~get_xg_all~2 nurbs_surface%get_Xg_all none~get_xg~2->proc~get_xg_all~2 proc~get_xgid~2 nurbs_surface%get_Xgid none~get_xg~2->proc~get_xgid~2 proc~get_xgi~2 nurbs_surface%get_Xgi none~get_xg~2->proc~get_xgi~2 interface~compute_xg~2 compute_Xg proc~create~2->interface~compute_xg~2 interface~ndgrid ndgrid proc~create~2->interface~ndgrid proc~is_rational~2 nurbs_surface%is_rational proc~create~2->proc~is_rational~2 none~set~2 nurbs_surface%set proc~set_ring~2->none~set~2 proc~set_tetragon->none~set~2 proc~tetragon_xc tetragon_Xc proc~set_tetragon->proc~tetragon_xc proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 ndgrid3 interface~ndgrid->proc~ndgrid3 proc~set1~2 nurbs_surface%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_surface%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_surface%set3 none~set~2->proc~set3~2 proc~cmp_degree~2 nurbs_surface%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~cmp_nc~2 nurbs_surface%cmp_nc proc~set1~2->proc~cmp_nc~2 proc~set2~2->proc~cmp_nc~2 proc~compute_knot_vector compute_knot_vector proc~set2~2->proc~compute_knot_vector proc~set3~2->proc~cmp_degree~2 proc~get_multiplicity~2 nurbs_surface%get_multiplicity proc~cmp_degree~2->proc~get_multiplicity~2 interface~compute_multiplicity compute_multiplicity proc~cmp_nc~2->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity~2->interface~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 :: Xg (:,:) real(kind=rk) :: aspect_ratio type(color) :: background_color integer :: blue real(kind=rk) :: center (3) type(colormap) :: cmap integer :: green integer :: height integer :: i integer, allocatable :: idx (:,:) type(format_pnm) :: image real(kind=rk) :: inner_radius integer :: ng (2) real(kind=rk) :: outer_radius integer(kind=ik), allocatable :: px (:,:) integer :: red integer :: res1 integer :: res2 type( nurbs_surface ) :: shape type(timer) :: t integer :: width real(kind=rk), allocatable :: z_values (:)","tags":"","loc":"program/example_ppm1.html"},{"title":"example_ppm3 – ForCAD","text":"Uses forcolormap forcad forimage fortime program~~example_ppm3~~UsesGraph program~example_ppm3 example_ppm3 forcolormap forcolormap program~example_ppm3->forcolormap forimage forimage program~example_ppm3->forimage fortime fortime program~example_ppm3->fortime module~forcad forcad program~example_ppm3->module~forcad 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_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. Visualization of NURBS surfaces using ForCAD, ForImage and ForColorMap libraries\nThis example converts NURBS surfaces (vector) to an image (raster) using ForCAD, ForImage and ForColorMap libraries. Set the shape parameters for a tetragon Calls program~~example_ppm3~~CallsGraph program~example_ppm3 example_ppm3 compute_rgb compute_rgb program~example_ppm3->compute_rgb export_pnm export_pnm program~example_ppm3->export_pnm get_b get_b program~example_ppm3->get_b get_g get_g program~example_ppm3->get_g get_r get_r program~example_ppm3->get_r none~get_xg~2 nurbs_surface%get_Xg program~example_ppm3->none~get_xg~2 proc~create~2 nurbs_surface%create program~example_ppm3->proc~create~2 proc~finalize~2 nurbs_surface%finalize program~example_ppm3->proc~finalize~2 proc~get_ng~2 nurbs_surface%get_ng program~example_ppm3->proc~get_ng~2 proc~modify_xc~2 nurbs_surface%modify_Xc program~example_ppm3->proc~modify_xc~2 proc~set_tetragon nurbs_surface%set_tetragon program~example_ppm3->proc~set_tetragon proc~translate_xc~2 nurbs_surface%translate_Xc program~example_ppm3->proc~translate_xc~2 set set program~example_ppm3->set set_pnm set_pnm program~example_ppm3->set_pnm timer_start timer_start program~example_ppm3->timer_start timer_stop timer_stop program~example_ppm3->timer_stop proc~get_xg_all~2 nurbs_surface%get_Xg_all none~get_xg~2->proc~get_xg_all~2 proc~get_xgid~2 nurbs_surface%get_Xgid none~get_xg~2->proc~get_xgid~2 proc~get_xgi~2 nurbs_surface%get_Xgi none~get_xg~2->proc~get_xgi~2 interface~compute_xg~2 compute_Xg proc~create~2->interface~compute_xg~2 interface~ndgrid ndgrid proc~create~2->interface~ndgrid proc~is_rational~2 nurbs_surface%is_rational proc~create~2->proc~is_rational~2 none~get_knot~2 nurbs_surface%get_knot proc~modify_xc~2->none~get_knot~2 none~get_wc~2 nurbs_surface%get_Wc proc~modify_xc~2->none~get_wc~2 none~get_xc~2 nurbs_surface%get_Xc proc~modify_xc~2->none~get_xc~2 none~set~2 nurbs_surface%set proc~modify_xc~2->none~set~2 proc~set_tetragon->none~set~2 proc~tetragon_xc tetragon_Xc proc~set_tetragon->proc~tetragon_xc proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 ndgrid3 interface~ndgrid->proc~ndgrid3 proc~get_knot_all~2 nurbs_surface%get_knot_all none~get_knot~2->proc~get_knot_all~2 proc~get_knoti~2 nurbs_surface%get_knoti none~get_knot~2->proc~get_knoti~2 proc~get_wc_all~2 nurbs_surface%get_Wc_all none~get_wc~2->proc~get_wc_all~2 proc~get_wci~2 nurbs_surface%get_Wci none~get_wc~2->proc~get_wci~2 proc~get_xc_all~2 nurbs_surface%get_Xc_all none~get_xc~2->proc~get_xc_all~2 proc~get_xcid~2 nurbs_surface%get_Xcid none~get_xc~2->proc~get_xcid~2 proc~get_xci~2 nurbs_surface%get_Xci none~get_xc~2->proc~get_xci~2 proc~set1~2 nurbs_surface%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_surface%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_surface%set3 none~set~2->proc~set3~2 proc~cmp_degree~2 nurbs_surface%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~cmp_nc~2 nurbs_surface%cmp_nc proc~set1~2->proc~cmp_nc~2 proc~set2~2->proc~cmp_nc~2 proc~compute_knot_vector compute_knot_vector proc~set2~2->proc~compute_knot_vector proc~set3~2->proc~cmp_degree~2 proc~get_multiplicity~2 nurbs_surface%get_multiplicity proc~cmp_degree~2->proc~get_multiplicity~2 interface~compute_multiplicity compute_multiplicity proc~cmp_nc~2->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity~2->interface~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 :: Xg (:,:) real(kind=rk) :: aspect_ratio type(color) :: background_color integer :: blue type(colormap) :: cmap integer :: green integer :: height integer :: i integer, allocatable :: idx (:,:) type(format_pnm) :: image integer :: ng (2) integer(kind=ik), allocatable :: px (:,:) integer :: red integer :: res1 integer :: res2 type( nurbs_surface ) :: shape type(timer) :: t integer :: width real(kind=rk), allocatable :: z_values (:)","tags":"","loc":"program/example_ppm3.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_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_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 curve object to create, and finalize a NURBS 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 NURBS curve Define weights for the control points Set control points and weights for the NURBS curve object Deallocate local arrays Export initial control points to a VTK file Generate the NURBS curve with a resolution of 500 Export the generated curve to a VTK file Show the control geometry and geometry using PyVista Finalize the NURBS curve object Calls program~~example_nurbs_curve~~CallsGraph program~example_nurbs_curve example_nurbs_curve none~set~3 nurbs_curve%set program~example_nurbs_curve->none~set~3 proc~create~3 nurbs_curve%create program~example_nurbs_curve->proc~create~3 proc~export_xc~3 nurbs_curve%export_Xc program~example_nurbs_curve->proc~export_xc~3 proc~export_xg~3 nurbs_curve%export_Xg program~example_nurbs_curve->proc~export_xg~3 proc~finalize~3 nurbs_curve%finalize program~example_nurbs_curve->proc~finalize~3 proc~generate_xc generate_Xc program~example_nurbs_curve->proc~generate_xc proc~show~3 nurbs_curve%show program~example_nurbs_curve->proc~show~3 proc~set1~3 nurbs_curve%set1 none~set~3->proc~set1~3 proc~set2~3 nurbs_curve%set2 none~set~3->proc~set2~3 proc~set3~3 nurbs_curve%set3 none~set~3->proc~set3~3 interface~compute_xg~3 compute_Xg proc~create~3->interface~compute_xg~3 proc~is_rational~3 nurbs_curve%is_rational proc~create~3->proc~is_rational~3 proc~cmp_elem_xc_vis~3 nurbs_curve%cmp_elem_Xc_vis proc~export_xc~3->proc~cmp_elem_xc_vis~3 proc~cmp_elem_xg_vis~3 nurbs_curve%cmp_elem_Xg_vis proc~export_xg~3->proc~cmp_elem_xg_vis~3 interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xc_vis~3->interface~elemconn_c0 proc~cmp_elem_xg_vis~3->interface~elemconn_c0 proc~cmp_degree~3 nurbs_curve%cmp_degree proc~set1~3->proc~cmp_degree~3 proc~compute_knot_vector compute_knot_vector proc~set2~3->proc~compute_knot_vector proc~set3~3->proc~cmp_degree~3 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v proc~get_multiplicity~3 nurbs_curve%get_multiplicity proc~cmp_degree~3->proc~get_multiplicity~3 proc~repelem repelem proc~compute_knot_vector->proc~repelem interface~compute_multiplicity compute_multiplicity proc~get_multiplicity~3->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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( nurbs_curve ) :: nurbs Declare a NURBS 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), allocatable, (:,:) 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 !----------------------------------------------------------------------------- ! Setting up the NURBS curve !----------------------------------------------------------------------------- !> Define control points for the NURBS 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 NURBS curve object call nurbs % set ( Xc , Wc ) !> Deallocate local arrays deallocate ( Xc , Wc ) !> Export initial control points to a VTK file call nurbs % export_Xc ( 'vtk/demo_curve_Xc.vtk' ) !----------------------------------------------------------------------------- ! Creating the NURBS curve !----------------------------------------------------------------------------- !> Generate the NURBS curve with a resolution of 500 call nurbs % create ( res = 500 ) !> Export the generated curve to a VTK file call nurbs % export_Xg ( 'vtk/demo_curve_Xg.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call nurbs % show ( 'vtk/demo_curve_Xc.vtk' , 'vtk/demo_curve_Xg.vtk' ) !----------------------------------------------------------------------------- ! Finalizing !----------------------------------------------------------------------------- !> Finalize the NURBS curve object call nurbs % 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 ), 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 * real ( coil - 1 , rk ) / 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_nurbs_curve","tags":"","loc":"program/example_nurbs_curve.html"},{"title":"example_nurbs_surface – ForCAD","text":"Uses forcad program~~example_nurbs_surface~~UsesGraph program~example_nurbs_surface example_nurbs_surface module~forcad forcad program~example_nurbs_surface->module~forcad module~forcad_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_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 surface object to create, and finalize a NURBS 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 NURBS surface Define weights for the control points Set control points and weights for the NURBS surface object Deallocate local arrays Export initial control points to a VTK file Generate the NURBS surface with a resolution of 30x30 Export the generated surface to a VTK file Show the control geometry and geometry using PyVista Finalize the NURBS surface object Calls program~~example_nurbs_surface~~CallsGraph program~example_nurbs_surface example_nurbs_surface none~set~2 nurbs_surface%set program~example_nurbs_surface->none~set~2 proc~create~2 nurbs_surface%create program~example_nurbs_surface->proc~create~2 proc~export_xc~2 nurbs_surface%export_Xc program~example_nurbs_surface->proc~export_xc~2 proc~export_xg~2 nurbs_surface%export_Xg program~example_nurbs_surface->proc~export_xg~2 proc~finalize~2 nurbs_surface%finalize program~example_nurbs_surface->proc~finalize~2 proc~generate_xc~2 generate_Xc program~example_nurbs_surface->proc~generate_xc~2 proc~show~2 nurbs_surface%show program~example_nurbs_surface->proc~show~2 proc~set1~2 nurbs_surface%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_surface%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_surface%set3 none~set~2->proc~set3~2 interface~compute_xg~2 compute_Xg proc~create~2->interface~compute_xg~2 interface~ndgrid ndgrid proc~create~2->interface~ndgrid proc~is_rational~2 nurbs_surface%is_rational proc~create~2->proc~is_rational~2 proc~cmp_elem_xc_vis~2 nurbs_surface%cmp_elem_Xc_vis proc~export_xc~2->proc~cmp_elem_xc_vis~2 proc~cmp_elem_xg_vis~2 nurbs_surface%cmp_elem_Xg_vis proc~export_xg~2->proc~cmp_elem_xg_vis~2 proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 ndgrid3 interface~ndgrid->proc~ndgrid3 interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xc_vis~2->interface~elemconn_c0 proc~cmp_elem_xg_vis~2->interface~elemconn_c0 proc~cmp_degree~2 nurbs_surface%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~cmp_nc~2 nurbs_surface%cmp_nc proc~set1~2->proc~cmp_nc~2 proc~set2~2->proc~cmp_nc~2 proc~compute_knot_vector compute_knot_vector proc~set2~2->proc~compute_knot_vector proc~set3~2->proc~cmp_degree~2 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v proc~get_multiplicity~2 nurbs_surface%get_multiplicity proc~cmp_degree~2->proc~get_multiplicity~2 interface~compute_multiplicity compute_multiplicity proc~cmp_nc~2->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity~2->interface~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 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), allocatable, (:,:) Source Code program example_nurbs_surface use forcad , only : rk , nurbs_surface implicit none type ( nurbs_surface ) :: nurbs !! Declare a NURBS surface object real ( rk ), allocatable :: Xc (:,:), Wc (:) !! Arrays for control points and weights !----------------------------------------------------------------------------- ! Setting up the NURBS surface !----------------------------------------------------------------------------- !> Define control points for the NURBS 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 NURBS surface object call nurbs % set ([ 10 , 10 ], Xc , Wc ) !> Deallocate local arrays deallocate ( Xc , Wc ) !> Export initial control points to a VTK file call nurbs % export_Xc ( 'vtk/demo_surface_Xc.vtk' ) !----------------------------------------------------------------------------- ! Creating the NURBS surface !----------------------------------------------------------------------------- !> Generate the NURBS surface with a resolution of 30x30 call nurbs % create ( res1 = 30 , res2 = 30 ) !> Export the generated surface to a VTK file call nurbs % export_Xg ( 'vtk/demo_surface_Xg.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call nurbs % show ( 'vtk/demo_surface_Xc.vtk' , 'vtk/demo_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 ), 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 , rk ) y_spacing = 1.0_rk / real ( num_rows - 1 , rk ) 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 , rk ) * x_spacing control_points (( i - 1 ) * num_cols + j , 2 ) = y_offset + real ( i - 1 , rk ) * 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":"shape_tetragon – ForCAD","text":"Uses forcad program~~shape_tetragon~~UsesGraph program~shape_tetragon shape_tetragon module~forcad forcad program~shape_tetragon->module~forcad 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_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. Set a tetragon with lengths of 2.0 and 3.0 and 3 and 4 control points in each direction\nThe weights of the control points (Wc) are optional. 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 Show the control geometry and geometry using PyVista Finalize the NURBS surface object Calls program~~shape_tetragon~~CallsGraph program~shape_tetragon shape_tetragon proc~create~2 nurbs_surface%create program~shape_tetragon->proc~create~2 proc~export_xc~2 nurbs_surface%export_Xc program~shape_tetragon->proc~export_xc~2 proc~export_xg~2 nurbs_surface%export_Xg program~shape_tetragon->proc~export_xg~2 proc~finalize~2 nurbs_surface%finalize program~shape_tetragon->proc~finalize~2 proc~set_tetragon nurbs_surface%set_tetragon program~shape_tetragon->proc~set_tetragon proc~show~2 nurbs_surface%show program~shape_tetragon->proc~show~2 interface~compute_xg~2 compute_Xg proc~create~2->interface~compute_xg~2 interface~ndgrid ndgrid proc~create~2->interface~ndgrid proc~is_rational~2 nurbs_surface%is_rational proc~create~2->proc~is_rational~2 proc~cmp_elem_xc_vis~2 nurbs_surface%cmp_elem_Xc_vis proc~export_xc~2->proc~cmp_elem_xc_vis~2 proc~cmp_elem_xg_vis~2 nurbs_surface%cmp_elem_Xg_vis proc~export_xg~2->proc~cmp_elem_xg_vis~2 none~set~2 nurbs_surface%set proc~set_tetragon->none~set~2 proc~tetragon_xc tetragon_Xc proc~set_tetragon->proc~tetragon_xc proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 ndgrid3 interface~ndgrid->proc~ndgrid3 proc~set1~2 nurbs_surface%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_surface%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_surface%set3 none~set~2->proc~set3~2 interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xc_vis~2->interface~elemconn_c0 proc~cmp_elem_xg_vis~2->interface~elemconn_c0 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v proc~cmp_degree~2 nurbs_surface%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~cmp_nc~2 nurbs_surface%cmp_nc proc~set1~2->proc~cmp_nc~2 proc~set2~2->proc~cmp_nc~2 proc~compute_knot_vector compute_knot_vector proc~set2~2->proc~compute_knot_vector proc~set3~2->proc~cmp_degree~2 proc~get_multiplicity~2 nurbs_surface%get_multiplicity proc~cmp_degree~2->proc~get_multiplicity~2 interface~compute_multiplicity compute_multiplicity proc~cmp_nc~2->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity~2->interface~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 type( nurbs_surface ) :: shape Declare a NURBS surface object","tags":"","loc":"program/shape_tetragon.html"},{"title":"example_put_to_nurbs – ForCAD","text":"Uses forcad forcad_utils program~~example_put_to_nurbs~~UsesGraph program~example_put_to_nurbs example_put_to_nurbs module~forcad forcad program~example_put_to_nurbs->module~forcad module~forcad_utils forcad_utils program~example_put_to_nurbs->module~forcad_utils module~forcad->module~forcad_utils 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_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. You can create your shape or use a predefined one\nRead coordinates from file\nRead element connectivities from file\nSet a control shape that will be used to put the shape into\nThe contol shape is a hexahedron with 100x40x10 with 10x5x3 number of control points\nBy modifying the control shape you can modify the shape Map the shape into the shape Deallocate local variables Export the shape and the control shape to vtk files\nShow the control geometry and geometry using PyVista Finalize the control shape Calls program~~example_put_to_nurbs~~CallsGraph program~example_put_to_nurbs example_put_to_nurbs none~set nurbs_volume%set program~example_put_to_nurbs->none~set proc~export_xc nurbs_volume%export_Xc program~example_put_to_nurbs->proc~export_xc proc~export_xg nurbs_volume%export_Xg program~example_put_to_nurbs->proc~export_xg proc~finalize nurbs_volume%finalize program~example_put_to_nurbs->proc~finalize proc~hexahedron_xc hexahedron_Xc program~example_put_to_nurbs->proc~hexahedron_xc proc~put_to_nurbs nurbs_volume%put_to_nurbs program~example_put_to_nurbs->proc~put_to_nurbs proc~show nurbs_volume%show program~example_put_to_nurbs->proc~show proc~set1 nurbs_volume%set1 none~set->proc~set1 proc~set2 nurbs_volume%set2 none~set->proc~set2 proc~set3 nurbs_volume%set3 none~set->proc~set3 proc~cmp_elem_xc_vis nurbs_volume%cmp_elem_Xc_vis proc~export_xc->proc~cmp_elem_xc_vis proc~cmp_elem_xg_vis nurbs_volume%cmp_elem_Xg_vis proc~export_xg->proc~cmp_elem_xg_vis proc~basis_bspline basis_bspline proc~put_to_nurbs->proc~basis_bspline proc~kron kron proc~put_to_nurbs->proc~kron proc~set_elem_xg_vis nurbs_volume%set_elem_Xg_vis proc~put_to_nurbs->proc~set_elem_xg_vis interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xc_vis->interface~elemconn_c0 proc~cmp_elem_xg_vis->interface~elemconn_c0 proc~cmp_degree nurbs_volume%cmp_degree proc~set1->proc~cmp_degree proc~cmp_nc nurbs_volume%cmp_nc proc~set1->proc~cmp_nc proc~set2->proc~cmp_nc proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector proc~set3->proc~cmp_degree proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v proc~get_multiplicity nurbs_volume%get_multiplicity proc~cmp_degree->proc~get_multiplicity interface~compute_multiplicity compute_multiplicity proc~cmp_nc->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity->interface~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 :: X (:,:) type( nurbs_volume ) :: control_shape integer, allocatable :: elem (:,:) integer :: i integer :: nunit","tags":"","loc":"program/example_put_to_nurbs.html"},{"title":"shape_C_3d – ForCAD","text":"Uses forcad program~~shape_c_3d~~UsesGraph program~shape_c_3d shape_C_3d module~forcad forcad program~shape_c_3d->module~forcad 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_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. Set a C-shape with radius 2.0 and center at [0.0, 0.0, 0.0] Export control points to a VTK file Generate the NURBS C-shape with a resolution of 100 Export the generated cirlce to a VTK file Show the control geometry and geometry using PyVista Finalize the NURBS curve object Calls program~~shape_c_3d~~CallsGraph program~shape_c_3d shape_C_3d proc~create nurbs_volume%create program~shape_c_3d->proc~create proc~export_xc nurbs_volume%export_Xc program~shape_c_3d->proc~export_xc proc~export_xg nurbs_volume%export_Xg program~shape_c_3d->proc~export_xg proc~finalize nurbs_volume%finalize program~shape_c_3d->proc~finalize proc~set_c nurbs_volume%set_C program~shape_c_3d->proc~set_c proc~show nurbs_volume%show program~shape_c_3d->proc~show interface~compute_xg compute_Xg proc~create->interface~compute_xg interface~ndgrid ndgrid proc~create->interface~ndgrid proc~is_rational nurbs_volume%is_rational proc~create->proc~is_rational proc~cmp_elem_xc_vis nurbs_volume%cmp_elem_Xc_vis proc~export_xc->proc~cmp_elem_xc_vis proc~cmp_elem_xg_vis nurbs_volume%cmp_elem_Xg_vis proc~export_xg->proc~cmp_elem_xg_vis none~set nurbs_volume%set proc~set_c->none~set proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 ndgrid3 interface~ndgrid->proc~ndgrid3 proc~set1 nurbs_volume%set1 none~set->proc~set1 proc~set2 nurbs_volume%set2 none~set->proc~set2 proc~set3 nurbs_volume%set3 none~set->proc~set3 interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xc_vis->interface~elemconn_c0 proc~cmp_elem_xg_vis->interface~elemconn_c0 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v proc~cmp_degree nurbs_volume%cmp_degree proc~set1->proc~cmp_degree proc~cmp_nc nurbs_volume%cmp_nc proc~set1->proc~cmp_nc proc~set2->proc~cmp_nc proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector proc~set3->proc~cmp_degree proc~get_multiplicity nurbs_volume%get_multiplicity proc~cmp_degree->proc~get_multiplicity interface~compute_multiplicity compute_multiplicity proc~cmp_nc->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity->interface~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 type( nurbs_volume ) :: shape","tags":"","loc":"program/shape_c_3d.html"},{"title":"example3_surface – ForCAD","text":"Uses forcad program~~example3_surface~~UsesGraph program~example3_surface example3_surface module~forcad forcad program~example3_surface->module~forcad 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_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 Deallocate local arrays 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 Show the control geometry and geometry using PyVista Print size of the knot vectors\nInsert knots 0.25, twice and 0.75, once in both directions\nPrint size of the knot vectors after inserting knots\nPrint the degrees Elevate degree by 2 in both directions\nPrint the degrees after elevating Print size of the knot vectors\nRemove knots 0.25, twice and 0.75, once in both directions\nPrint size of the knot vectors after removing knots\nGenerate the refined NURBS surface with resolutions of 30 in both dimensions Export updated control points to a VTK file Export the refined generated surface to a VTK file Show the control geometry and geometry using PyVista Rotate the control points Rotate the generated curve Translate the control points Translate the generated curve Export the transformed control points to a VTK file Export the transformed generated volume to a VTK file Show the control geometry and geometry using PyVista Finalize the NURBS surface object Calls program~~example3_surface~~CallsGraph program~example3_surface example3_surface none~get_degree~2 nurbs_surface%get_degree program~example3_surface->none~get_degree~2 none~get_knot~2 nurbs_surface%get_knot program~example3_surface->none~get_knot~2 none~set~2 nurbs_surface%set program~example3_surface->none~set~2 proc~create~2 nurbs_surface%create program~example3_surface->proc~create~2 proc~elevate_degree~2 nurbs_surface%elevate_degree program~example3_surface->proc~elevate_degree~2 proc~export_xc~2 nurbs_surface%export_Xc program~example3_surface->proc~export_xc~2 proc~export_xg~2 nurbs_surface%export_Xg program~example3_surface->proc~export_xg~2 proc~finalize~2 nurbs_surface%finalize program~example3_surface->proc~finalize~2 proc~generate_xc~3 generate_Xc program~example3_surface->proc~generate_xc~3 proc~insert_knots~2 nurbs_surface%insert_knots program~example3_surface->proc~insert_knots~2 proc~remove_knots~2 nurbs_surface%remove_knots program~example3_surface->proc~remove_knots~2 proc~rotate_xc~2 nurbs_surface%rotate_Xc program~example3_surface->proc~rotate_xc~2 proc~rotate_xg~2 nurbs_surface%rotate_Xg program~example3_surface->proc~rotate_xg~2 proc~show~2 nurbs_surface%show program~example3_surface->proc~show~2 proc~translate_xc~2 nurbs_surface%translate_Xc program~example3_surface->proc~translate_xc~2 proc~translate_xg~2 nurbs_surface%translate_Xg program~example3_surface->proc~translate_xg~2 proc~get_degree_all~2 nurbs_surface%get_degree_all none~get_degree~2->proc~get_degree_all~2 proc~get_degree_dir~2 nurbs_surface%get_degree_dir none~get_degree~2->proc~get_degree_dir~2 proc~get_knot_all~2 nurbs_surface%get_knot_all none~get_knot~2->proc~get_knot_all~2 proc~get_knoti~2 nurbs_surface%get_knoti none~get_knot~2->proc~get_knoti~2 proc~set1~2 nurbs_surface%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_surface%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_surface%set3 none~set~2->proc~set3~2 interface~compute_xg~2 compute_Xg proc~create~2->interface~compute_xg~2 interface~ndgrid ndgrid proc~create~2->interface~ndgrid proc~is_rational~2 nurbs_surface%is_rational proc~create~2->proc~is_rational~2 proc~elevate_degree~2->none~get_knot~2 proc~elevate_degree~2->none~set~2 proc~elevate_degree_a_5_9 elevate_degree_A_5_9 proc~elevate_degree~2->proc~elevate_degree_a_5_9 proc~elevate_degree~2->proc~is_rational~2 proc~cmp_elem_xc_vis~2 nurbs_surface%cmp_elem_Xc_vis proc~export_xc~2->proc~cmp_elem_xc_vis~2 proc~cmp_elem_xg_vis~2 nurbs_surface%cmp_elem_Xg_vis proc~export_xg~2->proc~cmp_elem_xg_vis~2 proc~insert_knots~2->none~get_knot~2 proc~insert_knots~2->none~set~2 interface~compute_multiplicity compute_multiplicity proc~insert_knots~2->interface~compute_multiplicity proc~findspan findspan proc~insert_knots~2->proc~findspan proc~insert_knot_a_5_1 insert_knot_A_5_1 proc~insert_knots~2->proc~insert_knot_a_5_1 proc~insert_knots~2->proc~is_rational~2 proc~remove_knots~2->none~get_knot~2 proc~remove_knots~2->none~set~2 proc~remove_knots~2->interface~compute_multiplicity proc~remove_knots~2->proc~findspan proc~remove_knots~2->proc~is_rational~2 proc~remove_knots_a_5_8 remove_knots_A_5_8 proc~remove_knots~2->proc~remove_knots_a_5_8 proc~rotation rotation proc~rotate_xc~2->proc~rotation proc~rotate_xg~2->proc~rotation proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 ndgrid3 interface~ndgrid->proc~ndgrid3 interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xc_vis~2->interface~elemconn_c0 proc~cmp_elem_xg_vis~2->interface~elemconn_c0 proc~elevate_degree_a_5_9->interface~compute_multiplicity proc~bincoeff bincoeff proc~elevate_degree_a_5_9->proc~bincoeff cosd cosd proc~rotation->cosd sind sind proc~rotation->sind proc~cmp_degree~2 nurbs_surface%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~cmp_nc~2 nurbs_surface%cmp_nc proc~set1~2->proc~cmp_nc~2 proc~set2~2->proc~cmp_nc~2 proc~compute_knot_vector compute_knot_vector proc~set2~2->proc~compute_knot_vector proc~set3~2->proc~cmp_degree~2 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v proc~factln factln proc~bincoeff->proc~factln proc~get_multiplicity~2 nurbs_surface%get_multiplicity proc~cmp_degree~2->proc~get_multiplicity~2 proc~cmp_nc~2->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~get_multiplicity~2->interface~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), allocatable, (:,:) Source Code program example3_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 Wc ( 2 ) = 2.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 ) !> Deallocate local arrays deallocate ( 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' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call nurbs % show ( 'vtk/nurbs_surface_Xc.vtk' , 'vtk/nurbs_surface_Xg.vtk' ) !----------------------------------------------------------------------------- ! Refinements !----------------------------------------------------------------------------- !> Print size of the knot vectors print * , size ( nurbs % get_knot ( 1 )) print * , size ( nurbs % get_knot ( 2 )) !> Insert knots 0.25, twice and 0.75, once in both directions call nurbs % insert_knots ( 1 , [ 0.25_rk , 0.75_rk ], [ 2 , 1 ]) ! direction 1 call nurbs % insert_knots ( 2 , [ 0.25_rk , 0.75_rk ], [ 2 , 1 ]) ! direction 2 !> Print size of the knot vectors after inserting knots print * , size ( nurbs % get_knot ( 1 )) print * , size ( nurbs % get_knot ( 2 )) !> Print the degrees print * , nurbs % get_degree () !> Elevate degree by 2 in both directions call nurbs % elevate_degree ( 1 , 2 ) ! direction 1 call nurbs % elevate_degree ( 2 , 2 ) ! direction 2 !> Print the degrees after elevating print * , nurbs % get_degree () !> Print size of the knot vectors print * , size ( nurbs % get_knot ( 1 )) print * , size ( nurbs % get_knot ( 2 )) !> Remove knots 0.25, twice and 0.75, once in both directions call nurbs % remove_knots ( 1 , [ 0.25_rk , 0.75_rk ], [ 2 , 1 ]) ! direction 1 call nurbs % remove_knots ( 2 , [ 0.25_rk , 0.75_rk ], [ 2 , 1 ]) ! direction 2 !> Print size of the knot vectors after removing knots print * , size ( nurbs % get_knot ( 1 )) print * , size ( nurbs % get_knot ( 2 )) !> Generate the refined NURBS surface with resolutions of 30 in both dimensions call nurbs % create () !> Export updated control points to a VTK file call nurbs % export_Xc ( 'vtk/nurbs_surface_Xc2.vtk' ) !> Export the refined generated surface to a VTK file call nurbs % export_Xg ( 'vtk/nurbs_surface_Xg2.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call nurbs % show ( 'vtk/nurbs_surface_Xc2.vtk' , 'vtk/nurbs_surface_Xg2.vtk' ) !----------------------------------------------------------------------------- ! Transformations !----------------------------------------------------------------------------- !> Rotate the control points call nurbs % rotate_Xc ( alpha = 4 5.0_rk , beta = 0.0_rk , theta = 9 0.0_rk ) !> Rotate the generated curve call nurbs % rotate_Xg ( alpha =- 4 5.0_rk , beta = 0.0_rk , theta =- 9 0.0_rk ) !> Translate the control points call nurbs % translate_Xc ([ 1.0_rk , 2.0_rk , - 3.0_rk ]) !> Translate the generated curve call nurbs % translate_Xg ([ - 1.0_rk , - 2.0_rk , 3.0_rk ]) !> Export the transformed control points to a VTK file call nurbs % export_Xc ( 'vtk/nurbs_surface_Xc3.vtk' ) !> Export the transformed generated volume to a VTK file call nurbs % export_Xg ( 'vtk/nurbs_surface_Xg3.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call nurbs % show ( 'vtk/nurbs_surface_Xc3.vtk' , 'vtk/nurbs_surface_Xg3.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 ), 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 , rk ) y_spacing = 1.0_rk / real ( num_rows - 1 , rk ) 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 , rk ) * x_spacing control_points (( i - 1 ) * num_cols + j , 2 ) = y_offset + real ( i - 1 , rk ) * 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 example3_surface","tags":"","loc":"program/example3_surface.html"},{"title":"shape_C_1d – ForCAD","text":"Uses forcad program~~shape_c_1d~~UsesGraph program~shape_c_1d shape_C_1d module~forcad forcad program~shape_c_1d->module~forcad 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_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. Set a C-shape with radius 2.0 and center at [0.0, 0.0, 0.0] Export control points to a VTK file Generate the NURBS C-shape with a resolution of 100 Export the generated cirlce to a VTK file Show the control geometry and geometry using PyVista Finalize the NURBS curve object Calls program~~shape_c_1d~~CallsGraph program~shape_c_1d shape_C_1d proc~create~3 nurbs_curve%create program~shape_c_1d->proc~create~3 proc~export_xc~3 nurbs_curve%export_Xc program~shape_c_1d->proc~export_xc~3 proc~export_xg~3 nurbs_curve%export_Xg program~shape_c_1d->proc~export_xg~3 proc~finalize~3 nurbs_curve%finalize program~shape_c_1d->proc~finalize~3 proc~set_c~3 nurbs_curve%set_C program~shape_c_1d->proc~set_c~3 proc~show~3 nurbs_curve%show program~shape_c_1d->proc~show~3 interface~compute_xg~3 compute_Xg proc~create~3->interface~compute_xg~3 proc~is_rational~3 nurbs_curve%is_rational proc~create~3->proc~is_rational~3 proc~cmp_elem_xc_vis~3 nurbs_curve%cmp_elem_Xc_vis proc~export_xc~3->proc~cmp_elem_xc_vis~3 proc~cmp_elem_xg_vis~3 nurbs_curve%cmp_elem_Xg_vis proc~export_xg~3->proc~cmp_elem_xg_vis~3 none~set~3 nurbs_curve%set proc~set_c~3->none~set~3 proc~set1~3 nurbs_curve%set1 none~set~3->proc~set1~3 proc~set2~3 nurbs_curve%set2 none~set~3->proc~set2~3 proc~set3~3 nurbs_curve%set3 none~set~3->proc~set3~3 interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xc_vis~3->interface~elemconn_c0 proc~cmp_elem_xg_vis~3->interface~elemconn_c0 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v proc~cmp_degree~3 nurbs_curve%cmp_degree proc~set1~3->proc~cmp_degree~3 proc~compute_knot_vector compute_knot_vector proc~set2~3->proc~compute_knot_vector proc~set3~3->proc~cmp_degree~3 proc~get_multiplicity~3 nurbs_curve%get_multiplicity proc~cmp_degree~3->proc~get_multiplicity~3 proc~repelem repelem proc~compute_knot_vector->proc~repelem interface~compute_multiplicity compute_multiplicity proc~get_multiplicity~3->interface~compute_multiplicity proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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 type( nurbs_curve ) :: shape","tags":"","loc":"program/shape_c_1d.html"},{"title":"shape_half_ring_3d – ForCAD","text":"Uses forcad program~~shape_half_ring_3d~~UsesGraph program~shape_half_ring_3d shape_half_ring_3d module~forcad forcad program~shape_half_ring_3d->module~forcad 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_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. Set up a half ring centered at 0,0,0 with inner radius 1, outer radius 2, and length 1. Export the control points to a VTK file for visualization. Create the shape using the specified number of elements in each direction. Export the geometry to a VTK file for visualization. Show the control geometry and geometry using PyVista Finalize and clean up the shape object. Calls program~~shape_half_ring_3d~~CallsGraph program~shape_half_ring_3d shape_half_ring_3d proc~create nurbs_volume%create program~shape_half_ring_3d->proc~create proc~export_xc nurbs_volume%export_Xc program~shape_half_ring_3d->proc~export_xc proc~export_xg nurbs_volume%export_Xg program~shape_half_ring_3d->proc~export_xg proc~finalize nurbs_volume%finalize program~shape_half_ring_3d->proc~finalize proc~set_half_ring nurbs_volume%set_half_ring program~shape_half_ring_3d->proc~set_half_ring proc~show nurbs_volume%show program~shape_half_ring_3d->proc~show interface~compute_xg compute_Xg proc~create->interface~compute_xg interface~ndgrid ndgrid proc~create->interface~ndgrid proc~is_rational nurbs_volume%is_rational proc~create->proc~is_rational proc~cmp_elem_xc_vis nurbs_volume%cmp_elem_Xc_vis proc~export_xc->proc~cmp_elem_xc_vis proc~cmp_elem_xg_vis nurbs_volume%cmp_elem_Xg_vis proc~export_xg->proc~cmp_elem_xg_vis none~set nurbs_volume%set proc~set_half_ring->none~set proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 ndgrid3 interface~ndgrid->proc~ndgrid3 proc~set1 nurbs_volume%set1 none~set->proc~set1 proc~set2 nurbs_volume%set2 none~set->proc~set2 proc~set3 nurbs_volume%set3 none~set->proc~set3 interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xc_vis->interface~elemconn_c0 proc~cmp_elem_xg_vis->interface~elemconn_c0 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v proc~cmp_degree nurbs_volume%cmp_degree proc~set1->proc~cmp_degree proc~cmp_nc nurbs_volume%cmp_nc proc~set1->proc~cmp_nc proc~set2->proc~cmp_nc proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector proc~set3->proc~cmp_degree proc~get_multiplicity nurbs_volume%get_multiplicity proc~cmp_degree->proc~get_multiplicity interface~compute_multiplicity compute_multiplicity proc~cmp_nc->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity->interface~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 type( nurbs_volume ) :: shape","tags":"","loc":"program/shape_half_ring_3d.html"},{"title":"example1_curve – ForCAD","text":"Uses forcad program~~example1_curve~~UsesGraph program~example1_curve example1_curve module~forcad forcad program~example1_curve->module~forcad 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_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. Define control points for the NURBS curve\nDefine weights for the control points (optional)\nDefine knot vector Set knot vector, control points, and weights for the NURBS curve object.\nWc is optional Deallocate local arrays Export control points to a VTK file Generate the NURBS curve with a resolution of 20 Export the generated curve to a VTK file Show the control geometry and geometry using PyVista Print size of the knot vector Insert knots 0.25, twice and 0.75, once Print size of the updated knot vector Print the degree of the curve Elevate the degree of the curve (2 times) Print the updated degree of the curve Print size of the knot vector Remove knots 0.25, twice and 0.75, once Print size of the updated knot vector Generate the refined curve with a resolution of 20 Export updated control points to a VTK file Export the refined generated curve to a VTK file Show the control geometry and geometry using PyVista Rotate the control points Rotate the generated curve Translate the control points Translate the generated curve Export the transformed control points to a VTK file Export the transformed generated volume to a VTK file Show the control geometry and geometry using PyVista Finalize the NURBS curve object Calls program~~example1_curve~~CallsGraph program~example1_curve example1_curve none~get_knot~3 nurbs_curve%get_knot program~example1_curve->none~get_knot~3 none~set~3 nurbs_curve%set program~example1_curve->none~set~3 proc~create~3 nurbs_curve%create program~example1_curve->proc~create~3 proc~elevate_degree~3 nurbs_curve%elevate_degree program~example1_curve->proc~elevate_degree~3 proc~export_xc~3 nurbs_curve%export_Xc program~example1_curve->proc~export_xc~3 proc~export_xg~3 nurbs_curve%export_Xg program~example1_curve->proc~export_xg~3 proc~finalize~3 nurbs_curve%finalize program~example1_curve->proc~finalize~3 proc~get_degree nurbs_curve%get_degree program~example1_curve->proc~get_degree proc~insert_knots~3 nurbs_curve%insert_knots program~example1_curve->proc~insert_knots~3 proc~remove_knots~3 nurbs_curve%remove_knots program~example1_curve->proc~remove_knots~3 proc~rotate_xc~3 nurbs_curve%rotate_Xc program~example1_curve->proc~rotate_xc~3 proc~rotate_xg~3 nurbs_curve%rotate_Xg program~example1_curve->proc~rotate_xg~3 proc~show~3 nurbs_curve%show program~example1_curve->proc~show~3 proc~translate_xc~3 nurbs_curve%translate_Xc program~example1_curve->proc~translate_xc~3 proc~translate_xg~3 nurbs_curve%translate_Xg program~example1_curve->proc~translate_xg~3 proc~get_knot_all~3 nurbs_curve%get_knot_all none~get_knot~3->proc~get_knot_all~3 proc~get_knoti~3 nurbs_curve%get_knoti none~get_knot~3->proc~get_knoti~3 proc~set1~3 nurbs_curve%set1 none~set~3->proc~set1~3 proc~set2~3 nurbs_curve%set2 none~set~3->proc~set2~3 proc~set3~3 nurbs_curve%set3 none~set~3->proc~set3~3 interface~compute_xg~3 compute_Xg proc~create~3->interface~compute_xg~3 proc~is_rational~3 nurbs_curve%is_rational proc~create~3->proc~is_rational~3 proc~elevate_degree~3->none~set~3 proc~elevate_degree_a_5_9 elevate_degree_A_5_9 proc~elevate_degree~3->proc~elevate_degree_a_5_9 proc~elevate_degree~3->proc~is_rational~3 proc~cmp_elem_xc_vis~3 nurbs_curve%cmp_elem_Xc_vis proc~export_xc~3->proc~cmp_elem_xc_vis~3 proc~cmp_elem_xg_vis~3 nurbs_curve%cmp_elem_Xg_vis proc~export_xg~3->proc~cmp_elem_xg_vis~3 proc~insert_knots~3->none~set~3 interface~compute_multiplicity compute_multiplicity proc~insert_knots~3->interface~compute_multiplicity proc~findspan findspan proc~insert_knots~3->proc~findspan proc~insert_knot_a_5_1 insert_knot_A_5_1 proc~insert_knots~3->proc~insert_knot_a_5_1 proc~insert_knots~3->proc~is_rational~3 proc~remove_knots~3->none~set~3 proc~remove_knots~3->interface~compute_multiplicity proc~remove_knots~3->proc~findspan proc~remove_knots~3->proc~is_rational~3 proc~remove_knots_a_5_8 remove_knots_A_5_8 proc~remove_knots~3->proc~remove_knots_a_5_8 proc~rotation rotation proc~rotate_xc~3->proc~rotation proc~rotate_xg~3->proc~rotation proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xc_vis~3->interface~elemconn_c0 proc~cmp_elem_xg_vis~3->interface~elemconn_c0 proc~elevate_degree_a_5_9->interface~compute_multiplicity proc~bincoeff bincoeff proc~elevate_degree_a_5_9->proc~bincoeff cosd cosd proc~rotation->cosd sind sind proc~rotation->sind proc~cmp_degree~3 nurbs_curve%cmp_degree proc~set1~3->proc~cmp_degree~3 proc~compute_knot_vector compute_knot_vector proc~set2~3->proc~compute_knot_vector proc~set3~3->proc~cmp_degree~3 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v proc~factln factln proc~bincoeff->proc~factln proc~get_multiplicity~3 nurbs_curve%get_multiplicity proc~cmp_degree~3->proc~get_multiplicity~3 proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~get_multiplicity~3->interface~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 (6) Array for knot vector type( nurbs_curve ) :: nurbs Declare a NURBS curve object Source Code program example1_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 ( 6 ) !! 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 ,:) = [ 5.0_rk , 5.0_rk , 0.0_rk ] !> Define weights for the control points (optional) allocate ( Wc ( 3 )) Wc = [ 1.0_rk , 2.0_rk , 0.3_rk ] !> Define knot vector knot = [ 0.0_rk , 0.0_rk , 0.0_rk , 1.0_rk , 1.0_rk , 1.0_rk ] !> Set knot vector, control points, and weights for the NURBS curve object. !> Wc is optional call nurbs % set ( knot , Xc , Wc ) !> Deallocate local arrays deallocate ( 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 20 call nurbs % create ( res = 20 ) !> Export the generated curve to a VTK file call nurbs % export_Xg ( 'vtk/nurbs_curve_Xg.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call nurbs % show ( 'vtk/nurbs_curve_Xc.vtk' , 'vtk/nurbs_curve_Xg.vtk' ) !----------------------------------------------------------------------------- ! Refinements !----------------------------------------------------------------------------- !> Print size of the knot vector print * , size ( nurbs % get_knot ()) !> Insert knots 0.25, twice and 0.75, once call nurbs % insert_knots ([ 0.25_rk , 0.75_rk ], [ 2 , 1 ]) !> Print size of the updated knot vector print * , size ( nurbs % get_knot ()) !> Print the degree of the curve print * , nurbs % get_degree () !> Elevate the degree of the curve (2 times) call nurbs % elevate_degree ( 2 ) !> Print the updated degree of the curve print * , nurbs % get_degree () !> Print size of the knot vector print * , size ( nurbs % get_knot ()) !> Remove knots 0.25, twice and 0.75, once call nurbs % remove_knots ([ 0.25_rk , 0.75_rk ], [ 2 , 1 ]) !> Print size of the updated knot vector print * , size ( nurbs % get_knot ()) !> Generate the refined curve with a resolution of 20 call nurbs % create () !> Export updated control points to a VTK file call nurbs % export_Xc ( 'vtk/nurbs_curve_Xc2.vtk' ) !> Export the refined generated curve to a VTK file call nurbs % export_Xg ( 'vtk/nurbs_curve_Xg2.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call nurbs % show ( 'vtk/nurbs_curve_Xc2.vtk' , 'vtk/nurbs_curve_Xg2.vtk' ) !----------------------------------------------------------------------------- ! Transformations !----------------------------------------------------------------------------- !> Rotate the control points call nurbs % rotate_Xc ( alpha = 4 5.0_rk , beta = 0.0_rk , theta = 9 0.0_rk ) !> Rotate the generated curve call nurbs % rotate_Xg ( alpha =- 4 5.0_rk , beta = 0.0_rk , theta =- 9 0.0_rk ) !> Translate the control points call nurbs % translate_Xc ([ 1.0_rk , 2.0_rk , - 3.0_rk ]) !> Translate the generated curve call nurbs % translate_Xg ([ - 1.0_rk , - 2.0_rk , 3.0_rk ]) !> Export the transformed control points to a VTK file call nurbs % export_Xc ( 'vtk/nurbs_curve_Xc3.vtk' ) !> Export the transformed generated volume to a VTK file call nurbs % export_Xg ( 'vtk/nurbs_curve_Xg3.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call nurbs % show ( 'vtk/nurbs_curve_Xc3.vtk' , 'vtk/nurbs_curve_Xg3.vtk' ) !----------------------------------------------------------------------------- ! Finalizing !----------------------------------------------------------------------------- !> Finalize the NURBS curve object call nurbs % finalize () end program example1_curve","tags":"","loc":"program/example1_curve.html"},{"title":"shape_C_2d – ForCAD","text":"Uses forcad program~~shape_c_2d~~UsesGraph program~shape_c_2d shape_C_2d module~forcad forcad program~shape_c_2d->module~forcad 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_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. Set a C-shape with radius 2.0 and center at [0.0, 0.0, 0.0] Export control points to a VTK file Generate the NURBS C-shape with a resolution of 100 Export the generated cirlce to a VTK file Show the control geometry and geometry using PyVista Finalize the NURBS curve object Calls program~~shape_c_2d~~CallsGraph program~shape_c_2d shape_C_2d proc~create~2 nurbs_surface%create program~shape_c_2d->proc~create~2 proc~export_xc~2 nurbs_surface%export_Xc program~shape_c_2d->proc~export_xc~2 proc~export_xg~2 nurbs_surface%export_Xg program~shape_c_2d->proc~export_xg~2 proc~finalize~2 nurbs_surface%finalize program~shape_c_2d->proc~finalize~2 proc~set_c~2 nurbs_surface%set_C program~shape_c_2d->proc~set_c~2 proc~show~2 nurbs_surface%show program~shape_c_2d->proc~show~2 interface~compute_xg~2 compute_Xg proc~create~2->interface~compute_xg~2 interface~ndgrid ndgrid proc~create~2->interface~ndgrid proc~is_rational~2 nurbs_surface%is_rational proc~create~2->proc~is_rational~2 proc~cmp_elem_xc_vis~2 nurbs_surface%cmp_elem_Xc_vis proc~export_xc~2->proc~cmp_elem_xc_vis~2 proc~cmp_elem_xg_vis~2 nurbs_surface%cmp_elem_Xg_vis proc~export_xg~2->proc~cmp_elem_xg_vis~2 none~set~2 nurbs_surface%set proc~set_c~2->none~set~2 proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 ndgrid3 interface~ndgrid->proc~ndgrid3 proc~set1~2 nurbs_surface%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_surface%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_surface%set3 none~set~2->proc~set3~2 interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xc_vis~2->interface~elemconn_c0 proc~cmp_elem_xg_vis~2->interface~elemconn_c0 proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v proc~cmp_degree~2 nurbs_surface%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~cmp_nc~2 nurbs_surface%cmp_nc proc~set1~2->proc~cmp_nc~2 proc~set2~2->proc~cmp_nc~2 proc~compute_knot_vector compute_knot_vector proc~set2~2->proc~compute_knot_vector proc~set3~2->proc~cmp_degree~2 proc~get_multiplicity~2 nurbs_surface%get_multiplicity proc~cmp_degree~2->proc~get_multiplicity~2 interface~compute_multiplicity compute_multiplicity proc~cmp_nc~2->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity~2->interface~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 type( nurbs_surface ) :: shape","tags":"","loc":"program/shape_c_2d.html"},{"title":"example3_volume – ForCAD","text":"Uses forcad program~~example3_volume~~UsesGraph program~example3_volume example3_volume module~forcad forcad program~example3_volume->module~forcad 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_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 (optional)\nDefine knot vectors for all three dimensions\nSet knot vectors, control points, and weights for the NURBS volume object\nWc is optional. Deallocate local arrays Export the control points to a VTK file Generate the NURBS volume with resolutions of 20, 20, and 20 in the three dimensions Export the generated volume to a VTK file Show the control geometry and geometry using PyVista Print size of knot vectors\nInsert knots 0.25 and 0.75 in all three directions\nPrint size of knot vectors after inserting knots\nPrint degrees Elevate degree by 2 in all three directions\nPrint degrees after elevating Print size of knot vectors\nPrint size of knot vectors after removing knots\nGenerate the refined NURBS volume with resolutions of 40, 40, and 40 in the three dimensions Export updated control points to a VTK file Export the refined generated volume to a VTK file Show the control geometry and geometry using PyVista Rotate the control points Rotate the generated curve Translate the control points Translate the generated curve Export the transformed control points to a VTK file Export the transformed generated volume to a VTK file Show the control geometry and geometry using PyVista first compute and set the connectivities of volume elements get the connectivity of the face1 of the first element\nget the degree of the faces\nFinalize the NURBS volume object Calls program~~example3_volume~~CallsGraph program~example3_volume example3_volume none~get_degree nurbs_volume%get_degree program~example3_volume->none~get_degree none~get_knot nurbs_volume%get_knot program~example3_volume->none~get_knot none~set nurbs_volume%set program~example3_volume->none~set proc~cmp_degreeface nurbs_volume%cmp_degreeFace program~example3_volume->proc~cmp_degreeface proc~cmp_elem nurbs_volume%cmp_elem program~example3_volume->proc~cmp_elem proc~cmp_elemface nurbs_volume%cmp_elemFace program~example3_volume->proc~cmp_elemface proc~create nurbs_volume%create program~example3_volume->proc~create proc~elevate_degree nurbs_volume%elevate_degree program~example3_volume->proc~elevate_degree proc~export_xc nurbs_volume%export_Xc program~example3_volume->proc~export_xc proc~export_xg nurbs_volume%export_Xg program~example3_volume->proc~export_xg proc~finalize nurbs_volume%finalize program~example3_volume->proc~finalize proc~generate_xc~4 generate_Xc program~example3_volume->proc~generate_xc~4 proc~insert_knots nurbs_volume%insert_knots program~example3_volume->proc~insert_knots proc~remove_knots nurbs_volume%remove_knots program~example3_volume->proc~remove_knots proc~rotate_xc nurbs_volume%rotate_Xc program~example3_volume->proc~rotate_xc proc~rotate_xg nurbs_volume%rotate_Xg program~example3_volume->proc~rotate_xg proc~set_elem nurbs_volume%set_elem program~example3_volume->proc~set_elem proc~show nurbs_volume%show program~example3_volume->proc~show proc~translate_xc nurbs_volume%translate_Xc program~example3_volume->proc~translate_xc proc~translate_xg nurbs_volume%translate_Xg program~example3_volume->proc~translate_xg proc~get_degree_all nurbs_volume%get_degree_all none~get_degree->proc~get_degree_all proc~get_degree_dir nurbs_volume%get_degree_dir none~get_degree->proc~get_degree_dir proc~get_knot_all nurbs_volume%get_knot_all none~get_knot->proc~get_knot_all proc~get_knoti nurbs_volume%get_knoti none~get_knot->proc~get_knoti proc~set1 nurbs_volume%set1 none~set->proc~set1 proc~set2 nurbs_volume%set2 none~set->proc~set2 proc~set3 nurbs_volume%set3 none~set->proc~set3 interface~elemconn_cn elemConn_Cn proc~cmp_elem->interface~elemconn_cn interface~unique unique proc~cmp_elem->interface~unique proc~get_multiplicity nurbs_volume%get_multiplicity proc~cmp_elem->proc~get_multiplicity interface~compute_xg compute_Xg proc~create->interface~compute_xg interface~ndgrid ndgrid proc~create->interface~ndgrid proc~is_rational nurbs_volume%is_rational proc~create->proc~is_rational proc~elevate_degree->none~get_knot proc~elevate_degree->none~set proc~elevate_degree_a_5_9 elevate_degree_A_5_9 proc~elevate_degree->proc~elevate_degree_a_5_9 proc~cmp_elem_xc_vis nurbs_volume%cmp_elem_Xc_vis proc~export_xc->proc~cmp_elem_xc_vis proc~cmp_elem_xg_vis nurbs_volume%cmp_elem_Xg_vis proc~export_xg->proc~cmp_elem_xg_vis proc~insert_knots->none~get_knot proc~insert_knots->none~set interface~compute_multiplicity compute_multiplicity proc~insert_knots->interface~compute_multiplicity proc~findspan findspan proc~insert_knots->proc~findspan proc~insert_knot_a_5_1 insert_knot_A_5_1 proc~insert_knots->proc~insert_knot_a_5_1 proc~remove_knots->none~get_knot proc~remove_knots->none~set proc~remove_knots->interface~compute_multiplicity proc~remove_knots->proc~findspan proc~remove_knots_a_5_8 remove_knots_A_5_8 proc~remove_knots->proc~remove_knots_a_5_8 proc~rotation rotation proc~rotate_xc->proc~rotation proc~rotate_xg->proc~rotation proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~cmp_elemconn_cn_l cmp_elemConn_Cn_L interface~elemconn_cn->proc~cmp_elemconn_cn_l proc~cmp_elemconn_cn_s cmp_elemConn_Cn_S interface~elemconn_cn->proc~cmp_elemconn_cn_s proc~cmp_elemconn_cn_v cmp_elemConn_Cn_V interface~elemconn_cn->proc~cmp_elemconn_cn_v proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 ndgrid3 interface~ndgrid->proc~ndgrid3 proc~unique_integer unique_integer interface~unique->proc~unique_integer proc~unique_real unique_real interface~unique->proc~unique_real interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xc_vis->interface~elemconn_c0 proc~cmp_elem_xg_vis->interface~elemconn_c0 proc~elevate_degree_a_5_9->interface~compute_multiplicity proc~bincoeff bincoeff proc~elevate_degree_a_5_9->proc~bincoeff proc~get_multiplicity->interface~compute_multiplicity cosd cosd proc~rotation->cosd sind sind proc~rotation->sind proc~cmp_degree nurbs_volume%cmp_degree proc~set1->proc~cmp_degree proc~cmp_nc nurbs_volume%cmp_nc proc~set1->proc~cmp_nc proc~set2->proc~cmp_nc proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector proc~set3->proc~cmp_degree proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v proc~factln factln proc~bincoeff->proc~factln proc~cmp_degree->proc~get_multiplicity proc~cmp_nc->interface~compute_multiplicity proc~repelem 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. 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), allocatable, (:,:) Source Code program example3_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 (optional) allocate ( Wc ( size ( Xc , 1 )), source = 1.0_rk ) Wc ( 2 ) = 5.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 !> Wc is optional. call nurbs % set ( knot1 , knot2 , knot3 , Xc , Wc ) !> Deallocate local arrays deallocate ( 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 20, 20, and 20 in the three dimensions call nurbs % create ( 20 , 20 , 20 ) !> Export the generated volume to a VTK file call nurbs % export_Xg ( 'vtk/nurbs_volume_Xg.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call nurbs % show ( 'vtk/nurbs_volume_Xc.vtk' , 'vtk/nurbs_volume_Xg.vtk' ) !----------------------------------------------------------------------------- ! Refinements !----------------------------------------------------------------------------- !> Print size of knot vectors print * , size ( nurbs % get_knot ( 1 )) print * , size ( nurbs % get_knot ( 2 )) print * , size ( nurbs % get_knot ( 3 )) !> Insert knots 0.25 and 0.75 in all three directions call nurbs % insert_knots ( 1 , [ 0.25_rk , 0.75_rk ], [ 1 , 1 ]) ! direction 1 call nurbs % insert_knots ( 2 , [ 0.25_rk , 0.75_rk ], [ 1 , 1 ]) ! direction 2 call nurbs % insert_knots ( 3 , [ 0.25_rk , 0.75_rk ], [ 1 , 1 ]) ! direction 3 !> Print size of knot vectors after inserting knots print * , size ( nurbs % get_knot ( 1 )) print * , size ( nurbs % get_knot ( 2 )) print * , size ( nurbs % get_knot ( 3 )) !> Print degrees print * , nurbs % get_degree () !> Elevate degree by 2 in all three directions call nurbs % elevate_degree ( 1 , 2 ) ! direction 1 call nurbs % elevate_degree ( 2 , 2 ) ! direction 2 call nurbs % elevate_degree ( 3 , 2 ) ! direction 3 !> Print degrees after elevating print * , nurbs % get_degree () !> Print size of knot vectors print * , size ( nurbs % get_knot ( 1 )) print * , size ( nurbs % get_knot ( 2 )) print * , size ( nurbs % get_knot ( 3 )) call nurbs % remove_knots ( 1 , [ 0.25_rk , 0.75_rk ], [ 1 , 1 ]) ! direction 1 call nurbs % remove_knots ( 2 , [ 0.25_rk , 0.75_rk ], [ 1 , 1 ]) ! direction 2 call nurbs % remove_knots ( 3 , [ 0.25_rk , 0.75_rk ], [ 1 , 1 ]) ! direction 3 !> Print size of knot vectors after removing knots print * , size ( nurbs % get_knot ( 1 )) print * , size ( nurbs % get_knot ( 2 )) print * , size ( nurbs % get_knot ( 3 )) !> Generate the refined NURBS volume with resolutions of 40, 40, and 40 in the three dimensions call nurbs % create () !> Export updated control points to a VTK file call nurbs % export_Xc ( 'vtk/nurbs_volume_Xc2.vtk' ) !> Export the refined generated volume to a VTK file call nurbs % export_Xg ( 'vtk/nurbs_volume_Xg2.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call nurbs % show ( 'vtk/nurbs_volume_Xc2.vtk' , 'vtk/nurbs_volume_Xg2.vtk' ) !----------------------------------------------------------------------------- ! Transformations !----------------------------------------------------------------------------- !> Rotate the control points call nurbs % rotate_Xc ( alpha =- 4 5.0_rk , beta = 0.0_rk , theta = 9 0.0_rk ) !> Rotate the generated curve call nurbs % rotate_Xg ( alpha =- 4 5.0_rk , beta = 0.0_rk , theta = 9 0.0_rk ) !> Translate the control points call nurbs % translate_Xc ([ 1.0_rk , 2.0_rk , - 3.0_rk ]) !> Translate the generated curve call nurbs % translate_Xg ([ 1.0_rk , 2.0_rk , - 3.0_rk ]) !> Export the transformed control points to a VTK file call nurbs % export_Xc ( 'vtk/nurbs_volume_Xc3.vtk' ) !> Export the transformed generated volume to a VTK file call nurbs % export_Xg ( 'vtk/nurbs_volume_Xg3.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call nurbs % show ( 'vtk/nurbs_volume_Xc3.vtk' , 'vtk/nurbs_volume_Xg3.vtk' ) !----------------------------------------------------------------------------- ! Extract faces !----------------------------------------------------------------------------- !> first compute and set the connectivities of volume elements call nurbs % set_elem ( nurbs % cmp_elem ()) !> get the connectivity of the face1 of the first element print * , 'Face 1 of element 1:' , nurbs % cmp_elemFace ( elem = 1 , face = 1 ) print * , 'Face 2 of element 1:' , nurbs % cmp_elemFace ( elem = 1 , face = 2 ) print * , 'Face 3 of element 1:' , nurbs % cmp_elemFace ( elem = 1 , face = 3 ) print * , 'Face 4 of element 1:' , nurbs % cmp_elemFace ( elem = 1 , face = 4 ) print * , 'Face 5 of element 1:' , nurbs % cmp_elemFace ( elem = 1 , face = 5 ) print * , 'Face 6 of element 1:' , nurbs % cmp_elemFace ( elem = 1 , face = 6 ) !> get the degree of the faces print * , 'Degree of face 1:' , nurbs % cmp_degreeFace ( face = 1 ) print * , 'Degree of face 2:' , nurbs % cmp_degreeFace ( face = 2 ) print * , 'Degree of face 3:' , nurbs % cmp_degreeFace ( face = 3 ) print * , 'Degree of face 4:' , nurbs % cmp_degreeFace ( face = 4 ) print * , 'Degree of face 5:' , nurbs % cmp_degreeFace ( face = 5 ) print * , 'Degree of face 6:' , nurbs % cmp_degreeFace ( face = 6 ) !----------------------------------------------------------------------------- ! 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 ), 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 example3_volume","tags":"","loc":"program/example3_volume.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_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_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 volume object to create, and finalize a NURBS 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 NURBS volume Define weights for the control points Set control points and weights for the NURBS volume object Deallocate local arrays Export initial control points to a VTK file Generate the NURBS volume with a resolution of 15X15X15 Export the generated volume to a VTK file Show the control geometry and geometry using PyVista Finalize the NURBS volume object Calls program~~example_nurbs_volume~~CallsGraph program~example_nurbs_volume example_nurbs_volume none~set nurbs_volume%set program~example_nurbs_volume->none~set proc~create nurbs_volume%create program~example_nurbs_volume->proc~create proc~export_xc nurbs_volume%export_Xc program~example_nurbs_volume->proc~export_xc proc~export_xg nurbs_volume%export_Xg program~example_nurbs_volume->proc~export_xg proc~finalize nurbs_volume%finalize program~example_nurbs_volume->proc~finalize proc~generate_xc~5 generate_Xc program~example_nurbs_volume->proc~generate_xc~5 proc~show nurbs_volume%show program~example_nurbs_volume->proc~show proc~set1 nurbs_volume%set1 none~set->proc~set1 proc~set2 nurbs_volume%set2 none~set->proc~set2 proc~set3 nurbs_volume%set3 none~set->proc~set3 interface~compute_xg compute_Xg proc~create->interface~compute_xg interface~ndgrid ndgrid proc~create->interface~ndgrid proc~is_rational nurbs_volume%is_rational proc~create->proc~is_rational proc~cmp_elem_xc_vis nurbs_volume%cmp_elem_Xc_vis proc~export_xc->proc~cmp_elem_xc_vis proc~cmp_elem_xg_vis nurbs_volume%cmp_elem_Xg_vis proc~export_xg->proc~cmp_elem_xg_vis proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 ndgrid3 interface~ndgrid->proc~ndgrid3 interface~elemconn_c0 elemConn_C0 proc~cmp_elem_xc_vis->interface~elemconn_c0 proc~cmp_elem_xg_vis->interface~elemconn_c0 proc~cmp_degree nurbs_volume%cmp_degree proc~set1->proc~cmp_degree proc~cmp_nc nurbs_volume%cmp_nc proc~set1->proc~cmp_nc proc~set2->proc~cmp_nc proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector proc~set3->proc~cmp_degree proc~cmp_elemconn_c0_l cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v proc~get_multiplicity nurbs_volume%get_multiplicity proc~cmp_degree->proc~get_multiplicity interface~compute_multiplicity compute_multiplicity proc~cmp_nc->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity->interface~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 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), 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 !----------------------------------------------------------------------------- ! Setting up the NURBS volume !----------------------------------------------------------------------------- !> Define control points for the NURBS 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 NURBS volume object call nurbs % set ([ 2 , 2 , 2 ], Xc , Wc ) !> Deallocate local arrays deallocate ( Xc , Wc ) !> Export initial control points to a VTK file call nurbs % export_Xc ( 'vtk/demo_volume_Xc.vtk' ) !----------------------------------------------------------------------------- ! Creating the NURBS volume !----------------------------------------------------------------------------- !> Generate the NURBS volume with a resolution of 15X15X15 call nurbs % create ( 15 , 15 , 15 ) !> Export the generated volume to a VTK file call nurbs % export_Xg ( 'vtk/demo_volume_Xg.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call nurbs % show ( 'vtk/demo_volume_Xc.vtk' , 'vtk/demo_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 ), 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_ppm2 – ForCAD","text":"Uses forcolormap forcad forimage fortime program~~example_ppm2~~UsesGraph program~example_ppm2 example_ppm2 forcolormap forcolormap program~example_ppm2->forcolormap forimage forimage program~example_ppm2->forimage fortime fortime program~example_ppm2->fortime module~forcad forcad program~example_ppm2->module~forcad 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_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. Visualization of NURBS surfaces using ForCAD, ForImage and ForColorMap libraries\nThis example converts NURBS surfaces (vector) to an image (raster) using ForCAD, ForImage and ForColorMap libraries. Set the shape parameters for a tetragon\nSet the shape parameters for a ring\nSet the shape parameters for a ring\nSet the shape parameters for a ring\nSet the shape parameters for a ring Calls program~~example_ppm2~~CallsGraph program~example_ppm2 example_ppm2 compute_rgb compute_rgb program~example_ppm2->compute_rgb export_pnm export_pnm program~example_ppm2->export_pnm get_b get_b program~example_ppm2->get_b get_g get_g program~example_ppm2->get_g get_r get_r program~example_ppm2->get_r none~get_xg~2 nurbs_surface%get_Xg program~example_ppm2->none~get_xg~2 proc~create~2 nurbs_surface%create program~example_ppm2->proc~create~2 proc~finalize~2 nurbs_surface%finalize program~example_ppm2->proc~finalize~2 proc~get_ng~2 nurbs_surface%get_ng program~example_ppm2->proc~get_ng~2 proc~rotate_xc~2 nurbs_surface%rotate_Xc program~example_ppm2->proc~rotate_xc~2 proc~set_half_ring~2 nurbs_surface%set_half_ring program~example_ppm2->proc~set_half_ring~2 proc~set_tetragon nurbs_surface%set_tetragon program~example_ppm2->proc~set_tetragon proc~translate_xc~2 nurbs_surface%translate_Xc program~example_ppm2->proc~translate_xc~2 set set program~example_ppm2->set set_pnm set_pnm program~example_ppm2->set_pnm timer_start timer_start program~example_ppm2->timer_start timer_stop timer_stop program~example_ppm2->timer_stop proc~get_xg_all~2 nurbs_surface%get_Xg_all none~get_xg~2->proc~get_xg_all~2 proc~get_xgid~2 nurbs_surface%get_Xgid none~get_xg~2->proc~get_xgid~2 proc~get_xgi~2 nurbs_surface%get_Xgi none~get_xg~2->proc~get_xgi~2 interface~compute_xg~2 compute_Xg proc~create~2->interface~compute_xg~2 interface~ndgrid ndgrid proc~create~2->interface~ndgrid proc~is_rational~2 nurbs_surface%is_rational proc~create~2->proc~is_rational~2 proc~rotation rotation proc~rotate_xc~2->proc~rotation none~set~2 nurbs_surface%set proc~set_half_ring~2->none~set~2 proc~set_tetragon->none~set~2 proc~tetragon_xc tetragon_Xc proc~set_tetragon->proc~tetragon_xc proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 ndgrid3 interface~ndgrid->proc~ndgrid3 proc~set1~2 nurbs_surface%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_surface%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_surface%set3 none~set~2->proc~set3~2 cosd cosd proc~rotation->cosd sind sind proc~rotation->sind proc~cmp_degree~2 nurbs_surface%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~cmp_nc~2 nurbs_surface%cmp_nc proc~set1~2->proc~cmp_nc~2 proc~set2~2->proc~cmp_nc~2 proc~compute_knot_vector compute_knot_vector proc~set2~2->proc~compute_knot_vector proc~set3~2->proc~cmp_degree~2 proc~get_multiplicity~2 nurbs_surface%get_multiplicity proc~cmp_degree~2->proc~get_multiplicity~2 interface~compute_multiplicity compute_multiplicity proc~cmp_nc~2->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity~2->interface~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 :: Xg (:,:) real(kind=rk) :: aspect_ratio type(color) :: background_color integer :: blue real(kind=rk) :: center (3) type(colormap) :: cmap integer :: green integer :: height integer :: i integer, allocatable :: idx (:,:) type(format_pnm) :: image real(kind=rk) :: inner_radius integer :: ng (2) real(kind=rk) :: outer_radius integer(kind=ik), allocatable :: px (:,:) integer :: red integer :: res1 integer :: res2 type( nurbs_surface ) :: shape type(timer) :: t integer :: width real(kind=rk), allocatable :: z_values (:)","tags":"","loc":"program/example_ppm2.html"},{"title":"nearest_point_2d – ForCAD","text":"Uses forcad program~~nearest_point_2d~~UsesGraph program~nearest_point_2d nearest_point_2d module~forcad forcad program~nearest_point_2d->module~forcad 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_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. Set a surface with 4 control points\nThe weights of the control points (Wc) are optional. Generate the NURBS surface with resolutions of 30 in both dimensions Find the nearest point on the surface to a given point\nFind the nearest point on the surface to a given point\nThe optimization method is used to find the nearest point\nThe optimization method is based on the Newton-Raphson method\nFinalize the NURBS surface object Calls program~~nearest_point_2d~~CallsGraph program~nearest_point_2d nearest_point_2d none~set~2 nurbs_surface%set program~nearest_point_2d->none~set~2 proc~create~2 nurbs_surface%create program~nearest_point_2d->proc~create~2 proc~finalize~2 nurbs_surface%finalize program~nearest_point_2d->proc~finalize~2 proc~nearest_point2~2 nurbs_surface%nearest_point2 program~nearest_point_2d->proc~nearest_point2~2 proc~nearest_point~2 nurbs_surface%nearest_point program~nearest_point_2d->proc~nearest_point~2 proc~set1~2 nurbs_surface%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_surface%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_surface%set3 none~set~2->proc~set3~2 interface~compute_xg~2 compute_Xg proc~create~2->interface~compute_xg~2 interface~ndgrid ndgrid proc~create~2->interface~ndgrid proc~is_rational~2 nurbs_surface%is_rational proc~create~2->proc~is_rational~2 proc~nearest_point2~2->proc~create~2 proc~nearest_point2~2->proc~finalize~2 interface~nearest_point_help_2d nearest_point_help_2d proc~nearest_point2~2->interface~nearest_point_help_2d none~derivative2~2 nurbs_surface%derivative2 proc~nearest_point2~2->none~derivative2~2 proc~cmp_xg~2 nurbs_surface%cmp_Xg proc~nearest_point2~2->proc~cmp_xg~2 proc~nearest_point~2->interface~nearest_point_help_2d proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 ndgrid3 interface~ndgrid->proc~ndgrid3 proc~derivative2_scalar~2 nurbs_surface%derivative2_scalar none~derivative2~2->proc~derivative2_scalar~2 proc~derivative2_vector~2 nurbs_surface%derivative2_vector none~derivative2~2->proc~derivative2_vector~2 proc~cmp_xg~2->interface~compute_xg~2 proc~cmp_xg~2->proc~is_rational~2 proc~cmp_degree~2 nurbs_surface%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~cmp_nc~2 nurbs_surface%cmp_nc proc~set1~2->proc~cmp_nc~2 proc~set2~2->proc~cmp_nc~2 proc~compute_knot_vector compute_knot_vector proc~set2~2->proc~compute_knot_vector proc~set3~2->proc~cmp_degree~2 proc~get_multiplicity~2 nurbs_surface%get_multiplicity proc~cmp_degree~2->proc~get_multiplicity~2 interface~compute_multiplicity compute_multiplicity proc~cmp_nc~2->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~derivative2_scalar~2->proc~is_rational~2 interface~compute_d2tgc~2 compute_d2Tgc proc~derivative2_scalar~2->interface~compute_d2tgc~2 proc~derivative2_vector~2->interface~ndgrid proc~derivative2_vector~2->proc~is_rational~2 proc~derivative2_vector~2->interface~compute_d2tgc~2 proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity~2->interface~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) :: Wc (4) Weights of the control points real(kind=rk) :: Xc (4,3) Control points integer :: id id of the nearest point real(kind=rk), allocatable :: nearest_Xg (:) Coordinates of the nearest point on the surface real(kind=rk), allocatable :: nearest_Xt (:) Corresponding parametric coordinates of the nearest point type( nurbs_surface ) :: shape Declare a NURBS surface object","tags":"","loc":"program/nearest_point_2d.html"},{"title":"nearest_point_3d – ForCAD","text":"Uses forcad program~~nearest_point_3d~~UsesGraph program~nearest_point_3d nearest_point_3d module~forcad forcad program~nearest_point_3d->module~forcad 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_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. The weights of the control points (Wc) are optional. Generate the NURBS volume with resolutions of 20, 20, 20 Find the nearest point on the volume to a given point\nFind the nearest point on the volume to a given point\nThe optimization method is used to find the nearest point\nThe optimization method is based on the Newton-Raphson method\nFinalize the NURBS volume object Calls program~~nearest_point_3d~~CallsGraph program~nearest_point_3d nearest_point_3d none~set nurbs_volume%set program~nearest_point_3d->none~set proc~create nurbs_volume%create program~nearest_point_3d->proc~create proc~finalize nurbs_volume%finalize program~nearest_point_3d->proc~finalize proc~nearest_point nurbs_volume%nearest_point program~nearest_point_3d->proc~nearest_point proc~nearest_point2 nurbs_volume%nearest_point2 program~nearest_point_3d->proc~nearest_point2 proc~set1 nurbs_volume%set1 none~set->proc~set1 proc~set2 nurbs_volume%set2 none~set->proc~set2 proc~set3 nurbs_volume%set3 none~set->proc~set3 interface~compute_xg compute_Xg proc~create->interface~compute_xg interface~ndgrid ndgrid proc~create->interface~ndgrid proc~is_rational nurbs_volume%is_rational proc~create->proc~is_rational interface~nearest_point_help_3d nearest_point_help_3d proc~nearest_point->interface~nearest_point_help_3d proc~nearest_point2->proc~create proc~nearest_point2->proc~finalize proc~nearest_point2->interface~nearest_point_help_3d none~derivative2 nurbs_volume%derivative2 proc~nearest_point2->none~derivative2 proc~cmp_xg nurbs_volume%cmp_Xg proc~nearest_point2->proc~cmp_xg proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 ndgrid3 interface~ndgrid->proc~ndgrid3 proc~derivative2_scalar nurbs_volume%derivative2_scalar none~derivative2->proc~derivative2_scalar proc~derivative2_vector nurbs_volume%derivative2_vector none~derivative2->proc~derivative2_vector proc~cmp_xg->interface~compute_xg proc~cmp_xg->proc~is_rational proc~cmp_degree nurbs_volume%cmp_degree proc~set1->proc~cmp_degree proc~cmp_nc nurbs_volume%cmp_nc proc~set1->proc~cmp_nc proc~set2->proc~cmp_nc proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector proc~set3->proc~cmp_degree proc~get_multiplicity nurbs_volume%get_multiplicity proc~cmp_degree->proc~get_multiplicity interface~compute_multiplicity compute_multiplicity proc~cmp_nc->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~derivative2_scalar->proc~is_rational interface~compute_d2tgc compute_d2Tgc proc~derivative2_scalar->interface~compute_d2tgc proc~derivative2_vector->interface~ndgrid proc~derivative2_vector->proc~is_rational proc~derivative2_vector->interface~compute_d2tgc proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity->interface~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) :: Wc (8) Weights of the control points real(kind=rk) :: Xc (8,3) Control points integer :: id id of the nearest point real(kind=rk), allocatable :: nearest_Xg (:) Coordinates of the nearest point on the volume real(kind=rk), allocatable :: nearest_Xt (:) Corresponding parametric coordinates of the nearest point type( nurbs_volume ) :: shape Declare a NURBS volume object","tags":"","loc":"program/nearest_point_3d.html"},{"title":"nearest_point_2d_bench.f90 – ForCAD","text":"This file depends on sourcefile~~nearest_point_2d_bench.f90~~EfferentGraph sourcefile~nearest_point_2d_bench.f90 nearest_point_2d_bench.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~nearest_point_2d_bench.f90->sourcefile~forcad.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_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 program nearest_point_2d_bench use forcad , only : rk , nurbs_surface use fortime implicit none type ( nurbs_surface ) :: shape !! Declare a NURBS surface object real ( rk ), allocatable :: nearest_Xg (:) !! Coordinates of the nearest point on the surface real ( rk ), allocatable :: nearest_Xt (:) !! Corresponding parametric coordinates of the nearest point integer :: id !! id of the nearest point real ( rk ), allocatable :: points (:,:) integer :: i , j type ( timer ) :: t !----------------------------------------------------------------------------- ! Setting up the NURBS tetrangon !----------------------------------------------------------------------------- !> Set a tetragon with lengths of 2.0 and 3.0 and 3 and 4 control points in each direction !> The weights of the control points (Wc) are optional. call shape % set_tetragon ( L = [ 2.0_rk , 3.0_rk ], nc = [ 3 , 4 ]) !----------------------------------------------------------------------------- ! Creating the NURBS surface !----------------------------------------------------------------------------- !> Generate the NURBS surface with resolutions of 30 in both dimensions call shape % create ( 100 , 100 ) !----------------------------------------------------------------------------- ! Nearest point on the surface !----------------------------------------------------------------------------- !> Find the nearest point on the surface to a given point ! nearest_Xg: Coordinates of the nearest point on the surface (optional) ! nearest_Xt: Corresponding parametric coordinates of the nearest point (optional) ! id: id of the nearest point (optional) do j = 1 , 40 allocate ( points ( j * 1000 , 3 )) print * , j * 1000 call random_number ( points ) call t % timer_start () do concurrent ( i = 1 : size ( points , 1 )) call shape % nearest_point ( points ( i ,:), nearest_Xg , nearest_Xt , id ) end do call t % timer_stop () deallocate ( points ) end do !----------------------------------------------------------------------------- ! Finalizing !----------------------------------------------------------------------------- !> Finalize the NURBS surface object call shape % finalize () deallocate ( nearest_Xg , nearest_Xt ) end program","tags":"","loc":"sourcefile/nearest_point_2d_bench.f90.html"},{"title":"shape_ring_3d.f90 – ForCAD","text":"This file depends on sourcefile~~shape_ring_3d.f90~~EfferentGraph sourcefile~shape_ring_3d.f90 shape_ring_3d.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~shape_ring_3d.f90->sourcefile~forcad.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_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 program shape_ring_3d use forcad , only : rk , nurbs_volume implicit none type ( nurbs_volume ) :: shape !> Set up a ring shape centered at 0,0,0 with inner radius 1, outer radius 2, and length 1. call shape % set_ring ([ 0.0_rk , 0.0_rk , 0.0_rk ], 1.0_rk , 2.0_rk , 1.0_rk ) !> Export the control points to a VTK file for visualization. call shape % export_Xc ( 'vtk/shape_ring_3d_Xc.vtk' ) !> Create the shape using the specified number of elements in each direction. call shape % create ( 60 , 15 , 10 ) !> Export the geometry to a VTK file for visualization. call shape % export_Xg ( 'vtk/shape_ring_3d_Xg.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call shape % show ( 'vtk/shape_ring_3d_Xc.vtk' , 'vtk/shape_ring_3d_Xg.vtk' ) !> Finalize and clean up the shape object. call shape % finalize () end program","tags":"","loc":"sourcefile/shape_ring_3d.f90.html"},{"title":"shape_circle.f90 – ForCAD","text":"This file depends on sourcefile~~shape_circle.f90~~EfferentGraph sourcefile~shape_circle.f90 shape_circle.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~shape_circle.f90->sourcefile~forcad.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_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 program shape_circle use forcad , only : rk , nurbs_curve implicit none type ( nurbs_curve ) :: shape !----------------------------------------------------------------------------- ! Setting up NURBS circle !----------------------------------------------------------------------------- !> Set a circle with radius 2.0 and center at [0.0, 0.0, 0.0] call shape % set_circle ( center = [ 0.0_rk , 0.0_rk , 0.0_rk ], radius = 2.0_rk ) !> Export control points to a VTK file call shape % export_Xc ( 'vtk/shape_circle_Xc.vtk' ) !----------------------------------------------------------------------------- ! Creating circle !----------------------------------------------------------------------------- !> Generate the NURBS circle with a resolution of 100 call shape % create ( res = 100 ) !> Export the generated cirlce to a VTK file call shape % export_Xg ( 'vtk/shape_circle_Xg.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call shape % show ( 'vtk/shape_circle_Xc.vtk' , 'vtk/shape_circle_Xg.vtk' ) !----------------------------------------------------------------------------- ! Finalizing !----------------------------------------------------------------------------- !> Finalize the NURBS curve object call shape % finalize () end program","tags":"","loc":"sourcefile/shape_circle.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~demo_curve.f90 demo_curve.f90 sourcefile~demo_curve.f90->sourcefile~forcad.f90 sourcefile~demo_surface.f90 demo_surface.f90 sourcefile~demo_surface.f90->sourcefile~forcad.f90 sourcefile~demo_volume.f90 demo_volume.f90 sourcefile~demo_volume.f90->sourcefile~forcad.f90 sourcefile~example_curve_1.f90 example_curve_1.f90 sourcefile~example_curve_1.f90->sourcefile~forcad.f90 sourcefile~example_ppm1.f90 example_ppm1.f90 sourcefile~example_ppm1.f90->sourcefile~forcad.f90 sourcefile~example_ppm2.f90 example_ppm2.f90 sourcefile~example_ppm2.f90->sourcefile~forcad.f90 sourcefile~example_ppm3.f90 example_ppm3.f90 sourcefile~example_ppm3.f90->sourcefile~forcad.f90 sourcefile~example_surface_1.f90 example_surface_1.f90 sourcefile~example_surface_1.f90->sourcefile~forcad.f90 sourcefile~example_volume_1.f90 example_volume_1.f90 sourcefile~example_volume_1.f90->sourcefile~forcad.f90 sourcefile~nearest_point_1d.f90 nearest_point_1d.f90 sourcefile~nearest_point_1d.f90->sourcefile~forcad.f90 sourcefile~nearest_point_2d.f90 nearest_point_2d.f90 sourcefile~nearest_point_2d.f90->sourcefile~forcad.f90 sourcefile~nearest_point_2d_bench.f90 nearest_point_2d_bench.f90 sourcefile~nearest_point_2d_bench.f90->sourcefile~forcad.f90 sourcefile~nearest_point_3d.f90 nearest_point_3d.f90 sourcefile~nearest_point_3d.f90->sourcefile~forcad.f90 sourcefile~put_to_nurbs.f90 put_to_nurbs.f90 sourcefile~put_to_nurbs.f90->sourcefile~forcad.f90 sourcefile~shape_c_1d.f90 shape_C_1d.f90 sourcefile~shape_c_1d.f90->sourcefile~forcad.f90 sourcefile~shape_c_2d.f90 shape_C_2d.f90 sourcefile~shape_c_2d.f90->sourcefile~forcad.f90 sourcefile~shape_c_3d.f90 shape_C_3d.f90 sourcefile~shape_c_3d.f90->sourcefile~forcad.f90 sourcefile~shape_circle.f90 shape_circle.f90 sourcefile~shape_circle.f90->sourcefile~forcad.f90 sourcefile~shape_half_circle.f90 shape_half_circle.f90 sourcefile~shape_half_circle.f90->sourcefile~forcad.f90 sourcefile~shape_half_ring_2d.f90 shape_half_ring_2d.f90 sourcefile~shape_half_ring_2d.f90->sourcefile~forcad.f90 sourcefile~shape_half_ring_3d.f90 shape_half_ring_3d.f90 sourcefile~shape_half_ring_3d.f90->sourcefile~forcad.f90 sourcefile~shape_hexahedron.f90 shape_hexahedron.f90 sourcefile~shape_hexahedron.f90->sourcefile~forcad.f90 sourcefile~shape_ring_2d.f90 shape_ring_2d.f90 sourcefile~shape_ring_2d.f90->sourcefile~forcad.f90 sourcefile~shape_ring_3d.f90 shape_ring_3d.f90 sourcefile~shape_ring_3d.f90->sourcefile~forcad.f90 sourcefile~shape_tetragon.f90 shape_tetragon.f90 sourcefile~shape_tetragon.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 !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> This module defines the 'nurbs_volume' type for representing a Non-Uniform Rational B-Spline (NURBS) volume. module forcad_nurbs_volume use forcad_utils , only : rk , basis_bspline , elemConn_C0 , kron , ndgrid , compute_multiplicity , compute_knot_vector , & basis_bspline_der , insert_knot_A_5_1 , findspan , elevate_degree_A_5_9 , hexahedron_Xc , remove_knots_A_5_8 , & elemConn_Cn , unique , rotation implicit none private public nurbs_volume !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause type nurbs_volume real ( rk ), allocatable , private :: Xc (:,:) !! Control points (2D array: [nc(1)*nc(2)*nc(3), dim]) real ( rk ), allocatable , private :: Xg (:,:) !! Geometry points (2D array: [ng(1)*ng(2)*ng(3), dim]) real ( rk ), allocatable , private :: Wc (:) !! Weights for the control points (1D array: [nc(1)*nc(2)*nc(3)]) real ( rk ), allocatable , private :: Xt1 (:) !! Evaluation parameter values in the first direction (1D array: [ng(1)]) real ( rk ), allocatable , private :: Xt2 (:) !! Evaluation parameter values in the second direction (1D array: [ng(2)]) real ( rk ), allocatable , private :: Xt3 (:) !! Evaluation parameter values in the third direction (1D array: [ng(3)]) real ( rk ), allocatable , private :: Xt (:,:) !! Evaluation parameter values (2D array: [ng(1)*ng(2)*ng(3), dim] real ( rk ), allocatable , private :: knot1 (:) !! Knot vector in the first direction (1D array) real ( rk ), allocatable , private :: knot2 (:) !! Knot vector in the second direction (1D array) real ( rk ), allocatable , private :: knot3 (:) !! Knot vector in the third direction (1D array) integer , private :: degree ( 3 ) !! Degree (order) of the volume integer , private :: nc ( 3 ) !! Number of control points in each direction integer , private :: ng ( 3 ) !! Number of geometry points in each direction integer , allocatable , private :: elemConn_Xc_vis (:,:) !! Connectivity for visualization of control points integer , allocatable , private :: elemConn_Xg_vis (:,:) !! Connectivity for visualization of geometry points integer , allocatable , private :: elemConn (:,:) !! IGA element connectivity contains procedure :: set1 !!> Set knot vectors, control points and weights for the NURBS volume object procedure :: set2 !!> Set NURBS volume using nodes of parameter space, degree, continuity, control points and weights procedure :: set3 !!> Set Bezier or Rational Bezier volume using control points and weights generic :: set => set1 , set2 , set3 !!> Set NURBS volume procedure :: create !!> Generate geometry points procedure :: cmp_Xg !!> Compute geometry points procedure , private :: get_Xc_all !!> Get all control points procedure , private :: get_Xci !!> Get i-th control point procedure , private :: get_Xcid !!> Get i-th control point in a specific direction generic :: get_Xc => get_Xc_all , get_Xci , get_Xcid !!> Get control points procedure , private :: get_Xg_all !!> Get all geometry points procedure , private :: get_Xgi !!> Get i-th geometry point procedure , private :: get_Xgid !!> Get i-th geometry point in a specific direction generic :: get_Xg => get_Xg_all , get_Xgi , get_Xgid !!> Get geometry points procedure , private :: get_Wc_all !!> Get all weights procedure , private :: get_Wci !!> Get i-th weight generic :: get_Wc => get_Wc_all , get_Wci !!> Get weights procedure :: get_Xt !!> Get parameter values procedure , private :: get_knot_all !!> Get all knot vectors procedure , private :: get_knoti !!> Get i-th knot value generic :: get_knot => get_knoti , get_knot_all !!> Get knot vector procedure :: get_ng !!> Get number of geometry points procedure :: cmp_degree !!> Compute degree of the NURBS volume procedure , private :: get_degree_all !!> Get degree of the NURBS volume in all directions procedure , private :: get_degree_dir !!> Get degree of the NURBS volume in a specific direction generic :: get_degree => get_degree_all , get_degree_dir !!> Get degree of the NURBS volume procedure :: finalize !!> Finalize the NURBS volume object procedure :: cmp_elem_Xc_vis !!> Generate connectivity for control points procedure :: cmp_elem_Xg_vis !!> Generate connectivity for geometry points procedure :: cmp_elem !!> Generate IGA element connectivity procedure :: get_elem_Xc_vis !!> Get connectivity for control points procedure :: get_elem_Xg_vis !!> Get connectivity for geometry points procedure :: get_elem !!> Get IGA element connectivity procedure :: set_elem_Xc_vis !!> Set connectivity for control points procedure :: set_elem_Xg_vis !!> Set connectivity for geometry points procedure :: set_elem !!> Set IGA element connectivity 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 !!> Compute and return the multiplicity of the knots procedure :: get_continuity !!> Compute and return the continuity of the NURBS volume procedure :: cmp_nc !!> Compute number of required control points procedure , private :: basis_vector !!> Compute the basis functions of the NURBS volume procedure , private :: basis_scalar !!> Compute the basis functions of the NURBS volume generic :: basis => basis_vector , basis_scalar !!> Compute the basis functions of the NURBS volume procedure , private :: derivative_vector !!> Compute the derivative of the NURBS volume procedure , private :: derivative_scalar !!> Compute the derivative of the NURBS volume generic :: derivative => derivative_vector , derivative_scalar !!> Compute the derivative of the NURBS volume procedure , private :: derivative2_vector !!> Compute the second derivative of the NURBS volume procedure , private :: derivative2_scalar !!> Compute the second derivative of the NURBS volume generic :: derivative2 => derivative2_vector , derivative2_scalar !!> Compute the second derivative of the NURBS volume procedure :: insert_knots !!> Insert knots into the knot vector procedure :: elevate_degree !!> Elevate the degree of the NURBS volume procedure :: is_rational !!> Check if the NURBS volume is rational procedure :: put_to_nurbs !!> Put a shape to a NURBS volume procedure :: remove_knots !!> Remove knots from the knot vector procedure :: rotate_Xc !!> Rotate control points procedure :: rotate_Xg !!> Rotate geometry points procedure :: translate_Xc !!> Translate control points procedure :: translate_Xg !!> Translate geometry points procedure :: show !!> Show the NURBS object using PyVista procedure :: nearest_point !!> Find the nearest point on the NURBS volume (Approximation) procedure :: nearest_point2 !!> Find the nearest point on the NURBS volume (Minimization - Newton's method) ! Faces procedure :: cmp_elemFace_Xc_vis !!> Compute faces of the control points procedure :: cmp_elemFace_Xg_vis !!> Compute faces of the geometry points procedure :: cmp_elemFace !!> Compute faces of the IGA elements procedure :: cmp_degreeFace !!> Compute degrees of the faces ! Shapes procedure :: set_hexahedron !!> Set a hexahedron procedure :: set_ring !!> Set a ring procedure :: set_half_ring !!> Set a half ring procedure :: set_C !!> Set a C-shape end type !=============================================================================== interface compute_Xg pure function compute_Xg_nurbs_3d ( f_Xt , f_knot1 , f_knot2 , f_knot3 , f_degree , f_nc , f_ng , f_Xc , f_Wc ) result ( f_Xg ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:,:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:), f_knot3 (:) integer , intent ( in ) :: f_degree ( 3 ) integer , intent ( in ) :: f_nc ( 3 ) integer , intent ( in ) :: f_ng ( 3 ) real ( rk ), intent ( in ), contiguous :: f_Xc (:,:) real ( rk ), intent ( in ), contiguous :: f_Wc (:) real ( rk ), allocatable :: f_Xg (:,:) end function pure function compute_Xg_bspline_3d ( f_Xt , f_knot1 , f_knot2 , f_knot3 , f_degree , f_nc , f_ng , f_Xc ) result ( f_Xg ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:,:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:), f_knot3 (:) integer , intent ( in ) :: f_degree ( 3 ) integer , intent ( in ) :: f_nc ( 3 ) integer , intent ( in ) :: f_ng ( 3 ) real ( rk ), intent ( in ), contiguous :: f_Xc (:,:) real ( rk ), allocatable :: f_Xg (:,:) end function pure function compute_Xg_nurbs_3d_1point ( f_Xt , f_knot1 , f_knot2 , f_knot3 , f_degree , f_nc , f_Xc , f_Wc ) result ( f_Xg ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:), f_knot3 (:) integer , intent ( in ) :: f_degree ( 3 ) integer , intent ( in ) :: f_nc ( 3 ) real ( rk ), intent ( in ), contiguous :: f_Xc (:,:) real ( rk ), intent ( in ), contiguous :: f_Wc (:) real ( rk ), allocatable :: f_Xg (:) end function pure function compute_Xg_bspline_3d_1point ( f_Xt , f_knot1 , f_knot2 , f_knot3 , f_degree , f_nc , f_Xc ) result ( f_Xg ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:), f_knot3 (:) integer , intent ( in ) :: f_degree ( 3 ) integer , intent ( in ) :: f_nc ( 3 ) real ( rk ), intent ( in ), contiguous :: f_Xc (:,:) real ( rk ), allocatable :: f_Xg (:) end function end interface interface compute_dTgc pure subroutine compute_dTgc_nurbs_3d_vector ( f_Xt , f_knot1 , f_knot2 , f_knot3 , f_degree , f_nc , f_ng , f_Wc , f_dTgc , f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:,:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:), f_knot3 (:) integer , intent ( in ) :: f_degree ( 3 ) integer , intent ( in ) :: f_nc ( 3 ) integer , intent ( in ) :: f_ng ( 3 ) real ( rk ), intent ( in ), contiguous :: f_Wc (:) real ( rk ), allocatable , intent ( out ) :: f_dTgc (:,:,:) real ( rk ), allocatable , intent ( out ) :: f_Tgc (:,:) end subroutine pure subroutine compute_dTgc_bspline_3d_vector ( f_Xt , f_knot1 , f_knot2 , f_knot3 , f_degree , f_nc , f_ng , f_dTgc , f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:,:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:), f_knot3 (:) integer , intent ( in ) :: f_degree ( 3 ) integer , intent ( in ) :: f_nc ( 3 ) integer , intent ( in ) :: f_ng ( 3 ) real ( rk ), allocatable , intent ( out ) :: f_dTgc (:,:,:) real ( rk ), allocatable , intent ( out ) :: f_Tgc (:,:) end subroutine pure subroutine compute_dTgc_nurbs_3d_scalar ( f_Xt , f_knot1 , f_knot2 , f_knot3 , f_degree , f_nc , f_Wc , f_dTgc , f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:), f_knot3 (:) integer , intent ( in ) :: f_degree ( 3 ) integer , intent ( in ) :: f_nc ( 3 ) real ( rk ), intent ( in ), contiguous :: f_Wc (:) real ( rk ), allocatable , intent ( out ) :: f_dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: f_Tgc (:) end subroutine pure subroutine compute_dTgc_bspline_3d_scalar ( f_Xt , f_knot1 , f_knot2 , f_knot3 , f_degree , f_nc , f_dTgc , f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:), f_knot3 (:) integer , intent ( in ) :: f_degree ( 3 ) integer , intent ( in ) :: f_nc ( 3 ) real ( rk ), allocatable , intent ( out ) :: f_dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: f_Tgc (:) end subroutine end interface interface compute_d2Tgc pure subroutine compute_d2Tgc_nurbs_3d_vector (& f_Xt , f_knot1 , f_knot2 , f_knot3 , f_degree , f_nc , f_ng , f_Wc , f_d2Tgc , f_dTgc , f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:,:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:), f_knot3 (:) integer , intent ( in ) :: f_degree ( 3 ) integer , intent ( in ) :: f_nc ( 3 ) integer , intent ( in ) :: f_ng ( 3 ) real ( rk ), intent ( in ), contiguous :: f_Wc (:) real ( rk ), allocatable , intent ( out ) :: f_d2Tgc (:,:,:) real ( rk ), allocatable , intent ( out ) :: f_dTgc (:,:,:) real ( rk ), allocatable , intent ( out ) :: f_Tgc (:,:) end subroutine pure subroutine compute_d2Tgc_bspline_3d_vector (& f_Xt , f_knot1 , f_knot2 , f_knot3 , f_degree , f_nc , f_ng , f_d2Tgc , f_dTgc , f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:,:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:), f_knot3 (:) integer , intent ( in ) :: f_degree ( 3 ) integer , intent ( in ) :: f_nc ( 3 ) integer , intent ( in ) :: f_ng ( 3 ) real ( rk ), allocatable , intent ( out ) :: f_d2Tgc (:,:,:) real ( rk ), allocatable , intent ( out ) :: f_dTgc (:,:,:) real ( rk ), allocatable , intent ( out ) :: f_Tgc (:,:) end subroutine pure subroutine compute_d2Tgc_nurbs_3d_scalar ( f_Xt , f_knot1 , f_knot2 , f_knot3 , f_degree , f_nc , f_Wc , f_d2Tgc , f_dTgc , f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:), f_knot3 (:) integer , intent ( in ) :: f_degree ( 3 ) integer , intent ( in ) :: f_nc ( 3 ) real ( rk ), intent ( in ), contiguous :: f_Wc (:) real ( rk ), allocatable , intent ( out ) :: f_d2Tgc (:,:) real ( rk ), allocatable , intent ( out ) :: f_dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: f_Tgc (:) end subroutine pure subroutine compute_d2Tgc_bspline_3d_scalar ( f_Xt , f_knot1 , f_knot2 , f_knot3 , f_degree , f_nc , f_d2Tgc , f_dTgc , f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:), f_knot3 (:) integer , intent ( in ) :: f_degree ( 3 ) integer , intent ( in ) :: f_nc ( 3 ) real ( rk ), allocatable , intent ( out ) :: f_d2Tgc (:,:) real ( rk ), allocatable , intent ( out ) :: f_dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: f_Tgc (:) end subroutine end interface interface compute_Tgc pure function compute_Tgc_nurbs_3d_vector ( f_Xt , f_knot1 , f_knot2 , f_knot3 , f_degree , f_nc , f_ng , f_Wc ) result ( f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:,:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:), f_knot3 (:) integer , intent ( in ) :: f_degree ( 3 ) integer , intent ( in ) :: f_nc ( 3 ) integer , intent ( in ) :: f_ng ( 3 ) real ( rk ), intent ( in ), contiguous :: f_Wc (:) real ( rk ), allocatable :: f_Tgc (:,:) end function pure function compute_Tgc_bspline_3d_vector ( f_Xt , f_knot1 , f_knot2 , f_knot3 , f_degree , f_nc , f_ng ) result ( f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:,:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:), f_knot3 (:) integer , intent ( in ) :: f_degree ( 3 ) integer , intent ( in ) :: f_nc ( 3 ) integer , intent ( in ) :: f_ng ( 3 ) real ( rk ), allocatable :: f_Tgc (:,:) end function pure function compute_Tgc_nurbs_3d_scalar ( f_Xt , f_knot1 , f_knot2 , f_knot3 , f_degree , f_nc , f_Wc ) result ( f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:), f_knot3 (:) integer , intent ( in ) :: f_degree ( 3 ) integer , intent ( in ) :: f_nc ( 3 ) real ( rk ), intent ( in ), contiguous :: f_Wc (:) real ( rk ), allocatable :: f_Tgc (:) end function pure function compute_Tgc_bspline_3d_scalar ( f_Xt , f_knot1 , f_knot2 , f_knot3 , f_degree , f_nc ) result ( f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:), f_knot3 (:) integer , intent ( in ) :: f_degree ( 3 ) integer , intent ( in ) :: f_nc ( 3 ) real ( rk ), allocatable :: f_Tgc (:) end function end interface interface pure function nearest_point_help_3d ( f_ng , f_Xg , f_point_Xg ) result ( f_distances ) import :: rk integer , intent ( in ) :: f_ng ( 3 ) real ( rk ), intent ( in ), contiguous :: f_Xg (:,:) real ( rk ), intent ( in ), contiguous :: f_point_Xg (:) real ( rk ), allocatable :: f_distances (:) end function end interface contains !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Set control points and weights for the NURBS volume object. pure subroutine set1 ( this , knot1 , knot2 , knot3 , Xc , Wc ) class ( nurbs_volume ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:), knot3 (:) real ( rk ), intent ( in ), contiguous :: Xc (:,:) real ( rk ), intent ( in ), contiguous , optional :: Wc (:) if ( allocated ( this % knot1 )) deallocate ( this % knot1 ) if ( allocated ( this % knot2 )) deallocate ( this % knot2 ) if ( allocated ( this % knot3 )) deallocate ( this % knot3 ) if ( allocated ( this % Xc )) deallocate ( this % Xc ) this % knot1 = knot1 this % knot2 = knot2 this % knot3 = knot3 call this % cmp_degree () call this % cmp_nc () this % Xc = Xc if ( present ( Wc )) then if ( size ( Wc ) /= this % nc ( 1 ) * this % nc ( 2 ) * this % nc ( 3 )) then error stop 'Number of weights does not match the number of control points.' else if ( allocated ( this % Wc )) deallocate ( this % Wc ) this % Wc = Wc end if end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Set control points and weights for the NURBS volume object. pure subroutine set2 ( this , Xth_dir1 , Xth_dir2 , Xth_dir3 , degree , continuity1 , continuity2 , continuity3 , Xc , Wc ) class ( nurbs_volume ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: Xth_dir1 (:), Xth_dir2 (:), Xth_dir3 (:) integer , intent ( in ), contiguous :: degree (:) integer , intent ( in ), contiguous :: continuity1 (:), continuity2 (:), continuity3 (:) real ( rk ), intent ( in ), contiguous :: Xc (:,:) real ( rk ), intent ( in ), contiguous , optional :: Wc (:) this % knot1 = compute_knot_vector ( Xth_dir1 , degree ( 1 ), continuity1 ) this % knot2 = compute_knot_vector ( Xth_dir2 , degree ( 2 ), continuity2 ) this % knot3 = compute_knot_vector ( Xth_dir3 , degree ( 3 ), continuity3 ) this % degree ( 1 ) = degree ( 1 ) this % degree ( 2 ) = degree ( 2 ) this % degree ( 3 ) = degree ( 3 ) call this % cmp_nc () this % Xc = Xc if ( present ( Wc )) this % Wc = Wc end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Set Bezier or Rational Bezier volume using control points and weights. pure subroutine set3 ( this , nc , Xc , Wc ) class ( nurbs_volume ), intent ( inout ) :: this integer , intent ( in ), contiguous :: nc (:) real ( rk ), intent ( in ), contiguous :: Xc (:,:) real ( rk ), intent ( in ), contiguous , optional :: Wc (:) if ( allocated ( this % Xc )) deallocate ( this % Xc ) this % Xc = Xc this % nc = nc if ( allocated ( this % knot1 )) deallocate ( this % knot1 ) allocate ( this % knot1 ( 2 * this % nc ( 1 ))) this % knot1 ( 1 : this % nc ( 1 )) = 0.0_rk this % knot1 ( this % nc ( 1 ) + 1 : 2 * this % nc ( 1 )) = 1.0_rk if ( allocated ( this % knot2 )) deallocate ( this % knot2 ) allocate ( this % knot2 ( 2 * this % nc ( 2 ))) this % knot2 ( 1 : this % nc ( 2 )) = 0.0_rk this % knot2 ( this % nc ( 2 ) + 1 : 2 * this % nc ( 2 )) = 1.0_rk if ( allocated ( this % knot3 )) deallocate ( this % knot3 ) allocate ( this % knot3 ( 2 * this % nc ( 3 ))) this % knot3 ( 1 : this % nc ( 3 )) = 0.0_rk this % knot3 ( this % nc ( 3 ) + 1 : 2 * this % nc ( 3 )) = 1.0_rk call this % cmp_degree () if ( present ( Wc )) then if ( size ( Wc ) /= this % nc ( 1 ) * this % nc ( 2 ) * this % nc ( 3 )) then error stop 'Number of weights does not match the number of control points.' else if ( allocated ( this % Wc )) deallocate ( this % Wc ) this % Wc = Wc end if end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine create ( this , res1 , res2 , res3 , Xt1 , Xt2 , Xt3 , Xt ) class ( nurbs_volume ), intent ( inout ) :: this integer , intent ( in ), optional :: res1 , res2 , res3 real ( rk ), intent ( in ), contiguous , optional :: Xt1 (:), Xt2 (:), Xt3 (:) real ( rk ), intent ( in ), contiguous , optional :: Xt (:,:) integer :: i ! check if (. not . allocated ( this % Xc )) then error stop 'Control points are not set.' end if if (. not . allocated ( this % knot1 ) . or . . not . allocated ( this % knot2 ) . or . . not . allocated ( this % knot3 )) then error stop 'Knot vector(s) is/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 if ( present ( Xt )) then this % Xt = Xt else ! 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 , this % Xt ) end if if ( allocated ( this % Xg )) deallocate ( this % Xg ) allocate ( this % Xg ( this % ng ( 1 ) * this % ng ( 2 ) * this % ng ( 3 ), size ( this % Xc , 2 ))) if ( this % is_rational ()) then ! NURBS this % Xg = compute_Xg (& this % Xt , this % knot1 , this % knot2 , this % knot3 , this % degree , this % nc , this % ng , this % Xc , this % Wc ) else ! B-Spline this % Xg = compute_Xg (& this % Xt , this % knot1 , this % knot2 , this % knot3 , this % degree , this % nc , this % ng , this % Xc ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function cmp_Xg ( this , Xt ) result ( Xg ) class ( nurbs_volume ), intent ( in ) :: this real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), allocatable :: Xg (:) ! check if (. not . allocated ( this % Xc )) then error stop 'Control points are not set.' end if if (. not . allocated ( this % knot1 ) . or . . not . allocated ( this % knot2 ) . or . . not . allocated ( this % knot3 )) then error stop 'Knot vector(s) is/are not set.' end if if ( this % is_rational ()) then ! NURBS Xg = compute_Xg ( Xt , this % knot1 , this % knot2 , this % knot3 , this % degree , this % nc , this % Xc , this % Wc ) else ! B-Spline Xg = compute_Xg ( Xt , this % knot1 , this % knot2 , this % knot3 , this % degree , this % nc , this % Xc ) end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xc_all ( 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_Xci ( this , n ) result ( Xc ) class ( nurbs_volume ), intent ( in ) :: this integer , intent ( in ) :: n real ( rk ), allocatable :: Xc (:) if ( allocated ( this % Xc )) then if ( n < lbound ( this % Xc , 1 ) . or . n > ubound ( this % Xc , 1 )) then error stop 'Invalid index for control points.' end if Xc = this % Xc ( n ,:) else error stop 'Control points are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xcid ( this , n , dir ) result ( Xc ) class ( nurbs_volume ), intent ( in ) :: this integer , intent ( in ) :: n integer , intent ( in ) :: dir real ( rk ) :: Xc if ( allocated ( this % Xc )) then if ( n < lbound ( this % Xc , 1 ) . or . n > ubound ( this % Xc , 1 )) then error stop 'Invalid index for control points.' end if if ( dir < lbound ( this % Xc , 2 ) . or . dir > ubound ( this % Xc , 2 )) then error stop 'Invalid direction for control points.' end if Xc = this % Xc ( n , dir ) else error stop 'Control points are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xg_all ( 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_Xgi ( this , n ) result ( Xg ) class ( nurbs_volume ), intent ( in ) :: this integer , intent ( in ) :: n real ( rk ), allocatable :: Xg (:) if ( allocated ( this % Xg )) then if ( n < lbound ( this % Xg , 1 ) . or . n > ubound ( this % Xg , 1 )) then error stop 'Invalid index for geometry points.' end if Xg = this % Xg ( n ,:) else error stop 'Control points are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xgid ( this , n , dir ) result ( Xg ) class ( nurbs_volume ), intent ( in ) :: this integer , intent ( in ) :: n integer , intent ( in ) :: dir real ( rk ) :: Xg if ( allocated ( this % Xg )) then if ( n < lbound ( this % Xg , 1 ) . or . n > ubound ( this % Xg , 1 )) then error stop 'Invalid index for geometry points.' end if if ( dir < lbound ( this % Xg , 2 ) . or . dir > ubound ( this % Xg , 2 )) then error stop 'Invalid direction for geometry points.' end if Xg = this % Xg ( n , dir ) else error stop 'Control points are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Wc_all ( 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 NURBS volume is not rational or weights are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Wci ( this , n ) result ( Wc ) class ( nurbs_volume ), intent ( in ) :: this integer , intent ( in ) :: n real ( rk ) :: Wc if ( allocated ( this % Wc )) then if ( n < lbound ( this % Wc , 1 ) . or . n > ubound ( this % Wc , 1 )) then error stop 'Invalid index for weights.' end if Wc = this % Wc ( n ) else error stop 'The NURBS volume is not rational or weights are not set.' 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 subroutine cmp_degree ( this , dir ) class ( nurbs_volume ), intent ( inout ) :: this integer , intent ( in ), optional :: dir integer , allocatable :: m1 (:), m2 (:), m3 (:) if ( present ( dir )) then if ( dir == 1 ) then m1 = this % get_multiplicity ( 1 ) this % degree ( 1 ) = m1 ( 1 ) - 1 else if ( dir == 2 ) then m2 = this % get_multiplicity ( 2 ) this % degree ( 2 ) = m2 ( 1 ) - 1 else if ( dir == 3 ) then m3 = this % get_multiplicity ( 3 ) this % degree ( 3 ) = m3 ( 1 ) - 1 else error stop 'Invalid direction for degree.' end if else m1 = this % get_multiplicity ( 1 ) this % degree ( 1 ) = m1 ( 1 ) - 1 m2 = this % get_multiplicity ( 2 ) this % degree ( 2 ) = m2 ( 1 ) - 1 m3 = this % get_multiplicity ( 3 ) this % degree ( 3 ) = m3 ( 1 ) - 1 end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_degree_all ( this ) result ( degree ) class ( nurbs_volume ), intent ( in ) :: this integer :: degree ( 3 ) degree ( 1 ) = this % degree ( 1 ) degree ( 2 ) = this % degree ( 2 ) degree ( 3 ) = this % degree ( 3 ) end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_degree_dir ( this , dir ) result ( degree ) class ( nurbs_volume ), intent ( in ) :: this integer , intent ( in ) :: dir integer :: degree if ( dir == 1 ) then degree = this % degree ( 1 ) else if ( dir == 2 ) then degree = this % degree ( 2 ) else if ( dir == 3 ) then degree = this % degree ( 3 ) else error stop 'Invalid direction for degree.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_knot_all ( 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 function get_knoti ( this , dir , i ) result ( knot ) class ( nurbs_volume ), intent ( in ) :: this integer , intent ( in ) :: dir integer , intent ( in ) :: i real ( rk ) :: knot if ( dir == 1 ) then if ( allocated ( this % knot1 )) then if ( i < 1 . or . i > size ( this % knot1 )) then error stop 'Invalid index for knot vector.' else knot = this % knot1 ( i ) end if else error stop 'Knot vector is not set.' end if elseif ( dir == 2 ) then if ( allocated ( this % knot2 )) then if ( i < 1 . or . i > size ( this % knot2 )) then error stop 'Invalid index for knot vector.' else knot = this % knot2 ( i ) end if else error stop 'Knot vector is not set.' end if elseif ( dir == 3 ) then if ( allocated ( this % knot3 )) then if ( i < 1 . or . i > size ( this % knot3 )) then error stop 'Invalid index for knot vector.' else knot = this % knot3 ( i ) end if 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 % Xt )) deallocate ( this % Xt ) if ( allocated ( this % knot1 )) deallocate ( this % knot1 ) if ( allocated ( this % knot2 )) deallocate ( this % knot2 ) if ( allocated ( this % knot3 )) deallocate ( this % knot3 ) if ( allocated ( this % elemConn_Xc_vis )) deallocate ( this % elemConn_Xc_vis ) if ( allocated ( this % elemConn_Xg_vis )) deallocate ( this % elemConn_Xg_vis ) if ( allocated ( this % elemConn )) deallocate ( this % elemConn ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function cmp_elem_Xc_vis ( this , p ) result ( elemConn ) class ( nurbs_volume ), intent ( in ) :: this integer , allocatable :: elemConn (:,:) integer , intent ( in ), contiguous , 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 function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function cmp_elem_Xg_vis ( this , p ) result ( elemConn ) class ( nurbs_volume ), intent ( in ) :: this integer , allocatable :: elemConn (:,:) integer , intent ( in ), contiguous , 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 function !=============================================================================== !=============================================================================== !> 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 , nc , nunit integer , allocatable :: elemConn (:,:) ! check if (. not . allocated ( this % Xc )) then error stop 'Control points are not set.' end if if (. not . allocated ( this % elemConn_Xc_vis )) then elemConn = this % cmp_elem_Xc_vis () else elemConn = this % elemConn_Xc_vis end if nc = size ( this % Xc , 1 ) open ( newunit = nunit , file = filename , action = 'write' ) write ( nunit , '(a)' ) '# vtk DataFile Version 2.0' write ( nunit , '(a)' ) 'Generated by ForCAD' write ( nunit , '(a)' ) 'ASCII' write ( nunit , '(a)' ) 'DATASET UNSTRUCTURED_GRID' write ( nunit , '(a,\" \",g0,\" \",a)' ) 'POINTS' , nc , 'double' if ( size ( this % Xc , 2 ) == 2 ) then write ( nunit , '(g0,\" \",g0,\" \",g0)' ) ( this % Xc ( i , 1 ), this % Xc ( i , 2 ), 0.0_rk , i = 1 , nc ) elseif ( size ( this % Xc , 2 ) == 3 ) then write ( nunit , '(g0,\" \",g0,\" \",g0)' ) ( this % Xc ( i , 1 ), this % Xc ( i , 2 ), this % Xc ( i , 3 ) , i = 1 , nc ) else error stop 'Invalid dimension for control points.' end if write ( nunit , '(a,\" \",g0,\" \",g0)' ) 'CELLS' , size ( elemConn , 1 ), size ( elemConn , 1 ) * ( size ( elemConn , 2 ) + 1 ) write ( nunit , '(g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0)' )& ( 8 , elemConn ( i , 1 ) - 1 , elemConn ( i , 2 ) - 1 , elemConn ( i , 4 ) - 1 , elemConn ( i , 3 ) - 1 ,& elemConn ( i , 5 ) - 1 , elemConn ( i , 6 ) - 1 , elemConn ( i , 8 ) - 1 , elemConn ( i , 7 ) - 1 , 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 , ng , nunit integer , allocatable :: elemConn (:,:) ! check if (. not . allocated ( this % Xg )) then error stop 'Geometry points are not set.' end if if (. not . allocated ( this % elemConn_Xg_vis )) then elemConn = this % cmp_elem_Xg_vis () else elemConn = this % elemConn_Xg_vis end if ng = size ( this % Xg , 1 ) open ( newunit = nunit , file = filename , action = 'write' ) write ( nunit , '(a)' ) '# vtk DataFile Version 2.0' write ( nunit , '(a)' ) 'Generated by ForCAD' write ( nunit , '(a)' ) 'ASCII' write ( nunit , '(a)' ) 'DATASET UNSTRUCTURED_GRID' write ( nunit , '(a,\" \",g0,\" \",a)' ) 'POINTS' , ng , 'double' if ( size ( this % Xg , 2 ) == 2 ) then write ( nunit , '(g0,\" \",g0,\" \",g0)' ) ( this % Xg ( i , 1 ), this % Xg ( i , 2 ), 0.0_rk , i = 1 , ng ) elseif ( size ( this % Xg , 2 ) == 3 ) then write ( nunit , '(g0,\" \",g0,\" \",g0)' ) ( this % Xg ( i , 1 ), this % Xg ( i , 2 ), this % Xg ( i , 3 ) , i = 1 , ng ) else error stop 'Invalid dimension for geometry points.' end if write ( nunit , '(a,\" \",g0,\" \",g0)' ) 'CELLS' , size ( elemConn , 1 ), size ( elemConn , 1 ) * ( size ( elemConn , 2 ) + 1 ) write ( nunit , '(g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0)' )& ( 8 , elemConn ( i , 1 ) - 1 , elemConn ( i , 2 ) - 1 , elemConn ( i , 4 ) - 1 , elemConn ( i , 3 ) - 1 ,& elemConn ( i , 5 ) - 1 , elemConn ( i , 6 ) - 1 , elemConn ( i , 8 ) - 1 , elemConn ( i , 7 ) - 1 , 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 if ( allocated ( this % Wc )) then call this % set ( knot1 = this % get_knot ( 1 ), knot2 = this % get_knot ( 2 ), knot3 = this % get_knot ( 3 ),& Xc = this % get_Xc (), Wc = this % get_Wc ()) else call this % set ( knot1 = this % get_knot ( 1 ), knot2 = this % get_knot ( 2 ), knot3 = this % get_knot ( 3 ),& Xc = this % get_Xc ()) end if 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 if ( allocated ( this % knot1 ) . and . allocated ( this % knot2 ) . and . allocated ( this % knot3 )) then call this % set ( knot1 = this % get_knot ( 1 ), knot2 = this % get_knot ( 2 ), knot3 = this % get_knot ( 3 ),& Xc = this % get_Xc (), Wc = this % get_Wc ()) else call this % set ( nc = this % nc , Xc = this % get_Xc (), Wc = this % get_Wc ()) end if else error stop 'The NURBS volume 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 % degree ( 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 % degree ( 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 % degree ( 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 subroutine cmp_nc ( this , dir ) class ( nurbs_volume ), intent ( inout ) :: this integer , intent ( in ), optional :: dir if ( present ( dir )) then if ( dir == 1 ) then ! check if (. not . allocated ( this % knot1 )) then error stop 'Knot vector is not set.' else this % nc ( 1 ) = sum ( compute_multiplicity ( this % knot1 )) - this % degree ( 1 ) - 1 end if elseif ( dir == 2 ) then ! check if (. not . allocated ( this % knot2 )) then error stop 'Knot vector is not set.' else this % nc ( 2 ) = sum ( compute_multiplicity ( this % knot2 )) - this % degree ( 2 ) - 1 end if elseif ( dir == 3 ) then ! check if (. not . allocated ( this % knot3 )) then error stop 'Knot vector is not set.' else this % nc ( 3 ) = sum ( compute_multiplicity ( this % knot3 )) - this % degree ( 3 ) - 1 end if else error stop 'Invalid direction.' end if else ! check if (. not . allocated ( this % knot1 )) then error stop 'Knot vector is not set.' else this % nc ( 1 ) = sum ( compute_multiplicity ( this % knot1 )) - this % degree ( 1 ) - 1 end if ! check if (. not . allocated ( this % knot2 )) then error stop 'Knot vector is not set.' else this % nc ( 2 ) = sum ( compute_multiplicity ( this % knot2 )) - this % degree ( 2 ) - 1 end if ! check if (. not . allocated ( this % knot3 )) then error stop 'Knot vector is not set.' else this % nc ( 3 ) = sum ( compute_multiplicity ( this % knot3 )) - this % degree ( 3 ) - 1 end if end if end subroutine !=============================================================================== !=============================================================================== !> 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 % degree ( 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 % degree ( 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 % degree ( 3 ) - 1 end if else error stop 'Invalid direction.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine derivative_vector ( this , res1 , res2 , res3 , Xt1 , Xt2 , Xt3 , dTgc , Tgc ) class ( nurbs_volume ), intent ( inout ) :: this integer , intent ( in ), optional :: res1 , res2 , res3 real ( rk ), intent ( in ), contiguous , optional :: Xt1 (:), Xt2 (:), Xt3 (:) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:,:) real ( rk ), allocatable , intent ( out ), optional :: Tgc (:,:) integer :: i real ( rk ), allocatable :: Xt (:,:) ! 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 ( this % is_rational ()) then ! NURBS call compute_dTgc ( Xt , this % knot1 , this % knot2 , this % knot3 , this % degree , this % nc , this % ng , this % Wc , dTgc , Tgc ) else call compute_dTgc ( Xt , this % knot1 , this % knot2 , this % knot3 , this % degree , this % nc , this % ng , dTgc , Tgc ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine derivative_scalar ( this , Xt , dTgc , Tgc ) class ( nurbs_volume ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:) real ( rk ), allocatable , intent ( out ), optional :: Tgc (:) if ( this % is_rational ()) then ! NURBS call compute_dTgc ( Xt , this % knot1 , this % knot2 , this % knot3 , this % degree , this % nc , this % Wc , dTgc , Tgc ) else call compute_dTgc ( Xt , this % knot1 , this % knot2 , this % knot3 , this % degree , this % nc , dTgc , Tgc ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine derivative2_vector ( this , res1 , res2 , res3 , Xt1 , Xt2 , Xt3 , d2Tgc , dTgc , Tgc ) class ( nurbs_volume ), intent ( inout ) :: this integer , intent ( in ), optional :: res1 , res2 , res3 real ( rk ), intent ( in ), contiguous , optional :: Xt1 (:), Xt2 (:), Xt3 (:) real ( rk ), allocatable , intent ( out ) :: d2Tgc (:,:,:) real ( rk ), allocatable , intent ( out ), optional :: dTgc (:,:,:) real ( rk ), allocatable , intent ( out ), optional :: Tgc (:,:) integer :: i real ( rk ), allocatable :: Xt (:,:) ! 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 ( this % is_rational ()) then ! NURBS call compute_d2Tgc ( Xt , this % knot1 , this % knot2 , this % knot3 , this % degree , this % nc , this % ng , this % Wc , d2Tgc , dTgc , Tgc ) else call compute_d2Tgc ( Xt , this % knot1 , this % knot2 , this % knot3 , this % degree , this % nc , this % ng , d2Tgc , dTgc , Tgc ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine derivative2_scalar ( this , Xt , d2Tgc , dTgc , Tgc ) class ( nurbs_volume ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), allocatable , intent ( out ) :: d2Tgc (:,:) real ( rk ), allocatable , intent ( out ), optional :: dTgc (:,:) real ( rk ), allocatable , intent ( out ), optional :: Tgc (:) if ( this % is_rational ()) then ! NURBS call compute_d2Tgc ( Xt , this % knot1 , this % knot2 , this % knot3 , this % degree , this % nc , this % Wc , d2Tgc , dTgc , Tgc ) else call compute_d2Tgc ( Xt , this % knot1 , this % knot2 , this % knot3 , this % degree , this % nc , d2Tgc , dTgc , Tgc ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine basis_vector ( this , res1 , res2 , res3 , Xt1 , Xt2 , Xt3 , Tgc ) class ( nurbs_volume ), intent ( inout ) :: this integer , intent ( in ), optional :: res1 , res2 , res3 real ( rk ), intent ( in ), contiguous , optional :: Xt1 (:), Xt2 (:), Xt3 (:) real ( rk ), allocatable , intent ( out ) :: Tgc (:,:) integer :: i real ( rk ), allocatable :: Xt (:,:) ! 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 ( this % is_rational ()) then ! NURBS Tgc = compute_Tgc ( Xt , this % knot1 , this % knot2 , this % knot3 , this % degree , this % nc , this % ng , this % Wc ) else Tgc = compute_Tgc ( Xt , this % knot1 , this % knot2 , this % knot3 , this % degree , this % nc , this % ng ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine basis_scalar ( this , Xt , Tgc ) class ( nurbs_volume ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), allocatable , intent ( out ) :: Tgc (:) if ( this % is_rational ()) then ! NURBS Tgc = compute_Tgc ( Xt , this % knot1 , this % knot2 , this % knot3 , this % degree , this % nc , this % Wc ) else Tgc = compute_Tgc ( Xt , this % knot1 , this % knot2 , this % knot3 , this % degree , this % nc ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine insert_knots ( this , dir , Xth , r ) class ( nurbs_volume ), intent ( inout ) :: this integer , intent ( in ) :: dir real ( rk ), intent ( in ), contiguous :: Xth (:) integer , intent ( in ), contiguous :: r (:) integer :: k , i , s , dim , j , n_new real ( rk ), allocatable :: Xc (:,:), Xcw (:,:), Xcw_new (:,:), Xc_new (:,:), Wc_new (:), knot_new (:) real ( rk ), allocatable :: Xc4 (:,:,:,:) if ( dir == 1 ) then ! direction 1 if ( allocated ( this % Wc )) then ! NURBS do i = 1 , size ( Xth ) k = findspan ( this % nc ( 1 ) - 1 , this % degree ( 1 ), Xth ( i ), this % knot1 ) if ( this % knot1 ( k + 1 ) == Xth ( i )) then s = compute_multiplicity ( this % knot1 , Xth ( i )) else s = 0 end if dim = size ( this % Xc , 2 ) allocate ( Xcw ( size ( this % Xc , 1 ), dim + 1 )) do j = 1 , size ( this % Xc , 1 ) Xcw ( j , 1 : dim ) = this % Xc ( j , 1 : dim ) * this % Wc ( j ) end do Xcw (:, dim + 1 ) = this % Wc (:) Xcw = reshape ( Xcw ,[ this % nc ( 1 ), this % nc ( 2 ) * this % nc ( 3 ) * ( dim + 1 )]) call insert_knot_A_5_1 (& this % degree ( 1 ),& this % knot1 ,& Xcw ,& Xth ( i ),& k ,& s ,& r ( i ),& n_new ,& knot_new ,& Xcw_new ) Xcw_new = reshape ( Xcw_new ,[( n_new + 1 ) * this % nc ( 2 ) * this % nc ( 3 ), dim + 1 ]) allocate ( Xc_new ( 1 :( n_new + 1 ) * this % nc ( 2 ) * this % nc ( 3 ), 1 : dim )) allocate ( Wc_new ( 1 :( n_new + 1 ) * this % nc ( 2 ) * this % nc ( 3 ))) do j = 1 , ( n_new + 1 ) * this % nc ( 2 ) * this % nc ( 3 ) Xc_new ( j , 1 : dim ) = Xcw_new ( j , 1 : dim ) / Xcw_new ( j , dim + 1 ) end do Wc_new (:) = Xcw_new (:, dim + 1 ) call this % set ( knot1 = knot_new , knot2 = this % get_knot ( 2 ), knot3 = this % get_knot ( 3 ), Xc = Xc_new , Wc = Wc_new ) deallocate ( Xcw , Xcw_new , Xc_new , Wc_new ) end do else ! B-Spline do i = 1 , size ( Xth ) k = findspan ( this % nc ( 1 ) - 1 , this % degree ( 1 ), Xth ( i ), this % knot1 ) if ( this % knot1 ( k + 1 ) == Xth ( i )) then s = compute_multiplicity ( this % knot1 , Xth ( i )) else s = 0 end if dim = size ( this % Xc , 2 ) Xc = reshape ( this % Xc ,[ this % nc ( 1 ), this % nc ( 2 ) * this % nc ( 3 ) * dim ]) call insert_knot_A_5_1 (& this % degree ( 1 ),& this % knot1 ,& Xc ,& Xth ( i ),& k ,& s ,& r ( i ),& n_new ,& knot_new ,& Xc_new ) Xc_new = reshape ( Xc_new ,[( n_new + 1 ) * this % nc ( 2 ) * this % nc ( 3 ), dim ]) call this % set ( knot1 = knot_new , knot2 = this % get_knot ( 2 ), knot3 = this % get_knot ( 3 ), Xc = Xc_new ) end do end if elseif ( dir == 2 ) then ! direction 2 if ( allocated ( this % Wc )) then ! NURBS do i = 1 , size ( Xth ) k = findspan ( this % nc ( 2 ) - 1 , this % degree ( 2 ), Xth ( i ), this % knot2 ) if ( this % knot2 ( k + 1 ) == Xth ( i )) then s = compute_multiplicity ( this % knot2 , Xth ( i )) else s = 0 end if dim = size ( this % Xc , 2 ) allocate ( Xcw ( size ( this % Xc , 1 ), dim + 1 )) do j = 1 , size ( this % Xc , 1 ) Xcw ( j , 1 : dim ) = this % Xc ( j , 1 : dim ) * this % Wc ( j ) end do Xcw (:, dim + 1 ) = this % Wc (:) Xc4 = reshape ( Xcw , [ this % nc ( 1 ), this % nc ( 2 ), this % nc ( 3 ), dim + 1 ]) Xc4 = reshape ( Xc4 , [ this % nc ( 2 ), this % nc ( 1 ), this % nc ( 3 ), dim + 1 ], order = [ 2 , 1 , 3 , 4 ]) Xcw = reshape ( Xc4 ,[ this % nc ( 2 ), this % nc ( 1 ) * this % nc ( 3 ) * ( dim + 1 )]) call insert_knot_A_5_1 (& this % degree ( 2 ),& this % knot2 ,& Xcw ,& Xth ( i ),& k ,& s ,& r ( i ),& n_new ,& knot_new ,& Xcw_new ) Xc4 = reshape ( Xcw_new , [ n_new + 1 , this % nc ( 1 ), this % nc ( 3 ), dim + 1 ]) Xc4 = reshape ( Xc4 , [ this % nc ( 1 ), n_new + 1 , this % nc ( 3 ), dim + 1 ], order = [ 2 , 1 , 3 , 4 ]) Xcw_new = reshape ( Xc4 ,[ this % nc ( 1 ) * ( n_new + 1 ) * this % nc ( 3 ), dim + 1 ]) allocate ( Xc_new ( 1 : this % nc ( 1 ) * ( n_new + 1 ) * this % nc ( 3 ), 1 : dim )) allocate ( Wc_new ( 1 : this % nc ( 1 ) * ( n_new + 1 ) * this % nc ( 3 ))) do j = 1 , this % nc ( 1 ) * ( n_new + 1 ) * this % nc ( 3 ) Xc_new ( j , 1 : dim ) = Xcw_new ( j , 1 : dim ) / Xcw_new ( j , dim + 1 ) end do Wc_new (:) = Xcw_new (:, dim + 1 ) call this % set ( knot1 = this % get_knot ( 1 ), knot2 = knot_new , knot3 = this % get_knot ( 3 ), Xc = Xc_new , Wc = Wc_new ) deallocate ( Xcw , Xcw_new , Xc_new , Wc_new ) end do else ! B-Spline do i = 1 , size ( Xth ) k = findspan ( this % nc ( 2 ) - 1 , this % degree ( 2 ), Xth ( i ), this % knot2 ) if ( this % knot2 ( k + 1 ) == Xth ( i )) then s = compute_multiplicity ( this % knot2 , Xth ( i )) else s = 0 end if dim = size ( this % Xc , 2 ) Xc4 = reshape ( this % Xc , [ this % nc ( 1 ), this % nc ( 2 ), this % nc ( 3 ), dim ]) Xc4 = reshape ( Xc4 , [ this % nc ( 2 ), this % nc ( 1 ), this % nc ( 3 ), dim ], order = [ 2 , 1 , 3 , 4 ]) Xc = reshape ( Xc4 ,[ this % nc ( 2 ), this % nc ( 1 ) * this % nc ( 3 ) * dim ]) call insert_knot_A_5_1 (& this % degree ( 2 ),& this % knot2 ,& Xc ,& Xth ( i ),& k ,& s ,& r ( i ),& n_new ,& knot_new ,& Xc_new ) Xc4 = reshape ( Xc_new , [ n_new + 1 , this % nc ( 1 ), this % nc ( 3 ), dim ]) Xc4 = reshape ( Xc4 , [ this % nc ( 1 ), n_new + 1 , this % nc ( 3 ), dim ], order = [ 2 , 1 , 3 , 4 ]) Xc_new = reshape ( Xc4 ,[ this % nc ( 1 ) * ( n_new + 1 ) * this % nc ( 3 ), dim ]) call this % set ( knot1 = this % get_knot ( 1 ), knot2 = knot_new , knot3 = this % get_knot ( 3 ), Xc = Xc_new ) end do end if elseif ( dir == 3 ) then ! direction 3 if ( allocated ( this % Wc )) then ! NURBS do i = 1 , size ( Xth ) k = findspan ( this % nc ( 3 ) - 1 , this % degree ( 3 ), Xth ( i ), this % knot3 ) if ( this % knot3 ( k + 1 ) == Xth ( i )) then s = compute_multiplicity ( this % knot3 , Xth ( i )) else s = 0 end if dim = size ( this % Xc , 2 ) allocate ( Xcw ( size ( this % Xc , 1 ), dim + 1 )) do j = 1 , size ( this % Xc , 1 ) Xcw ( j , 1 : dim ) = this % Xc ( j , 1 : dim ) * this % Wc ( j ) end do Xcw (:, dim + 1 ) = this % Wc (:) Xc4 = reshape ( Xcw , [ this % nc ( 1 ), this % nc ( 2 ), this % nc ( 3 ), dim + 1 ]) Xc4 = reshape ( Xc4 , [ this % nc ( 3 ), this % nc ( 2 ), this % nc ( 1 ), dim + 1 ], order = [ 3 , 2 , 1 , 4 ]) Xcw = reshape ( Xc4 ,[ this % nc ( 3 ), this % nc ( 2 ) * this % nc ( 1 ) * ( dim + 1 )]) call insert_knot_A_5_1 (& this % degree ( 3 ),& this % knot3 ,& Xcw ,& Xth ( i ),& k ,& s ,& r ( i ),& n_new ,& knot_new ,& Xcw_new ) Xc4 = reshape ( Xcw_new , [ n_new + 1 , this % nc ( 2 ), this % nc ( 1 ), dim + 1 ]) Xc4 = reshape ( Xc4 , [ this % nc ( 1 ), this % nc ( 2 ), n_new + 1 , dim + 1 ], order = [ 3 , 2 , 1 , 4 ]) Xcw_new = reshape ( Xc4 ,[ this % nc ( 1 ) * this % nc ( 2 ) * ( n_new + 1 ), dim + 1 ]) allocate ( Xc_new ( 1 : this % nc ( 1 ) * this % nc ( 2 ) * ( n_new + 1 ), 1 : dim )) allocate ( Wc_new ( 1 : this % nc ( 1 ) * this % nc ( 2 ) * ( n_new + 1 ))) do j = 1 , this % nc ( 1 ) * this % nc ( 2 ) * ( n_new + 1 ) Xc_new ( j , 1 : dim ) = Xcw_new ( j , 1 : dim ) / Xcw_new ( j , dim + 1 ) end do Wc_new (:) = Xcw_new (:, dim + 1 ) call this % set ( knot1 = this % get_knot ( 1 ), knot2 = this % get_knot ( 2 ), knot3 = knot_new , Xc = Xc_new , Wc = Wc_new ) deallocate ( Xcw , Xcw_new , Xc_new , Wc_new ) end do else ! B-Spline do i = 1 , size ( Xth ) k = findspan ( this % nc ( 3 ) - 1 , this % degree ( 3 ), Xth ( i ), this % knot3 ) if ( this % knot3 ( k + 1 ) == Xth ( i )) then s = compute_multiplicity ( this % knot3 , Xth ( i )) else s = 0 end if dim = size ( this % Xc , 2 ) Xc4 = reshape ( this % Xc , [ this % nc ( 1 ), this % nc ( 2 ), this % nc ( 3 ), dim ]) Xc4 = reshape ( Xc4 , [ this % nc ( 3 ), this % nc ( 2 ), this % nc ( 1 ), dim ], order = [ 3 , 2 , 1 , 4 ]) Xc = reshape ( Xc4 ,[ this % nc ( 3 ), this % nc ( 2 ) * this % nc ( 1 ) * dim ]) call insert_knot_A_5_1 (& this % degree ( 3 ),& this % knot3 ,& Xc ,& Xth ( i ),& k ,& s ,& r ( i ),& n_new ,& knot_new ,& Xc_new ) Xc4 = reshape ( Xc_new , [ n_new + 1 , this % nc ( 2 ), this % nc ( 1 ), dim ]) Xc4 = reshape ( Xc4 , [ this % nc ( 1 ), this % nc ( 2 ), n_new + 1 , dim ], order = [ 3 , 2 , 1 , 4 ]) Xc_new = reshape ( Xc4 , [ this % nc ( 1 ) * this % nc ( 2 ) * ( n_new + 1 ), dim ]) call this % set ( knot1 = this % get_knot ( 1 ), knot2 = this % get_knot ( 2 ), knot3 = knot_new , Xc = Xc_new ) end do end if else error stop 'Invalid direction.' end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine elevate_degree ( this , dir , t ) class ( nurbs_volume ), intent ( inout ) :: this integer , intent ( in ) :: dir integer , intent ( in ) :: t real ( rk ), allocatable :: Xc (:,:), Xcw (:,:), Xcw_new (:,:), Xc_new (:,:), Wc_new (:), knot_new (:) integer :: nc_new , dim , j real ( rk ), allocatable :: Xc4 (:,:,:,:) if ( dir == 1 ) then ! direction 1 if ( allocated ( this % Wc )) then ! NURBS dim = size ( this % Xc , 2 ) allocate ( Xcw ( size ( this % Xc , 1 ), dim + 1 )) do j = 1 , size ( this % Xc , 1 ) Xcw ( j , 1 : dim ) = this % Xc ( j , 1 : dim ) * this % Wc ( j ) end do Xcw (:, dim + 1 ) = this % Wc (:) Xcw = reshape ( Xcw ,[ this % nc ( 1 ), this % nc ( 2 ) * this % nc ( 3 ) * ( dim + 1 )], order = [ 1 , 2 ]) call elevate_degree_A_5_9 ( t , this % knot1 , this % degree ( 1 ), Xcw , nc_new , knot_new , Xcw_new ) Xcw_new = reshape ( Xcw_new ,[ nc_new * this % nc ( 2 ) * this % nc ( 3 ), dim + 1 ], order = [ 1 , 2 ]) allocate ( Xc_new ( 1 : nc_new * this % nc ( 2 ) * this % nc ( 3 ), 1 : dim )) allocate ( Wc_new ( 1 : nc_new * this % nc ( 2 ) * this % nc ( 3 ))) do j = 1 , nc_new * this % nc ( 2 ) * this % nc ( 3 ) Xc_new ( j , 1 : dim ) = Xcw_new ( j , 1 : dim ) / Xcw_new ( j , dim + 1 ) end do Wc_new (:) = Xcw_new (:, dim + 1 ) call this % set ( knot1 = knot_new , knot2 = this % get_knot ( 2 ), knot3 = this % get_knot ( 3 ), Xc = Xc_new , Wc = Wc_new ) deallocate ( Xcw , Xcw_new , Xc_new , Wc_new ) else ! B-Spline dim = size ( this % Xc , 2 ) Xc = reshape ( this % Xc ,[ this % nc ( 1 ), this % nc ( 2 ) * this % nc ( 3 ) * dim ], order = [ 1 , 2 ]) call elevate_degree_A_5_9 ( t , this % knot1 , this % degree ( 1 ), Xc , nc_new , knot_new , Xc_new ) Xc_new = reshape ( Xc_new ,[ nc_new * this % nc ( 2 ) * this % nc ( 3 ), dim ], order = [ 1 , 2 ]) call this % set ( knot1 = knot_new , knot2 = this % get_knot ( 2 ), knot3 = this % get_knot ( 3 ), Xc = Xc_new ) end if elseif ( dir == 2 ) then ! direction 2 if ( allocated ( this % Wc )) then ! NURBS dim = size ( this % Xc , 2 ) allocate ( Xcw ( size ( this % Xc , 1 ), dim + 1 )) do j = 1 , size ( this % Xc , 1 ) Xcw ( j , 1 : dim ) = this % Xc ( j , 1 : dim ) * this % Wc ( j ) end do Xcw (:, dim + 1 ) = this % Wc (:) Xc4 = reshape ( Xcw , [ this % nc ( 1 ), this % nc ( 2 ), this % nc ( 3 ), dim + 1 ]) Xc4 = reshape ( Xc4 , [ this % nc ( 2 ), this % nc ( 1 ), this % nc ( 3 ), dim + 1 ], order = [ 2 , 1 , 3 , 4 ]) Xcw = reshape ( Xc4 ,[ this % nc ( 2 ), this % nc ( 1 ) * this % nc ( 3 ) * ( dim + 1 )]) call elevate_degree_A_5_9 ( t , this % knot2 , this % degree ( 2 ), Xcw , nc_new , knot_new , Xcw_new ) Xc4 = reshape ( Xcw_new , [ nc_new , this % nc ( 1 ), this % nc ( 3 ), dim + 1 ]) Xc4 = reshape ( Xc4 , [ this % nc ( 1 ), nc_new , this % nc ( 3 ), dim + 1 ], order = [ 2 , 1 , 3 , 4 ]) Xcw_new = reshape ( Xc4 ,[ this % nc ( 1 ) * nc_new * this % nc ( 3 ), dim + 1 ]) allocate ( Xc_new ( 1 : this % nc ( 1 ) * nc_new * this % nc ( 3 ), 1 : dim )) allocate ( Wc_new ( 1 : this % nc ( 1 ) * nc_new * this % nc ( 3 ))) do j = 1 , this % nc ( 1 ) * nc_new * this % nc ( 3 ) Xc_new ( j , 1 : dim ) = Xcw_new ( j , 1 : dim ) / Xcw_new ( j , dim + 1 ) end do Wc_new (:) = Xcw_new (:, dim + 1 ) call this % set ( knot1 = this % get_knot ( 1 ), knot2 = knot_new , knot3 = this % get_knot ( 3 ), Xc = Xc_new , Wc = Wc_new ) deallocate ( Xcw , Xcw_new , Xc_new , Wc_new ) else ! B-Spline dim = size ( this % Xc , 2 ) Xc4 = reshape ( this % Xc , [ this % nc ( 1 ), this % nc ( 2 ), this % nc ( 3 ), dim ]) Xc4 = reshape ( Xc4 , [ this % nc ( 2 ), this % nc ( 1 ), this % nc ( 3 ), dim ], order = [ 2 , 1 , 3 , 4 ]) Xc = reshape ( Xc4 ,[ this % nc ( 2 ), this % nc ( 1 ) * this % nc ( 3 ) * dim ]) call elevate_degree_A_5_9 ( t , this % knot2 , this % degree ( 2 ), Xc , nc_new , knot_new , Xc_new ) Xc4 = reshape ( Xc_new , [ nc_new , this % nc ( 1 ), this % nc ( 3 ), dim ]) Xc4 = reshape ( Xc4 , [ this % nc ( 1 ), nc_new , this % nc ( 3 ), dim ], order = [ 2 , 1 , 3 , 4 ]) Xc_new = reshape ( Xc4 ,[ this % nc ( 1 ) * nc_new * this % nc ( 3 ), dim ]) call this % set ( knot1 = this % get_knot ( 1 ), knot2 = knot_new , knot3 = this % get_knot ( 3 ), Xc = Xc_new ) end if elseif ( dir == 3 ) then ! direction 3 if ( allocated ( this % Wc )) then ! NURBS dim = size ( this % Xc , 2 ) allocate ( Xcw ( size ( this % Xc , 1 ), dim + 1 )) do j = 1 , size ( this % Xc , 1 ) Xcw ( j , 1 : dim ) = this % Xc ( j , 1 : dim ) * this % Wc ( j ) end do Xcw (:, dim + 1 ) = this % Wc (:) Xc4 = reshape ( Xcw , [ this % nc ( 1 ), this % nc ( 2 ), this % nc ( 3 ), dim + 1 ]) Xc4 = reshape ( Xc4 , [ this % nc ( 3 ), this % nc ( 2 ), this % nc ( 1 ), dim + 1 ], order = [ 3 , 2 , 1 , 4 ]) Xcw = reshape ( Xc4 ,[ this % nc ( 3 ), this % nc ( 2 ) * this % nc ( 1 ) * ( dim + 1 )]) call elevate_degree_A_5_9 ( t , this % knot3 , this % degree ( 3 ), Xcw , nc_new , knot_new , Xcw_new ) Xc4 = reshape ( Xcw_new , [ nc_new , this % nc ( 2 ), this % nc ( 1 ), dim + 1 ]) Xc4 = reshape ( Xc4 , [ this % nc ( 1 ), this % nc ( 2 ), nc_new , dim + 1 ], order = [ 3 , 2 , 1 , 4 ]) Xcw_new = reshape ( Xc4 ,[ this % nc ( 1 ) * this % nc ( 2 ) * nc_new , dim + 1 ]) allocate ( Xc_new ( 1 : this % nc ( 1 ) * this % nc ( 2 ) * nc_new , 1 : dim )) allocate ( Wc_new ( 1 : this % nc ( 1 ) * this % nc ( 2 ) * nc_new )) do j = 1 , this % nc ( 1 ) * this % nc ( 2 ) * nc_new Xc_new ( j , 1 : dim ) = Xcw_new ( j , 1 : dim ) / Xcw_new ( j , dim + 1 ) end do Wc_new (:) = Xcw_new (:, dim + 1 ) call this % set ( knot1 = this % get_knot ( 1 ), knot2 = this % get_knot ( 2 ), knot3 = knot_new , Xc = Xc_new , Wc = Wc_new ) deallocate ( Xcw , Xcw_new , Xc_new , Wc_new ) else ! B-Spline dim = size ( this % Xc , 2 ) Xc4 = reshape ( this % Xc , [ this % nc ( 1 ), this % nc ( 2 ), this % nc ( 3 ), dim ]) Xc4 = reshape ( Xc4 , [ this % nc ( 3 ), this % nc ( 2 ), this % nc ( 1 ), dim ], order = [ 3 , 2 , 1 , 4 ]) Xc = reshape ( Xc4 ,[ this % nc ( 3 ), this % nc ( 2 ) * this % nc ( 1 ) * dim ]) call elevate_degree_A_5_9 ( t , this % knot3 , this % degree ( 3 ), Xc , nc_new , knot_new , Xc_new ) Xc4 = reshape ( Xc_new , [ nc_new , this % nc ( 2 ), this % nc ( 1 ), dim ]) Xc4 = reshape ( Xc4 , [ this % nc ( 1 ), this % nc ( 2 ), nc_new , dim ], order = [ 3 , 2 , 1 , 4 ]) Xc_new = reshape ( Xc4 ,[ this % nc ( 1 ) * this % nc ( 2 ) * nc_new , dim ]) call this % set ( knot1 = this % get_knot ( 1 ), knot2 = this % get_knot ( 2 ), knot3 = knot_new , Xc = Xc_new ) end if else error stop 'Invalid direction.' end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function is_rational ( this ) result ( r ) class ( nurbs_volume ), intent ( in ) :: this logical :: r r = . false . if ( allocated ( this % Wc )) then if ( any ( this % Wc /= this % Wc ( 1 ))) then r = . true . end if end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine set_elem_Xc_vis ( this , elemConn ) class ( nurbs_volume ), intent ( inout ) :: this integer , intent ( in ), contiguous :: elemConn (:,:) if ( allocated ( this % elemConn_Xc_vis )) deallocate ( this % elemConn_Xc_vis ) this % elemConn_Xc_vis = elemConn end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine set_elem_Xg_vis ( this , elemConn ) class ( nurbs_volume ), intent ( inout ) :: this integer , intent ( in ), contiguous :: elemConn (:,:) if ( allocated ( this % elemConn_Xg_vis )) deallocate ( this % elemConn_Xg_vis ) this % elemConn_Xg_vis = elemConn end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine set_elem ( this , elemConn ) class ( nurbs_volume ), intent ( inout ) :: this integer , intent ( in ), contiguous :: elemConn (:,:) if ( allocated ( this % elemConn )) deallocate ( this % elemConn ) this % elemConn = elemConn end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_elem_Xc_vis ( this ) result ( elemConn ) class ( nurbs_volume ), intent ( in ) :: this integer , allocatable :: elemConn (:,:) elemConn = this % elemConn_Xc_vis end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_elem_Xg_vis ( this ) result ( elemConn ) class ( nurbs_volume ), intent ( in ) :: this integer , allocatable :: elemConn (:,:) elemConn = this % elemConn_Xg_vis end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_elem ( this ) result ( elemConn ) class ( nurbs_volume ), intent ( in ) :: this integer , allocatable :: elemConn (:,:) elemConn = this % elemConn end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine set_hexahedron ( this , L , nc , Wc ) class ( nurbs_volume ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: L (:) integer , intent ( in ), contiguous :: nc (:) real ( rk ), intent ( in ), contiguous , optional :: Wc (:) if ( present ( Wc )) then call this % set ( nc , hexahedron_Xc ( L , nc ), Wc ) else call this % set ( nc , hexahedron_Xc ( L , nc )) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine put_to_nurbs ( this , X , elemConn ) class ( nurbs_volume ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: X (:,:) integer , intent ( in ), contiguous :: elemConn (:,:) integer :: i real ( rk ), allocatable :: Tgc1 (:), Tgc2 (:), Tgc3 (:), Tgc (:) real ( rk ), allocatable :: Xt (:,:) real ( rk ) :: min_X1 , max_X1 , min_X2 , max_X2 , min_X3 , max_X3 ! Assuming knot vectors are in the range [0,1] ! Normalize the X coordinates to the range [0,1] allocate ( Xt ( size ( X , 1 ), size ( X , 2 ))) min_X1 = minval ( X (:, 1 )) max_X1 = maxval ( X (:, 1 )) min_X2 = minval ( X (:, 2 )) max_X2 = maxval ( X (:, 2 )) min_X3 = minval ( X (:, 3 )) max_X3 = maxval ( X (:, 3 )) Xt (:, 1 ) = ( X (:, 1 ) - min_X1 ) / ( max_X1 - min_X1 ) Xt (:, 2 ) = ( X (:, 2 ) - min_X2 ) / ( max_X2 - min_X2 ) Xt (:, 3 ) = ( X (:, 3 ) - min_X3 ) / ( max_X3 - min_X3 ) allocate ( this % Xg ( size ( Xt , 1 ), size ( this % Xc , 2 ))) allocate ( Tgc ( this % nc ( 1 ) * this % nc ( 2 ) * this % nc ( 3 ))) 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 % degree ( 1 )) Tgc2 = basis_bspline ( Xt ( i , 2 ), this % knot2 , this % nc ( 2 ), this % degree ( 2 )) Tgc3 = basis_bspline ( Xt ( i , 3 ), this % knot3 , this % nc ( 3 ), this % degree ( 3 )) Tgc = kron ( Tgc3 , kron ( Tgc2 , Tgc1 )) Tgc = Tgc * ( this % Wc / ( dot_product ( Tgc , this % Wc ))) this % Xg ( i ,:) = matmul ( Tgc , this % Xc ) end do else ! B-Spline volume do i = 1 , size ( Xt , 1 ) Tgc1 = basis_bspline ( Xt ( i , 1 ), this % knot1 , this % nc ( 1 ), this % degree ( 1 )) Tgc2 = basis_bspline ( Xt ( i , 2 ), this % knot2 , this % nc ( 2 ), this % degree ( 2 )) Tgc3 = basis_bspline ( Xt ( i , 3 ), this % knot3 , this % nc ( 3 ), this % degree ( 3 )) Tgc = kron ( Tgc3 , kron ( Tgc2 , Tgc1 )) this % Xg ( i ,:) = matmul ( Tgc , this % Xc ) end do end if call this % set_elem_Xg_vis ( elemConn ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine remove_knots ( this , dir , Xth , r ) class ( nurbs_volume ), intent ( inout ) :: this integer , intent ( in ) :: dir real ( rk ), intent ( in ), contiguous :: Xth (:) integer , intent ( in ), contiguous :: r (:) integer :: k , i , s , dim , j , nc_new , t real ( rk ), allocatable :: Xc (:,:), Xcw (:,:), Xcw_new (:,:), Xc_new (:,:), Wc_new (:), knot_new (:) real ( rk ), allocatable :: Xc4 (:,:,:,:) if ( dir == 1 ) then ! direction 1 if ( allocated ( this % Wc )) then ! NURBS do i = 1 , size ( Xth ) k = findspan ( this % nc ( 1 ) - 1 , this % degree ( 1 ), Xth ( i ), this % knot1 ) if ( this % knot1 ( k + 1 ) == Xth ( i )) then s = compute_multiplicity ( this % knot1 , Xth ( i )) else s = 0 end if k = k + 1 dim = size ( this % Xc , 2 ) allocate ( Xcw ( size ( this % Xc , 1 ), dim + 1 )) do j = 1 , size ( this % Xc , 1 ) Xcw ( j , 1 : dim ) = this % Xc ( j , 1 : dim ) * this % Wc ( j ) end do Xcw (:, dim + 1 ) = this % Wc (:) Xcw = reshape ( Xcw ,[ this % nc ( 1 ), this % nc ( 2 ) * this % nc ( 3 ) * ( dim + 1 )], order = [ 1 , 2 ]) call remove_knots_A_5_8 (& this % degree ( 1 ),& this % knot1 ,& Xcw ,& Xth ( i ),& k ,& s ,& r ( i ),& t ,& knot_new ,& Xcw_new ) if ( allocated ( Xcw )) deallocate ( Xcw ) if ( t == 0 ) then ! no change else nc_new = size ( Xcw_new , 1 ) Xcw_new = reshape ( Xcw_new ,[( nc_new ) * this % nc ( 2 ) * this % nc ( 3 ), dim + 1 ], order = [ 1 , 2 ]) allocate ( Xc_new ( 1 :( nc_new ) * this % nc ( 2 ) * this % nc ( 3 ), 1 : dim )) allocate ( Wc_new ( 1 :( nc_new ) * this % nc ( 2 ) * this % nc ( 3 ))) do j = 1 , ( nc_new ) * this % nc ( 2 ) * this % nc ( 3 ) Xc_new ( j , 1 : dim ) = Xcw_new ( j , 1 : dim ) / Xcw_new ( j , dim + 1 ) end do Wc_new (:) = Xcw_new (:, dim + 1 ) call this % set ( knot1 = knot_new , knot2 = this % get_knot ( 2 ), knot3 = this % get_knot ( 3 ), Xc = Xc_new , Wc = Wc_new ) deallocate ( Xcw_new , Xc_new , Wc_new ) end if end do else ! B-Spline do i = 1 , size ( Xth ) k = findspan ( this % nc ( 1 ) - 1 , this % degree ( 1 ), Xth ( i ), this % knot1 ) if ( this % knot1 ( k + 1 ) == Xth ( i )) then s = compute_multiplicity ( this % knot1 , Xth ( i )) else s = 0 end if k = k + 1 dim = size ( this % Xc , 2 ) Xc = reshape ( this % Xc ,[ this % nc ( 1 ), this % nc ( 2 ) * this % nc ( 3 ) * dim ]) call remove_knots_A_5_8 (& this % degree ( 1 ),& this % knot1 ,& Xc ,& Xth ( i ),& k ,& s ,& r ( i ),& t ,& knot_new ,& Xc_new ) if ( allocated ( Xc )) deallocate ( Xc ) if ( t == 0 ) then ! no change else nc_new = size ( Xcw_new , 1 ) Xc_new = reshape ( Xc_new ,[( nc_new ) * this % nc ( 2 ) * this % nc ( 3 ), dim ]) call this % set ( knot1 = knot_new , knot2 = this % get_knot ( 2 ), knot3 = this % get_knot ( 3 ), Xc = Xc_new ) end if end do end if elseif ( dir == 2 ) then ! direction 2 if ( allocated ( this % Wc )) then ! NURBS do i = 1 , size ( Xth ) k = findspan ( this % nc ( 2 ) - 1 , this % degree ( 2 ), Xth ( i ), this % knot2 ) if ( this % knot2 ( k + 1 ) == Xth ( i )) then s = compute_multiplicity ( this % knot2 , Xth ( i )) else s = 0 end if k = k + 1 dim = size ( this % Xc , 2 ) allocate ( Xcw ( size ( this % Xc , 1 ), dim + 1 )) do j = 1 , size ( this % Xc , 1 ) Xcw ( j , 1 : dim ) = this % Xc ( j , 1 : dim ) * this % Wc ( j ) end do Xcw (:, dim + 1 ) = this % Wc (:) Xc4 = reshape ( Xcw , [ this % nc ( 1 ), this % nc ( 2 ), this % nc ( 3 ), dim + 1 ]) Xc4 = reshape ( Xc4 , [ this % nc ( 2 ), this % nc ( 1 ), this % nc ( 3 ), dim + 1 ], order = [ 2 , 1 , 3 , 4 ]) Xcw = reshape ( Xc4 ,[ this % nc ( 2 ), this % nc ( 1 ) * this % nc ( 3 ) * ( dim + 1 )]) call remove_knots_A_5_8 (& this % degree ( 2 ),& this % knot2 ,& Xcw ,& Xth ( i ),& k ,& s ,& r ( i ),& t ,& knot_new ,& Xcw_new ) if ( allocated ( Xcw )) deallocate ( Xcw ) if ( t == 0 ) then ! no change else nc_new = size ( Xcw_new , 1 ) Xc4 = reshape ( Xcw_new , [ nc_new , this % nc ( 1 ), this % nc ( 3 ), dim + 1 ]) Xc4 = reshape ( Xc4 , [ this % nc ( 1 ), nc_new , this % nc ( 3 ), dim + 1 ], order = [ 2 , 1 , 3 , 4 ]) Xcw_new = reshape ( Xc4 ,[ this % nc ( 1 ) * ( nc_new ) * this % nc ( 3 ), dim + 1 ]) allocate ( Xc_new ( 1 : this % nc ( 1 ) * ( nc_new ) * this % nc ( 3 ), 1 : dim )) allocate ( Wc_new ( 1 : this % nc ( 1 ) * ( nc_new ) * this % nc ( 3 ))) do j = 1 , this % nc ( 1 ) * ( nc_new ) * this % nc ( 3 ) Xc_new ( j , 1 : dim ) = Xcw_new ( j , 1 : dim ) / Xcw_new ( j , dim + 1 ) end do Wc_new (:) = Xcw_new (:, dim + 1 ) call this % set ( knot1 = this % get_knot ( 1 ), knot2 = knot_new , knot3 = this % get_knot ( 3 ), Xc = Xc_new , Wc = Wc_new ) deallocate ( Xcw_new , Xc_new , Wc_new ) end if end do else ! B-Spline do i = 1 , size ( Xth ) k = findspan ( this % nc ( 2 ) - 1 , this % degree ( 2 ), Xth ( i ), this % knot2 ) if ( this % knot2 ( k + 1 ) == Xth ( i )) then s = compute_multiplicity ( this % knot2 , Xth ( i )) else s = 0 end if k = k + 1 dim = size ( this % Xc , 2 ) Xc4 = reshape ( this % Xc , [ this % nc ( 1 ), this % nc ( 2 ), this % nc ( 3 ), dim ]) Xc4 = reshape ( Xc4 , [ this % nc ( 2 ), this % nc ( 1 ), this % nc ( 3 ), dim ], order = [ 2 , 1 , 3 , 4 ]) Xc = reshape ( Xc4 , [ this % nc ( 2 ), this % nc ( 1 ) * this % nc ( 3 ) * dim ]) call remove_knots_A_5_8 (& this % degree ( 2 ),& this % knot2 ,& Xc ,& Xth ( i ),& k ,& s ,& r ( i ),& t ,& knot_new ,& Xc_new ) if ( allocated ( Xc )) deallocate ( Xc ) if ( t == 0 ) then ! no change else nc_new = size ( Xcw_new , 1 ) Xc4 = reshape ( Xc_new , [ nc_new , this % nc ( 1 ), this % nc ( 3 ), dim ]) Xc4 = reshape ( Xc4 , [ this % nc ( 1 ), nc_new , this % nc ( 3 ), dim ], order = [ 2 , 1 , 3 , 4 ]) Xc_new = reshape ( Xc4 , [ this % nc ( 1 ) * ( nc_new ) * this % nc ( 3 ), dim ]) call this % set ( knot1 = this % get_knot ( 1 ), knot2 = knot_new , knot3 = this % get_knot ( 3 ), Xc = Xc_new ) end if end do end if elseif ( dir == 3 ) then ! direction 3 if ( allocated ( this % Wc )) then ! NURBS do i = 1 , size ( Xth ) k = findspan ( this % nc ( 3 ) - 1 , this % degree ( 3 ), Xth ( i ), this % knot3 ) if ( this % knot3 ( k + 1 ) == Xth ( i )) then s = compute_multiplicity ( this % knot3 , Xth ( i )) else s = 0 end if k = k + 1 dim = size ( this % Xc , 2 ) allocate ( Xcw ( size ( this % Xc , 1 ), dim + 1 )) do j = 1 , size ( this % Xc , 1 ) Xcw ( j , 1 : dim ) = this % Xc ( j , 1 : dim ) * this % Wc ( j ) end do Xcw (:, dim + 1 ) = this % Wc (:) Xc4 = reshape ( Xcw , [ this % nc ( 1 ), this % nc ( 2 ), this % nc ( 3 ), dim + 1 ]) Xc4 = reshape ( Xc4 , [ this % nc ( 3 ), this % nc ( 2 ), this % nc ( 1 ), dim + 1 ], order = [ 3 , 2 , 1 , 4 ]) Xcw = reshape ( Xc4 , [ this % nc ( 3 ), this % nc ( 2 ) * this % nc ( 1 ) * ( dim + 1 )]) call remove_knots_A_5_8 (& this % degree ( 3 ),& this % knot3 ,& Xcw ,& Xth ( i ),& k ,& s ,& r ( i ),& t ,& knot_new ,& Xcw_new ) if ( allocated ( Xcw )) deallocate ( Xcw ) if ( t == 0 ) then ! no change else nc_new = size ( Xcw_new , 1 ) Xc4 = reshape ( Xcw_new , [ nc_new , this % nc ( 2 ), this % nc ( 1 ), dim + 1 ]) Xc4 = reshape ( Xc4 , [ this % nc ( 1 ), this % nc ( 2 ), nc_new , dim + 1 ], order = [ 3 , 2 , 1 , 4 ]) Xcw_new = reshape ( Xc4 , [ this % nc ( 1 ) * this % nc ( 2 ) * ( nc_new ), dim + 1 ]) allocate ( Xc_new ( 1 : this % nc ( 1 ) * this % nc ( 2 ) * ( nc_new ), 1 : dim )) allocate ( Wc_new ( 1 : this % nc ( 1 ) * this % nc ( 2 ) * ( nc_new ))) do j = 1 , this % nc ( 1 ) * this % nc ( 2 ) * ( nc_new ) Xc_new ( j , 1 : dim ) = Xcw_new ( j , 1 : dim ) / Xcw_new ( j , dim + 1 ) end do Wc_new (:) = Xcw_new (:, dim + 1 ) call this % set ( knot1 = this % get_knot ( 1 ), knot2 = this % get_knot ( 2 ), knot3 = knot_new , Xc = Xc_new , Wc = Wc_new ) deallocate ( Xcw_new , Xc_new , Wc_new ) end if end do else ! B-Spline do i = 1 , size ( Xth ) k = findspan ( this % nc ( 3 ) - 1 , this % degree ( 3 ), Xth ( i ), this % knot3 ) if ( this % knot3 ( k + 1 ) == Xth ( i )) then s = compute_multiplicity ( this % knot3 , Xth ( i )) else s = 0 end if k = k + 1 dim = size ( this % Xc , 2 ) Xc4 = reshape ( this % Xc , [ this % nc ( 1 ), this % nc ( 2 ), this % nc ( 3 ), dim ]) Xc4 = reshape ( Xc4 , [ this % nc ( 3 ), this % nc ( 2 ), this % nc ( 1 ), dim ], order = [ 3 , 2 , 1 , 4 ]) Xc = reshape ( Xc4 , [ this % nc ( 3 ), this % nc ( 2 ) * this % nc ( 1 ) * dim ]) call remove_knots_A_5_8 (& this % degree ( 3 ),& this % knot3 ,& Xc ,& Xth ( i ),& k ,& s ,& r ( i ),& t ,& knot_new ,& Xc_new ) if ( allocated ( Xc )) deallocate ( Xc ) if ( t == 0 ) then ! no change else nc_new = size ( Xcw_new , 1 ) Xc4 = reshape ( Xc_new , [ nc_new , this % nc ( 2 ), this % nc ( 1 ), dim ]) Xc4 = reshape ( Xc4 , [ this % nc ( 1 ), this % nc ( 2 ), nc_new , dim ], order = [ 3 , 2 , 1 , 4 ]) Xc_new = reshape ( Xc4 , [ this % nc ( 1 ) * this % nc ( 2 ) * ( nc_new ), dim ]) call this % set ( knot1 = this % get_knot ( 1 ), knot2 = this % get_knot ( 2 ), knot3 = knot_new , Xc = Xc_new ) end if end do end if else error stop 'Invalid direction.' end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function cmp_elem ( this ) result ( elemConn ) class ( nurbs_volume ), intent ( in ) :: this integer , allocatable :: elemConn (:,:) call elemConn_Cn ( this % nc ( 1 ), this % nc ( 2 ), this % nc ( 3 ),& this % degree ( 1 ), this % degree ( 2 ), this % degree ( 3 ),& unique ( this % knot1 ), unique ( this % knot2 ), unique ( this % knot3 ),& this % get_multiplicity ( 1 ), this % get_multiplicity ( 2 ), this % get_multiplicity ( 3 ),& elemConn ) end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine rotate_Xc ( this , alpha , beta , theta ) class ( nurbs_volume ), intent ( inout ) :: this real ( rk ), intent ( in ) :: alpha , beta , theta integer :: i do i = 1 , this % nc ( 1 ) * this % nc ( 2 ) * this % nc ( 3 ) this % Xc ( i , :) = matmul ( rotation ( alpha , beta , theta ), this % Xc ( i , :)) end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine rotate_Xg ( this , alpha , beta , theta ) class ( nurbs_volume ), intent ( inout ) :: this real ( rk ), intent ( in ) :: alpha , beta , theta integer :: i do i = 1 , this % ng ( 1 ) * this % ng ( 2 ) * this % ng ( 3 ) this % Xg ( i , :) = matmul ( rotation ( alpha , beta , theta ), this % Xg ( i , :)) end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine translate_Xc ( this , vec ) class ( nurbs_volume ), intent ( inout ) :: this real ( rk ), intent ( in ) :: vec (:) integer :: i do i = 1 , this % nc ( 1 ) * this % nc ( 2 ) * this % nc ( 3 ) this % Xc ( i , :) = this % Xc ( i , :) + vec end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine translate_Xg ( this , vec ) class ( nurbs_volume ), intent ( inout ) :: this real ( rk ), intent ( in ) :: vec (:) integer :: i do i = 1 , this % ng ( 1 ) * this % ng ( 2 ) * this % ng ( 3 ) this % Xg ( i , :) = this % Xg ( i , :) + vec end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine show ( this , vtkfile_Xc , vtkfile_Xg ) class ( nurbs_volume ), intent ( inout ) :: this character ( len =* ), intent ( in ) :: vtkfile_Xc , vtkfile_Xg character ( len = 3000 ) :: pyvista_script pyvista_script = & \"import pyvista as pv\" // achar ( 10 ) // & \"pv.global_theme.color = 'white'\" // achar ( 10 ) // & \"Xc = pv.read('\" // trim ( vtkfile_Xc ) // \"')\" // achar ( 10 ) // & \"Xg = pv.read('\" // trim ( vtkfile_Xg ) // \"')\" // achar ( 10 ) // & \"p = pv.Plotter(lighting='light kit')\" // achar ( 10 ) // & \"actor_Xcp = p.add_mesh(\" // achar ( 10 ) // & \" Xc,\" // achar ( 10 ) // & \" style='points',\" // achar ( 10 ) // & \" point_size=10,\" // achar ( 10 ) // & \" color='red',\" // achar ( 10 ) // & \" render_points_as_spheres=True,\" // achar ( 10 ) // & \" opacity=0.5,\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"actor_Xcw = p.add_mesh(\" // achar ( 10 ) // & \" Xc,\" // achar ( 10 ) // & \" show_edges=True,\" // achar ( 10 ) // & \" color='yellow',\" // achar ( 10 ) // & \" line_width=3,\" // achar ( 10 ) // & \" style='wireframe',\" // achar ( 10 ) // & \" opacity=0.2\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"actor_Xg = p.add_mesh(\" // achar ( 10 ) // & \" Xg,\" // achar ( 10 ) // & \" show_edges=False,\" // achar ( 10 ) // & \" color='cyan',\" // achar ( 10 ) // & \" line_width=7,\" // achar ( 10 ) // & \" metallic=0.6,\" // achar ( 10 ) // & \" pbr=True,\" // achar ( 10 ) // & \" split_sharp_edges=True,\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"p.add_axes(interactive=False)\" // achar ( 10 ) // & \"def point_picker_callback(point):\" // achar ( 10 ) // & \" mesh = Xc\" // achar ( 10 ) // & \" point_id = mesh.find_closest_point(point)\" // achar ( 10 ) // & \" point_coords = mesh.points[point_id]\" // achar ( 10 ) // & \" label = f'ID: {point_id + 1}\\n({point_coords[0]:.3f}, {point_coords[1]:.3f}, {point_coords[2]:.3f})'\" // achar ( 10 ) // & \" p.add_point_labels(\" // achar ( 10 ) // & \" [point_coords],\" // achar ( 10 ) // & \" [label],\" // achar ( 10 ) // & \" font_size=14,\" // achar ( 10 ) // & \" text_color='black',\" // achar ( 10 ) // & \" show_points=False,\" // achar ( 10 ) // & \" fill_shape=False,\" // achar ( 10 ) // & \" shape=None,\" // achar ( 10 ) // & \" )\" // achar ( 10 ) // & \"picker = p.enable_point_picking(callback=point_picker_callback, show_message=False)\" // achar ( 10 ) // & \"window_size = p.window_size\" // achar ( 10 ) // & \"y_pos = window_size[1]\" // achar ( 10 ) // & \"def Xcp_toggle_vis(flag):\" // achar ( 10 ) // & \" actor_Xcp.SetVisibility(flag)\" // achar ( 10 ) // & \"def Xcw_toggle_vis(flag):\" // achar ( 10 ) // & \" actor_Xcw.SetVisibility(flag)\" // achar ( 10 ) // & \"def Xg_toggle_vis(flag):\" // achar ( 10 ) // & \" actor_Xg.SetVisibility(flag)\" // achar ( 10 ) // & \"p.add_checkbox_button_widget(\" // achar ( 10 ) // & \" Xcp_toggle_vis,\" // achar ( 10 ) // & \" value=True,\" // achar ( 10 ) // & \" color_on='red',\" // achar ( 10 ) // & \" size=25,\" // achar ( 10 ) // & \" position=(0, y_pos - 1 * 25),\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"p.add_checkbox_button_widget(\" // achar ( 10 ) // & \" Xcw_toggle_vis,\" // achar ( 10 ) // & \" value=True,\" // achar ( 10 ) // & \" color_on='yellow',\" // achar ( 10 ) // & \" size=25,\" // achar ( 10 ) // & \" position=(0, y_pos - 2 * 25),\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"p.add_checkbox_button_widget(\" // achar ( 10 ) // & \" Xg_toggle_vis,\" // achar ( 10 ) // & \" value=True,\" // achar ( 10 ) // & \" color_on='cyan',\" // achar ( 10 ) // & \" size=25,\" // achar ( 10 ) // & \" position=(0, y_pos - 3 * 25),\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"p.add_text(\" // achar ( 10 ) // & \" 'Xc (Points)',\" // achar ( 10 ) // & \" position=(25 + 3, y_pos - 1 * 25),\" // achar ( 10 ) // & \" font_size=8,\" // achar ( 10 ) // & \" color='black',\" // achar ( 10 ) // & \" font='times',\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"p.add_text(\" // achar ( 10 ) // & \" 'Xc (Control geometry)',\" // achar ( 10 ) // & \" position=(25 + 3, y_pos - 2 * 25),\" // achar ( 10 ) // & \" font_size=8,\" // achar ( 10 ) // & \" color='black',\" // achar ( 10 ) // & \" font='times',\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"p.add_text(\" // achar ( 10 ) // & \" 'Xg (Geometry)',\" // achar ( 10 ) // & \" position=(25 + 3, y_pos - 3 * 25),\" // achar ( 10 ) // & \" font_size=8,\" // achar ( 10 ) // & \" color='black',\" // achar ( 10 ) // & \" font='times',\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"p.add_text('ForCAD', position=(0.0, 10.0), font_size=14, color='black', font='times')\" // achar ( 10 ) // & \"p.add_text(\" // achar ( 10 ) // & \" 'https://github.com/gha3mi/forcad',\" // achar ( 10 ) // & \" position=(0.0, 0.0),\" // achar ( 10 ) // & \" font_size=7,\" // achar ( 10 ) // & \" color='blue',\" // achar ( 10 ) // & \" font='times',\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"p.show(title='ForCAD', interactive=True)\" call execute_command_line ( 'python -c \"' // trim ( adjustl ( pyvista_script )) // '\"' ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine set_ring ( this , center , radius1 , radius2 , length ) class ( nurbs_volume ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: center (:) real ( rk ), intent ( in ) :: radius1 , radius2 , length real ( rk ), allocatable :: Xc (:,:), Wc (:), knot1 (:), knot2 (:), knot3 (:) integer :: i ! Define control points for ring allocate ( Xc ( 28 , 3 )) Xc ( 1 ,:) = [ 1.0_rk , 0.0_rk , 0.0_rk ] Xc ( 2 ,:) = [ 1.0_rk , sqrt ( 3.0_rk ), 0.0_rk ] Xc ( 3 ,:) = [ - 0.5_rk , sqrt ( 3.0_rk ) / 2.0_rk , 0.0_rk ] Xc ( 4 ,:) = [ - 2.0_rk , 0.0_rk , 0.0_rk ] Xc ( 5 ,:) = [ - 0.5_rk , - sqrt ( 3.0_rk ) / 2.0_rk , 0.0_rk ] Xc ( 6 ,:) = [ 1.0_rk , - sqrt ( 3.0_rk ), 0.0_rk ] Xc ( 7 ,:) = [ 1.0_rk , 0.0_rk , 0.0_rk ] Xc ( 1 : 7 , 1 : 2 ) = Xc ( 1 : 7 , 1 : 2 ) * radius1 Xc ( 8 ,:) = [ 1.0_rk , 0.0_rk , 0.0_rk ] Xc ( 9 ,:) = [ 1.0_rk , sqrt ( 3.0_rk ), 0.0_rk ] Xc ( 10 ,:) = [ - 0.5_rk , sqrt ( 3.0_rk ) / 2.0_rk , 0.0_rk ] Xc ( 11 ,:) = [ - 2.0_rk , 0.0_rk , 0.0_rk ] Xc ( 12 ,:) = [ - 0.5_rk , - sqrt ( 3.0_rk ) / 2.0_rk , 0.0_rk ] Xc ( 13 ,:) = [ 1.0_rk , - sqrt ( 3.0_rk ), 0.0_rk ] Xc ( 14 ,:) = [ 1.0_rk , 0.0_rk , 0.0_rk ] Xc ( 8 : 14 , 1 : 2 ) = Xc ( 8 : 14 , 1 : 2 ) * radius2 Xc ( 15 ,:) = [ 1.0_rk , 0.0_rk , length ] Xc ( 16 ,:) = [ 1.0_rk , sqrt ( 3.0_rk ), length ] Xc ( 17 ,:) = [ - 0.5_rk , sqrt ( 3.0_rk ) / 2.0_rk , length ] Xc ( 18 ,:) = [ - 2.0_rk , 0.0_rk , length ] Xc ( 19 ,:) = [ - 0.5_rk , - sqrt ( 3.0_rk ) / 2.0_rk , length ] Xc ( 20 ,:) = [ 1.0_rk , - sqrt ( 3.0_rk ), length ] Xc ( 21 ,:) = [ 1.0_rk , 0.0_rk , length ] Xc ( 15 : 21 , 1 : 2 ) = Xc ( 15 : 21 , 1 : 2 ) * radius1 Xc ( 22 ,:) = [ 1.0_rk , 0.0_rk , length ] Xc ( 23 ,:) = [ 1.0_rk , sqrt ( 3.0_rk ), length ] Xc ( 24 ,:) = [ - 0.5_rk , sqrt ( 3.0_rk ) / 2.0_rk , length ] Xc ( 25 ,:) = [ - 2.0_rk , 0.0_rk , length ] Xc ( 26 ,:) = [ - 0.5_rk , - sqrt ( 3.0_rk ) / 2.0_rk , length ] Xc ( 27 ,:) = [ 1.0_rk , - sqrt ( 3.0_rk ), length ] Xc ( 28 ,:) = [ 1.0_rk , 0.0_rk , length ] Xc ( 22 : 28 , 1 : 2 ) = Xc ( 22 : 28 , 1 : 2 ) * radius2 ! Translate the control points do i = 1 , size ( Xc , 1 ) Xc ( i ,:) = center + Xc ( i ,:) end do ! Define weights for the control points Wc = [ 1.0_rk , 0.5_rk , 1.0_rk , 0.5_rk , 1.0_rk , 0.5_rk , 1.0_rk ,& 1.0_rk , 0.5_rk , 1.0_rk , 0.5_rk , 1.0_rk , 0.5_rk , 1.0_rk ,& 1.0_rk , 0.5_rk , 1.0_rk , 0.5_rk , 1.0_rk , 0.5_rk , 1.0_rk ,& 1.0_rk , 0.5_rk , 1.0_rk , 0.5_rk , 1.0_rk , 0.5_rk , 1.0_rk ] ! Define knot vector knot1 = [ 0.0_rk , 0.0_rk , 0.0_rk , 1.0_rk / 3.0_rk , 1.0_rk / 3.0_rk , 2.0_rk / 3.0_rk , 2.0_rk / 3.0_rk , 1.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 vector, control points, and weights call this % set ( knot1 , knot2 , knot3 , Xc , Wc ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine set_C ( this , center , radius1 , radius2 , length ) class ( nurbs_volume ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: center (:) real ( rk ), intent ( in ) :: radius1 , radius2 , length real ( rk ), allocatable :: Xc (:,:), Wc (:), knot1 (:), knot2 (:), knot3 (:) integer :: i ! Define control points for C-shape allocate ( Xc ( 20 , 3 )) Xc ( 1 ,:) = [ 1.0_rk , 0.0_rk , 0.0_rk ] Xc ( 2 ,:) = [ 1.0_rk , sqrt ( 3.0_rk ), 0.0_rk ] Xc ( 3 ,:) = [ - 0.5_rk , sqrt ( 3.0_rk ) / 2.0_rk , 0.0_rk ] Xc ( 4 ,:) = [ - 2.0_rk , 0.0_rk , 0.0_rk ] Xc ( 5 ,:) = [ - 0.5_rk , - sqrt ( 3.0_rk ) / 2.0_rk , 0.0_rk ] Xc ( 1 : 5 , 1 : 2 ) = Xc ( 1 : 5 , 1 : 2 ) * radius1 Xc ( 6 ,:) = [ 1.0_rk , 0.0_rk , 0.0_rk ] Xc ( 7 ,:) = [ 1.0_rk , sqrt ( 3.0_rk ), 0.0_rk ] Xc ( 8 ,:) = [ - 0.5_rk , sqrt ( 3.0_rk ) / 2.0_rk , 0.0_rk ] Xc ( 9 ,:) = [ - 2.0_rk , 0.0_rk , 0.0_rk ] Xc ( 10 ,:) = [ - 0.5_rk , - sqrt ( 3.0_rk ) / 2.0_rk , 0.0_rk ] Xc ( 6 : 10 , 1 : 2 ) = Xc ( 6 : 10 , 1 : 2 ) * radius2 Xc ( 11 ,:) = [ 1.0_rk , 0.0_rk , length ] Xc ( 12 ,:) = [ 1.0_rk , sqrt ( 3.0_rk ), length ] Xc ( 13 ,:) = [ - 0.5_rk , sqrt ( 3.0_rk ) / 2.0_rk , length ] Xc ( 14 ,:) = [ - 2.0_rk , 0.0_rk , length ] Xc ( 15 ,:) = [ - 0.5_rk , - sqrt ( 3.0_rk ) / 2.0_rk , length ] Xc ( 11 : 15 , 1 : 2 ) = Xc ( 11 : 15 , 1 : 2 ) * radius1 Xc ( 16 ,:) = [ 1.0_rk , 0.0_rk , length ] Xc ( 17 ,:) = [ 1.0_rk , sqrt ( 3.0_rk ), length ] Xc ( 18 ,:) = [ - 0.5_rk , sqrt ( 3.0_rk ) / 2.0_rk , length ] Xc ( 19 ,:) = [ - 2.0_rk , 0.0_rk , length ] Xc ( 20 ,:) = [ - 0.5_rk , - sqrt ( 3.0_rk ) / 2.0_rk , length ] Xc ( 16 : 20 , 1 : 2 ) = Xc ( 16 : 20 , 1 : 2 ) * radius2 ! Translate the control points do i = 1 , size ( Xc , 1 ) Xc ( i ,:) = center + Xc ( i ,:) end do ! Define weights for the control points Wc = [ 1.0_rk , 0.5_rk , 1.0_rk , 0.5_rk , 1.0_rk ,& 1.0_rk , 0.5_rk , 1.0_rk , 0.5_rk , 1.0_rk ,& 1.0_rk , 0.5_rk , 1.0_rk , 0.5_rk , 1.0_rk ,& 1.0_rk , 0.5_rk , 1.0_rk , 0.5_rk , 1.0_rk ] ! Define knot vector knot1 = [ 0.0_rk , 0.0_rk , 0.0_rk , 1.0_rk / 2.0_rk , 1.0_rk / 2.0_rk , 1.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 vector, control points, and weights call this % set ( knot1 , knot2 , knot3 , Xc , Wc ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine set_half_ring ( this , center , radius1 , radius2 , length ) class ( nurbs_volume ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: center (:) real ( rk ), intent ( in ) :: radius1 , radius2 , length real ( rk ), allocatable :: Xc (:,:), Wc (:), knot1 (:), knot2 (:), knot3 (:) integer :: i ! Define control points for half ring allocate ( Xc ( 20 , 3 )) Xc ( 1 ,:) = [ 0.5_rk , 0.0_rk , 0.0_rk ] Xc ( 2 ,:) = [ 0.5_rk , 0.5_rk , 0.0_rk ] Xc ( 3 ,:) = [ 0.0_rk , 0.5_rk , 0.0_rk ] Xc ( 4 ,:) = [ - 0.5_rk , 0.5_rk , 0.0_rk ] Xc ( 5 ,:) = [ - 0.5_rk , 0.0_rk , 0.0_rk ] Xc ( 1 : 5 , 1 : 2 ) = Xc ( 1 : 5 , 1 : 2 ) * radius1 Xc ( 6 ,:) = [ 0.5_rk , 0.0_rk , 0.0_rk ] Xc ( 7 ,:) = [ 0.5_rk , 0.5_rk , 0.0_rk ] Xc ( 8 ,:) = [ 0.0_rk , 0.5_rk , 0.0_rk ] Xc ( 9 ,:) = [ - 0.5_rk , 0.5_rk , 0.0_rk ] Xc ( 10 ,:) = [ - 0.5_rk , 0.0_rk , 0.0_rk ] Xc ( 6 : 10 , 1 : 2 ) = Xc ( 6 : 10 , 1 : 2 ) * radius2 Xc ( 11 ,:) = [ 0.5_rk , 0.0_rk , length ] Xc ( 12 ,:) = [ 0.5_rk , 0.5_rk , length ] Xc ( 13 ,:) = [ 0.0_rk , 0.5_rk , length ] Xc ( 14 ,:) = [ - 0.5_rk , 0.5_rk , length ] Xc ( 15 ,:) = [ - 0.5_rk , 0.0_rk , length ] Xc ( 11 : 15 , 1 : 2 ) = Xc ( 11 : 15 , 1 : 2 ) * radius1 Xc ( 16 ,:) = [ 0.5_rk , 0.0_rk , length ] Xc ( 17 ,:) = [ 0.5_rk , 0.5_rk , length ] Xc ( 18 ,:) = [ 0.0_rk , 0.5_rk , length ] Xc ( 19 ,:) = [ - 0.5_rk , 0.5_rk , length ] Xc ( 20 ,:) = [ - 0.5_rk , 0.0_rk , length ] Xc ( 16 : 20 , 1 : 2 ) = Xc ( 16 : 20 , 1 : 2 ) * radius2 ! Translate the control points do i = 1 , size ( Xc , 1 ) Xc ( i ,:) = center + Xc ( i ,:) end do ! Define weights for the control points Wc = [ 1.0_rk , 1.0_rk / sqrt ( 2.0_rk ), 1.0_rk , 1.0_rk / sqrt ( 2.0_rk ), 1.0_rk ,& 1.0_rk , 1.0_rk / sqrt ( 2.0_rk ), 1.0_rk , 1.0_rk / sqrt ( 2.0_rk ), 1.0_rk ,& 1.0_rk , 1.0_rk / sqrt ( 2.0_rk ), 1.0_rk , 1.0_rk / sqrt ( 2.0_rk ), 1.0_rk ,& 1.0_rk , 1.0_rk / sqrt ( 2.0_rk ), 1.0_rk , 1.0_rk / sqrt ( 2.0_rk ), 1.0_rk ] ! Define knot vector knot1 = [ 0.0_rk , 0.0_rk , 0.0_rk , 1.0_rk / 2.0_rk , & 1.0_rk / 2.0_rk , 1.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 vector, control points, and weights call this % set ( knot1 , knot2 , knot3 , Xc , Wc ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine nearest_point ( this , point_Xg , nearest_Xg , nearest_Xt , id ) class ( nurbs_volume ), intent ( in ) :: this real ( rk ), intent ( in ) :: point_Xg (:) real ( rk ), intent ( out ), allocatable , optional :: nearest_Xg (:) real ( rk ), intent ( out ), allocatable , optional :: nearest_Xt (:) integer , intent ( out ), optional :: id integer :: id_ real ( rk ), allocatable :: distances (:) allocate ( distances ( this % ng ( 1 ) * this % ng ( 2 ) * this % ng ( 3 ))) distances = nearest_point_help_3d ( this % ng , this % Xg , point_Xg ) id_ = minloc ( distances , dim = 1 ) if ( present ( id )) id = id_ if ( present ( nearest_Xg )) nearest_Xg = this % Xg ( id_ ,:) if ( present ( nearest_Xt )) nearest_Xt = this % Xt ( id_ ,:) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine nearest_point2 ( this , point_Xg , tol , maxit , nearest_Xt , nearest_Xg ) class ( nurbs_volume ), intent ( inout ) :: this real ( rk ), intent ( in ) :: point_Xg (:) real ( rk ), intent ( in ) :: tol integer , intent ( in ) :: maxit real ( rk ), intent ( out ) :: nearest_Xt ( 3 ) real ( rk ), allocatable , intent ( out ), optional :: nearest_Xg (:) real ( rk ) :: xk ( 3 ), obj , grad ( 3 ), hess ( 3 , 3 ), dk ( 3 ), alphak , tau , beta , det_inv , Ainv ( 3 , 3 ), lower_bounds ( 3 ), upper_bounds ( 3 ) real ( rk ), allocatable :: Xg (:), Tgc (:), dTgc (:,:), d2Tgc (:,:), distances (:) integer :: k , l logical :: convergenz type ( nurbs_volume ) :: copy_this k = 0 ! lower and upper bounds lower_bounds = [ minval ( this % knot1 ), minval ( this % knot2 ), minval ( this % knot3 )] upper_bounds = [ maxval ( this % knot1 ), maxval ( this % knot2 ), maxval ( this % knot3 )] ! guess initial point copy_this = this call this % create ( 50 , 50 , 50 ) allocate ( distances ( copy_this % ng ( 1 ) * copy_this % ng ( 2 ) * copy_this % ng ( 3 ))) distances = nearest_point_help_3d ( copy_this % ng , copy_this % Xg , point_Xg ) xk = copy_this % Xt ( minloc ( distances , dim = 1 ),:) call copy_this % finalize () ! Check if xk is within the knot vector range if ( xk ( 1 ) < minval ( this % knot1 )) then xk ( 1 ) = minval ( this % knot1 ) else if ( xk ( 1 ) > maxval ( this % knot1 )) then xk ( 1 ) = maxval ( this % knot1 ) end if if ( xk ( 2 ) < minval ( this % knot2 )) then xk ( 2 ) = minval ( this % knot2 ) else if ( xk ( 2 ) > maxval ( this % knot2 )) then xk ( 2 ) = maxval ( this % knot2 ) end if if ( xk ( 3 ) < minval ( this % knot3 )) then xk ( 3 ) = minval ( this % knot3 ) else if ( xk ( 3 ) > maxval ( this % knot3 )) then xk ( 3 ) = maxval ( this % knot3 ) end if convergenz = . false . allocate ( Xg ( size ( this % Xc , 2 ))) ! allocate(dTgc(size(this%Xc,1), 2)) ! allocate(d2Tgc(size(this%Xc,1), 2)) do while (. not . convergenz . and . k < maxit ) ! objection, gradient and hessian Xg = this % cmp_Xg ( xk ) call this % derivative2 ( Xt = xk , d2Tgc = d2Tgc , dTgc = dTgc , Tgc = Tgc ) ! Tgc is not needed obj = norm2 ( Xg - point_Xg ) + 0.001_rk ! add a small number to avoid division by zero grad ( 1 ) = dot_product (( Xg - point_Xg ) / obj , matmul ( dTgc (:, 1 ), this % Xc )) grad ( 2 ) = dot_product (( Xg - point_Xg ) / obj , matmul ( dTgc (:, 2 ), this % Xc )) grad ( 3 ) = dot_product (( Xg - point_Xg ) / obj , matmul ( dTgc (:, 3 ), this % Xc )) hess ( 1 , 1 ) = ( dot_product ( matmul ( dTgc (:, 1 ), this % Xc ), matmul ( dTgc (:, 1 ), this % Xc )) + dot_product (( Xg - point_Xg ), & matmul ( d2Tgc ( 1 : this % nc ( 1 ) * this % nc ( 2 ) * this % nc ( 3 ) , 1 ), this % Xc )) ) / obj & - ( dot_product ( Xg - point_Xg , matmul ( dTgc (:, 1 ), this % Xc )) * grad ( 1 ) ) / obj ** 2 hess ( 2 , 1 ) = ( dot_product ( matmul ( dTgc (:, 1 ), this % Xc ), matmul ( dTgc (:, 2 ), this % Xc )) + dot_product (( Xg - point_Xg ), & matmul ( d2Tgc ( this % nc ( 1 ) * this % nc ( 2 ) * this % nc ( 3 ) + 1 : 2 * this % nc ( 1 ) * this % nc ( 2 ) * this % nc ( 3 ) , 1 ), this % Xc )) ) / obj & - ( dot_product ( Xg - point_Xg , matmul ( dTgc (:, 2 ), this % Xc )) * grad ( 1 ) ) / obj ** 2 hess ( 3 , 1 ) = ( dot_product ( matmul ( dTgc (:, 1 ), this % Xc ), matmul ( dTgc (:, 3 ), this % Xc )) + dot_product (( Xg - point_Xg ), & matmul ( d2Tgc ( 2 * this % nc ( 1 ) * this % nc ( 2 ) * this % nc ( 3 ) + 1 : 3 * this % nc ( 1 ) * this % nc ( 2 ) * this % nc ( 3 ) , 1 ), this % Xc )) ) / obj & - ( dot_product ( Xg - point_Xg , matmul ( dTgc (:, 3 ), this % Xc )) * grad ( 1 ) ) / obj ** 2 hess ( 1 , 2 ) = ( dot_product ( matmul ( dTgc (:, 2 ), this % Xc ), matmul ( dTgc (:, 1 ), this % Xc )) + dot_product (( Xg - point_Xg ), & matmul ( d2Tgc ( 1 : this % nc ( 1 ) * this % nc ( 2 ) * this % nc ( 3 ) , 2 ), this % Xc )) ) / obj & - ( dot_product ( Xg - point_Xg , matmul ( dTgc (:, 1 ), this % Xc )) * grad ( 2 ) ) / obj ** 2 hess ( 2 , 2 ) = ( dot_product ( matmul ( dTgc (:, 2 ), this % Xc ), matmul ( dTgc (:, 2 ), this % Xc )) + dot_product (( Xg - point_Xg ), & matmul ( d2Tgc ( this % nc ( 1 ) * this % nc ( 2 ) * this % nc ( 3 ) + 1 : 2 * this % nc ( 1 ) * this % nc ( 2 ) * this % nc ( 3 ) , 2 ), this % Xc )) ) / obj & - ( dot_product ( Xg - point_Xg , matmul ( dTgc (:, 2 ), this % Xc )) * grad ( 2 ) ) / obj ** 2 hess ( 3 , 2 ) = ( dot_product ( matmul ( dTgc (:, 2 ), this % Xc ), matmul ( dTgc (:, 3 ), this % Xc )) + dot_product (( Xg - point_Xg ), & matmul ( d2Tgc ( 2 * this % nc ( 1 ) * this % nc ( 2 ) * this % nc ( 3 ) + 1 : 3 * this % nc ( 1 ) * this % nc ( 2 ) * this % nc ( 3 ) , 2 ), this % Xc )) ) / obj & - ( dot_product ( Xg - point_Xg , matmul ( dTgc (:, 3 ), this % Xc )) * grad ( 2 ) ) / obj ** 2 hess ( 1 , 3 ) = ( dot_product ( matmul ( dTgc (:, 3 ), this % Xc ), matmul ( dTgc (:, 1 ), this % Xc )) + dot_product (( Xg - point_Xg ), & matmul ( d2Tgc ( 1 : this % nc ( 1 ) * this % nc ( 2 ) * this % nc ( 3 ) , 3 ), this % Xc )) ) / obj & - ( dot_product ( Xg - point_Xg , matmul ( dTgc (:, 1 ), this % Xc )) * grad ( 3 ) ) / obj ** 2 hess ( 2 , 3 ) = ( dot_product ( matmul ( dTgc (:, 3 ), this % Xc ), matmul ( dTgc (:, 2 ), this % Xc )) + dot_product (( Xg - point_Xg ), & matmul ( d2Tgc ( this % nc ( 1 ) * this % nc ( 2 ) * this % nc ( 3 ) + 1 : 2 * this % nc ( 1 ) * this % nc ( 2 ) * this % nc ( 3 ) , 3 ), this % Xc )) ) / obj & - ( dot_product ( Xg - point_Xg , matmul ( dTgc (:, 2 ), this % Xc )) * grad ( 3 ) ) / obj ** 2 hess ( 3 , 3 ) = ( dot_product ( matmul ( dTgc (:, 3 ), this % Xc ), matmul ( dTgc (:, 3 ), this % Xc )) + dot_product (( Xg - point_Xg ), & matmul ( d2Tgc ( 2 * this % nc ( 1 ) * this % nc ( 2 ) * this % nc ( 3 ) + 1 : 3 * this % nc ( 1 ) * this % nc ( 2 ) * this % nc ( 3 ) , 3 ), this % Xc )) ) / obj & - ( dot_product ( Xg - point_Xg , matmul ( dTgc (:, 3 ), this % Xc )) * grad ( 3 ) ) / obj ** 2 ! debug print '(i3,1x,3e20.10,1x,e20.10)' , k , xk , norm2 ( grad ) if ( norm2 ( grad ) <= tol ) then convergenz = . true . nearest_Xt = xk if ( present ( nearest_Xg )) nearest_Xg = this % cmp_Xg ( nearest_Xt ) else ! Inverse of Hessian det_inv = 1.0_rk / (& + hess ( 1 , 1 ) * hess ( 2 , 2 ) * hess ( 3 , 3 ) - hess ( 1 , 1 ) * hess ( 2 , 3 ) * hess ( 3 , 2 )& - hess ( 1 , 2 ) * hess ( 2 , 1 ) * hess ( 3 , 3 ) + hess ( 1 , 2 ) * hess ( 2 , 3 ) * hess ( 3 , 1 )& + hess ( 1 , 3 ) * hess ( 2 , 1 ) * hess ( 3 , 2 ) - hess ( 1 , 3 ) * hess ( 2 , 2 ) * hess ( 3 , 1 )) Ainv ( 1 , 1 ) = + ( hess ( 2 , 2 ) * hess ( 3 , 3 ) - hess ( 2 , 3 ) * hess ( 3 , 2 )) Ainv ( 2 , 1 ) = - ( hess ( 2 , 1 ) * hess ( 3 , 3 ) - hess ( 2 , 3 ) * hess ( 3 , 1 )) Ainv ( 3 , 1 ) = + ( hess ( 2 , 1 ) * hess ( 3 , 2 ) - hess ( 2 , 2 ) * hess ( 3 , 1 )) Ainv ( 1 , 2 ) = - ( hess ( 1 , 2 ) * hess ( 3 , 3 ) - hess ( 1 , 3 ) * hess ( 3 , 2 )) Ainv ( 2 , 2 ) = + ( hess ( 1 , 1 ) * hess ( 3 , 3 ) - hess ( 1 , 3 ) * hess ( 3 , 1 )) Ainv ( 3 , 2 ) = - ( hess ( 1 , 1 ) * hess ( 3 , 2 ) - hess ( 1 , 2 ) * hess ( 3 , 1 )) Ainv ( 1 , 3 ) = + ( hess ( 1 , 2 ) * hess ( 2 , 3 ) - hess ( 1 , 3 ) * hess ( 2 , 2 )) Ainv ( 2 , 3 ) = - ( hess ( 1 , 1 ) * hess ( 2 , 3 ) - hess ( 1 , 3 ) * hess ( 2 , 1 )) Ainv ( 3 , 3 ) = + ( hess ( 1 , 1 ) * hess ( 2 , 2 ) - hess ( 1 , 2 ) * hess ( 2 , 1 )) Ainv = det_inv * Ainv dk = - matmul ( Ainv , grad ) ! Backtracking-Armijo Line Search alphak = 1.0_rk tau = 0.5_rk ! 0 < tau < 1 beta = 1.0e-4_rk ! 0 < beta < 1 l = 0 do while (. not . norm2 ( this % cmp_Xg ( xk + alphak * dk ) - point_Xg ) <= obj + alphak * beta * dot_product ( grad , dk ) . and . l < 50 ) alphak = tau * alphak l = l + 1 end do xk = xk + alphak * dk ! Check if xk is within the knot vector range xk = max ( min ( xk , upper_bounds ), lower_bounds ) k = k + 1 end if end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function cmp_elemFace ( this , elem , face ) result ( elemConn ) class ( nurbs_volume ), intent ( in ) :: this integer , intent ( in ) :: elem integer , intent ( in ) :: face integer , allocatable :: elemConn (:) integer :: n ( 3 ), ii , jj , k !> number of nodes in each direction n = this % degree + 1 select case ( face ) case ( 1 ) allocate ( elemConn ( n ( 1 ) * n ( 2 ))) elemConn = this % elemConn ( elem , 1 : n ( 1 ) * n ( 2 )) case ( 2 ) allocate ( elemConn ( n ( 1 ) * n ( 2 ))) elemConn = this % elemConn ( elem , n ( 1 ) * n ( 2 ) * n ( 3 ) - n ( 1 ) * n ( 2 ) + 1 : n ( 1 ) * n ( 2 ) * n ( 3 )) case ( 3 ) allocate ( elemConn ( n ( 1 ) * n ( 3 ))) k = 0 do jj = 1 , n ( 3 ) do ii = 1 , n ( 1 ) k = k + 1 elemConn ( k ) = this % elemConn ( elem , n ( 1 ) * n ( 2 ) * jj + ii - n ( 1 ) * n ( 2 )) end do end do case ( 4 ) allocate ( elemConn ( n ( 1 ) * n ( 3 ))) k = 0 do jj = 1 , n ( 3 ) do ii = 1 , n ( 1 ) k = k + 1 elemConn ( k ) = this % elemConn ( elem , n ( 1 ) * n ( 2 ) * jj + ii - n ( 1 )) end do end do case ( 5 ) allocate ( elemConn ( n ( 2 ) * n ( 3 ))) do ii = 1 , n ( 2 ) * n ( 3 ) elemConn ( ii ) = this % elemConn ( elem , n ( 1 ) * ii - n ( 1 ) + 1 ) end do case ( 6 ) allocate ( elemConn ( n ( 2 ) * n ( 3 ))) do ii = 1 , n ( 2 ) * n ( 3 ) elemConn ( ii ) = this % elemConn ( elem , n ( 1 ) * ii ) end do end select end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function cmp_elemFace_Xc_vis ( this , elem , face ) result ( elemConn ) class ( nurbs_volume ), intent ( in ) :: this integer , intent ( in ) :: elem integer , intent ( in ) :: face integer , allocatable :: elemConn (:) integer :: n ( 3 ), ii , jj , k !> number of nodes in each direction n = [ 2 , 2 , 2 ] select case ( face ) case ( 1 ) allocate ( elemConn ( n ( 1 ) * n ( 2 ))) elemConn = this % elemConn_Xc_vis ( elem , 1 : n ( 1 ) * n ( 2 )) case ( 2 ) allocate ( elemConn ( n ( 1 ) * n ( 2 ))) elemConn = this % elemConn_Xc_vis ( elem , n ( 1 ) * n ( 2 ) * n ( 3 ) - n ( 1 ) * n ( 2 ) + 1 : n ( 1 ) * n ( 2 ) * n ( 3 )) case ( 3 ) allocate ( elemConn ( n ( 1 ) * n ( 3 ))) k = 0 do jj = 1 , n ( 3 ) do ii = 1 , n ( 1 ) k = k + 1 elemConn ( k ) = this % elemConn_Xc_vis ( elem , n ( 1 ) * n ( 2 ) * jj + ii - n ( 1 ) * n ( 2 )) end do end do case ( 4 ) allocate ( elemConn ( n ( 1 ) * n ( 3 ))) k = 0 do jj = 1 , n ( 3 ) do ii = 1 , n ( 1 ) k = k + 1 elemConn ( k ) = this % elemConn_Xc_vis ( elem , n ( 1 ) * n ( 2 ) * jj + ii - n ( 1 )) end do end do case ( 5 ) allocate ( elemConn ( n ( 2 ) * n ( 3 ))) do ii = 1 , n ( 2 ) * n ( 3 ) elemConn ( ii ) = this % elemConn_Xc_vis ( elem , n ( 1 ) * ii - n ( 1 ) + 1 ) end do case ( 6 ) allocate ( elemConn ( n ( 2 ) * n ( 3 ))) do ii = 1 , n ( 2 ) * n ( 3 ) elemConn ( ii ) = this % elemConn_Xc_vis ( elem , n ( 1 ) * ii ) end do end select end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function cmp_elemFace_Xg_vis ( this , elem , face ) result ( elemConn ) class ( nurbs_volume ), intent ( in ) :: this integer , intent ( in ) :: elem integer , intent ( in ) :: face integer , allocatable :: elemConn (:) integer :: n ( 3 ), ii , jj , k !> number of nodes in each direction n = [ 2 , 2 , 2 ] select case ( face ) case ( 1 ) allocate ( elemConn ( n ( 1 ) * n ( 2 ))) elemConn = this % elemConn_Xg_vis ( elem , 1 : n ( 1 ) * n ( 2 )) case ( 2 ) allocate ( elemConn ( n ( 1 ) * n ( 2 ))) elemConn = this % elemConn_Xg_vis ( elem , n ( 1 ) * n ( 2 ) * n ( 3 ) - n ( 1 ) * n ( 2 ) + 1 : n ( 1 ) * n ( 2 ) * n ( 3 )) case ( 3 ) allocate ( elemConn ( n ( 1 ) * n ( 3 ))) k = 0 do jj = 1 , n ( 3 ) do ii = 1 , n ( 1 ) k = k + 1 elemConn ( k ) = this % elemConn_Xg_vis ( elem , n ( 1 ) * n ( 2 ) * jj + ii - n ( 1 ) * n ( 2 )) end do end do case ( 4 ) allocate ( elemConn ( n ( 1 ) * n ( 3 ))) k = 0 do jj = 1 , n ( 3 ) do ii = 1 , n ( 1 ) k = k + 1 elemConn ( k ) = this % elemConn_Xg_vis ( elem , n ( 1 ) * n ( 2 ) * jj + ii - n ( 1 )) end do end do case ( 5 ) allocate ( elemConn ( n ( 2 ) * n ( 3 ))) do ii = 1 , n ( 2 ) * n ( 3 ) elemConn ( ii ) = this % elemConn_Xg_vis ( elem , n ( 1 ) * ii - n ( 1 ) + 1 ) end do case ( 6 ) allocate ( elemConn ( n ( 2 ) * n ( 3 ))) do ii = 1 , n ( 2 ) * n ( 3 ) elemConn ( ii ) = this % elemConn_Xg_vis ( elem , n ( 1 ) * ii ) end do end select end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function cmp_degreeFace ( this , face ) result ( degree ) class ( nurbs_volume ), intent ( in ) :: this integer , intent ( in ) :: face integer :: degree ( 3 ) select case ( face ) case ( 1 ) degree = [ this % degree ( 1 ), this % degree ( 2 ), 0 ] case ( 2 ) degree = [ this % degree ( 1 ), this % degree ( 2 ), 0 ] case ( 3 ) degree = [ this % degree ( 1 ), 0 , this % degree ( 3 )] case ( 4 ) degree = [ this % degree ( 1 ), 0 , this % degree ( 3 )] case ( 5 ) degree = [ 0 , this % degree ( 2 ), this % degree ( 3 )] case ( 6 ) degree = [ 0 , this % degree ( 2 ), this % degree ( 3 )] case default error stop 'Invalid face number' end select end function !=============================================================================== end module forcad_nurbs_volume !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function compute_Xg_nurbs_3d ( Xt , knot1 , knot2 , knot3 , degree , nc , ng , Xc , Wc ) result ( Xg ) use forcad_utils , only : rk , basis_bspline , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:,:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:), knot3 (:) integer , intent ( in ) :: degree ( 3 ) integer , intent ( in ) :: nc ( 3 ) integer , intent ( in ) :: ng ( 3 ) real ( rk ), intent ( in ), contiguous :: Xc (:,:) real ( rk ), intent ( in ), contiguous :: Wc (:) real ( rk ), allocatable :: Xg (:,:) real ( rk ), allocatable :: Tgc (:) integer :: i allocate ( Xg ( ng ( 1 ) * ng ( 2 ) * ng ( 3 ), size ( Xc , 2 ))) allocate ( Tgc ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ))) !$OMP PARALLEL DO PRIVATE(Tgc) do i = 1 , ng ( 1 ) * ng ( 2 ) * ng ( 3 ) Tgc = kron ( basis_bspline ( Xt ( i , 3 ), knot3 , nc ( 3 ), degree ( 3 )),& kron (& basis_bspline ( Xt ( i , 2 ), knot2 , nc ( 2 ), degree ( 2 )),& basis_bspline ( Xt ( i , 1 ), knot1 , nc ( 1 ), degree ( 1 )))) Tgc = Tgc * ( Wc / ( dot_product ( Tgc , Wc ))) Xg ( i ,:) = matmul ( Tgc , Xc ) end do !$OMP END PARALLEL DO end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function compute_Xg_nurbs_3d_1point ( Xt , knot1 , knot2 , knot3 , degree , nc , Xc , Wc ) result ( Xg ) use forcad_utils , only : rk , basis_bspline , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:), knot3 (:) integer , intent ( in ) :: degree ( 3 ) integer , intent ( in ) :: nc ( 3 ) real ( rk ), intent ( in ), contiguous :: Xc (:,:) real ( rk ), intent ( in ), contiguous :: Wc (:) real ( rk ), allocatable :: Xg (:) real ( rk ), allocatable :: Tgc (:) allocate ( Xg ( size ( Xc , 2 ))) allocate ( Tgc ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ))) Tgc = kron ( basis_bspline ( Xt ( 3 ), knot3 , nc ( 3 ), degree ( 3 )),& kron (& basis_bspline ( Xt ( 2 ), knot2 , nc ( 2 ), degree ( 2 )),& basis_bspline ( Xt ( 1 ), knot1 , nc ( 1 ), degree ( 1 )))) Tgc = Tgc * ( Wc / ( dot_product ( Tgc , Wc ))) Xg = matmul ( Tgc , Xc ) end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function compute_Xg_bspline_3d ( Xt , knot1 , knot2 , knot3 , degree , nc , ng , Xc ) result ( Xg ) use forcad_utils , only : rk , basis_bspline , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:,:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:), knot3 (:) integer , intent ( in ) :: degree ( 3 ) integer , intent ( in ) :: nc ( 3 ) integer , intent ( in ) :: ng ( 3 ) real ( rk ), intent ( in ), contiguous :: Xc (:,:) real ( rk ), allocatable :: Xg (:,:) integer :: i allocate ( Xg ( ng ( 1 ) * ng ( 2 ) * ng ( 3 ), size ( Xc , 2 ))) !$OMP PARALLEL DO do i = 1 , ng ( 1 ) * ng ( 2 ) * ng ( 3 ) Xg ( i ,:) = matmul ( kron ( basis_bspline ( Xt ( i , 3 ), knot3 , nc ( 3 ), degree ( 3 )), kron (& basis_bspline ( Xt ( i , 2 ), knot2 , nc ( 2 ), degree ( 2 )),& basis_bspline ( Xt ( i , 1 ), knot1 , nc ( 1 ), degree ( 1 )))),& Xc ) end do !$OMP END PARALLEL DO end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function compute_Xg_bspline_3d_1point ( Xt , knot1 , knot2 , knot3 , degree , nc , Xc ) result ( Xg ) use forcad_utils , only : rk , basis_bspline , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:), knot3 (:) integer , intent ( in ) :: degree ( 3 ) integer , intent ( in ) :: nc ( 3 ) real ( rk ), intent ( in ), contiguous :: Xc (:,:) real ( rk ), allocatable :: Xg (:) allocate ( Xg ( size ( Xc , 2 ))) Xg = matmul ( kron ( basis_bspline ( Xt ( 3 ), knot3 , nc ( 3 ), degree ( 3 )), kron (& basis_bspline ( Xt ( 2 ), knot2 , nc ( 2 ), degree ( 2 )),& basis_bspline ( Xt ( 1 ), knot1 , nc ( 1 ), degree ( 1 )))),& Xc ) end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine compute_dTgc_nurbs_3d_vector ( Xt , knot1 , knot2 , knot3 , degree , nc , ng , Wc , dTgc , Tgc ) use forcad_utils , only : rk , basis_bspline_der , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:,:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:), knot3 (:) integer , intent ( in ) :: degree ( 3 ) integer , intent ( in ) :: nc ( 3 ) integer , intent ( in ) :: ng ( 3 ) real ( rk ), intent ( in ), contiguous :: Wc (:) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:,:) real ( rk ), allocatable , intent ( out ) :: Tgc (:,:) real ( rk ), allocatable :: dBi (:,:), dB1 (:), dB2 (:), dB3 (:) real ( rk ), allocatable :: Bi (:), B1 (:), B2 (:), B3 (:) integer :: i allocate ( dTgc ( ng ( 1 ) * ng ( 2 ) * ng ( 3 ), nc ( 1 ) * nc ( 2 ) * nc ( 3 ), 3 )) allocate ( Tgc ( ng ( 1 ) * ng ( 2 ) * ng ( 3 ), nc ( 1 ) * nc ( 2 ) * nc ( 3 ))) allocate ( Bi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 )), dBi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ), 3 )) do i = 1 , size ( Xt , 1 ) call basis_bspline_der ( Xt ( i , 1 ), knot1 , nc ( 1 ), degree ( 1 ), dB1 , B1 ) call basis_bspline_der ( Xt ( i , 2 ), knot2 , nc ( 2 ), degree ( 2 ), dB2 , B2 ) call basis_bspline_der ( Xt ( i , 3 ), knot3 , nc ( 3 ), degree ( 3 ), dB3 , B3 ) Bi = kron ( B3 , kron ( B2 , B1 )) Tgc ( i ,:) = Bi * ( Wc / ( dot_product ( Bi , Wc ))) dBi (:, 1 ) = kron ( kron ( B3 , B2 ), dB1 ) dBi (:, 2 ) = kron ( kron ( B3 , dB2 ), B1 ) dBi (:, 3 ) = kron ( kron ( dB3 , B2 ), B1 ) dTgc ( i ,:, 1 ) = ( dBi (:, 1 ) * Wc - Tgc ( i ,:) * dot_product ( dBi (:, 1 ), Wc ) ) / dot_product ( Bi , Wc ) dTgc ( i ,:, 2 ) = ( dBi (:, 2 ) * Wc - Tgc ( i ,:) * dot_product ( dBi (:, 2 ), Wc ) ) / dot_product ( Bi , Wc ) dTgc ( i ,:, 3 ) = ( dBi (:, 3 ) * Wc - Tgc ( i ,:) * dot_product ( dBi (:, 3 ), Wc ) ) / dot_product ( Bi , Wc ) end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine compute_dTgc_nurbs_3d_scalar ( Xt , knot1 , knot2 , knot3 , degree , nc , Wc , dTgc , Tgc ) use forcad_utils , only : rk , basis_bspline_der , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:), knot3 (:) integer , intent ( in ) :: degree ( 3 ) integer , intent ( in ) :: nc ( 3 ) real ( rk ), intent ( in ), contiguous :: Wc (:) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: Tgc (:) real ( rk ), allocatable :: dB1 (:), dB2 (:), dB3 (:), dBi (:,:) real ( rk ), allocatable :: B1 (:), B2 (:), B3 (:), Bi (:) allocate ( dTgc ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ), 3 )) allocate ( Tgc ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ))) allocate ( dBi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ), 3 ), Bi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ))) call basis_bspline_der ( Xt ( 1 ), knot1 , nc ( 1 ), degree ( 1 ), dB1 , B1 ) call basis_bspline_der ( Xt ( 2 ), knot2 , nc ( 2 ), degree ( 2 ), dB2 , B2 ) call basis_bspline_der ( Xt ( 3 ), knot3 , nc ( 3 ), degree ( 3 ), dB3 , B3 ) Bi = kron ( B3 , kron ( B2 , B1 )) Tgc = Bi * ( Wc / ( dot_product ( Bi , Wc ))) dBi (:, 1 ) = kron ( kron ( B3 , B2 ), dB1 ) dBi (:, 2 ) = kron ( kron ( B3 , dB2 ), B1 ) dBi (:, 3 ) = kron ( kron ( dB3 , B2 ), B1 ) dTgc (:, 1 ) = ( dBi (:, 1 ) * Wc - Tgc * dot_product ( dBi (:, 1 ), Wc ) ) / dot_product ( Bi , Wc ) dTgc (:, 2 ) = ( dBi (:, 2 ) * Wc - Tgc * dot_product ( dBi (:, 2 ), Wc ) ) / dot_product ( Bi , Wc ) dTgc (:, 3 ) = ( dBi (:, 3 ) * Wc - Tgc * dot_product ( dBi (:, 3 ), Wc ) ) / dot_product ( Bi , Wc ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine compute_dTgc_bspline_3d_vector ( Xt , knot1 , knot2 , knot3 , degree , nc , ng , dTgc , Tgc ) use forcad_utils , only : rk , basis_bspline_der , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:,:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:), knot3 (:) integer , intent ( in ) :: degree ( 3 ) integer , intent ( in ) :: nc ( 3 ) integer , intent ( in ) :: ng ( 3 ) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:,:) real ( rk ), allocatable , intent ( out ) :: Tgc (:,:) real ( rk ), allocatable :: dB1 (:), dB2 (:), dB3 (:) real ( rk ), allocatable :: B1 (:), B2 (:), B3 (:) integer :: i allocate ( dTgc ( ng ( 1 ) * ng ( 2 ) * ng ( 3 ), nc ( 1 ) * nc ( 2 ) * nc ( 3 ), 3 )) allocate ( Tgc ( ng ( 1 ) * ng ( 2 ) * ng ( 3 ), nc ( 1 ) * nc ( 2 ) * nc ( 3 ))) !$OMP PARALLEL DO PRIVATE(dB1, dB2, dB3) do i = 1 , size ( Xt , 1 ) call basis_bspline_der ( Xt ( i , 1 ), knot1 , nc ( 1 ), degree ( 1 ), dB1 , B1 ) call basis_bspline_der ( Xt ( i , 2 ), knot2 , nc ( 2 ), degree ( 2 ), dB2 , B2 ) call basis_bspline_der ( Xt ( i , 3 ), knot3 , nc ( 3 ), degree ( 3 ), dB3 , B3 ) Tgc ( i ,:) = kron ( B3 , kron ( B2 , B1 )) dTgc ( i ,:, 1 ) = kron ( kron ( B3 , B2 ), dB1 ) dTgc ( i ,:, 2 ) = kron ( kron ( B3 , dB2 ), B1 ) dTgc ( i ,:, 3 ) = kron ( kron ( dB3 , B2 ), B1 ) end do !$OMP END PARALLEL DO end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine compute_dTgc_bspline_3d_scalar ( Xt , knot1 , knot2 , knot3 , degree , nc , dTgc , Tgc ) use forcad_utils , only : rk , basis_bspline_der , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:), knot3 (:) integer , intent ( in ) :: degree ( 3 ) integer , intent ( in ) :: nc ( 3 ) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: Tgc (:) real ( rk ), allocatable :: dB1 (:), dB2 (:), dB3 (:) real ( rk ), allocatable :: B1 (:), B2 (:), B3 (:) allocate ( dTgc ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ), 3 )) allocate ( Tgc ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ))) call basis_bspline_der ( Xt ( 1 ), knot1 , nc ( 1 ), degree ( 1 ), dB1 , B1 ) call basis_bspline_der ( Xt ( 2 ), knot2 , nc ( 2 ), degree ( 2 ), dB2 , B2 ) call basis_bspline_der ( Xt ( 3 ), knot3 , nc ( 3 ), degree ( 3 ), dB3 , B3 ) Tgc = kron ( B3 , kron ( B2 , B1 )) dTgc (:, 1 ) = kron ( kron ( B3 , B2 ), dB1 ) dTgc (:, 2 ) = kron ( kron ( B3 , dB2 ), B1 ) dTgc (:, 3 ) = kron ( kron ( dB3 , B2 ), B1 ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine compute_d2Tgc_nurbs_3d_vector ( Xt , knot1 , knot2 , knot3 , degree , nc , ng , Wc , d2Tgc , dTgc , Tgc ) use forcad_utils , only : rk , basis_bspline_2der , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:,:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:), knot3 (:) integer , intent ( in ) :: degree ( 3 ) integer , intent ( in ) :: nc ( 3 ) integer , intent ( in ) :: ng ( 3 ) real ( rk ), intent ( in ), contiguous :: Wc (:) real ( rk ), allocatable , intent ( out ) :: d2Tgc (:,:,:) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:,:) real ( rk ), allocatable , intent ( out ) :: Tgc (:,:) real ( rk ), allocatable :: d2Bi (:,:), d2B1 (:), d2B2 (:), d2B3 (:) real ( rk ), allocatable :: dBi (:,:), dB1 (:), dB2 (:), dB3 (:) real ( rk ), allocatable :: Bi (:), B1 (:), B2 (:), B3 (:) real ( rk ), allocatable :: Tgci (:), dTgci (:) integer :: i allocate ( B1 ( nc ( 1 )), B2 ( nc ( 2 )), B3 ( nc ( 3 ))) allocate ( dB1 ( nc ( 1 )), dB2 ( nc ( 2 )), dB3 ( nc ( 3 ))) allocate ( d2B1 ( nc ( 1 )), d2B2 ( nc ( 2 )), d2B3 ( nc ( 3 ))) allocate ( Bi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 )), dBi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ), 3 ), d2Bi ( 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ), 3 )) allocate ( Tgci ( nc ( 1 ) * nc ( 2 ) * nc ( 3 )), dTgci ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ))) allocate ( d2Tgc ( ng ( 1 ) * ng ( 2 ) * ng ( 3 ), 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ), 3 )) allocate ( dTgc ( ng ( 1 ) * ng ( 2 ) * ng ( 3 ), nc ( 1 ) * nc ( 2 ) * nc ( 3 ), 3 )) allocate ( Tgc ( ng ( 1 ) * ng ( 2 ) * ng ( 3 ), nc ( 1 ) * nc ( 2 ) * nc ( 3 ))) do i = 1 , size ( Xt , 1 ) call basis_bspline_2der ( Xt ( i , 1 ), knot1 , nc ( 1 ), degree ( 1 ), d2B1 , dB1 , B1 ) call basis_bspline_2der ( Xt ( i , 2 ), knot2 , nc ( 2 ), degree ( 2 ), d2B2 , dB2 , B2 ) call basis_bspline_2der ( Xt ( i , 3 ), knot3 , nc ( 3 ), degree ( 3 ), d2B3 , dB3 , B3 ) Bi = kron ( B3 , kron ( B2 , B1 )) Tgc ( i ,:) = Bi * ( Wc / ( dot_product ( Bi , Wc ))) dBi (:, 1 ) = kron ( kron ( B3 , B2 ), dB1 ) dBi (:, 2 ) = kron ( kron ( B3 , dB2 ), B1 ) dBi (:, 3 ) = kron ( kron ( dB3 , B2 ), B1 ) dTgc ( i ,:, 1 ) = ( dBi (:, 1 ) * Wc - Tgc ( i ,:) * dot_product ( dBi (:, 1 ), Wc ) ) / dot_product ( Bi , Wc ) dTgc ( i ,:, 2 ) = ( dBi (:, 2 ) * Wc - Tgc ( i ,:) * dot_product ( dBi (:, 2 ), Wc ) ) / dot_product ( Bi , Wc ) dTgc ( i ,:, 3 ) = ( dBi (:, 3 ) * Wc - Tgc ( i ,:) * dot_product ( dBi (:, 3 ), Wc ) ) / dot_product ( Bi , Wc ) d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ) = kron ( kron ( B3 , B2 ), d2B1 ) d2Bi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ) = kron ( kron ( B3 , dB2 ), dB1 ) d2Bi ( 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ) = kron ( kron ( dB3 , B2 ), dB1 ) d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ) = kron ( kron ( B3 , dB2 ), dB1 ) d2Bi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ) = kron ( kron ( B3 , d2B2 ), B1 ) d2Bi ( 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ) = kron ( kron ( dB3 , dB2 ), B1 ) d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ) = kron ( kron ( dB3 , B2 ), dB1 ) d2Bi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ) = kron ( kron ( dB3 , dB2 ), B1 ) d2Bi ( 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ) = kron ( kron ( d2B3 , B2 ), B1 ) d2Tgc ( i , 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ) = ( d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ) * Wc & - 2.0_rk * dTgc ( i , :, 1 ) * dot_product ( dBi (:, 1 ), Wc ) & - Tgc ( i ,:) * dot_product ( d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ), Wc )) / dot_product ( Bi , Wc ) d2Tgc ( i , nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ) = ( d2Bi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ) * Wc & - dTgc ( i , :, 1 ) * dot_product ( dBi (:, 2 ), Wc ) - dTgc ( i , :, 2 ) * dot_product ( dBi (:, 1 ), Wc ) & - Tgc ( i ,:) * dot_product ( d2Bi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ), Wc )) / dot_product ( Bi , Wc ) d2Tgc ( i , 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ) = ( d2Bi ( 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ) * Wc & - dTgc ( i , :, 1 ) * dot_product ( dBi (:, 3 ), Wc ) - dTgc ( i , :, 3 ) * dot_product ( dBi (:, 1 ), Wc ) & - Tgc ( i ,:) * dot_product ( d2Bi ( 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ), Wc )) / dot_product ( Bi , Wc ) d2Tgc ( i , 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ) = ( d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ) * Wc & - dTgc ( i , :, 1 ) * dot_product ( dBi (:, 2 ), Wc ) - dTgc ( i , :, 2 ) * dot_product ( dBi (:, 1 ), Wc ) & - Tgc ( i ,:) * dot_product ( d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ), Wc )) / dot_product ( Bi , Wc ) d2Tgc ( i , nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ) = ( d2Bi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ) * Wc & - 2.0_rk * dTgc ( i , :, 2 ) * dot_product ( dBi (:, 2 ), Wc ) & - Tgc ( i ,:) * dot_product ( d2Bi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ), Wc )) / dot_product ( Bi , Wc ) d2Tgc ( i , 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ) = ( d2Bi ( 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ) * Wc & - dTgc ( i , :, 2 ) * dot_product ( dBi (:, 3 ), Wc ) - dTgc ( i , :, 3 ) * dot_product ( dBi (:, 2 ), Wc ) & - Tgc ( i ,:) * dot_product ( d2Bi ( 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ), Wc )) / dot_product ( Bi , Wc ) d2Tgc ( i , 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ) = ( d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ) * Wc & - dTgc ( i , :, 1 ) * dot_product ( dBi (:, 3 ), Wc ) - dTgc ( i , :, 3 ) * dot_product ( dBi (:, 1 ), Wc ) & - Tgc ( i ,:) * dot_product ( d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ), Wc )) / dot_product ( Bi , Wc ) d2Tgc ( i , nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ) = ( d2Bi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ) * Wc & - dTgc ( i , :, 2 ) * dot_product ( dBi (:, 3 ), Wc ) - dTgc ( i , :, 3 ) * dot_product ( dBi (:, 2 ), Wc ) & - Tgc ( i ,:) * dot_product ( d2Bi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ), Wc )) / dot_product ( Bi , Wc ) d2Tgc ( i , 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ) = ( d2Bi ( 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ) * Wc & - 2.0_rk * dTgc ( i , :, 3 ) * dot_product ( dBi (:, 3 ), Wc ) & - Tgc ( i ,:) * dot_product ( d2Bi ( 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ), Wc )) / dot_product ( Bi , Wc ) end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine compute_d2Tgc_nurbs_3d_scalar ( Xt , knot1 , knot2 , knot3 , degree , nc , Wc , d2Tgc , dTgc , Tgc ) use forcad_utils , only : rk , basis_bspline_2der , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:), knot3 (:) integer , intent ( in ) :: degree ( 3 ) integer , intent ( in ) :: nc ( 3 ) real ( rk ), intent ( in ), contiguous :: Wc (:) real ( rk ), allocatable , intent ( out ) :: d2Tgc (:,:) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: Tgc (:) real ( rk ), allocatable :: d2Bi (:,:), d2B1 (:), d2B2 (:), d2B3 (:) real ( rk ), allocatable :: dBi (:,:), dB1 (:), dB2 (:), dB3 (:) real ( rk ), allocatable :: Bi (:), B1 (:), B2 (:), B3 (:) allocate ( B1 ( nc ( 1 )), B2 ( nc ( 2 )), B3 ( nc ( 3 ))) allocate ( dB1 ( nc ( 1 )), dB2 ( nc ( 2 )), dB3 ( nc ( 3 ))) allocate ( d2B1 ( nc ( 1 )), d2B2 ( nc ( 2 )), d2B3 ( nc ( 3 ))) allocate ( Bi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 )), dBi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ), 3 ), d2Bi ( 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ), 3 )) allocate ( d2Tgc ( 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ), 3 )) allocate ( dTgc ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ), 3 )) allocate ( Tgc ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ))) call basis_bspline_2der ( Xt ( 1 ), knot1 , nc ( 1 ), degree ( 1 ), d2B1 , dB1 , B1 ) call basis_bspline_2der ( Xt ( 2 ), knot2 , nc ( 2 ), degree ( 2 ), d2B2 , dB2 , B2 ) call basis_bspline_2der ( Xt ( 3 ), knot3 , nc ( 3 ), degree ( 3 ), d2B3 , dB3 , B3 ) Bi = kron ( B3 , kron ( B2 , B1 )) Tgc = Bi * ( Wc / ( dot_product ( Bi , Wc ))) dBi (:, 1 ) = kron ( kron ( B3 , B2 ), dB1 ) dBi (:, 2 ) = kron ( kron ( B3 , dB2 ), B1 ) dBi (:, 3 ) = kron ( kron ( dB3 , B2 ), B1 ) dTgc (:, 1 ) = ( dBi (:, 1 ) * Wc - Tgc * dot_product ( dBi (:, 1 ), Wc ) ) / dot_product ( Bi , Wc ) dTgc (:, 2 ) = ( dBi (:, 2 ) * Wc - Tgc * dot_product ( dBi (:, 2 ), Wc ) ) / dot_product ( Bi , Wc ) dTgc (:, 3 ) = ( dBi (:, 3 ) * Wc - Tgc * dot_product ( dBi (:, 3 ), Wc ) ) / dot_product ( Bi , Wc ) d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ) = kron ( kron ( B3 , B2 ), d2B1 ) d2Bi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ) = kron ( kron ( B3 , dB2 ), dB1 ) d2Bi ( 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ) = kron ( kron ( dB3 , B2 ), dB1 ) d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ) = kron ( kron ( B3 , dB2 ), dB1 ) d2Bi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ) = kron ( kron ( B3 , d2B2 ), B1 ) d2Bi ( 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ) = kron ( kron ( dB3 , dB2 ), B1 ) d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ) = kron ( kron ( dB3 , B2 ), dB1 ) d2Bi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ) = kron ( kron ( dB3 , dB2 ), B1 ) d2Bi ( 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ) = kron ( kron ( d2B3 , B2 ), B1 ) d2Tgc ( 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ) = ( d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ) * Wc & - 2.0_rk * dTgc (:, 1 ) * dot_product ( dBi (:, 1 ), Wc ) & - Tgc * dot_product ( d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ), Wc )) / dot_product ( Bi , Wc ) d2Tgc ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ) = ( d2Bi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ) * Wc & - dTgc (:, 1 ) * dot_product ( dBi (:, 2 ), Wc ) - dTgc (:, 2 ) * dot_product ( dBi (:, 1 ), Wc ) & - Tgc * dot_product ( d2Bi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ), Wc )) / dot_product ( Bi , Wc ) d2Tgc ( 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ) = ( d2Bi ( 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ) * Wc & - dTgc (:, 1 ) * dot_product ( dBi (:, 3 ), Wc ) - dTgc (:, 3 ) * dot_product ( dBi (:, 1 ), Wc ) & - Tgc * dot_product ( d2Bi ( 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ), Wc )) / dot_product ( Bi , Wc ) d2Tgc ( 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ) = ( d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ) * Wc & - dTgc (:, 1 ) * dot_product ( dBi (:, 2 ), Wc ) - dTgc (:, 2 ) * dot_product ( dBi (:, 1 ), Wc ) & - Tgc * dot_product ( d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ), Wc )) / dot_product ( Bi , Wc ) d2Tgc ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ) = ( d2Bi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ) * Wc & - 2.0_rk * dTgc (:, 2 ) * dot_product ( dBi (:, 2 ), Wc ) & - Tgc * dot_product ( d2Bi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ), Wc )) / dot_product ( Bi , Wc ) d2Tgc ( 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ) = ( d2Bi ( 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ) * Wc & - dTgc (:, 2 ) * dot_product ( dBi (:, 3 ), Wc ) - dTgc (:, 3 ) * dot_product ( dBi (:, 2 ), Wc ) & - Tgc * dot_product ( d2Bi ( 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ), Wc )) / dot_product ( Bi , Wc ) d2Tgc ( 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ) = ( d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ) * Wc & - dTgc (:, 1 ) * dot_product ( dBi (:, 3 ), Wc ) - dTgc (:, 3 ) * dot_product ( dBi (:, 1 ), Wc ) & - Tgc * dot_product ( d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ), Wc )) / dot_product ( Bi , Wc ) d2Tgc ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ) = ( d2Bi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ) * Wc & - dTgc (:, 2 ) * dot_product ( dBi (:, 3 ), Wc ) - dTgc (:, 3 ) * dot_product ( dBi (:, 2 ), Wc ) & - Tgc * dot_product ( d2Bi ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ), Wc )) / dot_product ( Bi , Wc ) d2Tgc ( 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ) = ( d2Bi ( 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ) * Wc & - 2.0_rk * dTgc (:, 3 ) * dot_product ( dBi (:, 3 ), Wc ) & - Tgc * dot_product ( d2Bi ( 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ), Wc )) / dot_product ( Bi , Wc ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine compute_d2Tgc_bspline_3d_vector ( Xt , knot1 , knot2 , knot3 , degree , nc , ng , d2Tgc , dTgc , Tgc ) use forcad_utils , only : rk , basis_bspline_2der , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:,:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:), knot3 (:) integer , intent ( in ) :: degree ( 3 ) integer , intent ( in ) :: nc ( 3 ) integer , intent ( in ) :: ng ( 3 ) real ( rk ), allocatable , intent ( out ) :: d2Tgc (:,:,:) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:,:) real ( rk ), allocatable , intent ( out ) :: Tgc (:,:) real ( rk ), allocatable :: d2B1 (:), d2B2 (:), d2B3 (:) real ( rk ), allocatable :: dB1 (:), dB2 (:), dB3 (:) real ( rk ), allocatable :: B1 (:), B2 (:), B3 (:) integer :: i allocate ( d2Tgc ( ng ( 1 ) * ng ( 2 ) * ng ( 3 ), 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ), 3 )) allocate ( dTgc ( ng ( 1 ) * ng ( 2 ) * ng ( 3 ), nc ( 1 ) * nc ( 2 ) * nc ( 3 ), 3 )) allocate ( Tgc ( ng ( 1 ) * ng ( 2 ) * ng ( 3 ), nc ( 1 ) * nc ( 2 ) * nc ( 3 ))) do i = 1 , size ( Xt , 1 ) call basis_bspline_2der ( Xt ( i , 1 ), knot1 , nc ( 1 ), degree ( 1 ), d2B1 , dB1 , B1 ) call basis_bspline_2der ( Xt ( i , 2 ), knot2 , nc ( 2 ), degree ( 2 ), d2B2 , dB2 , B2 ) call basis_bspline_2der ( Xt ( i , 3 ), knot3 , nc ( 3 ), degree ( 3 ), d2B3 , dB3 , B3 ) Tgc ( i ,:) = kron ( B3 , kron ( B2 , B1 )) dTgc ( i ,:, 1 ) = kron ( kron ( B3 , B2 ), dB1 ) dTgc ( i ,:, 2 ) = kron ( kron ( B3 , dB2 ), B1 ) dTgc ( i ,:, 3 ) = kron ( kron ( dB3 , B2 ), B1 ) d2Tgc ( i , 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ) = kron ( kron ( B3 , B2 ), d2B1 ) d2Tgc ( i , nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ) = kron ( kron ( B3 , dB2 ), dB1 ) d2Tgc ( i , 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ) = kron ( kron ( dB3 , B2 ), dB1 ) d2Tgc ( i , 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ) = kron ( kron ( B3 , dB2 ), dB1 ) d2Tgc ( i , nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ) = kron ( kron ( B3 , d2B2 ), B1 ) d2Tgc ( i , 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ) = kron ( kron ( dB3 , dB2 ), B1 ) d2Tgc ( i , 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ) = kron ( kron ( dB3 , B2 ), dB1 ) d2Tgc ( i , nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ) = kron ( kron ( dB3 , dB2 ), B1 ) d2Tgc ( i , 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ) = kron ( kron ( d2B3 , B2 ), B1 ) end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine compute_d2Tgc_bspline_3d_scalar ( Xt , knot1 , knot2 , knot3 , degree , nc , d2Tgc , dTgc , Tgc ) use forcad_utils , only : rk , basis_bspline_2der , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:), knot3 (:) integer , intent ( in ) :: degree ( 3 ) integer , intent ( in ) :: nc ( 3 ) real ( rk ), allocatable , intent ( out ) :: d2Tgc (:,:) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: Tgc (:) real ( rk ), allocatable :: d2B1 (:), d2B2 (:), d2B3 (:) real ( rk ), allocatable :: dB1 (:), dB2 (:), dB3 (:) real ( rk ), allocatable :: B1 (:), B2 (:), B3 (:) allocate ( d2Tgc ( 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ), 3 )) allocate ( dTgc ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ), 3 )) allocate ( Tgc ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ))) call basis_bspline_2der ( Xt ( 1 ), knot1 , nc ( 1 ), degree ( 1 ), d2B1 , dB1 , B1 ) call basis_bspline_2der ( Xt ( 2 ), knot2 , nc ( 2 ), degree ( 2 ), d2B2 , dB2 , B2 ) call basis_bspline_2der ( Xt ( 3 ), knot3 , nc ( 3 ), degree ( 3 ), d2B3 , dB3 , B3 ) Tgc = kron ( B3 , kron ( B2 , B1 )) dTgc (:, 1 ) = kron ( kron ( B3 , B2 ), dB1 ) dTgc (:, 2 ) = kron ( kron ( B3 , dB2 ), B1 ) dTgc (:, 3 ) = kron ( kron ( dB3 , B2 ), B1 ) d2Tgc ( 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ) = kron ( kron ( B3 , B2 ), d2B1 ) d2Tgc ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ) = kron ( kron ( B3 , dB2 ), dB1 ) d2Tgc ( 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 1 ) = kron ( kron ( dB3 , B2 ), dB1 ) d2Tgc ( 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ) = kron ( kron ( B3 , dB2 ), dB1 ) d2Tgc ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ) = kron ( kron ( B3 , d2B2 ), B1 ) d2Tgc ( 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 2 ) = kron ( kron ( dB3 , dB2 ), B1 ) d2Tgc ( 1 : nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ) = kron ( kron ( dB3 , B2 ), dB1 ) d2Tgc ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ) = kron ( kron ( dB3 , dB2 ), B1 ) d2Tgc ( 2 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) + 1 : 3 * nc ( 1 ) * nc ( 2 ) * nc ( 3 ) , 3 ) = kron ( kron ( d2B3 , B2 ), B1 ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function compute_Tgc_nurbs_3d_vector ( Xt , knot1 , knot2 , knot3 , degree , nc , ng , Wc ) result ( Tgc ) use forcad_utils , only : rk , basis_bspline , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:,:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:), knot3 (:) integer , intent ( in ) :: degree ( 3 ) integer , intent ( in ) :: nc ( 3 ) integer , intent ( in ) :: ng ( 3 ) real ( rk ), intent ( in ), contiguous :: Wc (:) real ( rk ), allocatable :: Tgc (:,:) real ( rk ), allocatable :: Tgci (:) integer :: i allocate ( Tgc ( ng ( 1 ) * ng ( 2 ) * ng ( 3 ), nc ( 1 ) * nc ( 2 ) * nc ( 3 ))) allocate ( Tgci ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ))) !$OMP PARALLEL DO PRIVATE(Tgci) do i = 1 , size ( Xt , 1 ) Tgci = kron ( basis_bspline ( Xt ( i , 3 ), knot3 , nc ( 3 ), degree ( 3 )), kron (& basis_bspline ( Xt ( i , 2 ), knot2 , nc ( 2 ), degree ( 2 )),& basis_bspline ( Xt ( i , 1 ), knot1 , nc ( 1 ), degree ( 1 )))) Tgc ( i ,:) = Tgci * ( Wc / ( dot_product ( Tgci , Wc ))) end do !$OMP END PARALLEL DO end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function compute_Tgc_nurbs_3d_scalar ( Xt , knot1 , knot2 , knot3 , degree , nc , Wc ) result ( Tgc ) use forcad_utils , only : rk , basis_bspline , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:), knot3 (:) integer , intent ( in ) :: degree ( 3 ) integer , intent ( in ) :: nc ( 3 ) real ( rk ), intent ( in ), contiguous :: Wc (:) real ( rk ), allocatable :: Tgc (:) allocate ( Tgc ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ))) Tgc = kron ( basis_bspline ( Xt ( 3 ), knot3 , nc ( 3 ), degree ( 3 )), kron (& basis_bspline ( Xt ( 2 ), knot2 , nc ( 2 ), degree ( 2 )),& basis_bspline ( Xt ( 1 ), knot1 , nc ( 1 ), degree ( 1 )))) Tgc = Tgc * ( Wc / ( dot_product ( Tgc , Wc ))) end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function compute_Tgc_bspline_3d_vector ( Xt , knot1 , knot2 , knot3 , degree , nc , ng ) result ( Tgc ) use forcad_utils , only : rk , basis_bspline , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:,:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:), knot3 (:) integer , intent ( in ) :: degree ( 3 ) integer , intent ( in ) :: nc ( 3 ) integer , intent ( in ) :: ng ( 3 ) real ( rk ), allocatable :: Tgc (:,:) integer :: i allocate ( Tgc ( ng ( 1 ) * ng ( 2 ) * ng ( 3 ), nc ( 1 ) * nc ( 2 ) * nc ( 3 ))) !$OMP PARALLEL DO do i = 1 , size ( Xt , 1 ) Tgc ( i ,:) = kron ( basis_bspline ( Xt ( i , 3 ), knot3 , nc ( 3 ), degree ( 3 )), kron (& basis_bspline ( Xt ( i , 2 ), knot2 , nc ( 2 ), degree ( 2 )),& basis_bspline ( Xt ( i , 1 ), knot1 , nc ( 1 ), degree ( 1 )))) end do !$OMP END PARALLEL DO end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function compute_Tgc_bspline_3d_scalar ( Xt , knot1 , knot2 , knot3 , degree , nc ) result ( Tgc ) use forcad_utils , only : rk , basis_bspline , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:), knot3 (:) integer , intent ( in ) :: degree ( 3 ) integer , intent ( in ) :: nc ( 3 ) real ( rk ), allocatable :: Tgc (:) allocate ( Tgc ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ))) Tgc = kron ( basis_bspline ( Xt ( 3 ), knot3 , nc ( 3 ), degree ( 3 )), kron (& basis_bspline ( Xt ( 2 ), knot2 , nc ( 2 ), degree ( 2 )),& basis_bspline ( Xt ( 1 ), knot1 , nc ( 1 ), degree ( 1 )))) end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function nearest_point_help_3d ( ng , Xg , point_Xg ) result ( distances ) use forcad_utils , only : rk implicit none integer , intent ( in ) :: ng ( 3 ) real ( rk ), intent ( in ), contiguous :: Xg (:,:) real ( rk ), intent ( in ), contiguous :: point_Xg (:) real ( rk ), allocatable :: distances (:) integer :: i allocate ( distances ( ng ( 1 ) * ng ( 2 ) * ng ( 3 ))) !$OMP PARALLEL DO do i = 1 , ng ( 1 ) * ng ( 2 ) * ng ( 3 ) distances ( i ) = norm2 ( Xg ( i ,:) - point_Xg ) end do !$OMP END PARALLEL DO end function !===============================================================================","tags":"","loc":"sourcefile/forcad_nurbs_volume.f90.html"},{"title":"shape_half_circle.f90 – ForCAD","text":"This file depends on sourcefile~~shape_half_circle.f90~~EfferentGraph sourcefile~shape_half_circle.f90 shape_half_circle.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~shape_half_circle.f90->sourcefile~forcad.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_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 program shape_half_circle use forcad , only : rk , nurbs_curve implicit none type ( nurbs_curve ) :: shape !> Set up a half circle shape centered at the 0,0,0 with a radius of 1 call shape % set_half_circle ([ 0.0_rk , 0.0_rk , 0.0_rk ], 1.0_rk ) !> Export the control points to a VTK file for visualization. call shape % export_Xc ( 'vtk/shape_half_circle_Xc.vtk' ) !> Create the shape using the specified number of elements in each direction. call shape % create ( 60 ) !> Export the geometry to a VTK file for visualization. call shape % export_Xg ( 'vtk/shape_half_circle_Xg.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call shape % show ( 'vtk/shape_half_circle_Xc.vtk' , 'vtk/shape_half_circle_Xg.vtk' ) !> Finalize and clean up the shape object. call shape % finalize () end program","tags":"","loc":"sourcefile/shape_half_circle.f90.html"},{"title":"shape_ring_2d.f90 – ForCAD","text":"This file depends on sourcefile~~shape_ring_2d.f90~~EfferentGraph sourcefile~shape_ring_2d.f90 shape_ring_2d.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~shape_ring_2d.f90->sourcefile~forcad.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_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 program shape_ring_2d use forcad , only : rk , nurbs_surface implicit none type ( nurbs_surface ) :: shape !> Set up a ring shape with inner radius 1.0 and outer radius 2.0. call shape % set_ring ([ 0.0_rk , 0.0_rk , 0.0_rk ], 1.0_rk , 2.0_rk ) !> Export the control points to a VTK file for visualization. call shape % export_Xc ( 'vtk/shape_ring_2d_Xc.vtk' ) !> Create the shape using the specified number of elements in each direction. call shape % create ( 60 , 15 ) !> Export the geometry to a VTK file for visualization. call shape % export_Xg ( 'vtk/shape_ring_2d_Xg.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call shape % show ( 'vtk/shape_ring_2d_Xc.vtk' , 'vtk/shape_ring_2d_Xg.vtk' ) !> Finalize and clean up the shape object. call shape % finalize () end program","tags":"","loc":"sourcefile/shape_ring_2d.f90.html"},{"title":"forcad.f90 – ForCAD","text":"This file depends on sourcefile~~forcad.f90~~EfferentGraph sourcefile~forcad.f90 forcad.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_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~demo_curve.f90 demo_curve.f90 sourcefile~demo_curve.f90->sourcefile~forcad.f90 sourcefile~demo_surface.f90 demo_surface.f90 sourcefile~demo_surface.f90->sourcefile~forcad.f90 sourcefile~demo_volume.f90 demo_volume.f90 sourcefile~demo_volume.f90->sourcefile~forcad.f90 sourcefile~example_curve_1.f90 example_curve_1.f90 sourcefile~example_curve_1.f90->sourcefile~forcad.f90 sourcefile~example_ppm1.f90 example_ppm1.f90 sourcefile~example_ppm1.f90->sourcefile~forcad.f90 sourcefile~example_ppm2.f90 example_ppm2.f90 sourcefile~example_ppm2.f90->sourcefile~forcad.f90 sourcefile~example_ppm3.f90 example_ppm3.f90 sourcefile~example_ppm3.f90->sourcefile~forcad.f90 sourcefile~example_surface_1.f90 example_surface_1.f90 sourcefile~example_surface_1.f90->sourcefile~forcad.f90 sourcefile~example_volume_1.f90 example_volume_1.f90 sourcefile~example_volume_1.f90->sourcefile~forcad.f90 sourcefile~nearest_point_1d.f90 nearest_point_1d.f90 sourcefile~nearest_point_1d.f90->sourcefile~forcad.f90 sourcefile~nearest_point_2d.f90 nearest_point_2d.f90 sourcefile~nearest_point_2d.f90->sourcefile~forcad.f90 sourcefile~nearest_point_2d_bench.f90 nearest_point_2d_bench.f90 sourcefile~nearest_point_2d_bench.f90->sourcefile~forcad.f90 sourcefile~nearest_point_3d.f90 nearest_point_3d.f90 sourcefile~nearest_point_3d.f90->sourcefile~forcad.f90 sourcefile~put_to_nurbs.f90 put_to_nurbs.f90 sourcefile~put_to_nurbs.f90->sourcefile~forcad.f90 sourcefile~shape_c_1d.f90 shape_C_1d.f90 sourcefile~shape_c_1d.f90->sourcefile~forcad.f90 sourcefile~shape_c_2d.f90 shape_C_2d.f90 sourcefile~shape_c_2d.f90->sourcefile~forcad.f90 sourcefile~shape_c_3d.f90 shape_C_3d.f90 sourcefile~shape_c_3d.f90->sourcefile~forcad.f90 sourcefile~shape_circle.f90 shape_circle.f90 sourcefile~shape_circle.f90->sourcefile~forcad.f90 sourcefile~shape_half_circle.f90 shape_half_circle.f90 sourcefile~shape_half_circle.f90->sourcefile~forcad.f90 sourcefile~shape_half_ring_2d.f90 shape_half_ring_2d.f90 sourcefile~shape_half_ring_2d.f90->sourcefile~forcad.f90 sourcefile~shape_half_ring_3d.f90 shape_half_ring_3d.f90 sourcefile~shape_half_ring_3d.f90->sourcefile~forcad.f90 sourcefile~shape_hexahedron.f90 shape_hexahedron.f90 sourcefile~shape_hexahedron.f90->sourcefile~forcad.f90 sourcefile~shape_ring_2d.f90 shape_ring_2d.f90 sourcefile~shape_ring_2d.f90->sourcefile~forcad.f90 sourcefile~shape_ring_3d.f90 shape_ring_3d.f90 sourcefile~shape_ring_3d.f90->sourcefile~forcad.f90 sourcefile~shape_tetragon.f90 shape_tetragon.f90 sourcefile~shape_tetragon.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 !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause module forcad use forcad_utils use forcad_nurbs_curve use forcad_nurbs_surface use forcad_nurbs_volume private public rk , nurbs_curve , nurbs_surface , nurbs_volume end module forcad","tags":"","loc":"sourcefile/forcad.f90.html"},{"title":"shape_half_ring_2d.f90 – ForCAD","text":"This file depends on sourcefile~~shape_half_ring_2d.f90~~EfferentGraph sourcefile~shape_half_ring_2d.f90 shape_half_ring_2d.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~shape_half_ring_2d.f90->sourcefile~forcad.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_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 program shape_half_ring_2d use forcad , only : rk , nurbs_surface implicit none type ( nurbs_surface ) :: shape !> Set up a half ring shape centered at 0,0,0 with inner radius 1 and outer radius 2. call shape % set_half_ring ([ 0.0_rk , 0.0_rk , 0.0_rk ], 1.0_rk , 2.0_rk ) !> Export the control points to a VTK file for visualization. call shape % export_Xc ( 'vtk/shape_half_ring_2d_Xc.vtk' ) !> Create the shape using the specified number of elements in each direction. call shape % create ( 60 , 15 ) !> Export the geometry to a VTK file for visualization. call shape % export_Xg ( 'vtk/shape_half_ring_2d_Xg.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call shape % show ( 'vtk/shape_half_ring_2d_Xc.vtk' , 'vtk/shape_half_ring_2d_Xg.vtk' ) !> Finalize and clean up the shape object. call shape % finalize () end program","tags":"","loc":"sourcefile/shape_half_ring_2d.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~demo_curve.f90 demo_curve.f90 sourcefile~demo_curve.f90->sourcefile~forcad.f90 sourcefile~demo_surface.f90 demo_surface.f90 sourcefile~demo_surface.f90->sourcefile~forcad.f90 sourcefile~demo_volume.f90 demo_volume.f90 sourcefile~demo_volume.f90->sourcefile~forcad.f90 sourcefile~example_curve_1.f90 example_curve_1.f90 sourcefile~example_curve_1.f90->sourcefile~forcad.f90 sourcefile~example_ppm1.f90 example_ppm1.f90 sourcefile~example_ppm1.f90->sourcefile~forcad.f90 sourcefile~example_ppm2.f90 example_ppm2.f90 sourcefile~example_ppm2.f90->sourcefile~forcad.f90 sourcefile~example_ppm3.f90 example_ppm3.f90 sourcefile~example_ppm3.f90->sourcefile~forcad.f90 sourcefile~example_surface_1.f90 example_surface_1.f90 sourcefile~example_surface_1.f90->sourcefile~forcad.f90 sourcefile~example_volume_1.f90 example_volume_1.f90 sourcefile~example_volume_1.f90->sourcefile~forcad.f90 sourcefile~nearest_point_1d.f90 nearest_point_1d.f90 sourcefile~nearest_point_1d.f90->sourcefile~forcad.f90 sourcefile~nearest_point_2d.f90 nearest_point_2d.f90 sourcefile~nearest_point_2d.f90->sourcefile~forcad.f90 sourcefile~nearest_point_2d_bench.f90 nearest_point_2d_bench.f90 sourcefile~nearest_point_2d_bench.f90->sourcefile~forcad.f90 sourcefile~nearest_point_3d.f90 nearest_point_3d.f90 sourcefile~nearest_point_3d.f90->sourcefile~forcad.f90 sourcefile~put_to_nurbs.f90 put_to_nurbs.f90 sourcefile~put_to_nurbs.f90->sourcefile~forcad.f90 sourcefile~shape_c_1d.f90 shape_C_1d.f90 sourcefile~shape_c_1d.f90->sourcefile~forcad.f90 sourcefile~shape_c_2d.f90 shape_C_2d.f90 sourcefile~shape_c_2d.f90->sourcefile~forcad.f90 sourcefile~shape_c_3d.f90 shape_C_3d.f90 sourcefile~shape_c_3d.f90->sourcefile~forcad.f90 sourcefile~shape_circle.f90 shape_circle.f90 sourcefile~shape_circle.f90->sourcefile~forcad.f90 sourcefile~shape_half_circle.f90 shape_half_circle.f90 sourcefile~shape_half_circle.f90->sourcefile~forcad.f90 sourcefile~shape_half_ring_2d.f90 shape_half_ring_2d.f90 sourcefile~shape_half_ring_2d.f90->sourcefile~forcad.f90 sourcefile~shape_half_ring_3d.f90 shape_half_ring_3d.f90 sourcefile~shape_half_ring_3d.f90->sourcefile~forcad.f90 sourcefile~shape_hexahedron.f90 shape_hexahedron.f90 sourcefile~shape_hexahedron.f90->sourcefile~forcad.f90 sourcefile~shape_ring_2d.f90 shape_ring_2d.f90 sourcefile~shape_ring_2d.f90->sourcefile~forcad.f90 sourcefile~shape_ring_3d.f90 shape_ring_3d.f90 sourcefile~shape_ring_3d.f90->sourcefile~forcad.f90 sourcefile~shape_tetragon.f90 shape_tetragon.f90 sourcefile~shape_tetragon.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 !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> This module defines the 'nurbs_surface' type for representing a Non-Uniform Rational B-Spline (NURBS) surface. module forcad_nurbs_surface use forcad_utils , only : rk , basis_bspline , elemConn_C0 , kron , ndgrid , compute_multiplicity , compute_knot_vector , & basis_bspline_der , insert_knot_A_5_1 , findspan , elevate_degree_A_5_9 , remove_knots_A_5_8 , tetragon_Xc , & elemConn_Cn , unique , rotation implicit none private public nurbs_surface !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause type nurbs_surface real ( rk ), allocatable , private :: Xc (:,:) !! Control points (2D array: [nc(1)*nc(2), dim]) real ( rk ), allocatable , private :: Xg (:,:) !! Geometry points (2D array: [ng(1)*ng(2), dim]) real ( rk ), allocatable , private :: Wc (:) !! Weights for control points (1D array: [nc(1)*nc(2)]) real ( rk ), allocatable , private :: Xt1 (:) !! Evaluation parameter values in the first direction (1D array: [ng(1)]) real ( rk ), allocatable , private :: Xt2 (:) !! Evaluation parameter values in the second direction (1D array: [ng(2)]) real ( rk ), allocatable , private :: Xt (:,:) !! Evaluation parameter values (2D array: [ng(1)*ng(2), 2]) real ( rk ), allocatable , private :: knot1 (:) !! Knot vector in the first direction (1D array) real ( rk ), allocatable , private :: knot2 (:) !! Knot vector in the second direction (1D array) integer , private :: degree ( 2 ) !! Degree (order) of the surface integer , private :: nc ( 2 ) !! Number of control points in each direction integer , private :: ng ( 2 ) !! Number of geometry points in each direction integer , allocatable , private :: elemConn_Xc_vis (:,:) !! Connectivity for visualization of control points integer , allocatable , private :: elemConn_Xg_vis (:,:) !! Connectivity for visualization of geometry points integer , allocatable , private :: elemConn (:,:) !! IGA element connectivity contains procedure :: set1 !!> Set knot vectors, control points and weights for the NURBS surface object procedure :: set2 !!> Set NURBS surface using nodes of parameter space, degree, continuity, control points and weights procedure :: set3 !!> Set Bezier or Rational Bezier surface using control points and weights generic :: set => set1 , set2 , set3 !!> Set NURBS surface procedure :: create !!> Generate geometry points procedure :: cmp_Xg !!> Compute geometry points procedure , private :: get_Xc_all !!> Get all control points procedure , private :: get_Xci !!> Get i-th control point procedure , private :: get_Xcid !!> Get i-th control point in a specific direction generic :: get_Xc => get_Xc_all , get_Xci , get_Xcid !!> Get control points procedure , private :: get_Xg_all !!> Get all geometry points procedure , private :: get_Xgi !!> Get i-th geometry point procedure , private :: get_Xgid !!> Get i-th geometry point in a specific direction generic :: get_Xg => get_Xg_all , get_Xgi , get_Xgid !!> Get geometry points procedure , private :: get_Wc_all !!> Get all weights procedure , private :: get_Wci !!> Get i-th weight generic :: get_Wc => get_Wc_all , get_Wci !!> Get weights procedure :: get_Xt !!> Get parameter values procedure , private :: get_knot_all !!> Get all knot vectors procedure , private :: get_knoti !!> Get i-th knot value generic :: get_knot => get_knoti , get_knot_all !!> Get knot vector procedure :: get_ng !!> Get number of geometry points procedure :: cmp_degree !!> Compute degree of the NURBS surface procedure , private :: get_degree_all !!> Get degree of the NURBS surface in both directions procedure , private :: get_degree_dir !!> Get degree of the NURBS surface in a specific direction generic :: get_degree => get_degree_all , get_degree_dir !!> Get degree of the NURBS surface procedure :: finalize !!> Finalize the NURBS surface object procedure :: cmp_elem_Xc_vis !!> Generate connectivity for control points procedure :: cmp_elem_Xg_vis !!> Generate connectivity for geometry points procedure :: cmp_elem !!> Generate IGA element connectivity procedure :: get_elem_Xc_vis !!> Get connectivity for control points procedure :: get_elem_Xg_vis !!> Get connectivity for geometry points procedure :: get_elem !!> Get IGA element connectivity procedure :: set_elem_Xc_vis !!> Set connectivity for control points procedure :: set_elem_Xg_vis !!> Set connectivity for geometry points procedure :: set_elem !!> Set IGA element connectivity 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 !!> Compute and return the multiplicity of the knot vector procedure :: get_continuity !!> Compute and return the continuity of the NURBS surface procedure :: cmp_nc !!> Compute number of required control points procedure :: get_nc !!> Get number of control points procedure , private :: basis_vector !!> Compute the basis functions of the NURBS surface procedure , private :: basis_scalar !!> Compute the basis functions of the NURBS surface generic :: basis => basis_vector , basis_scalar !!> Compute the basis functions of the NURBS surface procedure , private :: derivative_vector !!> Compute the derivative of the NURBS surface procedure , private :: derivative_scalar !!> Compute the derivative of the NURBS surface generic :: derivative => derivative_vector , derivative_scalar !!> Compute the derivative of the NURBS surface procedure , private :: derivative2_vector !!> Compute the second derivative of the NURBS surface procedure , private :: derivative2_scalar !!> Compute the second derivative of the NURBS surface generic :: derivative2 => derivative2_vector , derivative2_scalar !!> Compute the second derivative of the NURBS surface procedure :: insert_knots !!> Insert knots into the knot vector procedure :: elevate_degree !!> Elevate degree procedure :: is_rational !!> Check if the NURBS surface is rational procedure :: remove_knots !!> Remove knots from the knot vector procedure :: rotate_Xc !!> Rotate control points procedure :: rotate_Xg !!> Rotate geometry points procedure :: translate_Xc !!> Translate control points procedure :: translate_Xg !!> Translate geometry points procedure :: show !!> Show the NURBS object using PyVista procedure :: nearest_point !!> Find the nearest point on the NURBS surface (Approximation) procedure :: nearest_point2 !!> Find the nearest point on the NURBS surface (Minimization - Newton's method) ! Shapes procedure :: set_tetragon !!> Set a tetragon procedure :: set_ring !!> Set a ring procedure :: set_half_ring !!> Set a half ring procedure :: set_C !!> Set a C-shape end type !=============================================================================== interface compute_Xg pure function compute_Xg_nurbs_2d ( f_Xt , f_knot1 , f_knot2 , f_degree , f_nc , f_ng , f_Xc , f_Wc ) result ( f_Xg ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:,:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:) integer , intent ( in ) :: f_degree ( 2 ) integer , intent ( in ) :: f_nc ( 2 ) integer , intent ( in ) :: f_ng ( 2 ) real ( rk ), intent ( in ), contiguous :: f_Xc (:,:) real ( rk ), intent ( in ), contiguous :: f_Wc (:) real ( rk ), allocatable :: f_Xg (:,:) end function pure function compute_Xg_bspline_2d ( f_Xt , f_knot1 , f_knot2 , f_degree , f_nc , f_ng , f_Xc ) result ( f_Xg ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:,:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:) real ( rk ), intent ( in ), contiguous :: f_knot2 (:) integer , intent ( in ) :: f_degree ( 2 ) integer , intent ( in ) :: f_nc ( 2 ) integer , intent ( in ) :: f_ng ( 2 ) real ( rk ), intent ( in ), contiguous :: f_Xc (:,:) real ( rk ), allocatable :: f_Xg (:,:) end function pure function compute_Xg_nurbs_2d_1point ( f_Xt , f_knot1 , f_knot2 , f_degree , f_nc , f_Xc , f_Wc ) result ( f_Xg ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:) integer , intent ( in ) :: f_degree ( 2 ) integer , intent ( in ) :: f_nc ( 2 ) real ( rk ), intent ( in ), contiguous :: f_Xc (:,:) real ( rk ), intent ( in ), contiguous :: f_Wc (:) real ( rk ), allocatable :: f_Xg (:) end function pure function compute_Xg_bspline_2d_1point ( f_Xt , f_knot1 , f_knot2 , f_degree , f_nc , f_Xc ) result ( f_Xg ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:) real ( rk ), intent ( in ), contiguous :: f_knot2 (:) integer , intent ( in ) :: f_degree ( 2 ) integer , intent ( in ) :: f_nc ( 2 ) real ( rk ), intent ( in ), contiguous :: f_Xc (:,:) real ( rk ), allocatable :: f_Xg (:) end function end interface interface compute_dTgc pure subroutine compute_dTgc_nurbs_2d_vector ( f_Xt , f_knot1 , f_knot2 , f_degree , f_nc , f_ng , f_Wc , f_dTgc , f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:,:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:) integer , intent ( in ) :: f_degree ( 2 ) integer , intent ( in ) :: f_nc ( 2 ) integer , intent ( in ) :: f_ng ( 2 ) real ( rk ), intent ( in ), contiguous :: f_Wc (:) real ( rk ), allocatable , intent ( out ) :: f_dTgc (:,:,:) real ( rk ), allocatable , intent ( out ) :: f_Tgc (:,:) end subroutine pure subroutine compute_dTgc_bspline_2d_vector ( f_Xt , f_knot1 , f_knot2 , f_degree , nc , f_ng , f_dTgc , f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:,:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:) integer , intent ( in ) :: f_degree ( 2 ) integer , intent ( in ) :: nc ( 2 ) integer , intent ( in ) :: f_ng ( 2 ) real ( rk ), allocatable , intent ( out ) :: f_dTgc (:,:,:) real ( rk ), allocatable , intent ( out ) :: f_Tgc (:,:) end subroutine pure subroutine compute_dTgc_nurbs_2d_scalar ( f_Xt , f_knot1 , f_knot2 , f_degree , f_nc , f_Wc , f_dTgc , f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:) integer , intent ( in ) :: f_degree ( 2 ) integer , intent ( in ) :: f_nc ( 2 ) real ( rk ), intent ( in ), contiguous :: f_Wc (:) real ( rk ), allocatable , intent ( out ) :: f_dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: f_Tgc (:) end subroutine pure subroutine compute_dTgc_bspline_2d_scalar ( f_Xt , f_knot1 , f_knot2 , f_degree , nc , f_dTgc , f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:) integer , intent ( in ) :: f_degree ( 2 ) integer , intent ( in ) :: nc ( 2 ) real ( rk ), allocatable , intent ( out ) :: f_dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: f_Tgc (:) end subroutine end interface interface compute_d2Tgc pure subroutine compute_d2Tgc_nurbs_2d_vector ( f_Xt , f_knot1 , f_knot2 , f_degree , f_nc , f_ng , f_Wc , f_d2Tgc , f_dTgc , f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:,:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:) integer , intent ( in ) :: f_degree ( 2 ) integer , intent ( in ) :: f_nc ( 2 ) integer , intent ( in ) :: f_ng ( 2 ) real ( rk ), intent ( in ), contiguous :: f_Wc (:) real ( rk ), allocatable , intent ( out ) :: f_d2Tgc (:,:,:) real ( rk ), allocatable , intent ( out ) :: f_dTgc (:,:,:) real ( rk ), allocatable , intent ( out ) :: f_Tgc (:,:) end subroutine pure subroutine compute_d2Tgc_bspline_2d_vector ( f_Xt , f_knot1 , f_knot2 , f_degree , nc , f_ng , f_d2Tgc , f_dTgc , f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:,:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:) integer , intent ( in ) :: f_degree ( 2 ) integer , intent ( in ) :: nc ( 2 ) integer , intent ( in ) :: f_ng ( 2 ) real ( rk ), allocatable , intent ( out ) :: f_d2Tgc (:,:,:) real ( rk ), allocatable , intent ( out ) :: f_dTgc (:,:,:) real ( rk ), allocatable , intent ( out ) :: f_Tgc (:,:) end subroutine pure subroutine compute_d2Tgc_nurbs_2d_scalar ( f_Xt , f_knot1 , f_knot2 , f_degree , f_nc , f_Wc , f_d2Tgc , f_dTgc , f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:) integer , intent ( in ) :: f_degree ( 2 ) integer , intent ( in ) :: f_nc ( 2 ) real ( rk ), intent ( in ), contiguous :: f_Wc (:) real ( rk ), allocatable , intent ( out ) :: f_d2Tgc (:,:) real ( rk ), allocatable , intent ( out ) :: f_dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: f_Tgc (:) end subroutine pure subroutine compute_d2Tgc_bspline_2d_scalar ( f_Xt , f_knot1 , f_knot2 , f_degree , nc , f_d2Tgc , f_dTgc , f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:) integer , intent ( in ) :: f_degree ( 2 ) integer , intent ( in ) :: nc ( 2 ) real ( rk ), allocatable , intent ( out ) :: f_d2Tgc (:,:) real ( rk ), allocatable , intent ( out ) :: f_dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: f_Tgc (:) end subroutine end interface interface compute_Tgc pure function compute_Tgc_nurbs_2d_vector ( f_Xt , f_knot1 , f_knot2 , f_degree , f_nc , f_ng , f_Wc ) result ( f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:,:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:) integer , intent ( in ) :: f_degree ( 2 ) integer , intent ( in ) :: f_nc ( 2 ) integer , intent ( in ) :: f_ng ( 2 ) real ( rk ), intent ( in ), contiguous :: f_Wc (:) real ( rk ), allocatable :: f_Tgc (:,:) end function pure function compute_Tgc_bspline_2d_vector ( f_Xt , f_knot1 , f_knot2 , f_degree , f_nc , f_ng ) result ( f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:,:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:) integer , intent ( in ) :: f_degree ( 2 ) integer , intent ( in ) :: f_nc ( 2 ) integer , intent ( in ) :: f_ng ( 2 ) real ( rk ), allocatable :: f_Tgc (:,:) end function pure function compute_Tgc_nurbs_2d_scalar ( f_Xt , f_knot1 , f_knot2 , f_degree , f_nc , f_Wc ) result ( f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:) integer , intent ( in ) :: f_degree ( 2 ) integer , intent ( in ) :: f_nc ( 2 ) real ( rk ), intent ( in ), contiguous :: f_Wc (:) real ( rk ), allocatable :: f_Tgc (:) end function pure function compute_Tgc_bspline_2d_scalar ( f_Xt , f_knot1 , f_knot2 , f_degree , f_nc ) result ( f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:) real ( rk ), intent ( in ), contiguous :: f_knot1 (:), f_knot2 (:) integer , intent ( in ) :: f_degree ( 2 ) integer , intent ( in ) :: f_nc ( 2 ) real ( rk ), allocatable :: f_Tgc (:) end function end interface interface pure function nearest_point_help_2d ( f_ng , f_Xg , f_point_Xg ) result ( f_distances ) import :: rk integer , intent ( in ) :: f_ng ( 2 ) real ( rk ), intent ( in ), contiguous :: f_Xg (:,:) real ( rk ), intent ( in ), contiguous :: f_point_Xg (:) real ( rk ), allocatable :: f_distances (:) end function end interface contains !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Set knot vectors, 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 ), contiguous :: knot1 (:) real ( rk ), intent ( in ), contiguous :: knot2 (:) real ( rk ), intent ( in ), contiguous :: Xc (:,:) real ( rk ), intent ( in ), contiguous , optional :: Wc (:) if ( allocated ( this % knot1 )) deallocate ( this % knot1 ) if ( allocated ( this % knot2 )) deallocate ( this % knot2 ) if ( allocated ( this % Xc )) deallocate ( this % Xc ) this % knot1 = knot1 this % knot2 = knot2 call this % cmp_degree () call this % cmp_nc () this % Xc = Xc if ( present ( Wc )) then if ( size ( Wc ) /= this % nc ( 1 ) * this % nc ( 2 )) then error stop 'Number of weights does not match the number of control points.' else if ( allocated ( this % Wc )) deallocate ( this % Wc ) this % Wc = Wc end if end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Set NURBS surface using nodes of parameter space, degree, continuity, control points and weights pure subroutine set2 ( this , Xth_dir1 , Xth_dir2 , degree , continuity1 , continuity2 , Xc , Wc ) class ( nurbs_surface ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: Xth_dir1 (:), Xth_dir2 (:) integer , intent ( in ), contiguous :: degree (:) integer , intent ( in ), contiguous :: continuity1 (:), continuity2 (:) real ( rk ), intent ( in ), contiguous :: Xc (:,:) real ( rk ), intent ( in ), contiguous , optional :: Wc (:) this % knot1 = compute_knot_vector ( Xth_dir1 , degree ( 1 ), continuity1 ) this % knot2 = compute_knot_vector ( Xth_dir2 , degree ( 2 ), continuity2 ) this % degree ( 1 ) = degree ( 1 ) this % degree ( 2 ) = degree ( 2 ) call this % cmp_nc () this % Xc = Xc if ( present ( Wc )) this % Wc = Wc end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Set Bezier or Rational Bezier surface using control points and weights. pure subroutine set3 ( this , nc , Xc , Wc ) class ( nurbs_surface ), intent ( inout ) :: this integer , intent ( in ), contiguous :: nc (:) real ( rk ), intent ( in ), contiguous :: Xc (:,:) real ( rk ), intent ( in ), contiguous , optional :: Wc (:) if ( allocated ( this % Xc )) deallocate ( this % Xc ) this % Xc = Xc this % nc = nc if ( allocated ( this % knot1 )) deallocate ( this % knot1 ) allocate ( this % knot1 ( 2 * this % nc ( 1 ))) this % knot1 ( 1 : this % nc ( 1 )) = 0.0_rk this % knot1 ( this % nc ( 1 ) + 1 : 2 * this % nc ( 1 )) = 1.0_rk if ( allocated ( this % knot2 )) deallocate ( this % knot2 ) allocate ( this % knot2 ( 2 * this % nc ( 2 ))) this % knot2 ( 1 : this % nc ( 2 )) = 0.0_rk this % knot2 ( this % nc ( 2 ) + 1 : 2 * this % nc ( 2 )) = 1.0_rk call this % cmp_degree () if ( present ( Wc )) then if ( size ( Wc ) /= this % nc ( 1 ) * this % nc ( 2 )) then error stop 'Number of weights does not match the number of control points.' else if ( allocated ( this % Wc )) deallocate ( this % Wc ) this % Wc = Wc end if end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine create ( this , res1 , res2 , Xt1 , Xt2 , Xt ) class ( nurbs_surface ), intent ( inout ) :: this integer , intent ( in ), optional :: res1 , res2 real ( rk ), intent ( in ), contiguous , optional :: Xt1 (:), Xt2 (:) real ( rk ), contiguous , intent ( in ), optional :: Xt (:,:) integer :: i ! check if (. not . allocated ( this % Xc )) then error stop 'Control points are not set.' end if if (. not . allocated ( this % knot1 ) . or . . not . allocated ( this % knot2 )) then error stop 'Knot vector(s) is/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 if ( present ( Xt )) then this % Xt = Xt else ! 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 , this % Xt ) end if if ( allocated ( this % Xg )) deallocate ( this % Xg ) if ( this % is_rational ()) then ! NURBS this % Xg = compute_Xg (& this % Xt , this % knot1 , this % knot2 , this % degree , this % nc , this % ng , this % Xc , this % Wc ) else ! B-Spline this % Xg = compute_Xg (& this % Xt , this % knot1 , this % knot2 , this % degree , this % nc , this % ng , this % Xc ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function cmp_Xg ( this , Xt ) result ( Xg ) class ( nurbs_surface ), intent ( in ) :: this real ( rk ), contiguous , intent ( in ) :: Xt (:) real ( rk ), allocatable :: Xg (:) ! check if (. not . allocated ( this % Xc )) then error stop 'Control points are not set.' end if if (. not . allocated ( this % knot1 ) . or . . not . allocated ( this % knot2 )) then error stop 'Knot vector(s) is/are not set.' end if if ( this % is_rational ()) then ! NURBS Xg = compute_Xg ( Xt , this % knot1 , this % knot2 , this % degree , this % nc , this % Xc , this % Wc ) else ! B-Spline Xg = compute_Xg ( Xt , this % knot1 , this % knot2 , this % degree , this % nc , this % Xc ) end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xc_all ( 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_Xci ( this , n ) result ( Xc ) class ( nurbs_surface ), intent ( in ) :: this integer , intent ( in ) :: n real ( rk ), allocatable :: Xc (:) if ( allocated ( this % Xc )) then if ( n < lbound ( this % Xc , 1 ) . or . n > ubound ( this % Xc , 1 )) then error stop 'Invalid index for control points.' end if Xc = this % Xc ( n ,:) else error stop 'Control points are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xcid ( this , n , dir ) result ( Xc ) class ( nurbs_surface ), intent ( in ) :: this integer , intent ( in ) :: n integer , intent ( in ) :: dir real ( rk ) :: Xc if ( allocated ( this % Xc )) then if ( n < lbound ( this % Xc , 1 ) . or . n > ubound ( this % Xc , 1 )) then error stop 'Invalid index for control points.' end if if ( dir < lbound ( this % Xc , 2 ) . or . dir > ubound ( this % Xc , 2 )) then error stop 'Invalid direction for control points.' end if Xc = this % Xc ( n , dir ) else error stop 'Control points are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xg_all ( 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_Xgi ( this , n ) result ( Xg ) class ( nurbs_surface ), intent ( in ) :: this integer , intent ( in ) :: n real ( rk ), allocatable :: Xg (:) if ( allocated ( this % Xg )) then if ( n < lbound ( this % Xg , 1 ) . or . n > ubound ( this % Xg , 1 )) then error stop 'Invalid index for geometry points.' end if Xg = this % Xg ( n ,:) else error stop 'Control points are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xgid ( this , n , dir ) result ( Xg ) class ( nurbs_surface ), intent ( in ) :: this integer , intent ( in ) :: n integer , intent ( in ) :: dir real ( rk ) :: Xg if ( allocated ( this % Xg )) then if ( n < lbound ( this % Xg , 1 ) . or . n > ubound ( this % Xg , 1 )) then error stop 'Invalid index for geometry points.' end if if ( dir < lbound ( this % Xg , 2 ) . or . dir > ubound ( this % Xg , 2 )) then error stop 'Invalid direction for geometry points.' end if Xg = this % Xg ( n , dir ) else error stop 'Control points are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Wc_all ( 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 NURBS surface is not rational or weights are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Wci ( this , n ) result ( Wc ) class ( nurbs_surface ), intent ( in ) :: this integer , intent ( in ) :: n real ( rk ) :: Wc if ( allocated ( this % Wc )) then if ( n < lbound ( this % Wc , 1 ) . or . n > ubound ( this % Wc , 1 )) then error stop 'Invalid index for weights.' end if Wc = this % Wc ( n ) else error stop 'The NURBS surface is not rational or weights are not set.' 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 subroutine cmp_degree ( this , dir ) class ( nurbs_surface ), intent ( inout ) :: this integer , intent ( in ), optional :: dir integer , allocatable :: m1 (:), m2 (:) if ( present ( dir )) then if ( dir == 1 ) then m1 = this % get_multiplicity ( 1 ) this % degree ( 1 ) = m1 ( 1 ) - 1 else if ( dir == 2 ) then m2 = this % get_multiplicity ( 2 ) this % degree ( 2 ) = m2 ( 1 ) - 1 else error stop 'Invalid direction for degree.' end if else m1 = this % get_multiplicity ( 1 ) this % degree ( 1 ) = m1 ( 1 ) - 1 m2 = this % get_multiplicity ( 2 ) this % degree ( 2 ) = m2 ( 1 ) - 1 end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_degree_all ( this ) result ( degree ) class ( nurbs_surface ), intent ( in ) :: this integer :: degree ( 2 ) degree = this % degree end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_degree_dir ( this , dir ) result ( degree ) class ( nurbs_surface ), intent ( in ) :: this integer , intent ( in ) :: dir integer :: degree if ( dir == 1 ) then degree = this % degree ( 1 ) else if ( dir == 2 ) then degree = this % degree ( 2 ) else error stop 'Invalid direction for degree.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_knot_all ( 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 function get_knoti ( this , dir , i ) result ( knot ) class ( nurbs_surface ), intent ( in ) :: this integer , intent ( in ) :: dir integer , intent ( in ) :: i real ( rk ) :: knot if ( dir == 1 ) then if ( allocated ( this % knot1 )) then if ( i < 1 . or . i > size ( this % knot1 )) then error stop 'Invalid index for knot vector.' else knot = this % knot1 ( i ) end if else error stop 'Knot vector is not set.' end if elseif ( dir == 2 ) then if ( allocated ( this % knot2 )) then if ( i < 1 . or . i > size ( this % knot2 )) then error stop 'Invalid index for knot vector.' else knot = this % knot2 ( i ) end if 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 % Xt )) deallocate ( this % Xt ) if ( allocated ( this % knot1 )) deallocate ( this % knot1 ) if ( allocated ( this % knot2 )) deallocate ( this % knot2 ) if ( allocated ( this % elemConn_Xc_vis )) deallocate ( this % elemConn_Xc_vis ) if ( allocated ( this % elemConn_Xg_vis )) deallocate ( this % elemConn_Xg_vis ) if ( allocated ( this % elemConn )) deallocate ( this % elemConn ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function cmp_elem_Xc_vis ( this , p ) result ( elemConn ) class ( nurbs_surface ), intent ( in ) :: this integer , allocatable :: elemConn (:,:) integer , intent ( in ), contiguous , 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 function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function cmp_elem_Xg_vis ( this , p ) result ( elemConn ) class ( nurbs_surface ), intent ( in ) :: this integer , allocatable :: elemConn (:,:) integer , intent ( in ), contiguous , 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 function !=============================================================================== !=============================================================================== !> 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 , nc , nunit integer , allocatable :: elemConn (:,:) ! check if (. not . allocated ( this % Xc )) then error stop 'Control points are not set.' end if if (. not . allocated ( this % elemConn_Xc_vis )) then elemConn = this % cmp_elem_Xc_vis () else elemConn = this % elemConn_Xc_vis end if nc = size ( this % Xc , 1 ) open ( newunit = nunit , file = filename , action = 'write' ) write ( nunit , '(a)' ) '# vtk DataFile Version 2.0' write ( nunit , '(a)' ) 'Generated by ForCAD' write ( nunit , '(a)' ) 'ASCII' write ( nunit , '(a)' ) 'DATASET UNSTRUCTURED_GRID' write ( nunit , '(a,\" \",g0,\" \",a)' ) 'POINTS' , nc , 'double' if ( size ( this % Xc , 2 ) == 2 ) then write ( nunit , '(g0,\" \",g0,\" \",g0)' ) ( this % Xc ( i , 1 ), this % Xc ( i , 2 ), 0.0_rk , i = 1 , nc ) elseif ( size ( this % Xc , 2 ) == 3 ) then write ( nunit , '(g0,\" \",g0,\" \",g0)' ) ( this % Xc ( i , 1 ), this % Xc ( i , 2 ), this % Xc ( i , 3 ) , i = 1 , nc ) else error stop 'Invalid dimension for control points.' end if write ( nunit , '(a,\" \",g0,\" \",g0)' ) 'CELLS' , size ( elemConn , 1 ), size ( elemConn , 1 ) * ( size ( elemConn , 2 ) + 1 ) write ( nunit , '(g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0)' )& ( 4 , elemConn ( i , 1 ) - 1 , elemConn ( i , 2 ) - 1 , elemConn ( i , 4 ) - 1 , elemConn ( i , 3 ) - 1 , 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 , ng , nunit integer , allocatable :: elemConn (:,:) ! check if (. not . allocated ( this % Xg )) then error stop 'Geometry points are not set.' end if if (. not . allocated ( this % elemConn_Xg_vis )) then elemConn = this % cmp_elem_Xg_vis () else elemConn = this % elemConn_Xg_vis end if ng = size ( this % Xg , 1 ) open ( newunit = nunit , file = filename , action = 'write' ) write ( nunit , '(a)' ) '# vtk DataFile Version 2.0' write ( nunit , '(a)' ) 'Generated by ForCAD' write ( nunit , '(a)' ) 'ASCII' write ( nunit , '(a)' ) 'DATASET UNSTRUCTURED_GRID' write ( nunit , '(a,\" \",g0,\" \",a)' ) 'POINTS' , ng , 'double' if ( size ( this % Xg , 2 ) == 2 ) then write ( nunit , '(g0,\" \",g0,\" \",g0)' ) ( this % Xg ( i , 1 ), this % Xg ( i , 2 ), 0.0_rk , i = 1 , ng ) elseif ( size ( this % Xg , 2 ) == 3 ) then write ( nunit , '(g0,\" \",g0,\" \",g0)' ) ( this % Xg ( i , 1 ), this % Xg ( i , 2 ), this % Xg ( i , 3 ) , i = 1 , ng ) else error stop 'Invalid dimension for geometry points.' end if write ( nunit , '(a,\" \",g0,\" \",g0)' ) 'CELLS' , size ( elemConn , 1 ), size ( elemConn , 1 ) * ( size ( elemConn , 2 ) + 1 ) write ( nunit , '(g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0)' )& ( 4 , elemConn ( i , 1 ) - 1 , elemConn ( i , 2 ) - 1 , elemConn ( i , 4 ) - 1 , elemConn ( i , 3 ) - 1 , 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 if ( allocated ( this % Wc )) then call this % set ( knot1 = this % get_knot ( 1 ), knot2 = this % get_knot ( 2 ), Xc = this % get_Xc (), Wc = this % get_Wc ()) else call this % set ( knot1 = this % get_knot ( 1 ), knot2 = this % get_knot ( 2 ), Xc = this % get_Xc ()) end if 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 if ( allocated ( this % knot1 ) . and . allocated ( this % knot2 )) then call this % set ( knot1 = this % get_knot ( 1 ), knot2 = this % get_knot ( 2 ), Xc = this % get_Xc (), Wc = this % get_Wc ()) else call this % set ( nc = this % nc , Xc = this % get_Xc (), Wc = this % get_Wc ()) end if 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 % degree ( 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 % degree ( 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 subroutine cmp_nc ( this , dir ) class ( nurbs_surface ), intent ( inout ) :: this integer , intent ( in ), optional :: dir if ( present ( dir )) then if ( dir == 1 ) then ! check if (. not . allocated ( this % knot1 )) then error stop 'Knot vector is not set.' else this % nc ( 1 ) = sum ( compute_multiplicity ( this % knot1 )) - this % degree ( 1 ) - 1 end if elseif ( dir == 2 ) then ! check if (. not . allocated ( this % knot2 )) then error stop 'Knot vector is not set.' else this % nc ( 2 ) = sum ( compute_multiplicity ( this % knot2 )) - this % degree ( 2 ) - 1 end if else error stop 'Invalid direction.' end if else ! check if (. not . allocated ( this % knot1 )) then error stop 'Knot vector is not set.' else this % nc ( 1 ) = sum ( compute_multiplicity ( this % knot1 )) - this % degree ( 1 ) - 1 end if ! check if (. not . allocated ( this % knot2 )) then error stop 'Knot vector is not set.' else this % nc ( 2 ) = sum ( compute_multiplicity ( this % knot2 )) - this % degree ( 2 ) - 1 end if end if end subroutine !=============================================================================== !=============================================================================== !> 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 % degree ( 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 % degree ( 2 ) - 1 end if else error stop 'Invalid direction.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine derivative_vector ( this , res1 , res2 , Xt1 , Xt2 , dTgc , Tgc ) class ( nurbs_surface ), intent ( inout ) :: this integer , intent ( in ), optional :: res1 , res2 real ( rk ), intent ( in ), contiguous , optional :: Xt1 (:), Xt2 (:) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:,:) real ( rk ), allocatable , intent ( out ), optional :: Tgc (:,:) integer :: i real ( rk ), allocatable :: Xt (:,:) ! 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 ( this % is_rational ()) then ! NURBS call compute_dTgc ( Xt , this % knot1 , this % knot2 , this % degree , this % nc , this % ng , this % Wc , dTgc , Tgc ) else ! B-Spline call compute_dTgc ( Xt , this % knot1 , this % knot2 , this % degree , this % nc , this % ng , dTgc , Tgc ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine derivative_scalar ( this , Xt , dTgc , Tgc ) class ( nurbs_surface ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:) real ( rk ), allocatable , intent ( out ), optional :: Tgc (:) if ( this % is_rational ()) then ! NURBS call compute_dTgc ( Xt , this % knot1 , this % knot2 , this % degree , this % nc , this % Wc , dTgc , Tgc ) else ! B-Spline call compute_dTgc ( Xt , this % knot1 , this % knot2 , this % degree , this % nc , dTgc , Tgc ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine derivative2_vector ( this , res1 , res2 , Xt1 , Xt2 , d2Tgc , dTgc , Tgc ) class ( nurbs_surface ), intent ( inout ) :: this integer , intent ( in ), optional :: res1 , res2 real ( rk ), intent ( in ), contiguous , optional :: Xt1 (:), Xt2 (:) real ( rk ), allocatable , intent ( out ) :: d2Tgc (:,:,:) real ( rk ), allocatable , intent ( out ), optional :: dTgc (:,:,:) real ( rk ), allocatable , intent ( out ), optional :: Tgc (:,:) integer :: i real ( rk ), allocatable :: Xt (:,:) ! 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 ( this % is_rational ()) then ! NURBS call compute_d2Tgc ( Xt , this % knot1 , this % knot2 , this % degree , this % nc , this % ng , this % Wc , d2Tgc , dTgc , Tgc ) else ! B-Spline call compute_d2Tgc ( Xt , this % knot1 , this % knot2 , this % degree , this % nc , this % ng , d2Tgc , dTgc , Tgc ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine derivative2_scalar ( this , Xt , d2Tgc , dTgc , Tgc ) class ( nurbs_surface ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), allocatable , intent ( out ) :: d2Tgc (:,:) real ( rk ), allocatable , intent ( out ), optional :: dTgc (:,:) real ( rk ), allocatable , intent ( out ), optional :: Tgc (:) if ( this % is_rational ()) then ! NURBS call compute_d2Tgc ( Xt , this % knot1 , this % knot2 , this % degree , this % nc , this % Wc , d2Tgc , dTgc , Tgc ) else ! B-Spline call compute_d2Tgc ( Xt , this % knot1 , this % knot2 , this % degree , this % nc , d2Tgc , dTgc , Tgc ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine basis_vector ( this , res1 , res2 , Xt1 , Xt2 , Tgc ) class ( nurbs_surface ), intent ( inout ) :: this integer , intent ( in ), optional :: res1 , res2 real ( rk ), intent ( in ), contiguous , optional :: Xt1 (:), Xt2 (:) real ( rk ), allocatable , intent ( out ) :: Tgc (:,:) integer :: i real ( rk ), allocatable :: Xt (:,:) ! 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 ( this % is_rational ()) then ! NURBS Tgc = compute_Tgc ( Xt , this % knot1 , this % knot2 , this % degree , this % nc , this % ng , this % Wc ) else ! B-Spline Tgc = compute_Tgc ( Xt , this % knot1 , this % knot2 , this % degree , this % nc , this % ng ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine basis_scalar ( this , Xt , Tgc ) class ( nurbs_surface ), intent ( inout ) :: this real ( rk ), intent ( in ) :: Xt (:) real ( rk ), allocatable , intent ( out ) :: Tgc (:) if ( this % is_rational ()) then ! NURBS Tgc = compute_Tgc ( Xt , this % knot1 , this % knot2 , this % degree , this % nc , this % Wc ) else ! B-Spline Tgc = compute_Tgc ( Xt , this % knot1 , this % knot2 , this % degree , this % nc ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine insert_knots ( this , dir , Xth , r ) class ( nurbs_surface ), intent ( inout ) :: this integer , intent ( in ) :: dir real ( rk ), intent ( in ), contiguous :: Xth (:) integer , intent ( in ), contiguous :: r (:) integer :: k , i , s , dim , j , n_new real ( rk ), allocatable :: Xc (:,:), Xcw (:,:), Xcw_new (:,:), Xc_new (:,:), Wc_new (:), knot_new (:) real ( rk ), allocatable :: Xc3 (:,:,:) if ( dir == 1 ) then ! direction 1 if ( this % is_rational ()) then ! NURBS do i = 1 , size ( Xth ) k = findspan ( this % nc ( 1 ) - 1 , this % degree ( 1 ), Xth ( i ), this % knot1 ) if ( this % knot1 ( k + 1 ) == Xth ( i )) then s = compute_multiplicity ( this % knot1 , Xth ( i )) else s = 0 end if dim = size ( this % Xc , 2 ) allocate ( Xcw ( size ( this % Xc , 1 ), dim + 1 )) do j = 1 , size ( this % Xc , 1 ) Xcw ( j , 1 : dim ) = this % Xc ( j , 1 : dim ) * this % Wc ( j ) end do Xcw (:, dim + 1 ) = this % Wc (:) Xcw = reshape ( Xcw ,[ this % nc ( 1 ), this % nc ( 2 ) * ( dim + 1 )]) call insert_knot_A_5_1 (& this % degree ( 1 ),& this % knot1 ,& Xcw ,& Xth ( i ),& k ,& s ,& r ( i ),& n_new ,& knot_new ,& Xcw_new ) Xcw_new = reshape ( Xcw_new ,[ this % nc ( 2 ) * ( n_new + 1 ), dim + 1 ]) allocate ( Xc_new ( 1 : this % nc ( 2 ) * ( n_new + 1 ), 1 : dim )) allocate ( Wc_new ( 1 : this % nc ( 2 ) * ( n_new + 1 ))) do j = 1 , this % nc ( 2 ) * ( n_new + 1 ) Xc_new ( j , 1 : dim ) = Xcw_new ( j , 1 : dim ) / Xcw_new ( j , dim + 1 ) end do Wc_new (:) = Xcw_new (:, dim + 1 ) call this % set ( knot1 = knot_new , knot2 = this % get_knot ( 2 ), Xc = Xc_new , Wc = Wc_new ) deallocate ( Xcw , Xcw_new , Xc_new , Wc_new ) end do else ! B-Spline do i = 1 , size ( Xth ) k = findspan ( this % nc ( 1 ) - 1 , this % degree ( 1 ), Xth ( i ), this % knot1 ) if ( this % knot1 ( k + 1 ) == Xth ( i )) then s = compute_multiplicity ( this % knot1 , Xth ( i )) else s = 0 end if dim = size ( this % Xc , 2 ) Xc = reshape ( this % Xc ,[ this % nc ( 1 ), this % nc ( 2 ) * dim ]) call insert_knot_A_5_1 (& this % degree ( 1 ),& this % knot1 ,& Xc ,& Xth ( i ),& k ,& s ,& r ( i ),& n_new ,& knot_new ,& Xc_new ) Xc_new = reshape ( Xc_new ,[( this % nc ( 2 )) * ( n_new + 1 ), dim ]) call this % set ( knot1 = knot_new , knot2 = this % get_knot ( 2 ), Xc = Xc_new ) end do end if elseif ( dir == 2 ) then ! direction 2 if ( this % is_rational ()) then ! NURBS do i = 1 , size ( Xth ) k = findspan ( this % nc ( 2 ) - 1 , this % degree ( 2 ), Xth ( i ), this % knot2 ) if ( this % knot2 ( k + 1 ) == Xth ( i )) then s = compute_multiplicity ( this % knot2 , Xth ( i )) else s = 0 end if dim = size ( this % Xc , 2 ) allocate ( Xcw ( size ( this % Xc , 1 ), dim + 1 )) do j = 1 , size ( this % Xc , 1 ) Xcw ( j , 1 : dim ) = this % Xc ( j , 1 : dim ) * this % Wc ( j ) end do Xcw (:, dim + 1 ) = this % Wc (:) Xc3 = reshape ( Xcw , [ this % nc ( 1 ), this % nc ( 2 ), dim + 1 ]) Xc3 = reshape ( Xc3 , [ this % nc ( 2 ), this % nc ( 1 ), dim + 1 ], order = [ 2 , 1 , 3 ]) Xcw = reshape ( Xc3 ,[ this % nc ( 2 ), this % nc ( 1 ) * ( dim + 1 )]) call insert_knot_A_5_1 (& this % degree ( 2 ),& this % knot2 ,& Xcw ,& Xth ( i ),& k ,& s ,& r ( i ),& n_new ,& knot_new ,& Xcw_new ) Xc3 = reshape ( Xcw_new , [ n_new + 1 , this % nc ( 1 ), dim + 1 ]) Xc3 = reshape ( Xc3 , [ this % nc ( 1 ), n_new + 1 , dim + 1 ], order = [ 2 , 1 , 3 ]) Xcw_new = reshape ( Xc3 ,[( this % nc ( 1 )) * ( n_new + 1 ), dim + 1 ]) allocate ( Xc_new ( 1 :( n_new + 1 ) * this % nc ( 1 ), 1 : dim )) allocate ( Wc_new ( 1 :( n_new + 1 ) * this % nc ( 1 ))) do j = 1 , ( n_new + 1 ) * this % nc ( 1 ) Xc_new ( j , 1 : dim ) = Xcw_new ( j , 1 : dim ) / Xcw_new ( j , dim + 1 ) end do Wc_new (:) = Xcw_new (:, dim + 1 ) call this % set ( knot1 = this % get_knot ( 1 ), knot2 = knot_new , Xc = Xc_new , Wc = Wc_new ) deallocate ( Xcw , Xcw_new , Xc_new , Wc_new ) end do else ! B-Spline do i = 1 , size ( Xth ) k = findspan ( this % nc ( 2 ) - 1 , this % degree ( 2 ), Xth ( i ), this % knot2 ) if ( this % knot2 ( k + 1 ) == Xth ( i )) then s = compute_multiplicity ( this % knot2 , Xth ( i )) else s = 0 end if dim = size ( this % Xc , 2 ) Xc3 = reshape ( this % Xc , [ this % nc ( 1 ), this % nc ( 2 ), dim ]) Xc3 = reshape ( Xc3 , [ this % nc ( 2 ), this % nc ( 1 ), dim ], order = [ 2 , 1 , 3 ]) Xc = reshape ( Xc3 ,[ this % nc ( 2 ), this % nc ( 1 ) * dim ]) call insert_knot_A_5_1 (& this % degree ( 2 ),& this % knot2 ,& Xc ,& Xth ( i ),& k ,& s ,& r ( i ),& n_new ,& knot_new ,& Xc_new ) Xc3 = reshape ( Xc_new , [ n_new + 1 , this % nc ( 1 ), dim ]) Xc3 = reshape ( Xc3 , [ this % nc ( 1 ), n_new + 1 , dim ], order = [ 2 , 1 , 3 ]) Xc_new = reshape ( Xc3 ,[( this % nc ( 1 )) * ( n_new + 1 ), dim ]) call this % set ( knot1 = this % get_knot ( 1 ), knot2 = knot_new , Xc = Xc_new ) end do end if else error stop 'Invalid direction.' end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine elevate_degree ( this , dir , t ) class ( nurbs_surface ), intent ( inout ) :: this integer , intent ( in ) :: dir integer , intent ( in ) :: t real ( rk ), allocatable :: Xc (:,:), Xcw (:,:), Xcw_new (:,:), knot_new (:), Xc_new (:,:), Wc_new (:) integer :: dim , j , nc_new real ( rk ), allocatable :: Xc3 (:,:,:) if ( dir == 1 ) then ! direction 1 if ( this % is_rational ()) then ! NURBS dim = size ( this % Xc , 2 ) allocate ( Xcw ( size ( this % Xc , 1 ), dim + 1 )) do j = 1 , size ( this % Xc , 1 ) Xcw ( j , 1 : dim ) = this % Xc ( j , 1 : dim ) * this % Wc ( j ) end do Xcw (:, dim + 1 ) = this % Wc (:) Xcw = reshape ( Xcw ,[ this % nc ( 1 ), this % nc ( 2 ) * ( dim + 1 )], order = [ 1 , 2 ]) call elevate_degree_A_5_9 ( t , this % knot1 , this % degree ( 1 ), Xcw , nc_new , knot_new , Xcw_new ) Xcw_new = reshape ( Xcw_new ,[ this % nc ( 2 ) * nc_new , dim + 1 ], order = [ 1 , 2 ]) allocate ( Xc_new ( 1 : this % nc ( 2 ) * nc_new , 1 : dim )) allocate ( Wc_new ( 1 : this % nc ( 2 ) * nc_new )) do j = 1 , this % nc ( 2 ) * nc_new Xc_new ( j , 1 : dim ) = Xcw_new ( j , 1 : dim ) / Xcw_new ( j , dim + 1 ) end do Wc_new (:) = Xcw_new (:, dim + 1 ) call this % set ( knot1 = knot_new , knot2 = this % get_knot ( 2 ), Xc = Xc_new , Wc = Wc_new ) deallocate ( Xcw , Xcw_new , Xc_new , Wc_new ) else ! B-Spline dim = size ( this % Xc , 2 ) Xc = reshape ( this % Xc ,[ this % nc ( 1 ), this % nc ( 2 ) * ( dim )], order = [ 1 , 2 ]) call elevate_degree_A_5_9 ( t , this % knot1 , this % degree ( 1 ), Xc , nc_new , knot_new , Xc_new ) Xc_new = reshape ( Xc_new ,[ this % nc ( 2 ) * nc_new , dim ], order = [ 1 , 2 ]) call this % set ( knot1 = knot_new , knot2 = this % get_knot ( 2 ), Xc = Xc_new ) deallocate ( Xc , Xc_new ) end if elseif ( dir == 2 ) then ! direction 2 if ( this % is_rational ()) then ! NURBS dim = size ( this % Xc , 2 ) allocate ( Xcw ( size ( this % Xc , 1 ), dim + 1 )) do j = 1 , size ( this % Xc , 1 ) Xcw ( j , 1 : dim ) = this % Xc ( j , 1 : dim ) * this % Wc ( j ) end do Xcw (:, dim + 1 ) = this % Wc (:) Xc3 = reshape ( Xcw , [ this % nc ( 1 ), this % nc ( 2 ), dim + 1 ]) Xc3 = reshape ( Xc3 , [ this % nc ( 2 ), this % nc ( 1 ), dim + 1 ], order = [ 2 , 1 , 3 ]) Xcw = reshape ( Xc3 ,[ this % nc ( 2 ), this % nc ( 1 ) * ( dim + 1 )]) call elevate_degree_A_5_9 ( t , this % knot2 , this % degree ( 2 ), Xcw , nc_new , knot_new , Xcw_new ) Xc3 = reshape ( Xcw_new , [ nc_new , this % nc ( 1 ), dim + 1 ]) Xc3 = reshape ( Xc3 , [ this % nc ( 1 ), nc_new , dim + 1 ], order = [ 2 , 1 , 3 ]) Xcw_new = reshape ( Xc3 ,[( this % nc ( 1 )) * nc_new , dim + 1 ]) allocate ( Xc_new ( 1 : nc_new * this % nc ( 1 ), 1 : dim )) allocate ( Wc_new ( 1 : nc_new * this % nc ( 1 ))) do j = 1 , nc_new * this % nc ( 1 ) Xc_new ( j , 1 : dim ) = Xcw_new ( j , 1 : dim ) / Xcw_new ( j , dim + 1 ) end do Wc_new (:) = Xcw_new (:, dim + 1 ) call this % set ( knot1 = this % get_knot ( 1 ), knot2 = knot_new , Xc = Xc_new , Wc = Wc_new ) deallocate ( Xcw , Xcw_new , Xc_new , Wc_new ) else ! B-Spline dim = size ( this % Xc , 2 ) Xc3 = reshape ( this % Xc , [ this % nc ( 1 ), this % nc ( 2 ), dim ]) Xc3 = reshape ( Xc3 , [ this % nc ( 2 ), this % nc ( 1 ), dim ], order = [ 2 , 1 , 3 ]) Xc = reshape ( Xc3 ,[ this % nc ( 2 ), this % nc ( 1 ) * dim ]) call elevate_degree_A_5_9 ( t , this % knot2 , this % degree ( 2 ), Xc , nc_new , knot_new , Xc_new ) Xc3 = reshape ( Xc_new , [ nc_new , this % nc ( 1 ), dim ]) Xc3 = reshape ( Xc3 , [ this % nc ( 1 ), nc_new , dim ], order = [ 2 , 1 , 3 ]) Xc_new = reshape ( Xc3 ,[( this % nc ( 1 )) * nc_new , dim ]) call this % set ( knot1 = this % get_knot ( 1 ), knot2 = knot_new , Xc = Xc_new ) end if else error stop 'Invalid direction.' end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function is_rational ( this ) result ( r ) class ( nurbs_surface ), intent ( in ) :: this logical :: r r = . false . if ( allocated ( this % Wc )) then if ( any ( this % Wc /= this % Wc ( 1 ))) then r = . true . end if end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine set_elem_Xc_vis ( this , elemConn ) class ( nurbs_surface ), intent ( inout ) :: this integer , intent ( in ), contiguous :: elemConn (:,:) if ( allocated ( this % elemConn_Xc_vis )) deallocate ( this % elemConn_Xc_vis ) this % elemConn_Xc_vis = elemConn end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine set_elem_Xg_vis ( this , elemConn ) class ( nurbs_surface ), intent ( inout ) :: this integer , intent ( in ), contiguous :: elemConn (:,:) if ( allocated ( this % elemConn_Xg_vis )) deallocate ( this % elemConn_Xg_vis ) this % elemConn_Xg_vis = elemConn end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine set_elem ( this , elemConn ) class ( nurbs_surface ), intent ( inout ) :: this integer , intent ( in ), contiguous :: elemConn (:,:) if ( allocated ( this % elemConn )) deallocate ( this % elemConn ) this % elemConn = elemConn end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_elem_Xc_vis ( this ) result ( elemConn ) class ( nurbs_surface ), intent ( in ) :: this integer , allocatable :: elemConn (:,:) elemConn = this % elemConn_Xc_vis end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_elem_Xg_vis ( this ) result ( elemConn ) class ( nurbs_surface ), intent ( in ) :: this integer , allocatable :: elemConn (:,:) elemConn = this % elemConn_Xg_vis end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_elem ( this ) result ( elemConn ) class ( nurbs_surface ), intent ( in ) :: this integer , allocatable :: elemConn (:,:) elemConn = this % elemConn end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine remove_knots ( this , dir , Xth , r ) class ( nurbs_surface ), intent ( inout ) :: this integer , intent ( in ) :: dir real ( rk ), intent ( in ), contiguous :: Xth (:) integer , intent ( in ), contiguous :: r (:) integer :: k , i , s , dim , j , nc_new , t real ( rk ), allocatable :: Xc (:,:), Xcw (:,:), Xcw_new (:,:), Xc_new (:,:), Wc_new (:), knot_new (:) real ( rk ), allocatable :: Xc3 (:,:,:) if ( dir == 1 ) then ! direction 1 if ( this % is_rational ()) then ! NURBS do i = 1 , size ( Xth ) k = findspan ( this % nc ( 1 ) - 1 , this % degree ( 1 ), Xth ( i ), this % knot1 ) if ( this % knot1 ( k + 1 ) == Xth ( i )) then s = compute_multiplicity ( this % knot1 , Xth ( i )) else s = 0 end if k = k + 1 dim = size ( this % Xc , 2 ) allocate ( Xcw ( size ( this % Xc , 1 ), dim + 1 )) do j = 1 , size ( this % Xc , 1 ) Xcw ( j , 1 : dim ) = this % Xc ( j , 1 : dim ) * this % Wc ( j ) end do Xcw (:, dim + 1 ) = this % Wc (:) Xcw = reshape ( Xcw ,[ this % nc ( 1 ), this % nc ( 2 ) * ( dim + 1 )], order = [ 1 , 2 ]) call remove_knots_A_5_8 (& this % degree ( 1 ),& this % knot1 ,& Xcw ,& Xth ( i ),& k ,& s ,& r ( i ),& t ,& knot_new ,& Xcw_new ) if ( allocated ( Xcw )) deallocate ( Xcw ) if ( t == 0 ) then ! no change else nc_new = size ( Xcw_new , 1 ) Xcw_new = reshape ( Xcw_new ,[ this % nc ( 2 ) * ( nc_new ), dim + 1 ], order = [ 1 , 2 ]) allocate ( Xc_new ( 1 : this % nc ( 2 ) * ( nc_new ), 1 : dim )) allocate ( Wc_new ( 1 : this % nc ( 2 ) * ( nc_new ))) do j = 1 , this % nc ( 2 ) * ( nc_new ) Xc_new ( j , 1 : dim ) = Xcw_new ( j , 1 : dim ) / Xcw_new ( j , dim + 1 ) end do Wc_new (:) = Xcw_new (:, dim + 1 ) call this % set ( knot1 = knot_new , knot2 = this % get_knot ( 2 ), Xc = Xc_new , Wc = Wc_new ) deallocate ( Xcw_new , Xc_new , Wc_new ) end if end do else ! B-Spline do i = 1 , size ( Xth ) k = findspan ( this % nc ( 1 ) - 1 , this % degree ( 1 ), Xth ( i ), this % knot1 ) if ( this % knot1 ( k + 1 ) == Xth ( i )) then s = compute_multiplicity ( this % knot1 , Xth ( i )) else s = 0 end if k = k + 1 dim = size ( this % Xc , 2 ) Xc = reshape ( this % Xc ,[ this % nc ( 1 ), this % nc ( 2 ) * dim ], order = [ 1 , 2 ]) call remove_knots_A_5_8 (& this % degree ( 1 ),& this % knot1 ,& Xc ,& Xth ( i ),& k ,& s ,& r ( i ),& t ,& knot_new ,& Xc_new ) if ( allocated ( Xc )) deallocate ( Xc ) if ( t == 0 ) then ! no change else nc_new = size ( Xc_new , 1 ) Xc_new = reshape ( Xc_new ,[( this % nc ( 2 )) * ( nc_new ), dim ], order = [ 1 , 2 ]) call this % set ( knot1 = knot_new , knot2 = this % get_knot ( 2 ), Xc = Xc_new ) end if end do end if elseif ( dir == 2 ) then ! direction 2 if ( this % is_rational ()) then ! NURBS do i = 1 , size ( Xth ) k = findspan ( this % nc ( 2 ) - 1 , this % degree ( 2 ), Xth ( i ), this % knot2 ) if ( this % knot2 ( k + 1 ) == Xth ( i )) then s = compute_multiplicity ( this % knot2 , Xth ( i )) else s = 0 end if k = k + 1 dim = size ( this % Xc , 2 ) allocate ( Xcw ( size ( this % Xc , 1 ), dim + 1 )) do j = 1 , size ( this % Xc , 1 ) Xcw ( j , 1 : dim ) = this % Xc ( j , 1 : dim ) * this % Wc ( j ) end do Xcw (:, dim + 1 ) = this % Wc (:) Xc3 = reshape ( Xcw , [ this % nc ( 1 ), this % nc ( 2 ), dim + 1 ]) Xc3 = reshape ( Xc3 , [ this % nc ( 2 ), this % nc ( 1 ), dim + 1 ], order = [ 2 , 1 , 3 ]) Xcw = reshape ( Xc3 , [ this % nc ( 2 ), this % nc ( 1 ) * ( dim + 1 )]) call remove_knots_A_5_8 (& this % degree ( 2 ),& this % knot2 ,& Xcw ,& Xth ( i ),& k ,& s ,& r ( i ),& t ,& knot_new ,& Xcw_new ) if ( allocated ( Xcw )) deallocate ( Xcw ) if ( t == 0 ) then ! no change else nc_new = size ( Xcw_new , 1 ) Xc3 = reshape ( Xcw_new , [ nc_new , this % nc ( 1 ), dim + 1 ]) Xc3 = reshape ( Xc3 , [ this % nc ( 1 ), nc_new , dim + 1 ], order = [ 2 , 1 , 3 ]) Xcw_new = reshape ( Xc3 ,[( this % nc ( 1 )) * ( nc_new ), dim + 1 ]) allocate ( Xc_new ( 1 :( nc_new ) * this % nc ( 1 ), 1 : dim )) allocate ( Wc_new ( 1 :( nc_new ) * this % nc ( 1 ))) do j = 1 , ( nc_new ) * this % nc ( 1 ) Xc_new ( j , 1 : dim ) = Xcw_new ( j , 1 : dim ) / Xcw_new ( j , dim + 1 ) end do Wc_new (:) = Xcw_new (:, dim + 1 ) call this % set ( knot1 = this % get_knot ( 1 ), knot2 = knot_new , Xc = Xc_new , Wc = Wc_new ) deallocate ( Xcw_new , Xc_new , Wc_new ) end if end do else ! B-Spline do i = 1 , size ( Xth ) k = findspan ( this % nc ( 2 ) - 1 , this % degree ( 2 ), Xth ( i ), this % knot2 ) if ( this % knot2 ( k + 1 ) == Xth ( i )) then s = compute_multiplicity ( this % knot2 , Xth ( i )) else s = 0 end if k = k + 1 dim = size ( this % Xc , 2 ) Xc3 = reshape ( this % Xc , [ this % nc ( 1 ), this % nc ( 2 ), dim ]) Xc3 = reshape ( Xc3 , [ this % nc ( 2 ), this % nc ( 1 ), dim ], order = [ 2 , 1 , 3 ]) Xc = reshape ( Xc3 ,[ this % nc ( 2 ), this % nc ( 1 ) * dim ]) call remove_knots_A_5_8 (& this % degree ( 2 ),& this % knot2 ,& Xc ,& Xth ( i ),& k ,& s ,& r ( i ),& t ,& knot_new ,& Xc_new ) if ( allocated ( Xc )) deallocate ( Xc ) if ( t == 0 ) then ! no change else nc_new = size ( Xc_new , 1 ) Xc3 = reshape ( Xc_new , [ nc_new , this % nc ( 1 ), dim ]) Xc3 = reshape ( Xc3 , [ this % nc ( 1 ), nc_new , dim ], order = [ 2 , 1 , 3 ]) Xc_new = reshape ( Xc3 ,[( this % nc ( 1 )) * ( nc_new ), dim ]) call this % set ( knot1 = this % get_knot ( 1 ), knot2 = knot_new , Xc = Xc_new ) end if end do end if else error stop 'Invalid direction.' end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine set_tetragon ( this , L , nc , Wc ) class ( nurbs_surface ), intent ( inout ) :: this real ( rk ), intent ( in ) :: L ( 2 ) integer , intent ( in ) :: nc ( 2 ) real ( rk ), intent ( in ), contiguous , optional :: Wc (:) call this % set ( nc = nc , Xc = tetragon_Xc ( L , nc ), Wc = Wc ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function cmp_elem ( this ) result ( elemConn ) class ( nurbs_surface ), intent ( in ) :: this integer , allocatable :: elemConn (:,:) call elemConn_Cn ( this % nc ( 1 ), this % nc ( 2 ),& this % degree ( 1 ), this % degree ( 2 ),& unique ( this % knot1 ), unique ( this % knot2 ),& this % get_multiplicity ( 1 ), this % get_multiplicity ( 2 ),& elemConn ) end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine rotate_Xc ( this , alpha , beta , theta ) class ( nurbs_surface ), intent ( inout ) :: this real ( rk ), intent ( in ) :: alpha , beta , theta integer :: i do i = 1 , this % nc ( 1 ) * this % nc ( 2 ) this % Xc ( i , :) = matmul ( rotation ( alpha , beta , theta ), this % Xc ( i , :)) end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine rotate_Xg ( this , alpha , beta , theta ) class ( nurbs_surface ), intent ( inout ) :: this real ( rk ), intent ( in ) :: alpha , beta , theta integer :: i do i = 1 , this % ng ( 1 ) * this % ng ( 2 ) this % Xg ( i , :) = matmul ( rotation ( alpha , beta , theta ), this % Xg ( i , :)) end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine translate_Xc ( this , vec ) class ( nurbs_surface ), intent ( inout ) :: this real ( rk ), intent ( in ) :: vec (:) integer :: i do i = 1 , this % nc ( 1 ) * this % nc ( 2 ) this % Xc ( i , :) = this % Xc ( i , :) + vec end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine translate_Xg ( this , vec ) class ( nurbs_surface ), intent ( inout ) :: this real ( rk ), intent ( in ) :: vec (:) integer :: i do i = 1 , this % ng ( 1 ) * this % ng ( 2 ) this % Xg ( i , :) = this % Xg ( i , :) + vec end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine show ( this , vtkfile_Xc , vtkfile_Xg ) class ( nurbs_surface ), intent ( inout ) :: this character ( len =* ), intent ( in ) :: vtkfile_Xc , vtkfile_Xg character ( len = 3000 ) :: pyvista_script pyvista_script = & \"import pyvista as pv\" // achar ( 10 ) // & \"pv.global_theme.color = 'white'\" // achar ( 10 ) // & \"Xc = pv.read('\" // trim ( vtkfile_Xc ) // \"')\" // achar ( 10 ) // & \"Xg = pv.read('\" // trim ( vtkfile_Xg ) // \"')\" // achar ( 10 ) // & \"p = pv.Plotter(lighting='light kit')\" // achar ( 10 ) // & \"actor_Xcp = p.add_mesh(\" // achar ( 10 ) // & \" Xc,\" // achar ( 10 ) // & \" style='points',\" // achar ( 10 ) // & \" point_size=10,\" // achar ( 10 ) // & \" color='red',\" // achar ( 10 ) // & \" render_points_as_spheres=True,\" // achar ( 10 ) // & \" opacity=0.5,\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"actor_Xcw = p.add_mesh(\" // achar ( 10 ) // & \" Xc,\" // achar ( 10 ) // & \" show_edges=True,\" // achar ( 10 ) // & \" color='yellow',\" // achar ( 10 ) // & \" line_width=3,\" // achar ( 10 ) // & \" style='wireframe',\" // achar ( 10 ) // & \" opacity=0.2\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"actor_Xg = p.add_mesh(\" // achar ( 10 ) // & \" Xg,\" // achar ( 10 ) // & \" show_edges=False,\" // achar ( 10 ) // & \" color='cyan',\" // achar ( 10 ) // & \" line_width=7,\" // achar ( 10 ) // & \" metallic=0.6,\" // achar ( 10 ) // & \" pbr=True,\" // achar ( 10 ) // & \" split_sharp_edges=True,\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"p.add_axes(interactive=False)\" // achar ( 10 ) // & \"def point_picker_callback(point):\" // achar ( 10 ) // & \" mesh = Xc\" // achar ( 10 ) // & \" point_id = mesh.find_closest_point(point)\" // achar ( 10 ) // & \" point_coords = mesh.points[point_id]\" // achar ( 10 ) // & \" label = f'ID: {point_id + 1}\\n({point_coords[0]:.3f}, {point_coords[1]:.3f}, {point_coords[2]:.3f})'\" // achar ( 10 ) // & \" p.add_point_labels(\" // achar ( 10 ) // & \" [point_coords],\" // achar ( 10 ) // & \" [label],\" // achar ( 10 ) // & \" font_size=14,\" // achar ( 10 ) // & \" text_color='black',\" // achar ( 10 ) // & \" show_points=False,\" // achar ( 10 ) // & \" fill_shape=False,\" // achar ( 10 ) // & \" shape=None,\" // achar ( 10 ) // & \" )\" // achar ( 10 ) // & \"picker = p.enable_point_picking(callback=point_picker_callback, show_message=False)\" // achar ( 10 ) // & \"window_size = p.window_size\" // achar ( 10 ) // & \"y_pos = window_size[1]\" // achar ( 10 ) // & \"def Xcp_toggle_vis(flag):\" // achar ( 10 ) // & \" actor_Xcp.SetVisibility(flag)\" // achar ( 10 ) // & \"def Xcw_toggle_vis(flag):\" // achar ( 10 ) // & \" actor_Xcw.SetVisibility(flag)\" // achar ( 10 ) // & \"def Xg_toggle_vis(flag):\" // achar ( 10 ) // & \" actor_Xg.SetVisibility(flag)\" // achar ( 10 ) // & \"p.add_checkbox_button_widget(\" // achar ( 10 ) // & \" Xcp_toggle_vis,\" // achar ( 10 ) // & \" value=True,\" // achar ( 10 ) // & \" color_on='red',\" // achar ( 10 ) // & \" size=25,\" // achar ( 10 ) // & \" position=(0, y_pos - 1 * 25),\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"p.add_checkbox_button_widget(\" // achar ( 10 ) // & \" Xcw_toggle_vis,\" // achar ( 10 ) // & \" value=True,\" // achar ( 10 ) // & \" color_on='yellow',\" // achar ( 10 ) // & \" size=25,\" // achar ( 10 ) // & \" position=(0, y_pos - 2 * 25),\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"p.add_checkbox_button_widget(\" // achar ( 10 ) // & \" Xg_toggle_vis,\" // achar ( 10 ) // & \" value=True,\" // achar ( 10 ) // & \" color_on='cyan',\" // achar ( 10 ) // & \" size=25,\" // achar ( 10 ) // & \" position=(0, y_pos - 3 * 25),\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"p.add_text(\" // achar ( 10 ) // & \" 'Xc (Points)',\" // achar ( 10 ) // & \" position=(25 + 3, y_pos - 1 * 25),\" // achar ( 10 ) // & \" font_size=8,\" // achar ( 10 ) // & \" color='black',\" // achar ( 10 ) // & \" font='times',\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"p.add_text(\" // achar ( 10 ) // & \" 'Xc (Control geometry)',\" // achar ( 10 ) // & \" position=(25 + 3, y_pos - 2 * 25),\" // achar ( 10 ) // & \" font_size=8,\" // achar ( 10 ) // & \" color='black',\" // achar ( 10 ) // & \" font='times',\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"p.add_text(\" // achar ( 10 ) // & \" 'Xg (Geometry)',\" // achar ( 10 ) // & \" position=(25 + 3, y_pos - 3 * 25),\" // achar ( 10 ) // & \" font_size=8,\" // achar ( 10 ) // & \" color='black',\" // achar ( 10 ) // & \" font='times',\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"p.add_text('ForCAD', position=(0.0, 10.0), font_size=14, color='black', font='times')\" // achar ( 10 ) // & \"p.add_text(\" // achar ( 10 ) // & \" 'https://github.com/gha3mi/forcad',\" // achar ( 10 ) // & \" position=(0.0, 0.0),\" // achar ( 10 ) // & \" font_size=7,\" // achar ( 10 ) // & \" color='blue',\" // achar ( 10 ) // & \" font='times',\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"p.show(title='ForCAD', interactive=True)\" call execute_command_line ( 'python -c \"' // trim ( adjustl ( pyvista_script )) // '\"' ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine set_ring ( this , center , radius1 , radius2 ) class ( nurbs_surface ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: center (:) real ( rk ), intent ( in ) :: radius1 , radius2 real ( rk ), allocatable :: Xc (:,:), Wc (:), knot1 (:), knot2 (:) integer :: i ! Define control points for ring allocate ( Xc ( 14 , 3 )) Xc ( 1 ,:) = [ 1.0_rk , 0.0_rk , 0.0_rk ] Xc ( 2 ,:) = [ 1.0_rk , sqrt ( 3.0_rk ), 0.0_rk ] Xc ( 3 ,:) = [ - 0.5_rk , sqrt ( 3.0_rk ) / 2.0_rk , 0.0_rk ] Xc ( 4 ,:) = [ - 2.0_rk , 0.0_rk , 0.0_rk ] Xc ( 5 ,:) = [ - 0.5_rk , - sqrt ( 3.0_rk ) / 2.0_rk , 0.0_rk ] Xc ( 6 ,:) = [ 1.0_rk , - sqrt ( 3.0_rk ), 0.0_rk ] Xc ( 7 ,:) = [ 1.0_rk , 0.0_rk , 0.0_rk ] Xc ( 1 : 7 , 1 : 2 ) = Xc ( 1 : 7 , 1 : 2 ) * radius1 Xc ( 8 ,:) = [ 1.0_rk , 0.0_rk , 0.0_rk ] Xc ( 9 ,:) = [ 1.0_rk , sqrt ( 3.0_rk ), 0.0_rk ] Xc ( 10 ,:) = [ - 0.5_rk , sqrt ( 3.0_rk ) / 2.0_rk , 0.0_rk ] Xc ( 11 ,:) = [ - 2.0_rk , 0.0_rk , 0.0_rk ] Xc ( 12 ,:) = [ - 0.5_rk , - sqrt ( 3.0_rk ) / 2.0_rk , 0.0_rk ] Xc ( 13 ,:) = [ 1.0_rk , - sqrt ( 3.0_rk ), 0.0_rk ] Xc ( 14 ,:) = [ 1.0_rk , 0.0_rk , 0.0_rk ] Xc ( 8 : 14 , 1 : 2 ) = Xc ( 8 : 14 , 1 : 2 ) * radius2 ! Translate the control points do i = 1 , size ( Xc , 1 ) Xc ( i ,:) = center + Xc ( i ,:) end do ! Define weights for the control points Wc = [ 1.0_rk , 0.5_rk , 1.0_rk , 0.5_rk , 1.0_rk , 0.5_rk , 1.0_rk ,& 1.0_rk , 0.5_rk , 1.0_rk , 0.5_rk , 1.0_rk , 0.5_rk , 1.0_rk ] ! Define knot vector knot1 = [ 0.0_rk , 0.0_rk , 0.0_rk , 1.0_rk / 3.0_rk , 1.0_rk / 3.0_rk , 2.0_rk / 3.0_rk , 2.0_rk / 3.0_rk , 1.0_rk , 1.0_rk , 1.0_rk ] knot2 = [ 0.0_rk , 0.0_rk , 1.0_rk , 1.0_rk ] ! Set knot vector, control points, and weights call this % set ( knot1 , knot2 , Xc , Wc ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine set_C ( this , center , radius1 , radius2 ) class ( nurbs_surface ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: center (:) real ( rk ), intent ( in ) :: radius1 , radius2 real ( rk ), allocatable :: Xc (:,:), Wc (:), knot1 (:), knot2 (:) integer :: i ! Define control points for C-shape allocate ( Xc ( 10 , 3 )) Xc ( 1 ,:) = [ 1.0_rk , 0.0_rk , 0.0_rk ] Xc ( 2 ,:) = [ 1.0_rk , sqrt ( 3.0_rk ), 0.0_rk ] Xc ( 3 ,:) = [ - 0.5_rk , sqrt ( 3.0_rk ) / 2.0_rk , 0.0_rk ] Xc ( 4 ,:) = [ - 2.0_rk , 0.0_rk , 0.0_rk ] Xc ( 5 ,:) = [ - 0.5_rk , - sqrt ( 3.0_rk ) / 2.0_rk , 0.0_rk ] Xc ( 1 : 5 , 1 : 2 ) = Xc ( 1 : 5 , 1 : 2 ) * radius1 Xc ( 6 ,:) = [ 1.0_rk , 0.0_rk , 0.0_rk ] Xc ( 7 ,:) = [ 1.0_rk , sqrt ( 3.0_rk ), 0.0_rk ] Xc ( 8 ,:) = [ - 0.5_rk , sqrt ( 3.0_rk ) / 2.0_rk , 0.0_rk ] Xc ( 9 ,:) = [ - 2.0_rk , 0.0_rk , 0.0_rk ] Xc ( 10 ,:) = [ - 0.5_rk , - sqrt ( 3.0_rk ) / 2.0_rk , 0.0_rk ] Xc ( 6 : 10 , 1 : 2 ) = Xc ( 6 : 10 , 1 : 2 ) * radius2 ! Translate the control points do i = 1 , size ( Xc , 1 ) Xc ( i ,:) = center + Xc ( i ,:) end do ! Define weights for the control points Wc = [ 1.0_rk , 0.5_rk , 1.0_rk , 0.5_rk , 1.0_rk ,& 1.0_rk , 0.5_rk , 1.0_rk , 0.5_rk , 1.0_rk ] ! Define knot vector knot1 = [ 0.0_rk , 0.0_rk , 0.0_rk , 1.0_rk / 2.0_rk , 1.0_rk / 2.0_rk , 1.0_rk , 1.0_rk , 1.0_rk ] knot2 = [ 0.0_rk , 0.0_rk , 1.0_rk , 1.0_rk ] ! Set knot vector, control points, and weights call this % set ( knot1 , knot2 , Xc , Wc ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine set_half_ring ( this , center , radius1 , radius2 ) class ( nurbs_surface ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: center (:) real ( rk ), intent ( in ) :: radius1 , radius2 real ( rk ), allocatable :: Xc (:,:), Wc (:), knot1 (:), knot2 (:) integer :: i ! Define control points for half ring allocate ( Xc ( 10 , 3 )) Xc ( 1 ,:) = [ 0.5_rk , 0.0_rk , 0.0_rk ] Xc ( 2 ,:) = [ 0.5_rk , 0.5_rk , 0.0_rk ] Xc ( 3 ,:) = [ 0.0_rk , 0.5_rk , 0.0_rk ] Xc ( 4 ,:) = [ - 0.5_rk , 0.5_rk , 0.0_rk ] Xc ( 5 ,:) = [ - 0.5_rk , 0.0_rk , 0.0_rk ] Xc ( 1 : 5 , 1 : 2 ) = Xc ( 1 : 5 , 1 : 2 ) * radius1 Xc ( 6 ,:) = [ 0.5_rk , 0.0_rk , 0.0_rk ] Xc ( 7 ,:) = [ 0.5_rk , 0.5_rk , 0.0_rk ] Xc ( 8 ,:) = [ 0.0_rk , 0.5_rk , 0.0_rk ] Xc ( 9 ,:) = [ - 0.5_rk , 0.5_rk , 0.0_rk ] Xc ( 10 ,:) = [ - 0.5_rk , 0.0_rk , 0.0_rk ] Xc ( 6 : 10 , 1 : 2 ) = Xc ( 6 : 10 , 1 : 2 ) * radius2 ! Translate the control points do i = 1 , size ( Xc , 1 ) Xc ( i ,:) = center + Xc ( i ,:) end do ! Define weights for the control points Wc = [ 1.0_rk , 1.0_rk / sqrt ( 2.0_rk ), 1.0_rk , 1.0_rk / sqrt ( 2.0_rk ), 1.0_rk ,& 1.0_rk , 1.0_rk / sqrt ( 2.0_rk ), 1.0_rk , 1.0_rk / sqrt ( 2.0_rk ), 1.0_rk ] ! Define knot vector knot1 = [ 0.0_rk , 0.0_rk , 0.0_rk , 1.0_rk / 2.0_rk , & 1.0_rk / 2.0_rk , 1.0_rk , 1.0_rk , 1.0_rk ] knot2 = [ 0.0_rk , 0.0_rk , 1.0_rk , 1.0_rk ] ! Set knot vector, control points, and weights call this % set ( knot1 , knot2 , Xc , Wc ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine nearest_point ( this , point_Xg , nearest_Xg , nearest_Xt , id ) class ( nurbs_surface ), intent ( in ) :: this real ( rk ), intent ( in ) :: point_Xg (:) real ( rk ), intent ( out ), allocatable , optional :: nearest_Xg (:) real ( rk ), intent ( out ), allocatable , optional :: nearest_Xt (:) integer , intent ( out ), optional :: id integer :: id_ real ( rk ), allocatable :: distances (:) allocate ( distances ( this % ng ( 1 ) * this % ng ( 2 ))) distances = nearest_point_help_2d ( this % ng , this % Xg , point_Xg ) id_ = minloc ( distances , dim = 1 ) if ( present ( id )) id = id_ if ( present ( nearest_Xg )) nearest_Xg = this % Xg ( id_ ,:) if ( present ( nearest_Xt )) nearest_Xt = this % Xt ( id_ ,:) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine nearest_point2 ( this , point_Xg , tol , maxit , nearest_Xt , nearest_Xg ) class ( nurbs_surface ), intent ( inout ) :: this real ( rk ), intent ( in ) :: point_Xg (:) real ( rk ), intent ( in ) :: tol integer , intent ( in ) :: maxit real ( rk ), intent ( out ) :: nearest_Xt ( 2 ) real ( rk ), allocatable , intent ( out ), optional :: nearest_Xg (:) real ( rk ) :: xk ( 2 ), obj , grad ( 2 ), hess ( 2 , 2 ), dk ( 2 ), alphak , tau , beta , det_inv , Ainv ( 2 , 2 ), lower_bounds ( 2 ), upper_bounds ( 2 ) real ( rk ), allocatable :: Xg (:), Tgc (:), dTgc (:,:), d2Tgc (:,:), distances (:) integer :: k , l logical :: convergenz type ( nurbs_surface ) :: copy_this k = 0 ! lower and upper bounds lower_bounds = [ minval ( this % knot1 ), minval ( this % knot2 )] upper_bounds = [ maxval ( this % knot1 ), maxval ( this % knot2 )] ! guess initial point copy_this = this call this % create ( 10 , 10 ) allocate ( distances ( copy_this % ng ( 1 ) * copy_this % ng ( 2 ))) distances = nearest_point_help_2d ( copy_this % ng , copy_this % Xg , point_Xg ) xk = copy_this % Xt ( minloc ( distances , dim = 1 ),:) call copy_this % finalize () ! Check if xk is within the knot vector range if ( xk ( 1 ) < minval ( this % knot1 )) then xk ( 1 ) = minval ( this % knot1 ) else if ( xk ( 1 ) > maxval ( this % knot1 )) then xk ( 1 ) = maxval ( this % knot1 ) end if if ( xk ( 2 ) < minval ( this % knot2 )) then xk ( 2 ) = minval ( this % knot2 ) else if ( xk ( 2 ) > maxval ( this % knot2 )) then xk ( 2 ) = maxval ( this % knot2 ) end if convergenz = . false . allocate ( Xg ( size ( this % Xc , 2 ))) ! allocate(dTgc(size(this%Xc,1), 2)) ! allocate(d2Tgc(size(this%Xc,1), 2)) do while (. not . convergenz . and . k < maxit ) ! objection, gradient and hessian Xg = this % cmp_Xg ( xk ) call this % derivative2 ( Xt = xk , d2Tgc = d2Tgc , dTgc = dTgc , Tgc = Tgc ) ! Tgc is not needed obj = norm2 ( Xg - point_Xg ) + 0.001_rk ! add a small number to avoid division by zero grad ( 1 ) = dot_product (( Xg - point_Xg ) / obj , matmul ( dTgc (:, 1 ), this % Xc )) grad ( 2 ) = dot_product (( Xg - point_Xg ) / obj , matmul ( dTgc (:, 2 ), this % Xc )) hess ( 1 , 1 ) = ( dot_product ( matmul ( dTgc (:, 1 ), this % Xc ), matmul ( dTgc (:, 1 ), this % Xc )) + & dot_product (( Xg - point_Xg ), matmul ( d2Tgc ( 1 : this % nc ( 1 ) * this % nc ( 2 ) , 1 ), this % Xc )) ) / obj & - ( dot_product ( Xg - point_Xg , matmul ( dTgc (:, 1 ), this % Xc )) * grad ( 1 ) ) / obj ** 2 hess ( 2 , 1 ) = ( dot_product ( matmul ( dTgc (:, 1 ), this % Xc ), matmul ( dTgc (:, 2 ), this % Xc )) + & dot_product (( Xg - point_Xg ), matmul ( d2Tgc ( this % nc ( 1 ) * this % nc ( 2 ) + 1 : 2 * this % nc ( 1 ) * this % nc ( 2 ), 1 ), this % Xc )) ) / obj & - ( dot_product ( Xg - point_Xg , matmul ( dTgc (:, 2 ), this % Xc )) * grad ( 1 ) ) / obj ** 2 hess ( 1 , 2 ) = ( dot_product ( matmul ( dTgc (:, 2 ), this % Xc ), matmul ( dTgc (:, 1 ), this % Xc )) + & dot_product (( Xg - point_Xg ), matmul ( d2Tgc ( 1 : this % nc ( 1 ) * this % nc ( 2 ) , 2 ), this % Xc )) ) / obj & - ( dot_product ( Xg - point_Xg , matmul ( dTgc (:, 1 ), this % Xc )) * grad ( 2 ) ) / obj ** 2 hess ( 2 , 2 ) = ( dot_product ( matmul ( dTgc (:, 2 ), this % Xc ), matmul ( dTgc (:, 2 ), this % Xc )) + & dot_product (( Xg - point_Xg ), matmul ( d2Tgc ( this % nc ( 1 ) * this % nc ( 2 ) + 1 : 2 * this % nc ( 1 ) * this % nc ( 2 ), 2 ), this % Xc )) ) / obj & - ( dot_product ( Xg - point_Xg , matmul ( dTgc (:, 2 ), this % Xc )) * grad ( 2 ) ) / obj ** 2 ! debug print '(i3,1x,2e20.10,1x,e20.10)' , k , xk , norm2 ( grad ) if ( norm2 ( grad ) <= tol ) then convergenz = . true . nearest_Xt = xk if ( present ( nearest_Xg )) nearest_Xg = this % cmp_Xg ( nearest_Xt ) else ! Inverse of Hessian det_inv = 1.0_rk / ( hess ( 1 , 1 ) * hess ( 2 , 2 ) - hess ( 1 , 2 ) * hess ( 2 , 1 )) Ainv ( 1 , 1 ) = hess ( 2 , 2 ) Ainv ( 2 , 1 ) = - hess ( 2 , 1 ) Ainv ( 1 , 2 ) = - hess ( 1 , 2 ) Ainv ( 2 , 2 ) = hess ( 1 , 1 ) Ainv = Ainv * det_inv dk = - matmul ( Ainv , grad ) ! Backtracking-Armijo Line Search alphak = 1.0_rk tau = 0.5_rk ! 0 < tau < 1 beta = 1.0e-4_rk ! 0 < beta < 1 l = 0 do while (. not . norm2 ( this % cmp_Xg ( xk + alphak * dk ) - point_Xg ) <= obj + alphak * beta * dot_product ( grad , dk ) . and . l < 50 ) alphak = tau * alphak l = l + 1 end do xk = xk + alphak * dk ! Check if xk is within the knot vector range xk = max ( min ( xk , upper_bounds ), lower_bounds ) k = k + 1 end if end do end subroutine !=============================================================================== end module forcad_nurbs_surface !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function compute_Xg_nurbs_2d ( Xt , knot1 , knot2 , degree , nc , ng , Xc , Wc ) result ( Xg ) use forcad_utils , only : rk , basis_bspline , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:,:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:) integer , intent ( in ) :: degree ( 2 ) integer , intent ( in ) :: nc ( 2 ) integer , intent ( in ) :: ng ( 2 ) real ( rk ), intent ( in ), contiguous :: Xc (:,:) real ( rk ), intent ( in ), contiguous :: Wc (:) real ( rk ), allocatable :: Xg (:,:) real ( rk ), allocatable :: Tgc (:) integer :: i allocate ( Xg ( ng ( 1 ) * ng ( 2 ), size ( Xc , 2 ))) allocate ( Tgc ( nc ( 1 ) * nc ( 2 ))) !$OMP PARALLEL DO PRIVATE(Tgc) do i = 1 , ng ( 1 ) * ng ( 2 ) Tgc = kron (& basis_bspline ( Xt ( i , 2 ), knot2 , nc ( 2 ), degree ( 2 )),& basis_bspline ( Xt ( i , 1 ), knot1 , nc ( 1 ), degree ( 1 ))) Tgc = Tgc * ( Wc / ( dot_product ( Tgc , Wc ))) Xg ( i ,:) = matmul ( Tgc , Xc ) end do !$OMP END PARALLEL DO end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function compute_Xg_nurbs_2d_1point ( Xt , knot1 , knot2 , degree , nc , Xc , Wc ) result ( Xg ) use forcad_utils , only : rk , basis_bspline , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:) integer , intent ( in ) :: degree ( 2 ) integer , intent ( in ) :: nc ( 2 ) real ( rk ), intent ( in ), contiguous :: Xc (:,:) real ( rk ), intent ( in ), contiguous :: Wc (:) real ( rk ), allocatable :: Xg (:) real ( rk ), allocatable :: Tgc (:) allocate ( Xg ( size ( Xc , 2 ))) allocate ( Tgc ( nc ( 1 ) * nc ( 2 ))) Tgc = kron (& basis_bspline ( Xt ( 2 ), knot2 , nc ( 2 ), degree ( 2 )),& basis_bspline ( Xt ( 1 ), knot1 , nc ( 1 ), degree ( 1 ))) Tgc = Tgc * ( Wc / ( dot_product ( Tgc , Wc ))) Xg = matmul ( Tgc , Xc ) end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function compute_Xg_bspline_2d ( Xt , knot1 , knot2 , degree , nc , ng , Xc ) result ( Xg ) use forcad_utils , only : rk , basis_bspline , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:,:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:) integer , intent ( in ) :: degree ( 2 ) integer , intent ( in ) :: nc ( 2 ) integer , intent ( in ) :: ng ( 2 ) real ( rk ), intent ( in ), contiguous :: Xc (:,:) real ( rk ), allocatable :: Xg (:,:) integer :: i allocate ( Xg ( ng ( 1 ) * ng ( 2 ), size ( Xc , 2 ))) !$OMP PARALLEL DO do i = 1 , ng ( 1 ) * ng ( 2 ) Xg ( i ,:) = matmul ( kron (& basis_bspline ( Xt ( i , 2 ), knot2 , nc ( 2 ), degree ( 2 )),& basis_bspline ( Xt ( i , 1 ), knot1 , nc ( 1 ), degree ( 1 ))),& Xc ) end do !$OMP END PARALLEL DO end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function compute_Xg_bspline_2d_1point ( Xt , knot1 , knot2 , degree , nc , Xc ) result ( Xg ) use forcad_utils , only : rk , basis_bspline , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:) integer , intent ( in ) :: degree ( 2 ) integer , intent ( in ) :: nc ( 2 ) real ( rk ), intent ( in ), contiguous :: Xc (:,:) real ( rk ), allocatable :: Xg (:) allocate ( Xg ( size ( Xc , 2 ))) Xg = matmul ( kron (& basis_bspline ( Xt ( 2 ), knot2 , nc ( 2 ), degree ( 2 )),& basis_bspline ( Xt ( 1 ), knot1 , nc ( 1 ), degree ( 1 ))),& Xc ) end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine compute_dTgc_nurbs_2d_vector ( Xt , knot1 , knot2 , degree , nc , ng , Wc , dTgc , Tgc ) use forcad_utils , only : rk , basis_bspline_der , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:,:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:) integer , intent ( in ) :: degree ( 2 ) integer , intent ( in ) :: nc ( 2 ) integer , intent ( in ) :: ng ( 2 ) real ( rk ), intent ( in ), contiguous :: Wc (:) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:,:) real ( rk ), allocatable , intent ( out ) :: Tgc (:,:) real ( rk ), allocatable :: dBi (:,:), dB1 (:), dB2 (:) real ( rk ), allocatable :: Bi (:), B1 (:), B2 (:) integer :: i allocate ( dTgc ( ng ( 1 ) * ng ( 2 ), nc ( 1 ) * nc ( 2 ), 2 ), Tgc ( ng ( 1 ) * ng ( 2 ), nc ( 1 ) * nc ( 2 ))) allocate ( Bi ( nc ( 1 ) * nc ( 2 )), dBi ( nc ( 1 ) * nc ( 2 ), 2 )) do i = 1 , size ( Xt , 1 ) call basis_bspline_der ( Xt ( i , 1 ), knot1 , nc ( 1 ), degree ( 1 ), dB1 , B1 ) call basis_bspline_der ( Xt ( i , 2 ), knot2 , nc ( 2 ), degree ( 2 ), dB2 , B2 ) Bi = kron ( B2 , B1 ) Tgc ( i ,:) = Bi * ( Wc / ( dot_product ( Bi , Wc ))) dBi (:, 1 ) = kron ( B2 , dB1 ) dBi (:, 2 ) = kron ( dB2 , B1 ) dTgc ( i ,:, 1 ) = ( dBi (:, 1 ) * Wc - Tgc ( i ,:) * dot_product ( dBi (:, 1 ), Wc ) ) / dot_product ( Bi , Wc ) dTgc ( i ,:, 2 ) = ( dBi (:, 2 ) * Wc - Tgc ( i ,:) * dot_product ( dBi (:, 2 ), Wc ) ) / dot_product ( Bi , Wc ) end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine compute_dTgc_nurbs_2d_scalar ( Xt , knot1 , knot2 , degree , nc , Wc , dTgc , Tgc ) use forcad_utils , only : rk , basis_bspline_der , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:) integer , intent ( in ) :: degree ( 2 ) integer , intent ( in ) :: nc ( 2 ) real ( rk ), intent ( in ), contiguous :: Wc (:) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: Tgc (:) real ( rk ), allocatable :: dB1 (:), dB2 (:), dBi (:,:) real ( rk ), allocatable :: B1 (:), B2 (:), Bi (:) allocate ( dTgc ( nc ( 1 ) * nc ( 2 ), 2 ), Tgc ( nc ( 1 ) * nc ( 2 ))) allocate ( dBi ( nc ( 1 ) * nc ( 2 ), 2 ), Bi ( nc ( 1 ) * nc ( 2 ))) call basis_bspline_der ( Xt ( 1 ), knot1 , nc ( 1 ), degree ( 1 ), dB1 , B1 ) call basis_bspline_der ( Xt ( 2 ), knot2 , nc ( 2 ), degree ( 2 ), dB2 , B2 ) Bi = kron ( B2 , B1 ) Tgc = Bi * ( Wc / ( dot_product ( Bi , Wc ))) dBi (:, 1 ) = kron ( B2 , dB1 ) dBi (:, 2 ) = kron ( dB2 , B1 ) dTgc (:, 1 ) = ( dBi (:, 1 ) * Wc - Tgc * dot_product ( dBi (:, 1 ), Wc ) ) / dot_product ( Bi , Wc ) dTgc (:, 2 ) = ( dBi (:, 2 ) * Wc - Tgc * dot_product ( dBi (:, 2 ), Wc ) ) / dot_product ( Bi , Wc ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine compute_dTgc_bspline_2d_vector ( Xt , knot1 , knot2 , degree , nc , ng , dTgc , Tgc ) use forcad_utils , only : rk , basis_bspline_der , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:,:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:) integer , intent ( in ) :: degree ( 2 ) integer , intent ( in ) :: nc ( 2 ) integer , intent ( in ) :: ng ( 2 ) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:,:) real ( rk ), allocatable , intent ( out ) :: Tgc (:,:) real ( rk ), allocatable :: dB1 (:), dB2 (:) real ( rk ), allocatable :: B1 (:), B2 (:) integer :: i allocate ( dTgc ( ng ( 1 ) * ng ( 2 ), nc ( 1 ) * nc ( 2 ), 2 )) !$OMP PARALLEL DO PRIVATE(dB1, dB2) do i = 1 , size ( Xt , 1 ) call basis_bspline_der ( Xt ( i , 1 ), knot1 , nc ( 1 ), degree ( 1 ), dB1 , B1 ) call basis_bspline_der ( Xt ( i , 2 ), knot2 , nc ( 2 ), degree ( 2 ), dB2 , B2 ) Tgc ( i ,:) = kron ( B2 , B1 ) dTgc ( i ,:, 1 ) = kron ( B2 , dB1 ) dTgc ( i ,:, 2 ) = kron ( dB2 , B1 ) end do !$OMP END PARALLEL DO end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine compute_dTgc_bspline_2d_scalar ( Xt , knot1 , knot2 , degree , nc , dTgc , Tgc ) use forcad_utils , only : rk , basis_bspline_der , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:) integer , intent ( in ) :: degree ( 2 ) integer , intent ( in ) :: nc ( 2 ) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: Tgc (:) real ( rk ), allocatable :: dTgc1 (:), dTgc2 (:) real ( rk ), allocatable :: Tgc1 (:), Tgc2 (:) allocate ( dTgc ( nc ( 1 ) * nc ( 2 ), 2 )) call basis_bspline_der ( Xt ( 1 ), knot1 , nc ( 1 ), degree ( 1 ), dTgc1 , Tgc1 ) call basis_bspline_der ( Xt ( 2 ), knot2 , nc ( 2 ), degree ( 2 ), dTgc2 , Tgc2 ) Tgc = kron ( Tgc2 , Tgc1 ) dTgc (:, 1 ) = kron ( Tgc2 , dTgc1 ) dTgc (:, 2 ) = kron ( dTgc2 , Tgc1 ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine compute_d2Tgc_nurbs_2d_vector ( Xt , knot1 , knot2 , degree , nc , ng , Wc , d2Tgc , dTgc , Tgc ) use forcad_utils , only : rk , basis_bspline_2der , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:,:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:) integer , intent ( in ) :: degree ( 2 ) integer , intent ( in ) :: nc ( 2 ) integer , intent ( in ) :: ng ( 2 ) real ( rk ), intent ( in ), contiguous :: Wc (:) real ( rk ), allocatable , intent ( out ) :: d2Tgc (:,:,:) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:,:) real ( rk ), allocatable , intent ( out ) :: Tgc (:,:) real ( rk ), allocatable :: d2Bi (:,:), d2B1 (:), d2B2 (:) real ( rk ), allocatable :: dBi (:,:), dB1 (:), dB2 (:) real ( rk ), allocatable :: Bi (:), B1 (:), B2 (:) real ( rk ), allocatable :: Tgci (:), dTgci (:) integer :: i allocate ( d2Tgc ( ng ( 1 ) * ng ( 2 ), 2 * nc ( 1 ) * nc ( 2 ), 2 )) allocate ( B1 ( nc ( 1 )), B2 ( nc ( 2 ))) allocate ( dB1 ( nc ( 1 )), dB2 ( nc ( 2 ))) allocate ( d2B1 ( nc ( 1 )), d2B2 ( nc ( 2 ))) allocate ( Bi ( nc ( 1 ) * nc ( 2 )), dBi ( nc ( 1 ) * nc ( 2 ), 2 ), d2Bi ( 2 * nc ( 1 ) * nc ( 2 ), 2 )) allocate ( Tgci ( nc ( 1 ) * nc ( 2 )), dTgci ( nc ( 1 ) * nc ( 2 ))) allocate ( Tgc ( ng ( 1 ) * ng ( 2 ), nc ( 1 ) * nc ( 2 )), dTgc ( ng ( 1 ) * ng ( 2 ), nc ( 1 ) * nc ( 2 ), 2 )) do i = 1 , size ( Xt , 1 ) call basis_bspline_2der ( Xt ( i , 1 ), knot1 , nc ( 1 ), degree ( 1 ), d2B1 , dB1 , B1 ) call basis_bspline_2der ( Xt ( i , 2 ), knot2 , nc ( 2 ), degree ( 2 ), d2B2 , dB2 , B2 ) Bi = kron ( B2 , B1 ) Tgc ( i ,:) = Bi * ( Wc / ( dot_product ( Bi , Wc ))) dBi (:, 1 ) = kron ( B2 , dB1 ) dBi (:, 2 ) = kron ( dB2 , B1 ) dTgc ( i ,:, 1 ) = ( dBi (:, 1 ) * Wc - Tgc ( i ,:) * dot_product ( dBi (:, 1 ), Wc ) ) / dot_product ( Bi , Wc ) dTgc ( i ,:, 2 ) = ( dBi (:, 2 ) * Wc - Tgc ( i ,:) * dot_product ( dBi (:, 2 ), Wc ) ) / dot_product ( Bi , Wc ) d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) , 1 ) = kron ( B2 , d2B1 ) d2Bi ( nc ( 1 ) * nc ( 2 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ), 1 ) = kron ( dB2 , dB1 ) d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) , 2 ) = kron ( dB2 , dB1 ) d2Bi ( nc ( 1 ) * nc ( 2 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ), 2 ) = kron ( d2B2 , B1 ) d2Tgc ( i , 1 : nc ( 1 ) * nc ( 2 ) , 1 ) = & ( d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) , 1 ) * Wc - 2.0_rk * dTgc ( i ,:, 1 ) * dot_product ( dBi (:, 1 ), Wc ) & - Tgc ( i ,:) * dot_product ( d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) , 1 ), Wc )) / dot_product ( Bi , Wc ) d2Tgc ( i , nc ( 1 ) * nc ( 2 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ), 1 ) = & ( d2Bi ( nc ( 1 ) * nc ( 2 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ), 1 ) * Wc - dTgc ( i ,:, 1 ) * dot_product ( dBi (:, 2 ), Wc ) - dTgc ( i ,:, 2 ) * dot_product ( dBi (:, 1 ), Wc ) & - Tgc ( i ,:) * dot_product ( d2Bi ( nc ( 1 ) * nc ( 2 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ), 1 ), Wc )) / dot_product ( Bi , Wc ) d2Tgc ( i , 1 : nc ( 1 ) * nc ( 2 ) , 2 ) = & ( d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) , 2 ) * Wc - dTgc ( i ,:, 1 ) * dot_product ( dBi (:, 2 ), Wc ) - dTgc ( i ,:, 2 ) * dot_product ( dBi (:, 1 ), Wc ) & - Tgc ( i ,:) * dot_product ( d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) , 2 ), Wc )) / dot_product ( Bi , Wc ) d2Tgc ( i , nc ( 1 ) * nc ( 2 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ), 2 ) = & ( d2Bi ( nc ( 1 ) * nc ( 2 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ), 2 ) * Wc - 2.0_rk * dTgc ( i ,:, 2 ) * dot_product ( dBi (:, 2 ), Wc ) & - Tgc ( i ,:) * dot_product ( d2Bi ( nc ( 1 ) * nc ( 2 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ), 2 ), Wc )) / dot_product ( Bi , Wc ) end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine compute_d2Tgc_nurbs_2d_scalar ( Xt , knot1 , knot2 , degree , nc , Wc , d2Tgc , dTgc , Tgc ) use forcad_utils , only : rk , basis_bspline_2der , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:) integer , intent ( in ) :: degree ( 2 ) integer , intent ( in ) :: nc ( 2 ) real ( rk ), intent ( in ), contiguous :: Wc (:) real ( rk ), allocatable , intent ( out ) :: d2Tgc (:,:) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: Tgc (:) real ( rk ), allocatable :: d2Bi (:,:), d2B1 (:), d2B2 (:) real ( rk ), allocatable :: dBi (:,:), dB1 (:), dB2 (:) real ( rk ), allocatable :: Bi (:), B1 (:), B2 (:) allocate ( B1 ( nc ( 1 )), B2 ( nc ( 2 ))) allocate ( dB1 ( nc ( 1 )), dB2 ( nc ( 2 ))) allocate ( d2B1 ( nc ( 1 )), d2B2 ( nc ( 2 ))) allocate ( Bi ( nc ( 1 ) * nc ( 2 )), dBi ( nc ( 1 ) * nc ( 2 ), 2 ), d2Bi ( 2 * nc ( 1 ) * nc ( 2 ), 2 )) allocate ( Tgc ( nc ( 1 ) * nc ( 2 )), dTgc ( nc ( 1 ) * nc ( 2 ), 2 ), d2Tgc ( 2 * nc ( 1 ) * nc ( 2 ), 2 )) call basis_bspline_2der ( Xt ( 1 ), knot1 , nc ( 1 ), degree ( 1 ), d2B1 , dB1 , B1 ) call basis_bspline_2der ( Xt ( 2 ), knot2 , nc ( 2 ), degree ( 2 ), d2B2 , dB2 , B2 ) Bi = kron ( B2 , B1 ) Tgc = Bi * ( Wc / ( dot_product ( Bi , Wc ))) dBi (:, 1 ) = kron ( B2 , dB1 ) dBi (:, 2 ) = kron ( dB2 , B1 ) dTgc (:, 1 ) = ( dBi (:, 1 ) * Wc - Tgc * dot_product ( dBi (:, 1 ), Wc ) ) / dot_product ( Bi , Wc ) dTgc (:, 2 ) = ( dBi (:, 2 ) * Wc - Tgc * dot_product ( dBi (:, 2 ), Wc ) ) / dot_product ( Bi , Wc ) d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) , 1 ) = kron ( B2 , d2B1 ) d2Bi ( nc ( 1 ) * nc ( 2 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ), 1 ) = kron ( dB2 , dB1 ) d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) , 2 ) = kron ( dB2 , dB1 ) d2Bi ( nc ( 1 ) * nc ( 2 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ), 2 ) = kron ( d2B2 , B1 ) d2Tgc ( 1 : nc ( 1 ) * nc ( 2 ) , 1 ) = & ( d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) , 1 ) * Wc - 2.0_rk * dTgc (:, 1 ) * dot_product ( dBi (:, 1 ), Wc ) & - Tgc * dot_product ( d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) , 1 ), Wc )) / dot_product ( Bi , Wc ) d2Tgc ( nc ( 1 ) * nc ( 2 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ), 1 ) = & ( d2Bi ( nc ( 1 ) * nc ( 2 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ), 1 ) * Wc - dTgc (:, 1 ) * dot_product ( dBi (:, 2 ), Wc ) - dTgc (:, 2 ) * dot_product ( dBi (:, 1 ), Wc ) & - Tgc * dot_product ( d2Bi ( nc ( 1 ) * nc ( 2 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ), 1 ), Wc )) / dot_product ( Bi , Wc ) d2Tgc ( 1 : nc ( 1 ) * nc ( 2 ) , 2 ) = & ( d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) , 2 ) * Wc - dTgc (:, 1 ) * dot_product ( dBi (:, 2 ), Wc ) - dTgc (:, 2 ) * dot_product ( dBi (:, 1 ), Wc ) & - Tgc * dot_product ( d2Bi ( 1 : nc ( 1 ) * nc ( 2 ) , 2 ), Wc )) / dot_product ( Bi , Wc ) d2Tgc ( nc ( 1 ) * nc ( 2 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ), 2 ) = & ( d2Bi ( nc ( 1 ) * nc ( 2 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ), 2 ) * Wc - 2.0_rk * dTgc (:, 2 ) * dot_product ( dBi (:, 2 ), Wc ) & - Tgc * dot_product ( d2Bi ( nc ( 1 ) * nc ( 2 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ), 2 ), Wc )) / dot_product ( Bi , Wc ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine compute_d2Tgc_bspline_2d_vector ( Xt , knot1 , knot2 , degree , nc , ng , d2Tgc , dTgc , Tgc ) use forcad_utils , only : rk , basis_bspline_2der , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:,:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:) integer , intent ( in ) :: degree ( 2 ) integer , intent ( in ) :: nc ( 2 ) integer , intent ( in ) :: ng ( 2 ) real ( rk ), allocatable , intent ( out ) :: d2Tgc (:,:,:) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:,:) real ( rk ), allocatable , intent ( out ) :: Tgc (:,:) real ( rk ), allocatable :: d2B1 (:), d2B2 (:) real ( rk ), allocatable :: dB1 (:), dB2 (:) real ( rk ), allocatable :: B1 (:), B2 (:) integer :: i allocate ( d2Tgc ( ng ( 1 ) * ng ( 2 ), 2 * nc ( 1 ) * nc ( 2 ), 2 )) allocate ( dTgc ( ng ( 1 ) * ng ( 2 ), nc ( 1 ) * nc ( 2 ), 2 )) allocate ( Tgc ( ng ( 1 ) * ng ( 2 ), nc ( 1 ) * nc ( 2 ))) do i = 1 , size ( Xt , 1 ) call basis_bspline_2der ( Xt ( i , 1 ), knot1 , nc ( 1 ), degree ( 1 ), d2B1 , dB1 , B1 ) call basis_bspline_2der ( Xt ( i , 2 ), knot2 , nc ( 2 ), degree ( 2 ), d2B2 , dB2 , B2 ) Tgc ( i ,:) = kron ( B2 , B1 ) dTgc ( i ,:, 1 ) = kron ( B2 , dB1 ) dTgc ( i ,:, 2 ) = kron ( dB2 , B1 ) d2Tgc ( i , 1 : nc ( 1 ) * nc ( 2 ) , 1 ) = kron ( B2 , d2B1 ) d2Tgc ( i , nc ( 1 ) * nc ( 2 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ), 1 ) = kron ( dB2 , dB1 ) d2Tgc ( i , 1 : nc ( 1 ) * nc ( 2 ) , 2 ) = kron ( dB2 , dB1 ) d2Tgc ( i , nc ( 1 ) * nc ( 2 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ), 2 ) = kron ( d2B2 , B1 ) end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine compute_d2Tgc_bspline_2d_scalar ( Xt , knot1 , knot2 , degree , nc , d2Tgc , dTgc , Tgc ) use forcad_utils , only : rk , basis_bspline_2der , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:) integer , intent ( in ) :: degree ( 2 ) integer , intent ( in ) :: nc ( 2 ) real ( rk ), allocatable , intent ( out ) :: d2Tgc (:,:) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: Tgc (:) real ( rk ), allocatable :: d2B1 (:), d2B2 (:) real ( rk ), allocatable :: dB1 (:), dB2 (:) real ( rk ), allocatable :: B1 (:), B2 (:) allocate ( d2Tgc ( 2 * nc ( 1 ) * nc ( 2 ), 2 )) allocate ( dTgc ( nc ( 1 ) * nc ( 2 ), 2 )) allocate ( Tgc ( nc ( 1 ) * nc ( 2 ))) call basis_bspline_2der ( Xt ( 1 ), knot1 , nc ( 1 ), degree ( 1 ), d2B1 , dB1 , B1 ) call basis_bspline_2der ( Xt ( 2 ), knot2 , nc ( 2 ), degree ( 2 ), d2B2 , dB2 , B2 ) Tgc = kron ( B2 , B1 ) dTgc (:, 1 ) = kron ( B2 , dB1 ) dTgc (:, 2 ) = kron ( dB2 , B1 ) d2Tgc ( 1 : nc ( 1 ) * nc ( 2 ) , 1 ) = kron ( B2 , d2B1 ) d2Tgc ( nc ( 1 ) * nc ( 2 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ), 1 ) = kron ( dB2 , dB1 ) d2Tgc ( 1 : nc ( 1 ) * nc ( 2 ) , 2 ) = kron ( dB2 , dB1 ) d2Tgc ( nc ( 1 ) * nc ( 2 ) + 1 : 2 * nc ( 1 ) * nc ( 2 ), 2 ) = kron ( d2B2 , B1 ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function compute_Tgc_nurbs_2d_vector ( Xt , knot1 , knot2 , degree , nc , ng , Wc ) result ( Tgc ) use forcad_utils , only : rk , basis_bspline , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:,:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:) integer , intent ( in ) :: degree ( 2 ) integer , intent ( in ) :: nc ( 2 ) integer , intent ( in ) :: ng ( 2 ) real ( rk ), intent ( in ), contiguous :: Wc (:) real ( rk ), allocatable :: Tgc (:,:) real ( rk ), allocatable :: Tgci (:) integer :: i allocate ( Tgc ( ng ( 1 ) * ng ( 2 ), nc ( 1 ) * nc ( 2 ))) allocate ( Tgci ( nc ( 1 ) * nc ( 2 ))) !$OMP PARALLEL DO PRIVATE(Tgci) do i = 1 , size ( Xt , 1 ) Tgci = kron (& basis_bspline ( Xt ( i , 2 ), knot2 , nc ( 2 ), degree ( 2 )),& basis_bspline ( Xt ( i , 1 ), knot1 , nc ( 1 ), degree ( 1 ))) Tgc ( i ,:) = Tgci * ( Wc / ( dot_product ( Tgci , Wc ))) end do !$OMP END PARALLEL DO end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function compute_Tgc_nurbs_2d_scalar ( Xt , knot1 , knot2 , degree , nc , Wc ) result ( Tgc ) use forcad_utils , only : rk , basis_bspline , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:) integer , intent ( in ) :: degree ( 2 ) integer , intent ( in ) :: nc ( 2 ) real ( rk ), intent ( in ), contiguous :: Wc (:) real ( rk ), allocatable :: Tgc (:) allocate ( Tgc ( nc ( 1 ) * nc ( 2 ))) Tgc = kron (& basis_bspline ( Xt ( 2 ), knot2 , nc ( 2 ), degree ( 2 )),& basis_bspline ( Xt ( 1 ), knot1 , nc ( 1 ), degree ( 1 ))) Tgc = Tgc * ( Wc / ( dot_product ( Tgc , Wc ))) end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function compute_Tgc_bspline_2d_vector ( Xt , knot1 , knot2 , degree , nc , ng ) result ( Tgc ) use forcad_utils , only : rk , basis_bspline , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:,:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:) integer , intent ( in ) :: degree ( 2 ) integer , intent ( in ) :: nc ( 2 ) integer , intent ( in ) :: ng ( 2 ) real ( rk ), allocatable :: Tgc (:,:) integer :: i allocate ( Tgc ( ng ( 1 ) * ng ( 2 ), nc ( 1 ) * nc ( 2 ))) !$OMP PARALLEL DO do i = 1 , size ( Xt , 1 ) Tgc ( i ,:) = kron (& basis_bspline ( Xt ( i , 2 ), knot2 , nc ( 2 ), degree ( 2 )),& basis_bspline ( Xt ( i , 1 ), knot1 , nc ( 1 ), degree ( 1 ))) end do !$OMP END PARALLEL DO end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function compute_Tgc_bspline_2d_scalar ( Xt , knot1 , knot2 , degree , nc ) result ( Tgc ) use forcad_utils , only : rk , basis_bspline , kron implicit none real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), intent ( in ), contiguous :: knot1 (:), knot2 (:) integer , intent ( in ) :: degree ( 2 ) integer , intent ( in ) :: nc ( 2 ) real ( rk ), allocatable :: Tgc (:) allocate ( Tgc ( nc ( 1 ) * nc ( 2 ))) Tgc = kron (& basis_bspline ( Xt ( 2 ), knot2 , nc ( 2 ), degree ( 2 )),& basis_bspline ( Xt ( 1 ), knot1 , nc ( 1 ), degree ( 1 ))) end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function nearest_point_help_2d ( ng , Xg , point_Xg ) result ( distances ) use forcad_utils , only : rk implicit none integer , intent ( in ) :: ng ( 2 ) real ( rk ), intent ( in ), contiguous :: Xg (:,:) real ( rk ), intent ( in ), contiguous :: point_Xg (:) real ( rk ), allocatable :: distances (:) integer :: i allocate ( distances ( ng ( 1 ) * ng ( 2 ))) !$OMP PARALLEL DO do i = 1 , ng ( 1 ) * ng ( 2 ) distances ( i ) = norm2 ( Xg ( i ,:) - point_Xg ) end do !$OMP END PARALLEL DO end function !===============================================================================","tags":"","loc":"sourcefile/forcad_nurbs_surface.f90.html"},{"title":"nearest_point_1d.f90 – ForCAD","text":"This file depends on sourcefile~~nearest_point_1d.f90~~EfferentGraph sourcefile~nearest_point_1d.f90 nearest_point_1d.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~nearest_point_1d.f90->sourcefile~forcad.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_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 program nearest_point_1d use forcad , only : rk , nurbs_curve implicit none type ( nurbs_curve ) :: shape !! Declare a NURBS curve object real ( rk ), allocatable :: Xc (:,:), Wc (:) !! Arrays for control points and weights real ( rk ) :: knot ( 6 ) !! Array for knot vector real ( rk ), allocatable :: nearest_Xg (:) !! Array for the nearest point on the curve real ( rk ) :: nearest_Xt !! Array for the parametric coordinates of the nearest point integer :: id !! Variable for the id of the nearest point !----------------------------------------------------------------------------- ! 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 ,:) = [ 5.0_rk , 5.0_rk , 0.0_rk ] !> Define weights for the control points (optional) allocate ( Wc ( 3 )) Wc = [ 1.0_rk , 1.1_rk , 1.0_rk ] !> Define knot vector knot = [ 0.0_rk , 0.0_rk , 0.0_rk , 1.0_rk , 1.0_rk , 1.0_rk ] !> Set knot vector, control points, and weights for the NURBS curve object. !> Wc is optional call shape % set ( knot , Xc , Wc ) !----------------------------------------------------------------------------- ! Creating the NURBS curve !----------------------------------------------------------------------------- !> Generate the NURBS curve with a resolution of 20 call shape % create ( 20 ) !----------------------------------------------------------------------------- ! Nearest point on the curve !----------------------------------------------------------------------------- !> Find the nearest point on the curve to a given point ! nearest_Xg: Coordinates of the nearest point on the curve (optional) ! nearest_Xt: Corresponding parametric coordinates of the nearest point (optional) ! id: id of the nearest point (optional) call shape % nearest_point ([ 4.5_rk , 4.5_rk , 5.0_rk ], nearest_Xg , nearest_Xt , id ) print '(a,1x,g0,2x,g0,2x,g0,a,2x,g0,2x,a,1x,g0)' ,& 'Nearest point on the curve:' , nearest_Xg , ' with parametric coordinates:' , nearest_Xt , ' and id:' , id !----------------------------------------------------------------------------- ! Nearest point on the curve (Optimization) !----------------------------------------------------------------------------- !> Find the nearest point on the curve to a given point !> The optimization method is used to find the nearest point !> The optimization method is based on the Newton-Raphson method ! nearest_Xt: Corresponding parametric coordinates of the nearest point ! nearest_Xg: Coordinates of the nearest point on the curve (optional) call shape % nearest_point2 ([ 4.5_rk , 4.5_rk , 5.0_rk ], 1.0e-11_rk , 30 , nearest_Xt , nearest_Xg ) print '(a,1x,g0,2x,g0,a,2x,g0,2x,g0)' ,& 'Nearest point on the curve:' , nearest_Xg , ' with parametric coordinates:' , nearest_Xt !----------------------------------------------------------------------------- ! Finalizing !----------------------------------------------------------------------------- !> Finalize the NURBS curve object call shape % finalize () deallocate ( nearest_Xg , Xc , Wc ) end program","tags":"","loc":"sourcefile/nearest_point_1d.f90.html"},{"title":"shape_hexahedron.f90 – ForCAD","text":"This file depends on sourcefile~~shape_hexahedron.f90~~EfferentGraph sourcefile~shape_hexahedron.f90 shape_hexahedron.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~shape_hexahedron.f90->sourcefile~forcad.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_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 program shape_hexahedron use forcad , only : rk , nurbs_volume implicit none type ( nurbs_volume ) :: shape !> Set up a hexahedron shape with dimensions L = [2.0, 4.0, 8.0] and a specified number of control points nc = [4, 6, 8]. !> The weights of the control points (Wc) are optional. call shape % set_hexahedron ( L = [ 2.0_rk , 4.0_rk , 8.0_rk ], nc = [ 4 , 6 , 8 ]) ! Additional modifications can be made to control points and weights, or the NURBS can be refined using knot insertion or degree elevation. ! call shape%insert_knots(...) ! call shape%elevate_degree(...) ! ... !> Export the control points to a VTK file for visualization. call shape % export_Xc ( 'vtk/shape_hexahedron_Xc.vtk' ) !> Create the shape using the specified number of elements in each direction. call shape % create ( 8 , 16 , 32 ) !> Export the geometry to a VTK file for visualization. call shape % export_Xg ( 'vtk/shape_hexahedron_Xg.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call shape % show ( 'vtk/shape_hexahedron_Xc.vtk' , 'vtk/shape_hexahedron_Xg.vtk' ) !> Finalize and clean up the shape object. call shape % finalize () end program","tags":"","loc":"sourcefile/shape_hexahedron.f90.html"},{"title":"example_ppm1.f90 – ForCAD","text":"This file depends on sourcefile~~example_ppm1.f90~~EfferentGraph sourcefile~example_ppm1.f90 example_ppm1.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~example_ppm1.f90->sourcefile~forcad.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_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 !> Visualization of NURBS surfaces using ForCAD, ForImage and ForColorMap libraries !> This example converts NURBS surfaces (vector) to an image (raster) using ForCAD, ForImage and ForColorMap libraries. program example_ppm1 use forcad , only : rk , nurbs_surface use forimage , only : ik , format_pnm , color use forcolormap , only : colormap use fortime , only : timer implicit none type ( nurbs_surface ) :: shape type ( format_pnm ) :: image type ( color ) :: background_color type ( colormap ) :: cmap integer ( ik ), allocatable :: px (:, :) real ( rk ), allocatable :: Xg (:,:), z_values (:) real ( rk ) :: center ( 3 ), inner_radius , outer_radius , aspect_ratio integer :: height , width , ng ( 2 ), red , green , blue , res1 , res2 , i integer , allocatable :: idx (:,:) type ( timer ) :: t !----------------------------------------------------------------------------- ! Set the image size and calculate the aspect ratio !----------------------------------------------------------------------------- width = 2000 height = 2000 aspect_ratio = real ( width , rk ) / real ( height , rk ) allocate ( px ( height , 3 * width )) !----------------------------------------------------------------------------- ! Set the background color using ForColor class of ForImage !----------------------------------------------------------------------------- call t % timer_start () call background_color % set ( 'white' , use_library = . true .) do i = 1 , width px (:, 3 * ( i - 1 ) + 1 ) = background_color % get_r () px (:, 3 * ( i - 1 ) + 2 ) = background_color % get_g () px (:, 3 * ( i - 1 ) + 3 ) = background_color % get_b () end do call t % timer_stop ( message = 'Setting the background color' ) !----------------------------------------------------------------------------- ! Set a shape object using ForCAD library !----------------------------------------------------------------------------- call t % timer_start () !> Set the shape parameters for a tetragon res1 = 2000 res2 = 2000 call shape % set_tetragon ( L = [ 1.0_rk , 1.0_rk ], nc = [ 2 , 2 ]) call shape % create ( res1 , res2 ) Xg = shape % get_Xg () ng = shape % get_ng () call shape % finalize () call t % timer_stop ( message = 'Creating a tetragon' ) !----------------------------------------------------------------------------- ! Set the z-values of the geometry points !----------------------------------------------------------------------------- ! circular gradient z_values = (( Xg (:, 1 ) - minval ( Xg (:, 1 ))) / ( maxval ( Xg (:, 1 )) - minval ( Xg (:, 1 )))) ** 2 & + (( Xg (:, 2 ) - minval ( Xg (:, 2 ))) / ( maxval ( Xg (:, 2 )) - minval ( Xg (:, 2 ))) ** 2 ) !----------------------------------------------------------------------------- ! Set the colormap using ForColorMap library !----------------------------------------------------------------------------- call cmap % set ( 'buda' , 0.0_rk , 1.0_rk ) !----------------------------------------------------------------------------- ! Set colors to the shape !----------------------------------------------------------------------------- call t % timer_start () Xg (:, 2 ) = Xg (:, 2 ) * aspect_ratio allocate ( idx ( ng ( 1 ) * ng ( 2 ), 2 )) idx (:, 1 ) = min ( max ( 1 , int ( Xg (:, 1 ) * width ) + 1 ), width ) idx (:, 2 ) = min ( max ( 1 , int ( Xg (:, 2 ) * height ) + 1 ), height ) do i = 1 , ng ( 1 ) * ng ( 2 ) call cmap % compute_RGB ( z_values ( i ), red , green , blue ) px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 1 ) = red px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 2 ) = green px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 3 ) = blue end do deallocate ( idx ) call t % timer_stop ( message = 'Setting colors' ) !----------------------------------------------------------------------------- ! Set a shape object using ForCAD library !----------------------------------------------------------------------------- call t % timer_start () !> Set the shape parameters for a ring center = [ 0.25_rk , 0.25_rk , 0.0_rk ] outer_radius = 0.24_rk inner_radius = 0.0_rk res1 = 3500 res2 = 1000 center ( 2 ) = center ( 2 ) / aspect_ratio call shape % set_ring ( center , inner_radius , outer_radius ) call shape % create ( res1 , res2 ) Xg = shape % get_Xg () ng = shape % get_ng () call shape % finalize () call t % timer_stop ( message = 'Creating a ring' ) !----------------------------------------------------------------------------- ! Set the z-values of the geometry points !----------------------------------------------------------------------------- ! circular gradient z_values = (( Xg (:, 1 ) - minval ( Xg (:, 1 ))) / ( maxval ( Xg (:, 1 )) - minval ( Xg (:, 1 )))) ** 2 & + (( Xg (:, 2 ) - minval ( Xg (:, 2 ))) / ( maxval ( Xg (:, 2 )) - minval ( Xg (:, 2 ))) ** 2 ) !----------------------------------------------------------------------------- ! Set the colormap using ForColorMap library !----------------------------------------------------------------------------- call cmap % set ( 'managua' , 0.0_rk , 2.2_rk ) !----------------------------------------------------------------------------- ! Set colors to the shape !----------------------------------------------------------------------------- call t % timer_start () Xg (:, 2 ) = Xg (:, 2 ) * aspect_ratio allocate ( idx ( ng ( 1 ) * ng ( 2 ), 2 )) idx (:, 1 ) = min ( max ( 1 , int ( Xg (:, 1 ) * width ) + 1 ), width ) idx (:, 2 ) = min ( max ( 1 , int ( Xg (:, 2 ) * height ) + 1 ), height ) do i = 1 , ng ( 1 ) * ng ( 2 ) call cmap % compute_RGB ( z_values ( i ), red , green , blue ) px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 1 ) = red px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 2 ) = green px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 3 ) = blue end do deallocate ( idx ) call t % timer_stop ( message = 'Setting colors' ) !----------------------------------------------------------------------------- ! Set a shape object using ForCAD library !----------------------------------------------------------------------------- call t % timer_start () !> Set the shape parameters for a ring center = [ 0.75_rk , 0.25_rk , 0.0_rk ] outer_radius = 0.24_rk inner_radius = 0.08_rk res1 = 3500 res2 = 1000 center ( 2 ) = center ( 2 ) / aspect_ratio call shape % set_ring ( center , inner_radius , outer_radius ) call shape % create ( res1 , res2 ) Xg = shape % get_Xg () ng = shape % get_ng () call shape % finalize () call t % timer_stop ( message = 'Creating a ring' ) !----------------------------------------------------------------------------- ! Set the z-values of the geometry points !----------------------------------------------------------------------------- ! linear gradient in the y-direction z_values = ( Xg (:, 2 ) - minval ( Xg (:, 2 ))) / ( maxval ( Xg (:, 2 )) - minval ( Xg (:, 2 ))) !----------------------------------------------------------------------------- ! Set the colormap using ForColorMap library !----------------------------------------------------------------------------- call cmap % set ( 'lipari' , 0.0_rk , 1.0_rk ) !----------------------------------------------------------------------------- ! Set colors to the shape !----------------------------------------------------------------------------- call t % timer_start () Xg (:, 2 ) = Xg (:, 2 ) * aspect_ratio allocate ( idx ( ng ( 1 ) * ng ( 2 ), 2 )) idx (:, 1 ) = min ( max ( 1 , int ( Xg (:, 1 ) * width ) + 1 ), width ) idx (:, 2 ) = min ( max ( 1 , int ( Xg (:, 2 ) * height ) + 1 ), height ) do i = 1 , ng ( 1 ) * ng ( 2 ) call cmap % compute_RGB ( z_values ( i ), red , green , blue ) px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 1 ) = red px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 2 ) = green px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 3 ) = blue end do deallocate ( idx ) call t % timer_stop ( message = 'Setting colors' ) !----------------------------------------------------------------------------- ! Set a shape object using ForCAD library !----------------------------------------------------------------------------- call t % timer_start () !> Set the shape parameters for a ring center = [ 0.25_rk , 0.75_rk , 0.0_rk ] outer_radius = 0.24_rk inner_radius = 0.01_rk res1 = 3500 res2 = 1000 center ( 2 ) = center ( 2 ) / aspect_ratio call shape % set_ring ( center , inner_radius , outer_radius ) call shape % create ( res1 , res2 ) Xg = shape % get_Xg () ng = shape % get_ng () call shape % finalize () call t % timer_stop ( message = 'Creating a ring' ) !----------------------------------------------------------------------------- ! Set the z-values of the geometry points !----------------------------------------------------------------------------- ! linear gradient in the x-direction z_values = ( Xg (:, 1 ) - minval ( Xg (:, 1 ))) / ( maxval ( Xg (:, 1 )) - minval ( Xg (:, 1 ))) !----------------------------------------------------------------------------- ! Set the colormap using ForColorMap library !----------------------------------------------------------------------------- call cmap % set ( 'oslo10' , 0.0_rk , 1.0_rk ) !----------------------------------------------------------------------------- ! Set colors to the shape !----------------------------------------------------------------------------- call t % timer_start () Xg (:, 2 ) = Xg (:, 2 ) * aspect_ratio allocate ( idx ( ng ( 1 ) * ng ( 2 ), 2 )) idx (:, 1 ) = min ( max ( 1 , int ( Xg (:, 1 ) * width ) + 1 ), width ) idx (:, 2 ) = min ( max ( 1 , int ( Xg (:, 2 ) * height ) + 1 ), height ) do i = 1 , ng ( 1 ) * ng ( 2 ) call cmap % compute_RGB ( z_values ( i ), red , green , blue ) px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 1 ) = red px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 2 ) = green px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 3 ) = blue end do deallocate ( idx ) call t % timer_stop ( message = 'Setting colors' ) !----------------------------------------------------------------------------- ! Set a shape object using ForCAD library !----------------------------------------------------------------------------- call t % timer_start () !> Set the shape parameters for a ring center = [ 0.75_rk , 0.75_rk , 0.0_rk ] outer_radius = 0.24_rk inner_radius = 0.22_rk res1 = 3500 res2 = 1000 center ( 2 ) = center ( 2 ) / aspect_ratio call shape % set_ring ( center , inner_radius , outer_radius ) call shape % create ( res1 , res2 ) Xg = shape % get_Xg () ng = shape % get_ng () call shape % finalize () call t % timer_stop ( message = 'Creating a ring' ) !----------------------------------------------------------------------------- ! Set the z-values of the geometry points !----------------------------------------------------------------------------- ! linear gradient in the x-direction z_values = ( Xg (:, 1 ) - minval ( Xg (:, 1 ))) / ( maxval ( Xg (:, 1 )) - minval ( Xg (:, 1 ))) !----------------------------------------------------------------------------- ! Set the colormap using ForColorMap library !----------------------------------------------------------------------------- red = 255 green = 215 blue = 0 !----------------------------------------------------------------------------- ! Set colors to the shape !----------------------------------------------------------------------------- call t % timer_start () Xg (:, 2 ) = Xg (:, 2 ) * aspect_ratio allocate ( idx ( ng ( 1 ) * ng ( 2 ), 2 )) idx (:, 1 ) = min ( max ( 1 , int ( Xg (:, 1 ) * width ) + 1 ), width ) idx (:, 2 ) = min ( max ( 1 , int ( Xg (:, 2 ) * height ) + 1 ), height ) do i = 1 , ng ( 1 ) * ng ( 2 ) px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 1 ) = red px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 2 ) = green px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 3 ) = blue end do deallocate ( idx ) call t % timer_stop ( message = 'Setting colors' ) !----------------------------------------------------------------------------- ! Save the image to a PPM file using ForImage library !----------------------------------------------------------------------------- call t % timer_start () call image % set_pnm (& encoding = 'binary' , & file_format = 'ppm' , & width = width , & height = height , & max_color = 255 , & comment = 'example: ForCAD + ForImage + ForColor + ForColormap' , & pixels = px & ) call image % export_pnm ( 'ppm/example_ppm1' ) call image % finalize () call t % timer_stop ( message = 'Saving the image' ) ! Clean up call cmap % finalize () deallocate ( px , Xg , z_values ) end program","tags":"","loc":"sourcefile/example_ppm1.f90.html"},{"title":"example_ppm3.f90 – ForCAD","text":"This file depends on sourcefile~~example_ppm3.f90~~EfferentGraph sourcefile~example_ppm3.f90 example_ppm3.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~example_ppm3.f90->sourcefile~forcad.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_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 !> Visualization of NURBS surfaces using ForCAD, ForImage and ForColorMap libraries !> This example converts NURBS surfaces (vector) to an image (raster) using ForCAD, ForImage and ForColorMap libraries. program example_ppm3 use forcad , only : rk , nurbs_surface use forimage , only : ik , format_pnm , color use forcolormap , only : colormap use fortime , only : timer implicit none type ( nurbs_surface ) :: shape type ( format_pnm ) :: image type ( color ) :: background_color type ( colormap ) :: cmap integer ( ik ), allocatable :: px (:, :) real ( rk ), allocatable :: Xg (:,:), z_values (:) real ( rk ) :: aspect_ratio integer :: height , width , ng ( 2 ), red , green , blue , res1 , res2 , i integer , allocatable :: idx (:,:) type ( timer ) :: t !----------------------------------------------------------------------------- ! Set the image size and calculate the aspect ratio !----------------------------------------------------------------------------- width = 2000 height = 2000 aspect_ratio = real ( width , rk ) / real ( height , rk ) allocate ( px ( height , 3 * width )) !----------------------------------------------------------------------------- ! Set the background color using ForColor class of ForImage !----------------------------------------------------------------------------- call t % timer_start () call background_color % set ( 'white' , use_library = . true .) do i = 1 , width px (:, 3 * ( i - 1 ) + 1 ) = background_color % get_r () px (:, 3 * ( i - 1 ) + 2 ) = background_color % get_g () px (:, 3 * ( i - 1 ) + 3 ) = background_color % get_b () end do call t % timer_stop ( message = 'Setting the background color' ) !----------------------------------------------------------------------------- ! Set a shape object using ForCAD library !----------------------------------------------------------------------------- call t % timer_start () !> Set the shape parameters for a tetragon res1 = 2000 res2 = 2000 call shape % set_tetragon ( L = [ 1.0_rk , 1.0_rk ], nc = [ 2 , 2 ]) call shape % create ( res1 , res2 ) Xg = shape % get_Xg () ng = shape % get_ng () call shape % finalize () call t % timer_stop ( message = 'Creating a tetragon' ) !----------------------------------------------------------------------------- ! Set the z-values of the geometry points !----------------------------------------------------------------------------- ! circular gradient z_values = (( Xg (:, 1 ) - minval ( Xg (:, 1 ))) / ( maxval ( Xg (:, 1 )) - minval ( Xg (:, 1 )))) ** 2 & + (( Xg (:, 2 ) - minval ( Xg (:, 2 ))) / ( maxval ( Xg (:, 2 )) - minval ( Xg (:, 2 ))) ** 2 ) !----------------------------------------------------------------------------- ! Set the colormap using ForColorMap library !----------------------------------------------------------------------------- call cmap % set ( 'buda' , 0.0_rk , 1.0_rk ) !----------------------------------------------------------------------------- ! Set colors to the shape !----------------------------------------------------------------------------- call t % timer_start () Xg (:, 2 ) = Xg (:, 2 ) * aspect_ratio allocate ( idx ( ng ( 1 ) * ng ( 2 ), 2 )) idx (:, 1 ) = min ( max ( 1 , int ( Xg (:, 1 ) * width ) + 1 ), width ) idx (:, 2 ) = min ( max ( 1 , int ( Xg (:, 2 ) * height ) + 1 ), height ) do i = 1 , ng ( 1 ) * ng ( 2 ) call cmap % compute_RGB ( z_values ( i ), red , green , blue ) px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 1 ) = red px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 2 ) = green px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 3 ) = blue end do deallocate ( idx ) call t % timer_stop ( message = 'Setting colors' ) !----------------------------------------------------------------------------- ! Set a shape object using ForCAD library !----------------------------------------------------------------------------- call t % timer_start () res1 = 2000 res2 = 2000 call shape % set_tetragon ( L = [ 0.48_rk , 0.48_rk ], nc = [ 2 , 2 ]) call shape % translate_Xc ([ 0.01_rk , 0.01_rk , 0.0_rk ]) call shape % create ( res1 , res2 ) Xg = shape % get_Xg () ng = shape % get_ng () call shape % finalize () call t % timer_stop ( message = 'Creating a ring' ) !----------------------------------------------------------------------------- ! Set the z-values of the geometry points !----------------------------------------------------------------------------- ! circular gradient z_values = (( Xg (:, 1 ) - minval ( Xg (:, 1 ))) / ( maxval ( Xg (:, 1 )) - minval ( Xg (:, 1 )))) ** 2 & + (( Xg (:, 2 ) - minval ( Xg (:, 2 ))) / ( maxval ( Xg (:, 2 )) - minval ( Xg (:, 2 ))) ** 2 ) !----------------------------------------------------------------------------- ! Set the colormap using ForColorMap library !----------------------------------------------------------------------------- call cmap % set ( 'managua' , 0.0_rk , 2.2_rk ) !----------------------------------------------------------------------------- ! Set colors to the shape !----------------------------------------------------------------------------- call t % timer_start () Xg (:, 2 ) = Xg (:, 2 ) * aspect_ratio allocate ( idx ( ng ( 1 ) * ng ( 2 ), 2 )) idx (:, 1 ) = min ( max ( 1 , int ( Xg (:, 1 ) * width ) + 1 ), width ) idx (:, 2 ) = min ( max ( 1 , int ( Xg (:, 2 ) * height ) + 1 ), height ) do i = 1 , ng ( 1 ) * ng ( 2 ) call cmap % compute_RGB ( z_values ( i ), red , green , blue ) px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 1 ) = red px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 2 ) = green px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 3 ) = blue end do deallocate ( idx ) call t % timer_stop ( message = 'Setting colors' ) !----------------------------------------------------------------------------- ! Set a shape object using ForCAD library !----------------------------------------------------------------------------- call t % timer_start () res1 = 2000 res2 = 2000 call shape % set_tetragon ( L = [ 0.48_rk , 0.48_rk ], nc = [ 3 , 2 ]) call shape % translate_Xc ([ 0.51_rk , 0.01_rk , 0.0_rk ]) call shape % modify_Xc ( 0.24_rk , 2 , 2 ) call shape % modify_Xc ( 0.26_rk , 5 , 2 ) call shape % create ( res1 , res2 ) Xg = shape % get_Xg () ng = shape % get_ng () call shape % finalize () call t % timer_stop ( message = 'Creating a ring' ) !----------------------------------------------------------------------------- ! Set the z-values of the geometry points !----------------------------------------------------------------------------- ! linear gradient in the y-direction z_values = ( Xg (:, 2 ) - minval ( Xg (:, 2 ))) / ( maxval ( Xg (:, 2 )) - minval ( Xg (:, 2 ))) !----------------------------------------------------------------------------- ! Set the colormap using ForColorMap library !----------------------------------------------------------------------------- call cmap % set ( 'lipari' , 0.0_rk , 1.0_rk ) !----------------------------------------------------------------------------- ! Set colors to the shape !----------------------------------------------------------------------------- call t % timer_start () Xg (:, 2 ) = Xg (:, 2 ) * aspect_ratio allocate ( idx ( ng ( 1 ) * ng ( 2 ), 2 )) idx (:, 1 ) = min ( max ( 1 , int ( Xg (:, 1 ) * width ) + 1 ), width ) idx (:, 2 ) = min ( max ( 1 , int ( Xg (:, 2 ) * height ) + 1 ), height ) do i = 1 , ng ( 1 ) * ng ( 2 ) call cmap % compute_RGB ( z_values ( i ), red , green , blue ) px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 1 ) = red px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 2 ) = green px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 3 ) = blue end do deallocate ( idx ) call t % timer_stop ( message = 'Setting colors' ) !----------------------------------------------------------------------------- ! Set a shape object using ForCAD library !----------------------------------------------------------------------------- call t % timer_start () res1 = 2000 res2 = 2000 call shape % set_tetragon ( L = [ 0.48_rk , 0.48_rk ], nc = [ 2 , 3 ]) call shape % translate_Xc ([ 0.01_rk , 0.51_rk , 0.0_rk ]) call shape % modify_Xc ( 0.26_rk , 3 , 1 ) call shape % modify_Xc ( 0.24_rk , 4 , 1 ) call shape % create ( res1 , res2 ) Xg = shape % get_Xg () ng = shape % get_ng () call shape % finalize () call t % timer_stop ( message = 'Creating a ring' ) !----------------------------------------------------------------------------- ! Set the z-values of the geometry points !----------------------------------------------------------------------------- ! linear gradient in the x-direction z_values = ( Xg (:, 1 ) - minval ( Xg (:, 1 ))) / ( maxval ( Xg (:, 1 )) - minval ( Xg (:, 1 ))) !----------------------------------------------------------------------------- ! Set the colormap using ForColorMap library !----------------------------------------------------------------------------- call cmap % set ( 'oslo10' , 0.0_rk , 1.0_rk ) !----------------------------------------------------------------------------- ! Set colors to the shape !----------------------------------------------------------------------------- call t % timer_start () Xg (:, 2 ) = Xg (:, 2 ) * aspect_ratio allocate ( idx ( ng ( 1 ) * ng ( 2 ), 2 )) idx (:, 1 ) = min ( max ( 1 , int ( Xg (:, 1 ) * width ) + 1 ), width ) idx (:, 2 ) = min ( max ( 1 , int ( Xg (:, 2 ) * height ) + 1 ), height ) do i = 1 , ng ( 1 ) * ng ( 2 ) call cmap % compute_RGB ( z_values ( i ), red , green , blue ) px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 1 ) = red px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 2 ) = green px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 3 ) = blue end do deallocate ( idx ) call t % timer_stop ( message = 'Setting colors' ) !----------------------------------------------------------------------------- ! Set a shape object using ForCAD library !----------------------------------------------------------------------------- call t % timer_start () res1 = 2000 res2 = 2000 call shape % set_tetragon ( L = [ 0.48_rk , 0.48_rk ], nc = [ 3 , 3 ]) call shape % translate_Xc ([ 0.51_rk , 0.51_rk , 0.0_rk ]) call shape % modify_Xc ( 0.7_rk , 1 , 2 ) call shape % modify_Xc ( 0.7_rk , 3 , 2 ) call shape % modify_Xc ( 0.8_rk , 7 , 2 ) call shape % modify_Xc ( 0.8_rk , 9 , 2 ) call shape % create ( res1 , res2 ) Xg = shape % get_Xg () ng = shape % get_ng () call shape % finalize () call t % timer_stop ( message = 'Creating a ring' ) !----------------------------------------------------------------------------- ! Set the z-values of the geometry points !----------------------------------------------------------------------------- ! linear gradient in the x-direction z_values = ( Xg (:, 1 ) - minval ( Xg (:, 1 ))) / ( maxval ( Xg (:, 1 )) - minval ( Xg (:, 1 ))) !----------------------------------------------------------------------------- ! Set the colormap using ForColorMap library !----------------------------------------------------------------------------- red = 255 green = 215 blue = 0 !----------------------------------------------------------------------------- ! Set colors to the shape !----------------------------------------------------------------------------- call t % timer_start () Xg (:, 2 ) = Xg (:, 2 ) * aspect_ratio allocate ( idx ( ng ( 1 ) * ng ( 2 ), 2 )) idx (:, 1 ) = min ( max ( 1 , int ( Xg (:, 1 ) * width ) + 1 ), width ) idx (:, 2 ) = min ( max ( 1 , int ( Xg (:, 2 ) * height ) + 1 ), height ) do i = 1 , ng ( 1 ) * ng ( 2 ) px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 1 ) = red px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 2 ) = green px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 3 ) = blue end do deallocate ( idx ) call t % timer_stop ( message = 'Setting colors' ) !----------------------------------------------------------------------------- ! Save the image to a PPM file using ForImage library !----------------------------------------------------------------------------- call t % timer_start () call image % set_pnm (& encoding = 'binary' , & file_format = 'ppm' , & width = width , & height = height , & max_color = 255 , & comment = 'example: ForCAD + ForImage + ForColor + ForColormap' , & pixels = px & ) call image % export_pnm ( 'ppm/example_ppm3' ) call image % finalize () call t % timer_stop ( message = 'Saving the image' ) ! Clean up call cmap % finalize () deallocate ( px , Xg , z_values ) end program","tags":"","loc":"sourcefile/example_ppm3.f90.html"},{"title":"demo_curve.f90 – ForCAD","text":"This file depends on sourcefile~~demo_curve.f90~~EfferentGraph sourcefile~demo_curve.f90 demo_curve.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~demo_curve.f90->sourcefile~forcad.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_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 curve object to create, and finalize a NURBS 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_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 !----------------------------------------------------------------------------- ! Setting up the NURBS curve !----------------------------------------------------------------------------- !> Define control points for the NURBS 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 NURBS curve object call nurbs % set ( Xc , Wc ) !> Deallocate local arrays deallocate ( Xc , Wc ) !> Export initial control points to a VTK file call nurbs % export_Xc ( 'vtk/demo_curve_Xc.vtk' ) !----------------------------------------------------------------------------- ! Creating the NURBS curve !----------------------------------------------------------------------------- !> Generate the NURBS curve with a resolution of 500 call nurbs % create ( res = 500 ) !> Export the generated curve to a VTK file call nurbs % export_Xg ( 'vtk/demo_curve_Xg.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call nurbs % show ( 'vtk/demo_curve_Xc.vtk' , 'vtk/demo_curve_Xg.vtk' ) !----------------------------------------------------------------------------- ! Finalizing !----------------------------------------------------------------------------- !> Finalize the NURBS curve object call nurbs % 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 ), 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 * real ( coil - 1 , rk ) / 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_nurbs_curve","tags":"","loc":"sourcefile/demo_curve.f90.html"},{"title":"demo_surface.f90 – ForCAD","text":"This file depends on sourcefile~~demo_surface.f90~~EfferentGraph sourcefile~demo_surface.f90 demo_surface.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~demo_surface.f90->sourcefile~forcad.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_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 surface object to create, and finalize a NURBS 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_nurbs_surface use forcad , only : rk , nurbs_surface implicit none type ( nurbs_surface ) :: nurbs !! Declare a NURBS surface object real ( rk ), allocatable :: Xc (:,:), Wc (:) !! Arrays for control points and weights !----------------------------------------------------------------------------- ! Setting up the NURBS surface !----------------------------------------------------------------------------- !> Define control points for the NURBS 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 NURBS surface object call nurbs % set ([ 10 , 10 ], Xc , Wc ) !> Deallocate local arrays deallocate ( Xc , Wc ) !> Export initial control points to a VTK file call nurbs % export_Xc ( 'vtk/demo_surface_Xc.vtk' ) !----------------------------------------------------------------------------- ! Creating the NURBS surface !----------------------------------------------------------------------------- !> Generate the NURBS surface with a resolution of 30x30 call nurbs % create ( res1 = 30 , res2 = 30 ) !> Export the generated surface to a VTK file call nurbs % export_Xg ( 'vtk/demo_surface_Xg.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call nurbs % show ( 'vtk/demo_surface_Xc.vtk' , 'vtk/demo_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 ), 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 , rk ) y_spacing = 1.0_rk / real ( num_rows - 1 , rk ) 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 , rk ) * x_spacing control_points (( i - 1 ) * num_cols + j , 2 ) = y_offset + real ( i - 1 , rk ) * 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/demo_surface.f90.html"},{"title":"shape_tetragon.f90 – ForCAD","text":"This file depends on sourcefile~~shape_tetragon.f90~~EfferentGraph sourcefile~shape_tetragon.f90 shape_tetragon.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~shape_tetragon.f90->sourcefile~forcad.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_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 program shape_tetragon use forcad implicit none type ( nurbs_surface ) :: shape !! Declare a NURBS surface object !----------------------------------------------------------------------------- ! Setting up the NURBS tetrangon !----------------------------------------------------------------------------- !> Set a tetragon with lengths of 2.0 and 3.0 and 3 and 4 control points in each direction !> The weights of the control points (Wc) are optional. call shape % set_tetragon ( L = [ 2.0_rk , 3.0_rk ], nc = [ 3 , 4 ]) !> Export the control points to a VTK file call shape % export_Xc ( 'vtk/shape_tetragon_Xc.vtk' ) !----------------------------------------------------------------------------- ! Creating the NURBS surface !----------------------------------------------------------------------------- !> Generate the NURBS surface with resolutions of 30 in both dimensions call shape % create ( 30 , 30 ) !> Export the generated surface to a VTK file call shape % export_Xg ( 'vtk/shape_tetragon_Xg.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call shape % show ( 'vtk/shape_tetragon_Xc.vtk' , 'vtk/shape_tetragon_Xg.vtk' ) !----------------------------------------------------------------------------- ! Finalizing !----------------------------------------------------------------------------- !> Finalize the NURBS surface object call shape % finalize () end program","tags":"","loc":"sourcefile/shape_tetragon.f90.html"},{"title":"put_to_nurbs.f90 – ForCAD","text":"This file depends on sourcefile~~put_to_nurbs.f90~~EfferentGraph sourcefile~put_to_nurbs.f90 put_to_nurbs.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~put_to_nurbs.f90->sourcefile~forcad.f90 sourcefile~forcad_utils.f90 forcad_utils.f90 sourcefile~put_to_nurbs.f90->sourcefile~forcad_utils.f90 sourcefile~forcad.f90->sourcefile~forcad_utils.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_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 program example_put_to_nurbs use forcad use forcad_utils , only : hexahedron_Xc implicit none type ( nurbs_volume ) :: control_shape real ( rk ), allocatable :: X (:,:) integer , allocatable :: elem (:,:) integer :: i , nunit !> You can create your shape or use a predefined one !> Read coordinates from file allocate ( X ( 23200 , 3 )) open ( newunit = nunit , file = 'example/put_to_nurbs_X.txt' ) do i = 1 , 23200 read ( nunit , * ) X ( i , 1 ), X ( i , 2 ), X ( i , 3 ) end do close ( nunit ) !> Read element connectivities from file allocate ( elem ( 20577 , 8 )) open ( newunit = nunit , file = 'example/put_to_nurbs_elem.txt' ) do i = 1 , 20577 read ( nunit , * ) elem ( i , 1 ), elem ( i , 2 ), elem ( i , 4 ), elem ( i , 3 ), elem ( i , 5 ), elem ( i , 6 ), elem ( i , 8 ), elem ( i , 7 ) end do close ( nunit ) !> Set a control shape that will be used to put the shape into !> The contol shape is a hexahedron with 100x40x10 with 10x5x3 number of control points !> By modifying the control shape you can modify the shape call control_shape % set ( nc = [ 10 , 5 , 3 ], Xc = hexahedron_Xc ( L = [ 10 0.0_rk , 4 0.0_rk , 1 0.0_rk ], nc = [ 10 , 5 , 3 ])) !> Map the shape into the shape call control_shape % put_to_nurbs ( X , elem ) !> Deallocate local variables deallocate ( X , elem ) !> Export the shape and the control shape to vtk files call control_shape % export_Xc ( 'vtk/control_shape.vtk' ) call control_shape % export_Xg ( 'vtk/shape.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call control_shape % show ( 'vtk/control_shape.vtk' , 'vtk/shape.vtk' ) !> Finalize the control shape call control_shape % finalize () end program","tags":"","loc":"sourcefile/put_to_nurbs.f90.html"},{"title":"shape_C_3d.f90 – ForCAD","text":"This file depends on sourcefile~~shape_c_3d.f90~~EfferentGraph sourcefile~shape_c_3d.f90 shape_C_3d.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~shape_c_3d.f90->sourcefile~forcad.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_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 program shape_C_3d use forcad , only : rk , nurbs_volume implicit none type ( nurbs_volume ) :: shape !----------------------------------------------------------------------------- ! Setting up NURBS C-shape !----------------------------------------------------------------------------- !> Set a C-shape with radius 2.0 and center at [0.0, 0.0, 0.0] call shape % set_C ( center = [ 0.0_rk , 0.0_rk , 0.0_rk ], radius1 = 1.0_rk , radius2 = 2.0_rk , length = 2.0_rk ) !> Export control points to a VTK file call shape % export_Xc ( 'vtk/shape_C_3d_Xc.vtk' ) !----------------------------------------------------------------------------- ! Creating C-shape !----------------------------------------------------------------------------- !> Generate the NURBS C-shape with a resolution of 100 call shape % create ( 100 , 60 , 10 ) !> Export the generated cirlce to a VTK file call shape % export_Xg ( 'vtk/shape_C_3d_Xg.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call shape % show ( 'vtk/shape_C_3d_Xc.vtk' , 'vtk/shape_C_3d_Xg.vtk' ) !----------------------------------------------------------------------------- ! Finalizing !----------------------------------------------------------------------------- !> Finalize the NURBS curve object call shape % finalize () end program","tags":"","loc":"sourcefile/shape_c_3d.f90.html"},{"title":"example_surface_1.f90 – ForCAD","text":"This file depends on sourcefile~~example_surface_1.f90~~EfferentGraph sourcefile~example_surface_1.f90 example_surface_1.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~example_surface_1.f90->sourcefile~forcad.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_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 example3_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 Wc ( 2 ) = 2.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 ) !> Deallocate local arrays deallocate ( 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' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call nurbs % show ( 'vtk/nurbs_surface_Xc.vtk' , 'vtk/nurbs_surface_Xg.vtk' ) !----------------------------------------------------------------------------- ! Refinements !----------------------------------------------------------------------------- !> Print size of the knot vectors print * , size ( nurbs % get_knot ( 1 )) print * , size ( nurbs % get_knot ( 2 )) !> Insert knots 0.25, twice and 0.75, once in both directions call nurbs % insert_knots ( 1 , [ 0.25_rk , 0.75_rk ], [ 2 , 1 ]) ! direction 1 call nurbs % insert_knots ( 2 , [ 0.25_rk , 0.75_rk ], [ 2 , 1 ]) ! direction 2 !> Print size of the knot vectors after inserting knots print * , size ( nurbs % get_knot ( 1 )) print * , size ( nurbs % get_knot ( 2 )) !> Print the degrees print * , nurbs % get_degree () !> Elevate degree by 2 in both directions call nurbs % elevate_degree ( 1 , 2 ) ! direction 1 call nurbs % elevate_degree ( 2 , 2 ) ! direction 2 !> Print the degrees after elevating print * , nurbs % get_degree () !> Print size of the knot vectors print * , size ( nurbs % get_knot ( 1 )) print * , size ( nurbs % get_knot ( 2 )) !> Remove knots 0.25, twice and 0.75, once in both directions call nurbs % remove_knots ( 1 , [ 0.25_rk , 0.75_rk ], [ 2 , 1 ]) ! direction 1 call nurbs % remove_knots ( 2 , [ 0.25_rk , 0.75_rk ], [ 2 , 1 ]) ! direction 2 !> Print size of the knot vectors after removing knots print * , size ( nurbs % get_knot ( 1 )) print * , size ( nurbs % get_knot ( 2 )) !> Generate the refined NURBS surface with resolutions of 30 in both dimensions call nurbs % create () !> Export updated control points to a VTK file call nurbs % export_Xc ( 'vtk/nurbs_surface_Xc2.vtk' ) !> Export the refined generated surface to a VTK file call nurbs % export_Xg ( 'vtk/nurbs_surface_Xg2.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call nurbs % show ( 'vtk/nurbs_surface_Xc2.vtk' , 'vtk/nurbs_surface_Xg2.vtk' ) !----------------------------------------------------------------------------- ! Transformations !----------------------------------------------------------------------------- !> Rotate the control points call nurbs % rotate_Xc ( alpha = 4 5.0_rk , beta = 0.0_rk , theta = 9 0.0_rk ) !> Rotate the generated curve call nurbs % rotate_Xg ( alpha =- 4 5.0_rk , beta = 0.0_rk , theta =- 9 0.0_rk ) !> Translate the control points call nurbs % translate_Xc ([ 1.0_rk , 2.0_rk , - 3.0_rk ]) !> Translate the generated curve call nurbs % translate_Xg ([ - 1.0_rk , - 2.0_rk , 3.0_rk ]) !> Export the transformed control points to a VTK file call nurbs % export_Xc ( 'vtk/nurbs_surface_Xc3.vtk' ) !> Export the transformed generated volume to a VTK file call nurbs % export_Xg ( 'vtk/nurbs_surface_Xg3.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call nurbs % show ( 'vtk/nurbs_surface_Xc3.vtk' , 'vtk/nurbs_surface_Xg3.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 ), 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 , rk ) y_spacing = 1.0_rk / real ( num_rows - 1 , rk ) 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 , rk ) * x_spacing control_points (( i - 1 ) * num_cols + j , 2 ) = y_offset + real ( i - 1 , rk ) * 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 example3_surface","tags":"","loc":"sourcefile/example_surface_1.f90.html"},{"title":"shape_C_1d.f90 – ForCAD","text":"This file depends on sourcefile~~shape_c_1d.f90~~EfferentGraph sourcefile~shape_c_1d.f90 shape_C_1d.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~shape_c_1d.f90->sourcefile~forcad.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_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 program shape_C_1d use forcad , only : rk , nurbs_curve implicit none type ( nurbs_curve ) :: shape !----------------------------------------------------------------------------- ! Setting up NURBS C-shape !----------------------------------------------------------------------------- !> Set a C-shape with radius 2.0 and center at [0.0, 0.0, 0.0] call shape % set_C ( center = [ 0.0_rk , 0.0_rk , 0.0_rk ], radius = 2.0_rk ) !> Export control points to a VTK file call shape % export_Xc ( 'vtk/shape_C_1d_Xc.vtk' ) !----------------------------------------------------------------------------- ! Creating C-shape !----------------------------------------------------------------------------- !> Generate the NURBS C-shape with a resolution of 100 call shape % create ( res = 100 ) !> Export the generated cirlce to a VTK file call shape % export_Xg ( 'vtk/shape_C_1d_Xg.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call shape % show ( 'vtk/shape_C_1d_Xc.vtk' , 'vtk/shape_C_1d_Xg.vtk' ) !----------------------------------------------------------------------------- ! Finalizing !----------------------------------------------------------------------------- !> Finalize the NURBS curve object call shape % finalize () end program","tags":"","loc":"sourcefile/shape_c_1d.f90.html"},{"title":"shape_half_ring_3d.f90 – ForCAD","text":"This file depends on sourcefile~~shape_half_ring_3d.f90~~EfferentGraph sourcefile~shape_half_ring_3d.f90 shape_half_ring_3d.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~shape_half_ring_3d.f90->sourcefile~forcad.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_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 program shape_half_ring_3d use forcad , only : rk , nurbs_volume implicit none type ( nurbs_volume ) :: shape !> Set up a half ring centered at 0,0,0 with inner radius 1, outer radius 2, and length 1. call shape % set_half_ring ([ 0.0_rk , 0.0_rk , 0.0_rk ], 1.0_rk , 2.0_rk , 1.0_rk ) !> Export the control points to a VTK file for visualization. call shape % export_Xc ( 'vtk/shape_half_ring_3d_Xc.vtk' ) !> Create the shape using the specified number of elements in each direction. call shape % create ( 60 , 15 , 10 ) !> Export the geometry to a VTK file for visualization. call shape % export_Xg ( 'vtk/shape_half_ring_3d_Xg.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call shape % show ( 'vtk/shape_half_ring_3d_Xc.vtk' , 'vtk/shape_half_ring_3d_Xg.vtk' ) !> Finalize and clean up the shape object. call shape % finalize () end program","tags":"","loc":"sourcefile/shape_half_ring_3d.f90.html"},{"title":"example_curve_1.f90 – ForCAD","text":"This file depends on sourcefile~~example_curve_1.f90~~EfferentGraph sourcefile~example_curve_1.f90 example_curve_1.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~example_curve_1.f90->sourcefile~forcad.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_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 example1_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 ( 6 ) !! 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 ,:) = [ 5.0_rk , 5.0_rk , 0.0_rk ] !> Define weights for the control points (optional) allocate ( Wc ( 3 )) Wc = [ 1.0_rk , 2.0_rk , 0.3_rk ] !> Define knot vector knot = [ 0.0_rk , 0.0_rk , 0.0_rk , 1.0_rk , 1.0_rk , 1.0_rk ] !> Set knot vector, control points, and weights for the NURBS curve object. !> Wc is optional call nurbs % set ( knot , Xc , Wc ) !> Deallocate local arrays deallocate ( 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 20 call nurbs % create ( res = 20 ) !> Export the generated curve to a VTK file call nurbs % export_Xg ( 'vtk/nurbs_curve_Xg.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call nurbs % show ( 'vtk/nurbs_curve_Xc.vtk' , 'vtk/nurbs_curve_Xg.vtk' ) !----------------------------------------------------------------------------- ! Refinements !----------------------------------------------------------------------------- !> Print size of the knot vector print * , size ( nurbs % get_knot ()) !> Insert knots 0.25, twice and 0.75, once call nurbs % insert_knots ([ 0.25_rk , 0.75_rk ], [ 2 , 1 ]) !> Print size of the updated knot vector print * , size ( nurbs % get_knot ()) !> Print the degree of the curve print * , nurbs % get_degree () !> Elevate the degree of the curve (2 times) call nurbs % elevate_degree ( 2 ) !> Print the updated degree of the curve print * , nurbs % get_degree () !> Print size of the knot vector print * , size ( nurbs % get_knot ()) !> Remove knots 0.25, twice and 0.75, once call nurbs % remove_knots ([ 0.25_rk , 0.75_rk ], [ 2 , 1 ]) !> Print size of the updated knot vector print * , size ( nurbs % get_knot ()) !> Generate the refined curve with a resolution of 20 call nurbs % create () !> Export updated control points to a VTK file call nurbs % export_Xc ( 'vtk/nurbs_curve_Xc2.vtk' ) !> Export the refined generated curve to a VTK file call nurbs % export_Xg ( 'vtk/nurbs_curve_Xg2.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call nurbs % show ( 'vtk/nurbs_curve_Xc2.vtk' , 'vtk/nurbs_curve_Xg2.vtk' ) !----------------------------------------------------------------------------- ! Transformations !----------------------------------------------------------------------------- !> Rotate the control points call nurbs % rotate_Xc ( alpha = 4 5.0_rk , beta = 0.0_rk , theta = 9 0.0_rk ) !> Rotate the generated curve call nurbs % rotate_Xg ( alpha =- 4 5.0_rk , beta = 0.0_rk , theta =- 9 0.0_rk ) !> Translate the control points call nurbs % translate_Xc ([ 1.0_rk , 2.0_rk , - 3.0_rk ]) !> Translate the generated curve call nurbs % translate_Xg ([ - 1.0_rk , - 2.0_rk , 3.0_rk ]) !> Export the transformed control points to a VTK file call nurbs % export_Xc ( 'vtk/nurbs_curve_Xc3.vtk' ) !> Export the transformed generated volume to a VTK file call nurbs % export_Xg ( 'vtk/nurbs_curve_Xg3.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call nurbs % show ( 'vtk/nurbs_curve_Xc3.vtk' , 'vtk/nurbs_curve_Xg3.vtk' ) !----------------------------------------------------------------------------- ! Finalizing !----------------------------------------------------------------------------- !> Finalize the NURBS curve object call nurbs % finalize () end program example1_curve","tags":"","loc":"sourcefile/example_curve_1.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_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_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~put_to_nurbs.f90 put_to_nurbs.f90 sourcefile~put_to_nurbs.f90->sourcefile~forcad_utils.f90 sourcefile~put_to_nurbs.f90->sourcefile~forcad.f90 sourcefile~demo_curve.f90 demo_curve.f90 sourcefile~demo_curve.f90->sourcefile~forcad.f90 sourcefile~demo_surface.f90 demo_surface.f90 sourcefile~demo_surface.f90->sourcefile~forcad.f90 sourcefile~demo_volume.f90 demo_volume.f90 sourcefile~demo_volume.f90->sourcefile~forcad.f90 sourcefile~example_curve_1.f90 example_curve_1.f90 sourcefile~example_curve_1.f90->sourcefile~forcad.f90 sourcefile~example_ppm1.f90 example_ppm1.f90 sourcefile~example_ppm1.f90->sourcefile~forcad.f90 sourcefile~example_ppm2.f90 example_ppm2.f90 sourcefile~example_ppm2.f90->sourcefile~forcad.f90 sourcefile~example_ppm3.f90 example_ppm3.f90 sourcefile~example_ppm3.f90->sourcefile~forcad.f90 sourcefile~example_surface_1.f90 example_surface_1.f90 sourcefile~example_surface_1.f90->sourcefile~forcad.f90 sourcefile~example_volume_1.f90 example_volume_1.f90 sourcefile~example_volume_1.f90->sourcefile~forcad.f90 sourcefile~nearest_point_1d.f90 nearest_point_1d.f90 sourcefile~nearest_point_1d.f90->sourcefile~forcad.f90 sourcefile~nearest_point_2d.f90 nearest_point_2d.f90 sourcefile~nearest_point_2d.f90->sourcefile~forcad.f90 sourcefile~nearest_point_2d_bench.f90 nearest_point_2d_bench.f90 sourcefile~nearest_point_2d_bench.f90->sourcefile~forcad.f90 sourcefile~nearest_point_3d.f90 nearest_point_3d.f90 sourcefile~nearest_point_3d.f90->sourcefile~forcad.f90 sourcefile~shape_c_1d.f90 shape_C_1d.f90 sourcefile~shape_c_1d.f90->sourcefile~forcad.f90 sourcefile~shape_c_2d.f90 shape_C_2d.f90 sourcefile~shape_c_2d.f90->sourcefile~forcad.f90 sourcefile~shape_c_3d.f90 shape_C_3d.f90 sourcefile~shape_c_3d.f90->sourcefile~forcad.f90 sourcefile~shape_circle.f90 shape_circle.f90 sourcefile~shape_circle.f90->sourcefile~forcad.f90 sourcefile~shape_half_circle.f90 shape_half_circle.f90 sourcefile~shape_half_circle.f90->sourcefile~forcad.f90 sourcefile~shape_half_ring_2d.f90 shape_half_ring_2d.f90 sourcefile~shape_half_ring_2d.f90->sourcefile~forcad.f90 sourcefile~shape_half_ring_3d.f90 shape_half_ring_3d.f90 sourcefile~shape_half_ring_3d.f90->sourcefile~forcad.f90 sourcefile~shape_hexahedron.f90 shape_hexahedron.f90 sourcefile~shape_hexahedron.f90->sourcefile~forcad.f90 sourcefile~shape_ring_2d.f90 shape_ring_2d.f90 sourcefile~shape_ring_2d.f90->sourcefile~forcad.f90 sourcefile~shape_ring_3d.f90 shape_ring_3d.f90 sourcefile~shape_ring_3d.f90->sourcefile~forcad.f90 sourcefile~shape_tetragon.f90 shape_tetragon.f90 sourcefile~shape_tetragon.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 !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> This module contains parameters, functions and subroutines that are used in the library. module forcad_utils implicit none private public :: rk , basis_bernstein , basis_bspline , elemConn_C0 , kron , ndgrid , compute_multiplicity , compute_knot_vector , & basis_bspline_der , insert_knot_A_5_1 , findspan , elevate_degree_A_5_9 , hexahedron_Xc , tetragon_Xc , remove_knots_A_5_8 , & elemConn_Cn , unique , rotation , basis_bspline_2der 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 elemConn_Cn module procedure cmp_elemConn_Cn_L module procedure cmp_elemConn_Cn_S module procedure cmp_elemConn_Cn_V end interface !=============================================================================== !=============================================================================== interface ndgrid module procedure ndgrid2 module procedure ndgrid3 end interface !=============================================================================== !=============================================================================== interface compute_multiplicity module procedure compute_multiplicity1 module procedure compute_multiplicity2 end interface !=============================================================================== !=============================================================================== interface unique module procedure unique_integer module procedure unique_real end interface !=============================================================================== contains !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function basis_bspline ( Xt , knot , nc , degree ) result ( B ) integer , intent ( in ) :: degree real ( rk ), intent ( in ), contiguous :: 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 : degree ), source = 0.0_rk ) do p = 0 , degree do concurrent ( 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 (:, degree ) end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine basis_bspline_der ( Xt , knot , nc , degree , dB , B ) integer , intent ( in ) :: degree real ( rk ), intent ( in ), contiguous :: knot (:) integer , intent ( in ) :: nc real ( rk ), intent ( in ) :: Xt real ( rk ), allocatable , intent ( out ) :: dB (:) real ( rk ), allocatable , intent ( out ), optional :: B (:) real ( rk ), allocatable :: N (:,:), dN_dXt (:,:) real ( rk ) :: temp , Xth_i , Xth_i1 , Xth_ip , Xth_ip1 integer :: i , p temp = abs ( Xt - knot ( size ( knot ))) allocate ( N ( nc , 0 : degree ), source = 0.0_rk ) allocate ( dN_dXt ( nc , 0 : degree ), source = 0.0_rk ) do p = 0 , degree do concurrent ( 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 . Xth_i <= Xt . and . Xt <= Xth_i1 ) then N ( i , 0 ) = 1.0_rk dN_dXt ( i , 0 ) = 0.0_rk end if if ( Xth_ip /= Xth_i ) then N ( i , p ) = ( Xt - Xth_i ) / ( Xth_ip - Xth_i ) * N ( i , p - 1 ) dN_dXt ( i , p ) = ( N ( i , p - 1 ) + ( Xt - Xth_i ) * dN_dXt ( i , p - 1 ) ) / ( Xth_ip - Xth_i ) end if if ( Xth_ip1 /= Xth_i1 ) then N ( i , p ) = N ( i , p ) + ( Xth_ip1 - Xt ) / ( Xth_ip1 - Xth_i1 ) * N ( i + 1 , p - 1 ) dN_dXt ( i , p ) = dN_dXt ( i , p ) - ( N ( i + 1 , p - 1 ) - ( Xth_ip1 - Xt ) * dN_dXt ( i + 1 , p - 1 ) ) / ( Xth_ip1 - Xth_i1 ) end if end do end do dB = dN_dXt (:, degree ) if ( present ( B )) B = N (:, degree ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine basis_bspline_2der ( Xt , knot , nc , degree , d2B , dB , B ) integer , intent ( in ) :: degree real ( rk ), intent ( in ), contiguous :: knot (:) integer , intent ( in ) :: nc real ( rk ), intent ( in ) :: Xt real ( rk ), allocatable , intent ( out ) :: d2B (:) real ( rk ), allocatable , intent ( out ), optional :: dB (:) real ( rk ), allocatable , intent ( out ), optional :: B (:) real ( rk ), allocatable :: N (:,:), dN_dXt (:,:), d2N_dXt2 (:,:) real ( rk ) :: temp , Xth_i , Xth_i1 , Xth_ip , Xth_ip1 integer :: i , p temp = abs ( Xt - knot ( size ( knot ))) allocate ( N ( nc , 0 : degree ), source = 0.0_rk ) allocate ( dN_dXt ( nc , 0 : degree ), source = 0.0_rk ) allocate ( d2N_dXt2 ( nc , 0 : degree ), source = 0.0_rk ) do p = 0 , degree do concurrent ( 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 . Xth_i <= Xt . and . Xt <= Xth_i1 ) then N ( i , 0 ) = 1.0_rk dN_dXt ( i , 0 ) = 0.0_rk d2N_dXt2 ( i , 0 ) = 0.0_rk end if if ( Xth_ip /= Xth_i ) then N ( i , p ) = ( Xt - Xth_i ) / ( Xth_ip - Xth_i ) * N ( i , p - 1 ) ! dN_dXt(i,p) = p*(N(i,p-1)/(Xth_ip - Xth_i)) dN_dXt ( i , p ) = ( N ( i , p - 1 ) + ( Xt - Xth_i ) * dN_dXt ( i , p - 1 ) ) / ( Xth_ip - Xth_i ) d2N_dXt2 ( i , p ) = ( 2 * dN_dXt ( i , p - 1 ) + ( Xt - Xth_i ) * d2N_dXt2 ( i , p - 1 )) / ( Xth_ip - Xth_i ) end if if ( Xth_ip1 /= Xth_i1 ) then N ( i , p ) = N ( i , p ) + ( Xth_ip1 - Xt ) / ( Xth_ip1 - Xth_i1 ) * N ( i + 1 , p - 1 ) ! dN_dXt(i,p) = dN_dXt(i,p) - p*( N(i+1,p-1)/(Xth_ip1 - Xth_i1)) dN_dXt ( i , p ) = dN_dXt ( i , p ) - ( N ( i + 1 , p - 1 ) - ( Xth_ip1 - Xt ) * dN_dXt ( i + 1 , p - 1 ) ) / ( Xth_ip1 - Xth_i1 ) d2N_dXt2 ( i , p ) = d2N_dXt2 ( i , p ) - ( 2 * dN_dXt ( i + 1 , p - 1 ) - ( Xth_ip1 - Xt ) * d2N_dXt2 ( i + 1 , p - 1 )) / ( Xth_ip1 - Xth_i1 ) end if end do end do d2B = d2N_dXt2 (:, degree ) if ( present ( dB )) dB = dN_dXt (:, degree ) if ( present ( B )) B = N (:, degree ) end subroutine !=============================================================================== !=============================================================================== !> 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 :: p , degree degree = nc - 1 allocate ( B ( nc ), source = 0.0_rk ) do concurrent ( p = 0 : degree ) B ( p + 1 ) = gamma ( real ( nc , kind = rk )) / ( gamma ( real ( p + 1 , kind = rk )) * gamma ( real ( nc - p , kind = rk ))) if ( Xt == 0.0_rk . and . p == 0 ) then B ( p + 1 ) = B ( p + 1 ) * ( 1.0_rk - Xt ) ** ( degree - p ) else if ( Xt == 0.0_rk . and . degree - p == 0 ) then B ( p + 1 ) = B ( p + 1 ) * ( Xt ** p ) else B ( p + 1 ) = B ( p + 1 ) * ( Xt ** p ) * ( 1.0_rk - Xt ) ** ( degree - p ) end if end do end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function kron ( u , v ) result ( w ) real ( rk ), intent ( in ), contiguous :: u (:), v (:) real ( rk ) :: w ( size ( u ) * size ( v )) integer :: i , j , n n = size ( v ) do concurrent ( i = 1 : size ( u ), j = 1 : n ) w (( i - 1 ) * n + j ) = u ( i ) * v ( j ) end do end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine ndgrid2 ( X_dir1 , X_dir2 , Xt ) real ( rk ), intent ( in ), contiguous :: X_dir1 (:), X_dir2 (:) real ( rk ), allocatable , intent ( out ) :: Xt (:,:) integer :: s1 , s2 , i , j s1 = size ( X_dir1 ) s2 = size ( X_dir2 ) allocate ( Xt ( s1 * s2 , 2 )) do concurrent ( j = 1 : s2 , i = 1 : s1 ) Xt (( j - 1 ) * s1 + i , 1 ) = X_dir1 ( i ) Xt (( j - 1 ) * s1 + i , 2 ) = X_dir2 ( j ) end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine ndgrid3 ( X_dir1 , X_dir2 , X_dir3 , Xt ) real ( rk ), intent ( in ), contiguous :: X_dir1 (:), X_dir2 (:), X_dir3 (:) real ( rk ), allocatable , intent ( out ) :: Xt (:,:) integer :: s1 , s2 , s3 , i , j , k s1 = size ( X_dir1 ) s2 = size ( X_dir2 ) s3 = size ( X_dir3 ) allocate ( Xt ( s1 * s2 * s3 , 3 )) do concurrent ( k = 1 : s3 , j = 1 : s2 , i = 1 : s1 ) Xt ((( k - 1 ) * s2 + ( j - 1 )) * s1 + i , 1 ) = X_dir1 ( i ) Xt ((( k - 1 ) * s2 + ( j - 1 )) * s1 + i , 2 ) = X_dir2 ( j ) Xt ((( k - 1 ) * s2 + ( j - 1 )) * s1 + i , 3 ) = X_dir3 ( k ) end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function repelem ( a , b ) result ( c ) real ( rk ), intent ( in ), contiguous :: a (:) integer , intent ( in ), contiguous :: b (:) real ( rk ) :: c ( sum ( b )) 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 !=============================================================================== !=============================================================================== !> 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 , allocatable :: elemConn (:,:) integer :: i , l integer , allocatable :: nodes (:) if ( mod ( nnode - 1 , p ) /= 0 ) error stop 'cmp_elemConn_C0_L: nnode-1 must be divisible by p' allocate ( elemConn ( ( nnode - 1 ) / p , p + 1 )) 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 , allocatable :: elemConn (:,:) integer :: i , j , l integer , allocatable :: nodes (:,:) if ( mod ( nnode1 - 1 , p1 ) /= 0 ) error stop 'cmp_elemConn_C0_S: nnode1-1 must be divisible by p1' if ( mod ( nnode2 - 1 , p2 ) /= 0 ) error stop 'cmp_elemConn_C0_S: nnode2-1 must be divisible by p2' allocate ( elemConn ( (( nnode1 - 1 ) / p1 ) * (( nnode2 - 1 ) / p2 ), ( p1 + 1 ) * ( p2 + 1 ))) 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 , allocatable :: elemConn (:,:) integer :: i , j , k , l integer , allocatable :: nodes (:,:,:) if ( mod ( nnode1 - 1 , p1 ) /= 0 ) error stop 'cmp_elemConn_C0_V: nnode1-1 must be divisible by p1' if ( mod ( nnode2 - 1 , p2 ) /= 0 ) error stop 'cmp_elemConn_C0_V: nnode2-1 must be divisible by p2' if ( mod ( nnode3 - 1 , p3 ) /= 0 ) error stop 'cmp_elemConn_C0_V: nnode3-1 must be divisible by p3' allocate ( elemConn ( (( nnode1 - 1 ) / p1 ) * (( nnode2 - 1 ) / p2 ) * (( nnode3 - 1 ) / p3 ) ,( p1 + 1 ) * ( p2 + 1 ) * ( p3 + 1 ))) 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 subroutine cmp_elemConn_Cn_L ( nnode , p , Xth , vecKnot_mul , elemConn ) integer , intent ( in ) :: p , nnode integer , intent ( in ), contiguous :: vecKnot_mul (:) real ( rk ), intent ( in ), contiguous :: Xth (:) integer , allocatable , intent ( out ) :: elemConn (:,:) integer , allocatable :: nodes (:) integer :: i , nnel , m , nelem nnel = p + 1 nodes = [( i , i = 1 , nnode )] nelem = size ( Xth ) - 1 allocate ( elemConn ( nelem , nnel )) m = - p do i = 1 , nelem m = m + vecKnot_mul ( i ) elemConn ( i ,:) = nodes ( m : m + p ) end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine cmp_elemConn_Cn_S ( nnode1 , nnode2 , p1 , p2 ,& Xth1 , Xth2 , vecKnot_mul1 , vecKnot_mul2 , elemConn ) integer , intent ( in ) :: p1 , p2 , nnode1 , nnode2 integer , intent ( in ), contiguous :: vecKnot_mul1 (:), vecKnot_mul2 (:) real ( rk ), intent ( in ), contiguous :: Xth1 (:), Xth2 (:) integer , allocatable , intent ( out ) :: elemConn (:,:) integer , allocatable :: nodes (:,:), nodes_vec (:) integer :: nnd_total , i , j , l , nnel1 , nnel2 , m , n , nelem1 , nelem2 , nelem nnel1 = p1 + 1 nnel2 = p2 + 1 nnd_total = nnode1 * nnode2 allocate ( nodes_vec ( nnd_total )) Nodes_vec = [( i , i = 1 , nnd_total )] nodes = reshape ( nodes_vec ,[ nnode1 , nnode2 ]) nelem1 = size ( Xth1 ) - 1 nelem2 = size ( Xth2 ) - 1 nelem = nelem1 * nelem2 allocate ( elemConn ( nelem , nnel1 * nnel2 )) l = 0 n = - p2 do j = 1 , nelem2 n = n + vecKnot_mul2 ( j ) m = - p1 do i = 1 , nelem1 m = m + vecKnot_mul1 ( i ) l = l + 1 elemConn ( l ,:) = reshape ( nodes ( m : m + p1 , n : n + p2 ), [ nnel1 * nnel2 ]) end do end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine cmp_elemConn_Cn_V ( nnode1 , nnode2 , nnode3 , p1 , p2 , p3 ,& Xth1 , Xth2 , Xth3 , vecKnot_mul1 , vecKnot_mul2 , vecKnot_mul3 , elemConn ) integer , intent ( in ) :: p1 , p2 , p3 , nnode1 , nnode2 , nnode3 integer , intent ( in ), contiguous :: vecKnot_mul1 (:), vecKnot_mul2 (:), vecKnot_mul3 (:) real ( rk ), intent ( in ), contiguous :: Xth1 (:), Xth2 (:), Xth3 (:) integer , allocatable , intent ( out ) :: elemConn (:,:) integer , allocatable :: nodes (:,:,:), nodes_vec (:) integer :: nnd_total , i , j , k , l , nnel1 , nnel2 , nnel3 , m , n , o , nelem1 , nelem2 , nelem3 , nelem nnel1 = p1 + 1 nnel2 = p2 + 1 nnel3 = p3 + 1 nnd_total = nnode1 * nnode2 * nnode3 allocate ( nodes_vec ( nnd_total )) Nodes_vec = [( i , i = 1 , nnd_total )] nodes = reshape ( nodes_vec ,[ nnode1 , nnode2 , nnode3 ]) nelem1 = size ( Xth1 ) - 1 nelem2 = size ( Xth2 ) - 1 nelem3 = size ( Xth3 ) - 1 nelem = nelem1 * nelem2 * nelem3 allocate ( elemConn ( nelem , nnel1 * nnel2 * nnel3 )) l = 0 o = - p3 do k = 1 , nelem3 o = o + vecKnot_mul3 ( k ) n = - p2 do j = 1 , nelem2 n = n + vecKnot_mul2 ( j ) m = - p1 do i = 1 , nelem1 m = m + vecKnot_mul1 ( i ) l = l + 1 elemConn ( l ,:) = reshape ( nodes ( m : m + p1 , n : n + p2 , o : o + p3 ), [ nnel1 * nnel2 * nnel3 ]) end do end do end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function compute_multiplicity1 ( knot ) result ( multiplicity ) real ( rk ), intent ( in ), contiguous :: knot (:) integer , 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_multiplicity2 ( knot , Xth ) result ( multiplicity ) real ( rk ), intent ( in ), contiguous :: knot (:) real ( rk ), intent ( in ) :: Xth integer :: multiplicity integer :: i , count , size_knot size_knot = size ( knot ) multiplicity = 0 i = 1 do while ( i <= size_knot ) if ( knot ( i ) == Xth ) then count = 1 do while ( i + count <= size_knot . and . knot ( i + count ) == Xth ) count = count + 1 end do if ( count > multiplicity ) then multiplicity = count end if i = i + count else i = i + 1 end if end do end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function compute_knot_vector ( Xth_dir , degree , continuity ) result ( knot ) real ( rk ), intent ( in ), contiguous :: Xth_dir (:) integer , intent ( in ) :: degree integer , intent ( in ), contiguous :: continuity (:) real ( rk ), allocatable :: knot (:) knot = repelem ( Xth_dir , ( degree - continuity )) end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause elemental pure function isinf ( x ) result ( output ) real ( rk ), intent ( in ) :: x logical :: output output = . false . if ( x > huge ( x )) output = . true . if ( x < - huge ( x )) output = . true . end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause elemental pure function isnan ( x ) result ( output ) real ( rk ), intent ( in ) :: x logical :: output output = . false . if ( x /= x ) output = . true . end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine insert_knot_A_5_1 ( p , UP , Pw , u , k , s , r , nq , UQ , Qw ) integer , intent ( in ) :: p , k , s , r real ( rk ), intent ( in ), contiguous :: UP ( 0 :), Pw ( 0 :,:) real ( rk ), intent ( in ) :: u real ( rk ), allocatable , intent ( out ) :: UQ (:), Qw (:,:) integer , intent ( out ) :: nq integer :: i , j , L , mp , dim , np real ( rk ), allocatable :: Rw (:,:) real ( rk ) :: alpha dim = size ( Pw , 2 ) np = size ( Pw , 1 ) - 1 mp = np + p + 1 nq = np + r allocate ( UQ ( 0 : mp + r )) allocate ( Qw ( 0 : nq , 1 : dim )) allocate ( Rw ( 0 : p , 1 : dim )) UQ ( 0 : k ) = UP ( 0 : k ) UQ ( k + 1 : k + r ) = u UQ ( k + 1 + r : mp + r ) = UP ( k + 1 : mp ) Qw ( 0 : k - p ,:) = Pw ( 0 : k - p ,:) Qw ( k - s + r : np + r ,:) = Pw ( k - s : np ,:) Rw ( 0 : p - s ,:) = Pw ( k - p : k - s ,:) do j = 1 , r L = k - p + j do i = 0 , p - j - s alpha = ( u - UP ( L + i )) / ( UP ( i + k + 1 ) - UP ( L + i )) Rw ( i ,:) = alpha * Rw ( i + 1 ,:) + ( 1.0_rk - alpha ) * Rw ( i ,:) end do Qw ( L ,:) = Rw ( 0 ,:) Qw ( k + r - j - s ,:) = Rw ( p - j - s ,:) end do Qw ( L + 1 : k - s - 1 ,:) = Rw ( 1 : k - s - 1 - L ,:) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function findspan ( n , degree , Xth , knot ) result ( s ) integer , intent ( in ) :: n , degree real ( rk ), intent ( in ) :: Xth real ( rk ), intent ( in ), contiguous :: knot (:) integer :: s integer :: low , high , mid if ( Xth == knot ( n + 2 )) then s = n return end if low = degree high = n + 1 mid = ( low + high ) / 2 do while ( Xth < knot ( mid + 1 ) . or . Xth >= knot ( mid + 2 )) if ( Xth < knot ( mid + 1 )) then high = mid else low = mid end if mid = ( low + high ) / 2 end do s = mid end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine elevate_degree_A_5_9 ( t , knot , degree , Xcw , nc_new , knot_new , Xcw_new ) integer , intent ( in ) :: t real ( rk ), intent ( in ), contiguous :: Xcw (:,:), knot (:) integer , intent ( in ) :: degree integer , intent ( out ) :: nc_new real ( rk ), allocatable , intent ( out ) :: Xcw_new (:,:), knot_new (:) real ( rk ), allocatable :: bezalfs (:,:), bpts (:,:), ebpts (:,:), Nextbpts (:,:), alfs (:) real ( rk ) :: inv , alpha1 , alpha2 , Xth1 , Xth2 , numer , den integer :: n , lbz , rbz , sv , tr , kj , first , knoti , last , alpha3 , dim , nc integer :: i , j , q , s , m , ph , ph2 , mpi , mh , r , a , b , Xcwi , oldr , mul integer , allocatable :: mlp (:) nc = size ( Xcw , 1 ) dim = size ( Xcw , 2 ) mlp = compute_multiplicity ( knot ) mlp = mlp + t nc_new = sum ( mlp ) - ( mlp ( 1 ) - 1 ) - 1 allocate ( Xcw_new ( nc_new , dim ), source = 0.0_rk ) allocate ( bezalfs ( degree + 1 , degree + t + 1 ), source = 0.0_rk ) allocate ( bpts ( degree + 1 , dim ), source = 0.0_rk ) allocate ( ebpts ( degree + t + 1 , dim ), source = 0.0_rk ) allocate ( Nextbpts ( degree + 1 , dim ), source = 0.0_rk ) allocate ( alfs ( degree ), source = 0.0_rk ) n = nc - 1 m = n + degree + 1 ph = degree + t ph2 = ph / 2 bezalfs ( 1 , 1 ) = 1.0_rk bezalfs ( degree + 1 , ph + 1 ) = 1.0_rk do i = 1 , ph2 inv = 1.0_rk / bincoeff ( ph , i ) mpi = min ( degree , i ) do j = max ( 0 , i - t ), mpi bezalfs ( j + 1 , i + 1 ) = inv * bincoeff ( degree , j ) * bincoeff ( t , i - j ) end do end do do i = ph2 + 1 , ph - 1 mpi = min ( degree , i ) do j = max ( 0 , i - t ), mpi bezalfs ( j + 1 , i + 1 ) = bezalfs ( degree - j + 1 , ph - i + 1 ) end do end do mh = ph knoti = ph + 1 r = - 1 a = degree b = degree + 1 Xcwi = 1 Xth1 = knot ( 1 ) Xcw_new ( 1 ,:) = Xcw ( 1 ,:) allocate ( knot_new ( sum ( mlp )), source = 0.0_rk ) knot_new ( 1 : ph + 1 ) = Xth1 do i = 0 , degree bpts ( i + 1 ,:) = Xcw ( i + 1 ,:) end do do while ( b < m ) i = b do while ( b < m . and . knot ( b + 1 ) == knot ( b + 2 )) b = b + 1 if ( b + 2 > size ( knot )) then exit end if end do mul = b - i + 1 mh = mh + mul + t Xth2 = knot ( b + 1 ) oldr = r r = degree - mul if ( oldr > 0 ) then lbz = ( oldr + 2 ) / 2 else lbz = 1 end if if ( r > 0 ) then rbz = ph - ( r + 1 ) / 2 else rbz = ph end if if ( r > 0 ) then numer = Xth2 - Xth1 do q = degree , mul + 1 , - 1 alfs ( q - mul ) = numer / ( knot ( a + q + 1 ) - Xth1 ) end do do j = 1 , r sv = r - j s = mul + j do q = degree , s , - 1 bpts ( q + 1 ,:) = ( 1.0_rk - alfs ( q - s + 1 )) * bpts ( q ,:) + alfs ( q - s + 1 ) * bpts ( q + 1 ,:) end do Nextbpts ( sv + 1 ,:) = bpts ( degree + 1 ,:) end do end if do i = lbz , ph ebpts ( i + 1 ,:) = 0.0_rk mpi = min ( degree , i ) do j = max ( 0 , i - t ), mpi ebpts ( i + 1 ,:) = bezalfs ( j + 1 , i + 1 ) * bpts ( j + 1 ,:) + ebpts ( i + 1 ,:) end do end do if ( oldr > 1 ) then first = knoti - 2 last = knoti den = Xth2 - Xth1 alpha3 = floor (( Xth2 - knot ( knoti )) / den ) do tr = 1 , oldr - 1 i = first j = last kj = j - knoti + 1 do while ( j - i > tr ) if ( i < Xcwi ) then alpha1 = ( Xth2 - knot ( i + 1 )) / ( Xth1 - knot ( i + 1 )) Xcw_new ( i + 1 ,:) = ( 1 - alpha1 ) * Xcw_new ( i ,:) + alpha1 * Xcw_new ( i + 1 ,:) end if if ( j >= lbz ) then if ( j - tr <= knoti - ph + oldr ) then alpha2 = ( Xth2 - knot_new ( j - tr + 1 )) / den ebpts ( kj + 1 ,:) = alpha2 * ebpts ( kj + 1 ,:) + ( 1 - alpha2 ) * ebpts ( kj + 2 ,:) else ebpts ( kj + 1 ,:) = ( 1 - alpha3 ) * ebpts (:, kj + 2 ) + alpha3 * ebpts ( kj + 1 ,:) end if end if i = i + 1 j = j - 1 kj = kj - 1 end do first = first - 1 last = last + 1 end do end if if ( a /= degree ) then do i = 0 , ph - oldr - 1 knot_new ( knoti + 1 ) = Xth1 knoti = knoti + 1 end do end if do j = lbz , rbz Xcw_new ( Xcwi + 1 ,:) = ebpts ( j + 1 ,:) Xcwi = Xcwi + 1 end do if ( b < m ) then do j = 0 , r - 1 bpts ( j + 1 ,:) = Nextbpts ( j + 1 ,:) end do do j = r , degree bpts ( j + 1 ,:) = Xcw ( b - degree + j + 1 ,:) end do a = b b = b + 1 Xth1 = Xth2 else do i = 0 , ph knot_new ( knoti + i + 1 ) = Xth2 end do end if end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function bincoeff ( n , k ) result ( b ) integer , intent ( in ) :: n , k real ( rk ) :: b b = floor ( 0.5_rk + exp ( factln ( n ) - factln ( k ) - factln ( n - k ))) end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function factln ( n ) result ( f ) integer , intent ( in ) :: n real ( rk ) :: f if ( n <= 1 ) then f = 0.0_rk return end if f = log ( gamma ( real ( n + 1 , rk ))) end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function hexahedron_Xc ( L , nc ) result ( Xc ) real ( rk ), intent ( in ) :: L ( 3 ) integer , intent ( in ) :: nc ( 3 ) real ( rk ), allocatable :: Xc (:,:) real ( rk ) :: dx , dy , dz integer :: i , j , k , nci dx = L ( 1 ) / real ( nc ( 1 ) - 1 , rk ) dy = L ( 2 ) / real ( nc ( 2 ) - 1 , rk ) dz = L ( 3 ) / real ( nc ( 3 ) - 1 , rk ) allocate ( Xc ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ), 3 )) nci = 1 do k = 0 , nc ( 3 ) - 1 do j = 0 , nc ( 2 ) - 1 do i = 0 , nc ( 1 ) - 1 Xc ( nci , 1 ) = real ( i , rk ) * dx Xc ( nci , 2 ) = real ( j , rk ) * dy Xc ( nci , 3 ) = real ( k , rk ) * dz nci = nci + 1 end do end do end do end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function tetragon_Xc ( L , nc ) result ( Xc ) real ( rk ), intent ( in ) :: L ( 2 ) integer , intent ( in ) :: nc ( 2 ) real ( rk ), allocatable :: Xc (:,:) real ( rk ) :: dx , dy integer :: i , j , nci dx = L ( 1 ) / real ( nc ( 1 ) - 1 , rk ) dy = L ( 2 ) / real ( nc ( 2 ) - 1 , rk ) allocate ( Xc ( nc ( 1 ) * nc ( 2 ), 3 )) nci = 1 do j = 0 , nc ( 2 ) - 1 do i = 0 , nc ( 1 ) - 1 Xc ( nci , 1 ) = real ( i , rk ) * dx Xc ( nci , 2 ) = real ( j , rk ) * dy Xc ( nci , 3 ) = 0.0_rk nci = nci + 1 end do end do end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine remove_knots_A_5_8 ( p , knot , Pw , u , r , s , num , t , knot_new , Pw_new ) real ( rk ), intent ( in ) :: u integer , intent ( in ) :: p , r , s , num real ( rk ), intent ( in ), contiguous :: knot (:) real ( rk ), intent ( in ), contiguous :: Pw (:,:) real ( rk ), allocatable , intent ( out ) :: knot_new (:) real ( rk ), allocatable , intent ( out ) :: Pw_new (:,:) real ( rk ), allocatable :: Pw_copy (:,:), knot_copy (:) integer , intent ( out ) :: t real ( rk ) :: tol , alfi , alfj real ( rk ), allocatable :: temp (:,:) integer :: i , j , ii , jj , remflag , off , first , last , ord , fout , m , k , n , nc , dim , tt dim = size ( Pw , 2 ) nc = size ( Pw , 1 ) n = nc m = n + p + 1 ord = p + 1 fout = ( 2 * r - s - p ) / 2 last = r - s first = r - p Pw_copy = Pw knot_copy = knot ! TODO: tol = 1.0e-6_rk * minval ( Pw (:, dim )) / ( 1.0_rk + maxval ( sqrt ( sum ( Pw ** 2 , 2 )))) allocate ( temp ( 2 * p + 1 , dim ), source = 0.0_rk ) t = 0 do tt = 0 , num - 1 off = first - 1 temp ( 1 ,:) = Pw_copy ( off ,:) temp ( last + 1 - off + 1 ,:) = Pw_copy ( last + 1 ,:) i = first j = last ii = 1 jj = last - off remflag = 0 do while ( j - i > t ) alfi = ( u - knot_copy ( i )) / ( knot_copy ( i + ord + t ) - knot_copy ( i )) alfj = ( u - knot_copy ( j - t )) / ( knot_copy ( j + ord ) - knot_copy ( j - t )) temp ( ii + 1 ,:) = ( Pw_copy ( i ,:) - ( 1.0_rk - alfi ) * temp ( ii - 1 + 1 ,:)) / alfi temp ( jj + 1 ,:) = ( Pw_copy ( j ,:) - alfj * temp ( jj + 1 + 1 ,:)) / ( 1.0_rk - alfj ) i = i + 1 ii = ii + 1 j = j - 1 jj = jj - 1 end do if ( j - i <= t ) then if ( norm2 ( temp ( ii - 1 + 1 ,:) - temp ( jj + 1 + 1 ,:)) <= tol ) then remflag = 1 else alfi = ( u - knot_copy ( i )) / ( knot_copy ( i + ord + t ) - knot_copy ( i )) if ( norm2 ( Pw_copy ( i ,:) - ( alfi * temp ( ii + t + 1 + 1 ,:) + ( 1.0_rk - alfi ) * temp ( ii - 1 + 1 ,:))) <= tol ) then remflag = 1 end if end if end if if ( remflag == 0 ) then exit else i = first j = last do while ( j - i > t ) Pw_copy ( i ,:) = temp ( i - off + 1 ,:) Pw_copy ( j ,:) = temp ( j - off + 1 ,:) i = i + 1 j = j - 1 end do end if first = first - 1 last = last + 1 t = t + 1 end do if ( t == 0 ) then return end if do k = r + 1 , m knot_copy ( k - t ) = knot_copy ( k ) end do j = fout i = j do k = 1 , t - 1 if ( mod ( k , 2 ) == 1 ) then i = i + 1 else j = j - 1 end if end do do k = i + 1 , n Pw_copy ( j ,:) = Pw_copy ( k ,:) j = j + 1 end do knot_new = knot_copy ( 1 : size ( knot_copy ) - t ) Pw_new = Pw_copy ( 1 : size ( Pw_copy , 1 ) - t ,:) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function unique_integer ( vec ) result ( output ) integer , dimension (:), intent ( in ), contiguous :: vec integer , dimension (:), allocatable :: output integer :: i , j , k allocate ( output ( 0 )) do i = 1 , size ( vec ) k = 0 do j = 1 , size ( output ) if ( vec ( i ) == output ( j )) then k = k + 1 exit end if end do if ( k == 0 ) then output = [ output , vec ( i )] end if end do end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function unique_real ( vec ) result ( output ) real ( rk ), dimension (:), intent ( in ), contiguous :: vec real ( rk ), dimension (:), allocatable :: output integer :: i , j , k allocate ( output ( 0 )) do i = 1 , size ( vec ) k = 0 do j = 1 , size ( output ) if ( vec ( i ) == output ( j )) then k = k + 1 exit end if end do if ( k == 0 ) then output = [ output , vec ( i )] end if end do end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function rotation ( alpha , beta , theta ) result ( R ) real ( rk ), intent ( in ) :: alpha , beta , theta real ( rk ), dimension ( 3 , 3 ) :: R R ( 1 , 1 ) = cosd ( beta ) * cosd ( theta ) R ( 2 , 1 ) = cosd ( beta ) * sind ( theta ) R ( 3 , 1 ) = - sind ( beta ) R ( 1 , 2 ) = sind ( alpha ) * sind ( beta ) * cosd ( theta ) - cosd ( alpha ) * sind ( theta ) R ( 2 , 2 ) = sind ( alpha ) * sind ( beta ) * sind ( theta ) + cosd ( alpha ) * cosd ( theta ) R ( 3 , 2 ) = sind ( alpha ) * cosd ( beta ) R ( 1 , 3 ) = cosd ( alpha ) * sind ( beta ) * cosd ( theta ) + sind ( alpha ) * sind ( theta ) R ( 2 , 3 ) = cosd ( alpha ) * sind ( beta ) * sind ( theta ) - sind ( alpha ) * cosd ( theta ) R ( 3 , 3 ) = cosd ( alpha ) * cosd ( beta ) end function !=============================================================================== end module forcad_utils","tags":"","loc":"sourcefile/forcad_utils.f90.html"},{"title":"shape_C_2d.f90 – ForCAD","text":"This file depends on sourcefile~~shape_c_2d.f90~~EfferentGraph sourcefile~shape_c_2d.f90 shape_C_2d.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~shape_c_2d.f90->sourcefile~forcad.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_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 program shape_C_2d use forcad , only : rk , nurbs_surface implicit none type ( nurbs_surface ) :: shape !----------------------------------------------------------------------------- ! Setting up NURBS C-shape !----------------------------------------------------------------------------- !> Set a C-shape with radius 2.0 and center at [0.0, 0.0, 0.0] call shape % set_C ( center = [ 0.0_rk , 0.0_rk , 0.0_rk ], radius1 = 1.0_rk , radius2 = 2.0_rk ) !> Export control points to a VTK file call shape % export_Xc ( 'vtk/shape_C_2d_Xc.vtk' ) !----------------------------------------------------------------------------- ! Creating C-shape !----------------------------------------------------------------------------- !> Generate the NURBS C-shape with a resolution of 100 call shape % create ( 100 , 60 ) !> Export the generated cirlce to a VTK file call shape % export_Xg ( 'vtk/shape_C_2d_Xg.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call shape % show ( 'vtk/shape_C_2d_Xc.vtk' , 'vtk/shape_C_2d_Xg.vtk' ) !----------------------------------------------------------------------------- ! Finalizing !----------------------------------------------------------------------------- !> Finalize the NURBS curve object call shape % finalize () end program","tags":"","loc":"sourcefile/shape_c_2d.f90.html"},{"title":"example_volume_1.f90 – ForCAD","text":"This file depends on sourcefile~~example_volume_1.f90~~EfferentGraph sourcefile~example_volume_1.f90 example_volume_1.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~example_volume_1.f90->sourcefile~forcad.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_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 example3_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 (optional) allocate ( Wc ( size ( Xc , 1 )), source = 1.0_rk ) Wc ( 2 ) = 5.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 !> Wc is optional. call nurbs % set ( knot1 , knot2 , knot3 , Xc , Wc ) !> Deallocate local arrays deallocate ( 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 20, 20, and 20 in the three dimensions call nurbs % create ( 20 , 20 , 20 ) !> Export the generated volume to a VTK file call nurbs % export_Xg ( 'vtk/nurbs_volume_Xg.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call nurbs % show ( 'vtk/nurbs_volume_Xc.vtk' , 'vtk/nurbs_volume_Xg.vtk' ) !----------------------------------------------------------------------------- ! Refinements !----------------------------------------------------------------------------- !> Print size of knot vectors print * , size ( nurbs % get_knot ( 1 )) print * , size ( nurbs % get_knot ( 2 )) print * , size ( nurbs % get_knot ( 3 )) !> Insert knots 0.25 and 0.75 in all three directions call nurbs % insert_knots ( 1 , [ 0.25_rk , 0.75_rk ], [ 1 , 1 ]) ! direction 1 call nurbs % insert_knots ( 2 , [ 0.25_rk , 0.75_rk ], [ 1 , 1 ]) ! direction 2 call nurbs % insert_knots ( 3 , [ 0.25_rk , 0.75_rk ], [ 1 , 1 ]) ! direction 3 !> Print size of knot vectors after inserting knots print * , size ( nurbs % get_knot ( 1 )) print * , size ( nurbs % get_knot ( 2 )) print * , size ( nurbs % get_knot ( 3 )) !> Print degrees print * , nurbs % get_degree () !> Elevate degree by 2 in all three directions call nurbs % elevate_degree ( 1 , 2 ) ! direction 1 call nurbs % elevate_degree ( 2 , 2 ) ! direction 2 call nurbs % elevate_degree ( 3 , 2 ) ! direction 3 !> Print degrees after elevating print * , nurbs % get_degree () !> Print size of knot vectors print * , size ( nurbs % get_knot ( 1 )) print * , size ( nurbs % get_knot ( 2 )) print * , size ( nurbs % get_knot ( 3 )) call nurbs % remove_knots ( 1 , [ 0.25_rk , 0.75_rk ], [ 1 , 1 ]) ! direction 1 call nurbs % remove_knots ( 2 , [ 0.25_rk , 0.75_rk ], [ 1 , 1 ]) ! direction 2 call nurbs % remove_knots ( 3 , [ 0.25_rk , 0.75_rk ], [ 1 , 1 ]) ! direction 3 !> Print size of knot vectors after removing knots print * , size ( nurbs % get_knot ( 1 )) print * , size ( nurbs % get_knot ( 2 )) print * , size ( nurbs % get_knot ( 3 )) !> Generate the refined NURBS volume with resolutions of 40, 40, and 40 in the three dimensions call nurbs % create () !> Export updated control points to a VTK file call nurbs % export_Xc ( 'vtk/nurbs_volume_Xc2.vtk' ) !> Export the refined generated volume to a VTK file call nurbs % export_Xg ( 'vtk/nurbs_volume_Xg2.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call nurbs % show ( 'vtk/nurbs_volume_Xc2.vtk' , 'vtk/nurbs_volume_Xg2.vtk' ) !----------------------------------------------------------------------------- ! Transformations !----------------------------------------------------------------------------- !> Rotate the control points call nurbs % rotate_Xc ( alpha =- 4 5.0_rk , beta = 0.0_rk , theta = 9 0.0_rk ) !> Rotate the generated curve call nurbs % rotate_Xg ( alpha =- 4 5.0_rk , beta = 0.0_rk , theta = 9 0.0_rk ) !> Translate the control points call nurbs % translate_Xc ([ 1.0_rk , 2.0_rk , - 3.0_rk ]) !> Translate the generated curve call nurbs % translate_Xg ([ 1.0_rk , 2.0_rk , - 3.0_rk ]) !> Export the transformed control points to a VTK file call nurbs % export_Xc ( 'vtk/nurbs_volume_Xc3.vtk' ) !> Export the transformed generated volume to a VTK file call nurbs % export_Xg ( 'vtk/nurbs_volume_Xg3.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call nurbs % show ( 'vtk/nurbs_volume_Xc3.vtk' , 'vtk/nurbs_volume_Xg3.vtk' ) !----------------------------------------------------------------------------- ! Extract faces !----------------------------------------------------------------------------- !> first compute and set the connectivities of volume elements call nurbs % set_elem ( nurbs % cmp_elem ()) !> get the connectivity of the face1 of the first element print * , 'Face 1 of element 1:' , nurbs % cmp_elemFace ( elem = 1 , face = 1 ) print * , 'Face 2 of element 1:' , nurbs % cmp_elemFace ( elem = 1 , face = 2 ) print * , 'Face 3 of element 1:' , nurbs % cmp_elemFace ( elem = 1 , face = 3 ) print * , 'Face 4 of element 1:' , nurbs % cmp_elemFace ( elem = 1 , face = 4 ) print * , 'Face 5 of element 1:' , nurbs % cmp_elemFace ( elem = 1 , face = 5 ) print * , 'Face 6 of element 1:' , nurbs % cmp_elemFace ( elem = 1 , face = 6 ) !> get the degree of the faces print * , 'Degree of face 1:' , nurbs % cmp_degreeFace ( face = 1 ) print * , 'Degree of face 2:' , nurbs % cmp_degreeFace ( face = 2 ) print * , 'Degree of face 3:' , nurbs % cmp_degreeFace ( face = 3 ) print * , 'Degree of face 4:' , nurbs % cmp_degreeFace ( face = 4 ) print * , 'Degree of face 5:' , nurbs % cmp_degreeFace ( face = 5 ) print * , 'Degree of face 6:' , nurbs % cmp_degreeFace ( face = 6 ) !----------------------------------------------------------------------------- ! 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 ), 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 example3_volume","tags":"","loc":"sourcefile/example_volume_1.f90.html"},{"title":"demo_volume.f90 – ForCAD","text":"This file depends on sourcefile~~demo_volume.f90~~EfferentGraph sourcefile~demo_volume.f90 demo_volume.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~demo_volume.f90->sourcefile~forcad.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_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 volume object to create, and finalize a NURBS 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_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 !----------------------------------------------------------------------------- ! Setting up the NURBS volume !----------------------------------------------------------------------------- !> Define control points for the NURBS 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 NURBS volume object call nurbs % set ([ 2 , 2 , 2 ], Xc , Wc ) !> Deallocate local arrays deallocate ( Xc , Wc ) !> Export initial control points to a VTK file call nurbs % export_Xc ( 'vtk/demo_volume_Xc.vtk' ) !----------------------------------------------------------------------------- ! Creating the NURBS volume !----------------------------------------------------------------------------- !> Generate the NURBS volume with a resolution of 15X15X15 call nurbs % create ( 15 , 15 , 15 ) !> Export the generated volume to a VTK file call nurbs % export_Xg ( 'vtk/demo_volume_Xg.vtk' ) !----------------------------------------------------------------------------- ! Visualization using PyVista ! Note: PyVista is required for visualization. Install it using `pip install pyvista` !----------------------------------------------------------------------------- !> Show the control geometry and geometry using PyVista call nurbs % show ( 'vtk/demo_volume_Xc.vtk' , 'vtk/demo_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 ), 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/demo_volume.f90.html"},{"title":"example_ppm2.f90 – ForCAD","text":"This file depends on sourcefile~~example_ppm2.f90~~EfferentGraph sourcefile~example_ppm2.f90 example_ppm2.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~example_ppm2.f90->sourcefile~forcad.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_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 !> Visualization of NURBS surfaces using ForCAD, ForImage and ForColorMap libraries !> This example converts NURBS surfaces (vector) to an image (raster) using ForCAD, ForImage and ForColorMap libraries. program example_ppm2 use forcad , only : rk , nurbs_surface use forimage , only : ik , format_pnm , color use forcolormap , only : colormap use fortime , only : timer implicit none type ( nurbs_surface ) :: shape type ( format_pnm ) :: image type ( color ) :: background_color type ( colormap ) :: cmap integer ( ik ), allocatable :: px (:, :) real ( rk ), allocatable :: Xg (:,:), z_values (:) real ( rk ) :: center ( 3 ), inner_radius , outer_radius , aspect_ratio integer :: height , width , ng ( 2 ), red , green , blue , res1 , res2 , i integer , allocatable :: idx (:,:) type ( timer ) :: t !----------------------------------------------------------------------------- ! Set the image size and calculate the aspect ratio !----------------------------------------------------------------------------- width = 2000 height = 2000 aspect_ratio = real ( width , rk ) / real ( height , rk ) allocate ( px ( height , 3 * width )) !----------------------------------------------------------------------------- ! Set the background color using ForColor class of ForImage !----------------------------------------------------------------------------- call t % timer_start () call background_color % set ( 'white' , use_library = . true .) do i = 1 , width px (:, 3 * ( i - 1 ) + 1 ) = background_color % get_r () px (:, 3 * ( i - 1 ) + 2 ) = background_color % get_g () px (:, 3 * ( i - 1 ) + 3 ) = background_color % get_b () end do call t % timer_stop ( message = 'Setting the background color' ) !----------------------------------------------------------------------------- ! Set a shape object using ForCAD library !----------------------------------------------------------------------------- call t % timer_start () !> Set the shape parameters for a tetragon res1 = 2000 res2 = 2000 call shape % set_tetragon ( L = [ 1.0_rk , 1.0_rk ], nc = [ 2 , 2 ]) call shape % create ( res1 , res2 ) Xg = shape % get_Xg () ng = shape % get_ng () call shape % finalize () call t % timer_stop ( message = 'Creating a tetragon' ) !----------------------------------------------------------------------------- ! Set the z-values of the geometry points !----------------------------------------------------------------------------- ! circular gradient z_values = (( Xg (:, 1 ) - minval ( Xg (:, 1 ))) / ( maxval ( Xg (:, 1 )) - minval ( Xg (:, 1 )))) ** 2 & + (( Xg (:, 2 ) - minval ( Xg (:, 2 ))) / ( maxval ( Xg (:, 2 )) - minval ( Xg (:, 2 ))) ** 2 ) !----------------------------------------------------------------------------- ! Set the colormap using ForColorMap library !----------------------------------------------------------------------------- call cmap % set ( 'buda' , 0.0_rk , 1.0_rk ) !----------------------------------------------------------------------------- ! Set colors to the shape !----------------------------------------------------------------------------- call t % timer_start () Xg (:, 2 ) = Xg (:, 2 ) * aspect_ratio allocate ( idx ( ng ( 1 ) * ng ( 2 ), 2 )) idx (:, 1 ) = min ( max ( 1 , int ( Xg (:, 1 ) * width ) + 1 ), width ) idx (:, 2 ) = min ( max ( 1 , int ( Xg (:, 2 ) * height ) + 1 ), height ) do i = 1 , ng ( 1 ) * ng ( 2 ) call cmap % compute_RGB ( z_values ( i ), red , green , blue ) px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 1 ) = red px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 2 ) = green px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 3 ) = blue end do deallocate ( idx ) call t % timer_stop ( message = 'Setting the colors' ) !----------------------------------------------------------------------------- ! Set a shape object using ForCAD library !----------------------------------------------------------------------------- !> Set the shape parameters for a ring call t % timer_start () center = [ 0.0_rk , 0.0_rk , 0.0_rk ] outer_radius = 0.24_rk * 2.0_rk inner_radius = 0.0_rk * 2.0_rk res1 = 3500 res2 = 1000 center ( 2 ) = center ( 2 ) / aspect_ratio call shape % set_half_ring ( center , inner_radius , outer_radius ) call shape % rotate_Xc ( 0.0_rk , 0.0_rk , 4 5.0_rk ) call shape % translate_Xc ([ 0.25_rk , 0.25_rk , 0.0_rk ]) call shape % create ( res1 , res2 ) Xg = shape % get_Xg () ng = shape % get_ng () call shape % finalize () call t % timer_stop ( message = 'Creating a ring' ) !----------------------------------------------------------------------------- ! Set the z-values of the geometry points !----------------------------------------------------------------------------- ! circular gradient z_values = (( Xg (:, 1 ) - minval ( Xg (:, 1 ))) / ( maxval ( Xg (:, 1 )) - minval ( Xg (:, 1 )))) ** 2 & + (( Xg (:, 2 ) - minval ( Xg (:, 2 ))) / ( maxval ( Xg (:, 2 )) - minval ( Xg (:, 2 ))) ** 2 ) !----------------------------------------------------------------------------- ! Set the colormap using ForColorMap library !----------------------------------------------------------------------------- call cmap % set ( 'managua' , 0.0_rk , 2.2_rk ) !----------------------------------------------------------------------------- ! Set colors to the shape !----------------------------------------------------------------------------- call t % timer_start () Xg (:, 2 ) = Xg (:, 2 ) * aspect_ratio allocate ( idx ( ng ( 1 ) * ng ( 2 ), 2 )) idx (:, 1 ) = min ( max ( 1 , int ( Xg (:, 1 ) * width ) + 1 ), width ) idx (:, 2 ) = min ( max ( 1 , int ( Xg (:, 2 ) * height ) + 1 ), height ) do i = 1 , ng ( 1 ) * ng ( 2 ) call cmap % compute_RGB ( z_values ( i ), red , green , blue ) px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 1 ) = red px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 2 ) = green px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 3 ) = blue end do deallocate ( idx ) call t % timer_stop ( message = 'Setting the colors' ) !----------------------------------------------------------------------------- ! Set a shape object using ForCAD library !----------------------------------------------------------------------------- !> Set the shape parameters for a ring call t % timer_start () center = [ 0.0_rk , 0.0_rk , 0.0_rk ] outer_radius = 0.24_rk * 2.0_rk inner_radius = 0.08_rk * 2.0_rk res1 = 3500 res2 = 1000 center ( 2 ) = center ( 2 ) / aspect_ratio call shape % set_half_ring ( center , inner_radius , outer_radius ) call shape % rotate_Xc ( 0.0_rk , 0.0_rk , - 4 5.0_rk ) call shape % translate_Xc ([ 0.75_rk , 0.25_rk , 0.0_rk ]) call shape % create ( res1 , res2 ) Xg = shape % get_Xg () ng = shape % get_ng () call shape % finalize () call t % timer_stop ( message = 'Creating a ring' ) !----------------------------------------------------------------------------- ! Set the z-values of the geometry points !----------------------------------------------------------------------------- ! linear gradient in the y-direction z_values = ( Xg (:, 2 ) - minval ( Xg (:, 2 ))) / ( maxval ( Xg (:, 2 )) - minval ( Xg (:, 2 ))) !----------------------------------------------------------------------------- ! Set the colormap using ForColorMap library !----------------------------------------------------------------------------- call cmap % set ( 'lipari' , 0.0_rk , 1.0_rk ) !----------------------------------------------------------------------------- ! Set colors to the shape !----------------------------------------------------------------------------- call t % timer_start () Xg (:, 2 ) = Xg (:, 2 ) * aspect_ratio allocate ( idx ( ng ( 1 ) * ng ( 2 ), 2 )) idx (:, 1 ) = min ( max ( 1 , int ( Xg (:, 1 ) * width ) + 1 ), width ) idx (:, 2 ) = min ( max ( 1 , int ( Xg (:, 2 ) * height ) + 1 ), height ) do i = 1 , ng ( 1 ) * ng ( 2 ) call cmap % compute_RGB ( z_values ( i ), red , green , blue ) px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 1 ) = red px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 2 ) = green px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 3 ) = blue end do deallocate ( idx ) call t % timer_stop ( message = 'Setting the colors' ) !----------------------------------------------------------------------------- ! Set a shape object using ForCAD library !----------------------------------------------------------------------------- call t % timer_start () !> Set the shape parameters for a ring center = [ 0.0_rk , 0.0_rk , 0.0_rk ] outer_radius = 0.24_rk * 2.0_rk inner_radius = 0.01_rk * 2.0_rk res1 = 3500 res2 = 1000 center ( 2 ) = center ( 2 ) / aspect_ratio call shape % set_half_ring ( center , inner_radius , outer_radius ) call shape % rotate_Xc ( 0.0_rk , 0.0_rk , - 9 0.0_rk ) call shape % translate_Xc ([ 0.25_rk , 0.75_rk , 0.0_rk ]) call shape % create ( res1 , res2 ) Xg = shape % get_Xg () ng = shape % get_ng () call shape % finalize () call t % timer_stop ( message = 'Creating a ring' ) !----------------------------------------------------------------------------- ! Set the z-values of the geometry points !----------------------------------------------------------------------------- ! linear gradient in the x-direction z_values = ( Xg (:, 1 ) - minval ( Xg (:, 1 ))) / ( maxval ( Xg (:, 1 )) - minval ( Xg (:, 1 ))) !----------------------------------------------------------------------------- ! Set the colormap using ForColorMap library !----------------------------------------------------------------------------- call cmap % set ( 'oslo10' , 0.0_rk , 1.0_rk ) !----------------------------------------------------------------------------- ! Set colors to the shape !----------------------------------------------------------------------------- call t % timer_start () Xg (:, 2 ) = Xg (:, 2 ) * aspect_ratio allocate ( idx ( ng ( 1 ) * ng ( 2 ), 2 )) idx (:, 1 ) = min ( max ( 1 , int ( Xg (:, 1 ) * width ) + 1 ), width ) idx (:, 2 ) = min ( max ( 1 , int ( Xg (:, 2 ) * height ) + 1 ), height ) do i = 1 , ng ( 1 ) * ng ( 2 ) call cmap % compute_RGB ( z_values ( i ), red , green , blue ) px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 1 ) = red px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 2 ) = green px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 3 ) = blue end do deallocate ( idx ) call t % timer_stop ( message = 'Setting the colors' ) !----------------------------------------------------------------------------- ! Set a shape object using ForCAD library !----------------------------------------------------------------------------- call t % timer_start () !> Set the shape parameters for a ring center = [ 0.0_rk , 0.0_rk , 0.0_rk ] outer_radius = 0.24_rk * 2.0_rk inner_radius = 0.22_rk * 2.0_rk res1 = 3500 res2 = 1000 center ( 2 ) = center ( 2 ) / aspect_ratio call shape % set_half_ring ( center , inner_radius , outer_radius ) call shape % rotate_Xc ( 0.0_rk , 0.0_rk , 0.0_rk ) call shape % translate_Xc ([ 0.75_rk , 0.75_rk , 0.0_rk ]) call shape % create ( res1 , res2 ) Xg = shape % get_Xg () ng = shape % get_ng () call shape % finalize () call t % timer_stop ( message = 'Creating a ring' ) !----------------------------------------------------------------------------- ! Set the z-values of the geometry points !----------------------------------------------------------------------------- ! linear gradient in the x-direction z_values = ( Xg (:, 1 ) - minval ( Xg (:, 1 ))) / ( maxval ( Xg (:, 1 )) - minval ( Xg (:, 1 ))) !----------------------------------------------------------------------------- ! Set the colormap using ForColorMap library !----------------------------------------------------------------------------- red = 255 green = 215 blue = 0 !----------------------------------------------------------------------------- ! Set colors to the shape !----------------------------------------------------------------------------- call t % timer_start () Xg (:, 2 ) = Xg (:, 2 ) * aspect_ratio allocate ( idx ( ng ( 1 ) * ng ( 2 ), 2 )) idx (:, 1 ) = min ( max ( 1 , int ( Xg (:, 1 ) * width ) + 1 ), width ) idx (:, 2 ) = min ( max ( 1 , int ( Xg (:, 2 ) * height ) + 1 ), height ) do i = 1 , ng ( 1 ) * ng ( 2 ) px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 1 ) = red px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 2 ) = green px ( idx ( i , 2 ), 3 * ( idx ( i , 1 ) - 1 ) + 3 ) = blue end do deallocate ( idx ) call t % timer_stop ( message = 'Setting the colors' ) !----------------------------------------------------------------------------- ! Save the image to a PPM file using ForImage library !----------------------------------------------------------------------------- call t % timer_start () call image % set_pnm (& encoding = 'binary' , & file_format = 'ppm' , & width = width , & height = height , & max_color = 255 , & comment = 'example: ForCAD + ForImage + ForColor + ForColormap' , & pixels = px & ) call image % export_pnm ( 'ppm/example_ppm2' ) call image % finalize () call t % timer_stop ( message = 'Saving the image' ) ! Clean up call cmap % finalize () deallocate ( px , Xg , z_values ) end program","tags":"","loc":"sourcefile/example_ppm2.f90.html"},{"title":"nearest_point_2d.f90 – ForCAD","text":"This file depends on sourcefile~~nearest_point_2d.f90~~EfferentGraph sourcefile~nearest_point_2d.f90 nearest_point_2d.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~nearest_point_2d.f90->sourcefile~forcad.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_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 program nearest_point_2d use forcad , only : rk , nurbs_surface implicit none type ( nurbs_surface ) :: shape !! Declare a NURBS surface object real ( rk ), allocatable :: nearest_Xg (:) !! Coordinates of the nearest point on the surface real ( rk ), allocatable :: nearest_Xt (:) !! Corresponding parametric coordinates of the nearest point integer :: id !! id of the nearest point real ( rk ) :: Xc ( 4 , 3 ) !! Control points real ( rk ) :: Wc ( 4 ) !! Weights of the control points !----------------------------------------------------------------------------- ! Setting up the NURBS tetrangon !----------------------------------------------------------------------------- !> Set a surface with 4 control points Xc ( 1 ,:) = [ 0.0_rk , 0.0_rk , 0.0_rk ] Xc ( 2 ,:) = [ 2.0_rk , 0.0_rk , 0.0_rk ] Xc ( 3 ,:) = [ 0.0_rk , 2.0_rk , 0.0_rk ] Xc ( 4 ,:) = [ 2.0_rk , 2.0_rk , 0.0_rk ] !> The weights of the control points (Wc) are optional. Wc = [ 1.0_rk , 1.1_rk , 0.7_rk , 1.0_rk ] call shape % set ( 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 ], Xc = Xc , Wc = Wc ) !----------------------------------------------------------------------------- ! Creating the NURBS surface !----------------------------------------------------------------------------- !> Generate the NURBS surface with resolutions of 30 in both dimensions call shape % create ( 30 , 30 ) !----------------------------------------------------------------------------- ! Nearest point on the surface (Approximation) !----------------------------------------------------------------------------- !> Find the nearest point on the surface to a given point ! nearest_Xg: Coordinates of the nearest point on the surface (optional) ! nearest_Xt: Corresponding parametric coordinates of the nearest point (optional) ! id: id of the nearest point (optional) call shape % nearest_point ([ 1.3_rk , 1.0_rk , 1.999999999_rk ], nearest_Xg , nearest_Xt , id ) print '(a,1x,g0,2x,g0,2x,g0,a,2x,g0,2x,g0,2x,a,1x,g0)' ,& 'Nearest point on the surface:' , nearest_Xg , ' with parametric coordinates:' , nearest_Xt , ' and id:' , id !----------------------------------------------------------------------------- ! Nearest point on the surface (Optimization) !----------------------------------------------------------------------------- !> Find the nearest point on the surface to a given point !> The optimization method is used to find the nearest point !> The optimization method is based on the Newton-Raphson method ! nearest_Xt: Corresponding parametric coordinates of the nearest point ! nearest_Xg: Coordinates of the nearest point on the surface (optional) call shape % nearest_point2 ([ 1.3_rk , 1.0_rk , 1.999999999_rk ], 1.0e-11_rk , 30 , nearest_Xt , nearest_Xg ) print '(a,1x,g0,2x,g0,2x,g0,a,2x,g0,2x,g0)' ,& 'Nearest point on the surface:' , nearest_Xg , ' with parametric coordinates:' , nearest_Xt !----------------------------------------------------------------------------- ! Finalizing !----------------------------------------------------------------------------- !> Finalize the NURBS surface object call shape % finalize () ! deallocate(nearest_Xg, nearest_Xt) end program","tags":"","loc":"sourcefile/nearest_point_2d.f90.html"},{"title":"nearest_point_3d.f90 – ForCAD","text":"This file depends on sourcefile~~nearest_point_3d.f90~~EfferentGraph sourcefile~nearest_point_3d.f90 nearest_point_3d.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~nearest_point_3d.f90->sourcefile~forcad.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_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 program nearest_point_3d use forcad , only : rk , nurbs_volume implicit none type ( nurbs_volume ) :: shape !! Declare a NURBS volume object real ( rk ), allocatable :: nearest_Xg (:) !! Coordinates of the nearest point on the volume real ( rk ), allocatable :: nearest_Xt (:) !! Corresponding parametric coordinates of the nearest point integer :: id !! id of the nearest point real ( rk ) :: Xc ( 8 , 3 ) !! Control points real ( rk ) :: Wc ( 8 ) !! Weights of the control points !----------------------------------------------------------------------------- ! Setting up the NURBS hexahedron !----------------------------------------------------------------------------- Xc ( 1 ,:) = [ 0.0_rk , 0.0_rk , 0.0_rk ] Xc ( 2 ,:) = [ 2.0_rk , 0.0_rk , 0.0_rk ] Xc ( 3 ,:) = [ 0.0_rk , 4.0_rk , 0.0_rk ] Xc ( 4 ,:) = [ 2.0_rk , 4.0_rk , 0.0_rk ] Xc ( 5 ,:) = [ 0.0_rk , 0.0_rk , 2.0_rk ] Xc ( 6 ,:) = [ 2.0_rk , 0.0_rk , 2.0_rk ] Xc ( 7 ,:) = [ 0.0_rk , 4.0_rk , 2.0_rk ] Xc ( 8 ,:) = [ 2.0_rk , 4.0_rk , 2.0_rk ] !> The weights of the control points (Wc) are optional. Wc = [ 1.0_rk , 1.1_rk , 1.11_rk , 1.0_rk , 0.5_rk , 0.5_rk , 1.2_rk , 1.0_rk ] call shape % set (& 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 ],& Xc = Xc , Wc = Wc ) !----------------------------------------------------------------------------- ! Creating the NURBS volume !----------------------------------------------------------------------------- !> Generate the NURBS volume with resolutions of 20, 20, 20 call shape % create ( 30 , 30 , 30 ) !----------------------------------------------------------------------------- ! Nearest point on the volume !----------------------------------------------------------------------------- !> Find the nearest point on the volume to a given point ! nearest_Xg: Coordinates of the nearest point on the volume (optional) ! nearest_Xt: Corresponding parametric coordinates of the nearest point (optional) ! id: id of the nearest point (optional) call shape % nearest_point ([ 1.5_rk , 3.5_rk , 1.1_rk ], nearest_Xg , nearest_Xt , id ) print '(a,1x,g0,2x,g0,2x,g0,a,2x,g0,2x,g0,2x,g0,2x,a,1x,g0)' ,& 'Nearest point on the volume:' , nearest_Xg , ' with parametric coordinates:' , nearest_Xt , ' and id:' , id !----------------------------------------------------------------------------- ! Nearest point on the volume (Optimization) !----------------------------------------------------------------------------- !> Find the nearest point on the volume to a given point !> The optimization method is used to find the nearest point !> The optimization method is based on the Newton-Raphson method ! nearest_Xt: Corresponding parametric coordinates of the nearest point ! nearest_Xg: Coordinates of the nearest point on the volume (optional) call shape % nearest_point2 ([ 1.5_rk , 3.5_rk , 1.1_rk ], 1.0e-11_rk , 500 , nearest_Xt , nearest_Xg ) print '(a,1x,g0,2x,g0,2x,g0,a,2x,g0,2x,g0,2x,g0)' ,& 'Nearest point on the volume:' , nearest_Xg , ' with parametric coordinates:' , nearest_Xt !----------------------------------------------------------------------------- ! Finalizing !----------------------------------------------------------------------------- !> Finalize the NURBS volume object call shape % finalize () ! deallocate(nearest_Xg, nearest_Xt) end program","tags":"","loc":"sourcefile/nearest_point_3d.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~demo_curve.f90 demo_curve.f90 sourcefile~demo_curve.f90->sourcefile~forcad.f90 sourcefile~demo_surface.f90 demo_surface.f90 sourcefile~demo_surface.f90->sourcefile~forcad.f90 sourcefile~demo_volume.f90 demo_volume.f90 sourcefile~demo_volume.f90->sourcefile~forcad.f90 sourcefile~example_curve_1.f90 example_curve_1.f90 sourcefile~example_curve_1.f90->sourcefile~forcad.f90 sourcefile~example_ppm1.f90 example_ppm1.f90 sourcefile~example_ppm1.f90->sourcefile~forcad.f90 sourcefile~example_ppm2.f90 example_ppm2.f90 sourcefile~example_ppm2.f90->sourcefile~forcad.f90 sourcefile~example_ppm3.f90 example_ppm3.f90 sourcefile~example_ppm3.f90->sourcefile~forcad.f90 sourcefile~example_surface_1.f90 example_surface_1.f90 sourcefile~example_surface_1.f90->sourcefile~forcad.f90 sourcefile~example_volume_1.f90 example_volume_1.f90 sourcefile~example_volume_1.f90->sourcefile~forcad.f90 sourcefile~nearest_point_1d.f90 nearest_point_1d.f90 sourcefile~nearest_point_1d.f90->sourcefile~forcad.f90 sourcefile~nearest_point_2d.f90 nearest_point_2d.f90 sourcefile~nearest_point_2d.f90->sourcefile~forcad.f90 sourcefile~nearest_point_2d_bench.f90 nearest_point_2d_bench.f90 sourcefile~nearest_point_2d_bench.f90->sourcefile~forcad.f90 sourcefile~nearest_point_3d.f90 nearest_point_3d.f90 sourcefile~nearest_point_3d.f90->sourcefile~forcad.f90 sourcefile~put_to_nurbs.f90 put_to_nurbs.f90 sourcefile~put_to_nurbs.f90->sourcefile~forcad.f90 sourcefile~shape_c_1d.f90 shape_C_1d.f90 sourcefile~shape_c_1d.f90->sourcefile~forcad.f90 sourcefile~shape_c_2d.f90 shape_C_2d.f90 sourcefile~shape_c_2d.f90->sourcefile~forcad.f90 sourcefile~shape_c_3d.f90 shape_C_3d.f90 sourcefile~shape_c_3d.f90->sourcefile~forcad.f90 sourcefile~shape_circle.f90 shape_circle.f90 sourcefile~shape_circle.f90->sourcefile~forcad.f90 sourcefile~shape_half_circle.f90 shape_half_circle.f90 sourcefile~shape_half_circle.f90->sourcefile~forcad.f90 sourcefile~shape_half_ring_2d.f90 shape_half_ring_2d.f90 sourcefile~shape_half_ring_2d.f90->sourcefile~forcad.f90 sourcefile~shape_half_ring_3d.f90 shape_half_ring_3d.f90 sourcefile~shape_half_ring_3d.f90->sourcefile~forcad.f90 sourcefile~shape_hexahedron.f90 shape_hexahedron.f90 sourcefile~shape_hexahedron.f90->sourcefile~forcad.f90 sourcefile~shape_ring_2d.f90 shape_ring_2d.f90 sourcefile~shape_ring_2d.f90->sourcefile~forcad.f90 sourcefile~shape_ring_3d.f90 shape_ring_3d.f90 sourcefile~shape_ring_3d.f90->sourcefile~forcad.f90 sourcefile~shape_tetragon.f90 shape_tetragon.f90 sourcefile~shape_tetragon.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 !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> This module defines the 'nurbs_curve' type for representing a Non-Uniform Rational B-Spline (NURBS) curve. module forcad_nurbs_curve use forcad_utils , only : rk , basis_bspline , elemConn_C0 , compute_multiplicity , compute_knot_vector , basis_bspline_der ,& insert_knot_A_5_1 , findspan , elevate_degree_A_5_9 , remove_knots_A_5_8 , & elemConn_Cn , unique , rotation implicit none private public nurbs_curve !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause type nurbs_curve real ( rk ), allocatable , private :: Xc (:,:) !! Control points (2D array: [nc, dim]) real ( rk ), allocatable , private :: Xg (:,:) !! Geometry points (2D array: [ng, dim]) real ( rk ), allocatable , private :: Wc (:) !! Weights for control points (1D array: [nc]) real ( rk ), allocatable , private :: Xt (:) !! Evaluation points (1D array: [ng]) real ( rk ), allocatable , private :: knot (:) !! Knot vector (1D array) integer , private :: degree !! Degree (order) of the curve integer , private :: nc !! Number of control points integer , private :: ng !! Number of geometry points integer , allocatable , private :: elemConn_Xc_vis (:,:) !! Connectivity for visualization of control points integer , allocatable , private :: elemConn_Xg_vis (:,:) !! Connectivity for visualization of geometry points integer , allocatable , private :: elemConn (:,:) !! IGA element connectivity contains procedure :: set1 !!> Set knot vector, control points and weights for the NURBS curve object procedure :: set2 !!> Set NURBS curve using nodes of parameter space, degree, continuity, control points and weights procedure :: set3 !!> Set Bezier or Rational Bezier curve using control points and weights generic :: set => set1 , set2 , set3 !!> Set NURBS curve procedure :: create !!> Generate geometry points procedure :: cmp_Xg !!> Compute geometry points procedure , private :: get_Xc_all !!> Get all control points procedure , private :: get_Xci !!> Get i-th control point procedure , private :: get_Xcid !!> Get i-th control point in a specific direction generic :: get_Xc => get_Xc_all , get_Xci , get_Xcid !!> Get control points procedure , private :: get_Xg_all !!> Get all geometry points procedure , private :: get_Xgi !!> Get i-th geometry point procedure , private :: get_Xgid !!> Get i-th geometry point in a specific direction generic :: get_Xg => get_Xg_all , get_Xgi , get_Xgid !!> Get geometry points procedure , private :: get_Wc_all !!> Get all weights procedure , private :: get_Wci !!> Get i-th weight generic :: get_Wc => get_Wc_all , get_Wci !!> Get weights procedure :: get_Xt !!> Get parameter values procedure , private :: get_knot_all !!> Get all knot vectors procedure , private :: get_knoti !!> Get i-th knot value generic :: get_knot => get_knoti , get_knot_all !!> Get knot vector procedure :: get_ng !!> Get number of geometry points procedure :: cmp_degree !!> Compute degree of the NURBS curve procedure :: get_degree !!> Get degree of the NURBS curve procedure :: finalize !!> Finalize the NURBS curve object procedure :: cmp_elem_Xc_vis !!> Generate connectivity for control points procedure :: cmp_elem_Xg_vis !!> Generate connectivity for geometry points procedure :: cmp_elem !!> Generate IGA element connectivity procedure :: get_elem_Xc_vis !!> Get connectivity for control points procedure :: get_elem_Xg_vis !!> Get connectivity for geometry points procedure :: get_elem !!> Get IGA element connectivity procedure :: set_elem_Xc_vis !!> Set connectivity for control points procedure :: set_elem_Xg_vis !!> Set connectivity for geometry points procedure :: set_elem !!> Set IGA element connectivity 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 !!> Compute and return the multiplicity of the knots procedure :: get_continuity !!> Compute and return the continuity of the curve procedure :: cmp_nc !!> Compute number of required control points procedure :: get_nc !!> Get number of control points procedure :: insert_knots !!> Insert knots into the knot vector procedure :: elevate_degree !!> Elevate the degree of the curve procedure , private :: basis_vector !!> Compute the basis functions of the NURBS curve procedure , private :: basis_scalar !!> Compute the basis functions of the NURBS curve generic :: basis => basis_vector , basis_scalar !!> Compute the basis functions of the NURBS curve procedure , private :: derivative_vector !!> Compute the derivative of the NURBS curve procedure , private :: derivative_scalar !!> Compute the derivative of the NURBS curve generic :: derivative => derivative_vector , derivative_scalar !!> Compute the derivative of the NURBS curve procedure , private :: derivative2_vector !!> Compute the second derivative of the NURBS curve procedure , private :: derivative2_scalar !!> Compute the second derivative of the NURBS curve generic :: derivative2 => derivative2_vector , derivative2_scalar !!> Compute the second derivative of the NURBS curve procedure :: is_rational !!> Check if the NURBS curve is rational procedure :: remove_knots !!> Remove knots from the knot vector procedure :: rotate_Xc !!> Rotate control points procedure :: rotate_Xg !!> Rotate geometry points procedure :: translate_Xc !!> Translate control points procedure :: translate_Xg !!> Translate geometry points procedure :: show !!> Show the NURBS object using PyVista procedure :: nearest_point !!> Find the nearest point on the NURBS curve (Approximation) procedure :: nearest_point2 !!> Find the nearest point on the NURBS curve (Minimization - Newton's method) ! Shapes procedure :: set_circle !!> Set a circle procedure :: set_half_circle !!> Set a half circle procedure :: set_C !!> Set a C-shape end type !=============================================================================== interface compute_Xg pure function compute_Xg_nurbs_1d ( f_Xt , f_knot , f_degree , f_nc , f_ng , f_Xc , f_Wc ) result ( f_Xg ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:) real ( rk ), intent ( in ), contiguous :: f_knot (:) integer , intent ( in ) :: f_degree integer , intent ( in ) :: f_nc integer , intent ( in ) :: f_ng real ( rk ), intent ( in ), contiguous :: f_Xc (:,:) real ( rk ), intent ( in ), contiguous :: f_Wc (:) real ( rk ), allocatable :: f_Xg (:,:) end function pure function compute_Xg_bspline_1d ( f_Xt , f_knot , f_degree , f_nc , f_ng , f_Xc ) result ( f_Xg ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:) real ( rk ), intent ( in ), contiguous :: f_knot (:) integer , intent ( in ) :: f_degree integer , intent ( in ) :: f_nc integer , intent ( in ) :: f_ng real ( rk ), intent ( in ), contiguous :: f_Xc (:,:) real ( rk ), allocatable :: f_Xg (:,:) end function pure function compute_Xg_nurbs_1d_1point ( f_Xt , f_knot , f_degree , f_nc , f_Xc , f_Wc ) result ( f_Xg ) import :: rk real ( rk ), intent ( in ) :: f_Xt real ( rk ), intent ( in ), contiguous :: f_knot (:) integer , intent ( in ) :: f_degree integer , intent ( in ) :: f_nc real ( rk ), intent ( in ), contiguous :: f_Xc (:,:) real ( rk ), intent ( in ), contiguous :: f_Wc (:) real ( rk ), allocatable :: f_Xg (:) end function pure function compute_Xg_bspline_1d_1point ( f_Xt , f_knot , f_degree , f_nc , f_Xc ) result ( f_Xg ) import :: rk real ( rk ), intent ( in ) :: f_Xt real ( rk ), intent ( in ), contiguous :: f_knot (:) integer , intent ( in ) :: f_degree integer , intent ( in ) :: f_nc real ( rk ), intent ( in ), contiguous :: f_Xc (:,:) real ( rk ), allocatable :: f_Xg (:) end function end interface interface compute_d2Tgc pure subroutine compute_d2Tgc_nurbs_1d_vector ( f_Xt , f_knot , f_degree , f_nc , f_ng , f_Wc , f_d2Tgc , f_dTgc , f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:) real ( rk ), intent ( in ), contiguous :: f_knot (:) integer , intent ( in ) :: f_degree integer , intent ( in ) :: f_nc integer , intent ( in ) :: f_ng real ( rk ), intent ( in ), contiguous :: f_Wc (:) real ( rk ), allocatable , intent ( out ) :: f_d2Tgc (:,:) real ( rk ), allocatable , intent ( out ) :: f_dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: f_Tgc (:,:) end subroutine pure subroutine compute_d2Tgc_bspline_1d_vector ( f_Xt , f_knot , f_degree , f_nc , f_ng , f_d2Tgc , f_dTgc , f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:) real ( rk ), intent ( in ), contiguous :: f_knot (:) integer , intent ( in ) :: f_degree integer , intent ( in ) :: f_nc integer , intent ( in ) :: f_ng real ( rk ), allocatable , intent ( out ) :: f_d2Tgc (:,:) real ( rk ), allocatable , intent ( out ) :: f_dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: f_Tgc (:,:) end subroutine pure subroutine compute_d2Tgc_nurbs_1d_scalar ( f_Xt , f_knot , f_degree , f_nc , f_Wc , f_d2Tgc , f_dTgc , f_Tgc ) import :: rk real ( rk ), intent ( in ) :: f_Xt real ( rk ), intent ( in ), contiguous :: f_knot (:) integer , intent ( in ) :: f_degree integer , intent ( in ) :: f_nc real ( rk ), intent ( in ), contiguous :: f_Wc (:) real ( rk ), allocatable , intent ( out ) :: f_d2Tgc (:) real ( rk ), allocatable , intent ( out ) :: f_dTgc (:) real ( rk ), allocatable , intent ( out ) :: f_Tgc (:) end subroutine pure subroutine compute_d2Tgc_bspline_1d_scalar ( f_Xt , f_knot , f_degree , f_nc , f_d2Tgc , f_dTgc , f_Tgc ) import :: rk real ( rk ), intent ( in ) :: f_Xt real ( rk ), intent ( in ), contiguous :: f_knot (:) integer , intent ( in ) :: f_degree integer , intent ( in ) :: f_nc real ( rk ), allocatable , intent ( out ) :: f_d2Tgc (:) real ( rk ), allocatable , intent ( out ) :: f_dTgc (:) real ( rk ), allocatable , intent ( out ) :: f_Tgc (:) end subroutine end interface interface compute_dTgc pure subroutine compute_dTgc_nurbs_1d_vector ( f_Xt , f_knot , f_degree , f_nc , f_ng , f_Wc , f_dTgc , f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:) real ( rk ), intent ( in ), contiguous :: f_knot (:) integer , intent ( in ) :: f_degree integer , intent ( in ) :: f_nc integer , intent ( in ) :: f_ng real ( rk ), intent ( in ), contiguous :: f_Wc (:) real ( rk ), allocatable , intent ( out ) :: f_dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: f_Tgc (:,:) end subroutine pure subroutine compute_dTgc_bspline_1d_vector ( f_Xt , f_knot , f_degree , f_nc , f_ng , f_dTgc , f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:) real ( rk ), intent ( in ), contiguous :: f_knot (:) integer , intent ( in ) :: f_degree integer , intent ( in ) :: f_nc integer , intent ( in ) :: f_ng real ( rk ), allocatable , intent ( out ) :: f_dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: f_Tgc (:,:) end subroutine pure subroutine compute_dTgc_nurbs_1d_scalar ( f_Xt , f_knot , f_degree , f_nc , f_Wc , f_dTgc , f_Tgc ) import :: rk real ( rk ), intent ( in ) :: f_Xt real ( rk ), intent ( in ), contiguous :: f_knot (:) integer , intent ( in ) :: f_degree integer , intent ( in ) :: f_nc real ( rk ), intent ( in ), contiguous :: f_Wc (:) real ( rk ), allocatable , intent ( out ) :: f_dTgc (:) real ( rk ), allocatable , intent ( out ) :: f_Tgc (:) end subroutine pure subroutine compute_dTgc_bspline_1d_scalar ( f_Xt , f_knot , f_degree , f_nc , f_dTgc , f_Tgc ) import :: rk real ( rk ), intent ( in ) :: f_Xt real ( rk ), intent ( in ), contiguous :: f_knot (:) integer , intent ( in ) :: f_degree integer , intent ( in ) :: f_nc real ( rk ), allocatable , intent ( out ) :: f_dTgc (:) real ( rk ), allocatable , intent ( out ) :: f_Tgc (:) end subroutine end interface interface compute_Tgc pure function compute_Tgc_nurbs_1d_vector ( f_Xt , f_knot , f_degree , f_nc , f_ng , f_Wc ) result ( f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:) real ( rk ), intent ( in ), contiguous :: f_knot (:) integer , intent ( in ) :: f_degree integer , intent ( in ) :: f_nc integer , intent ( in ) :: f_ng real ( rk ), intent ( in ), contiguous :: f_Wc (:) real ( rk ), allocatable :: f_Tgc (:,:) end function pure function compute_Tgc_bspline_1d_vector ( f_Xt , f_knot , f_degree , f_nc , f_ng ) result ( f_Tgc ) import :: rk real ( rk ), intent ( in ), contiguous :: f_Xt (:) real ( rk ), intent ( in ), contiguous :: f_knot (:) integer , intent ( in ) :: f_degree integer , intent ( in ) :: f_nc integer , intent ( in ) :: f_ng real ( rk ), allocatable :: f_Tgc (:,:) end function pure function compute_Tgc_nurbs_1d_scalar ( f_Xt , f_knot , f_degree , f_nc , f_Wc ) result ( f_Tgc ) import :: rk real ( rk ), intent ( in ) :: f_Xt real ( rk ), intent ( in ), contiguous :: f_knot (:) integer , intent ( in ) :: f_degree integer , intent ( in ) :: f_nc real ( rk ), intent ( in ), contiguous :: f_Wc (:) real ( rk ), allocatable :: f_Tgc (:) end function pure function compute_Tgc_bspline_1d_scalar ( f_Xt , f_knot , f_degree , f_nc ) result ( f_Tgc ) import :: rk real ( rk ), intent ( in ) :: f_Xt real ( rk ), intent ( in ), contiguous :: f_knot (:) integer , intent ( in ) :: f_degree integer , intent ( in ) :: f_nc real ( rk ), allocatable :: f_Tgc (:) end function end interface interface pure function nearest_point_help_1d ( f_ng , f_Xg , f_point_Xg ) result ( f_distances ) import :: rk integer , intent ( in ) :: f_ng real ( rk ), intent ( in ), contiguous :: f_Xg (:,:) real ( rk ), intent ( in ), contiguous :: f_point_Xg (:) real ( rk ), allocatable :: f_distances (:) end function end interface contains !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Set knot vector, control points and weights for the NURBS curve object. pure subroutine set1 ( this , knot , Xc , Wc ) class ( nurbs_curve ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: knot (:) real ( rk ), intent ( in ), contiguous :: Xc (:,:) real ( rk ), intent ( in ), contiguous , optional :: Wc (:) if ( allocated ( this % knot )) deallocate ( this % knot ) if ( allocated ( this % Xc )) deallocate ( this % Xc ) this % knot = knot call this % cmp_degree () 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 if ( allocated ( this % Wc )) deallocate ( this % Wc ) this % Wc = Wc end if end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Set NURBS curve using nodes of parameter space (Xth), degree, continuity, control points and weights. pure subroutine set2 ( this , Xth_dir , degree , continuity , Xc , Wc ) class ( nurbs_curve ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: Xth_dir (:) integer , intent ( in ) :: degree integer , intent ( in ), contiguous :: continuity (:) real ( rk ), intent ( in ), contiguous :: Xc (:,:) real ( rk ), intent ( in ), contiguous , optional :: Wc (:) if ( allocated ( this % knot )) deallocate ( this % knot ) if ( allocated ( this % Xc )) deallocate ( this % Xc ) this % knot = compute_knot_vector ( Xth_dir , degree , continuity ) this % degree = degree 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 if ( allocated ( this % Wc )) deallocate ( this % Wc ) this % Wc = Wc end if end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Set Bezier or Rational Bezier curve using control points and weights. pure subroutine set3 ( this , Xc , Wc ) class ( nurbs_curve ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: Xc (:,:) real ( rk ), intent ( in ), contiguous , optional :: Wc (:) if ( allocated ( this % knot )) deallocate ( this % knot ) if ( allocated ( this % Xc )) deallocate ( this % Xc ) this % Xc = Xc this % nc = size ( this % Xc , 1 ) if ( allocated ( this % knot )) deallocate ( this % knot ) allocate ( this % knot ( 2 * this % nc )) this % knot ( 1 : this % nc ) = 0.0_rk this % knot ( this % nc + 1 : 2 * this % nc ) = 1.0_rk call this % cmp_degree () if ( present ( Wc )) then if ( size ( Wc ) /= this % nc ) then error stop 'Number of weights does not match the number of control points.' else if ( allocated ( this % Wc )) deallocate ( this % Wc ) 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 ), contiguous , optional :: Xt (:) integer :: i ! check if (. not . allocated ( this % Xc )) then error stop 'Control points are not set.' end if if (. not . allocated ( this % knot )) then error stop 'Knot vector is 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 ) if ( this % is_rational ()) then ! NURBS this % Xg = compute_Xg (& this % Xt , this % knot , this % degree , this % nc , this % ng , this % Xc , this % Wc ) else ! B-Spline this % Xg = compute_Xg (& this % Xt , this % knot , this % degree , this % nc , this % ng , this % Xc ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function cmp_Xg ( this , Xt ) result ( Xg ) class ( nurbs_curve ), intent ( in ) :: this real ( rk ), intent ( in ) :: Xt real ( rk ), allocatable :: Xg (:) ! check if (. not . allocated ( this % Xc )) then error stop 'Control points are not set.' end if if (. not . allocated ( this % knot )) then error stop 'Knot vector is not set.' end if if ( this % is_rational ()) then ! NURBS Xg = compute_Xg ( Xt , this % knot , this % degree , this % nc , this % Xc , this % Wc ) else ! B-Spline Xg = compute_Xg ( Xt , this % knot , this % degree , this % nc , this % Xc ) end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xc_all ( 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_Xci ( this , n ) result ( Xc ) class ( nurbs_curve ), intent ( in ) :: this integer , intent ( in ) :: n real ( rk ), allocatable :: Xc (:) if ( allocated ( this % Xc )) then if ( n < lbound ( this % Xc , 1 ) . or . n > ubound ( this % Xc , 1 )) then error stop 'Invalid index for control points.' end if Xc = this % Xc ( n ,:) else error stop 'Control points are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xcid ( this , n , dir ) result ( Xc ) class ( nurbs_curve ), intent ( in ) :: this integer , intent ( in ) :: n integer , intent ( in ) :: dir real ( rk ) :: Xc if ( allocated ( this % Xc )) then if ( n < lbound ( this % Xc , 1 ) . or . n > ubound ( this % Xc , 1 )) then error stop 'Invalid index for control points.' end if if ( dir < lbound ( this % Xc , 2 ) . or . dir > ubound ( this % Xc , 2 )) then error stop 'Invalid index for control points.' end if Xc = this % Xc ( n , dir ) else error stop 'Control points are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xg_all ( 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_Xgi ( this , n ) result ( Xg ) class ( nurbs_curve ), intent ( in ) :: this integer , intent ( in ) :: n real ( rk ), allocatable :: Xg (:) if ( allocated ( this % Xg )) then if ( n < lbound ( this % Xg , 1 ) . or . n > ubound ( this % Xg , 1 )) then error stop 'Invalid index for geometry points.' end if Xg = this % Xg ( n ,:) else error stop 'Control points are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xgid ( this , n , dir ) result ( Xg ) class ( nurbs_curve ), intent ( in ) :: this integer , intent ( in ) :: n integer , intent ( in ) :: dir real ( rk ) :: Xg if ( allocated ( this % Xg )) then if ( n < lbound ( this % Xg , 1 ) . or . n > ubound ( this % Xg , 1 )) then error stop 'Invalid index for geometry points.' end if if ( dir < lbound ( this % Xg , 2 ) . or . dir > ubound ( this % Xg , 2 )) then error stop 'Invalid index for geometry points.' end if Xg = this % Xg ( n , dir ) else error stop 'Control points are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Wc_all ( 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 NURBS curve is not rational or weights are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Wci ( this , n ) result ( Wc ) class ( nurbs_curve ), intent ( in ) :: this integer , intent ( in ) :: n real ( rk ) :: Wc if ( allocated ( this % Wc )) then if ( n < lbound ( this % Wc , 1 ) . or . n > ubound ( this % Wc , 1 )) then error stop 'Invalid index for weights.' end if Wc = this % Wc ( n ) else error stop 'The NURBS curve is not rational or weights 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 subroutine cmp_degree ( this ) class ( nurbs_curve ), intent ( inout ) :: this integer , allocatable :: m (:) m = this % get_multiplicity () this % degree = m ( 1 ) - 1 end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_degree ( this ) result ( degree ) class ( nurbs_curve ), intent ( in ) :: this integer :: degree degree = this % degree end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_knot_all ( 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 function get_knoti ( this , i ) result ( knot ) class ( nurbs_curve ), intent ( in ) :: this integer , intent ( in ) :: i real ( rk ) :: knot if ( allocated ( this % knot )) then if ( i < 1 . or . i > size ( this % knot )) then error stop 'Invalid index for knot vector.' else knot = this % knot ( i ) end if 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 ) if ( allocated ( this % elemConn_Xc_vis )) deallocate ( this % elemConn_Xc_vis ) if ( allocated ( this % elemConn_Xg_vis )) deallocate ( this % elemConn_Xg_vis ) if ( allocated ( this % elemConn )) deallocate ( this % elemConn ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function cmp_elem_Xc_vis ( this , p ) result ( elemConn ) class ( nurbs_curve ), intent ( in ) :: this integer , allocatable :: 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 function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function cmp_elem_Xg_vis ( this , p ) result ( elemConn ) class ( nurbs_curve ), intent ( in ) :: this integer , allocatable :: 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 function !=============================================================================== !=============================================================================== !> 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 , nc , nunit integer , allocatable :: elemConn (:,:) ! check if (. not . allocated ( this % Xc )) then error stop 'Control points are not set.' end if if (. not . allocated ( this % elemConn_Xc_vis )) then elemConn = this % cmp_elem_Xc_vis () else elemConn = this % elemConn_Xc_vis end if nc = size ( this % Xc , 1 ) open ( newunit = nunit , file = filename , action = 'write' ) write ( nunit , '(a)' ) '# vtk DataFile Version 2.0' write ( nunit , '(a)' ) 'Generated by ForCAD' write ( nunit , '(a)' ) 'ASCII' write ( nunit , '(a)' ) 'DATASET UNSTRUCTURED_GRID' write ( nunit , '(a,\" \",g0,\" \",a)' ) 'POINTS' , nc , 'double' if ( size ( this % Xc , 2 ) == 2 ) then write ( nunit , '(g0,\" \",g0,\" \",g0)' ) ( this % Xc ( i , 1 ), this % Xc ( i , 2 ), 0.0_rk , i = 1 , nc ) elseif ( size ( this % Xc , 2 ) == 3 ) then write ( nunit , '(g0,\" \",g0,\" \",g0)' ) ( this % Xc ( i , 1 ), this % Xc ( i , 2 ), this % Xc ( i , 3 ) , i = 1 , nc ) else error stop 'Invalid dimension of the control points.' end if write ( nunit , '(a,\" \",g0,\" \",g0)' ) 'CELLS' , size ( elemConn , 1 ), size ( elemConn , 1 ) * ( size ( elemConn , 2 ) + 1 ) write ( nunit , '(g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0)' )& ( 2 , elemConn ( i , 1 ) - 1 , elemConn ( i , 2 ) - 1 , 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 , ng , nunit integer , allocatable :: elemConn (:,:) ! check if (. not . allocated ( this % Xg )) then error stop 'Geometry points are not set.' end if if (. not . allocated ( this % elemConn_Xg_vis )) then elemConn = this % cmp_elem_Xg_vis () else elemConn = this % elemConn_Xg_vis end if ng = size ( this % Xg , 1 ) open ( newunit = nunit , file = filename , action = 'write' ) write ( nunit , '(a)' ) '# vtk DataFile Version 2.0' write ( nunit , '(a)' ) 'Generated by ForCAD' write ( nunit , '(a)' ) 'ASCII' write ( nunit , '(a)' ) 'DATASET UNSTRUCTURED_GRID' write ( nunit , '(a,\" \",g0,\" \",a)' ) 'POINTS' , ng , 'double' if ( size ( this % Xg , 2 ) == 2 ) then write ( nunit , '(g0,\" \",g0,\" \",g0)' ) ( this % Xg ( i , 1 ), this % Xg ( i , 2 ), 0.0_rk , i = 1 , ng ) elseif ( size ( this % Xg , 2 ) == 3 ) then write ( nunit , '(g0,\" \",g0,\" \",g0)' ) ( this % Xg ( i , 1 ), this % Xg ( i , 2 ), this % Xg ( i , 3 ) , i = 1 , ng ) else error stop 'Invalid dimension of the geometry points.' end if write ( nunit , '(a,\" \",g0,\" \",g0)' ) 'CELLS' , size ( elemConn , 1 ), size ( elemConn , 1 ) * ( size ( elemConn , 2 ) + 1 ) write ( nunit , '(g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0)' )& ( 2 , elemConn ( i , 1 ) - 1 , elemConn ( i , 2 ) - 1 , 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 if ( allocated ( this % Wc )) then call this % set ( knot = this % get_knot (), Xc = this % get_Xc (), Wc = this % get_Wc ()) else call this % set ( knot = this % get_knot (), Xc = this % get_Xc ()) end if 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 if ( allocated ( this % knot )) then call this % set ( knot = this % get_knot (), Xc = this % get_Xc (), Wc = this % get_Wc ()) else call this % set ( Xc = this % get_Xc (), Wc = this % get_Wc ()) end if else error stop 'The NURBS 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 % degree - compute_multiplicity ( this % knot ) end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine cmp_nc ( this ) class ( nurbs_curve ), intent ( inout ) :: this this % nc = sum ( compute_multiplicity ( this % knot )) - this % degree - 1 end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_nc ( this ) result ( nc ) class ( nurbs_curve ), intent ( in ) :: this integer :: nc nc = this % nc end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine insert_knots ( this , Xth , r ) class ( nurbs_curve ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: Xth (:) integer , intent ( in ), contiguous :: r (:) integer :: k , i , s , dim , j , n_new real ( rk ), allocatable :: Xcw (:,:), Xcw_new (:,:), Xc_new (:,:), Wc_new (:), knot_new (:) if ( this % is_rational ()) then ! NURBS do i = 1 , size ( Xth ) k = findspan ( this % nc - 1 , this % degree , Xth ( i ), this % knot ) if ( this % knot ( k + 1 ) == Xth ( i )) then s = compute_multiplicity ( this % knot , Xth ( i )) else s = 0 end if dim = size ( this % Xc , 2 ) allocate ( Xcw ( size ( this % Xc , 1 ), dim + 1 )) do j = 1 , size ( this % Xc , 1 ) Xcw ( j , 1 : dim ) = this % Xc ( j , 1 : dim ) * this % Wc ( j ) end do Xcw (:, dim + 1 ) = this % Wc (:) call insert_knot_A_5_1 (& this % degree ,& this % knot ,& Xcw ,& Xth ( i ),& k ,& s ,& r ( i ),& n_new ,& knot_new ,& Xcw_new ) allocate ( Xc_new ( 1 : n_new + 1 , 1 : dim )) allocate ( Wc_new ( 1 : n_new + 1 )) do j = 1 , n_new + 1 Xc_new ( j , 1 : dim ) = Xcw_new ( j - 1 , 1 : dim ) / Xcw_new ( j - 1 , dim + 1 ) Wc_new ( j ) = Xcw_new ( j - 1 , dim + 1 ) end do call this % set ( knot = knot_new , Xc = Xc_new , Wc = Wc_new ) deallocate ( Xcw , Xcw_new , Xc_new , Wc_new ) end do else ! B-Spline do i = 1 , size ( Xth ) k = findspan ( this % nc - 1 , this % degree , Xth ( i ), this % knot ) if ( this % knot ( k + 1 ) == Xth ( i )) then s = compute_multiplicity ( this % knot , Xth ( i )) else s = 0 end if call insert_knot_A_5_1 (& this % degree ,& this % knot ,& this % Xc ,& Xth ( i ),& k ,& s ,& r ( i ),& n_new ,& knot_new ,& Xc_new ) call this % set ( knot = knot_new , Xc = Xc_new ) end do end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine elevate_degree ( this , t ) class ( nurbs_curve ), intent ( inout ) :: this integer , intent ( in ) :: t real ( rk ), allocatable :: Xcw (:,:), Xcw_new (:,:), knot_new (:), Xc_new (:,:), Wc_new (:) integer :: dim , j , nc_new if ( this % is_rational ()) then ! NURBS dim = size ( this % Xc , 2 ) allocate ( Xcw ( size ( this % Xc , 1 ), dim + 1 )) do j = 1 , size ( this % Xc , 1 ) Xcw ( j , 1 : dim ) = this % Xc ( j , 1 : dim ) * this % Wc ( j ) Xcw ( j , dim + 1 ) = this % Wc ( j ) end do call elevate_degree_A_5_9 ( t , this % knot , this % degree , Xcw , nc_new , knot_new , Xcw_new ) allocate ( Xc_new ( 1 : nc_new , 1 : dim )) allocate ( Wc_new ( 1 : nc_new )) do j = 1 , nc_new Xc_new ( j , 1 : dim ) = Xcw_new ( j , 1 : dim ) / Xcw_new ( j , dim + 1 ) end do Wc_new (:) = Xcw_new (:, dim + 1 ) call this % set ( knot = knot_new , Xc = Xc_new , Wc = Wc_new ) deallocate ( Xcw , Xcw_new , Xc_new , Wc_new ) else ! B-Spline dim = size ( this % Xc , 2 ) call elevate_degree_A_5_9 ( t , this % knot , this % degree , this % Xc , nc_new , knot_new , Xc_new ) call this % set ( knot = knot_new , Xc = Xc_new ) deallocate ( Xc_new ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine derivative_vector ( this , res , Xt , dTgc , Tgc ) class ( nurbs_curve ), intent ( inout ) :: this integer , intent ( in ), optional :: res real ( rk ), intent ( in ), contiguous , optional :: Xt (:) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:) real ( rk ), allocatable , intent ( out ), optional :: Tgc (:,:) integer :: i ! 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 ) if ( this % is_rational ()) then ! NURBS call compute_dTgc ( this % Xt , this % knot , this % degree , this % nc , this % ng , this % Wc , dTgc , Tgc ) else ! B-Spline call compute_dTgc ( this % Xt , this % knot , this % degree , this % nc , this % ng , dTgc , Tgc ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine derivative_scalar ( this , Xt , dTgc , Tgc ) class ( nurbs_curve ), intent ( inout ) :: this real ( rk ), intent ( in ) :: Xt real ( rk ), allocatable , intent ( out ) :: dTgc (:) real ( rk ), allocatable , intent ( out ), optional :: Tgc (:) if ( this % is_rational ()) then ! NURBS call compute_dTgc ( Xt , this % knot , this % degree , this % nc , this % Wc , dTgc , Tgc ) else ! B-Spline call compute_dTgc ( Xt , this % knot , this % degree , this % nc , dTgc , Tgc ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine derivative2_vector ( this , res , Xt , d2Tgc , dTgc , Tgc ) class ( nurbs_curve ), intent ( inout ) :: this integer , intent ( in ), optional :: res real ( rk ), intent ( in ), contiguous , optional :: Xt (:) real ( rk ), allocatable , intent ( out ) :: d2Tgc (:,:) real ( rk ), allocatable , intent ( out ), optional :: dTgc (:,:) real ( rk ), allocatable , intent ( out ), optional :: Tgc (:,:) integer :: i ! 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 ) if ( this % is_rational ()) then ! NURBS call compute_d2Tgc ( this % Xt , this % knot , this % degree , this % nc , this % ng , this % Wc , d2Tgc , dTgc , Tgc ) else ! B-Spline call compute_d2Tgc ( this % Xt , this % knot , this % degree , this % nc , this % ng , d2Tgc , dTgc , Tgc ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine derivative2_scalar ( this , Xt , d2Tgc , dTgc , Tgc ) class ( nurbs_curve ), intent ( inout ) :: this real ( rk ), intent ( in ) :: Xt real ( rk ), allocatable , intent ( out ) :: d2Tgc (:) real ( rk ), allocatable , intent ( out ), optional :: dTgc (:) real ( rk ), allocatable , intent ( out ), optional :: Tgc (:) if ( this % is_rational ()) then ! NURBS call compute_d2Tgc ( Xt , this % knot , this % degree , this % nc , this % Wc , d2Tgc , dTgc , Tgc ) else ! B-Spline call compute_d2Tgc ( Xt , this % knot , this % degree , this % nc , d2Tgc , dTgc , Tgc ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine basis_vector ( this , res , Xt , Tgc ) class ( nurbs_curve ), intent ( inout ) :: this integer , intent ( in ), optional :: res real ( rk ), intent ( in ), contiguous , optional :: Xt (:) real ( rk ), allocatable , intent ( out ) :: Tgc (:,:) integer :: i ! 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 ) if ( this % is_rational ()) then ! NURBS Tgc = compute_Tgc ( this % Xt , this % knot , this % degree , this % nc , this % ng , this % Wc ) else ! B-Spline Tgc = compute_Tgc ( this % Xt , this % knot , this % degree , this % nc , this % ng ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine basis_scalar ( this , Xt , Tgc ) class ( nurbs_curve ), intent ( inout ) :: this real ( rk ), intent ( in ) :: Xt real ( rk ), allocatable , intent ( out ) :: Tgc (:) if ( this % is_rational ()) then ! NURBS Tgc = compute_Tgc ( Xt , this % knot , this % degree , this % nc , this % Wc ) else ! B-Spline Tgc = compute_Tgc ( Xt , this % knot , this % degree , this % nc ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function is_rational ( this ) result ( r ) class ( nurbs_curve ), intent ( in ) :: this logical :: r r = . false . if ( allocated ( this % Wc )) then if ( any ( this % Wc /= this % Wc ( 1 ))) then r = . true . end if end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine set_elem_Xc_vis ( this , elemConn ) class ( nurbs_curve ), intent ( inout ) :: this integer , intent ( in ), contiguous :: elemConn (:,:) if ( allocated ( this % elemConn_Xc_vis )) deallocate ( this % elemConn_Xc_vis ) this % elemConn_Xc_vis = elemConn end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine set_elem_Xg_vis ( this , elemConn ) class ( nurbs_curve ), intent ( inout ) :: this integer , intent ( in ), contiguous :: elemConn (:,:) if ( allocated ( this % elemConn_Xg_vis )) deallocate ( this % elemConn_Xg_vis ) this % elemConn_Xg_vis = elemConn end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine set_elem ( this , elemConn ) class ( nurbs_curve ), intent ( inout ) :: this integer , intent ( in ), contiguous :: elemConn (:,:) if ( allocated ( this % elemConn )) deallocate ( this % elemConn ) this % elemConn = elemConn end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_elem_Xc_vis ( this ) result ( elemConn ) class ( nurbs_curve ), intent ( in ) :: this integer , allocatable :: elemConn (:,:) elemConn = this % elemConn_Xc_vis end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_elem_Xg_vis ( this ) result ( elemConn ) class ( nurbs_curve ), intent ( in ) :: this integer , allocatable :: elemConn (:,:) elemConn = this % elemConn_Xg_vis end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_elem ( this ) result ( elemConn ) class ( nurbs_curve ), intent ( in ) :: this integer , allocatable :: elemConn (:,:) elemConn = this % elemConn end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine remove_knots ( this , Xth , r ) class ( nurbs_curve ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: Xth (:) integer , intent ( in ), contiguous :: r (:) integer :: k , i , s , dim , j , nc_new , t real ( rk ), allocatable :: Xcw (:,:), Xcw_new (:,:), Xc_new (:,:), Wc_new (:), knot_new (:) if ( this % is_rational ()) then ! NURBS do i = 1 , size ( Xth ) k = findspan ( this % nc - 1 , this % degree , Xth ( i ), this % knot ) if ( this % knot ( k + 1 ) == Xth ( i )) then s = compute_multiplicity ( this % knot , Xth ( i )) else s = 0 end if k = k + 1 dim = size ( this % Xc , 2 ) allocate ( Xcw ( size ( this % Xc , 1 ), dim + 1 )) do j = 1 , size ( this % Xc , 1 ) Xcw ( j , 1 : dim ) = this % Xc ( j , 1 : dim ) * this % Wc ( j ) end do Xcw (:, dim + 1 ) = this % Wc (:) call remove_knots_A_5_8 (& this % degree ,& this % knot ,& Xcw ,& Xth ( i ),& k ,& s ,& r ( i ),& t ,& knot_new ,& Xcw_new ) if ( allocated ( Xcw )) deallocate ( Xcw ) if ( t == 0 ) then ! no change else nc_new = size ( Xcw_new , 1 ) allocate ( Xc_new ( nc_new , dim )) allocate ( Wc_new ( nc_new )) do j = 1 , nc_new Xc_new ( j ,:) = Xcw_new ( j , 1 : dim ) / Xcw_new ( j , dim + 1 ) end do Wc_new (:) = Xcw_new (:, dim + 1 ) call this % set ( knot = knot_new , Xc = Xc_new , Wc = Wc_new ) if ( allocated ( Xcw_new )) deallocate ( Xcw_new ) if ( allocated ( Xc_new )) deallocate ( Xc_new ) if ( allocated ( Wc_new )) deallocate ( Wc_new ) end if end do else ! B-Spline do i = 1 , size ( Xth ) k = findspan ( this % nc - 1 , this % degree , Xth ( i ), this % knot ) if ( this % knot ( k + 1 ) == Xth ( i )) then s = compute_multiplicity ( this % knot , Xth ( i )) else s = 0 end if k = k + 1 call remove_knots_A_5_8 (& this % degree ,& this % knot ,& this % Xc ,& Xth ( i ),& k ,& s ,& r ( i ),& t ,& knot_new ,& Xc_new ) if ( t == 0 ) then ! no change else call this % set ( knot = knot_new , Xc = Xc_new ) end if end do end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine set_circle ( this , center , radius ) class ( nurbs_curve ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: center (:) real ( rk ), intent ( in ) :: radius real ( rk ), allocatable :: Xc (:,:), Wc (:), knot (:) integer :: i ! Define control points for circle allocate ( Xc ( 7 , 3 )) Xc ( 1 ,:) = [ 1.0_rk , 0.0_rk , 0.0_rk ] Xc ( 2 ,:) = [ 1.0_rk , sqrt ( 3.0_rk ), 0.0_rk ] Xc ( 3 ,:) = [ - 0.5_rk , sqrt ( 3.0_rk ) / 2.0_rk , 0.0_rk ] Xc ( 4 ,:) = [ - 2.0_rk , 0.0_rk , 0.0_rk ] Xc ( 5 ,:) = [ - 0.5_rk , - sqrt ( 3.0_rk ) / 2.0_rk , 0.0_rk ] Xc ( 6 ,:) = [ 1.0_rk , - sqrt ( 3.0_rk ), 0.0_rk ] Xc ( 7 ,:) = [ 1.0_rk , 0.0_rk , 0.0_rk ] ! Scale and translate the control points do i = 1 , size ( Xc , 1 ) Xc ( i ,:) = center + Xc ( i ,:) * radius end do ! Define weights for the control points Wc = [ 1.0_rk , 0.5_rk , 1.0_rk , 0.5_rk , 1.0_rk , 0.5_rk , 1.0_rk ] ! Define knot vector knot = [ 0.0_rk , 0.0_rk , 0.0_rk , 1.0_rk / 3.0_rk , 1.0_rk / 3.0_rk , 2.0_rk / 3.0_rk , 2.0_rk / 3.0_rk , 1.0_rk , 1.0_rk , 1.0_rk ] ! Set knot vector, control points, and weights call this % set ( knot , Xc , Wc ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine set_C ( this , center , radius ) class ( nurbs_curve ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: center (:) real ( rk ), intent ( in ) :: radius real ( rk ), allocatable :: Xc (:,:), Wc (:), knot (:) integer :: i ! Define control points for C-shape allocate ( Xc ( 5 , 3 )) Xc ( 1 ,:) = [ 1.0_rk , 0.0_rk , 0.0_rk ] Xc ( 2 ,:) = [ 1.0_rk , sqrt ( 3.0_rk ), 0.0_rk ] Xc ( 3 ,:) = [ - 0.5_rk , sqrt ( 3.0_rk ) / 2.0_rk , 0.0_rk ] Xc ( 4 ,:) = [ - 2.0_rk , 0.0_rk , 0.0_rk ] Xc ( 5 ,:) = [ - 0.5_rk , - sqrt ( 3.0_rk ) / 2.0_rk , 0.0_rk ] ! Scale and translate the control points do i = 1 , size ( Xc , 1 ) Xc ( i ,:) = center + Xc ( i ,:) * radius end do ! Define weights for the control points Wc = [ 1.0_rk , 0.5_rk , 1.0_rk , 0.5_rk , 1.0_rk ] ! Define knot vector knot = [ 0.0_rk , 0.0_rk , 0.0_rk , 1.0_rk / 2.0_rk , 1.0_rk / 2.0_rk , 1.0_rk , 1.0_rk , 1.0_rk ] ! Set knot vector, control points, and weights call this % set ( knot , Xc , Wc ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function cmp_elem ( this ) result ( elemConn ) class ( nurbs_curve ), intent ( in ) :: this integer , allocatable :: elemConn (:,:) call elemConn_Cn ( this % nc , this % degree , unique ( this % knot ), this % get_multiplicity (),& elemConn ) end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine rotate_Xc ( this , alpha , beta , theta ) class ( nurbs_curve ), intent ( inout ) :: this real ( rk ), intent ( in ) :: alpha , beta , theta integer :: i do i = 1 , this % nc this % Xc ( i , :) = matmul ( rotation ( alpha , beta , theta ), this % Xc ( i , :)) end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine rotate_Xg ( this , alpha , beta , theta ) class ( nurbs_curve ), intent ( inout ) :: this real ( rk ), intent ( in ) :: alpha , beta , theta integer :: i do i = 1 , this % ng this % Xg ( i , :) = matmul ( rotation ( alpha , beta , theta ), this % Xg ( i , :)) end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine translate_Xc ( this , vec ) class ( nurbs_curve ), intent ( inout ) :: this real ( rk ), intent ( in ) :: vec (:) integer :: i do i = 1 , this % nc this % Xc ( i , :) = this % Xc ( i , :) + vec end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine translate_Xg ( this , vec ) class ( nurbs_curve ), intent ( inout ) :: this real ( rk ), intent ( in ) :: vec (:) integer :: i do i = 1 , this % nc this % Xg ( i , :) = this % Xg ( i , :) + vec end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine show ( this , vtkfile_Xc , vtkfile_Xg ) class ( nurbs_curve ), intent ( inout ) :: this character ( len =* ), intent ( in ) :: vtkfile_Xc , vtkfile_Xg character ( len = 3000 ) :: pyvista_script pyvista_script = & \"import pyvista as pv\" // achar ( 10 ) // & \"pv.global_theme.color = 'white'\" // achar ( 10 ) // & \"Xc = pv.read('\" // trim ( vtkfile_Xc ) // \"')\" // achar ( 10 ) // & \"Xg = pv.read('\" // trim ( vtkfile_Xg ) // \"')\" // achar ( 10 ) // & \"p = pv.Plotter(lighting='light kit')\" // achar ( 10 ) // & \"actor_Xcp = p.add_mesh(\" // achar ( 10 ) // & \" Xc,\" // achar ( 10 ) // & \" style='points',\" // achar ( 10 ) // & \" point_size=10,\" // achar ( 10 ) // & \" color='red',\" // achar ( 10 ) // & \" render_points_as_spheres=True,\" // achar ( 10 ) // & \" opacity=0.5,\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"actor_Xcw = p.add_mesh(\" // achar ( 10 ) // & \" Xc,\" // achar ( 10 ) // & \" show_edges=True,\" // achar ( 10 ) // & \" color='yellow',\" // achar ( 10 ) // & \" line_width=3,\" // achar ( 10 ) // & \" style='wireframe',\" // achar ( 10 ) // & \" opacity=0.2\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"actor_Xg = p.add_mesh(\" // achar ( 10 ) // & \" Xg,\" // achar ( 10 ) // & \" show_edges=False,\" // achar ( 10 ) // & \" color='cyan',\" // achar ( 10 ) // & \" line_width=7,\" // achar ( 10 ) // & \" metallic=0.6,\" // achar ( 10 ) // & \" pbr=True,\" // achar ( 10 ) // & \" split_sharp_edges=True,\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"p.add_axes(interactive=False)\" // achar ( 10 ) // & \"def point_picker_callback(point):\" // achar ( 10 ) // & \" mesh = Xc\" // achar ( 10 ) // & \" point_id = mesh.find_closest_point(point)\" // achar ( 10 ) // & \" point_coords = mesh.points[point_id]\" // achar ( 10 ) // & \" label = f'ID: {point_id + 1}\\n({point_coords[0]:.3f}, {point_coords[1]:.3f}, {point_coords[2]:.3f})'\" // achar ( 10 ) // & \" p.add_point_labels(\" // achar ( 10 ) // & \" [point_coords],\" // achar ( 10 ) // & \" [label],\" // achar ( 10 ) // & \" font_size=14,\" // achar ( 10 ) // & \" text_color='black',\" // achar ( 10 ) // & \" show_points=False,\" // achar ( 10 ) // & \" fill_shape=False,\" // achar ( 10 ) // & \" shape=None,\" // achar ( 10 ) // & \" )\" // achar ( 10 ) // & \"picker = p.enable_point_picking(callback=point_picker_callback, show_message=False)\" // achar ( 10 ) // & \"window_size = p.window_size\" // achar ( 10 ) // & \"y_pos = window_size[1]\" // achar ( 10 ) // & \"def Xcp_toggle_vis(flag):\" // achar ( 10 ) // & \" actor_Xcp.SetVisibility(flag)\" // achar ( 10 ) // & \"def Xcw_toggle_vis(flag):\" // achar ( 10 ) // & \" actor_Xcw.SetVisibility(flag)\" // achar ( 10 ) // & \"def Xg_toggle_vis(flag):\" // achar ( 10 ) // & \" actor_Xg.SetVisibility(flag)\" // achar ( 10 ) // & \"p.add_checkbox_button_widget(\" // achar ( 10 ) // & \" Xcp_toggle_vis,\" // achar ( 10 ) // & \" value=True,\" // achar ( 10 ) // & \" color_on='red',\" // achar ( 10 ) // & \" size=25,\" // achar ( 10 ) // & \" position=(0, y_pos - 1 * 25),\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"p.add_checkbox_button_widget(\" // achar ( 10 ) // & \" Xcw_toggle_vis,\" // achar ( 10 ) // & \" value=True,\" // achar ( 10 ) // & \" color_on='yellow',\" // achar ( 10 ) // & \" size=25,\" // achar ( 10 ) // & \" position=(0, y_pos - 2 * 25),\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"p.add_checkbox_button_widget(\" // achar ( 10 ) // & \" Xg_toggle_vis,\" // achar ( 10 ) // & \" value=True,\" // achar ( 10 ) // & \" color_on='cyan',\" // achar ( 10 ) // & \" size=25,\" // achar ( 10 ) // & \" position=(0, y_pos - 3 * 25),\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"p.add_text(\" // achar ( 10 ) // & \" 'Xc (Points)',\" // achar ( 10 ) // & \" position=(25 + 3, y_pos - 1 * 25),\" // achar ( 10 ) // & \" font_size=8,\" // achar ( 10 ) // & \" color='black',\" // achar ( 10 ) // & \" font='times',\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"p.add_text(\" // achar ( 10 ) // & \" 'Xc (Control geometry)',\" // achar ( 10 ) // & \" position=(25 + 3, y_pos - 2 * 25),\" // achar ( 10 ) // & \" font_size=8,\" // achar ( 10 ) // & \" color='black',\" // achar ( 10 ) // & \" font='times',\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"p.add_text(\" // achar ( 10 ) // & \" 'Xg (Geometry)',\" // achar ( 10 ) // & \" position=(25 + 3, y_pos - 3 * 25),\" // achar ( 10 ) // & \" font_size=8,\" // achar ( 10 ) // & \" color='black',\" // achar ( 10 ) // & \" font='times',\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"p.add_text('ForCAD', position=(0.0, 10.0), font_size=14, color='black', font='times')\" // achar ( 10 ) // & \"p.add_text(\" // achar ( 10 ) // & \" 'https://github.com/gha3mi/forcad',\" // achar ( 10 ) // & \" position=(0.0, 0.0),\" // achar ( 10 ) // & \" font_size=7,\" // achar ( 10 ) // & \" color='blue',\" // achar ( 10 ) // & \" font='times',\" // achar ( 10 ) // & \")\" // achar ( 10 ) // & \"p.show(title='ForCAD', interactive=True)\" call execute_command_line ( 'python -c \"' // trim ( adjustl ( pyvista_script )) // '\"' ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine set_half_circle ( this , center , radius ) class ( nurbs_curve ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: center (:) real ( rk ), intent ( in ) :: radius real ( rk ), allocatable :: Xc (:,:), Wc (:), knot (:) integer :: i ! Define control points for half circle allocate ( Xc ( 5 , 3 )) Xc ( 1 ,:) = [ 0.5_rk , 0.0_rk , 0.0_rk ] Xc ( 2 ,:) = [ 0.5_rk , 0.5_rk , 0.0_rk ] Xc ( 3 ,:) = [ 0.0_rk , 0.5_rk , 0.0_rk ] Xc ( 4 ,:) = [ - 0.5_rk , 0.5_rk , 0.0_rk ] Xc ( 5 ,:) = [ - 0.5_rk , 0.0_rk , 0.0_rk ] ! Scale and translate the control points do i = 1 , size ( Xc , 1 ) Xc ( i ,:) = center + Xc ( i ,:) * radius end do ! Define weights for the control points Wc = [ 1.0_rk , 1.0_rk / sqrt ( 2.0_rk ), 1.0_rk , 1.0_rk / sqrt ( 2.0_rk ), 1.0_rk ] ! Define knot vector knot = [ 0.0_rk , 0.0_rk , 0.0_rk , 1.0_rk / 2.0_rk , & 1.0_rk / 2.0_rk , 1.0_rk , 1.0_rk , 1.0_rk ] ! Set knot vector, control points, and weights call this % set ( knot , Xc , Wc ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine nearest_point ( this , point_Xg , nearest_Xg , nearest_Xt , id ) class ( nurbs_curve ), intent ( in ) :: this real ( rk ), intent ( in ) :: point_Xg (:) real ( rk ), intent ( out ), allocatable , optional :: nearest_Xg (:) real ( rk ), intent ( out ), optional :: nearest_Xt integer , intent ( out ), optional :: id integer :: id_ real ( rk ), allocatable :: distances (:) allocate ( distances ( this % ng )) distances = nearest_point_help_1d ( this % ng , this % Xg , point_Xg ) id_ = minloc ( distances , dim = 1 ) if ( present ( id )) id = id_ if ( present ( nearest_Xg )) nearest_Xg = this % Xg ( id_ ,:) if ( present ( nearest_Xt )) nearest_Xt = this % Xt ( id_ ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine nearest_point2 ( this , point_Xg , tol , maxit , nearest_Xt , nearest_Xg ) class ( nurbs_curve ), intent ( inout ) :: this real ( rk ), intent ( in ) :: point_Xg (:) real ( rk ), intent ( in ) :: tol integer , intent ( in ) :: maxit real ( rk ), intent ( out ) :: nearest_Xt real ( rk ), allocatable , intent ( out ), optional :: nearest_Xg (:) real ( rk ) :: xk , obj , grad , hess , dk , alphak , tau , beta , lower_bounds , upper_bounds real ( rk ), allocatable :: Xg (:), Tgc (:), dTgc (:), d2Tgc (:), distances (:) integer :: k , l logical :: convergenz type ( nurbs_curve ) :: copy_this k = 0 ! lower and upper bounds lower_bounds = minval ( this % knot ) upper_bounds = maxval ( this % knot ) ! guess initial point copy_this = this call this % create ( 10 ) allocate ( distances ( copy_this % ng )) distances = nearest_point_help_1d ( copy_this % ng , copy_this % Xg , point_Xg ) xk = copy_this % Xt ( minloc ( distances , dim = 1 )) call copy_this % finalize () ! Check if xk is within the knot vector range if ( xk < minval ( this % knot )) then xk = minval ( this % knot ) else if ( xk > maxval ( this % knot )) then xk = maxval ( this % knot ) end if convergenz = . false . allocate ( Xg ( size ( this % Xc , 2 ))) ! allocate(dTgc(size(this%Xc,1))) ! allocate(d2Tgc(size(this%Xc,1))) do while (. not . convergenz . and . k < maxit ) ! objection, gradient and hessian Xg = this % cmp_Xg ( xk ) call this % derivative2 ( Xt = xk , d2Tgc = d2Tgc , dTgc = dTgc , Tgc = Tgc ) ! Tgc is not needed obj = norm2 ( Xg - point_Xg ) + 0.001_rk ! add a small number to avoid division by zero grad = dot_product (( Xg - point_Xg ) / obj , matmul ( dTgc , this % Xc )) hess = dot_product ( matmul ( dTgc , this % Xc ) - ( Xg - point_Xg ) / obj * grad , matmul ( dTgc , this % Xc )) / obj & + dot_product (( Xg - point_Xg ) / obj , matmul ( d2Tgc , this % Xc )) ! debug print '(i3,1x,e20.10,1x,e20.10)' , k , xk , abs ( grad ) if ( abs ( grad ) <= tol ) then convergenz = . true . nearest_Xt = xk if ( present ( nearest_Xg )) nearest_Xg = this % cmp_Xg ( nearest_Xt ) else dk = - grad / hess ! Backtracking-Armijo Line Search alphak = 1.0_rk tau = 0.5_rk ! 0 < tau < 1 beta = 1.0e-4_rk ! 0 < beta < 1 l = 0 do while (. not . norm2 ( this % cmp_Xg ( xk + alphak * dk ) - point_Xg ) <= obj + alphak * beta * grad * dk . and . l < 50 ) alphak = tau * alphak l = l + 1 end do xk = xk + alphak * dk ! Check if xk is within the knot vector range xk = max ( min ( xk , upper_bounds ), lower_bounds ) k = k + 1 end if end do end subroutine !=============================================================================== end module forcad_nurbs_curve !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function compute_Xg_nurbs_1d ( Xt , knot , degree , nc , ng , Xc , Wc ) result ( Xg ) use forcad_utils , only : rk , basis_bspline implicit none real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), intent ( in ), contiguous :: knot (:) integer , intent ( in ) :: degree integer , intent ( in ) :: nc integer , intent ( in ) :: ng real ( rk ), intent ( in ), contiguous :: Xc (:,:) real ( rk ), intent ( in ), contiguous :: Wc (:) real ( rk ), allocatable :: Xg (:,:) real ( rk ), allocatable :: Tgc (:) integer :: i allocate ( Xg ( ng , size ( Xc , 2 ))) allocate ( Tgc ( nc )) !$OMP PARALLEL DO PRIVATE(Tgc) do i = 1 , ng Tgc = basis_bspline ( Xt ( i ), knot , nc , degree ) Tgc = Tgc * ( Wc / ( dot_product ( Tgc , Wc ))) Xg ( i ,:) = matmul ( Tgc , Xc ) end do !$OMP END PARALLEL DO end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function compute_Xg_nurbs_1d_1point ( Xt , knot , degree , nc , Xc , Wc ) result ( Xg ) use forcad_utils , only : rk , basis_bspline implicit none real ( rk ), intent ( in ) :: Xt real ( rk ), intent ( in ), contiguous :: knot (:) integer , intent ( in ) :: degree integer , intent ( in ) :: nc real ( rk ), intent ( in ), contiguous :: Xc (:,:) real ( rk ), intent ( in ), contiguous :: Wc (:) real ( rk ), allocatable :: Xg (:) real ( rk ), allocatable :: Tgc (:) allocate ( Xg ( size ( Xc ))) allocate ( Tgc ( nc )) Tgc = basis_bspline ( Xt , knot , nc , degree ) Tgc = Tgc * ( Wc / ( dot_product ( Tgc , Wc ))) Xg = matmul ( Tgc , Xc ) end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function compute_Xg_bspline_1d ( Xt , knot , degree , nc , ng , Xc ) result ( Xg ) use forcad_utils , only : rk , basis_bspline implicit none real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), intent ( in ), contiguous :: knot (:) integer , intent ( in ) :: degree integer , intent ( in ) :: nc integer , intent ( in ) :: ng real ( rk ), intent ( in ), contiguous :: Xc (:,:) real ( rk ), allocatable :: Xg (:,:) integer :: i allocate ( Xg ( ng , size ( Xc , 2 ))) !$OMP PARALLEL DO do i = 1 , ng Xg ( i ,:) = matmul ( basis_bspline ( Xt ( i ), knot , nc , degree ), Xc ) end do !$OMP END PARALLEL DO end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function compute_Xg_bspline_1d_1point ( Xt , knot , degree , nc , Xc ) result ( Xg ) use forcad_utils , only : rk , basis_bspline implicit none real ( rk ), intent ( in ) :: Xt real ( rk ), intent ( in ), contiguous :: knot (:) integer , intent ( in ) :: degree integer , intent ( in ) :: nc real ( rk ), intent ( in ), contiguous :: Xc (:,:) real ( rk ), allocatable :: Xg (:) allocate ( Xg ( size ( Xc ))) Xg = matmul ( basis_bspline ( Xt , knot , nc , degree ), Xc ) end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine compute_dTgc_nurbs_1d_vector ( Xt , knot , degree , nc , ng , Wc , dTgc , Tgc ) use forcad_utils , only : rk , basis_bspline_der implicit none real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), intent ( in ), contiguous :: knot (:) integer , intent ( in ) :: degree integer , intent ( in ) :: nc integer , intent ( in ) :: ng real ( rk ), intent ( in ), contiguous :: Wc (:) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: Tgc (:,:) real ( rk ), allocatable :: dBi (:), Bi (:) integer :: i allocate ( dTgc ( ng , nc ), Tgc ( ng , nc ), dBi ( nc ), Bi ( nc )) do i = 1 , size ( Xt ) call basis_bspline_der ( Xt ( i ), knot , nc , degree , dBi , Bi ) Tgc ( i ,:) = Bi * ( Wc / ( dot_product ( Bi , Wc ))) dTgc ( i ,:) = ( dBi * Wc - Tgc ( i ,:) * dot_product ( dBi , Wc ) ) / dot_product ( Bi , Wc ) end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine compute_dTgc_nurbs_1d_scalar ( Xt , knot , degree , nc , Wc , dTgc , Tgc ) use forcad_utils , only : rk , basis_bspline_der implicit none real ( rk ), intent ( in ) :: Xt real ( rk ), intent ( in ), contiguous :: knot (:) integer , intent ( in ) :: degree integer , intent ( in ) :: nc real ( rk ), intent ( in ), contiguous :: Wc (:) real ( rk ), allocatable , intent ( out ) :: dTgc (:) real ( rk ), allocatable , intent ( out ) :: Tgc (:) real ( rk ), allocatable :: dBi (:), Bi (:) allocate ( dTgc ( nc ), Tgc ( nc )) call basis_bspline_der ( Xt , knot , nc , degree , dBi , Bi ) Tgc = Bi * ( Wc / ( dot_product ( Bi , Wc ))) dTgc = ( dBi * Wc - Tgc * dot_product ( dBi , Wc ) ) / dot_product ( Bi , Wc ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine compute_dTgc_bspline_1d_vector ( Xt , knot , degree , nc , ng , dTgc , Tgc ) use forcad_utils , only : rk , basis_bspline_der implicit none real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), intent ( in ), contiguous :: knot (:) integer , intent ( in ) :: degree integer , intent ( in ) :: nc integer , intent ( in ) :: ng real ( rk ), allocatable , intent ( out ) :: dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: Tgc (:,:) real ( rk ), allocatable :: dBi (:), Bi (:) integer :: i allocate ( dTgc ( ng , nc ), Tgc ( ng , nc ), dBi ( nc ), Bi ( nc )) do i = 1 , size ( Xt ) call basis_bspline_der ( Xt ( i ), knot , nc , degree , dBi , Bi ) Tgc ( i ,:) = Bi dTgc ( i ,:) = dBi end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine compute_dTgc_bspline_1d_scalar ( Xt , knot , degree , nc , dTgc , Tgc ) use forcad_utils , only : rk , basis_bspline_der implicit none real ( rk ), intent ( in ) :: Xt real ( rk ), intent ( in ), contiguous :: knot (:) integer , intent ( in ) :: degree integer , intent ( in ) :: nc real ( rk ), allocatable , intent ( out ) :: dTgc (:) real ( rk ), allocatable , intent ( out ) :: Tgc (:) allocate ( dTgc ( nc ), Tgc ( nc )) call basis_bspline_der ( Xt , knot , nc , degree , dTgc , Tgc ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine compute_d2Tgc_nurbs_1d_vector ( Xt , knot , degree , nc , ng , Wc , d2Tgc , dTgc , Tgc ) use forcad_utils , only : rk , basis_bspline_2der implicit none real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), intent ( in ), contiguous :: knot (:) integer , intent ( in ) :: degree integer , intent ( in ) :: nc integer , intent ( in ) :: ng real ( rk ), intent ( in ), contiguous :: Wc (:) real ( rk ), allocatable , intent ( out ) :: d2Tgc (:,:) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: Tgc (:,:) real ( rk ), allocatable :: d2Bi (:), dBi (:), Tgci (:), dTgci (:), Bi (:) integer :: i allocate ( d2Tgc ( ng , nc ), dTgc ( ng , nc ), Tgc ( ng , nc ), d2Bi ( nc ), dTgci ( nc ), dBi ( nc ), Tgci ( nc ), Bi ( nc )) do i = 1 , size ( Xt ) call basis_bspline_2der ( Xt ( i ), knot , nc , degree , d2Bi , dBi , Bi ) Tgci = Bi * ( Wc / ( dot_product ( Bi , Wc ))) Tgc ( i ,:) = Tgci dTgci = ( dBi * Wc - Tgci * dot_product ( dBi , Wc ) ) / dot_product ( Bi , Wc ) dTgc ( i ,:) = dTgci d2Tgc ( i ,:) = ( d2Bi * Wc - 2.0_rk * dTgci * dot_product ( dBi , Wc ) - Tgci * dot_product ( d2Bi , Wc )) / dot_product ( Bi , Wc ) end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine compute_d2Tgc_nurbs_1d_scalar ( Xt , knot , degree , nc , Wc , d2Tgc , dTgc , Tgc ) use forcad_utils , only : rk , basis_bspline_2der implicit none real ( rk ), intent ( in ) :: Xt real ( rk ), intent ( in ), contiguous :: knot (:) integer , intent ( in ) :: degree integer , intent ( in ) :: nc real ( rk ), intent ( in ), contiguous :: Wc (:) real ( rk ), allocatable , intent ( out ) :: d2Tgc (:) real ( rk ), allocatable , intent ( out ) :: dTgc (:) real ( rk ), allocatable , intent ( out ) :: Tgc (:) real ( rk ), allocatable :: d2Bi (:), dBi (:), Bi (:) allocate ( d2Tgc ( nc ), dTgc ( nc ), Tgc ( nc ), d2Bi ( nc ), dBi ( nc ), Bi ( nc )) call basis_bspline_2der ( Xt , knot , nc , degree , d2Bi , dBi , Bi ) Tgc = Bi * ( Wc / ( dot_product ( Bi , Wc ))) dTgc = ( dBi * Wc - Tgc * dot_product ( dBi , Wc ) ) / dot_product ( Bi , Wc ) d2Tgc = ( d2Bi * Wc - 2.0_rk * dTgc * dot_product ( dBi , Wc ) - Tgc * dot_product ( d2Bi , Wc )) / dot_product ( Bi , Wc ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine compute_d2Tgc_bspline_1d_vector ( Xt , knot , degree , nc , ng , d2Tgc , dTgc , Tgc ) use forcad_utils , only : rk , basis_bspline_2der implicit none real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), intent ( in ), contiguous :: knot (:) integer , intent ( in ) :: degree integer , intent ( in ) :: nc integer , intent ( in ) :: ng real ( rk ), allocatable , intent ( out ) :: d2Tgc (:,:) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: Tgc (:,:) real ( rk ), allocatable :: d2Tgci (:), dTgci (:), Tgci (:) integer :: i allocate ( d2Tgc ( ng , nc ), dTgc ( ng , nc ), Tgc ( ng , nc ), dTgci ( nc ), Tgci ( nc ), d2Tgci ( nc )) do i = 1 , size ( Xt ) call basis_bspline_2der ( Xt ( i ), knot , nc , degree , d2Tgci , dTgci , Tgci ) Tgc ( i ,:) = Tgci dTgc ( i ,:) = dTgci d2Tgc ( i ,:) = d2Tgci end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine compute_d2Tgc_bspline_1d_scalar ( Xt , knot , degree , nc , d2Tgc , dTgc , Tgc ) use forcad_utils , only : rk , basis_bspline_2der implicit none real ( rk ), intent ( in ) :: Xt real ( rk ), intent ( in ), contiguous :: knot (:) integer , intent ( in ) :: degree integer , intent ( in ) :: nc real ( rk ), allocatable , intent ( out ) :: d2Tgc (:) real ( rk ), allocatable , intent ( out ) :: dTgc (:) real ( rk ), allocatable , intent ( out ) :: Tgc (:) allocate ( d2Tgc ( nc ), dTgc ( nc ), Tgc ( nc )) call basis_bspline_2der ( Xt , knot , nc , degree , d2Tgc , dTgc , Tgc ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function compute_Tgc_nurbs_1d_vector ( Xt , knot , degree , nc , ng , Wc ) result ( Tgc ) use forcad_utils , only : rk , basis_bspline implicit none real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), intent ( in ), contiguous :: knot (:) integer , intent ( in ) :: degree integer , intent ( in ) :: nc integer , intent ( in ) :: ng real ( rk ), intent ( in ), contiguous :: Wc (:) real ( rk ), allocatable :: Tgc (:,:) real ( rk ), allocatable :: Tgci (:) integer :: i allocate ( Tgc ( ng , nc ), Tgci ( nc )) !$OMP PARALLEL DO PRIVATE(Tgci) do i = 1 , size ( Xt , 1 ) Tgci = basis_bspline ( Xt ( i ), knot , nc , degree ) Tgc ( i ,:) = Tgci * ( Wc / ( dot_product ( Tgci , Wc ))) end do !$OMP END PARALLEL DO end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function compute_Tgc_nurbs_1d_scalar ( Xt , knot , degree , nc , Wc ) result ( Tgc ) use forcad_utils , only : rk , basis_bspline implicit none real ( rk ), intent ( in ) :: Xt real ( rk ), intent ( in ), contiguous :: knot (:) integer , intent ( in ) :: degree integer , intent ( in ) :: nc real ( rk ), intent ( in ), contiguous :: Wc (:) real ( rk ), allocatable :: Tgc (:) allocate ( Tgc ( nc )) Tgc = basis_bspline ( Xt , knot , nc , degree ) Tgc = Tgc * ( Wc / ( dot_product ( Tgc , Wc ))) end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function compute_Tgc_bspline_1d_vector ( Xt , knot , degree , nc , ng ) result ( Tgc ) use forcad_utils , only : rk , basis_bspline implicit none real ( rk ), intent ( in ), contiguous :: Xt (:) real ( rk ), intent ( in ), contiguous :: knot (:) integer , intent ( in ) :: degree integer , intent ( in ) :: nc integer , intent ( in ) :: ng real ( rk ), allocatable :: Tgc (:,:) integer :: i allocate ( Tgc ( ng , nc )) !$OMP PARALLEL DO do i = 1 , size ( Xt , 1 ) Tgc ( i ,:) = basis_bspline ( Xt ( i ), knot , nc , degree ) end do !$OMP END PARALLEL DO end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function compute_Tgc_bspline_1d_scalar ( Xt , knot , degree , nc ) result ( Tgc ) use forcad_utils , only : rk , basis_bspline implicit none real ( rk ), intent ( in ) :: Xt real ( rk ), intent ( in ), contiguous :: knot (:) integer , intent ( in ) :: degree integer , intent ( in ) :: nc real ( rk ), allocatable :: Tgc (:) allocate ( Tgc ( nc )) Tgc = basis_bspline ( Xt , knot , nc , degree ) end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure function nearest_point_help_1d ( ng , Xg , point_Xg ) result ( distances ) use forcad_utils , only : rk implicit none integer , intent ( in ) :: ng real ( rk ), intent ( in ), contiguous :: Xg (:,:) real ( rk ), intent ( in ), contiguous :: point_Xg (:) real ( rk ), allocatable :: distances (:) integer :: i allocate ( distances ( ng )) !$OMP PARALLEL DO do i = 1 , ng distances ( i ) = norm2 ( Xg ( i ,:) - point_Xg ) end do !$OMP END PARALLEL DO end function !===============================================================================","tags":"","loc":"sourcefile/forcad_nurbs_curve.f90.html"}]} \ No newline at end of file diff --git a/type/nurbs_curve.html b/type/nurbs_curve.html index e642e3f60..419e157a2 100644 --- a/type/nurbs_curve.html +++ b/type/nurbs_curve.html @@ -118,17 +118,17 @@

                  Variables

                  @@ -155,71 +155,71 @@

                  Type-Bound Procedures

                  - basis - cmp_Xg - cmp_degree - cmp_elem - cmp_elem_Xc_vis - cmp_elem_Xg_vis - cmp_nc - create - derivative - derivative2 - elevate_degree - export_Xc - export_Xg - finalize - get_Wc - get_Xc - get_Xg - get_Xt - get_continuity - get_degree - get_elem - get_elem_Xc_vis - get_elem_Xg_vis - get_knot - get_multiplicity - get_nc - get_ng - insert_knots - is_rational - modify_Wc - modify_Xc - nearest_point - nearest_point2 - remove_knots - rotate_Xc - rotate_Xg - set - set1 - set2 - set3 - set_C + basis + cmp_Xg + cmp_degree + cmp_elem + cmp_elem_Xc_vis + cmp_elem_Xg_vis + cmp_nc + create + derivative + derivative2 + elevate_degree + export_Xc + export_Xg + finalize + get_Wc + get_Xc + get_Xg + get_Xt + get_continuity + get_degree + get_elem + get_elem_Xc_vis + get_elem_Xg_vis + get_knot + get_multiplicity + get_nc + get_ng + insert_knots + is_rational + modify_Wc + modify_Xc + nearest_point + nearest_point2 + remove_knots + rotate_Xc + rotate_Xg + set + set1 + set2 + set3 + set_C set_circle - set_elem - set_elem_Xc_vis - set_elem_Xg_vis + set_elem + set_elem_Xc_vis + set_elem_Xg_vis set_half_circle - show - translate_Xc - translate_Xg - basis_scalar - basis_vector - derivative2_scalar - derivative2_vector - derivative_scalar - derivative_vector - get_Wc_all - get_Wci - get_Xc_all - get_Xci - get_Xcid - get_Xg_all - get_Xgi - get_Xgid - get_knot_all - get_knoti + show + translate_Xc + translate_Xg + basis_scalar + basis_vector + derivative2_scalar + derivative2_vector + derivative_scalar + derivative_vector + get_Wc_all + get_Wci + get_Xc_all + get_Xci + get_Xcid + get_Xg_all + get_Xgi + get_Xgid + get_knot_all + get_knoti
                  @@ -252,7 +252,7 @@

                  Components

                  - + real(kind=rk), private,
                  - + real(kind=rk), private,
                  - + real(kind=rk), private,
                  - + real(kind=rk), private,
                  - + integer, private
                  - + integer, private,
                  - + integer, private,
                  - + integer, 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,
                  - + integer, private
                  - + integer, private,
                  - + integer, private,
                  - + integer, private,
                  - + real(kind=rk), private,
                  - + real(kind=rk), private,
                  - + integer, private
                  - + integer, private