diff --git a/index.html b/index.html index f42eeae2c..8a82ca828 100644 --- a/index.html +++ b/index.html @@ -260,7 +260,7 @@

Derived Types

Documentation generated by FORD - on 2024-07-01T09:54:44.473032

+ on 2024-07-01T10:00:02.512255


diff --git a/interface/compute_d2tgc.html b/interface/compute_d2tgc.html index e729b2bf2..97c81fb32 100644 --- a/interface/compute_d2tgc.html +++ b/interface/compute_d2tgc.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~~CalledByGraph - + interface~compute_d2tgc - -compute_d2Tgc + +compute_d2Tgc proc~derivative2_scalar - - -nurbs_volume%derivative2_scalar + + +nurbs_curve%derivative2_scalar proc~derivative2_scalar->interface~compute_d2tgc - - + + proc~derivative2_vector - - -nurbs_volume%derivative2_vector + + +nurbs_curve%derivative2_vector proc~derivative2_vector->interface~compute_d2tgc - - + + none~derivative2 - - -nurbs_volume%derivative2 + + +nurbs_curve%derivative2 none~derivative2->proc~derivative2_scalar - - + + none~derivative2->proc~derivative2_vector - - + + proc~nearest_point2 - - -nurbs_volume%nearest_point2 + + +nurbs_curve%nearest_point2 proc~nearest_point2->none~derivative2 - - + + - + -program~nearest_point_3d - +program~nearest_point_1d + -nearest_point_3d +nearest_point_1d - + -program~nearest_point_3d->proc~nearest_point2 - - +program~nearest_point_1d->proc~nearest_point2 + + @@ -346,7 +346,7 @@

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

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

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

    Arguments

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

    Arguments

    contiguous :: - f_knot3(:) + f_knot(:) - + integer, intent(in) @@ -432,14 +402,14 @@

    Arguments

    :: - f_degree(3) + f_degree - + integer, intent(in) @@ -447,7 +417,7 @@

    Arguments

    :: - f_nc(3) + f_nc @@ -462,14 +432,14 @@

    Arguments

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

    Arguments

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

    Arguments

    -

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

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

    @@ -523,22 +493,7 @@

    Arguments

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

    Arguments

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

    Arguments

    contiguous :: - f_knot3(:) + f_knot(:) - + integer, intent(in) @@ -591,14 +531,14 @@

    Arguments

    :: - f_degree(3) + f_degree - + integer, intent(in) @@ -606,14 +546,14 @@

    Arguments

    :: - f_nc(3) + f_nc - + integer, intent(in) @@ -621,7 +561,7 @@

    Arguments

    :: - f_ng(3) + f_ng @@ -636,14 +576,14 @@

    Arguments

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

    Arguments

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

    Arguments

    -

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

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

    @@ -697,52 +637,22 @@

    Arguments

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

    Arguments

    contiguous :: - f_knot3(:) + f_knot(:) - + integer, intent(in) @@ -765,14 +675,14 @@

    Arguments

    :: - f_degree(3) + f_degree - + integer, intent(in) @@ -780,14 +690,14 @@

    Arguments

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

    Arguments

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

    Arguments

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

    Arguments

    -

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

    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)

    @@ -871,22 +781,7 @@

    Arguments

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

    Arguments

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

    Arguments

    contiguous :: - f_knot3(:) + f_knot(:) - + integer, intent(in) @@ -939,14 +819,14 @@

    Arguments

    :: - f_degree(3) + f_degree - + integer, intent(in) @@ -954,14 +834,14 @@

    Arguments

    :: - f_nc(3) + f_nc - + integer, intent(in) @@ -969,14 +849,14 @@

    Arguments

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

    Arguments

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

    Arguments

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

    Arguments

    Documentation generated by FORD - on 2024-07-01T09:54:44.473032

    + on 2024-07-01T10:00:02.512255


    diff --git a/interface/compute_d2tgc~2.html b/interface/compute_d2tgc~2.html index dfde958ef..a4be0e026 100644 --- a/interface/compute_d2tgc~2.html +++ b/interface/compute_d2tgc~2.html @@ -82,15 +82,15 @@

    compute_d2Tgc
  • - Source File + Source File
  • @@ -177,9 +177,9 @@

    Called by

    proc~derivative2_scalar~2 - + -nurbs_surface%derivative2_scalar +nurbs_volume%derivative2_scalar @@ -192,9 +192,9 @@

    Called by

    proc~derivative2_vector~2 - + -nurbs_surface%derivative2_vector +nurbs_volume%derivative2_vector @@ -207,9 +207,9 @@

    Called by

    none~derivative2~2 - + -nurbs_surface%derivative2 +nurbs_volume%derivative2 @@ -228,9 +228,9 @@

    Called by

    proc~nearest_point2~2 - + -nurbs_surface%nearest_point2 +nurbs_volume%nearest_point2 @@ -240,18 +240,18 @@

    Called by

    - + -program~nearest_point_2d - +program~nearest_point_3d + -nearest_point_2d +nearest_point_3d - + -program~nearest_point_2d->proc~nearest_point2~2 +program~nearest_point_3d->proc~nearest_point2~2 @@ -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_3d_scalar(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_d2Tgc, f_dTgc, f_Tgc)

    @@ -379,7 +379,7 @@

    Arguments

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

    Arguments

    - + real(kind=rk), intent(in), @@ -407,6 +407,21 @@

    Arguments

    + + + + real(kind=rk), + +intent(in), + + contiguous + + :: + f_knot3(:) + + + + @@ -417,14 +432,14 @@

    Arguments

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

    Arguments

    :: - nc(2) + f_nc(3) @@ -490,7 +505,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_3d_vector(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_ng, f_d2Tgc, f_dTgc, f_Tgc)

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

    Arguments

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

    Arguments

    - + real(kind=rk), intent(in), @@ -551,6 +566,21 @@

    Arguments

    + + + + real(kind=rk), + +intent(in), + + contiguous + + :: + f_knot3(:) + + + + @@ -561,14 +591,14 @@

    Arguments

    :: - f_degree(2) + f_degree(3) - + integer, intent(in) @@ -576,7 +606,7 @@

    Arguments

    :: - nc(2) + f_nc(3) @@ -591,7 +621,7 @@

    Arguments

    :: - f_ng(2) + f_ng(3) @@ -649,7 +679,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_3d_scalar(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_Wc, f_d2Tgc, f_dTgc, f_Tgc)

    @@ -682,7 +712,7 @@

    Arguments

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

    Arguments

    - + real(kind=rk), intent(in), @@ -710,6 +740,21 @@

    Arguments

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

    Arguments

    :: - f_degree(2) + f_degree(3) - + integer, intent(in) @@ -735,7 +780,7 @@

    Arguments

    :: - f_nc(2) + f_nc(3) @@ -808,7 +853,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_3d_vector(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_ng, f_Wc, f_d2Tgc, f_dTgc, f_Tgc)

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

    Arguments

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

    Arguments

    - + real(kind=rk), intent(in), @@ -869,6 +914,21 @@

    Arguments

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

    Arguments

    :: - f_degree(2) + f_degree(3) - + integer, intent(in) @@ -894,7 +954,7 @@

    Arguments

    :: - f_nc(2) + f_nc(3) @@ -909,7 +969,7 @@

    Arguments

    :: - f_ng(2) + f_ng(3) @@ -999,7 +1059,7 @@

    Arguments

    Documentation generated by FORD - on 2024-07-01T09:54:44.473032

    + on 2024-07-01T10:00:02.512255


    diff --git a/interface/compute_d2tgc~3.html b/interface/compute_d2tgc~3.html index 1ae4ea4d4..8e597ca29 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_curve%derivative2_scalar + + +nurbs_surface%derivative2_scalar proc~derivative2_scalar~3->interface~compute_d2tgc~3 - - + + proc~derivative2_vector~3 - - -nurbs_curve%derivative2_vector + + +nurbs_surface%derivative2_vector proc~derivative2_vector~3->interface~compute_d2tgc~3 - - + + none~derivative2~3 - - -nurbs_curve%derivative2 + + +nurbs_surface%derivative2 none~derivative2~3->proc~derivative2_scalar~3 - - + + none~derivative2~3->proc~derivative2_vector~3 - - + + proc~nearest_point2~3 - - -nurbs_curve%nearest_point2 + + +nurbs_surface%nearest_point2 proc~nearest_point2~3->none~derivative2~3 - - + + - + -program~nearest_point_1d - +program~nearest_point_2d + -nearest_point_1d +nearest_point_2d - + -program~nearest_point_1d->proc~nearest_point2~3 - - +program~nearest_point_2d->proc~nearest_point2~3 + + @@ -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,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), @@ -387,14 +402,14 @@

    Arguments

    contiguous :: - f_knot(:) + 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,29 @@

    Arguments

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

    Arguments

    contiguous :: - f_knot(:) + 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,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), @@ -660,14 +705,14 @@

    Arguments

    contiguous :: - f_knot(:) + 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,29 @@

    Arguments

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

    Arguments

    contiguous :: - f_knot(:) + 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-07-01T09:54:44.473032

    + on 2024-07-01T10:00:02.512255


    diff --git a/interface/compute_dtgc.html b/interface/compute_dtgc.html index 898e8a26f..fbc88bec4 100644 --- a/interface/compute_dtgc.html +++ b/interface/compute_dtgc.html @@ -82,15 +82,15 @@

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

    Called by

    - - + + interface~~compute_dtgc~~CalledByGraph - + interface~compute_dtgc - -compute_dTgc + +compute_dTgc proc~derivative_scalar - - -nurbs_volume%derivative_scalar + + +nurbs_curve%derivative_scalar proc~derivative_scalar->interface~compute_dtgc - - + + proc~derivative_vector - - -nurbs_volume%derivative_vector + + +nurbs_curve%derivative_vector proc~derivative_vector->interface~compute_dtgc - - + + none~derivative - - -nurbs_volume%derivative + + +nurbs_curve%derivative none~derivative->proc~derivative_scalar - - + + none~derivative->proc~derivative_vector - - + + proc~ansatz - - -nurbs_volume%ansatz + + +nurbs_curve%ansatz proc~ansatz->none~derivative - - + + - + -proc~cmp_volume - - -nurbs_volume%cmp_volume +proc~cmp_length + + +nurbs_curve%cmp_length - + -proc~cmp_volume->proc~ansatz - - +proc~cmp_length->proc~ansatz + + - + -program~compute_volume - - -compute_volume +program~compute_length + + +compute_length - + -program~compute_volume->proc~cmp_volume - - +program~compute_length->proc~cmp_length + + @@ -361,7 +361,7 @@

    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, f_elem) +

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

    @@ -379,52 +379,22 @@

    Arguments

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

    Arguments

    contiguous :: - f_knot3(:) + f_knot(:) - + integer, intent(in) @@ -447,14 +417,14 @@

    Arguments

    :: - f_degree(3) + f_degree - + integer, intent(in) @@ -462,14 +432,14 @@

    Arguments

    :: - f_nc(3) + f_nc - + real(kind=rk), intent(out), @@ -477,14 +447,14 @@

    Arguments

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

    Arguments

    -

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

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

    @@ -538,22 +508,7 @@

    Arguments

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

    Arguments

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

    Arguments

    contiguous :: - f_knot3(:) + f_knot(:) - + integer, intent(in) @@ -606,14 +546,14 @@

    Arguments

    :: - f_degree(3) + f_degree - + integer, intent(in) @@ -621,14 +561,14 @@

    Arguments

    :: - f_nc(3) + f_nc - + integer, intent(in) @@ -636,14 +576,14 @@

    Arguments

    :: - f_ng(3) + f_ng - + real(kind=rk), intent(out), @@ -651,14 +591,14 @@

    Arguments

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

    Arguments

    -

    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, f_elem) +

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

    @@ -697,52 +637,22 @@

    Arguments

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

    Arguments

    contiguous :: - f_knot3(:) + f_knot(:) - + integer, intent(in) @@ -765,14 +675,14 @@

    Arguments

    :: - f_degree(3) + f_degree - + integer, intent(in) @@ -780,14 +690,14 @@

    Arguments

    :: - f_nc(3) + f_nc - + real(kind=rk), intent(in), @@ -802,7 +712,7 @@

    Arguments

    - + real(kind=rk), intent(out), @@ -810,14 +720,14 @@

    Arguments

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

    Arguments

    -

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

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

    @@ -871,22 +781,7 @@

    Arguments

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

    Arguments

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

    Arguments

    contiguous :: - f_knot3(:) + f_knot(:) - + integer, intent(in) @@ -939,14 +819,14 @@

    Arguments

    :: - f_degree(3) + f_degree - + integer, intent(in) @@ -954,14 +834,14 @@

    Arguments

    :: - f_nc(3) + f_nc - + integer, intent(in) @@ -969,14 +849,14 @@

    Arguments

    :: - f_ng(3) + f_ng - + real(kind=rk), intent(in), @@ -991,7 +871,7 @@

    Arguments

    - + real(kind=rk), intent(out), @@ -999,14 +879,14 @@

    Arguments

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

    Arguments

    Documentation generated by FORD - on 2024-07-01T09:54:44.473032

    + on 2024-07-01T10:00:02.512255


    diff --git a/interface/compute_dtgc~2.html b/interface/compute_dtgc~2.html index ef7bd9952..8d0cfca72 100644 --- a/interface/compute_dtgc~2.html +++ b/interface/compute_dtgc~2.html @@ -82,15 +82,15 @@

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

    Called by

    - - + + interface~~compute_dtgc~2~~CalledByGraph - + interface~compute_dtgc~2 - -compute_dTgc + +compute_dTgc proc~derivative_scalar~2 - - -nurbs_surface%derivative_scalar + + +nurbs_volume%derivative_scalar proc~derivative_scalar~2->interface~compute_dtgc~2 - - + + proc~derivative_vector~2 - - -nurbs_surface%derivative_vector + + +nurbs_volume%derivative_vector proc~derivative_vector~2->interface~compute_dtgc~2 - - + + none~derivative~2 - - -nurbs_surface%derivative + + +nurbs_volume%derivative none~derivative~2->proc~derivative_scalar~2 - - + + none~derivative~2->proc~derivative_vector~2 - - + + proc~ansatz~2 - - -nurbs_surface%ansatz + + +nurbs_volume%ansatz proc~ansatz~2->none~derivative~2 - - + + - + -proc~cmp_area - - -nurbs_surface%cmp_area +proc~cmp_volume + + +nurbs_volume%cmp_volume - + -proc~cmp_area->proc~ansatz~2 - - +proc~cmp_volume->proc~ansatz~2 + + - + -program~compute_area - - -compute_area +program~compute_volume + + +compute_volume - + -program~compute_area->proc~cmp_area - - +program~compute_volume->proc~cmp_volume + + @@ -361,7 +361,7 @@

    Subroutines

    -

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

    private pure subroutine compute_dTgc_bspline_3d_scalar(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_dTgc, f_Tgc, f_elem)

    @@ -394,7 +394,7 @@

    Arguments

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

    Arguments

    - + real(kind=rk), intent(in), @@ -422,6 +422,21 @@

    Arguments

    + + + + real(kind=rk), + +intent(in), + + contiguous + + :: + f_knot3(:) + + + + @@ -432,14 +447,14 @@

    Arguments

    :: - f_degree(2) + f_degree(3) - + integer, intent(in) @@ -447,7 +462,7 @@

    Arguments

    :: - nc(2) + f_nc(3) @@ -484,15 +499,15 @@

    Arguments

    - + integer, -intent(in) - +intent(in), + optional :: - elem(:) + f_elem(:) @@ -505,7 +520,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_3d_vector(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_ng, f_dTgc, f_Tgc)

    @@ -538,7 +553,7 @@

    Arguments

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

    Arguments

    - + real(kind=rk), intent(in), @@ -566,6 +581,21 @@

    Arguments

    + + + + real(kind=rk), + +intent(in), + + contiguous + + :: + f_knot3(:) + + + + @@ -576,14 +606,14 @@

    Arguments

    :: - f_degree(2) + f_degree(3) - + integer, intent(in) @@ -591,7 +621,7 @@

    Arguments

    :: - nc(2) + f_nc(3) @@ -606,7 +636,7 @@

    Arguments

    :: - f_ng(2) + f_ng(3) @@ -649,7 +679,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, elem) +

    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, f_elem)

    @@ -682,7 +712,7 @@

    Arguments

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

    Arguments

    - + real(kind=rk), intent(in), @@ -710,6 +740,21 @@

    Arguments

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

    Arguments

    :: - f_degree(2) + f_degree(3) - + integer, intent(in) @@ -735,7 +780,7 @@

    Arguments

    :: - f_nc(2) + f_nc(3) @@ -787,15 +832,15 @@

    Arguments

    - + integer, -intent(in) - +intent(in), + optional :: - elem(:) + f_elem(:) @@ -808,7 +853,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_3d_vector(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_ng, f_Wc, f_dTgc, f_Tgc)

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

    Arguments

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

    Arguments

    - + real(kind=rk), intent(in), @@ -869,6 +914,21 @@

    Arguments

    + + + + real(kind=rk), + +intent(in), + + contiguous + + :: + f_knot3(:) + + + + @@ -879,7 +939,7 @@

    Arguments

    :: - f_degree(2) + f_degree(3) @@ -894,7 +954,7 @@

    Arguments

    :: - f_nc(2) + f_nc(3) @@ -909,7 +969,7 @@

    Arguments

    :: - f_ng(2) + f_ng(3) @@ -984,7 +1044,7 @@

    Arguments

    Documentation generated by FORD - on 2024-07-01T09:54:44.473032

    + on 2024-07-01T10:00:02.512255


    diff --git a/interface/compute_dtgc~3.html b/interface/compute_dtgc~3.html index 11d6ccf41..ab654b075 100644 --- a/interface/compute_dtgc~3.html +++ b/interface/compute_dtgc~3.html @@ -82,15 +82,15 @@

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

    Called by

    - - + + interface~~compute_dtgc~3~~CalledByGraph - + interface~compute_dtgc~3 - -compute_dTgc + +compute_dTgc proc~derivative_scalar~3 - - -nurbs_curve%derivative_scalar + + +nurbs_surface%derivative_scalar proc~derivative_scalar~3->interface~compute_dtgc~3 - - + + proc~derivative_vector~3 - - -nurbs_curve%derivative_vector + + +nurbs_surface%derivative_vector proc~derivative_vector~3->interface~compute_dtgc~3 - - + + none~derivative~3 - - -nurbs_curve%derivative + + +nurbs_surface%derivative none~derivative~3->proc~derivative_scalar~3 - - + + none~derivative~3->proc~derivative_vector~3 - - + + proc~ansatz~3 - - -nurbs_curve%ansatz + + +nurbs_surface%ansatz proc~ansatz~3->none~derivative~3 - - + + - + -proc~cmp_length - - -nurbs_curve%cmp_length +proc~cmp_area + + +nurbs_surface%cmp_area - + -proc~cmp_length->proc~ansatz~3 - - +proc~cmp_area->proc~ansatz~3 + + - + -program~compute_length - - -compute_length +program~compute_area + + +compute_area - + -program~compute_length->proc~cmp_length - - +program~compute_area->proc~cmp_area + + @@ -361,7 +361,7 @@

    Subroutines

    -

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

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

    @@ -379,22 +379,22 @@

    Arguments

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

    Arguments

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

    Arguments

    :: - f_degree + f_degree(2) - + integer, intent(in) @@ -432,14 +447,14 @@

    Arguments

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

    Arguments

    allocatable :: - f_dTgc(:) + f_dTgc(:,:) - + real(kind=rk), intent(out), @@ -469,15 +484,15 @@

    Arguments

    - + integer, -intent(in), - optional +intent(in) + :: - f_elem(:) + elem(:) @@ -490,7 +505,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)

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

    Arguments

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

    Arguments

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

    Arguments

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

    Arguments

    :: - f_degree + f_degree(2) - + integer, intent(in) @@ -561,14 +591,14 @@

    Arguments

    :: - f_nc + nc(2) - + integer, intent(in) @@ -576,14 +606,14 @@

    Arguments

    :: - f_ng + f_ng(2) - + 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_dTgc_nurbs_1d_scalar(f_Xt, f_knot, f_degree, f_nc, f_Wc, f_dTgc, f_Tgc, f_elem) +

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

    @@ -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), @@ -712,7 +757,7 @@

    Arguments

    - + real(kind=rk), intent(out), @@ -720,14 +765,14 @@

    Arguments

    allocatable :: - f_dTgc(:) + f_dTgc(:,:) - + real(kind=rk), intent(out), @@ -742,15 +787,15 @@

    Arguments

    - + integer, -intent(in), - optional +intent(in) + :: - f_elem(:) + elem(:) @@ -763,7 +808,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)

    @@ -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,7 +879,7 @@

    Arguments

    :: - f_degree + f_degree(2) @@ -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), @@ -871,7 +931,7 @@

    Arguments

    - + real(kind=rk), intent(out), @@ -879,14 +939,14 @@

    Arguments

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

    Arguments

    Documentation generated by FORD - on 2024-07-01T09:54:44.473032

    + on 2024-07-01T10:00:02.512255


    diff --git a/interface/compute_multiplicity.html b/interface/compute_multiplicity.html index 2dc4139bc..336d8ae81 100644 --- a/interface/compute_multiplicity.html +++ b/interface/compute_multiplicity.html @@ -304,566 +304,566 @@

    Called by

    interface~compute_multiplicity - -compute_multiplicity + +compute_multiplicity proc~cmp_nc - - -nurbs_volume%cmp_nc + + +nurbs_curve%cmp_nc proc~cmp_nc->interface~compute_multiplicity - - + + proc~cmp_nc~2 - - -nurbs_surface%cmp_nc + + +nurbs_volume%cmp_nc proc~cmp_nc~2->interface~compute_multiplicity - - + + proc~cmp_nc~3 - - -nurbs_curve%cmp_nc + + +nurbs_surface%cmp_nc proc~cmp_nc~3->interface~compute_multiplicity - - + + proc~elevate_degree_a_5_9 - -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 + + +nurbs_curve%get_continuity proc~get_continuity->interface~compute_multiplicity - - + + proc~get_continuity~2 - - -nurbs_surface%get_continuity + + +nurbs_volume%get_continuity proc~get_continuity~2->interface~compute_multiplicity - - + + proc~get_continuity~3 - - -nurbs_curve%get_continuity + + +nurbs_surface%get_continuity proc~get_continuity~3->interface~compute_multiplicity - - + + proc~get_multiplicity - - -nurbs_volume%get_multiplicity + + +nurbs_curve%get_multiplicity proc~get_multiplicity->interface~compute_multiplicity - - + + proc~get_multiplicity~2 - - -nurbs_surface%get_multiplicity + + +nurbs_volume%get_multiplicity proc~get_multiplicity~2->interface~compute_multiplicity - - + + proc~get_multiplicity~3 - - -nurbs_curve%get_multiplicity + + +nurbs_surface%get_multiplicity proc~get_multiplicity~3->interface~compute_multiplicity - - + + proc~get_nc_dir - -nurbs_volume%get_nc_dir + +nurbs_volume%get_nc_dir proc~get_nc_dir->interface~compute_multiplicity - - + + proc~get_nc_dir~2 - -nurbs_surface%get_nc_dir + +nurbs_surface%get_nc_dir proc~get_nc_dir~2->interface~compute_multiplicity - - + + proc~insert_knots - - -nurbs_volume%insert_knots + + +nurbs_curve%insert_knots proc~insert_knots->interface~compute_multiplicity - - + + - + none~set - - -nurbs_volume%set + + +nurbs_curve%set - + proc~insert_knots->none~set - - + + proc~insert_knots~2 - - -nurbs_surface%insert_knots + + +nurbs_volume%insert_knots proc~insert_knots~2->interface~compute_multiplicity - - + + - + none~set~2 - - -nurbs_surface%set + + +nurbs_volume%set - + proc~insert_knots~2->none~set~2 - - + + proc~insert_knots~3 - - -nurbs_curve%insert_knots + + +nurbs_surface%insert_knots proc~insert_knots~3->interface~compute_multiplicity - - + + - + none~set~3 - - -nurbs_curve%set + + +nurbs_surface%set - + proc~insert_knots~3->none~set~3 - - + + proc~remove_knots - - -nurbs_volume%remove_knots + + +nurbs_curve%remove_knots proc~remove_knots->interface~compute_multiplicity - - + + - + proc~remove_knots->none~set - - + + proc~remove_knots~2 - - -nurbs_surface%remove_knots + + +nurbs_volume%remove_knots proc~remove_knots~2->interface~compute_multiplicity - - + + - + proc~remove_knots~2->none~set~2 - - + + proc~remove_knots~3 - - -nurbs_curve%remove_knots + + +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 + + +nurbs_curve%cmp_degree proc~cmp_degree->proc~get_multiplicity - - + + proc~cmp_degree~2 - - -nurbs_surface%cmp_degree + + +nurbs_volume%cmp_degree proc~cmp_degree~2->proc~get_multiplicity~2 - - + + proc~cmp_degree~3 - - -nurbs_curve%cmp_degree + + +nurbs_surface%cmp_degree proc~cmp_degree~3->proc~get_multiplicity~3 - - + + proc~cmp_elem - - -nurbs_volume%cmp_elem + + +nurbs_curve%cmp_elem proc~cmp_elem->proc~get_multiplicity - - + + proc~cmp_elem~2 - - -nurbs_surface%cmp_elem + + +nurbs_volume%cmp_elem proc~cmp_elem~2->proc~get_multiplicity~2 - - + + proc~cmp_elem~3 - - -nurbs_curve%cmp_elem + + +nurbs_surface%cmp_elem proc~cmp_elem~3->proc~get_multiplicity~3 - - + + proc~elevate_degree - - -nurbs_volume%elevate_degree + + +nurbs_curve%elevate_degree proc~elevate_degree->proc~elevate_degree_a_5_9 - - + + - + proc~elevate_degree->none~set - - + + proc~elevate_degree~2 - - -nurbs_surface%elevate_degree + + +nurbs_volume%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 + + +nurbs_surface%elevate_degree proc~elevate_degree~3->proc~elevate_degree_a_5_9 - - + + - + proc~elevate_degree~3->none~set~3 - - + + - + -proc~set1 - +proc~set1~2 + nurbs_volume%set1 - + -proc~set1->proc~cmp_nc - - +proc~set1~2->proc~cmp_nc~2 + + - - -proc~set1->proc~cmp_degree - - + + +proc~set1~2->proc~cmp_degree~2 + + - + -proc~set1~2 - - -nurbs_surface%set1 +proc~set1~3 + + +nurbs_surface%set1 - + -proc~set1~2->proc~cmp_nc~2 - - +proc~set1~3->proc~cmp_nc~3 + + - - -proc~set1~2->proc~cmp_degree~2 - - + + +proc~set1~3->proc~cmp_degree~3 + + - + -proc~set2 - +proc~set2~2 + nurbs_volume%set2 - + -proc~set2->proc~cmp_nc - - +proc~set2~2->proc~cmp_nc~2 + + - + -proc~set2~2 - - -nurbs_surface%set2 +proc~set2~3 + + +nurbs_surface%set2 - + -proc~set2~2->proc~cmp_nc~2 - - +proc~set2~3->proc~cmp_nc~3 + + @@ -874,27 +874,27 @@

    Called by

    - - -program~example1_curve->proc~insert_knots~3 - - + + +program~example1_curve->proc~insert_knots + + - - -program~example1_curve->proc~remove_knots~3 - - + + +program~example1_curve->proc~remove_knots + + - - -program~example1_curve->proc~elevate_degree~3 - - + + +program~example1_curve->proc~elevate_degree + + - + -program~example1_curve->none~set~3 +program~example1_curve->none~set @@ -907,27 +907,27 @@

    Called by

    - - -program~example3_surface->proc~insert_knots~2 - - + + +program~example3_surface->proc~insert_knots~3 + + - - -program~example3_surface->proc~remove_knots~2 - - + + +program~example3_surface->proc~remove_knots~3 + + - - -program~example3_surface->proc~elevate_degree~2 - - + + +program~example3_surface->proc~elevate_degree~3 + + - + -program~example3_surface->none~set~2 +program~example3_surface->none~set~3 @@ -940,152 +940,152 @@

    Called by

    - - -program~example3_volume->proc~insert_knots - - + + +program~example3_volume->proc~insert_knots~2 + + - - -program~example3_volume->proc~remove_knots - - + + +program~example3_volume->proc~remove_knots~2 + + - - -program~example3_volume->proc~cmp_elem - - + + +program~example3_volume->proc~cmp_elem~2 + + - - -program~example3_volume->proc~elevate_degree - - + + +program~example3_volume->proc~elevate_degree~2 + + - + -program~example3_volume->none~set +program~example3_volume->none~set~2 - + -none~set->proc~set1 +none~set~2->proc~set1~2 - + -none~set->proc~set2 +none~set~2->proc~set2~2 - - -proc~set3 - + + +proc~set3~2 + nurbs_volume%set3 - - -none~set->proc~set3 - - + + +none~set~2->proc~set3~2 + + - + -none~set~2->proc~set1~2 - - +none~set~3->proc~set1~3 + + - + -none~set~2->proc~set2~2 - - +none~set~3->proc~set2~3 + + - - -proc~set3~2 - - -nurbs_surface%set3 + + +proc~set3~3 + + +nurbs_surface%set3 - - -none~set~2->proc~set3~2 - - + + +none~set~3->proc~set3~3 + + proc~ansatz - - -nurbs_volume%ansatz + + +nurbs_curve%ansatz proc~ansatz->proc~cmp_elem - - + + - + proc~ansatz->none~set - - + + proc~ansatz~2 - - -nurbs_surface%ansatz + + +nurbs_volume%ansatz - + proc~ansatz~2->proc~cmp_elem~2 - - + + - + proc~ansatz~2->none~set~2 - - + + proc~ansatz~3 - - -nurbs_curve%ansatz + + +nurbs_surface%ansatz proc~ansatz~3->proc~cmp_elem~3 - - + + - + proc~ansatz~3->none~set~3 - - + + @@ -1096,17 +1096,17 @@

    Called by

    - - -proc~cmp_area->proc~cmp_elem~2 - - + + +proc~cmp_area->proc~cmp_elem~3 + + - - -proc~cmp_area->proc~ansatz~2 - - + + +proc~cmp_area->proc~ansatz~3 + + @@ -1117,17 +1117,17 @@

    Called by

    - - -proc~cmp_length->proc~cmp_elem~3 - - + + +proc~cmp_length->proc~cmp_elem + + - - -proc~cmp_length->proc~ansatz~3 - - + + +proc~cmp_length->proc~ansatz + + @@ -1138,180 +1138,180 @@

    Called by

    - - -proc~cmp_volume->proc~cmp_elem - - + + +proc~cmp_volume->proc~cmp_elem~2 + + - - -proc~cmp_volume->proc~ansatz - - + + +proc~cmp_volume->proc~ansatz~2 + + - + +proc~set1 + + +nurbs_curve%set1 + + + + + +proc~set1->proc~cmp_degree + + + + + proc~set1a - + nurbs_curve%set1a - - -proc~set1a->proc~cmp_degree~3 - - + + +proc~set1a->proc~cmp_degree + + - - -proc~set1~3 - + + +proc~set3 + -nurbs_curve%set1 +nurbs_curve%set3 - - -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~set1a - - +none~set->proc~set1 + + - + -none~set~3->proc~set1~3 - - +none~set->proc~set1a + + - - -none~set~3->proc~set3~3 - - + + +none~set->proc~set3 + + - + -proc~modify_wc - +proc~modify_wc~2 + nurbs_volume%modify_Wc - + -proc~modify_wc->none~set +proc~modify_wc~2->none~set~2 - + -proc~modify_wc~2 - +proc~modify_wc~3 + nurbs_surface%modify_Wc - + -proc~modify_wc~2->none~set~2 - - +proc~modify_wc~3->none~set~3 + + - + -proc~modify_xc - +proc~modify_xc~2 + nurbs_volume%modify_Xc - + -proc~modify_xc->none~set +proc~modify_xc~2->none~set~2 - + -proc~modify_xc~2 - +proc~modify_xc~3 + nurbs_surface%modify_Xc - + -proc~modify_xc~2->none~set~2 - - +proc~modify_xc~3->none~set~3 + + - + -proc~set_c - +proc~set_c~2 + nurbs_volume%set_C - + -proc~set_c->none~set +proc~set_c~2->none~set~2 - + -proc~set_c~2 - +proc~set_c~3 + nurbs_surface%set_C - + -proc~set_c~2->none~set~2 +proc~set_c~3->none~set~3 @@ -1324,9 +1324,9 @@

    Called by

    - + -proc~set_half_ring->none~set +proc~set_half_ring->none~set~2 @@ -1339,9 +1339,9 @@

    Called by

    - + -proc~set_half_ring~2->none~set~2 +proc~set_half_ring~2->none~set~3 @@ -1354,9 +1354,9 @@

    Called by

    - + -proc~set_hexahedron->none~set +proc~set_hexahedron->none~set~2 @@ -1369,9 +1369,9 @@

    Called by

    - + -proc~set_ring->none~set +proc~set_ring->none~set~2 @@ -1384,11 +1384,11 @@

    Called by

    - + -proc~set_ring~2->none~set~2 - - +proc~set_ring~2->none~set~3 + + @@ -1399,11 +1399,11 @@

    Called by

    - + -proc~set_tetragon->none~set~2 - - +proc~set_tetragon->none~set~3 + + @@ -1414,9 +1414,9 @@

    Called by

    - + -program~compute_area->none~set~2 +program~compute_area->none~set~3 @@ -1430,22 +1430,22 @@

    Called by

    program~compute_length - -compute_length + +compute_length program~compute_length->proc~cmp_length - - + + - + -program~compute_length->none~set~3 - - +program~compute_length->none~set + + @@ -1456,9 +1456,9 @@

    Called by

    - + -program~compute_volume->none~set +program~compute_volume->none~set~2 @@ -1477,9 +1477,9 @@

    Called by

    - + -program~example_nurbs_surface->none~set~2 +program~example_nurbs_surface->none~set~3 @@ -1492,9 +1492,9 @@

    Called by

    - + -program~example_nurbs_volume->none~set +program~example_nurbs_volume->none~set~2 @@ -1507,9 +1507,9 @@

    Called by

    - + -program~example_put_to_nurbs->none~set +program~example_put_to_nurbs->none~set~2 @@ -1522,11 +1522,11 @@

    Called by

    - + -program~nearest_point_2d->none~set~2 - - +program~nearest_point_2d->none~set~3 + + @@ -1537,101 +1537,101 @@

    Called by

    - + -program~nearest_point_3d->none~set +program~nearest_point_3d->none~set~2 - + -proc~modify_wc~3 - +proc~modify_wc + nurbs_curve%modify_Wc - + -proc~modify_wc~3->none~set~3 +proc~modify_wc->none~set - + -proc~modify_xc~3 - +proc~modify_xc + nurbs_curve%modify_Xc - + -proc~modify_xc~3->none~set~3 +proc~modify_xc->none~set - + -proc~set_circle - - -nurbs_curve%set_circle +proc~set_c + + +nurbs_curve%set_C - + -proc~set_circle->none~set~3 - - +proc~set_c->none~set + + - + -proc~set_c~3 - - -nurbs_curve%set_C +proc~set_circle + + +nurbs_curve%set_circle - + -proc~set_c~3->none~set~3 - +proc~set_circle->none~set + proc~set_half_circle - -nurbs_curve%set_half_circle + +nurbs_curve%set_half_circle - + -proc~set_half_circle->none~set~3 - - +proc~set_half_circle->none~set + + program~example_nurbs_curve - -example_nurbs_curve + +example_nurbs_curve - + -program~example_nurbs_curve->none~set~3 - - +program~example_nurbs_curve->none~set + + @@ -1684,9 +1684,9 @@

    Called by

    - + -program~example_ppm3->proc~modify_xc~2 +program~example_ppm3->proc~modify_xc~3 @@ -1700,16 +1700,16 @@

    Called by

    program~nearest_point_1d - -nearest_point_1d + +nearest_point_1d - + -program~nearest_point_1d->none~set~3 - - +program~nearest_point_1d->none~set + + @@ -1735,9 +1735,9 @@

    Called by

    - + -program~shape_c_2d->proc~set_c~2 +program~shape_c_2d->proc~set_c~3 @@ -1750,9 +1750,9 @@

    Called by

    - + -program~shape_c_3d->proc~set_c +program~shape_c_3d->proc~set_c~2 @@ -1850,46 +1850,46 @@

    Called by

    program~shape_c_1d - -shape_C_1d + +shape_C_1d - - -program~shape_c_1d->proc~set_c~3 - - + + +program~shape_c_1d->proc~set_c + + 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 - - + + @@ -2006,7 +2006,7 @@

    Arguments

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

    Arguments

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

    Documentation generated by FORD - on 2024-07-01T09:54:44.473032

    + on 2024-07-01T10:00:02.512255


    diff --git a/interface/compute_tgc.html b/interface/compute_tgc.html index 77b246c41..643782a78 100644 --- a/interface/compute_tgc.html +++ b/interface/compute_tgc.html @@ -82,15 +82,15 @@

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

    Called by

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

    Functions

    -

    private pure function compute_Tgc_bspline_3d_scalar(f_Xt, f_knot1, f_knot2, f_knot3, 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,49 +311,19 @@

    Arguments

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

    Arguments

    contiguous :: - f_knot3(:) + f_knot(:) @@ -376,7 +346,7 @@

    Arguments

    :: - f_degree(3) + f_degree @@ -391,7 +361,7 @@

    Arguments

    :: - f_nc(3) + f_nc @@ -409,7 +379,7 @@

    -

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

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

    @@ -435,44 +405,14 @@

    Arguments

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

    Arguments

    contiguous :: - f_knot3(:) + f_knot(:) @@ -495,7 +435,7 @@

    Arguments

    :: - f_degree(3) + f_degree @@ -510,7 +450,7 @@

    Arguments

    :: - f_nc(3) + f_nc @@ -525,7 +465,7 @@

    Arguments

    :: - f_ng(3) + f_ng @@ -543,7 +483,7 @@

    -

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

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

    @@ -564,49 +504,19 @@

    Arguments

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

    Arguments

    contiguous :: - f_knot3(:) + f_knot(:) @@ -629,7 +539,7 @@

    Arguments

    :: - f_degree(3) + f_degree @@ -644,7 +554,7 @@

    Arguments

    :: - f_nc(3) + f_nc @@ -677,7 +587,7 @@

    -

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

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

    @@ -703,44 +613,14 @@

    Arguments

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

    Arguments

    contiguous :: - f_knot3(:) + f_knot(:) @@ -763,7 +643,7 @@

    Arguments

    :: - f_degree(3) + f_degree @@ -778,7 +658,7 @@

    Arguments

    :: - f_nc(3) + f_nc @@ -793,7 +673,7 @@

    Arguments

    :: - f_ng(3) + f_ng @@ -844,7 +724,7 @@

    Documentation generated by FORD - on 2024-07-01T09:54:44.473032

    + on 2024-07-01T10:00:02.512255


    diff --git a/interface/compute_tgc~2.html b/interface/compute_tgc~2.html index d2bbbf1cd..579a06957 100644 --- a/interface/compute_tgc~2.html +++ b/interface/compute_tgc~2.html @@ -82,15 +82,15 @@

    compute_Tgc
  • - Source File + Source File
  • @@ -177,9 +177,9 @@

    Called by

    proc~basis_scalar~2 - + -nurbs_surface%basis_scalar +nurbs_volume%basis_scalar @@ -192,9 +192,9 @@

    Called by

    proc~basis_vector~2 - + -nurbs_surface%basis_vector +nurbs_volume%basis_vector @@ -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_3d_scalar(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc) result(f_Tgc)

    @@ -323,7 +323,7 @@

    Arguments

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

    Arguments

    - + real(kind=rk), intent(in), @@ -351,6 +351,21 @@

    Arguments

    + + + + real(kind=rk), + +intent(in), + + contiguous + + :: + f_knot3(:) + + + + @@ -361,14 +376,14 @@

    Arguments

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

    Arguments

    :: - f_nc(2) + f_nc(3) @@ -394,7 +409,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_3d_vector(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_ng) result(f_Tgc)

    @@ -427,7 +442,7 @@

    Arguments

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

    Arguments

    - + real(kind=rk), intent(in), @@ -455,6 +470,21 @@

    Arguments

    + + + + real(kind=rk), + +intent(in), + + contiguous + + :: + f_knot3(:) + + + + @@ -465,14 +495,14 @@

    Arguments

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

    Arguments

    :: - f_nc(2) + f_nc(3) @@ -495,7 +525,7 @@

    Arguments

    :: - f_ng(2) + f_ng(3) @@ -513,7 +543,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_3d_scalar(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_Wc) result(f_Tgc)

    @@ -546,7 +576,7 @@

    Arguments

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

    Arguments

    - + real(kind=rk), intent(in), @@ -574,6 +604,21 @@

    Arguments

    + + + + real(kind=rk), + +intent(in), + + contiguous + + :: + f_knot3(:) + + + + @@ -584,14 +629,14 @@

    Arguments

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

    Arguments

    :: - f_nc(2) + f_nc(3) @@ -632,7 +677,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_3d_vector(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_ng, f_Wc) result(f_Tgc)

    @@ -665,7 +710,7 @@

    Arguments

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

    Arguments

    - + real(kind=rk), intent(in), @@ -693,6 +738,21 @@

    Arguments

    + + + + real(kind=rk), + +intent(in), + + contiguous + + :: + f_knot3(:) + + + + @@ -703,14 +763,14 @@

    Arguments

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

    Arguments

    :: - f_nc(2) + f_nc(3) @@ -733,7 +793,7 @@

    Arguments

    :: - f_ng(2) + f_ng(3) @@ -784,7 +844,7 @@

    Documentation generated by FORD - on 2024-07-01T09:54:44.473032

    + on 2024-07-01T10:00:02.512255


    diff --git a/interface/compute_tgc~3.html b/interface/compute_tgc~3.html index b23056de3..76aa08275 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_curve%basis_scalar + + +nurbs_surface%basis_scalar proc~basis_scalar~3->interface~compute_tgc~3 - - + + proc~basis_vector~3 - - -nurbs_curve%basis_vector + + +nurbs_surface%basis_vector proc~basis_vector~3->interface~compute_tgc~3 - - + + @@ -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,7 +361,7 @@

    Arguments

    :: - f_degree + f_degree(2) @@ -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,7 +465,7 @@

    Arguments

    :: - f_degree + f_degree(2) @@ -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,7 +584,7 @@

    Arguments

    :: - f_degree + f_degree(2) @@ -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,7 +703,7 @@

    Arguments

    :: - f_degree + f_degree(2) @@ -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-07-01T09:54:44.473032

    + on 2024-07-01T10:00:02.512255


    diff --git a/interface/compute_xg.html b/interface/compute_xg.html index 6b75ccb34..cdb338098 100644 --- a/interface/compute_xg.html +++ b/interface/compute_xg.html @@ -82,15 +82,15 @@

    compute_Xg
  • - Source File + Source File
  • @@ -163,178 +163,163 @@

    Called by

    - - + + interface~~compute_xg~~CalledByGraph - + interface~compute_xg - -compute_Xg + +compute_Xg proc~cmp_xg - - -nurbs_volume%cmp_Xg + + +nurbs_curve%cmp_Xg proc~cmp_xg->interface~compute_xg - - + + proc~create - - -nurbs_volume%create + + +nurbs_curve%create proc~create->interface~compute_xg - - + + proc~nearest_point2 - - -nurbs_volume%nearest_point2 + + +nurbs_curve%nearest_point2 proc~nearest_point2->proc~cmp_xg - - + + proc~nearest_point2->proc~create - - + + - + -program~example3_volume - - -example3_volume +program~example1_curve + + +example1_curve - + -program~example3_volume->proc~create - - +program~example1_curve->proc~create + + - + -program~example_nurbs_volume - - -example_nurbs_volume +program~example_nurbs_curve + + +example_nurbs_curve - + -program~example_nurbs_volume->proc~create - - +program~example_nurbs_curve->proc~create + + - + -program~nearest_point_3d - - -nearest_point_3d +program~nearest_point_1d + + +nearest_point_1d - + -program~nearest_point_3d->proc~create - - +program~nearest_point_1d->proc~create + + - - -program~nearest_point_3d->proc~nearest_point2 - - + + +program~nearest_point_1d->proc~nearest_point2 + + - + -program~shape_c_3d - - -shape_C_3d +program~shape_c_1d + + +shape_C_1d - + -program~shape_c_3d->proc~create - - +program~shape_c_1d->proc~create + + - + -program~shape_half_ring_3d - - -shape_half_ring_3d +program~shape_circle + + +shape_circle - + -program~shape_half_ring_3d->proc~create - - +program~shape_circle->proc~create + + - + -program~shape_hexahedron - - -shape_hexahedron +program~shape_half_circle + + +shape_half_circle - + -program~shape_hexahedron->proc~create - - - - - -program~shape_ring_3d - - -shape_ring_3d - - - - - -program~shape_ring_3d->proc~create - - +program~shape_half_circle->proc~create + + @@ -422,7 +407,7 @@

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

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

    @@ -448,44 +433,14 @@

    Arguments

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

    Arguments

    contiguous :: - f_knot3(:) + f_knot(:) @@ -508,7 +463,7 @@

    Arguments

    :: - f_degree(3) + f_degree @@ -523,7 +478,7 @@

    Arguments

    :: - f_nc(3) + f_nc @@ -538,7 +493,7 @@

    Arguments

    :: - f_ng(3) + f_ng @@ -571,7 +526,7 @@

    -

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

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

    @@ -592,49 +547,19 @@

    Arguments

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

    Arguments

    contiguous :: - f_knot3(:) + f_knot(:) @@ -657,7 +582,7 @@

    Arguments

    :: - f_degree(3) + f_degree @@ -672,7 +597,7 @@

    Arguments

    :: - f_nc(3) + f_nc @@ -705,7 +630,7 @@

    -

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

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

    @@ -731,44 +656,14 @@

    Arguments

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

    Arguments

    contiguous :: - f_knot3(:) + f_knot(:) @@ -791,7 +686,7 @@

    Arguments

    :: - f_degree(3) + f_degree @@ -806,7 +701,7 @@

    Arguments

    :: - f_nc(3) + f_nc @@ -821,7 +716,7 @@

    Arguments

    :: - f_ng(3) + f_ng @@ -869,7 +764,7 @@

    -

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

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

    @@ -890,49 +785,19 @@

    Arguments

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

    Arguments

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

    Arguments

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

    Arguments

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

    Documentation generated by FORD - on 2024-07-01T09:54:44.473032

    + on 2024-07-01T10:00:02.512255


    diff --git a/interface/compute_xg~2.html b/interface/compute_xg~2.html index b37043166..130979b92 100644 --- a/interface/compute_xg~2.html +++ b/interface/compute_xg~2.html @@ -77,20 +77,20 @@

    compute_Xg
  • 44 statements + title="

    0.6% of total for procedures.

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

    Called by

    - - + + interface~~compute_xg~2~~CalledByGraph - + interface~compute_xg~2 - -compute_Xg + +compute_Xg proc~cmp_xg~2 - - -nurbs_surface%cmp_Xg + + +nurbs_volume%cmp_Xg proc~cmp_xg~2->interface~compute_xg~2 - - + + proc~create~2 - - -nurbs_surface%create + + +nurbs_volume%create proc~create~2->interface~compute_xg~2 - - + + proc~nearest_point2~2 - + -nurbs_surface%nearest_point2 +nurbs_volume%nearest_point2 proc~nearest_point2~2->proc~cmp_xg~2 - - + + proc~nearest_point2~2->proc~create~2 - - + + - + -program~example3_surface - - -example3_surface +program~example3_volume + + +example3_volume - + -program~example3_surface->proc~create~2 - - +program~example3_volume->proc~create~2 + + - + -program~example_nurbs_surface - - -example_nurbs_surface +program~example_nurbs_volume + + +example_nurbs_volume - + -program~example_nurbs_surface->proc~create~2 - - +program~example_nurbs_volume->proc~create~2 + + - + -program~example_ppm1 - - -example_ppm1 +program~nearest_point_3d + + +nearest_point_3d - + -program~example_ppm1->proc~create~2 - - +program~nearest_point_3d->proc~create~2 + + - + + +program~nearest_point_3d->proc~nearest_point2~2 + + + + -program~example_ppm2 - - -example_ppm2 +program~shape_c_3d + + +shape_C_3d - + -program~example_ppm2->proc~create~2 - - +program~shape_c_3d->proc~create~2 + + - + -program~example_ppm3 - - -example_ppm3 +program~shape_half_ring_3d + + +shape_half_ring_3d - + -program~example_ppm3->proc~create~2 - - +program~shape_half_ring_3d->proc~create~2 + + - + -program~nearest_point_2d - - -nearest_point_2d +program~shape_hexahedron + + +shape_hexahedron - + -program~nearest_point_2d->proc~create~2 - - - - - -program~nearest_point_2d->proc~nearest_point2~2 - - +program~shape_hexahedron->proc~create~2 + + - + -program~nearest_point_2d_bench - - -nearest_point_2d_bench +program~shape_ring_3d + + +shape_ring_3d - + -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 - - +program~shape_ring_3d->proc~create~2 + + @@ -482,7 +422,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_3d(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_ng, f_Xc) result(f_Xg)

    @@ -515,7 +455,7 @@

    Arguments

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

    Arguments

    - + real(kind=rk), intent(in), @@ -543,6 +483,21 @@

    Arguments

    + + + + real(kind=rk), + +intent(in), + + contiguous + + :: + f_knot3(:) + + + + @@ -553,7 +508,7 @@

    Arguments

    :: - f_degree(2) + f_degree(3) @@ -568,7 +523,7 @@

    Arguments

    :: - f_nc(2) + f_nc(3) @@ -583,7 +538,7 @@

    Arguments

    :: - f_ng(2) + f_ng(3) @@ -616,7 +571,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_3d_1point(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_Xc) result(f_Xg)

    @@ -649,7 +604,7 @@

    Arguments

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

    Arguments

    - + real(kind=rk), intent(in), @@ -677,6 +632,21 @@

    Arguments

    + + + + real(kind=rk), + +intent(in), + + contiguous + + :: + f_knot3(:) + + + + @@ -687,7 +657,7 @@

    Arguments

    :: - f_degree(2) + f_degree(3) @@ -702,7 +672,7 @@

    Arguments

    :: - f_nc(2) + f_nc(3) @@ -735,7 +705,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_3d(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_ng, f_Xc, f_Wc) result(f_Xg)

    @@ -768,7 +738,7 @@

    Arguments

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

    Arguments

    - + real(kind=rk), intent(in), @@ -796,6 +766,21 @@

    Arguments

    + + + + real(kind=rk), + +intent(in), + + contiguous + + :: + f_knot3(:) + + + + @@ -806,7 +791,7 @@

    Arguments

    :: - f_degree(2) + f_degree(3) @@ -821,7 +806,7 @@

    Arguments

    :: - f_nc(2) + f_nc(3) @@ -836,7 +821,7 @@

    Arguments

    :: - f_ng(2) + f_ng(3) @@ -884,7 +869,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_3d_1point(f_Xt, f_knot1, f_knot2, f_knot3, f_degree, f_nc, f_Xc, f_Wc) result(f_Xg)

    @@ -917,7 +902,7 @@

    Arguments

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

    Arguments

    - + real(kind=rk), intent(in), @@ -945,6 +930,21 @@

    Arguments

    + + + + real(kind=rk), + +intent(in), + + contiguous + + :: + f_knot3(:) + + + + @@ -955,7 +955,7 @@

    Arguments

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

    Arguments

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

    Documentation generated by FORD - on 2024-07-01T09:54:44.473032

    + on 2024-07-01T10:00:02.512255


    diff --git a/interface/compute_xg~3.html b/interface/compute_xg~3.html index 72bae2ae6..8b75dbbdb 100644 --- a/interface/compute_xg~3.html +++ b/interface/compute_xg~3.html @@ -77,20 +77,20 @@

    compute_Xg
  • 42 statements + title="

    0.6% of total for procedures.

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

    Called by

    - - + + interface~~compute_xg~3~~CalledByGraph - + interface~compute_xg~3 - -compute_Xg + +compute_Xg proc~cmp_xg~3 - - -nurbs_curve%cmp_Xg + + +nurbs_surface%cmp_Xg proc~cmp_xg~3->interface~compute_xg~3 - - + + proc~create~3 - - -nurbs_curve%create + + +nurbs_surface%create proc~create~3->interface~compute_xg~3 - - + + proc~nearest_point2~3 - - -nurbs_curve%nearest_point2 + + +nurbs_surface%nearest_point2 proc~nearest_point2~3->proc~cmp_xg~3 - - + + proc~nearest_point2~3->proc~create~3 - - + + - + -program~example1_curve - - -example1_curve +program~example3_surface + + +example3_surface - + -program~example1_curve->proc~create~3 - - +program~example3_surface->proc~create~3 + + - + -program~example_nurbs_curve - - -example_nurbs_curve +program~example_nurbs_surface + + +example_nurbs_surface - + -program~example_nurbs_curve->proc~create~3 - - +program~example_nurbs_surface->proc~create~3 + + - + -program~nearest_point_1d - - -nearest_point_1d +program~example_ppm1 + + +example_ppm1 - + -program~nearest_point_1d->proc~create~3 - - +program~example_ppm1->proc~create~3 + + - - -program~nearest_point_1d->proc~nearest_point2~3 - - - - + -program~shape_c_1d - - -shape_C_1d +program~example_ppm2 + + +example_ppm2 - + -program~shape_c_1d->proc~create~3 - - +program~example_ppm2->proc~create~3 + + - + -program~shape_circle - - -shape_circle +program~example_ppm3 + + +example_ppm3 - + -program~shape_circle->proc~create~3 - - +program~example_ppm3->proc~create~3 + + - + -program~shape_half_circle - - -shape_half_circle +program~nearest_point_2d + + +nearest_point_2d - + -program~shape_half_circle->proc~create~3 - - +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 + + @@ -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,14 +553,14 @@

    Arguments

    :: - f_degree + f_degree(2) - + integer, intent(in) @@ -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,14 +687,14 @@

    Arguments

    :: - f_degree + f_degree(2) - + integer, intent(in) @@ -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,14 +806,14 @@

    Arguments

    :: - f_degree + f_degree(2) - + integer, intent(in) @@ -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,14 +955,14 @@

    Arguments

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

    Arguments

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

    Documentation generated by FORD - on 2024-07-01T09:54:44.473032

    + on 2024-07-01T10:00:02.512255


    diff --git a/interface/dyad.html b/interface/dyad.html index e84037233..5fb0e4c21 100644 --- a/interface/dyad.html +++ b/interface/dyad.html @@ -291,18 +291,18 @@

    Called by

    dyad - + -proc~ansatz~3 - +proc~ansatz + nurbs_curve%ansatz - + -proc~ansatz~3->interface~dyad +proc~ansatz->interface~dyad @@ -315,9 +315,9 @@

    Called by

    - + -proc~cmp_length->proc~ansatz~3 +proc~cmp_length->proc~ansatz @@ -504,7 +504,7 @@

    Documentation generated by FORD - on 2024-07-01T09:54:44.473032

    + on 2024-07-01T10:00:02.512255


    diff --git a/interface/elemconn_c0.html b/interface/elemconn_c0.html index 4a11d0174..3e5bd07f3 100644 --- a/interface/elemconn_c0.html +++ b/interface/elemconn_c0.html @@ -320,566 +320,566 @@

    Called by

    interface~elemconn_c0 - -elemConn_C0 + +elemConn_C0 proc~cmp_elem_xc_vis - - -nurbs_volume%cmp_elem_Xc_vis + + +nurbs_curve%cmp_elem_Xc_vis proc~cmp_elem_xc_vis->interface~elemconn_c0 - - + + proc~cmp_elem_xc_vis~2 - - -nurbs_surface%cmp_elem_Xc_vis + + +nurbs_volume%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 + + +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 + + +nurbs_curve%cmp_elem_Xg_vis proc~cmp_elem_xg_vis->interface~elemconn_c0 - - + + proc~cmp_elem_xg_vis~2 - - -nurbs_surface%cmp_elem_Xg_vis + + +nurbs_volume%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 + + +nurbs_surface%cmp_elem_Xg_vis proc~cmp_elem_xg_vis~3->interface~elemconn_c0 - - + + proc~export_xc - - -nurbs_volume%export_Xc + + +nurbs_curve%export_Xc proc~export_xc->proc~cmp_elem_xc_vis - - + + proc~export_xc~2 - - -nurbs_surface%export_Xc + + +nurbs_volume%export_Xc proc~export_xc~2->proc~cmp_elem_xc_vis~2 - - + + proc~export_xc~3 - - -nurbs_curve%export_Xc + + +nurbs_surface%export_Xc proc~export_xc~3->proc~cmp_elem_xc_vis~3 - - + + proc~export_xg - - -nurbs_volume%export_Xg + + +nurbs_curve%export_Xg proc~export_xg->proc~cmp_elem_xg_vis - - + + proc~export_xg~2 - - -nurbs_surface%export_Xg + + +nurbs_volume%export_Xg proc~export_xg~2->proc~cmp_elem_xg_vis~2 - - + + proc~export_xg~3 - - -nurbs_curve%export_Xg + + +nurbs_surface%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~3 - - + + +program~example1_curve->proc~export_xc + + - - -program~example1_curve->proc~export_xg~3 - - + + +program~example1_curve->proc~export_xg + + program~example3_surface - -example3_surface + +example3_surface - - -program~example3_surface->proc~export_xc~2 - - + + +program~example3_surface->proc~export_xc~3 + + - - -program~example3_surface->proc~export_xg~2 - - + + +program~example3_surface->proc~export_xg~3 + + program~example3_volume - -example3_volume + +example3_volume - - -program~example3_volume->proc~export_xc - - + + +program~example3_volume->proc~export_xc~2 + + - - -program~example3_volume->proc~export_xg - - + + +program~example3_volume->proc~export_xg~2 + + program~example_nurbs_curve - -example_nurbs_curve + +example_nurbs_curve - - -program~example_nurbs_curve->proc~export_xc~3 - - + + +program~example_nurbs_curve->proc~export_xc + + - - -program~example_nurbs_curve->proc~export_xg~3 - - + + +program~example_nurbs_curve->proc~export_xg + + program~example_nurbs_surface - -example_nurbs_surface + +example_nurbs_surface - - -program~example_nurbs_surface->proc~export_xc~2 - - + + +program~example_nurbs_surface->proc~export_xc~3 + + - - -program~example_nurbs_surface->proc~export_xg~2 - - + + +program~example_nurbs_surface->proc~export_xg~3 + + program~example_nurbs_volume - -example_nurbs_volume + +example_nurbs_volume - - -program~example_nurbs_volume->proc~export_xc - - + + +program~example_nurbs_volume->proc~export_xc~2 + + - - -program~example_nurbs_volume->proc~export_xg - - + + +program~example_nurbs_volume->proc~export_xg~2 + + program~example_put_to_nurbs - -example_put_to_nurbs + +example_put_to_nurbs - - -program~example_put_to_nurbs->proc~export_xc - - + + +program~example_put_to_nurbs->proc~export_xc~2 + + - - -program~example_put_to_nurbs->proc~export_xg - - + + +program~example_put_to_nurbs->proc~export_xg~2 + + program~shape_c_1d - -shape_C_1d + +shape_C_1d - - -program~shape_c_1d->proc~export_xc~3 - - + + +program~shape_c_1d->proc~export_xc + + - - -program~shape_c_1d->proc~export_xg~3 - - + + +program~shape_c_1d->proc~export_xg + + program~shape_c_2d - -shape_C_2d + +shape_C_2d - - -program~shape_c_2d->proc~export_xc~2 - - + + +program~shape_c_2d->proc~export_xc~3 + + - - -program~shape_c_2d->proc~export_xg~2 - - + + +program~shape_c_2d->proc~export_xg~3 + + program~shape_c_3d - -shape_C_3d + +shape_C_3d - - -program~shape_c_3d->proc~export_xc - - + + +program~shape_c_3d->proc~export_xc~2 + + - - -program~shape_c_3d->proc~export_xg - - + + +program~shape_c_3d->proc~export_xg~2 + + program~shape_circle - -shape_circle + +shape_circle - - -program~shape_circle->proc~export_xc~3 - - + + +program~shape_circle->proc~export_xc + + - - -program~shape_circle->proc~export_xg~3 - - + + +program~shape_circle->proc~export_xg + + program~shape_half_circle - -shape_half_circle + +shape_half_circle - - -program~shape_half_circle->proc~export_xc~3 - - + + +program~shape_half_circle->proc~export_xc + + - - -program~shape_half_circle->proc~export_xg~3 - - + + +program~shape_half_circle->proc~export_xg + + program~shape_half_ring_2d - -shape_half_ring_2d + +shape_half_ring_2d - - -program~shape_half_ring_2d->proc~export_xc~2 - - + + +program~shape_half_ring_2d->proc~export_xc~3 + + - - -program~shape_half_ring_2d->proc~export_xg~2 - - + + +program~shape_half_ring_2d->proc~export_xg~3 + + program~shape_half_ring_3d - -shape_half_ring_3d + +shape_half_ring_3d - - -program~shape_half_ring_3d->proc~export_xc - - + + +program~shape_half_ring_3d->proc~export_xc~2 + + - - -program~shape_half_ring_3d->proc~export_xg - - + + +program~shape_half_ring_3d->proc~export_xg~2 + + program~shape_hexahedron - -shape_hexahedron + +shape_hexahedron - - -program~shape_hexahedron->proc~export_xc - - + + +program~shape_hexahedron->proc~export_xc~2 + + - - -program~shape_hexahedron->proc~export_xg - - + + +program~shape_hexahedron->proc~export_xg~2 + + program~shape_ring_2d - -shape_ring_2d + +shape_ring_2d - - -program~shape_ring_2d->proc~export_xc~2 - - + + +program~shape_ring_2d->proc~export_xc~3 + + - - -program~shape_ring_2d->proc~export_xg~2 - - + + +program~shape_ring_2d->proc~export_xg~3 + + program~shape_ring_3d - -shape_ring_3d + +shape_ring_3d - - -program~shape_ring_3d->proc~export_xc - - + + +program~shape_ring_3d->proc~export_xc~2 + + - - -program~shape_ring_3d->proc~export_xg - - + + +program~shape_ring_3d->proc~export_xg~2 + + program~shape_tetragon - -shape_tetragon + +shape_tetragon - - -program~shape_tetragon->proc~export_xc~2 - - + + +program~shape_tetragon->proc~export_xc~3 + + - - -program~shape_tetragon->proc~export_xg~2 - - + + +program~shape_tetragon->proc~export_xg~3 + + @@ -1271,7 +1271,7 @@

    Documentation generated by FORD - on 2024-07-01T09:54:44.473032

    + on 2024-07-01T10:00:02.512255


    diff --git a/interface/elemconn_cn.html b/interface/elemconn_cn.html index 88be0cdbc..b6ab3dee4 100644 --- a/interface/elemconn_cn.html +++ b/interface/elemconn_cn.html @@ -312,98 +312,98 @@

    Called by

    - - + + interface~~elemconn_cn~~CalledByGraph - + interface~elemconn_cn - -elemConn_Cn + +elemConn_Cn proc~cmp_elem - - -nurbs_volume%cmp_elem + + +nurbs_curve%cmp_elem proc~cmp_elem->interface~elemconn_cn - - + + proc~cmp_elem~2 - - -nurbs_surface%cmp_elem + + +nurbs_volume%cmp_elem proc~cmp_elem~2->interface~elemconn_cn - - + + proc~cmp_elem~3 - - -nurbs_curve%cmp_elem + + +nurbs_surface%cmp_elem proc~cmp_elem~3->interface~elemconn_cn - - + + proc~ansatz - - -nurbs_volume%ansatz + + +nurbs_curve%ansatz proc~ansatz->proc~cmp_elem - - + + proc~ansatz~2 - - -nurbs_surface%ansatz + + +nurbs_volume%ansatz - + proc~ansatz~2->proc~cmp_elem~2 - - + + proc~ansatz~3 - - -nurbs_curve%ansatz + + +nurbs_surface%ansatz @@ -417,124 +417,124 @@

    Called by

    proc~cmp_area - -nurbs_surface%cmp_area + +nurbs_surface%cmp_area - - -proc~cmp_area->proc~cmp_elem~2 - - + + +proc~cmp_area->proc~cmp_elem~3 + + - - -proc~cmp_area->proc~ansatz~2 - - + + +proc~cmp_area->proc~ansatz~3 + + proc~cmp_length - -nurbs_curve%cmp_length + +nurbs_curve%cmp_length - - -proc~cmp_length->proc~cmp_elem~3 - - + + +proc~cmp_length->proc~cmp_elem + + - - -proc~cmp_length->proc~ansatz~3 - - + + +proc~cmp_length->proc~ansatz + + proc~cmp_volume - -nurbs_volume%cmp_volume + +nurbs_volume%cmp_volume - - -proc~cmp_volume->proc~cmp_elem - - + + +proc~cmp_volume->proc~cmp_elem~2 + + - - -proc~cmp_volume->proc~ansatz - - + + +proc~cmp_volume->proc~ansatz~2 + + program~example3_volume - -example3_volume + +example3_volume - - -program~example3_volume->proc~cmp_elem - - + + +program~example3_volume->proc~cmp_elem~2 + + program~compute_area - -compute_area + +compute_area program~compute_area->proc~cmp_area - - + + program~compute_length - -compute_length + +compute_length program~compute_length->proc~cmp_length - - + + program~compute_volume - -compute_volume + +compute_volume program~compute_volume->proc~cmp_volume - - + + @@ -815,7 +815,7 @@

    Arguments

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

    Arguments

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

    Arguments

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

    Arguments

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

    Arguments

    Documentation generated by FORD - on 2024-07-01T09:54:44.473032

    + on 2024-07-01T10:00:02.512255


    diff --git a/interface/gauss_leg.html b/interface/gauss_leg.html index 40b9dc3c0..58da07207 100644 --- a/interface/gauss_leg.html +++ b/interface/gauss_leg.html @@ -422,9 +422,9 @@

    Called by

    proc~ansatz - - -nurbs_volume%ansatz + + +nurbs_curve%ansatz @@ -437,9 +437,9 @@

    Called by

    proc~ansatz~2 - + -nurbs_surface%ansatz +nurbs_volume%ansatz @@ -452,9 +452,9 @@

    Called by

    proc~ansatz~3 - - -nurbs_curve%ansatz + + +nurbs_surface%ansatz @@ -468,91 +468,91 @@

    Called by

    proc~cmp_area - -nurbs_surface%cmp_area + +nurbs_surface%cmp_area - - -proc~cmp_area->proc~ansatz~2 - - + + +proc~cmp_area->proc~ansatz~3 + + proc~cmp_length - -nurbs_curve%cmp_length + +nurbs_curve%cmp_length - - -proc~cmp_length->proc~ansatz~3 - - + + +proc~cmp_length->proc~ansatz + + proc~cmp_volume - -nurbs_volume%cmp_volume + +nurbs_volume%cmp_volume - - -proc~cmp_volume->proc~ansatz - - + + +proc~cmp_volume->proc~ansatz~2 + + program~compute_area - -compute_area + +compute_area program~compute_area->proc~cmp_area - - + + program~compute_length - -compute_length + +compute_length program~compute_length->proc~cmp_length - - + + program~compute_volume - -compute_volume + +compute_volume program~compute_volume->proc~cmp_volume - - + + @@ -680,7 +680,7 @@

    Arguments

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

    Arguments

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

    Arguments

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

    Arguments

    Documentation generated by FORD - on 2024-07-01T09:54:44.473032

    + on 2024-07-01T10:00:02.512255


    diff --git a/interface/ndgrid.html b/interface/ndgrid.html index dde38b6ee..f4f5d4de0 100644 --- a/interface/ndgrid.html +++ b/interface/ndgrid.html @@ -307,18 +307,18 @@

    Called by

    ndgrid - + -proc~ansatz - +proc~ansatz~2 + nurbs_volume%ansatz - + -proc~ansatz->interface~ndgrid +proc~ansatz~2->interface~ndgrid @@ -331,180 +331,180 @@

    Called by

    - - -proc~ansatz->interface~gauss_leg + + +proc~ansatz~2->interface~gauss_leg - - -none~derivative - + + +none~derivative~2 + nurbs_volume%derivative - - -proc~ansatz->none~derivative - - + + +proc~ansatz~2->none~derivative~2 + + - + -proc~ansatz~2 - +proc~ansatz~3 + nurbs_surface%ansatz - + -proc~ansatz~2->interface~ndgrid +proc~ansatz~3->interface~ndgrid - - -proc~ansatz~2->interface~gauss_leg + + +proc~ansatz~3->interface~gauss_leg - + -none~derivative~2 - +none~derivative~3 + nurbs_surface%derivative - + -proc~ansatz~2->none~derivative~2 +proc~ansatz~3->none~derivative~3 - + -proc~basis_vector - +proc~basis_vector~2 + nurbs_volume%basis_vector - + -proc~basis_vector->interface~ndgrid +proc~basis_vector~2->interface~ndgrid - + -proc~basis_vector~2 - +proc~basis_vector~3 + nurbs_surface%basis_vector - + -proc~basis_vector~2->interface~ndgrid +proc~basis_vector~3->interface~ndgrid - + -proc~create - +proc~create~2 + nurbs_volume%create - + -proc~create->interface~ndgrid +proc~create~2->interface~ndgrid - + -proc~create~2 - +proc~create~3 + nurbs_surface%create - + -proc~create~2->interface~ndgrid +proc~create~3->interface~ndgrid - + -proc~derivative2_vector - +proc~derivative2_vector~2 + nurbs_volume%derivative2_vector - + -proc~derivative2_vector->interface~ndgrid +proc~derivative2_vector~2->interface~ndgrid - + -proc~derivative2_vector~2 - +proc~derivative2_vector~3 + nurbs_surface%derivative2_vector - + -proc~derivative2_vector~2->interface~ndgrid +proc~derivative2_vector~3->interface~ndgrid - + -proc~derivative_vector - +proc~derivative_vector~2 + nurbs_volume%derivative_vector - + -proc~derivative_vector->interface~ndgrid +proc~derivative_vector~2->interface~ndgrid - + -proc~derivative_vector~2 - +proc~derivative_vector~3 + nurbs_surface%derivative_vector - + -proc~derivative_vector~2->interface~ndgrid +proc~derivative_vector~3->interface~ndgrid @@ -550,45 +550,45 @@

    Called by

    - - -none~derivative->proc~derivative_vector - - - - - -none~derivative2 - + + +none~derivative2~2 + nurbs_volume%derivative2 - + -none~derivative2->proc~derivative2_vector +none~derivative2~2->proc~derivative2_vector~2 - - -none~derivative2~2 - + + +none~derivative2~3 + nurbs_surface%derivative2 - + -none~derivative2~2->proc~derivative2_vector~2 +none~derivative2~3->proc~derivative2_vector~3 - + none~derivative~2->proc~derivative_vector~2 + + + + + +none~derivative~3->proc~derivative_vector~3 @@ -601,9 +601,9 @@

    Called by

    - + -proc~cmp_area->proc~ansatz~2 +proc~cmp_area->proc~ansatz~3 @@ -616,53 +616,53 @@

    Called by

    - + -proc~cmp_volume->proc~ansatz +proc~cmp_volume->proc~ansatz~2 - + -proc~nearest_point2 - +proc~nearest_point2~2 + nurbs_volume%nearest_point2 - + -proc~nearest_point2->proc~create +proc~nearest_point2~2->proc~create~2 - - -proc~nearest_point2->none~derivative2 - - + + +proc~nearest_point2~2->none~derivative2~2 + + - + -proc~nearest_point2~2 - +proc~nearest_point2~3 + nurbs_surface%nearest_point2 - + -proc~nearest_point2~2->proc~create~2 +proc~nearest_point2~3->proc~create~3 - - -proc~nearest_point2~2->none~derivative2~2 - - + + +proc~nearest_point2~3->none~derivative2~3 + + @@ -673,9 +673,9 @@

    Called by

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

    Called by

    - + -program~example3_volume->proc~create +program~example3_volume->proc~create~2 @@ -703,9 +703,9 @@

    Called by

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

    Called by

    - + -program~example_nurbs_volume->proc~create +program~example_nurbs_volume->proc~create~2 @@ -733,9 +733,9 @@

    Called by

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

    Called by

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

    Called by

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

    Called by

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

    Called by

    - + -program~nearest_point_2d_bench->proc~create~2 +program~nearest_point_2d_bench->proc~create~3 @@ -814,15 +814,15 @@

    Called by

    - + -program~nearest_point_3d->proc~create +program~nearest_point_3d->proc~create~2 - + -program~nearest_point_3d->proc~nearest_point2 +program~nearest_point_3d->proc~nearest_point2~2 @@ -835,9 +835,9 @@

    Called by

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

    Called by

    - + -program~shape_c_3d->proc~create +program~shape_c_3d->proc~create~2 @@ -865,9 +865,9 @@

    Called by

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

    Called by

    - + -program~shape_half_ring_3d->proc~create +program~shape_half_ring_3d->proc~create~2 @@ -895,9 +895,9 @@

    Called by

    - + -program~shape_hexahedron->proc~create +program~shape_hexahedron->proc~create~2 @@ -910,9 +910,9 @@

    Called by

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

    Called by

    - + -program~shape_ring_3d->proc~create +program~shape_ring_3d->proc~create~2 @@ -940,24 +940,24 @@

    Called by

    - + -program~shape_tetragon->proc~create~2 +program~shape_tetragon->proc~create~3 - + -proc~ansatz~3 - +proc~ansatz + nurbs_curve%ansatz - - -proc~ansatz~3->interface~gauss_leg + + +proc~ansatz->interface~gauss_leg @@ -1000,9 +1000,9 @@

    Called by

    - + -proc~cmp_length->proc~ansatz~3 +proc~cmp_length->proc~ansatz @@ -1292,7 +1292,7 @@

    Arguments

    Documentation generated by FORD - on 2024-07-01T09:54:44.473032

    + on 2024-07-01T10:00:02.512255


    diff --git a/interface/nearest_point_help_1d.html b/interface/nearest_point_help_1d.html index eb73a13c7..a08847f7a 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_point~3 - +proc~nearest_point + nurbs_curve%nearest_point - + -proc~nearest_point~3->interface~nearest_point_help_1d +proc~nearest_point->interface~nearest_point_help_1d - + -proc~nearest_point2~3 - +proc~nearest_point2 + nurbs_curve%nearest_point2 - + -proc~nearest_point2~3->proc~nearest_point~3 +proc~nearest_point2->proc~nearest_point @@ -201,15 +201,15 @@

    Called by

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

    Arguments

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

    Arguments

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

    Arguments

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

    Arguments

    -

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

    +

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


    @@ -387,7 +387,7 @@

    Return Value

    Documentation generated by FORD - on 2024-07-01T09:54:44.473032

    + on 2024-07-01T10:00:02.512255


    diff --git a/interface/nearest_point_help_2d.html b/interface/nearest_point_help_2d.html index 4c0b91d24..2facba80d 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_point~2 - +proc~nearest_point~3 + nurbs_surface%nearest_point - + -proc~nearest_point~2->interface~nearest_point_help_2d +proc~nearest_point~3->interface~nearest_point_help_2d - + -proc~nearest_point2~2 - +proc~nearest_point2~3 + nurbs_surface%nearest_point2 - + -proc~nearest_point2~2->proc~nearest_point~2 +proc~nearest_point2~3->proc~nearest_point~3 @@ -201,15 +201,15 @@

    Called by

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

    Called by

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

    Arguments

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

    Arguments

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

    Arguments

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

    Arguments

    -

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

    +

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


    @@ -402,7 +402,7 @@

    Return Value

    Documentation generated by FORD - on 2024-07-01T09:54:44.473032

    + on 2024-07-01T10:00:02.512255


    diff --git a/interface/nearest_point_help_3d.html b/interface/nearest_point_help_3d.html index 1a03b2b34..2a83d6213 100644 --- a/interface/nearest_point_help_3d.html +++ b/interface/nearest_point_help_3d.html @@ -162,33 +162,33 @@

    Called by

    nearest_point_help_3d - + -proc~nearest_point - +proc~nearest_point~2 + nurbs_volume%nearest_point - + -proc~nearest_point->interface~nearest_point_help_3d +proc~nearest_point~2->interface~nearest_point_help_3d - + -proc~nearest_point2 - +proc~nearest_point2~2 + nurbs_volume%nearest_point2 - + -proc~nearest_point2->proc~nearest_point +proc~nearest_point2~2->proc~nearest_point~2 @@ -201,15 +201,15 @@

    Called by

    - + -program~nearest_point_3d->proc~nearest_point +program~nearest_point_3d->proc~nearest_point~2 - + -program~nearest_point_3d->proc~nearest_point2 +program~nearest_point_3d->proc~nearest_point2~2 @@ -319,7 +319,7 @@

    Arguments

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

    Arguments

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

    Arguments

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

    Arguments

    -

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

    +

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


    @@ -387,7 +387,7 @@

    Return Value re

    Documentation generated by FORD - on 2024-07-01T09:54:44.473032

    + on 2024-07-01T10:00:02.512255


    diff --git a/interface/unique.html b/interface/unique.html index 898069177..f2ae6e1c1 100644 --- a/interface/unique.html +++ b/interface/unique.html @@ -304,239 +304,239 @@

    Called by

    interface~unique - -unique + +unique proc~ansatz - - -nurbs_volume%ansatz + + +nurbs_curve%ansatz proc~ansatz->interface~unique - - + + proc~cmp_elem - - -nurbs_volume%cmp_elem + + +nurbs_curve%cmp_elem proc~ansatz->proc~cmp_elem - - + + proc~ansatz~2 - - -nurbs_surface%ansatz + + +nurbs_volume%ansatz proc~ansatz~2->interface~unique - - + + proc~cmp_elem~2 - - -nurbs_surface%cmp_elem + + +nurbs_volume%cmp_elem - + proc~ansatz~2->proc~cmp_elem~2 - - + + proc~ansatz~3 - - -nurbs_curve%ansatz + + +nurbs_surface%ansatz proc~ansatz~3->interface~unique - - + + proc~cmp_elem~3 - - -nurbs_curve%cmp_elem + + +nurbs_surface%cmp_elem proc~ansatz~3->proc~cmp_elem~3 - - + + proc~cmp_elem->interface~unique - - + + proc~cmp_elem~2->interface~unique - - + + proc~cmp_elem~3->interface~unique - - + + proc~cmp_area - -nurbs_surface%cmp_area + +nurbs_surface%cmp_area - - -proc~cmp_area->proc~ansatz~2 - - + + +proc~cmp_area->proc~ansatz~3 + + - - -proc~cmp_area->proc~cmp_elem~2 - - + + +proc~cmp_area->proc~cmp_elem~3 + + proc~cmp_length - -nurbs_curve%cmp_length + +nurbs_curve%cmp_length - - -proc~cmp_length->proc~ansatz~3 - - + + +proc~cmp_length->proc~ansatz + + - - -proc~cmp_length->proc~cmp_elem~3 - - + + +proc~cmp_length->proc~cmp_elem + + proc~cmp_volume - -nurbs_volume%cmp_volume + +nurbs_volume%cmp_volume - - -proc~cmp_volume->proc~ansatz - - + + +proc~cmp_volume->proc~ansatz~2 + + - - -proc~cmp_volume->proc~cmp_elem - - + + +proc~cmp_volume->proc~cmp_elem~2 + + program~example3_volume - -example3_volume + +example3_volume - - -program~example3_volume->proc~cmp_elem - - + + +program~example3_volume->proc~cmp_elem~2 + + program~compute_area - -compute_area + +compute_area program~compute_area->proc~cmp_area - - + + program~compute_length - -compute_length + +compute_length program~compute_length->proc~cmp_length - - + + program~compute_volume - -compute_volume + +compute_volume program~compute_volume->proc~cmp_volume - - + + @@ -744,7 +744,7 @@

    Documentation generated by FORD - on 2024-07-01T09:54:44.473032

    + on 2024-07-01T10:00:02.512255


    diff --git a/lists/files.html b/lists/files.html index 98591164b..1c086a9f8 100644 --- a/lists/files.html +++ b/lists/files.html @@ -795,7 +795,7 @@

    Documentation generated by FORD - on 2024-07-01T09:54:44.473032

    + on 2024-07-01T10:00:02.512255


    diff --git a/lists/modules.html b/lists/modules.html index 0b9036a1f..29775105e 100644 --- a/lists/modules.html +++ b/lists/modules.html @@ -1567,7 +1567,7 @@

    Documentation generated by FORD - on 2024-07-01T09:54:44.473032

    + on 2024-07-01T10:00:02.512255


    diff --git a/lists/procedures.html b/lists/procedures.html index de1817765..ecd538280 100644 --- a/lists/procedures.html +++ b/lists/procedures.html @@ -73,19 +73,19 @@

    Procedures

    ansatz - forcad_nurbs_volume + forcad_nurbs_curve Subroutine ansatz - forcad_nurbs_surface + forcad_nurbs_volume Subroutine ansatz - forcad_nurbs_curve + forcad_nurbs_surface Subroutine @@ -115,37 +115,37 @@

    Procedures

    basis_scalar - forcad_nurbs_volume + forcad_nurbs_curve Subroutine basis_scalar - forcad_nurbs_surface + forcad_nurbs_volume Subroutine basis_scalar - forcad_nurbs_curve + forcad_nurbs_surface Subroutine basis_vector - forcad_nurbs_volume + forcad_nurbs_curve Subroutine basis_vector - forcad_nurbs_surface + forcad_nurbs_volume Subroutine basis_vector - forcad_nurbs_curve + forcad_nurbs_surface Subroutine @@ -163,19 +163,19 @@

    Procedures

    cmp_degree - forcad_nurbs_volume + forcad_nurbs_curve Subroutine cmp_degree - forcad_nurbs_surface + forcad_nurbs_volume Subroutine cmp_degree - forcad_nurbs_curve + forcad_nurbs_surface Subroutine @@ -187,55 +187,55 @@

    Procedures

    cmp_elem - forcad_nurbs_volume + forcad_nurbs_curve Function cmp_elem - forcad_nurbs_surface + forcad_nurbs_volume Function cmp_elem - forcad_nurbs_curve + forcad_nurbs_surface Function cmp_elem_Xc_vis - forcad_nurbs_volume + forcad_nurbs_curve Function cmp_elem_Xc_vis - forcad_nurbs_surface + forcad_nurbs_volume Function cmp_elem_Xc_vis - forcad_nurbs_curve + forcad_nurbs_surface Function cmp_elem_Xg_vis - forcad_nurbs_volume + forcad_nurbs_curve Function cmp_elem_Xg_vis - forcad_nurbs_surface + forcad_nurbs_volume Function cmp_elem_Xg_vis - forcad_nurbs_curve + forcad_nurbs_surface Function @@ -301,19 +301,19 @@

    Procedures

    cmp_nc - forcad_nurbs_volume + forcad_nurbs_curve Subroutine cmp_nc - forcad_nurbs_surface + forcad_nurbs_volume Subroutine cmp_nc - forcad_nurbs_curve + forcad_nurbs_surface Subroutine @@ -325,37 +325,37 @@

    Procedures

    cmp_Xg - forcad_nurbs_volume + forcad_nurbs_curve Function cmp_Xg - forcad_nurbs_surface + forcad_nurbs_volume Function cmp_Xg - forcad_nurbs_curve + forcad_nurbs_surface Function compute_d2Tgc - forcad_nurbs_volume + forcad_nurbs_curve Interface compute_d2Tgc - forcad_nurbs_surface + forcad_nurbs_volume Interface compute_d2Tgc - forcad_nurbs_curve + forcad_nurbs_surface Interface @@ -433,19 +433,19 @@

    Procedures

    compute_dTgc - forcad_nurbs_volume + forcad_nurbs_curve Interface compute_dTgc - forcad_nurbs_surface + forcad_nurbs_volume Interface compute_dTgc - forcad_nurbs_curve + forcad_nurbs_surface Interface @@ -547,19 +547,19 @@

    Procedures

    compute_Tgc - forcad_nurbs_volume + forcad_nurbs_curve Interface compute_Tgc - forcad_nurbs_surface + forcad_nurbs_volume Interface compute_Tgc - forcad_nurbs_curve + forcad_nurbs_surface Interface @@ -637,19 +637,19 @@

    Procedures

    compute_Xg - forcad_nurbs_volume + forcad_nurbs_curve Interface compute_Xg - forcad_nurbs_surface + forcad_nurbs_volume Interface compute_Xg - forcad_nurbs_curve + forcad_nurbs_surface Interface @@ -727,91 +727,91 @@

    Procedures

    create - forcad_nurbs_volume + forcad_nurbs_curve Subroutine create - forcad_nurbs_surface + forcad_nurbs_volume Subroutine create - forcad_nurbs_curve + forcad_nurbs_surface Subroutine derivative2_scalar - forcad_nurbs_volume + forcad_nurbs_curve Subroutine derivative2_scalar - forcad_nurbs_surface + forcad_nurbs_volume Subroutine derivative2_scalar - forcad_nurbs_curve + forcad_nurbs_surface Subroutine derivative2_vector - forcad_nurbs_volume + forcad_nurbs_curve Subroutine derivative2_vector - forcad_nurbs_surface + forcad_nurbs_volume Subroutine derivative2_vector - forcad_nurbs_curve + forcad_nurbs_surface Subroutine derivative_scalar - forcad_nurbs_volume + forcad_nurbs_curve Subroutine derivative_scalar - forcad_nurbs_surface + forcad_nurbs_volume Subroutine derivative_scalar - forcad_nurbs_curve + forcad_nurbs_surface Subroutine derivative_vector - forcad_nurbs_volume + forcad_nurbs_curve Subroutine derivative_vector - forcad_nurbs_surface + forcad_nurbs_volume Subroutine derivative_vector - forcad_nurbs_curve + forcad_nurbs_surface Subroutine @@ -847,19 +847,19 @@

    Procedures

    elevate_degree - forcad_nurbs_volume + forcad_nurbs_curve Subroutine elevate_degree - forcad_nurbs_surface + forcad_nurbs_volume Subroutine elevate_degree - forcad_nurbs_curve + forcad_nurbs_surface Subroutine @@ -871,37 +871,37 @@

    Procedures

    export_Xc - forcad_nurbs_volume + forcad_nurbs_curve Subroutine export_Xc - forcad_nurbs_surface + forcad_nurbs_volume Subroutine export_Xc - forcad_nurbs_curve + forcad_nurbs_surface Subroutine export_Xg - forcad_nurbs_volume + forcad_nurbs_curve Subroutine export_Xg - forcad_nurbs_surface + forcad_nurbs_volume Subroutine export_Xg - forcad_nurbs_curve + forcad_nurbs_surface Subroutine @@ -913,19 +913,19 @@

    Procedures

    finalize - forcad_nurbs_volume + forcad_nurbs_curve Subroutine finalize - forcad_nurbs_surface + forcad_nurbs_volume Subroutine finalize - forcad_nurbs_curve + forcad_nurbs_surface Subroutine @@ -961,7 +961,7 @@

    Procedures

    generate_Xc - example_nurbs_volume + example_nurbs_curve Function @@ -973,37 +973,37 @@

    Procedures

    generate_Xc - example_nurbs_curve + example_nurbs_surface Function generate_Xc - example_nurbs_surface + example3_volume Function generate_Xc - example3_volume + example_nurbs_volume Function get_continuity - forcad_nurbs_volume + forcad_nurbs_curve Function get_continuity - forcad_nurbs_surface + forcad_nurbs_volume Function get_continuity - forcad_nurbs_curve + forcad_nurbs_surface Function @@ -1039,109 +1039,109 @@

    Procedures

    get_elem - forcad_nurbs_volume + forcad_nurbs_curve Function get_elem - forcad_nurbs_surface + forcad_nurbs_volume Function get_elem - forcad_nurbs_curve + forcad_nurbs_surface Function get_elem_Xc_vis - forcad_nurbs_volume + forcad_nurbs_curve Function get_elem_Xc_vis - forcad_nurbs_surface + forcad_nurbs_volume Function get_elem_Xc_vis - forcad_nurbs_curve + forcad_nurbs_surface Function get_elem_Xg_vis - forcad_nurbs_volume + forcad_nurbs_curve Function get_elem_Xg_vis - forcad_nurbs_surface + forcad_nurbs_volume Function get_elem_Xg_vis - forcad_nurbs_curve + forcad_nurbs_surface Function get_knot_all - forcad_nurbs_volume + forcad_nurbs_curve Function get_knot_all - forcad_nurbs_surface + forcad_nurbs_volume Function get_knot_all - forcad_nurbs_curve + forcad_nurbs_surface Function get_knoti - forcad_nurbs_volume + forcad_nurbs_curve Function get_knoti - forcad_nurbs_surface + forcad_nurbs_volume Function get_knoti - forcad_nurbs_curve + forcad_nurbs_surface Function get_multiplicity - forcad_nurbs_volume + forcad_nurbs_curve Function get_multiplicity - forcad_nurbs_surface + forcad_nurbs_volume Function get_multiplicity - forcad_nurbs_curve + forcad_nurbs_surface Function @@ -1177,181 +1177,181 @@

    Procedures

    get_ng - forcad_nurbs_volume + forcad_nurbs_curve Function get_ng - forcad_nurbs_surface + forcad_nurbs_volume Function get_ng - forcad_nurbs_curve + forcad_nurbs_surface Function get_Wc_all - forcad_nurbs_volume + forcad_nurbs_curve Function get_Wc_all - forcad_nurbs_surface + forcad_nurbs_volume Function get_Wc_all - forcad_nurbs_curve + forcad_nurbs_surface Function get_Wci - forcad_nurbs_volume + forcad_nurbs_curve Function get_Wci - forcad_nurbs_surface + forcad_nurbs_volume Function get_Wci - forcad_nurbs_curve + forcad_nurbs_surface Function get_Xc_all - forcad_nurbs_volume + forcad_nurbs_curve Function get_Xc_all - forcad_nurbs_surface + forcad_nurbs_volume Function get_Xc_all - forcad_nurbs_curve + forcad_nurbs_surface Function get_Xci - forcad_nurbs_volume + forcad_nurbs_curve Function get_Xci - forcad_nurbs_surface + forcad_nurbs_volume Function get_Xci - forcad_nurbs_curve + forcad_nurbs_surface Function get_Xcid - forcad_nurbs_volume + forcad_nurbs_curve Function get_Xcid - forcad_nurbs_surface + forcad_nurbs_volume Function get_Xcid - forcad_nurbs_curve + forcad_nurbs_surface Function get_Xg_all - forcad_nurbs_volume + forcad_nurbs_curve Function get_Xg_all - forcad_nurbs_surface + forcad_nurbs_volume Function get_Xg_all - forcad_nurbs_curve + forcad_nurbs_surface Function get_Xgi - forcad_nurbs_volume + forcad_nurbs_curve Function get_Xgi - forcad_nurbs_surface + forcad_nurbs_volume Function get_Xgi - forcad_nurbs_curve + forcad_nurbs_surface Function get_Xgid - forcad_nurbs_volume + forcad_nurbs_curve Function get_Xgid - forcad_nurbs_surface + forcad_nurbs_volume Function get_Xgid - forcad_nurbs_curve + forcad_nurbs_surface Function get_Xt - forcad_nurbs_volume + forcad_nurbs_curve Function get_Xt - forcad_nurbs_surface + forcad_nurbs_volume Function get_Xt - forcad_nurbs_curve + forcad_nurbs_surface Function @@ -1369,19 +1369,19 @@

    Procedures

    insert_knots - forcad_nurbs_volume + forcad_nurbs_curve Subroutine insert_knots - forcad_nurbs_surface + forcad_nurbs_volume Subroutine insert_knots - forcad_nurbs_curve + forcad_nurbs_surface Subroutine @@ -1393,19 +1393,19 @@

    Procedures

    is_rational - forcad_nurbs_volume + forcad_nurbs_curve Function is_rational - forcad_nurbs_surface + forcad_nurbs_volume Function is_rational - forcad_nurbs_curve + forcad_nurbs_surface Function @@ -1429,37 +1429,37 @@

    Procedures

    modify_Wc - forcad_nurbs_volume + forcad_nurbs_curve Subroutine modify_Wc - forcad_nurbs_surface + forcad_nurbs_volume Subroutine modify_Wc - forcad_nurbs_curve + forcad_nurbs_surface Subroutine modify_Xc - forcad_nurbs_volume + forcad_nurbs_curve Subroutine modify_Xc - forcad_nurbs_surface + forcad_nurbs_volume Subroutine modify_Xc - forcad_nurbs_curve + forcad_nurbs_surface Subroutine @@ -1483,37 +1483,37 @@

    Procedures

    nearest_point - forcad_nurbs_volume + forcad_nurbs_curve Subroutine nearest_point - forcad_nurbs_surface + forcad_nurbs_volume Subroutine nearest_point - forcad_nurbs_curve + forcad_nurbs_surface Subroutine nearest_point2 - forcad_nurbs_volume + forcad_nurbs_curve Subroutine nearest_point2 - forcad_nurbs_surface + forcad_nurbs_volume Subroutine nearest_point2 - forcad_nurbs_curve + forcad_nurbs_surface Subroutine @@ -1561,19 +1561,19 @@

    Procedures

    remove_knots - forcad_nurbs_volume + forcad_nurbs_curve Subroutine remove_knots - forcad_nurbs_surface + forcad_nurbs_volume Subroutine remove_knots - forcad_nurbs_curve + forcad_nurbs_surface Subroutine @@ -1591,37 +1591,37 @@

    Procedures

    rotate_Xc - forcad_nurbs_volume + forcad_nurbs_curve Subroutine rotate_Xc - forcad_nurbs_surface + forcad_nurbs_volume Subroutine rotate_Xc - forcad_nurbs_curve + forcad_nurbs_surface Subroutine rotate_Xg - forcad_nurbs_volume + forcad_nurbs_curve Subroutine rotate_Xg - forcad_nurbs_surface + forcad_nurbs_volume Subroutine rotate_Xg - forcad_nurbs_curve + forcad_nurbs_surface Subroutine @@ -1633,97 +1633,97 @@

    Procedures

    set1 + forcad_nurbs_curve + Subroutine +

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

    + + + set1 forcad_nurbs_volume Subroutine

    Set control points and weights for the NURBS volume object.

    - set1 + set1 forcad_nurbs_surface Subroutine

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

    - set1 + set1a forcad_nurbs_curve Subroutine

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

    - set1a + set2 forcad_nurbs_curve Subroutine -

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

    +

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

    - set2 + set2 forcad_nurbs_volume Subroutine

    Set control points and weights for the NURBS volume object.

    - set2 + set2 forcad_nurbs_surface Subroutine

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

    - set2 + set3 forcad_nurbs_curve Subroutine -

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

    +

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

    - set3 + set3 forcad_nurbs_volume Subroutine

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

    - set3 + set3 forcad_nurbs_surface Subroutine

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

    - - - set3 - forcad_nurbs_curve - Subroutine -

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

    set4 - forcad_nurbs_volume + forcad_nurbs_curve Subroutine set4 - forcad_nurbs_surface + forcad_nurbs_volume Subroutine set4 - forcad_nurbs_curve + forcad_nurbs_surface Subroutine set_C - forcad_nurbs_volume + forcad_nurbs_curve Subroutine set_C - forcad_nurbs_surface + forcad_nurbs_volume Subroutine set_C - forcad_nurbs_curve + forcad_nurbs_surface Subroutine @@ -1735,55 +1735,55 @@

    Procedures

    set_elem - forcad_nurbs_volume + forcad_nurbs_curve Subroutine set_elem - forcad_nurbs_surface + forcad_nurbs_volume Subroutine set_elem - forcad_nurbs_curve + forcad_nurbs_surface Subroutine set_elem_Xc_vis - forcad_nurbs_volume + forcad_nurbs_curve Subroutine set_elem_Xc_vis - forcad_nurbs_surface + forcad_nurbs_volume Subroutine set_elem_Xc_vis - forcad_nurbs_curve + forcad_nurbs_surface Subroutine set_elem_Xg_vis - forcad_nurbs_volume + forcad_nurbs_curve Subroutine set_elem_Xg_vis - forcad_nurbs_surface + forcad_nurbs_volume Subroutine set_elem_Xg_vis - forcad_nurbs_curve + forcad_nurbs_surface Subroutine @@ -1831,19 +1831,19 @@

    Procedures

    show - forcad_nurbs_volume + forcad_nurbs_curve Subroutine show - forcad_nurbs_surface + forcad_nurbs_volume Subroutine show - forcad_nurbs_curve + forcad_nurbs_surface Subroutine @@ -1855,37 +1855,37 @@

    Procedures

    translate_Xc - forcad_nurbs_volume + forcad_nurbs_curve Subroutine translate_Xc - forcad_nurbs_surface + forcad_nurbs_volume Subroutine translate_Xc - forcad_nurbs_curve + forcad_nurbs_surface Subroutine translate_Xg - forcad_nurbs_volume + forcad_nurbs_curve Subroutine translate_Xg - forcad_nurbs_surface + forcad_nurbs_volume Subroutine translate_Xg - forcad_nurbs_curve + forcad_nurbs_surface Subroutine @@ -1914,17 +1914,17 @@

    Procedures

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

    Procedures

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

    Procedures

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

    Procedures

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

    Procedures

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

    Procedures

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

    Procedures

    interface~compute_multiplicity - -compute_multiplicity + +compute_multiplicity @@ -1986,38 +1986,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 @@ -2025,8 +2025,8 @@

    Procedures

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

    Procedures

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

    Procedures

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

    Procedures

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

    Procedures

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

    Procedures

    interface~dyad - -dyad + +dyad @@ -2079,23 +2079,23 @@

    Procedures

    proc~dyad_t1_t1 - -dyad_t1_t1 + +dyad_t1_t1 interface~dyad->proc~dyad_t1_t1 - - + + interface~elemconn_c0 - -elemConn_C0 + +elemConn_C0 @@ -2103,53 +2103,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 @@ -2157,53 +2157,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~gauss_leg - -gauss_leg + +gauss_leg @@ -2211,53 +2211,53 @@

    Procedures

    proc~gauss_legendre_1d - -gauss_legendre_1D + +gauss_legendre_1D interface~gauss_leg->proc~gauss_legendre_1d - - + + proc~gauss_legendre_2d - -gauss_legendre_2D + +gauss_legendre_2D interface~gauss_leg->proc~gauss_legendre_2d - - + + proc~gauss_legendre_3d - -gauss_legendre_3D + +gauss_legendre_3D interface~gauss_leg->proc~gauss_legendre_3d - - + + interface~ndgrid - -ndgrid + +ndgrid @@ -2265,38 +2265,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 @@ -2304,8 +2304,8 @@

    Procedures

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

    Procedures

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

    Procedures

    interface~unique - -unique + +unique @@ -2331,389 +2331,389 @@

    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_curve%basis proc~basis_scalar - - -nurbs_volume%basis_scalar + + +nurbs_curve%basis_scalar none~basis->proc~basis_scalar - - + + proc~basis_vector - - -nurbs_volume%basis_vector + + +nurbs_curve%basis_vector none~basis->proc~basis_vector - - + + none~basis~2 - - -nurbs_surface%basis + + +nurbs_volume%basis proc~basis_scalar~2 - - -nurbs_surface%basis_scalar + + +nurbs_volume%basis_scalar none~basis~2->proc~basis_scalar~2 - - + + proc~basis_vector~2 - - -nurbs_surface%basis_vector + + +nurbs_volume%basis_vector none~basis~2->proc~basis_vector~2 - - + + none~basis~3 - - -nurbs_curve%basis + + +nurbs_surface%basis proc~basis_scalar~3 - - -nurbs_curve%basis_scalar + + +nurbs_surface%basis_scalar none~basis~3->proc~basis_scalar~3 - - + + proc~basis_vector~3 - - -nurbs_curve%basis_vector + + +nurbs_surface%basis_vector none~basis~3->proc~basis_vector~3 - - + + none~derivative - - -nurbs_volume%derivative + + +nurbs_curve%derivative proc~derivative_scalar - - -nurbs_volume%derivative_scalar + + +nurbs_curve%derivative_scalar none~derivative->proc~derivative_scalar - - + + proc~derivative_vector - - -nurbs_volume%derivative_vector + + +nurbs_curve%derivative_vector none~derivative->proc~derivative_vector - - + + none~derivative2 - - -nurbs_volume%derivative2 + + +nurbs_curve%derivative2 proc~derivative2_scalar - - -nurbs_volume%derivative2_scalar + + +nurbs_curve%derivative2_scalar none~derivative2->proc~derivative2_scalar - - + + proc~derivative2_vector - - -nurbs_volume%derivative2_vector + + +nurbs_curve%derivative2_vector none~derivative2->proc~derivative2_vector - - + + none~derivative2~2 - - -nurbs_surface%derivative2 + + +nurbs_volume%derivative2 proc~derivative2_scalar~2 - - -nurbs_surface%derivative2_scalar + + +nurbs_volume%derivative2_scalar none~derivative2~2->proc~derivative2_scalar~2 - - + + proc~derivative2_vector~2 - - -nurbs_surface%derivative2_vector + + +nurbs_volume%derivative2_vector none~derivative2~2->proc~derivative2_vector~2 - - + + none~derivative2~3 - - -nurbs_curve%derivative2 + + +nurbs_surface%derivative2 proc~derivative2_scalar~3 - - -nurbs_curve%derivative2_scalar + + +nurbs_surface%derivative2_scalar none~derivative2~3->proc~derivative2_scalar~3 - - + + proc~derivative2_vector~3 - - -nurbs_curve%derivative2_vector + + +nurbs_surface%derivative2_vector none~derivative2~3->proc~derivative2_vector~3 - - + + none~derivative~2 - - -nurbs_surface%derivative + + +nurbs_volume%derivative proc~derivative_scalar~2 - - -nurbs_surface%derivative_scalar + + +nurbs_volume%derivative_scalar none~derivative~2->proc~derivative_scalar~2 - - + + proc~derivative_vector~2 - - -nurbs_surface%derivative_vector + + +nurbs_volume%derivative_vector none~derivative~2->proc~derivative_vector~2 - - + + none~derivative~3 - - -nurbs_curve%derivative + + +nurbs_surface%derivative proc~derivative_scalar~3 - - -nurbs_curve%derivative_scalar + + +nurbs_surface%derivative_scalar none~derivative~3->proc~derivative_scalar~3 - - + + proc~derivative_vector~3 - - -nurbs_curve%derivative_vector + + +nurbs_surface%derivative_vector none~derivative~3->proc~derivative_vector~3 - - + + - + -none~get_degree - - -nurbs_volume%get_degree +none~get_degree~2 + + +nurbs_volume%get_degree @@ -2721,38 +2721,38 @@

    Procedures

    proc~get_degree_all - -nurbs_volume%get_degree_all + +nurbs_volume%get_degree_all - + -none~get_degree->proc~get_degree_all - - +none~get_degree~2->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~2->proc~get_degree_dir + + - + -none~get_degree~2 - - -nurbs_surface%get_degree +none~get_degree~3 + + +nurbs_surface%get_degree @@ -2760,155 +2760,155 @@

    Procedures

    proc~get_degree_all~2 - -nurbs_surface%get_degree_all + +nurbs_surface%get_degree_all - + -none~get_degree~2->proc~get_degree_all~2 - - +none~get_degree~3->proc~get_degree_all~2 + + proc~get_degree_dir~2 - -nurbs_surface%get_degree_dir + +nurbs_surface%get_degree_dir - + -none~get_degree~2->proc~get_degree_dir~2 - - +none~get_degree~3->proc~get_degree_dir~2 + + none~get_knot - - -nurbs_volume%get_knot + + +nurbs_curve%get_knot proc~get_knot_all - - -nurbs_volume%get_knot_all + + +nurbs_curve%get_knot_all none~get_knot->proc~get_knot_all - - + + proc~get_knoti - - -nurbs_volume%get_knoti + + +nurbs_curve%get_knoti none~get_knot->proc~get_knoti - - + + none~get_knot~2 - - -nurbs_surface%get_knot + + +nurbs_volume%get_knot proc~get_knot_all~2 - - -nurbs_surface%get_knot_all + + +nurbs_volume%get_knot_all none~get_knot~2->proc~get_knot_all~2 - - + + proc~get_knoti~2 - - -nurbs_surface%get_knoti + + +nurbs_volume%get_knoti none~get_knot~2->proc~get_knoti~2 - - + + none~get_knot~3 - - -nurbs_curve%get_knot + + +nurbs_surface%get_knot proc~get_knot_all~3 - - -nurbs_curve%get_knot_all + + +nurbs_surface%get_knot_all none~get_knot~3->proc~get_knot_all~3 - - + + proc~get_knoti~3 - - -nurbs_curve%get_knoti + + +nurbs_surface%get_knoti none~get_knot~3->proc~get_knoti~3 - - + + - + -none~get_nc - - -nurbs_volume%get_nc +none~get_nc~2 + + +nurbs_volume%get_nc @@ -2916,38 +2916,38 @@

    Procedures

    proc~get_nc_all - -nurbs_volume%get_nc_all + +nurbs_volume%get_nc_all - + -none~get_nc->proc~get_nc_all - - +none~get_nc~2->proc~get_nc_all + + proc~get_nc_dir - -nurbs_volume%get_nc_dir + +nurbs_volume%get_nc_dir - + -none~get_nc->proc~get_nc_dir - - +none~get_nc~2->proc~get_nc_dir + + - + -none~get_nc~2 - - -nurbs_surface%get_nc +none~get_nc~3 + + +nurbs_surface%get_nc @@ -2955,905 +2955,905 @@

    Procedures

    proc~get_nc_all~2 - -nurbs_surface%get_nc_all + +nurbs_surface%get_nc_all - + -none~get_nc~2->proc~get_nc_all~2 - - +none~get_nc~3->proc~get_nc_all~2 + + proc~get_nc_dir~2 - -nurbs_surface%get_nc_dir + +nurbs_surface%get_nc_dir - + -none~get_nc~2->proc~get_nc_dir~2 - - +none~get_nc~3->proc~get_nc_dir~2 + + none~get_wc - - -nurbs_volume%get_Wc + + +nurbs_curve%get_Wc proc~get_wc_all - - -nurbs_volume%get_Wc_all + + +nurbs_curve%get_Wc_all none~get_wc->proc~get_wc_all - - + + proc~get_wci - - -nurbs_volume%get_Wci + + +nurbs_curve%get_Wci none~get_wc->proc~get_wci - - + + none~get_wc~2 - - -nurbs_surface%get_Wc + + +nurbs_volume%get_Wc proc~get_wc_all~2 - - -nurbs_surface%get_Wc_all + + +nurbs_volume%get_Wc_all none~get_wc~2->proc~get_wc_all~2 - - + + proc~get_wci~2 - - -nurbs_surface%get_Wci + + +nurbs_volume%get_Wci none~get_wc~2->proc~get_wci~2 - - + + none~get_wc~3 - - -nurbs_curve%get_Wc + + +nurbs_surface%get_Wc proc~get_wc_all~3 - - -nurbs_curve%get_Wc_all + + +nurbs_surface%get_Wc_all none~get_wc~3->proc~get_wc_all~3 - - + + proc~get_wci~3 - - -nurbs_curve%get_Wci + + +nurbs_surface%get_Wci none~get_wc~3->proc~get_wci~3 - - + + none~get_xc - - -nurbs_volume%get_Xc + + +nurbs_curve%get_Xc proc~get_xc_all - - -nurbs_volume%get_Xc_all + + +nurbs_curve%get_Xc_all none~get_xc->proc~get_xc_all - - + + proc~get_xci - - -nurbs_volume%get_Xci + + +nurbs_curve%get_Xci none~get_xc->proc~get_xci - - + + proc~get_xcid - - -nurbs_volume%get_Xcid + + +nurbs_curve%get_Xcid none~get_xc->proc~get_xcid - - + + none~get_xc~2 - - -nurbs_surface%get_Xc + + +nurbs_volume%get_Xc proc~get_xc_all~2 - - -nurbs_surface%get_Xc_all + + +nurbs_volume%get_Xc_all none~get_xc~2->proc~get_xc_all~2 - - + + proc~get_xcid~2 - - -nurbs_surface%get_Xcid + + +nurbs_volume%get_Xcid none~get_xc~2->proc~get_xcid~2 - - + + proc~get_xci~2 - - -nurbs_surface%get_Xci + + +nurbs_volume%get_Xci none~get_xc~2->proc~get_xci~2 - - + + none~get_xc~3 - - -nurbs_curve%get_Xc + + +nurbs_surface%get_Xc proc~get_xc_all~3 - - -nurbs_curve%get_Xc_all + + +nurbs_surface%get_Xc_all none~get_xc~3->proc~get_xc_all~3 - - + + proc~get_xcid~3 - - -nurbs_curve%get_Xcid + + +nurbs_surface%get_Xcid none~get_xc~3->proc~get_xcid~3 - - + + proc~get_xci~3 - - -nurbs_curve%get_Xci + + +nurbs_surface%get_Xci none~get_xc~3->proc~get_xci~3 - - + + none~get_xg - - -nurbs_volume%get_Xg + + +nurbs_curve%get_Xg proc~get_xg_all - - -nurbs_volume%get_Xg_all + + +nurbs_curve%get_Xg_all none~get_xg->proc~get_xg_all - - + + proc~get_xgi - - -nurbs_volume%get_Xgi + + +nurbs_curve%get_Xgi none~get_xg->proc~get_xgi - - + + proc~get_xgid - - -nurbs_volume%get_Xgid + + +nurbs_curve%get_Xgid none~get_xg->proc~get_xgid - - + + none~get_xg~2 - - -nurbs_surface%get_Xg + + +nurbs_volume%get_Xg proc~get_xg_all~2 - - -nurbs_surface%get_Xg_all + + +nurbs_volume%get_Xg_all none~get_xg~2->proc~get_xg_all~2 - - + + proc~get_xgid~2 - - -nurbs_surface%get_Xgid + + +nurbs_volume%get_Xgid none~get_xg~2->proc~get_xgid~2 - - + + proc~get_xgi~2 - - -nurbs_surface%get_Xgi + + +nurbs_volume%get_Xgi none~get_xg~2->proc~get_xgi~2 - - + + none~get_xg~3 - - -nurbs_curve%get_Xg + + +nurbs_surface%get_Xg proc~get_xg_all~3 - - -nurbs_curve%get_Xg_all + + +nurbs_surface%get_Xg_all none~get_xg~3->proc~get_xg_all~3 - - + + proc~get_xgid~3 - - -nurbs_curve%get_Xgid + + +nurbs_surface%get_Xgid none~get_xg~3->proc~get_xgid~3 - - + + proc~get_xgi~3 - - -nurbs_curve%get_Xgi + + +nurbs_surface%get_Xgi none~get_xg~3->proc~get_xgi~3 - - + + none~set - - -nurbs_volume%set + + +nurbs_curve%set proc~set1 - - -nurbs_volume%set1 + + +nurbs_curve%set1 none~set->proc~set1 - - + + + + + +proc~set1a + + +nurbs_curve%set1a + + + + + +none~set->proc~set1a + + proc~set2 - - -nurbs_volume%set2 + + +nurbs_curve%set2 - + none~set->proc~set2 - - + + proc~set3 - - -nurbs_volume%set3 + + +nurbs_curve%set3 - + none~set->proc~set3 - - + + proc~set4 - - -nurbs_volume%set4 + + +nurbs_curve%set4 - + none~set->proc~set4 - - + + none~set~2 - - -nurbs_surface%set + + +nurbs_volume%set proc~set1~2 - - -nurbs_surface%set1 + + +nurbs_volume%set1 - + none~set~2->proc~set1~2 - - + + proc~set2~2 - - -nurbs_surface%set2 + + +nurbs_volume%set2 - + none~set~2->proc~set2~2 - - + + proc~set3~2 - - -nurbs_surface%set3 + + +nurbs_volume%set3 - + none~set~2->proc~set3~2 - - + + proc~set4~2 - - -nurbs_surface%set4 + + +nurbs_volume%set4 - + none~set~2->proc~set4~2 - - + + none~set~3 - - -nurbs_curve%set - - - - - -proc~set1a - - -nurbs_curve%set1a + + +nurbs_surface%set - - -none~set~3->proc~set1a - - - proc~set1~3 - - -nurbs_curve%set1 + + +nurbs_surface%set1 none~set~3->proc~set1~3 - - + + proc~set2~3 - - -nurbs_curve%set2 + + +nurbs_surface%set2 none~set~3->proc~set2~3 - - + + proc~set3~3 - - -nurbs_curve%set3 + + +nurbs_surface%set3 none~set~3->proc~set3~3 - - + + proc~set4~3 - - -nurbs_curve%set4 + + +nurbs_surface%set4 none~set~3->proc~set4~3 - - + + proc~ansatz - - -nurbs_volume%ansatz + + +nurbs_curve%ansatz - + -proc~ansatz->interface~gauss_leg - - +proc~ansatz->interface~dyad + + - + -proc~ansatz->interface~ndgrid - - +proc~ansatz->interface~gauss_leg + + proc~ansatz->interface~unique - - + + proc~ansatz->none~derivative - - + + proc~ansatz->none~set - - + + proc~cmp_elem - - -nurbs_volume%cmp_elem + + +nurbs_curve%cmp_elem proc~ansatz->proc~cmp_elem - - - - - -proc~det - - -det - - - - - -proc~ansatz->proc~det - - - - - -proc~inv - - -inv - - - - - -proc~ansatz->proc~inv - - + + proc~ansatz~2 - - -nurbs_surface%ansatz + + +nurbs_volume%ansatz - + proc~ansatz~2->interface~gauss_leg - - + + - + proc~ansatz~2->interface~ndgrid - - + + - + proc~ansatz~2->interface~unique - - + + - + proc~ansatz~2->none~derivative~2 - - + + - + proc~ansatz~2->none~set~2 - - + + proc~cmp_elem~2 - - -nurbs_surface%cmp_elem + + +nurbs_volume%cmp_elem - + proc~ansatz~2->proc~cmp_elem~2 - - + + + + + +proc~det + + +det + + - + proc~ansatz~2->proc~det - - + + + + + +proc~inv + + +inv + + - + proc~ansatz~2->proc~inv - - + + proc~ansatz~3 - - -nurbs_curve%ansatz + + +nurbs_surface%ansatz - - -proc~ansatz~3->interface~dyad - - - - + proc~ansatz~3->interface~gauss_leg - - + + + + + +proc~ansatz~3->interface~ndgrid + + - + proc~ansatz~3->interface~unique - - + + - + proc~ansatz~3->none~derivative~3 - - + + - + proc~ansatz~3->none~set~3 - - + + proc~cmp_elem~3 - - -nurbs_curve%cmp_elem + + +nurbs_surface%cmp_elem - + proc~ansatz~3->proc~cmp_elem~3 - - + + + + + +proc~ansatz~3->proc~det + + + + + +proc~ansatz~3->proc~inv + + proc~basis_bernstein - -basis_bernstein + +basis_bernstein @@ -3861,8 +3861,8 @@

    Procedures

    proc~basis_bspline - -basis_bspline + +basis_bspline @@ -3870,8 +3870,8 @@

    Procedures

    proc~basis_bspline_2der - -basis_bspline_2der + +basis_bspline_2der @@ -3879,128 +3879,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_curve%is_rational proc~basis_scalar->proc~is_rational - - + + proc~basis_scalar~2->interface~compute_tgc~2 - - + + proc~is_rational~2 - - -nurbs_surface%is_rational + + +nurbs_volume%is_rational proc~basis_scalar~2->proc~is_rational~2 - - + + proc~basis_scalar~3->interface~compute_tgc~3 - - + + proc~is_rational~3 - - -nurbs_curve%is_rational + + +nurbs_surface%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->interface~ndgrid - - + + - + proc~basis_vector~2->proc~is_rational~2 - - + + - + proc~basis_vector~3->interface~compute_tgc~3 - - + + + + + +proc~basis_vector~3->interface~ndgrid + + proc~basis_vector~3->proc~is_rational~3 - - + + proc~bincoeff - -bincoeff + +bincoeff @@ -4008,233 +4008,233 @@

    Procedures

    proc~factln - -factln + +factln proc~bincoeff->proc~factln - - + + proc~cmp_area - -nurbs_surface%cmp_area + +nurbs_surface%cmp_area - + -proc~cmp_area->proc~ansatz~2 - - +proc~cmp_area->proc~ansatz~3 + + - + -proc~cmp_area->proc~cmp_elem~2 - - +proc~cmp_area->proc~cmp_elem~3 + + proc~cmp_degree - - -nurbs_volume%cmp_degree + + +nurbs_curve%cmp_degree proc~get_multiplicity - - -nurbs_volume%get_multiplicity + + +nurbs_curve%get_multiplicity proc~cmp_degree->proc~get_multiplicity - - + + proc~cmp_degreeface - -nurbs_volume%cmp_degreeFace + +nurbs_volume%cmp_degreeFace proc~cmp_degree~2 - - -nurbs_surface%cmp_degree + + +nurbs_volume%cmp_degree proc~get_multiplicity~2 - - -nurbs_surface%get_multiplicity + + +nurbs_volume%get_multiplicity proc~cmp_degree~2->proc~get_multiplicity~2 - - + + proc~cmp_degree~3 - - -nurbs_curve%cmp_degree + + +nurbs_surface%cmp_degree proc~get_multiplicity~3 - - -nurbs_curve%get_multiplicity + + +nurbs_surface%get_multiplicity proc~cmp_degree~3->proc~get_multiplicity~3 - - + + 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_curve%cmp_elem_Xc_vis proc~cmp_elem_xc_vis->interface~elemconn_c0 - - + + proc~cmp_elem_xc_vis~2 - - -nurbs_surface%cmp_elem_Xc_vis + + +nurbs_volume%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 + + +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 + + +nurbs_curve%cmp_elem_Xg_vis proc~cmp_elem_xg_vis->interface~elemconn_c0 - - + + proc~cmp_elem_xg_vis~2 - - -nurbs_surface%cmp_elem_Xg_vis + + +nurbs_volume%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 + + +nurbs_surface%cmp_elem_Xg_vis proc~cmp_elem_xg_vis~3->interface~elemconn_c0 - - + + proc~cmp_elemface - -nurbs_volume%cmp_elemFace + +nurbs_volume%cmp_elemFace @@ -4242,8 +4242,8 @@

    Procedures

    proc~cmp_elemface_xc_vis - -nurbs_volume%cmp_elemFace_Xc_vis + +nurbs_volume%cmp_elemFace_Xc_vis @@ -4251,668 +4251,668 @@

    Procedures

    proc~cmp_elemface_xg_vis - -nurbs_volume%cmp_elemFace_Xg_vis + +nurbs_volume%cmp_elemFace_Xg_vis 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->interface~elemconn_cn - - + + proc~cmp_elem~3->interface~unique - - + + proc~cmp_elem~3->proc~get_multiplicity~3 - - + + proc~cmp_length - -nurbs_curve%cmp_length + +nurbs_curve%cmp_length - + -proc~cmp_length->proc~ansatz~3 - - +proc~cmp_length->proc~ansatz + + - + -proc~cmp_length->proc~cmp_elem~3 - - +proc~cmp_length->proc~cmp_elem + + proc~cmp_nc - - -nurbs_volume%cmp_nc + + +nurbs_curve%cmp_nc proc~cmp_nc->interface~compute_multiplicity - - + + proc~cmp_nc~2 - - -nurbs_surface%cmp_nc + + +nurbs_volume%cmp_nc proc~cmp_nc~2->interface~compute_multiplicity - - + + proc~cmp_nc~3 - - -nurbs_curve%cmp_nc + + +nurbs_surface%cmp_nc proc~cmp_nc~3->interface~compute_multiplicity - - + + proc~cmp_volume - -nurbs_volume%cmp_volume + +nurbs_volume%cmp_volume - + -proc~cmp_volume->proc~ansatz - - +proc~cmp_volume->proc~ansatz~2 + + - + -proc~cmp_volume->proc~cmp_elem - - +proc~cmp_volume->proc~cmp_elem~2 + + proc~cmp_xg - - -nurbs_volume%cmp_Xg + + +nurbs_curve%cmp_Xg proc~cmp_xg->interface~compute_xg - - + + proc~cmp_xg->proc~is_rational - - + + proc~cmp_xg~2 - - -nurbs_surface%cmp_Xg + + +nurbs_volume%cmp_Xg proc~cmp_xg~2->interface~compute_xg~2 - - + + proc~cmp_xg~2->proc~is_rational~2 - - + + proc~cmp_xg~3 - - -nurbs_curve%cmp_Xg + + +nurbs_surface%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 - - + + proc~kron - -kron + +kron 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 - - + + proc~compute_d2tgc_nurbs_2d_vector - -compute_d2Tgc_nurbs_2d_vector + +compute_d2Tgc_nurbs_2d_vector proc~compute_d2tgc_nurbs_2d_vector->proc~basis_bspline_2der - - + + proc~compute_d2tgc_nurbs_2d_vector->proc~kron - - + + 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 - - + + proc~compute_dtgc_nurbs_2d_vector - -compute_dTgc_nurbs_2d_vector + +compute_dTgc_nurbs_2d_vector proc~compute_dtgc_nurbs_2d_vector->proc~basis_bspline_der - - + + proc~compute_dtgc_nurbs_2d_vector->proc~kron - - + + 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 @@ -4920,938 +4920,938 @@

    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 - - + + proc~compute_tgc_bspline_3d_scalar - -compute_Tgc_bspline_3d_scalar + +compute_Tgc_bspline_3d_scalar proc~compute_tgc_bspline_3d_scalar->proc~basis_bspline - - + + proc~compute_tgc_bspline_3d_scalar->proc~kron - - + + 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_curve%create proc~create->interface~compute_xg - - - - - -proc~create->interface~ndgrid - - + + - + proc~create->proc~is_rational - - + + proc~create~2 - - -nurbs_surface%create + + +nurbs_volume%create - + proc~create~2->interface~compute_xg~2 - - + + - + proc~create~2->interface~ndgrid - - + + - + proc~create~2->proc~is_rational~2 - - + + proc~create~3 - - -nurbs_curve%create + + +nurbs_surface%create - + proc~create~3->interface~compute_xg~3 - - + + + + + +proc~create~3->interface~ndgrid + + 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->interface~ndgrid - - + + - + proc~derivative2_vector~2->proc~is_rational~2 - - + + - + proc~derivative2_vector~3->interface~compute_d2tgc~3 - - + + + + + +proc~derivative2_vector~3->interface~ndgrid + + 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->interface~ndgrid - - + + - + proc~derivative_vector~2->proc~is_rational~2 - - + + - + proc~derivative_vector~3->interface~compute_dtgc~3 - - + + + + + +proc~derivative_vector~3->interface~ndgrid + + proc~derivative_vector~3->proc~is_rational~3 - - + + proc~elevate_degree - - -nurbs_volume%elevate_degree + + +nurbs_curve%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->proc~is_rational + + proc~elevate_degree_a_5_9->interface~compute_multiplicity - - + + proc~elevate_degree_a_5_9->proc~bincoeff - - + + proc~elevate_degree~2 - - -nurbs_surface%elevate_degree + + +nurbs_volume%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_curve%elevate_degree + + +nurbs_surface%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_curve%export_Xc proc~export_xc->proc~cmp_elem_xc_vis - - + + proc~export_xc~2 - - -nurbs_surface%export_Xc + + +nurbs_volume%export_Xc proc~export_xc~2->proc~cmp_elem_xc_vis~2 - - + + proc~export_xc~3 - - -nurbs_curve%export_Xc + + +nurbs_surface%export_Xc proc~export_xc~3->proc~cmp_elem_xc_vis~3 - - + + proc~export_xg - - -nurbs_volume%export_Xg + + +nurbs_curve%export_Xg proc~export_xg->proc~cmp_elem_xg_vis - - + + proc~export_xg~2 - - -nurbs_surface%export_Xg + + +nurbs_volume%export_Xg proc~export_xg~2->proc~cmp_elem_xg_vis~2 - - + + proc~export_xg~3 - - -nurbs_curve%export_Xg + + +nurbs_surface%export_Xg proc~export_xg~3->proc~cmp_elem_xg_vis~3 - - + + proc~finalize - - -nurbs_volume%finalize + + +nurbs_curve%finalize proc~finalize~2 - - -nurbs_surface%finalize + + +nurbs_volume%finalize proc~finalize~3 - - -nurbs_curve%finalize + + +nurbs_surface%finalize @@ -5859,65 +5859,65 @@

    Procedures

    proc~findspan - -findspan + +findspan gauss_legendre - -gauss_legendre + +gauss_legendre proc~gauss_legendre_1d->gauss_legendre - - + + proc~gauss_legendre_2d->interface~ndgrid - - + + proc~gauss_legendre_2d->proc~kron - - + + proc~gauss_legendre_2d->gauss_legendre - - + + proc~gauss_legendre_3d->interface~ndgrid - - + + proc~gauss_legendre_3d->proc~kron - - + + proc~gauss_legendre_3d->gauss_legendre - - + + proc~generate_xc - -generate_Xc + +generate_Xc @@ -5925,8 +5925,8 @@

    Procedures

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

    Procedures

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

    Procedures

    proc~generate_xc~4 - -generate_Xc + +generate_Xc @@ -5952,236 +5952,236 @@

    Procedures

    proc~generate_xc~5 - -generate_Xc + +generate_Xc proc~get_continuity - - -nurbs_volume%get_continuity + + +nurbs_curve%get_continuity proc~get_continuity->interface~compute_multiplicity - - + + proc~get_continuity~2 - - -nurbs_surface%get_continuity + + +nurbs_volume%get_continuity proc~get_continuity~2->interface~compute_multiplicity - - + + proc~get_continuity~3 - - -nurbs_curve%get_continuity + + +nurbs_surface%get_continuity proc~get_continuity~3->interface~compute_multiplicity - - + + proc~get_degree - -nurbs_curve%get_degree + +nurbs_curve%get_degree proc~get_elem - - -nurbs_volume%get_elem + + +nurbs_curve%get_elem proc~get_elem_xc_vis - - -nurbs_volume%get_elem_Xc_vis + + +nurbs_curve%get_elem_Xc_vis proc~get_elem_xc_vis~2 - - -nurbs_surface%get_elem_Xc_vis + + +nurbs_volume%get_elem_Xc_vis proc~get_elem_xc_vis~3 - - -nurbs_curve%get_elem_Xc_vis + + +nurbs_surface%get_elem_Xc_vis proc~get_elem_xg_vis - - -nurbs_volume%get_elem_Xg_vis + + +nurbs_curve%get_elem_Xg_vis proc~get_elem_xg_vis~2 - - -nurbs_surface%get_elem_Xg_vis + + +nurbs_volume%get_elem_Xg_vis proc~get_elem_xg_vis~3 - - -nurbs_curve%get_elem_Xg_vis + + +nurbs_surface%get_elem_Xg_vis proc~get_elem~2 - - -nurbs_surface%get_elem + + +nurbs_volume%get_elem proc~get_elem~3 - - -nurbs_curve%get_elem + + +nurbs_surface%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 - -nurbs_curve%get_nc + +nurbs_curve%get_nc proc~get_nc_dir->interface~compute_multiplicity - - + + proc~get_nc_dir~2->interface~compute_multiplicity - - + + proc~get_ng - - -nurbs_volume%get_ng + + +nurbs_curve%get_ng proc~get_ng~2 - - -nurbs_surface%get_ng + + +nurbs_volume%get_ng proc~get_ng~3 - - -nurbs_curve%get_ng + + +nurbs_surface%get_ng proc~get_xt - - -nurbs_volume%get_Xt + + +nurbs_curve%get_Xt proc~get_xt~2 - - -nurbs_surface%get_Xt + + +nurbs_volume%get_Xt proc~get_xt~3 - - -nurbs_curve%get_Xt + + +nurbs_surface%get_Xt @@ -6189,8 +6189,8 @@

    Procedures

    proc~hexahedron_xc - -hexahedron_Xc + +hexahedron_Xc @@ -6198,152 +6198,152 @@

    Procedures

    proc~insert_knot_a_5_1 - -insert_knot_A_5_1 + +insert_knot_A_5_1 proc~insert_knots - - -nurbs_volume%insert_knots + + +nurbs_curve%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->proc~is_rational + + proc~insert_knots~2 - - -nurbs_surface%insert_knots + + +nurbs_volume%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_curve%insert_knots + + +nurbs_surface%insert_knots - + proc~insert_knots~3->interface~compute_multiplicity - - + + + + + +proc~insert_knots~3->none~get_knot~3 + + 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~inv->proc~det - - + + proc~inv->proc~inv - - + + proc~isinf - -isinf + +isinf @@ -6351,377 +6351,377 @@

    Procedures

    proc~isnan - -isnan + +isnan proc~modify_wc - - -nurbs_volume%modify_Wc + + +nurbs_curve%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_surface%modify_Wc + + +nurbs_volume%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_curve%modify_Wc + + +nurbs_surface%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_curve%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_surface%modify_Xc + + +nurbs_volume%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_curve%modify_Xc + + +nurbs_surface%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_curve%nearest_point - + -proc~nearest_point->interface~nearest_point_help_3d - - +proc~nearest_point->interface~nearest_point_help_1d + + proc~nearest_point2 - - -nurbs_volume%nearest_point2 + + +nurbs_curve%nearest_point2 proc~nearest_point2->none~derivative2 - - + + proc~nearest_point2->proc~cmp_xg - - + + proc~nearest_point2->proc~create - - + + proc~nearest_point2->proc~finalize - - - - - -proc~nearest_point2->proc~inv - - + + - + proc~nearest_point2->proc~nearest_point - - + + proc~nearest_point2~2 - - -nurbs_surface%nearest_point2 + + +nurbs_volume%nearest_point2 - + 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~2->proc~inv - - + + proc~nearest_point~2 - - -nurbs_surface%nearest_point + + +nurbs_volume%nearest_point - + proc~nearest_point2~2->proc~nearest_point~2 - - + + proc~nearest_point2~3 - - -nurbs_curve%nearest_point2 + + +nurbs_surface%nearest_point2 - + 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_point2~3->proc~inv + + proc~nearest_point~3 - - -nurbs_curve%nearest_point + + +nurbs_surface%nearest_point proc~nearest_point2~3->proc~nearest_point~3 - - + + proc~nearest_point_help_1d - -nearest_point_help_1d + +nearest_point_help_1d @@ -6729,8 +6729,8 @@

    Procedures

    proc~nearest_point_help_2d - -nearest_point_help_2d + +nearest_point_help_2d @@ -6738,197 +6738,197 @@

    Procedures

    proc~nearest_point_help_3d - -nearest_point_help_3d + +nearest_point_help_3d - + -proc~nearest_point~2->interface~nearest_point_help_2d - - +proc~nearest_point~2->interface~nearest_point_help_3d + + - + -proc~nearest_point~3->interface~nearest_point_help_1d - - +proc~nearest_point~3->interface~nearest_point_help_2d + + 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 + + +proc~set_elem_xg_vis~2 + + +nurbs_volume%set_elem_Xg_vis - + -proc~put_to_nurbs->proc~set_elem_xg_vis - - +proc~put_to_nurbs->proc~set_elem_xg_vis~2 + + proc~remove_knots - - -nurbs_volume%remove_knots + + +nurbs_curve%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->proc~is_rational + + 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_surface%remove_knots + + +nurbs_volume%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_curve%remove_knots + + +nurbs_surface%remove_knots - + proc~remove_knots~3->interface~compute_multiplicity - - + + + + + +proc~remove_knots~3->none~get_knot~3 + + 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_curve%rotate_Xc @@ -6936,329 +6936,329 @@

    Procedures

    proc~rotation - -rotation + +rotation proc~rotate_xc->proc~rotation - - + + proc~rotate_xc~2 - - -nurbs_surface%rotate_Xc + + +nurbs_volume%rotate_Xc proc~rotate_xc~2->proc~rotation - - + + proc~rotate_xc~3 - - -nurbs_curve%rotate_Xc + + +nurbs_surface%rotate_Xc proc~rotate_xc~3->proc~rotation - - + + proc~rotate_xg - - -nurbs_volume%rotate_Xg + + +nurbs_curve%rotate_Xg proc~rotate_xg->proc~rotation - - + + proc~rotate_xg~2 - - -nurbs_surface%rotate_Xg + + +nurbs_volume%rotate_Xg proc~rotate_xg~2->proc~rotation - - + + proc~rotate_xg~3 - - -nurbs_curve%rotate_Xg + + +nurbs_surface%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~set1a->proc~cmp_degree~3 - - +proc~set1a->proc~cmp_degree + + - + proc~set1~2->proc~cmp_degree~2 - - + + - + proc~set1~2->proc~cmp_nc~2 - - + + - + proc~set1~3->proc~cmp_degree~3 - - + + - - -proc~set2->proc~cmp_nc - - + + +proc~set1~3->proc~cmp_nc~3 + + - + proc~set2->proc~compute_knot_vector - - + + - + proc~set2~2->proc~cmp_nc~2 - - + + - + proc~set2~2->proc~compute_knot_vector - - + + + + + +proc~set2~3->proc~cmp_nc~3 + + 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_curve%set_C proc~set_c->none~set - - + + proc~set_circle - -nurbs_curve%set_circle + +nurbs_curve%set_circle - + -proc~set_circle->none~set~3 - - +proc~set_circle->none~set + + proc~set_c~2 - - -nurbs_surface%set_C + + +nurbs_volume%set_C proc~set_c~2->none~set~2 - - + + proc~set_c~3 - - -nurbs_curve%set_C + + +nurbs_surface%set_C proc~set_c~3->none~set~3 - - + + proc~set_elem - - -nurbs_volume%set_elem + + +nurbs_curve%set_elem proc~set_elem_xc_vis - - -nurbs_volume%set_elem_Xc_vis + + +nurbs_curve%set_elem_Xc_vis proc~set_elem_xc_vis~2 - - -nurbs_surface%set_elem_Xc_vis + + +nurbs_volume%set_elem_Xc_vis proc~set_elem_xc_vis~3 - - -nurbs_curve%set_elem_Xc_vis + + +nurbs_surface%set_elem_Xc_vis - - -proc~set_elem_xg_vis~2 - - -nurbs_surface%set_elem_Xg_vis + + +proc~set_elem_xg_vis + + +nurbs_curve%set_elem_Xg_vis proc~set_elem_xg_vis~3 - - -nurbs_curve%set_elem_Xg_vis + + +nurbs_surface%set_elem_Xg_vis proc~set_elem~2 - - -nurbs_surface%set_elem + + +nurbs_volume%set_elem proc~set_elem~3 - - -nurbs_curve%set_elem + + +nurbs_surface%set_elem @@ -7266,206 +7266,206 @@

    Procedures

    proc~set_half_circle - -nurbs_curve%set_half_circle + +nurbs_curve%set_half_circle - + -proc~set_half_circle->none~set~3 - - +proc~set_half_circle->none~set + + proc~set_half_ring - -nurbs_volume%set_half_ring + +nurbs_volume%set_half_ring - + -proc~set_half_ring->none~set - - +proc~set_half_ring->none~set~2 + + proc~set_half_ring~2 - -nurbs_surface%set_half_ring + +nurbs_surface%set_half_ring - + -proc~set_half_ring~2->none~set~2 - - +proc~set_half_ring~2->none~set~3 + + proc~set_hexahedron - -nurbs_volume%set_hexahedron + +nurbs_volume%set_hexahedron - + -proc~set_hexahedron->none~set - - +proc~set_hexahedron->none~set~2 + + 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->none~set~2 + + proc~set_ring~2 - -nurbs_surface%set_ring + +nurbs_surface%set_ring - + -proc~set_ring~2->none~set~2 - - +proc~set_ring~2->none~set~3 + + proc~set_tetragon - -nurbs_surface%set_tetragon + +nurbs_surface%set_tetragon - + -proc~set_tetragon->none~set~2 - - +proc~set_tetragon->none~set~3 + + proc~tetragon_xc - -tetragon_Xc + +tetragon_Xc proc~set_tetragon->proc~tetragon_xc - - + + proc~show - - -nurbs_volume%show + + +nurbs_curve%show proc~show~2 - - -nurbs_surface%show + + +nurbs_volume%show proc~show~3 - - -nurbs_curve%show + + +nurbs_surface%show proc~translate_xc - - -nurbs_volume%translate_Xc + + +nurbs_curve%translate_Xc proc~translate_xc~2 - - -nurbs_surface%translate_Xc + + +nurbs_volume%translate_Xc proc~translate_xc~3 - - -nurbs_curve%translate_Xc + + +nurbs_surface%translate_Xc proc~translate_xg - - -nurbs_volume%translate_Xg + + +nurbs_curve%translate_Xg proc~translate_xg~2 - - -nurbs_surface%translate_Xg + + +nurbs_volume%translate_Xg proc~translate_xg~3 - - -nurbs_curve%translate_Xg + + +nurbs_surface%translate_Xg @@ -7473,1627 +7473,1627 @@

    Procedures

    program~compute_area - -compute_area + +compute_area - + -program~compute_area->none~set~2 - - +program~compute_area->none~set~3 + + program~compute_area->proc~cmp_area - - + + program~compute_length - -compute_length + +compute_length - + -program~compute_length->none~set~3 - - +program~compute_length->none~set + + program~compute_length->proc~cmp_length - - + + program~compute_volume - -compute_volume + +compute_volume - + -program~compute_volume->none~set - - +program~compute_volume->none~set~2 + + program~compute_volume->proc~cmp_volume - - + + program~example1_curve - -example1_curve + +example1_curve - + -program~example1_curve->none~get_knot~3 - - +program~example1_curve->none~get_knot + + - + -program~example1_curve->none~set~3 - - +program~example1_curve->none~set + + - + -program~example1_curve->proc~create~3 - - +program~example1_curve->proc~create + + - + -program~example1_curve->proc~elevate_degree~3 - - +program~example1_curve->proc~elevate_degree + + - + -program~example1_curve->proc~export_xc~3 - - +program~example1_curve->proc~export_xc + + - + -program~example1_curve->proc~export_xg~3 - - +program~example1_curve->proc~export_xg + + - + -program~example1_curve->proc~finalize~3 - - +program~example1_curve->proc~finalize + + program~example1_curve->proc~get_degree - - + + - + -program~example1_curve->proc~insert_knots~3 - - +program~example1_curve->proc~insert_knots + + - + -program~example1_curve->proc~remove_knots~3 - - +program~example1_curve->proc~remove_knots + + - + -program~example1_curve->proc~rotate_xc~3 - - +program~example1_curve->proc~rotate_xc + + - + -program~example1_curve->proc~rotate_xg~3 - - +program~example1_curve->proc~rotate_xg + + - + -program~example1_curve->proc~show~3 - - +program~example1_curve->proc~show + + - + -program~example1_curve->proc~translate_xc~3 - - +program~example1_curve->proc~translate_xc + + - + -program~example1_curve->proc~translate_xg~3 - - +program~example1_curve->proc~translate_xg + + program~example3_surface - -example3_surface + +example3_surface - + -program~example3_surface->none~get_degree~2 - - +program~example3_surface->none~get_degree~3 + + - + -program~example3_surface->none~get_knot~2 - - +program~example3_surface->none~get_knot~3 + + - + -program~example3_surface->none~set~2 - - +program~example3_surface->none~set~3 + + - + -program~example3_surface->proc~create~2 - - +program~example3_surface->proc~create~3 + + - + -program~example3_surface->proc~elevate_degree~2 - - +program~example3_surface->proc~elevate_degree~3 + + - + -program~example3_surface->proc~export_xc~2 - - +program~example3_surface->proc~export_xc~3 + + - + -program~example3_surface->proc~export_xg~2 - - +program~example3_surface->proc~export_xg~3 + + - + -program~example3_surface->proc~finalize~2 - - +program~example3_surface->proc~finalize~3 + + program~example3_surface->proc~generate_xc~2 - - + + - + -program~example3_surface->proc~insert_knots~2 - - +program~example3_surface->proc~insert_knots~3 + + - + -program~example3_surface->proc~remove_knots~2 - - +program~example3_surface->proc~remove_knots~3 + + - + -program~example3_surface->proc~rotate_xc~2 - - +program~example3_surface->proc~rotate_xc~3 + + - + -program~example3_surface->proc~rotate_xg~2 - - +program~example3_surface->proc~rotate_xg~3 + + - + -program~example3_surface->proc~show~2 - - +program~example3_surface->proc~show~3 + + - + -program~example3_surface->proc~translate_xc~2 - - +program~example3_surface->proc~translate_xc~3 + + - + -program~example3_surface->proc~translate_xg~2 - - +program~example3_surface->proc~translate_xg~3 + + program~example3_volume - -example3_volume + +example3_volume - + -program~example3_volume->none~get_degree - - +program~example3_volume->none~get_degree~2 + + - + -program~example3_volume->none~get_knot - - +program~example3_volume->none~get_knot~2 + + - + -program~example3_volume->none~set - - +program~example3_volume->none~set~2 + + program~example3_volume->proc~cmp_degreeface - - + + - + -program~example3_volume->proc~cmp_elem - - +program~example3_volume->proc~cmp_elemface + + - + -program~example3_volume->proc~cmp_elemface - - +program~example3_volume->proc~cmp_elem~2 + + - + -program~example3_volume->proc~create - - +program~example3_volume->proc~create~2 + + - + -program~example3_volume->proc~elevate_degree - - +program~example3_volume->proc~elevate_degree~2 + + - + -program~example3_volume->proc~export_xc - - +program~example3_volume->proc~export_xc~2 + + - + -program~example3_volume->proc~export_xg - - +program~example3_volume->proc~export_xg~2 + + - + -program~example3_volume->proc~finalize - - +program~example3_volume->proc~finalize~2 + + - + -program~example3_volume->proc~generate_xc~5 - - +program~example3_volume->proc~generate_xc~4 + + - + -program~example3_volume->proc~insert_knots - - +program~example3_volume->proc~insert_knots~2 + + - + -program~example3_volume->proc~remove_knots - - +program~example3_volume->proc~remove_knots~2 + + - + -program~example3_volume->proc~rotate_xc - - +program~example3_volume->proc~rotate_xc~2 + + - + -program~example3_volume->proc~rotate_xg - - +program~example3_volume->proc~rotate_xg~2 + + - + -program~example3_volume->proc~set_elem - - +program~example3_volume->proc~set_elem~2 + + - + -program~example3_volume->proc~show - - +program~example3_volume->proc~show~2 + + - + -program~example3_volume->proc~translate_xc - - +program~example3_volume->proc~translate_xc~2 + + - + -program~example3_volume->proc~translate_xg - - +program~example3_volume->proc~translate_xg~2 + + program~example_nurbs_curve - -example_nurbs_curve + +example_nurbs_curve - + -program~example_nurbs_curve->none~set~3 - - +program~example_nurbs_curve->none~set + + - + -program~example_nurbs_curve->proc~create~3 - - +program~example_nurbs_curve->proc~create + + - + -program~example_nurbs_curve->proc~export_xc~3 - - +program~example_nurbs_curve->proc~export_xc + + - + -program~example_nurbs_curve->proc~export_xg~3 - - +program~example_nurbs_curve->proc~export_xg + + - + -program~example_nurbs_curve->proc~finalize~3 - - +program~example_nurbs_curve->proc~finalize + + - + -program~example_nurbs_curve->proc~generate_xc~3 - - +program~example_nurbs_curve->proc~generate_xc + + - + -program~example_nurbs_curve->proc~show~3 - - +program~example_nurbs_curve->proc~show + + program~example_nurbs_surface - -example_nurbs_surface + +example_nurbs_surface - + -program~example_nurbs_surface->none~set~2 - - +program~example_nurbs_surface->none~set~3 + + - + -program~example_nurbs_surface->proc~create~2 - - +program~example_nurbs_surface->proc~create~3 + + - + -program~example_nurbs_surface->proc~export_xc~2 - - +program~example_nurbs_surface->proc~export_xc~3 + + - + -program~example_nurbs_surface->proc~export_xg~2 - - +program~example_nurbs_surface->proc~export_xg~3 + + - + -program~example_nurbs_surface->proc~finalize~2 - - +program~example_nurbs_surface->proc~finalize~3 + + - + -program~example_nurbs_surface->proc~generate_xc~4 - - +program~example_nurbs_surface->proc~generate_xc~3 + + - + -program~example_nurbs_surface->proc~show~2 - - +program~example_nurbs_surface->proc~show~3 + + program~example_nurbs_volume - -example_nurbs_volume + +example_nurbs_volume - + -program~example_nurbs_volume->none~set - - +program~example_nurbs_volume->none~set~2 + + - + -program~example_nurbs_volume->proc~create - - +program~example_nurbs_volume->proc~create~2 + + - + -program~example_nurbs_volume->proc~export_xc - - +program~example_nurbs_volume->proc~export_xc~2 + + - + -program~example_nurbs_volume->proc~export_xg - - +program~example_nurbs_volume->proc~export_xg~2 + + - + -program~example_nurbs_volume->proc~finalize - - +program~example_nurbs_volume->proc~finalize~2 + + - + -program~example_nurbs_volume->proc~generate_xc - - +program~example_nurbs_volume->proc~generate_xc~5 + + - + -program~example_nurbs_volume->proc~show - - +program~example_nurbs_volume->proc~show~2 + + program~example_ppm1 - -example_ppm1 + +example_ppm1 - + -program~example_ppm1->none~get_xg~2 - - +program~example_ppm1->none~get_xg~3 + + - + -program~example_ppm1->proc~create~2 - - +program~example_ppm1->proc~create~3 + + - + -program~example_ppm1->proc~finalize~2 - - +program~example_ppm1->proc~finalize~3 + + - + -program~example_ppm1->proc~get_ng~2 - - +program~example_ppm1->proc~get_ng~3 + + 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 - - + + timer_start - -timer_start + +timer_start 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~2 - - +program~example_ppm2->none~get_xg~3 + + - + -program~example_ppm2->proc~create~2 - - +program~example_ppm2->proc~create~3 + + - + -program~example_ppm2->proc~finalize~2 - - +program~example_ppm2->proc~finalize~3 + + - + -program~example_ppm2->proc~get_ng~2 - - +program~example_ppm2->proc~get_ng~3 + + - + -program~example_ppm2->proc~rotate_xc~2 - - +program~example_ppm2->proc~rotate_xc~3 + + program~example_ppm2->proc~set_half_ring~2 - - + + program~example_ppm2->proc~set_tetragon - - + + - + -program~example_ppm2->proc~translate_xc~2 - - +program~example_ppm2->proc~translate_xc~3 + + 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~2 - - +program~example_ppm3->none~get_xg~3 + + - + -program~example_ppm3->proc~create~2 - - +program~example_ppm3->proc~create~3 + + - + -program~example_ppm3->proc~finalize~2 - - +program~example_ppm3->proc~finalize~3 + + - + -program~example_ppm3->proc~get_ng~2 - - +program~example_ppm3->proc~get_ng~3 + + - + -program~example_ppm3->proc~modify_xc~2 - - +program~example_ppm3->proc~modify_xc~3 + + program~example_ppm3->proc~set_tetragon - - + + - + -program~example_ppm3->proc~translate_xc~2 - - +program~example_ppm3->proc~translate_xc~3 + + 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->none~set~2 + + - + -program~example_put_to_nurbs->proc~export_xc - - +program~example_put_to_nurbs->proc~export_xc~2 + + - + -program~example_put_to_nurbs->proc~export_xg - - +program~example_put_to_nurbs->proc~export_xg~2 + + - + -program~example_put_to_nurbs->proc~finalize - - +program~example_put_to_nurbs->proc~finalize~2 + + 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~example_put_to_nurbs->proc~show~2 + + program~nearest_point_1d - -nearest_point_1d + +nearest_point_1d - + -program~nearest_point_1d->none~set~3 - - +program~nearest_point_1d->none~set + + - + -program~nearest_point_1d->proc~create~3 - - +program~nearest_point_1d->proc~create + + - + -program~nearest_point_1d->proc~finalize~3 - - +program~nearest_point_1d->proc~finalize + + - + -program~nearest_point_1d->proc~nearest_point2~3 - - +program~nearest_point_1d->proc~nearest_point + + - + -program~nearest_point_1d->proc~nearest_point~3 - - +program~nearest_point_1d->proc~nearest_point2 + + program~nearest_point_2d - -nearest_point_2d + +nearest_point_2d - + -program~nearest_point_2d->none~set~2 - - +program~nearest_point_2d->none~set~3 + + - + -program~nearest_point_2d->proc~create~2 - - +program~nearest_point_2d->proc~create~3 + + - + -program~nearest_point_2d->proc~finalize~2 - - +program~nearest_point_2d->proc~finalize~3 + + - + -program~nearest_point_2d->proc~nearest_point2~2 - - +program~nearest_point_2d->proc~nearest_point2~3 + + - + -program~nearest_point_2d->proc~nearest_point~2 - - +program~nearest_point_2d->proc~nearest_point~3 + + program~nearest_point_2d_bench - -nearest_point_2d_bench + +nearest_point_2d_bench - + -program~nearest_point_2d_bench->proc~create~2 - - +program~nearest_point_2d_bench->proc~create~3 + + - + -program~nearest_point_2d_bench->proc~finalize~2 - - +program~nearest_point_2d_bench->proc~finalize~3 + + - + -program~nearest_point_2d_bench->proc~nearest_point~2 - - +program~nearest_point_2d_bench->proc~nearest_point~3 + + 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->none~set~2 + + - + -program~nearest_point_3d->proc~create - - +program~nearest_point_3d->proc~create~2 + + - + -program~nearest_point_3d->proc~finalize - - +program~nearest_point_3d->proc~finalize~2 + + - + -program~nearest_point_3d->proc~nearest_point - - +program~nearest_point_3d->proc~nearest_point2~2 + + - + -program~nearest_point_3d->proc~nearest_point2 - - +program~nearest_point_3d->proc~nearest_point~2 + + program~shape_c_1d - -shape_C_1d + +shape_C_1d - + -program~shape_c_1d->proc~create~3 - - +program~shape_c_1d->proc~create + + - + -program~shape_c_1d->proc~export_xc~3 - - +program~shape_c_1d->proc~export_xc + + - + -program~shape_c_1d->proc~export_xg~3 - - +program~shape_c_1d->proc~export_xg + + - + -program~shape_c_1d->proc~finalize~3 - - +program~shape_c_1d->proc~finalize + + - + -program~shape_c_1d->proc~set_c~3 - - +program~shape_c_1d->proc~set_c + + - + -program~shape_c_1d->proc~show~3 - - +program~shape_c_1d->proc~show + + program~shape_c_2d - -shape_C_2d + +shape_C_2d - + -program~shape_c_2d->proc~create~2 - - +program~shape_c_2d->proc~create~3 + + - + -program~shape_c_2d->proc~export_xc~2 - - +program~shape_c_2d->proc~export_xc~3 + + - + -program~shape_c_2d->proc~export_xg~2 - - +program~shape_c_2d->proc~export_xg~3 + + - + -program~shape_c_2d->proc~finalize~2 - - +program~shape_c_2d->proc~finalize~3 + + - + -program~shape_c_2d->proc~set_c~2 - - +program~shape_c_2d->proc~set_c~3 + + - + -program~shape_c_2d->proc~show~2 - - +program~shape_c_2d->proc~show~3 + + program~shape_c_3d - -shape_C_3d + +shape_C_3d - + -program~shape_c_3d->proc~create - - +program~shape_c_3d->proc~create~2 + + - + -program~shape_c_3d->proc~export_xc - - +program~shape_c_3d->proc~export_xc~2 + + - + -program~shape_c_3d->proc~export_xg - - +program~shape_c_3d->proc~export_xg~2 + + - + -program~shape_c_3d->proc~finalize - - +program~shape_c_3d->proc~finalize~2 + + - + -program~shape_c_3d->proc~set_c - - +program~shape_c_3d->proc~set_c~2 + + - + -program~shape_c_3d->proc~show - - +program~shape_c_3d->proc~show~2 + + program~shape_circle - -shape_circle + +shape_circle - + -program~shape_circle->proc~create~3 - - +program~shape_circle->proc~create + + - + -program~shape_circle->proc~export_xc~3 - - +program~shape_circle->proc~export_xc + + - + -program~shape_circle->proc~export_xg~3 - - +program~shape_circle->proc~export_xg + + - + -program~shape_circle->proc~finalize~3 - - +program~shape_circle->proc~finalize + + program~shape_circle->proc~set_circle - - + + - + -program~shape_circle->proc~show~3 - - +program~shape_circle->proc~show + + program~shape_half_circle - -shape_half_circle + +shape_half_circle - + -program~shape_half_circle->proc~create~3 - - +program~shape_half_circle->proc~create + + - + -program~shape_half_circle->proc~export_xc~3 - - +program~shape_half_circle->proc~export_xc + + - + -program~shape_half_circle->proc~export_xg~3 - - +program~shape_half_circle->proc~export_xg + + - + -program~shape_half_circle->proc~finalize~3 - - +program~shape_half_circle->proc~finalize + + program~shape_half_circle->proc~set_half_circle - - + + - + -program~shape_half_circle->proc~show~3 - - +program~shape_half_circle->proc~show + + program~shape_half_ring_2d - -shape_half_ring_2d + +shape_half_ring_2d - + -program~shape_half_ring_2d->proc~create~2 - - +program~shape_half_ring_2d->proc~create~3 + + - + -program~shape_half_ring_2d->proc~export_xc~2 - - +program~shape_half_ring_2d->proc~export_xc~3 + + - + -program~shape_half_ring_2d->proc~export_xg~2 - - +program~shape_half_ring_2d->proc~export_xg~3 + + - + -program~shape_half_ring_2d->proc~finalize~2 - - +program~shape_half_ring_2d->proc~finalize~3 + + program~shape_half_ring_2d->proc~set_half_ring~2 - - + + - + -program~shape_half_ring_2d->proc~show~2 - - +program~shape_half_ring_2d->proc~show~3 + + 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~create~2 + + - + -program~shape_half_ring_3d->proc~export_xc - - +program~shape_half_ring_3d->proc~export_xc~2 + + - + -program~shape_half_ring_3d->proc~export_xg - - +program~shape_half_ring_3d->proc~export_xg~2 + + - + -program~shape_half_ring_3d->proc~finalize - - +program~shape_half_ring_3d->proc~finalize~2 + + program~shape_half_ring_3d->proc~set_half_ring - - + + - + -program~shape_half_ring_3d->proc~show - - +program~shape_half_ring_3d->proc~show~2 + + program~shape_hexahedron - -shape_hexahedron + +shape_hexahedron - + -program~shape_hexahedron->proc~create - - +program~shape_hexahedron->proc~create~2 + + - + -program~shape_hexahedron->proc~export_xc - - +program~shape_hexahedron->proc~export_xc~2 + + - + -program~shape_hexahedron->proc~export_xg - - +program~shape_hexahedron->proc~export_xg~2 + + - + -program~shape_hexahedron->proc~finalize - - +program~shape_hexahedron->proc~finalize~2 + + program~shape_hexahedron->proc~set_hexahedron - - + + - + -program~shape_hexahedron->proc~show - - +program~shape_hexahedron->proc~show~2 + + program~shape_ring_2d - -shape_ring_2d + +shape_ring_2d - + -program~shape_ring_2d->proc~create~2 - - +program~shape_ring_2d->proc~create~3 + + - + -program~shape_ring_2d->proc~export_xc~2 - - +program~shape_ring_2d->proc~export_xc~3 + + - + -program~shape_ring_2d->proc~export_xg~2 - - +program~shape_ring_2d->proc~export_xg~3 + + - + -program~shape_ring_2d->proc~finalize~2 - - +program~shape_ring_2d->proc~finalize~3 + + program~shape_ring_2d->proc~set_ring~2 - - + + - + -program~shape_ring_2d->proc~show~2 - - +program~shape_ring_2d->proc~show~3 + + program~shape_ring_3d - -shape_ring_3d + +shape_ring_3d - + -program~shape_ring_3d->proc~create - - +program~shape_ring_3d->proc~create~2 + + - + -program~shape_ring_3d->proc~export_xc - - +program~shape_ring_3d->proc~export_xc~2 + + - + -program~shape_ring_3d->proc~export_xg - - +program~shape_ring_3d->proc~export_xg~2 + + - + -program~shape_ring_3d->proc~finalize - - +program~shape_ring_3d->proc~finalize~2 + + program~shape_ring_3d->proc~set_ring - - + + - + -program~shape_ring_3d->proc~show - - +program~shape_ring_3d->proc~show~2 + + program~shape_tetragon - -shape_tetragon + +shape_tetragon - + -program~shape_tetragon->proc~create~2 - - +program~shape_tetragon->proc~create~3 + + - + -program~shape_tetragon->proc~export_xc~2 - - +program~shape_tetragon->proc~export_xc~3 + + - + -program~shape_tetragon->proc~export_xg~2 - - +program~shape_tetragon->proc~export_xg~3 + + - + -program~shape_tetragon->proc~finalize~2 - - +program~shape_tetragon->proc~finalize~3 + + program~shape_tetragon->proc~set_tetragon - - + + - + -program~shape_tetragon->proc~show~2 - - +program~shape_tetragon->proc~show~3 + +
    @@ -9197,7 +9197,7 @@

    Documentation generated by FORD - on 2024-07-01T09:54:44.473032

    + on 2024-07-01T10:00:02.512255


    diff --git a/lists/programs.html b/lists/programs.html index 5c7a6b96b..936f57e13 100644 --- a/lists/programs.html +++ b/lists/programs.html @@ -252,7 +252,7 @@

    Programs

    Documentation generated by FORD - on 2024-07-01T09:54:44.473032

    + on 2024-07-01T10:00:02.512255


    diff --git a/lists/types.html b/lists/types.html index 70d863ae3..3637cb7a4 100644 --- a/lists/types.html +++ b/lists/types.html @@ -197,7 +197,7 @@

    Documentation generated by FORD - on 2024-07-01T09:54:44.473032

    + on 2024-07-01T10:00:02.512255


    diff --git a/module/forcad.html b/module/forcad.html index 847bc702e..e7cb96cbf 100644 --- a/module/forcad.html +++ b/module/forcad.html @@ -888,7 +888,7 @@

    Documentation generated by FORD - on 2024-07-01T09:54:44.473032

    + on 2024-07-01T10:00:02.512255


    diff --git a/module/forcad_nurbs_curve.html b/module/forcad_nurbs_curve.html index 0244cb386..663f18be7 100644 --- a/module/forcad_nurbs_curve.html +++ b/module/forcad_nurbs_curve.html @@ -124,10 +124,10 @@

    Interfaces

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

    Functions

    @@ -188,43 +188,43 @@

    Subroutines

    @@ -922,8 +922,8 @@

    Interfaces

    - -

    private interface compute_Tgc + +

    private interface compute_Tgc

      @@ -947,7 +947,7 @@

      Arguments

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

      Arguments

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

      Arguments

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

      Arguments

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

      Arguments

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

      Arguments

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

      Arguments

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

      Arguments

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

      Arguments

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

      Arguments

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

      Arguments

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

      Arguments

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

      Arguments

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

      Arguments

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

      Arguments

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

      Arguments

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

      - -

      private interface compute_Xg + +

      private interface compute_Xg

        @@ -1369,7 +1369,7 @@

        Arguments

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

        Arguments

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

        Arguments

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

        Arguments

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

        Arguments

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

        Arguments

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

        Arguments

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

        Arguments

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

        Arguments

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

        Arguments

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

        Arguments

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

        Arguments

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

        Arguments

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

        Arguments

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

        Arguments

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

        Arguments

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

        Arguments

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

        Arguments

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

        Arguments

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

        Arguments

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

        - -

        private interface compute_d2Tgc + +

        private interface compute_d2Tgc

          @@ -1851,7 +1851,7 @@

          Arguments

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

          Arguments

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

          Arguments

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

          Arguments

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

          Arguments

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

          Arguments

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

          Arguments

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

          Arguments

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

          Arguments

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

          Arguments

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

          Arguments

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

          Arguments

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

          Arguments

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

          Arguments

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

          Arguments

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

          Arguments

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

          Arguments

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

          Arguments

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

          Arguments

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

          Arguments

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

          Arguments

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

          Arguments

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

          Arguments

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

          Arguments

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

          Arguments

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

          Arguments

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

          Arguments

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

          Arguments

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

          Arguments

          - -

          private interface compute_dTgc + +

          private interface compute_dTgc

            @@ -2433,7 +2433,7 @@

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

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

            Components

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

            Components

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

            Components

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

            Components

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

            Components

            - + integer, private @@ -3157,7 +3157,7 @@

            Components

            - + integer, private, @@ -3174,7 +3174,7 @@

            Components

            - + integer, private, @@ -3191,7 +3191,7 @@

            Components

            - + integer, private, @@ -3208,7 +3208,7 @@

            Components

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

            Components

            - + integer, private @@ -3242,7 +3242,7 @@

            Components

            - + integer, private @@ -3268,38 +3268,38 @@

            Type-Bound Procedures

            procedure, public :: - ansatz -

            Compute the shape functions, derivative of shape functions and dL

            Read more… + ansatz +

            Compute the shape functions, derivative of shape functions and dL

            Read more… 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 :: @@ -3308,163 +3308,163 @@

            Type-Bound Procedures

            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, set1a, set2, set3, set4 -

            Set NURBS curve

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

            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 :: @@ -3473,23 +3473,23 @@

            Type-Bound Procedures

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

            Set NURBS curve using degree, number of control points, control points and weights

            Read more… + set4 +

            Set NURBS curve using degree, number of control points, 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 :: @@ -3498,18 +3498,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 :: @@ -3518,98 +3518,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… @@ -3622,7 +3622,7 @@

            Type-Bound Procedures

            Functions

            -

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

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

            @@ -3645,7 +3645,7 @@

            Arguments

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

            Arguments

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

            -

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

            private pure function cmp_elem(this) result(elemConn)

            @@ -3709,7 +3709,7 @@

            Arguments

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

            -

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

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

            @@ -3758,7 +3758,7 @@

            Arguments

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

            Arguments

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

            -

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

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

            @@ -3822,7 +3822,7 @@

            Arguments

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

            Arguments

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

            -

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

            private pure function get_Wc_all(this) result(Wc)

            @@ -3886,7 +3886,7 @@

            Arguments

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

            -

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

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

            @@ -3935,7 +3935,7 @@

            Arguments

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

            Arguments

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

            -

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

            private pure function get_Xc_all(this) result(Xc)

            @@ -3999,7 +3999,7 @@

            Arguments

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

            -

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

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

            @@ -4048,7 +4048,7 @@

            Arguments

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

            Arguments

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

            -

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

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

            @@ -4112,7 +4112,7 @@

            Arguments

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

            Arguments

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

            Arguments

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

            -

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

            private pure function get_Xg_all(this) result(Xg)

            @@ -4191,7 +4191,7 @@

            Arguments

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

            -

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

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

            @@ -4240,7 +4240,7 @@

            Arguments

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

            Arguments

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

            -

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

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

            @@ -4304,7 +4304,7 @@

            Arguments

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

            Arguments

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

            Arguments

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

            -

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

            private pure function get_Xt(this) result(Xt)

            @@ -4383,7 +4383,7 @@

            Arguments

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

            -

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

            private pure function get_continuity(this) result(c)

            @@ -4432,7 +4432,7 @@

            Arguments

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

            Arguments

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

            -

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

            private pure function get_elem(this) result(elemConn)

            @@ -4530,7 +4530,7 @@

            Arguments

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

            -

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

            private pure function get_elem_Xc_vis(this) result(elemConn)

            @@ -4579,7 +4579,7 @@

            Arguments

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

            -

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

            private pure function get_elem_Xg_vis(this) result(elemConn)

            @@ -4628,7 +4628,7 @@

            Arguments

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

            -

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

            private pure function get_knot_all(this) result(knot)

            @@ -4677,7 +4677,7 @@

            Arguments

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

            -

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

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

            @@ -4726,7 +4726,7 @@

            Arguments

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

            Arguments

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

            -

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

            private pure function get_multiplicity(this) result(m)

            @@ -4790,7 +4790,7 @@

            Arguments

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

            Arguments

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

            -

            private pure function get_ng(this) result(ng) +

            private pure function get_ng(this) result(ng)

            @@ -4888,7 +4888,7 @@

            Arguments

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

            -

            private pure function is_rational(this) result(r) +

            private pure function is_rational(this) result(r)

            @@ -4937,7 +4937,7 @@

            Arguments

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

            Subroutines

            -

            private pure subroutine ansatz(this, ie, ig, Tgc, dTgc_dXg, dL) +

            private pure subroutine ansatz(this, ie, ig, Tgc, dTgc_dXg, dL)

            @@ -4991,7 +4991,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -5006,7 +5006,7 @@

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

            -

            private pure subroutine basis_scalar(this, Xt, Tgc) +

            private pure subroutine basis_scalar(this, Xt, Tgc)

            @@ -5110,7 +5110,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -5125,7 +5125,7 @@

            Arguments

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

            Arguments

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

            Arguments

            -

            private pure subroutine basis_vector(this, res, Xt, Tgc) +

            private pure subroutine basis_vector(this, res, Xt, Tgc)

            @@ -5184,7 +5184,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -5214,7 +5214,7 @@

            Arguments

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

            Arguments

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

            Arguments

            -

            private pure subroutine cmp_degree(this) +

            private pure subroutine cmp_degree(this)

            @@ -5273,7 +5273,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -5317,7 +5317,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -5332,7 +5332,7 @@

            Arguments

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

            Arguments

            -

            private pure subroutine cmp_nc(this) +

            private pure subroutine cmp_nc(this)

            @@ -5376,7 +5376,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -5397,7 +5397,7 @@

            Arguments

            -

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

            private pure subroutine create(this, res, Xt)

            @@ -5420,7 +5420,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -5450,7 +5450,7 @@

            Arguments

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

            Arguments

            -

            private pure subroutine derivative2_scalar(this, Xt, d2Tgc, dTgc, Tgc) +

            private pure subroutine derivative2_scalar(this, Xt, d2Tgc, dTgc, Tgc)

            @@ -5494,7 +5494,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -5509,7 +5509,7 @@

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

            -

            private pure subroutine derivative2_vector(this, res, Xt, d2Tgc, dTgc, Tgc) +

            private pure subroutine derivative2_vector(this, res, Xt, d2Tgc, dTgc, Tgc)

            @@ -5598,7 +5598,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -5628,7 +5628,7 @@

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

            -

            private pure subroutine derivative_scalar(this, Xt, dTgc, Tgc, elem) +

            private pure subroutine derivative_scalar(this, Xt, dTgc, Tgc, elem)

            @@ -5717,7 +5717,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -5732,7 +5732,7 @@

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

            -

            private pure subroutine derivative_vector(this, res, Xt, dTgc, Tgc) +

            private pure subroutine derivative_vector(this, res, Xt, dTgc, Tgc)

            @@ -5821,7 +5821,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -5851,7 +5851,7 @@

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

            -

            private pure subroutine elevate_degree(this, t) +

            private pure subroutine elevate_degree(this, t)

            @@ -5925,7 +5925,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -5940,7 +5940,7 @@

            Arguments

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

            Arguments

            -

            private impure subroutine export_Xc(this, filename) +

            private impure subroutine export_Xc(this, filename)

            @@ -5984,7 +5984,7 @@

            Arguments

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

            Arguments

            - + character(len=*), intent(in) @@ -6020,7 +6020,7 @@

            Arguments

            -

            private impure subroutine export_Xg(this, filename) +

            private impure subroutine export_Xg(this, filename)

            @@ -6043,7 +6043,7 @@

            Arguments

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

            Arguments

            - + character(len=*), intent(in) @@ -6079,7 +6079,7 @@

            Arguments

            -

            private pure subroutine finalize(this) +

            private pure subroutine finalize(this)

            @@ -6102,7 +6102,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -6123,7 +6123,7 @@

            Arguments

            -

            private pure subroutine insert_knots(this, Xth, r) +

            private pure subroutine insert_knots(this, Xth, r)

            @@ -6146,7 +6146,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -6161,7 +6161,7 @@

            Arguments

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

            Arguments

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

            Arguments

            -

            private pure subroutine modify_Wc(this, W, num) +

            private pure subroutine modify_Wc(this, W, num)

            @@ -6220,7 +6220,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -6235,7 +6235,7 @@

            Arguments

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

            Arguments

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

            Arguments

            -

            private pure subroutine modify_Xc(this, X, num, dir) +

            private pure subroutine modify_Xc(this, X, num, dir)

            @@ -6294,7 +6294,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -6309,7 +6309,7 @@

            Arguments

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

            Arguments

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

            Arguments

            - + integer, intent(in) @@ -6360,7 +6360,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)

            @@ -6383,7 +6383,7 @@

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

            - + integer, intent(out), @@ -6464,7 +6464,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)

            @@ -6487,7 +6487,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -6502,7 +6502,7 @@

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

            -

            private pure subroutine remove_knots(this, Xth, r) +

            private pure subroutine remove_knots(this, Xth, r)

            @@ -6606,7 +6606,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -6621,7 +6621,7 @@

            Arguments

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

            Arguments

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

            Arguments

            -

            private pure subroutine rotate_Xc(this, alpha, beta, theta) +

            private pure subroutine rotate_Xc(this, alpha, beta, theta)

            @@ -6680,7 +6680,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -6695,7 +6695,7 @@

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

            -

            private pure subroutine rotate_Xg(this, alpha, beta, theta) +

            private pure subroutine rotate_Xg(this, alpha, beta, theta)

            @@ -6769,7 +6769,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -6784,7 +6784,7 @@

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

            -

            private pure subroutine set1(this, knot, Xc, Wc) +

            private pure subroutine set1(this, knot, Xc, Wc)

            @@ -6858,7 +6858,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -6873,7 +6873,7 @@

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -6962,7 +6962,7 @@

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

            -

            private pure subroutine set2(this, Xth_dir, degree, continuity, Xc, Wc) +

            private pure subroutine set2(this, Xth_dir, degree, continuity, Xc, Wc)

            @@ -7036,7 +7036,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -7051,7 +7051,7 @@

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

            -

            private pure subroutine set3(this, Xc, Wc) +

            private pure subroutine set3(this, Xc, Wc)

            @@ -7155,7 +7155,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -7170,7 +7170,7 @@

            Arguments

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

            Arguments

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

            Arguments

            -

            private pure subroutine set4(this, degree, nc, Xc, Wc) +

            private pure subroutine set4(this, degree, nc, Xc, Wc)

            @@ -7229,7 +7229,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -7244,7 +7244,7 @@

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

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

            Arguments

            -

            private pure subroutine set_C(this, center, radius) +

            private pure subroutine set_C(this, center, radius)

            @@ -7333,7 +7333,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -7348,7 +7348,7 @@

            Arguments

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

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -7422,7 +7422,7 @@

            Arguments

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

            Arguments

            -

            private pure subroutine set_elem(this, elemConn) +

            private pure subroutine set_elem(this, elemConn)

            @@ -7481,7 +7481,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -7496,7 +7496,7 @@

            Arguments

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

            Arguments

            -

            private pure subroutine set_elem_Xc_vis(this, elemConn) +

            private pure subroutine set_elem_Xc_vis(this, elemConn)

            @@ -7540,7 +7540,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -7555,7 +7555,7 @@

            Arguments

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

            Arguments

            -

            private pure subroutine set_elem_Xg_vis(this, elemConn) +

            private pure subroutine set_elem_Xg_vis(this, elemConn)

            @@ -7599,7 +7599,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -7614,7 +7614,7 @@

            Arguments

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

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -7673,7 +7673,7 @@

            Arguments

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

            Arguments

            -

            private impure subroutine show(this, vtkfile_Xc, vtkfile_Xg) +

            private impure subroutine show(this, vtkfile_Xc, vtkfile_Xg)

            @@ -7732,7 +7732,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -7747,7 +7747,7 @@

            Arguments

            - + character(len=*), intent(in) @@ -7762,7 +7762,7 @@

            Arguments

            - + character(len=*), intent(in) @@ -7783,7 +7783,7 @@

            Arguments

            -

            private pure subroutine translate_Xc(this, vec) +

            private pure subroutine translate_Xc(this, vec)

            @@ -7806,7 +7806,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -7821,7 +7821,7 @@

            Arguments

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

            Arguments

            -

            private pure subroutine translate_Xg(this, vec) +

            private pure subroutine translate_Xg(this, vec)

            @@ -7865,7 +7865,7 @@

            Arguments

            - + class(nurbs_curve), intent(inout) @@ -7880,7 +7880,7 @@

            Arguments

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

            Arguments

            Documentation generated by FORD - on 2024-07-01T09:54:44.473032

            + on 2024-07-01T10:00:02.512255


            diff --git a/module/forcad_nurbs_surface.html b/module/forcad_nurbs_surface.html index e8b59af5c..5365f088f 100644 --- a/module/forcad_nurbs_surface.html +++ b/module/forcad_nurbs_surface.html @@ -124,10 +124,10 @@

            Interfaces

            @@ -153,32 +153,32 @@

            Functions

            @@ -190,43 +190,43 @@

            Subroutines

            @@ -924,8 +924,8 @@

            Interfaces

            - -

            private interface compute_Tgc + +

            private interface compute_Tgc

              @@ -949,7 +949,7 @@

              Arguments

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

              Arguments

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

              Arguments

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

              Arguments

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

              Arguments

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

              Arguments

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

              Arguments

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

              Arguments

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

              Arguments

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

              Arguments

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

              Arguments

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

              Arguments

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

              Arguments

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

              Arguments

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

              Arguments

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

              Arguments

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

              - -

              private interface compute_Xg + +

              private interface compute_Xg

                @@ -1431,7 +1431,7 @@

                Arguments

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

                Arguments

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

                Arguments

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

                Arguments

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

                Arguments

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

                Arguments

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

                Arguments

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

                Arguments

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

                Arguments

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

                Arguments

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

                Arguments

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

                Arguments

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

                Arguments

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

                Arguments

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

                Arguments

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

                Arguments

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

                Arguments

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

                Arguments

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

                Arguments

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

                Arguments

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

                - -

                private interface compute_d2Tgc + +

                private interface compute_d2Tgc

                  @@ -1973,7 +1973,7 @@

                  Arguments

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

                  Arguments

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

                  Arguments

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

                  Arguments

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

                  Arguments

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

                  Arguments

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

                  Arguments

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

                  Arguments

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

                  Arguments

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

                  Arguments

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

                  Arguments

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

                  Arguments

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

                  Arguments

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

                  Arguments

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

                  Arguments

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

                  Arguments

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

                  Arguments

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

                  Arguments

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

                  Arguments

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

                  Arguments

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

                  Arguments

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

                  Arguments

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

                  Arguments

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

                  Arguments

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

                  Arguments

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

                  Arguments

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

                  Arguments

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

                  Arguments

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

                  Arguments

                  - -

                  private interface compute_dTgc + +

                  private interface compute_dTgc

                    @@ -2615,7 +2615,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Components

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

                    Components

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

                    Components

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

                    Components

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

                    Components

                    - + integer, private @@ -3433,7 +3433,7 @@

                    Components

                    - + integer, private, @@ -3450,7 +3450,7 @@

                    Components

                    - + integer, private, @@ -3467,7 +3467,7 @@

                    Components

                    - + integer, private, @@ -3484,7 +3484,7 @@

                    Components

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

                    Components

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

                    Components

                    - + integer, private @@ -3535,7 +3535,7 @@

                    Components

                    - + integer, private @@ -3561,18 +3561,18 @@

                    Type-Bound Procedures

                    procedure, public :: - ansatz -

                    Compute the shape functions, derivative of shape functions and dA

                    Read more… + ansatz +

                    Compute the shape functions, derivative of shape functions and dA

                    Read more… 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 :: @@ -3581,218 +3581,218 @@

                    Type-Bound Procedures

                    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… generic, public :: - get_nc => get_nc_all, get_nc_dir -

                    Get number of control points

                    Read more… + get_nc => get_nc_all, get_nc_dir +

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

                    Set NURBS surface

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

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

                    Set NURBS surface using degree, number of control points, control points and weights

                    Read more… + set4 +

                    Set NURBS surface using degree, number of control points, 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 :: @@ -3811,88 +3811,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 :: @@ -3906,13 +3906,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… procedure, private :: @@ -3935,7 +3935,7 @@

                    Type-Bound Procedures

                    Functions

                    -

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

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

                    @@ -3958,7 +3958,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -3973,7 +3973,7 @@

                    Arguments

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

                    -

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

                    private pure function cmp_elem(this) result(elemConn)

                    @@ -4022,7 +4022,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -4048,7 +4048,7 @@

                    -

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

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

                    @@ -4071,7 +4071,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -4086,7 +4086,7 @@

                    Arguments

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

                    -

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

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

                    @@ -4135,7 +4135,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -4150,7 +4150,7 @@

                    Arguments

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

                    -

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

                    private pure function get_Wc_all(this) result(Wc)

                    @@ -4199,7 +4199,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -4225,7 +4225,7 @@

                    -

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

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

                    @@ -4248,7 +4248,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -4263,7 +4263,7 @@

                    Arguments

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

                    -

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

                    private pure function get_Xc_all(this) result(Xc)

                    @@ -4312,7 +4312,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -4338,7 +4338,7 @@

                    -

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

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

                    @@ -4361,7 +4361,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -4376,7 +4376,7 @@

                    Arguments

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

                    -

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

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

                    @@ -4425,7 +4425,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -4440,7 +4440,7 @@

                    Arguments

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

                    Arguments

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

                    -

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

                    private pure function get_Xg_all(this) result(Xg)

                    @@ -4504,7 +4504,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -4530,7 +4530,7 @@

                    -

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

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

                    @@ -4553,7 +4553,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -4568,7 +4568,7 @@

                    Arguments

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

                    -

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

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

                    @@ -4617,7 +4617,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -4632,7 +4632,7 @@

                    Arguments

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

                    Arguments

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

                    -

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

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

                    @@ -4696,7 +4696,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -4711,7 +4711,7 @@

                    Arguments

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

                    -

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

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

                    @@ -4760,7 +4760,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -4775,7 +4775,7 @@

                    Arguments

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

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -4873,7 +4873,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -4888,7 +4888,7 @@

                    Arguments

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

                    -

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

                    private pure function get_elem(this) result(elemConn)

                    @@ -4937,7 +4937,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -4963,7 +4963,7 @@

                    -

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

                    private pure function get_elem_Xc_vis(this) result(elemConn)

                    @@ -4986,7 +4986,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -5012,7 +5012,7 @@

                    -

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

                    private pure function get_elem_Xg_vis(this) result(elemConn)

                    @@ -5035,7 +5035,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -5061,7 +5061,7 @@

                    -

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

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

                    @@ -5084,7 +5084,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -5099,7 +5099,7 @@

                    Arguments

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

                    -

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

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

                    @@ -5148,7 +5148,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -5163,7 +5163,7 @@

                    Arguments

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

                    Arguments

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

                    -

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

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

                    @@ -5227,7 +5227,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -5242,7 +5242,7 @@

                    Arguments

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

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -5340,7 +5340,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -5355,7 +5355,7 @@

                    Arguments

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

                    -

                    private pure function get_ng(this) result(ng) +

                    private pure function get_ng(this) result(ng)

                    @@ -5404,7 +5404,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -5430,7 +5430,7 @@

                    -

                    private pure function is_rational(this) result(r) +

                    private pure function is_rational(this) result(r)

                    @@ -5453,7 +5453,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -5484,7 +5484,7 @@

                    Subroutines

                    -

                    private pure subroutine ansatz(this, ie, ig, Tgc, dTgc_dXg, dA) +

                    private pure subroutine ansatz(this, ie, ig, Tgc, dTgc_dXg, dA)

                    @@ -5507,7 +5507,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -5522,7 +5522,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

                    -

                    private pure subroutine basis_scalar(this, Xt, Tgc) +

                    private pure subroutine basis_scalar(this, Xt, Tgc)

                    @@ -5626,7 +5626,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -5641,7 +5641,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

                    -

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

                    private pure subroutine basis_vector(this, res1, res2, Xt1, Xt2, Tgc)

                    @@ -5700,7 +5700,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -5715,7 +5715,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -5855,7 +5855,7 @@

                    Arguments

                    -

                    private pure subroutine cmp_degree(this, dir) +

                    private pure subroutine cmp_degree(this, dir)

                    @@ -5878,7 +5878,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -5893,7 +5893,7 @@

                    Arguments

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

                    Arguments

                    -

                    private pure subroutine cmp_nc(this, dir) +

                    private pure subroutine cmp_nc(this, dir)

                    @@ -5937,7 +5937,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -5952,7 +5952,7 @@

                    Arguments

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

                    Arguments

                    -

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

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

                    @@ -5996,7 +5996,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -6011,7 +6011,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

                    -

                    private pure subroutine derivative2_scalar(this, Xt, d2Tgc, dTgc, Tgc) +

                    private pure subroutine derivative2_scalar(this, Xt, d2Tgc, dTgc, Tgc)

                    @@ -6115,7 +6115,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -6130,7 +6130,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

                    - + real(kind=rk), intent(out), @@ -6196,7 +6196,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)

                    @@ -6219,7 +6219,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -6234,7 +6234,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

                    -

                    private pure subroutine derivative_scalar(this, Xt, dTgc, Tgc, elem) +

                    private pure subroutine derivative_scalar(this, Xt, dTgc, Tgc, elem)

                    @@ -6368,7 +6368,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -6383,7 +6383,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

                    - + integer, intent(in), @@ -6449,7 +6449,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)

                    @@ -6472,7 +6472,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -6487,7 +6487,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

                    -

                    private pure subroutine elevate_degree(this, dir, t) +

                    private pure subroutine elevate_degree(this, dir, t)

                    @@ -6606,7 +6606,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -6621,7 +6621,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

                    -

                    private impure subroutine export_Xc(this, filename) +

                    private impure subroutine export_Xc(this, filename)

                    @@ -6680,7 +6680,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -6695,7 +6695,7 @@

                    Arguments

                    - + character(len=*), intent(in) @@ -6716,7 +6716,7 @@

                    Arguments

                    -

                    private impure subroutine export_Xg(this, filename) +

                    private impure subroutine export_Xg(this, filename)

                    @@ -6739,7 +6739,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -6754,7 +6754,7 @@

                    Arguments

                    - + character(len=*), intent(in) @@ -6775,7 +6775,7 @@

                    Arguments

                    -

                    private pure subroutine finalize(this) +

                    private pure subroutine finalize(this)

                    @@ -6798,7 +6798,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -6819,7 +6819,7 @@

                    Arguments

                    -

                    private pure subroutine insert_knots(this, dir, Xth, r) +

                    private pure subroutine insert_knots(this, dir, Xth, r)

                    @@ -6842,7 +6842,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -6857,7 +6857,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

                    -

                    private pure subroutine modify_Wc(this, W, num) +

                    private pure subroutine modify_Wc(this, W, num)

                    @@ -6931,7 +6931,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -6946,7 +6946,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

                    -

                    private pure subroutine modify_Xc(this, X, num, dir) +

                    private pure subroutine modify_Xc(this, X, num, dir)

                    @@ -7005,7 +7005,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -7020,7 +7020,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

                    - + integer, intent(in) @@ -7071,7 +7071,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)

                    @@ -7094,7 +7094,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(in) @@ -7109,7 +7109,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

                    - + integer, intent(out), @@ -7175,7 +7175,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)

                    @@ -7198,7 +7198,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -7213,7 +7213,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

                    -

                    private pure subroutine remove_knots(this, dir, Xth, r) +

                    private pure subroutine remove_knots(this, dir, Xth, r)

                    @@ -7317,7 +7317,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -7332,7 +7332,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

                    -

                    private pure subroutine rotate_Xc(this, alpha, beta, theta) +

                    private pure subroutine rotate_Xc(this, alpha, beta, theta)

                    @@ -7406,7 +7406,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -7421,7 +7421,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

                    -

                    private pure subroutine rotate_Xg(this, alpha, beta, theta) +

                    private pure subroutine rotate_Xg(this, alpha, beta, theta)

                    @@ -7495,7 +7495,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -7510,7 +7510,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

                    -

                    private pure subroutine set1(this, knot1, knot2, Xc, Wc) +

                    private pure subroutine set1(this, knot1, knot2, Xc, Wc)

                    @@ -7584,7 +7584,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -7599,7 +7599,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

                    - + real(kind=rk), intent(in), @@ -7665,7 +7665,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)

                    @@ -7688,7 +7688,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -7733,7 +7733,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

                    -

                    private pure subroutine set3(this, nc, Xc, Wc) +

                    private pure subroutine set3(this, nc, Xc, Wc)

                    @@ -7837,7 +7837,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -7852,7 +7852,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

                    -

                    private pure subroutine set4(this, degree, nc, Xc, Wc) +

                    private pure subroutine set4(this, degree, nc, Xc, Wc)

                    @@ -7926,7 +7926,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -7941,7 +7941,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

                    -

                    private pure subroutine set_C(this, center, radius1, radius2) +

                    private pure subroutine set_C(this, center, radius1, radius2)

                    @@ -8030,7 +8030,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -8045,7 +8045,7 @@

                    Arguments

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

                    Arguments

                    -

                    private pure subroutine set_elem(this, elemConn) +

                    private pure subroutine set_elem(this, elemConn)

                    @@ -8119,7 +8119,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -8134,7 +8134,7 @@

                    Arguments

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

                    Arguments

                    -

                    private pure subroutine set_elem_Xc_vis(this, elemConn) +

                    private pure subroutine set_elem_Xc_vis(this, elemConn)

                    @@ -8178,7 +8178,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -8193,7 +8193,7 @@

                    Arguments

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

                    Arguments

                    -

                    private pure subroutine set_elem_Xg_vis(this, elemConn) +

                    private pure subroutine set_elem_Xg_vis(this, elemConn)

                    @@ -8237,7 +8237,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -8252,7 +8252,7 @@

                    Arguments

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

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -8311,7 +8311,7 @@

                    Arguments

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

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -8400,7 +8400,7 @@

                    Arguments

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

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -8489,7 +8489,7 @@

                    Arguments

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

                    Arguments

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

                    Arguments

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

                    Arguments

                    -

                    private impure subroutine show(this, vtkfile_Xc, vtkfile_Xg) +

                    private impure subroutine show(this, vtkfile_Xc, vtkfile_Xg)

                    @@ -8563,7 +8563,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -8578,7 +8578,7 @@

                    Arguments

                    - + character(len=*), intent(in) @@ -8593,7 +8593,7 @@

                    Arguments

                    - + character(len=*), intent(in) @@ -8614,7 +8614,7 @@

                    Arguments

                    -

                    private pure subroutine translate_Xc(this, vec) +

                    private pure subroutine translate_Xc(this, vec)

                    @@ -8637,7 +8637,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -8652,7 +8652,7 @@

                    Arguments

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

                    Arguments

                    -

                    private pure subroutine translate_Xg(this, vec) +

                    private pure subroutine translate_Xg(this, vec)

                    @@ -8696,7 +8696,7 @@

                    Arguments

                    - + class(nurbs_surface), intent(inout) @@ -8711,7 +8711,7 @@

                    Arguments

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

                    Arguments

                    Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                    + on 2024-07-01T10:00:02.512255


                    diff --git a/module/forcad_nurbs_volume.html b/module/forcad_nurbs_volume.html index 0b30370b3..71db6aabf 100644 --- a/module/forcad_nurbs_volume.html +++ b/module/forcad_nurbs_volume.html @@ -124,10 +124,10 @@

                    Interfaces

                    @@ -153,36 +153,36 @@

                    Functions

                    @@ -194,44 +194,44 @@

                    Subroutines

                    @@ -929,8 +929,8 @@

                    Interfaces

                    - -

                    private interface compute_Tgc + +

                    private interface compute_Tgc

                      @@ -954,7 +954,7 @@

                      Arguments

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

                      Arguments

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

                      Arguments

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

                      Arguments

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

                      Arguments

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

                      Arguments

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

                      Arguments

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

                      Arguments

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

                      Arguments

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

                      Arguments

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

                      Arguments

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

                      Arguments

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

                      Arguments

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

                      Arguments

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

                      Arguments

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

                      Arguments

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

                      - -

                      private interface compute_Xg + +

                      private interface compute_Xg

                        @@ -1496,7 +1496,7 @@

                        Arguments

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

                        Arguments

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

                        Arguments

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

                        Arguments

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

                        Arguments

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

                        Arguments

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

                        Arguments

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

                        Arguments

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

                        Arguments

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

                        Arguments

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

                        Arguments

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

                        Arguments

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

                        Arguments

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

                        Arguments

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

                        Arguments

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

                        Arguments

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

                        Arguments

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

                        Arguments

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

                        Arguments

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

                        Arguments

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

                        - -

                        private interface compute_d2Tgc + +

                        private interface compute_d2Tgc

                          @@ -2098,7 +2098,7 @@

                          Arguments

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

                          Arguments

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

                          Arguments

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

                          Arguments

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

                          Arguments

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

                          Arguments

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

                          Arguments

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

                          Arguments

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

                          Arguments

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

                          Arguments

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

                          Arguments

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

                          Arguments

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

                          Arguments

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

                          Arguments

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

                          Arguments

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

                          Arguments

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

                          Arguments

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

                          Arguments

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

                          Arguments

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

                          Arguments

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

                          Arguments

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

                          Arguments

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

                          Arguments

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

                          Arguments

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

                          Arguments

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

                          Arguments

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

                          Arguments

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

                          Arguments

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

                          Arguments

                          - -

                          private interface compute_dTgc + +

                          private interface compute_dTgc

                            @@ -2800,7 +2800,7 @@

                            Arguments

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

                            Arguments

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

                            Arguments

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

                            Arguments

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

                            Arguments

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

                            Arguments

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

                            Arguments

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

                            Arguments

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

                            Arguments

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

                            Arguments

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

                            Arguments

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

                            Arguments

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

                            Arguments

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

                            Arguments

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

                            Arguments

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

                            Arguments

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

                            Arguments

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

                            Arguments

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

                            Arguments

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

                            Arguments

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

                            Arguments

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

                            Arguments

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

                            Arguments

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

                            Arguments

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

                            Arguments

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

                            Arguments

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

                            Arguments

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

                            Arguments

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

                            Arguments

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

                            Components

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

                            Components

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

                            Components

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

                            Components

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

                            Components

                            - + integer, private @@ -3695,7 +3695,7 @@

                            Components

                            - + integer, private, @@ -3712,7 +3712,7 @@

                            Components

                            - + integer, private, @@ -3729,7 +3729,7 @@

                            Components

                            - + integer, private, @@ -3746,7 +3746,7 @@

                            Components

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

                            Components

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

                            Components

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

                            Components

                            - + integer, private @@ -3814,7 +3814,7 @@

                            Components

                            - + integer, private @@ -3840,23 +3840,23 @@

                            Type-Bound Procedures

                            procedure, public :: - ansatz -

                            Compute the shape functions, derivative of shape functions and dV

                            Read more… + ansatz +

                            Compute the shape functions, derivative of shape functions and dV

                            Read more… generic, public :: - basis => basis_vector, basis_scalar -

                            Compute the basis functions of the NURBS volume

                            Read more… + basis => basis_vector, basis_scalar +

                            Compute the basis functions of the NURBS volume

                            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 volume

                            Read more… + cmp_degree +

                            Compute degree of the NURBS volume

                            Read more… procedure, public :: @@ -3865,8 +3865,8 @@

                            Type-Bound Procedures

                            procedure, public :: - cmp_elem -

                            Generate IGA element connectivity

                            Read more… + cmp_elem +

                            Generate IGA element connectivity

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

                            Type-Bound Procedures

                            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 :: @@ -3905,133 +3905,133 @@

                            Type-Bound Procedures

                            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 volume

                            Read more… + 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… + 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… + elevate_degree +

                            Elevate the degree of the NURBS volume

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

                            Read more… + finalize +

                            Finalize the NURBS volume 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 volume

                            Read more… + 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… + 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… + 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… generic, public :: - get_nc => get_nc_all, get_nc_dir -

                            Get number of control points

                            Read more… + get_nc => get_nc_all, get_nc_dir +

                            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 volume is rational

                            Read more… + is_rational +

                            Check if the NURBS volume 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 volume (Approximation)

                            Read more… + 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… + nearest_point2 +

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

                            Read more… procedure, public :: @@ -4040,63 +4040,63 @@

                            Type-Bound Procedures

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

                            Set NURBS volume

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

                            Set NURBS volume

                            Read more… procedure, public :: - set1 -

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

                            Read more… + 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… + 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… + set3 +

                            Set Bezier or Rational Bezier volume using control points and weights

                            Read more… procedure, public :: - set4 -

                            Set NURBS volume using degree, number of control points, control points and weights

                            Read more… + set4 +

                            Set NURBS volume using degree, number of control points, 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 :: @@ -4115,88 +4115,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 volume

                            Read more… + 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… + 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… + 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… + 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… + derivative_scalar +

                            Compute the derivative of the NURBS volume

                            Read more… procedure, private :: - derivative_vector -

                            Compute the derivative of the NURBS volume

                            Read more… + derivative_vector +

                            Compute the derivative of the NURBS volume

                            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 :: @@ -4210,13 +4210,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… procedure, private :: @@ -4239,7 +4239,7 @@

                            Type-Bound Procedures

                            Functions

                            -

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

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

                            @@ -4262,7 +4262,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(in) @@ -4277,7 +4277,7 @@

                            Arguments

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

                            Arguments

                            - + class(nurbs_volume), intent(in) @@ -4367,7 +4367,7 @@

                            -

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

                            private pure function cmp_elem(this) result(elemConn)

                            @@ -4390,7 +4390,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(in) @@ -4439,7 +4439,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(in) @@ -4454,7 +4454,7 @@

                            Arguments

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

                            Arguments

                            - + class(nurbs_volume), intent(in) @@ -4533,7 +4533,7 @@

                            Arguments

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

                            Arguments

                            - + class(nurbs_volume), intent(in) @@ -4612,7 +4612,7 @@

                            Arguments

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

                            -

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

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

                            @@ -4676,7 +4676,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(in) @@ -4691,7 +4691,7 @@

                            Arguments

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

                            -

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

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

                            @@ -4740,7 +4740,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(in) @@ -4755,7 +4755,7 @@

                            Arguments

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

                            -

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

                            private pure function get_Wc_all(this) result(Wc)

                            @@ -4804,7 +4804,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(in) @@ -4830,7 +4830,7 @@

                            -

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

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

                            @@ -4853,7 +4853,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(in) @@ -4868,7 +4868,7 @@

                            Arguments

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

                            -

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

                            private pure function get_Xc_all(this) result(Xc)

                            @@ -4917,7 +4917,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(in) @@ -4943,7 +4943,7 @@

                            -

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

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

                            @@ -4966,7 +4966,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(in) @@ -4981,7 +4981,7 @@

                            Arguments

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

                            -

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

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

                            @@ -5030,7 +5030,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(in) @@ -5045,7 +5045,7 @@

                            Arguments

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

                            Arguments

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

                            -

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

                            private pure function get_Xg_all(this) result(Xg)

                            @@ -5109,7 +5109,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(in) @@ -5135,7 +5135,7 @@

                            -

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

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

                            @@ -5158,7 +5158,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(in) @@ -5173,7 +5173,7 @@

                            Arguments

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

                            -

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

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

                            @@ -5222,7 +5222,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(in) @@ -5237,7 +5237,7 @@

                            Arguments

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

                            Arguments

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

                            -

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

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

                            @@ -5301,7 +5301,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(in) @@ -5316,7 +5316,7 @@

                            Arguments

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

                            -

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

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

                            @@ -5365,7 +5365,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(in) @@ -5380,7 +5380,7 @@

                            Arguments

                            - + integer, intent(in) @@ -5429,7 +5429,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(in) @@ -5478,7 +5478,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(in) @@ -5493,7 +5493,7 @@

                            Arguments

                            - + integer, intent(in) @@ -5519,7 +5519,7 @@

                            -

                            private pure function get_elem(this) result(elemConn) +

                            private pure function get_elem(this) result(elemConn)

                            @@ -5542,7 +5542,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(in) @@ -5568,7 +5568,7 @@

                            -

                            private pure function get_elem_Xc_vis(this) result(elemConn) +

                            private pure function get_elem_Xc_vis(this) result(elemConn)

                            @@ -5591,7 +5591,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(in) @@ -5617,7 +5617,7 @@

                            -

                            private pure function get_elem_Xg_vis(this) result(elemConn) +

                            private pure function get_elem_Xg_vis(this) result(elemConn)

                            @@ -5640,7 +5640,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(in) @@ -5666,7 +5666,7 @@

                            -

                            private pure function get_knot_all(this, dir) result(knot) +

                            private pure function get_knot_all(this, dir) result(knot)

                            @@ -5689,7 +5689,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(in) @@ -5704,7 +5704,7 @@

                            Arguments

                            - + integer, intent(in) @@ -5730,7 +5730,7 @@

                            -

                            private pure function get_knoti(this, dir, i) result(knot) +

                            private pure function get_knoti(this, dir, i) result(knot)

                            @@ -5753,7 +5753,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(in) @@ -5768,7 +5768,7 @@

                            Arguments

                            - + integer, intent(in) @@ -5783,7 +5783,7 @@

                            Arguments

                            - + integer, intent(in) @@ -5809,7 +5809,7 @@

                            -

                            private pure function get_multiplicity(this, dir) result(m) +

                            private pure function get_multiplicity(this, dir) result(m)

                            @@ -5832,7 +5832,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(in) @@ -5847,7 +5847,7 @@

                            Arguments

                            - + integer, intent(in) @@ -5896,7 +5896,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(in) @@ -5945,7 +5945,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(in) @@ -5960,7 +5960,7 @@

                            Arguments

                            - + integer, intent(in) @@ -5986,7 +5986,7 @@

                            -

                            private pure function get_ng(this) result(ng) +

                            private pure function get_ng(this) result(ng)

                            @@ -6009,7 +6009,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(in) @@ -6035,7 +6035,7 @@

                            -

                            private pure function is_rational(this) result(r) +

                            private pure function is_rational(this) result(r)

                            @@ -6058,7 +6058,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(in) @@ -6089,7 +6089,7 @@

                            Subroutines

                            -

                            private pure subroutine ansatz(this, ie, ig, Tgc, dTgc_dXg, dV) +

                            private pure subroutine ansatz(this, ie, ig, Tgc, dTgc_dXg, dV)

                            @@ -6112,7 +6112,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(inout) @@ -6127,7 +6127,7 @@

                            Arguments

                            - + integer, intent(in) @@ -6142,7 +6142,7 @@

                            Arguments

                            - + integer, intent(in) @@ -6157,7 +6157,7 @@

                            Arguments

                            - + real(kind=rk), intent(out), @@ -6172,7 +6172,7 @@

                            Arguments

                            - + real(kind=rk), intent(out), @@ -6208,7 +6208,7 @@

                            Arguments

                            -

                            private pure subroutine basis_scalar(this, Xt, Tgc) +

                            private pure subroutine basis_scalar(this, Xt, Tgc)

                            @@ -6231,7 +6231,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(inout) @@ -6246,7 +6246,7 @@

                            Arguments

                            - + real(kind=rk), intent(in), @@ -6261,7 +6261,7 @@

                            Arguments

                            - + real(kind=rk), intent(out), @@ -6282,7 +6282,7 @@

                            Arguments

                            -

                            private pure subroutine basis_vector(this, res1, res2, res3, Xt1, Xt2, Xt3, Tgc) +

                            private pure subroutine basis_vector(this, res1, res2, res3, Xt1, Xt2, Xt3, Tgc)

                            @@ -6305,7 +6305,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(inout) @@ -6320,7 +6320,7 @@

                            Arguments

                            - + integer, intent(in), @@ -6335,7 +6335,7 @@

                            Arguments

                            - + integer, intent(in), @@ -6410,7 +6410,7 @@

                            Arguments

                            - + real(kind=rk), intent(out), @@ -6431,7 +6431,7 @@

                            Arguments

                            -

                            private pure subroutine cmp_degree(this, dir) +

                            private pure subroutine cmp_degree(this, dir)

                            @@ -6454,7 +6454,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(inout) @@ -6469,7 +6469,7 @@

                            Arguments

                            - + integer, intent(in), @@ -6490,7 +6490,7 @@

                            Arguments

                            -

                            private pure subroutine cmp_nc(this, dir) +

                            private pure subroutine cmp_nc(this, dir)

                            @@ -6513,7 +6513,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(inout) @@ -6528,7 +6528,7 @@

                            Arguments

                            - + integer, intent(in), @@ -6572,7 +6572,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(inout) @@ -6587,7 +6587,7 @@

                            Arguments

                            - + real(kind=rk), intent(out) @@ -6608,7 +6608,7 @@

                            Arguments

                            -

                            private pure subroutine create(this, res1, res2, res3, Xt1, Xt2, Xt3, Xt) +

                            private pure subroutine create(this, res1, res2, res3, Xt1, Xt2, Xt3, Xt)

                            @@ -6631,7 +6631,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(inout) @@ -6646,7 +6646,7 @@

                            Arguments

                            - + integer, intent(in), @@ -6661,7 +6661,7 @@

                            Arguments

                            - + integer, intent(in), @@ -6736,7 +6736,7 @@

                            Arguments

                            - + real(kind=rk), intent(in), @@ -6757,7 +6757,7 @@

                            Arguments

                            -

                            private pure subroutine derivative2_scalar(this, Xt, d2Tgc, dTgc, Tgc) +

                            private pure subroutine derivative2_scalar(this, Xt, d2Tgc, dTgc, Tgc)

                            @@ -6780,7 +6780,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(inout) @@ -6795,7 +6795,7 @@

                            Arguments

                            - + real(kind=rk), intent(in), @@ -6810,7 +6810,7 @@

                            Arguments

                            - + real(kind=rk), intent(out), @@ -6825,7 +6825,7 @@

                            Arguments

                            - + real(kind=rk), intent(out), @@ -6840,7 +6840,7 @@

                            Arguments

                            - + real(kind=rk), intent(out), @@ -6861,7 +6861,7 @@

                            Arguments

                            -

                            private pure subroutine derivative2_vector(this, res1, res2, res3, Xt1, Xt2, Xt3, d2Tgc, dTgc, Tgc) +

                            private pure subroutine derivative2_vector(this, res1, res2, res3, Xt1, Xt2, Xt3, d2Tgc, dTgc, Tgc)

                            @@ -6884,7 +6884,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(inout) @@ -6899,7 +6899,7 @@

                            Arguments

                            - + integer, intent(in), @@ -6914,7 +6914,7 @@

                            Arguments

                            - + integer, intent(in), @@ -6989,7 +6989,7 @@

                            Arguments

                            - + real(kind=rk), intent(out), @@ -7004,7 +7004,7 @@

                            Arguments

                            - + real(kind=rk), intent(out), @@ -7019,7 +7019,7 @@

                            Arguments

                            - + real(kind=rk), intent(out), @@ -7040,7 +7040,7 @@

                            Arguments

                            -

                            private pure subroutine derivative_scalar(this, Xt, dTgc, Tgc, elem) +

                            private pure subroutine derivative_scalar(this, Xt, dTgc, Tgc, elem)

                            @@ -7063,7 +7063,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(inout) @@ -7078,7 +7078,7 @@

                            Arguments

                            - + real(kind=rk), intent(in), @@ -7093,7 +7093,7 @@

                            Arguments

                            - + real(kind=rk), intent(out), @@ -7108,7 +7108,7 @@

                            Arguments

                            - + real(kind=rk), intent(out), @@ -7123,7 +7123,7 @@

                            Arguments

                            - + integer, intent(in), @@ -7144,7 +7144,7 @@

                            Arguments

                            -

                            private pure subroutine derivative_vector(this, res1, res2, res3, Xt1, Xt2, Xt3, dTgc, Tgc) +

                            private pure subroutine derivative_vector(this, res1, res2, res3, Xt1, Xt2, Xt3, dTgc, Tgc)

                            @@ -7167,7 +7167,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(inout) @@ -7182,7 +7182,7 @@

                            Arguments

                            - + integer, intent(in), @@ -7197,7 +7197,7 @@

                            Arguments

                            - + integer, intent(in), @@ -7272,7 +7272,7 @@

                            Arguments

                            - + real(kind=rk), intent(out), @@ -7287,7 +7287,7 @@

                            Arguments

                            - + real(kind=rk), intent(out), @@ -7308,7 +7308,7 @@

                            Arguments

                            -

                            private pure subroutine elevate_degree(this, dir, t) +

                            private pure subroutine elevate_degree(this, dir, t)

                            @@ -7331,7 +7331,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(inout) @@ -7346,7 +7346,7 @@

                            Arguments

                            - + integer, intent(in) @@ -7361,7 +7361,7 @@

                            Arguments

                            - + integer, intent(in) @@ -7382,7 +7382,7 @@

                            Arguments

                            -

                            private impure subroutine export_Xc(this, filename) +

                            private impure subroutine export_Xc(this, filename)

                            @@ -7405,7 +7405,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(in) @@ -7420,7 +7420,7 @@

                            Arguments

                            - + character(len=*), intent(in) @@ -7441,7 +7441,7 @@

                            Arguments

                            -

                            private impure subroutine export_Xg(this, filename) +

                            private impure subroutine export_Xg(this, filename)

                            @@ -7464,7 +7464,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(in) @@ -7479,7 +7479,7 @@

                            Arguments

                            - + character(len=*), intent(in) @@ -7500,7 +7500,7 @@

                            Arguments

                            -

                            private pure subroutine finalize(this) +

                            private pure subroutine finalize(this)

                            @@ -7523,7 +7523,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(inout) @@ -7544,7 +7544,7 @@

                            Arguments

                            -

                            private pure subroutine insert_knots(this, dir, Xth, r) +

                            private pure subroutine insert_knots(this, dir, Xth, r)

                            @@ -7567,7 +7567,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(inout) @@ -7582,7 +7582,7 @@

                            Arguments

                            - + integer, intent(in) @@ -7597,7 +7597,7 @@

                            Arguments

                            - + real(kind=rk), intent(in), @@ -7612,7 +7612,7 @@

                            Arguments

                            - + integer, intent(in), @@ -7633,7 +7633,7 @@

                            Arguments

                            -

                            private pure subroutine modify_Wc(this, W, num) +

                            private pure subroutine modify_Wc(this, W, num)

                            @@ -7656,7 +7656,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(inout) @@ -7671,7 +7671,7 @@

                            Arguments

                            - + real(kind=rk), intent(in) @@ -7686,7 +7686,7 @@

                            Arguments

                            - + integer, intent(in) @@ -7707,7 +7707,7 @@

                            Arguments

                            -

                            private pure subroutine modify_Xc(this, X, num, dir) +

                            private pure subroutine modify_Xc(this, X, num, dir)

                            @@ -7730,7 +7730,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(inout) @@ -7745,7 +7745,7 @@

                            Arguments

                            - + real(kind=rk), intent(in) @@ -7760,7 +7760,7 @@

                            Arguments

                            - + integer, intent(in) @@ -7775,7 +7775,7 @@

                            Arguments

                            - + integer, intent(in) @@ -7796,7 +7796,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)

                            @@ -7819,7 +7819,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(in) @@ -7834,7 +7834,7 @@

                            Arguments

                            - + real(kind=rk), intent(in) @@ -7849,7 +7849,7 @@

                            Arguments

                            - + real(kind=rk), intent(out), @@ -7864,7 +7864,7 @@

                            Arguments

                            - + real(kind=rk), intent(out), @@ -7879,7 +7879,7 @@

                            Arguments

                            - + integer, intent(out), @@ -7900,7 +7900,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)

                            @@ -7923,7 +7923,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(inout) @@ -7938,7 +7938,7 @@

                            Arguments

                            - + real(kind=rk), intent(in) @@ -7953,7 +7953,7 @@

                            Arguments

                            - + real(kind=rk), intent(in) @@ -7968,7 +7968,7 @@

                            Arguments

                            - + integer, intent(in) @@ -7983,7 +7983,7 @@

                            Arguments

                            - + real(kind=rk), intent(out) @@ -7998,7 +7998,7 @@

                            Arguments

                            - + real(kind=rk), intent(out), @@ -8042,7 +8042,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(inout) @@ -8057,7 +8057,7 @@

                            Arguments

                            - + real(kind=rk), intent(in), @@ -8072,7 +8072,7 @@

                            Arguments

                            - + integer, intent(in), @@ -8093,7 +8093,7 @@

                            Arguments

                            -

                            private pure subroutine remove_knots(this, dir, Xth, r) +

                            private pure subroutine remove_knots(this, dir, Xth, r)

                            @@ -8116,7 +8116,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(inout) @@ -8131,7 +8131,7 @@

                            Arguments

                            - + integer, intent(in) @@ -8146,7 +8146,7 @@

                            Arguments

                            - + real(kind=rk), intent(in), @@ -8161,7 +8161,7 @@

                            Arguments

                            - + integer, intent(in), @@ -8182,7 +8182,7 @@

                            Arguments

                            -

                            private pure subroutine rotate_Xc(this, alpha, beta, theta) +

                            private pure subroutine rotate_Xc(this, alpha, beta, theta)

                            @@ -8205,7 +8205,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(inout) @@ -8220,7 +8220,7 @@

                            Arguments

                            - + real(kind=rk), intent(in) @@ -8235,7 +8235,7 @@

                            Arguments

                            - + real(kind=rk), intent(in) @@ -8250,7 +8250,7 @@

                            Arguments

                            - + real(kind=rk), intent(in) @@ -8271,7 +8271,7 @@

                            Arguments

                            -

                            private pure subroutine rotate_Xg(this, alpha, beta, theta) +

                            private pure subroutine rotate_Xg(this, alpha, beta, theta)

                            @@ -8294,7 +8294,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(inout) @@ -8309,7 +8309,7 @@

                            Arguments

                            - + real(kind=rk), intent(in) @@ -8324,7 +8324,7 @@

                            Arguments

                            - + real(kind=rk), intent(in) @@ -8339,7 +8339,7 @@

                            Arguments

                            - + real(kind=rk), intent(in) @@ -8360,7 +8360,7 @@

                            Arguments

                            -

                            private pure subroutine set1(this, knot1, knot2, knot3, Xc, Wc) +

                            private pure subroutine set1(this, knot1, knot2, knot3, Xc, Wc)

                            @@ -8383,7 +8383,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(inout) @@ -8398,7 +8398,7 @@

                            Arguments

                            - + real(kind=rk), intent(in), @@ -8413,7 +8413,7 @@

                            Arguments

                            - + real(kind=rk), intent(in), @@ -8428,7 +8428,7 @@

                            Arguments

                            - + real(kind=rk), intent(in), @@ -8443,7 +8443,7 @@

                            Arguments

                            - + real(kind=rk), intent(in), @@ -8458,7 +8458,7 @@

                            Arguments

                            - + real(kind=rk), intent(in), @@ -8479,7 +8479,7 @@

                            Arguments

                            -

                            private pure subroutine set2(this, Xth_dir1, Xth_dir2, Xth_dir3, degree, continuity1, continuity2, continuity3, Xc, Wc) +

                            private pure subroutine set2(this, Xth_dir1, Xth_dir2, Xth_dir3, degree, continuity1, continuity2, continuity3, Xc, Wc)

                            @@ -8502,7 +8502,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(inout) @@ -8562,7 +8562,7 @@

                            Arguments

                            - + integer, intent(in), @@ -8622,7 +8622,7 @@

                            Arguments

                            - + real(kind=rk), intent(in), @@ -8637,7 +8637,7 @@

                            Arguments

                            - + real(kind=rk), intent(in), @@ -8658,7 +8658,7 @@

                            Arguments

                            -

                            private pure subroutine set3(this, nc, Xc, Wc) +

                            private pure subroutine set3(this, nc, Xc, Wc)

                            @@ -8681,7 +8681,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(inout) @@ -8696,7 +8696,7 @@

                            Arguments

                            - + integer, intent(in), @@ -8711,7 +8711,7 @@

                            Arguments

                            - + real(kind=rk), intent(in), @@ -8726,7 +8726,7 @@

                            Arguments

                            - + real(kind=rk), intent(in), @@ -8747,7 +8747,7 @@

                            Arguments

                            -

                            private pure subroutine set4(this, degree, nc, Xc, Wc) +

                            private pure subroutine set4(this, degree, nc, Xc, Wc)

                            @@ -8770,7 +8770,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(inout) @@ -8785,7 +8785,7 @@

                            Arguments

                            - + integer, intent(in), @@ -8800,7 +8800,7 @@

                            Arguments

                            - + integer, intent(in), @@ -8815,7 +8815,7 @@

                            Arguments

                            - + real(kind=rk), intent(in), @@ -8830,7 +8830,7 @@

                            Arguments

                            - + real(kind=rk), intent(in), @@ -8851,7 +8851,7 @@

                            Arguments

                            -

                            private pure subroutine set_C(this, center, radius1, radius2, length) +

                            private pure subroutine set_C(this, center, radius1, radius2, length)

                            @@ -8874,7 +8874,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(inout) @@ -8889,7 +8889,7 @@

                            Arguments

                            - + real(kind=rk), intent(in), @@ -8934,7 +8934,7 @@

                            Arguments

                            - + real(kind=rk), intent(in) @@ -8955,7 +8955,7 @@

                            Arguments

                            -

                            private pure subroutine set_elem(this, elemConn) +

                            private pure subroutine set_elem(this, elemConn)

                            @@ -8978,7 +8978,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(inout) @@ -8993,7 +8993,7 @@

                            Arguments

                            - + integer, intent(in), @@ -9014,7 +9014,7 @@

                            Arguments

                            -

                            private pure subroutine set_elem_Xc_vis(this, elemConn) +

                            private pure subroutine set_elem_Xc_vis(this, elemConn)

                            @@ -9037,7 +9037,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(inout) @@ -9052,7 +9052,7 @@

                            Arguments

                            - + integer, intent(in), @@ -9073,7 +9073,7 @@

                            Arguments

                            -

                            private pure subroutine set_elem_Xg_vis(this, elemConn) +

                            private pure subroutine set_elem_Xg_vis(this, elemConn)

                            @@ -9096,7 +9096,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(inout) @@ -9111,7 +9111,7 @@

                            Arguments

                            - + integer, intent(in), @@ -9155,7 +9155,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(inout) @@ -9170,7 +9170,7 @@

                            Arguments

                            - + real(kind=rk), intent(in), @@ -9215,7 +9215,7 @@

                            Arguments

                            - + real(kind=rk), intent(in) @@ -9259,7 +9259,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(inout) @@ -9274,7 +9274,7 @@

                            Arguments

                            - + real(kind=rk), intent(in), @@ -9289,7 +9289,7 @@

                            Arguments

                            - + integer, intent(in), @@ -9304,7 +9304,7 @@

                            Arguments

                            - + real(kind=rk), intent(in), @@ -9348,7 +9348,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(inout) @@ -9363,7 +9363,7 @@

                            Arguments

                            - + real(kind=rk), intent(in), @@ -9408,7 +9408,7 @@

                            Arguments

                            - + real(kind=rk), intent(in) @@ -9429,7 +9429,7 @@

                            Arguments

                            -

                            private impure subroutine show(this, vtkfile_Xc, vtkfile_Xg) +

                            private impure subroutine show(this, vtkfile_Xc, vtkfile_Xg)

                            @@ -9452,7 +9452,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(inout) @@ -9467,7 +9467,7 @@

                            Arguments

                            - + character(len=*), intent(in) @@ -9482,7 +9482,7 @@

                            Arguments

                            - + character(len=*), intent(in) @@ -9503,7 +9503,7 @@

                            Arguments

                            -

                            private pure subroutine translate_Xc(this, vec) +

                            private pure subroutine translate_Xc(this, vec)

                            @@ -9526,7 +9526,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(inout) @@ -9541,7 +9541,7 @@

                            Arguments

                            - + real(kind=rk), intent(in) @@ -9562,7 +9562,7 @@

                            Arguments

                            -

                            private pure subroutine translate_Xg(this, vec) +

                            private pure subroutine translate_Xg(this, vec)

                            @@ -9585,7 +9585,7 @@

                            Arguments

                            - + class(nurbs_volume), intent(inout) @@ -9600,7 +9600,7 @@

                            Arguments

                            - + real(kind=rk), intent(in) @@ -9643,7 +9643,7 @@

                            Arguments

                            Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                            + on 2024-07-01T10:00:02.512255


                            diff --git a/module/forcad_utils.html b/module/forcad_utils.html index aac75071c..81dfcdbf0 100644 --- a/module/forcad_utils.html +++ b/module/forcad_utils.html @@ -1782,7 +1782,7 @@

                            Arguments

                            - + real(kind=rk), intent(in), @@ -1830,7 +1830,7 @@

                            Arguments

                            - + real(kind=rk), intent(in), @@ -2428,7 +2428,7 @@

                            Arguments

                            - + real(kind=rk), intent(in), @@ -2443,7 +2443,7 @@

                            Arguments

                            - + real(kind=rk), intent(in), @@ -2621,7 +2621,7 @@

                            Arguments

                            - + real(kind=rk), intent(in), @@ -2636,7 +2636,7 @@

                            Arguments

                            - + real(kind=rk), intent(in), @@ -2779,7 +2779,7 @@

                            Arguments

                            - + integer, intent(in) @@ -2882,7 +2882,7 @@

                            Arguments

                            - + integer, intent(in) @@ -3000,7 +3000,7 @@

                            Arguments

                            - + integer, intent(in) @@ -3374,7 +3374,7 @@

                            Arguments

                            - + integer, intent(in) @@ -3438,7 +3438,7 @@

                            Arguments

                            - + real(kind=rk), intent(in), @@ -3453,7 +3453,7 @@

                            Arguments

                            - + integer, intent(in) @@ -3468,7 +3468,7 @@

                            Arguments

                            - + integer, intent(in) @@ -3517,7 +3517,7 @@

                            Arguments

                            - + real(kind=rk), intent(in), @@ -3532,7 +3532,7 @@

                            Arguments

                            - + integer, intent(in) @@ -3547,7 +3547,7 @@

                            Arguments

                            - + integer, intent(in), @@ -3660,7 +3660,7 @@

                            Arguments

                            - + integer, intent(in) @@ -3690,7 +3690,7 @@

                            Arguments

                            - + real(kind=rk), intent(in), @@ -3739,7 +3739,7 @@

                            Arguments

                            - + real(kind=rk), intent(in) @@ -3754,7 +3754,7 @@

                            Arguments

                            - + integer, intent(in) @@ -3995,7 +3995,7 @@

                            Arguments

                            - + real(kind=rk), intent(in) @@ -4010,7 +4010,7 @@

                            Arguments

                            - + integer, intent(in) @@ -4405,7 +4405,7 @@

                            Arguments

                            - + real(kind=rk), intent(in), @@ -4454,7 +4454,7 @@

                            Arguments

                            - + real(kind=rk), intent(in), @@ -4911,7 +4911,7 @@

                            Arguments

                            - + real(kind=rk), intent(in), @@ -4926,7 +4926,7 @@

                            Arguments

                            - + integer, intent(in) @@ -4941,7 +4941,7 @@

                            Arguments

                            - + integer, intent(in) @@ -4971,7 +4971,7 @@

                            Arguments

                            - + real(kind=rk), intent(out), @@ -4986,7 +4986,7 @@

                            Arguments

                            - + real(kind=rk), intent(out), @@ -5045,7 +5045,7 @@

                            Arguments

                            - + real(kind=rk), intent(in), @@ -5060,7 +5060,7 @@

                            Arguments

                            - + integer, intent(in) @@ -5075,7 +5075,7 @@

                            Arguments

                            - + integer, intent(in) @@ -5090,7 +5090,7 @@

                            Arguments

                            - + real(kind=rk), intent(out), @@ -5105,7 +5105,7 @@

                            Arguments

                            - + real(kind=rk), intent(out), @@ -5149,7 +5149,7 @@

                            Arguments

                            - + integer, intent(in) @@ -5164,7 +5164,7 @@

                            Arguments

                            - + real(kind=rk), intent(in), @@ -5179,7 +5179,7 @@

                            Arguments

                            - + integer, intent(in) @@ -5477,7 +5477,7 @@

                            Arguments

                            - + real(kind=rk), intent(in), @@ -5567,7 +5567,7 @@

                            Arguments

                            - + integer, intent(out) @@ -5805,7 +5805,7 @@

                            Arguments

                            - + real(kind=rk), intent(in), @@ -5820,7 +5820,7 @@

                            Arguments

                            - + real(kind=rk), intent(in), @@ -5999,7 +5999,7 @@

                            Arguments

                            - + real(kind=rk), intent(in), @@ -6014,7 +6014,7 @@

                            Arguments

                            - + real(kind=rk), intent(in), @@ -6148,7 +6148,7 @@

                            Arguments

                            - + integer, intent(in) @@ -6252,7 +6252,7 @@

                            Arguments

                            - + integer, intent(in) @@ -6371,7 +6371,7 @@

                            Arguments

                            - + integer, intent(in) @@ -6607,7 +6607,7 @@

                            Arguments

                            Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                            + on 2024-07-01T10:00:02.512255


                            diff --git a/proc/ansatz.html b/proc/ansatz.html index 696492fc4..9a48f9b54 100644 --- a/proc/ansatz.html +++ b/proc/ansatz.html @@ -78,20 +78,20 @@

                            ansatz
                          • 34 statements + title=" 0.5% of total for procedures.">31 statements
                          • - Source File + Source File
                          -

                          private pure subroutine ansatz(this, ie, ig, Tgc, dTgc_dXg, dV) +

                          private pure subroutine ansatz(this, ie, ig, Tgc, dTgc_dXg, dL)

                          Type Bound

                          -

                          nurbs_volume

                          +

                          nurbs_curve

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          @@ -233,7 +233,7 @@

                          Arguments

                          @@ -241,7 +241,7 @@

                          Arguments

                          - + @@ -261,658 +261,628 @@

                          Calls

                          - - + + proc~~ansatz~~CallsGraph - + proc~ansatz - -nurbs_volume%ansatz + +nurbs_curve%ansatz - + -interface~gauss_leg - - -gauss_leg +interface~dyad + + +dyad - + -proc~ansatz->interface~gauss_leg - - +proc~ansatz->interface~dyad + + - + -interface~ndgrid - - -ndgrid +interface~gauss_leg + + +gauss_leg - + -proc~ansatz->interface~ndgrid - - +proc~ansatz->interface~gauss_leg + + interface~unique - -unique + +unique proc~ansatz->interface~unique - - + + none~derivative - - -nurbs_volume%derivative + + +nurbs_curve%derivative proc~ansatz->none~derivative - - + + none~set - - -nurbs_volume%set + + +nurbs_curve%set proc~ansatz->none~set - - + + proc~cmp_elem - - -nurbs_volume%cmp_elem + + +nurbs_curve%cmp_elem proc~ansatz->proc~cmp_elem - - + + - - -proc~det - - -det + + +proc~dyad_t1_t1 + + +dyad_t1_t1 - + -proc~ansatz->proc~det - - - - - -proc~inv - - -inv - - - - - -proc~ansatz->proc~inv - - +interface~dyad->proc~dyad_t1_t1 + + - + proc~gauss_legendre_1d - - -gauss_legendre_1D + + +gauss_legendre_1D - + interface~gauss_leg->proc~gauss_legendre_1d - - + + - + proc~gauss_legendre_2d - - -gauss_legendre_2D + + +gauss_legendre_2D - + interface~gauss_leg->proc~gauss_legendre_2d - - + + - + proc~gauss_legendre_3d - - -gauss_legendre_3D + + +gauss_legendre_3D - + interface~gauss_leg->proc~gauss_legendre_3d - - - - - -proc~ndgrid2 - - -ndgrid2 - - - - - -interface~ndgrid->proc~ndgrid2 - - - - - -proc~ndgrid3 - - -ndgrid3 - - - - - -interface~ndgrid->proc~ndgrid3 - - + + - + proc~unique_integer - - -unique_integer + + +unique_integer - + interface~unique->proc~unique_integer - - + + - + proc~unique_real - - -unique_real + + +unique_real - + interface~unique->proc~unique_real - - + + - + proc~derivative_scalar - - -nurbs_volume%derivative_scalar + + +nurbs_curve%derivative_scalar - + none~derivative->proc~derivative_scalar - - + + - + proc~derivative_vector - - -nurbs_volume%derivative_vector + + +nurbs_curve%derivative_vector - + none~derivative->proc~derivative_vector - - + + - + proc~set1 - - -nurbs_volume%set1 + + +nurbs_curve%set1 - + none~set->proc~set1 - - + + + + + +proc~set1a + + +nurbs_curve%set1a + + + + + +none~set->proc~set1a + + - + proc~set2 - - -nurbs_volume%set2 + + +nurbs_curve%set2 - + none~set->proc~set2 - - + + - + proc~set3 - - -nurbs_volume%set3 + + +nurbs_curve%set3 - + none~set->proc~set3 - - + + - + proc~set4 - - -nurbs_volume%set4 + + +nurbs_curve%set4 - + none~set->proc~set4 - - + + - + proc~cmp_elem->interface~unique - - + + - + interface~elemconn_cn - - -elemConn_Cn + + +elemConn_Cn - + proc~cmp_elem->interface~elemconn_cn - - + + - + proc~get_multiplicity - - -nurbs_volume%get_multiplicity + + +nurbs_curve%get_multiplicity - + proc~cmp_elem->proc~get_multiplicity - - - - - -proc~inv->proc~det - - - - - -proc~inv->proc~inv - - + + - + 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~compute_dtgc - - -compute_dTgc + + +compute_dTgc - + proc~derivative_scalar->interface~compute_dtgc - - + + - + proc~is_rational - - -nurbs_volume%is_rational + + +nurbs_curve%is_rational - + proc~derivative_scalar->proc~is_rational - - - - - -proc~derivative_vector->interface~ndgrid - - + + - + proc~derivative_vector->interface~compute_dtgc - - + + - + proc~derivative_vector->proc~is_rational - - + + - + gauss_legendre - -gauss_legendre + +gauss_legendre - + proc~gauss_legendre_1d->gauss_legendre - - - - - -proc~gauss_legendre_2d->interface~ndgrid - - + + - + proc~gauss_legendre_2d->gauss_legendre - - + + + + + +interface~ndgrid + + +ndgrid + + + + + +proc~gauss_legendre_2d->interface~ndgrid + + - + proc~kron - - -kron + + +kron - + proc~gauss_legendre_2d->proc~kron - - - - - -proc~gauss_legendre_3d->interface~ndgrid - - + + - + proc~gauss_legendre_3d->gauss_legendre - - + + + + + +proc~gauss_legendre_3d->interface~ndgrid + + - + proc~gauss_legendre_3d->proc~kron - - + + - + interface~compute_multiplicity - - -compute_multiplicity + + +compute_multiplicity - + proc~get_multiplicity->interface~compute_multiplicity - - + + - + proc~cmp_degree - - -nurbs_volume%cmp_degree + + +nurbs_curve%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~set1a->proc~cmp_degree + + - + proc~compute_knot_vector - - -compute_knot_vector + + +compute_knot_vector - + proc~set2->proc~compute_knot_vector - - + + - + proc~set3->proc~cmp_degree - - + + - + 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~ndgrid2 + + +ndgrid2 + + + + + +interface~ndgrid->proc~ndgrid2 + + + + + +proc~ndgrid3 + + +ndgrid3 + + + + + +interface~ndgrid->proc~ndgrid3 + + - + proc~cmp_degree->proc~get_multiplicity - - - - - -proc~cmp_nc->interface~compute_multiplicity - - + + proc~repelem - -repelem + +repelem - + proc~compute_knot_vector->proc~repelem - - + + @@ -1012,46 +982,46 @@

                          Called by

                          - + proc~~ansatz~~CalledByGraph - + proc~ansatz - -nurbs_volume%ansatz + +nurbs_curve%ansatz - + -proc~cmp_volume - - -nurbs_volume%cmp_volume +proc~cmp_length + + +nurbs_curve%cmp_length - + -proc~cmp_volume->proc~ansatz - - +proc~cmp_length->proc~ansatz + + - + -program~compute_volume - - -compute_volume +program~compute_length + + +compute_length - + -program~compute_volume->proc~cmp_volume - - +program~compute_length->proc~cmp_length + + @@ -1167,7 +1137,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/ansatz~2.html b/proc/ansatz~2.html index f3efc94ec..872f3d8e8 100644 --- a/proc/ansatz~2.html +++ b/proc/ansatz~2.html @@ -78,20 +78,20 @@

                          ansatz
                        • 33 statements + title=" 0.5% of total for procedures.">34 statements
                        • - Source File + Source File
                        • -

                          private pure subroutine ansatz(this, ie, ig, Tgc, dTgc_dXg, dA) +

                          private pure subroutine ansatz(this, ie, ig, Tgc, dTgc_dXg, dV)

                          Type Bound

                          -

                          nurbs_surface

                          +

                          nurbs_volume

                          Arguments

                          - - class(nurbs_volume), + + class(nurbs_curve), intent(inout) @@ -203,7 +203,7 @@

                          Arguments

                          - + real(kind=rk), intent(out),
                          - + real(kind=rk), intent(out) ::dVdL
                          @@ -158,8 +158,8 @@

                          Arguments

                          @@ -241,7 +241,7 @@

                          Arguments

                          - + @@ -270,7 +270,7 @@

                          Calls

                          proc~ansatz~2 -nurbs_surface%ansatz +nurbs_volume%ansatz @@ -320,9 +320,9 @@

                          Calls

                          none~derivative~2 - + -nurbs_surface%derivative +nurbs_volume%derivative @@ -335,9 +335,9 @@

                          Calls

                          none~set~2 - + -nurbs_surface%set +nurbs_volume%set @@ -350,9 +350,9 @@

                          Calls

                          proc~cmp_elem~2 - + -nurbs_surface%cmp_elem +nurbs_volume%cmp_elem @@ -500,9 +500,9 @@

                          Calls

                          proc~derivative_scalar~2 - + -nurbs_surface%derivative_scalar +nurbs_volume%derivative_scalar @@ -515,9 +515,9 @@

                          Calls

                          proc~derivative_vector~2 - + -nurbs_surface%derivative_vector +nurbs_volume%derivative_vector @@ -530,9 +530,9 @@

                          Calls

                          proc~set1~2 - + -nurbs_surface%set1 +nurbs_volume%set1 @@ -545,9 +545,9 @@

                          Calls

                          proc~set2~2 - + -nurbs_surface%set2 +nurbs_volume%set2 @@ -560,9 +560,9 @@

                          Calls

                          proc~set3~2 - + -nurbs_surface%set3 +nurbs_volume%set3 @@ -575,9 +575,9 @@

                          Calls

                          proc~set4~2 - + -nurbs_surface%set4 +nurbs_volume%set4 @@ -611,9 +611,9 @@

                          Calls

                          proc~get_multiplicity~2 - + -nurbs_surface%get_multiplicity +nurbs_volume%get_multiplicity @@ -698,9 +698,9 @@

                          Calls

                          proc~is_rational~2 - + -nurbs_surface%is_rational +nurbs_volume%is_rational @@ -803,9 +803,9 @@

                          Calls

                          proc~cmp_degree~2 - + -nurbs_surface%cmp_degree +nurbs_volume%cmp_degree @@ -818,9 +818,9 @@

                          Calls

                          proc~cmp_nc~2 - + -nurbs_surface%cmp_nc +nurbs_volume%cmp_nc @@ -1012,46 +1012,46 @@

                          Called by

                          - + proc~~ansatz~2~~CalledByGraph - + proc~ansatz~2 - -nurbs_surface%ansatz + +nurbs_volume%ansatz - + -proc~cmp_area - - -nurbs_surface%cmp_area +proc~cmp_volume + + +nurbs_volume%cmp_volume - + -proc~cmp_area->proc~ansatz~2 - - +proc~cmp_volume->proc~ansatz~2 + + - + -program~compute_area - - -compute_area +program~compute_volume + + +compute_volume - + -program~compute_area->proc~cmp_area - - +program~compute_volume->proc~cmp_volume + + @@ -1167,7 +1167,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/ansatz~3.html b/proc/ansatz~3.html index 782c91978..b63428f9c 100644 --- a/proc/ansatz~3.html +++ b/proc/ansatz~3.html @@ -78,20 +78,20 @@

                          ansatz
                        • 31 statements + title=" 0.5% of total for procedures.">33 statements
                        • - Source File + Source File
                        • -

                          private pure subroutine ansatz(this, ie, ig, Tgc, dTgc_dXg, dL) +

                          private pure subroutine ansatz(this, ie, ig, Tgc, dTgc_dXg, dA)

                          Type Bound

                          -

                          nurbs_curve

                          +

                          nurbs_surface

                          Arguments

                          - - class(nurbs_surface), + + class(nurbs_volume), intent(inout) @@ -233,7 +233,7 @@

                          Arguments

                          - + real(kind=rk), intent(out) ::dAdV
                          @@ -159,7 +159,7 @@

                          Arguments

                          @@ -241,7 +241,7 @@

                          Arguments

                          - + @@ -261,628 +261,658 @@

                          Calls

                          - - + + proc~~ansatz~3~~CallsGraph - + proc~ansatz~3 - -nurbs_curve%ansatz + +nurbs_surface%ansatz - + -interface~dyad - - -dyad +interface~gauss_leg + + +gauss_leg - + -proc~ansatz~3->interface~dyad - - +proc~ansatz~3->interface~gauss_leg + + - + -interface~gauss_leg - - -gauss_leg +interface~ndgrid + + +ndgrid - + -proc~ansatz~3->interface~gauss_leg - - +proc~ansatz~3->interface~ndgrid + + interface~unique - -unique + +unique proc~ansatz~3->interface~unique - - + + none~derivative~3 - - -nurbs_curve%derivative + + +nurbs_surface%derivative proc~ansatz~3->none~derivative~3 - - + + none~set~3 - - -nurbs_curve%set + + +nurbs_surface%set proc~ansatz~3->none~set~3 - - + + proc~cmp_elem~3 - - -nurbs_curve%cmp_elem + + +nurbs_surface%cmp_elem proc~ansatz~3->proc~cmp_elem~3 - - + + - - -proc~dyad_t1_t1 - - -dyad_t1_t1 + + +proc~det + + +det - + -interface~dyad->proc~dyad_t1_t1 - - +proc~ansatz~3->proc~det + + + + + +proc~inv + + +inv + + + + + +proc~ansatz~3->proc~inv + + - + proc~gauss_legendre_1d - - -gauss_legendre_1D + + +gauss_legendre_1D - + interface~gauss_leg->proc~gauss_legendre_1d - - + + - + proc~gauss_legendre_2d - - -gauss_legendre_2D + + +gauss_legendre_2D - + interface~gauss_leg->proc~gauss_legendre_2d - - + + - + proc~gauss_legendre_3d - - -gauss_legendre_3D + + +gauss_legendre_3D - + interface~gauss_leg->proc~gauss_legendre_3d - - + + + + + +proc~ndgrid2 + + +ndgrid2 + + + + + +interface~ndgrid->proc~ndgrid2 + + + + + +proc~ndgrid3 + + +ndgrid3 + + + + + +interface~ndgrid->proc~ndgrid3 + + - + proc~unique_integer - - -unique_integer + + +unique_integer - + interface~unique->proc~unique_integer - - + + - + proc~unique_real - - -unique_real + + +unique_real - + interface~unique->proc~unique_real - - + + - + proc~derivative_scalar~3 - - -nurbs_curve%derivative_scalar + + +nurbs_surface%derivative_scalar - + none~derivative~3->proc~derivative_scalar~3 - - + + - + proc~derivative_vector~3 - - -nurbs_curve%derivative_vector + + +nurbs_surface%derivative_vector - + none~derivative~3->proc~derivative_vector~3 - - - - - -proc~set1a - - -nurbs_curve%set1a - - - - - -none~set~3->proc~set1a - - + + - + proc~set1~3 - - -nurbs_curve%set1 + + +nurbs_surface%set1 - + none~set~3->proc~set1~3 - - + + - + proc~set2~3 - - -nurbs_curve%set2 + + +nurbs_surface%set2 - + none~set~3->proc~set2~3 - - + + - + proc~set3~3 - - -nurbs_curve%set3 + + +nurbs_surface%set3 - + none~set~3->proc~set3~3 - - + + - + proc~set4~3 - - -nurbs_curve%set4 + + +nurbs_surface%set4 - + none~set~3->proc~set4~3 - - + + - + proc~cmp_elem~3->interface~unique - - + + - + interface~elemconn_cn - - -elemConn_Cn + + +elemConn_Cn - + proc~cmp_elem~3->interface~elemconn_cn - - + + - + proc~get_multiplicity~3 - - -nurbs_curve%get_multiplicity + + +nurbs_surface%get_multiplicity - + proc~cmp_elem~3->proc~get_multiplicity~3 - - + + + + + +proc~inv->proc~det + + + + + +proc~inv->proc~inv + + - + 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~compute_dtgc~3 - - -compute_dTgc + + +compute_dTgc - + proc~derivative_scalar~3->interface~compute_dtgc~3 - - + + - + proc~is_rational~3 - - -nurbs_curve%is_rational + + +nurbs_surface%is_rational - + proc~derivative_scalar~3->proc~is_rational~3 - - + + + + + +proc~derivative_vector~3->interface~ndgrid + + - + proc~derivative_vector~3->interface~compute_dtgc~3 - - + + - + proc~derivative_vector~3->proc~is_rational~3 - - + + - + gauss_legendre - -gauss_legendre + +gauss_legendre - + proc~gauss_legendre_1d->gauss_legendre - - - - - -proc~gauss_legendre_2d->gauss_legendre - - - - - -interface~ndgrid - - -ndgrid - - + + - + proc~gauss_legendre_2d->interface~ndgrid - - + + + + + +proc~gauss_legendre_2d->gauss_legendre + + - + proc~kron - - -kron + + +kron - + proc~gauss_legendre_2d->proc~kron - - - - - -proc~gauss_legendre_3d->gauss_legendre - - + + - + proc~gauss_legendre_3d->interface~ndgrid - - + + + + + +proc~gauss_legendre_3d->gauss_legendre + + - + proc~gauss_legendre_3d->proc~kron - - + + - + interface~compute_multiplicity - - -compute_multiplicity + + +compute_multiplicity - + proc~get_multiplicity~3->interface~compute_multiplicity - - + + - + proc~cmp_degree~3 - - -nurbs_curve%cmp_degree + + +nurbs_surface%cmp_degree - - -proc~set1a->proc~cmp_degree~3 - - - - + 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~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~ndgrid2 - - -ndgrid2 - - - - - -interface~ndgrid->proc~ndgrid2 - - - - - -proc~ndgrid3 - - -ndgrid3 - - - - - -interface~ndgrid->proc~ndgrid3 - - + + - + 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 - - + + @@ -990,38 +1020,38 @@

                          Called by

                          proc~ansatz~3 - -nurbs_curve%ansatz + +nurbs_surface%ansatz - + -proc~cmp_length - - -nurbs_curve%cmp_length +proc~cmp_area + + +nurbs_surface%cmp_area - + -proc~cmp_length->proc~ansatz~3 - - +proc~cmp_area->proc~ansatz~3 + + - + -program~compute_length - - -compute_length +program~compute_area + + +compute_area - + -program~compute_length->proc~cmp_length - - +program~compute_area->proc~cmp_area + + @@ -1137,7 +1167,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/basis_bernstein.html b/proc/basis_bernstein.html index de06333c3..643645f03 100644 --- a/proc/basis_bernstein.html +++ b/proc/basis_bernstein.html @@ -171,7 +171,7 @@

                          Arguments

                          @@ -189,7 +189,7 @@

                          Arguments

                          Return Value - + real(kind=rk), allocatable, (:)

                          @@ -225,7 +225,7 @@

                          Return Value

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/basis_bspline.html b/proc/basis_bspline.html index 0775fdd61..505d82c75 100644 --- a/proc/basis_bspline.html +++ b/proc/basis_bspline.html @@ -171,7 +171,7 @@

                          Arguments

                          @@ -186,7 +186,7 @@

                          Arguments

                          @@ -201,7 +201,7 @@

                          Arguments

                          @@ -219,7 +219,7 @@

                          Arguments

                          Return Value - + real(kind=rk), allocatable, (:)

                          @@ -751,7 +751,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/basis_bspline_2der.html b/proc/basis_bspline_2der.html index dafe32460..dfc065d06 100644 --- a/proc/basis_bspline_2der.html +++ b/proc/basis_bspline_2der.html @@ -171,7 +171,7 @@

                          Arguments

                          @@ -186,7 +186,7 @@

                          Arguments

                          @@ -201,7 +201,7 @@

                          Arguments

                          @@ -231,7 +231,7 @@

                          Arguments

                          @@ -246,7 +246,7 @@

                          Arguments

                          @@ -579,7 +579,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/basis_bspline_der.html b/proc/basis_bspline_der.html index 7a729164d..29295bf8f 100644 --- a/proc/basis_bspline_der.html +++ b/proc/basis_bspline_der.html @@ -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

                          @@ -564,7 +564,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/basis_scalar.html b/proc/basis_scalar.html index b1ebfb65c..bd457983d 100644 --- a/proc/basis_scalar.html +++ b/proc/basis_scalar.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_volume

                          +

                          nurbs_curve

                          Arguments

                          - class(nurbs_curve), + class(nurbs_surface), intent(inout) @@ -233,7 +233,7 @@

                          Arguments

                          - + real(kind=rk), intent(out) ::dLdA
                          - + integer, intent(in)
                          - + real(kind=rk), intent(in),
                          - + integer, intent(in)
                          - + integer, 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),
                          - + integer, intent(in)
                          - + integer, intent(in)
                          - + real(kind=rk), intent(out),
                          - + real(kind=rk), intent(out),
                          @@ -158,8 +158,8 @@

                          Arguments

                          - + - + @@ -216,46 +216,46 @@

                          Calls

                          - + proc~~basis_scalar~~CallsGraph - + proc~basis_scalar - -nurbs_volume%basis_scalar + +nurbs_curve%basis_scalar interface~compute_tgc - -compute_Tgc + +compute_Tgc proc~basis_scalar->interface~compute_tgc - - + + proc~is_rational - - -nurbs_volume%is_rational + + +nurbs_curve%is_rational proc~basis_scalar->proc~is_rational - - + + @@ -371,7 +371,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/basis_scalar~2.html b/proc/basis_scalar~2.html index e0e3fa738..e4fa0931d 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_surface

                          +

                          nurbs_volume

                          Arguments

                          - - class(nurbs_volume), + + class(nurbs_curve), intent(inout) @@ -176,12 +176,12 @@

                          Arguments

                          real(kind=rk),
                          intent(in),intent(in) - contiguous + ::Xt(:)Xt
                          @@ -158,8 +158,8 @@

                          Arguments

                          - + @@ -188,7 +188,7 @@

                          Arguments

                          @@ -225,7 +225,7 @@

                          Calls

                          proc~basis_scalar~2 -nurbs_surface%basis_scalar +nurbs_volume%basis_scalar @@ -245,9 +245,9 @@

                          Calls

                          proc~is_rational~2 - + -nurbs_surface%is_rational +nurbs_volume%is_rational @@ -371,7 +371,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/basis_scalar~3.html b/proc/basis_scalar~3.html index 84463eba9..354682357 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_curve

                          +

                          nurbs_surface

                          Arguments

                          - - class(nurbs_surface), + + class(nurbs_volume), intent(inout) @@ -173,12 +173,12 @@

                          Arguments

                          - + real(kind=rk), intent(in)intent(in), - + contiguous :: Xt(:)
                          - + real(kind=rk), intent(out),
                          @@ -158,8 +158,8 @@

                          Arguments

                          - + @@ -216,46 +216,46 @@

                          Calls

                          - + proc~~basis_scalar~3~~CallsGraph - + proc~basis_scalar~3 - -nurbs_curve%basis_scalar + +nurbs_surface%basis_scalar interface~compute_tgc~3 - -compute_Tgc + +compute_Tgc proc~basis_scalar~3->interface~compute_tgc~3 - - + + proc~is_rational~3 - - -nurbs_curve%is_rational + + +nurbs_surface%is_rational proc~basis_scalar~3->proc~is_rational~3 - - + + @@ -371,7 +371,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/basis_vector.html b/proc/basis_vector.html index 779c9f010..971f11dc0 100644 --- a/proc/basis_vector.html +++ b/proc/basis_vector.html @@ -78,20 +78,20 @@

                          basis_vector
                        • 41 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, res3, Xt1, Xt2, Xt3, Tgc) +

                          private pure subroutine basis_vector(this, res, Xt, Tgc)

                          Type Bound

                          -

                          nurbs_volume

                          +

                          nurbs_curve

                          Arguments

                          - - class(nurbs_curve), + + class(nurbs_surface), intent(inout) @@ -181,7 +181,7 @@

                          Arguments

                          ::XtXt(:)
                          @@ -158,8 +158,8 @@

                          Arguments

                          @@ -181,74 +181,14 @@

                          Arguments

                          - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -256,7 +196,7 @@

                          Arguments

                          contiguous - + @@ -291,91 +231,46 @@

                          Calls

                          - - + + proc~~basis_vector~~CallsGraph - + proc~basis_vector - -nurbs_volume%basis_vector + +nurbs_curve%basis_vector interface~compute_tgc - -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 + + +nurbs_curve%is_rational - + proc~basis_vector->proc~is_rational - - - - - -proc~ndgrid2 - - -ndgrid2 - - - - - -interface~ndgrid->proc~ndgrid2 - - - - - -proc~ndgrid3 - - -ndgrid3 - - - - - -interface~ndgrid->proc~ndgrid3 - - + + @@ -491,7 +386,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/basis_vector~2.html b/proc/basis_vector~2.html index 2835cab07..2d05c7bc6 100644 --- a/proc/basis_vector~2.html +++ b/proc/basis_vector~2.html @@ -78,20 +78,20 @@

                          basis_vector
                        • 32 statements + title=" 0.6% of total for procedures.">41 statements
                        • - Source File + Source File
                        • -

                          private pure subroutine basis_vector(this, res1, res2, Xt1, Xt2, Tgc) +

                          private pure subroutine basis_vector(this, res1, res2, res3, Xt1, Xt2, Xt3, Tgc)

                          Type Bound

                          -

                          nurbs_surface

                          +

                          nurbs_volume

                          Arguments

                          - - class(nurbs_volume), + + class(nurbs_curve), intent(inout) @@ -173,7 +173,7 @@

                          Arguments

                          - + integer, intent(in), ::res1res
                          - - 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), ::Xt3(:)Xt(:)
                          @@ -158,8 +158,8 @@

                          Arguments

                          @@ -188,7 +188,7 @@

                          Arguments

                          @@ -203,7 +203,22 @@

                          Arguments

                          + + + + + + + + @@ -218,7 +233,7 @@

                          Arguments

                          @@ -233,7 +248,22 @@

                          Arguments

                          + + + + + + + + @@ -270,7 +300,7 @@

                          Calls

                          proc~basis_vector~2 -nurbs_surface%basis_vector +nurbs_volume%basis_vector @@ -305,9 +335,9 @@

                          Calls

                          proc~is_rational~2 - + -nurbs_surface%is_rational +nurbs_volume%is_rational @@ -461,7 +491,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/basis_vector~3.html b/proc/basis_vector~3.html index b99e13cf3..129e8ef26 100644 --- a/proc/basis_vector~3.html +++ b/proc/basis_vector~3.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_volume), intent(inout) @@ -173,7 +173,7 @@

                          Arguments

                          - + integer, intent(in),
                          - + integer, intent(in),
                          - + + integer, + intent(in),optional + + ::res3 + +
                          + real(kind=rk), intent(in),
                          - + real(kind=rk), intent(in),
                          - + + real(kind=rk), + intent(in),optional, + contiguous + ::Xt3(:) + +
                          + real(kind=rk), intent(out),
                          @@ -158,8 +158,8 @@

                          Arguments

                          @@ -181,14 +181,44 @@

                          Arguments

                          - + + + + + + + + + + + + + + + + + @@ -196,7 +226,7 @@

                          Arguments

                          contiguous - + @@ -231,46 +261,91 @@

                          Calls

                          - - + + proc~~basis_vector~3~~CallsGraph - + proc~basis_vector~3 - -nurbs_curve%basis_vector + +nurbs_surface%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_curve%is_rational + + +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 + + @@ -386,7 +461,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/bincoeff.html b/proc/bincoeff.html index 8a5d7047a..0f4caa858 100644 --- a/proc/bincoeff.html +++ b/proc/bincoeff.html @@ -355,9 +355,9 @@

                          Called by

                          proc~elevate_degree - - -nurbs_volume%elevate_degree + + +nurbs_curve%elevate_degree @@ -370,9 +370,9 @@

                          Called by

                          proc~elevate_degree~2 - + -nurbs_surface%elevate_degree +nurbs_volume%elevate_degree @@ -385,9 +385,9 @@

                          Called by

                          proc~elevate_degree~3 - - -nurbs_curve%elevate_degree + + +nurbs_surface%elevate_degree @@ -401,46 +401,46 @@

                          Called by

                          program~example1_curve - -example1_curve + +example1_curve - - -program~example1_curve->proc~elevate_degree~3 - - + + +program~example1_curve->proc~elevate_degree + + program~example3_surface - -example3_surface + +example3_surface - - -program~example3_surface->proc~elevate_degree~2 - - + + +program~example3_surface->proc~elevate_degree~3 + + program~example3_volume - -example3_volume + +example3_volume - - -program~example3_volume->proc~elevate_degree - - + + +program~example3_volume->proc~elevate_degree~2 + + @@ -556,7 +556,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/cmp_area.html b/proc/cmp_area.html index 343bce730..f2d629b45 100644 --- a/proc/cmp_area.html +++ b/proc/cmp_area.html @@ -158,7 +158,7 @@

                          Arguments

                          @@ -212,39 +212,39 @@

                          Calls

                          nurbs_surface%cmp_area - + -proc~ansatz~2 - +proc~ansatz~3 + nurbs_surface%ansatz - + -proc~cmp_area->proc~ansatz~2 +proc~cmp_area->proc~ansatz~3 - + -proc~cmp_elem~2 - +proc~cmp_elem~3 + nurbs_surface%cmp_elem - + -proc~cmp_area->proc~cmp_elem~2 +proc~cmp_area->proc~cmp_elem~3 - + -proc~ansatz~2->proc~cmp_elem~2 +proc~ansatz~3->proc~cmp_elem~3 @@ -257,9 +257,9 @@

                          Calls

                          - + -proc~ansatz~2->interface~gauss_leg +proc~ansatz~3->interface~gauss_leg @@ -272,9 +272,9 @@

                          Calls

                          - + -proc~ansatz~2->interface~ndgrid +proc~ansatz~3->interface~ndgrid @@ -287,39 +287,39 @@

                          Calls

                          - + -proc~ansatz~2->interface~unique +proc~ansatz~3->interface~unique - + -none~derivative~2 - +none~derivative~3 + nurbs_surface%derivative - + -proc~ansatz~2->none~derivative~2 +proc~ansatz~3->none~derivative~3 - + -none~set~2 - +none~set~3 + nurbs_surface%set - + -proc~ansatz~2->none~set~2 +proc~ansatz~3->none~set~3 @@ -332,9 +332,9 @@

                          Calls

                          - + -proc~ansatz~2->proc~det +proc~ansatz~3->proc~det @@ -347,9 +347,9 @@

                          Calls

                          - + -proc~ansatz~2->proc~inv +proc~ansatz~3->proc~inv @@ -362,30 +362,30 @@

                          Calls

                          - + -proc~cmp_elem~2->interface~elemconn_cn +proc~cmp_elem~3->interface~elemconn_cn - + -proc~cmp_elem~2->interface~unique +proc~cmp_elem~3->interface~unique - + -proc~get_multiplicity~2 - +proc~get_multiplicity~3 + nurbs_surface%get_multiplicity - + -proc~cmp_elem~2->proc~get_multiplicity~2 +proc~cmp_elem~3->proc~get_multiplicity~3 @@ -539,93 +539,93 @@

                          Calls

                          - + -proc~derivative_scalar~2 - +proc~derivative_scalar~3 + nurbs_surface%derivative_scalar - + -none~derivative~2->proc~derivative_scalar~2 +none~derivative~3->proc~derivative_scalar~3 - + -proc~derivative_vector~2 - +proc~derivative_vector~3 + nurbs_surface%derivative_vector - + -none~derivative~2->proc~derivative_vector~2 +none~derivative~3->proc~derivative_vector~3 - + -proc~set1~2 - +proc~set1~3 + nurbs_surface%set1 - + -none~set~2->proc~set1~2 +none~set~3->proc~set1~3 - + -proc~set2~2 - +proc~set2~3 + nurbs_surface%set2 - + -none~set~2->proc~set2~2 +none~set~3->proc~set2~3 - + -proc~set3~2 - +proc~set3~3 + nurbs_surface%set3 - + -none~set~2->proc~set3~2 +none~set~3->proc~set3~3 - + -proc~set4~2 - +proc~set4~3 + nurbs_surface%set4 - + -none~set~2->proc~set4~2 +none~set~3->proc~set4~3 @@ -638,9 +638,9 @@

                          Calls

                          - + -proc~get_multiplicity~2->interface~compute_multiplicity +proc~get_multiplicity~3->interface~compute_multiplicity @@ -686,51 +686,51 @@

                          Calls

                          - + -interface~compute_dtgc~2 - +interface~compute_dtgc~3 + compute_dTgc - + -proc~derivative_scalar~2->interface~compute_dtgc~2 +proc~derivative_scalar~3->interface~compute_dtgc~3 - + -proc~is_rational~2 - +proc~is_rational~3 + nurbs_surface%is_rational - + -proc~derivative_scalar~2->proc~is_rational~2 +proc~derivative_scalar~3->proc~is_rational~3 - + -proc~derivative_vector~2->interface~ndgrid +proc~derivative_vector~3->interface~ndgrid - + -proc~derivative_vector~2->interface~compute_dtgc~2 +proc~derivative_vector~3->interface~compute_dtgc~3 - + -proc~derivative_vector~2->proc~is_rational~2 +proc~derivative_vector~3->proc~is_rational~3 @@ -791,39 +791,39 @@

                          Calls

                          - + -proc~cmp_degree~2 - +proc~cmp_degree~3 + nurbs_surface%cmp_degree - + -proc~set1~2->proc~cmp_degree~2 +proc~set1~3->proc~cmp_degree~3 - + -proc~cmp_nc~2 - +proc~cmp_nc~3 + nurbs_surface%cmp_nc - + -proc~set1~2->proc~cmp_nc~2 +proc~set1~3->proc~cmp_nc~3 - + -proc~set2~2->proc~cmp_nc~2 +proc~set2~3->proc~cmp_nc~3 @@ -836,27 +836,27 @@

                          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~cmp_degree~2->proc~get_multiplicity~2 +proc~cmp_degree~3->proc~get_multiplicity~3 - + -proc~cmp_nc~2->interface~compute_multiplicity +proc~cmp_nc~3->interface~compute_multiplicity @@ -1113,7 +1113,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/cmp_degree.html b/proc/cmp_degree.html index 1282c444c..795d43cb3 100644 --- a/proc/cmp_degree.html +++ b/proc/cmp_degree.html @@ -78,20 +78,20 @@

                          cmp_degree
                        • 26 statements + title=" 0.1% of total for procedures.">6 statements
                        • - Source File + Source File
                        • @@ -137,13 +137,13 @@

                          Contents

                          -

                          private pure subroutine cmp_degree(this, dir) +

                          private pure subroutine cmp_degree(this)

                          Type Bound

                          -

                          nurbs_volume

                          +

                          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(:)
                          - + class(nurbs_surface), intent(inout)
                          @@ -158,8 +158,8 @@

                          Arguments

                          - - - - - - - - @@ -201,76 +186,76 @@

                          Calls

                          - - + + proc~~cmp_degree~~CallsGraph - + proc~cmp_degree - -nurbs_volume%cmp_degree + +nurbs_curve%cmp_degree proc~get_multiplicity - - -nurbs_volume%get_multiplicity + + +nurbs_curve%get_multiplicity proc~cmp_degree->proc~get_multiplicity - - + + interface~compute_multiplicity - -compute_multiplicity + +compute_multiplicity proc~get_multiplicity->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,391 +355,367 @@

                          Called by

                          - - + + proc~~cmp_degree~~CalledByGraph - + proc~cmp_degree - -nurbs_volume%cmp_degree + +nurbs_curve%cmp_degree proc~set1 - - -nurbs_volume%set1 + + +nurbs_curve%set1 proc~set1->proc~cmp_degree - - + + - + +proc~set1a + + +nurbs_curve%set1a + + + + + +proc~set1a->proc~cmp_degree + + + + + proc~set3 - - -nurbs_volume%set3 + + +nurbs_curve%set3 - + proc~set3->proc~cmp_degree - - + + - + none~set - - -nurbs_volume%set + + +nurbs_curve%set - + none~set->proc~set1 - - + + + + + +none~set->proc~set1a + + - + none~set->proc~set3 - - + + - + proc~ansatz - - -nurbs_volume%ansatz + + +nurbs_curve%ansatz - + proc~ansatz->none~set - - + + - + proc~elevate_degree - - -nurbs_volume%elevate_degree + + +nurbs_curve%elevate_degree - + proc~elevate_degree->none~set - - + + - + proc~insert_knots - - -nurbs_volume%insert_knots + + +nurbs_curve%insert_knots - + proc~insert_knots->none~set - - + + - + proc~modify_wc - - -nurbs_volume%modify_Wc + + +nurbs_curve%modify_Wc - + proc~modify_wc->none~set - - + + - + proc~modify_xc - - -nurbs_volume%modify_Xc + + +nurbs_curve%modify_Xc - + proc~modify_xc->none~set - - + + - + proc~remove_knots - - -nurbs_volume%remove_knots + + +nurbs_curve%remove_knots - + proc~remove_knots->none~set - - + + - + proc~set_c - - -nurbs_volume%set_C + + +nurbs_curve%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_circle + + +nurbs_curve%set_circle - - -proc~set_hexahedron->none~set - - + + +proc~set_circle->none~set + + - + -proc~set_ring - - -nurbs_volume%set_ring +proc~set_half_circle + + +nurbs_curve%set_half_circle - - -proc~set_ring->none~set - - + + +proc~set_half_circle->none~set + + - + -program~compute_volume - - -compute_volume +program~compute_length + + +compute_length - - -program~compute_volume->none~set - - + + +program~compute_length->none~set + + - - -proc~cmp_volume - - -nurbs_volume%cmp_volume + + +proc~cmp_length + + +nurbs_curve%cmp_length - - -program~compute_volume->proc~cmp_volume - - + + +program~compute_length->proc~cmp_length + + - + -program~example3_volume - - -example3_volume +program~example1_curve + + +example1_curve - - -program~example3_volume->none~set - - + + +program~example1_curve->none~set + + - + -program~example3_volume->proc~elevate_degree - - +program~example1_curve->proc~elevate_degree + + - + -program~example3_volume->proc~insert_knots - - +program~example1_curve->proc~insert_knots + + - + -program~example3_volume->proc~remove_knots - - +program~example1_curve->proc~remove_knots + + - + -program~example_nurbs_volume - - -example_nurbs_volume +program~example_nurbs_curve + + +example_nurbs_curve - - -program~example_nurbs_volume->none~set - - - - - -program~example_put_to_nurbs - - -example_put_to_nurbs - - - - + -program~example_put_to_nurbs->none~set - - +program~example_nurbs_curve->none~set + + - - -program~nearest_point_3d - - -nearest_point_3d + + +program~nearest_point_1d + + +nearest_point_1d - + -program~nearest_point_3d->none~set - - +program~nearest_point_1d->none~set + + - + -proc~cmp_volume->proc~ansatz - - +proc~cmp_length->proc~ansatz + + - - -program~shape_c_3d - - -shape_C_3d + + +program~shape_c_1d + + +shape_C_1d - + -program~shape_c_3d->proc~set_c - - +program~shape_c_1d->proc~set_c + + - - -program~shape_half_ring_3d - - -shape_half_ring_3d + + +program~shape_circle + + +shape_circle - + -program~shape_half_ring_3d->proc~set_half_ring - - - - - -program~shape_hexahedron - - -shape_hexahedron - +program~shape_circle->proc~set_circle + + - - - -program~shape_hexahedron->proc~set_hexahedron - - - - - -program~shape_ring_3d - - -shape_ring_3d + + +program~shape_half_circle + + +shape_half_circle - - -program~shape_ring_3d->proc~set_ring - - + + +program~shape_half_circle->proc~set_half_circle + + @@ -874,7 +835,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/cmp_degreeface.html b/proc/cmp_degreeface.html index 11b91fa2f..4f914fd3a 100644 --- a/proc/cmp_degreeface.html +++ b/proc/cmp_degreeface.html @@ -158,7 +158,7 @@

                          Arguments

                          @@ -191,7 +191,7 @@

                          Arguments

                          Return Value - + integer, (3)

                          @@ -348,7 +348,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/cmp_degree~2.html b/proc/cmp_degree~2.html index 4f16e41be..965a772f4 100644 --- a/proc/cmp_degree~2.html +++ b/proc/cmp_degree~2.html @@ -78,20 +78,20 @@

                          cmp_degree
                        • 21 statements + title=" 0.4% of total for procedures.">26 statements
                        • - Source File + Source File
                        • @@ -143,7 +143,7 @@

                          private pure subroutine cmp_degree(this, dir)

                          Type Bound

                          -

                          nurbs_surface

                          +

                          nurbs_volume

                          Arguments

                          - - class(nurbs_volume), + + class(nurbs_curve), intent(inout) @@ -169,21 +169,6 @@

                          Arguments

                          this -
                          - - integer, - intent(in),optional - - ::dir -
                          - + class(nurbs_volume), intent(in)
                          @@ -158,8 +158,8 @@

                          Arguments

                          @@ -210,14 +210,14 @@

                          Calls

                          proc~cmp_degree~2 -nurbs_surface%cmp_degree +nurbs_volume%cmp_degree proc~get_multiplicity~2 - + -nurbs_surface%get_multiplicity +nurbs_volume%get_multiplicity @@ -370,454 +370,391 @@

                          Called by

                          - - + + proc~~cmp_degree~2~~CalledByGraph - + proc~cmp_degree~2 - -nurbs_surface%cmp_degree + +nurbs_volume%cmp_degree proc~set1~2 - - -nurbs_surface%set1 + + +nurbs_volume%set1 proc~set1~2->proc~cmp_degree~2 - - + + proc~set3~2 - - -nurbs_surface%set3 + + +nurbs_volume%set3 proc~set3~2->proc~cmp_degree~2 - - + + none~set~2 - - -nurbs_surface%set + + +nurbs_volume%set none~set~2->proc~set1~2 - - + + none~set~2->proc~set3~2 - - + + proc~ansatz~2 - - -nurbs_surface%ansatz + + +nurbs_volume%ansatz proc~ansatz~2->none~set~2 - - + + proc~elevate_degree~2 - - -nurbs_surface%elevate_degree + + +nurbs_volume%elevate_degree proc~elevate_degree~2->none~set~2 - - + + proc~insert_knots~2 - - -nurbs_surface%insert_knots + + +nurbs_volume%insert_knots proc~insert_knots~2->none~set~2 - - + + proc~modify_wc~2 - - -nurbs_surface%modify_Wc + + +nurbs_volume%modify_Wc proc~modify_wc~2->none~set~2 - - + + proc~modify_xc~2 - - -nurbs_surface%modify_Xc + + +nurbs_volume%modify_Xc proc~modify_xc~2->none~set~2 - - + + proc~remove_knots~2 - - -nurbs_surface%remove_knots + + +nurbs_volume%remove_knots proc~remove_knots~2->none~set~2 - - + + proc~set_c~2 - - -nurbs_surface%set_C + + +nurbs_volume%set_C proc~set_c~2->none~set~2 - - + + - + -proc~set_half_ring~2 - - -nurbs_surface%set_half_ring +proc~set_half_ring + + +nurbs_volume%set_half_ring - + -proc~set_half_ring~2->none~set~2 - - +proc~set_half_ring->none~set~2 + + - + -proc~set_ring~2 - - -nurbs_surface%set_ring +proc~set_hexahedron + + +nurbs_volume%set_hexahedron - + -proc~set_ring~2->none~set~2 - - +proc~set_hexahedron->none~set~2 + + - + -proc~set_tetragon - - -nurbs_surface%set_tetragon +proc~set_ring + + +nurbs_volume%set_ring - + -proc~set_tetragon->none~set~2 - - +proc~set_ring->none~set~2 + + - + -program~compute_area - - -compute_area +program~compute_volume + + +compute_volume - + -program~compute_area->none~set~2 - - +program~compute_volume->none~set~2 + + - - -proc~cmp_area - - -nurbs_surface%cmp_area + + +proc~cmp_volume + + +nurbs_volume%cmp_volume - - -program~compute_area->proc~cmp_area - - + + +program~compute_volume->proc~cmp_volume + + - + -program~example3_surface - - -example3_surface +program~example3_volume + + +example3_volume - + -program~example3_surface->none~set~2 - - - - - -program~example3_surface->proc~elevate_degree~2 - - +program~example3_volume->none~set~2 + + - + -program~example3_surface->proc~insert_knots~2 - - +program~example3_volume->proc~elevate_degree~2 + + - + + +program~example3_volume->proc~insert_knots~2 + + + + -program~example3_surface->proc~remove_knots~2 - - +program~example3_volume->proc~remove_knots~2 + + - + -program~example_nurbs_surface - - -example_nurbs_surface +program~example_nurbs_volume + + +example_nurbs_volume - + -program~example_nurbs_surface->none~set~2 - - +program~example_nurbs_volume->none~set~2 + + - + -program~nearest_point_2d - - -nearest_point_2d +program~example_put_to_nurbs + + +example_put_to_nurbs - + -program~nearest_point_2d->none~set~2 - - - - - -proc~cmp_area->proc~ansatz~2 - - +program~example_put_to_nurbs->none~set~2 + + - - -program~example_ppm1 - - -example_ppm1 + + +program~nearest_point_3d + + +nearest_point_3d - - -program~example_ppm1->proc~set_ring~2 - - + + +program~nearest_point_3d->none~set~2 + + - - -program~example_ppm1->proc~set_tetragon - - + + +proc~cmp_volume->proc~ansatz~2 + + - + -program~example_ppm2 - - -example_ppm2 +program~shape_c_3d + + +shape_C_3d - - -program~example_ppm2->proc~set_half_ring~2 - - - - - -program~example_ppm2->proc~set_tetragon - - + + +program~shape_c_3d->proc~set_c~2 + + - + -program~example_ppm3 - - -example_ppm3 +program~shape_half_ring_3d + + +shape_half_ring_3d - - -program~example_ppm3->proc~modify_xc~2 - - - - - -program~example_ppm3->proc~set_tetragon - - + + +program~shape_half_ring_3d->proc~set_half_ring + + - + -program~nearest_point_2d_bench - - -nearest_point_2d_bench +program~shape_hexahedron + + +shape_hexahedron - - -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_hexahedron->proc~set_hexahedron + + - - - -program~shape_ring_2d->proc~set_ring~2 - - - - - -program~shape_tetragon - - -shape_tetragon + + +program~shape_ring_3d + + +shape_ring_3d - - -program~shape_tetragon->proc~set_tetragon - - + + +program~shape_ring_3d->proc~set_ring + + @@ -937,7 +874,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/cmp_degree~3.html b/proc/cmp_degree~3.html index c80cbf809..87351509b 100644 --- a/proc/cmp_degree~3.html +++ b/proc/cmp_degree~3.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_volume), intent(inout) @@ -173,7 +173,7 @@

                          Arguments

                          - + integer, intent(in),
                          @@ -158,8 +158,8 @@

                          Arguments

                          + + + + + + + + @@ -186,76 +201,76 @@

                          Calls

                          - - + + proc~~cmp_degree~3~~CallsGraph - + proc~cmp_degree~3 - -nurbs_curve%cmp_degree + +nurbs_surface%cmp_degree proc~get_multiplicity~3 - - -nurbs_curve%get_multiplicity + + +nurbs_surface%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 - - + + @@ -355,367 +370,454 @@

                          Called by

                          - - + + proc~~cmp_degree~3~~CalledByGraph - + proc~cmp_degree~3 - -nurbs_curve%cmp_degree - - - -proc~set1a - - -nurbs_curve%set1a - - - - - -proc~set1a->proc~cmp_degree~3 - - + +nurbs_surface%cmp_degree - + proc~set1~3 - - -nurbs_curve%set1 + + +nurbs_surface%set1 - + proc~set1~3->proc~cmp_degree~3 - - + + - + proc~set3~3 - - -nurbs_curve%set3 + + +nurbs_surface%set3 - + proc~set3~3->proc~cmp_degree~3 - - + + - + none~set~3 - - -nurbs_curve%set + + +nurbs_surface%set - - -none~set~3->proc~set1a - - - - + none~set~3->proc~set1~3 - - + + - + none~set~3->proc~set3~3 - - + + - + proc~ansatz~3 - - -nurbs_curve%ansatz + + +nurbs_surface%ansatz - + proc~ansatz~3->none~set~3 - - + + - + proc~elevate_degree~3 - - -nurbs_curve%elevate_degree + + +nurbs_surface%elevate_degree - + proc~elevate_degree~3->none~set~3 - - + + - + proc~insert_knots~3 - - -nurbs_curve%insert_knots + + +nurbs_surface%insert_knots - + proc~insert_knots~3->none~set~3 - - + + - + proc~modify_wc~3 - - -nurbs_curve%modify_Wc + + +nurbs_surface%modify_Wc - + proc~modify_wc~3->none~set~3 - - + + - + proc~modify_xc~3 - - -nurbs_curve%modify_Xc + + +nurbs_surface%modify_Xc - + proc~modify_xc~3->none~set~3 - - + + - + proc~remove_knots~3 - - -nurbs_curve%remove_knots + + +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_circle - - -nurbs_curve%set_circle +proc~set_half_ring~2 + + +nurbs_surface%set_half_ring - - -proc~set_circle->none~set~3 - - + + +proc~set_half_ring~2->none~set~3 + + - + -proc~set_c~3 - - -nurbs_curve%set_C +proc~set_ring~2 + + +nurbs_surface%set_ring - - -proc~set_c~3->none~set~3 - - + + +proc~set_ring~2->none~set~3 + + - + -proc~set_half_circle - - -nurbs_curve%set_half_circle +proc~set_tetragon + + +nurbs_surface%set_tetragon - - -proc~set_half_circle->none~set~3 - - + + +proc~set_tetragon->none~set~3 + + - + -program~compute_length - - -compute_length +program~compute_area + + +compute_area - - -program~compute_length->none~set~3 - - + + +program~compute_area->none~set~3 + + - + -proc~cmp_length - - -nurbs_curve%cmp_length +proc~cmp_area + + +nurbs_surface%cmp_area - - -program~compute_length->proc~cmp_length - - + + +program~compute_area->proc~cmp_area + + - + -program~example1_curve - - -example1_curve +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_surface + + +example_nurbs_surface - - -program~example_nurbs_curve->none~set~3 - - + + +program~example_nurbs_surface->none~set~3 + + - + -program~nearest_point_1d - - -nearest_point_1d +program~nearest_point_2d + + +nearest_point_2d - - -program~nearest_point_1d->none~set~3 - - + + +program~nearest_point_2d->none~set~3 + + - - -proc~cmp_length->proc~ansatz~3 - - + + +proc~cmp_area->proc~ansatz~3 + + - + -program~shape_c_1d - - -shape_C_1d +program~example_ppm1 + + +example_ppm1 - - -program~shape_c_1d->proc~set_c~3 - - + + +program~example_ppm1->proc~set_ring~2 + + - + + +program~example_ppm1->proc~set_tetragon + + + + -program~shape_circle - - -shape_circle +program~example_ppm2 + + +example_ppm2 - - -program~shape_circle->proc~set_circle - - + + +program~example_ppm2->proc~set_half_ring~2 + + + + + +program~example_ppm2->proc~set_tetragon + + - + -program~shape_half_circle - - -shape_half_circle +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_circle->proc~set_half_circle - - +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 + + @@ -835,7 +937,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/cmp_elem.html b/proc/cmp_elem.html index 805a00535..8450d8f81 100644 --- a/proc/cmp_elem.html +++ b/proc/cmp_elem.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_volume

                          +

                          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

                          - - class(nurbs_volume), + + class(nurbs_curve), intent(in) @@ -176,7 +176,7 @@

                          Arguments

                          Return Value - + integer, allocatable, (:,:)

                          @@ -193,181 +193,181 @@

                          Calls

                          - - + + proc~~cmp_elem~~CallsGraph - + proc~cmp_elem - -nurbs_volume%cmp_elem + +nurbs_curve%cmp_elem interface~elemconn_cn - -elemConn_Cn + +elemConn_Cn proc~cmp_elem->interface~elemconn_cn - - + + interface~unique - -unique + +unique proc~cmp_elem->interface~unique - - + + proc~get_multiplicity - - -nurbs_volume%get_multiplicity + + +nurbs_curve%get_multiplicity proc~cmp_elem->proc~get_multiplicity - - + + 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->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 - - + + @@ -467,90 +467,71 @@

                          Called by

                          - - + + proc~~cmp_elem~~CalledByGraph - + proc~cmp_elem - -nurbs_volume%cmp_elem + +nurbs_curve%cmp_elem proc~ansatz - - -nurbs_volume%ansatz + + +nurbs_curve%ansatz proc~ansatz->proc~cmp_elem - - + + - + -proc~cmp_volume - - -nurbs_volume%cmp_volume +proc~cmp_length + + +nurbs_curve%cmp_length - + -proc~cmp_volume->proc~cmp_elem - - +proc~cmp_length->proc~cmp_elem + + - - -proc~cmp_volume->proc~ansatz - - + + +proc~cmp_length->proc~ansatz + + - + -program~example3_volume - - -example3_volume - - - - - -program~example3_volume->proc~cmp_elem - - - - - -program~compute_volume - - -compute_volume +program~compute_length + + +compute_length - - -program~compute_volume->proc~cmp_volume - - + + +program~compute_length->proc~cmp_length + + -
                          +

                          diff --git a/proc/cmp_elem_xc_vis.html b/proc/cmp_elem_xc_vis.html index c26472a13..1ee3f2e01 100644 --- a/proc/cmp_elem_xc_vis.html +++ b/proc/cmp_elem_xc_vis.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_volume

                          +

                          nurbs_curve

                          Arguments

                          @@ -159,7 +159,7 @@

                          Arguments

                          - - + @@ -208,76 +208,76 @@

                          Calls

                          - + proc~~cmp_elem_xc_vis~~CallsGraph - + proc~cmp_elem_xc_vis - -nurbs_volume%cmp_elem_Xc_vis + +nurbs_curve%cmp_elem_Xc_vis interface~elemconn_c0 - -elemConn_C0 + +elemConn_C0 proc~cmp_elem_xc_vis->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,136 +373,106 @@

                          Called by

                          - - + + proc~~cmp_elem_xc_vis~~CalledByGraph - + proc~cmp_elem_xc_vis - -nurbs_volume%cmp_elem_Xc_vis + +nurbs_curve%cmp_elem_Xc_vis proc~export_xc - - -nurbs_volume%export_Xc + + +nurbs_curve%export_Xc proc~export_xc->proc~cmp_elem_xc_vis - - + + - + -program~example3_volume - - -example3_volume +program~example1_curve + + +example1_curve - + -program~example3_volume->proc~export_xc - - +program~example1_curve->proc~export_xc + + - + -program~example_nurbs_volume - - -example_nurbs_volume +program~example_nurbs_curve + + +example_nurbs_curve - + -program~example_nurbs_volume->proc~export_xc - - +program~example_nurbs_curve->proc~export_xc + + - + -program~example_put_to_nurbs - - -example_put_to_nurbs +program~shape_c_1d + + +shape_C_1d - + -program~example_put_to_nurbs->proc~export_xc - - +program~shape_c_1d->proc~export_xc + + - + -program~shape_c_3d - - -shape_C_3d +program~shape_circle + + +shape_circle - + -program~shape_c_3d->proc~export_xc - - +program~shape_circle->proc~export_xc + + - + -program~shape_half_ring_3d - - -shape_half_ring_3d +program~shape_half_circle + + +shape_half_circle - + -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 - - +program~shape_half_circle->proc~export_xc + + @@ -618,7 +588,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/cmp_elem_xc_vis~2.html b/proc/cmp_elem_xc_vis~2.html index cf9a3e78a..fc2ee41a6 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_surface

                          +

                          nurbs_volume

                          Arguments

                          - class(nurbs_volume), + class(nurbs_curve), intent(in) @@ -177,11 +177,11 @@

                          Arguments

                          integer,
                          intent(in),optional, - contiguous + optional + ::p(:)p
                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_surface), + + class(nurbs_volume), intent(in) @@ -191,7 +191,7 @@

                          Arguments

                          Return Value - + integer, allocatable, (:,:)

                          @@ -217,7 +217,7 @@

                          Calls

                          proc~cmp_elem_xc_vis~2 -nurbs_surface%cmp_elem_Xc_vis +nurbs_volume%cmp_elem_Xc_vis @@ -373,121 +373,136 @@

                          Called by

                          - - + + proc~~cmp_elem_xc_vis~2~~CalledByGraph - + proc~cmp_elem_xc_vis~2 - -nurbs_surface%cmp_elem_Xc_vis + +nurbs_volume%cmp_elem_Xc_vis proc~export_xc~2 - - -nurbs_surface%export_Xc + + +nurbs_volume%export_Xc proc~export_xc~2->proc~cmp_elem_xc_vis~2 - - + + - + -program~example3_surface - - -example3_surface +program~example3_volume + + +example3_volume - + -program~example3_surface->proc~export_xc~2 - - +program~example3_volume->proc~export_xc~2 + + - + -program~example_nurbs_surface - - -example_nurbs_surface +program~example_nurbs_volume + + +example_nurbs_volume - + -program~example_nurbs_surface->proc~export_xc~2 - - +program~example_nurbs_volume->proc~export_xc~2 + + - + -program~shape_c_2d - - -shape_C_2d +program~example_put_to_nurbs + + +example_put_to_nurbs - + -program~shape_c_2d->proc~export_xc~2 - - +program~example_put_to_nurbs->proc~export_xc~2 + + - + -program~shape_half_ring_2d - - -shape_half_ring_2d +program~shape_c_3d + + +shape_C_3d - + -program~shape_half_ring_2d->proc~export_xc~2 - - +program~shape_c_3d->proc~export_xc~2 + + - + -program~shape_ring_2d - - -shape_ring_2d +program~shape_half_ring_3d + + +shape_half_ring_3d - + -program~shape_ring_2d->proc~export_xc~2 - - +program~shape_half_ring_3d->proc~export_xc~2 + + - + -program~shape_tetragon - - -shape_tetragon +program~shape_hexahedron + + +shape_hexahedron - + -program~shape_tetragon->proc~export_xc~2 - - +program~shape_hexahedron->proc~export_xc~2 + + + + + +program~shape_ring_3d + + +shape_ring_3d + + + + + +program~shape_ring_3d->proc~export_xc~2 + + @@ -603,7 +618,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/cmp_elem_xc_vis~3.html b/proc/cmp_elem_xc_vis~3.html index 6300db4a6..d79cda1e0 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_curve

                          +

                          nurbs_surface

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          - - + @@ -208,76 +208,76 @@

                          Calls

                          - + proc~~cmp_elem_xc_vis~3~~CallsGraph - + proc~cmp_elem_xc_vis~3 - -nurbs_curve%cmp_elem_Xc_vis + +nurbs_surface%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,106 +373,121 @@

                          Called by

                          - - + + proc~~cmp_elem_xc_vis~3~~CalledByGraph - + proc~cmp_elem_xc_vis~3 - -nurbs_curve%cmp_elem_Xc_vis + +nurbs_surface%cmp_elem_Xc_vis proc~export_xc~3 - - -nurbs_curve%export_Xc + + +nurbs_surface%export_Xc proc~export_xc~3->proc~cmp_elem_xc_vis~3 - - + + - + -program~example1_curve - - -example1_curve +program~example3_surface + + +example3_surface - + -program~example1_curve->proc~export_xc~3 - - +program~example3_surface->proc~export_xc~3 + + - + -program~example_nurbs_curve - - -example_nurbs_curve +program~example_nurbs_surface + + +example_nurbs_surface - + -program~example_nurbs_curve->proc~export_xc~3 - - +program~example_nurbs_surface->proc~export_xc~3 + + - + -program~shape_c_1d - - -shape_C_1d +program~shape_c_2d + + +shape_C_2d - + -program~shape_c_1d->proc~export_xc~3 - - +program~shape_c_2d->proc~export_xc~3 + + - + -program~shape_circle - - -shape_circle +program~shape_half_ring_2d + + +shape_half_ring_2d - + -program~shape_circle->proc~export_xc~3 - - +program~shape_half_ring_2d->proc~export_xc~3 + + - + -program~shape_half_circle - - -shape_half_circle +program~shape_ring_2d + + +shape_ring_2d - + -program~shape_half_circle->proc~export_xc~3 - - +program~shape_ring_2d->proc~export_xc~3 + + + + + +program~shape_tetragon + + +shape_tetragon + + + + + +program~shape_tetragon->proc~export_xc~3 + + @@ -588,7 +603,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/cmp_elem_xg_vis.html b/proc/cmp_elem_xg_vis.html index fae157501..a5ba8acf7 100644 --- a/proc/cmp_elem_xg_vis.html +++ b/proc/cmp_elem_xg_vis.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_volume

                          +

                          nurbs_curve

                          Arguments

                          - - class(nurbs_curve), + + class(nurbs_surface), intent(in) @@ -177,11 +177,11 @@

                          Arguments

                          integer,
                          intent(in),optional - + optional, + contiguous ::pp(:)
                          @@ -159,7 +159,7 @@

                          Arguments

                          - - + @@ -208,76 +208,76 @@

                          Calls

                          - + proc~~cmp_elem_xg_vis~~CallsGraph - + proc~cmp_elem_xg_vis - -nurbs_volume%cmp_elem_Xg_vis + +nurbs_curve%cmp_elem_Xg_vis interface~elemconn_c0 - -elemConn_C0 + +elemConn_C0 proc~cmp_elem_xg_vis->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,136 +373,106 @@

                          Called by

                          - - + + proc~~cmp_elem_xg_vis~~CalledByGraph - + proc~cmp_elem_xg_vis - -nurbs_volume%cmp_elem_Xg_vis + +nurbs_curve%cmp_elem_Xg_vis proc~export_xg - - -nurbs_volume%export_Xg + + +nurbs_curve%export_Xg proc~export_xg->proc~cmp_elem_xg_vis - - + + - + -program~example3_volume - - -example3_volume +program~example1_curve + + +example1_curve - + -program~example3_volume->proc~export_xg - - +program~example1_curve->proc~export_xg + + - + -program~example_nurbs_volume - - -example_nurbs_volume +program~example_nurbs_curve + + +example_nurbs_curve - + -program~example_nurbs_volume->proc~export_xg - - +program~example_nurbs_curve->proc~export_xg + + - + -program~example_put_to_nurbs - - -example_put_to_nurbs +program~shape_c_1d + + +shape_C_1d - + -program~example_put_to_nurbs->proc~export_xg - - +program~shape_c_1d->proc~export_xg + + - + -program~shape_c_3d - - -shape_C_3d +program~shape_circle + + +shape_circle - + -program~shape_c_3d->proc~export_xg - - +program~shape_circle->proc~export_xg + + - + -program~shape_half_ring_3d - - -shape_half_ring_3d +program~shape_half_circle + + +shape_half_circle - + -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 - - +program~shape_half_circle->proc~export_xg + + @@ -618,7 +588,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/cmp_elem_xg_vis~2.html b/proc/cmp_elem_xg_vis~2.html index 6385e3102..dbe56ed5e 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_surface

                          +

                          nurbs_volume

                          Arguments

                          - class(nurbs_volume), + class(nurbs_curve), intent(in) @@ -177,11 +177,11 @@

                          Arguments

                          integer,
                          intent(in),optional, - contiguous + optional + ::p(:)p
                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_surface), + + class(nurbs_volume), intent(in) @@ -191,7 +191,7 @@

                          Arguments

                          Return Value - + integer, allocatable, (:,:)

                          @@ -217,7 +217,7 @@

                          Calls

                          proc~cmp_elem_xg_vis~2 -nurbs_surface%cmp_elem_Xg_vis +nurbs_volume%cmp_elem_Xg_vis @@ -373,121 +373,136 @@

                          Called by

                          - - + + proc~~cmp_elem_xg_vis~2~~CalledByGraph - + proc~cmp_elem_xg_vis~2 - -nurbs_surface%cmp_elem_Xg_vis + +nurbs_volume%cmp_elem_Xg_vis proc~export_xg~2 - - -nurbs_surface%export_Xg + + +nurbs_volume%export_Xg proc~export_xg~2->proc~cmp_elem_xg_vis~2 - - + + - + -program~example3_surface - - -example3_surface +program~example3_volume + + +example3_volume - + -program~example3_surface->proc~export_xg~2 - - +program~example3_volume->proc~export_xg~2 + + - + -program~example_nurbs_surface - - -example_nurbs_surface +program~example_nurbs_volume + + +example_nurbs_volume - + -program~example_nurbs_surface->proc~export_xg~2 - - +program~example_nurbs_volume->proc~export_xg~2 + + - + -program~shape_c_2d - - -shape_C_2d +program~example_put_to_nurbs + + +example_put_to_nurbs - + -program~shape_c_2d->proc~export_xg~2 - - +program~example_put_to_nurbs->proc~export_xg~2 + + - + -program~shape_half_ring_2d - - -shape_half_ring_2d +program~shape_c_3d + + +shape_C_3d - + -program~shape_half_ring_2d->proc~export_xg~2 - - +program~shape_c_3d->proc~export_xg~2 + + - + -program~shape_ring_2d - - -shape_ring_2d +program~shape_half_ring_3d + + +shape_half_ring_3d - + -program~shape_ring_2d->proc~export_xg~2 - - +program~shape_half_ring_3d->proc~export_xg~2 + + - + -program~shape_tetragon - - -shape_tetragon +program~shape_hexahedron + + +shape_hexahedron - + -program~shape_tetragon->proc~export_xg~2 - - +program~shape_hexahedron->proc~export_xg~2 + + + + + +program~shape_ring_3d + + +shape_ring_3d + + + + + +program~shape_ring_3d->proc~export_xg~2 + + @@ -603,7 +618,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/cmp_elem_xg_vis~3.html b/proc/cmp_elem_xg_vis~3.html index 97b017dfc..b01e1af66 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_curve

                          +

                          nurbs_surface

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          - - + @@ -208,76 +208,76 @@

                          Calls

                          - + proc~~cmp_elem_xg_vis~3~~CallsGraph - + proc~cmp_elem_xg_vis~3 - -nurbs_curve%cmp_elem_Xg_vis + +nurbs_surface%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,106 +373,121 @@

                          Called by

                          - - + + proc~~cmp_elem_xg_vis~3~~CalledByGraph - + proc~cmp_elem_xg_vis~3 - -nurbs_curve%cmp_elem_Xg_vis + +nurbs_surface%cmp_elem_Xg_vis proc~export_xg~3 - - -nurbs_curve%export_Xg + + +nurbs_surface%export_Xg proc~export_xg~3->proc~cmp_elem_xg_vis~3 - - + + - + -program~example1_curve - - -example1_curve +program~example3_surface + + +example3_surface - + -program~example1_curve->proc~export_xg~3 - - +program~example3_surface->proc~export_xg~3 + + - + -program~example_nurbs_curve - - -example_nurbs_curve +program~example_nurbs_surface + + +example_nurbs_surface - + -program~example_nurbs_curve->proc~export_xg~3 - - +program~example_nurbs_surface->proc~export_xg~3 + + - + -program~shape_c_1d - - -shape_C_1d +program~shape_c_2d + + +shape_C_2d - + -program~shape_c_1d->proc~export_xg~3 - - +program~shape_c_2d->proc~export_xg~3 + + - + -program~shape_circle - - -shape_circle +program~shape_half_ring_2d + + +shape_half_ring_2d - + -program~shape_circle->proc~export_xg~3 - - +program~shape_half_ring_2d->proc~export_xg~3 + + - + -program~shape_half_circle - - -shape_half_circle +program~shape_ring_2d + + +shape_ring_2d - + -program~shape_half_circle->proc~export_xg~3 - - +program~shape_ring_2d->proc~export_xg~3 + + + + + +program~shape_tetragon + + +shape_tetragon + + + + + +program~shape_tetragon->proc~export_xg~3 + + @@ -588,7 +603,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/cmp_elemconn_c0_l.html b/proc/cmp_elemconn_c0_l.html index 82c76d924..5a45094e6 100644 --- a/proc/cmp_elemconn_c0_l.html +++ b/proc/cmp_elemconn_c0_l.html @@ -214,581 +214,581 @@

                          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 - - + + proc~cmp_elem_xc_vis - - -nurbs_volume%cmp_elem_Xc_vis + + +nurbs_curve%cmp_elem_Xc_vis proc~cmp_elem_xc_vis->interface~elemconn_c0 - - + + proc~cmp_elem_xc_vis~2 - - -nurbs_surface%cmp_elem_Xc_vis + + +nurbs_volume%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 + + +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 + + +nurbs_curve%cmp_elem_Xg_vis proc~cmp_elem_xg_vis->interface~elemconn_c0 - - + + proc~cmp_elem_xg_vis~2 - - -nurbs_surface%cmp_elem_Xg_vis + + +nurbs_volume%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 + + +nurbs_surface%cmp_elem_Xg_vis proc~cmp_elem_xg_vis~3->interface~elemconn_c0 - - + + proc~export_xc - - -nurbs_volume%export_Xc + + +nurbs_curve%export_Xc proc~export_xc->proc~cmp_elem_xc_vis - - + + proc~export_xc~2 - - -nurbs_surface%export_Xc + + +nurbs_volume%export_Xc proc~export_xc~2->proc~cmp_elem_xc_vis~2 - - + + proc~export_xc~3 - - -nurbs_curve%export_Xc + + +nurbs_surface%export_Xc proc~export_xc~3->proc~cmp_elem_xc_vis~3 - - + + proc~export_xg - - -nurbs_volume%export_Xg + + +nurbs_curve%export_Xg proc~export_xg->proc~cmp_elem_xg_vis - - + + proc~export_xg~2 - - -nurbs_surface%export_Xg + + +nurbs_volume%export_Xg proc~export_xg~2->proc~cmp_elem_xg_vis~2 - - + + proc~export_xg~3 - - -nurbs_curve%export_Xg + + +nurbs_surface%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~3 - - + + +program~example1_curve->proc~export_xc + + - - -program~example1_curve->proc~export_xg~3 - - + + +program~example1_curve->proc~export_xg + + program~example3_surface - -example3_surface + +example3_surface - - -program~example3_surface->proc~export_xc~2 - - + + +program~example3_surface->proc~export_xc~3 + + - - -program~example3_surface->proc~export_xg~2 - - + + +program~example3_surface->proc~export_xg~3 + + program~example3_volume - -example3_volume + +example3_volume - - -program~example3_volume->proc~export_xc - - + + +program~example3_volume->proc~export_xc~2 + + - - -program~example3_volume->proc~export_xg - - + + +program~example3_volume->proc~export_xg~2 + + program~example_nurbs_curve - -example_nurbs_curve + +example_nurbs_curve - - -program~example_nurbs_curve->proc~export_xc~3 - - + + +program~example_nurbs_curve->proc~export_xc + + - - -program~example_nurbs_curve->proc~export_xg~3 - - + + +program~example_nurbs_curve->proc~export_xg + + program~example_nurbs_surface - -example_nurbs_surface + +example_nurbs_surface - - -program~example_nurbs_surface->proc~export_xc~2 - - + + +program~example_nurbs_surface->proc~export_xc~3 + + - - -program~example_nurbs_surface->proc~export_xg~2 - - + + +program~example_nurbs_surface->proc~export_xg~3 + + program~example_nurbs_volume - -example_nurbs_volume + +example_nurbs_volume - - -program~example_nurbs_volume->proc~export_xc - - + + +program~example_nurbs_volume->proc~export_xc~2 + + - - -program~example_nurbs_volume->proc~export_xg - - + + +program~example_nurbs_volume->proc~export_xg~2 + + program~example_put_to_nurbs - -example_put_to_nurbs + +example_put_to_nurbs - - -program~example_put_to_nurbs->proc~export_xc - - + + +program~example_put_to_nurbs->proc~export_xc~2 + + - - -program~example_put_to_nurbs->proc~export_xg - - + + +program~example_put_to_nurbs->proc~export_xg~2 + + program~shape_c_1d - -shape_C_1d + +shape_C_1d - - -program~shape_c_1d->proc~export_xc~3 - - + + +program~shape_c_1d->proc~export_xc + + - - -program~shape_c_1d->proc~export_xg~3 - - + + +program~shape_c_1d->proc~export_xg + + program~shape_c_2d - -shape_C_2d + +shape_C_2d - - -program~shape_c_2d->proc~export_xc~2 - - + + +program~shape_c_2d->proc~export_xc~3 + + - - -program~shape_c_2d->proc~export_xg~2 - - + + +program~shape_c_2d->proc~export_xg~3 + + program~shape_c_3d - -shape_C_3d + +shape_C_3d - - -program~shape_c_3d->proc~export_xc - - + + +program~shape_c_3d->proc~export_xc~2 + + - - -program~shape_c_3d->proc~export_xg - - + + +program~shape_c_3d->proc~export_xg~2 + + program~shape_circle - -shape_circle + +shape_circle - - -program~shape_circle->proc~export_xc~3 - - + + +program~shape_circle->proc~export_xc + + - - -program~shape_circle->proc~export_xg~3 - - + + +program~shape_circle->proc~export_xg + + program~shape_half_circle - -shape_half_circle + +shape_half_circle - - -program~shape_half_circle->proc~export_xc~3 - - + + +program~shape_half_circle->proc~export_xc + + - - -program~shape_half_circle->proc~export_xg~3 - - + + +program~shape_half_circle->proc~export_xg + + program~shape_half_ring_2d - -shape_half_ring_2d + +shape_half_ring_2d - - -program~shape_half_ring_2d->proc~export_xc~2 - - + + +program~shape_half_ring_2d->proc~export_xc~3 + + - - -program~shape_half_ring_2d->proc~export_xg~2 - - + + +program~shape_half_ring_2d->proc~export_xg~3 + + program~shape_half_ring_3d - -shape_half_ring_3d + +shape_half_ring_3d - - -program~shape_half_ring_3d->proc~export_xc - - + + +program~shape_half_ring_3d->proc~export_xc~2 + + - - -program~shape_half_ring_3d->proc~export_xg - - + + +program~shape_half_ring_3d->proc~export_xg~2 + + program~shape_hexahedron - -shape_hexahedron + +shape_hexahedron - - -program~shape_hexahedron->proc~export_xc - - + + +program~shape_hexahedron->proc~export_xc~2 + + - - -program~shape_hexahedron->proc~export_xg - - + + +program~shape_hexahedron->proc~export_xg~2 + + program~shape_ring_2d - -shape_ring_2d + +shape_ring_2d - - -program~shape_ring_2d->proc~export_xc~2 - - + + +program~shape_ring_2d->proc~export_xc~3 + + - - -program~shape_ring_2d->proc~export_xg~2 - - + + +program~shape_ring_2d->proc~export_xg~3 + + program~shape_ring_3d - -shape_ring_3d + +shape_ring_3d - - -program~shape_ring_3d->proc~export_xc - - + + +program~shape_ring_3d->proc~export_xc~2 + + - - -program~shape_ring_3d->proc~export_xg - - + + +program~shape_ring_3d->proc~export_xg~2 + + program~shape_tetragon - -shape_tetragon + +shape_tetragon - - -program~shape_tetragon->proc~export_xc~2 - - + + +program~shape_tetragon->proc~export_xc~3 + + - - -program~shape_tetragon->proc~export_xg~2 - - + + +program~shape_tetragon->proc~export_xg~3 + + @@ -908,7 +908,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/cmp_elemconn_c0_s.html b/proc/cmp_elemconn_c0_s.html index bf512eb2b..208cf28b5 100644 --- a/proc/cmp_elemconn_c0_s.html +++ b/proc/cmp_elemconn_c0_s.html @@ -244,581 +244,581 @@

                          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 - - + + proc~cmp_elem_xc_vis - - -nurbs_volume%cmp_elem_Xc_vis + + +nurbs_curve%cmp_elem_Xc_vis proc~cmp_elem_xc_vis->interface~elemconn_c0 - - + + proc~cmp_elem_xc_vis~2 - - -nurbs_surface%cmp_elem_Xc_vis + + +nurbs_volume%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 + + +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 + + +nurbs_curve%cmp_elem_Xg_vis proc~cmp_elem_xg_vis->interface~elemconn_c0 - - + + proc~cmp_elem_xg_vis~2 - - -nurbs_surface%cmp_elem_Xg_vis + + +nurbs_volume%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 + + +nurbs_surface%cmp_elem_Xg_vis proc~cmp_elem_xg_vis~3->interface~elemconn_c0 - - + + proc~export_xc - - -nurbs_volume%export_Xc + + +nurbs_curve%export_Xc proc~export_xc->proc~cmp_elem_xc_vis - - + + proc~export_xc~2 - - -nurbs_surface%export_Xc + + +nurbs_volume%export_Xc proc~export_xc~2->proc~cmp_elem_xc_vis~2 - - + + proc~export_xc~3 - - -nurbs_curve%export_Xc + + +nurbs_surface%export_Xc proc~export_xc~3->proc~cmp_elem_xc_vis~3 - - + + proc~export_xg - - -nurbs_volume%export_Xg + + +nurbs_curve%export_Xg proc~export_xg->proc~cmp_elem_xg_vis - - + + proc~export_xg~2 - - -nurbs_surface%export_Xg + + +nurbs_volume%export_Xg proc~export_xg~2->proc~cmp_elem_xg_vis~2 - - + + proc~export_xg~3 - - -nurbs_curve%export_Xg + + +nurbs_surface%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~3 - - + + +program~example1_curve->proc~export_xc + + - - -program~example1_curve->proc~export_xg~3 - - + + +program~example1_curve->proc~export_xg + + program~example3_surface - -example3_surface + +example3_surface - - -program~example3_surface->proc~export_xc~2 - - + + +program~example3_surface->proc~export_xc~3 + + - - -program~example3_surface->proc~export_xg~2 - - + + +program~example3_surface->proc~export_xg~3 + + program~example3_volume - -example3_volume + +example3_volume - - -program~example3_volume->proc~export_xc - - + + +program~example3_volume->proc~export_xc~2 + + - - -program~example3_volume->proc~export_xg - - + + +program~example3_volume->proc~export_xg~2 + + program~example_nurbs_curve - -example_nurbs_curve + +example_nurbs_curve - - -program~example_nurbs_curve->proc~export_xc~3 - - + + +program~example_nurbs_curve->proc~export_xc + + - - -program~example_nurbs_curve->proc~export_xg~3 - - + + +program~example_nurbs_curve->proc~export_xg + + program~example_nurbs_surface - -example_nurbs_surface + +example_nurbs_surface - - -program~example_nurbs_surface->proc~export_xc~2 - - + + +program~example_nurbs_surface->proc~export_xc~3 + + - - -program~example_nurbs_surface->proc~export_xg~2 - - + + +program~example_nurbs_surface->proc~export_xg~3 + + program~example_nurbs_volume - -example_nurbs_volume + +example_nurbs_volume - - -program~example_nurbs_volume->proc~export_xc - - + + +program~example_nurbs_volume->proc~export_xc~2 + + - - -program~example_nurbs_volume->proc~export_xg - - + + +program~example_nurbs_volume->proc~export_xg~2 + + program~example_put_to_nurbs - -example_put_to_nurbs + +example_put_to_nurbs - - -program~example_put_to_nurbs->proc~export_xc - - + + +program~example_put_to_nurbs->proc~export_xc~2 + + - - -program~example_put_to_nurbs->proc~export_xg - - + + +program~example_put_to_nurbs->proc~export_xg~2 + + program~shape_c_1d - -shape_C_1d + +shape_C_1d - - -program~shape_c_1d->proc~export_xc~3 - - + + +program~shape_c_1d->proc~export_xc + + - - -program~shape_c_1d->proc~export_xg~3 - - + + +program~shape_c_1d->proc~export_xg + + program~shape_c_2d - -shape_C_2d + +shape_C_2d - - -program~shape_c_2d->proc~export_xc~2 - - + + +program~shape_c_2d->proc~export_xc~3 + + - - -program~shape_c_2d->proc~export_xg~2 - - + + +program~shape_c_2d->proc~export_xg~3 + + program~shape_c_3d - -shape_C_3d + +shape_C_3d - - -program~shape_c_3d->proc~export_xc - - + + +program~shape_c_3d->proc~export_xc~2 + + - - -program~shape_c_3d->proc~export_xg - - + + +program~shape_c_3d->proc~export_xg~2 + + program~shape_circle - -shape_circle + +shape_circle - - -program~shape_circle->proc~export_xc~3 - - + + +program~shape_circle->proc~export_xc + + - - -program~shape_circle->proc~export_xg~3 - - + + +program~shape_circle->proc~export_xg + + program~shape_half_circle - -shape_half_circle + +shape_half_circle - - -program~shape_half_circle->proc~export_xc~3 - - + + +program~shape_half_circle->proc~export_xc + + - - -program~shape_half_circle->proc~export_xg~3 - - + + +program~shape_half_circle->proc~export_xg + + program~shape_half_ring_2d - -shape_half_ring_2d + +shape_half_ring_2d - - -program~shape_half_ring_2d->proc~export_xc~2 - - + + +program~shape_half_ring_2d->proc~export_xc~3 + + - - -program~shape_half_ring_2d->proc~export_xg~2 - - + + +program~shape_half_ring_2d->proc~export_xg~3 + + program~shape_half_ring_3d - -shape_half_ring_3d + +shape_half_ring_3d - - -program~shape_half_ring_3d->proc~export_xc - - + + +program~shape_half_ring_3d->proc~export_xc~2 + + - - -program~shape_half_ring_3d->proc~export_xg - - + + +program~shape_half_ring_3d->proc~export_xg~2 + + program~shape_hexahedron - -shape_hexahedron + +shape_hexahedron - - -program~shape_hexahedron->proc~export_xc - - + + +program~shape_hexahedron->proc~export_xc~2 + + - - -program~shape_hexahedron->proc~export_xg - - + + +program~shape_hexahedron->proc~export_xg~2 + + program~shape_ring_2d - -shape_ring_2d + +shape_ring_2d - - -program~shape_ring_2d->proc~export_xc~2 - - + + +program~shape_ring_2d->proc~export_xc~3 + + - - -program~shape_ring_2d->proc~export_xg~2 - - + + +program~shape_ring_2d->proc~export_xg~3 + + program~shape_ring_3d - -shape_ring_3d + +shape_ring_3d - - -program~shape_ring_3d->proc~export_xc - - + + +program~shape_ring_3d->proc~export_xc~2 + + - - -program~shape_ring_3d->proc~export_xg - - + + +program~shape_ring_3d->proc~export_xg~2 + + program~shape_tetragon - -shape_tetragon + +shape_tetragon - - -program~shape_tetragon->proc~export_xc~2 - - + + +program~shape_tetragon->proc~export_xc~3 + + - - -program~shape_tetragon->proc~export_xg~2 - - + + +program~shape_tetragon->proc~export_xg~3 + + @@ -938,7 +938,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/cmp_elemconn_c0_v.html b/proc/cmp_elemconn_c0_v.html index ac00a562f..254b00464 100644 --- a/proc/cmp_elemconn_c0_v.html +++ b/proc/cmp_elemconn_c0_v.html @@ -274,581 +274,581 @@

                          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 - - + + proc~cmp_elem_xc_vis - - -nurbs_volume%cmp_elem_Xc_vis + + +nurbs_curve%cmp_elem_Xc_vis proc~cmp_elem_xc_vis->interface~elemconn_c0 - - + + proc~cmp_elem_xc_vis~2 - - -nurbs_surface%cmp_elem_Xc_vis + + +nurbs_volume%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 + + +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 + + +nurbs_curve%cmp_elem_Xg_vis proc~cmp_elem_xg_vis->interface~elemconn_c0 - - + + proc~cmp_elem_xg_vis~2 - - -nurbs_surface%cmp_elem_Xg_vis + + +nurbs_volume%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 + + +nurbs_surface%cmp_elem_Xg_vis proc~cmp_elem_xg_vis~3->interface~elemconn_c0 - - + + proc~export_xc - - -nurbs_volume%export_Xc + + +nurbs_curve%export_Xc proc~export_xc->proc~cmp_elem_xc_vis - - + + proc~export_xc~2 - - -nurbs_surface%export_Xc + + +nurbs_volume%export_Xc proc~export_xc~2->proc~cmp_elem_xc_vis~2 - - + + proc~export_xc~3 - - -nurbs_curve%export_Xc + + +nurbs_surface%export_Xc proc~export_xc~3->proc~cmp_elem_xc_vis~3 - - + + proc~export_xg - - -nurbs_volume%export_Xg + + +nurbs_curve%export_Xg proc~export_xg->proc~cmp_elem_xg_vis - - + + proc~export_xg~2 - - -nurbs_surface%export_Xg + + +nurbs_volume%export_Xg proc~export_xg~2->proc~cmp_elem_xg_vis~2 - - + + proc~export_xg~3 - - -nurbs_curve%export_Xg + + +nurbs_surface%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~3 - - + + +program~example1_curve->proc~export_xc + + - - -program~example1_curve->proc~export_xg~3 - - + + +program~example1_curve->proc~export_xg + + program~example3_surface - -example3_surface + +example3_surface - - -program~example3_surface->proc~export_xc~2 - - + + +program~example3_surface->proc~export_xc~3 + + - - -program~example3_surface->proc~export_xg~2 - - + + +program~example3_surface->proc~export_xg~3 + + program~example3_volume - -example3_volume + +example3_volume - - -program~example3_volume->proc~export_xc - - + + +program~example3_volume->proc~export_xc~2 + + - - -program~example3_volume->proc~export_xg - - + + +program~example3_volume->proc~export_xg~2 + + program~example_nurbs_curve - -example_nurbs_curve + +example_nurbs_curve - - -program~example_nurbs_curve->proc~export_xc~3 - - + + +program~example_nurbs_curve->proc~export_xc + + - - -program~example_nurbs_curve->proc~export_xg~3 - - + + +program~example_nurbs_curve->proc~export_xg + + program~example_nurbs_surface - -example_nurbs_surface + +example_nurbs_surface - - -program~example_nurbs_surface->proc~export_xc~2 - - + + +program~example_nurbs_surface->proc~export_xc~3 + + - - -program~example_nurbs_surface->proc~export_xg~2 - - + + +program~example_nurbs_surface->proc~export_xg~3 + + program~example_nurbs_volume - -example_nurbs_volume + +example_nurbs_volume - - -program~example_nurbs_volume->proc~export_xc - - + + +program~example_nurbs_volume->proc~export_xc~2 + + - - -program~example_nurbs_volume->proc~export_xg - - + + +program~example_nurbs_volume->proc~export_xg~2 + + program~example_put_to_nurbs - -example_put_to_nurbs + +example_put_to_nurbs - - -program~example_put_to_nurbs->proc~export_xc - - + + +program~example_put_to_nurbs->proc~export_xc~2 + + - - -program~example_put_to_nurbs->proc~export_xg - - + + +program~example_put_to_nurbs->proc~export_xg~2 + + program~shape_c_1d - -shape_C_1d + +shape_C_1d - - -program~shape_c_1d->proc~export_xc~3 - - + + +program~shape_c_1d->proc~export_xc + + - - -program~shape_c_1d->proc~export_xg~3 - - + + +program~shape_c_1d->proc~export_xg + + program~shape_c_2d - -shape_C_2d + +shape_C_2d - - -program~shape_c_2d->proc~export_xc~2 - - + + +program~shape_c_2d->proc~export_xc~3 + + - - -program~shape_c_2d->proc~export_xg~2 - - + + +program~shape_c_2d->proc~export_xg~3 + + program~shape_c_3d - -shape_C_3d + +shape_C_3d - - -program~shape_c_3d->proc~export_xc - - + + +program~shape_c_3d->proc~export_xc~2 + + - - -program~shape_c_3d->proc~export_xg - - + + +program~shape_c_3d->proc~export_xg~2 + + program~shape_circle - -shape_circle + +shape_circle - - -program~shape_circle->proc~export_xc~3 - - + + +program~shape_circle->proc~export_xc + + - - -program~shape_circle->proc~export_xg~3 - - + + +program~shape_circle->proc~export_xg + + program~shape_half_circle - -shape_half_circle + +shape_half_circle - - -program~shape_half_circle->proc~export_xc~3 - - + + +program~shape_half_circle->proc~export_xc + + - - -program~shape_half_circle->proc~export_xg~3 - - + + +program~shape_half_circle->proc~export_xg + + program~shape_half_ring_2d - -shape_half_ring_2d + +shape_half_ring_2d - - -program~shape_half_ring_2d->proc~export_xc~2 - - + + +program~shape_half_ring_2d->proc~export_xc~3 + + - - -program~shape_half_ring_2d->proc~export_xg~2 - - + + +program~shape_half_ring_2d->proc~export_xg~3 + + program~shape_half_ring_3d - -shape_half_ring_3d + +shape_half_ring_3d - - -program~shape_half_ring_3d->proc~export_xc - - + + +program~shape_half_ring_3d->proc~export_xc~2 + + - - -program~shape_half_ring_3d->proc~export_xg - - + + +program~shape_half_ring_3d->proc~export_xg~2 + + program~shape_hexahedron - -shape_hexahedron + +shape_hexahedron - - -program~shape_hexahedron->proc~export_xc - - + + +program~shape_hexahedron->proc~export_xc~2 + + - - -program~shape_hexahedron->proc~export_xg - - + + +program~shape_hexahedron->proc~export_xg~2 + + program~shape_ring_2d - -shape_ring_2d + +shape_ring_2d - - -program~shape_ring_2d->proc~export_xc~2 - - + + +program~shape_ring_2d->proc~export_xc~3 + + - - -program~shape_ring_2d->proc~export_xg~2 - - + + +program~shape_ring_2d->proc~export_xg~3 + + program~shape_ring_3d - -shape_ring_3d + +shape_ring_3d - - -program~shape_ring_3d->proc~export_xc - - + + +program~shape_ring_3d->proc~export_xc~2 + + - - -program~shape_ring_3d->proc~export_xg - - + + +program~shape_ring_3d->proc~export_xg~2 + + program~shape_tetragon - -shape_tetragon + +shape_tetragon - - -program~shape_tetragon->proc~export_xc~2 - - + + +program~shape_tetragon->proc~export_xc~3 + + - - -program~shape_tetragon->proc~export_xg~2 - - + + +program~shape_tetragon->proc~export_xg~3 + + @@ -968,7 +968,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/cmp_elemconn_cn_l.html b/proc/cmp_elemconn_cn_l.html index 0062fc4fa..33a5da093 100644 --- a/proc/cmp_elemconn_cn_l.html +++ b/proc/cmp_elemconn_cn_l.html @@ -244,113 +244,113 @@

                          Called by

                          - - + + proc~~cmp_elemconn_cn_l~~CalledByGraph - + proc~cmp_elemconn_cn_l - -cmp_elemConn_Cn_L + +cmp_elemConn_Cn_L interface~elemconn_cn - -elemConn_Cn + +elemConn_Cn interface~elemconn_cn->proc~cmp_elemconn_cn_l - - + + proc~cmp_elem - - -nurbs_volume%cmp_elem + + +nurbs_curve%cmp_elem proc~cmp_elem->interface~elemconn_cn - - + + proc~cmp_elem~2 - - -nurbs_surface%cmp_elem + + +nurbs_volume%cmp_elem proc~cmp_elem~2->interface~elemconn_cn - - + + proc~cmp_elem~3 - - -nurbs_curve%cmp_elem + + +nurbs_surface%cmp_elem proc~cmp_elem~3->interface~elemconn_cn - - + + proc~ansatz - - -nurbs_volume%ansatz + + +nurbs_curve%ansatz proc~ansatz->proc~cmp_elem - - + + proc~ansatz~2 - - -nurbs_surface%ansatz + + +nurbs_volume%ansatz - + proc~ansatz~2->proc~cmp_elem~2 - - + + proc~ansatz~3 - - -nurbs_curve%ansatz + + +nurbs_surface%ansatz @@ -364,124 +364,124 @@

                          Called by

                          proc~cmp_area - -nurbs_surface%cmp_area + +nurbs_surface%cmp_area - - -proc~cmp_area->proc~cmp_elem~2 - - + + +proc~cmp_area->proc~cmp_elem~3 + + - - -proc~cmp_area->proc~ansatz~2 - - + + +proc~cmp_area->proc~ansatz~3 + + proc~cmp_length - -nurbs_curve%cmp_length + +nurbs_curve%cmp_length - - -proc~cmp_length->proc~cmp_elem~3 - - + + +proc~cmp_length->proc~cmp_elem + + - - -proc~cmp_length->proc~ansatz~3 - - + + +proc~cmp_length->proc~ansatz + + proc~cmp_volume - -nurbs_volume%cmp_volume + +nurbs_volume%cmp_volume - - -proc~cmp_volume->proc~cmp_elem - - + + +proc~cmp_volume->proc~cmp_elem~2 + + - - -proc~cmp_volume->proc~ansatz - - + + +proc~cmp_volume->proc~ansatz~2 + + program~example3_volume - -example3_volume + +example3_volume - - -program~example3_volume->proc~cmp_elem - - + + +program~example3_volume->proc~cmp_elem~2 + + program~compute_area - -compute_area + +compute_area program~compute_area->proc~cmp_area - - + + program~compute_length - -compute_length + +compute_length program~compute_length->proc~cmp_length - - + + program~compute_volume - -compute_volume + +compute_volume program~compute_volume->proc~cmp_volume - - + + @@ -601,7 +601,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/cmp_elemconn_cn_s.html b/proc/cmp_elemconn_cn_s.html index 2a646c551..ccfe6a957 100644 --- a/proc/cmp_elemconn_cn_s.html +++ b/proc/cmp_elemconn_cn_s.html @@ -216,7 +216,7 @@

                          Arguments

                          @@ -231,7 +231,7 @@

                          Arguments

                          @@ -304,113 +304,113 @@

                          Called by

                          - - + + proc~~cmp_elemconn_cn_s~~CalledByGraph - + proc~cmp_elemconn_cn_s - -cmp_elemConn_Cn_S + +cmp_elemConn_Cn_S interface~elemconn_cn - -elemConn_Cn + +elemConn_Cn interface~elemconn_cn->proc~cmp_elemconn_cn_s - - + + proc~cmp_elem - - -nurbs_volume%cmp_elem + + +nurbs_curve%cmp_elem proc~cmp_elem->interface~elemconn_cn - - + + proc~cmp_elem~2 - - -nurbs_surface%cmp_elem + + +nurbs_volume%cmp_elem proc~cmp_elem~2->interface~elemconn_cn - - + + proc~cmp_elem~3 - - -nurbs_curve%cmp_elem + + +nurbs_surface%cmp_elem proc~cmp_elem~3->interface~elemconn_cn - - + + proc~ansatz - - -nurbs_volume%ansatz + + +nurbs_curve%ansatz proc~ansatz->proc~cmp_elem - - + + proc~ansatz~2 - - -nurbs_surface%ansatz + + +nurbs_volume%ansatz - + proc~ansatz~2->proc~cmp_elem~2 - - + + proc~ansatz~3 - - -nurbs_curve%ansatz + + +nurbs_surface%ansatz @@ -424,124 +424,124 @@

                          Called by

                          proc~cmp_area - -nurbs_surface%cmp_area + +nurbs_surface%cmp_area - - -proc~cmp_area->proc~cmp_elem~2 - - + + +proc~cmp_area->proc~cmp_elem~3 + + - - -proc~cmp_area->proc~ansatz~2 - - + + +proc~cmp_area->proc~ansatz~3 + + proc~cmp_length - -nurbs_curve%cmp_length + +nurbs_curve%cmp_length - - -proc~cmp_length->proc~cmp_elem~3 - - + + +proc~cmp_length->proc~cmp_elem + + - - -proc~cmp_length->proc~ansatz~3 - - + + +proc~cmp_length->proc~ansatz + + proc~cmp_volume - -nurbs_volume%cmp_volume + +nurbs_volume%cmp_volume - - -proc~cmp_volume->proc~cmp_elem - - + + +proc~cmp_volume->proc~cmp_elem~2 + + - - -proc~cmp_volume->proc~ansatz - - + + +proc~cmp_volume->proc~ansatz~2 + + program~example3_volume - -example3_volume + +example3_volume - - -program~example3_volume->proc~cmp_elem - - + + +program~example3_volume->proc~cmp_elem~2 + + program~compute_area - -compute_area + +compute_area program~compute_area->proc~cmp_area - - + + program~compute_length - -compute_length + +compute_length program~compute_length->proc~cmp_length - - + + program~compute_volume - -compute_volume + +compute_volume program~compute_volume->proc~cmp_volume - - + + @@ -661,7 +661,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/cmp_elemconn_cn_v.html b/proc/cmp_elemconn_cn_v.html index adac7b314..d3d0ac26a 100644 --- a/proc/cmp_elemconn_cn_v.html +++ b/proc/cmp_elemconn_cn_v.html @@ -246,7 +246,7 @@

                          Arguments

                          @@ -261,7 +261,7 @@

                          Arguments

                          @@ -364,113 +364,113 @@

                          Called by

                          - - + + proc~~cmp_elemconn_cn_v~~CalledByGraph - + proc~cmp_elemconn_cn_v - -cmp_elemConn_Cn_V + +cmp_elemConn_Cn_V interface~elemconn_cn - -elemConn_Cn + +elemConn_Cn interface~elemconn_cn->proc~cmp_elemconn_cn_v - - + + proc~cmp_elem - - -nurbs_volume%cmp_elem + + +nurbs_curve%cmp_elem proc~cmp_elem->interface~elemconn_cn - - + + proc~cmp_elem~2 - - -nurbs_surface%cmp_elem + + +nurbs_volume%cmp_elem proc~cmp_elem~2->interface~elemconn_cn - - + + proc~cmp_elem~3 - - -nurbs_curve%cmp_elem + + +nurbs_surface%cmp_elem proc~cmp_elem~3->interface~elemconn_cn - - + + proc~ansatz - - -nurbs_volume%ansatz + + +nurbs_curve%ansatz proc~ansatz->proc~cmp_elem - - + + proc~ansatz~2 - - -nurbs_surface%ansatz + + +nurbs_volume%ansatz - + proc~ansatz~2->proc~cmp_elem~2 - - + + proc~ansatz~3 - - -nurbs_curve%ansatz + + +nurbs_surface%ansatz @@ -484,124 +484,124 @@

                          Called by

                          proc~cmp_area - -nurbs_surface%cmp_area + +nurbs_surface%cmp_area - - -proc~cmp_area->proc~cmp_elem~2 - - + + +proc~cmp_area->proc~cmp_elem~3 + + - - -proc~cmp_area->proc~ansatz~2 - - + + +proc~cmp_area->proc~ansatz~3 + + proc~cmp_length - -nurbs_curve%cmp_length + +nurbs_curve%cmp_length - - -proc~cmp_length->proc~cmp_elem~3 - - + + +proc~cmp_length->proc~cmp_elem + + - - -proc~cmp_length->proc~ansatz~3 - - + + +proc~cmp_length->proc~ansatz + + proc~cmp_volume - -nurbs_volume%cmp_volume + +nurbs_volume%cmp_volume - - -proc~cmp_volume->proc~cmp_elem - - + + +proc~cmp_volume->proc~cmp_elem~2 + + - - -proc~cmp_volume->proc~ansatz - - + + +proc~cmp_volume->proc~ansatz~2 + + program~example3_volume - -example3_volume + +example3_volume - - -program~example3_volume->proc~cmp_elem - - + + +program~example3_volume->proc~cmp_elem~2 + + program~compute_area - -compute_area + +compute_area program~compute_area->proc~cmp_area - - + + program~compute_length - -compute_length + +compute_length program~compute_length->proc~cmp_length - - + + program~compute_volume - -compute_volume + +compute_volume program~compute_volume->proc~cmp_volume - - + + @@ -721,7 +721,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/cmp_elemface.html b/proc/cmp_elemface.html index ea91ded52..99b842a91 100644 --- a/proc/cmp_elemface.html +++ b/proc/cmp_elemface.html @@ -159,7 +159,7 @@

                          Arguments

                          @@ -174,7 +174,7 @@

                          Arguments

                          @@ -207,7 +207,7 @@

                          Arguments

                          Return Value - + integer, allocatable, (:)

                          @@ -364,7 +364,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/cmp_elemface_xc_vis.html b/proc/cmp_elemface_xc_vis.html index 00e3d9c47..6e18aca26 100644 --- a/proc/cmp_elemface_xc_vis.html +++ b/proc/cmp_elemface_xc_vis.html @@ -159,7 +159,7 @@

                          Arguments

                          @@ -174,7 +174,7 @@

                          Arguments

                          @@ -207,7 +207,7 @@

                          Arguments

                          Return Value - + integer, allocatable, (:)

                          @@ -243,7 +243,7 @@

                          Return Value

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/cmp_elemface_xg_vis.html b/proc/cmp_elemface_xg_vis.html index f07d97b79..20538cb69 100644 --- a/proc/cmp_elemface_xg_vis.html +++ b/proc/cmp_elemface_xg_vis.html @@ -159,7 +159,7 @@

                          Arguments

                          @@ -174,7 +174,7 @@

                          Arguments

                          @@ -207,7 +207,7 @@

                          Arguments

                          Return Value - + integer, allocatable, (:)

                          @@ -243,7 +243,7 @@

                          Return Value

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/cmp_elem~2.html b/proc/cmp_elem~2.html index 513fe12e2..f4022b10a 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_surface

                          +

                          nurbs_volume

                          Arguments

                          - - class(nurbs_curve), + + class(nurbs_surface), intent(in) @@ -177,11 +177,11 @@

                          Arguments

                          integer,
                          intent(in),optional - + optional, + contiguous ::pp(:)
                          - + real(kind=rk), intent(in),
                          - + real(kind=rk), intent(in),
                          - + real(kind=rk), intent(in),
                          - + real(kind=rk), intent(in),
                          - + class(nurbs_volume), intent(in)
                          - + integer, intent(in)
                          - + class(nurbs_volume), intent(in)
                          - + integer, intent(in)
                          - + class(nurbs_volume), intent(in)
                          - + integer, intent(in)
                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_surface), + + class(nurbs_volume), intent(in) @@ -176,7 +176,7 @@

                          Arguments

                          Return Value - + integer, allocatable, (:,:)

                          @@ -202,7 +202,7 @@

                          Calls

                          proc~cmp_elem~2 -nurbs_surface%cmp_elem +nurbs_volume%cmp_elem @@ -237,9 +237,9 @@

                          Calls

                          proc~get_multiplicity~2 - + -nurbs_surface%get_multiplicity +nurbs_volume%get_multiplicity @@ -467,71 +467,90 @@

                          Called by

                          - - + + proc~~cmp_elem~2~~CalledByGraph - + proc~cmp_elem~2 - -nurbs_surface%cmp_elem + +nurbs_volume%cmp_elem proc~ansatz~2 - - -nurbs_surface%ansatz + + +nurbs_volume%ansatz proc~ansatz~2->proc~cmp_elem~2 - - + + - + -proc~cmp_area - - -nurbs_surface%cmp_area +proc~cmp_volume + + +nurbs_volume%cmp_volume - + -proc~cmp_area->proc~cmp_elem~2 - - +proc~cmp_volume->proc~cmp_elem~2 + + - - -proc~cmp_area->proc~ansatz~2 - - + + +proc~cmp_volume->proc~ansatz~2 + + - + -program~compute_area - - -compute_area +program~example3_volume + + +example3_volume - - -program~compute_area->proc~cmp_area - - + + +program~example3_volume->proc~cmp_elem~2 + + + + + +program~compute_volume + + +compute_volume + + + + + +program~compute_volume->proc~cmp_volume + + -
                          +

                          diff --git a/proc/cmp_elem~3.html b/proc/cmp_elem~3.html index 0751c7a67..db24af4ef 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_curve

                          +

                          nurbs_surface

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          @@ -173,7 +173,7 @@

                          Arguments

                          @@ -212,39 +212,39 @@

                          Calls

                          nurbs_curve%cmp_length - + -proc~ansatz~3 - +proc~ansatz + nurbs_curve%ansatz - + -proc~cmp_length->proc~ansatz~3 +proc~cmp_length->proc~ansatz - + -proc~cmp_elem~3 - +proc~cmp_elem + nurbs_curve%cmp_elem - + -proc~cmp_length->proc~cmp_elem~3 +proc~cmp_length->proc~cmp_elem - + -proc~ansatz~3->proc~cmp_elem~3 +proc~ansatz->proc~cmp_elem @@ -257,9 +257,9 @@

                          Calls

                          - + -proc~ansatz~3->interface~dyad +proc~ansatz->interface~dyad @@ -272,9 +272,9 @@

                          Calls

                          - + -proc~ansatz~3->interface~gauss_leg +proc~ansatz->interface~gauss_leg @@ -287,39 +287,39 @@

                          Calls

                          - + -proc~ansatz~3->interface~unique +proc~ansatz->interface~unique - + -none~derivative~3 - +none~derivative + nurbs_curve%derivative - + -proc~ansatz~3->none~derivative~3 +proc~ansatz->none~derivative - + -none~set~3 - +none~set + nurbs_curve%set - + -proc~ansatz~3->none~set~3 +proc~ansatz->none~set @@ -332,30 +332,30 @@

                          Calls

                          - + -proc~cmp_elem~3->interface~elemconn_cn +proc~cmp_elem->interface~elemconn_cn - + -proc~cmp_elem~3->interface~unique +proc~cmp_elem->interface~unique - + -proc~get_multiplicity~3 - +proc~get_multiplicity + nurbs_curve%get_multiplicity - + -proc~cmp_elem~3->proc~get_multiplicity~3 +proc~cmp_elem->proc~get_multiplicity @@ -494,108 +494,108 @@

                          Calls

                          - + -proc~derivative_scalar~3 - +proc~derivative_scalar + nurbs_curve%derivative_scalar - + -none~derivative~3->proc~derivative_scalar~3 +none~derivative->proc~derivative_scalar - + -proc~derivative_vector~3 - +proc~derivative_vector + nurbs_curve%derivative_vector - + -none~derivative~3->proc~derivative_vector~3 +none~derivative->proc~derivative_vector - + -proc~set1a - - -nurbs_curve%set1a +proc~set1 + + +nurbs_curve%set1 - + -none~set~3->proc~set1a - - +none~set->proc~set1 + + - + -proc~set1~3 - - -nurbs_curve%set1 +proc~set1a + + +nurbs_curve%set1a - + -none~set~3->proc~set1~3 - - +none~set->proc~set1a + + - + -proc~set2~3 - +proc~set2 + nurbs_curve%set2 - + -none~set~3->proc~set2~3 +none~set->proc~set2 - + -proc~set3~3 - +proc~set3 + nurbs_curve%set3 - + -none~set~3->proc~set3~3 +none~set->proc~set3 - + -proc~set4~3 - +proc~set4 + nurbs_curve%set4 - + -none~set~3->proc~set4~3 +none~set->proc~set4 @@ -608,9 +608,9 @@

                          Calls

                          - + -proc~get_multiplicity~3->interface~compute_multiplicity +proc~get_multiplicity->interface~compute_multiplicity @@ -644,45 +644,45 @@

                          Calls

                          - + -interface~compute_dtgc~3 - +interface~compute_dtgc + compute_dTgc - + -proc~derivative_scalar~3->interface~compute_dtgc~3 +proc~derivative_scalar->interface~compute_dtgc - + -proc~is_rational~3 - +proc~is_rational + nurbs_curve%is_rational - + -proc~derivative_scalar~3->proc~is_rational~3 +proc~derivative_scalar->proc~is_rational - + -proc~derivative_vector~3->interface~compute_dtgc~3 +proc~derivative_vector->interface~compute_dtgc - + -proc~derivative_vector~3->proc~is_rational~3 +proc~derivative_vector->proc~is_rational @@ -752,25 +752,25 @@

                          Calls

                          - + -proc~cmp_degree~3 - +proc~cmp_degree + nurbs_curve%cmp_degree - + -proc~set1a->proc~cmp_degree~3 - - +proc~set1->proc~cmp_degree + + - + -proc~set1~3->proc~cmp_degree~3 - +proc~set1a->proc~cmp_degree + @@ -782,15 +782,15 @@

                          Calls

                          - + -proc~set2~3->proc~compute_knot_vector +proc~set2->proc~compute_knot_vector - + -proc~set3~3->proc~cmp_degree~3 +proc~set3->proc~cmp_degree @@ -824,9 +824,9 @@

                          Calls

                          - + -proc~cmp_degree~3->proc~get_multiplicity~3 +proc~cmp_degree->proc~get_multiplicity @@ -1083,7 +1083,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/cmp_nc.html b/proc/cmp_nc.html index d5483c383..870cff187 100644 --- a/proc/cmp_nc.html +++ b/proc/cmp_nc.html @@ -78,20 +78,20 @@

                          cmp_nc
                        • 43 statements + title=" 0.1% of total for procedures.">4 statements
                        • - Source File + Source File
                        • -

                          private pure subroutine cmp_nc(this, dir) +

                          private pure subroutine cmp_nc(this)

                          Type Bound

                          -

                          nurbs_volume

                          +

                          nurbs_curve

                          Arguments

                          - - class(nurbs_curve), + + class(nurbs_surface), intent(in) @@ -193,181 +193,181 @@

                          Calls

                          - - + + proc~~cmp_elem~3~~CallsGraph - + proc~cmp_elem~3 - -nurbs_curve%cmp_elem + +nurbs_surface%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_curve%get_multiplicity + + +nurbs_surface%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 - - + + @@ -467,67 +467,67 @@

                          Called by

                          - + proc~~cmp_elem~3~~CalledByGraph - + proc~cmp_elem~3 - -nurbs_curve%cmp_elem + +nurbs_surface%cmp_elem proc~ansatz~3 - - -nurbs_curve%ansatz + + +nurbs_surface%ansatz proc~ansatz~3->proc~cmp_elem~3 - - + + - + -proc~cmp_length - - -nurbs_curve%cmp_length +proc~cmp_area + + +nurbs_surface%cmp_area - + -proc~cmp_length->proc~cmp_elem~3 - - +proc~cmp_area->proc~cmp_elem~3 + + - + -proc~cmp_length->proc~ansatz~3 - - +proc~cmp_area->proc~ansatz~3 + + - + -program~compute_length - - -compute_length +program~compute_area + + +compute_area - + -program~compute_length->proc~cmp_length - - +program~compute_area->proc~cmp_area + + @@ -643,7 +643,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/cmp_length.html b/proc/cmp_length.html index 38bc24e46..67227edaf 100644 --- a/proc/cmp_length.html +++ b/proc/cmp_length.html @@ -158,7 +158,7 @@

                          Arguments

                          - + class(nurbs_curve), intent(inout)
                          - + real(kind=rk), intent(out)
                          @@ -159,7 +159,7 @@

                          Arguments

                          - - - - - - - - @@ -201,61 +186,61 @@

                          Calls

                          - + proc~~cmp_nc~~CallsGraph - + proc~cmp_nc - -nurbs_volume%cmp_nc + +nurbs_curve%cmp_nc interface~compute_multiplicity - -compute_multiplicity + +compute_multiplicity proc~cmp_nc->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,490 +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~~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~ansatz - - -nurbs_volume%ansatz - - - - - -proc~ansatz->none~set - - - - - -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~compute_volume - - -compute_volume - - - - - -program~compute_volume->none~set - - - - - -proc~cmp_volume - - -nurbs_volume%cmp_volume - - - - - -program~compute_volume->proc~cmp_volume - - - - - -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 - - - - - -proc~cmp_volume->proc~ansatz - - - - - -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 -
                          -
                          - class(nurbs_volume), + class(nurbs_curve), intent(inout) @@ -169,21 +169,6 @@

                          Arguments

                          this -
                          - - integer, - intent(in),optional - - ::dir -
                          @@ -158,8 +158,8 @@

                          Arguments

                          @@ -210,7 +210,7 @@

                          Calls

                          proc~cmp_nc~2 -nurbs_surface%cmp_nc +nurbs_volume%cmp_nc @@ -351,454 +351,391 @@

                          Called by

                          - - + + proc~~cmp_nc~2~~CalledByGraph - + proc~cmp_nc~2 - -nurbs_surface%cmp_nc + +nurbs_volume%cmp_nc proc~set1~2 - - -nurbs_surface%set1 + + +nurbs_volume%set1 proc~set1~2->proc~cmp_nc~2 - - + + proc~set2~2 - - -nurbs_surface%set2 + + +nurbs_volume%set2 proc~set2~2->proc~cmp_nc~2 - - + + none~set~2 - - -nurbs_surface%set + + +nurbs_volume%set none~set~2->proc~set1~2 - - + + none~set~2->proc~set2~2 - - + + proc~ansatz~2 - - -nurbs_surface%ansatz + + +nurbs_volume%ansatz proc~ansatz~2->none~set~2 - - + + proc~elevate_degree~2 - - -nurbs_surface%elevate_degree + + +nurbs_volume%elevate_degree proc~elevate_degree~2->none~set~2 - - + + proc~insert_knots~2 - - -nurbs_surface%insert_knots + + +nurbs_volume%insert_knots proc~insert_knots~2->none~set~2 - - + + proc~modify_wc~2 - - -nurbs_surface%modify_Wc + + +nurbs_volume%modify_Wc proc~modify_wc~2->none~set~2 - - + + proc~modify_xc~2 - - -nurbs_surface%modify_Xc + + +nurbs_volume%modify_Xc proc~modify_xc~2->none~set~2 - - + + proc~remove_knots~2 - - -nurbs_surface%remove_knots + + +nurbs_volume%remove_knots proc~remove_knots~2->none~set~2 - - + + proc~set_c~2 - - -nurbs_surface%set_C + + +nurbs_volume%set_C proc~set_c~2->none~set~2 - - + + - + -proc~set_half_ring~2 - - -nurbs_surface%set_half_ring +proc~set_half_ring + + +nurbs_volume%set_half_ring - + -proc~set_half_ring~2->none~set~2 - - +proc~set_half_ring->none~set~2 + + - + -proc~set_ring~2 - - -nurbs_surface%set_ring +proc~set_hexahedron + + +nurbs_volume%set_hexahedron - + -proc~set_ring~2->none~set~2 - - +proc~set_hexahedron->none~set~2 + + - + -proc~set_tetragon - - -nurbs_surface%set_tetragon +proc~set_ring + + +nurbs_volume%set_ring - + -proc~set_tetragon->none~set~2 - - +proc~set_ring->none~set~2 + + - + -program~compute_area - - -compute_area +program~compute_volume + + +compute_volume - + -program~compute_area->none~set~2 - - +program~compute_volume->none~set~2 + + - - -proc~cmp_area - - -nurbs_surface%cmp_area + + +proc~cmp_volume + + +nurbs_volume%cmp_volume - - -program~compute_area->proc~cmp_area - - + + +program~compute_volume->proc~cmp_volume + + - + -program~example3_surface - - -example3_surface +program~example3_volume + + +example3_volume - + -program~example3_surface->none~set~2 - - - - - -program~example3_surface->proc~elevate_degree~2 - - +program~example3_volume->none~set~2 + + - + -program~example3_surface->proc~insert_knots~2 - - +program~example3_volume->proc~elevate_degree~2 + + - + + +program~example3_volume->proc~insert_knots~2 + + + + -program~example3_surface->proc~remove_knots~2 - - +program~example3_volume->proc~remove_knots~2 + + - + -program~example_nurbs_surface - - -example_nurbs_surface +program~example_nurbs_volume + + +example_nurbs_volume - + -program~example_nurbs_surface->none~set~2 - - +program~example_nurbs_volume->none~set~2 + + - + -program~nearest_point_2d - - -nearest_point_2d +program~example_put_to_nurbs + + +example_put_to_nurbs - + -program~nearest_point_2d->none~set~2 - - - - - -proc~cmp_area->proc~ansatz~2 - - +program~example_put_to_nurbs->none~set~2 + + - - -program~example_ppm1 - - -example_ppm1 + + +program~nearest_point_3d + + +nearest_point_3d - - -program~example_ppm1->proc~set_ring~2 - - + + +program~nearest_point_3d->none~set~2 + + - - -program~example_ppm1->proc~set_tetragon - - + + +proc~cmp_volume->proc~ansatz~2 + + - + -program~example_ppm2 - - -example_ppm2 +program~shape_c_3d + + +shape_C_3d - - -program~example_ppm2->proc~set_half_ring~2 - - - - - -program~example_ppm2->proc~set_tetragon - - + + +program~shape_c_3d->proc~set_c~2 + + - + -program~example_ppm3 - - -example_ppm3 +program~shape_half_ring_3d + + +shape_half_ring_3d - - -program~example_ppm3->proc~modify_xc~2 - - - - - -program~example_ppm3->proc~set_tetragon - - + + +program~shape_half_ring_3d->proc~set_half_ring + + - + -program~nearest_point_2d_bench - - -nearest_point_2d_bench +program~shape_hexahedron + + +shape_hexahedron - - -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_hexahedron->proc~set_hexahedron + + - - - -program~shape_ring_2d->proc~set_ring~2 - - - - - -program~shape_tetragon - - -shape_tetragon + + +program~shape_ring_3d + + +shape_ring_3d - - -program~shape_tetragon->proc~set_tetragon - - + + +program~shape_ring_3d->proc~set_ring + + @@ -918,7 +855,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/cmp_nc~3.html b/proc/cmp_nc~3.html index d06d495cc..234fa94f7 100644 --- a/proc/cmp_nc~3.html +++ b/proc/cmp_nc~3.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

                          - - class(nurbs_surface), + + class(nurbs_volume), intent(inout) @@ -173,7 +173,7 @@

                          Arguments

                          - + integer, intent(in),
                          @@ -158,8 +158,8 @@

                          Arguments

                          + + + + + + + + @@ -186,61 +201,61 @@

                          Calls

                          - + proc~~cmp_nc~3~~CallsGraph - + proc~cmp_nc~3 - -nurbs_curve%cmp_nc + +nurbs_surface%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 - - + + @@ -312,6 +327,553 @@ +

                          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~ansatz~3 + + +nurbs_surface%ansatz + + + + + +proc~ansatz~3->none~set~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~compute_area + + +compute_area + + + + + +program~compute_area->none~set~3 + + + + + +proc~cmp_area + + +nurbs_surface%cmp_area + + + + + +program~compute_area->proc~cmp_area + + + + + +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 + + + + + +proc~cmp_area->proc~ansatz~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 +
                          +
                          @@ -173,7 +173,7 @@

                          Arguments

                          @@ -212,39 +212,39 @@

                          Calls

                          nurbs_volume%cmp_volume - + -proc~ansatz - +proc~ansatz~2 + nurbs_volume%ansatz - + -proc~cmp_volume->proc~ansatz +proc~cmp_volume->proc~ansatz~2 - + -proc~cmp_elem - +proc~cmp_elem~2 + nurbs_volume%cmp_elem - + -proc~cmp_volume->proc~cmp_elem +proc~cmp_volume->proc~cmp_elem~2 - + -proc~ansatz->proc~cmp_elem +proc~ansatz~2->proc~cmp_elem~2 @@ -257,9 +257,9 @@

                          Calls

                          - + -proc~ansatz->interface~gauss_leg +proc~ansatz~2->interface~gauss_leg @@ -272,9 +272,9 @@

                          Calls

                          - + -proc~ansatz->interface~ndgrid +proc~ansatz~2->interface~ndgrid @@ -287,39 +287,39 @@

                          Calls

                          - + -proc~ansatz->interface~unique +proc~ansatz~2->interface~unique - + -none~derivative - +none~derivative~2 + nurbs_volume%derivative - + -proc~ansatz->none~derivative +proc~ansatz~2->none~derivative~2 - + -none~set - +none~set~2 + nurbs_volume%set - + -proc~ansatz->none~set +proc~ansatz~2->none~set~2 @@ -332,9 +332,9 @@

                          Calls

                          - + -proc~ansatz->proc~det +proc~ansatz~2->proc~det @@ -347,9 +347,9 @@

                          Calls

                          - + -proc~ansatz->proc~inv +proc~ansatz~2->proc~inv @@ -362,30 +362,30 @@

                          Calls

                          - + -proc~cmp_elem->interface~elemconn_cn +proc~cmp_elem~2->interface~elemconn_cn - + -proc~cmp_elem->interface~unique +proc~cmp_elem~2->interface~unique - + -proc~get_multiplicity - +proc~get_multiplicity~2 + nurbs_volume%get_multiplicity - + -proc~cmp_elem->proc~get_multiplicity +proc~cmp_elem~2->proc~get_multiplicity~2 @@ -539,93 +539,93 @@

                          Calls

                          - + -proc~derivative_scalar - +proc~derivative_scalar~2 + nurbs_volume%derivative_scalar - + -none~derivative->proc~derivative_scalar +none~derivative~2->proc~derivative_scalar~2 - + -proc~derivative_vector - +proc~derivative_vector~2 + nurbs_volume%derivative_vector - + -none~derivative->proc~derivative_vector +none~derivative~2->proc~derivative_vector~2 - + -proc~set1 - +proc~set1~2 + nurbs_volume%set1 - + -none~set->proc~set1 +none~set~2->proc~set1~2 - + -proc~set2 - +proc~set2~2 + nurbs_volume%set2 - + -none~set->proc~set2 +none~set~2->proc~set2~2 - + -proc~set3 - +proc~set3~2 + nurbs_volume%set3 - + -none~set->proc~set3 +none~set~2->proc~set3~2 - + -proc~set4 - +proc~set4~2 + nurbs_volume%set4 - + -none~set->proc~set4 +none~set~2->proc~set4~2 @@ -638,9 +638,9 @@

                          Calls

                          - + -proc~get_multiplicity->interface~compute_multiplicity +proc~get_multiplicity~2->interface~compute_multiplicity @@ -686,51 +686,51 @@

                          Calls

                          - + -interface~compute_dtgc - +interface~compute_dtgc~2 + compute_dTgc - + -proc~derivative_scalar->interface~compute_dtgc +proc~derivative_scalar~2->interface~compute_dtgc~2 - + -proc~is_rational - +proc~is_rational~2 + nurbs_volume%is_rational - + -proc~derivative_scalar->proc~is_rational +proc~derivative_scalar~2->proc~is_rational~2 - + -proc~derivative_vector->interface~ndgrid +proc~derivative_vector~2->interface~ndgrid - + -proc~derivative_vector->interface~compute_dtgc +proc~derivative_vector~2->interface~compute_dtgc~2 - + -proc~derivative_vector->proc~is_rational +proc~derivative_vector~2->proc~is_rational~2 @@ -791,39 +791,39 @@

                          Calls

                          - + -proc~cmp_degree - +proc~cmp_degree~2 + nurbs_volume%cmp_degree - + -proc~set1->proc~cmp_degree +proc~set1~2->proc~cmp_degree~2 - + -proc~cmp_nc - +proc~cmp_nc~2 + nurbs_volume%cmp_nc - + -proc~set1->proc~cmp_nc +proc~set1~2->proc~cmp_nc~2 - + -proc~set2->proc~cmp_nc +proc~set2~2->proc~cmp_nc~2 @@ -836,27 +836,27 @@

                          Calls

                          - + -proc~set2->proc~compute_knot_vector +proc~set2~2->proc~compute_knot_vector - + -proc~set3->proc~cmp_degree +proc~set3~2->proc~cmp_degree~2 - + -proc~cmp_degree->proc~get_multiplicity +proc~cmp_degree~2->proc~get_multiplicity~2 - + -proc~cmp_nc->interface~compute_multiplicity +proc~cmp_nc~2->interface~compute_multiplicity @@ -1113,7 +1113,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/cmp_xg.html b/proc/cmp_xg.html index ef2380543..95a1f31ec 100644 --- a/proc/cmp_xg.html +++ b/proc/cmp_xg.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_volume

                          +

                          nurbs_curve

                          Arguments

                          - - class(nurbs_curve), + + class(nurbs_surface), intent(inout) @@ -169,6 +169,21 @@

                          Arguments

                          this +
                          + + integer, + intent(in),optional + + ::dir +
                          - + class(nurbs_volume), intent(inout)
                          - + real(kind=rk), intent(out)
                          @@ -158,8 +158,8 @@

                          Arguments

                          - + - + @@ -208,46 +208,46 @@

                          Calls

                          - + proc~~cmp_xg~~CallsGraph - + proc~cmp_xg - -nurbs_volume%cmp_Xg + +nurbs_curve%cmp_Xg interface~compute_xg - -compute_Xg + +compute_Xg proc~cmp_xg->interface~compute_xg - - + + proc~is_rational - - -nurbs_volume%is_rational + + +nurbs_curve%is_rational proc~cmp_xg->proc~is_rational - - + + @@ -343,46 +343,46 @@

                          Called by

                          - + proc~~cmp_xg~~CalledByGraph - + proc~cmp_xg - -nurbs_volume%cmp_Xg + +nurbs_curve%cmp_Xg proc~nearest_point2 - - -nurbs_volume%nearest_point2 + + +nurbs_curve%nearest_point2 proc~nearest_point2->proc~cmp_xg - - + + - + -program~nearest_point_3d - +program~nearest_point_1d + -nearest_point_3d +nearest_point_1d - + -program~nearest_point_3d->proc~nearest_point2 - - +program~nearest_point_1d->proc~nearest_point2 + + @@ -498,7 +498,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/cmp_xg~2.html b/proc/cmp_xg~2.html index 7b4e65de2..ca6273811 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_surface

                          +

                          nurbs_volume

                          Arguments

                          - - class(nurbs_volume), + + class(nurbs_curve), intent(in) @@ -176,12 +176,12 @@

                          Arguments

                          real(kind=rk),
                          intent(in),intent(in) - contiguous + ::Xt(:)Xt
                          @@ -158,8 +158,8 @@

                          Arguments

                          @@ -191,7 +191,7 @@

                          Arguments

                          Return Value - + real(kind=rk), allocatable, (:)

                          @@ -217,7 +217,7 @@

                          Calls

                          proc~cmp_xg~2 -nurbs_surface%cmp_Xg +nurbs_volume%cmp_Xg @@ -237,9 +237,9 @@

                          Calls

                          proc~is_rational~2 - + -nurbs_surface%is_rational +nurbs_volume%is_rational @@ -352,14 +352,14 @@

                          Called by

                          proc~cmp_xg~2 -nurbs_surface%cmp_Xg +nurbs_volume%cmp_Xg proc~nearest_point2~2 - + -nurbs_surface%nearest_point2 +nurbs_volume%nearest_point2 @@ -369,18 +369,18 @@

                          Called by

                          - + -program~nearest_point_2d - +program~nearest_point_3d + -nearest_point_2d +nearest_point_3d - + -program~nearest_point_2d->proc~nearest_point2~2 +program~nearest_point_3d->proc~nearest_point2~2 @@ -498,7 +498,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/cmp_xg~3.html b/proc/cmp_xg~3.html index ddd2d12cf..67731b506 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_curve

                          +

                          nurbs_surface

                          Arguments

                          - - class(nurbs_surface), + + class(nurbs_volume), intent(in) @@ -173,7 +173,7 @@

                          Arguments

                          - + real(kind=rk), intent(in),
                          @@ -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_curve%cmp_Xg + +nurbs_surface%cmp_Xg interface~compute_xg~3 - -compute_Xg + +compute_Xg proc~cmp_xg~3->interface~compute_xg~3 - - + + proc~is_rational~3 - - -nurbs_curve%is_rational + + +nurbs_surface%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_curve%cmp_Xg + +nurbs_surface%cmp_Xg proc~nearest_point2~3 - - -nurbs_curve%nearest_point2 + + +nurbs_surface%nearest_point2 proc~nearest_point2~3->proc~cmp_xg~3 - - + + - + -program~nearest_point_1d - +program~nearest_point_2d + -nearest_point_1d +nearest_point_2d - + -program~nearest_point_1d->proc~nearest_point2~3 - - +program~nearest_point_2d->proc~nearest_point2~3 + + @@ -498,7 +498,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/compute_d2tgc_bspline_1d_scalar.html b/proc/compute_d2tgc_bspline_1d_scalar.html index 9bd3ac276..bfcb14e31 100644 --- a/proc/compute_d2tgc_bspline_1d_scalar.html +++ b/proc/compute_d2tgc_bspline_1d_scalar.html @@ -287,7 +287,7 @@

                          Arguments

                          @@ -302,7 +302,7 @@

                          Arguments

                          @@ -317,7 +317,7 @@

                          Arguments

                          @@ -332,7 +332,7 @@

                          Arguments

                          @@ -347,7 +347,7 @@

                          Arguments

                          @@ -362,7 +362,7 @@

                          Arguments

                          @@ -377,7 +377,7 @@

                          Arguments

                          @@ -545,7 +545,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/compute_d2tgc_bspline_1d_vector.html b/proc/compute_d2tgc_bspline_1d_vector.html index 663372f6a..00ffac524 100644 --- a/proc/compute_d2tgc_bspline_1d_vector.html +++ b/proc/compute_d2tgc_bspline_1d_vector.html @@ -287,7 +287,7 @@

                          Arguments

                          @@ -302,7 +302,7 @@

                          Arguments

                          @@ -317,7 +317,7 @@

                          Arguments

                          @@ -332,7 +332,7 @@

                          Arguments

                          @@ -347,7 +347,7 @@

                          Arguments

                          @@ -362,7 +362,7 @@

                          Arguments

                          @@ -377,7 +377,7 @@

                          Arguments

                          @@ -392,7 +392,7 @@

                          Arguments

                          @@ -560,7 +560,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/compute_d2tgc_bspline_2d_scalar.html b/proc/compute_d2tgc_bspline_2d_scalar.html index 614a171f5..cc070aca8 100644 --- a/proc/compute_d2tgc_bspline_2d_scalar.html +++ b/proc/compute_d2tgc_bspline_2d_scalar.html @@ -287,7 +287,7 @@

                          Arguments

                          @@ -302,7 +302,7 @@

                          Arguments

                          @@ -317,7 +317,7 @@

                          Arguments

                          @@ -332,7 +332,7 @@

                          Arguments

                          @@ -347,7 +347,7 @@

                          Arguments

                          @@ -362,7 +362,7 @@

                          Arguments

                          @@ -377,7 +377,7 @@

                          Arguments

                          @@ -392,7 +392,7 @@

                          Arguments

                          @@ -575,7 +575,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/compute_d2tgc_bspline_2d_vector.html b/proc/compute_d2tgc_bspline_2d_vector.html index 2ca667b80..62865a689 100644 --- a/proc/compute_d2tgc_bspline_2d_vector.html +++ b/proc/compute_d2tgc_bspline_2d_vector.html @@ -287,7 +287,7 @@

                          Arguments

                          @@ -302,7 +302,7 @@

                          Arguments

                          @@ -317,7 +317,7 @@

                          Arguments

                          @@ -332,7 +332,7 @@

                          Arguments

                          @@ -347,7 +347,7 @@

                          Arguments

                          @@ -362,7 +362,7 @@

                          Arguments

                          @@ -377,7 +377,7 @@

                          Arguments

                          @@ -392,7 +392,7 @@

                          Arguments

                          @@ -407,7 +407,7 @@

                          Arguments

                          @@ -590,7 +590,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/compute_d2tgc_bspline_3d_scalar.html b/proc/compute_d2tgc_bspline_3d_scalar.html index 5d179b7cc..2b62930f5 100644 --- a/proc/compute_d2tgc_bspline_3d_scalar.html +++ b/proc/compute_d2tgc_bspline_3d_scalar.html @@ -287,7 +287,7 @@

                          Arguments

                          @@ -302,7 +302,7 @@

                          Arguments

                          @@ -317,7 +317,7 @@

                          Arguments

                          @@ -332,7 +332,7 @@

                          Arguments

                          @@ -347,7 +347,7 @@

                          Arguments

                          @@ -362,7 +362,7 @@

                          Arguments

                          @@ -377,7 +377,7 @@

                          Arguments

                          @@ -392,7 +392,7 @@

                          Arguments

                          @@ -407,7 +407,7 @@

                          Arguments

                          @@ -590,7 +590,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/compute_d2tgc_bspline_3d_vector.html b/proc/compute_d2tgc_bspline_3d_vector.html index 46a9fc996..5f4f3b9af 100644 --- a/proc/compute_d2tgc_bspline_3d_vector.html +++ b/proc/compute_d2tgc_bspline_3d_vector.html @@ -287,7 +287,7 @@

                          Arguments

                          @@ -302,7 +302,7 @@

                          Arguments

                          @@ -317,7 +317,7 @@

                          Arguments

                          @@ -332,7 +332,7 @@

                          Arguments

                          @@ -347,7 +347,7 @@

                          Arguments

                          @@ -362,7 +362,7 @@

                          Arguments

                          @@ -377,7 +377,7 @@

                          Arguments

                          @@ -392,7 +392,7 @@

                          Arguments

                          @@ -407,7 +407,7 @@

                          Arguments

                          @@ -422,7 +422,7 @@

                          Arguments

                          @@ -605,7 +605,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/compute_d2tgc_nurbs_1d_scalar.html b/proc/compute_d2tgc_nurbs_1d_scalar.html index f99a90c7f..0fa10270b 100644 --- a/proc/compute_d2tgc_nurbs_1d_scalar.html +++ b/proc/compute_d2tgc_nurbs_1d_scalar.html @@ -287,7 +287,7 @@

                          Arguments

                          @@ -302,7 +302,7 @@

                          Arguments

                          @@ -317,7 +317,7 @@

                          Arguments

                          @@ -332,7 +332,7 @@

                          Arguments

                          @@ -347,7 +347,7 @@

                          Arguments

                          @@ -362,7 +362,7 @@

                          Arguments

                          @@ -377,7 +377,7 @@

                          Arguments

                          @@ -392,7 +392,7 @@

                          Arguments

                          @@ -560,7 +560,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/compute_d2tgc_nurbs_1d_vector.html b/proc/compute_d2tgc_nurbs_1d_vector.html index 4239b0c15..1a375280d 100644 --- a/proc/compute_d2tgc_nurbs_1d_vector.html +++ b/proc/compute_d2tgc_nurbs_1d_vector.html @@ -287,7 +287,7 @@

                          Arguments

                          @@ -302,7 +302,7 @@

                          Arguments

                          @@ -317,7 +317,7 @@

                          Arguments

                          @@ -332,7 +332,7 @@

                          Arguments

                          @@ -347,7 +347,7 @@

                          Arguments

                          @@ -362,7 +362,7 @@

                          Arguments

                          @@ -377,7 +377,7 @@

                          Arguments

                          @@ -392,7 +392,7 @@

                          Arguments

                          @@ -407,7 +407,7 @@

                          Arguments

                          @@ -575,7 +575,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/compute_d2tgc_nurbs_2d_scalar.html b/proc/compute_d2tgc_nurbs_2d_scalar.html index d011ee880..788691fd4 100644 --- a/proc/compute_d2tgc_nurbs_2d_scalar.html +++ b/proc/compute_d2tgc_nurbs_2d_scalar.html @@ -287,7 +287,7 @@

                          Arguments

                          @@ -302,7 +302,7 @@

                          Arguments

                          @@ -317,7 +317,7 @@

                          Arguments

                          @@ -332,7 +332,7 @@

                          Arguments

                          @@ -347,7 +347,7 @@

                          Arguments

                          @@ -362,7 +362,7 @@

                          Arguments

                          @@ -377,7 +377,7 @@

                          Arguments

                          @@ -392,7 +392,7 @@

                          Arguments

                          @@ -407,7 +407,7 @@

                          Arguments

                          @@ -590,7 +590,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/compute_d2tgc_nurbs_2d_vector.html b/proc/compute_d2tgc_nurbs_2d_vector.html index 6363c7453..ba067f87f 100644 --- a/proc/compute_d2tgc_nurbs_2d_vector.html +++ b/proc/compute_d2tgc_nurbs_2d_vector.html @@ -287,7 +287,7 @@

                          Arguments

                          @@ -302,7 +302,7 @@

                          Arguments

                          @@ -317,7 +317,7 @@

                          Arguments

                          @@ -332,7 +332,7 @@

                          Arguments

                          @@ -347,7 +347,7 @@

                          Arguments

                          @@ -362,7 +362,7 @@

                          Arguments

                          @@ -377,7 +377,7 @@

                          Arguments

                          @@ -392,7 +392,7 @@

                          Arguments

                          @@ -407,7 +407,7 @@

                          Arguments

                          @@ -422,7 +422,7 @@

                          Arguments

                          @@ -605,7 +605,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/compute_d2tgc_nurbs_3d_scalar.html b/proc/compute_d2tgc_nurbs_3d_scalar.html index a82b93edb..5a96cb43e 100644 --- a/proc/compute_d2tgc_nurbs_3d_scalar.html +++ b/proc/compute_d2tgc_nurbs_3d_scalar.html @@ -287,7 +287,7 @@

                          Arguments

                          @@ -302,7 +302,7 @@

                          Arguments

                          @@ -317,7 +317,7 @@

                          Arguments

                          @@ -332,7 +332,7 @@

                          Arguments

                          @@ -347,7 +347,7 @@

                          Arguments

                          @@ -362,7 +362,7 @@

                          Arguments

                          @@ -377,7 +377,7 @@

                          Arguments

                          @@ -392,7 +392,7 @@

                          Arguments

                          @@ -407,7 +407,7 @@

                          Arguments

                          @@ -422,7 +422,7 @@

                          Arguments

                          @@ -605,7 +605,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/compute_d2tgc_nurbs_3d_vector.html b/proc/compute_d2tgc_nurbs_3d_vector.html index 9a98cba58..da5acf358 100644 --- a/proc/compute_d2tgc_nurbs_3d_vector.html +++ b/proc/compute_d2tgc_nurbs_3d_vector.html @@ -287,7 +287,7 @@

                          Arguments

                          @@ -302,7 +302,7 @@

                          Arguments

                          @@ -317,7 +317,7 @@

                          Arguments

                          @@ -332,7 +332,7 @@

                          Arguments

                          @@ -347,7 +347,7 @@

                          Arguments

                          @@ -362,7 +362,7 @@

                          Arguments

                          @@ -377,7 +377,7 @@

                          Arguments

                          @@ -392,7 +392,7 @@

                          Arguments

                          @@ -407,7 +407,7 @@

                          Arguments

                          @@ -422,7 +422,7 @@

                          Arguments

                          @@ -437,7 +437,7 @@

                          Arguments

                          @@ -620,7 +620,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/compute_dtgc_bspline_1d_scalar.html b/proc/compute_dtgc_bspline_1d_scalar.html index 28e955489..be8c3721a 100644 --- a/proc/compute_dtgc_bspline_1d_scalar.html +++ b/proc/compute_dtgc_bspline_1d_scalar.html @@ -287,7 +287,7 @@

                          Arguments

                          @@ -302,7 +302,7 @@

                          Arguments

                          @@ -317,7 +317,7 @@

                          Arguments

                          @@ -332,7 +332,7 @@

                          Arguments

                          @@ -347,7 +347,7 @@

                          Arguments

                          @@ -362,7 +362,7 @@

                          Arguments

                          @@ -377,7 +377,7 @@

                          Arguments

                          @@ -545,7 +545,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/compute_dtgc_bspline_1d_vector.html b/proc/compute_dtgc_bspline_1d_vector.html index 4f180009e..b3f3cace4 100644 --- a/proc/compute_dtgc_bspline_1d_vector.html +++ b/proc/compute_dtgc_bspline_1d_vector.html @@ -287,7 +287,7 @@

                          Arguments

                          @@ -302,7 +302,7 @@

                          Arguments

                          @@ -317,7 +317,7 @@

                          Arguments

                          @@ -332,7 +332,7 @@

                          Arguments

                          @@ -347,7 +347,7 @@

                          Arguments

                          @@ -362,7 +362,7 @@

                          Arguments

                          @@ -377,7 +377,7 @@

                          Arguments

                          @@ -545,7 +545,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/compute_dtgc_bspline_2d_scalar.html b/proc/compute_dtgc_bspline_2d_scalar.html index 5abb851ae..9896c85c3 100644 --- a/proc/compute_dtgc_bspline_2d_scalar.html +++ b/proc/compute_dtgc_bspline_2d_scalar.html @@ -287,7 +287,7 @@

                          Arguments

                          @@ -302,7 +302,7 @@

                          Arguments

                          @@ -317,7 +317,7 @@

                          Arguments

                          @@ -332,7 +332,7 @@

                          Arguments

                          @@ -347,7 +347,7 @@

                          Arguments

                          @@ -362,7 +362,7 @@

                          Arguments

                          @@ -377,7 +377,7 @@

                          Arguments

                          @@ -392,7 +392,7 @@

                          Arguments

                          @@ -575,7 +575,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/compute_dtgc_bspline_2d_vector.html b/proc/compute_dtgc_bspline_2d_vector.html index 188b5e485..6b48143f3 100644 --- a/proc/compute_dtgc_bspline_2d_vector.html +++ b/proc/compute_dtgc_bspline_2d_vector.html @@ -287,7 +287,7 @@

                          Arguments

                          @@ -302,7 +302,7 @@

                          Arguments

                          @@ -317,7 +317,7 @@

                          Arguments

                          @@ -332,7 +332,7 @@

                          Arguments

                          @@ -347,7 +347,7 @@

                          Arguments

                          @@ -362,7 +362,7 @@

                          Arguments

                          @@ -377,7 +377,7 @@

                          Arguments

                          @@ -392,7 +392,7 @@

                          Arguments

                          @@ -575,7 +575,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/compute_dtgc_bspline_3d_scalar.html b/proc/compute_dtgc_bspline_3d_scalar.html index 0c3ca7626..01821726d 100644 --- a/proc/compute_dtgc_bspline_3d_scalar.html +++ b/proc/compute_dtgc_bspline_3d_scalar.html @@ -287,7 +287,7 @@

                          Arguments

                          @@ -302,7 +302,7 @@

                          Arguments

                          @@ -317,7 +317,7 @@

                          Arguments

                          @@ -332,7 +332,7 @@

                          Arguments

                          @@ -347,7 +347,7 @@

                          Arguments

                          @@ -362,7 +362,7 @@

                          Arguments

                          @@ -377,7 +377,7 @@

                          Arguments

                          @@ -392,7 +392,7 @@

                          Arguments

                          @@ -407,7 +407,7 @@

                          Arguments

                          @@ -590,7 +590,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/compute_dtgc_bspline_3d_vector.html b/proc/compute_dtgc_bspline_3d_vector.html index c932f4152..f5c1aec79 100644 --- a/proc/compute_dtgc_bspline_3d_vector.html +++ b/proc/compute_dtgc_bspline_3d_vector.html @@ -287,7 +287,7 @@

                          Arguments

                          @@ -302,7 +302,7 @@

                          Arguments

                          @@ -317,7 +317,7 @@

                          Arguments

                          @@ -332,7 +332,7 @@

                          Arguments

                          @@ -347,7 +347,7 @@

                          Arguments

                          @@ -362,7 +362,7 @@

                          Arguments

                          @@ -377,7 +377,7 @@

                          Arguments

                          @@ -392,7 +392,7 @@

                          Arguments

                          @@ -407,7 +407,7 @@

                          Arguments

                          @@ -590,7 +590,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/compute_dtgc_nurbs_1d_scalar.html b/proc/compute_dtgc_nurbs_1d_scalar.html index e63721fda..85d912684 100644 --- a/proc/compute_dtgc_nurbs_1d_scalar.html +++ b/proc/compute_dtgc_nurbs_1d_scalar.html @@ -287,7 +287,7 @@

                          Arguments

                          @@ -302,7 +302,7 @@

                          Arguments

                          @@ -317,7 +317,7 @@

                          Arguments

                          @@ -332,7 +332,7 @@

                          Arguments

                          @@ -347,7 +347,7 @@

                          Arguments

                          @@ -362,7 +362,7 @@

                          Arguments

                          @@ -377,7 +377,7 @@

                          Arguments

                          @@ -392,7 +392,7 @@

                          Arguments

                          @@ -560,7 +560,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/compute_dtgc_nurbs_1d_vector.html b/proc/compute_dtgc_nurbs_1d_vector.html index 8db76d732..55cf40a1d 100644 --- a/proc/compute_dtgc_nurbs_1d_vector.html +++ b/proc/compute_dtgc_nurbs_1d_vector.html @@ -287,7 +287,7 @@

                          Arguments

                          @@ -302,7 +302,7 @@

                          Arguments

                          @@ -317,7 +317,7 @@

                          Arguments

                          @@ -332,7 +332,7 @@

                          Arguments

                          @@ -347,7 +347,7 @@

                          Arguments

                          @@ -362,7 +362,7 @@

                          Arguments

                          @@ -377,7 +377,7 @@

                          Arguments

                          @@ -392,7 +392,7 @@

                          Arguments

                          @@ -560,7 +560,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/compute_dtgc_nurbs_2d_scalar.html b/proc/compute_dtgc_nurbs_2d_scalar.html index ed98162ca..c4cfb78a9 100644 --- a/proc/compute_dtgc_nurbs_2d_scalar.html +++ b/proc/compute_dtgc_nurbs_2d_scalar.html @@ -287,7 +287,7 @@

                          Arguments

                          @@ -302,7 +302,7 @@

                          Arguments

                          @@ -317,7 +317,7 @@

                          Arguments

                          @@ -332,7 +332,7 @@

                          Arguments

                          @@ -347,7 +347,7 @@

                          Arguments

                          @@ -362,7 +362,7 @@

                          Arguments

                          @@ -377,7 +377,7 @@

                          Arguments

                          @@ -392,7 +392,7 @@

                          Arguments

                          @@ -407,7 +407,7 @@

                          Arguments

                          @@ -590,7 +590,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/compute_dtgc_nurbs_2d_vector.html b/proc/compute_dtgc_nurbs_2d_vector.html index 7bd6f2987..37efd0d25 100644 --- a/proc/compute_dtgc_nurbs_2d_vector.html +++ b/proc/compute_dtgc_nurbs_2d_vector.html @@ -287,7 +287,7 @@

                          Arguments

                          @@ -302,7 +302,7 @@

                          Arguments

                          @@ -317,7 +317,7 @@

                          Arguments

                          @@ -332,7 +332,7 @@

                          Arguments

                          @@ -347,7 +347,7 @@

                          Arguments

                          @@ -362,7 +362,7 @@

                          Arguments

                          @@ -377,7 +377,7 @@

                          Arguments

                          @@ -392,7 +392,7 @@

                          Arguments

                          @@ -407,7 +407,7 @@

                          Arguments

                          @@ -590,7 +590,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/compute_dtgc_nurbs_3d_scalar.html b/proc/compute_dtgc_nurbs_3d_scalar.html index 07b0e4287..d9847bccb 100644 --- a/proc/compute_dtgc_nurbs_3d_scalar.html +++ b/proc/compute_dtgc_nurbs_3d_scalar.html @@ -287,7 +287,7 @@

                          Arguments

                          @@ -302,7 +302,7 @@

                          Arguments

                          @@ -317,7 +317,7 @@

                          Arguments

                          @@ -332,7 +332,7 @@

                          Arguments

                          @@ -347,7 +347,7 @@

                          Arguments

                          @@ -362,7 +362,7 @@

                          Arguments

                          @@ -377,7 +377,7 @@

                          Arguments

                          @@ -392,7 +392,7 @@

                          Arguments

                          @@ -407,7 +407,7 @@

                          Arguments

                          @@ -422,7 +422,7 @@

                          Arguments

                          @@ -605,7 +605,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/compute_dtgc_nurbs_3d_vector.html b/proc/compute_dtgc_nurbs_3d_vector.html index b801ca305..7bdba3e1d 100644 --- a/proc/compute_dtgc_nurbs_3d_vector.html +++ b/proc/compute_dtgc_nurbs_3d_vector.html @@ -287,7 +287,7 @@

                          Arguments

                          @@ -302,7 +302,7 @@

                          Arguments

                          @@ -317,7 +317,7 @@

                          Arguments

                          @@ -332,7 +332,7 @@

                          Arguments

                          @@ -347,7 +347,7 @@

                          Arguments

                          @@ -362,7 +362,7 @@

                          Arguments

                          @@ -377,7 +377,7 @@

                          Arguments

                          @@ -392,7 +392,7 @@

                          Arguments

                          @@ -407,7 +407,7 @@

                          Arguments

                          @@ -422,7 +422,7 @@

                          Arguments

                          @@ -605,7 +605,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/compute_knot_vector.html b/proc/compute_knot_vector.html index ac748f93b..f900d5b4a 100644 --- a/proc/compute_knot_vector.html +++ b/proc/compute_knot_vector.html @@ -156,7 +156,7 @@

                          Arguments

                          @@ -171,7 +171,7 @@

                          Arguments

                          @@ -186,7 +186,7 @@

                          Arguments

                          @@ -204,7 +204,7 @@

                          Arguments

                          Return Value - + real(kind=rk), allocatable, (:)

                          @@ -349,1088 +349,1088 @@

                          Called by

                          proc~compute_knot_vector - -compute_knot_vector + +compute_knot_vector proc~set2 - - -nurbs_volume%set2 + + +nurbs_curve%set2 proc~set2->proc~compute_knot_vector - - + + proc~set2~2 - - -nurbs_surface%set2 + + +nurbs_volume%set2 proc~set2~2->proc~compute_knot_vector - - + + proc~set2~3 - - -nurbs_curve%set2 + + +nurbs_surface%set2 proc~set2~3->proc~compute_knot_vector - - + + none~set - - -nurbs_volume%set + + +nurbs_curve%set none~set->proc~set2 - - + + none~set~2 - - -nurbs_surface%set + + +nurbs_volume%set none~set~2->proc~set2~2 - - + + none~set~3 - - -nurbs_curve%set + + +nurbs_surface%set none~set~3->proc~set2~3 - - + + proc~ansatz - - -nurbs_volume%ansatz + + +nurbs_curve%ansatz proc~ansatz->none~set - - + + proc~ansatz~2 - - -nurbs_surface%ansatz + + +nurbs_volume%ansatz - + proc~ansatz~2->none~set~2 - - + + proc~ansatz~3 - - -nurbs_curve%ansatz + + +nurbs_surface%ansatz - + proc~ansatz~3->none~set~3 - - + + proc~elevate_degree - - -nurbs_volume%elevate_degree + + +nurbs_curve%elevate_degree proc~elevate_degree->none~set - - + + proc~elevate_degree~2 - - -nurbs_surface%elevate_degree + + +nurbs_volume%elevate_degree - + proc~elevate_degree~2->none~set~2 - - + + proc~elevate_degree~3 - - -nurbs_curve%elevate_degree + + +nurbs_surface%elevate_degree - + proc~elevate_degree~3->none~set~3 - - + + proc~insert_knots - - -nurbs_volume%insert_knots + + +nurbs_curve%insert_knots proc~insert_knots->none~set - - + + proc~insert_knots~2 - - -nurbs_surface%insert_knots + + +nurbs_volume%insert_knots - + proc~insert_knots~2->none~set~2 - - + + proc~insert_knots~3 - - -nurbs_curve%insert_knots + + +nurbs_surface%insert_knots - + proc~insert_knots~3->none~set~3 - - + + proc~modify_wc - - -nurbs_volume%modify_Wc + + +nurbs_curve%modify_Wc proc~modify_wc->none~set - - + + proc~modify_wc~2 - - -nurbs_surface%modify_Wc + + +nurbs_volume%modify_Wc - + proc~modify_wc~2->none~set~2 - - + + proc~modify_wc~3 - - -nurbs_curve%modify_Wc + + +nurbs_surface%modify_Wc - + proc~modify_wc~3->none~set~3 - - + + proc~modify_xc - - -nurbs_volume%modify_Xc + + +nurbs_curve%modify_Xc proc~modify_xc->none~set - - + + proc~modify_xc~2 - - -nurbs_surface%modify_Xc + + +nurbs_volume%modify_Xc - + proc~modify_xc~2->none~set~2 - - + + proc~modify_xc~3 - - -nurbs_curve%modify_Xc + + +nurbs_surface%modify_Xc - + proc~modify_xc~3->none~set~3 - - + + proc~remove_knots - - -nurbs_volume%remove_knots + + +nurbs_curve%remove_knots proc~remove_knots->none~set - - + + proc~remove_knots~2 - - -nurbs_surface%remove_knots + + +nurbs_volume%remove_knots - + proc~remove_knots~2->none~set~2 - - + + proc~remove_knots~3 - - -nurbs_curve%remove_knots + + +nurbs_surface%remove_knots - + proc~remove_knots~3->none~set~3 - - + + proc~set_c - - -nurbs_volume%set_C + + +nurbs_curve%set_C proc~set_c->none~set - - + + proc~set_circle - -nurbs_curve%set_circle + +nurbs_curve%set_circle - - -proc~set_circle->none~set~3 - - + + +proc~set_circle->none~set + + proc~set_c~2 - - -nurbs_surface%set_C + + +nurbs_volume%set_C - + proc~set_c~2->none~set~2 - - + + proc~set_c~3 - - -nurbs_curve%set_C + + +nurbs_surface%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~3 - - + + +proc~set_half_circle->none~set + + proc~set_half_ring - -nurbs_volume%set_half_ring + +nurbs_volume%set_half_ring - - -proc~set_half_ring->none~set - - + + +proc~set_half_ring->none~set~2 + + proc~set_half_ring~2 - -nurbs_surface%set_half_ring + +nurbs_surface%set_half_ring - - -proc~set_half_ring~2->none~set~2 - - + + +proc~set_half_ring~2->none~set~3 + + proc~set_hexahedron - -nurbs_volume%set_hexahedron + +nurbs_volume%set_hexahedron - - -proc~set_hexahedron->none~set - - + + +proc~set_hexahedron->none~set~2 + + proc~set_ring - -nurbs_volume%set_ring + +nurbs_volume%set_ring - - -proc~set_ring->none~set - - + + +proc~set_ring->none~set~2 + + proc~set_ring~2 - -nurbs_surface%set_ring + +nurbs_surface%set_ring - - -proc~set_ring~2->none~set~2 - - + + +proc~set_ring~2->none~set~3 + + proc~set_tetragon - -nurbs_surface%set_tetragon + +nurbs_surface%set_tetragon - - -proc~set_tetragon->none~set~2 - - + + +proc~set_tetragon->none~set~3 + + program~compute_area - -compute_area + +compute_area - - -program~compute_area->none~set~2 - - + + +program~compute_area->none~set~3 + + proc~cmp_area - -nurbs_surface%cmp_area + +nurbs_surface%cmp_area program~compute_area->proc~cmp_area - - + + program~compute_length - -compute_length + +compute_length - - -program~compute_length->none~set~3 - - + + +program~compute_length->none~set + + proc~cmp_length - -nurbs_curve%cmp_length + +nurbs_curve%cmp_length program~compute_length->proc~cmp_length - - + + program~compute_volume - -compute_volume + +compute_volume - - -program~compute_volume->none~set - - + + +program~compute_volume->none~set~2 + + proc~cmp_volume - -nurbs_volume%cmp_volume + +nurbs_volume%cmp_volume program~compute_volume->proc~cmp_volume - - + + program~example1_curve - -example1_curve + +example1_curve - - -program~example1_curve->none~set~3 - - + + +program~example1_curve->none~set + + - - -program~example1_curve->proc~elevate_degree~3 - - + + +program~example1_curve->proc~elevate_degree + + - - -program~example1_curve->proc~insert_knots~3 - - + + +program~example1_curve->proc~insert_knots + + - - -program~example1_curve->proc~remove_knots~3 - - + + +program~example1_curve->proc~remove_knots + + program~example3_surface - -example3_surface + +example3_surface - - -program~example3_surface->none~set~2 - - + + +program~example3_surface->none~set~3 + + - - -program~example3_surface->proc~elevate_degree~2 - - + + +program~example3_surface->proc~elevate_degree~3 + + - - -program~example3_surface->proc~insert_knots~2 - - + + +program~example3_surface->proc~insert_knots~3 + + - - -program~example3_surface->proc~remove_knots~2 - - + + +program~example3_surface->proc~remove_knots~3 + + program~example3_volume - -example3_volume + +example3_volume - - -program~example3_volume->none~set - - + + +program~example3_volume->none~set~2 + + - - -program~example3_volume->proc~elevate_degree - - + + +program~example3_volume->proc~elevate_degree~2 + + - - -program~example3_volume->proc~insert_knots - - + + +program~example3_volume->proc~insert_knots~2 + + - - -program~example3_volume->proc~remove_knots - - + + +program~example3_volume->proc~remove_knots~2 + + program~example_nurbs_curve - -example_nurbs_curve + +example_nurbs_curve - - -program~example_nurbs_curve->none~set~3 - - + + +program~example_nurbs_curve->none~set + + program~example_nurbs_surface - -example_nurbs_surface + +example_nurbs_surface - - -program~example_nurbs_surface->none~set~2 - - + + +program~example_nurbs_surface->none~set~3 + + program~example_nurbs_volume - -example_nurbs_volume + +example_nurbs_volume - - -program~example_nurbs_volume->none~set - - + + +program~example_nurbs_volume->none~set~2 + + 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->none~set~2 + + program~nearest_point_1d - -nearest_point_1d + +nearest_point_1d - - -program~nearest_point_1d->none~set~3 - - + + +program~nearest_point_1d->none~set + + program~nearest_point_2d - -nearest_point_2d + +nearest_point_2d - - -program~nearest_point_2d->none~set~2 - - + + +program~nearest_point_2d->none~set~3 + + program~nearest_point_3d - -nearest_point_3d + +nearest_point_3d - - -program~nearest_point_3d->none~set - - - - - -proc~cmp_area->proc~ansatz~2 - - + + +program~nearest_point_3d->none~set~2 + + - + -proc~cmp_length->proc~ansatz~3 - - +proc~cmp_area->proc~ansatz~3 + + - + -proc~cmp_volume->proc~ansatz - - +proc~cmp_length->proc~ansatz + + + + + +proc~cmp_volume->proc~ansatz~2 + + 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~2 - - +program~example_ppm3->proc~modify_xc~3 + + 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~3 - - + + +program~shape_c_1d->proc~set_c + + program~shape_c_2d - -shape_C_2d + +shape_C_2d - - -program~shape_c_2d->proc~set_c~2 - - + + +program~shape_c_2d->proc~set_c~3 + + program~shape_c_3d - -shape_C_3d + +shape_C_3d - - -program~shape_c_3d->proc~set_c - - + + +program~shape_c_3d->proc~set_c~2 + + 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 - - + + program~shape_half_ring_3d - -shape_half_ring_3d + +shape_half_ring_3d program~shape_half_ring_3d->proc~set_half_ring - - + + program~shape_hexahedron - -shape_hexahedron + +shape_hexahedron program~shape_hexahedron->proc~set_hexahedron - - + + 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 - - + + @@ -1550,7 +1550,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/compute_multiplicity1.html b/proc/compute_multiplicity1.html index 8de710737..f17d6af7d 100644 --- a/proc/compute_multiplicity1.html +++ b/proc/compute_multiplicity1.html @@ -156,7 +156,7 @@

                          Arguments

                          @@ -199,581 +199,581 @@

                          Called by

                          proc~compute_multiplicity1 - -compute_multiplicity1 + +compute_multiplicity1 interface~compute_multiplicity - -compute_multiplicity + +compute_multiplicity interface~compute_multiplicity->proc~compute_multiplicity1 - - + + proc~cmp_nc - - -nurbs_volume%cmp_nc + + +nurbs_curve%cmp_nc proc~cmp_nc->interface~compute_multiplicity - - + + proc~cmp_nc~2 - - -nurbs_surface%cmp_nc + + +nurbs_volume%cmp_nc proc~cmp_nc~2->interface~compute_multiplicity - - + + proc~cmp_nc~3 - - -nurbs_curve%cmp_nc + + +nurbs_surface%cmp_nc proc~cmp_nc~3->interface~compute_multiplicity - - + + proc~elevate_degree_a_5_9 - -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 + + +nurbs_curve%get_continuity proc~get_continuity->interface~compute_multiplicity - - + + proc~get_continuity~2 - - -nurbs_surface%get_continuity + + +nurbs_volume%get_continuity proc~get_continuity~2->interface~compute_multiplicity - - + + proc~get_continuity~3 - - -nurbs_curve%get_continuity + + +nurbs_surface%get_continuity proc~get_continuity~3->interface~compute_multiplicity - - + + proc~get_multiplicity - - -nurbs_volume%get_multiplicity + + +nurbs_curve%get_multiplicity proc~get_multiplicity->interface~compute_multiplicity - - + + proc~get_multiplicity~2 - - -nurbs_surface%get_multiplicity + + +nurbs_volume%get_multiplicity proc~get_multiplicity~2->interface~compute_multiplicity - - + + proc~get_multiplicity~3 - - -nurbs_curve%get_multiplicity + + +nurbs_surface%get_multiplicity proc~get_multiplicity~3->interface~compute_multiplicity - - + + proc~get_nc_dir - -nurbs_volume%get_nc_dir + +nurbs_volume%get_nc_dir proc~get_nc_dir->interface~compute_multiplicity - - + + proc~get_nc_dir~2 - -nurbs_surface%get_nc_dir + +nurbs_surface%get_nc_dir proc~get_nc_dir~2->interface~compute_multiplicity - - + + proc~insert_knots - - -nurbs_volume%insert_knots + + +nurbs_curve%insert_knots proc~insert_knots->interface~compute_multiplicity - - + + - + none~set - - -nurbs_volume%set + + +nurbs_curve%set - + proc~insert_knots->none~set - - + + proc~insert_knots~2 - - -nurbs_surface%insert_knots + + +nurbs_volume%insert_knots proc~insert_knots~2->interface~compute_multiplicity - - + + - + none~set~2 - - -nurbs_surface%set + + +nurbs_volume%set - + proc~insert_knots~2->none~set~2 - - + + proc~insert_knots~3 - - -nurbs_curve%insert_knots + + +nurbs_surface%insert_knots proc~insert_knots~3->interface~compute_multiplicity - - + + - + none~set~3 - - -nurbs_curve%set + + +nurbs_surface%set - + proc~insert_knots~3->none~set~3 - - + + proc~remove_knots - - -nurbs_volume%remove_knots + + +nurbs_curve%remove_knots proc~remove_knots->interface~compute_multiplicity - - + + - + proc~remove_knots->none~set - - + + proc~remove_knots~2 - - -nurbs_surface%remove_knots + + +nurbs_volume%remove_knots proc~remove_knots~2->interface~compute_multiplicity - - + + - + proc~remove_knots~2->none~set~2 - - + + proc~remove_knots~3 - - -nurbs_curve%remove_knots + + +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 + + +nurbs_curve%cmp_degree proc~cmp_degree->proc~get_multiplicity - - + + proc~cmp_degree~2 - - -nurbs_surface%cmp_degree + + +nurbs_volume%cmp_degree proc~cmp_degree~2->proc~get_multiplicity~2 - - + + proc~cmp_degree~3 - - -nurbs_curve%cmp_degree + + +nurbs_surface%cmp_degree proc~cmp_degree~3->proc~get_multiplicity~3 - - + + proc~cmp_elem - - -nurbs_volume%cmp_elem + + +nurbs_curve%cmp_elem proc~cmp_elem->proc~get_multiplicity - - + + proc~cmp_elem~2 - - -nurbs_surface%cmp_elem + + +nurbs_volume%cmp_elem proc~cmp_elem~2->proc~get_multiplicity~2 - - + + proc~cmp_elem~3 - - -nurbs_curve%cmp_elem + + +nurbs_surface%cmp_elem proc~cmp_elem~3->proc~get_multiplicity~3 - - + + proc~elevate_degree - - -nurbs_volume%elevate_degree + + +nurbs_curve%elevate_degree proc~elevate_degree->proc~elevate_degree_a_5_9 - - + + - + proc~elevate_degree->none~set - - + + proc~elevate_degree~2 - - -nurbs_surface%elevate_degree + + +nurbs_volume%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 + + +nurbs_surface%elevate_degree proc~elevate_degree~3->proc~elevate_degree_a_5_9 - - + + - + proc~elevate_degree~3->none~set~3 - - + + - + -proc~set1 - +proc~set1~2 + nurbs_volume%set1 - + -proc~set1->proc~cmp_nc - - +proc~set1~2->proc~cmp_nc~2 + + - - -proc~set1->proc~cmp_degree - - + + +proc~set1~2->proc~cmp_degree~2 + + - + -proc~set1~2 - - -nurbs_surface%set1 +proc~set1~3 + + +nurbs_surface%set1 - + -proc~set1~2->proc~cmp_nc~2 - - +proc~set1~3->proc~cmp_nc~3 + + - - -proc~set1~2->proc~cmp_degree~2 - - + + +proc~set1~3->proc~cmp_degree~3 + + - + -proc~set2 - +proc~set2~2 + nurbs_volume%set2 - + -proc~set2->proc~cmp_nc - - +proc~set2~2->proc~cmp_nc~2 + + - + -proc~set2~2 - - -nurbs_surface%set2 +proc~set2~3 + + +nurbs_surface%set2 - + -proc~set2~2->proc~cmp_nc~2 - - +proc~set2~3->proc~cmp_nc~3 + + @@ -784,27 +784,27 @@

                          Called by

                          - - -program~example1_curve->proc~insert_knots~3 - - + + +program~example1_curve->proc~insert_knots + + - - -program~example1_curve->proc~remove_knots~3 - - + + +program~example1_curve->proc~remove_knots + + - - -program~example1_curve->proc~elevate_degree~3 - - + + +program~example1_curve->proc~elevate_degree + + - + -program~example1_curve->none~set~3 +program~example1_curve->none~set @@ -817,27 +817,27 @@

                          Called by

                          - - -program~example3_surface->proc~insert_knots~2 - - + + +program~example3_surface->proc~insert_knots~3 + + - - -program~example3_surface->proc~remove_knots~2 - - + + +program~example3_surface->proc~remove_knots~3 + + - - -program~example3_surface->proc~elevate_degree~2 - - + + +program~example3_surface->proc~elevate_degree~3 + + - + -program~example3_surface->none~set~2 +program~example3_surface->none~set~3 @@ -850,152 +850,152 @@

                          Called by

                          - - -program~example3_volume->proc~insert_knots - - + + +program~example3_volume->proc~insert_knots~2 + + - - -program~example3_volume->proc~remove_knots - - + + +program~example3_volume->proc~remove_knots~2 + + - - -program~example3_volume->proc~cmp_elem - - + + +program~example3_volume->proc~cmp_elem~2 + + - - -program~example3_volume->proc~elevate_degree - - + + +program~example3_volume->proc~elevate_degree~2 + + - + -program~example3_volume->none~set +program~example3_volume->none~set~2 - + -none~set->proc~set1 +none~set~2->proc~set1~2 - + -none~set->proc~set2 +none~set~2->proc~set2~2 - - -proc~set3 - + + +proc~set3~2 + nurbs_volume%set3 - - -none~set->proc~set3 - - + + +none~set~2->proc~set3~2 + + - + -none~set~2->proc~set1~2 - - +none~set~3->proc~set1~3 + + - + -none~set~2->proc~set2~2 - - +none~set~3->proc~set2~3 + + - - -proc~set3~2 - - -nurbs_surface%set3 + + +proc~set3~3 + + +nurbs_surface%set3 - - -none~set~2->proc~set3~2 - - + + +none~set~3->proc~set3~3 + + proc~ansatz - - -nurbs_volume%ansatz + + +nurbs_curve%ansatz proc~ansatz->proc~cmp_elem - - + + - + proc~ansatz->none~set - - + + proc~ansatz~2 - - -nurbs_surface%ansatz + + +nurbs_volume%ansatz - + proc~ansatz~2->proc~cmp_elem~2 - - + + - + proc~ansatz~2->none~set~2 - - + + proc~ansatz~3 - - -nurbs_curve%ansatz + + +nurbs_surface%ansatz proc~ansatz~3->proc~cmp_elem~3 - - + + - + proc~ansatz~3->none~set~3 - - + + @@ -1006,17 +1006,17 @@

                          Called by

                          - - -proc~cmp_area->proc~cmp_elem~2 - - + + +proc~cmp_area->proc~cmp_elem~3 + + - - -proc~cmp_area->proc~ansatz~2 - - + + +proc~cmp_area->proc~ansatz~3 + + @@ -1027,17 +1027,17 @@

                          Called by

                          - - -proc~cmp_length->proc~cmp_elem~3 - - + + +proc~cmp_length->proc~cmp_elem + + - - -proc~cmp_length->proc~ansatz~3 - - + + +proc~cmp_length->proc~ansatz + + @@ -1048,180 +1048,180 @@

                          Called by

                          - - -proc~cmp_volume->proc~cmp_elem - - + + +proc~cmp_volume->proc~cmp_elem~2 + + - - -proc~cmp_volume->proc~ansatz - - + + +proc~cmp_volume->proc~ansatz~2 + + - + +proc~set1 + + +nurbs_curve%set1 + + + + + +proc~set1->proc~cmp_degree + + + + + proc~set1a - + nurbs_curve%set1a - - -proc~set1a->proc~cmp_degree~3 - - + + +proc~set1a->proc~cmp_degree + + - - -proc~set1~3 - + + +proc~set3 + -nurbs_curve%set1 +nurbs_curve%set3 - - -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~set1a - - +none~set->proc~set1 + + - + -none~set~3->proc~set1~3 - - +none~set->proc~set1a + + - - -none~set~3->proc~set3~3 - - + + +none~set->proc~set3 + + - + -proc~modify_wc - +proc~modify_wc~2 + nurbs_volume%modify_Wc - + -proc~modify_wc->none~set +proc~modify_wc~2->none~set~2 - + -proc~modify_wc~2 - +proc~modify_wc~3 + nurbs_surface%modify_Wc - + -proc~modify_wc~2->none~set~2 - - +proc~modify_wc~3->none~set~3 + + - + -proc~modify_xc - +proc~modify_xc~2 + nurbs_volume%modify_Xc - + -proc~modify_xc->none~set +proc~modify_xc~2->none~set~2 - + -proc~modify_xc~2 - +proc~modify_xc~3 + nurbs_surface%modify_Xc - + -proc~modify_xc~2->none~set~2 - - +proc~modify_xc~3->none~set~3 + + - + -proc~set_c - +proc~set_c~2 + nurbs_volume%set_C - + -proc~set_c->none~set +proc~set_c~2->none~set~2 - + -proc~set_c~2 - +proc~set_c~3 + nurbs_surface%set_C - + -proc~set_c~2->none~set~2 +proc~set_c~3->none~set~3 @@ -1234,9 +1234,9 @@

                          Called by

                          - + -proc~set_half_ring->none~set +proc~set_half_ring->none~set~2 @@ -1249,9 +1249,9 @@

                          Called by

                          - + -proc~set_half_ring~2->none~set~2 +proc~set_half_ring~2->none~set~3 @@ -1264,9 +1264,9 @@

                          Called by

                          - + -proc~set_hexahedron->none~set +proc~set_hexahedron->none~set~2 @@ -1279,9 +1279,9 @@

                          Called by

                          - + -proc~set_ring->none~set +proc~set_ring->none~set~2 @@ -1294,11 +1294,11 @@

                          Called by

                          - + -proc~set_ring~2->none~set~2 - - +proc~set_ring~2->none~set~3 + + @@ -1309,11 +1309,11 @@

                          Called by

                          - + -proc~set_tetragon->none~set~2 - - +proc~set_tetragon->none~set~3 + + @@ -1324,9 +1324,9 @@

                          Called by

                          - + -program~compute_area->none~set~2 +program~compute_area->none~set~3 @@ -1340,22 +1340,22 @@

                          Called by

                          program~compute_length - -compute_length + +compute_length program~compute_length->proc~cmp_length - - + + - + -program~compute_length->none~set~3 - - +program~compute_length->none~set + + @@ -1366,9 +1366,9 @@

                          Called by

                          - + -program~compute_volume->none~set +program~compute_volume->none~set~2 @@ -1387,9 +1387,9 @@

                          Called by

                          - + -program~example_nurbs_surface->none~set~2 +program~example_nurbs_surface->none~set~3 @@ -1402,9 +1402,9 @@

                          Called by

                          - + -program~example_nurbs_volume->none~set +program~example_nurbs_volume->none~set~2 @@ -1417,9 +1417,9 @@

                          Called by

                          - + -program~example_put_to_nurbs->none~set +program~example_put_to_nurbs->none~set~2 @@ -1432,11 +1432,11 @@

                          Called by

                          - + -program~nearest_point_2d->none~set~2 - - +program~nearest_point_2d->none~set~3 + + @@ -1447,101 +1447,101 @@

                          Called by

                          - + -program~nearest_point_3d->none~set +program~nearest_point_3d->none~set~2 - + -proc~modify_wc~3 - +proc~modify_wc + nurbs_curve%modify_Wc - + -proc~modify_wc~3->none~set~3 +proc~modify_wc->none~set - + -proc~modify_xc~3 - +proc~modify_xc + nurbs_curve%modify_Xc - + -proc~modify_xc~3->none~set~3 +proc~modify_xc->none~set - + -proc~set_circle - - -nurbs_curve%set_circle +proc~set_c + + +nurbs_curve%set_C - + -proc~set_circle->none~set~3 - - +proc~set_c->none~set + + - + -proc~set_c~3 - - -nurbs_curve%set_C +proc~set_circle + + +nurbs_curve%set_circle - + -proc~set_c~3->none~set~3 - +proc~set_circle->none~set + proc~set_half_circle - -nurbs_curve%set_half_circle + +nurbs_curve%set_half_circle - + -proc~set_half_circle->none~set~3 - - +proc~set_half_circle->none~set + + program~example_nurbs_curve - -example_nurbs_curve + +example_nurbs_curve - + -program~example_nurbs_curve->none~set~3 - - +program~example_nurbs_curve->none~set + + @@ -1594,9 +1594,9 @@

                          Called by

                          - + -program~example_ppm3->proc~modify_xc~2 +program~example_ppm3->proc~modify_xc~3 @@ -1610,16 +1610,16 @@

                          Called by

                          program~nearest_point_1d - -nearest_point_1d + +nearest_point_1d - + -program~nearest_point_1d->none~set~3 - - +program~nearest_point_1d->none~set + + @@ -1645,9 +1645,9 @@

                          Called by

                          - + -program~shape_c_2d->proc~set_c~2 +program~shape_c_2d->proc~set_c~3 @@ -1660,9 +1660,9 @@

                          Called by

                          - + -program~shape_c_3d->proc~set_c +program~shape_c_3d->proc~set_c~2 @@ -1760,46 +1760,46 @@

                          Called by

                          program~shape_c_1d - -shape_C_1d + +shape_C_1d - - -program~shape_c_1d->proc~set_c~3 - - + + +program~shape_c_1d->proc~set_c + + 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 - - + + @@ -1919,7 +1919,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/compute_multiplicity2.html b/proc/compute_multiplicity2.html index 5ca8ce1ce..888ea55a8 100644 --- a/proc/compute_multiplicity2.html +++ b/proc/compute_multiplicity2.html @@ -156,7 +156,7 @@

                          Arguments

                          @@ -214,581 +214,581 @@

                          Called by

                          proc~compute_multiplicity2 - -compute_multiplicity2 + +compute_multiplicity2 interface~compute_multiplicity - -compute_multiplicity + +compute_multiplicity interface~compute_multiplicity->proc~compute_multiplicity2 - - + + proc~cmp_nc - - -nurbs_volume%cmp_nc + + +nurbs_curve%cmp_nc proc~cmp_nc->interface~compute_multiplicity - - + + proc~cmp_nc~2 - - -nurbs_surface%cmp_nc + + +nurbs_volume%cmp_nc proc~cmp_nc~2->interface~compute_multiplicity - - + + proc~cmp_nc~3 - - -nurbs_curve%cmp_nc + + +nurbs_surface%cmp_nc proc~cmp_nc~3->interface~compute_multiplicity - - + + proc~elevate_degree_a_5_9 - -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 + + +nurbs_curve%get_continuity proc~get_continuity->interface~compute_multiplicity - - + + proc~get_continuity~2 - - -nurbs_surface%get_continuity + + +nurbs_volume%get_continuity proc~get_continuity~2->interface~compute_multiplicity - - + + proc~get_continuity~3 - - -nurbs_curve%get_continuity + + +nurbs_surface%get_continuity proc~get_continuity~3->interface~compute_multiplicity - - + + proc~get_multiplicity - - -nurbs_volume%get_multiplicity + + +nurbs_curve%get_multiplicity proc~get_multiplicity->interface~compute_multiplicity - - + + proc~get_multiplicity~2 - - -nurbs_surface%get_multiplicity + + +nurbs_volume%get_multiplicity proc~get_multiplicity~2->interface~compute_multiplicity - - + + proc~get_multiplicity~3 - - -nurbs_curve%get_multiplicity + + +nurbs_surface%get_multiplicity proc~get_multiplicity~3->interface~compute_multiplicity - - + + proc~get_nc_dir - -nurbs_volume%get_nc_dir + +nurbs_volume%get_nc_dir proc~get_nc_dir->interface~compute_multiplicity - - + + proc~get_nc_dir~2 - -nurbs_surface%get_nc_dir + +nurbs_surface%get_nc_dir proc~get_nc_dir~2->interface~compute_multiplicity - - + + proc~insert_knots - - -nurbs_volume%insert_knots + + +nurbs_curve%insert_knots proc~insert_knots->interface~compute_multiplicity - - + + - + none~set - - -nurbs_volume%set + + +nurbs_curve%set - + proc~insert_knots->none~set - - + + proc~insert_knots~2 - - -nurbs_surface%insert_knots + + +nurbs_volume%insert_knots proc~insert_knots~2->interface~compute_multiplicity - - + + - + none~set~2 - - -nurbs_surface%set + + +nurbs_volume%set - + proc~insert_knots~2->none~set~2 - - + + proc~insert_knots~3 - - -nurbs_curve%insert_knots + + +nurbs_surface%insert_knots proc~insert_knots~3->interface~compute_multiplicity - - + + - + none~set~3 - - -nurbs_curve%set + + +nurbs_surface%set - + proc~insert_knots~3->none~set~3 - - + + proc~remove_knots - - -nurbs_volume%remove_knots + + +nurbs_curve%remove_knots proc~remove_knots->interface~compute_multiplicity - - + + - + proc~remove_knots->none~set - - + + proc~remove_knots~2 - - -nurbs_surface%remove_knots + + +nurbs_volume%remove_knots proc~remove_knots~2->interface~compute_multiplicity - - + + - + proc~remove_knots~2->none~set~2 - - + + proc~remove_knots~3 - - -nurbs_curve%remove_knots + + +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 + + +nurbs_curve%cmp_degree proc~cmp_degree->proc~get_multiplicity - - + + proc~cmp_degree~2 - - -nurbs_surface%cmp_degree + + +nurbs_volume%cmp_degree proc~cmp_degree~2->proc~get_multiplicity~2 - - + + proc~cmp_degree~3 - - -nurbs_curve%cmp_degree + + +nurbs_surface%cmp_degree proc~cmp_degree~3->proc~get_multiplicity~3 - - + + proc~cmp_elem - - -nurbs_volume%cmp_elem + + +nurbs_curve%cmp_elem proc~cmp_elem->proc~get_multiplicity - - + + proc~cmp_elem~2 - - -nurbs_surface%cmp_elem + + +nurbs_volume%cmp_elem proc~cmp_elem~2->proc~get_multiplicity~2 - - + + proc~cmp_elem~3 - - -nurbs_curve%cmp_elem + + +nurbs_surface%cmp_elem proc~cmp_elem~3->proc~get_multiplicity~3 - - + + proc~elevate_degree - - -nurbs_volume%elevate_degree + + +nurbs_curve%elevate_degree proc~elevate_degree->proc~elevate_degree_a_5_9 - - + + - + proc~elevate_degree->none~set - - + + proc~elevate_degree~2 - - -nurbs_surface%elevate_degree + + +nurbs_volume%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 + + +nurbs_surface%elevate_degree proc~elevate_degree~3->proc~elevate_degree_a_5_9 - - + + - + proc~elevate_degree~3->none~set~3 - - + + - + -proc~set1 - +proc~set1~2 + nurbs_volume%set1 - + -proc~set1->proc~cmp_nc - - +proc~set1~2->proc~cmp_nc~2 + + - - -proc~set1->proc~cmp_degree - - + + +proc~set1~2->proc~cmp_degree~2 + + - + -proc~set1~2 - - -nurbs_surface%set1 +proc~set1~3 + + +nurbs_surface%set1 - + -proc~set1~2->proc~cmp_nc~2 - - +proc~set1~3->proc~cmp_nc~3 + + - - -proc~set1~2->proc~cmp_degree~2 - - + + +proc~set1~3->proc~cmp_degree~3 + + - + -proc~set2 - +proc~set2~2 + nurbs_volume%set2 - + -proc~set2->proc~cmp_nc - - +proc~set2~2->proc~cmp_nc~2 + + - + -proc~set2~2 - - -nurbs_surface%set2 +proc~set2~3 + + +nurbs_surface%set2 - + -proc~set2~2->proc~cmp_nc~2 - - +proc~set2~3->proc~cmp_nc~3 + + @@ -799,27 +799,27 @@

                          Called by

                          - - -program~example1_curve->proc~insert_knots~3 - - + + +program~example1_curve->proc~insert_knots + + - - -program~example1_curve->proc~remove_knots~3 - - + + +program~example1_curve->proc~remove_knots + + - - -program~example1_curve->proc~elevate_degree~3 - - + + +program~example1_curve->proc~elevate_degree + + - + -program~example1_curve->none~set~3 +program~example1_curve->none~set @@ -832,27 +832,27 @@

                          Called by

                          - - -program~example3_surface->proc~insert_knots~2 - - + + +program~example3_surface->proc~insert_knots~3 + + - - -program~example3_surface->proc~remove_knots~2 - - + + +program~example3_surface->proc~remove_knots~3 + + - - -program~example3_surface->proc~elevate_degree~2 - - + + +program~example3_surface->proc~elevate_degree~3 + + - + -program~example3_surface->none~set~2 +program~example3_surface->none~set~3 @@ -865,152 +865,152 @@

                          Called by

                          - - -program~example3_volume->proc~insert_knots - - + + +program~example3_volume->proc~insert_knots~2 + + - - -program~example3_volume->proc~remove_knots - - + + +program~example3_volume->proc~remove_knots~2 + + - - -program~example3_volume->proc~cmp_elem - - + + +program~example3_volume->proc~cmp_elem~2 + + - - -program~example3_volume->proc~elevate_degree - - + + +program~example3_volume->proc~elevate_degree~2 + + - + -program~example3_volume->none~set +program~example3_volume->none~set~2 - + -none~set->proc~set1 +none~set~2->proc~set1~2 - + -none~set->proc~set2 +none~set~2->proc~set2~2 - - -proc~set3 - + + +proc~set3~2 + nurbs_volume%set3 - - -none~set->proc~set3 - - + + +none~set~2->proc~set3~2 + + - + -none~set~2->proc~set1~2 - - +none~set~3->proc~set1~3 + + - + -none~set~2->proc~set2~2 - - +none~set~3->proc~set2~3 + + - - -proc~set3~2 - - -nurbs_surface%set3 + + +proc~set3~3 + + +nurbs_surface%set3 - - -none~set~2->proc~set3~2 - - + + +none~set~3->proc~set3~3 + + proc~ansatz - - -nurbs_volume%ansatz + + +nurbs_curve%ansatz proc~ansatz->proc~cmp_elem - - + + - + proc~ansatz->none~set - - + + proc~ansatz~2 - - -nurbs_surface%ansatz + + +nurbs_volume%ansatz - + proc~ansatz~2->proc~cmp_elem~2 - - + + - + proc~ansatz~2->none~set~2 - - + + proc~ansatz~3 - - -nurbs_curve%ansatz + + +nurbs_surface%ansatz proc~ansatz~3->proc~cmp_elem~3 - - + + - + proc~ansatz~3->none~set~3 - - + + @@ -1021,17 +1021,17 @@

                          Called by

                          - - -proc~cmp_area->proc~cmp_elem~2 - - + + +proc~cmp_area->proc~cmp_elem~3 + + - - -proc~cmp_area->proc~ansatz~2 - - + + +proc~cmp_area->proc~ansatz~3 + + @@ -1042,17 +1042,17 @@

                          Called by

                          - - -proc~cmp_length->proc~cmp_elem~3 - - + + +proc~cmp_length->proc~cmp_elem + + - - -proc~cmp_length->proc~ansatz~3 - - + + +proc~cmp_length->proc~ansatz + + @@ -1063,180 +1063,180 @@

                          Called by

                          - - -proc~cmp_volume->proc~cmp_elem - - + + +proc~cmp_volume->proc~cmp_elem~2 + + - - -proc~cmp_volume->proc~ansatz - - + + +proc~cmp_volume->proc~ansatz~2 + + - + +proc~set1 + + +nurbs_curve%set1 + + + + + +proc~set1->proc~cmp_degree + + + + + proc~set1a - + nurbs_curve%set1a - - -proc~set1a->proc~cmp_degree~3 - - + + +proc~set1a->proc~cmp_degree + + - - -proc~set1~3 - + + +proc~set3 + -nurbs_curve%set1 +nurbs_curve%set3 - - -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~set1a - - +none~set->proc~set1 + + - + -none~set~3->proc~set1~3 - - +none~set->proc~set1a + + - - -none~set~3->proc~set3~3 - - + + +none~set->proc~set3 + + - + -proc~modify_wc - +proc~modify_wc~2 + nurbs_volume%modify_Wc - + -proc~modify_wc->none~set +proc~modify_wc~2->none~set~2 - + -proc~modify_wc~2 - +proc~modify_wc~3 + nurbs_surface%modify_Wc - + -proc~modify_wc~2->none~set~2 - - +proc~modify_wc~3->none~set~3 + + - + -proc~modify_xc - +proc~modify_xc~2 + nurbs_volume%modify_Xc - + -proc~modify_xc->none~set +proc~modify_xc~2->none~set~2 - + -proc~modify_xc~2 - +proc~modify_xc~3 + nurbs_surface%modify_Xc - + -proc~modify_xc~2->none~set~2 - - +proc~modify_xc~3->none~set~3 + + - + -proc~set_c - +proc~set_c~2 + nurbs_volume%set_C - + -proc~set_c->none~set +proc~set_c~2->none~set~2 - + -proc~set_c~2 - +proc~set_c~3 + nurbs_surface%set_C - + -proc~set_c~2->none~set~2 +proc~set_c~3->none~set~3 @@ -1249,9 +1249,9 @@

                          Called by

                          - + -proc~set_half_ring->none~set +proc~set_half_ring->none~set~2 @@ -1264,9 +1264,9 @@

                          Called by

                          - + -proc~set_half_ring~2->none~set~2 +proc~set_half_ring~2->none~set~3 @@ -1279,9 +1279,9 @@

                          Called by

                          - + -proc~set_hexahedron->none~set +proc~set_hexahedron->none~set~2 @@ -1294,9 +1294,9 @@

                          Called by

                          - + -proc~set_ring->none~set +proc~set_ring->none~set~2 @@ -1309,11 +1309,11 @@

                          Called by

                          - + -proc~set_ring~2->none~set~2 - - +proc~set_ring~2->none~set~3 + + @@ -1324,11 +1324,11 @@

                          Called by

                          - + -proc~set_tetragon->none~set~2 - - +proc~set_tetragon->none~set~3 + + @@ -1339,9 +1339,9 @@

                          Called by

                          - + -program~compute_area->none~set~2 +program~compute_area->none~set~3 @@ -1355,22 +1355,22 @@

                          Called by

                          program~compute_length - -compute_length + +compute_length program~compute_length->proc~cmp_length - - + + - + -program~compute_length->none~set~3 - - +program~compute_length->none~set + + @@ -1381,9 +1381,9 @@

                          Called by

                          - + -program~compute_volume->none~set +program~compute_volume->none~set~2 @@ -1402,9 +1402,9 @@

                          Called by

                          - + -program~example_nurbs_surface->none~set~2 +program~example_nurbs_surface->none~set~3 @@ -1417,9 +1417,9 @@

                          Called by

                          - + -program~example_nurbs_volume->none~set +program~example_nurbs_volume->none~set~2 @@ -1432,9 +1432,9 @@

                          Called by

                          - + -program~example_put_to_nurbs->none~set +program~example_put_to_nurbs->none~set~2 @@ -1447,11 +1447,11 @@

                          Called by

                          - + -program~nearest_point_2d->none~set~2 - - +program~nearest_point_2d->none~set~3 + + @@ -1462,101 +1462,101 @@

                          Called by

                          - + -program~nearest_point_3d->none~set +program~nearest_point_3d->none~set~2 - + -proc~modify_wc~3 - +proc~modify_wc + nurbs_curve%modify_Wc - + -proc~modify_wc~3->none~set~3 +proc~modify_wc->none~set - + -proc~modify_xc~3 - +proc~modify_xc + nurbs_curve%modify_Xc - + -proc~modify_xc~3->none~set~3 +proc~modify_xc->none~set - + -proc~set_circle - - -nurbs_curve%set_circle +proc~set_c + + +nurbs_curve%set_C - + -proc~set_circle->none~set~3 - - +proc~set_c->none~set + + - + -proc~set_c~3 - - -nurbs_curve%set_C +proc~set_circle + + +nurbs_curve%set_circle - + -proc~set_c~3->none~set~3 - +proc~set_circle->none~set + proc~set_half_circle - -nurbs_curve%set_half_circle + +nurbs_curve%set_half_circle - + -proc~set_half_circle->none~set~3 - - +proc~set_half_circle->none~set + + program~example_nurbs_curve - -example_nurbs_curve + +example_nurbs_curve - + -program~example_nurbs_curve->none~set~3 - - +program~example_nurbs_curve->none~set + + @@ -1609,9 +1609,9 @@

                          Called by

                          - + -program~example_ppm3->proc~modify_xc~2 +program~example_ppm3->proc~modify_xc~3 @@ -1625,16 +1625,16 @@

                          Called by

                          program~nearest_point_1d - -nearest_point_1d + +nearest_point_1d - + -program~nearest_point_1d->none~set~3 - - +program~nearest_point_1d->none~set + + @@ -1660,9 +1660,9 @@

                          Called by

                          - + -program~shape_c_2d->proc~set_c~2 +program~shape_c_2d->proc~set_c~3 @@ -1675,9 +1675,9 @@

                          Called by

                          - + -program~shape_c_3d->proc~set_c +program~shape_c_3d->proc~set_c~2 @@ -1775,46 +1775,46 @@

                          Called by

                          program~shape_c_1d - -shape_C_1d + +shape_C_1d - - -program~shape_c_1d->proc~set_c~3 - - + + +program~shape_c_1d->proc~set_c + + 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 - - + + @@ -1934,7 +1934,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/compute_tgc_bspline_1d_scalar.html b/proc/compute_tgc_bspline_1d_scalar.html index ec7296684..0aff2a4e8 100644 --- a/proc/compute_tgc_bspline_1d_scalar.html +++ b/proc/compute_tgc_bspline_1d_scalar.html @@ -287,7 +287,7 @@

                          Arguments

                          @@ -302,7 +302,7 @@

                          Arguments

                          @@ -317,7 +317,7 @@

                          Arguments

                          @@ -332,7 +332,7 @@

                          Arguments

                          @@ -350,7 +350,7 @@

                          Arguments

                          Return Value - + real(kind=rk), allocatable, (:)

                          @@ -507,7 +507,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/compute_tgc_bspline_1d_vector.html b/proc/compute_tgc_bspline_1d_vector.html index 5078985f3..d4d1d621e 100644 --- a/proc/compute_tgc_bspline_1d_vector.html +++ b/proc/compute_tgc_bspline_1d_vector.html @@ -287,7 +287,7 @@

                          Arguments

                          @@ -302,7 +302,7 @@

                          Arguments

                          @@ -317,7 +317,7 @@

                          Arguments

                          @@ -332,7 +332,7 @@

                          Arguments

                          @@ -347,7 +347,7 @@

                          Arguments

                          @@ -365,7 +365,7 @@

                          Arguments

                          Return Value - + real(kind=rk), allocatable, (:,:)

                          @@ -522,7 +522,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/compute_tgc_bspline_2d_scalar.html b/proc/compute_tgc_bspline_2d_scalar.html index 4751a11b2..3c40653ab 100644 --- a/proc/compute_tgc_bspline_2d_scalar.html +++ b/proc/compute_tgc_bspline_2d_scalar.html @@ -287,7 +287,7 @@

                          Arguments

                          @@ -302,7 +302,7 @@

                          Arguments

                          @@ -317,7 +317,7 @@

                          Arguments

                          @@ -332,7 +332,7 @@

                          Arguments

                          @@ -347,7 +347,7 @@

                          Arguments

                          @@ -365,7 +365,7 @@

                          Arguments

                          Return Value - + real(kind=rk), allocatable, (:)

                          @@ -537,7 +537,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/compute_tgc_bspline_2d_vector.html b/proc/compute_tgc_bspline_2d_vector.html index 10296f7b7..94ae23167 100644 --- a/proc/compute_tgc_bspline_2d_vector.html +++ b/proc/compute_tgc_bspline_2d_vector.html @@ -287,7 +287,7 @@

                          Arguments

                          @@ -302,7 +302,7 @@

                          Arguments

                          @@ -317,7 +317,7 @@

                          Arguments

                          @@ -332,7 +332,7 @@

                          Arguments

                          @@ -347,7 +347,7 @@

                          Arguments

                          @@ -362,7 +362,7 @@

                          Arguments

                          @@ -380,7 +380,7 @@

                          Arguments

                          Return Value - + real(kind=rk), allocatable, (:,:)

                          @@ -552,7 +552,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/compute_tgc_bspline_3d_scalar.html b/proc/compute_tgc_bspline_3d_scalar.html index 1a1c8ed39..ec659f4e5 100644 --- a/proc/compute_tgc_bspline_3d_scalar.html +++ b/proc/compute_tgc_bspline_3d_scalar.html @@ -287,7 +287,7 @@

                          Arguments

                          @@ -302,7 +302,7 @@

                          Arguments

                          @@ -317,7 +317,7 @@

                          Arguments

                          @@ -332,7 +332,7 @@

                          Arguments

                          @@ -347,7 +347,7 @@

                          Arguments

                          @@ -362,7 +362,7 @@

                          Arguments

                          @@ -380,7 +380,7 @@

                          Arguments

                          Return Value - + real(kind=rk), allocatable, (:)

                          @@ -552,7 +552,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/compute_tgc_bspline_3d_vector.html b/proc/compute_tgc_bspline_3d_vector.html index 7ac4c855a..3ce8b842f 100644 --- a/proc/compute_tgc_bspline_3d_vector.html +++ b/proc/compute_tgc_bspline_3d_vector.html @@ -287,7 +287,7 @@

                          Arguments

                          @@ -302,7 +302,7 @@

                          Arguments

                          @@ -317,7 +317,7 @@

                          Arguments

                          @@ -332,7 +332,7 @@

                          Arguments

                          @@ -347,7 +347,7 @@

                          Arguments

                          @@ -362,7 +362,7 @@

                          Arguments

                          @@ -377,7 +377,7 @@

                          Arguments

                          @@ -395,7 +395,7 @@

                          Arguments

                          Return Value - + real(kind=rk), allocatable, (:,:)

                          @@ -567,7 +567,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/compute_tgc_nurbs_1d_scalar.html b/proc/compute_tgc_nurbs_1d_scalar.html index 7a18dc865..f79b97f80 100644 --- a/proc/compute_tgc_nurbs_1d_scalar.html +++ b/proc/compute_tgc_nurbs_1d_scalar.html @@ -287,7 +287,7 @@

                          Arguments

                          @@ -302,7 +302,7 @@

                          Arguments

                          @@ -317,7 +317,7 @@

                          Arguments

                          @@ -332,7 +332,7 @@

                          Arguments

                          @@ -347,7 +347,7 @@

                          Arguments

                          @@ -365,7 +365,7 @@

                          Arguments

                          Return Value - + real(kind=rk), allocatable, (:)

                          @@ -522,7 +522,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/compute_tgc_nurbs_1d_vector.html b/proc/compute_tgc_nurbs_1d_vector.html index c06209030..88fb5dae2 100644 --- a/proc/compute_tgc_nurbs_1d_vector.html +++ b/proc/compute_tgc_nurbs_1d_vector.html @@ -287,7 +287,7 @@

                          Arguments

                          @@ -302,7 +302,7 @@

                          Arguments

                          @@ -317,7 +317,7 @@

                          Arguments

                          @@ -332,7 +332,7 @@

                          Arguments

                          @@ -347,7 +347,7 @@

                          Arguments

                          @@ -362,7 +362,7 @@

                          Arguments

                          @@ -380,7 +380,7 @@

                          Arguments

                          Return Value - + real(kind=rk), allocatable, (:,:)

                          @@ -537,7 +537,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/compute_tgc_nurbs_2d_scalar.html b/proc/compute_tgc_nurbs_2d_scalar.html index e109aac4e..8f57846be 100644 --- a/proc/compute_tgc_nurbs_2d_scalar.html +++ b/proc/compute_tgc_nurbs_2d_scalar.html @@ -287,7 +287,7 @@

                          Arguments

                          @@ -302,7 +302,7 @@

                          Arguments

                          @@ -317,7 +317,7 @@

                          Arguments

                          @@ -332,7 +332,7 @@

                          Arguments

                          @@ -347,7 +347,7 @@

                          Arguments

                          @@ -362,7 +362,7 @@

                          Arguments

                          @@ -380,7 +380,7 @@

                          Arguments

                          Return Value - + real(kind=rk), allocatable, (:)

                          @@ -552,7 +552,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/compute_tgc_nurbs_2d_vector.html b/proc/compute_tgc_nurbs_2d_vector.html index f34e95e22..035eb3807 100644 --- a/proc/compute_tgc_nurbs_2d_vector.html +++ b/proc/compute_tgc_nurbs_2d_vector.html @@ -287,7 +287,7 @@

                          Arguments

                          @@ -302,7 +302,7 @@

                          Arguments

                          @@ -317,7 +317,7 @@

                          Arguments

                          @@ -332,7 +332,7 @@

                          Arguments

                          @@ -347,7 +347,7 @@

                          Arguments

                          @@ -362,7 +362,7 @@

                          Arguments

                          @@ -377,7 +377,7 @@

                          Arguments

                          @@ -395,7 +395,7 @@

                          Arguments

                          Return Value - + real(kind=rk), allocatable, (:,:)

                          @@ -567,7 +567,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/compute_tgc_nurbs_3d_scalar.html b/proc/compute_tgc_nurbs_3d_scalar.html index e22ecae64..5bbdfd46b 100644 --- a/proc/compute_tgc_nurbs_3d_scalar.html +++ b/proc/compute_tgc_nurbs_3d_scalar.html @@ -287,7 +287,7 @@

                          Arguments

                          @@ -302,7 +302,7 @@

                          Arguments

                          @@ -317,7 +317,7 @@

                          Arguments

                          @@ -332,7 +332,7 @@

                          Arguments

                          @@ -347,7 +347,7 @@

                          Arguments

                          @@ -362,7 +362,7 @@

                          Arguments

                          @@ -377,7 +377,7 @@

                          Arguments

                          @@ -395,7 +395,7 @@

                          Arguments

                          Return Value - + real(kind=rk), allocatable, (:)

                          @@ -567,7 +567,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/compute_tgc_nurbs_3d_vector.html b/proc/compute_tgc_nurbs_3d_vector.html index f6fb671bc..8e9834d24 100644 --- a/proc/compute_tgc_nurbs_3d_vector.html +++ b/proc/compute_tgc_nurbs_3d_vector.html @@ -287,7 +287,7 @@

                          Arguments

                          @@ -302,7 +302,7 @@

                          Arguments

                          @@ -317,7 +317,7 @@

                          Arguments

                          @@ -332,7 +332,7 @@

                          Arguments

                          @@ -347,7 +347,7 @@

                          Arguments

                          @@ -362,7 +362,7 @@

                          Arguments

                          @@ -377,7 +377,7 @@

                          Arguments

                          @@ -392,7 +392,7 @@

                          Arguments

                          @@ -410,7 +410,7 @@

                          Arguments

                          Return Value - + real(kind=rk), allocatable, (:,:)

                          @@ -582,7 +582,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/compute_xg_bspline_1d.html b/proc/compute_xg_bspline_1d.html index 44893a78a..6c370f42a 100644 --- a/proc/compute_xg_bspline_1d.html +++ b/proc/compute_xg_bspline_1d.html @@ -287,7 +287,7 @@

                          Arguments

                          @@ -302,7 +302,7 @@

                          Arguments

                          @@ -317,7 +317,7 @@

                          Arguments

                          @@ -332,7 +332,7 @@

                          Arguments

                          @@ -347,7 +347,7 @@

                          Arguments

                          @@ -362,7 +362,7 @@

                          Arguments

                          @@ -380,7 +380,7 @@

                          Arguments

                          Return Value - + real(kind=rk), allocatable, (:,:)

                          @@ -537,7 +537,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/compute_xg_bspline_1d_1point.html b/proc/compute_xg_bspline_1d_1point.html index 9b87f62d3..afd4ec6d1 100644 --- a/proc/compute_xg_bspline_1d_1point.html +++ b/proc/compute_xg_bspline_1d_1point.html @@ -287,7 +287,7 @@

                          Arguments

                          @@ -302,7 +302,7 @@

                          Arguments

                          @@ -317,7 +317,7 @@

                          Arguments

                          @@ -332,7 +332,7 @@

                          Arguments

                          @@ -347,7 +347,7 @@

                          Arguments

                          @@ -365,7 +365,7 @@

                          Arguments

                          Return Value - + real(kind=rk), allocatable, (:)

                          @@ -522,7 +522,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/compute_xg_bspline_2d.html b/proc/compute_xg_bspline_2d.html index 72f529a80..5de8c1365 100644 --- a/proc/compute_xg_bspline_2d.html +++ b/proc/compute_xg_bspline_2d.html @@ -287,7 +287,7 @@

                          Arguments

                          @@ -302,7 +302,7 @@

                          Arguments

                          @@ -317,7 +317,7 @@

                          Arguments

                          @@ -332,7 +332,7 @@

                          Arguments

                          @@ -347,7 +347,7 @@

                          Arguments

                          @@ -362,7 +362,7 @@

                          Arguments

                          @@ -377,7 +377,7 @@

                          Arguments

                          @@ -395,7 +395,7 @@

                          Arguments

                          Return Value - + real(kind=rk), allocatable, (:,:)

                          @@ -567,7 +567,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/compute_xg_bspline_2d_1point.html b/proc/compute_xg_bspline_2d_1point.html index 3b54b7836..5ad30fbc8 100644 --- a/proc/compute_xg_bspline_2d_1point.html +++ b/proc/compute_xg_bspline_2d_1point.html @@ -287,7 +287,7 @@

                          Arguments

                          @@ -302,7 +302,7 @@

                          Arguments

                          @@ -317,7 +317,7 @@

                          Arguments

                          @@ -332,7 +332,7 @@

                          Arguments

                          @@ -347,7 +347,7 @@

                          Arguments

                          @@ -362,7 +362,7 @@

                          Arguments

                          @@ -380,7 +380,7 @@

                          Arguments

                          Return Value - + real(kind=rk), allocatable, (:)

                          @@ -552,7 +552,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/compute_xg_bspline_3d.html b/proc/compute_xg_bspline_3d.html index 540a00016..5256bd265 100644 --- a/proc/compute_xg_bspline_3d.html +++ b/proc/compute_xg_bspline_3d.html @@ -287,7 +287,7 @@

                          Arguments

                          @@ -302,7 +302,7 @@

                          Arguments

                          @@ -317,7 +317,7 @@

                          Arguments

                          @@ -332,7 +332,7 @@

                          Arguments

                          @@ -347,7 +347,7 @@

                          Arguments

                          @@ -362,7 +362,7 @@

                          Arguments

                          @@ -377,7 +377,7 @@

                          Arguments

                          @@ -392,7 +392,7 @@

                          Arguments

                          @@ -410,7 +410,7 @@

                          Arguments

                          Return Value - + real(kind=rk), allocatable, (:,:)

                          @@ -582,7 +582,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/compute_xg_bspline_3d_1point.html b/proc/compute_xg_bspline_3d_1point.html index e64203799..bc0a15dc0 100644 --- a/proc/compute_xg_bspline_3d_1point.html +++ b/proc/compute_xg_bspline_3d_1point.html @@ -287,7 +287,7 @@

                          Arguments

                          @@ -302,7 +302,7 @@

                          Arguments

                          @@ -317,7 +317,7 @@

                          Arguments

                          @@ -332,7 +332,7 @@

                          Arguments

                          @@ -347,7 +347,7 @@

                          Arguments

                          @@ -362,7 +362,7 @@

                          Arguments

                          @@ -377,7 +377,7 @@

                          Arguments

                          @@ -395,7 +395,7 @@

                          Arguments

                          Return Value - + real(kind=rk), allocatable, (:)

                          @@ -567,7 +567,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/compute_xg_nurbs_1d.html b/proc/compute_xg_nurbs_1d.html index 4dffb7def..43ba87e00 100644 --- a/proc/compute_xg_nurbs_1d.html +++ b/proc/compute_xg_nurbs_1d.html @@ -287,7 +287,7 @@

                          Arguments

                          @@ -302,7 +302,7 @@

                          Arguments

                          @@ -317,7 +317,7 @@

                          Arguments

                          @@ -332,7 +332,7 @@

                          Arguments

                          @@ -347,7 +347,7 @@

                          Arguments

                          @@ -362,7 +362,7 @@

                          Arguments

                          @@ -377,7 +377,7 @@

                          Arguments

                          @@ -395,7 +395,7 @@

                          Arguments

                          Return Value - + real(kind=rk), allocatable, (:,:)

                          @@ -552,7 +552,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/compute_xg_nurbs_1d_1point.html b/proc/compute_xg_nurbs_1d_1point.html index 34fde5b7c..714a6ca6f 100644 --- a/proc/compute_xg_nurbs_1d_1point.html +++ b/proc/compute_xg_nurbs_1d_1point.html @@ -287,7 +287,7 @@

                          Arguments

                          @@ -302,7 +302,7 @@

                          Arguments

                          @@ -317,7 +317,7 @@

                          Arguments

                          @@ -332,7 +332,7 @@

                          Arguments

                          @@ -347,7 +347,7 @@

                          Arguments

                          @@ -362,7 +362,7 @@

                          Arguments

                          @@ -380,7 +380,7 @@

                          Arguments

                          Return Value - + real(kind=rk), allocatable, (:)

                          @@ -537,7 +537,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/compute_xg_nurbs_2d.html b/proc/compute_xg_nurbs_2d.html index a015039fc..fdb58ba8c 100644 --- a/proc/compute_xg_nurbs_2d.html +++ b/proc/compute_xg_nurbs_2d.html @@ -287,7 +287,7 @@

                          Arguments

                          @@ -302,7 +302,7 @@

                          Arguments

                          @@ -317,7 +317,7 @@

                          Arguments

                          @@ -332,7 +332,7 @@

                          Arguments

                          @@ -347,7 +347,7 @@

                          Arguments

                          @@ -362,7 +362,7 @@

                          Arguments

                          @@ -377,7 +377,7 @@

                          Arguments

                          @@ -392,7 +392,7 @@

                          Arguments

                          @@ -410,7 +410,7 @@

                          Arguments

                          Return Value - + real(kind=rk), allocatable, (:,:)

                          @@ -582,7 +582,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/compute_xg_nurbs_2d_1point.html b/proc/compute_xg_nurbs_2d_1point.html index 7b34cc752..0256c1c31 100644 --- a/proc/compute_xg_nurbs_2d_1point.html +++ b/proc/compute_xg_nurbs_2d_1point.html @@ -287,7 +287,7 @@

                          Arguments

                          @@ -302,7 +302,7 @@

                          Arguments

                          @@ -317,7 +317,7 @@

                          Arguments

                          @@ -332,7 +332,7 @@

                          Arguments

                          @@ -347,7 +347,7 @@

                          Arguments

                          @@ -362,7 +362,7 @@

                          Arguments

                          @@ -377,7 +377,7 @@

                          Arguments

                          @@ -395,7 +395,7 @@

                          Arguments

                          Return Value - + real(kind=rk), allocatable, (:)

                          @@ -567,7 +567,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/compute_xg_nurbs_3d.html b/proc/compute_xg_nurbs_3d.html index 063db0b1d..e9468f4df 100644 --- a/proc/compute_xg_nurbs_3d.html +++ b/proc/compute_xg_nurbs_3d.html @@ -287,7 +287,7 @@

                          Arguments

                          @@ -302,7 +302,7 @@

                          Arguments

                          @@ -317,7 +317,7 @@

                          Arguments

                          @@ -332,7 +332,7 @@

                          Arguments

                          @@ -347,7 +347,7 @@

                          Arguments

                          @@ -362,7 +362,7 @@

                          Arguments

                          @@ -377,7 +377,7 @@

                          Arguments

                          @@ -392,7 +392,7 @@

                          Arguments

                          @@ -407,7 +407,7 @@

                          Arguments

                          @@ -425,7 +425,7 @@

                          Arguments

                          Return Value - + real(kind=rk), allocatable, (:,:)

                          @@ -597,7 +597,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/compute_xg_nurbs_3d_1point.html b/proc/compute_xg_nurbs_3d_1point.html index 6f75b661b..e917c156a 100644 --- a/proc/compute_xg_nurbs_3d_1point.html +++ b/proc/compute_xg_nurbs_3d_1point.html @@ -287,7 +287,7 @@

                          Arguments

                          @@ -302,7 +302,7 @@

                          Arguments

                          @@ -317,7 +317,7 @@

                          Arguments

                          @@ -332,7 +332,7 @@

                          Arguments

                          @@ -347,7 +347,7 @@

                          Arguments

                          @@ -362,7 +362,7 @@

                          Arguments

                          @@ -377,7 +377,7 @@

                          Arguments

                          @@ -392,7 +392,7 @@

                          Arguments

                          @@ -410,7 +410,7 @@

                          Arguments

                          Return Value - + real(kind=rk), allocatable, (:)

                          @@ -582,7 +582,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/create.html b/proc/create.html index e3630470a..960e09fa8 100644 --- a/proc/create.html +++ b/proc/create.html @@ -78,20 +78,20 @@

                          create
                        • 52 statements + title=" 0.4% of total for procedures.">27 statements
                        • - Source File + Source File
                        • -

                          private pure subroutine create(this, res1, res2, res3, Xt1, Xt2, Xt3, Xt) +

                          private pure subroutine create(this, res, Xt)

                          Type Bound

                          -

                          nurbs_volume

                          +

                          nurbs_curve

                          Arguments

                          - - class(nurbs_curve), + + class(nurbs_surface), intent(in) @@ -176,12 +176,12 @@

                          Arguments

                          real(kind=rk),
                          intent(in)intent(in), - + contiguous ::XtXt(:)
                          - + 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),
                          - + 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),
                          - + 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),
                          - + 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),
                          - + 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),
                          - + 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(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),
                          - + 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(out),
                          - + real(kind=rk), intent(out),
                          - + 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(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),
                          - + 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),
                          - + 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(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),
                          - + 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(out),
                          - + real(kind=rk), intent(out),
                          - + 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(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),
                          - + 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),
                          - + 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),
                          - + 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),
                          - + 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),
                          - + 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),
                          - + 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),
                          - + 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),
                          - + 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),
                          - + 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),
                          - + 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),
                          - + real(kind=rk), intent(in),
                          - + integer, intent(in)
                          - + integer, intent(in)
                          - + real(kind=rk), intent(in),
                          - + real(kind=rk), intent(in),
                          @@ -158,8 +158,8 @@

                          Arguments

                          @@ -181,82 +181,7 @@

                          Arguments

                          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -271,7 +196,7 @@

                          Arguments

                          contiguous - + @@ -291,91 +216,46 @@

                          Calls

                          - - + + proc~~create~~CallsGraph - + proc~create - -nurbs_volume%create + +nurbs_curve%create interface~compute_xg - -compute_Xg + +compute_Xg proc~create->interface~compute_xg - - - - - -interface~ndgrid - - -ndgrid - - - - - -proc~create->interface~ndgrid - - + + - + proc~is_rational - - -nurbs_volume%is_rational + + +nurbs_curve%is_rational - + proc~create->proc~is_rational - - - - - -proc~ndgrid2 - - -ndgrid2 - - - - - -interface~ndgrid->proc~ndgrid2 - - - - - -proc~ndgrid3 - - -ndgrid3 - - - - - -interface~ndgrid->proc~ndgrid3 - - + + @@ -471,142 +351,127 @@

                          Called by

                          - - + + proc~~create~~CalledByGraph - + proc~create - -nurbs_volume%create + +nurbs_curve%create proc~nearest_point2 - - -nurbs_volume%nearest_point2 + + +nurbs_curve%nearest_point2 proc~nearest_point2->proc~create - - + + - + -program~example3_volume - - -example3_volume +program~example1_curve + + +example1_curve - + -program~example3_volume->proc~create - - +program~example1_curve->proc~create + + - + -program~example_nurbs_volume - - -example_nurbs_volume +program~example_nurbs_curve + + +example_nurbs_curve - + -program~example_nurbs_volume->proc~create - - +program~example_nurbs_curve->proc~create + + - + -program~nearest_point_3d - - -nearest_point_3d +program~nearest_point_1d + + +nearest_point_1d - + -program~nearest_point_3d->proc~create - - +program~nearest_point_1d->proc~create + + - - -program~nearest_point_3d->proc~nearest_point2 - - + + +program~nearest_point_1d->proc~nearest_point2 + + - + -program~shape_c_3d - - -shape_C_3d +program~shape_c_1d + + +shape_C_1d - + -program~shape_c_3d->proc~create - - +program~shape_c_1d->proc~create + + - + -program~shape_half_ring_3d - - -shape_half_ring_3d +program~shape_circle + + +shape_circle - + -program~shape_half_ring_3d->proc~create - - +program~shape_circle->proc~create + + - + -program~shape_hexahedron - - -shape_hexahedron +program~shape_half_circle + + +shape_half_circle - + -program~shape_hexahedron->proc~create - - - - - -program~shape_ring_3d - - -shape_ring_3d - - - - - -program~shape_ring_3d->proc~create - - +program~shape_half_circle->proc~create + + @@ -722,7 +587,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/create~2.html b/proc/create~2.html index 784682b4d..dcd6be503 100644 --- a/proc/create~2.html +++ b/proc/create~2.html @@ -78,20 +78,20 @@

                          create
                        • 42 statements + title=" 0.8% of total for procedures.">52 statements
                        • - Source File + Source File
                        • -

                          private pure subroutine create(this, res1, res2, Xt1, Xt2, Xt) +

                          private pure subroutine create(this, res1, res2, res3, Xt1, Xt2, Xt3, Xt)

                          Type Bound

                          -

                          nurbs_surface

                          +

                          nurbs_volume

                          Arguments

                          - - class(nurbs_volume), + + class(nurbs_curve), intent(inout) @@ -173,7 +173,7 @@

                          Arguments

                          - + integer, intent(in), ::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(:)res ::Xt(:,:)Xt(:)
                          @@ -158,8 +158,8 @@

                          Arguments

                          @@ -188,7 +188,7 @@

                          Arguments

                          @@ -203,7 +203,22 @@

                          Arguments

                          + + + + + + + + @@ -218,7 +233,7 @@

                          Arguments

                          @@ -233,7 +248,22 @@

                          Arguments

                          + + + + + + + + @@ -270,7 +300,7 @@

                          Calls

                          proc~create~2 -nurbs_surface%create +nurbs_volume%create @@ -305,9 +335,9 @@

                          Calls

                          proc~is_rational~2 - + -nurbs_surface%is_rational +nurbs_volume%is_rational @@ -441,202 +471,142 @@

                          Called by

                          - - + + proc~~create~2~~CalledByGraph - + proc~create~2 - -nurbs_surface%create + +nurbs_volume%create proc~nearest_point2~2 - - -nurbs_surface%nearest_point2 + + +nurbs_volume%nearest_point2 proc~nearest_point2~2->proc~create~2 - - + + - + -program~example3_surface - - -example3_surface +program~example3_volume + + +example3_volume - + -program~example3_surface->proc~create~2 - - +program~example3_volume->proc~create~2 + + - + -program~example_nurbs_surface - - -example_nurbs_surface +program~example_nurbs_volume + + +example_nurbs_volume - + -program~example_nurbs_surface->proc~create~2 - - +program~example_nurbs_volume->proc~create~2 + + - + -program~example_ppm1 - - -example_ppm1 +program~nearest_point_3d + + +nearest_point_3d - + -program~example_ppm1->proc~create~2 - - +program~nearest_point_3d->proc~create~2 + + + + + +program~nearest_point_3d->proc~nearest_point2~2 + + - + -program~example_ppm2 - - -example_ppm2 +program~shape_c_3d + + +shape_C_3d - + -program~example_ppm2->proc~create~2 - - +program~shape_c_3d->proc~create~2 + + - + -program~example_ppm3 - - -example_ppm3 +program~shape_half_ring_3d + + +shape_half_ring_3d - + -program~example_ppm3->proc~create~2 - - +program~shape_half_ring_3d->proc~create~2 + + - + -program~nearest_point_2d - - -nearest_point_2d +program~shape_hexahedron + + +shape_hexahedron - + -program~nearest_point_2d->proc~create~2 - - +program~shape_hexahedron->proc~create~2 + + - - -program~nearest_point_2d->proc~nearest_point2~2 - - - - + -program~nearest_point_2d_bench - - -nearest_point_2d_bench +program~shape_ring_3d + + +shape_ring_3d - + -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 - - +program~shape_ring_3d->proc~create~2 + + @@ -752,7 +722,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/create~3.html b/proc/create~3.html index 15444855f..8b8013987 100644 --- a/proc/create~3.html +++ b/proc/create~3.html @@ -78,20 +78,20 @@

                          create
                        • 27 statements + title=" 0.6% 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_volume), intent(inout) @@ -173,7 +173,7 @@

                          Arguments

                          - + integer, intent(in),
                          - + integer, intent(in),
                          - + + integer, + intent(in),optional + + ::res3 + +
                          + real(kind=rk), intent(in),
                          - + real(kind=rk), intent(in),
                          - + + real(kind=rk), + intent(in),optional, + contiguous + ::Xt3(:) + +
                          + real(kind=rk), intent(in),
                          @@ -158,8 +158,8 @@

                          Arguments

                          @@ -181,7 +181,52 @@

                          Arguments

                          - + + + + + + + + + + + + + + + + + + + + + + + + + @@ -196,7 +241,7 @@

                          Arguments

                          contiguous - + @@ -216,46 +261,91 @@

                          Calls

                          - - + + proc~~create~3~~CallsGraph - + proc~create~3 - -nurbs_curve%create + +nurbs_surface%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_curve%is_rational + + +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 + + @@ -351,127 +441,202 @@

                          Called by

                          - - + + proc~~create~3~~CalledByGraph - + proc~create~3 - -nurbs_curve%create + +nurbs_surface%create proc~nearest_point2~3 - - -nurbs_curve%nearest_point2 + + +nurbs_surface%nearest_point2 proc~nearest_point2~3->proc~create~3 - - + + - + -program~example1_curve - - -example1_curve +program~example3_surface + + +example3_surface - + -program~example1_curve->proc~create~3 - - +program~example3_surface->proc~create~3 + + - + -program~example_nurbs_curve - - -example_nurbs_curve +program~example_nurbs_surface + + +example_nurbs_surface - + -program~example_nurbs_curve->proc~create~3 - - +program~example_nurbs_surface->proc~create~3 + + - + -program~nearest_point_1d - - -nearest_point_1d +program~example_ppm1 + + +example_ppm1 - + -program~nearest_point_1d->proc~create~3 - - - - - -program~nearest_point_1d->proc~nearest_point2~3 - - +program~example_ppm1->proc~create~3 + + - + -program~shape_c_1d - - -shape_C_1d +program~example_ppm2 + + +example_ppm2 - + -program~shape_c_1d->proc~create~3 - - +program~example_ppm2->proc~create~3 + + - + -program~shape_circle - - -shape_circle +program~example_ppm3 + + +example_ppm3 - + -program~shape_circle->proc~create~3 - - +program~example_ppm3->proc~create~3 + + - + -program~shape_half_circle - - -shape_half_circle +program~nearest_point_2d + + +nearest_point_2d - + -program~shape_half_circle->proc~create~3 - - +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 + + @@ -587,7 +752,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/derivative2_scalar.html b/proc/derivative2_scalar.html index 8b91dba54..bff754b4f 100644 --- a/proc/derivative2_scalar.html +++ b/proc/derivative2_scalar.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_volume

                          +

                          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),optional, + contiguous + ::Xt2(:) ::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~~CallsGraph - + proc~derivative2_scalar - -nurbs_volume%derivative2_scalar + +nurbs_curve%derivative2_scalar interface~compute_d2tgc - -compute_d2Tgc + +compute_d2Tgc proc~derivative2_scalar->interface~compute_d2tgc - - + + proc~is_rational - - -nurbs_volume%is_rational + + +nurbs_curve%is_rational proc~derivative2_scalar->proc~is_rational - - + + @@ -381,61 +381,61 @@

                          Called by

                          - - + + proc~~derivative2_scalar~~CalledByGraph - + proc~derivative2_scalar - -nurbs_volume%derivative2_scalar + +nurbs_curve%derivative2_scalar none~derivative2 - - -nurbs_volume%derivative2 + + +nurbs_curve%derivative2 none~derivative2->proc~derivative2_scalar - - + + proc~nearest_point2 - - -nurbs_volume%nearest_point2 + + +nurbs_curve%nearest_point2 proc~nearest_point2->none~derivative2 - - + + - + -program~nearest_point_3d - +program~nearest_point_1d + -nearest_point_3d +nearest_point_1d - + -program~nearest_point_3d->proc~nearest_point2 - - +program~nearest_point_1d->proc~nearest_point2 + + @@ -555,7 +555,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/derivative2_scalar~2.html b/proc/derivative2_scalar~2.html index 267a7f352..a7b0d553f 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_surface

                          +

                          nurbs_volume

                          Arguments

                          - - class(nurbs_volume), + + 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

                          @@ -218,7 +218,7 @@

                          Arguments

                          @@ -255,7 +255,7 @@

                          Calls

                          proc~derivative2_scalar~2 -nurbs_surface%derivative2_scalar +nurbs_volume%derivative2_scalar @@ -275,9 +275,9 @@

                          Calls

                          proc~is_rational~2 - + -nurbs_surface%is_rational +nurbs_volume%is_rational @@ -390,14 +390,14 @@

                          Called by

                          proc~derivative2_scalar~2 -nurbs_surface%derivative2_scalar +nurbs_volume%derivative2_scalar none~derivative2~2 - + -nurbs_surface%derivative2 +nurbs_volume%derivative2 @@ -410,9 +410,9 @@

                          Called by

                          proc~nearest_point2~2 - + -nurbs_surface%nearest_point2 +nurbs_volume%nearest_point2 @@ -422,18 +422,18 @@

                          Called by

                          - + -program~nearest_point_2d - +program~nearest_point_3d + -nearest_point_2d +nearest_point_3d - + -program~nearest_point_2d->proc~nearest_point2~2 +program~nearest_point_3d->proc~nearest_point2~2 @@ -555,7 +555,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/derivative2_scalar~3.html b/proc/derivative2_scalar~3.html index d8ba7f3ee..c569d5aac 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_curve

                          +

                          nurbs_surface

                          Arguments

                          - - class(nurbs_surface), + + class(nurbs_volume), intent(inout) @@ -173,7 +173,7 @@

                          Arguments

                          - + real(kind=rk), intent(in),
                          - + real(kind=rk), intent(out),
                          @@ -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_curve%derivative2_scalar + +nurbs_surface%derivative2_scalar interface~compute_d2tgc~3 - -compute_d2Tgc + +compute_d2Tgc proc~derivative2_scalar~3->interface~compute_d2tgc~3 - - + + proc~is_rational~3 - - -nurbs_curve%is_rational + + +nurbs_surface%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_curve%derivative2_scalar + +nurbs_surface%derivative2_scalar none~derivative2~3 - - -nurbs_curve%derivative2 + + +nurbs_surface%derivative2 none~derivative2~3->proc~derivative2_scalar~3 - - + + proc~nearest_point2~3 - - -nurbs_curve%nearest_point2 + + +nurbs_surface%nearest_point2 proc~nearest_point2~3->none~derivative2~3 - - + + - + -program~nearest_point_1d - +program~nearest_point_2d + -nearest_point_1d +nearest_point_2d - + -program~nearest_point_1d->proc~nearest_point2~3 - - +program~nearest_point_2d->proc~nearest_point2~3 + + @@ -555,7 +555,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/derivative2_vector.html b/proc/derivative2_vector.html index 963375243..2a176416a 100644 --- a/proc/derivative2_vector.html +++ b/proc/derivative2_vector.html @@ -78,20 +78,20 @@

                          derivative2_vector
                        • 43 statements + title=" 0.3% of total for procedures.">23 statements
                        • - Source File + Source File
                        • @@ -137,13 +137,13 @@

                          Contents

                          -

                          private pure subroutine derivative2_vector(this, res1, res2, res3, Xt1, Xt2, Xt3, d2Tgc, dTgc, Tgc) +

                          private pure subroutine derivative2_vector(this, res, Xt, d2Tgc, dTgc, Tgc)

                          Type Bound

                          -

                          nurbs_volume

                          +

                          nurbs_curve

                          Arguments

                          - - class(nurbs_curve), + + class(nurbs_surface), intent(inout) @@ -176,12 +176,12 @@

                          Arguments

                          real(kind=rk),
                          intent(in)intent(in), - + contiguous ::XtXt(:) ::d2Tgc(:)d2Tgc(:,:) ::dTgc(:)dTgc(:,:)
                          @@ -158,8 +158,8 @@

                          Arguments

                          @@ -181,44 +181,14 @@

                          Arguments

                          - + - - - - - - - - - - - - - - - - @@ -226,37 +196,7 @@

                          Arguments

                          contiguous - - - - - - - - - - - - - - - - - + @@ -271,7 +211,7 @@

                          Arguments

                          allocatable - + @@ -286,7 +226,7 @@

                          Arguments

                          allocatable - + @@ -321,91 +261,46 @@

                          Calls

                          - - + + proc~~derivative2_vector~~CallsGraph - + proc~derivative2_vector - -nurbs_volume%derivative2_vector + +nurbs_curve%derivative2_vector interface~compute_d2tgc - -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 + + +nurbs_curve%is_rational - + proc~derivative2_vector->proc~is_rational - - - - - -proc~ndgrid2 - - -ndgrid2 - - - - - -interface~ndgrid->proc~ndgrid2 - - - - - -proc~ndgrid3 - - -ndgrid3 - - - - - -interface~ndgrid->proc~ndgrid3 - - + + @@ -501,61 +396,61 @@

                          Called by

                          - - + + proc~~derivative2_vector~~CalledByGraph - + proc~derivative2_vector - -nurbs_volume%derivative2_vector + +nurbs_curve%derivative2_vector none~derivative2 - - -nurbs_volume%derivative2 + + +nurbs_curve%derivative2 none~derivative2->proc~derivative2_vector - - + + proc~nearest_point2 - - -nurbs_volume%nearest_point2 + + +nurbs_curve%nearest_point2 proc~nearest_point2->none~derivative2 - - + + - + -program~nearest_point_3d - +program~nearest_point_1d + -nearest_point_3d +nearest_point_1d - + -program~nearest_point_3d->proc~nearest_point2 - - +program~nearest_point_1d->proc~nearest_point2 + + @@ -675,7 +570,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/derivative2_vector~2.html b/proc/derivative2_vector~2.html index 64a68b65d..aa54784e7 100644 --- a/proc/derivative2_vector~2.html +++ b/proc/derivative2_vector~2.html @@ -78,20 +78,20 @@

                          derivative2_vector
                        • 34 statements + title=" 0.6% of total for procedures.">43 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, res1, res2, res3, Xt1, Xt2, Xt3, d2Tgc, dTgc, Tgc)

                          Type Bound

                          -

                          nurbs_surface

                          +

                          nurbs_volume

                          Arguments

                          - - class(nurbs_volume), + + class(nurbs_curve), intent(inout) @@ -173,7 +173,7 @@

                          Arguments

                          - + integer, intent(in), ::res1res
                          - - integer, - intent(in),optional - - ::res2 - -
                          - - integer, - intent(in),optional - - ::res3 - -
                          - + real(kind=rk), intent(in), ::Xt1(:) - -
                          - - real(kind=rk), - intent(in),optional, - contiguous - ::Xt2(:) - -
                          - - real(kind=rk), - intent(in),optional, - contiguous - ::Xt3(:)Xt(:) ::d2Tgc(:,:,:)d2Tgc(:,:) ::dTgc(:,:,:)dTgc(:,:)
                          @@ -158,8 +158,8 @@

                          Arguments

                          @@ -188,7 +188,7 @@

                          Arguments

                          @@ -203,7 +203,22 @@

                          Arguments

                          + + + + + + + + @@ -218,7 +233,7 @@

                          Arguments

                          @@ -231,6 +246,21 @@

                          Arguments

                          + + + + + + + + @@ -300,7 +330,7 @@

                          Calls

                          proc~derivative2_vector~2 -nurbs_surface%derivative2_vector +nurbs_volume%derivative2_vector @@ -335,9 +365,9 @@

                          Calls

                          proc~is_rational~2 - + -nurbs_surface%is_rational +nurbs_volume%is_rational @@ -480,14 +510,14 @@

                          Called by

                          proc~derivative2_vector~2 -nurbs_surface%derivative2_vector +nurbs_volume%derivative2_vector none~derivative2~2 - + -nurbs_surface%derivative2 +nurbs_volume%derivative2 @@ -500,9 +530,9 @@

                          Called by

                          proc~nearest_point2~2 - + -nurbs_surface%nearest_point2 +nurbs_volume%nearest_point2 @@ -512,18 +542,18 @@

                          Called by

                          - + -program~nearest_point_2d - +program~nearest_point_3d + -nearest_point_2d +nearest_point_3d - + -program~nearest_point_2d->proc~nearest_point2~2 +program~nearest_point_3d->proc~nearest_point2~2 @@ -645,7 +675,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/derivative2_vector~3.html b/proc/derivative2_vector~3.html index 7a751d5af..2dde169bc 100644 --- a/proc/derivative2_vector~3.html +++ b/proc/derivative2_vector~3.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_volume), intent(inout) @@ -173,7 +173,7 @@

                          Arguments

                          - + integer, intent(in),
                          - + integer, intent(in),
                          - + + integer, + intent(in),optional + + ::res3 + +
                          + real(kind=rk), intent(in),
                          - + real(kind=rk), intent(in),
                          + + real(kind=rk), + intent(in),optional, + contiguous + ::Xt3(:) + +
                          @@ -263,7 +293,7 @@

                          Arguments

                          - + real(kind=rk), intent(out),
                          @@ -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~3~~CallsGraph - + proc~derivative2_vector~3 - -nurbs_curve%derivative2_vector + +nurbs_surface%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_curve%is_rational + + +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 + + @@ -396,61 +471,61 @@

                          Called by

                          - - + + proc~~derivative2_vector~3~~CalledByGraph - + proc~derivative2_vector~3 - -nurbs_curve%derivative2_vector + +nurbs_surface%derivative2_vector none~derivative2~3 - - -nurbs_curve%derivative2 + + +nurbs_surface%derivative2 none~derivative2~3->proc~derivative2_vector~3 - - + + proc~nearest_point2~3 - - -nurbs_curve%nearest_point2 + + +nurbs_surface%nearest_point2 proc~nearest_point2~3->none~derivative2~3 - - + + - + -program~nearest_point_1d - +program~nearest_point_2d + -nearest_point_1d +nearest_point_2d - + -program~nearest_point_1d->proc~nearest_point2~3 - - +program~nearest_point_2d->proc~nearest_point2~3 + + @@ -570,7 +645,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/derivative_scalar.html b/proc/derivative_scalar.html index cddbe2b48..b765bc4f4 100644 --- a/proc/derivative_scalar.html +++ b/proc/derivative_scalar.html @@ -83,15 +83,15 @@

                          derivative_scalar
                        • - Source File + Source File
                        • @@ -143,7 +143,7 @@

                          private pure subroutine derivative_scalar(this, Xt, dTgc, Tgc, elem)

                          Type Bound

                          -

                          nurbs_volume

                          +

                          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

                          - + - + @@ -196,7 +196,7 @@

                          Arguments

                          allocatable - + @@ -218,7 +218,7 @@

                          Arguments

                          @@ -246,46 +246,46 @@

                          Calls

                          - + proc~~derivative_scalar~~CallsGraph - + proc~derivative_scalar - -nurbs_volume%derivative_scalar + +nurbs_curve%derivative_scalar interface~compute_dtgc - -compute_dTgc + +compute_dTgc proc~derivative_scalar->interface~compute_dtgc - - + + proc~is_rational - - -nurbs_volume%is_rational + + +nurbs_curve%is_rational proc~derivative_scalar->proc~is_rational - - + + @@ -381,76 +381,76 @@

                          Called by

                          - - + + proc~~derivative_scalar~~CalledByGraph - + proc~derivative_scalar - -nurbs_volume%derivative_scalar + +nurbs_curve%derivative_scalar none~derivative - - -nurbs_volume%derivative + + +nurbs_curve%derivative none~derivative->proc~derivative_scalar - - + + proc~ansatz - - -nurbs_volume%ansatz + + +nurbs_curve%ansatz proc~ansatz->none~derivative - - + + - + -proc~cmp_volume - - -nurbs_volume%cmp_volume +proc~cmp_length + + +nurbs_curve%cmp_length - + -proc~cmp_volume->proc~ansatz - - +proc~cmp_length->proc~ansatz + + - + -program~compute_volume - - -compute_volume +program~compute_length + + +compute_length - + -program~compute_volume->proc~cmp_volume - - +program~compute_length->proc~cmp_length + + @@ -570,7 +570,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/derivative_scalar~2.html b/proc/derivative_scalar~2.html index 7ce47ecd2..7cc1a3734 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, elem)

                          Type Bound

                          -

                          nurbs_surface

                          +

                          nurbs_volume

                          Arguments

                          - - class(nurbs_volume), + + class(nurbs_curve), intent(inout) @@ -176,12 +176,12 @@

                          Arguments

                          real(kind=rk),
                          intent(in),intent(in) - contiguous + ::Xt(:)Xt ::dTgc(:,:)dTgc(:)
                          - + integer, intent(in),
                          @@ -158,8 +158,8 @@

                          Arguments

                          @@ -203,7 +203,7 @@

                          Arguments

                          @@ -218,7 +218,7 @@

                          Arguments

                          @@ -255,7 +255,7 @@

                          Calls

                          proc~derivative_scalar~2 -nurbs_surface%derivative_scalar +nurbs_volume%derivative_scalar @@ -275,9 +275,9 @@

                          Calls

                          proc~is_rational~2 - + -nurbs_surface%is_rational +nurbs_volume%is_rational @@ -381,76 +381,76 @@

                          Called by

                          - - + + proc~~derivative_scalar~2~~CalledByGraph - + proc~derivative_scalar~2 - -nurbs_surface%derivative_scalar + +nurbs_volume%derivative_scalar none~derivative~2 - - -nurbs_surface%derivative + + +nurbs_volume%derivative none~derivative~2->proc~derivative_scalar~2 - - + + proc~ansatz~2 - - -nurbs_surface%ansatz + + +nurbs_volume%ansatz proc~ansatz~2->none~derivative~2 - - + + - + -proc~cmp_area - - -nurbs_surface%cmp_area +proc~cmp_volume + + +nurbs_volume%cmp_volume - + -proc~cmp_area->proc~ansatz~2 - - +proc~cmp_volume->proc~ansatz~2 + + - + -program~compute_area - - -compute_area +program~compute_volume + + +compute_volume - + -program~compute_area->proc~cmp_area - - +program~compute_volume->proc~cmp_volume + + @@ -570,7 +570,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/derivative_scalar~3.html b/proc/derivative_scalar~3.html index 38e5a1c4a..dbb5b713b 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, elem)

                          Type Bound

                          -

                          nurbs_curve

                          +

                          nurbs_surface

                          Arguments

                          - - class(nurbs_surface), + + class(nurbs_volume), intent(inout) @@ -173,7 +173,7 @@

                          Arguments

                          - + real(kind=rk), intent(in),
                          - + real(kind=rk), intent(out),
                          - + integer, intent(in),
                          @@ -158,8 +158,8 @@

                          Arguments

                          - + - + @@ -196,7 +196,7 @@

                          Arguments

                          allocatable - + @@ -246,46 +246,46 @@

                          Calls

                          - + proc~~derivative_scalar~3~~CallsGraph - + proc~derivative_scalar~3 - -nurbs_curve%derivative_scalar + +nurbs_surface%derivative_scalar interface~compute_dtgc~3 - -compute_dTgc + +compute_dTgc proc~derivative_scalar~3->interface~compute_dtgc~3 - - + + proc~is_rational~3 - - -nurbs_curve%is_rational + + +nurbs_surface%is_rational proc~derivative_scalar~3->proc~is_rational~3 - - + + @@ -382,75 +382,75 @@

                          Called by

                          --> - + viewBox="0.00 0.00 641.00 23.80" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + proc~~derivative_scalar~3~~CalledByGraph - + proc~derivative_scalar~3 - -nurbs_curve%derivative_scalar + +nurbs_surface%derivative_scalar none~derivative~3 - - -nurbs_curve%derivative + + +nurbs_surface%derivative none~derivative~3->proc~derivative_scalar~3 - - + + proc~ansatz~3 - - -nurbs_curve%ansatz + + +nurbs_surface%ansatz proc~ansatz~3->none~derivative~3 - - + + - + -proc~cmp_length - - -nurbs_curve%cmp_length +proc~cmp_area + + +nurbs_surface%cmp_area - + -proc~cmp_length->proc~ansatz~3 - - +proc~cmp_area->proc~ansatz~3 + + - + -program~compute_length - - -compute_length +program~compute_area + + +compute_area - + -program~compute_length->proc~cmp_length - - +program~compute_area->proc~cmp_area + + @@ -570,7 +570,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/derivative_vector.html b/proc/derivative_vector.html index 015f666d2..d41713979 100644 --- a/proc/derivative_vector.html +++ b/proc/derivative_vector.html @@ -78,20 +78,20 @@

                          derivative_vector
                        • 42 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, res3, Xt1, Xt2, Xt3, dTgc, Tgc) +

                          private pure subroutine derivative_vector(this, res, Xt, dTgc, Tgc)

                          Type Bound

                          -

                          nurbs_volume

                          +

                          nurbs_curve

                          Arguments

                          - - class(nurbs_curve), + + class(nurbs_surface), intent(inout) @@ -176,12 +176,12 @@

                          Arguments

                          real(kind=rk),
                          intent(in)intent(in), - + contiguous ::XtXt(:) ::dTgc(:)dTgc(:,:)
                          @@ -158,8 +158,8 @@

                          Arguments

                          @@ -181,44 +181,14 @@

                          Arguments

                          - + - - - - - - - - - - - - - - - - @@ -226,37 +196,7 @@

                          Arguments

                          contiguous - - - - - - - - - - - - - - - - - + @@ -271,7 +211,7 @@

                          Arguments

                          allocatable - + @@ -306,91 +246,46 @@

                          Calls

                          - - + + proc~~derivative_vector~~CallsGraph - + proc~derivative_vector - -nurbs_volume%derivative_vector + +nurbs_curve%derivative_vector interface~compute_dtgc - -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 + + +nurbs_curve%is_rational - + proc~derivative_vector->proc~is_rational - - - - - -proc~ndgrid2 - - -ndgrid2 - - - - - -interface~ndgrid->proc~ndgrid2 - - - - - -proc~ndgrid3 - - -ndgrid3 - - - - - -interface~ndgrid->proc~ndgrid3 - - + + @@ -486,76 +381,76 @@

                          Called by

                          - - + + proc~~derivative_vector~~CalledByGraph - + proc~derivative_vector - -nurbs_volume%derivative_vector + +nurbs_curve%derivative_vector none~derivative - - -nurbs_volume%derivative + + +nurbs_curve%derivative none~derivative->proc~derivative_vector - - + + proc~ansatz - - -nurbs_volume%ansatz + + +nurbs_curve%ansatz proc~ansatz->none~derivative - - + + - + -proc~cmp_volume - - -nurbs_volume%cmp_volume +proc~cmp_length + + +nurbs_curve%cmp_length - + -proc~cmp_volume->proc~ansatz - - +proc~cmp_length->proc~ansatz + + - + -program~compute_volume - - -compute_volume +program~compute_length + + +compute_length - + -program~compute_volume->proc~cmp_volume - - +program~compute_length->proc~cmp_length + + @@ -675,7 +570,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/derivative_vector~2.html b/proc/derivative_vector~2.html index 22e98af06..9b7c313e0 100644 --- a/proc/derivative_vector~2.html +++ b/proc/derivative_vector~2.html @@ -78,20 +78,20 @@

                          derivative_vector
                        • 33 statements + title=" 0.6% of total for procedures.">42 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, res1, res2, res3, Xt1, Xt2, Xt3, dTgc, Tgc)

                          Type Bound

                          -

                          nurbs_surface

                          +

                          nurbs_volume

                          Arguments

                          - - class(nurbs_volume), + + class(nurbs_curve), intent(inout) @@ -173,7 +173,7 @@

                          Arguments

                          - + integer, intent(in), ::res1res
                          - - integer, - intent(in),optional - - ::res2 - -
                          - - integer, - intent(in),optional - - ::res3 - -
                          - + real(kind=rk), intent(in), ::Xt1(:) - -
                          - - real(kind=rk), - intent(in),optional, - contiguous - ::Xt2(:) - -
                          - - real(kind=rk), - intent(in),optional, - contiguous - ::Xt3(:)Xt(:) ::dTgc(:,:,:)dTgc(:,:)
                          @@ -158,8 +158,8 @@

                          Arguments

                          @@ -188,7 +188,7 @@

                          Arguments

                          @@ -203,7 +203,22 @@

                          Arguments

                          + + + + + + + + @@ -218,7 +233,7 @@

                          Arguments

                          @@ -231,6 +246,21 @@

                          Arguments

                          + + + + + + + + @@ -285,7 +315,7 @@

                          Calls

                          proc~derivative_vector~2 -nurbs_surface%derivative_vector +nurbs_volume%derivative_vector @@ -320,9 +350,9 @@

                          Calls

                          proc~is_rational~2 - + -nurbs_surface%is_rational +nurbs_volume%is_rational @@ -456,76 +486,76 @@

                          Called by

                          - - + + proc~~derivative_vector~2~~CalledByGraph - + proc~derivative_vector~2 - -nurbs_surface%derivative_vector + +nurbs_volume%derivative_vector none~derivative~2 - - -nurbs_surface%derivative + + +nurbs_volume%derivative none~derivative~2->proc~derivative_vector~2 - - + + proc~ansatz~2 - - -nurbs_surface%ansatz + + +nurbs_volume%ansatz proc~ansatz~2->none~derivative~2 - - + + - + -proc~cmp_area - - -nurbs_surface%cmp_area +proc~cmp_volume + + +nurbs_volume%cmp_volume - + -proc~cmp_area->proc~ansatz~2 - - +proc~cmp_volume->proc~ansatz~2 + + - + -program~compute_area - - -compute_area +program~compute_volume + + +compute_volume - + -program~compute_area->proc~cmp_area - - +program~compute_volume->proc~cmp_volume + + @@ -645,7 +675,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/derivative_vector~3.html b/proc/derivative_vector~3.html index d085b4b31..a9497c305 100644 --- a/proc/derivative_vector~3.html +++ b/proc/derivative_vector~3.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_volume), intent(inout) @@ -173,7 +173,7 @@

                          Arguments

                          - + integer, intent(in),
                          - + integer, intent(in),
                          - + + integer, + intent(in),optional + + ::res3 + +
                          + real(kind=rk), intent(in),
                          - + real(kind=rk), intent(in),
                          + + real(kind=rk), + intent(in),optional, + contiguous + ::Xt3(:) + +
                          @@ -248,7 +278,7 @@

                          Arguments

                          - + real(kind=rk), intent(out),
                          @@ -158,8 +158,8 @@

                          Arguments

                          @@ -181,14 +181,29 @@

                          Arguments

                          - + + + + + + + + + @@ -196,7 +211,22 @@

                          Arguments

                          contiguous - + + + + + + + + + @@ -211,7 +241,7 @@

                          Arguments

                          allocatable - + @@ -246,46 +276,91 @@

                          Calls

                          - - + + proc~~derivative_vector~3~~CallsGraph - + proc~derivative_vector~3 - -nurbs_curve%derivative_vector + +nurbs_surface%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_curve%is_rational + + +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 + + @@ -382,75 +457,75 @@

                          Called by

                          --> - + viewBox="0.00 0.00 641.00 23.74" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + proc~~derivative_vector~3~~CalledByGraph - + proc~derivative_vector~3 - -nurbs_curve%derivative_vector + +nurbs_surface%derivative_vector none~derivative~3 - - -nurbs_curve%derivative + + +nurbs_surface%derivative none~derivative~3->proc~derivative_vector~3 - - + + proc~ansatz~3 - - -nurbs_curve%ansatz + + +nurbs_surface%ansatz proc~ansatz~3->none~derivative~3 - - + + - + -proc~cmp_length - - -nurbs_curve%cmp_length +proc~cmp_area + + +nurbs_surface%cmp_area - + -proc~cmp_length->proc~ansatz~3 - - +proc~cmp_area->proc~ansatz~3 + + - + -program~compute_length - - -compute_length +program~compute_area + + +compute_area - + -program~compute_length->proc~cmp_length - - +program~compute_area->proc~cmp_area + + @@ -570,7 +645,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/det.html b/proc/det.html index 6d4e1192b..fb5804f5e 100644 --- a/proc/det.html +++ b/proc/det.html @@ -202,18 +202,18 @@

                          Called by

                          det - + -proc~ansatz - +proc~ansatz~2 + nurbs_volume%ansatz - + -proc~ansatz->proc~det +proc~ansatz~2->proc~det @@ -226,30 +226,30 @@

                          Called by

                          - + -proc~ansatz->proc~inv +proc~ansatz~2->proc~inv - + -proc~ansatz~2 - +proc~ansatz~3 + nurbs_surface%ansatz - + -proc~ansatz~2->proc~det +proc~ansatz~3->proc~det - + -proc~ansatz~2->proc~inv +proc~ansatz~3->proc~inv @@ -274,9 +274,9 @@

                          Called by

                          - + -proc~cmp_area->proc~ansatz~2 +proc~cmp_area->proc~ansatz~3 @@ -289,39 +289,39 @@

                          Called by

                          - + -proc~cmp_volume->proc~ansatz +proc~cmp_volume->proc~ansatz~2 - + -proc~nearest_point2 - +proc~nearest_point2~2 + nurbs_volume%nearest_point2 - + -proc~nearest_point2->proc~inv +proc~nearest_point2~2->proc~inv - + -proc~nearest_point2~2 - +proc~nearest_point2~3 + nurbs_surface%nearest_point2 - + -proc~nearest_point2~2->proc~inv +proc~nearest_point2~3->proc~inv @@ -364,9 +364,9 @@

                          Called by

                          - + -program~nearest_point_2d->proc~nearest_point2~2 +program~nearest_point_2d->proc~nearest_point2~3 @@ -379,9 +379,9 @@

                          Called by

                          - + -program~nearest_point_3d->proc~nearest_point2 +program~nearest_point_3d->proc~nearest_point2~2 @@ -503,7 +503,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/dyad_t1_t1.html b/proc/dyad_t1_t1.html index 7801d4d92..bedeea05e 100644 --- a/proc/dyad_t1_t1.html +++ b/proc/dyad_t1_t1.html @@ -232,18 +232,18 @@

                          Called by

                          - + -proc~ansatz~3 - +proc~ansatz + nurbs_curve%ansatz - + -proc~ansatz~3->interface~dyad +proc~ansatz->interface~dyad @@ -256,9 +256,9 @@

                          Called by

                          - + -proc~cmp_length->proc~ansatz~3 +proc~cmp_length->proc~ansatz @@ -395,7 +395,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/elevate_degree.html b/proc/elevate_degree.html index ea476a707..b84df19ba 100644 --- a/proc/elevate_degree.html +++ b/proc/elevate_degree.html @@ -78,20 +78,20 @@

                          elevate_degree
                        • 105 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_volume

                          +

                          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(:) ::dTgc(:,:)dTgc(:,:,:)
                          @@ -158,8 +158,8 @@

                          Arguments

                          - - - - - - - - @@ -171,7 +171,7 @@

                          Arguments

                          @@ -186,7 +186,7 @@

                          Arguments

                          @@ -468,9 +468,9 @@

                          Called by

                          proc~elevate_degree - - -nurbs_volume%elevate_degree + + +nurbs_curve%elevate_degree @@ -483,9 +483,9 @@

                          Called by

                          proc~elevate_degree~2 - + -nurbs_surface%elevate_degree +nurbs_volume%elevate_degree @@ -498,9 +498,9 @@

                          Called by

                          proc~elevate_degree~3 - - -nurbs_curve%elevate_degree + + +nurbs_surface%elevate_degree @@ -514,46 +514,46 @@

                          Called by

                          program~example1_curve - -example1_curve + +example1_curve - - -program~example1_curve->proc~elevate_degree~3 - - + + +program~example1_curve->proc~elevate_degree + + program~example3_surface - -example3_surface + +example3_surface - - -program~example3_surface->proc~elevate_degree~2 - - + + +program~example3_surface->proc~elevate_degree~3 + + program~example3_volume - -example3_volume + +example3_volume - - -program~example3_volume->proc~elevate_degree - - + + +program~example3_volume->proc~elevate_degree~2 + + @@ -669,7 +669,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/elevate_degree~2.html b/proc/elevate_degree~2.html index 0d1bfd453..1a72ed2e3 100644 --- a/proc/elevate_degree~2.html +++ b/proc/elevate_degree~2.html @@ -78,20 +78,20 @@

                          elevate_degree
                        • 72 statements + title=" 1.5% of total for procedures.">105 statements
                        • - Source File + Source File
                        • @@ -143,7 +143,7 @@

                          private pure subroutine elevate_degree(this, dir, t)

                          Type Bound

                          -

                          nurbs_surface

                          +

                          nurbs_volume

                          Arguments

                          - - class(nurbs_volume), + + class(nurbs_curve), intent(inout) @@ -171,21 +171,6 @@

                          Arguments

                          - - integer, - intent(in) - - ::dir - -
                          @@ -216,325 +201,289 @@

                          Calls

                          - - + + proc~~elevate_degree~~CallsGraph - + proc~elevate_degree - -nurbs_volume%elevate_degree + +nurbs_curve%elevate_degree - + -none~get_knot - - -nurbs_volume%get_knot +none~set + + +nurbs_curve%set - + -proc~elevate_degree->none~get_knot - - +proc~elevate_degree->none~set + + - + -none~set - - -nurbs_volume%set +proc~elevate_degree_a_5_9 + + +elevate_degree_A_5_9 - + -proc~elevate_degree->none~set - - +proc~elevate_degree->proc~elevate_degree_a_5_9 + + - + -proc~elevate_degree_a_5_9 - - -elevate_degree_A_5_9 +proc~is_rational + + +nurbs_curve%is_rational - + -proc~elevate_degree->proc~elevate_degree_a_5_9 - - +proc~elevate_degree->proc~is_rational + + - + -proc~get_knot_all - - -nurbs_volume%get_knot_all +proc~set1 + + +nurbs_curve%set1 - + -none~get_knot->proc~get_knot_all - - +none~set->proc~set1 + + - + -proc~get_knoti - - -nurbs_volume%get_knoti +proc~set1a + + +nurbs_curve%set1a - + -none~get_knot->proc~get_knoti - - - - - -proc~set1 - - -nurbs_volume%set1 - - - - - -none~set->proc~set1 - - +none~set->proc~set1a + + - + proc~set2 - - -nurbs_volume%set2 + + +nurbs_curve%set2 - + none~set->proc~set2 - - + + - + proc~set3 - - -nurbs_volume%set3 + + +nurbs_curve%set3 - + none~set->proc~set3 - - + + - + proc~set4 - - -nurbs_volume%set4 + + +nurbs_curve%set4 - + none~set->proc~set4 - - + + 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 - - -nurbs_volume%cmp_degree + + +nurbs_curve%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~set1a->proc~cmp_degree + + - + proc~compute_knot_vector - - -compute_knot_vector + + +compute_knot_vector - + proc~set2->proc~compute_knot_vector - - + + - + proc~set3->proc~cmp_degree - - + + - + proc~get_multiplicity - - -nurbs_volume%get_multiplicity + + +nurbs_curve%get_multiplicity - + proc~cmp_degree->proc~get_multiplicity - - - - - -proc~cmp_nc->interface~compute_multiplicity - - + + - + proc~repelem - - -repelem + + +repelem - + proc~compute_knot_vector->proc~repelem - - + + - + proc~get_multiplicity->interface~compute_multiplicity - - + + @@ -634,31 +583,31 @@

                          Called by

                          - + proc~~elevate_degree~~CalledByGraph - + proc~elevate_degree - -nurbs_volume%elevate_degree + +nurbs_curve%elevate_degree - + -program~example3_volume - - -example3_volume +program~example1_curve + + +example1_curve - + -program~example3_volume->proc~elevate_degree - - +program~example1_curve->proc~elevate_degree + + @@ -774,7 +723,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/elevate_degree_a_5_9.html b/proc/elevate_degree_a_5_9.html index 9f350753e..4ea3cf21d 100644 --- a/proc/elevate_degree_a_5_9.html +++ b/proc/elevate_degree_a_5_9.html @@ -156,7 +156,7 @@

                          Arguments

                          - + integer, intent(in)
                          - + real(kind=rk), intent(in),
                          - + integer, intent(in)
                          @@ -158,8 +158,8 @@

                          Arguments

                          @@ -188,7 +188,7 @@

                          Arguments

                          @@ -216,340 +216,325 @@

                          Calls

                          - - + + proc~~elevate_degree~2~~CallsGraph - + proc~elevate_degree~2 - -nurbs_surface%elevate_degree + +nurbs_volume%elevate_degree none~get_knot~2 - - -nurbs_surface%get_knot + + +nurbs_volume%get_knot proc~elevate_degree~2->none~get_knot~2 - - + + none~set~2 - - -nurbs_surface%set + + +nurbs_volume%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_surface%is_rational - - - - - -proc~elevate_degree~2->proc~is_rational~2 - - + + - + proc~get_knot_all~2 - - -nurbs_surface%get_knot_all + + +nurbs_volume%get_knot_all - + none~get_knot~2->proc~get_knot_all~2 - - + + - + proc~get_knoti~2 - - -nurbs_surface%get_knoti + + +nurbs_volume%get_knoti - + none~get_knot~2->proc~get_knoti~2 - - + + - + proc~set1~2 - - -nurbs_surface%set1 + + +nurbs_volume%set1 - + none~set~2->proc~set1~2 - - + + - + proc~set2~2 - - -nurbs_surface%set2 + + +nurbs_volume%set2 - + none~set~2->proc~set2~2 - - + + - + proc~set3~2 - - -nurbs_surface%set3 + + +nurbs_volume%set3 - + none~set~2->proc~set3~2 - - + + - + proc~set4~2 - - -nurbs_surface%set4 + + +nurbs_volume%set4 - + none~set~2->proc~set4~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_surface%cmp_degree + + +nurbs_volume%cmp_degree - + proc~set1~2->proc~cmp_degree~2 - - + + - + proc~cmp_nc~2 - - -nurbs_surface%cmp_nc + + +nurbs_volume%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_surface%get_multiplicity + + +nurbs_volume%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 - - + + @@ -658,20 +643,20 @@

                          Called by

                          proc~elevate_degree~2 -nurbs_surface%elevate_degree +nurbs_volume%elevate_degree - + -program~example3_surface - +program~example3_volume + -example3_surface +example3_volume - + -program~example3_surface->proc~elevate_degree~2 +program~example3_volume->proc~elevate_degree~2 @@ -789,7 +774,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/elevate_degree~3.html b/proc/elevate_degree~3.html index 633c2ebf3..b4ffab2d2 100644 --- a/proc/elevate_degree~3.html +++ b/proc/elevate_degree~3.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_volume), intent(inout) @@ -173,7 +173,7 @@

                          Arguments

                          - + integer, intent(in)
                          - + integer, intent(in)
                          @@ -158,8 +158,8 @@

                          Arguments

                          + + + + + + + + @@ -201,289 +216,340 @@

                          Calls

                          - - + + proc~~elevate_degree~3~~CallsGraph - + proc~elevate_degree~3 - -nurbs_curve%elevate_degree + +nurbs_surface%elevate_degree - + +none~get_knot~3 + + +nurbs_surface%get_knot + + + + + +proc~elevate_degree~3->none~get_knot~3 + + + + + none~set~3 - - -nurbs_curve%set + + +nurbs_surface%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_curve%is_rational + + +nurbs_surface%is_rational - + proc~elevate_degree~3->proc~is_rational~3 - - + + - - -proc~set1a - - -nurbs_curve%set1a + + +proc~get_knot_all~3 + + +nurbs_surface%get_knot_all - - -none~set~3->proc~set1a - - + + +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_curve%set1 + + +nurbs_surface%set1 - + none~set~3->proc~set1~3 - - + + - + proc~set2~3 - - -nurbs_curve%set2 + + +nurbs_surface%set2 - + none~set~3->proc~set2~3 - - + + - + proc~set3~3 - - -nurbs_curve%set3 + + +nurbs_surface%set3 - + none~set~3->proc~set3~3 - - + + - + proc~set4~3 - - -nurbs_curve%set4 + + +nurbs_surface%set4 - + none~set~3->proc~set4~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_curve%cmp_degree + + +nurbs_surface%cmp_degree - - -proc~set1a->proc~cmp_degree~3 - - - - + 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_curve%get_multiplicity + + +nurbs_surface%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 - - + + @@ -583,31 +649,31 @@

                          Called by

                          - + proc~~elevate_degree~3~~CalledByGraph - + proc~elevate_degree~3 - -nurbs_curve%elevate_degree + +nurbs_surface%elevate_degree - + -program~example1_curve - - -example1_curve +program~example3_surface + + +example3_surface - + -program~example1_curve->proc~elevate_degree~3 - - +program~example3_surface->proc~elevate_degree~3 + + @@ -723,7 +789,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/export_xc.html b/proc/export_xc.html index 44d4a60ce..7fd5d508f 100644 --- a/proc/export_xc.html +++ b/proc/export_xc.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_volume

                          +

                          nurbs_curve

                          Arguments

                          - - class(nurbs_curve), + + class(nurbs_surface), intent(inout) @@ -173,7 +173,22 @@

                          Arguments

                          - + + integer, + intent(in) + + ::dir + +
                          + integer, intent(in)
                          @@ -159,7 +159,7 @@

                          Arguments

                          - class(nurbs_volume), + class(nurbs_curve), intent(in) @@ -201,91 +201,91 @@

                          Calls

                          - - + + proc~~export_xc~~CallsGraph - + proc~export_xc - -nurbs_volume%export_Xc + +nurbs_curve%export_Xc proc~cmp_elem_xc_vis - - -nurbs_volume%cmp_elem_Xc_vis + + +nurbs_curve%cmp_elem_Xc_vis proc~export_xc->proc~cmp_elem_xc_vis - - + + interface~elemconn_c0 - -elemConn_C0 + +elemConn_C0 proc~cmp_elem_xc_vis->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,121 +385,91 @@

                          Called by

                          - - + + proc~~export_xc~~CalledByGraph - + proc~export_xc - -nurbs_volume%export_Xc + +nurbs_curve%export_Xc - + -program~example3_volume - - -example3_volume +program~example1_curve + + +example1_curve - + -program~example3_volume->proc~export_xc - - +program~example1_curve->proc~export_xc + + - + -program~example_nurbs_volume - - -example_nurbs_volume +program~example_nurbs_curve + + +example_nurbs_curve - + -program~example_nurbs_volume->proc~export_xc - - +program~example_nurbs_curve->proc~export_xc + + - + -program~example_put_to_nurbs - - -example_put_to_nurbs +program~shape_c_1d + + +shape_C_1d - + -program~example_put_to_nurbs->proc~export_xc - - +program~shape_c_1d->proc~export_xc + + - + -program~shape_c_3d - - -shape_C_3d +program~shape_circle + + +shape_circle - + -program~shape_c_3d->proc~export_xc - - +program~shape_circle->proc~export_xc + + - + -program~shape_half_ring_3d - - -shape_half_ring_3d +program~shape_half_circle + + +shape_half_circle - + -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 - - +program~shape_half_circle->proc~export_xc + + @@ -615,7 +585,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/export_xc~2.html b/proc/export_xc~2.html index 374484d74..998a19ac4 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_surface

                          +

                          nurbs_volume

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_surface), + + class(nurbs_volume), intent(in) @@ -210,14 +210,14 @@

                          Calls

                          proc~export_xc~2 -nurbs_surface%export_Xc +nurbs_volume%export_Xc proc~cmp_elem_xc_vis~2 - + -nurbs_surface%cmp_elem_Xc_vis +nurbs_volume%cmp_elem_Xc_vis @@ -385,106 +385,121 @@

                          Called by

                          - - + + proc~~export_xc~2~~CalledByGraph - + proc~export_xc~2 - -nurbs_surface%export_Xc + +nurbs_volume%export_Xc - + -program~example3_surface - - -example3_surface +program~example3_volume + + +example3_volume - + -program~example3_surface->proc~export_xc~2 - - +program~example3_volume->proc~export_xc~2 + + - + -program~example_nurbs_surface - - -example_nurbs_surface +program~example_nurbs_volume + + +example_nurbs_volume - + -program~example_nurbs_surface->proc~export_xc~2 - - +program~example_nurbs_volume->proc~export_xc~2 + + - + -program~shape_c_2d - - -shape_C_2d +program~example_put_to_nurbs + + +example_put_to_nurbs - + -program~shape_c_2d->proc~export_xc~2 - - +program~example_put_to_nurbs->proc~export_xc~2 + + - + -program~shape_half_ring_2d - - -shape_half_ring_2d +program~shape_c_3d + + +shape_C_3d - + -program~shape_half_ring_2d->proc~export_xc~2 - - +program~shape_c_3d->proc~export_xc~2 + + - + -program~shape_ring_2d - - -shape_ring_2d +program~shape_half_ring_3d + + +shape_half_ring_3d - + -program~shape_ring_2d->proc~export_xc~2 - - +program~shape_half_ring_3d->proc~export_xc~2 + + - + -program~shape_tetragon - - -shape_tetragon +program~shape_hexahedron + + +shape_hexahedron - + -program~shape_tetragon->proc~export_xc~2 - - +program~shape_hexahedron->proc~export_xc~2 + + + + + +program~shape_ring_3d + + +shape_ring_3d + + + + + +program~shape_ring_3d->proc~export_xc~2 + + @@ -600,7 +615,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/export_xc~3.html b/proc/export_xc~3.html index 816cc3a96..0cdf0f7e9 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_curve

                          +

                          nurbs_surface

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_curve), + + class(nurbs_surface), intent(in) @@ -201,91 +201,91 @@

                          Calls

                          - - + + proc~~export_xc~3~~CallsGraph - + proc~export_xc~3 - -nurbs_curve%export_Xc + +nurbs_surface%export_Xc proc~cmp_elem_xc_vis~3 - - -nurbs_curve%cmp_elem_Xc_vis + + +nurbs_surface%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,91 +385,106 @@

                          Called by

                          - - + + proc~~export_xc~3~~CalledByGraph - + proc~export_xc~3 - -nurbs_curve%export_Xc + +nurbs_surface%export_Xc - + -program~example1_curve - - -example1_curve +program~example3_surface + + +example3_surface - + -program~example1_curve->proc~export_xc~3 - - +program~example3_surface->proc~export_xc~3 + + - + -program~example_nurbs_curve - - -example_nurbs_curve +program~example_nurbs_surface + + +example_nurbs_surface - + -program~example_nurbs_curve->proc~export_xc~3 - - +program~example_nurbs_surface->proc~export_xc~3 + + - + -program~shape_c_1d - - -shape_C_1d +program~shape_c_2d + + +shape_C_2d - + -program~shape_c_1d->proc~export_xc~3 - - +program~shape_c_2d->proc~export_xc~3 + + - + -program~shape_circle - - -shape_circle +program~shape_half_ring_2d + + +shape_half_ring_2d - + -program~shape_circle->proc~export_xc~3 - - +program~shape_half_ring_2d->proc~export_xc~3 + + - + -program~shape_half_circle - - -shape_half_circle +program~shape_ring_2d + + +shape_ring_2d - + -program~shape_half_circle->proc~export_xc~3 - - +program~shape_ring_2d->proc~export_xc~3 + + + + + +program~shape_tetragon + + +shape_tetragon + + + + + +program~shape_tetragon->proc~export_xc~3 + + @@ -585,7 +600,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/export_xg.html b/proc/export_xg.html index bf2504475..4cc26ced6 100644 --- a/proc/export_xg.html +++ b/proc/export_xg.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_volume

                          +

                          nurbs_curve

                          Arguments

                          @@ -159,7 +159,7 @@

                          Arguments

                          - class(nurbs_volume), + class(nurbs_curve), intent(in) @@ -201,91 +201,91 @@

                          Calls

                          - - + + proc~~export_xg~~CallsGraph - + proc~export_xg - -nurbs_volume%export_Xg + +nurbs_curve%export_Xg proc~cmp_elem_xg_vis - - -nurbs_volume%cmp_elem_Xg_vis + + +nurbs_curve%cmp_elem_Xg_vis proc~export_xg->proc~cmp_elem_xg_vis - - + + interface~elemconn_c0 - -elemConn_C0 + +elemConn_C0 proc~cmp_elem_xg_vis->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,121 +385,91 @@

                          Called by

                          - - + + proc~~export_xg~~CalledByGraph - + proc~export_xg - -nurbs_volume%export_Xg + +nurbs_curve%export_Xg - + -program~example3_volume - - -example3_volume +program~example1_curve + + +example1_curve - + -program~example3_volume->proc~export_xg - - +program~example1_curve->proc~export_xg + + - + -program~example_nurbs_volume - - -example_nurbs_volume +program~example_nurbs_curve + + +example_nurbs_curve - + -program~example_nurbs_volume->proc~export_xg - - +program~example_nurbs_curve->proc~export_xg + + - + -program~example_put_to_nurbs - - -example_put_to_nurbs +program~shape_c_1d + + +shape_C_1d - + -program~example_put_to_nurbs->proc~export_xg - - +program~shape_c_1d->proc~export_xg + + - + -program~shape_c_3d - - -shape_C_3d +program~shape_circle + + +shape_circle - + -program~shape_c_3d->proc~export_xg - - +program~shape_circle->proc~export_xg + + - + -program~shape_half_ring_3d - - -shape_half_ring_3d +program~shape_half_circle + + +shape_half_circle - + -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 - - +program~shape_half_circle->proc~export_xg + + @@ -615,7 +585,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/export_xg~2.html b/proc/export_xg~2.html index 63b146fda..8d79401d7 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_surface

                          +

                          nurbs_volume

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_surface), + + class(nurbs_volume), intent(in) @@ -210,14 +210,14 @@

                          Calls

                          proc~export_xg~2 -nurbs_surface%export_Xg +nurbs_volume%export_Xg proc~cmp_elem_xg_vis~2 - + -nurbs_surface%cmp_elem_Xg_vis +nurbs_volume%cmp_elem_Xg_vis @@ -385,106 +385,121 @@

                          Called by

                          - - + + proc~~export_xg~2~~CalledByGraph - + proc~export_xg~2 - -nurbs_surface%export_Xg + +nurbs_volume%export_Xg - + -program~example3_surface - - -example3_surface +program~example3_volume + + +example3_volume - + -program~example3_surface->proc~export_xg~2 - - +program~example3_volume->proc~export_xg~2 + + - + -program~example_nurbs_surface - - -example_nurbs_surface +program~example_nurbs_volume + + +example_nurbs_volume - + -program~example_nurbs_surface->proc~export_xg~2 - - +program~example_nurbs_volume->proc~export_xg~2 + + - + -program~shape_c_2d - - -shape_C_2d +program~example_put_to_nurbs + + +example_put_to_nurbs - + -program~shape_c_2d->proc~export_xg~2 - - +program~example_put_to_nurbs->proc~export_xg~2 + + - + -program~shape_half_ring_2d - - -shape_half_ring_2d +program~shape_c_3d + + +shape_C_3d - + -program~shape_half_ring_2d->proc~export_xg~2 - - +program~shape_c_3d->proc~export_xg~2 + + - + -program~shape_ring_2d - - -shape_ring_2d +program~shape_half_ring_3d + + +shape_half_ring_3d - + -program~shape_ring_2d->proc~export_xg~2 - - +program~shape_half_ring_3d->proc~export_xg~2 + + - + -program~shape_tetragon - - -shape_tetragon +program~shape_hexahedron + + +shape_hexahedron - + -program~shape_tetragon->proc~export_xg~2 - - +program~shape_hexahedron->proc~export_xg~2 + + + + + +program~shape_ring_3d + + +shape_ring_3d + + + + + +program~shape_ring_3d->proc~export_xg~2 + + @@ -600,7 +615,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/export_xg~3.html b/proc/export_xg~3.html index 3289b0c5f..6d3920980 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_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~3~~CallsGraph - + proc~export_xg~3 - -nurbs_curve%export_Xg + +nurbs_surface%export_Xg proc~cmp_elem_xg_vis~3 - - -nurbs_curve%cmp_elem_Xg_vis + + +nurbs_surface%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,91 +385,106 @@

                          Called by

                          - - + + proc~~export_xg~3~~CalledByGraph - + proc~export_xg~3 - -nurbs_curve%export_Xg + +nurbs_surface%export_Xg - + -program~example1_curve - - -example1_curve +program~example3_surface + + +example3_surface - + -program~example1_curve->proc~export_xg~3 - - +program~example3_surface->proc~export_xg~3 + + - + -program~example_nurbs_curve - - -example_nurbs_curve +program~example_nurbs_surface + + +example_nurbs_surface - + -program~example_nurbs_curve->proc~export_xg~3 - - +program~example_nurbs_surface->proc~export_xg~3 + + - + -program~shape_c_1d - - -shape_C_1d +program~shape_c_2d + + +shape_C_2d - + -program~shape_c_1d->proc~export_xg~3 - - +program~shape_c_2d->proc~export_xg~3 + + - + -program~shape_circle - - -shape_circle +program~shape_half_ring_2d + + +shape_half_ring_2d - + -program~shape_circle->proc~export_xg~3 - - +program~shape_half_ring_2d->proc~export_xg~3 + + - + -program~shape_half_circle - - -shape_half_circle +program~shape_ring_2d + + +shape_ring_2d - + -program~shape_half_circle->proc~export_xg~3 - - +program~shape_ring_2d->proc~export_xg~3 + + + + + +program~shape_tetragon + + +shape_tetragon + + + + + +program~shape_tetragon->proc~export_xg~3 + + @@ -585,7 +600,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/factln.html b/proc/factln.html index d681cd714..930162b37 100644 --- a/proc/factln.html +++ b/proc/factln.html @@ -235,9 +235,9 @@

                          Called by

                          proc~elevate_degree - - -nurbs_volume%elevate_degree + + +nurbs_curve%elevate_degree @@ -250,9 +250,9 @@

                          Called by

                          proc~elevate_degree~2 - + -nurbs_surface%elevate_degree +nurbs_volume%elevate_degree @@ -265,9 +265,9 @@

                          Called by

                          proc~elevate_degree~3 - - -nurbs_curve%elevate_degree + + +nurbs_surface%elevate_degree @@ -281,46 +281,46 @@

                          Called by

                          program~example1_curve - -example1_curve + +example1_curve - - -program~example1_curve->proc~elevate_degree~3 - - + + +program~example1_curve->proc~elevate_degree + + program~example3_surface - -example3_surface + +example3_surface - - -program~example3_surface->proc~elevate_degree~2 - - + + +program~example3_surface->proc~elevate_degree~3 + + program~example3_volume - -example3_volume + +example3_volume - - -program~example3_volume->proc~elevate_degree - - + + +program~example3_volume->proc~elevate_degree~2 + + @@ -440,7 +440,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/finalize.html b/proc/finalize.html index e83d54ea5..2237fa1a3 100644 --- a/proc/finalize.html +++ b/proc/finalize.html @@ -78,20 +78,20 @@

                          finalize
                        • 16 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_volume

                          +

                          nurbs_curve

                          Arguments

                          @@ -159,7 +159,7 @@

                          Arguments

                          - class(nurbs_volume), + class(nurbs_curve), intent(inout) @@ -186,157 +186,127 @@

                          Called by

                          - - + + proc~~finalize~~CalledByGraph - + proc~finalize - -nurbs_volume%finalize + +nurbs_curve%finalize proc~nearest_point2 - - -nurbs_volume%nearest_point2 + + +nurbs_curve%nearest_point2 proc~nearest_point2->proc~finalize - - + + - + -program~example3_volume - - -example3_volume +program~example1_curve + + +example1_curve - + -program~example3_volume->proc~finalize - - +program~example1_curve->proc~finalize + + - + -program~example_nurbs_volume - - -example_nurbs_volume +program~example_nurbs_curve + + +example_nurbs_curve - + -program~example_nurbs_volume->proc~finalize - - +program~example_nurbs_curve->proc~finalize + + - + -program~example_put_to_nurbs - - -example_put_to_nurbs +program~nearest_point_1d + + +nearest_point_1d - + -program~example_put_to_nurbs->proc~finalize - - +program~nearest_point_1d->proc~finalize + + - + + +program~nearest_point_1d->proc~nearest_point2 + + + + -program~nearest_point_3d - - -nearest_point_3d +program~shape_c_1d + + +shape_C_1d - + -program~nearest_point_3d->proc~finalize - - - - - -program~nearest_point_3d->proc~nearest_point2 - - +program~shape_c_1d->proc~finalize + + - + -program~shape_c_3d - - -shape_C_3d +program~shape_circle + + +shape_circle - + -program~shape_c_3d->proc~finalize - - +program~shape_circle->proc~finalize + + - + -program~shape_half_ring_3d - - -shape_half_ring_3d +program~shape_half_circle + + +shape_half_circle - + -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 - - +program~shape_half_circle->proc~finalize + + @@ -452,7 +422,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/finalize~2.html b/proc/finalize~2.html index 66451ad91..d230046bb 100644 --- a/proc/finalize~2.html +++ b/proc/finalize~2.html @@ -78,20 +78,20 @@

                          finalize
                        • 14 statements + title=" 0.2% of total for procedures.">16 statements
                        • - Source File + Source File
                        • @@ -143,7 +143,7 @@

                          private pure subroutine finalize(this)

                          Type Bound

                          -

                          nurbs_surface

                          +

                          nurbs_volume

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_surface), + + class(nurbs_volume), intent(inout) @@ -186,202 +186,157 @@

                          Called by

                          - - + + proc~~finalize~2~~CalledByGraph - + proc~finalize~2 - -nurbs_surface%finalize + +nurbs_volume%finalize proc~nearest_point2~2 - - -nurbs_surface%nearest_point2 + + +nurbs_volume%nearest_point2 proc~nearest_point2~2->proc~finalize~2 - - + + - + -program~example3_surface - - -example3_surface +program~example3_volume + + +example3_volume - + -program~example3_surface->proc~finalize~2 - - +program~example3_volume->proc~finalize~2 + + - + -program~example_nurbs_surface - - -example_nurbs_surface +program~example_nurbs_volume + + +example_nurbs_volume - + -program~example_nurbs_surface->proc~finalize~2 - - +program~example_nurbs_volume->proc~finalize~2 + + - + -program~example_ppm1 - - -example_ppm1 +program~example_put_to_nurbs + + +example_put_to_nurbs - + -program~example_ppm1->proc~finalize~2 - - +program~example_put_to_nurbs->proc~finalize~2 + + - + -program~example_ppm2 - - -example_ppm2 +program~nearest_point_3d + + +nearest_point_3d - + -program~example_ppm2->proc~finalize~2 - - +program~nearest_point_3d->proc~finalize~2 + + - + + +program~nearest_point_3d->proc~nearest_point2~2 + + + + -program~example_ppm3 - - -example_ppm3 +program~shape_c_3d + + +shape_C_3d - + -program~example_ppm3->proc~finalize~2 - - +program~shape_c_3d->proc~finalize~2 + + - + -program~nearest_point_2d - - -nearest_point_2d +program~shape_half_ring_3d + + +shape_half_ring_3d - + -program~nearest_point_2d->proc~finalize~2 - - - - - -program~nearest_point_2d->proc~nearest_point2~2 - - +program~shape_half_ring_3d->proc~finalize~2 + + - + -program~nearest_point_2d_bench - - -nearest_point_2d_bench +program~shape_hexahedron + + +shape_hexahedron - + -program~nearest_point_2d_bench->proc~finalize~2 - - +program~shape_hexahedron->proc~finalize~2 + + - + -program~shape_c_2d - - -shape_C_2d +program~shape_ring_3d + + +shape_ring_3d - + -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 - - +program~shape_ring_3d->proc~finalize~2 + + @@ -497,7 +452,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/finalize~3.html b/proc/finalize~3.html index 0d75bb5ae..017d7fa21 100644 --- a/proc/finalize~3.html +++ b/proc/finalize~3.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

                          @@ -158,8 +158,8 @@

                          Arguments

                          @@ -201,7 +201,7 @@

                          Arguments

                          @@ -250,9 +250,9 @@

                          Called by

                          proc~insert_knots - - -nurbs_volume%insert_knots + + +nurbs_curve%insert_knots @@ -265,9 +265,9 @@

                          Called by

                          proc~insert_knots~2 - + -nurbs_surface%insert_knots +nurbs_volume%insert_knots @@ -280,9 +280,9 @@

                          Called by

                          proc~insert_knots~3 - - -nurbs_curve%insert_knots + + +nurbs_surface%insert_knots @@ -295,9 +295,9 @@

                          Called by

                          proc~remove_knots - - -nurbs_volume%remove_knots + + +nurbs_curve%remove_knots @@ -310,9 +310,9 @@

                          Called by

                          proc~remove_knots~2 - + -nurbs_surface%remove_knots +nurbs_volume%remove_knots @@ -325,9 +325,9 @@

                          Called by

                          proc~remove_knots~3 - - -nurbs_curve%remove_knots + + +nurbs_surface%remove_knots @@ -341,64 +341,64 @@

                          Called by

                          program~example1_curve - -example1_curve + +example1_curve - - -program~example1_curve->proc~insert_knots~3 - - + + +program~example1_curve->proc~insert_knots + + - - -program~example1_curve->proc~remove_knots~3 - - + + +program~example1_curve->proc~remove_knots + + program~example3_surface - -example3_surface + +example3_surface - - -program~example3_surface->proc~insert_knots~2 - - + + +program~example3_surface->proc~insert_knots~3 + + - - -program~example3_surface->proc~remove_knots~2 - - + + +program~example3_surface->proc~remove_knots~3 + + program~example3_volume - -example3_volume + +example3_volume - - -program~example3_volume->proc~insert_knots - - + + +program~example3_volume->proc~insert_knots~2 + + - - -program~example3_volume->proc~remove_knots - - + + +program~example3_volume->proc~remove_knots~2 + + @@ -514,7 +514,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/gauss_legendre_1d.html b/proc/gauss_legendre_1d.html index 4be5a18a9..51f595893 100644 --- a/proc/gauss_legendre_1d.html +++ b/proc/gauss_legendre_1d.html @@ -171,7 +171,7 @@

                          Arguments

                          @@ -375,9 +375,9 @@

                          Called by

                          proc~ansatz - - -nurbs_volume%ansatz + + +nurbs_curve%ansatz @@ -390,9 +390,9 @@

                          Called by

                          proc~ansatz~2 - + -nurbs_surface%ansatz +nurbs_volume%ansatz @@ -405,9 +405,9 @@

                          Called by

                          proc~ansatz~3 - - -nurbs_curve%ansatz + + +nurbs_surface%ansatz @@ -421,91 +421,91 @@

                          Called by

                          proc~cmp_area - -nurbs_surface%cmp_area + +nurbs_surface%cmp_area - - -proc~cmp_area->proc~ansatz~2 - - + + +proc~cmp_area->proc~ansatz~3 + + proc~cmp_length - -nurbs_curve%cmp_length + +nurbs_curve%cmp_length - - -proc~cmp_length->proc~ansatz~3 - - + + +proc~cmp_length->proc~ansatz + + proc~cmp_volume - -nurbs_volume%cmp_volume + +nurbs_volume%cmp_volume - - -proc~cmp_volume->proc~ansatz - - + + +proc~cmp_volume->proc~ansatz~2 + + program~compute_area - -compute_area + +compute_area program~compute_area->proc~cmp_area - - + + program~compute_length - -compute_length + +compute_length program~compute_length->proc~cmp_length - - + + program~compute_volume - -compute_volume + +compute_volume program~compute_volume->proc~cmp_volume - - + + @@ -625,7 +625,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/gauss_legendre_2d.html b/proc/gauss_legendre_2d.html index 9c3daa05a..723adf23c 100644 --- a/proc/gauss_legendre_2d.html +++ b/proc/gauss_legendre_2d.html @@ -186,7 +186,7 @@

                          Arguments

                          @@ -450,9 +450,9 @@

                          Called by

                          proc~ansatz - - -nurbs_volume%ansatz + + +nurbs_curve%ansatz @@ -465,9 +465,9 @@

                          Called by

                          proc~ansatz~2 - + -nurbs_surface%ansatz +nurbs_volume%ansatz @@ -480,9 +480,9 @@

                          Called by

                          proc~ansatz~3 - - -nurbs_curve%ansatz + + +nurbs_surface%ansatz @@ -496,91 +496,91 @@

                          Called by

                          proc~cmp_area - -nurbs_surface%cmp_area + +nurbs_surface%cmp_area - - -proc~cmp_area->proc~ansatz~2 - - + + +proc~cmp_area->proc~ansatz~3 + + proc~cmp_length - -nurbs_curve%cmp_length + +nurbs_curve%cmp_length - - -proc~cmp_length->proc~ansatz~3 - - + + +proc~cmp_length->proc~ansatz + + proc~cmp_volume - -nurbs_volume%cmp_volume + +nurbs_volume%cmp_volume - - -proc~cmp_volume->proc~ansatz - - + + +proc~cmp_volume->proc~ansatz~2 + + program~compute_area - -compute_area + +compute_area program~compute_area->proc~cmp_area - - + + program~compute_length - -compute_length + +compute_length program~compute_length->proc~cmp_length - - + + program~compute_volume - -compute_volume + +compute_volume program~compute_volume->proc~cmp_volume - - + + @@ -700,7 +700,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/gauss_legendre_3d.html b/proc/gauss_legendre_3d.html index 2e6c54d2a..5c46bf803 100644 --- a/proc/gauss_legendre_3d.html +++ b/proc/gauss_legendre_3d.html @@ -201,7 +201,7 @@

                          Arguments

                          @@ -465,9 +465,9 @@

                          Called by

                          proc~ansatz - - -nurbs_volume%ansatz + + +nurbs_curve%ansatz @@ -480,9 +480,9 @@

                          Called by

                          proc~ansatz~2 - + -nurbs_surface%ansatz +nurbs_volume%ansatz @@ -495,9 +495,9 @@

                          Called by

                          proc~ansatz~3 - - -nurbs_curve%ansatz + + +nurbs_surface%ansatz @@ -511,91 +511,91 @@

                          Called by

                          proc~cmp_area - -nurbs_surface%cmp_area + +nurbs_surface%cmp_area - - -proc~cmp_area->proc~ansatz~2 - - + + +proc~cmp_area->proc~ansatz~3 + + proc~cmp_length - -nurbs_curve%cmp_length + +nurbs_curve%cmp_length - - -proc~cmp_length->proc~ansatz~3 - - + + +proc~cmp_length->proc~ansatz + + proc~cmp_volume - -nurbs_volume%cmp_volume + +nurbs_volume%cmp_volume - - -proc~cmp_volume->proc~ansatz - - + + +proc~cmp_volume->proc~ansatz~2 + + program~compute_area - -compute_area + +compute_area program~compute_area->proc~cmp_area - - + + program~compute_length - -compute_length + +compute_length program~compute_length->proc~cmp_length - - + + program~compute_volume - -compute_volume + +compute_volume program~compute_volume->proc~cmp_volume - - + + @@ -715,7 +715,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/generate_xc.html b/proc/generate_xc.html index 30d19db25..c9fdcf6bb 100644 --- a/proc/generate_xc.html +++ b/proc/generate_xc.html @@ -77,20 +77,20 @@

                          generate_Xc
                        • 16 statements + title=" 0.3% of total for procedures.">18 statements
                        • - Source File + Source File
                        • @@ -136,7 +136,7 @@

                          Contents

                          -

                          function generate_Xc(L) result(control_points) +

                          function generate_Xc(num_coils, radius, height, num_points_per_coil) result(control_points)

                          @@ -155,7 +155,22 @@

                          Arguments

                          + + + + + + + + @@ -163,7 +178,37 @@

                          Arguments

                          - + + + + + + + + + + + + + + + + + @@ -190,31 +235,31 @@

                          Called by

                          - + proc~~generate_xc~~CalledByGraph - + proc~generate_xc - -generate_Xc + +generate_Xc - + -program~example_nurbs_volume - - -example_nurbs_volume +program~example_nurbs_curve + + +example_nurbs_curve - + -program~example_nurbs_volume->proc~generate_xc - - +program~example_nurbs_curve->proc~generate_xc + + @@ -330,7 +375,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/generate_xc~2.html b/proc/generate_xc~2.html index 3e7fc84a5..199926227 100644 --- a/proc/generate_xc~2.html +++ b/proc/generate_xc~2.html @@ -360,7 +360,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/generate_xc~3.html b/proc/generate_xc~3.html index 718831e94..d01cba6be 100644 --- a/proc/generate_xc~3.html +++ b/proc/generate_xc~3.html @@ -77,20 +77,20 @@

                          generate_Xc
                        • 18 statements + title=" 0.3% of total for procedures.">19 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(num_rows, num_cols, peak_height) result(control_points)

                          @@ -155,7 +155,7 @@

                          Arguments

                          @@ -163,29 +163,29 @@

                          Arguments

                          - + - + @@ -193,22 +193,7 @@

                          Arguments

                          - - - - - - - - - + @@ -235,31 +220,31 @@

                          Called by

                          - + proc~~generate_xc~3~~CalledByGraph - + proc~generate_xc~3 - -generate_Xc + +generate_Xc - + -program~example_nurbs_curve - - -example_nurbs_curve +program~example_nurbs_surface + + +example_nurbs_surface - + -program~example_nurbs_curve->proc~generate_xc~3 - - +program~example_nurbs_surface->proc~generate_xc~3 + + @@ -375,7 +360,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/generate_xc~4.html b/proc/generate_xc~4.html index 99b9cd695..cb6892c8c 100644 --- a/proc/generate_xc~4.html +++ b/proc/generate_xc~4.html @@ -77,20 +77,20 @@

                          generate_Xc
                        • 19 statements + title=" 0.2% of total for procedures.">16 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(L) result(control_points)

                          @@ -155,37 +155,7 @@

                          Arguments

                          - - - - - - - - - - - - - - - - @@ -193,7 +163,7 @@

                          Arguments

                          - + @@ -220,31 +190,31 @@

                          Called by

                          - + proc~~generate_xc~4~~CalledByGraph - + proc~generate_xc~4 - -generate_Xc + +generate_Xc - + -program~example_nurbs_surface - - -example_nurbs_surface +program~example3_volume + + +example3_volume - + -program~example_nurbs_surface->proc~generate_xc~4 - - +program~example3_volume->proc~generate_xc~4 + + @@ -360,7 +330,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/generate_xc~5.html b/proc/generate_xc~5.html index c7829a6e6..a4832a063 100644 --- a/proc/generate_xc~5.html +++ b/proc/generate_xc~5.html @@ -82,15 +82,15 @@

                          generate_Xc
                        • - Source File + Source File
                        • @@ -155,7 +155,7 @@

                          Arguments

                          @@ -190,31 +190,31 @@

                          Called by

                          - + proc~~generate_xc~5~~CalledByGraph - + proc~generate_xc~5 - -generate_Xc + +generate_Xc - + -program~example3_volume - - -example3_volume +program~example_nurbs_volume + + +example_nurbs_volume - + -program~example3_volume->proc~generate_xc~5 - - +program~example_nurbs_volume->proc~generate_xc~5 + + @@ -330,7 +330,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/get_continuity.html b/proc/get_continuity.html index 8677da0ca..42f20dd24 100644 --- a/proc/get_continuity.html +++ b/proc/get_continuity.html @@ -78,20 +78,20 @@

                          get_continuity
                        • 26 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_volume

                          +

                          nurbs_curve

                          Arguments

                          - - class(nurbs_curve), + + class(nurbs_surface), intent(inout) @@ -186,127 +186,202 @@

                          Called by

                          - - + + proc~~finalize~3~~CalledByGraph - + proc~finalize~3 - -nurbs_curve%finalize + +nurbs_surface%finalize proc~nearest_point2~3 - - -nurbs_curve%nearest_point2 + + +nurbs_surface%nearest_point2 proc~nearest_point2~3->proc~finalize~3 - - + + - + -program~example1_curve - - -example1_curve +program~example3_surface + + +example3_surface - + -program~example1_curve->proc~finalize~3 - - +program~example3_surface->proc~finalize~3 + + - + -program~example_nurbs_curve - - -example_nurbs_curve +program~example_nurbs_surface + + +example_nurbs_surface - + -program~example_nurbs_curve->proc~finalize~3 - - +program~example_nurbs_surface->proc~finalize~3 + + - + -program~nearest_point_1d - - -nearest_point_1d +program~example_ppm1 + + +example_ppm1 - + -program~nearest_point_1d->proc~finalize~3 - - +program~example_ppm1->proc~finalize~3 + + - - -program~nearest_point_1d->proc~nearest_point2~3 - - - - + -program~shape_c_1d - - -shape_C_1d +program~example_ppm2 + + +example_ppm2 - + -program~shape_c_1d->proc~finalize~3 - - +program~example_ppm2->proc~finalize~3 + + - + -program~shape_circle - - -shape_circle +program~example_ppm3 + + +example_ppm3 - + -program~shape_circle->proc~finalize~3 - - +program~example_ppm3->proc~finalize~3 + + - + -program~shape_half_circle - - -shape_half_circle +program~nearest_point_2d + + +nearest_point_2d - + -program~shape_half_circle->proc~finalize~3 - - +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 + + @@ -422,7 +497,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/findspan.html b/proc/findspan.html index 1a264fd05..622219f2e 100644 --- a/proc/findspan.html +++ b/proc/findspan.html @@ -171,7 +171,7 @@

                          Arguments

                          - + integer, intent(in)
                          - + real(kind=rk), intent(in),
                          - + integer, intent(in)
                          - + integer, intent(in)
                          - + integer, intent(in)
                          - + + integer, + intent(in) + + ::num_coils + +
                          + real(kind=rk), intent(in) ::Lradius + +
                          + + real(kind=rk), + intent(in) + + ::height + +
                          + + integer, + intent(in) + + ::num_points_per_coil
                          - + integer, intent(in) ::num_coilsnum_rows
                          - - real(kind=rk), + + integer, intent(in) ::radiusnum_cols
                          - + real(kind=rk), intent(in) ::height - -
                          - - integer, - intent(in) - - ::num_points_per_coilpeak_height
                          - - integer, - intent(in) - - ::num_rows - -
                          - - integer, - intent(in) - - ::num_cols - -
                          - + real(kind=rk), intent(in) ::peak_heightL
                          - + real(kind=rk), intent(in)
                          @@ -159,7 +159,7 @@

                          Arguments

                          - - - - - - - - @@ -208,61 +193,61 @@

                          Calls

                          - + proc~~get_continuity~~CallsGraph - + proc~get_continuity - -nurbs_volume%get_continuity + +nurbs_curve%get_continuity interface~compute_multiplicity - -compute_multiplicity + +compute_multiplicity proc~get_continuity->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-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/get_continuity~2.html b/proc/get_continuity~2.html index 05ef09d7f..cd699573e 100644 --- a/proc/get_continuity~2.html +++ b/proc/get_continuity~2.html @@ -78,20 +78,20 @@

                          get_continuity
                        • 20 statements + title=" 0.4% of total for procedures.">26 statements
                        • - Source File + Source File
                        • @@ -143,7 +143,7 @@

                          private pure function get_continuity(this, dir) result(c)

                          Type Bound

                          -

                          nurbs_surface

                          +

                          nurbs_volume

                          Arguments

                          - class(nurbs_volume), + class(nurbs_curve), intent(in) @@ -169,21 +169,6 @@

                          Arguments

                          this -
                          - - integer, - intent(in) - - ::dir -
                          @@ -158,8 +158,8 @@

                          Arguments

                          @@ -217,7 +217,7 @@

                          Calls

                          proc~get_continuity~2 -nurbs_surface%get_continuity +nurbs_volume%get_continuity @@ -378,7 +378,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/get_continuity~3.html b/proc/get_continuity~3.html index 0a8edb5ec..8fe2647cf 100644 --- a/proc/get_continuity~3.html +++ b/proc/get_continuity~3.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_volume), intent(in) @@ -173,7 +173,7 @@

                          Arguments

                          - + integer, intent(in)
                          @@ -158,8 +158,8 @@

                          Arguments

                          + + + + + + + + @@ -193,61 +208,61 @@

                          Calls

                          - + proc~~get_continuity~3~~CallsGraph - + proc~get_continuity~3 - -nurbs_curve%get_continuity + +nurbs_surface%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 - - + + @@ -363,7 +378,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/get_degree.html b/proc/get_degree.html index 8a10f8a79..9a2c38956 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-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/get_degree_all.html b/proc/get_degree_all.html index 4fbb4445d..5b71c7844 100644 --- a/proc/get_degree_all.html +++ b/proc/get_degree_all.html @@ -158,7 +158,7 @@

                          Arguments

                          @@ -176,7 +176,7 @@

                          Arguments

                          Return Value - + integer, (3)

                          @@ -204,18 +204,18 @@

                          Called by

                          nurbs_volume%get_degree_all - + -none~get_degree - +none~get_degree~2 + nurbs_volume%get_degree - + -none~get_degree->proc~get_degree_all +none~get_degree~2->proc~get_degree_all @@ -228,9 +228,9 @@

                          Called by

                          - + -program~example3_volume->none~get_degree +program~example3_volume->none~get_degree~2 @@ -348,7 +348,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/get_degree_all~2.html b/proc/get_degree_all~2.html index d5cfecb98..9748457bf 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~2 - +none~get_degree~3 + nurbs_surface%get_degree - + -none~get_degree~2->proc~get_degree_all~2 +none~get_degree~3->proc~get_degree_all~2 @@ -228,9 +228,9 @@

                          Called by

                          - + -program~example3_surface->none~get_degree~2 +program~example3_surface->none~get_degree~3 @@ -348,7 +348,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/get_degree_dir.html b/proc/get_degree_dir.html index 01c627b30..7d00d5e73 100644 --- a/proc/get_degree_dir.html +++ b/proc/get_degree_dir.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_volume%get_degree_dir - + -none~get_degree - +none~get_degree~2 + nurbs_volume%get_degree - + -none~get_degree->proc~get_degree_dir +none~get_degree~2->proc~get_degree_dir @@ -243,9 +243,9 @@

                          Called by

                          - + -program~example3_volume->none~get_degree +program~example3_volume->none~get_degree~2 @@ -363,7 +363,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/get_degree_dir~2.html b/proc/get_degree_dir~2.html index 5595a9dd3..9963d01f9 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~2 - +none~get_degree~3 + nurbs_surface%get_degree - + -none~get_degree~2->proc~get_degree_dir~2 +none~get_degree~3->proc~get_degree_dir~2 @@ -243,9 +243,9 @@

                          Called by

                          - + -program~example3_surface->none~get_degree~2 +program~example3_surface->none~get_degree~3 @@ -363,7 +363,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/get_elem.html b/proc/get_elem.html index b6a434708..3a012c21a 100644 --- a/proc/get_elem.html +++ b/proc/get_elem.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_volume

                          +

                          nurbs_curve

                          Arguments

                          - - class(nurbs_curve), + + class(nurbs_surface), intent(in) @@ -169,6 +169,21 @@

                          Arguments

                          this +
                          + + integer, + intent(in) + + ::dir +
                          - + class(nurbs_curve), intent(in)
                          - + class(nurbs_volume), intent(in)
                          - + class(nurbs_surface), intent(in)
                          - + class(nurbs_volume), intent(in)
                          - + integer, intent(in)
                          - + class(nurbs_surface), intent(in)
                          - + integer, intent(in)
                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_volume), + + class(nurbs_curve), intent(in) @@ -212,7 +212,7 @@

                          Return Value

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/get_elem_xc_vis.html b/proc/get_elem_xc_vis.html index 2a3e5fd70..dd5b76523 100644 --- a/proc/get_elem_xc_vis.html +++ b/proc/get_elem_xc_vis.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_volume

                          +

                          nurbs_curve

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_volume), + + class(nurbs_curve), intent(in) @@ -212,7 +212,7 @@

                          Return Value

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/get_elem_xc_vis~2.html b/proc/get_elem_xc_vis~2.html index 4ec4f2469..6e711857e 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_surface

                          +

                          nurbs_volume

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_surface), + + class(nurbs_volume), intent(in) @@ -176,7 +176,7 @@

                          Arguments

                          Return Value - + integer, allocatable, (:,:)

                          @@ -212,7 +212,7 @@

                          Return Value

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/get_elem_xc_vis~3.html b/proc/get_elem_xc_vis~3.html index 93fb2ea58..bc0b0249f 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_curve

                          +

                          nurbs_surface

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_curve), + + class(nurbs_surface), intent(in) @@ -212,7 +212,7 @@

                          Return Value

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/get_elem_xg_vis.html b/proc/get_elem_xg_vis.html index 15e7c603e..3004df526 100644 --- a/proc/get_elem_xg_vis.html +++ b/proc/get_elem_xg_vis.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_volume

                          +

                          nurbs_curve

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_volume), + + class(nurbs_curve), intent(in) @@ -212,7 +212,7 @@

                          Return Value

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/get_elem_xg_vis~2.html b/proc/get_elem_xg_vis~2.html index 6e5479fa4..5945c5f55 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_surface

                          +

                          nurbs_volume

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_surface), + + class(nurbs_volume), intent(in) @@ -176,7 +176,7 @@

                          Arguments

                          Return Value - + integer, allocatable, (:,:)

                          @@ -212,7 +212,7 @@

                          Return Value

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/get_elem_xg_vis~3.html b/proc/get_elem_xg_vis~3.html index 5f1ec06c3..e7157c8c8 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_curve

                          +

                          nurbs_surface

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_curve), + + class(nurbs_surface), intent(in) @@ -212,7 +212,7 @@

                          Return Value

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/get_elem~2.html b/proc/get_elem~2.html index 34f8699f4..c21bf3351 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_surface

                          +

                          nurbs_volume

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_surface), + + class(nurbs_volume), intent(in) @@ -176,7 +176,7 @@

                          Arguments

                          Return Value - + integer, allocatable, (:,:)

                          @@ -212,7 +212,7 @@

                          Return Value

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/get_elem~3.html b/proc/get_elem~3.html index 98f8195be..e545ae324 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_curve

                          +

                          nurbs_surface

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_curve), + + class(nurbs_surface), intent(in) @@ -212,7 +212,7 @@

                          Return Value

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/get_knot_all.html b/proc/get_knot_all.html index a9f1647d2..e31264da1 100644 --- a/proc/get_knot_all.html +++ b/proc/get_knot_all.html @@ -78,20 +78,20 @@

                          get_knot_all
                        • 26 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_volume

                          +

                          nurbs_curve

                          Arguments

                          @@ -159,7 +159,7 @@

                          Arguments

                          - - - - - - - - @@ -191,7 +176,7 @@

                          Arguments

                          Return Value - + real(kind=rk), allocatable, (:)

                          @@ -208,147 +193,80 @@

                          Called by

                          - - + + proc~~get_knot_all~~CalledByGraph - + proc~get_knot_all - -nurbs_volume%get_knot_all + +nurbs_curve%get_knot_all none~get_knot - - -nurbs_volume%get_knot + + +nurbs_curve%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 + + +nurbs_curve%modify_Wc - + proc~modify_wc->none~get_knot - - + + - + proc~modify_xc - - -nurbs_volume%modify_Xc + + +nurbs_curve%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~example1_curve + + +example1_curve - - -program~example3_volume->none~get_knot - - - - - -program~example3_volume->proc~elevate_degree - - - - - -program~example3_volume->proc~insert_knots - - - - - -program~example3_volume->proc~remove_knots - - + + +program~example1_curve->none~get_knot + + -
                          +

                          diff --git a/proc/get_knot_all~2.html b/proc/get_knot_all~2.html index 12a30a65e..e31155c78 100644 --- a/proc/get_knot_all~2.html +++ b/proc/get_knot_all~2.html @@ -78,20 +78,20 @@

                          get_knot_all
                        • 20 statements + title=" 0.4% of total for procedures.">26 statements
                        • - Source File + Source File
                        • @@ -143,7 +143,7 @@

                          private pure function get_knot_all(this, dir) result(knot)

                          Type Bound

                          -

                          nurbs_surface

                          +

                          nurbs_volume

                          Arguments

                          - class(nurbs_volume), + class(nurbs_curve), intent(in) @@ -169,21 +169,6 @@

                          Arguments

                          this -
                          - - integer, - intent(in) - - ::dir -
                          @@ -158,8 +158,8 @@

                          Arguments

                          @@ -191,7 +191,7 @@

                          Arguments

                          Return Value - + real(kind=rk), allocatable, (:)

                          @@ -217,14 +217,14 @@

                          Called by

                          proc~get_knot_all~2 -nurbs_surface%get_knot_all +nurbs_volume%get_knot_all none~get_knot~2 - + -nurbs_surface%get_knot +nurbs_volume%get_knot @@ -237,9 +237,9 @@

                          Called by

                          proc~elevate_degree~2 - + -nurbs_surface%elevate_degree +nurbs_volume%elevate_degree @@ -252,9 +252,9 @@

                          Called by

                          proc~insert_knots~2 - + -nurbs_surface%insert_knots +nurbs_volume%insert_knots @@ -267,9 +267,9 @@

                          Called by

                          proc~modify_wc~2 - + -nurbs_surface%modify_Wc +nurbs_volume%modify_Wc @@ -282,9 +282,9 @@

                          Called by

                          proc~modify_xc~2 - + -nurbs_surface%modify_Xc +nurbs_volume%modify_Xc @@ -297,9 +297,9 @@

                          Called by

                          proc~remove_knots~2 - + -nurbs_surface%remove_knots +nurbs_volume%remove_knots @@ -309,54 +309,39 @@

                          Called by

                          - + -program~example3_surface - +program~example3_volume + -example3_surface +example3_volume - + -program~example3_surface->none~get_knot~2 +program~example3_volume->none~get_knot~2 - + -program~example3_surface->proc~elevate_degree~2 +program~example3_volume->proc~elevate_degree~2 - + -program~example3_surface->proc~insert_knots~2 +program~example3_volume->proc~insert_knots~2 - - -program~example3_surface->proc~remove_knots~2 + + +program~example3_volume->proc~remove_knots~2 - - -program~example_ppm3 - - -example_ppm3 - - - - - -program~example_ppm3->proc~modify_xc~2 - - -
                          diff --git a/proc/get_knoti.html b/proc/get_knoti.html index d35629b8f..7a0ba181d 100644 --- a/proc/get_knoti.html +++ b/proc/get_knoti.html @@ -78,20 +78,20 @@

                          get_knoti
                        • 39 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_volume

                          +

                          nurbs_curve

                          Arguments

                          - - class(nurbs_surface), + + class(nurbs_volume), intent(in) @@ -173,7 +173,7 @@

                          Arguments

                          - + integer, intent(in)
                          @@ -159,7 +159,7 @@

                          Arguments

                          - - - - - - - - @@ -206,7 +191,7 @@

                          Arguments

                          Return Value - + real(kind=rk)

                          @@ -223,147 +208,80 @@

                          Called by

                          - - + + proc~~get_knoti~~CalledByGraph - + proc~get_knoti - -nurbs_volume%get_knoti + +nurbs_curve%get_knoti none~get_knot - - -nurbs_volume%get_knot + + +nurbs_curve%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 + + +nurbs_curve%modify_Wc - + proc~modify_wc->none~get_knot - - + + - + proc~modify_xc - - -nurbs_volume%modify_Xc + + +nurbs_curve%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~example1_curve + + +example1_curve - - -program~example3_volume->none~get_knot - - - - - -program~example3_volume->proc~elevate_degree - - - - - -program~example3_volume->proc~insert_knots - - - - - -program~example3_volume->proc~remove_knots - - + + +program~example1_curve->none~get_knot + + -
                          +

                          diff --git a/proc/get_knoti~2.html b/proc/get_knoti~2.html index 0f5839f83..1d26d5eea 100644 --- a/proc/get_knoti~2.html +++ b/proc/get_knoti~2.html @@ -78,20 +78,20 @@

                          get_knoti
                        • 29 statements + title=" 0.6% of total for procedures.">39 statements
                        • - Source File + Source File
                        • @@ -143,7 +143,7 @@

                          private pure function get_knoti(this, dir, i) result(knot)

                          Type Bound

                          -

                          nurbs_surface

                          +

                          nurbs_volume

                          Arguments

                          - class(nurbs_volume), + class(nurbs_curve), intent(in) @@ -173,22 +173,7 @@

                          Arguments

                          - - integer, - intent(in) - - ::dir - -
                          - + integer, intent(in)
                          @@ -158,8 +158,8 @@

                          Arguments

                          @@ -188,7 +188,7 @@

                          Arguments

                          @@ -206,7 +206,7 @@

                          Arguments

                          Return Value - + real(kind=rk)

                          @@ -232,14 +232,14 @@

                          Called by

                          proc~get_knoti~2 -nurbs_surface%get_knoti +nurbs_volume%get_knoti none~get_knot~2 - + -nurbs_surface%get_knot +nurbs_volume%get_knot @@ -252,9 +252,9 @@

                          Called by

                          proc~elevate_degree~2 - + -nurbs_surface%elevate_degree +nurbs_volume%elevate_degree @@ -267,9 +267,9 @@

                          Called by

                          proc~insert_knots~2 - + -nurbs_surface%insert_knots +nurbs_volume%insert_knots @@ -282,9 +282,9 @@

                          Called by

                          proc~modify_wc~2 - + -nurbs_surface%modify_Wc +nurbs_volume%modify_Wc @@ -297,9 +297,9 @@

                          Called by

                          proc~modify_xc~2 - + -nurbs_surface%modify_Xc +nurbs_volume%modify_Xc @@ -312,9 +312,9 @@

                          Called by

                          proc~remove_knots~2 - + -nurbs_surface%remove_knots +nurbs_volume%remove_knots @@ -324,54 +324,39 @@

                          Called by

                          - + -program~example3_surface - +program~example3_volume + -example3_surface +example3_volume - + -program~example3_surface->none~get_knot~2 +program~example3_volume->none~get_knot~2 - + -program~example3_surface->proc~elevate_degree~2 +program~example3_volume->proc~elevate_degree~2 - + -program~example3_surface->proc~insert_knots~2 +program~example3_volume->proc~insert_knots~2 - - -program~example3_surface->proc~remove_knots~2 + + +program~example3_volume->proc~remove_knots~2 - - -program~example_ppm3 - - -example_ppm3 - - - - - -program~example_ppm3->proc~modify_xc~2 - - -
                          diff --git a/proc/get_multiplicity.html b/proc/get_multiplicity.html index 785fb244c..27fa2fbd2 100644 --- a/proc/get_multiplicity.html +++ b/proc/get_multiplicity.html @@ -78,20 +78,20 @@

                          get_multiplicity
                        • 26 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_volume

                          +

                          nurbs_curve

                          Arguments

                          - - class(nurbs_surface), + + class(nurbs_volume), intent(in) @@ -173,7 +173,7 @@

                          Arguments

                          - + integer, intent(in)
                          - + integer, intent(in)
                          @@ -159,7 +159,7 @@

                          Arguments

                          - - - - - - - - @@ -191,7 +176,7 @@

                          Arguments

                          Return Value - + integer, allocatable, (:)

                          @@ -208,61 +193,61 @@

                          Calls

                          - + proc~~get_multiplicity~~CallsGraph - + proc~get_multiplicity - -nurbs_volume%get_multiplicity + +nurbs_curve%get_multiplicity interface~compute_multiplicity - -compute_multiplicity + +compute_multiplicity proc~get_multiplicity->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,439 +343,409 @@

                          Called by

                          - - + + proc~~get_multiplicity~~CalledByGraph - + proc~get_multiplicity - -nurbs_volume%get_multiplicity + +nurbs_curve%get_multiplicity proc~cmp_degree - - -nurbs_volume%cmp_degree + + +nurbs_curve%cmp_degree proc~cmp_degree->proc~get_multiplicity - - + + proc~cmp_elem - - -nurbs_volume%cmp_elem + + +nurbs_curve%cmp_elem proc~cmp_elem->proc~get_multiplicity - - + + proc~ansatz - - -nurbs_volume%ansatz + + +nurbs_curve%ansatz - + proc~ansatz->proc~cmp_elem - - + + none~set - - -nurbs_volume%set + + +nurbs_curve%set - + proc~ansatz->none~set - - + + - + -proc~cmp_volume - - -nurbs_volume%cmp_volume +proc~cmp_length + + +nurbs_curve%cmp_length - - -proc~cmp_volume->proc~cmp_elem - - + + +proc~cmp_length->proc~cmp_elem + + - + -proc~cmp_volume->proc~ansatz - - +proc~cmp_length->proc~ansatz + + proc~set1 - - -nurbs_volume%set1 + + +nurbs_curve%set1 proc~set1->proc~cmp_degree - - + + - + -proc~set3 - - -nurbs_volume%set3 +proc~set1a + + +nurbs_curve%set1a - + -proc~set3->proc~cmp_degree - - +proc~set1a->proc~cmp_degree + + - + -program~example3_volume - - -example3_volume - - - - - -program~example3_volume->proc~cmp_elem - - - - - -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 +proc~set3 + + +nurbs_curve%set3 - - -program~example3_volume->proc~remove_knots - - + + +proc~set3->proc~cmp_degree + + none~set->proc~set1 - - + + - + +none~set->proc~set1a + + + + + none~set->proc~set3 - - + + - + -program~compute_volume - - -compute_volume +program~compute_length + + +compute_length - + -program~compute_volume->proc~cmp_volume - - +program~compute_length->proc~cmp_length + + - + -program~compute_volume->none~set - - +program~compute_length->none~set + + + + + +proc~elevate_degree + + +nurbs_curve%elevate_degree + + - + proc~elevate_degree->none~set - - + + + + + +proc~insert_knots + + +nurbs_curve%insert_knots + + - + proc~insert_knots->none~set - - + + proc~modify_wc - - -nurbs_volume%modify_Wc + + +nurbs_curve%modify_Wc - + proc~modify_wc->none~set - - + + proc~modify_xc - - -nurbs_volume%modify_Xc + + +nurbs_curve%modify_Xc - + proc~modify_xc->none~set - - + + + + + +proc~remove_knots + + +nurbs_curve%remove_knots + + - + proc~remove_knots->none~set - - + + proc~set_c - - -nurbs_volume%set_C + + +nurbs_curve%set_C - + proc~set_c->none~set - - + + - + -proc~set_half_ring - - -nurbs_volume%set_half_ring +proc~set_circle + + +nurbs_curve%set_circle - - -proc~set_half_ring->none~set - - + + +proc~set_circle->none~set + + - + -proc~set_hexahedron - - -nurbs_volume%set_hexahedron +proc~set_half_circle + + +nurbs_curve%set_half_circle - - -proc~set_hexahedron->none~set - - + + +proc~set_half_circle->none~set + + - + -proc~set_ring - - -nurbs_volume%set_ring +program~example1_curve + + +example1_curve - - -proc~set_ring->none~set - - + + +program~example1_curve->none~set + + + + + +program~example1_curve->proc~elevate_degree + + - + + +program~example1_curve->proc~insert_knots + + + + + +program~example1_curve->proc~remove_knots + + + + -program~example_nurbs_volume - - -example_nurbs_volume +program~example_nurbs_curve + + +example_nurbs_curve - + -program~example_nurbs_volume->none~set - - +program~example_nurbs_curve->none~set + + - + -program~example_put_to_nurbs - - -example_put_to_nurbs +program~nearest_point_1d + + +nearest_point_1d - + -program~example_put_to_nurbs->none~set - - +program~nearest_point_1d->none~set + + - + -program~nearest_point_3d - - -nearest_point_3d +program~shape_c_1d + + +shape_C_1d - - -program~nearest_point_3d->none~set - - + + +program~shape_c_1d->proc~set_c + + - + -program~shape_c_3d - - -shape_C_3d +program~shape_circle + + +shape_circle - + -program~shape_c_3d->proc~set_c - - +program~shape_circle->proc~set_circle + + - + -program~shape_half_ring_3d - - -shape_half_ring_3d +program~shape_half_circle + + +shape_half_circle - + -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 - - +program~shape_half_circle->proc~set_half_circle + + @@ -910,7 +865,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/get_multiplicity~2.html b/proc/get_multiplicity~2.html index 137994aa1..40a81cdca 100644 --- a/proc/get_multiplicity~2.html +++ b/proc/get_multiplicity~2.html @@ -78,20 +78,20 @@

                          get_multiplicity
                        • 20 statements + title=" 0.4% of total for procedures.">26 statements
                        • - Source File + Source File
                        • @@ -143,7 +143,7 @@

                          private pure function get_multiplicity(this, dir) result(m)

                          Type Bound

                          -

                          nurbs_surface

                          +

                          nurbs_volume

                          Arguments

                          - class(nurbs_volume), + class(nurbs_curve), intent(in) @@ -169,21 +169,6 @@

                          Arguments

                          this -
                          - - integer, - intent(in) - - ::dir -
                          @@ -158,8 +158,8 @@

                          Arguments

                          @@ -191,7 +191,7 @@

                          Arguments

                          Return Value - + integer, allocatable, (:)

                          @@ -217,7 +217,7 @@

                          Calls

                          proc~get_multiplicity~2 -nurbs_surface%get_multiplicity +nurbs_volume%get_multiplicity @@ -358,496 +358,439 @@

                          Called by

                          - - + + proc~~get_multiplicity~2~~CalledByGraph - + proc~get_multiplicity~2 - -nurbs_surface%get_multiplicity + +nurbs_volume%get_multiplicity proc~cmp_degree~2 - - -nurbs_surface%cmp_degree + + +nurbs_volume%cmp_degree proc~cmp_degree~2->proc~get_multiplicity~2 - - + + proc~cmp_elem~2 - - -nurbs_surface%cmp_elem + + +nurbs_volume%cmp_elem proc~cmp_elem~2->proc~get_multiplicity~2 - - + + proc~ansatz~2 - - -nurbs_surface%ansatz + + +nurbs_volume%ansatz proc~ansatz~2->proc~cmp_elem~2 - - + + - + none~set~2 - - -nurbs_surface%set + + +nurbs_volume%set - + proc~ansatz~2->none~set~2 - - + + - + -proc~cmp_area - - -nurbs_surface%cmp_area +proc~cmp_volume + + +nurbs_volume%cmp_volume - + -proc~cmp_area->proc~cmp_elem~2 - - +proc~cmp_volume->proc~cmp_elem~2 + + - - -proc~cmp_area->proc~ansatz~2 - - + + +proc~cmp_volume->proc~ansatz~2 + + proc~set1~2 - - -nurbs_surface%set1 + + +nurbs_volume%set1 proc~set1~2->proc~cmp_degree~2 - - + + proc~set3~2 - - -nurbs_surface%set3 + + +nurbs_volume%set3 proc~set3~2->proc~cmp_degree~2 - - + + - - -none~set~2->proc~set1~2 - - - - - -none~set~2->proc~set3~2 - - - - - -program~compute_area - - -compute_area + + +program~example3_volume + + +example3_volume - - -program~compute_area->proc~cmp_area - - + + +program~example3_volume->proc~cmp_elem~2 + + - - -program~compute_area->none~set~2 - - + + +program~example3_volume->none~set~2 + + - + proc~elevate_degree~2 - - -nurbs_surface%elevate_degree + + +nurbs_volume%elevate_degree - - -proc~elevate_degree~2->none~set~2 - - + + +program~example3_volume->proc~elevate_degree~2 + + - + proc~insert_knots~2 - - -nurbs_surface%insert_knots + + +nurbs_volume%insert_knots - + + +program~example3_volume->proc~insert_knots~2 + + + + + +proc~remove_knots~2 + + +nurbs_volume%remove_knots + + + + + +program~example3_volume->proc~remove_knots~2 + + + + + +none~set~2->proc~set1~2 + + + + + +none~set~2->proc~set3~2 + + + + + +program~compute_volume + + +compute_volume + + + + + +program~compute_volume->proc~cmp_volume + + + + + +program~compute_volume->none~set~2 + + + + +proc~elevate_degree~2->none~set~2 + + + + + proc~insert_knots~2->none~set~2 - - + + - + proc~modify_wc~2 - - -nurbs_surface%modify_Wc + + +nurbs_volume%modify_Wc - + proc~modify_wc~2->none~set~2 - - + + - + proc~modify_xc~2 - - -nurbs_surface%modify_Xc + + +nurbs_volume%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 + + +nurbs_volume%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_c~2->none~set~2 + + - + -proc~set_ring~2 - - -nurbs_surface%set_ring +proc~set_half_ring + + +nurbs_volume%set_half_ring - + -proc~set_ring~2->none~set~2 - - +proc~set_half_ring->none~set~2 + + - + -proc~set_tetragon - - -nurbs_surface%set_tetragon +proc~set_hexahedron + + +nurbs_volume%set_hexahedron - + -proc~set_tetragon->none~set~2 - - +proc~set_hexahedron->none~set~2 + + - + -program~example3_surface - - -example3_surface +proc~set_ring + + +nurbs_volume%set_ring - - -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 - - + + +proc~set_ring->none~set~2 + + - + -program~example_nurbs_surface - - -example_nurbs_surface +program~example_nurbs_volume + + +example_nurbs_volume - - -program~example_nurbs_surface->none~set~2 - - + + +program~example_nurbs_volume->none~set~2 + + - + -program~nearest_point_2d - - -nearest_point_2d +program~example_put_to_nurbs + + +example_put_to_nurbs - - -program~nearest_point_2d->none~set~2 - - + + +program~example_put_to_nurbs->none~set~2 + + - + -program~example_ppm1 - - -example_ppm1 +program~nearest_point_3d + + +nearest_point_3d - - -program~example_ppm1->proc~set_ring~2 - - - - - -program~example_ppm1->proc~set_tetragon - - + + +program~nearest_point_3d->none~set~2 + + - + -program~example_ppm2 - - -example_ppm2 +program~shape_c_3d + + +shape_C_3d - + -program~example_ppm2->proc~set_half_ring~2 - - - - - -program~example_ppm2->proc~set_tetragon - - +program~shape_c_3d->proc~set_c~2 + + - + -program~example_ppm3 - - -example_ppm3 +program~shape_half_ring_3d + + +shape_half_ring_3d - - -program~example_ppm3->proc~modify_xc~2 - - - - - -program~example_ppm3->proc~set_tetragon - - + + +program~shape_half_ring_3d->proc~set_half_ring + + - + -program~nearest_point_2d_bench - - -nearest_point_2d_bench +program~shape_hexahedron + + +shape_hexahedron - - -program~nearest_point_2d_bench->proc~set_tetragon - - + + +program~shape_hexahedron->proc~set_hexahedron + + - + -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_ring_3d + + +shape_ring_3d - - -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_ring_3d->proc~set_ring + + @@ -967,7 +910,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/get_multiplicity~3.html b/proc/get_multiplicity~3.html index 0718b716c..75e2ea894 100644 --- a/proc/get_multiplicity~3.html +++ b/proc/get_multiplicity~3.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_volume), intent(in) @@ -173,7 +173,7 @@

                          Arguments

                          - + integer, intent(in)
                          @@ -158,8 +158,8 @@

                          Arguments

                          + + + + + + + + @@ -193,61 +208,61 @@

                          Calls

                          - + proc~~get_multiplicity~3~~CallsGraph - + proc~get_multiplicity~3 - -nurbs_curve%get_multiplicity + +nurbs_surface%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 - - + + @@ -343,409 +358,496 @@

                          Called by

                          - - + + proc~~get_multiplicity~3~~CalledByGraph - + proc~get_multiplicity~3 - -nurbs_curve%get_multiplicity + +nurbs_surface%get_multiplicity proc~cmp_degree~3 - - -nurbs_curve%cmp_degree + + +nurbs_surface%cmp_degree proc~cmp_degree~3->proc~get_multiplicity~3 - - + + proc~cmp_elem~3 - - -nurbs_curve%cmp_elem + + +nurbs_surface%cmp_elem proc~cmp_elem~3->proc~get_multiplicity~3 - - + + proc~ansatz~3 - - -nurbs_curve%ansatz + + +nurbs_surface%ansatz - + proc~ansatz~3->proc~cmp_elem~3 - - + + - + none~set~3 - - -nurbs_curve%set + + +nurbs_surface%set - + proc~ansatz~3->none~set~3 - - + + - + -proc~cmp_length - - -nurbs_curve%cmp_length +proc~cmp_area + + +nurbs_surface%cmp_area - - -proc~cmp_length->proc~cmp_elem~3 - - - - - -proc~cmp_length->proc~ansatz~3 - - - - - -proc~set1a - - -nurbs_curve%set1a - - + + +proc~cmp_area->proc~cmp_elem~3 + + - - -proc~set1a->proc~cmp_degree~3 - - + + +proc~cmp_area->proc~ansatz~3 + + - + proc~set1~3 - - -nurbs_curve%set1 + + +nurbs_surface%set1 - + proc~set1~3->proc~cmp_degree~3 - - + + - + proc~set3~3 - - -nurbs_curve%set3 + + +nurbs_surface%set3 - + proc~set3~3->proc~cmp_degree~3 - - - - - -none~set~3->proc~set1a - - + + - + none~set~3->proc~set1~3 - - + + - + none~set~3->proc~set3~3 - - + + - - -program~compute_length - - -compute_length + + +program~compute_area + + +compute_area - - -program~compute_length->proc~cmp_length - - + + +program~compute_area->proc~cmp_area + + - - -program~compute_length->none~set~3 - - + + +program~compute_area->none~set~3 + + - + proc~elevate_degree~3 - - -nurbs_curve%elevate_degree + + +nurbs_surface%elevate_degree - + proc~elevate_degree~3->none~set~3 - - + + - + proc~insert_knots~3 - - -nurbs_curve%insert_knots + + +nurbs_surface%insert_knots - + proc~insert_knots~3->none~set~3 - - + + - + proc~modify_wc~3 - - -nurbs_curve%modify_Wc + + +nurbs_surface%modify_Wc - + proc~modify_wc~3->none~set~3 - - + + - + proc~modify_xc~3 - - -nurbs_curve%modify_Xc + + +nurbs_surface%modify_Xc - + proc~modify_xc~3->none~set~3 - - + + - + proc~remove_knots~3 - - -nurbs_curve%remove_knots + + +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_circle - - -nurbs_curve%set_circle +proc~set_half_ring~2 + + +nurbs_surface%set_half_ring - - -proc~set_circle->none~set~3 - - + + +proc~set_half_ring~2->none~set~3 + + - + -proc~set_c~3 - - -nurbs_curve%set_C +proc~set_ring~2 + + +nurbs_surface%set_ring - - -proc~set_c~3->none~set~3 - - + + +proc~set_ring~2->none~set~3 + + - + -proc~set_half_circle - - -nurbs_curve%set_half_circle +proc~set_tetragon + + +nurbs_surface%set_tetragon - - -proc~set_half_circle->none~set~3 - - + + +proc~set_tetragon->none~set~3 + + - + -program~example1_curve - - -example1_curve +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_surface + + +example_nurbs_surface - - -program~example_nurbs_curve->none~set~3 - - + + +program~example_nurbs_surface->none~set~3 + + - + -program~nearest_point_1d - - -nearest_point_1d +program~nearest_point_2d + + +nearest_point_2d - - -program~nearest_point_1d->none~set~3 - - + + +program~nearest_point_2d->none~set~3 + + - + -program~shape_c_1d - - -shape_C_1d +program~example_ppm1 + + +example_ppm1 - - -program~shape_c_1d->proc~set_c~3 - - + + +program~example_ppm1->proc~set_ring~2 + + + + + +program~example_ppm1->proc~set_tetragon + + - + -program~shape_circle - - -shape_circle +program~example_ppm2 + + +example_ppm2 - - -program~shape_circle->proc~set_circle - - + + +program~example_ppm2->proc~set_half_ring~2 + + - + + +program~example_ppm2->proc~set_tetragon + + + + -program~shape_half_circle - - -shape_half_circle +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_circle->proc~set_half_circle - - +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 + + @@ -865,7 +967,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/get_nc.html b/proc/get_nc.html index 9e4b4bddd..e9b3c2fe2 100644 --- a/proc/get_nc.html +++ b/proc/get_nc.html @@ -158,7 +158,7 @@

                          Arguments

                          @@ -176,7 +176,7 @@

                          Arguments

                          Return Value - + integer

                          @@ -212,7 +212,7 @@

                          Return Value

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/get_nc_all.html b/proc/get_nc_all.html index 6eecf9bd6..8f28bf855 100644 --- a/proc/get_nc_all.html +++ b/proc/get_nc_all.html @@ -158,7 +158,7 @@

                          Arguments

                          @@ -176,7 +176,7 @@

                          Arguments

                          Return Value - + integer, (3)

                          @@ -212,7 +212,7 @@

                          Return Value

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/get_nc_all~2.html b/proc/get_nc_all~2.html index 2394df2a3..f7aa0c666 100644 --- a/proc/get_nc_all~2.html +++ b/proc/get_nc_all~2.html @@ -158,7 +158,7 @@

                          Arguments

                          @@ -176,7 +176,7 @@

                          Arguments

                          Return Value - + integer, (2)

                          @@ -212,7 +212,7 @@

                          Return Value

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/get_nc_dir.html b/proc/get_nc_dir.html index a5771104b..6f20b66d1 100644 --- a/proc/get_nc_dir.html +++ b/proc/get_nc_dir.html @@ -158,7 +158,7 @@

                          Arguments

                          @@ -173,7 +173,7 @@

                          Arguments

                          @@ -191,7 +191,7 @@

                          Arguments

                          Return Value - + integer

                          @@ -378,7 +378,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/get_nc_dir~2.html b/proc/get_nc_dir~2.html index 8bd661b33..004c17c1a 100644 --- a/proc/get_nc_dir~2.html +++ b/proc/get_nc_dir~2.html @@ -158,7 +158,7 @@

                          Arguments

                          @@ -173,7 +173,7 @@

                          Arguments

                          @@ -191,7 +191,7 @@

                          Arguments

                          Return Value - + integer

                          @@ -378,7 +378,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/get_ng.html b/proc/get_ng.html index d9874efa0..bc20899e4 100644 --- a/proc/get_ng.html +++ b/proc/get_ng.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_volume

                          +

                          nurbs_curve

                          Arguments

                          - - class(nurbs_curve), + + class(nurbs_surface), intent(in) @@ -169,6 +169,21 @@

                          Arguments

                          this +
                          + + integer, + intent(in) + + ::dir +
                          - + class(nurbs_curve), intent(in)
                          - + class(nurbs_volume), intent(in)
                          - + class(nurbs_surface), intent(in)
                          - + class(nurbs_volume), intent(in)
                          - + integer, intent(in)
                          - + class(nurbs_surface), intent(in)
                          - + integer, intent(in)
                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_volume), + + class(nurbs_curve), intent(in) @@ -177,7 +177,7 @@

                          Arguments

                          Return Value - integer, (3) + integer

                          @@ -212,7 +212,7 @@

                          Return Value

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/get_ng~2.html b/proc/get_ng~2.html index 6227f7676..4ba673627 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_surface

                          +

                          nurbs_volume

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_surface), + + class(nurbs_volume), intent(in) @@ -176,163 +176,12 @@

                          Arguments

                          Return Value - - integer, (2) + + integer, (3)


                          -
                          -
                          -

                          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 -
                          - -
                          -
                          -
                          @@ -363,7 +212,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/get_ng~3.html b/proc/get_ng~3.html index 11fa8a2c0..325bce312 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_curve

                          +

                          nurbs_surface

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_curve), + + class(nurbs_surface), intent(in) @@ -176,12 +176,163 @@

                          Arguments

                          Return Value - - integer + + 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 +
                          + +
                          +
                          +
                          @@ -212,7 +363,7 @@

                          Return Value

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/get_wc_all.html b/proc/get_wc_all.html index db8fb6207..1ebbcecb9 100644 --- a/proc/get_wc_all.html +++ b/proc/get_wc_all.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_volume

                          +

                          nurbs_curve

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_volume), + + class(nurbs_curve), intent(in) @@ -176,7 +176,7 @@

                          Arguments

                          Return Value - + real(kind=rk), allocatable, (:)

                          @@ -193,61 +193,61 @@

                          Called by

                          - + proc~~get_wc_all~~CalledByGraph - + proc~get_wc_all - -nurbs_volume%get_Wc_all + +nurbs_curve%get_Wc_all none~get_wc - - -nurbs_volume%get_Wc + + +nurbs_curve%get_Wc none~get_wc->proc~get_wc_all - - + + proc~modify_wc - - -nurbs_volume%modify_Wc + + +nurbs_curve%modify_Wc proc~modify_wc->none~get_wc - - + + proc~modify_xc - - -nurbs_volume%modify_Xc + + +nurbs_curve%modify_Xc proc~modify_xc->none~get_wc - - + + @@ -363,7 +363,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/get_wc_all~2.html b/proc/get_wc_all~2.html index 1d8018fa3..adcf83361 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_surface

                          +

                          nurbs_volume

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_surface), + + class(nurbs_volume), intent(in) @@ -193,84 +193,65 @@

                          Called by

                          - - + + proc~~get_wc_all~2~~CalledByGraph - + proc~get_wc_all~2 - -nurbs_surface%get_Wc_all + +nurbs_volume%get_Wc_all none~get_wc~2 - - -nurbs_surface%get_Wc + + +nurbs_volume%get_Wc none~get_wc~2->proc~get_wc_all~2 - - + + proc~modify_wc~2 - - -nurbs_surface%modify_Wc + + +nurbs_volume%modify_Wc proc~modify_wc~2->none~get_wc~2 - - + + proc~modify_xc~2 - - -nurbs_surface%modify_Xc + + +nurbs_volume%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 43c1fd1be..71192b681 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_curve

                          +

                          nurbs_surface

                          Arguments

                          @@ -158,8 +158,8 @@

                          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~3~~CalledByGraph - + proc~get_wc_all~3 - -nurbs_curve%get_Wc_all + +nurbs_surface%get_Wc_all none~get_wc~3 - - -nurbs_curve%get_Wc + + +nurbs_surface%get_Wc none~get_wc~3->proc~get_wc_all~3 - - + + proc~modify_wc~3 - - -nurbs_curve%modify_Wc + + +nurbs_surface%modify_Wc proc~modify_wc~3->none~get_wc~3 - - + + proc~modify_xc~3 - - -nurbs_curve%modify_Xc + + +nurbs_surface%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 a8bca2449..ff463cace 100644 --- a/proc/get_wci.html +++ b/proc/get_wci.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_volume

                          +

                          nurbs_curve

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_volume), + + class(nurbs_curve), intent(in) @@ -191,7 +191,7 @@

                          Arguments

                          Return Value - + real(kind=rk)

                          @@ -208,61 +208,61 @@

                          Called by

                          - + proc~~get_wci~~CalledByGraph - + proc~get_wci - -nurbs_volume%get_Wci + +nurbs_curve%get_Wci none~get_wc - - -nurbs_volume%get_Wc + + +nurbs_curve%get_Wc none~get_wc->proc~get_wci - - + + proc~modify_wc - - -nurbs_volume%modify_Wc + + +nurbs_curve%modify_Wc proc~modify_wc->none~get_wc - - + + proc~modify_xc - - -nurbs_volume%modify_Xc + + +nurbs_curve%modify_Xc proc~modify_xc->none~get_wc - - + + @@ -378,7 +378,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/get_wci~2.html b/proc/get_wci~2.html index 588adc35c..c77139bb1 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_surface

                          +

                          nurbs_volume

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          @@ -208,84 +208,65 @@

                          Called by

                          - + proc~~get_wci~2~~CalledByGraph - + proc~get_wci~2 - -nurbs_surface%get_Wci + +nurbs_volume%get_Wci none~get_wc~2 - - -nurbs_surface%get_Wc + + +nurbs_volume%get_Wc none~get_wc~2->proc~get_wci~2 - - + + proc~modify_wc~2 - - -nurbs_surface%modify_Wc + + +nurbs_volume%modify_Wc proc~modify_wc~2->none~get_wc~2 - - + + proc~modify_xc~2 - - -nurbs_surface%modify_Xc + + +nurbs_volume%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 ae082ecbe..0ed62c875 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_curve

                          +

                          nurbs_surface

                          Arguments

                          - - class(nurbs_surface), + + class(nurbs_volume), intent(in) @@ -173,7 +173,7 @@

                          Arguments

                          - + integer, intent(in)
                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_curve), + + class(nurbs_surface), intent(in) @@ -191,7 +191,7 @@

                          Arguments

                          Return Value - + real(kind=rk)

                          @@ -208,65 +208,84 @@

                          Called by

                          - + proc~~get_wci~3~~CalledByGraph - + proc~get_wci~3 - -nurbs_curve%get_Wci + +nurbs_surface%get_Wci none~get_wc~3 - - -nurbs_curve%get_Wc + + +nurbs_surface%get_Wc none~get_wc~3->proc~get_wci~3 - - + + proc~modify_wc~3 - - -nurbs_curve%modify_Wc + + +nurbs_surface%modify_Wc proc~modify_wc~3->none~get_wc~3 - - + + proc~modify_xc~3 - - -nurbs_curve%modify_Xc + + +nurbs_surface%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 d4d4dbb73..f0be75392 100644 --- a/proc/get_xc_all.html +++ b/proc/get_xc_all.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_volume

                          +

                          nurbs_curve

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_volume), + + class(nurbs_curve), intent(in) @@ -176,7 +176,7 @@

                          Arguments

                          Return Value - + real(kind=rk), allocatable, (:,:)

                          @@ -193,61 +193,61 @@

                          Called by

                          - + proc~~get_xc_all~~CalledByGraph - + proc~get_xc_all - -nurbs_volume%get_Xc_all + +nurbs_curve%get_Xc_all none~get_xc - - -nurbs_volume%get_Xc + + +nurbs_curve%get_Xc none~get_xc->proc~get_xc_all - - + + proc~modify_wc - - -nurbs_volume%modify_Wc + + +nurbs_curve%modify_Wc proc~modify_wc->none~get_xc - - + + proc~modify_xc - - -nurbs_volume%modify_Xc + + +nurbs_curve%modify_Xc proc~modify_xc->none~get_xc - - + + @@ -363,7 +363,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/get_xc_all~2.html b/proc/get_xc_all~2.html index db29f6269..a3e7ffb26 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_surface

                          +

                          nurbs_volume

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_surface), + + class(nurbs_volume), intent(in) @@ -176,7 +176,7 @@

                          Arguments

                          Return Value - + real(kind=rk), allocatable, (:,:)

                          @@ -193,84 +193,65 @@

                          Called by

                          - - + + proc~~get_xc_all~2~~CalledByGraph - + proc~get_xc_all~2 - -nurbs_surface%get_Xc_all + +nurbs_volume%get_Xc_all none~get_xc~2 - - -nurbs_surface%get_Xc + + +nurbs_volume%get_Xc none~get_xc~2->proc~get_xc_all~2 - - + + proc~modify_wc~2 - - -nurbs_surface%modify_Wc + + +nurbs_volume%modify_Wc proc~modify_wc~2->none~get_xc~2 - - + + proc~modify_xc~2 - - -nurbs_surface%modify_Xc + + +nurbs_volume%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 5127e32e6..c0030decc 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_curve

                          +

                          nurbs_surface

                          Arguments

                          @@ -158,8 +158,8 @@

                          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~3~~CalledByGraph - + proc~get_xc_all~3 - -nurbs_curve%get_Xc_all + +nurbs_surface%get_Xc_all none~get_xc~3 - - -nurbs_curve%get_Xc + + +nurbs_surface%get_Xc none~get_xc~3->proc~get_xc_all~3 - - + + proc~modify_wc~3 - - -nurbs_curve%modify_Wc + + +nurbs_surface%modify_Wc proc~modify_wc~3->none~get_xc~3 - - + + proc~modify_xc~3 - - -nurbs_curve%modify_Xc + + +nurbs_surface%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 df575beb1..46e9db59b 100644 --- a/proc/get_xci.html +++ b/proc/get_xci.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_volume

                          +

                          nurbs_curve

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_volume), + + class(nurbs_curve), intent(in) @@ -191,7 +191,7 @@

                          Arguments

                          Return Value - + real(kind=rk), allocatable, (:)

                          @@ -208,61 +208,61 @@

                          Called by

                          - + proc~~get_xci~~CalledByGraph - + proc~get_xci - -nurbs_volume%get_Xci + +nurbs_curve%get_Xci none~get_xc - - -nurbs_volume%get_Xc + + +nurbs_curve%get_Xc none~get_xc->proc~get_xci - - + + proc~modify_wc - - -nurbs_volume%modify_Wc + + +nurbs_curve%modify_Wc proc~modify_wc->none~get_xc - - + + proc~modify_xc - - -nurbs_volume%modify_Xc + + +nurbs_curve%modify_Xc proc~modify_xc->none~get_xc - - + + @@ -378,7 +378,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/get_xcid.html b/proc/get_xcid.html index 39a6bf111..89686d55c 100644 --- a/proc/get_xcid.html +++ b/proc/get_xcid.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_volume

                          +

                          nurbs_curve

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_volume), + + class(nurbs_curve), intent(in) @@ -206,7 +206,7 @@

                          Arguments

                          Return Value - + real(kind=rk)

                          @@ -223,61 +223,61 @@

                          Called by

                          - + proc~~get_xcid~~CalledByGraph - + proc~get_xcid - -nurbs_volume%get_Xcid + +nurbs_curve%get_Xcid none~get_xc - - -nurbs_volume%get_Xc + + +nurbs_curve%get_Xc none~get_xc->proc~get_xcid - - + + proc~modify_wc - - -nurbs_volume%modify_Wc + + +nurbs_curve%modify_Wc proc~modify_wc->none~get_xc - - + + proc~modify_xc - - -nurbs_volume%modify_Xc + + +nurbs_curve%modify_Xc proc~modify_xc->none~get_xc - - + + @@ -393,7 +393,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/get_xcid~2.html b/proc/get_xcid~2.html index fdaf358f7..7ff1c0a53 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_surface

                          +

                          nurbs_volume

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          @@ -188,7 +188,7 @@

                          Arguments

                          @@ -206,7 +206,7 @@

                          Arguments

                          Return Value - + real(kind=rk)

                          @@ -223,84 +223,65 @@

                          Called by

                          - + proc~~get_xcid~2~~CalledByGraph - + proc~get_xcid~2 - -nurbs_surface%get_Xcid + +nurbs_volume%get_Xcid none~get_xc~2 - - -nurbs_surface%get_Xc + + +nurbs_volume%get_Xc none~get_xc~2->proc~get_xcid~2 - - + + proc~modify_wc~2 - - -nurbs_surface%modify_Wc + + +nurbs_volume%modify_Wc proc~modify_wc~2->none~get_xc~2 - - + + proc~modify_xc~2 - - -nurbs_surface%modify_Xc + + +nurbs_volume%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 cb690319b..fa4efa710 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_curve

                          +

                          nurbs_surface

                          Arguments

                          - - class(nurbs_surface), + + class(nurbs_volume), intent(in) @@ -173,7 +173,7 @@

                          Arguments

                          - + integer, intent(in)
                          - + integer, intent(in)
                          @@ -158,8 +158,8 @@

                          Arguments

                          @@ -206,7 +206,7 @@

                          Arguments

                          Return Value - + real(kind=rk)

                          @@ -223,65 +223,84 @@

                          Called by

                          - + proc~~get_xcid~3~~CalledByGraph - + proc~get_xcid~3 - -nurbs_curve%get_Xcid + +nurbs_surface%get_Xcid none~get_xc~3 - - -nurbs_curve%get_Xc + + +nurbs_surface%get_Xc none~get_xc~3->proc~get_xcid~3 - - + + proc~modify_wc~3 - - -nurbs_curve%modify_Wc + + +nurbs_surface%modify_Wc proc~modify_wc~3->none~get_xc~3 - - + + proc~modify_xc~3 - - -nurbs_curve%modify_Xc + + +nurbs_surface%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 fa9e07292..5ccca6f7d 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_surface

                          +

                          nurbs_volume

                          Arguments

                          - - class(nurbs_curve), + + class(nurbs_surface), intent(in) @@ -188,7 +188,7 @@

                          Arguments

                          - + integer, intent(in)
                          @@ -158,8 +158,8 @@

                          Arguments

                          @@ -191,7 +191,7 @@

                          Arguments

                          Return Value - + real(kind=rk), allocatable, (:)

                          @@ -208,76 +208,61 @@

                          Called by

                          - + proc~~get_xci~2~~CalledByGraph - + proc~get_xci~2 - -nurbs_surface%get_Xci + +nurbs_volume%get_Xci none~get_xc~2 - - -nurbs_surface%get_Xc + + +nurbs_volume%get_Xc none~get_xc~2->proc~get_xci~2 - - + + proc~modify_wc~2 - - -nurbs_surface%modify_Wc + + +nurbs_volume%modify_Wc proc~modify_wc~2->none~get_xc~2 - - + + proc~modify_xc~2 - - -nurbs_surface%modify_Xc + + +nurbs_volume%modify_Xc proc~modify_xc~2->none~get_xc~2 - - - - - -program~example_ppm3 - - -example_ppm3 - - - - - -program~example_ppm3->proc~modify_xc~2 - - + + @@ -393,7 +378,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/get_xci~3.html b/proc/get_xci~3.html index 1d5a786e0..a761911c5 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_curve

                          +

                          nurbs_surface

                          Arguments

                          - - class(nurbs_surface), + + class(nurbs_volume), intent(in) @@ -173,7 +173,7 @@

                          Arguments

                          - + integer, intent(in)
                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_curve), + + class(nurbs_surface), intent(in) @@ -191,7 +191,7 @@

                          Arguments

                          Return Value - + real(kind=rk), allocatable, (:)

                          @@ -208,61 +208,76 @@

                          Called by

                          - + proc~~get_xci~3~~CalledByGraph - + proc~get_xci~3 - -nurbs_curve%get_Xci + +nurbs_surface%get_Xci none~get_xc~3 - - -nurbs_curve%get_Xc + + +nurbs_surface%get_Xc none~get_xc~3->proc~get_xci~3 - - + + proc~modify_wc~3 - - -nurbs_curve%modify_Wc + + +nurbs_surface%modify_Wc proc~modify_wc~3->none~get_xc~3 - - + + proc~modify_xc~3 - - -nurbs_curve%modify_Xc + + +nurbs_surface%modify_Xc proc~modify_xc~3->none~get_xc~3 - - + + + + + +program~example_ppm3 + + +example_ppm3 + + + + + +program~example_ppm3->proc~modify_xc~3 + + @@ -378,7 +393,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/get_xg_all.html b/proc/get_xg_all.html index 6a3ce0f43..b89b1ee6b 100644 --- a/proc/get_xg_all.html +++ b/proc/get_xg_all.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_volume

                          +

                          nurbs_curve

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_volume), + + class(nurbs_curve), intent(in) @@ -212,7 +212,7 @@

                          Return Value

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/get_xg_all~2.html b/proc/get_xg_all~2.html index 40c9ab092..cb1dd5556 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_surface

                          +

                          nurbs_volume

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_surface), + + class(nurbs_volume), intent(in) @@ -176,178 +176,12 @@

                          Arguments

                          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 -
                          - -
                          -
                          -
                          @@ -378,7 +212,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/get_xg_all~3.html b/proc/get_xg_all~3.html index 11f754c59..e4e6e9726 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_curve

                          +

                          nurbs_surface

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_curve), + + class(nurbs_surface), intent(in) @@ -176,12 +176,178 @@

                          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 +
                          + +
                          +
                          +
                          @@ -212,7 +378,7 @@

                          Return Value

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/get_xgi.html b/proc/get_xgi.html index a3e454850..5cae60d52 100644 --- a/proc/get_xgi.html +++ b/proc/get_xgi.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_volume

                          +

                          nurbs_curve

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_volume), + + class(nurbs_curve), intent(in) @@ -227,7 +227,7 @@

                          Return Value

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/get_xgid.html b/proc/get_xgid.html index f8d4c2f1d..f4b370c93 100644 --- a/proc/get_xgid.html +++ b/proc/get_xgid.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_volume

                          +

                          nurbs_curve

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_volume), + + class(nurbs_curve), intent(in) @@ -242,7 +242,7 @@

                          Return Value

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/get_xgid~2.html b/proc/get_xgid~2.html index 934039059..1cebada50 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_surface

                          +

                          nurbs_volume

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          @@ -188,7 +188,7 @@

                          Arguments

                          @@ -206,178 +206,12 @@

                          Arguments

                          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 -
                          - -
                          -
                          -
                          @@ -408,7 +242,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/get_xgid~3.html b/proc/get_xgid~3.html index 738c9411b..96fa0922a 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_curve

                          +

                          nurbs_surface

                          Arguments

                          - - class(nurbs_surface), + + class(nurbs_volume), intent(in) @@ -173,7 +173,7 @@

                          Arguments

                          - + integer, intent(in)
                          - + integer, intent(in)
                          @@ -158,8 +158,8 @@

                          Arguments

                          @@ -206,12 +206,178 @@

                          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 +
                          + +
                          +
                          +
                          @@ -242,7 +408,7 @@

                          Return Value

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/get_xgi~2.html b/proc/get_xgi~2.html index cab4bfa16..ba1d22475 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_surface

                          +

                          nurbs_volume

                          Arguments

                          - - class(nurbs_curve), + + class(nurbs_surface), intent(in) @@ -188,7 +188,7 @@

                          Arguments

                          - + integer, intent(in)
                          @@ -158,8 +158,8 @@

                          Arguments

                          @@ -191,178 +191,12 @@

                          Arguments

                          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 -
                          - -
                          -
                          -
                          @@ -393,7 +227,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/get_xgi~3.html b/proc/get_xgi~3.html index acd2abdcc..4c4e27923 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_curve

                          +

                          nurbs_surface

                          Arguments

                          - - class(nurbs_surface), + + class(nurbs_volume), intent(in) @@ -173,7 +173,7 @@

                          Arguments

                          - + integer, intent(in)
                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_curve), + + class(nurbs_surface), intent(in) @@ -191,12 +191,178 @@

                          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 +
                          + +
                          +
                          +
                          @@ -227,7 +393,7 @@

                          Return Value

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/get_xt.html b/proc/get_xt.html index 206ffc1a8..579f2c501 100644 --- a/proc/get_xt.html +++ b/proc/get_xt.html @@ -78,20 +78,20 @@

                          get_Xt
                        • 26 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_volume

                          +

                          nurbs_curve

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          - - - - - - - - @@ -227,7 +212,7 @@

                          Return Value

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/get_xt~2.html b/proc/get_xt~2.html index 690eaf8b5..b7d2a7a80 100644 --- a/proc/get_xt~2.html +++ b/proc/get_xt~2.html @@ -78,20 +78,20 @@

                          get_Xt
                        • 20 statements + title=" 0.4% of total for procedures.">26 statements
                        • - Source File + Source File
                        • @@ -143,7 +143,7 @@

                          private pure function get_Xt(this, dir) result(Xt)

                          Type Bound

                          -

                          nurbs_surface

                          +

                          nurbs_volume

                          Arguments

                          - - class(nurbs_volume), + + class(nurbs_curve), intent(in) @@ -169,21 +169,6 @@

                          Arguments

                          this -
                          - - integer, - intent(in) - - ::dir -
                          @@ -158,8 +158,8 @@

                          Arguments

                          @@ -191,7 +191,7 @@

                          Arguments

                          Return Value - + real(kind=rk), allocatable, (:)

                          @@ -227,7 +227,7 @@

                          Return Value

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/get_xt~3.html b/proc/get_xt~3.html index f429ac6df..c68b45812 100644 --- a/proc/get_xt~3.html +++ b/proc/get_xt~3.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

                          - - class(nurbs_surface), + + class(nurbs_volume), intent(in) @@ -173,7 +173,7 @@

                          Arguments

                          - + integer, intent(in)
                          @@ -158,8 +158,8 @@

                          Arguments

                          + + + + + + + + @@ -212,7 +227,7 @@

                          Return Value

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/hexahedron_xc.html b/proc/hexahedron_xc.html index 24fd41550..d6b215de6 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-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/insert_knot_a_5_1.html b/proc/insert_knot_a_5_1.html index 759cbb62f..99cbcd19f 100644 --- a/proc/insert_knot_a_5_1.html +++ b/proc/insert_knot_a_5_1.html @@ -333,9 +333,9 @@

                          Called by

                          proc~insert_knots - - -nurbs_volume%insert_knots + + +nurbs_curve%insert_knots @@ -348,9 +348,9 @@

                          Called by

                          proc~insert_knots~2 - + -nurbs_surface%insert_knots +nurbs_volume%insert_knots @@ -363,9 +363,9 @@

                          Called by

                          proc~insert_knots~3 - - -nurbs_curve%insert_knots + + +nurbs_surface%insert_knots @@ -379,46 +379,46 @@

                          Called by

                          program~example1_curve - -example1_curve + +example1_curve - - -program~example1_curve->proc~insert_knots~3 - - + + +program~example1_curve->proc~insert_knots + + program~example3_surface - -example3_surface + +example3_surface - - -program~example3_surface->proc~insert_knots~2 - - + + +program~example3_surface->proc~insert_knots~3 + + program~example3_volume - -example3_volume + +example3_volume - - -program~example3_volume->proc~insert_knots - - + + +program~example3_volume->proc~insert_knots~2 + + @@ -534,7 +534,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/insert_knots.html b/proc/insert_knots.html index 28b47da3d..ca3e0796d 100644 --- a/proc/insert_knots.html +++ b/proc/insert_knots.html @@ -78,20 +78,20 @@

                          insert_knots
                        • 154 statements + title=" 0.6% 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_volume

                          +

                          nurbs_curve

                          Arguments

                          - - class(nurbs_curve), + + class(nurbs_surface), intent(in) @@ -169,6 +169,21 @@

                          Arguments

                          this +
                          + + integer, + intent(in) + + ::dir +
                          - + real(kind=rk), intent(in)
                          - + integer, intent(in)
                          @@ -158,8 +158,8 @@

                          Arguments

                          - - - - - - - -
                          - - class(nurbs_volume), + + class(nurbs_curve), intent(inout) @@ -171,21 +171,6 @@

                          Arguments

                          - - integer, - intent(in) - - ::dir - -
                          @@ -231,310 +216,274 @@

                          Calls

                          - - + + proc~~insert_knots~~CallsGraph - + proc~insert_knots - -nurbs_volume%insert_knots + +nurbs_curve%insert_knots interface~compute_multiplicity - -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 + + +nurbs_curve%set - + proc~insert_knots->none~set - - + + - + proc~findspan - - -findspan + + +findspan - + proc~insert_knots->proc~findspan - - + + - + proc~insert_knot_a_5_1 - - -insert_knot_A_5_1 + + +insert_knot_A_5_1 - + proc~insert_knots->proc~insert_knot_a_5_1 - - + + + + + +proc~is_rational + + +nurbs_curve%is_rational + + + + + +proc~insert_knots->proc~is_rational + + 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 - - -nurbs_volume%get_knot_all +proc~set1 + + +nurbs_curve%set1 - + -none~get_knot->proc~get_knot_all - - +none~set->proc~set1 + + - + -proc~get_knoti - - -nurbs_volume%get_knoti +proc~set1a + + +nurbs_curve%set1a - + -none~get_knot->proc~get_knoti - - - - - -proc~set1 - - -nurbs_volume%set1 - - - - - -none~set->proc~set1 - - +none~set->proc~set1a + + - + proc~set2 - - -nurbs_volume%set2 + + +nurbs_curve%set2 - + none~set->proc~set2 - - + + - + proc~set3 - - -nurbs_volume%set3 + + +nurbs_curve%set3 - + none~set->proc~set3 - - + + - + proc~set4 - - -nurbs_volume%set4 + + +nurbs_curve%set4 - + none~set->proc~set4 - - + + - + proc~cmp_degree - - -nurbs_volume%cmp_degree + + +nurbs_curve%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~set1a->proc~cmp_degree + + - + proc~compute_knot_vector - - -compute_knot_vector + + +compute_knot_vector - + proc~set2->proc~compute_knot_vector - - + + - + proc~set3->proc~cmp_degree - - + + - + proc~get_multiplicity - - -nurbs_volume%get_multiplicity + + +nurbs_curve%get_multiplicity - + proc~cmp_degree->proc~get_multiplicity - - - - - -proc~cmp_nc->interface~compute_multiplicity - - + + - + proc~repelem - - -repelem + + +repelem - + proc~compute_knot_vector->proc~repelem - - + + - + proc~get_multiplicity->interface~compute_multiplicity - - + + @@ -634,31 +583,31 @@

                          Called by

                          - + proc~~insert_knots~~CalledByGraph - + proc~insert_knots - -nurbs_volume%insert_knots + +nurbs_curve%insert_knots - + -program~example3_volume - - -example3_volume +program~example1_curve + + +example1_curve - + -program~example3_volume->proc~insert_knots - - +program~example1_curve->proc~insert_knots + + @@ -774,7 +723,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/insert_knots~2.html b/proc/insert_knots~2.html index 1806daafd..047310858 100644 --- a/proc/insert_knots~2.html +++ b/proc/insert_knots~2.html @@ -78,20 +78,20 @@

                          insert_knots
                        • 104 statements + title=" 2.3% of total for procedures.">154 statements
                        • - Source File + Source File
                        • @@ -143,7 +143,7 @@

                          private pure subroutine insert_knots(this, dir, Xth, r)

                          Type Bound

                          -

                          nurbs_surface

                          +

                          nurbs_volume

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          @@ -231,325 +231,310 @@

                          Calls

                          - - + + proc~~insert_knots~2~~CallsGraph - + proc~insert_knots~2 -nurbs_surface%insert_knots +nurbs_volume%insert_knots interface~compute_multiplicity - -compute_multiplicity + +compute_multiplicity proc~insert_knots~2->interface~compute_multiplicity - - + + none~get_knot~2 - - -nurbs_surface%get_knot + + +nurbs_volume%get_knot proc~insert_knots~2->none~get_knot~2 - - + + none~set~2 - - -nurbs_surface%set + + +nurbs_volume%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_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 + + +nurbs_volume%get_knot_all - + none~get_knot~2->proc~get_knot_all~2 - - + + - + proc~get_knoti~2 - - -nurbs_surface%get_knoti + + +nurbs_volume%get_knoti - + none~get_knot~2->proc~get_knoti~2 - - + + - + proc~set1~2 - - -nurbs_surface%set1 + + +nurbs_volume%set1 - + none~set~2->proc~set1~2 - - + + - + proc~set2~2 - - -nurbs_surface%set2 + + +nurbs_volume%set2 - + none~set~2->proc~set2~2 - - + + - + proc~set3~2 - - -nurbs_surface%set3 + + +nurbs_volume%set3 - + none~set~2->proc~set3~2 - - + + - + proc~set4~2 - - -nurbs_surface%set4 + + +nurbs_volume%set4 - + none~set~2->proc~set4~2 - - + + - + proc~cmp_degree~2 - - -nurbs_surface%cmp_degree + + +nurbs_volume%cmp_degree - + proc~set1~2->proc~cmp_degree~2 - - + + - + proc~cmp_nc~2 - - -nurbs_surface%cmp_nc + + +nurbs_volume%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_surface%get_multiplicity + + +nurbs_volume%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 - - + + @@ -658,20 +643,20 @@

                          Called by

                          proc~insert_knots~2 -nurbs_surface%insert_knots +nurbs_volume%insert_knots - + -program~example3_surface - +program~example3_volume + -example3_surface +example3_volume - + -program~example3_surface->proc~insert_knots~2 +program~example3_volume->proc~insert_knots~2 @@ -789,7 +774,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/insert_knots~3.html b/proc/insert_knots~3.html index 2aaee3ef2..408994b14 100644 --- a/proc/insert_knots~3.html +++ b/proc/insert_knots~3.html @@ -78,20 +78,20 @@

                          insert_knots
                        • 43 statements + title=" 1.5% 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_volume), intent(inout) @@ -173,7 +173,7 @@

                          Arguments

                          - + integer, intent(in)
                          @@ -158,8 +158,8 @@

                          Arguments

                          + + + + + + + +
                          - - class(nurbs_curve), + + class(nurbs_surface), intent(inout) @@ -171,6 +171,21 @@

                          Arguments

                          + + integer, + intent(in) + + ::dir + +
                          @@ -216,274 +231,325 @@

                          Calls

                          - - + + proc~~insert_knots~3~~CallsGraph - + proc~insert_knots~3 - -nurbs_curve%insert_knots + +nurbs_surface%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_curve%set + + +nurbs_surface%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_curve%is_rational + + +nurbs_surface%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~set1a - - -nurbs_curve%set1a + + +proc~get_knot_all~3 + + +nurbs_surface%get_knot_all - - -none~set~3->proc~set1a - - + + +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_curve%set1 + + +nurbs_surface%set1 - + none~set~3->proc~set1~3 - - + + - + proc~set2~3 - - -nurbs_curve%set2 + + +nurbs_surface%set2 - + none~set~3->proc~set2~3 - - + + - + proc~set3~3 - - -nurbs_curve%set3 + + +nurbs_surface%set3 - + none~set~3->proc~set3~3 - - + + - + proc~set4~3 - - -nurbs_curve%set4 + + +nurbs_surface%set4 - + none~set~3->proc~set4~3 - - + + - + proc~cmp_degree~3 - - -nurbs_curve%cmp_degree + + +nurbs_surface%cmp_degree - - -proc~set1a->proc~cmp_degree~3 - - - - + 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_curve%get_multiplicity + + +nurbs_surface%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 - - + + @@ -583,31 +649,31 @@

                          Called by

                          - + proc~~insert_knots~3~~CalledByGraph - + proc~insert_knots~3 - -nurbs_curve%insert_knots + +nurbs_surface%insert_knots - + -program~example1_curve - - -example1_curve +program~example3_surface + + +example3_surface - + -program~example1_curve->proc~insert_knots~3 - - +program~example3_surface->proc~insert_knots~3 + + @@ -723,7 +789,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/inv.html b/proc/inv.html index 5145f16bd..cd6cf94d0 100644 --- a/proc/inv.html +++ b/proc/inv.html @@ -334,63 +334,63 @@

                          Called by

                          - + -proc~ansatz - +proc~ansatz~2 + nurbs_volume%ansatz - + -proc~ansatz->proc~inv +proc~ansatz~2->proc~inv - + -proc~ansatz~2 - +proc~ansatz~3 + nurbs_surface%ansatz - + -proc~ansatz~2->proc~inv +proc~ansatz~3->proc~inv - + -proc~nearest_point2 - +proc~nearest_point2~2 + nurbs_volume%nearest_point2 - + -proc~nearest_point2->proc~inv +proc~nearest_point2~2->proc~inv - + -proc~nearest_point2~2 - +proc~nearest_point2~3 + nurbs_surface%nearest_point2 - + -proc~nearest_point2~2->proc~inv +proc~nearest_point2~3->proc~inv @@ -403,9 +403,9 @@

                          Called by

                          - + -proc~cmp_area->proc~ansatz~2 +proc~cmp_area->proc~ansatz~3 @@ -418,9 +418,9 @@

                          Called by

                          - + -proc~cmp_volume->proc~ansatz +proc~cmp_volume->proc~ansatz~2 @@ -433,9 +433,9 @@

                          Called by

                          - + -program~nearest_point_2d->proc~nearest_point2~2 +program~nearest_point_2d->proc~nearest_point2~3 @@ -448,9 +448,9 @@

                          Called by

                          - + -program~nearest_point_3d->proc~nearest_point2 +program~nearest_point_3d->proc~nearest_point2~2 @@ -598,7 +598,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/is_rational.html b/proc/is_rational.html index f47900c00..246014ed7 100644 --- a/proc/is_rational.html +++ b/proc/is_rational.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_volume

                          +

                          nurbs_curve

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_volume), + + class(nurbs_curve), intent(in) @@ -193,361 +193,409 @@

                          Called by

                          - - + + proc~~is_rational~~CalledByGraph - + proc~is_rational - -nurbs_volume%is_rational + +nurbs_curve%is_rational proc~basis_scalar - - -nurbs_volume%basis_scalar + + +nurbs_curve%basis_scalar proc~basis_scalar->proc~is_rational - - + + proc~basis_vector - - -nurbs_volume%basis_vector + + +nurbs_curve%basis_vector proc~basis_vector->proc~is_rational - - + + proc~cmp_xg - - -nurbs_volume%cmp_Xg + + +nurbs_curve%cmp_Xg proc~cmp_xg->proc~is_rational - - + + proc~create - - -nurbs_volume%create + + +nurbs_curve%create proc~create->proc~is_rational - - + + proc~derivative2_scalar - - -nurbs_volume%derivative2_scalar + + +nurbs_curve%derivative2_scalar proc~derivative2_scalar->proc~is_rational - - + + proc~derivative2_vector - - -nurbs_volume%derivative2_vector + + +nurbs_curve%derivative2_vector proc~derivative2_vector->proc~is_rational - - + + proc~derivative_scalar - - -nurbs_volume%derivative_scalar + + +nurbs_curve%derivative_scalar proc~derivative_scalar->proc~is_rational - - + + proc~derivative_vector - - -nurbs_volume%derivative_vector + + +nurbs_curve%derivative_vector proc~derivative_vector->proc~is_rational - - + + - + +proc~elevate_degree + + +nurbs_curve%elevate_degree + + + + + +proc~elevate_degree->proc~is_rational + + + + + +proc~insert_knots + + +nurbs_curve%insert_knots + + + + + +proc~insert_knots->proc~is_rational + + + + + +proc~remove_knots + + +nurbs_curve%remove_knots + + + + + +proc~remove_knots->proc~is_rational + + + + + none~derivative - - -nurbs_volume%derivative + + +nurbs_curve%derivative - + none~derivative->proc~derivative_scalar - - + + - + none~derivative->proc~derivative_vector - - + + - + none~derivative2 - - -nurbs_volume%derivative2 + + +nurbs_curve%derivative2 - + none~derivative2->proc~derivative2_scalar - - + + - + none~derivative2->proc~derivative2_vector - - + + - + proc~nearest_point2 - - -nurbs_volume%nearest_point2 + + +nurbs_curve%nearest_point2 - + proc~nearest_point2->proc~cmp_xg - - + + - + proc~nearest_point2->proc~create - - + + - + proc~nearest_point2->none~derivative2 - - + + - - -program~example3_volume - - -example3_volume + + +program~example1_curve + + +example1_curve - - -program~example3_volume->proc~create - - + + +program~example1_curve->proc~create + + - - -program~example_nurbs_volume - - -example_nurbs_volume - + + +program~example1_curve->proc~elevate_degree + + + + +program~example1_curve->proc~insert_knots + + - - -program~example_nurbs_volume->proc~create - - + + +program~example1_curve->proc~remove_knots + + - - -program~nearest_point_3d - - -nearest_point_3d + + +program~example_nurbs_curve + + +example_nurbs_curve - - -program~nearest_point_3d->proc~create - - - - - -program~nearest_point_3d->proc~nearest_point2 - - + + +program~example_nurbs_curve->proc~create + + - - -program~shape_c_3d - - -shape_C_3d + + +program~nearest_point_1d + + +nearest_point_1d - - -program~shape_c_3d->proc~create - - + + +program~nearest_point_1d->proc~create + + - - -program~shape_half_ring_3d - - -shape_half_ring_3d + + +program~nearest_point_1d->proc~nearest_point2 + + + + + +program~shape_c_1d + + +shape_C_1d - - -program~shape_half_ring_3d->proc~create - - + + +program~shape_c_1d->proc~create + + - - -program~shape_hexahedron - - -shape_hexahedron + + +program~shape_circle + + +shape_circle - - -program~shape_hexahedron->proc~create - - + + +program~shape_circle->proc~create + + - - -program~shape_ring_3d - - -shape_ring_3d + + +program~shape_half_circle + + +shape_half_circle - - -program~shape_ring_3d->proc~create - - + + +program~shape_half_circle->proc~create + + - + proc~ansatz - - -nurbs_volume%ansatz + + +nurbs_curve%ansatz - + proc~ansatz->none~derivative - - - - - -proc~cmp_volume - - -nurbs_volume%cmp_volume + + + + + +proc~cmp_length + + +nurbs_curve%cmp_length - - -proc~cmp_volume->proc~ansatz - - + + +proc~cmp_length->proc~ansatz + + - - -program~compute_volume - - -compute_volume + + +program~compute_length + + +compute_length - - -program~compute_volume->proc~cmp_volume - - + + +program~compute_length->proc~cmp_length + + @@ -667,7 +715,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/is_rational~2.html b/proc/is_rational~2.html index 069b6d0cd..4bd1b423a 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_surface

                          +

                          nurbs_volume

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_surface), + + class(nurbs_volume), intent(in) @@ -193,484 +193,361 @@

                          Called by

                          - - + + proc~~is_rational~2~~CalledByGraph - + proc~is_rational~2 - -nurbs_surface%is_rational + +nurbs_volume%is_rational proc~basis_scalar~2 - - -nurbs_surface%basis_scalar + + +nurbs_volume%basis_scalar proc~basis_scalar~2->proc~is_rational~2 - - + + proc~basis_vector~2 - - -nurbs_surface%basis_vector + + +nurbs_volume%basis_vector proc~basis_vector~2->proc~is_rational~2 - - + + proc~cmp_xg~2 - - -nurbs_surface%cmp_Xg + + +nurbs_volume%cmp_Xg proc~cmp_xg~2->proc~is_rational~2 - - + + proc~create~2 - - -nurbs_surface%create + + +nurbs_volume%create proc~create~2->proc~is_rational~2 - - + + proc~derivative2_scalar~2 - - -nurbs_surface%derivative2_scalar + + +nurbs_volume%derivative2_scalar proc~derivative2_scalar~2->proc~is_rational~2 - - + + proc~derivative2_vector~2 - - -nurbs_surface%derivative2_vector + + +nurbs_volume%derivative2_vector proc~derivative2_vector~2->proc~is_rational~2 - - + + proc~derivative_scalar~2 - - -nurbs_surface%derivative_scalar + + +nurbs_volume%derivative_scalar proc~derivative_scalar~2->proc~is_rational~2 - - + + proc~derivative_vector~2 - - -nurbs_surface%derivative_vector + + +nurbs_volume%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 + + +nurbs_volume%derivative2 - + none~derivative2~2->proc~derivative2_scalar~2 - - + + - + none~derivative2~2->proc~derivative2_vector~2 - - + + - + none~derivative~2 - - -nurbs_surface%derivative + + +nurbs_volume%derivative - + none~derivative~2->proc~derivative_scalar~2 - - + + - + none~derivative~2->proc~derivative_vector~2 - - + + - + proc~nearest_point2~2 - - -nurbs_surface%nearest_point2 + + +nurbs_volume%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~example3_volume + + +example3_volume - - -program~example_nurbs_surface->proc~create~2 - - + + +program~example3_volume->proc~create~2 + + - - -program~example_ppm1 - - -example_ppm1 + + +program~example_nurbs_volume + + +example_nurbs_volume - - -program~example_ppm1->proc~create~2 - - + + +program~example_nurbs_volume->proc~create~2 + + - - -program~example_ppm2 - - -example_ppm2 + + +program~nearest_point_3d + + +nearest_point_3d - - -program~example_ppm2->proc~create~2 - - - - - -program~example_ppm3 - - -example_ppm3 - - + + +program~nearest_point_3d->proc~create~2 + + - - -program~example_ppm3->proc~create~2 - - + + +program~nearest_point_3d->proc~nearest_point2~2 + + - - -program~nearest_point_2d - - -nearest_point_2d + + +program~shape_c_3d + + +shape_C_3d - - -program~nearest_point_2d->proc~create~2 - - - - - -program~nearest_point_2d->proc~nearest_point2~2 - - + + +program~shape_c_3d->proc~create~2 + + - - -program~nearest_point_2d_bench - - -nearest_point_2d_bench + + +program~shape_half_ring_3d + + +shape_half_ring_3d - - -program~nearest_point_2d_bench->proc~create~2 - - - - - -program~shape_c_2d - - -shape_C_2d - - + + +program~shape_half_ring_3d->proc~create~2 + + - - -program~shape_c_2d->proc~create~2 - - - - - -program~shape_half_ring_2d - - -shape_half_ring_2d + + +program~shape_hexahedron + + +shape_hexahedron - - -program~shape_half_ring_2d->proc~create~2 - - - - - -program~shape_ring_2d - - -shape_ring_2d - - + + +program~shape_hexahedron->proc~create~2 + + - - -program~shape_ring_2d->proc~create~2 - - - - - -program~shape_tetragon - - -shape_tetragon + + +program~shape_ring_3d + + +shape_ring_3d - - -program~shape_tetragon->proc~create~2 - - + + +program~shape_ring_3d->proc~create~2 + + - + proc~ansatz~2 - - -nurbs_surface%ansatz + + +nurbs_volume%ansatz - + proc~ansatz~2->none~derivative~2 - - - - - -proc~cmp_area - - -nurbs_surface%cmp_area + + + + + +proc~cmp_volume + + +nurbs_volume%cmp_volume - - -proc~cmp_area->proc~ansatz~2 - - + + +proc~cmp_volume->proc~ansatz~2 + + - - -program~compute_area - - -compute_area + + +program~compute_volume + + +compute_volume - - -program~compute_area->proc~cmp_area - - + + +program~compute_volume->proc~cmp_volume + + @@ -790,7 +667,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/is_rational~3.html b/proc/is_rational~3.html index 1fe25eaff..c9494f3d1 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_curve

                          +

                          nurbs_surface

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_curve), + + class(nurbs_surface), intent(in) @@ -193,409 +193,484 @@

                          Called by

                          - - + + proc~~is_rational~3~~CalledByGraph - + proc~is_rational~3 - -nurbs_curve%is_rational + +nurbs_surface%is_rational proc~basis_scalar~3 - - -nurbs_curve%basis_scalar + + +nurbs_surface%basis_scalar proc~basis_scalar~3->proc~is_rational~3 - - + + proc~basis_vector~3 - - -nurbs_curve%basis_vector + + +nurbs_surface%basis_vector proc~basis_vector~3->proc~is_rational~3 - - + + proc~cmp_xg~3 - - -nurbs_curve%cmp_Xg + + +nurbs_surface%cmp_Xg proc~cmp_xg~3->proc~is_rational~3 - - + + proc~create~3 - - -nurbs_curve%create + + +nurbs_surface%create proc~create~3->proc~is_rational~3 - - + + proc~derivative2_scalar~3 - - -nurbs_curve%derivative2_scalar + + +nurbs_surface%derivative2_scalar proc~derivative2_scalar~3->proc~is_rational~3 - - + + proc~derivative2_vector~3 - - -nurbs_curve%derivative2_vector + + +nurbs_surface%derivative2_vector proc~derivative2_vector~3->proc~is_rational~3 - - + + proc~derivative_scalar~3 - - -nurbs_curve%derivative_scalar + + +nurbs_surface%derivative_scalar proc~derivative_scalar~3->proc~is_rational~3 - - + + proc~derivative_vector~3 - - -nurbs_curve%derivative_vector + + +nurbs_surface%derivative_vector proc~derivative_vector~3->proc~is_rational~3 - - + + proc~elevate_degree~3 - - -nurbs_curve%elevate_degree + + +nurbs_surface%elevate_degree proc~elevate_degree~3->proc~is_rational~3 - - + + proc~insert_knots~3 - - -nurbs_curve%insert_knots + + +nurbs_surface%insert_knots proc~insert_knots~3->proc~is_rational~3 - - + + proc~remove_knots~3 - - -nurbs_curve%remove_knots + + +nurbs_surface%remove_knots proc~remove_knots~3->proc~is_rational~3 - - + + none~derivative2~3 - - -nurbs_curve%derivative2 + + +nurbs_surface%derivative2 - + none~derivative2~3->proc~derivative2_scalar~3 - - + + - + none~derivative2~3->proc~derivative2_vector~3 - - + + none~derivative~3 - - -nurbs_curve%derivative + + +nurbs_surface%derivative - + none~derivative~3->proc~derivative_scalar~3 - - + + - + none~derivative~3->proc~derivative_vector~3 - - + + proc~nearest_point2~3 - - -nurbs_curve%nearest_point2 + + +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~example1_curve - - -example1_curve +program~example3_surface + + +example3_surface - + -program~example1_curve->proc~create~3 - - +program~example3_surface->proc~create~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_surface + + +example_nurbs_surface - + -program~example_nurbs_curve->proc~create~3 - - +program~example_nurbs_surface->proc~create~3 + + - + -program~nearest_point_1d - - -nearest_point_1d +program~example_ppm1 + + +example_ppm1 - + -program~nearest_point_1d->proc~create~3 - - - - - -program~nearest_point_1d->proc~nearest_point2~3 - - +program~example_ppm1->proc~create~3 + + - + -program~shape_c_1d - - -shape_C_1d +program~example_ppm2 + + +example_ppm2 - + -program~shape_c_1d->proc~create~3 - - +program~example_ppm2->proc~create~3 + + - + -program~shape_circle - - -shape_circle +program~example_ppm3 + + +example_ppm3 - + -program~shape_circle->proc~create~3 - - +program~example_ppm3->proc~create~3 + + - + -program~shape_half_circle - - -shape_half_circle +program~nearest_point_2d + + +nearest_point_2d - + -program~shape_half_circle->proc~create~3 - - +program~nearest_point_2d->proc~create~3 + + - + + +program~nearest_point_2d->proc~nearest_point2~3 + + + + -proc~ansatz~3 - - -nurbs_curve%ansatz +program~nearest_point_2d_bench + + +nearest_point_2d_bench - - -proc~ansatz~3->none~derivative~3 - - + + +program~nearest_point_2d_bench->proc~create~3 + + - + -proc~cmp_length - - -nurbs_curve%cmp_length +program~shape_c_2d + + +shape_C_2d - - -proc~cmp_length->proc~ansatz~3 - - + + +program~shape_c_2d->proc~create~3 + + - + -program~compute_length - - -compute_length +program~shape_half_ring_2d + + +shape_half_ring_2d - - -program~compute_length->proc~cmp_length - - + + +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 + + + + + +proc~ansatz~3 + + +nurbs_surface%ansatz + + + + + +proc~ansatz~3->none~derivative~3 + + + + + +proc~cmp_area + + +nurbs_surface%cmp_area + + + + + +proc~cmp_area->proc~ansatz~3 + + + + + +program~compute_area + + +compute_area + + + + + +program~compute_area->proc~cmp_area + + @@ -715,7 +790,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/isinf.html b/proc/isinf.html index 1c2e22b6b..d296654eb 100644 --- a/proc/isinf.html +++ b/proc/isinf.html @@ -210,7 +210,7 @@

                          Return Value

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/isnan.html b/proc/isnan.html index 615ab2d00..cbc3962b1 100644 --- a/proc/isnan.html +++ b/proc/isnan.html @@ -210,7 +210,7 @@

                          Return Value

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/kron.html b/proc/kron.html index 5e02ab83b..73d23429b 100644 --- a/proc/kron.html +++ b/proc/kron.html @@ -781,9 +781,9 @@

                          Called by

                          proc~ansatz - - -nurbs_volume%ansatz + + +nurbs_curve%ansatz @@ -796,9 +796,9 @@

                          Called by

                          proc~ansatz~2 - + -nurbs_surface%ansatz +nurbs_volume%ansatz @@ -811,9 +811,9 @@

                          Called by

                          proc~ansatz~3 - - -nurbs_curve%ansatz + + +nurbs_surface%ansatz @@ -827,91 +827,91 @@

                          Called by

                          proc~cmp_area - -nurbs_surface%cmp_area + +nurbs_surface%cmp_area - - -proc~cmp_area->proc~ansatz~2 - - + + +proc~cmp_area->proc~ansatz~3 + + proc~cmp_length - -nurbs_curve%cmp_length + +nurbs_curve%cmp_length - - -proc~cmp_length->proc~ansatz~3 - - + + +proc~cmp_length->proc~ansatz + + proc~cmp_volume - -nurbs_volume%cmp_volume + +nurbs_volume%cmp_volume - - -proc~cmp_volume->proc~ansatz - - + + +proc~cmp_volume->proc~ansatz~2 + + program~compute_area - -compute_area + +compute_area program~compute_area->proc~cmp_area - - + + program~compute_length - -compute_length + +compute_length program~compute_length->proc~cmp_length - - + + program~compute_volume - -compute_volume + +compute_volume program~compute_volume->proc~cmp_volume - - + + @@ -1031,7 +1031,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/modify_wc.html b/proc/modify_wc.html index 6382b74a5..d627dcf49 100644 --- a/proc/modify_wc.html +++ b/proc/modify_wc.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_volume

                          +

                          nurbs_curve

                          Arguments

                          @@ -159,7 +159,7 @@

                          Arguments

                          - class(nurbs_volume), + class(nurbs_curve), intent(inout) @@ -216,379 +216,373 @@

                          Calls

                          - - + + proc~~modify_wc~~CallsGraph - + proc~modify_wc - -nurbs_volume%modify_Wc + +nurbs_curve%modify_Wc none~get_knot - - -nurbs_volume%get_knot + + +nurbs_curve%get_knot proc~modify_wc->none~get_knot - - + + none~get_wc - - -nurbs_volume%get_Wc + + +nurbs_curve%get_Wc proc~modify_wc->none~get_wc - - + + none~get_xc - - -nurbs_volume%get_Xc + + +nurbs_curve%get_Xc proc~modify_wc->none~get_xc - - + + none~set - - -nurbs_volume%set + + +nurbs_curve%set proc~modify_wc->none~set - - + + proc~get_knot_all - - -nurbs_volume%get_knot_all + + +nurbs_curve%get_knot_all none~get_knot->proc~get_knot_all - - + + proc~get_knoti - - -nurbs_volume%get_knoti + + +nurbs_curve%get_knoti none~get_knot->proc~get_knoti - - + + proc~get_wc_all - - -nurbs_volume%get_Wc_all + + +nurbs_curve%get_Wc_all none~get_wc->proc~get_wc_all - - + + proc~get_wci - - -nurbs_volume%get_Wci + + +nurbs_curve%get_Wci none~get_wc->proc~get_wci - - + + proc~get_xc_all - - -nurbs_volume%get_Xc_all + + +nurbs_curve%get_Xc_all none~get_xc->proc~get_xc_all - - + + proc~get_xci - - -nurbs_volume%get_Xci + + +nurbs_curve%get_Xci none~get_xc->proc~get_xci - - + + proc~get_xcid - - -nurbs_volume%get_Xcid + + +nurbs_curve%get_Xcid none~get_xc->proc~get_xcid - - + + proc~set1 - - -nurbs_volume%set1 + + +nurbs_curve%set1 none~set->proc~set1 - - + + - + +proc~set1a + + +nurbs_curve%set1a + + + + + +none~set->proc~set1a + + + + + proc~set2 - - -nurbs_volume%set2 + + +nurbs_curve%set2 - + none~set->proc~set2 - - + + - + proc~set3 - - -nurbs_volume%set3 + + +nurbs_curve%set3 - + none~set->proc~set3 - - + + - + proc~set4 - - -nurbs_volume%set4 + + +nurbs_curve%set4 - + none~set->proc~set4 - - + + - + proc~cmp_degree - - -nurbs_volume%cmp_degree + + +nurbs_curve%cmp_degree - -proc~set1->proc~cmp_degree - - - - - -proc~cmp_nc - - -nurbs_volume%cmp_nc - - - - -proc~set1->proc~cmp_nc - - +proc~set1->proc~cmp_degree + + - + -proc~set2->proc~cmp_nc - - +proc~set1a->proc~cmp_degree + + proc~compute_knot_vector - -compute_knot_vector + +compute_knot_vector proc~set2->proc~compute_knot_vector - - + + proc~set3->proc~cmp_degree - - + + - + proc~get_multiplicity - - -nurbs_volume%get_multiplicity + + +nurbs_curve%get_multiplicity proc~cmp_degree->proc~get_multiplicity - - + + - - -interface~compute_multiplicity - - -compute_multiplicity + + +proc~repelem + + +repelem - + -proc~cmp_nc->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->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->interface~compute_multiplicity - - + + @@ -708,7 +702,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/modify_wc~2.html b/proc/modify_wc~2.html index 77919cb8f..ea3e3e0f8 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_surface

                          +

                          nurbs_volume

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_surface), + + class(nurbs_volume), intent(inout) @@ -225,14 +225,14 @@

                          Calls

                          proc~modify_wc~2 -nurbs_surface%modify_Wc +nurbs_volume%modify_Wc none~get_knot~2 - + -nurbs_surface%get_knot +nurbs_volume%get_knot @@ -245,9 +245,9 @@

                          Calls

                          none~get_wc~2 - + -nurbs_surface%get_Wc +nurbs_volume%get_Wc @@ -260,9 +260,9 @@

                          Calls

                          none~get_xc~2 - + -nurbs_surface%get_Xc +nurbs_volume%get_Xc @@ -275,9 +275,9 @@

                          Calls

                          none~set~2 - + -nurbs_surface%set +nurbs_volume%set @@ -290,9 +290,9 @@

                          Calls

                          proc~get_knot_all~2 - + -nurbs_surface%get_knot_all +nurbs_volume%get_knot_all @@ -305,9 +305,9 @@

                          Calls

                          proc~get_knoti~2 - + -nurbs_surface%get_knoti +nurbs_volume%get_knoti @@ -320,9 +320,9 @@

                          Calls

                          proc~get_wc_all~2 - + -nurbs_surface%get_Wc_all +nurbs_volume%get_Wc_all @@ -335,9 +335,9 @@

                          Calls

                          proc~get_wci~2 - + -nurbs_surface%get_Wci +nurbs_volume%get_Wci @@ -350,9 +350,9 @@

                          Calls

                          proc~get_xc_all~2 - + -nurbs_surface%get_Xc_all +nurbs_volume%get_Xc_all @@ -365,9 +365,9 @@

                          Calls

                          proc~get_xcid~2 - + -nurbs_surface%get_Xcid +nurbs_volume%get_Xcid @@ -380,9 +380,9 @@

                          Calls

                          proc~get_xci~2 - + -nurbs_surface%get_Xci +nurbs_volume%get_Xci @@ -395,9 +395,9 @@

                          Calls

                          proc~set1~2 - + -nurbs_surface%set1 +nurbs_volume%set1 @@ -410,9 +410,9 @@

                          Calls

                          proc~set2~2 - + -nurbs_surface%set2 +nurbs_volume%set2 @@ -425,9 +425,9 @@

                          Calls

                          proc~set3~2 - + -nurbs_surface%set3 +nurbs_volume%set3 @@ -440,9 +440,9 @@

                          Calls

                          proc~set4~2 - + -nurbs_surface%set4 +nurbs_volume%set4 @@ -455,9 +455,9 @@

                          Calls

                          proc~cmp_degree~2 - + -nurbs_surface%cmp_degree +nurbs_volume%cmp_degree @@ -470,9 +470,9 @@

                          Calls

                          proc~cmp_nc~2 - + -nurbs_surface%cmp_nc +nurbs_volume%cmp_nc @@ -512,9 +512,9 @@

                          Calls

                          proc~get_multiplicity~2 - + -nurbs_surface%get_multiplicity +nurbs_volume%get_multiplicity @@ -708,7 +708,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/modify_wc~3.html b/proc/modify_wc~3.html index caa4bc791..12c12d3e9 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_curve

                          +

                          nurbs_surface

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_curve), + + class(nurbs_surface), intent(inout) @@ -216,373 +216,379 @@

                          Calls

                          - - + + proc~~modify_wc~3~~CallsGraph - + proc~modify_wc~3 - -nurbs_curve%modify_Wc + +nurbs_surface%modify_Wc none~get_knot~3 - - -nurbs_curve%get_knot + + +nurbs_surface%get_knot proc~modify_wc~3->none~get_knot~3 - - + + none~get_wc~3 - - -nurbs_curve%get_Wc + + +nurbs_surface%get_Wc proc~modify_wc~3->none~get_wc~3 - - + + none~get_xc~3 - - -nurbs_curve%get_Xc + + +nurbs_surface%get_Xc proc~modify_wc~3->none~get_xc~3 - - + + none~set~3 - - -nurbs_curve%set + + +nurbs_surface%set proc~modify_wc~3->none~set~3 - - + + proc~get_knot_all~3 - - -nurbs_curve%get_knot_all + + +nurbs_surface%get_knot_all none~get_knot~3->proc~get_knot_all~3 - - + + proc~get_knoti~3 - - -nurbs_curve%get_knoti + + +nurbs_surface%get_knoti none~get_knot~3->proc~get_knoti~3 - - + + proc~get_wc_all~3 - - -nurbs_curve%get_Wc_all + + +nurbs_surface%get_Wc_all none~get_wc~3->proc~get_wc_all~3 - - + + proc~get_wci~3 - - -nurbs_curve%get_Wci + + +nurbs_surface%get_Wci none~get_wc~3->proc~get_wci~3 - - + + proc~get_xc_all~3 - - -nurbs_curve%get_Xc_all + + +nurbs_surface%get_Xc_all none~get_xc~3->proc~get_xc_all~3 - - + + proc~get_xcid~3 - - -nurbs_curve%get_Xcid + + +nurbs_surface%get_Xcid none~get_xc~3->proc~get_xcid~3 - - + + proc~get_xci~3 - - -nurbs_curve%get_Xci + + +nurbs_surface%get_Xci none~get_xc~3->proc~get_xci~3 - - - - - -proc~set1a - - -nurbs_curve%set1a - - - - - -none~set~3->proc~set1a - - + + - + proc~set1~3 - - -nurbs_curve%set1 + + +nurbs_surface%set1 - + none~set~3->proc~set1~3 - - + + - + proc~set2~3 - - -nurbs_curve%set2 + + +nurbs_surface%set2 - + none~set~3->proc~set2~3 - - + + - + proc~set3~3 - - -nurbs_curve%set3 + + +nurbs_surface%set3 - + none~set~3->proc~set3~3 - - + + - + proc~set4~3 - - -nurbs_curve%set4 + + +nurbs_surface%set4 - + none~set~3->proc~set4~3 - - + + - + proc~cmp_degree~3 - - -nurbs_curve%cmp_degree + + +nurbs_surface%cmp_degree - + + +proc~set1~3->proc~cmp_degree~3 + + + + + +proc~cmp_nc~3 + + +nurbs_surface%cmp_nc + + + + -proc~set1a->proc~cmp_degree~3 - - +proc~set1~3->proc~cmp_nc~3 + + - + -proc~set1~3->proc~cmp_degree~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_curve%get_multiplicity + + +nurbs_surface%get_multiplicity proc~cmp_degree~3->proc~get_multiplicity~3 - - + + - - -proc~repelem - - -repelem + + +interface~compute_multiplicity + + +compute_multiplicity - + -proc~compute_knot_vector->proc~repelem - - +proc~cmp_nc~3->interface~compute_multiplicity + + - + -interface~compute_multiplicity - - -compute_multiplicity +proc~repelem + + +repelem - + -proc~get_multiplicity~3->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~3->interface~compute_multiplicity + + @@ -702,7 +708,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/modify_xc.html b/proc/modify_xc.html index 917dbd7fa..b7c34d0e1 100644 --- a/proc/modify_xc.html +++ b/proc/modify_xc.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_volume

                          +

                          nurbs_curve

                          Arguments

                          @@ -159,7 +159,7 @@

                          Arguments

                          @@ -203,7 +203,7 @@

                          Arguments

                          @@ -231,379 +231,373 @@

                          Calls

                          - - + + proc~~modify_xc~~CallsGraph - + proc~modify_xc - -nurbs_volume%modify_Xc + +nurbs_curve%modify_Xc none~get_knot - - -nurbs_volume%get_knot + + +nurbs_curve%get_knot proc~modify_xc->none~get_knot - - + + none~get_wc - - -nurbs_volume%get_Wc + + +nurbs_curve%get_Wc proc~modify_xc->none~get_wc - - + + none~get_xc - - -nurbs_volume%get_Xc + + +nurbs_curve%get_Xc proc~modify_xc->none~get_xc - - + + none~set - - -nurbs_volume%set + + +nurbs_curve%set proc~modify_xc->none~set - - + + proc~get_knot_all - - -nurbs_volume%get_knot_all + + +nurbs_curve%get_knot_all none~get_knot->proc~get_knot_all - - + + proc~get_knoti - - -nurbs_volume%get_knoti + + +nurbs_curve%get_knoti none~get_knot->proc~get_knoti - - + + proc~get_wc_all - - -nurbs_volume%get_Wc_all + + +nurbs_curve%get_Wc_all none~get_wc->proc~get_wc_all - - + + proc~get_wci - - -nurbs_volume%get_Wci + + +nurbs_curve%get_Wci none~get_wc->proc~get_wci - - + + proc~get_xc_all - - -nurbs_volume%get_Xc_all + + +nurbs_curve%get_Xc_all none~get_xc->proc~get_xc_all - - + + proc~get_xci - - -nurbs_volume%get_Xci + + +nurbs_curve%get_Xci none~get_xc->proc~get_xci - - + + proc~get_xcid - - -nurbs_volume%get_Xcid + + +nurbs_curve%get_Xcid none~get_xc->proc~get_xcid - - + + proc~set1 - - -nurbs_volume%set1 + + +nurbs_curve%set1 none~set->proc~set1 - - + + - + +proc~set1a + + +nurbs_curve%set1a + + + + + +none~set->proc~set1a + + + + + proc~set2 - - -nurbs_volume%set2 + + +nurbs_curve%set2 - + none~set->proc~set2 - - + + - + proc~set3 - - -nurbs_volume%set3 + + +nurbs_curve%set3 - + none~set->proc~set3 - - + + - + proc~set4 - - -nurbs_volume%set4 + + +nurbs_curve%set4 - + none~set->proc~set4 - - + + - + proc~cmp_degree - - -nurbs_volume%cmp_degree + + +nurbs_curve%cmp_degree - -proc~set1->proc~cmp_degree - - - - - -proc~cmp_nc - - -nurbs_volume%cmp_nc - - - - -proc~set1->proc~cmp_nc - - +proc~set1->proc~cmp_degree + + - + -proc~set2->proc~cmp_nc - - +proc~set1a->proc~cmp_degree + + proc~compute_knot_vector - -compute_knot_vector + +compute_knot_vector proc~set2->proc~compute_knot_vector - - + + proc~set3->proc~cmp_degree - - + + - + proc~get_multiplicity - - -nurbs_volume%get_multiplicity + + +nurbs_curve%get_multiplicity proc~cmp_degree->proc~get_multiplicity - - + + - - -interface~compute_multiplicity - - -compute_multiplicity + + +proc~repelem + + +repelem - + -proc~cmp_nc->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->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->interface~compute_multiplicity - - + + @@ -723,7 +717,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/modify_xc~2.html b/proc/modify_xc~2.html index eb4b7cda9..b020dded4 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_surface

                          +

                          nurbs_volume

                          Arguments

                          - class(nurbs_volume), + class(nurbs_curve), intent(inout) @@ -173,7 +173,7 @@

                          Arguments

                          - + real(kind=rk), intent(in)
                          - + integer, intent(in)
                          @@ -158,8 +158,8 @@

                          Arguments

                          @@ -203,7 +203,7 @@

                          Arguments

                          @@ -240,14 +240,14 @@

                          Calls

                          proc~modify_xc~2 -nurbs_surface%modify_Xc +nurbs_volume%modify_Xc none~get_knot~2 - + -nurbs_surface%get_knot +nurbs_volume%get_knot @@ -260,9 +260,9 @@

                          Calls

                          none~get_wc~2 - + -nurbs_surface%get_Wc +nurbs_volume%get_Wc @@ -275,9 +275,9 @@

                          Calls

                          none~get_xc~2 - + -nurbs_surface%get_Xc +nurbs_volume%get_Xc @@ -290,9 +290,9 @@

                          Calls

                          none~set~2 - + -nurbs_surface%set +nurbs_volume%set @@ -305,9 +305,9 @@

                          Calls

                          proc~get_knot_all~2 - + -nurbs_surface%get_knot_all +nurbs_volume%get_knot_all @@ -320,9 +320,9 @@

                          Calls

                          proc~get_knoti~2 - + -nurbs_surface%get_knoti +nurbs_volume%get_knoti @@ -335,9 +335,9 @@

                          Calls

                          proc~get_wc_all~2 - + -nurbs_surface%get_Wc_all +nurbs_volume%get_Wc_all @@ -350,9 +350,9 @@

                          Calls

                          proc~get_wci~2 - + -nurbs_surface%get_Wci +nurbs_volume%get_Wci @@ -365,9 +365,9 @@

                          Calls

                          proc~get_xc_all~2 - + -nurbs_surface%get_Xc_all +nurbs_volume%get_Xc_all @@ -380,9 +380,9 @@

                          Calls

                          proc~get_xcid~2 - + -nurbs_surface%get_Xcid +nurbs_volume%get_Xcid @@ -395,9 +395,9 @@

                          Calls

                          proc~get_xci~2 - + -nurbs_surface%get_Xci +nurbs_volume%get_Xci @@ -410,9 +410,9 @@

                          Calls

                          proc~set1~2 - + -nurbs_surface%set1 +nurbs_volume%set1 @@ -425,9 +425,9 @@

                          Calls

                          proc~set2~2 - + -nurbs_surface%set2 +nurbs_volume%set2 @@ -440,9 +440,9 @@

                          Calls

                          proc~set3~2 - + -nurbs_surface%set3 +nurbs_volume%set3 @@ -455,9 +455,9 @@

                          Calls

                          proc~set4~2 - + -nurbs_surface%set4 +nurbs_volume%set4 @@ -470,9 +470,9 @@

                          Calls

                          proc~cmp_degree~2 - + -nurbs_surface%cmp_degree +nurbs_volume%cmp_degree @@ -485,9 +485,9 @@

                          Calls

                          proc~cmp_nc~2 - + -nurbs_surface%cmp_nc +nurbs_volume%cmp_nc @@ -527,9 +527,9 @@

                          Calls

                          proc~get_multiplicity~2 - + -nurbs_surface%get_multiplicity +nurbs_volume%get_multiplicity @@ -679,126 +679,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~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_surface), + + class(nurbs_volume), intent(inout) @@ -173,7 +173,7 @@

                          Arguments

                          - + real(kind=rk), intent(in)
                          - + integer, intent(in)
                          @@ -158,8 +158,8 @@

                          Arguments

                          @@ -231,373 +231,379 @@

                          Calls

                          - - + + proc~~modify_xc~3~~CallsGraph - + proc~modify_xc~3 - -nurbs_curve%modify_Xc + +nurbs_surface%modify_Xc none~get_knot~3 - - -nurbs_curve%get_knot + + +nurbs_surface%get_knot proc~modify_xc~3->none~get_knot~3 - - + + none~get_wc~3 - - -nurbs_curve%get_Wc + + +nurbs_surface%get_Wc proc~modify_xc~3->none~get_wc~3 - - + + none~get_xc~3 - - -nurbs_curve%get_Xc + + +nurbs_surface%get_Xc proc~modify_xc~3->none~get_xc~3 - - + + none~set~3 - - -nurbs_curve%set + + +nurbs_surface%set proc~modify_xc~3->none~set~3 - - + + proc~get_knot_all~3 - - -nurbs_curve%get_knot_all + + +nurbs_surface%get_knot_all none~get_knot~3->proc~get_knot_all~3 - - + + proc~get_knoti~3 - - -nurbs_curve%get_knoti + + +nurbs_surface%get_knoti none~get_knot~3->proc~get_knoti~3 - - + + proc~get_wc_all~3 - - -nurbs_curve%get_Wc_all + + +nurbs_surface%get_Wc_all none~get_wc~3->proc~get_wc_all~3 - - + + proc~get_wci~3 - - -nurbs_curve%get_Wci + + +nurbs_surface%get_Wci none~get_wc~3->proc~get_wci~3 - - + + proc~get_xc_all~3 - - -nurbs_curve%get_Xc_all + + +nurbs_surface%get_Xc_all none~get_xc~3->proc~get_xc_all~3 - - + + proc~get_xcid~3 - - -nurbs_curve%get_Xcid + + +nurbs_surface%get_Xcid none~get_xc~3->proc~get_xcid~3 - - + + proc~get_xci~3 - - -nurbs_curve%get_Xci + + +nurbs_surface%get_Xci none~get_xc~3->proc~get_xci~3 - - - - - -proc~set1a - - -nurbs_curve%set1a - - - - - -none~set~3->proc~set1a - - + + - + proc~set1~3 - - -nurbs_curve%set1 + + +nurbs_surface%set1 - + none~set~3->proc~set1~3 - - + + - + proc~set2~3 - - -nurbs_curve%set2 + + +nurbs_surface%set2 - + none~set~3->proc~set2~3 - - + + - + proc~set3~3 - - -nurbs_curve%set3 + + +nurbs_surface%set3 - + none~set~3->proc~set3~3 - - + + - + proc~set4~3 - - -nurbs_curve%set4 + + +nurbs_surface%set4 - + none~set~3->proc~set4~3 - - + + - + proc~cmp_degree~3 - - -nurbs_curve%cmp_degree + + +nurbs_surface%cmp_degree - + + +proc~set1~3->proc~cmp_degree~3 + + + + + +proc~cmp_nc~3 + + +nurbs_surface%cmp_nc + + + + -proc~set1a->proc~cmp_degree~3 - - +proc~set1~3->proc~cmp_nc~3 + + - + -proc~set1~3->proc~cmp_degree~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_curve%get_multiplicity + + +nurbs_surface%get_multiplicity proc~cmp_degree~3->proc~get_multiplicity~3 - - + + - - -proc~repelem - - -repelem + + +interface~compute_multiplicity + + +compute_multiplicity - + -proc~compute_knot_vector->proc~repelem - - +proc~cmp_nc~3->interface~compute_multiplicity + + - + -interface~compute_multiplicity - - -compute_multiplicity +proc~repelem + + +repelem - + -proc~get_multiplicity~3->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~3->interface~compute_multiplicity + + @@ -673,6 +679,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~3~~CalledByGraph + + + +proc~modify_xc~3 + +nurbs_surface%modify_Xc + + + +program~example_ppm3 + + +example_ppm3 + + + + + +program~example_ppm3->proc~modify_xc~3 + + + + + +
                          + Help +
                          +
                          diff --git a/proc/ndgrid3.html b/proc/ndgrid3.html index dc3fa24ac..aa080de14 100644 --- a/proc/ndgrid3.html +++ b/proc/ndgrid3.html @@ -255,18 +255,18 @@

                          Called by

                          - + -proc~ansatz - +proc~ansatz~2 + nurbs_volume%ansatz - + -proc~ansatz->interface~ndgrid +proc~ansatz~2->interface~ndgrid @@ -279,180 +279,180 @@

                          Called by

                          - - -proc~ansatz->interface~gauss_leg + + +proc~ansatz~2->interface~gauss_leg - - -none~derivative - + + +none~derivative~2 + nurbs_volume%derivative - - -proc~ansatz->none~derivative - - + + +proc~ansatz~2->none~derivative~2 + + - + -proc~ansatz~2 - +proc~ansatz~3 + nurbs_surface%ansatz - + -proc~ansatz~2->interface~ndgrid +proc~ansatz~3->interface~ndgrid - - -proc~ansatz~2->interface~gauss_leg + + +proc~ansatz~3->interface~gauss_leg - + -none~derivative~2 - +none~derivative~3 + nurbs_surface%derivative - + -proc~ansatz~2->none~derivative~2 +proc~ansatz~3->none~derivative~3 - + -proc~basis_vector - +proc~basis_vector~2 + nurbs_volume%basis_vector - + -proc~basis_vector->interface~ndgrid +proc~basis_vector~2->interface~ndgrid - + -proc~basis_vector~2 - +proc~basis_vector~3 + nurbs_surface%basis_vector - + -proc~basis_vector~2->interface~ndgrid +proc~basis_vector~3->interface~ndgrid - + -proc~create - +proc~create~2 + nurbs_volume%create - + -proc~create->interface~ndgrid +proc~create~2->interface~ndgrid - + -proc~create~2 - +proc~create~3 + nurbs_surface%create - + -proc~create~2->interface~ndgrid +proc~create~3->interface~ndgrid - + -proc~derivative2_vector - +proc~derivative2_vector~2 + nurbs_volume%derivative2_vector - + -proc~derivative2_vector->interface~ndgrid +proc~derivative2_vector~2->interface~ndgrid - + -proc~derivative2_vector~2 - +proc~derivative2_vector~3 + nurbs_surface%derivative2_vector - + -proc~derivative2_vector~2->interface~ndgrid +proc~derivative2_vector~3->interface~ndgrid - + -proc~derivative_vector - +proc~derivative_vector~2 + nurbs_volume%derivative_vector - + -proc~derivative_vector->interface~ndgrid +proc~derivative_vector~2->interface~ndgrid - + -proc~derivative_vector~2 - +proc~derivative_vector~3 + nurbs_surface%derivative_vector - + -proc~derivative_vector~2->interface~ndgrid +proc~derivative_vector~3->interface~ndgrid @@ -498,45 +498,45 @@

                          Called by

                          - - -none~derivative->proc~derivative_vector - - - - - -none~derivative2 - + + +none~derivative2~2 + nurbs_volume%derivative2 - + -none~derivative2->proc~derivative2_vector +none~derivative2~2->proc~derivative2_vector~2 - - -none~derivative2~2 - + + +none~derivative2~3 + nurbs_surface%derivative2 - + -none~derivative2~2->proc~derivative2_vector~2 +none~derivative2~3->proc~derivative2_vector~3 - + none~derivative~2->proc~derivative_vector~2 + + + + + +none~derivative~3->proc~derivative_vector~3 @@ -549,9 +549,9 @@

                          Called by

                          - + -proc~cmp_area->proc~ansatz~2 +proc~cmp_area->proc~ansatz~3 @@ -564,53 +564,53 @@

                          Called by

                          - + -proc~cmp_volume->proc~ansatz +proc~cmp_volume->proc~ansatz~2 - + -proc~nearest_point2 - +proc~nearest_point2~2 + nurbs_volume%nearest_point2 - + -proc~nearest_point2->proc~create +proc~nearest_point2~2->proc~create~2 - - -proc~nearest_point2->none~derivative2 - - + + +proc~nearest_point2~2->none~derivative2~2 + + - + -proc~nearest_point2~2 - +proc~nearest_point2~3 + nurbs_surface%nearest_point2 - + -proc~nearest_point2~2->proc~create~2 +proc~nearest_point2~3->proc~create~3 - - -proc~nearest_point2~2->none~derivative2~2 - - + + +proc~nearest_point2~3->none~derivative2~3 + + @@ -621,9 +621,9 @@

                          Called by

                          - + -program~example3_surface->proc~create~2 +program~example3_surface->proc~create~3 @@ -636,9 +636,9 @@

                          Called by

                          - + -program~example3_volume->proc~create +program~example3_volume->proc~create~2 @@ -651,9 +651,9 @@

                          Called by

                          - + -program~example_nurbs_surface->proc~create~2 +program~example_nurbs_surface->proc~create~3 @@ -666,9 +666,9 @@

                          Called by

                          - + -program~example_nurbs_volume->proc~create +program~example_nurbs_volume->proc~create~2 @@ -681,9 +681,9 @@

                          Called by

                          - + -program~example_ppm1->proc~create~2 +program~example_ppm1->proc~create~3 @@ -696,9 +696,9 @@

                          Called by

                          - + -program~example_ppm2->proc~create~2 +program~example_ppm2->proc~create~3 @@ -711,9 +711,9 @@

                          Called by

                          - + -program~example_ppm3->proc~create~2 +program~example_ppm3->proc~create~3 @@ -726,15 +726,15 @@

                          Called by

                          - + -program~nearest_point_2d->proc~create~2 +program~nearest_point_2d->proc~create~3 - + -program~nearest_point_2d->proc~nearest_point2~2 +program~nearest_point_2d->proc~nearest_point2~3 @@ -747,9 +747,9 @@

                          Called by

                          - + -program~nearest_point_2d_bench->proc~create~2 +program~nearest_point_2d_bench->proc~create~3 @@ -762,15 +762,15 @@

                          Called by

                          - + -program~nearest_point_3d->proc~create +program~nearest_point_3d->proc~create~2 - + -program~nearest_point_3d->proc~nearest_point2 +program~nearest_point_3d->proc~nearest_point2~2 @@ -783,9 +783,9 @@

                          Called by

                          - + -program~shape_c_2d->proc~create~2 +program~shape_c_2d->proc~create~3 @@ -798,9 +798,9 @@

                          Called by

                          - + -program~shape_c_3d->proc~create +program~shape_c_3d->proc~create~2 @@ -813,9 +813,9 @@

                          Called by

                          - + -program~shape_half_ring_2d->proc~create~2 +program~shape_half_ring_2d->proc~create~3 @@ -828,9 +828,9 @@

                          Called by

                          - + -program~shape_half_ring_3d->proc~create +program~shape_half_ring_3d->proc~create~2 @@ -843,9 +843,9 @@

                          Called by

                          - + -program~shape_hexahedron->proc~create +program~shape_hexahedron->proc~create~2 @@ -858,9 +858,9 @@

                          Called by

                          - + -program~shape_ring_2d->proc~create~2 +program~shape_ring_2d->proc~create~3 @@ -873,9 +873,9 @@

                          Called by

                          - + -program~shape_ring_3d->proc~create +program~shape_ring_3d->proc~create~2 @@ -888,24 +888,24 @@

                          Called by

                          - + -program~shape_tetragon->proc~create~2 +program~shape_tetragon->proc~create~3 - + -proc~ansatz~3 - +proc~ansatz + nurbs_curve%ansatz - - -proc~ansatz~3->interface~gauss_leg + + +proc~ansatz->interface~gauss_leg @@ -948,9 +948,9 @@

                          Called by

                          - + -proc~cmp_length->proc~ansatz~3 +proc~cmp_length->proc~ansatz @@ -1087,7 +1087,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/nearest_point.html b/proc/nearest_point.html index 6d1efd7d9..04e774e30 100644 --- a/proc/nearest_point.html +++ b/proc/nearest_point.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_volume

                          +

                          nurbs_curve

                          Arguments

                          - - class(nurbs_curve), + + class(nurbs_surface), intent(inout) @@ -203,7 +203,7 @@

                          Arguments

                          - + integer, intent(in)
                          @@ -158,8 +158,8 @@

                          Arguments

                          - - + @@ -246,31 +246,31 @@

                          Calls

                          - + proc~~nearest_point~~CallsGraph - + proc~nearest_point - -nurbs_volume%nearest_point + +nurbs_curve%nearest_point - + -interface~nearest_point_help_3d - - -nearest_point_help_3d +interface~nearest_point_help_1d + + +nearest_point_help_1d - + -proc~nearest_point->interface~nearest_point_help_3d - - +proc~nearest_point->interface~nearest_point_help_1d + + @@ -366,52 +366,52 @@

                          Called by

                          - + proc~~nearest_point~~CalledByGraph - + proc~nearest_point - -nurbs_volume%nearest_point + +nurbs_curve%nearest_point proc~nearest_point2 - - -nurbs_volume%nearest_point2 + + +nurbs_curve%nearest_point2 proc~nearest_point2->proc~nearest_point - - + + - + -program~nearest_point_3d - +program~nearest_point_1d + -nearest_point_3d +nearest_point_1d - + -program~nearest_point_3d->proc~nearest_point - - +program~nearest_point_1d->proc~nearest_point + + - + -program~nearest_point_3d->proc~nearest_point2 - - +program~nearest_point_1d->proc~nearest_point2 + + @@ -527,7 +527,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/nearest_point2.html b/proc/nearest_point2.html index 47b593638..b00ff6641 100644 --- a/proc/nearest_point2.html +++ b/proc/nearest_point2.html @@ -78,20 +78,20 @@

                          nearest_point2
                        • 73 statements + title=" 0.8% of total for procedures.">53 statements
                        • - Source File + Source File
                        • @@ -143,7 +143,7 @@

                          private impure subroutine nearest_point2(this, point_Xg, tol, maxit, nearest

                          Type Bound

                          -

                          nurbs_volume

                          +

                          nurbs_curve

                          Arguments

                          - - class(nurbs_volume), + + class(nurbs_curve), intent(in) @@ -207,11 +207,11 @@

                          Arguments

                          real(kind=rk),
                          intent(out),optional, - allocatable + optional + ::nearest_Xt(:)nearest_Xt
                          @@ -158,8 +158,8 @@

                          Arguments

                          - + @@ -261,298 +261,211 @@

                          Calls

                          - - + + proc~~nearest_point2~~CallsGraph - + proc~nearest_point2 - -nurbs_volume%nearest_point2 + +nurbs_curve%nearest_point2 none~derivative2 - - -nurbs_volume%derivative2 + + +nurbs_curve%derivative2 proc~nearest_point2->none~derivative2 - - + + proc~cmp_xg - - -nurbs_volume%cmp_Xg + + +nurbs_curve%cmp_Xg proc~nearest_point2->proc~cmp_xg - - + + proc~create - - -nurbs_volume%create + + +nurbs_curve%create proc~nearest_point2->proc~create - - + + proc~finalize - - -nurbs_volume%finalize + + +nurbs_curve%finalize proc~nearest_point2->proc~finalize - - - - - -proc~inv - - -inv - - - - - -proc~nearest_point2->proc~inv - - + + - + proc~nearest_point - - -nurbs_volume%nearest_point + + +nurbs_curve%nearest_point - + proc~nearest_point2->proc~nearest_point - - + + - + proc~derivative2_scalar - - -nurbs_volume%derivative2_scalar + + +nurbs_curve%derivative2_scalar - + none~derivative2->proc~derivative2_scalar - - + + - + proc~derivative2_vector - - -nurbs_volume%derivative2_vector + + +nurbs_curve%derivative2_vector - + none~derivative2->proc~derivative2_vector - - + + - + interface~compute_xg - - -compute_Xg + + +compute_Xg - + proc~cmp_xg->interface~compute_xg - - + + - + proc~is_rational - - -nurbs_volume%is_rational + + +nurbs_curve%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~inv->proc~inv - - - - - -proc~det - - -det - - - - - -proc~inv->proc~det - - - - - -interface~nearest_point_help_3d - - -nearest_point_help_3d - + + - - - -proc~nearest_point->interface~nearest_point_help_3d - - - - - -proc~ndgrid2 - - -ndgrid2 - - - - - -interface~ndgrid->proc~ndgrid2 - - - - - -proc~ndgrid3 - - -ndgrid3 + + +interface~nearest_point_help_1d + + +nearest_point_help_1d - - -interface~ndgrid->proc~ndgrid3 - - + + +proc~nearest_point->interface~nearest_point_help_1d + + - + proc~derivative2_scalar->proc~is_rational - - + + - + interface~compute_d2tgc - - -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 - - + + @@ -652,31 +565,31 @@

                          Called by

                          - + proc~~nearest_point2~~CalledByGraph - + proc~nearest_point2 - -nurbs_volume%nearest_point2 + +nurbs_curve%nearest_point2 - + -program~nearest_point_3d - +program~nearest_point_1d + -nearest_point_3d +nearest_point_1d - + -program~nearest_point_3d->proc~nearest_point2 - - +program~nearest_point_1d->proc~nearest_point2 + + @@ -792,7 +705,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/nearest_point2~2.html b/proc/nearest_point2~2.html index 45970a7aa..1145fea23 100644 --- a/proc/nearest_point2~2.html +++ b/proc/nearest_point2~2.html @@ -78,20 +78,20 @@

                          nearest_point2
                        • 62 statements + title=" 1.1% of total for procedures.">73 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_volume

                          Arguments

                          - - class(nurbs_volume), + + class(nurbs_curve), intent(inout) @@ -226,7 +226,7 @@

                          Arguments

                          ::nearest_Xt(3)nearest_Xt
                          @@ -158,8 +158,8 @@

                          Arguments

                          @@ -226,14 +226,14 @@

                          Arguments

                          - + @@ -270,14 +270,14 @@

                          Calls

                          proc~nearest_point2~2 -nurbs_surface%nearest_point2 +nurbs_volume%nearest_point2 none~derivative2~2 - + -nurbs_surface%derivative2 +nurbs_volume%derivative2 @@ -290,9 +290,9 @@

                          Calls

                          proc~cmp_xg~2 - + -nurbs_surface%cmp_Xg +nurbs_volume%cmp_Xg @@ -305,9 +305,9 @@

                          Calls

                          proc~create~2 - + -nurbs_surface%create +nurbs_volume%create @@ -320,9 +320,9 @@

                          Calls

                          proc~finalize~2 - + -nurbs_surface%finalize +nurbs_volume%finalize @@ -350,9 +350,9 @@

                          Calls

                          proc~nearest_point~2 - + -nurbs_surface%nearest_point +nurbs_volume%nearest_point @@ -365,9 +365,9 @@

                          Calls

                          proc~derivative2_scalar~2 - + -nurbs_surface%derivative2_scalar +nurbs_volume%derivative2_scalar @@ -380,9 +380,9 @@

                          Calls

                          proc~derivative2_vector~2 - + -nurbs_surface%derivative2_vector +nurbs_volume%derivative2_vector @@ -410,9 +410,9 @@

                          Calls

                          proc~is_rational~2 - + -nurbs_surface%is_rational +nurbs_volume%is_rational @@ -470,18 +470,18 @@

                          Calls

                          - + -interface~nearest_point_help_2d - +interface~nearest_point_help_3d + -nearest_point_help_2d +nearest_point_help_3d - + -proc~nearest_point~2->interface~nearest_point_help_2d +proc~nearest_point~2->interface~nearest_point_help_3d @@ -661,20 +661,20 @@

                          Called by

                          proc~nearest_point2~2 -nurbs_surface%nearest_point2 +nurbs_volume%nearest_point2 - + -program~nearest_point_2d - +program~nearest_point_3d + -nearest_point_2d +nearest_point_3d - + -program~nearest_point_2d->proc~nearest_point2~2 +program~nearest_point_3d->proc~nearest_point2~2 @@ -792,7 +792,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/nearest_point2~3.html b/proc/nearest_point2~3.html index 2c3e75b10..43973bc6e 100644 --- a/proc/nearest_point2~3.html +++ b/proc/nearest_point2~3.html @@ -78,20 +78,20 @@

                          nearest_point2
                        • 53 statements + title=" 0.9% of total for procedures.">62 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_volume), intent(inout) @@ -218,7 +218,7 @@

                          Arguments

                          - + real(kind=rk), intent(out) ::nearest_Xt(2)nearest_Xt(3)
                          - + real(kind=rk), intent(out),
                          @@ -159,7 +159,7 @@

                          Arguments

                          @@ -226,14 +226,14 @@

                          Arguments

                          - + @@ -261,211 +261,298 @@

                          Calls

                          - - + + proc~~nearest_point2~3~~CallsGraph - + proc~nearest_point2~3 - -nurbs_curve%nearest_point2 + +nurbs_surface%nearest_point2 none~derivative2~3 - - -nurbs_curve%derivative2 + + +nurbs_surface%derivative2 proc~nearest_point2~3->none~derivative2~3 - - + + proc~cmp_xg~3 - - -nurbs_curve%cmp_Xg + + +nurbs_surface%cmp_Xg proc~nearest_point2~3->proc~cmp_xg~3 - - + + proc~create~3 - - -nurbs_curve%create + + +nurbs_surface%create proc~nearest_point2~3->proc~create~3 - - + + proc~finalize~3 - - -nurbs_curve%finalize + + +nurbs_surface%finalize proc~nearest_point2~3->proc~finalize~3 - - + + - + +proc~inv + + +inv + + + + + +proc~nearest_point2~3->proc~inv + + + + + proc~nearest_point~3 - - -nurbs_curve%nearest_point + + +nurbs_surface%nearest_point - + proc~nearest_point2~3->proc~nearest_point~3 - - + + - + proc~derivative2_scalar~3 - - -nurbs_curve%derivative2_scalar + + +nurbs_surface%derivative2_scalar - + none~derivative2~3->proc~derivative2_scalar~3 - - + + - + proc~derivative2_vector~3 - - -nurbs_curve%derivative2_vector + + +nurbs_surface%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_curve%is_rational + + +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 - - + + - - -interface~nearest_point_help_1d - - -nearest_point_help_1d + + +proc~inv->proc~inv + + + + + +proc~det + + +det - - -proc~nearest_point~3->interface~nearest_point_help_1d - - + + +proc~inv->proc~det + + + + + +interface~nearest_point_help_2d + + +nearest_point_help_2d + + + + + +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->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 - - + + @@ -565,31 +652,31 @@

                          Called by

                          - + proc~~nearest_point2~3~~CalledByGraph - + proc~nearest_point2~3 - -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~3 - - +program~nearest_point_2d->proc~nearest_point2~3 + + @@ -705,7 +792,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/nearest_point_help_1d.html b/proc/nearest_point_help_1d.html index 56151f475..980445989 100644 --- a/proc/nearest_point_help_1d.html +++ b/proc/nearest_point_help_1d.html @@ -287,7 +287,7 @@

                          Arguments

                          @@ -302,7 +302,7 @@

                          Arguments

                          @@ -317,7 +317,7 @@

                          Arguments

                          @@ -335,7 +335,7 @@

                          Arguments

                          Return Value - + real(kind=rk), allocatable, (:)

                          @@ -371,7 +371,7 @@

                          Return Value

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/nearest_point_help_2d.html b/proc/nearest_point_help_2d.html index 84ff4432a..b36411481 100644 --- a/proc/nearest_point_help_2d.html +++ b/proc/nearest_point_help_2d.html @@ -287,7 +287,7 @@

                          Arguments

                          @@ -302,7 +302,7 @@

                          Arguments

                          @@ -317,7 +317,7 @@

                          Arguments

                          @@ -335,7 +335,7 @@

                          Arguments

                          Return Value - + real(kind=rk), allocatable, (:)

                          @@ -371,7 +371,7 @@

                          Return Value

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/nearest_point_help_3d.html b/proc/nearest_point_help_3d.html index 1b26d5125..1952164e1 100644 --- a/proc/nearest_point_help_3d.html +++ b/proc/nearest_point_help_3d.html @@ -287,7 +287,7 @@

                          Arguments

                          @@ -302,7 +302,7 @@

                          Arguments

                          @@ -317,7 +317,7 @@

                          Arguments

                          @@ -335,7 +335,7 @@

                          Arguments

                          Return Value - + real(kind=rk), allocatable, (:)

                          @@ -371,7 +371,7 @@

                          Return Value

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/nearest_point~2.html b/proc/nearest_point~2.html index cc72c04c7..daf2b726b 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_surface

                          +

                          nurbs_volume

                          Arguments

                          - class(nurbs_curve), + class(nurbs_surface), intent(inout) @@ -218,7 +218,7 @@

                          Arguments

                          - + real(kind=rk), intent(out) ::nearest_Xtnearest_Xt(2)
                          - + 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),
                          - + integer, intent(in)
                          - + real(kind=rk), intent(in),
                          - + real(kind=rk), intent(in),
                          @@ -158,8 +158,8 @@

                          Arguments

                          @@ -203,7 +203,7 @@

                          Arguments

                          @@ -218,7 +218,7 @@

                          Arguments

                          @@ -255,20 +255,20 @@

                          Calls

                          proc~nearest_point~2 -nurbs_surface%nearest_point +nurbs_volume%nearest_point - + -interface~nearest_point_help_2d - +interface~nearest_point_help_3d + -nearest_point_help_2d +nearest_point_help_3d - + -proc~nearest_point~2->interface~nearest_point_help_2d +proc~nearest_point~2->interface~nearest_point_help_3d @@ -366,67 +366,52 @@

                          Called by

                          - - + + proc~~nearest_point~2~~CalledByGraph - + proc~nearest_point~2 - -nurbs_surface%nearest_point + +nurbs_volume%nearest_point proc~nearest_point2~2 - - -nurbs_surface%nearest_point2 + + +nurbs_volume%nearest_point2 proc~nearest_point2~2->proc~nearest_point~2 - - + + - + -program~nearest_point_2d - - -nearest_point_2d +program~nearest_point_3d + + +nearest_point_3d - + -program~nearest_point_2d->proc~nearest_point~2 - - +program~nearest_point_3d->proc~nearest_point~2 + + - - -program~nearest_point_2d->proc~nearest_point2~2 - - - - - -program~nearest_point_2d_bench - - -nearest_point_2d_bench - - - - + -program~nearest_point_2d_bench->proc~nearest_point~2 - - +program~nearest_point_3d->proc~nearest_point2~2 + + @@ -542,7 +527,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/nearest_point~3.html b/proc/nearest_point~3.html index 9071ca1c3..758ef7a92 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_curve

                          +

                          nurbs_surface

                          Arguments

                          - - class(nurbs_surface), + + class(nurbs_volume), intent(in) @@ -188,7 +188,7 @@

                          Arguments

                          - + real(kind=rk), intent(out),
                          - + real(kind=rk), intent(out),
                          - + integer, intent(out),
                          @@ -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_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~3->interface~nearest_point_help_1d - - +proc~nearest_point~3->interface~nearest_point_help_2d + + @@ -366,52 +366,67 @@

                          Called by

                          - - + + proc~~nearest_point~3~~CalledByGraph - + proc~nearest_point~3 - -nurbs_curve%nearest_point + +nurbs_surface%nearest_point proc~nearest_point2~3 - - -nurbs_curve%nearest_point2 + + +nurbs_surface%nearest_point2 proc~nearest_point2~3->proc~nearest_point~3 - - + + - + -program~nearest_point_1d - - -nearest_point_1d +program~nearest_point_2d + + +nearest_point_2d - + -program~nearest_point_1d->proc~nearest_point~3 - - +program~nearest_point_2d->proc~nearest_point~3 + + + + + +program~nearest_point_2d->proc~nearest_point2~3 + + + + + +program~nearest_point_2d_bench + + +nearest_point_2d_bench + + - + -program~nearest_point_1d->proc~nearest_point2~3 - - +program~nearest_point_2d_bench->proc~nearest_point~3 + + @@ -527,7 +542,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/put_to_nurbs.html b/proc/put_to_nurbs.html index 31c0a973b..6917fdc6f 100644 --- a/proc/put_to_nurbs.html +++ b/proc/put_to_nurbs.html @@ -158,7 +158,7 @@

                          Arguments

                          @@ -173,7 +173,7 @@

                          Arguments

                          @@ -188,7 +188,7 @@

                          Arguments

                          @@ -257,18 +257,18 @@

                          Calls

                          - + -proc~set_elem_xg_vis - +proc~set_elem_xg_vis~2 + nurbs_volume%set_elem_Xg_vis - + -proc~put_to_nurbs->proc~set_elem_xg_vis +proc~put_to_nurbs->proc~set_elem_xg_vis~2 @@ -506,7 +506,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/remove_knots.html b/proc/remove_knots.html index 2f6fe46e4..3fc5187a4 100644 --- a/proc/remove_knots.html +++ b/proc/remove_knots.html @@ -78,20 +78,20 @@

                          remove_knots
                        • 190 statements + title=" 0.8% 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_volume

                          +

                          nurbs_curve

                          Arguments

                          - class(nurbs_curve), + class(nurbs_surface), intent(in) @@ -188,7 +188,7 @@

                          Arguments

                          - + real(kind=rk), intent(out),
                          - + real(kind=rk), intent(out),optional - + optional, + allocatable ::nearest_Xtnearest_Xt(:)
                          - + integer, intent(out),
                          - + class(nurbs_volume), intent(inout)
                          - + real(kind=rk), intent(in),
                          - + integer, intent(in),
                          @@ -158,8 +158,8 @@

                          Arguments

                          - - - - - - - - @@ -261,7 +261,7 @@

                          Arguments

                          @@ -333,9 +333,9 @@

                          Called by

                          proc~remove_knots - - -nurbs_volume%remove_knots + + +nurbs_curve%remove_knots @@ -348,9 +348,9 @@

                          Called by

                          proc~remove_knots~2 - + -nurbs_surface%remove_knots +nurbs_volume%remove_knots @@ -363,9 +363,9 @@

                          Called by

                          proc~remove_knots~3 - - -nurbs_curve%remove_knots + + +nurbs_surface%remove_knots @@ -379,46 +379,46 @@

                          Called by

                          program~example1_curve - -example1_curve + +example1_curve - - -program~example1_curve->proc~remove_knots~3 - - + + +program~example1_curve->proc~remove_knots + + program~example3_surface - -example3_surface + +example3_surface - - -program~example3_surface->proc~remove_knots~2 - - + + +program~example3_surface->proc~remove_knots~3 + + program~example3_volume - -example3_volume + +example3_volume - - -program~example3_volume->proc~remove_knots - - + + +program~example3_volume->proc~remove_knots~2 + + @@ -534,7 +534,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/remove_knots~2.html b/proc/remove_knots~2.html index 365c177e4..039069ddb 100644 --- a/proc/remove_knots~2.html +++ b/proc/remove_knots~2.html @@ -78,20 +78,20 @@

                          remove_knots
                        • 128 statements + title=" 2.8% of total for procedures.">190 statements
                        • - Source File + Source File
                        • @@ -143,7 +143,7 @@

                          private pure subroutine remove_knots(this, dir, Xth, r)

                          Type Bound

                          -

                          nurbs_surface

                          +

                          nurbs_volume

                          Arguments

                          - - class(nurbs_volume), + + class(nurbs_curve), intent(inout) @@ -171,21 +171,6 @@

                          Arguments

                          - - integer, - intent(in) - - ::dir - -
                          @@ -231,310 +216,274 @@

                          Calls

                          - - + + proc~~remove_knots~~CallsGraph - + proc~remove_knots - -nurbs_volume%remove_knots + +nurbs_curve%remove_knots interface~compute_multiplicity - -compute_multiplicity + +compute_multiplicity proc~remove_knots->interface~compute_multiplicity - - + + - + -none~get_knot - - -nurbs_volume%get_knot +none~set + + +nurbs_curve%set - + -proc~remove_knots->none~get_knot - - +proc~remove_knots->none~set + + - + -none~set - - -nurbs_volume%set +proc~findspan + + +findspan - + -proc~remove_knots->none~set - - +proc~remove_knots->proc~findspan + + - + -proc~findspan - - -findspan +proc~is_rational + + +nurbs_curve%is_rational - + -proc~remove_knots->proc~findspan - - +proc~remove_knots->proc~is_rational + + 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~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 - - -nurbs_volume%get_knot_all +proc~set1 + + +nurbs_curve%set1 - + -none~get_knot->proc~get_knot_all - - +none~set->proc~set1 + + - + -proc~get_knoti - - -nurbs_volume%get_knoti +proc~set1a + + +nurbs_curve%set1a - + -none~get_knot->proc~get_knoti - - - - - -proc~set1 - - -nurbs_volume%set1 - - - - - -none~set->proc~set1 - - +none~set->proc~set1a + + - + proc~set2 - - -nurbs_volume%set2 + + +nurbs_curve%set2 - + none~set->proc~set2 - - + + - + proc~set3 - - -nurbs_volume%set3 + + +nurbs_curve%set3 - + none~set->proc~set3 - - + + - + proc~set4 - - -nurbs_volume%set4 + + +nurbs_curve%set4 - + none~set->proc~set4 - - + + - + proc~cmp_degree - - -nurbs_volume%cmp_degree + + +nurbs_curve%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~set1a->proc~cmp_degree + + - + proc~compute_knot_vector - - -compute_knot_vector + + +compute_knot_vector - + proc~set2->proc~compute_knot_vector - - + + - + proc~set3->proc~cmp_degree - - + + - + proc~get_multiplicity - - -nurbs_volume%get_multiplicity + + +nurbs_curve%get_multiplicity - + proc~cmp_degree->proc~get_multiplicity - - - - - -proc~cmp_nc->interface~compute_multiplicity - - + + - + proc~repelem - - -repelem + + +repelem - + proc~compute_knot_vector->proc~repelem - - + + - + proc~get_multiplicity->interface~compute_multiplicity - - + + @@ -634,31 +583,31 @@

                          Called by

                          - + proc~~remove_knots~~CalledByGraph - + proc~remove_knots - -nurbs_volume%remove_knots + +nurbs_curve%remove_knots - + -program~example3_volume - - -example3_volume +program~example1_curve + + +example1_curve - + -program~example3_volume->proc~remove_knots - - +program~example1_curve->proc~remove_knots + + @@ -774,7 +723,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/remove_knots_a_5_8.html b/proc/remove_knots_a_5_8.html index cfb4fe360..574c004a2 100644 --- a/proc/remove_knots_a_5_8.html +++ b/proc/remove_knots_a_5_8.html @@ -171,7 +171,7 @@

                          Arguments

                          - + real(kind=rk), intent(in),
                          - + integer, intent(out)
                          @@ -158,8 +158,8 @@

                          Arguments

                          @@ -231,325 +231,310 @@

                          Calls

                          - - + + proc~~remove_knots~2~~CallsGraph - + proc~remove_knots~2 -nurbs_surface%remove_knots +nurbs_volume%remove_knots interface~compute_multiplicity - -compute_multiplicity + +compute_multiplicity proc~remove_knots~2->interface~compute_multiplicity - - + + none~get_knot~2 - - -nurbs_surface%get_knot + + +nurbs_volume%get_knot proc~remove_knots~2->none~get_knot~2 - - + + none~set~2 - - -nurbs_surface%set + + +nurbs_volume%set proc~remove_knots~2->none~set~2 - - + + proc~findspan - -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 + + +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 + + +nurbs_volume%get_knot_all - + none~get_knot~2->proc~get_knot_all~2 - - + + - + proc~get_knoti~2 - - -nurbs_surface%get_knoti + + +nurbs_volume%get_knoti - + none~get_knot~2->proc~get_knoti~2 - - + + - + proc~set1~2 - - -nurbs_surface%set1 + + +nurbs_volume%set1 - + none~set~2->proc~set1~2 - - + + - + proc~set2~2 - - -nurbs_surface%set2 + + +nurbs_volume%set2 - + none~set~2->proc~set2~2 - - + + - + proc~set3~2 - - -nurbs_surface%set3 + + +nurbs_volume%set3 - + none~set~2->proc~set3~2 - - + + - + proc~set4~2 - - -nurbs_surface%set4 + + +nurbs_volume%set4 - + none~set~2->proc~set4~2 - - + + - + proc~cmp_degree~2 - - -nurbs_surface%cmp_degree + + +nurbs_volume%cmp_degree - + proc~set1~2->proc~cmp_degree~2 - - + + - + proc~cmp_nc~2 - - -nurbs_surface%cmp_nc + + +nurbs_volume%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_surface%get_multiplicity + + +nurbs_volume%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 - - + + @@ -658,20 +643,20 @@

                          Called by

                          proc~remove_knots~2 -nurbs_surface%remove_knots +nurbs_volume%remove_knots - + -program~example3_surface - +program~example3_volume + -example3_surface +example3_volume - + -program~example3_surface->proc~remove_knots~2 +program~example3_volume->proc~remove_knots~2 @@ -789,7 +774,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/remove_knots~3.html b/proc/remove_knots~3.html index 3b294af3e..ba52f2202 100644 --- a/proc/remove_knots~3.html +++ b/proc/remove_knots~3.html @@ -78,20 +78,20 @@

                          remove_knots
                        • 55 statements + title=" 1.9% 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_volume), intent(inout) @@ -173,7 +173,7 @@

                          Arguments

                          - + integer, intent(in)
                          @@ -158,8 +158,8 @@

                          Arguments

                          + + + + + + + +
                          - - class(nurbs_curve), + + class(nurbs_surface), intent(inout) @@ -171,6 +171,21 @@

                          Arguments

                          + + integer, + intent(in) + + ::dir + +
                          @@ -216,274 +231,325 @@

                          Calls

                          - - + + proc~~remove_knots~3~~CallsGraph - + proc~remove_knots~3 - -nurbs_curve%remove_knots + +nurbs_surface%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_curve%set + + +nurbs_surface%set - + proc~remove_knots~3->none~set~3 - - + + - + proc~findspan - - -findspan + + +findspan - + proc~remove_knots~3->proc~findspan - - + + - + proc~is_rational~3 - - -nurbs_curve%is_rational + + +nurbs_surface%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~set1a - - -nurbs_curve%set1a + + +proc~get_knot_all~3 + + +nurbs_surface%get_knot_all - - -none~set~3->proc~set1a - - + + +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_curve%set1 + + +nurbs_surface%set1 - + none~set~3->proc~set1~3 - - + + - + proc~set2~3 - - -nurbs_curve%set2 + + +nurbs_surface%set2 - + none~set~3->proc~set2~3 - - + + - + proc~set3~3 - - -nurbs_curve%set3 + + +nurbs_surface%set3 - + none~set~3->proc~set3~3 - - + + - + proc~set4~3 - - -nurbs_curve%set4 + + +nurbs_surface%set4 - + none~set~3->proc~set4~3 - - + + - + proc~cmp_degree~3 - - -nurbs_curve%cmp_degree + + +nurbs_surface%cmp_degree - - -proc~set1a->proc~cmp_degree~3 - - - - + 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_curve%get_multiplicity + + +nurbs_surface%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 - - + + @@ -583,31 +649,31 @@

                          Called by

                          - + proc~~remove_knots~3~~CalledByGraph - + proc~remove_knots~3 - -nurbs_curve%remove_knots + +nurbs_surface%remove_knots - + -program~example1_curve - - -example1_curve +program~example3_surface + + +example3_surface - + -program~example1_curve->proc~remove_knots~3 - - +program~example3_surface->proc~remove_knots~3 + + @@ -723,7 +789,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/repelem.html b/proc/repelem.html index 565a119bc..c70628fbd 100644 --- a/proc/repelem.html +++ b/proc/repelem.html @@ -214,1103 +214,1103 @@

                          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_curve%set2 proc~set2->proc~compute_knot_vector - - + + proc~set2~2 - - -nurbs_surface%set2 + + +nurbs_volume%set2 proc~set2~2->proc~compute_knot_vector - - + + proc~set2~3 - - -nurbs_curve%set2 + + +nurbs_surface%set2 proc~set2~3->proc~compute_knot_vector - - + + none~set - - -nurbs_volume%set + + +nurbs_curve%set none~set->proc~set2 - - + + none~set~2 - - -nurbs_surface%set + + +nurbs_volume%set none~set~2->proc~set2~2 - - + + none~set~3 - - -nurbs_curve%set + + +nurbs_surface%set none~set~3->proc~set2~3 - - + + proc~ansatz - - -nurbs_volume%ansatz + + +nurbs_curve%ansatz proc~ansatz->none~set - - + + proc~ansatz~2 - - -nurbs_surface%ansatz + + +nurbs_volume%ansatz - + proc~ansatz~2->none~set~2 - - + + proc~ansatz~3 - - -nurbs_curve%ansatz + + +nurbs_surface%ansatz - + proc~ansatz~3->none~set~3 - - + + proc~elevate_degree - - -nurbs_volume%elevate_degree + + +nurbs_curve%elevate_degree proc~elevate_degree->none~set - - + + proc~elevate_degree~2 - - -nurbs_surface%elevate_degree + + +nurbs_volume%elevate_degree - + proc~elevate_degree~2->none~set~2 - - + + proc~elevate_degree~3 - - -nurbs_curve%elevate_degree + + +nurbs_surface%elevate_degree - + proc~elevate_degree~3->none~set~3 - - + + proc~insert_knots - - -nurbs_volume%insert_knots + + +nurbs_curve%insert_knots proc~insert_knots->none~set - - + + proc~insert_knots~2 - - -nurbs_surface%insert_knots + + +nurbs_volume%insert_knots - + proc~insert_knots~2->none~set~2 - - + + proc~insert_knots~3 - - -nurbs_curve%insert_knots + + +nurbs_surface%insert_knots - + proc~insert_knots~3->none~set~3 - - + + proc~modify_wc - - -nurbs_volume%modify_Wc + + +nurbs_curve%modify_Wc proc~modify_wc->none~set - - + + proc~modify_wc~2 - - -nurbs_surface%modify_Wc + + +nurbs_volume%modify_Wc - + proc~modify_wc~2->none~set~2 - - + + proc~modify_wc~3 - - -nurbs_curve%modify_Wc + + +nurbs_surface%modify_Wc - + proc~modify_wc~3->none~set~3 - - + + proc~modify_xc - - -nurbs_volume%modify_Xc + + +nurbs_curve%modify_Xc proc~modify_xc->none~set - - + + proc~modify_xc~2 - - -nurbs_surface%modify_Xc + + +nurbs_volume%modify_Xc - + proc~modify_xc~2->none~set~2 - - + + proc~modify_xc~3 - - -nurbs_curve%modify_Xc + + +nurbs_surface%modify_Xc - + proc~modify_xc~3->none~set~3 - - + + proc~remove_knots - - -nurbs_volume%remove_knots + + +nurbs_curve%remove_knots proc~remove_knots->none~set - - + + proc~remove_knots~2 - - -nurbs_surface%remove_knots + + +nurbs_volume%remove_knots - + proc~remove_knots~2->none~set~2 - - + + proc~remove_knots~3 - - -nurbs_curve%remove_knots + + +nurbs_surface%remove_knots - + proc~remove_knots~3->none~set~3 - - + + proc~set_c - - -nurbs_volume%set_C + + +nurbs_curve%set_C proc~set_c->none~set - - + + proc~set_circle - -nurbs_curve%set_circle + +nurbs_curve%set_circle - - -proc~set_circle->none~set~3 - - + + +proc~set_circle->none~set + + proc~set_c~2 - - -nurbs_surface%set_C + + +nurbs_volume%set_C - + proc~set_c~2->none~set~2 - - + + proc~set_c~3 - - -nurbs_curve%set_C + + +nurbs_surface%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~3 - - + + +proc~set_half_circle->none~set + + proc~set_half_ring - -nurbs_volume%set_half_ring + +nurbs_volume%set_half_ring - - -proc~set_half_ring->none~set - - + + +proc~set_half_ring->none~set~2 + + proc~set_half_ring~2 - -nurbs_surface%set_half_ring + +nurbs_surface%set_half_ring - - -proc~set_half_ring~2->none~set~2 - - + + +proc~set_half_ring~2->none~set~3 + + proc~set_hexahedron - -nurbs_volume%set_hexahedron + +nurbs_volume%set_hexahedron - - -proc~set_hexahedron->none~set - - + + +proc~set_hexahedron->none~set~2 + + proc~set_ring - -nurbs_volume%set_ring + +nurbs_volume%set_ring - - -proc~set_ring->none~set - - + + +proc~set_ring->none~set~2 + + proc~set_ring~2 - -nurbs_surface%set_ring + +nurbs_surface%set_ring - - -proc~set_ring~2->none~set~2 - - + + +proc~set_ring~2->none~set~3 + + proc~set_tetragon - -nurbs_surface%set_tetragon + +nurbs_surface%set_tetragon - - -proc~set_tetragon->none~set~2 - - + + +proc~set_tetragon->none~set~3 + + program~compute_area - -compute_area + +compute_area - - -program~compute_area->none~set~2 - - + + +program~compute_area->none~set~3 + + proc~cmp_area - -nurbs_surface%cmp_area + +nurbs_surface%cmp_area program~compute_area->proc~cmp_area - - + + program~compute_length - -compute_length + +compute_length - - -program~compute_length->none~set~3 - - + + +program~compute_length->none~set + + proc~cmp_length - -nurbs_curve%cmp_length + +nurbs_curve%cmp_length program~compute_length->proc~cmp_length - - + + program~compute_volume - -compute_volume + +compute_volume - - -program~compute_volume->none~set - - + + +program~compute_volume->none~set~2 + + proc~cmp_volume - -nurbs_volume%cmp_volume + +nurbs_volume%cmp_volume program~compute_volume->proc~cmp_volume - - + + program~example1_curve - -example1_curve + +example1_curve - - -program~example1_curve->none~set~3 - - + + +program~example1_curve->none~set + + - - -program~example1_curve->proc~elevate_degree~3 - - + + +program~example1_curve->proc~elevate_degree + + - - -program~example1_curve->proc~insert_knots~3 - - + + +program~example1_curve->proc~insert_knots + + - - -program~example1_curve->proc~remove_knots~3 - - + + +program~example1_curve->proc~remove_knots + + program~example3_surface - -example3_surface + +example3_surface - - -program~example3_surface->none~set~2 - - + + +program~example3_surface->none~set~3 + + - - -program~example3_surface->proc~elevate_degree~2 - - + + +program~example3_surface->proc~elevate_degree~3 + + - - -program~example3_surface->proc~insert_knots~2 - - + + +program~example3_surface->proc~insert_knots~3 + + - - -program~example3_surface->proc~remove_knots~2 - - + + +program~example3_surface->proc~remove_knots~3 + + program~example3_volume - -example3_volume + +example3_volume - - -program~example3_volume->none~set - - + + +program~example3_volume->none~set~2 + + - - -program~example3_volume->proc~elevate_degree - - + + +program~example3_volume->proc~elevate_degree~2 + + - - -program~example3_volume->proc~insert_knots - - + + +program~example3_volume->proc~insert_knots~2 + + - - -program~example3_volume->proc~remove_knots - - + + +program~example3_volume->proc~remove_knots~2 + + program~example_nurbs_curve - -example_nurbs_curve + +example_nurbs_curve - - -program~example_nurbs_curve->none~set~3 - - + + +program~example_nurbs_curve->none~set + + program~example_nurbs_surface - -example_nurbs_surface + +example_nurbs_surface - - -program~example_nurbs_surface->none~set~2 - - + + +program~example_nurbs_surface->none~set~3 + + program~example_nurbs_volume - -example_nurbs_volume + +example_nurbs_volume - - -program~example_nurbs_volume->none~set - - + + +program~example_nurbs_volume->none~set~2 + + 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->none~set~2 + + program~nearest_point_1d - -nearest_point_1d + +nearest_point_1d - - -program~nearest_point_1d->none~set~3 - - + + +program~nearest_point_1d->none~set + + program~nearest_point_2d - -nearest_point_2d + +nearest_point_2d - - -program~nearest_point_2d->none~set~2 - - + + +program~nearest_point_2d->none~set~3 + + program~nearest_point_3d - -nearest_point_3d + +nearest_point_3d - - -program~nearest_point_3d->none~set - - - - - -proc~cmp_area->proc~ansatz~2 - - + + +program~nearest_point_3d->none~set~2 + + - + -proc~cmp_length->proc~ansatz~3 - - +proc~cmp_area->proc~ansatz~3 + + - + -proc~cmp_volume->proc~ansatz - - +proc~cmp_length->proc~ansatz + + + + + +proc~cmp_volume->proc~ansatz~2 + + 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~2 - - +program~example_ppm3->proc~modify_xc~3 + + 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~3 - - + + +program~shape_c_1d->proc~set_c + + program~shape_c_2d - -shape_C_2d + +shape_C_2d - - -program~shape_c_2d->proc~set_c~2 - - + + +program~shape_c_2d->proc~set_c~3 + + program~shape_c_3d - -shape_C_3d + +shape_C_3d - - -program~shape_c_3d->proc~set_c - - + + +program~shape_c_3d->proc~set_c~2 + + 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 - - + + program~shape_half_ring_3d - -shape_half_ring_3d + +shape_half_ring_3d program~shape_half_ring_3d->proc~set_half_ring - - + + program~shape_hexahedron - -shape_hexahedron + +shape_hexahedron program~shape_hexahedron->proc~set_hexahedron - - + + 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 - - + + @@ -1430,7 +1430,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/rotate_xc.html b/proc/rotate_xc.html index 7299d3dc1..11825cfd9 100644 --- a/proc/rotate_xc.html +++ b/proc/rotate_xc.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_volume

                          +

                          nurbs_curve

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          @@ -231,55 +231,55 @@

                          Calls

                          - + proc~~rotate_xc~~CallsGraph - + proc~rotate_xc - -nurbs_volume%rotate_Xc + +nurbs_curve%rotate_Xc proc~rotation - -rotation + +rotation proc~rotate_xc->proc~rotation - - + + cosd - -cosd + +cosd proc~rotation->cosd - - + + sind - -sind + +sind proc~rotation->sind - - + + @@ -375,31 +375,31 @@

                          Called by

                          - + proc~~rotate_xc~~CalledByGraph - + proc~rotate_xc - -nurbs_volume%rotate_Xc + +nurbs_curve%rotate_Xc - + -program~example3_volume - - -example3_volume +program~example1_curve + + +example1_curve - + -program~example3_volume->proc~rotate_xc - - +program~example1_curve->proc~rotate_xc + + @@ -515,7 +515,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/rotate_xc~2.html b/proc/rotate_xc~2.html index 15c60c21a..aaea9be2d 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_surface

                          +

                          nurbs_volume

                          Arguments

                          - - class(nurbs_volume), + + class(nurbs_curve), intent(inout) @@ -203,7 +203,7 @@

                          Arguments

                          - + real(kind=rk), intent(in)
                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_surface), + + class(nurbs_volume), intent(inout) @@ -240,7 +240,7 @@

                          Calls

                          proc~rotate_xc~2 -nurbs_surface%rotate_Xc +nurbs_volume%rotate_Xc @@ -375,46 +375,31 @@

                          Called by

                          - - + + proc~~rotate_xc~2~~CalledByGraph - + proc~rotate_xc~2 - -nurbs_surface%rotate_Xc + +nurbs_volume%rotate_Xc - + -program~example3_surface - - -example3_surface +program~example3_volume + + +example3_volume - + -program~example3_surface->proc~rotate_xc~2 - - - - - -program~example_ppm2 - - -example_ppm2 - - - - - -program~example_ppm2->proc~rotate_xc~2 - - +program~example3_volume->proc~rotate_xc~2 + + @@ -530,7 +515,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/rotate_xc~3.html b/proc/rotate_xc~3.html index 37b307523..12b283052 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_curve

                          +

                          nurbs_surface

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_curve), + + class(nurbs_surface), intent(inout) @@ -231,55 +231,55 @@

                          Calls

                          - + proc~~rotate_xc~3~~CallsGraph - + proc~rotate_xc~3 - -nurbs_curve%rotate_Xc + +nurbs_surface%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,31 +375,46 @@

                          Called by

                          - - + + proc~~rotate_xc~3~~CalledByGraph - + proc~rotate_xc~3 - -nurbs_curve%rotate_Xc + +nurbs_surface%rotate_Xc - + -program~example1_curve - - -example1_curve +program~example3_surface + + +example3_surface - + -program~example1_curve->proc~rotate_xc~3 - - +program~example3_surface->proc~rotate_xc~3 + + + + + +program~example_ppm2 + + +example_ppm2 + + + + + +program~example_ppm2->proc~rotate_xc~3 + + @@ -515,7 +530,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/rotate_xg.html b/proc/rotate_xg.html index f6e8155ca..c95250db2 100644 --- a/proc/rotate_xg.html +++ b/proc/rotate_xg.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_volume

                          +

                          nurbs_curve

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          @@ -231,55 +231,55 @@

                          Calls

                          - + proc~~rotate_xg~~CallsGraph - + proc~rotate_xg - -nurbs_volume%rotate_Xg + +nurbs_curve%rotate_Xg proc~rotation - -rotation + +rotation proc~rotate_xg->proc~rotation - - + + cosd - -cosd + +cosd proc~rotation->cosd - - + + sind - -sind + +sind proc~rotation->sind - - + + @@ -375,31 +375,31 @@

                          Called by

                          - + proc~~rotate_xg~~CalledByGraph - + proc~rotate_xg - -nurbs_volume%rotate_Xg + +nurbs_curve%rotate_Xg - + -program~example3_volume - - -example3_volume +program~example1_curve + + +example1_curve - + -program~example3_volume->proc~rotate_xg - - +program~example1_curve->proc~rotate_xg + + @@ -515,7 +515,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/rotate_xg~2.html b/proc/rotate_xg~2.html index a9da16539..0ca45b287 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_surface

                          +

                          nurbs_volume

                          Arguments

                          - - class(nurbs_volume), + + class(nurbs_curve), intent(inout) @@ -203,7 +203,7 @@

                          Arguments

                          - + real(kind=rk), intent(in)
                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_surface), + + class(nurbs_volume), intent(inout) @@ -240,7 +240,7 @@

                          Calls

                          proc~rotate_xg~2 -nurbs_surface%rotate_Xg +nurbs_volume%rotate_Xg @@ -384,20 +384,20 @@

                          Called by

                          proc~rotate_xg~2 -nurbs_surface%rotate_Xg +nurbs_volume%rotate_Xg - + -program~example3_surface - +program~example3_volume + -example3_surface +example3_volume - + -program~example3_surface->proc~rotate_xg~2 +program~example3_volume->proc~rotate_xg~2 @@ -515,7 +515,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/rotate_xg~3.html b/proc/rotate_xg~3.html index 95ada9c6d..1cb8d0d79 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_curve

                          +

                          nurbs_surface

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_curve), + + class(nurbs_surface), intent(inout) @@ -231,55 +231,55 @@

                          Calls

                          - + proc~~rotate_xg~3~~CallsGraph - + proc~rotate_xg~3 - -nurbs_curve%rotate_Xg + +nurbs_surface%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_curve%rotate_Xg + +nurbs_surface%rotate_Xg - + -program~example1_curve - - -example1_curve +program~example3_surface + + +example3_surface - + -program~example1_curve->proc~rotate_xg~3 - - +program~example3_surface->proc~rotate_xg~3 + + @@ -515,7 +515,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/rotation.html b/proc/rotation.html index 577458e56..bf94bcf37 100644 --- a/proc/rotation.html +++ b/proc/rotation.html @@ -364,9 +364,9 @@

                          Called by

                          proc~rotate_xc - - -nurbs_volume%rotate_Xc + + +nurbs_curve%rotate_Xc @@ -379,9 +379,9 @@

                          Called by

                          proc~rotate_xc~2 - + -nurbs_surface%rotate_Xc +nurbs_volume%rotate_Xc @@ -394,9 +394,9 @@

                          Called by

                          proc~rotate_xc~3 - - -nurbs_curve%rotate_Xc + + +nurbs_surface%rotate_Xc @@ -409,9 +409,9 @@

                          Called by

                          proc~rotate_xg - - -nurbs_volume%rotate_Xg + + +nurbs_curve%rotate_Xg @@ -424,9 +424,9 @@

                          Called by

                          proc~rotate_xg~2 - + -nurbs_surface%rotate_Xg +nurbs_volume%rotate_Xg @@ -439,9 +439,9 @@

                          Called by

                          proc~rotate_xg~3 - - -nurbs_curve%rotate_Xg + + +nurbs_surface%rotate_Xg @@ -455,79 +455,79 @@

                          Called by

                          program~example1_curve - -example1_curve + +example1_curve - - -program~example1_curve->proc~rotate_xc~3 - - + + +program~example1_curve->proc~rotate_xc + + - - -program~example1_curve->proc~rotate_xg~3 - - + + +program~example1_curve->proc~rotate_xg + + program~example3_surface - -example3_surface + +example3_surface - - -program~example3_surface->proc~rotate_xc~2 - - + + +program~example3_surface->proc~rotate_xc~3 + + - - -program~example3_surface->proc~rotate_xg~2 - - + + +program~example3_surface->proc~rotate_xg~3 + + program~example3_volume - -example3_volume + +example3_volume - - -program~example3_volume->proc~rotate_xc - - + + +program~example3_volume->proc~rotate_xc~2 + + - - -program~example3_volume->proc~rotate_xg - - + + +program~example3_volume->proc~rotate_xg~2 + + program~example_ppm2 - -example_ppm2 + +example_ppm2 - - -program~example_ppm2->proc~rotate_xc~2 - - + + +program~example_ppm2->proc~rotate_xc~3 + + @@ -643,7 +643,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/set1.html b/proc/set1.html index 3f4ab981c..78be84f42 100644 --- a/proc/set1.html +++ b/proc/set1.html @@ -78,20 +78,20 @@

                          set1
                        • 24 statements + title=" 0.3% of total for procedures.">20 statements
                        • - Source File + Source File
                        • -

                          private pure subroutine set1(this, knot1, knot2, knot3, Xc, Wc) +

                          private pure subroutine set1(this, knot, Xc, Wc)

                          -

                          Set control points and weights for the NURBS volume object.

                          +

                          Set knot vector, control points and weights for the NURBS curve object.

                          Type Bound

                          -

                          nurbs_volume

                          +

                          nurbs_curve

                          Arguments

                          @@ -160,7 +160,7 @@

                          Arguments

                          @@ -182,44 +182,14 @@

                          Arguments

                          contiguous - + - - - - - - - - - - - - - - - - @@ -234,7 +204,7 @@

                          Arguments

                          @@ -262,112 +232,91 @@

                          Calls

                          - - + + proc~~set1~~CallsGraph - + proc~set1 - -nurbs_volume%set1 + +nurbs_curve%set1 proc~cmp_degree - - -nurbs_volume%cmp_degree + + +nurbs_curve%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 + + +nurbs_curve%get_multiplicity - + proc~cmp_degree->proc~get_multiplicity - - + + interface~compute_multiplicity - -compute_multiplicity + +compute_multiplicity - - -proc~cmp_nc->interface~compute_multiplicity - - + + +proc~get_multiplicity->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->interface~compute_multiplicity - - + + @@ -467,355 +416,310 @@

                          Called by

                          - - + + proc~~set1~~CalledByGraph - + proc~set1 - -nurbs_volume%set1 + +nurbs_curve%set1 none~set - - -nurbs_volume%set + + +nurbs_curve%set none~set->proc~set1 - - + + proc~ansatz - - -nurbs_volume%ansatz + + +nurbs_curve%ansatz proc~ansatz->none~set - - + + proc~elevate_degree - - -nurbs_volume%elevate_degree + + +nurbs_curve%elevate_degree proc~elevate_degree->none~set - - + + proc~insert_knots - - -nurbs_volume%insert_knots + + +nurbs_curve%insert_knots proc~insert_knots->none~set - - + + proc~modify_wc - - -nurbs_volume%modify_Wc + + +nurbs_curve%modify_Wc proc~modify_wc->none~set - - + + proc~modify_xc - - -nurbs_volume%modify_Xc + + +nurbs_curve%modify_Xc proc~modify_xc->none~set - - + + proc~remove_knots - - -nurbs_volume%remove_knots + + +nurbs_curve%remove_knots proc~remove_knots->none~set - - + + proc~set_c - - -nurbs_volume%set_C + + +nurbs_curve%set_C proc~set_c->none~set - - + + - + -proc~set_half_ring - - -nurbs_volume%set_half_ring +proc~set_circle + + +nurbs_curve%set_circle - + -proc~set_half_ring->none~set - - +proc~set_circle->none~set + + - + -proc~set_hexahedron - - -nurbs_volume%set_hexahedron +proc~set_half_circle + + +nurbs_curve%set_half_circle - + -proc~set_hexahedron->none~set - - +proc~set_half_circle->none~set + + - + -proc~set_ring - - -nurbs_volume%set_ring +program~compute_length + + +compute_length - + -proc~set_ring->none~set - - +program~compute_length->none~set + + + + + +proc~cmp_length + + +nurbs_curve%cmp_length + + + + + +program~compute_length->proc~cmp_length + + - + -program~compute_volume - - -compute_volume +program~example1_curve + + +example1_curve - + -program~compute_volume->none~set - - +program~example1_curve->none~set + + - - -proc~cmp_volume - - -nurbs_volume%cmp_volume - + + +program~example1_curve->proc~elevate_degree + + + + +program~example1_curve->proc~insert_knots + + - - -program~compute_volume->proc~cmp_volume - - + + +program~example1_curve->proc~remove_knots + + - + -program~example3_volume - - -example3_volume +program~example_nurbs_curve + + +example_nurbs_curve - + -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->none~set + + - + -program~example_nurbs_volume - - -example_nurbs_volume +program~nearest_point_1d + + +nearest_point_1d - + -program~example_nurbs_volume->none~set - - +program~nearest_point_1d->none~set + + - - -program~example_put_to_nurbs - - -example_put_to_nurbs - - - - + -program~example_put_to_nurbs->none~set - - +proc~cmp_length->proc~ansatz + + - + -program~nearest_point_3d - - -nearest_point_3d +program~shape_c_1d + + +shape_C_1d - - -program~nearest_point_3d->none~set - - - - - -proc~cmp_volume->proc~ansatz - - - - - -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_c_1d->proc~set_c + + - - -program~shape_half_ring_3d->proc~set_half_ring - - - - - -program~shape_hexahedron - - -shape_hexahedron + + +program~shape_circle + + +shape_circle - - -program~shape_hexahedron->proc~set_hexahedron - - + + +program~shape_circle->proc~set_circle + + - - -program~shape_ring_3d - - -shape_ring_3d + + +program~shape_half_circle + + +shape_half_circle - - -program~shape_ring_3d->proc~set_ring - - + + +program~shape_half_circle->proc~set_half_circle + + @@ -935,7 +839,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/set1a.html b/proc/set1a.html index 12ddf01b4..b365d34f0 100644 --- a/proc/set1a.html +++ b/proc/set1a.html @@ -159,7 +159,7 @@

                          Arguments

                          @@ -174,7 +174,7 @@

                          Arguments

                          @@ -189,7 +189,7 @@

                          Arguments

                          @@ -204,7 +204,7 @@

                          Arguments

                          @@ -243,33 +243,33 @@

                          Calls

                          nurbs_curve%set1a - + -proc~cmp_degree~3 - +proc~cmp_degree + nurbs_curve%cmp_degree - + -proc~set1a->proc~cmp_degree~3 +proc~set1a->proc~cmp_degree - + -proc~get_multiplicity~3 - +proc~get_multiplicity + nurbs_curve%get_multiplicity - + -proc~cmp_degree~3->proc~get_multiplicity~3 +proc~cmp_degree->proc~get_multiplicity @@ -282,9 +282,9 @@

                          Calls

                          - + -proc~get_multiplicity~3->interface~compute_multiplicity +proc~get_multiplicity->interface~compute_multiplicity @@ -427,139 +427,139 @@

                          Called by

                          nurbs_curve%set1a - + -none~set~3 - +none~set + nurbs_curve%set - + -none~set~3->proc~set1a +none~set->proc~set1a - + -proc~ansatz~3 - +proc~ansatz + nurbs_curve%ansatz - + -proc~ansatz~3->none~set~3 +proc~ansatz->none~set - + -proc~elevate_degree~3 - +proc~elevate_degree + nurbs_curve%elevate_degree - + -proc~elevate_degree~3->none~set~3 +proc~elevate_degree->none~set - + -proc~insert_knots~3 - +proc~insert_knots + nurbs_curve%insert_knots - + -proc~insert_knots~3->none~set~3 +proc~insert_knots->none~set - + -proc~modify_wc~3 - +proc~modify_wc + nurbs_curve%modify_Wc - + -proc~modify_wc~3->none~set~3 +proc~modify_wc->none~set - + -proc~modify_xc~3 - +proc~modify_xc + nurbs_curve%modify_Xc - + -proc~modify_xc~3->none~set~3 +proc~modify_xc->none~set - + -proc~remove_knots~3 - +proc~remove_knots + nurbs_curve%remove_knots - + -proc~remove_knots~3->none~set~3 +proc~remove_knots->none~set - + -proc~set_circle - - -nurbs_curve%set_circle +proc~set_c + + +nurbs_curve%set_C - + -proc~set_circle->none~set~3 - +proc~set_c->none~set + - + -proc~set_c~3 - - -nurbs_curve%set_C +proc~set_circle + + +nurbs_curve%set_circle - + -proc~set_c~3->none~set~3 - +proc~set_circle->none~set + @@ -571,9 +571,9 @@

                          Called by

                          - + -proc~set_half_circle->none~set~3 +proc~set_half_circle->none~set @@ -586,9 +586,9 @@

                          Called by

                          - + -program~compute_length->none~set~3 +program~compute_length->none~set @@ -616,27 +616,27 @@

                          Called by

                          - + -program~example1_curve->none~set~3 +program~example1_curve->none~set - + -program~example1_curve->proc~elevate_degree~3 +program~example1_curve->proc~elevate_degree - + -program~example1_curve->proc~insert_knots~3 +program~example1_curve->proc~insert_knots - + -program~example1_curve->proc~remove_knots~3 +program~example1_curve->proc~remove_knots @@ -649,9 +649,9 @@

                          Called by

                          - + -program~example_nurbs_curve->none~set~3 +program~example_nurbs_curve->none~set @@ -664,15 +664,15 @@

                          Called by

                          - + -program~nearest_point_1d->none~set~3 +program~nearest_point_1d->none~set - + -proc~cmp_length->proc~ansatz~3 +proc~cmp_length->proc~ansatz @@ -680,31 +680,31 @@

                          Called by

                          program~shape_c_1d - -shape_C_1d + +shape_C_1d - - -program~shape_c_1d->proc~set_c~3 - - + + +program~shape_c_1d->proc~set_c + + program~shape_circle - -shape_circle + +shape_circle - + program~shape_circle->proc~set_circle - - + + @@ -839,7 +839,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/set1~2.html b/proc/set1~2.html index a3b55978d..1be78c513 100644 --- a/proc/set1~2.html +++ b/proc/set1~2.html @@ -78,20 +78,20 @@

                          set1
                        • 23 statements + title=" 0.4% of total for procedures.">24 statements
                        • - Source File + Source File
                        • -

                          private pure subroutine set1(this, knot1, knot2, Xc, Wc) +

                          private pure subroutine set1(this, knot1, knot2, knot3, Xc, Wc)

                          -

                          Set knot vectors, control points and weights for the NURBS surface object.

                          +

                          Set control points and weights for the NURBS volume object.

                          Type Bound

                          -

                          nurbs_surface

                          +

                          nurbs_volume

                          Arguments

                          - class(nurbs_volume), + 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), - contiguous - ::knot3(:) - -
                          - + real(kind=rk), intent(in),
                          - + real(kind=rk), intent(in),
                          - + class(nurbs_curve), intent(inout)
                          - + real(kind=rk), intent(in),
                          - + real(kind=rk), intent(in),
                          - + real(kind=rk), intent(in),
                          @@ -159,8 +159,8 @@

                          Arguments

                          @@ -189,7 +189,7 @@

                          Arguments

                          @@ -204,7 +204,22 @@

                          Arguments

                          + + + + + + + + @@ -256,14 +271,14 @@

                          Calls

                          proc~set1~2 -nurbs_surface%set1 +nurbs_volume%set1 proc~cmp_degree~2 - + -nurbs_surface%cmp_degree +nurbs_volume%cmp_degree @@ -276,9 +291,9 @@

                          Calls

                          proc~cmp_nc~2 - + -nurbs_surface%cmp_nc +nurbs_volume%cmp_nc @@ -291,9 +306,9 @@

                          Calls

                          proc~get_multiplicity~2 - + -nurbs_surface%get_multiplicity +nurbs_volume%get_multiplicity @@ -452,418 +467,355 @@

                          Called by

                          - - + + proc~~set1~2~~CalledByGraph - + proc~set1~2 - -nurbs_surface%set1 + +nurbs_volume%set1 none~set~2 - - -nurbs_surface%set + + +nurbs_volume%set none~set~2->proc~set1~2 - - + + proc~ansatz~2 - - -nurbs_surface%ansatz + + +nurbs_volume%ansatz proc~ansatz~2->none~set~2 - - + + proc~elevate_degree~2 - - -nurbs_surface%elevate_degree + + +nurbs_volume%elevate_degree proc~elevate_degree~2->none~set~2 - - + + proc~insert_knots~2 - - -nurbs_surface%insert_knots + + +nurbs_volume%insert_knots proc~insert_knots~2->none~set~2 - - + + proc~modify_wc~2 - - -nurbs_surface%modify_Wc + + +nurbs_volume%modify_Wc proc~modify_wc~2->none~set~2 - - + + proc~modify_xc~2 - - -nurbs_surface%modify_Xc + + +nurbs_volume%modify_Xc proc~modify_xc~2->none~set~2 - - + + proc~remove_knots~2 - - -nurbs_surface%remove_knots + + +nurbs_volume%remove_knots proc~remove_knots~2->none~set~2 - - + + proc~set_c~2 - - -nurbs_surface%set_C + + +nurbs_volume%set_C proc~set_c~2->none~set~2 - - + + - + -proc~set_half_ring~2 - - -nurbs_surface%set_half_ring +proc~set_half_ring + + +nurbs_volume%set_half_ring - + -proc~set_half_ring~2->none~set~2 - - +proc~set_half_ring->none~set~2 + + - + -proc~set_ring~2 - - -nurbs_surface%set_ring +proc~set_hexahedron + + +nurbs_volume%set_hexahedron - + -proc~set_ring~2->none~set~2 - - +proc~set_hexahedron->none~set~2 + + - + -proc~set_tetragon - - -nurbs_surface%set_tetragon +proc~set_ring + + +nurbs_volume%set_ring - + -proc~set_tetragon->none~set~2 - - +proc~set_ring->none~set~2 + + - + -program~compute_area - - -compute_area +program~compute_volume + + +compute_volume - + -program~compute_area->none~set~2 - - +program~compute_volume->none~set~2 + + - - -proc~cmp_area - - -nurbs_surface%cmp_area + + +proc~cmp_volume + + +nurbs_volume%cmp_volume - - -program~compute_area->proc~cmp_area - - + + +program~compute_volume->proc~cmp_volume + + - + -program~example3_surface - - -example3_surface +program~example3_volume + + +example3_volume - + -program~example3_surface->none~set~2 - - - - - -program~example3_surface->proc~elevate_degree~2 - - +program~example3_volume->none~set~2 + + - + -program~example3_surface->proc~insert_knots~2 - - +program~example3_volume->proc~elevate_degree~2 + + - + + +program~example3_volume->proc~insert_knots~2 + + + + -program~example3_surface->proc~remove_knots~2 - - +program~example3_volume->proc~remove_knots~2 + + - + -program~example_nurbs_surface - - -example_nurbs_surface +program~example_nurbs_volume + + +example_nurbs_volume - + -program~example_nurbs_surface->none~set~2 - - +program~example_nurbs_volume->none~set~2 + + - + -program~nearest_point_2d - - -nearest_point_2d +program~example_put_to_nurbs + + +example_put_to_nurbs - + -program~nearest_point_2d->none~set~2 - - - - - -proc~cmp_area->proc~ansatz~2 - - +program~example_put_to_nurbs->none~set~2 + + - - -program~example_ppm1 - - -example_ppm1 + + +program~nearest_point_3d + + +nearest_point_3d - - -program~example_ppm1->proc~set_ring~2 - - + + +program~nearest_point_3d->none~set~2 + + - - -program~example_ppm1->proc~set_tetragon - - + + +proc~cmp_volume->proc~ansatz~2 + + - + -program~example_ppm2 - - -example_ppm2 +program~shape_c_3d + + +shape_C_3d - - -program~example_ppm2->proc~set_half_ring~2 - - - - - -program~example_ppm2->proc~set_tetragon - - + + +program~shape_c_3d->proc~set_c~2 + + - + -program~example_ppm3 - - -example_ppm3 +program~shape_half_ring_3d + + +shape_half_ring_3d - - -program~example_ppm3->proc~modify_xc~2 - - - - - -program~example_ppm3->proc~set_tetragon - - + + +program~shape_half_ring_3d->proc~set_half_ring + + - + -program~nearest_point_2d_bench - - -nearest_point_2d_bench +program~shape_hexahedron + + +shape_hexahedron - - -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_hexahedron->proc~set_hexahedron + + - - -program~shape_ring_2d->proc~set_ring~2 - - - - - -program~shape_tetragon - - -shape_tetragon + + +program~shape_ring_3d + + +shape_ring_3d - - -program~shape_tetragon->proc~set_tetragon - - + + +program~shape_ring_3d->proc~set_ring + + @@ -983,7 +935,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/set1~3.html b/proc/set1~3.html index 584fcdddb..fd19902e3 100644 --- a/proc/set1~3.html +++ b/proc/set1~3.html @@ -78,20 +78,20 @@

                          set1
                        • 20 statements + title=" 0.3% 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_volume), intent(inout) @@ -174,7 +174,7 @@

                          Arguments

                          - + real(kind=rk), intent(in),
                          - + real(kind=rk), intent(in),
                          - + + real(kind=rk), + intent(in), + contiguous + ::knot3(:) + +
                          + real(kind=rk), intent(in),
                          @@ -159,8 +159,8 @@

                          Arguments

                          @@ -182,14 +182,29 @@

                          Arguments

                          contiguous - + + + + + + + + + @@ -204,7 +219,7 @@

                          Arguments

                          @@ -232,91 +247,112 @@

                          Calls

                          - - + + proc~~set1~3~~CallsGraph - + proc~set1~3 - -nurbs_curve%set1 + +nurbs_surface%set1 proc~cmp_degree~3 - - -nurbs_curve%cmp_degree + + +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_curve%get_multiplicity + + +nurbs_surface%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~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 - - + + + + + +proc~get_multiplicity~3->interface~compute_multiplicity + + @@ -416,310 +452,418 @@

                          Called by

                          - - + + proc~~set1~3~~CalledByGraph - + proc~set1~3 - -nurbs_curve%set1 + +nurbs_surface%set1 none~set~3 - - -nurbs_curve%set + + +nurbs_surface%set none~set~3->proc~set1~3 - - + + proc~ansatz~3 - - -nurbs_curve%ansatz + + +nurbs_surface%ansatz proc~ansatz~3->none~set~3 - - + + proc~elevate_degree~3 - - -nurbs_curve%elevate_degree + + +nurbs_surface%elevate_degree proc~elevate_degree~3->none~set~3 - - + + proc~insert_knots~3 - - -nurbs_curve%insert_knots + + +nurbs_surface%insert_knots proc~insert_knots~3->none~set~3 - - + + proc~modify_wc~3 - - -nurbs_curve%modify_Wc + + +nurbs_surface%modify_Wc proc~modify_wc~3->none~set~3 - - + + proc~modify_xc~3 - - -nurbs_curve%modify_Xc + + +nurbs_surface%modify_Xc proc~modify_xc~3->none~set~3 - - + + proc~remove_knots~3 - - -nurbs_curve%remove_knots + + +nurbs_surface%remove_knots proc~remove_knots~3->none~set~3 - - + + - + -proc~set_circle - - -nurbs_curve%set_circle +proc~set_c~3 + + +nurbs_surface%set_C - + -proc~set_circle->none~set~3 - - +proc~set_c~3->none~set~3 + + - + -proc~set_c~3 - - -nurbs_curve%set_C +proc~set_half_ring~2 + + +nurbs_surface%set_half_ring - + -proc~set_c~3->none~set~3 - - +proc~set_half_ring~2->none~set~3 + + - + -proc~set_half_circle - - -nurbs_curve%set_half_circle +proc~set_ring~2 + + +nurbs_surface%set_ring - + -proc~set_half_circle->none~set~3 - - +proc~set_ring~2->none~set~3 + + - + -program~compute_length - - -compute_length +proc~set_tetragon + + +nurbs_surface%set_tetragon - + -program~compute_length->none~set~3 - - - - - -proc~cmp_length - - -nurbs_curve%cmp_length - - - - - -program~compute_length->proc~cmp_length - - +proc~set_tetragon->none~set~3 + + - + -program~example1_curve - - -example1_curve +program~compute_area + + +compute_area - + -program~example1_curve->none~set~3 - - +program~compute_area->none~set~3 + + - - -program~example1_curve->proc~elevate_degree~3 - - + + +proc~cmp_area + + +nurbs_surface%cmp_area + - - -program~example1_curve->proc~insert_knots~3 - - - - -program~example1_curve->proc~remove_knots~3 - - + + +program~compute_area->proc~cmp_area + + - + -program~example_nurbs_curve - - -example_nurbs_curve +program~example3_surface + + +example3_surface - + -program~example_nurbs_curve->none~set~3 - - +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~nearest_point_1d - - -nearest_point_1d +program~example_nurbs_surface + + +example_nurbs_surface - + -program~nearest_point_1d->none~set~3 - - +program~example_nurbs_surface->none~set~3 + + + + + +program~nearest_point_2d + + +nearest_point_2d + - + + -proc~cmp_length->proc~ansatz~3 - - +program~nearest_point_2d->none~set~3 + + - - -program~shape_c_1d - - -shape_C_1d + + +proc~cmp_area->proc~ansatz~3 + + + + + +program~example_ppm1 + + +example_ppm1 - - -program~shape_c_1d->proc~set_c~3 - - + + +program~example_ppm1->proc~set_ring~2 + + - - -program~shape_circle - - -shape_circle + + +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->proc~set_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_half_circle - - -shape_half_circle + + + +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~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 + + @@ -839,7 +983,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/set2.html b/proc/set2.html index b5e2697d0..965221161 100644 --- a/proc/set2.html +++ b/proc/set2.html @@ -78,20 +78,20 @@

                          set2
                        • 17 statements + title=" 0.3% of total for procedures.">22 statements
                        • - Source File + Source File
                        • -

                          private pure subroutine set2(this, Xth_dir1, Xth_dir2, Xth_dir3, degree, continuity1, continuity2, continuity3, Xc, Wc) +

                          private pure subroutine set2(this, Xth_dir, degree, continuity, Xc, Wc)

                          -

                          Set control points and weights for the NURBS volume object.

                          +

                          Set NURBS curve using nodes of parameter space (Xth), degree, continuity, control points and weights.

                          Type Bound

                          -

                          nurbs_volume

                          +

                          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,37 +182,7 @@

                          Arguments

                          contiguous - - - - - - - - - - - - - - - - - + @@ -222,49 +192,19 @@

                          Arguments

                          integer, - - - - - - - - - + - - - - - - - - - + @@ -272,14 +212,14 @@

                          Arguments

                          contiguous - + @@ -294,7 +234,7 @@

                          Arguments

                          @@ -322,106 +262,46 @@

                          Calls

                          - - + + proc~~set2~~CallsGraph - + proc~set2 - -nurbs_volume%set2 - - - -proc~cmp_nc - - -nurbs_volume%cmp_nc - - - - - -proc~set2->proc~cmp_nc - - + +nurbs_curve%set2 - + proc~compute_knot_vector - - -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 + + +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 - - + + @@ -517,355 +397,310 @@

                          Called by

                          - - + + proc~~set2~~CalledByGraph - + proc~set2 - -nurbs_volume%set2 + +nurbs_curve%set2 none~set - - -nurbs_volume%set + + +nurbs_curve%set none~set->proc~set2 - - + + proc~ansatz - - -nurbs_volume%ansatz + + +nurbs_curve%ansatz proc~ansatz->none~set - - + + proc~elevate_degree - - -nurbs_volume%elevate_degree + + +nurbs_curve%elevate_degree proc~elevate_degree->none~set - - + + proc~insert_knots - - -nurbs_volume%insert_knots + + +nurbs_curve%insert_knots proc~insert_knots->none~set - - + + proc~modify_wc - - -nurbs_volume%modify_Wc + + +nurbs_curve%modify_Wc proc~modify_wc->none~set - - + + proc~modify_xc - - -nurbs_volume%modify_Xc + + +nurbs_curve%modify_Xc proc~modify_xc->none~set - - + + proc~remove_knots - - -nurbs_volume%remove_knots + + +nurbs_curve%remove_knots proc~remove_knots->none~set - - + + proc~set_c - - -nurbs_volume%set_C + + +nurbs_curve%set_C proc~set_c->none~set - - + + - + -proc~set_half_ring - - -nurbs_volume%set_half_ring +proc~set_circle + + +nurbs_curve%set_circle - + -proc~set_half_ring->none~set - - +proc~set_circle->none~set + + - + -proc~set_hexahedron - - -nurbs_volume%set_hexahedron +proc~set_half_circle + + +nurbs_curve%set_half_circle - + -proc~set_hexahedron->none~set - - +proc~set_half_circle->none~set + + - + -proc~set_ring - - -nurbs_volume%set_ring +program~compute_length + + +compute_length - + -proc~set_ring->none~set - - +program~compute_length->none~set + + + + + +proc~cmp_length + + +nurbs_curve%cmp_length + - + + + +program~compute_length->proc~cmp_length + + + + -program~compute_volume - - -compute_volume +program~example1_curve + + +example1_curve - + -program~compute_volume->none~set - - +program~example1_curve->none~set + + - - -proc~cmp_volume - - -nurbs_volume%cmp_volume - + + +program~example1_curve->proc~elevate_degree + + + + +program~example1_curve->proc~insert_knots + + - - -program~compute_volume->proc~cmp_volume - - + + +program~example1_curve->proc~remove_knots + + - + -program~example3_volume - - -example3_volume +program~example_nurbs_curve + + +example_nurbs_curve - + -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->none~set + + - + -program~example_nurbs_volume - - -example_nurbs_volume +program~nearest_point_1d + + +nearest_point_1d - + -program~example_nurbs_volume->none~set - - +program~nearest_point_1d->none~set + + - - -program~example_put_to_nurbs - - -example_put_to_nurbs - - - - + -program~example_put_to_nurbs->none~set - - +proc~cmp_length->proc~ansatz + + - + -program~nearest_point_3d - - -nearest_point_3d - - - - - -program~nearest_point_3d->none~set - - - - - -proc~cmp_volume->proc~ansatz - - - - - -program~shape_c_3d - - -shape_C_3d +program~shape_c_1d + + +shape_C_1d - - -program~shape_c_3d->proc~set_c - - - - - -program~shape_half_ring_3d - - -shape_half_ring_3d - - + + +program~shape_c_1d->proc~set_c + + - - -program~shape_half_ring_3d->proc~set_half_ring - - - - - -program~shape_hexahedron - - -shape_hexahedron + + +program~shape_circle + + +shape_circle - - -program~shape_hexahedron->proc~set_hexahedron - - + + +program~shape_circle->proc~set_circle + + - - -program~shape_ring_3d - - -shape_ring_3d + + +program~shape_half_circle + + +shape_half_circle - - -program~shape_ring_3d->proc~set_ring - - + + +program~shape_half_circle->proc~set_half_circle + + @@ -985,7 +820,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/set2~2.html b/proc/set2~2.html index b9298cf6f..0af753d66 100644 --- a/proc/set2~2.html +++ b/proc/set2~2.html @@ -78,20 +78,20 @@

                          set2
                        • 15 statements + title=" 0.3% of total for procedures.">17 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_dir1, Xth_dir2, Xth_dir3, degree, continuity1, continuity2, continuity3, Xc, Wc)

                          -

                          Set NURBS surface using nodes of parameter space, degree, continuity, control points and weights

                          +

                          Set control points and weights for the NURBS volume object.

                          Type Bound

                          -

                          nurbs_surface

                          +

                          nurbs_volume

                          Arguments

                          - - class(nurbs_volume), + + class(nurbs_curve), intent(inout) @@ -174,7 +174,7 @@

                          Arguments

                          - + real(kind=rk), intent(in), ::Xth_dir1(:) - -
                          - - real(kind=rk), - intent(in), - contiguous - ::Xth_dir2(:) - -
                          - - real(kind=rk), - intent(in), - contiguous - ::Xth_dir3(:)Xth_dir(:) intent(in), - contiguous - ::degree(:) - -
                          - - integer, - intent(in),intent(in) - contiguous - ::continuity1(:) - -
                          - - integer, - intent(in), - contiguous + ::continuity2(:)degree
                          - + integer, intent(in), ::continuity3(:)continuity(:)
                          - + real(kind=rk), intent(in),
                          - + real(kind=rk), intent(in),
                          @@ -159,8 +159,8 @@

                          Arguments

                          @@ -189,7 +189,7 @@

                          Arguments

                          @@ -204,7 +204,22 @@

                          Arguments

                          + + + + + + + + @@ -219,7 +234,7 @@

                          Arguments

                          @@ -234,7 +249,7 @@

                          Arguments

                          @@ -249,7 +264,22 @@

                          Arguments

                          + + + + + + + + @@ -301,14 +331,14 @@

                          Calls

                          proc~set2~2 -nurbs_surface%set2 +nurbs_volume%set2 proc~cmp_nc~2 - + -nurbs_surface%cmp_nc +nurbs_volume%cmp_nc @@ -487,418 +517,355 @@

                          Called by

                          - - + + proc~~set2~2~~CalledByGraph - + proc~set2~2 - -nurbs_surface%set2 + +nurbs_volume%set2 none~set~2 - - -nurbs_surface%set + + +nurbs_volume%set none~set~2->proc~set2~2 - - + + proc~ansatz~2 - - -nurbs_surface%ansatz + + +nurbs_volume%ansatz proc~ansatz~2->none~set~2 - - + + proc~elevate_degree~2 - - -nurbs_surface%elevate_degree + + +nurbs_volume%elevate_degree proc~elevate_degree~2->none~set~2 - - + + proc~insert_knots~2 - - -nurbs_surface%insert_knots + + +nurbs_volume%insert_knots proc~insert_knots~2->none~set~2 - - + + proc~modify_wc~2 - - -nurbs_surface%modify_Wc + + +nurbs_volume%modify_Wc proc~modify_wc~2->none~set~2 - - + + proc~modify_xc~2 - - -nurbs_surface%modify_Xc + + +nurbs_volume%modify_Xc proc~modify_xc~2->none~set~2 - - + + proc~remove_knots~2 - - -nurbs_surface%remove_knots + + +nurbs_volume%remove_knots proc~remove_knots~2->none~set~2 - - + + proc~set_c~2 - - -nurbs_surface%set_C + + +nurbs_volume%set_C proc~set_c~2->none~set~2 - - + + - + -proc~set_half_ring~2 - - -nurbs_surface%set_half_ring +proc~set_half_ring + + +nurbs_volume%set_half_ring - + -proc~set_half_ring~2->none~set~2 - - +proc~set_half_ring->none~set~2 + + - + -proc~set_ring~2 - - -nurbs_surface%set_ring +proc~set_hexahedron + + +nurbs_volume%set_hexahedron - + -proc~set_ring~2->none~set~2 - - +proc~set_hexahedron->none~set~2 + + - + -proc~set_tetragon - - -nurbs_surface%set_tetragon +proc~set_ring + + +nurbs_volume%set_ring - + -proc~set_tetragon->none~set~2 - - +proc~set_ring->none~set~2 + + - + -program~compute_area - - -compute_area +program~compute_volume + + +compute_volume - + -program~compute_area->none~set~2 - - +program~compute_volume->none~set~2 + + - - -proc~cmp_area - - -nurbs_surface%cmp_area + + +proc~cmp_volume + + +nurbs_volume%cmp_volume - - -program~compute_area->proc~cmp_area - - + + +program~compute_volume->proc~cmp_volume + + - + -program~example3_surface - - -example3_surface +program~example3_volume + + +example3_volume - + -program~example3_surface->none~set~2 - - - - - -program~example3_surface->proc~elevate_degree~2 - - +program~example3_volume->none~set~2 + + - + -program~example3_surface->proc~insert_knots~2 - - +program~example3_volume->proc~elevate_degree~2 + + + + + +program~example3_volume->proc~insert_knots~2 + + - + -program~example3_surface->proc~remove_knots~2 - - +program~example3_volume->proc~remove_knots~2 + + - + -program~example_nurbs_surface - - -example_nurbs_surface +program~example_nurbs_volume + + +example_nurbs_volume - + -program~example_nurbs_surface->none~set~2 - - +program~example_nurbs_volume->none~set~2 + + - + -program~nearest_point_2d - - -nearest_point_2d +program~example_put_to_nurbs + + +example_put_to_nurbs - + -program~nearest_point_2d->none~set~2 - - - - - -proc~cmp_area->proc~ansatz~2 - - +program~example_put_to_nurbs->none~set~2 + + - - -program~example_ppm1 - - -example_ppm1 + + +program~nearest_point_3d + + +nearest_point_3d - - -program~example_ppm1->proc~set_ring~2 - - + + +program~nearest_point_3d->none~set~2 + + - - -program~example_ppm1->proc~set_tetragon - - + + +proc~cmp_volume->proc~ansatz~2 + + - + -program~example_ppm2 - - -example_ppm2 +program~shape_c_3d + + +shape_C_3d - - -program~example_ppm2->proc~set_half_ring~2 - - - - - -program~example_ppm2->proc~set_tetragon - - + + +program~shape_c_3d->proc~set_c~2 + + - + -program~example_ppm3 - - -example_ppm3 +program~shape_half_ring_3d + + +shape_half_ring_3d - - -program~example_ppm3->proc~modify_xc~2 - - - - - -program~example_ppm3->proc~set_tetragon - - + + +program~shape_half_ring_3d->proc~set_half_ring + + - + -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_hexahedron + + +shape_hexahedron - - -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_hexahedron->proc~set_hexahedron + + - - -program~shape_ring_2d->proc~set_ring~2 - - - - - -program~shape_tetragon - - -shape_tetragon + + +program~shape_ring_3d + + +shape_ring_3d - - -program~shape_tetragon->proc~set_tetragon - - + + +program~shape_ring_3d->proc~set_ring + + @@ -1018,7 +985,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/set2~3.html b/proc/set2~3.html index fcb8326aa..a9dc74740 100644 --- a/proc/set2~3.html +++ b/proc/set2~3.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_volume), intent(inout) @@ -174,7 +174,7 @@

                          Arguments

                          - + real(kind=rk), intent(in),
                          - + real(kind=rk), intent(in),
                          - + + real(kind=rk), + intent(in), + contiguous + ::Xth_dir3(:) + +
                          + integer, intent(in),
                          - + integer, intent(in),
                          - + integer, intent(in),
                          - + + integer, + intent(in), + contiguous + ::continuity3(:) + +
                          + real(kind=rk), intent(in),
                          @@ -159,8 +159,8 @@

                          Arguments

                          @@ -182,29 +182,59 @@

                          Arguments

                          contiguous - + + + + + + + + + - + + + + + + + + + - + @@ -212,14 +242,14 @@

                          Arguments

                          contiguous - + @@ -234,7 +264,7 @@

                          Arguments

                          @@ -262,46 +292,106 @@

                          Calls

                          - - + + proc~~set2~3~~CallsGraph - + proc~set2~3 - -nurbs_curve%set2 + +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 + + +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 + + @@ -397,310 +487,418 @@

                          Called by

                          - - + + proc~~set2~3~~CalledByGraph - + proc~set2~3 - -nurbs_curve%set2 + +nurbs_surface%set2 none~set~3 - - -nurbs_curve%set + + +nurbs_surface%set none~set~3->proc~set2~3 - - + + proc~ansatz~3 - - -nurbs_curve%ansatz + + +nurbs_surface%ansatz proc~ansatz~3->none~set~3 - - + + proc~elevate_degree~3 - - -nurbs_curve%elevate_degree + + +nurbs_surface%elevate_degree proc~elevate_degree~3->none~set~3 - - + + proc~insert_knots~3 - - -nurbs_curve%insert_knots + + +nurbs_surface%insert_knots proc~insert_knots~3->none~set~3 - - + + proc~modify_wc~3 - - -nurbs_curve%modify_Wc + + +nurbs_surface%modify_Wc proc~modify_wc~3->none~set~3 - - + + proc~modify_xc~3 - - -nurbs_curve%modify_Xc + + +nurbs_surface%modify_Xc proc~modify_xc~3->none~set~3 - - + + proc~remove_knots~3 - - -nurbs_curve%remove_knots + + +nurbs_surface%remove_knots proc~remove_knots~3->none~set~3 - - + + - + -proc~set_circle - - -nurbs_curve%set_circle +proc~set_c~3 + + +nurbs_surface%set_C - + -proc~set_circle->none~set~3 - - +proc~set_c~3->none~set~3 + + - + -proc~set_c~3 - - -nurbs_curve%set_C +proc~set_half_ring~2 + + +nurbs_surface%set_half_ring - + -proc~set_c~3->none~set~3 - - +proc~set_half_ring~2->none~set~3 + + - + -proc~set_half_circle - - -nurbs_curve%set_half_circle +proc~set_ring~2 + + +nurbs_surface%set_ring - + -proc~set_half_circle->none~set~3 - - +proc~set_ring~2->none~set~3 + + - + -program~compute_length - - -compute_length +proc~set_tetragon + + +nurbs_surface%set_tetragon - + -program~compute_length->none~set~3 - - - - - -proc~cmp_length - - -nurbs_curve%cmp_length - - - - - -program~compute_length->proc~cmp_length - - +proc~set_tetragon->none~set~3 + + - + -program~example1_curve - - -example1_curve +program~compute_area + + +compute_area - + -program~example1_curve->none~set~3 - - +program~compute_area->none~set~3 + + - - -program~example1_curve->proc~elevate_degree~3 - - + + +proc~cmp_area + + +nurbs_surface%cmp_area + - - -program~example1_curve->proc~insert_knots~3 - - - - -program~example1_curve->proc~remove_knots~3 - - + + +program~compute_area->proc~cmp_area + + - + -program~example_nurbs_curve - - -example_nurbs_curve +program~example3_surface + + +example3_surface - + -program~example_nurbs_curve->none~set~3 - - +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~nearest_point_1d - - -nearest_point_1d +program~example_nurbs_surface + + +example_nurbs_surface - + -program~nearest_point_1d->none~set~3 - - +program~example_nurbs_surface->none~set~3 + + + + + +program~nearest_point_2d + + +nearest_point_2d + + - + -proc~cmp_length->proc~ansatz~3 - - +program~nearest_point_2d->none~set~3 + + - - -program~shape_c_1d - - -shape_C_1d + + +proc~cmp_area->proc~ansatz~3 + + + + + +program~example_ppm1 + + +example_ppm1 - - -program~shape_c_1d->proc~set_c~3 - - + + +program~example_ppm1->proc~set_ring~2 + + - - -program~shape_circle - - -shape_circle + + +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->proc~set_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_half_circle - - -shape_half_circle + + + +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~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 + + @@ -820,7 +1018,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/set3.html b/proc/set3.html index b1bf3d897..3cfaa04d2 100644 --- a/proc/set3.html +++ b/proc/set3.html @@ -78,20 +78,20 @@

                          set3
                        • 30 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 volume using control points and weights.

                          +

                          Set Bezier or Rational Bezier curve using control points and weights.

                          Type Bound

                          -

                          nurbs_volume

                          +

                          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 + ::degree(:) + +
                          + + integer, + intent(in), + contiguous ::degreecontinuity1(:)
                          - + integer, intent(in), ::continuity(:)continuity2(:)
                          - + 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~~CallsGraph - + proc~set3 - -nurbs_volume%set3 + +nurbs_curve%set3 proc~cmp_degree - - -nurbs_volume%cmp_degree + + +nurbs_curve%cmp_degree proc~set3->proc~cmp_degree - - + + proc~get_multiplicity - - -nurbs_volume%get_multiplicity + + +nurbs_curve%get_multiplicity proc~cmp_degree->proc~get_multiplicity - - + + interface~compute_multiplicity - -compute_multiplicity + +compute_multiplicity proc~get_multiplicity->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,355 +401,310 @@

                          Called by

                          - - + + proc~~set3~~CalledByGraph - + proc~set3 - -nurbs_volume%set3 + +nurbs_curve%set3 none~set - - -nurbs_volume%set + + +nurbs_curve%set none~set->proc~set3 - - + + proc~ansatz - - -nurbs_volume%ansatz + + +nurbs_curve%ansatz proc~ansatz->none~set - - + + proc~elevate_degree - - -nurbs_volume%elevate_degree + + +nurbs_curve%elevate_degree proc~elevate_degree->none~set - - + + proc~insert_knots - - -nurbs_volume%insert_knots + + +nurbs_curve%insert_knots proc~insert_knots->none~set - - + + proc~modify_wc - - -nurbs_volume%modify_Wc + + +nurbs_curve%modify_Wc proc~modify_wc->none~set - - + + proc~modify_xc - - -nurbs_volume%modify_Xc + + +nurbs_curve%modify_Xc proc~modify_xc->none~set - - + + proc~remove_knots - - -nurbs_volume%remove_knots + + +nurbs_curve%remove_knots proc~remove_knots->none~set - - + + proc~set_c - - -nurbs_volume%set_C + + +nurbs_curve%set_C proc~set_c->none~set - - + + - + -proc~set_half_ring - - -nurbs_volume%set_half_ring +proc~set_circle + + +nurbs_curve%set_circle - + -proc~set_half_ring->none~set - - +proc~set_circle->none~set + + - + -proc~set_hexahedron - - -nurbs_volume%set_hexahedron +proc~set_half_circle + + +nurbs_curve%set_half_circle - + -proc~set_hexahedron->none~set - - +proc~set_half_circle->none~set + + - + -proc~set_ring - - -nurbs_volume%set_ring +program~compute_length + + +compute_length - + -proc~set_ring->none~set - - +program~compute_length->none~set + + - + + +proc~cmp_length + + +nurbs_curve%cmp_length + + + + + +program~compute_length->proc~cmp_length + + + + -program~compute_volume - - -compute_volume +program~example1_curve + + +example1_curve - + -program~compute_volume->none~set - - +program~example1_curve->none~set + + - - -proc~cmp_volume - - -nurbs_volume%cmp_volume - + + +program~example1_curve->proc~elevate_degree + + + + +program~example1_curve->proc~insert_knots + + - - -program~compute_volume->proc~cmp_volume - - + + +program~example1_curve->proc~remove_knots + + - + -program~example3_volume - - -example3_volume +program~example_nurbs_curve + + +example_nurbs_curve - + -program~example3_volume->none~set - - - - - -program~example3_volume->proc~elevate_degree - - +program~example_nurbs_curve->none~set + + - - -program~example3_volume->proc~insert_knots - - - - - -program~example3_volume->proc~remove_knots - - - - + -program~example_nurbs_volume - - -example_nurbs_volume +program~nearest_point_1d + + +nearest_point_1d - + -program~example_nurbs_volume->none~set - - - - - -program~example_put_to_nurbs - - -example_put_to_nurbs - +program~nearest_point_1d->none~set + + - - + -program~example_put_to_nurbs->none~set - - +proc~cmp_length->proc~ansatz + + - + -program~nearest_point_3d - - -nearest_point_3d +program~shape_c_1d + + +shape_C_1d - - -program~nearest_point_3d->none~set - - - - - -proc~cmp_volume->proc~ansatz - - - - - -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_c_1d->proc~set_c + + - - -program~shape_half_ring_3d->proc~set_half_ring - - - - - -program~shape_hexahedron - - -shape_hexahedron + + +program~shape_circle + + +shape_circle - - -program~shape_hexahedron->proc~set_hexahedron - - + + +program~shape_circle->proc~set_circle + + - - -program~shape_ring_3d - - -shape_ring_3d + + +program~shape_half_circle + + +shape_half_circle - - -program~shape_ring_3d->proc~set_ring - - + + +program~shape_half_circle->proc~set_half_circle + + @@ -884,7 +824,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/set3~2.html b/proc/set3~2.html index 5dc195c81..a2f30cb95 100644 --- a/proc/set3~2.html +++ b/proc/set3~2.html @@ -78,20 +78,20 @@

                          set3
                        • 26 statements + title=" 0.4% of total for procedures.">30 statements
                        • - Source File + Source File
                        • @@ -141,10 +141,10 @@

                          private pure subroutine set3(this, nc, Xc, Wc)

                          -

                          Set Bezier or Rational Bezier surface using control points and weights.

                          +

                          Set Bezier or Rational Bezier volume using control points and weights.

                          Type Bound

                          -

                          nurbs_surface

                          +

                          nurbs_volume

                          Arguments

                          - - class(nurbs_volume), + + 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),
                          @@ -159,8 +159,8 @@

                          Arguments

                          @@ -189,7 +189,7 @@

                          Arguments

                          @@ -241,14 +241,14 @@

                          Calls

                          proc~set3~2 -nurbs_surface%set3 +nurbs_volume%set3 proc~cmp_degree~2 - + -nurbs_surface%cmp_degree +nurbs_volume%cmp_degree @@ -261,9 +261,9 @@

                          Calls

                          proc~get_multiplicity~2 - + -nurbs_surface%get_multiplicity +nurbs_volume%get_multiplicity @@ -416,418 +416,355 @@

                          Called by

                          - - + + proc~~set3~2~~CalledByGraph - + proc~set3~2 - -nurbs_surface%set3 + +nurbs_volume%set3 none~set~2 - - -nurbs_surface%set + + +nurbs_volume%set none~set~2->proc~set3~2 - - + + proc~ansatz~2 - - -nurbs_surface%ansatz + + +nurbs_volume%ansatz proc~ansatz~2->none~set~2 - - + + proc~elevate_degree~2 - - -nurbs_surface%elevate_degree + + +nurbs_volume%elevate_degree proc~elevate_degree~2->none~set~2 - - + + proc~insert_knots~2 - - -nurbs_surface%insert_knots + + +nurbs_volume%insert_knots proc~insert_knots~2->none~set~2 - - + + proc~modify_wc~2 - - -nurbs_surface%modify_Wc + + +nurbs_volume%modify_Wc proc~modify_wc~2->none~set~2 - - + + proc~modify_xc~2 - - -nurbs_surface%modify_Xc + + +nurbs_volume%modify_Xc proc~modify_xc~2->none~set~2 - - + + proc~remove_knots~2 - - -nurbs_surface%remove_knots + + +nurbs_volume%remove_knots proc~remove_knots~2->none~set~2 - - + + proc~set_c~2 - - -nurbs_surface%set_C + + +nurbs_volume%set_C proc~set_c~2->none~set~2 - - + + - + -proc~set_half_ring~2 - - -nurbs_surface%set_half_ring +proc~set_half_ring + + +nurbs_volume%set_half_ring - + -proc~set_half_ring~2->none~set~2 - - +proc~set_half_ring->none~set~2 + + - + -proc~set_ring~2 - - -nurbs_surface%set_ring +proc~set_hexahedron + + +nurbs_volume%set_hexahedron - + -proc~set_ring~2->none~set~2 - - +proc~set_hexahedron->none~set~2 + + - + -proc~set_tetragon - - -nurbs_surface%set_tetragon +proc~set_ring + + +nurbs_volume%set_ring - + -proc~set_tetragon->none~set~2 - - +proc~set_ring->none~set~2 + + - + -program~compute_area - - -compute_area +program~compute_volume + + +compute_volume - + -program~compute_area->none~set~2 - - +program~compute_volume->none~set~2 + + - - -proc~cmp_area - - -nurbs_surface%cmp_area + + +proc~cmp_volume + + +nurbs_volume%cmp_volume - - -program~compute_area->proc~cmp_area - - + + +program~compute_volume->proc~cmp_volume + + - + -program~example3_surface - - -example3_surface +program~example3_volume + + +example3_volume - + -program~example3_surface->none~set~2 - - - - - -program~example3_surface->proc~elevate_degree~2 - - +program~example3_volume->none~set~2 + + - + -program~example3_surface->proc~insert_knots~2 - - +program~example3_volume->proc~elevate_degree~2 + + - + + +program~example3_volume->proc~insert_knots~2 + + + + -program~example3_surface->proc~remove_knots~2 - - +program~example3_volume->proc~remove_knots~2 + + - + -program~example_nurbs_surface - - -example_nurbs_surface +program~example_nurbs_volume + + +example_nurbs_volume - + -program~example_nurbs_surface->none~set~2 - - +program~example_nurbs_volume->none~set~2 + + - + -program~nearest_point_2d - - -nearest_point_2d +program~example_put_to_nurbs + + +example_put_to_nurbs - + -program~nearest_point_2d->none~set~2 - - - - - -proc~cmp_area->proc~ansatz~2 - - +program~example_put_to_nurbs->none~set~2 + + - - -program~example_ppm1 - - -example_ppm1 + + +program~nearest_point_3d + + +nearest_point_3d - - -program~example_ppm1->proc~set_ring~2 - - + + +program~nearest_point_3d->none~set~2 + + - - -program~example_ppm1->proc~set_tetragon - - + + +proc~cmp_volume->proc~ansatz~2 + + - + -program~example_ppm2 - - -example_ppm2 +program~shape_c_3d + + +shape_C_3d - - -program~example_ppm2->proc~set_half_ring~2 - - - - - -program~example_ppm2->proc~set_tetragon - - + + +program~shape_c_3d->proc~set_c~2 + + - + -program~example_ppm3 - - -example_ppm3 +program~shape_half_ring_3d + + +shape_half_ring_3d - - -program~example_ppm3->proc~modify_xc~2 - - - - - -program~example_ppm3->proc~set_tetragon - - + + +program~shape_half_ring_3d->proc~set_half_ring + + - + -program~nearest_point_2d_bench - - -nearest_point_2d_bench +program~shape_hexahedron + + +shape_hexahedron - - -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_hexahedron->proc~set_hexahedron + + - - - -program~shape_ring_2d->proc~set_ring~2 - - - - - -program~shape_tetragon - - -shape_tetragon + + +program~shape_ring_3d + + +shape_ring_3d - - -program~shape_tetragon->proc~set_tetragon - - + + +program~shape_ring_3d->proc~set_ring + + @@ -947,7 +884,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/set3~3.html b/proc/set3~3.html index 37f2f4cee..91d6c3016 100644 --- a/proc/set3~3.html +++ b/proc/set3~3.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_volume), intent(inout) @@ -174,7 +174,7 @@

                          Arguments

                          - + integer, intent(in),
                          - + real(kind=rk), intent(in),
                          @@ -159,8 +159,8 @@

                          Arguments

                          + + + + + + + + @@ -189,7 +204,7 @@

                          Arguments

                          @@ -217,91 +232,91 @@

                          Calls

                          - - + + proc~~set3~3~~CallsGraph - + proc~set3~3 - -nurbs_curve%set3 + +nurbs_surface%set3 proc~cmp_degree~3 - - -nurbs_curve%cmp_degree + + +nurbs_surface%cmp_degree proc~set3~3->proc~cmp_degree~3 - - + + proc~get_multiplicity~3 - - -nurbs_curve%get_multiplicity + + +nurbs_surface%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 - - + + @@ -401,310 +416,418 @@

                          Called by

                          - - + + proc~~set3~3~~CalledByGraph - + proc~set3~3 - -nurbs_curve%set3 + +nurbs_surface%set3 none~set~3 - - -nurbs_curve%set + + +nurbs_surface%set none~set~3->proc~set3~3 - - + + proc~ansatz~3 - - -nurbs_curve%ansatz + + +nurbs_surface%ansatz proc~ansatz~3->none~set~3 - - + + proc~elevate_degree~3 - - -nurbs_curve%elevate_degree + + +nurbs_surface%elevate_degree proc~elevate_degree~3->none~set~3 - - + + proc~insert_knots~3 - - -nurbs_curve%insert_knots + + +nurbs_surface%insert_knots proc~insert_knots~3->none~set~3 - - + + proc~modify_wc~3 - - -nurbs_curve%modify_Wc + + +nurbs_surface%modify_Wc proc~modify_wc~3->none~set~3 - - + + proc~modify_xc~3 - - -nurbs_curve%modify_Xc + + +nurbs_surface%modify_Xc proc~modify_xc~3->none~set~3 - - + + proc~remove_knots~3 - - -nurbs_curve%remove_knots + + +nurbs_surface%remove_knots proc~remove_knots~3->none~set~3 - - + + - + -proc~set_circle - - -nurbs_curve%set_circle +proc~set_c~3 + + +nurbs_surface%set_C - + -proc~set_circle->none~set~3 - - +proc~set_c~3->none~set~3 + + - + -proc~set_c~3 - - -nurbs_curve%set_C +proc~set_half_ring~2 + + +nurbs_surface%set_half_ring - + -proc~set_c~3->none~set~3 - - +proc~set_half_ring~2->none~set~3 + + - + -proc~set_half_circle - - -nurbs_curve%set_half_circle +proc~set_ring~2 + + +nurbs_surface%set_ring - + -proc~set_half_circle->none~set~3 - - +proc~set_ring~2->none~set~3 + + - + -program~compute_length - - -compute_length +proc~set_tetragon + + +nurbs_surface%set_tetragon - + -program~compute_length->none~set~3 - - - - - -proc~cmp_length - - -nurbs_curve%cmp_length - - - - - -program~compute_length->proc~cmp_length - - +proc~set_tetragon->none~set~3 + + - + -program~example1_curve - - -example1_curve +program~compute_area + + +compute_area - + -program~example1_curve->none~set~3 - - +program~compute_area->none~set~3 + + - - -program~example1_curve->proc~elevate_degree~3 - - + + +proc~cmp_area + + +nurbs_surface%cmp_area + - - -program~example1_curve->proc~insert_knots~3 - - - - -program~example1_curve->proc~remove_knots~3 - - + + +program~compute_area->proc~cmp_area + + - + -program~example_nurbs_curve - - -example_nurbs_curve +program~example3_surface + + +example3_surface - + -program~example_nurbs_curve->none~set~3 - - +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~nearest_point_1d - - -nearest_point_1d +program~example_nurbs_surface + + +example_nurbs_surface - + -program~nearest_point_1d->none~set~3 - - +program~example_nurbs_surface->none~set~3 + + - + + +program~nearest_point_2d + + +nearest_point_2d + + + + -proc~cmp_length->proc~ansatz~3 - - +program~nearest_point_2d->none~set~3 + + - - -program~shape_c_1d - - -shape_C_1d + + +proc~cmp_area->proc~ansatz~3 + + + + + +program~example_ppm1 + + +example_ppm1 - - -program~shape_c_1d->proc~set_c~3 - - + + +program~example_ppm1->proc~set_ring~2 + + - - -program~shape_circle - - -shape_circle + + +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->proc~set_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_half_circle - - -shape_half_circle + + + +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~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 + + @@ -824,7 +947,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/set4.html b/proc/set4.html index c74475036..3f769104d 100644 --- a/proc/set4.html +++ b/proc/set4.html @@ -78,20 +78,20 @@

                          set4
                        • 36 statements + title=" 0.4% of total for procedures.">26 statements
                        • - Source File + Source File
                        • @@ -143,7 +143,7 @@

                          private pure subroutine set4(this, degree, nc, Xc, Wc)

                          Type Bound

                          -

                          nurbs_volume

                          +

                          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),
                          @@ -158,8 +158,8 @@

                          Arguments

                          - + - + - + - + @@ -218,7 +218,7 @@

                          Arguments

                          @@ -246,355 +246,310 @@

                          Called by

                          - - + + proc~~set4~~CalledByGraph - + proc~set4 - -nurbs_volume%set4 + +nurbs_curve%set4 none~set - - -nurbs_volume%set + + +nurbs_curve%set none~set->proc~set4 - - + + proc~ansatz - - -nurbs_volume%ansatz + + +nurbs_curve%ansatz proc~ansatz->none~set - - + + proc~elevate_degree - - -nurbs_volume%elevate_degree + + +nurbs_curve%elevate_degree proc~elevate_degree->none~set - - + + proc~insert_knots - - -nurbs_volume%insert_knots + + +nurbs_curve%insert_knots proc~insert_knots->none~set - - + + proc~modify_wc - - -nurbs_volume%modify_Wc + + +nurbs_curve%modify_Wc proc~modify_wc->none~set - - + + proc~modify_xc - - -nurbs_volume%modify_Xc + + +nurbs_curve%modify_Xc proc~modify_xc->none~set - - + + proc~remove_knots - - -nurbs_volume%remove_knots + + +nurbs_curve%remove_knots proc~remove_knots->none~set - - + + proc~set_c - - -nurbs_volume%set_C + + +nurbs_curve%set_C proc~set_c->none~set - - + + - + -proc~set_half_ring - - -nurbs_volume%set_half_ring +proc~set_circle + + +nurbs_curve%set_circle - + -proc~set_half_ring->none~set - - +proc~set_circle->none~set + + - + -proc~set_hexahedron - - -nurbs_volume%set_hexahedron +proc~set_half_circle + + +nurbs_curve%set_half_circle - + -proc~set_hexahedron->none~set - - +proc~set_half_circle->none~set + + - + -proc~set_ring - - -nurbs_volume%set_ring +program~compute_length + + +compute_length - + -proc~set_ring->none~set - - +program~compute_length->none~set + + + + + +proc~cmp_length + + +nurbs_curve%cmp_length + + + + + +program~compute_length->proc~cmp_length + + - + -program~compute_volume - - -compute_volume +program~example1_curve + + +example1_curve - + -program~compute_volume->none~set - - +program~example1_curve->none~set + + - - -proc~cmp_volume - - -nurbs_volume%cmp_volume - + + +program~example1_curve->proc~elevate_degree + + + + +program~example1_curve->proc~insert_knots + + - - -program~compute_volume->proc~cmp_volume - - + + +program~example1_curve->proc~remove_knots + + - + -program~example3_volume - - -example3_volume +program~example_nurbs_curve + + +example_nurbs_curve - + -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->none~set + + - + -program~example_nurbs_volume - - -example_nurbs_volume +program~nearest_point_1d + + +nearest_point_1d - + -program~example_nurbs_volume->none~set - - - - - -program~example_put_to_nurbs - - -example_put_to_nurbs - - +program~nearest_point_1d->none~set + + - + -program~example_put_to_nurbs->none~set - - +proc~cmp_length->proc~ansatz + + - + -program~nearest_point_3d - - -nearest_point_3d - - - - - -program~nearest_point_3d->none~set - - - - - -proc~cmp_volume->proc~ansatz - - - - - -program~shape_c_3d - - -shape_C_3d +program~shape_c_1d + + +shape_C_1d - - -program~shape_c_3d->proc~set_c - - - - - -program~shape_half_ring_3d - - -shape_half_ring_3d - - + + +program~shape_c_1d->proc~set_c + + - - -program~shape_half_ring_3d->proc~set_half_ring - - - - - -program~shape_hexahedron - - -shape_hexahedron + + +program~shape_circle + + +shape_circle - - -program~shape_hexahedron->proc~set_hexahedron - - + + +program~shape_circle->proc~set_circle + + - - -program~shape_ring_3d - - -shape_ring_3d + + +program~shape_half_circle + + +shape_half_circle - - -program~shape_ring_3d->proc~set_ring - - + + +program~shape_half_circle->proc~set_half_circle + + @@ -714,7 +669,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/set4~2.html b/proc/set4~2.html index dabba533a..33c6008c9 100644 --- a/proc/set4~2.html +++ b/proc/set4~2.html @@ -78,20 +78,20 @@

                          set4
                        • 31 statements + title=" 0.5% of total for procedures.">36 statements
                        • - Source File + Source File
                        • @@ -143,7 +143,7 @@

                          private pure subroutine set4(this, degree, nc, Xc, Wc)

                          Type Bound

                          -

                          nurbs_surface

                          +

                          nurbs_volume

                          Arguments

                          - - class(nurbs_volume), + + class(nurbs_curve), intent(inout) @@ -176,34 +176,34 @@

                          Arguments

                          integer,
                          intent(in),intent(in) - contiguous + ::degree(:)degree
                          - + integer, intent(in),intent(in) - contiguous + ::nc(:)nc
                          - + real(kind=rk), intent(in),
                          - + real(kind=rk), intent(in),
                          @@ -158,8 +158,8 @@

                          Arguments

                          @@ -188,7 +188,7 @@

                          Arguments

                          @@ -203,7 +203,7 @@

                          Arguments

                          @@ -246,418 +246,355 @@

                          Called by

                          - - + + proc~~set4~2~~CalledByGraph - + proc~set4~2 - -nurbs_surface%set4 + +nurbs_volume%set4 none~set~2 - - -nurbs_surface%set + + +nurbs_volume%set none~set~2->proc~set4~2 - - + + proc~ansatz~2 - - -nurbs_surface%ansatz + + +nurbs_volume%ansatz proc~ansatz~2->none~set~2 - - + + proc~elevate_degree~2 - - -nurbs_surface%elevate_degree + + +nurbs_volume%elevate_degree proc~elevate_degree~2->none~set~2 - - + + proc~insert_knots~2 - - -nurbs_surface%insert_knots + + +nurbs_volume%insert_knots proc~insert_knots~2->none~set~2 - - + + proc~modify_wc~2 - - -nurbs_surface%modify_Wc + + +nurbs_volume%modify_Wc proc~modify_wc~2->none~set~2 - - + + proc~modify_xc~2 - - -nurbs_surface%modify_Xc + + +nurbs_volume%modify_Xc proc~modify_xc~2->none~set~2 - - + + proc~remove_knots~2 - - -nurbs_surface%remove_knots + + +nurbs_volume%remove_knots proc~remove_knots~2->none~set~2 - - + + proc~set_c~2 - - -nurbs_surface%set_C + + +nurbs_volume%set_C proc~set_c~2->none~set~2 - - + + - + -proc~set_half_ring~2 - - -nurbs_surface%set_half_ring +proc~set_half_ring + + +nurbs_volume%set_half_ring - + -proc~set_half_ring~2->none~set~2 - - +proc~set_half_ring->none~set~2 + + - + -proc~set_ring~2 - - -nurbs_surface%set_ring +proc~set_hexahedron + + +nurbs_volume%set_hexahedron - + -proc~set_ring~2->none~set~2 - - +proc~set_hexahedron->none~set~2 + + - + -proc~set_tetragon - - -nurbs_surface%set_tetragon +proc~set_ring + + +nurbs_volume%set_ring - + -proc~set_tetragon->none~set~2 - - +proc~set_ring->none~set~2 + + - + -program~compute_area - - -compute_area +program~compute_volume + + +compute_volume - + -program~compute_area->none~set~2 - - +program~compute_volume->none~set~2 + + - - -proc~cmp_area - - -nurbs_surface%cmp_area + + +proc~cmp_volume + + +nurbs_volume%cmp_volume - - -program~compute_area->proc~cmp_area - - + + +program~compute_volume->proc~cmp_volume + + - + -program~example3_surface - - -example3_surface +program~example3_volume + + +example3_volume - + -program~example3_surface->none~set~2 - - - - - -program~example3_surface->proc~elevate_degree~2 - - +program~example3_volume->none~set~2 + + - + -program~example3_surface->proc~insert_knots~2 - - +program~example3_volume->proc~elevate_degree~2 + + - + + +program~example3_volume->proc~insert_knots~2 + + + + -program~example3_surface->proc~remove_knots~2 - - +program~example3_volume->proc~remove_knots~2 + + - + -program~example_nurbs_surface - - -example_nurbs_surface +program~example_nurbs_volume + + +example_nurbs_volume - + -program~example_nurbs_surface->none~set~2 - - +program~example_nurbs_volume->none~set~2 + + - + -program~nearest_point_2d - - -nearest_point_2d +program~example_put_to_nurbs + + +example_put_to_nurbs - + -program~nearest_point_2d->none~set~2 - - - - - -proc~cmp_area->proc~ansatz~2 - - +program~example_put_to_nurbs->none~set~2 + + - - -program~example_ppm1 - - -example_ppm1 + + +program~nearest_point_3d + + +nearest_point_3d - - -program~example_ppm1->proc~set_ring~2 - - + + +program~nearest_point_3d->none~set~2 + + - - -program~example_ppm1->proc~set_tetragon - - + + +proc~cmp_volume->proc~ansatz~2 + + - + -program~example_ppm2 - - -example_ppm2 +program~shape_c_3d + + +shape_C_3d - - -program~example_ppm2->proc~set_half_ring~2 - - - - - -program~example_ppm2->proc~set_tetragon - - + + +program~shape_c_3d->proc~set_c~2 + + - + -program~example_ppm3 - - -example_ppm3 +program~shape_half_ring_3d + + +shape_half_ring_3d - - -program~example_ppm3->proc~modify_xc~2 - - - - - -program~example_ppm3->proc~set_tetragon - - + + +program~shape_half_ring_3d->proc~set_half_ring + + - + -program~nearest_point_2d_bench - - -nearest_point_2d_bench +program~shape_hexahedron + + +shape_hexahedron - - -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_hexahedron->proc~set_hexahedron + + - - - -program~shape_ring_2d->proc~set_ring~2 - - - - - -program~shape_tetragon - - -shape_tetragon + + +program~shape_ring_3d + + +shape_ring_3d - - -program~shape_tetragon->proc~set_tetragon - - + + +program~shape_ring_3d->proc~set_ring + + @@ -777,7 +714,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/set4~3.html b/proc/set4~3.html index 48d8f4ac6..67c42a396 100644 --- a/proc/set4~3.html +++ b/proc/set4~3.html @@ -78,20 +78,20 @@

                          set4
                        • 26 statements + title=" 0.5% of total for procedures.">31 statements
                        • - Source File + Source File
                        • @@ -143,7 +143,7 @@

                          private pure subroutine set4(this, degree, nc, Xc, Wc)

                          Type Bound

                          -

                          nurbs_curve

                          +

                          nurbs_surface

                          Arguments

                          - - class(nurbs_surface), + + class(nurbs_volume), intent(inout) @@ -173,7 +173,7 @@

                          Arguments

                          - + integer, intent(in),
                          - + integer, intent(in),
                          - + real(kind=rk), intent(in),
                          @@ -158,8 +158,8 @@

                          Arguments

                          - + - + - + - + @@ -218,7 +218,7 @@

                          Arguments

                          @@ -246,310 +246,418 @@

                          Called by

                          - - + + proc~~set4~3~~CalledByGraph - + proc~set4~3 - -nurbs_curve%set4 + +nurbs_surface%set4 none~set~3 - - -nurbs_curve%set + + +nurbs_surface%set none~set~3->proc~set4~3 - - + + proc~ansatz~3 - - -nurbs_curve%ansatz + + +nurbs_surface%ansatz proc~ansatz~3->none~set~3 - - + + proc~elevate_degree~3 - - -nurbs_curve%elevate_degree + + +nurbs_surface%elevate_degree proc~elevate_degree~3->none~set~3 - - + + proc~insert_knots~3 - - -nurbs_curve%insert_knots + + +nurbs_surface%insert_knots proc~insert_knots~3->none~set~3 - - + + proc~modify_wc~3 - - -nurbs_curve%modify_Wc + + +nurbs_surface%modify_Wc proc~modify_wc~3->none~set~3 - - + + proc~modify_xc~3 - - -nurbs_curve%modify_Xc + + +nurbs_surface%modify_Xc proc~modify_xc~3->none~set~3 - - + + proc~remove_knots~3 - - -nurbs_curve%remove_knots + + +nurbs_surface%remove_knots proc~remove_knots~3->none~set~3 - - + + - + -proc~set_circle - - -nurbs_curve%set_circle +proc~set_c~3 + + +nurbs_surface%set_C - + -proc~set_circle->none~set~3 - - +proc~set_c~3->none~set~3 + + - + -proc~set_c~3 - - -nurbs_curve%set_C +proc~set_half_ring~2 + + +nurbs_surface%set_half_ring - + -proc~set_c~3->none~set~3 - - +proc~set_half_ring~2->none~set~3 + + - + -proc~set_half_circle - - -nurbs_curve%set_half_circle +proc~set_ring~2 + + +nurbs_surface%set_ring - + -proc~set_half_circle->none~set~3 - - +proc~set_ring~2->none~set~3 + + - + -program~compute_length - - -compute_length +proc~set_tetragon + + +nurbs_surface%set_tetragon - + -program~compute_length->none~set~3 - - +proc~set_tetragon->none~set~3 + + - - -proc~cmp_length - - -nurbs_curve%cmp_length - - - - - -program~compute_length->proc~cmp_length - - - - + -program~example1_curve - - -example1_curve +program~compute_area + + +compute_area - + -program~example1_curve->none~set~3 - - +program~compute_area->none~set~3 + + - - -program~example1_curve->proc~elevate_degree~3 - - + + +proc~cmp_area + + +nurbs_surface%cmp_area + - - -program~example1_curve->proc~insert_knots~3 - - - - -program~example1_curve->proc~remove_knots~3 - - + + +program~compute_area->proc~cmp_area + + - + -program~example_nurbs_curve - - -example_nurbs_curve +program~example3_surface + + +example3_surface - + -program~example_nurbs_curve->none~set~3 - - +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~nearest_point_1d - - -nearest_point_1d +program~example_nurbs_surface + + +example_nurbs_surface - + -program~nearest_point_1d->none~set~3 - - +program~example_nurbs_surface->none~set~3 + + - + + +program~nearest_point_2d + + +nearest_point_2d + + + + -proc~cmp_length->proc~ansatz~3 - - +program~nearest_point_2d->none~set~3 + + - - -program~shape_c_1d - - -shape_C_1d + + +proc~cmp_area->proc~ansatz~3 + + + + + +program~example_ppm1 + + +example_ppm1 - - -program~shape_c_1d->proc~set_c~3 - - + + +program~example_ppm1->proc~set_ring~2 + + - - -program~shape_circle - - -shape_circle + + +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->proc~set_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_half_circle - - -shape_half_circle + + + +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~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 + + @@ -669,7 +777,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/set_c.html b/proc/set_c.html index fc600b7df..477bc0a3a 100644 --- a/proc/set_c.html +++ b/proc/set_c.html @@ -78,20 +78,20 @@

                          set_C
                        • 40 statements + title=" 0.3% of total for procedures.">19 statements
                        • - Source File + Source File
                        • -

                          private pure subroutine set_C(this, center, radius1, radius2, length) +

                          private pure subroutine set_C(this, center, radius)

                          Type Bound

                          -

                          nurbs_volume

                          +

                          nurbs_curve

                          Arguments

                          - - class(nurbs_curve), + + class(nurbs_surface), intent(inout) @@ -173,37 +173,37 @@

                          Arguments

                          - + integer, intent(in)intent(in), - + contiguous ::degreedegree(:)
                          - + integer, intent(in)intent(in), - + contiguous ::ncnc(:)
                          - + real(kind=rk), intent(in),
                          - + real(kind=rk), intent(in),
                          @@ -158,8 +158,8 @@

                          Arguments

                          @@ -196,37 +196,7 @@

                          Arguments

                          - - - - - - - - - - - - - - - - - + @@ -246,229 +216,223 @@

                          Calls

                          - - + + proc~~set_c~~CallsGraph - + proc~set_c - -nurbs_volume%set_C + +nurbs_curve%set_C none~set - - -nurbs_volume%set + + +nurbs_curve%set proc~set_c->none~set - - + + proc~set1 - - -nurbs_volume%set1 + + +nurbs_curve%set1 none~set->proc~set1 - - + + - + +proc~set1a + + +nurbs_curve%set1a + + + + + +none~set->proc~set1a + + + + + proc~set2 - - -nurbs_volume%set2 + + +nurbs_curve%set2 - + none~set->proc~set2 - - + + - + proc~set3 - - -nurbs_volume%set3 + + +nurbs_curve%set3 - + none~set->proc~set3 - - + + - + proc~set4 - - -nurbs_volume%set4 + + +nurbs_curve%set4 - + none~set->proc~set4 - - + + - + proc~cmp_degree - - -nurbs_volume%cmp_degree + + +nurbs_curve%cmp_degree - -proc~set1->proc~cmp_degree - - - - - -proc~cmp_nc - - -nurbs_volume%cmp_nc - - - - -proc~set1->proc~cmp_nc - - +proc~set1->proc~cmp_degree + + - + -proc~set2->proc~cmp_nc - - +proc~set1a->proc~cmp_degree + + proc~compute_knot_vector - -compute_knot_vector + +compute_knot_vector proc~set2->proc~compute_knot_vector - - + + proc~set3->proc~cmp_degree - - + + - + proc~get_multiplicity - - -nurbs_volume%get_multiplicity + + +nurbs_curve%get_multiplicity proc~cmp_degree->proc~get_multiplicity - - + + - - -interface~compute_multiplicity - - -compute_multiplicity + + +proc~repelem + + +repelem - + -proc~cmp_nc->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->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->interface~compute_multiplicity - - + + @@ -568,31 +532,31 @@

                          Called by

                          - + proc~~set_c~~CalledByGraph - + proc~set_c - -nurbs_volume%set_C + +nurbs_curve%set_C - + -program~shape_c_3d - +program~shape_c_1d + -shape_C_3d +shape_C_1d - + -program~shape_c_3d->proc~set_c - - +program~shape_c_1d->proc~set_c + + @@ -708,7 +672,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/set_circle.html b/proc/set_circle.html index 8c0d01ed9..8df8cf0c2 100644 --- a/proc/set_circle.html +++ b/proc/set_circle.html @@ -158,7 +158,7 @@

                          Arguments

                          @@ -173,7 +173,7 @@

                          Arguments

                          @@ -227,116 +227,116 @@

                          Calls

                          nurbs_curve%set_circle - + -none~set~3 - +none~set + nurbs_curve%set - + -proc~set_circle->none~set~3 +proc~set_circle->none~set - + -proc~set1a - - -nurbs_curve%set1a +proc~set1 + + +nurbs_curve%set1 - + -none~set~3->proc~set1a +none~set->proc~set1 - + -proc~set1~3 - - -nurbs_curve%set1 +proc~set1a + + +nurbs_curve%set1a - + -none~set~3->proc~set1~3 +none~set->proc~set1a - + -proc~set2~3 - +proc~set2 + nurbs_curve%set2 - + -none~set~3->proc~set2~3 +none~set->proc~set2 - + -proc~set3~3 - +proc~set3 + nurbs_curve%set3 - + -none~set~3->proc~set3~3 +none~set->proc~set3 - + -proc~set4~3 - +proc~set4 + nurbs_curve%set4 - + -none~set~3->proc~set4~3 +none~set->proc~set4 - + -proc~cmp_degree~3 - +proc~cmp_degree + nurbs_curve%cmp_degree - + -proc~set1a->proc~cmp_degree~3 +proc~set1->proc~cmp_degree - + -proc~set1~3->proc~cmp_degree~3 - - +proc~set1a->proc~cmp_degree + + @@ -347,30 +347,30 @@

                          Calls

                          - + -proc~set2~3->proc~compute_knot_vector +proc~set2->proc~compute_knot_vector - + -proc~set3~3->proc~cmp_degree~3 +proc~set3->proc~cmp_degree - + -proc~get_multiplicity~3 - +proc~get_multiplicity + nurbs_curve%get_multiplicity - + -proc~cmp_degree~3->proc~get_multiplicity~3 +proc~cmp_degree->proc~get_multiplicity @@ -398,9 +398,9 @@

                          Calls

                          - + -proc~get_multiplicity~3->interface~compute_multiplicity +proc~get_multiplicity->interface~compute_multiplicity @@ -672,7 +672,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/set_c~2.html b/proc/set_c~2.html index 6afc69b4d..a413fb6f2 100644 --- a/proc/set_c~2.html +++ b/proc/set_c~2.html @@ -78,20 +78,20 @@

                          set_C
                        • 27 statements + title=" 0.6% of total for procedures.">40 statements
                        • - Source File + Source File
                        • -

                          private pure subroutine set_C(this, center, radius1, radius2) +

                          private pure subroutine set_C(this, center, radius1, radius2, length)

                          Type Bound

                          -

                          nurbs_surface

                          +

                          nurbs_volume

                          Arguments

                          - - class(nurbs_volume), + + class(nurbs_curve), intent(inout) @@ -188,7 +188,7 @@

                          Arguments

                          - + real(kind=rk), intent(in) ::radius1 - -
                          - - real(kind=rk), - intent(in) - - ::radius2 - -
                          - - real(kind=rk), - intent(in) - - ::lengthradius
                          - + class(nurbs_curve), intent(inout)
                          - + real(kind=rk), intent(in),
                          @@ -158,8 +158,8 @@

                          Arguments

                          @@ -203,7 +203,7 @@

                          Arguments

                          @@ -214,6 +214,21 @@

                          Arguments

                          + + + + + + + + @@ -240,14 +255,14 @@

                          Calls

                          proc~set_c~2 -nurbs_surface%set_C +nurbs_volume%set_C none~set~2 - + -nurbs_surface%set +nurbs_volume%set @@ -260,9 +275,9 @@

                          Calls

                          proc~set1~2 - + -nurbs_surface%set1 +nurbs_volume%set1 @@ -275,9 +290,9 @@

                          Calls

                          proc~set2~2 - + -nurbs_surface%set2 +nurbs_volume%set2 @@ -290,9 +305,9 @@

                          Calls

                          proc~set3~2 - + -nurbs_surface%set3 +nurbs_volume%set3 @@ -305,9 +320,9 @@

                          Calls

                          proc~set4~2 - + -nurbs_surface%set4 +nurbs_volume%set4 @@ -320,9 +335,9 @@

                          Calls

                          proc~cmp_degree~2 - + -nurbs_surface%cmp_degree +nurbs_volume%cmp_degree @@ -335,9 +350,9 @@

                          Calls

                          proc~cmp_nc~2 - + -nurbs_surface%cmp_nc +nurbs_volume%cmp_nc @@ -377,9 +392,9 @@

                          Calls

                          proc~get_multiplicity~2 - + -nurbs_surface%get_multiplicity +nurbs_volume%get_multiplicity @@ -562,20 +577,20 @@

                          Called by

                          proc~set_c~2 -nurbs_surface%set_C +nurbs_volume%set_C - + -program~shape_c_2d - +program~shape_c_3d + -shape_C_2d +shape_C_3d - + -program~shape_c_2d->proc~set_c~2 +program~shape_c_3d->proc~set_c~2 @@ -693,7 +708,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/set_c~3.html b/proc/set_c~3.html index 27f7aa296..55a633e08 100644 --- a/proc/set_c~3.html +++ b/proc/set_c~3.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_volume), intent(inout) @@ -188,7 +188,7 @@

                          Arguments

                          - + real(kind=rk), intent(in)
                          - + real(kind=rk), intent(in) radius2 +
                          + + real(kind=rk), + intent(in) + + ::length +
                          @@ -158,8 +158,8 @@

                          Arguments

                          @@ -188,7 +188,7 @@

                          Arguments

                          @@ -196,7 +196,22 @@

                          Arguments

                          - + + + + + + + + + @@ -216,223 +231,229 @@

                          Calls

                          - - + + proc~~set_c~3~~CallsGraph - + proc~set_c~3 - -nurbs_curve%set_C + +nurbs_surface%set_C none~set~3 - - -nurbs_curve%set + + +nurbs_surface%set proc~set_c~3->none~set~3 - - - - - -proc~set1a - - -nurbs_curve%set1a - - - - - -none~set~3->proc~set1a - - + + - + proc~set1~3 - - -nurbs_curve%set1 + + +nurbs_surface%set1 - + none~set~3->proc~set1~3 - - + + - + proc~set2~3 - - -nurbs_curve%set2 + + +nurbs_surface%set2 - + none~set~3->proc~set2~3 - - + + - + proc~set3~3 - - -nurbs_curve%set3 + + +nurbs_surface%set3 - + none~set~3->proc~set3~3 - - + + - + proc~set4~3 - - -nurbs_curve%set4 + + +nurbs_surface%set4 - + none~set~3->proc~set4~3 - - + + - + proc~cmp_degree~3 - - -nurbs_curve%cmp_degree + + +nurbs_surface%cmp_degree - + + +proc~set1~3->proc~cmp_degree~3 + + + + + +proc~cmp_nc~3 + + +nurbs_surface%cmp_nc + + + + -proc~set1a->proc~cmp_degree~3 - - +proc~set1~3->proc~cmp_nc~3 + + - + -proc~set1~3->proc~cmp_degree~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_curve%get_multiplicity + + +nurbs_surface%get_multiplicity proc~cmp_degree~3->proc~get_multiplicity~3 - - + + - - -proc~repelem - - -repelem + + +interface~compute_multiplicity + + +compute_multiplicity - + -proc~compute_knot_vector->proc~repelem - - +proc~cmp_nc~3->interface~compute_multiplicity + + - + -interface~compute_multiplicity - - -compute_multiplicity +proc~repelem + + +repelem - + -proc~get_multiplicity~3->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~3->interface~compute_multiplicity + + @@ -532,31 +553,31 @@

                          Called by

                          - + proc~~set_c~3~~CalledByGraph - + proc~set_c~3 - -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~3 - - +program~shape_c_2d->proc~set_c~3 + + @@ -672,7 +693,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/set_elem.html b/proc/set_elem.html index 12685d997..7f5b24162 100644 --- a/proc/set_elem.html +++ b/proc/set_elem.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_volume

                          +

                          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) ::radiusradius1 + +
                          + + real(kind=rk), + intent(in) + + ::radius2
                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_volume), + + class(nurbs_curve), intent(inout) @@ -190,127 +190,6 @@

                          Arguments


                          -
                          -
                          -

                          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 -
                          - -
                          -
                          -
                          @@ -341,7 +220,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/set_elem_xc_vis.html b/proc/set_elem_xc_vis.html index 04ecee60b..2ae860b91 100644 --- a/proc/set_elem_xc_vis.html +++ b/proc/set_elem_xc_vis.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_volume

                          +

                          nurbs_curve

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_volume), + + class(nurbs_curve), intent(inout) @@ -220,7 +220,7 @@

                          Arguments

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/set_elem_xc_vis~2.html b/proc/set_elem_xc_vis~2.html index 49380e3d6..87f1208a9 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_surface

                          +

                          nurbs_volume

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          @@ -220,7 +220,7 @@

                          Arguments

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/set_elem_xc_vis~3.html b/proc/set_elem_xc_vis~3.html index 2411ef83b..96682f2fa 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_curve

                          +

                          nurbs_surface

                          Arguments

                          - - class(nurbs_surface), + + class(nurbs_volume), intent(inout) @@ -173,7 +173,7 @@

                          Arguments

                          - + integer, intent(in),
                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_curve), + + class(nurbs_surface), intent(inout) @@ -220,7 +220,7 @@

                          Arguments

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/set_elem_xg_vis.html b/proc/set_elem_xg_vis.html index fc6cd80f6..2998c81c6 100644 --- a/proc/set_elem_xg_vis.html +++ b/proc/set_elem_xg_vis.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_volume

                          +

                          nurbs_curve

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_volume), + + class(nurbs_curve), intent(inout) @@ -190,142 +190,6 @@

                          Arguments


                          -
                          -
                          -

                          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 -
                          - -
                          -
                          -
                          @@ -356,7 +220,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/set_elem_xg_vis~2.html b/proc/set_elem_xg_vis~2.html index 9c9c4a22f..49d91b621 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_surface

                          +

                          nurbs_volume

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          @@ -190,6 +190,142 @@

                          Arguments

                          - - class(nurbs_surface), + + class(nurbs_volume), intent(inout) @@ -173,7 +173,7 @@

                          Arguments

                          - + integer, intent(in),

                          +
                          +
                          +

                          Called by

                          +
                          +
                          +
                          + + + + + +proc~~set_elem_xg_vis~2~~CalledByGraph + + + +proc~set_elem_xg_vis~2 + +nurbs_volume%set_elem_Xg_vis + + + +proc~put_to_nurbs + + +nurbs_volume%put_to_nurbs + + + + + +proc~put_to_nurbs->proc~set_elem_xg_vis~2 + + + + + +program~example_put_to_nurbs + + +example_put_to_nurbs + + + + + +program~example_put_to_nurbs->proc~put_to_nurbs + + + + + +
                          + Help +
                          + +
                          +
                          +
                          @@ -220,7 +356,7 @@

                          Arguments

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/set_elem_xg_vis~3.html b/proc/set_elem_xg_vis~3.html index 92534512f..7cf866556 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_curve

                          +

                          nurbs_surface

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_curve), + + class(nurbs_surface), intent(inout) @@ -220,7 +220,7 @@

                          Arguments

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/set_elem~2.html b/proc/set_elem~2.html index 0ea0cbdcf..16ba23641 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_surface

                          +

                          nurbs_volume

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          @@ -190,6 +190,127 @@

                          Arguments

                          - - class(nurbs_surface), + + class(nurbs_volume), intent(inout) @@ -173,7 +173,7 @@

                          Arguments

                          - + integer, intent(in),

                          +
                          +
                          +

                          Called by

                          +
                          +
                          +
                          + + + + + +proc~~set_elem~2~~CalledByGraph + + + +proc~set_elem~2 + +nurbs_volume%set_elem + + + +program~example3_volume + + +example3_volume + + + + + +program~example3_volume->proc~set_elem~2 + + + + + +
                          + Help +
                          + +
                          +
                          +
                          @@ -220,7 +341,7 @@

                          Arguments

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/set_elem~3.html b/proc/set_elem~3.html index 6e5373fcf..3a71b7b5a 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_curve

                          +

                          nurbs_surface

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          @@ -173,7 +173,7 @@

                          Arguments

                          @@ -227,116 +227,116 @@

                          Calls

                          nurbs_curve%set_half_circle - + -none~set~3 - +none~set + nurbs_curve%set - + -proc~set_half_circle->none~set~3 +proc~set_half_circle->none~set - + -proc~set1a - - -nurbs_curve%set1a +proc~set1 + + +nurbs_curve%set1 - + -none~set~3->proc~set1a +none~set->proc~set1 - + -proc~set1~3 - - -nurbs_curve%set1 +proc~set1a + + +nurbs_curve%set1a - + -none~set~3->proc~set1~3 +none~set->proc~set1a - + -proc~set2~3 - +proc~set2 + nurbs_curve%set2 - + -none~set~3->proc~set2~3 +none~set->proc~set2 - + -proc~set3~3 - +proc~set3 + nurbs_curve%set3 - + -none~set~3->proc~set3~3 +none~set->proc~set3 - + -proc~set4~3 - +proc~set4 + nurbs_curve%set4 - + -none~set~3->proc~set4~3 +none~set->proc~set4 - + -proc~cmp_degree~3 - +proc~cmp_degree + nurbs_curve%cmp_degree - + -proc~set1a->proc~cmp_degree~3 +proc~set1->proc~cmp_degree - + -proc~set1~3->proc~cmp_degree~3 - - +proc~set1a->proc~cmp_degree + + @@ -347,30 +347,30 @@

                          Calls

                          - + -proc~set2~3->proc~compute_knot_vector +proc~set2->proc~compute_knot_vector - + -proc~set3~3->proc~cmp_degree~3 +proc~set3->proc~cmp_degree - + -proc~get_multiplicity~3 - +proc~get_multiplicity + nurbs_curve%get_multiplicity - + -proc~cmp_degree~3->proc~get_multiplicity~3 +proc~cmp_degree->proc~get_multiplicity @@ -398,9 +398,9 @@

                          Calls

                          - + -proc~get_multiplicity~3->interface~compute_multiplicity +proc~get_multiplicity->interface~compute_multiplicity @@ -672,7 +672,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/set_half_ring.html b/proc/set_half_ring.html index ac3ffda56..0e3a6ba63 100644 --- a/proc/set_half_ring.html +++ b/proc/set_half_ring.html @@ -158,7 +158,7 @@

                          Arguments

                          @@ -173,7 +173,7 @@

                          Arguments

                          @@ -218,7 +218,7 @@

                          Arguments

                          @@ -257,114 +257,114 @@

                          Calls

                          nurbs_volume%set_half_ring - + -none~set - +none~set~2 + nurbs_volume%set - + -proc~set_half_ring->none~set +proc~set_half_ring->none~set~2 - + -proc~set1 - +proc~set1~2 + nurbs_volume%set1 - + -none~set->proc~set1 +none~set~2->proc~set1~2 - + -proc~set2 - +proc~set2~2 + nurbs_volume%set2 - + -none~set->proc~set2 +none~set~2->proc~set2~2 - + -proc~set3 - +proc~set3~2 + nurbs_volume%set3 - + -none~set->proc~set3 +none~set~2->proc~set3~2 - + -proc~set4 - +proc~set4~2 + nurbs_volume%set4 - + -none~set->proc~set4 +none~set~2->proc~set4~2 - + -proc~cmp_degree - +proc~cmp_degree~2 + nurbs_volume%cmp_degree - + -proc~set1->proc~cmp_degree +proc~set1~2->proc~cmp_degree~2 - + -proc~cmp_nc - +proc~cmp_nc~2 + nurbs_volume%cmp_nc - + -proc~set1->proc~cmp_nc +proc~set1~2->proc~cmp_nc~2 - + -proc~set2->proc~cmp_nc +proc~set2~2->proc~cmp_nc~2 @@ -377,30 +377,30 @@

                          Calls

                          - + -proc~set2->proc~compute_knot_vector +proc~set2~2->proc~compute_knot_vector - + -proc~set3->proc~cmp_degree +proc~set3~2->proc~cmp_degree~2 - + -proc~get_multiplicity - +proc~get_multiplicity~2 + nurbs_volume%get_multiplicity - + -proc~cmp_degree->proc~get_multiplicity +proc~cmp_degree~2->proc~get_multiplicity~2 @@ -413,9 +413,9 @@

                          Calls

                          - + -proc~cmp_nc->interface~compute_multiplicity +proc~cmp_nc~2->interface~compute_multiplicity @@ -464,9 +464,9 @@

                          Calls

                          - + -proc~get_multiplicity->interface~compute_multiplicity +proc~get_multiplicity~2->interface~compute_multiplicity @@ -708,7 +708,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/set_half_ring~2.html b/proc/set_half_ring~2.html index 005ce642b..6fd068bc7 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,114 +242,114 @@

                          Calls

                          nurbs_surface%set_half_ring - + -none~set~2 - +none~set~3 + nurbs_surface%set - + -proc~set_half_ring~2->none~set~2 +proc~set_half_ring~2->none~set~3 - + -proc~set1~2 - +proc~set1~3 + nurbs_surface%set1 - + -none~set~2->proc~set1~2 +none~set~3->proc~set1~3 - + -proc~set2~2 - +proc~set2~3 + nurbs_surface%set2 - + -none~set~2->proc~set2~2 +none~set~3->proc~set2~3 - + -proc~set3~2 - +proc~set3~3 + nurbs_surface%set3 - + -none~set~2->proc~set3~2 +none~set~3->proc~set3~3 - + -proc~set4~2 - +proc~set4~3 + nurbs_surface%set4 - + -none~set~2->proc~set4~2 +none~set~3->proc~set4~3 - + -proc~cmp_degree~2 - +proc~cmp_degree~3 + nurbs_surface%cmp_degree - + -proc~set1~2->proc~cmp_degree~2 +proc~set1~3->proc~cmp_degree~3 - + -proc~cmp_nc~2 - +proc~cmp_nc~3 + nurbs_surface%cmp_nc - + -proc~set1~2->proc~cmp_nc~2 +proc~set1~3->proc~cmp_nc~3 - + -proc~set2~2->proc~cmp_nc~2 +proc~set2~3->proc~cmp_nc~3 @@ -362,30 +362,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_surface%get_multiplicity - + -proc~cmp_degree~2->proc~get_multiplicity~2 +proc~cmp_degree~3->proc~get_multiplicity~3 @@ -398,9 +398,9 @@

                          Calls

                          - + -proc~cmp_nc~2->interface~compute_multiplicity +proc~cmp_nc~3->interface~compute_multiplicity @@ -449,9 +449,9 @@

                          Calls

                          - + -proc~get_multiplicity~2->interface~compute_multiplicity +proc~get_multiplicity~3->interface~compute_multiplicity @@ -708,7 +708,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/set_hexahedron.html b/proc/set_hexahedron.html index 8e3ee5259..eff64beaa 100644 --- a/proc/set_hexahedron.html +++ b/proc/set_hexahedron.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_volume%set_hexahedron - + -none~set - +none~set~2 + nurbs_volume%set - + -proc~set_hexahedron->none~set +proc~set_hexahedron->none~set~2 @@ -272,99 +272,99 @@

                          Calls

                          - + -proc~set1 - +proc~set1~2 + nurbs_volume%set1 - + -none~set->proc~set1 +none~set~2->proc~set1~2 - + -proc~set2 - +proc~set2~2 + nurbs_volume%set2 - + -none~set->proc~set2 +none~set~2->proc~set2~2 - + -proc~set3 - +proc~set3~2 + nurbs_volume%set3 - + -none~set->proc~set3 +none~set~2->proc~set3~2 - + -proc~set4 - +proc~set4~2 + nurbs_volume%set4 - + -none~set->proc~set4 +none~set~2->proc~set4~2 - + -proc~cmp_degree - +proc~cmp_degree~2 + nurbs_volume%cmp_degree - + -proc~set1->proc~cmp_degree +proc~set1~2->proc~cmp_degree~2 - + -proc~cmp_nc - +proc~cmp_nc~2 + nurbs_volume%cmp_nc - + -proc~set1->proc~cmp_nc +proc~set1~2->proc~cmp_nc~2 - + -proc~set2->proc~cmp_nc +proc~set2~2->proc~cmp_nc~2 @@ -377,30 +377,30 @@

                          Calls

                          - + -proc~set2->proc~compute_knot_vector +proc~set2~2->proc~compute_knot_vector - + -proc~set3->proc~cmp_degree +proc~set3~2->proc~cmp_degree~2 - + -proc~get_multiplicity - +proc~get_multiplicity~2 + nurbs_volume%get_multiplicity - + -proc~cmp_degree->proc~get_multiplicity +proc~cmp_degree~2->proc~get_multiplicity~2 @@ -413,9 +413,9 @@

                          Calls

                          - + -proc~cmp_nc->interface~compute_multiplicity +proc~cmp_nc~2->interface~compute_multiplicity @@ -464,9 +464,9 @@

                          Calls

                          - + -proc~get_multiplicity->interface~compute_multiplicity +proc~get_multiplicity~2->interface~compute_multiplicity @@ -708,7 +708,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/set_ring.html b/proc/set_ring.html index 9f7eff3d7..1774bd9aa 100644 --- a/proc/set_ring.html +++ b/proc/set_ring.html @@ -158,7 +158,7 @@

                          Arguments

                          @@ -173,7 +173,7 @@

                          Arguments

                          @@ -218,7 +218,7 @@

                          Arguments

                          @@ -257,114 +257,114 @@

                          Calls

                          nurbs_volume%set_ring - + -none~set - +none~set~2 + nurbs_volume%set - + -proc~set_ring->none~set +proc~set_ring->none~set~2 - + -proc~set1 - +proc~set1~2 + nurbs_volume%set1 - + -none~set->proc~set1 +none~set~2->proc~set1~2 - + -proc~set2 - +proc~set2~2 + nurbs_volume%set2 - + -none~set->proc~set2 +none~set~2->proc~set2~2 - + -proc~set3 - +proc~set3~2 + nurbs_volume%set3 - + -none~set->proc~set3 +none~set~2->proc~set3~2 - + -proc~set4 - +proc~set4~2 + nurbs_volume%set4 - + -none~set->proc~set4 +none~set~2->proc~set4~2 - + -proc~cmp_degree - +proc~cmp_degree~2 + nurbs_volume%cmp_degree - + -proc~set1->proc~cmp_degree +proc~set1~2->proc~cmp_degree~2 - + -proc~cmp_nc - +proc~cmp_nc~2 + nurbs_volume%cmp_nc - + -proc~set1->proc~cmp_nc +proc~set1~2->proc~cmp_nc~2 - + -proc~set2->proc~cmp_nc +proc~set2~2->proc~cmp_nc~2 @@ -377,30 +377,30 @@

                          Calls

                          - + -proc~set2->proc~compute_knot_vector +proc~set2~2->proc~compute_knot_vector - + -proc~set3->proc~cmp_degree +proc~set3~2->proc~cmp_degree~2 - + -proc~get_multiplicity - +proc~get_multiplicity~2 + nurbs_volume%get_multiplicity - + -proc~cmp_degree->proc~get_multiplicity +proc~cmp_degree~2->proc~get_multiplicity~2 @@ -413,9 +413,9 @@

                          Calls

                          - + -proc~cmp_nc->interface~compute_multiplicity +proc~cmp_nc~2->interface~compute_multiplicity @@ -464,9 +464,9 @@

                          Calls

                          - + -proc~get_multiplicity->interface~compute_multiplicity +proc~get_multiplicity~2->interface~compute_multiplicity @@ -708,7 +708,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/set_ring~2.html b/proc/set_ring~2.html index ae22d067c..797a28433 100644 --- a/proc/set_ring~2.html +++ b/proc/set_ring~2.html @@ -158,7 +158,7 @@

                          Arguments

                          @@ -173,7 +173,7 @@

                          Arguments

                          @@ -242,114 +242,114 @@

                          Calls

                          nurbs_surface%set_ring - + -none~set~2 - +none~set~3 + nurbs_surface%set - + -proc~set_ring~2->none~set~2 +proc~set_ring~2->none~set~3 - + -proc~set1~2 - +proc~set1~3 + nurbs_surface%set1 - + -none~set~2->proc~set1~2 +none~set~3->proc~set1~3 - + -proc~set2~2 - +proc~set2~3 + nurbs_surface%set2 - + -none~set~2->proc~set2~2 +none~set~3->proc~set2~3 - + -proc~set3~2 - +proc~set3~3 + nurbs_surface%set3 - + -none~set~2->proc~set3~2 +none~set~3->proc~set3~3 - + -proc~set4~2 - +proc~set4~3 + nurbs_surface%set4 - + -none~set~2->proc~set4~2 +none~set~3->proc~set4~3 - + -proc~cmp_degree~2 - +proc~cmp_degree~3 + nurbs_surface%cmp_degree - + -proc~set1~2->proc~cmp_degree~2 +proc~set1~3->proc~cmp_degree~3 - + -proc~cmp_nc~2 - +proc~cmp_nc~3 + nurbs_surface%cmp_nc - + -proc~set1~2->proc~cmp_nc~2 +proc~set1~3->proc~cmp_nc~3 - + -proc~set2~2->proc~cmp_nc~2 +proc~set2~3->proc~cmp_nc~3 @@ -362,30 +362,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_surface%get_multiplicity - + -proc~cmp_degree~2->proc~get_multiplicity~2 +proc~cmp_degree~3->proc~get_multiplicity~3 @@ -398,9 +398,9 @@

                          Calls

                          - + -proc~cmp_nc~2->interface~compute_multiplicity +proc~cmp_nc~3->interface~compute_multiplicity @@ -449,9 +449,9 @@

                          Calls

                          - + -proc~get_multiplicity~2->interface~compute_multiplicity +proc~get_multiplicity~3->interface~compute_multiplicity @@ -708,7 +708,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/set_tetragon.html b/proc/set_tetragon.html index 3d6324469..d653b001b 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~2 - +none~set~3 + nurbs_surface%set - + -proc~set_tetragon->none~set~2 +proc~set_tetragon->none~set~3 @@ -272,99 +272,99 @@

                          Calls

                          - + -proc~set1~2 - +proc~set1~3 + nurbs_surface%set1 - + -none~set~2->proc~set1~2 +none~set~3->proc~set1~3 - + -proc~set2~2 - +proc~set2~3 + nurbs_surface%set2 - + -none~set~2->proc~set2~2 +none~set~3->proc~set2~3 - + -proc~set3~2 - +proc~set3~3 + nurbs_surface%set3 - + -none~set~2->proc~set3~2 +none~set~3->proc~set3~3 - + -proc~set4~2 - +proc~set4~3 + nurbs_surface%set4 - + -none~set~2->proc~set4~2 +none~set~3->proc~set4~3 - + -proc~cmp_degree~2 - +proc~cmp_degree~3 + nurbs_surface%cmp_degree - + -proc~set1~2->proc~cmp_degree~2 +proc~set1~3->proc~cmp_degree~3 - + -proc~cmp_nc~2 - +proc~cmp_nc~3 + nurbs_surface%cmp_nc - + -proc~set1~2->proc~cmp_nc~2 +proc~set1~3->proc~cmp_nc~3 - + -proc~set2~2->proc~cmp_nc~2 +proc~set2~3->proc~cmp_nc~3 @@ -377,30 +377,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_surface%get_multiplicity - + -proc~cmp_degree~2->proc~get_multiplicity~2 +proc~cmp_degree~3->proc~get_multiplicity~3 @@ -413,9 +413,9 @@

                          Calls

                          - + -proc~cmp_nc~2->interface~compute_multiplicity +proc~cmp_nc~3->interface~compute_multiplicity @@ -464,9 +464,9 @@

                          Calls

                          - + -proc~get_multiplicity~2->interface~compute_multiplicity +proc~get_multiplicity~3->interface~compute_multiplicity @@ -768,7 +768,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/show.html b/proc/show.html index 0edbb2ff9..a4fd9ab75 100644 --- a/proc/show.html +++ b/proc/show.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_volume

                          +

                          nurbs_curve

                          Arguments

                          - - class(nurbs_curve), + + class(nurbs_surface), intent(inout) @@ -220,7 +220,7 @@

                          Arguments

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/set_half_circle.html b/proc/set_half_circle.html index 768eb3b61..b35e1889e 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_volume), intent(inout)
                          - + real(kind=rk), intent(in),
                          - + real(kind=rk), intent(in)
                          - + class(nurbs_surface), intent(inout)
                          - + real(kind=rk), intent(in),
                          - + class(nurbs_volume), intent(inout)
                          - + real(kind=rk), intent(in),
                          - + integer, intent(in),
                          - + real(kind=rk), intent(in),
                          - + class(nurbs_volume), intent(inout)
                          - + real(kind=rk), intent(in),
                          - + 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),
                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_volume), + + class(nurbs_curve), intent(inout) @@ -216,121 +216,91 @@

                          Called by

                          - - + + proc~~show~~CalledByGraph - + proc~show - -nurbs_volume%show + +nurbs_curve%show - + -program~example3_volume - - -example3_volume +program~example1_curve + + +example1_curve - + -program~example3_volume->proc~show - - +program~example1_curve->proc~show + + - + -program~example_nurbs_volume - - -example_nurbs_volume +program~example_nurbs_curve + + +example_nurbs_curve - + -program~example_nurbs_volume->proc~show - - +program~example_nurbs_curve->proc~show + + - + -program~example_put_to_nurbs - - -example_put_to_nurbs +program~shape_c_1d + + +shape_C_1d - + -program~example_put_to_nurbs->proc~show - - +program~shape_c_1d->proc~show + + - + -program~shape_c_3d - - -shape_C_3d +program~shape_circle + + +shape_circle - + -program~shape_c_3d->proc~show - - +program~shape_circle->proc~show + + - + -program~shape_half_ring_3d - - -shape_half_ring_3d +program~shape_half_circle + + +shape_half_circle - + -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 - - +program~shape_half_circle->proc~show + + @@ -446,7 +416,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/show~2.html b/proc/show~2.html index d194e8d33..8f0a363d0 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_surface

                          +

                          nurbs_volume

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_surface), + + class(nurbs_volume), intent(inout) @@ -216,106 +216,121 @@

                          Called by

                          - - + + proc~~show~2~~CalledByGraph - + proc~show~2 - -nurbs_surface%show + +nurbs_volume%show - + -program~example3_surface - - -example3_surface +program~example3_volume + + +example3_volume - + -program~example3_surface->proc~show~2 - - +program~example3_volume->proc~show~2 + + - + -program~example_nurbs_surface - - -example_nurbs_surface +program~example_nurbs_volume + + +example_nurbs_volume - + -program~example_nurbs_surface->proc~show~2 - - +program~example_nurbs_volume->proc~show~2 + + - + -program~shape_c_2d - - -shape_C_2d +program~example_put_to_nurbs + + +example_put_to_nurbs - + -program~shape_c_2d->proc~show~2 - - +program~example_put_to_nurbs->proc~show~2 + + - + -program~shape_half_ring_2d - - -shape_half_ring_2d +program~shape_c_3d + + +shape_C_3d - + -program~shape_half_ring_2d->proc~show~2 - - +program~shape_c_3d->proc~show~2 + + - + -program~shape_ring_2d - - -shape_ring_2d +program~shape_half_ring_3d + + +shape_half_ring_3d - + -program~shape_ring_2d->proc~show~2 - - +program~shape_half_ring_3d->proc~show~2 + + - + -program~shape_tetragon - - -shape_tetragon +program~shape_hexahedron + + +shape_hexahedron - + -program~shape_tetragon->proc~show~2 - - +program~shape_hexahedron->proc~show~2 + + + + + +program~shape_ring_3d + + +shape_ring_3d + + + + + +program~shape_ring_3d->proc~show~2 + + @@ -431,7 +446,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/show~3.html b/proc/show~3.html index 7509221a6..a780825e8 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_curve

                          +

                          nurbs_surface

                          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-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/translate_xc.html b/proc/translate_xc.html index ff073f42a..a58df920e 100644 --- a/proc/translate_xc.html +++ b/proc/translate_xc.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_volume

                          +

                          nurbs_curve

                          Arguments

                          - - class(nurbs_curve), + + class(nurbs_surface), intent(inout) @@ -216,91 +216,106 @@

                          Called by

                          - - + + proc~~show~3~~CalledByGraph - + proc~show~3 - -nurbs_curve%show + +nurbs_surface%show - + -program~example1_curve - - -example1_curve +program~example3_surface + + +example3_surface - + -program~example1_curve->proc~show~3 - - +program~example3_surface->proc~show~3 + + - + -program~example_nurbs_curve - - -example_nurbs_curve +program~example_nurbs_surface + + +example_nurbs_surface - + -program~example_nurbs_curve->proc~show~3 - - +program~example_nurbs_surface->proc~show~3 + + - + -program~shape_c_1d - - -shape_C_1d +program~shape_c_2d + + +shape_C_2d - + -program~shape_c_1d->proc~show~3 - - +program~shape_c_2d->proc~show~3 + + - + -program~shape_circle - - -shape_circle +program~shape_half_ring_2d + + +shape_half_ring_2d - + -program~shape_circle->proc~show~3 - - +program~shape_half_ring_2d->proc~show~3 + + - + -program~shape_half_circle - - -shape_half_circle +program~shape_ring_2d + + +shape_ring_2d - + -program~shape_half_circle->proc~show~3 - - +program~shape_ring_2d->proc~show~3 + + + + + +program~shape_tetragon + + +shape_tetragon + + + + + +program~shape_tetragon->proc~show~3 + + @@ -416,7 +431,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/tetragon_xc.html b/proc/tetragon_xc.html index b8b52ee14..2903610c6 100644 --- a/proc/tetragon_xc.html +++ b/proc/tetragon_xc.html @@ -156,7 +156,7 @@

                          Arguments

                          - + real(kind=rk), intent(in)
                          - + integer, intent(in)
                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_volume), + + class(nurbs_curve), intent(inout) @@ -201,31 +201,31 @@

                          Called by

                          - + proc~~translate_xc~~CalledByGraph - + proc~translate_xc - -nurbs_volume%translate_Xc + +nurbs_curve%translate_Xc - + -program~example3_volume - - -example3_volume +program~example1_curve + + +example1_curve - + -program~example3_volume->proc~translate_xc - - +program~example1_curve->proc~translate_xc + + @@ -341,7 +341,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/translate_xc~2.html b/proc/translate_xc~2.html index b2d5ed671..44fb03279 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_surface

                          +

                          nurbs_volume

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_surface), + + class(nurbs_volume), intent(inout) @@ -201,61 +201,31 @@

                          Called by

                          - - + + proc~~translate_xc~2~~CalledByGraph - + proc~translate_xc~2 - -nurbs_surface%translate_Xc + +nurbs_volume%translate_Xc - + -program~example3_surface - - -example3_surface +program~example3_volume + + +example3_volume - + -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 - - +program~example3_volume->proc~translate_xc~2 + + @@ -371,7 +341,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/translate_xc~3.html b/proc/translate_xc~3.html index a201ab83c..1393aa884 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_curve

                          +

                          nurbs_surface

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_curve), + + class(nurbs_surface), intent(inout) @@ -201,31 +201,61 @@

                          Called by

                          - - + + proc~~translate_xc~3~~CalledByGraph - + proc~translate_xc~3 - -nurbs_curve%translate_Xc + +nurbs_surface%translate_Xc - + -program~example1_curve - - -example1_curve +program~example3_surface + + +example3_surface - + -program~example1_curve->proc~translate_xc~3 - - +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 + + @@ -341,7 +371,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/translate_xg.html b/proc/translate_xg.html index a779b5e47..396bd0126 100644 --- a/proc/translate_xg.html +++ b/proc/translate_xg.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_volume

                          +

                          nurbs_curve

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_volume), + + class(nurbs_curve), intent(inout) @@ -201,31 +201,31 @@

                          Called by

                          - + proc~~translate_xg~~CalledByGraph - + proc~translate_xg - -nurbs_volume%translate_Xg + +nurbs_curve%translate_Xg - + -program~example3_volume - - -example3_volume +program~example1_curve + + +example1_curve - + -program~example3_volume->proc~translate_xg - - +program~example1_curve->proc~translate_xg + + @@ -341,7 +341,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/translate_xg~2.html b/proc/translate_xg~2.html index 1526b7274..4d38ddc14 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_surface

                          +

                          nurbs_volume

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          - - class(nurbs_surface), + + class(nurbs_volume), intent(inout) @@ -210,20 +210,20 @@

                          Called by

                          proc~translate_xg~2 -nurbs_surface%translate_Xg +nurbs_volume%translate_Xg - + -program~example3_surface - +program~example3_volume + -example3_surface +example3_volume - + -program~example3_surface->proc~translate_xg~2 +program~example3_volume->proc~translate_xg~2 @@ -341,7 +341,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/translate_xg~3.html b/proc/translate_xg~3.html index 1557de4fc..294a4851a 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_curve

                          +

                          nurbs_surface

                          Arguments

                          @@ -158,8 +158,8 @@

                          Arguments

                          @@ -1952,7 +1952,7 @@

                          Source Code

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/program/example_nurbs_curve.html b/program/example_nurbs_curve.html index c1a851b23..a63102266 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

                          @@ -414,243 +414,243 @@

                          Calls

                          example_nurbs_curve - + -none~set~3 - +none~set + nurbs_curve%set - + -program~example_nurbs_curve->none~set~3 +program~example_nurbs_curve->none~set - + -proc~create~3 - +proc~create + nurbs_curve%create - + -program~example_nurbs_curve->proc~create~3 +program~example_nurbs_curve->proc~create - + -proc~export_xc~3 - +proc~export_xc + nurbs_curve%export_Xc - + -program~example_nurbs_curve->proc~export_xc~3 +program~example_nurbs_curve->proc~export_xc - + -proc~export_xg~3 - +proc~export_xg + nurbs_curve%export_Xg - + -program~example_nurbs_curve->proc~export_xg~3 +program~example_nurbs_curve->proc~export_xg - + -proc~finalize~3 - +proc~finalize + nurbs_curve%finalize - + -program~example_nurbs_curve->proc~finalize~3 +program~example_nurbs_curve->proc~finalize - + -proc~generate_xc~3 - +proc~generate_xc + generate_Xc - + -program~example_nurbs_curve->proc~generate_xc~3 +program~example_nurbs_curve->proc~generate_xc - + -proc~show~3 - +proc~show + nurbs_curve%show - + -program~example_nurbs_curve->proc~show~3 +program~example_nurbs_curve->proc~show - + -proc~set1a - - -nurbs_curve%set1a +proc~set1 + + +nurbs_curve%set1 - + -none~set~3->proc~set1a - - +none~set->proc~set1 + + - + -proc~set1~3 - - -nurbs_curve%set1 +proc~set1a + + +nurbs_curve%set1a - + -none~set~3->proc~set1~3 - - +none~set->proc~set1a + + - + -proc~set2~3 - +proc~set2 + nurbs_curve%set2 - + -none~set~3->proc~set2~3 +none~set->proc~set2 - + -proc~set3~3 - +proc~set3 + nurbs_curve%set3 - + -none~set~3->proc~set3~3 +none~set->proc~set3 - + -proc~set4~3 - +proc~set4 + nurbs_curve%set4 - + -none~set~3->proc~set4~3 +none~set->proc~set4 - + -interface~compute_xg~3 - +interface~compute_xg + compute_Xg - + -proc~create~3->interface~compute_xg~3 +proc~create->interface~compute_xg - + -proc~is_rational~3 - +proc~is_rational + nurbs_curve%is_rational - + -proc~create~3->proc~is_rational~3 +proc~create->proc~is_rational - + -proc~cmp_elem_xc_vis~3 - +proc~cmp_elem_xc_vis + nurbs_curve%cmp_elem_Xc_vis - + -proc~export_xc~3->proc~cmp_elem_xc_vis~3 +proc~export_xc->proc~cmp_elem_xc_vis - + -proc~cmp_elem_xg_vis~3 - +proc~cmp_elem_xg_vis + nurbs_curve%cmp_elem_Xg_vis - + -proc~export_xg~3->proc~cmp_elem_xg_vis~3 +proc~export_xg->proc~cmp_elem_xg_vis @@ -663,38 +663,38 @@

                          Calls

                          - + -proc~cmp_elem_xc_vis~3->interface~elemconn_c0 +proc~cmp_elem_xc_vis->interface~elemconn_c0 - + -proc~cmp_elem_xg_vis~3->interface~elemconn_c0 +proc~cmp_elem_xg_vis->interface~elemconn_c0 - + -proc~cmp_degree~3 - +proc~cmp_degree + nurbs_curve%cmp_degree - + -proc~set1a->proc~cmp_degree~3 - - +proc~set1->proc~cmp_degree + + - + -proc~set1~3->proc~cmp_degree~3 - - +proc~set1a->proc~cmp_degree + + @@ -705,15 +705,15 @@

                          Calls

                          - + -proc~set2~3->proc~compute_knot_vector +proc~set2->proc~compute_knot_vector - + -proc~set3~3->proc~cmp_degree~3 +proc~set3->proc~cmp_degree @@ -762,18 +762,18 @@

                          Calls

                          - + -proc~get_multiplicity~3 - +proc~get_multiplicity + nurbs_curve%get_multiplicity - + -proc~cmp_degree~3->proc~get_multiplicity~3 +proc~cmp_degree->proc~get_multiplicity @@ -801,9 +801,9 @@

                          Calls

                          - + -proc~get_multiplicity~3->interface~compute_multiplicity +proc~get_multiplicity->interface~compute_multiplicity @@ -940,7 +940,7 @@

                          Variables

                          @@ -1195,7 +1195,7 @@

                          Source Code

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/program/example_nurbs_surface.html b/program/example_nurbs_surface.html index 9420a0d56..f7534fb7e 100644 --- a/program/example_nurbs_surface.html +++ b/program/example_nurbs_surface.html @@ -115,9 +115,9 @@

                          Variables

                          - Wc - Xc - nurbs + Wc + Xc + nurbs
                          @@ -138,7 +138,7 @@

                          Functions

                          @@ -414,183 +414,183 @@

                          Calls

                          example_nurbs_surface - + -none~set~2 - +none~set~3 + nurbs_surface%set - + -program~example_nurbs_surface->none~set~2 +program~example_nurbs_surface->none~set~3 - + -proc~create~2 - +proc~create~3 + nurbs_surface%create - + -program~example_nurbs_surface->proc~create~2 +program~example_nurbs_surface->proc~create~3 - + -proc~export_xc~2 - +proc~export_xc~3 + nurbs_surface%export_Xc - + -program~example_nurbs_surface->proc~export_xc~2 +program~example_nurbs_surface->proc~export_xc~3 - + -proc~export_xg~2 - +proc~export_xg~3 + nurbs_surface%export_Xg - + -program~example_nurbs_surface->proc~export_xg~2 +program~example_nurbs_surface->proc~export_xg~3 - + -proc~finalize~2 - +proc~finalize~3 + nurbs_surface%finalize - + -program~example_nurbs_surface->proc~finalize~2 +program~example_nurbs_surface->proc~finalize~3 - + -proc~generate_xc~4 - +proc~generate_xc~3 + generate_Xc - + -program~example_nurbs_surface->proc~generate_xc~4 +program~example_nurbs_surface->proc~generate_xc~3 - + -proc~show~2 - +proc~show~3 + nurbs_surface%show - + -program~example_nurbs_surface->proc~show~2 +program~example_nurbs_surface->proc~show~3 - + -proc~set1~2 - +proc~set1~3 + nurbs_surface%set1 - + -none~set~2->proc~set1~2 +none~set~3->proc~set1~3 - + -proc~set2~2 - +proc~set2~3 + nurbs_surface%set2 - + -none~set~2->proc~set2~2 +none~set~3->proc~set2~3 - + -proc~set3~2 - +proc~set3~3 + nurbs_surface%set3 - + -none~set~2->proc~set3~2 +none~set~3->proc~set3~3 - + -proc~set4~2 - +proc~set4~3 + nurbs_surface%set4 - + -none~set~2->proc~set4~2 +none~set~3->proc~set4~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 @@ -603,54 +603,54 @@

                          Calls

                          - + -proc~create~2->interface~ndgrid +proc~create~3->interface~ndgrid - + -proc~is_rational~2 - +proc~is_rational~3 + nurbs_surface%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_surface%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_surface%cmp_elem_Xg_vis - + -proc~export_xg~2->proc~cmp_elem_xg_vis~2 +proc~export_xg~3->proc~cmp_elem_xg_vis~3 @@ -693,51 +693,51 @@

                          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_surface%cmp_degree - + -proc~set1~2->proc~cmp_degree~2 +proc~set1~3->proc~cmp_degree~3 - + -proc~cmp_nc~2 - +proc~cmp_nc~3 + nurbs_surface%cmp_nc - + -proc~set1~2->proc~cmp_nc~2 +proc~set1~3->proc~cmp_nc~3 - + -proc~set2~2->proc~cmp_nc~2 +proc~set2~3->proc~cmp_nc~3 @@ -750,15 +750,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 @@ -807,18 +807,18 @@

                          Calls

                          - + -proc~get_multiplicity~2 - +proc~get_multiplicity~3 + nurbs_surface%get_multiplicity - + -proc~cmp_degree~2->proc~get_multiplicity~2 +proc~cmp_degree~3->proc~get_multiplicity~3 @@ -831,9 +831,9 @@

                          Calls

                          - + -proc~cmp_nc~2->interface~compute_multiplicity +proc~cmp_nc~3->interface~compute_multiplicity @@ -882,9 +882,9 @@

                          Calls

                          - + -proc~get_multiplicity~2->interface~compute_multiplicity +proc~get_multiplicity~3->interface~compute_multiplicity @@ -991,7 +991,7 @@

                          Variables

                          @@ -273,7 +273,7 @@

                          Components

                          @@ -290,7 +290,7 @@

                          Components

                          @@ -307,7 +307,7 @@

                          Components

                          @@ -324,7 +324,7 @@

                          Components

                          @@ -341,7 +341,7 @@

                          Components

                          @@ -358,7 +358,7 @@

                          Components

                          @@ -375,7 +375,7 @@

                          Components

                          @@ -392,7 +392,7 @@

                          Components

                          @@ -409,7 +409,7 @@

                          Components

                          @@ -426,7 +426,7 @@

                          Components

                          @@ -454,7 +454,7 @@

                          Type-Bound Procedures

                          - +

                          procedure, public :: ansatz @@ -470,7 +470,7 @@

                          • - private pure subroutine ansatz(this, ie, ig, Tgc, dTgc_dXg, dL) + private pure subroutine ansatz(this, ie, ig, Tgc, dTgc_dXg, dL)

                            Author
                            Seyed Ali Ghasemi
                            @@ -593,10 +593,10 @@

                            Arguments

                            - +

                            generic, public :: - basis => basis_vector, basis_scalar + basis => basis_vector, basis_scalar

                            @@ -609,7 +609,7 @@

                            • - private pure subroutine basis_vector(this, res, Xt, Tgc) + private pure subroutine basis_vector(this, res, Xt, Tgc)

                              Author
                              Seyed Ali Ghasemi
                              @@ -697,7 +697,7 @@

                              Arguments

                            • - private pure subroutine basis_scalar(this, Xt, Tgc) + private pure subroutine basis_scalar(this, Xt, Tgc)

                              Author
                              Seyed Ali Ghasemi
                              @@ -775,7 +775,7 @@

                              Arguments

                              - +

                              procedure, public :: cmp_Xg @@ -791,7 +791,7 @@

                              • - private pure function cmp_Xg(this, Xt) result(Xg) + private pure function cmp_Xg(this, Xt) result(Xg)

                                Author
                                Seyed Ali Ghasemi
                                @@ -859,7 +859,7 @@

                                - +

                                procedure, public :: cmp_degree @@ -875,7 +875,7 @@

                                • - private pure subroutine cmp_degree(this) + private pure subroutine cmp_degree(this)

                                  Author
                                  Seyed Ali Ghasemi
                                  @@ -923,7 +923,7 @@

                                  Arguments

                                  - +

                                  procedure, public :: cmp_elem @@ -939,7 +939,7 @@

                                  • - private pure function cmp_elem(this) result(elemConn) + private pure function cmp_elem(this) result(elemConn)

                                    Author
                                    Seyed Ali Ghasemi
                                    @@ -992,7 +992,7 @@

                                    - +

                                    procedure, public :: cmp_elem_Xc_vis @@ -1008,7 +1008,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
                                      @@ -1076,7 +1076,7 @@

                                      - +

                                      procedure, public :: cmp_elem_Xg_vis @@ -1092,7 +1092,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
                                        @@ -1239,7 +1239,7 @@

                                        Arguments

                                        - +

                                        procedure, public :: cmp_nc @@ -1255,7 +1255,7 @@

                                        • - private pure subroutine cmp_nc(this) + private pure subroutine cmp_nc(this)

                                          Author
                                          Seyed Ali Ghasemi
                                          @@ -1303,7 +1303,7 @@

                                          Arguments

                                          - +

                                          procedure, public :: create @@ -1319,7 +1319,7 @@

                                          • - private pure subroutine create(this, res, Xt) + private pure subroutine create(this, res, Xt)

                                            Author
                                            Seyed Ali Ghasemi
                                            @@ -1397,10 +1397,10 @@

                                            Arguments

                                            - +

                                            generic, public :: - derivative => derivative_vector, derivative_scalar + derivative => derivative_vector, derivative_scalar

                                            @@ -1413,7 +1413,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
                                              @@ -1516,7 +1516,7 @@

                                              Arguments

                                            • - private pure subroutine derivative_scalar(this, Xt, dTgc, Tgc, elem) + private pure subroutine derivative_scalar(this, Xt, dTgc, Tgc, elem)

                                              Author
                                              Seyed Ali Ghasemi
                                              @@ -1624,10 +1624,10 @@

                                              Arguments

                                              - +

                                              generic, public :: - derivative2 => derivative2_vector, derivative2_scalar + derivative2 => derivative2_vector, derivative2_scalar

                                              @@ -1640,7 +1640,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
                                                @@ -1758,7 +1758,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
                                                @@ -1866,7 +1866,7 @@

                                                Arguments

                                                - +

                                                procedure, public :: elevate_degree @@ -1882,7 +1882,7 @@

                                                • - private pure subroutine elevate_degree(this, t) + private pure subroutine elevate_degree(this, 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) result(Xt) + private pure function get_Xt(this) result(Xt)

                                                                Author
                                                                Seyed Ali Ghasemi
                                                                @@ -2788,7 +2788,7 @@

                                                                - +

                                                                procedure, public :: get_continuity @@ -2804,7 +2804,7 @@

                                                                • - private pure function get_continuity(this) result(c) + private pure function get_continuity(this) result(c)

                                                                  Author
                                                                  Seyed Ali Ghasemi
                                                                  @@ -2857,7 +2857,7 @@

                                                                  - +

                                                                  procedure, public :: get_degree @@ -2926,7 +2926,7 @@

                                                                  - +

                                                                  procedure, public :: get_elem @@ -2942,7 +2942,7 @@

                                                                  • - private pure function get_elem(this) result(elemConn) + private pure function get_elem(this) result(elemConn)

                                                                    Author
                                                                    Seyed Ali Ghasemi
                                                                    @@ -2995,7 +2995,7 @@

                                                                    - +

                                                                    procedure, public :: get_elem_Xc_vis @@ -3011,7 +3011,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
                                                                      @@ -3064,7 +3064,7 @@

                                                                      - +

                                                                      procedure, public :: get_elem_Xg_vis @@ -3080,7 +3080,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
                                                                        @@ -3133,10 +3133,10 @@

                                                                        - +

                                                                        generic, public :: - get_knot => get_knoti, get_knot_all + get_knot => get_knoti, get_knot_all

                                                                        @@ -3149,7 +3149,7 @@

                                                                        • - private pure function get_knoti(this, i) result(knot) + private pure function get_knoti(this, i) result(knot)

                                                                          Author
                                                                          Seyed Ali Ghasemi
                                                                          @@ -3212,7 +3212,7 @@

                                                                        • - private pure function get_knot_all(this) result(knot) + private pure function get_knot_all(this) result(knot)

                                                                          Author
                                                                          Seyed Ali Ghasemi
                                                                          @@ -3265,7 +3265,7 @@

                                                                          - +

                                                                          procedure, public :: get_multiplicity @@ -3281,7 +3281,7 @@

                                                                          • - private pure function get_multiplicity(this) result(m) + private pure function get_multiplicity(this) result(m)

                                                                            Author
                                                                            Seyed Ali Ghasemi
                                                                            @@ -3334,7 +3334,7 @@

                                                                            - +

                                                                            procedure, public :: get_nc @@ -3403,7 +3403,7 @@

                                                                            - +

                                                                            procedure, public :: get_ng @@ -3419,7 +3419,7 @@

                          @@ -280,7 +280,7 @@

                          Components

                          @@ -297,7 +297,7 @@

                          Components

                          @@ -314,7 +314,7 @@

                          Components

                          @@ -365,7 +365,7 @@

                          Components

                          @@ -382,7 +382,7 @@

                          Components

                          @@ -399,7 +399,7 @@

                          Components

                          @@ -416,7 +416,7 @@

                          Components

                          @@ -433,7 +433,7 @@

                          Components

                          @@ -450,7 +450,7 @@

                          Components

                          @@ -467,7 +467,7 @@

                          Components

                          @@ -484,7 +484,7 @@

                          Components

                          @@ -512,7 +512,7 @@

                          Type-Bound Procedures

                          - +

                          procedure, public :: ansatz @@ -528,7 +528,7 @@

                          • - private pure subroutine ansatz(this, ie, ig, Tgc, dTgc_dXg, dA) + private pure subroutine ansatz(this, ie, ig, Tgc, dTgc_dXg, dA)

                            Author
                            Seyed Ali Ghasemi
                            @@ -651,10 +651,10 @@

                            Arguments

                            - +

                            generic, public :: - basis => basis_vector, basis_scalar + basis => basis_vector, basis_scalar

                            @@ -667,7 +667,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
                              @@ -785,7 +785,7 @@

                              Arguments

                            • - private pure subroutine basis_scalar(this, Xt, Tgc) + private pure subroutine basis_scalar(this, Xt, Tgc)

                              Author
                              Seyed Ali Ghasemi
                              @@ -863,7 +863,7 @@

                              Arguments

                              - +

                              procedure, public :: cmp_Xg @@ -879,7 +879,7 @@

                              • - private pure function cmp_Xg(this, Xt) result(Xg) + private pure function cmp_Xg(this, Xt) result(Xg)

                                Author
                                Seyed Ali Ghasemi
                                @@ -1026,7 +1026,7 @@

                                Arguments

                                - +

                                procedure, public :: cmp_degree @@ -1042,7 +1042,7 @@

                                • - private pure subroutine cmp_degree(this, dir) + private pure subroutine cmp_degree(this, dir)

                                  Author
                                  Seyed Ali Ghasemi
                                  @@ -1105,7 +1105,7 @@

                                  Arguments

                                  - +

                                  procedure, public :: cmp_elem @@ -1121,7 +1121,7 @@

                                  • - private pure function cmp_elem(this) result(elemConn) + private pure function cmp_elem(this) result(elemConn)

                                    Author
                                    Seyed Ali Ghasemi
                                    @@ -1174,7 +1174,7 @@

                                    - +

                                    procedure, public :: cmp_elem_Xc_vis @@ -1190,7 +1190,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
                                      @@ -1258,7 +1258,7 @@

                                      - +

                                      procedure, public :: cmp_elem_Xg_vis @@ -1274,7 +1274,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
                                        @@ -1342,7 +1342,7 @@

                                        - +

                                        procedure, public :: cmp_nc @@ -1358,7 +1358,7 @@

                                        • - private pure subroutine cmp_nc(this, dir) + private pure subroutine cmp_nc(this, dir)

                                          Author
                                          Seyed Ali Ghasemi
                                          @@ -1421,7 +1421,7 @@

                                          Arguments

                                          - +

                                          procedure, public :: create @@ -1437,7 +1437,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
                                            @@ -1560,10 +1560,10 @@

                                            Arguments

                                            - +

                                            generic, public :: - derivative => derivative_vector, derivative_scalar + derivative => derivative_vector, derivative_scalar

                                            @@ -1576,7 +1576,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
                                              @@ -1709,7 +1709,7 @@

                                              Arguments

                                            • - private pure subroutine derivative_scalar(this, Xt, dTgc, Tgc, elem) + private pure subroutine derivative_scalar(this, Xt, dTgc, Tgc, elem)

                                              Author
                                              Seyed Ali Ghasemi
                                              @@ -1817,10 +1817,10 @@

                                              Arguments

                                              - +

                                              generic, public :: - derivative2 => derivative2_vector, derivative2_scalar + derivative2 => derivative2_vector, derivative2_scalar

                                              @@ -1833,7 +1833,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
                                                @@ -1981,7 +1981,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
                                                @@ -2089,7 +2089,7 @@

                                                Arguments

                                                - +

                                                procedure, public :: elevate_degree @@ -2105,7 +2105,7 @@

                                                • - private pure subroutine elevate_degree(this, dir, t) + private pure subroutine elevate_degree(this, dir, t)

                                                  Author
                                                  Seyed Ali Ghasemi
                                                  @@ -2183,7 +2183,7 @@

                                                  Arguments

                                                  - +

                                                  procedure, public :: export_Xc @@ -2199,7 +2199,7 @@

                                                  • - private impure subroutine export_Xc(this, filename) + private impure subroutine export_Xc(this, filename)

                                                    Author
                                                    Seyed Ali Ghasemi
                                                    @@ -2262,7 +2262,7 @@

                                                    Arguments

                                                    - +

                                                    procedure, public :: export_Xg @@ -2278,7 +2278,7 @@

                                                    • - private impure subroutine export_Xg(this, filename) + private impure subroutine export_Xg(this, filename)

                                                      Author
                                                      Seyed Ali Ghasemi
                                                      @@ -2341,7 +2341,7 @@

                                                      Arguments

                                                      - +

                                                      procedure, public :: finalize @@ -2357,7 +2357,7 @@

                                                      • - private pure subroutine finalize(this) + private pure subroutine finalize(this)

                                                        Author
                                                        Seyed Ali Ghasemi
                                                        @@ -2405,10 +2405,10 @@

                                                        Arguments

                                                        - +

                                                        generic, public :: - get_Wc => get_Wc_all, get_Wci + get_Wc => get_Wc_all, get_Wci

                                                        @@ -2421,7 +2421,7 @@

                                                        • - private pure function get_Wc_all(this) result(Wc) + private pure function get_Wc_all(this) result(Wc)

                                                          Author
                                                          Seyed Ali Ghasemi
                                                          @@ -2469,7 +2469,7 @@

                                                        • - private pure function get_Wci(this, n) result(Wc) + private pure function get_Wci(this, n) result(Wc)

                                                          Author
                                                          Seyed Ali Ghasemi
                                                          @@ -2537,10 +2537,10 @@

                                                          - +

                                                          generic, public :: - get_Xc => get_Xc_all, get_Xci, get_Xcid + get_Xc => get_Xc_all, get_Xci, get_Xcid

                                                          @@ -2553,7 +2553,7 @@

                                                          • - private pure function get_Xc_all(this) result(Xc) + private pure function get_Xc_all(this) result(Xc)

                                                            Author
                                                            Seyed Ali Ghasemi
                                                            @@ -2601,7 +2601,7 @@

                                                          • - private pure function get_Xci(this, n) result(Xc) + private pure function get_Xci(this, n) result(Xc)

                                                            Author
                                                            Seyed Ali Ghasemi
                                                            @@ -2664,7 +2664,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
                                                            @@ -2747,10 +2747,10 @@

                                                            - +

                                                            generic, public :: - get_Xg => get_Xg_all, get_Xgi, get_Xgid + get_Xg => get_Xg_all, get_Xgi, get_Xgid

                                                            @@ -2763,7 +2763,7 @@

                                                            • - private pure function get_Xg_all(this) result(Xg) + private pure function get_Xg_all(this) result(Xg)

                                                              Author
                                                              Seyed Ali Ghasemi
                                                              @@ -2811,7 +2811,7 @@

                                                            • - private pure function get_Xgi(this, n) result(Xg) + private pure function get_Xgi(this, n) result(Xg)

                                                              Author
                                                              Seyed Ali Ghasemi
                                                              @@ -2874,7 +2874,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
                                                              @@ -2957,7 +2957,7 @@

                                                              - +

                                                              procedure, public :: get_Xt @@ -2973,7 +2973,7 @@

                                                              • - private pure function get_Xt(this, dir) result(Xt) + private pure function get_Xt(this, dir) result(Xt)

                                                                Author
                                                                Seyed Ali Ghasemi
                                                                @@ -3041,7 +3041,7 @@

                                                                - +

                                                                procedure, public :: get_continuity @@ -3057,7 +3057,7 @@

                                                                • - private pure function get_continuity(this, dir) result(c) + private pure function get_continuity(this, dir) result(c)

                                                                  Author
                                                                  Seyed Ali Ghasemi
                                                                  @@ -3125,7 +3125,7 @@

                                                                  - +

                                                                  generic, public :: get_degree => get_degree_all, get_degree_dir @@ -3257,7 +3257,7 @@

                                                                  - +

                                                                  procedure, public :: get_elem @@ -3273,7 +3273,7 @@

                                                                  • - private pure function get_elem(this) result(elemConn) + private pure function get_elem(this) result(elemConn)

                                                                    Author
                                                                    Seyed Ali Ghasemi
                                                                    @@ -3326,7 +3326,7 @@

                                                                    - +

                                                                    procedure, public :: get_elem_Xc_vis @@ -3342,7 +3342,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
                                                                      @@ -3395,7 +3395,7 @@

                                                                      - +

                                                                      procedure, public :: get_elem_Xg_vis @@ -3411,7 +3411,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
                                                                        @@ -3464,10 +3464,10 @@

                                                                        - +

                                                                        generic, public :: - get_knot => get_knoti, get_knot_all + get_knot => get_knoti, get_knot_all

                                                                        @@ -3480,7 +3480,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
                                                                          @@ -3558,7 +3558,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
                                                                          @@ -3626,7 +3626,7 @@

                                                                          - +

                                                                          procedure, public :: get_multiplicity @@ -3642,7 +3642,7 @@

                          @@ -287,7 +287,7 @@

                          Components

                          @@ -304,7 +304,7 @@

                          Components

                          @@ -321,7 +321,7 @@

                          Components

                          @@ -389,7 +389,7 @@

                          Components

                          @@ -406,7 +406,7 @@

                          Components

                          @@ -423,7 +423,7 @@

                          Components

                          @@ -440,7 +440,7 @@

                          Components

                          @@ -457,7 +457,7 @@

                          Components

                          @@ -474,7 +474,7 @@

                          Components

                          @@ -491,7 +491,7 @@

                          Components

                          @@ -508,7 +508,7 @@

                          Components

                          @@ -525,7 +525,7 @@

                          Components

                          @@ -553,7 +553,7 @@

                          Type-Bound Procedures

                          - +

                          procedure, public :: ansatz @@ -569,7 +569,7 @@

                          • - private pure subroutine ansatz(this, ie, ig, Tgc, dTgc_dXg, dV) + private pure subroutine ansatz(this, ie, ig, Tgc, dTgc_dXg, dV)

                            Author
                            Seyed Ali Ghasemi
                            @@ -692,10 +692,10 @@

                            Arguments

                            - +

                            generic, public :: - basis => basis_vector, basis_scalar + basis => basis_vector, basis_scalar

                            @@ -708,7 +708,7 @@

                            • - private pure subroutine basis_vector(this, res1, res2, res3, Xt1, Xt2, Xt3, Tgc) + private pure subroutine basis_vector(this, res1, res2, res3, Xt1, Xt2, Xt3, Tgc)

                              Author
                              Seyed Ali Ghasemi
                              @@ -856,7 +856,7 @@

                              Arguments

                            • - private pure subroutine basis_scalar(this, Xt, Tgc) + private pure subroutine basis_scalar(this, Xt, Tgc)

                              Author
                              Seyed Ali Ghasemi
                              @@ -934,7 +934,7 @@

                              Arguments

                              - +

                              procedure, public :: cmp_Xg @@ -950,7 +950,7 @@

                              • - private pure function cmp_Xg(this, Xt) result(Xg) + private pure function cmp_Xg(this, Xt) result(Xg)

                                Author
                                Seyed Ali Ghasemi
                                @@ -1018,7 +1018,7 @@

                                - +

                                procedure, public :: cmp_degree @@ -1034,7 +1034,7 @@

                                • - private pure subroutine cmp_degree(this, dir) + private pure subroutine cmp_degree(this, dir)

                                  Author
                                  Seyed Ali Ghasemi
                                  @@ -1181,7 +1181,7 @@

                                  - +

                                  procedure, public :: cmp_elem @@ -1197,7 +1197,7 @@

                                  • - private pure function cmp_elem(this) result(elemConn) + private pure function cmp_elem(this) result(elemConn)

                                    Author
                                    Seyed Ali Ghasemi
                                    @@ -1547,7 +1547,7 @@

                                    - +

                                    procedure, public :: cmp_elem_Xc_vis @@ -1563,7 +1563,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
                                      @@ -1631,7 +1631,7 @@

                                      - +

                                      procedure, public :: cmp_elem_Xg_vis @@ -1647,7 +1647,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
                                        @@ -1715,7 +1715,7 @@

                                        - +

                                        procedure, public :: cmp_nc @@ -1731,7 +1731,7 @@

                                        • - private pure subroutine cmp_nc(this, dir) + private pure subroutine cmp_nc(this, dir)

                                          Author
                                          Seyed Ali Ghasemi
                                          @@ -1873,7 +1873,7 @@

                                          Arguments

                                          - +

                                          procedure, public :: create @@ -1889,7 +1889,7 @@

                                          • - private pure subroutine create(this, res1, res2, res3, Xt1, Xt2, Xt3, Xt) + private pure subroutine create(this, res1, res2, res3, Xt1, Xt2, Xt3, Xt)

                                            Author
                                            Seyed Ali Ghasemi
                                            @@ -2042,10 +2042,10 @@

                                            Arguments

                                            - +

                                            generic, public :: - derivative => derivative_vector, derivative_scalar + derivative => derivative_vector, derivative_scalar

                                            @@ -2058,7 +2058,7 @@

                                            • - private pure subroutine derivative_vector(this, res1, res2, res3, Xt1, Xt2, Xt3, dTgc, Tgc) + private pure subroutine derivative_vector(this, res1, res2, res3, Xt1, Xt2, Xt3, dTgc, Tgc)

                                              Author
                                              Seyed Ali Ghasemi
                                              @@ -2221,7 +2221,7 @@

                                              Arguments

                                            • - private pure subroutine derivative_scalar(this, Xt, dTgc, Tgc, elem) + private pure subroutine derivative_scalar(this, Xt, dTgc, Tgc, elem)

                                              Author
                                              Seyed Ali Ghasemi
                                              @@ -2329,10 +2329,10 @@

                                              Arguments

                                              - +

                                              generic, public :: - derivative2 => derivative2_vector, derivative2_scalar + derivative2 => derivative2_vector, derivative2_scalar

                                              @@ -2345,7 +2345,7 @@

                                              • - private pure subroutine derivative2_vector(this, res1, res2, res3, Xt1, Xt2, Xt3, d2Tgc, dTgc, Tgc) + private pure subroutine derivative2_vector(this, res1, res2, res3, Xt1, Xt2, Xt3, d2Tgc, dTgc, Tgc)

                                                Author
                                                Seyed Ali Ghasemi
                                                @@ -2523,7 +2523,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
                                                @@ -2631,7 +2631,7 @@

                                                Arguments

                                                - +

                                                procedure, public :: elevate_degree @@ -2647,7 +2647,7 @@

                                                • - private pure subroutine elevate_degree(this, dir, t) + private pure subroutine elevate_degree(this, dir, t)

                                                  Author
                                                  Seyed Ali Ghasemi
                                                  @@ -2725,7 +2725,7 @@

                                                  Arguments

                                                  - +

                                                  procedure, public :: export_Xc @@ -2741,7 +2741,7 @@

                                                  • - private impure subroutine export_Xc(this, filename) + private impure subroutine export_Xc(this, filename)

                                                    Author
                                                    Seyed Ali Ghasemi
                                                    @@ -2804,7 +2804,7 @@

                                                    Arguments

                                                    - +

                                                    procedure, public :: export_Xg @@ -2820,7 +2820,7 @@

                                                    • - private impure subroutine export_Xg(this, filename) + private impure subroutine export_Xg(this, filename)

                                                      Author
                                                      Seyed Ali Ghasemi
                                                      @@ -2883,7 +2883,7 @@

                                                      Arguments

                                                      - +

                                                      procedure, public :: finalize @@ -2899,7 +2899,7 @@

                                                      • - private pure subroutine finalize(this) + private pure subroutine finalize(this)

                                                        Author
                                                        Seyed Ali Ghasemi
                                                        @@ -2947,10 +2947,10 @@

                                                        Arguments

                                                        - +

                                                        generic, public :: - get_Wc => get_Wc_all, get_Wci + get_Wc => get_Wc_all, get_Wci

                                                        @@ -2963,7 +2963,7 @@

                                                        • - private pure function get_Wc_all(this) result(Wc) + private pure function get_Wc_all(this) result(Wc)

                                                          Author
                                                          Seyed Ali Ghasemi
                                                          @@ -3011,7 +3011,7 @@

                                                        • - private pure function get_Wci(this, n) result(Wc) + private pure function get_Wci(this, n) result(Wc)

                                                          Author
                                                          Seyed Ali Ghasemi
                                                          @@ -3079,10 +3079,10 @@

                                                          - +

                                                          generic, public :: - get_Xc => get_Xc_all, get_Xci, get_Xcid + get_Xc => get_Xc_all, get_Xci, get_Xcid

                                                          @@ -3095,7 +3095,7 @@

                                                          • - private pure function get_Xc_all(this) result(Xc) + private pure function get_Xc_all(this) result(Xc)

                                                            Author
                                                            Seyed Ali Ghasemi
                                                            @@ -3143,7 +3143,7 @@

                                                          • - private pure function get_Xci(this, n) result(Xc) + private pure function get_Xci(this, n) result(Xc)

                                                            Author
                                                            Seyed Ali Ghasemi
                                                            @@ -3206,7 +3206,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
                                                            @@ -3289,10 +3289,10 @@

                                                            - +

                                                            generic, public :: - get_Xg => get_Xg_all, get_Xgi, get_Xgid + get_Xg => get_Xg_all, get_Xgi, get_Xgid

                                                            @@ -3305,7 +3305,7 @@

                                                            • - private pure function get_Xg_all(this) result(Xg) + private pure function get_Xg_all(this) result(Xg)

                                                              Author
                                                              Seyed Ali Ghasemi
                                                              @@ -3353,7 +3353,7 @@

                                                            • - private pure function get_Xgi(this, n) result(Xg) + private pure function get_Xgi(this, n) result(Xg)

                                                              Author
                                                              Seyed Ali Ghasemi
                                                              @@ -3416,7 +3416,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
                                                              @@ -3499,7 +3499,7 @@

                                                              - +

                                                              procedure, public :: get_Xt @@ -3515,7 +3515,7 @@

                                                              • - private pure function get_Xt(this, dir) result(Xt) + private pure function get_Xt(this, dir) result(Xt)

                                                                Author
                                                                Seyed Ali Ghasemi
                                                                @@ -3583,7 +3583,7 @@

                                                                - +

                                                                procedure, public :: get_continuity @@ -3599,7 +3599,7 @@

                                                                • - private pure function get_continuity(this, dir) result(c) + private pure function get_continuity(this, dir) result(c)

                                                                  Author
                                                                  Seyed Ali Ghasemi
                                                                  @@ -3667,7 +3667,7 @@

                                                                  - +

                                                                  generic, public :: get_degree => get_degree_all, get_degree_dir @@ -3799,7 +3799,7 @@

                                                                  - +

                                                                  procedure, public :: get_elem @@ -3815,7 +3815,7 @@

                                                                  • - private pure function get_elem(this) result(elemConn) + private pure function get_elem(this) result(elemConn)

                                                                    Author
                                                                    Seyed Ali Ghasemi
                                                                    @@ -3868,7 +3868,7 @@

                                                                    - +

                                                                    procedure, public :: get_elem_Xc_vis @@ -3884,7 +3884,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
                                                                      @@ -3937,7 +3937,7 @@

                                                                      - +

                                                                      procedure, public :: get_elem_Xg_vis @@ -3953,7 +3953,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
                                                                        @@ -4006,10 +4006,10 @@

                                                                        - +

                                                                        generic, public :: - get_knot => get_knoti, get_knot_all + get_knot => get_knoti, get_knot_all

                                                                        @@ -4022,7 +4022,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
                                                                          @@ -4100,7 +4100,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
                                                                          @@ -4168,7 +4168,7 @@

                                                                          - +

                                                                          procedure, public :: get_multiplicity @@ -4184,7 +4184,7 @@

                                                                          • - private pure function get_multiplicity(this, dir) result(m) + private pure function get_multiplicity(this, dir) result(m)

                                                                            Author
                                                                            Seyed Ali Ghasemi
                                                                            @@ -4252,7 +4252,7 @@

                                                                            - +

                                                                            generic, public :: get_nc => get_nc_all, get_nc_dir @@ -4384,7 +4384,7 @@

                                                                            - +

                                                                            procedure, public :: get_ng @@ -4400,7 +4400,7 @@

                                                                            • - private pure function get_ng(this) result(ng) + private pure function get_ng(this) result(ng)

                                                                              Author
                                                                              Seyed Ali Ghasemi
                                                                              @@ -4453,7 +4453,7 @@

                                                                              - +

                                                                              procedure, public :: insert_knots @@ -4469,7 +4469,7 @@

                                                                              • - private pure subroutine insert_knots(this, dir, Xth, r) + private pure subroutine insert_knots(this, dir, Xth, r)

                                                                                Author
                                                                                Seyed Ali Ghasemi
                                                                                @@ -4562,7 +4562,7 @@

                                                                                Arguments

                                                                                - +

                                                                                procedure, public :: is_rational @@ -4578,7 +4578,7 @@

                                                                                • - private pure function is_rational(this) result(r) + private pure function is_rational(this) result(r)

                                                                                  Author
                                                                                  Seyed Ali Ghasemi
                                                                                  @@ -4631,7 +4631,7 @@

                                                                                  - +

                                                                                  procedure, public :: modify_Wc @@ -4647,7 +4647,7 @@

                                                                                  • - private pure subroutine modify_Wc(this, W, num) + private pure subroutine modify_Wc(this, W, num)

                                                                                    Author
                                                                                    Seyed Ali Ghasemi
                                                                                    @@ -4725,7 +4725,7 @@

                                                                                    Arguments

                                                                                    - +

                                                                                    procedure, public :: modify_Xc @@ -4741,7 +4741,7 @@

                                                                                    • - private pure subroutine modify_Xc(this, X, num, dir) + private pure subroutine modify_Xc(this, X, num, dir)

                                                                                      Author
                                                                                      Seyed Ali Ghasemi
                                                                                      @@ -4834,7 +4834,7 @@

                                                                                      Arguments

                                                                                      - +

                                                                                      procedure, public :: nearest_point @@ -4850,7 +4850,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
                                                                                        @@ -4958,7 +4958,7 @@

                                                                                        Arguments

                                                                                        - +

                                                                                        procedure, public :: nearest_point2 @@ -4974,7 +4974,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
                                                                                          @@ -5191,7 +5191,7 @@

                                                                                          Arguments

                                                                                          - +

                                                                                          procedure, public :: remove_knots @@ -5207,7 +5207,7 @@

                                                                                          • - private pure subroutine remove_knots(this, dir, Xth, r) + private pure subroutine remove_knots(this, dir, Xth, r)

                                                                                            Author
                                                                                            Seyed Ali Ghasemi
                                                                                            @@ -5300,7 +5300,7 @@

                                                                                            Arguments

                                                                                            - +

                                                                                            procedure, public :: rotate_Xc @@ -5316,7 +5316,7 @@

                                                                                            • - private pure subroutine rotate_Xc(this, alpha, beta, theta) + private pure subroutine rotate_Xc(this, alpha, beta, theta)

                                                                                              Author
                                                                                              Seyed Ali Ghasemi
                                                                                              @@ -5409,7 +5409,7 @@

                                                                                              Arguments

                                                                                              - +

                                                                                              procedure, public :: rotate_Xg @@ -5425,7 +5425,7 @@

                                                                                              • - private pure subroutine rotate_Xg(this, alpha, beta, theta) + private pure subroutine rotate_Xg(this, alpha, beta, theta)

                                                                                                Author
                                                                                                Seyed Ali Ghasemi
                                                                                                @@ -5518,10 +5518,10 @@

                                                                                                Arguments

                                                                                                - +

                                                                                                generic, public :: - set => set1, set2, set3, set4 + set => set1, set2, set3, set4

                                                                                                @@ -5534,7 +5534,7 @@

                                                                                                • - private pure subroutine set1(this, knot1, knot2, knot3, Xc, Wc) + private pure subroutine set1(this, knot1, knot2, knot3, Xc, Wc)

                                                                                                  Author
                                                                                                  Seyed Ali Ghasemi
                                                                                                  @@ -5652,7 +5652,7 @@

                                                                                                  Arguments

                                                                                                • - private pure subroutine set2(this, Xth_dir1, Xth_dir2, Xth_dir3, degree, continuity1, continuity2, continuity3, Xc, Wc) + private pure subroutine set2(this, Xth_dir1, Xth_dir2, Xth_dir3, degree, continuity1, continuity2, continuity3, Xc, Wc)

                                                                                                  Author
                                                                                                  Seyed Ali Ghasemi
                                                                                                  @@ -5830,7 +5830,7 @@

                                                                                                  Arguments

                                                                                                • - private pure subroutine set3(this, nc, Xc, Wc) + private pure subroutine set3(this, nc, Xc, Wc)

                                                                                                  Author
                                                                                                  Seyed Ali Ghasemi
                                                                                                  @@ -5918,7 +5918,7 @@

                                                                                                  Arguments

                                                                                                • - private pure subroutine set4(this, degree, nc, Xc, Wc) + private pure subroutine set4(this, degree, nc, Xc, Wc)

                                                                                                  Author
                                                                                                  Seyed Ali Ghasemi
                                                                                                  @@ -6026,7 +6026,7 @@

                                                                                                  Arguments

                                                                                                  - +

                                                                                                  procedure, public :: set1 @@ -6042,7 +6042,7 @@

                                                                                                  • - private pure subroutine set1(this, knot1, knot2, knot3, Xc, Wc) + private pure subroutine set1(this, knot1, knot2, knot3, Xc, Wc)

                                                                                                    Author
                                                                                                    Seyed Ali Ghasemi
                                                                                                    @@ -6165,7 +6165,7 @@

                                                                                                    Arguments

                                                                                                    - +

                                                                                                    procedure, public :: set2 @@ -6181,7 +6181,7 @@

                                                                                                    • - private pure subroutine set2(this, Xth_dir1, Xth_dir2, Xth_dir3, degree, continuity1, continuity2, continuity3, Xc, Wc) + private pure subroutine set2(this, Xth_dir1, Xth_dir2, Xth_dir3, degree, continuity1, continuity2, continuity3, Xc, Wc)

                                                                                                      Author
                                                                                                      Seyed Ali Ghasemi
                                                                                                      @@ -6364,7 +6364,7 @@

                                                                                                      Arguments

                                                                                                      - +

                                                                                                      procedure, public :: set3 @@ -6380,7 +6380,7 @@

                                                                                                      • - private pure subroutine set3(this, nc, Xc, Wc) + private pure subroutine set3(this, nc, Xc, Wc)

                                                                                                        Author
                                                                                                        Seyed Ali Ghasemi
                                                                                                        @@ -6473,7 +6473,7 @@

                                                                                                        Arguments

                                                                                                        - +

                                                                                                        procedure, public :: set4 @@ -6489,7 +6489,7 @@

                                                                                                        • - private pure subroutine set4(this, degree, nc, Xc, Wc) + private pure subroutine set4(this, degree, nc, Xc, Wc)

                                                                                                          Author
                                                                                                          Seyed Ali Ghasemi
                                                                                                          @@ -6597,7 +6597,7 @@

                                                                                                          Arguments

                                                                                                          - +

                                                                                                          procedure, public :: set_C @@ -6613,7 +6613,7 @@

                                                                                                          • - private pure subroutine set_C(this, center, radius1, radius2, length) + private pure subroutine set_C(this, center, radius1, radius2, length)

                                                                                                            Author
                                                                                                            Seyed Ali Ghasemi
                                                                                                            @@ -6721,7 +6721,7 @@

                                                                                                            Arguments

                                                                                                            - +

                                                                                                            procedure, public :: set_elem @@ -6737,7 +6737,7 @@

                                                                                                            • - private pure subroutine set_elem(this, elemConn) + private pure subroutine set_elem(this, elemConn)

                                                                                                              Author
                                                                                                              Seyed Ali Ghasemi
                                                                                                              @@ -6800,7 +6800,7 @@

                                                                                                              Arguments

                                                                                                              - +

                                                                                                              procedure, public :: set_elem_Xc_vis @@ -6816,7 +6816,7 @@

                                                                                                              • - private pure subroutine set_elem_Xc_vis(this, elemConn) + private pure subroutine set_elem_Xc_vis(this, elemConn)

                                                                                                                Author
                                                                                                                Seyed Ali Ghasemi
                                                                                                                @@ -6879,7 +6879,7 @@

                                                                                                                Arguments

                                                                                                                - +

                                                                                                                procedure, public :: set_elem_Xg_vis @@ -6895,7 +6895,7 @@

                                                                                                                • - private pure subroutine set_elem_Xg_vis(this, elemConn) + private pure subroutine set_elem_Xg_vis(this, elemConn)

                                                                                                                  Author
                                                                                                                  Seyed Ali Ghasemi
                                                                                                                  @@ -7315,7 +7315,7 @@

                                                                                                                  Arguments

                                                                                                                  - +

                                                                                                                  procedure, public :: show @@ -7331,7 +7331,7 @@

                                                                                                                  • - private impure subroutine show(this, vtkfile_Xc, vtkfile_Xg) + private impure subroutine show(this, vtkfile_Xc, vtkfile_Xg)

                                                                                                                    Author
                                                                                                                    Seyed Ali Ghasemi
                                                                                                                    @@ -7409,7 +7409,7 @@

                                                                                                                    Arguments

                                                                                                                    - +

                                                                                                                    procedure, public :: translate_Xc @@ -7425,7 +7425,7 @@

                                                                                                                    • - private pure subroutine translate_Xc(this, vec) + private pure subroutine translate_Xc(this, vec)

                                                                                                                      Author
                                                                                                                      Seyed Ali Ghasemi
                                                                                                                      @@ -7488,7 +7488,7 @@

                                                                                                                      Arguments

                                                                                                                      - +

                                                                                                                      procedure, public :: translate_Xg @@ -7504,7 +7504,7 @@

                                                                                                                      • - private pure subroutine translate_Xg(this, vec) + private pure subroutine translate_Xg(this, vec)

                                                                                                                        Author
                                                                                                                        Seyed Ali Ghasemi
                                                                                                                        @@ -7567,7 +7567,7 @@

                                                                                                                        Arguments

                                                                                                                        - +

                                                                                                                        procedure, private :: basis_scalar @@ -7583,7 +7583,7 @@

                                                                                                                        • - private pure subroutine basis_scalar(this, Xt, Tgc) + private pure subroutine basis_scalar(this, Xt, Tgc)

                                                                                                                          Author
                                                                                                                          Seyed Ali Ghasemi
                                                                                                                          @@ -7661,7 +7661,7 @@

                                                                                                                          Arguments

                                                                                                                          - +

                                                                                                                          procedure, private :: basis_vector @@ -7677,7 +7677,7 @@

                                                                                                                          • - private pure subroutine basis_vector(this, res1, res2, res3, Xt1, Xt2, Xt3, Tgc) + private pure subroutine basis_vector(this, res1, res2, res3, Xt1, Xt2, Xt3, Tgc)

                                                                                                                            Author
                                                                                                                            Seyed Ali Ghasemi
                                                                                                                            @@ -7830,7 +7830,7 @@

                                                                                                                            Arguments

                                                                                                                            - +

                                                                                                                            procedure, private :: derivative2_scalar @@ -7846,7 +7846,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
                                                                                                                              @@ -7954,7 +7954,7 @@

                                                                                                                              Arguments

                                                                                                                              - +

                                                                                                                              procedure, private :: derivative2_vector @@ -7970,7 +7970,7 @@

                                                                                                                              • - private pure subroutine derivative2_vector(this, res1, res2, res3, Xt1, Xt2, Xt3, d2Tgc, dTgc, Tgc) + private pure subroutine derivative2_vector(this, res1, res2, res3, Xt1, Xt2, Xt3, d2Tgc, dTgc, Tgc)

                                                                                                                                Author
                                                                                                                                Seyed Ali Ghasemi
                                                                                                                                @@ -8153,7 +8153,7 @@

                                                                                                                                Arguments

                                                                                                                                - +

                                                                                                                                procedure, private :: derivative_scalar @@ -8169,7 +8169,7 @@

                                                                                                                                • - private pure subroutine derivative_scalar(this, Xt, dTgc, Tgc, elem) + private pure subroutine derivative_scalar(this, Xt, dTgc, Tgc, elem)

                                                                                                                                  Author
                                                                                                                                  Seyed Ali Ghasemi
                                                                                                                                  @@ -8277,7 +8277,7 @@

                                                                                                                                  Arguments

                                                                                                                                  - +

                                                                                                                                  procedure, private :: derivative_vector @@ -8293,7 +8293,7 @@

                                                                                                                                  • - private pure subroutine derivative_vector(this, res1, res2, res3, Xt1, Xt2, Xt3, dTgc, Tgc) + private pure subroutine derivative_vector(this, res1, res2, res3, Xt1, Xt2, Xt3, dTgc, Tgc)

                                                                                                                                    Author
                                                                                                                                    Seyed Ali Ghasemi
                                                                                                                                    @@ -8461,7 +8461,7 @@

                                                                                                                                    Arguments

                                                                                                                                    - +

                                                                                                                                    procedure, private :: get_Wc_all @@ -8477,7 +8477,7 @@

                                                                                                                                    • - private pure function get_Wc_all(this) result(Wc) + private pure function get_Wc_all(this) result(Wc)

                                                                                                                                      Author
                                                                                                                                      Seyed Ali Ghasemi
                                                                                                                                      @@ -8530,7 +8530,7 @@

                                                                                                                                      - +

                                                                                                                                      procedure, private :: get_Wci @@ -8546,7 +8546,7 @@

                                                                                                                                      • - private pure function get_Wci(this, n) result(Wc) + private pure function get_Wci(this, n) result(Wc)

                                                                                                                                        Author
                                                                                                                                        Seyed Ali Ghasemi
                                                                                                                                        @@ -8614,7 +8614,7 @@

                                                                                                                                        - +

                                                                                                                                        procedure, private :: get_Xc_all @@ -8630,7 +8630,7 @@

                                                                                                                                        • - private pure function get_Xc_all(this) result(Xc) + private pure function get_Xc_all(this) result(Xc)

                                                                                                                                          Author
                                                                                                                                          Seyed Ali Ghasemi
                                                                                                                                          @@ -8683,7 +8683,7 @@

                                                                                                                                          - +

                                                                                                                                          procedure, private :: get_Xci @@ -8699,7 +8699,7 @@

                                                                                                                                          • - private pure function get_Xci(this, n) result(Xc) + private pure function get_Xci(this, n) result(Xc)

                                                                                                                                            Author
                                                                                                                                            Seyed Ali Ghasemi
                                                                                                                                            @@ -8767,7 +8767,7 @@

                                                                                                                                            - +

                                                                                                                                            procedure, private :: get_Xcid @@ -8783,7 +8783,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
                                                                                                                                              @@ -8866,7 +8866,7 @@

                                                                                                                                              - +

                                                                                                                                              procedure, private :: get_Xg_all @@ -8882,7 +8882,7 @@

                                                                                                                                              • - private pure function get_Xg_all(this) result(Xg) + private pure function get_Xg_all(this) result(Xg)

                                                                                                                                                Author
                                                                                                                                                Seyed Ali Ghasemi
                                                                                                                                                @@ -8935,7 +8935,7 @@

                                                                                                                                                - +

                                                                                                                                                procedure, private :: get_Xgi @@ -8951,7 +8951,7 @@

                                                                                                                                                • - private pure function get_Xgi(this, n) result(Xg) + private pure function get_Xgi(this, n) result(Xg)

                                                                                                                                                  Author
                                                                                                                                                  Seyed Ali Ghasemi
                                                                                                                                                  @@ -9019,7 +9019,7 @@

                                                                                                                                                  - +

                                                                                                                                                  procedure, private :: get_Xgid @@ -9035,7 +9035,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
                                                                                                                                                    @@ -9271,7 +9271,7 @@

                                                                                                                                                    - +

                                                                                                                                                    procedure, private :: get_knot_all @@ -9287,7 +9287,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
                                                                                                                                                      @@ -9355,7 +9355,7 @@

                                                                                                                                                      - +

                                                                                                                                                      procedure, private :: get_knoti @@ -9371,7 +9371,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
                                                                                                                                                        @@ -9625,7 +9625,7 @@

                                                                                                                                                        Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                                                                                                                                                        + on 2024-07-01T10:00:02.512255


                          - - class(nurbs_curve), + + class(nurbs_surface), intent(inout) @@ -201,31 +201,31 @@

                          Called by

                          - + proc~~translate_xg~3~~CalledByGraph - + proc~translate_xg~3 - -nurbs_curve%translate_Xg + +nurbs_surface%translate_Xg - + -program~example1_curve - - -example1_curve +program~example3_surface + + +example3_surface - + -program~example1_curve->proc~translate_xg~3 - - +program~example3_surface->proc~translate_xg~3 + + @@ -341,7 +341,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/unique_integer.html b/proc/unique_integer.html index 0a153938e..c24a4ec73 100644 --- a/proc/unique_integer.html +++ b/proc/unique_integer.html @@ -199,254 +199,254 @@

                          Called by

                          proc~unique_integer - -unique_integer + +unique_integer interface~unique - -unique + +unique interface~unique->proc~unique_integer - - + + proc~ansatz - - -nurbs_volume%ansatz + + +nurbs_curve%ansatz proc~ansatz->interface~unique - - + + proc~cmp_elem - - -nurbs_volume%cmp_elem + + +nurbs_curve%cmp_elem proc~ansatz->proc~cmp_elem - - + + proc~ansatz~2 - - -nurbs_surface%ansatz + + +nurbs_volume%ansatz proc~ansatz~2->interface~unique - - + + proc~cmp_elem~2 - - -nurbs_surface%cmp_elem + + +nurbs_volume%cmp_elem - + proc~ansatz~2->proc~cmp_elem~2 - - + + proc~ansatz~3 - - -nurbs_curve%ansatz + + +nurbs_surface%ansatz proc~ansatz~3->interface~unique - - + + proc~cmp_elem~3 - - -nurbs_curve%cmp_elem + + +nurbs_surface%cmp_elem proc~ansatz~3->proc~cmp_elem~3 - - + + proc~cmp_elem->interface~unique - - + + proc~cmp_elem~2->interface~unique - - + + proc~cmp_elem~3->interface~unique - - + + proc~cmp_area - -nurbs_surface%cmp_area + +nurbs_surface%cmp_area - - -proc~cmp_area->proc~ansatz~2 - - + + +proc~cmp_area->proc~ansatz~3 + + - - -proc~cmp_area->proc~cmp_elem~2 - - + + +proc~cmp_area->proc~cmp_elem~3 + + proc~cmp_length - -nurbs_curve%cmp_length + +nurbs_curve%cmp_length - - -proc~cmp_length->proc~ansatz~3 - - + + +proc~cmp_length->proc~ansatz + + - - -proc~cmp_length->proc~cmp_elem~3 - - + + +proc~cmp_length->proc~cmp_elem + + proc~cmp_volume - -nurbs_volume%cmp_volume + +nurbs_volume%cmp_volume - - -proc~cmp_volume->proc~ansatz - - + + +proc~cmp_volume->proc~ansatz~2 + + - - -proc~cmp_volume->proc~cmp_elem - - + + +proc~cmp_volume->proc~cmp_elem~2 + + program~example3_volume - -example3_volume + +example3_volume - - -program~example3_volume->proc~cmp_elem - - + + +program~example3_volume->proc~cmp_elem~2 + + program~compute_area - -compute_area + +compute_area program~compute_area->proc~cmp_area - - + + program~compute_length - -compute_length + +compute_length program~compute_length->proc~cmp_length - - + + program~compute_volume - -compute_volume + +compute_volume program~compute_volume->proc~cmp_volume - - + + @@ -566,7 +566,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/proc/unique_real.html b/proc/unique_real.html index 946e77349..8ea666afd 100644 --- a/proc/unique_real.html +++ b/proc/unique_real.html @@ -199,254 +199,254 @@

                          Called by

                          proc~unique_real - -unique_real + +unique_real interface~unique - -unique + +unique interface~unique->proc~unique_real - - + + proc~ansatz - - -nurbs_volume%ansatz + + +nurbs_curve%ansatz proc~ansatz->interface~unique - - + + proc~cmp_elem - - -nurbs_volume%cmp_elem + + +nurbs_curve%cmp_elem proc~ansatz->proc~cmp_elem - - + + proc~ansatz~2 - - -nurbs_surface%ansatz + + +nurbs_volume%ansatz proc~ansatz~2->interface~unique - - + + proc~cmp_elem~2 - - -nurbs_surface%cmp_elem + + +nurbs_volume%cmp_elem - + proc~ansatz~2->proc~cmp_elem~2 - - + + proc~ansatz~3 - - -nurbs_curve%ansatz + + +nurbs_surface%ansatz proc~ansatz~3->interface~unique - - + + proc~cmp_elem~3 - - -nurbs_curve%cmp_elem + + +nurbs_surface%cmp_elem proc~ansatz~3->proc~cmp_elem~3 - - + + proc~cmp_elem->interface~unique - - + + proc~cmp_elem~2->interface~unique - - + + proc~cmp_elem~3->interface~unique - - + + proc~cmp_area - -nurbs_surface%cmp_area + +nurbs_surface%cmp_area - - -proc~cmp_area->proc~ansatz~2 - - + + +proc~cmp_area->proc~ansatz~3 + + - - -proc~cmp_area->proc~cmp_elem~2 - - + + +proc~cmp_area->proc~cmp_elem~3 + + proc~cmp_length - -nurbs_curve%cmp_length + +nurbs_curve%cmp_length - - -proc~cmp_length->proc~ansatz~3 - - + + +proc~cmp_length->proc~ansatz + + - - -proc~cmp_length->proc~cmp_elem~3 - - + + +proc~cmp_length->proc~cmp_elem + + proc~cmp_volume - -nurbs_volume%cmp_volume + +nurbs_volume%cmp_volume - - -proc~cmp_volume->proc~ansatz - - + + +proc~cmp_volume->proc~ansatz~2 + + - - -proc~cmp_volume->proc~cmp_elem - - + + +proc~cmp_volume->proc~cmp_elem~2 + + program~example3_volume - -example3_volume + +example3_volume - - -program~example3_volume->proc~cmp_elem - - + + +program~example3_volume->proc~cmp_elem~2 + + program~compute_area - -compute_area + +compute_area program~compute_area->proc~cmp_area - - + + program~compute_length - -compute_length + +compute_length program~compute_length->proc~cmp_length - - + + program~compute_volume - -compute_volume + +compute_volume program~compute_volume->proc~cmp_volume - - + + @@ -566,7 +566,7 @@

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/program/compute_area.html b/program/compute_area.html index 8e91848c4..b10adf063 100644 --- a/program/compute_area.html +++ b/program/compute_area.html @@ -115,9 +115,9 @@

                          Variables

                          - Xc + Xc area - shape + shape
                          @@ -382,18 +382,18 @@

                          Calls

                          compute_area
                          - + -none~set~2 - +none~set~3 + nurbs_surface%set - + -program~compute_area->none~set~2 +program~compute_area->none~set~3 @@ -412,105 +412,105 @@

                          Calls

                          - + -proc~set1~2 - +proc~set1~3 + nurbs_surface%set1 - + -none~set~2->proc~set1~2 +none~set~3->proc~set1~3 - + -proc~set2~2 - +proc~set2~3 + nurbs_surface%set2 - + -none~set~2->proc~set2~2 +none~set~3->proc~set2~3 - + -proc~set3~2 - +proc~set3~3 + nurbs_surface%set3 - + -none~set~2->proc~set3~2 +none~set~3->proc~set3~3 - + -proc~set4~2 - +proc~set4~3 + nurbs_surface%set4 - + -none~set~2->proc~set4~2 +none~set~3->proc~set4~3 - + -proc~ansatz~2 - +proc~ansatz~3 + nurbs_surface%ansatz - + -proc~cmp_area->proc~ansatz~2 +proc~cmp_area->proc~ansatz~3 - + -proc~cmp_elem~2 - +proc~cmp_elem~3 + nurbs_surface%cmp_elem - + -proc~cmp_area->proc~cmp_elem~2 +proc~cmp_area->proc~cmp_elem~3 - + -proc~ansatz~2->none~set~2 +proc~ansatz~3->none~set~3 - + -proc~ansatz~2->proc~cmp_elem~2 +proc~ansatz~3->proc~cmp_elem~3 @@ -523,9 +523,9 @@

                          Calls

                          - + -proc~ansatz~2->interface~gauss_leg +proc~ansatz~3->interface~gauss_leg @@ -538,9 +538,9 @@

                          Calls

                          - + -proc~ansatz~2->interface~ndgrid +proc~ansatz~3->interface~ndgrid @@ -553,24 +553,24 @@

                          Calls

                          - + -proc~ansatz~2->interface~unique +proc~ansatz~3->interface~unique - + -none~derivative~2 - +none~derivative~3 + nurbs_surface%derivative - + -proc~ansatz~2->none~derivative~2 +proc~ansatz~3->none~derivative~3 @@ -583,9 +583,9 @@

                          Calls

                          - + -proc~ansatz~2->proc~det +proc~ansatz~3->proc~det @@ -598,9 +598,9 @@

                          Calls

                          - + -proc~ansatz~2->proc~inv +proc~ansatz~3->proc~inv @@ -613,66 +613,66 @@

                          Calls

                          - + -proc~cmp_elem~2->interface~elemconn_cn +proc~cmp_elem~3->interface~elemconn_cn - + -proc~cmp_elem~2->interface~unique +proc~cmp_elem~3->interface~unique - + -proc~get_multiplicity~2 - +proc~get_multiplicity~3 + nurbs_surface%get_multiplicity - + -proc~cmp_elem~2->proc~get_multiplicity~2 +proc~cmp_elem~3->proc~get_multiplicity~3 - + -proc~cmp_degree~2 - +proc~cmp_degree~3 + nurbs_surface%cmp_degree - + -proc~set1~2->proc~cmp_degree~2 +proc~set1~3->proc~cmp_degree~3 - + -proc~cmp_nc~2 - +proc~cmp_nc~3 + nurbs_surface%cmp_nc - + -proc~set1~2->proc~cmp_nc~2 +proc~set1~3->proc~cmp_nc~3 - + -proc~set2~2->proc~cmp_nc~2 +proc~set2~3->proc~cmp_nc~3 @@ -685,15 +685,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 @@ -847,39 +847,39 @@

                          Calls

                          - + -proc~derivative_scalar~2 - +proc~derivative_scalar~3 + nurbs_surface%derivative_scalar - + -none~derivative~2->proc~derivative_scalar~2 +none~derivative~3->proc~derivative_scalar~3 - + -proc~derivative_vector~2 - +proc~derivative_vector~3 + nurbs_surface%derivative_vector - + -none~derivative~2->proc~derivative_vector~2 +none~derivative~3->proc~derivative_vector~3 - + -proc~cmp_degree~2->proc~get_multiplicity~2 +proc~cmp_degree~3->proc~get_multiplicity~3 @@ -892,9 +892,9 @@

                          Calls

                          - + -proc~cmp_nc~2->interface~compute_multiplicity +proc~cmp_nc~3->interface~compute_multiplicity @@ -913,9 +913,9 @@

                          Calls

                          - + -proc~get_multiplicity~2->interface~compute_multiplicity +proc~get_multiplicity~3->interface~compute_multiplicity @@ -961,51 +961,51 @@

                          Calls

                          - + -interface~compute_dtgc~2 - +interface~compute_dtgc~3 + compute_dTgc - + -proc~derivative_scalar~2->interface~compute_dtgc~2 +proc~derivative_scalar~3->interface~compute_dtgc~3 - + -proc~is_rational~2 - +proc~is_rational~3 + nurbs_surface%is_rational - + -proc~derivative_scalar~2->proc~is_rational~2 +proc~derivative_scalar~3->proc~is_rational~3 - + -proc~derivative_vector~2->interface~ndgrid +proc~derivative_vector~3->interface~ndgrid - + -proc~derivative_vector~2->interface~compute_dtgc~2 +proc~derivative_vector~3->interface~compute_dtgc~3 - + -proc~derivative_vector~2->proc~is_rational~2 +proc~derivative_vector~3->proc~is_rational~3 @@ -1169,7 +1169,7 @@

                          Variables

                          - + real(kind=rk) @@ -1201,7 +1201,7 @@

                          Variables

                          - + type(nurbs_surface) @@ -1248,7 +1248,7 @@

                          Variables

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/program/compute_length.html b/program/compute_length.html index 93deb4872..a7a94bfc8 100644 --- a/program/compute_length.html +++ b/program/compute_length.html @@ -115,9 +115,9 @@

                          Variables

                          - Xc - length - shape + Xc + length + shape
                          @@ -382,18 +382,18 @@

                          Calls

                          compute_length - + -none~set~3 - +none~set + nurbs_curve%set - + -program~compute_length->none~set~3 +program~compute_length->none~set @@ -412,120 +412,120 @@

                          Calls

                          - + -proc~set1a - - -nurbs_curve%set1a +proc~set1 + + +nurbs_curve%set1 - + -none~set~3->proc~set1a - - +none~set->proc~set1 + + - + -proc~set1~3 - - -nurbs_curve%set1 +proc~set1a + + +nurbs_curve%set1a - + -none~set~3->proc~set1~3 - - +none~set->proc~set1a + + - + -proc~set2~3 - +proc~set2 + nurbs_curve%set2 - + -none~set~3->proc~set2~3 +none~set->proc~set2 - + -proc~set3~3 - +proc~set3 + nurbs_curve%set3 - + -none~set~3->proc~set3~3 +none~set->proc~set3 - + -proc~set4~3 - +proc~set4 + nurbs_curve%set4 - + -none~set~3->proc~set4~3 +none~set->proc~set4 - + -proc~ansatz~3 - +proc~ansatz + nurbs_curve%ansatz - + -proc~cmp_length->proc~ansatz~3 +proc~cmp_length->proc~ansatz - + -proc~cmp_elem~3 - +proc~cmp_elem + nurbs_curve%cmp_elem - + -proc~cmp_length->proc~cmp_elem~3 +proc~cmp_length->proc~cmp_elem - + -proc~ansatz~3->none~set~3 +proc~ansatz->none~set - + -proc~ansatz~3->proc~cmp_elem~3 +proc~ansatz->proc~cmp_elem @@ -538,9 +538,9 @@

                          Calls

                          - + -proc~ansatz~3->interface~dyad +proc~ansatz->interface~dyad @@ -553,9 +553,9 @@

                          Calls

                          - + -proc~ansatz~3->interface~gauss_leg +proc~ansatz->interface~gauss_leg @@ -568,24 +568,24 @@

                          Calls

                          - + -proc~ansatz~3->interface~unique +proc~ansatz->interface~unique - + -none~derivative~3 - +none~derivative + nurbs_curve%derivative - + -proc~ansatz~3->none~derivative~3 +proc~ansatz->none~derivative @@ -598,52 +598,52 @@

                          Calls

                          - + -proc~cmp_elem~3->interface~elemconn_cn +proc~cmp_elem->interface~elemconn_cn - + -proc~cmp_elem~3->interface~unique +proc~cmp_elem->interface~unique - + -proc~get_multiplicity~3 - +proc~get_multiplicity + nurbs_curve%get_multiplicity - + -proc~cmp_elem~3->proc~get_multiplicity~3 +proc~cmp_elem->proc~get_multiplicity - + -proc~cmp_degree~3 - +proc~cmp_degree + nurbs_curve%cmp_degree - + -proc~set1a->proc~cmp_degree~3 - - +proc~set1->proc~cmp_degree + + - + -proc~set1~3->proc~cmp_degree~3 - +proc~set1a->proc~cmp_degree + @@ -655,15 +655,15 @@

                          Calls

                          - + -proc~set2~3->proc~compute_knot_vector +proc~set2->proc~compute_knot_vector - + -proc~set3~3->proc~cmp_degree~3 +proc~set3->proc~cmp_degree @@ -802,39 +802,39 @@

                          Calls

                          - + -proc~derivative_scalar~3 - +proc~derivative_scalar + nurbs_curve%derivative_scalar - + -none~derivative~3->proc~derivative_scalar~3 +none~derivative->proc~derivative_scalar - + -proc~derivative_vector~3 - +proc~derivative_vector + nurbs_curve%derivative_vector - + -none~derivative~3->proc~derivative_vector~3 +none~derivative->proc~derivative_vector - + -proc~cmp_degree~3->proc~get_multiplicity~3 +proc~cmp_degree->proc~get_multiplicity @@ -862,9 +862,9 @@

                          Calls

                          - + -proc~get_multiplicity~3->interface~compute_multiplicity +proc~get_multiplicity->interface~compute_multiplicity @@ -898,45 +898,45 @@

                          Calls

                          - + -interface~compute_dtgc~3 - +interface~compute_dtgc + compute_dTgc - + -proc~derivative_scalar~3->interface~compute_dtgc~3 +proc~derivative_scalar->interface~compute_dtgc - + -proc~is_rational~3 - +proc~is_rational + nurbs_curve%is_rational - + -proc~derivative_scalar~3->proc~is_rational~3 +proc~derivative_scalar->proc~is_rational - + -proc~derivative_vector~3->interface~compute_dtgc~3 +proc~derivative_vector->interface~compute_dtgc - + -proc~derivative_vector~3->proc~is_rational~3 +proc~derivative_vector->proc~is_rational @@ -1139,7 +1139,7 @@

                          Variables

                          - + real(kind=rk) @@ -1155,7 +1155,7 @@

                          Variables

                          - + real(kind=rk) @@ -1171,7 +1171,7 @@

                          Variables

                          - + type(nurbs_curve) @@ -1218,7 +1218,7 @@

                          Variables

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/program/compute_volume.html b/program/compute_volume.html index 41f475b4c..de3321af2 100644 --- a/program/compute_volume.html +++ b/program/compute_volume.html @@ -115,9 +115,9 @@

                          Variables

                          - Xc - shape - volume + Xc + shape + volume
                          @@ -382,18 +382,18 @@

                          Calls

                          compute_volume - + -none~set - +none~set~2 + nurbs_volume%set - + -program~compute_volume->none~set +program~compute_volume->none~set~2 @@ -412,105 +412,105 @@

                          Calls

                          - + -proc~set1 - +proc~set1~2 + nurbs_volume%set1 - + -none~set->proc~set1 +none~set~2->proc~set1~2 - + -proc~set2 - +proc~set2~2 + nurbs_volume%set2 - + -none~set->proc~set2 +none~set~2->proc~set2~2 - + -proc~set3 - +proc~set3~2 + nurbs_volume%set3 - + -none~set->proc~set3 +none~set~2->proc~set3~2 - + -proc~set4 - +proc~set4~2 + nurbs_volume%set4 - + -none~set->proc~set4 +none~set~2->proc~set4~2 - + -proc~ansatz - +proc~ansatz~2 + nurbs_volume%ansatz - + -proc~cmp_volume->proc~ansatz +proc~cmp_volume->proc~ansatz~2 - + -proc~cmp_elem - +proc~cmp_elem~2 + nurbs_volume%cmp_elem - + -proc~cmp_volume->proc~cmp_elem +proc~cmp_volume->proc~cmp_elem~2 - + -proc~ansatz->none~set +proc~ansatz~2->none~set~2 - + -proc~ansatz->proc~cmp_elem +proc~ansatz~2->proc~cmp_elem~2 @@ -523,9 +523,9 @@

                          Calls

                          - + -proc~ansatz->interface~gauss_leg +proc~ansatz~2->interface~gauss_leg @@ -538,9 +538,9 @@

                          Calls

                          - + -proc~ansatz->interface~ndgrid +proc~ansatz~2->interface~ndgrid @@ -553,24 +553,24 @@

                          Calls

                          - + -proc~ansatz->interface~unique +proc~ansatz~2->interface~unique - + -none~derivative - +none~derivative~2 + nurbs_volume%derivative - + -proc~ansatz->none~derivative +proc~ansatz~2->none~derivative~2 @@ -583,9 +583,9 @@

                          Calls

                          - + -proc~ansatz->proc~det +proc~ansatz~2->proc~det @@ -598,9 +598,9 @@

                          Calls

                          - + -proc~ansatz->proc~inv +proc~ansatz~2->proc~inv @@ -613,66 +613,66 @@

                          Calls

                          - + -proc~cmp_elem->interface~elemconn_cn +proc~cmp_elem~2->interface~elemconn_cn - + -proc~cmp_elem->interface~unique +proc~cmp_elem~2->interface~unique - + -proc~get_multiplicity - +proc~get_multiplicity~2 + nurbs_volume%get_multiplicity - + -proc~cmp_elem->proc~get_multiplicity +proc~cmp_elem~2->proc~get_multiplicity~2 - + -proc~cmp_degree - +proc~cmp_degree~2 + nurbs_volume%cmp_degree - + -proc~set1->proc~cmp_degree +proc~set1~2->proc~cmp_degree~2 - + -proc~cmp_nc - +proc~cmp_nc~2 + nurbs_volume%cmp_nc - + -proc~set1->proc~cmp_nc +proc~set1~2->proc~cmp_nc~2 - + -proc~set2->proc~cmp_nc +proc~set2~2->proc~cmp_nc~2 @@ -685,15 +685,15 @@

                          Calls

                          - + -proc~set2->proc~compute_knot_vector +proc~set2~2->proc~compute_knot_vector - + -proc~set3->proc~cmp_degree +proc~set3~2->proc~cmp_degree~2 @@ -847,39 +847,39 @@

                          Calls

                          - + -proc~derivative_scalar - +proc~derivative_scalar~2 + nurbs_volume%derivative_scalar - + -none~derivative->proc~derivative_scalar +none~derivative~2->proc~derivative_scalar~2 - + -proc~derivative_vector - +proc~derivative_vector~2 + nurbs_volume%derivative_vector - + -none~derivative->proc~derivative_vector +none~derivative~2->proc~derivative_vector~2 - + -proc~cmp_degree->proc~get_multiplicity +proc~cmp_degree~2->proc~get_multiplicity~2 @@ -892,9 +892,9 @@

                          Calls

                          - + -proc~cmp_nc->interface~compute_multiplicity +proc~cmp_nc~2->interface~compute_multiplicity @@ -913,9 +913,9 @@

                          Calls

                          - + -proc~get_multiplicity->interface~compute_multiplicity +proc~get_multiplicity~2->interface~compute_multiplicity @@ -961,51 +961,51 @@

                          Calls

                          - + -interface~compute_dtgc - +interface~compute_dtgc~2 + compute_dTgc - + -proc~derivative_scalar->interface~compute_dtgc +proc~derivative_scalar~2->interface~compute_dtgc~2 - + -proc~is_rational - +proc~is_rational~2 + nurbs_volume%is_rational - + -proc~derivative_scalar->proc~is_rational +proc~derivative_scalar~2->proc~is_rational~2 - + -proc~derivative_vector->interface~ndgrid +proc~derivative_vector~2->interface~ndgrid - + -proc~derivative_vector->interface~compute_dtgc +proc~derivative_vector~2->interface~compute_dtgc~2 - + -proc~derivative_vector->proc~is_rational +proc~derivative_vector~2->proc~is_rational~2 @@ -1169,7 +1169,7 @@

                          Variables

                          - + real(kind=rk) @@ -1185,7 +1185,7 @@

                          Variables

                          - + type(nurbs_volume) @@ -1201,7 +1201,7 @@

                          Variables

                          - + real(kind=rk) @@ -1248,7 +1248,7 @@

                          Variables

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/program/example1_curve.html b/program/example1_curve.html index bb4455ee4..621fc334b 100644 --- a/program/example1_curve.html +++ b/program/example1_curve.html @@ -115,9 +115,9 @@

                          Variables

                          - Wc - Xc - knot + Wc + Xc + knot nurbs
                          @@ -421,108 +421,108 @@

                          Calls

                          example1_curve - + -none~get_knot~3 - +none~get_knot + nurbs_curve%get_knot - + -program~example1_curve->none~get_knot~3 +program~example1_curve->none~get_knot - + -none~set~3 - +none~set + nurbs_curve%set - + -program~example1_curve->none~set~3 +program~example1_curve->none~set - + -proc~create~3 - +proc~create + nurbs_curve%create - + -program~example1_curve->proc~create~3 +program~example1_curve->proc~create - + -proc~elevate_degree~3 - +proc~elevate_degree + nurbs_curve%elevate_degree - + -program~example1_curve->proc~elevate_degree~3 +program~example1_curve->proc~elevate_degree - + -proc~export_xc~3 - +proc~export_xc + nurbs_curve%export_Xc - + -program~example1_curve->proc~export_xc~3 +program~example1_curve->proc~export_xc - + -proc~export_xg~3 - +proc~export_xg + nurbs_curve%export_Xg - + -program~example1_curve->proc~export_xg~3 +program~example1_curve->proc~export_xg - + -proc~finalize~3 - +proc~finalize + nurbs_curve%finalize - + -program~example1_curve->proc~finalize~3 +program~example1_curve->proc~finalize @@ -541,249 +541,249 @@

                          Calls

                          - + -proc~insert_knots~3 - +proc~insert_knots + nurbs_curve%insert_knots - + -program~example1_curve->proc~insert_knots~3 +program~example1_curve->proc~insert_knots - + -proc~remove_knots~3 - +proc~remove_knots + nurbs_curve%remove_knots - + -program~example1_curve->proc~remove_knots~3 +program~example1_curve->proc~remove_knots - + -proc~rotate_xc~3 - +proc~rotate_xc + nurbs_curve%rotate_Xc - + -program~example1_curve->proc~rotate_xc~3 +program~example1_curve->proc~rotate_xc - + -proc~rotate_xg~3 - +proc~rotate_xg + nurbs_curve%rotate_Xg - + -program~example1_curve->proc~rotate_xg~3 +program~example1_curve->proc~rotate_xg - + -proc~show~3 - +proc~show + nurbs_curve%show - + -program~example1_curve->proc~show~3 +program~example1_curve->proc~show - + -proc~translate_xc~3 - +proc~translate_xc + nurbs_curve%translate_Xc - + -program~example1_curve->proc~translate_xc~3 +program~example1_curve->proc~translate_xc - + -proc~translate_xg~3 - +proc~translate_xg + nurbs_curve%translate_Xg - + -program~example1_curve->proc~translate_xg~3 +program~example1_curve->proc~translate_xg - + -proc~get_knot_all~3 - +proc~get_knot_all + nurbs_curve%get_knot_all - + -none~get_knot~3->proc~get_knot_all~3 +none~get_knot->proc~get_knot_all - + -proc~get_knoti~3 - +proc~get_knoti + nurbs_curve%get_knoti - + -none~get_knot~3->proc~get_knoti~3 +none~get_knot->proc~get_knoti - + -proc~set1a - - -nurbs_curve%set1a +proc~set1 + + +nurbs_curve%set1 - + -none~set~3->proc~set1a +none~set->proc~set1 - + -proc~set1~3 - - -nurbs_curve%set1 +proc~set1a + + +nurbs_curve%set1a - + -none~set~3->proc~set1~3 +none~set->proc~set1a - + -proc~set2~3 - +proc~set2 + nurbs_curve%set2 - + -none~set~3->proc~set2~3 +none~set->proc~set2 - + -proc~set3~3 - +proc~set3 + nurbs_curve%set3 - + -none~set~3->proc~set3~3 +none~set->proc~set3 - + -proc~set4~3 - +proc~set4 + nurbs_curve%set4 - + -none~set~3->proc~set4~3 +none~set->proc~set4 - + -interface~compute_xg~3 - +interface~compute_xg + compute_Xg - + -proc~create~3->interface~compute_xg~3 +proc~create->interface~compute_xg - + -proc~is_rational~3 - +proc~is_rational + nurbs_curve%is_rational - + -proc~create~3->proc~is_rational~3 +proc~create->proc~is_rational - + -proc~elevate_degree~3->none~set~3 +proc~elevate_degree->none~set @@ -796,51 +796,51 @@

                          Calls

                          - + -proc~elevate_degree~3->proc~elevate_degree_a_5_9 +proc~elevate_degree->proc~elevate_degree_a_5_9 - + -proc~elevate_degree~3->proc~is_rational~3 +proc~elevate_degree->proc~is_rational - + -proc~cmp_elem_xc_vis~3 - +proc~cmp_elem_xc_vis + nurbs_curve%cmp_elem_Xc_vis - + -proc~export_xc~3->proc~cmp_elem_xc_vis~3 +proc~export_xc->proc~cmp_elem_xc_vis - + -proc~cmp_elem_xg_vis~3 - +proc~cmp_elem_xg_vis + nurbs_curve%cmp_elem_Xg_vis - + -proc~export_xg~3->proc~cmp_elem_xg_vis~3 +proc~export_xg->proc~cmp_elem_xg_vis - + -proc~insert_knots~3->none~set~3 +proc~insert_knots->none~set @@ -853,9 +853,9 @@

                          Calls

                          - + -proc~insert_knots~3->interface~compute_multiplicity +proc~insert_knots->interface~compute_multiplicity @@ -868,9 +868,9 @@

                          Calls

                          - + -proc~insert_knots~3->proc~findspan +proc~insert_knots->proc~findspan @@ -883,39 +883,39 @@

                          Calls

                          - + -proc~insert_knots~3->proc~insert_knot_a_5_1 +proc~insert_knots->proc~insert_knot_a_5_1 - + -proc~insert_knots~3->proc~is_rational~3 +proc~insert_knots->proc~is_rational - + -proc~remove_knots~3->none~set~3 +proc~remove_knots->none~set - + -proc~remove_knots~3->interface~compute_multiplicity +proc~remove_knots->interface~compute_multiplicity - + -proc~remove_knots~3->proc~findspan +proc~remove_knots->proc~findspan - + -proc~remove_knots~3->proc~is_rational~3 +proc~remove_knots->proc~is_rational @@ -928,9 +928,9 @@

                          Calls

                          - + -proc~remove_knots~3->proc~remove_knots_a_5_8 +proc~remove_knots->proc~remove_knots_a_5_8 @@ -943,15 +943,15 @@

                          Calls

                          - + -proc~rotate_xc~3->proc~rotation +proc~rotate_xc->proc~rotation - + -proc~rotate_xg~3->proc~rotation +proc~rotate_xg->proc~rotation @@ -994,15 +994,15 @@

                          Calls

                          - + -proc~cmp_elem_xc_vis~3->interface~elemconn_c0 +proc~cmp_elem_xc_vis->interface~elemconn_c0 - + -proc~cmp_elem_xg_vis~3->interface~elemconn_c0 +proc~cmp_elem_xg_vis->interface~elemconn_c0 @@ -1051,26 +1051,26 @@

                          Calls

                          - + -proc~cmp_degree~3 - +proc~cmp_degree + nurbs_curve%cmp_degree - + -proc~set1a->proc~cmp_degree~3 +proc~set1->proc~cmp_degree - + -proc~set1~3->proc~cmp_degree~3 - - +proc~set1a->proc~cmp_degree + + @@ -1081,15 +1081,15 @@

                          Calls

                          - + -proc~set2~3->proc~compute_knot_vector +proc~set2->proc~compute_knot_vector - + -proc~set3~3->proc~cmp_degree~3 +proc~set3->proc~cmp_degree @@ -1153,18 +1153,18 @@

                          Calls

                          - + -proc~get_multiplicity~3 - +proc~get_multiplicity + nurbs_curve%get_multiplicity - + -proc~cmp_degree~3->proc~get_multiplicity~3 +proc~cmp_degree->proc~get_multiplicity @@ -1183,9 +1183,9 @@

                          Calls

                          - + -proc~get_multiplicity~3->interface~compute_multiplicity +proc~get_multiplicity->interface~compute_multiplicity @@ -1292,7 +1292,7 @@

                          Variables

                          - + real(kind=rk), @@ -1308,7 +1308,7 @@

                          Variables

                          - + real(kind=rk), @@ -1324,7 +1324,7 @@

                          Variables

                          - + real(kind=rk) @@ -1533,7 +1533,7 @@

                          Source Code

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/program/example3_surface.html b/program/example3_surface.html index a3367dd2f..45f975969 100644 --- a/program/example3_surface.html +++ b/program/example3_surface.html @@ -115,10 +115,10 @@

                          Variables

                          - Wc - Xc - knot1 - knot2 + Wc + Xc + knot1 + knot2 nurbs
                          @@ -432,123 +432,123 @@

                          Calls

                          example3_surface - + -none~get_degree~2 - +none~get_degree~3 + nurbs_surface%get_degree - + -program~example3_surface->none~get_degree~2 +program~example3_surface->none~get_degree~3 - + -none~get_knot~2 - +none~get_knot~3 + nurbs_surface%get_knot - + -program~example3_surface->none~get_knot~2 +program~example3_surface->none~get_knot~3 - + -none~set~2 - +none~set~3 + nurbs_surface%set - + -program~example3_surface->none~set~2 +program~example3_surface->none~set~3 - + -proc~create~2 - +proc~create~3 + nurbs_surface%create - + -program~example3_surface->proc~create~2 +program~example3_surface->proc~create~3 - + -proc~elevate_degree~2 - +proc~elevate_degree~3 + nurbs_surface%elevate_degree - + -program~example3_surface->proc~elevate_degree~2 +program~example3_surface->proc~elevate_degree~3 - + -proc~export_xc~2 - +proc~export_xc~3 + nurbs_surface%export_Xc - + -program~example3_surface->proc~export_xc~2 +program~example3_surface->proc~export_xc~3 - + -proc~export_xg~2 - +proc~export_xg~3 + nurbs_surface%export_Xg - + -program~example3_surface->proc~export_xg~2 +program~example3_surface->proc~export_xg~3 - + -proc~finalize~2 - +proc~finalize~3 + nurbs_surface%finalize - + -program~example3_surface->proc~finalize~2 +program~example3_surface->proc~finalize~3 @@ -567,108 +567,108 @@

                          Calls

                          - + -proc~insert_knots~2 - +proc~insert_knots~3 + nurbs_surface%insert_knots - + -program~example3_surface->proc~insert_knots~2 +program~example3_surface->proc~insert_knots~3 - + -proc~remove_knots~2 - +proc~remove_knots~3 + nurbs_surface%remove_knots - + -program~example3_surface->proc~remove_knots~2 +program~example3_surface->proc~remove_knots~3 - + -proc~rotate_xc~2 - +proc~rotate_xc~3 + nurbs_surface%rotate_Xc - + -program~example3_surface->proc~rotate_xc~2 +program~example3_surface->proc~rotate_xc~3 - + -proc~rotate_xg~2 - +proc~rotate_xg~3 + nurbs_surface%rotate_Xg - + -program~example3_surface->proc~rotate_xg~2 +program~example3_surface->proc~rotate_xg~3 - + -proc~show~2 - +proc~show~3 + nurbs_surface%show - + -program~example3_surface->proc~show~2 +program~example3_surface->proc~show~3 - + -proc~translate_xc~2 - +proc~translate_xc~3 + nurbs_surface%translate_Xc - + -program~example3_surface->proc~translate_xc~2 +program~example3_surface->proc~translate_xc~3 - + -proc~translate_xg~2 - +proc~translate_xg~3 + nurbs_surface%translate_Xg - + -program~example3_surface->proc~translate_xg~2 +program~example3_surface->proc~translate_xg~3 @@ -681,9 +681,9 @@

                          Calls

                          - + -none~get_degree~2->proc~get_degree_all~2 +none~get_degree~3->proc~get_degree_all~2 @@ -696,114 +696,114 @@

                          Calls

                          - + -none~get_degree~2->proc~get_degree_dir~2 +none~get_degree~3->proc~get_degree_dir~2 - + -proc~get_knot_all~2 - +proc~get_knot_all~3 + nurbs_surface%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_surface%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_surface%set1 - + -none~set~2->proc~set1~2 +none~set~3->proc~set1~3 - + -proc~set2~2 - +proc~set2~3 + nurbs_surface%set2 - + -none~set~2->proc~set2~2 +none~set~3->proc~set2~3 - + -proc~set3~2 - +proc~set3~3 + nurbs_surface%set3 - + -none~set~2->proc~set3~2 +none~set~3->proc~set3~3 - + -proc~set4~2 - +proc~set4~3 + nurbs_surface%set4 - + -none~set~2->proc~set4~2 +none~set~3->proc~set4~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 @@ -816,36 +816,36 @@

                          Calls

                          - + -proc~create~2->interface~ndgrid +proc~create~3->interface~ndgrid - + -proc~is_rational~2 - +proc~is_rational~3 + nurbs_surface%is_rational - + -proc~create~2->proc~is_rational~2 +proc~create~3->proc~is_rational~3 - + -proc~elevate_degree~2->none~get_knot~2 +proc~elevate_degree~3->none~get_knot~3 - + -proc~elevate_degree~2->none~set~2 +proc~elevate_degree~3->none~set~3 @@ -858,57 +858,57 @@

                          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_surface%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_surface%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~get_knot~2 +proc~insert_knots~3->none~get_knot~3 - + -proc~insert_knots~2->none~set~2 +proc~insert_knots~3->none~set~3 @@ -921,9 +921,9 @@

                          Calls

                          - + -proc~insert_knots~2->interface~compute_multiplicity +proc~insert_knots~3->interface~compute_multiplicity @@ -936,9 +936,9 @@

                          Calls

                          - + -proc~insert_knots~2->proc~findspan +proc~insert_knots~3->proc~findspan @@ -951,45 +951,45 @@

                          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~get_knot~2 +proc~remove_knots~3->none~get_knot~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 @@ -1002,9 +1002,9 @@

                          Calls

                          - + -proc~remove_knots~2->proc~remove_knots_a_5_8 +proc~remove_knots~3->proc~remove_knots_a_5_8 @@ -1017,15 +1017,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 @@ -1098,15 +1098,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 @@ -1155,39 +1155,39 @@

                          Calls

                          - + -proc~cmp_degree~2 - +proc~cmp_degree~3 + nurbs_surface%cmp_degree - + -proc~set1~2->proc~cmp_degree~2 +proc~set1~3->proc~cmp_degree~3 - + -proc~cmp_nc~2 - +proc~cmp_nc~3 + nurbs_surface%cmp_nc - + -proc~set1~2->proc~cmp_nc~2 +proc~set1~3->proc~cmp_nc~3 - + -proc~set2~2->proc~cmp_nc~2 +proc~set2~3->proc~cmp_nc~3 @@ -1200,15 +1200,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 @@ -1272,24 +1272,24 @@

                          Calls

                          - + -proc~get_multiplicity~2 - +proc~get_multiplicity~3 + nurbs_surface%get_multiplicity - + -proc~cmp_degree~2->proc~get_multiplicity~2 +proc~cmp_degree~3->proc~get_multiplicity~3 - + -proc~cmp_nc~2->interface~compute_multiplicity +proc~cmp_nc~3->interface~compute_multiplicity @@ -1308,9 +1308,9 @@

                          Calls

                          - + -proc~get_multiplicity~2->interface~compute_multiplicity +proc~get_multiplicity~3->interface~compute_multiplicity @@ -1417,7 +1417,7 @@

                          Variables

                          - + real(kind=rk), @@ -1433,7 +1433,7 @@

                          Variables

                          - + real(kind=rk), @@ -1449,7 +1449,7 @@

                          Variables

                          - + real(kind=rk) @@ -1465,7 +1465,7 @@

                          Variables

                          - + real(kind=rk) @@ -1785,7 +1785,7 @@

                          Source Code

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/program/example3_volume.html b/program/example3_volume.html index cbd02fb4f..cc6a1884f 100644 --- a/program/example3_volume.html +++ b/program/example3_volume.html @@ -115,12 +115,12 @@

                          Variables

                          - Wc - Xc - knot1 - knot2 - knot3 - nurbs + Wc + Xc + knot1 + knot2 + knot3 + nurbs
                          @@ -141,7 +141,7 @@

                          Functions

                          @@ -436,48 +436,48 @@

                          Calls

                          example3_volume - + -none~get_degree - +none~get_degree~2 + nurbs_volume%get_degree - + -program~example3_volume->none~get_degree +program~example3_volume->none~get_degree~2 - + -none~get_knot - +none~get_knot~2 + nurbs_volume%get_knot - + -program~example3_volume->none~get_knot +program~example3_volume->none~get_knot~2 - + -none~set - +none~set~2 + nurbs_volume%set - + -program~example3_volume->none~set +program~example3_volume->none~set~2 @@ -496,243 +496,243 @@

                          Calls

                          - - -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~cmp_elem~2 + + +nurbs_volume%cmp_elem + + + + + +program~example3_volume->proc~cmp_elem~2 + + + + -proc~create - +proc~create~2 + nurbs_volume%create - + -program~example3_volume->proc~create +program~example3_volume->proc~create~2 - + -proc~elevate_degree - +proc~elevate_degree~2 + nurbs_volume%elevate_degree - + -program~example3_volume->proc~elevate_degree +program~example3_volume->proc~elevate_degree~2 - + -proc~export_xc - +proc~export_xc~2 + nurbs_volume%export_Xc - + -program~example3_volume->proc~export_xc +program~example3_volume->proc~export_xc~2 - + -proc~export_xg - +proc~export_xg~2 + nurbs_volume%export_Xg - + -program~example3_volume->proc~export_xg +program~example3_volume->proc~export_xg~2 - + -proc~finalize - +proc~finalize~2 + nurbs_volume%finalize - + -program~example3_volume->proc~finalize +program~example3_volume->proc~finalize~2 - + -proc~generate_xc~5 - +proc~generate_xc~4 + generate_Xc - + -program~example3_volume->proc~generate_xc~5 +program~example3_volume->proc~generate_xc~4 - + -proc~insert_knots - +proc~insert_knots~2 + nurbs_volume%insert_knots - + -program~example3_volume->proc~insert_knots +program~example3_volume->proc~insert_knots~2 - + -proc~remove_knots - +proc~remove_knots~2 + nurbs_volume%remove_knots - + -program~example3_volume->proc~remove_knots +program~example3_volume->proc~remove_knots~2 - + -proc~rotate_xc - +proc~rotate_xc~2 + nurbs_volume%rotate_Xc - + -program~example3_volume->proc~rotate_xc +program~example3_volume->proc~rotate_xc~2 - + -proc~rotate_xg - +proc~rotate_xg~2 + nurbs_volume%rotate_Xg - + -program~example3_volume->proc~rotate_xg +program~example3_volume->proc~rotate_xg~2 - + -proc~set_elem - +proc~set_elem~2 + nurbs_volume%set_elem - + -program~example3_volume->proc~set_elem +program~example3_volume->proc~set_elem~2 - + -proc~show - +proc~show~2 + nurbs_volume%show - + -program~example3_volume->proc~show +program~example3_volume->proc~show~2 - + -proc~translate_xc - +proc~translate_xc~2 + nurbs_volume%translate_Xc - + -program~example3_volume->proc~translate_xc +program~example3_volume->proc~translate_xc~2 - + -proc~translate_xg - +proc~translate_xg~2 + nurbs_volume%translate_Xg - + -program~example3_volume->proc~translate_xg +program~example3_volume->proc~translate_xg~2 @@ -745,9 +745,9 @@

                          Calls

                          - + -none~get_degree->proc~get_degree_all +none~get_degree~2->proc~get_degree_all @@ -760,99 +760,99 @@

                          Calls

                          - + -none~get_degree->proc~get_degree_dir +none~get_degree~2->proc~get_degree_dir - + -proc~get_knot_all - +proc~get_knot_all~2 + nurbs_volume%get_knot_all - + -none~get_knot->proc~get_knot_all +none~get_knot~2->proc~get_knot_all~2 - + -proc~get_knoti - +proc~get_knoti~2 + nurbs_volume%get_knoti - + -none~get_knot->proc~get_knoti +none~get_knot~2->proc~get_knoti~2 - + -proc~set1 - +proc~set1~2 + nurbs_volume%set1 - + -none~set->proc~set1 +none~set~2->proc~set1~2 - + -proc~set2 - +proc~set2~2 + nurbs_volume%set2 - + -none~set->proc~set2 +none~set~2->proc~set2~2 - + -proc~set3 - +proc~set3~2 + nurbs_volume%set3 - + -none~set->proc~set3 +none~set~2->proc~set3~2 - + -proc~set4 - +proc~set4~2 + nurbs_volume%set4 - + -none~set->proc~set4 +none~set~2->proc~set4~2 @@ -865,11 +865,11 @@

                          Calls

                          - + -proc~cmp_elem->interface~elemconn_cn - - +proc~cmp_elem~2->interface~elemconn_cn + + @@ -880,39 +880,39 @@

                          Calls

                          - + -proc~cmp_elem->interface~unique - - +proc~cmp_elem~2->interface~unique + + - + -proc~get_multiplicity - +proc~get_multiplicity~2 + nurbs_volume%get_multiplicity - + -proc~cmp_elem->proc~get_multiplicity - - +proc~cmp_elem~2->proc~get_multiplicity~2 + + - + -interface~compute_xg - +interface~compute_xg~2 + compute_Xg - + -proc~create->interface~compute_xg +proc~create~2->interface~compute_xg~2 @@ -925,36 +925,36 @@

                          Calls

                          - + -proc~create->interface~ndgrid +proc~create~2->interface~ndgrid - + -proc~is_rational - +proc~is_rational~2 + nurbs_volume%is_rational - + -proc~create->proc~is_rational +proc~create~2->proc~is_rational~2 - + -proc~elevate_degree->none~get_knot +proc~elevate_degree~2->none~get_knot~2 - + -proc~elevate_degree->none~set +proc~elevate_degree~2->none~set~2 @@ -967,51 +967,51 @@

                          Calls

                          - + -proc~elevate_degree->proc~elevate_degree_a_5_9 +proc~elevate_degree~2->proc~elevate_degree_a_5_9 - + -proc~cmp_elem_xc_vis - +proc~cmp_elem_xc_vis~2 + nurbs_volume%cmp_elem_Xc_vis - + -proc~export_xc->proc~cmp_elem_xc_vis +proc~export_xc~2->proc~cmp_elem_xc_vis~2 - + -proc~cmp_elem_xg_vis - +proc~cmp_elem_xg_vis~2 + nurbs_volume%cmp_elem_Xg_vis - + -proc~export_xg->proc~cmp_elem_xg_vis +proc~export_xg~2->proc~cmp_elem_xg_vis~2 - + -proc~insert_knots->none~get_knot +proc~insert_knots~2->none~get_knot~2 - + -proc~insert_knots->none~set +proc~insert_knots~2->none~set~2 @@ -1024,9 +1024,9 @@

                          Calls

                          - + -proc~insert_knots->interface~compute_multiplicity +proc~insert_knots~2->interface~compute_multiplicity @@ -1039,9 +1039,9 @@

                          Calls

                          - + -proc~insert_knots->proc~findspan +proc~insert_knots~2->proc~findspan @@ -1054,33 +1054,33 @@

                          Calls

                          - + -proc~insert_knots->proc~insert_knot_a_5_1 +proc~insert_knots~2->proc~insert_knot_a_5_1 - + -proc~remove_knots->none~get_knot +proc~remove_knots~2->none~get_knot~2 - + -proc~remove_knots->none~set +proc~remove_knots~2->none~set~2 - + -proc~remove_knots->interface~compute_multiplicity +proc~remove_knots~2->interface~compute_multiplicity - + -proc~remove_knots->proc~findspan +proc~remove_knots~2->proc~findspan @@ -1093,9 +1093,9 @@

                          Calls

                          - + -proc~remove_knots->proc~remove_knots_a_5_8 +proc~remove_knots~2->proc~remove_knots_a_5_8 @@ -1108,15 +1108,15 @@

                          Calls

                          - + -proc~rotate_xc->proc~rotation +proc~rotate_xc~2->proc~rotation - + -proc~rotate_xg->proc~rotation +proc~rotate_xg~2->proc~rotation @@ -1264,15 +1264,15 @@

                          Calls

                          - + -proc~cmp_elem_xc_vis->interface~elemconn_c0 +proc~cmp_elem_xc_vis~2->interface~elemconn_c0 - + -proc~cmp_elem_xg_vis->interface~elemconn_c0 +proc~cmp_elem_xg_vis~2->interface~elemconn_c0 @@ -1297,9 +1297,9 @@

                          Calls

                          - + -proc~get_multiplicity->interface~compute_multiplicity +proc~get_multiplicity~2->interface~compute_multiplicity @@ -1327,39 +1327,39 @@

                          Calls

                          - + -proc~cmp_degree - +proc~cmp_degree~2 + nurbs_volume%cmp_degree - + -proc~set1->proc~cmp_degree +proc~set1~2->proc~cmp_degree~2 - + -proc~cmp_nc - +proc~cmp_nc~2 + nurbs_volume%cmp_nc - + -proc~set1->proc~cmp_nc +proc~set1~2->proc~cmp_nc~2 - + -proc~set2->proc~cmp_nc +proc~set2~2->proc~cmp_nc~2 @@ -1372,15 +1372,15 @@

                          Calls

                          - + -proc~set2->proc~compute_knot_vector +proc~set2~2->proc~compute_knot_vector - + -proc~set3->proc~cmp_degree +proc~set3~2->proc~cmp_degree~2 @@ -1444,15 +1444,15 @@

                          Calls

                          - + -proc~cmp_degree->proc~get_multiplicity +proc~cmp_degree~2->proc~get_multiplicity~2 - + -proc~cmp_nc->interface~compute_multiplicity +proc~cmp_nc~2->interface~compute_multiplicity @@ -1574,7 +1574,7 @@

                          Variables

                          - + real(kind=rk), @@ -1590,7 +1590,7 @@

                          Variables

                          - + real(kind=rk), @@ -1606,7 +1606,7 @@

                          Variables

                          - + real(kind=rk) @@ -1622,7 +1622,7 @@

                          Variables

                          - + real(kind=rk) @@ -1638,7 +1638,7 @@

                          Variables

                          - + real(kind=rk) @@ -1654,7 +1654,7 @@

                          Variables

                          - + type(nurbs_volume) @@ -1682,7 +1682,7 @@

                          Variables

                          Functions

                          -

                          function generate_Xc(L) result(control_points) +

                          function generate_Xc(L) result(control_points)

                          @@ -1701,7 +1701,7 @@

                          Arguments

                          - + real(kind=rk), intent(in)
                          - + real(kind=rk), @@ -956,7 +956,7 @@

                          Variables

                          - + real(kind=rk), @@ -972,7 +972,7 @@

                          Variables

                          - + type(nurbs_curve) @@ -1000,7 +1000,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)

                          @@ -1049,7 +1049,7 @@

                          Arguments

                          - + real(kind=rk), intent(in)
                          - + real(kind=rk), @@ -1007,7 +1007,7 @@

                          Variables

                          - + real(kind=rk), @@ -1023,7 +1023,7 @@

                          Variables

                          - + type(nurbs_surface) @@ -1051,7 +1051,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)

                          @@ -1234,7 +1234,7 @@

                          Source Code

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/program/example_nurbs_volume.html b/program/example_nurbs_volume.html index c81d6c7ee..67ae4a38d 100644 --- a/program/example_nurbs_volume.html +++ b/program/example_nurbs_volume.html @@ -115,9 +115,9 @@

                          Variables

                          - Wc - Xc - nurbs + Wc + Xc + nurbs
                          @@ -138,7 +138,7 @@

                          Functions

                          @@ -414,183 +414,183 @@

                          Calls

                          example_nurbs_volume - + -none~set - +none~set~2 + nurbs_volume%set - + -program~example_nurbs_volume->none~set +program~example_nurbs_volume->none~set~2 - + -proc~create - +proc~create~2 + nurbs_volume%create - + -program~example_nurbs_volume->proc~create +program~example_nurbs_volume->proc~create~2 - + -proc~export_xc - +proc~export_xc~2 + nurbs_volume%export_Xc - + -program~example_nurbs_volume->proc~export_xc +program~example_nurbs_volume->proc~export_xc~2 - + -proc~export_xg - +proc~export_xg~2 + nurbs_volume%export_Xg - + -program~example_nurbs_volume->proc~export_xg +program~example_nurbs_volume->proc~export_xg~2 - + -proc~finalize - +proc~finalize~2 + nurbs_volume%finalize - + -program~example_nurbs_volume->proc~finalize +program~example_nurbs_volume->proc~finalize~2 - + -proc~generate_xc - +proc~generate_xc~5 + generate_Xc - + -program~example_nurbs_volume->proc~generate_xc +program~example_nurbs_volume->proc~generate_xc~5 - + -proc~show - +proc~show~2 + nurbs_volume%show - + -program~example_nurbs_volume->proc~show +program~example_nurbs_volume->proc~show~2 - + -proc~set1 - +proc~set1~2 + nurbs_volume%set1 - + -none~set->proc~set1 +none~set~2->proc~set1~2 - + -proc~set2 - +proc~set2~2 + nurbs_volume%set2 - + -none~set->proc~set2 +none~set~2->proc~set2~2 - + -proc~set3 - +proc~set3~2 + nurbs_volume%set3 - + -none~set->proc~set3 +none~set~2->proc~set3~2 - + -proc~set4 - +proc~set4~2 + nurbs_volume%set4 - + -none~set->proc~set4 +none~set~2->proc~set4~2 - + -interface~compute_xg - +interface~compute_xg~2 + compute_Xg - + -proc~create->interface~compute_xg +proc~create~2->interface~compute_xg~2 @@ -603,54 +603,54 @@

                          Calls

                          - + -proc~create->interface~ndgrid +proc~create~2->interface~ndgrid - + -proc~is_rational - +proc~is_rational~2 + nurbs_volume%is_rational - + -proc~create->proc~is_rational +proc~create~2->proc~is_rational~2 - + -proc~cmp_elem_xc_vis - +proc~cmp_elem_xc_vis~2 + nurbs_volume%cmp_elem_Xc_vis - + -proc~export_xc->proc~cmp_elem_xc_vis +proc~export_xc~2->proc~cmp_elem_xc_vis~2 - + -proc~cmp_elem_xg_vis - +proc~cmp_elem_xg_vis~2 + nurbs_volume%cmp_elem_Xg_vis - + -proc~export_xg->proc~cmp_elem_xg_vis +proc~export_xg~2->proc~cmp_elem_xg_vis~2 @@ -693,51 +693,51 @@

                          Calls

                          - + -proc~cmp_elem_xc_vis->interface~elemconn_c0 +proc~cmp_elem_xc_vis~2->interface~elemconn_c0 - + -proc~cmp_elem_xg_vis->interface~elemconn_c0 +proc~cmp_elem_xg_vis~2->interface~elemconn_c0 - + -proc~cmp_degree - +proc~cmp_degree~2 + nurbs_volume%cmp_degree - + -proc~set1->proc~cmp_degree +proc~set1~2->proc~cmp_degree~2 - + -proc~cmp_nc - +proc~cmp_nc~2 + nurbs_volume%cmp_nc - + -proc~set1->proc~cmp_nc +proc~set1~2->proc~cmp_nc~2 - + -proc~set2->proc~cmp_nc +proc~set2~2->proc~cmp_nc~2 @@ -750,15 +750,15 @@

                          Calls

                          - + -proc~set2->proc~compute_knot_vector +proc~set2~2->proc~compute_knot_vector - + -proc~set3->proc~cmp_degree +proc~set3~2->proc~cmp_degree~2 @@ -807,18 +807,18 @@

                          Calls

                          - + -proc~get_multiplicity - +proc~get_multiplicity~2 + nurbs_volume%get_multiplicity - + -proc~cmp_degree->proc~get_multiplicity +proc~cmp_degree~2->proc~get_multiplicity~2 @@ -831,9 +831,9 @@

                          Calls

                          - + -proc~cmp_nc->interface~compute_multiplicity +proc~cmp_nc~2->interface~compute_multiplicity @@ -882,9 +882,9 @@

                          Calls

                          - + -proc~get_multiplicity->interface~compute_multiplicity +proc~get_multiplicity~2->interface~compute_multiplicity @@ -991,7 +991,7 @@

                          Variables

                          - + real(kind=rk), @@ -1007,7 +1007,7 @@

                          Variables

                          - + real(kind=rk), @@ -1023,7 +1023,7 @@

                          Variables

                          - + type(nurbs_volume) @@ -1051,7 +1051,7 @@

                          Variables

                          Functions

                          -

                          function generate_Xc(L) result(control_points) +

                          function generate_Xc(L) result(control_points)

                          @@ -1199,7 +1199,7 @@

                          Source Code

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/program/example_ppm1.html b/program/example_ppm1.html index 7b270e4e2..666e1cf4f 100644 --- a/program/example_ppm1.html +++ b/program/example_ppm1.html @@ -115,28 +115,28 @@

                          Variables

                          @@ -172,9 +172,9 @@

                          Uses

                          - + real(kind=rk), @@ -1117,7 +1117,7 @@

                          Variables

                          - + real(kind=rk) @@ -1133,7 +1133,7 @@

                          Variables

                          - + type(color) @@ -1149,7 +1149,7 @@

                          Variables

                          - + integer @@ -1165,7 +1165,7 @@

                          Variables

                          - + real(kind=rk) @@ -1181,7 +1181,7 @@

                          Variables

                          - + type(colormap) @@ -1197,7 +1197,7 @@

                          Variables

                          - + integer @@ -1213,7 +1213,7 @@

                          Variables

                          - + integer @@ -1229,7 +1229,7 @@

                          Variables

                          - + integer @@ -1245,7 +1245,7 @@

                          Variables

                          - + integer, @@ -1261,7 +1261,7 @@

                          Variables

                          - + type(format_pnm) @@ -1277,7 +1277,7 @@

                          Variables

                          - + real(kind=rk) @@ -1293,7 +1293,7 @@

                          Variables

                          - + integer @@ -1309,7 +1309,7 @@

                          Variables

                          - + real(kind=rk) @@ -1325,7 +1325,7 @@

                          Variables

                          - + integer(kind=ik), @@ -1341,7 +1341,7 @@

                          Variables

                          - + integer @@ -1357,7 +1357,7 @@

                          Variables

                          - + integer @@ -1373,7 +1373,7 @@

                          Variables

                          - + integer @@ -1389,7 +1389,7 @@

                          Variables

                          - + type(nurbs_surface) @@ -1405,7 +1405,7 @@

                          Variables

                          - + type(timer) @@ -1421,7 +1421,7 @@

                          Variables

                          - + integer @@ -1437,7 +1437,7 @@

                          Variables

                          - + real(kind=rk), @@ -1484,7 +1484,7 @@

                          Variables

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/program/example_ppm2.html b/program/example_ppm2.html index 54b13a9fc..22af2167a 100644 --- a/program/example_ppm2.html +++ b/program/example_ppm2.html @@ -115,28 +115,28 @@

                          Variables

                          @@ -172,9 +172,9 @@

                          Uses

                          - + real(kind=rk), @@ -1186,7 +1186,7 @@

                          Variables

                          - + real(kind=rk) @@ -1202,7 +1202,7 @@

                          Variables

                          - + type(color) @@ -1218,7 +1218,7 @@

                          Variables

                          - + integer @@ -1234,7 +1234,7 @@

                          Variables

                          - + real(kind=rk) @@ -1250,7 +1250,7 @@

                          Variables

                          - + type(colormap) @@ -1266,7 +1266,7 @@

                          Variables

                          - + integer @@ -1282,7 +1282,7 @@

                          Variables

                          - + integer @@ -1298,7 +1298,7 @@

                          Variables

                          - + integer @@ -1314,7 +1314,7 @@

                          Variables

                          - + integer, @@ -1330,7 +1330,7 @@

                          Variables

                          - + type(format_pnm) @@ -1346,7 +1346,7 @@

                          Variables

                          - + real(kind=rk) @@ -1362,7 +1362,7 @@

                          Variables

                          - + integer @@ -1378,7 +1378,7 @@

                          Variables

                          - + real(kind=rk) @@ -1394,7 +1394,7 @@

                          Variables

                          - + integer(kind=ik), @@ -1410,7 +1410,7 @@

                          Variables

                          - + integer @@ -1426,7 +1426,7 @@

                          Variables

                          - + integer @@ -1442,7 +1442,7 @@

                          Variables

                          - + integer @@ -1458,7 +1458,7 @@

                          Variables

                          - + type(nurbs_surface) @@ -1474,7 +1474,7 @@

                          Variables

                          - + type(timer) @@ -1490,7 +1490,7 @@

                          Variables

                          - + integer @@ -1506,7 +1506,7 @@

                          Variables

                          - + real(kind=rk), @@ -1553,7 +1553,7 @@

                          Variables

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/program/example_ppm3.html b/program/example_ppm3.html index 5d016d0fe..af5f547fc 100644 --- a/program/example_ppm3.html +++ b/program/example_ppm3.html @@ -115,25 +115,25 @@

                          Variables

                          @@ -169,9 +169,9 @@

                          Uses

                          - + real(kind=rk), @@ -1275,7 +1275,7 @@

                          Variables

                          - + real(kind=rk) @@ -1291,7 +1291,7 @@

                          Variables

                          - + type(color) @@ -1307,7 +1307,7 @@

                          Variables

                          - + integer @@ -1323,7 +1323,7 @@

                          Variables

                          - + type(colormap) @@ -1339,7 +1339,7 @@

                          Variables

                          - + integer @@ -1355,7 +1355,7 @@

                          Variables

                          - + integer @@ -1371,7 +1371,7 @@

                          Variables

                          - + integer @@ -1387,7 +1387,7 @@

                          Variables

                          - + integer, @@ -1403,7 +1403,7 @@

                          Variables

                          - + type(format_pnm) @@ -1419,7 +1419,7 @@

                          Variables

                          - + integer @@ -1435,7 +1435,7 @@

                          Variables

                          - + integer(kind=ik), @@ -1451,7 +1451,7 @@

                          Variables

                          - + integer @@ -1467,7 +1467,7 @@

                          Variables

                          - + integer @@ -1483,7 +1483,7 @@

                          Variables

                          - + integer @@ -1499,7 +1499,7 @@

                          Variables

                          - + type(nurbs_surface) @@ -1515,7 +1515,7 @@

                          Variables

                          - + type(timer) @@ -1531,7 +1531,7 @@

                          Variables

                          - + integer @@ -1547,7 +1547,7 @@

                          Variables

                          - + real(kind=rk), @@ -1594,7 +1594,7 @@

                          Variables

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/program/example_put_to_nurbs.html b/program/example_put_to_nurbs.html index 03b833224..3a7699e13 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 + elem + i + nunit
                          @@ -155,8 +155,8 @@

                          Uses

                          - + real(kind=rk), @@ -984,7 +984,7 @@

                          Variables

                          - + integer, @@ -1000,7 +1000,7 @@

                          Variables

                          - + integer @@ -1016,7 +1016,7 @@

                          Variables

                          - + integer @@ -1063,7 +1063,7 @@

                          Variables

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/program/nearest_point_1d.html b/program/nearest_point_1d.html index 836f8876b..018f63e4f 100644 --- a/program/nearest_point_1d.html +++ b/program/nearest_point_1d.html @@ -115,13 +115,13 @@

                          Variables

                          @@ -396,311 +396,311 @@

                          Calls

                          nearest_point_1d - + -none~set~3 - +none~set + nurbs_curve%set - + -program~nearest_point_1d->none~set~3 +program~nearest_point_1d->none~set - + -proc~create~3 - +proc~create + nurbs_curve%create - + -program~nearest_point_1d->proc~create~3 +program~nearest_point_1d->proc~create - + -proc~finalize~3 - +proc~finalize + nurbs_curve%finalize - + -program~nearest_point_1d->proc~finalize~3 +program~nearest_point_1d->proc~finalize - + -proc~nearest_point2~3 - - -nurbs_curve%nearest_point2 +proc~nearest_point + + +nurbs_curve%nearest_point - + -program~nearest_point_1d->proc~nearest_point2~3 - - +program~nearest_point_1d->proc~nearest_point + + - + -proc~nearest_point~3 - - -nurbs_curve%nearest_point +proc~nearest_point2 + + +nurbs_curve%nearest_point2 - + -program~nearest_point_1d->proc~nearest_point~3 - - +program~nearest_point_1d->proc~nearest_point2 + + - + -proc~set1a - - -nurbs_curve%set1a +proc~set1 + + +nurbs_curve%set1 - + -none~set~3->proc~set1a - - +none~set->proc~set1 + + - + -proc~set1~3 - - -nurbs_curve%set1 +proc~set1a + + +nurbs_curve%set1a - + -none~set~3->proc~set1~3 +none~set->proc~set1a - + -proc~set2~3 - +proc~set2 + nurbs_curve%set2 - + -none~set~3->proc~set2~3 +none~set->proc~set2 - + -proc~set3~3 - +proc~set3 + nurbs_curve%set3 - + -none~set~3->proc~set3~3 +none~set->proc~set3 - + -proc~set4~3 - +proc~set4 + nurbs_curve%set4 - + -none~set~3->proc~set4~3 +none~set->proc~set4 - + -interface~compute_xg~3 - +interface~compute_xg + compute_Xg - + -proc~create~3->interface~compute_xg~3 +proc~create->interface~compute_xg - + -proc~is_rational~3 - +proc~is_rational + nurbs_curve%is_rational - + -proc~create~3->proc~is_rational~3 +proc~create->proc~is_rational - - -proc~nearest_point2~3->proc~create~3 - - + + +interface~nearest_point_help_1d + + +nearest_point_help_1d + + + + + +proc~nearest_point->interface~nearest_point_help_1d + + - + -proc~nearest_point2~3->proc~finalize~3 - - +proc~nearest_point2->proc~create + + - + -proc~nearest_point2~3->proc~nearest_point~3 - - +proc~nearest_point2->proc~finalize + + + + + +proc~nearest_point2->proc~nearest_point + + - + -none~derivative2~3 - +none~derivative2 + nurbs_curve%derivative2 - - -proc~nearest_point2~3->none~derivative2~3 - - + + +proc~nearest_point2->none~derivative2 + + - + -proc~cmp_xg~3 - +proc~cmp_xg + nurbs_curve%cmp_Xg - - -proc~nearest_point2~3->proc~cmp_xg~3 - - - - - -interface~nearest_point_help_1d - - -nearest_point_help_1d - - - - - -proc~nearest_point~3->interface~nearest_point_help_1d - - + + +proc~nearest_point2->proc~cmp_xg + + - + -proc~derivative2_scalar~3 - +proc~derivative2_scalar + nurbs_curve%derivative2_scalar - + -none~derivative2~3->proc~derivative2_scalar~3 +none~derivative2->proc~derivative2_scalar - + -proc~derivative2_vector~3 - +proc~derivative2_vector + nurbs_curve%derivative2_vector - + -none~derivative2~3->proc~derivative2_vector~3 +none~derivative2->proc~derivative2_vector - + -proc~cmp_xg~3->interface~compute_xg~3 +proc~cmp_xg->interface~compute_xg - + -proc~cmp_xg~3->proc~is_rational~3 +proc~cmp_xg->proc~is_rational - + -proc~cmp_degree~3 - +proc~cmp_degree + nurbs_curve%cmp_degree - + -proc~set1a->proc~cmp_degree~3 - - +proc~set1->proc~cmp_degree + + - + -proc~set1~3->proc~cmp_degree~3 - - +proc~set1a->proc~cmp_degree + + @@ -711,30 +711,30 @@

                          Calls

                          - + -proc~set2~3->proc~compute_knot_vector +proc~set2->proc~compute_knot_vector - + -proc~set3~3->proc~cmp_degree~3 +proc~set3->proc~cmp_degree - + -proc~get_multiplicity~3 - +proc~get_multiplicity + nurbs_curve%get_multiplicity - + -proc~cmp_degree~3->proc~get_multiplicity~3 +proc~cmp_degree->proc~get_multiplicity @@ -753,36 +753,36 @@

                          Calls

                          - + -proc~derivative2_scalar~3->proc~is_rational~3 +proc~derivative2_scalar->proc~is_rational - + -interface~compute_d2tgc~3 - +interface~compute_d2tgc + compute_d2Tgc - + -proc~derivative2_scalar~3->interface~compute_d2tgc~3 +proc~derivative2_scalar->interface~compute_d2tgc - + -proc~derivative2_vector~3->proc~is_rational~3 +proc~derivative2_vector->proc~is_rational - + -proc~derivative2_vector~3->interface~compute_d2tgc~3 +proc~derivative2_vector->interface~compute_d2tgc @@ -795,9 +795,9 @@

                          Calls

                          - + -proc~get_multiplicity~3->interface~compute_multiplicity +proc~get_multiplicity->interface~compute_multiplicity @@ -934,7 +934,7 @@

                          Variables

                          - + real(kind=rk), @@ -950,7 +950,7 @@

                          Variables

                          - + real(kind=rk), @@ -966,7 +966,7 @@

                          Variables

                          - + integer @@ -982,7 +982,7 @@

                          Variables

                          - + real(kind=rk) @@ -998,7 +998,7 @@

                          Variables

                          - + real(kind=rk), @@ -1014,7 +1014,7 @@

                          Variables

                          - + real(kind=rk) @@ -1030,7 +1030,7 @@

                          Variables

                          - + type(nurbs_curve) @@ -1077,7 +1077,7 @@

                          Variables

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/program/nearest_point_2d.html b/program/nearest_point_2d.html index e5d6572df..ea8f03d18 100644 --- a/program/nearest_point_2d.html +++ b/program/nearest_point_2d.html @@ -115,12 +115,12 @@

                          Variables

                          @@ -392,153 +392,153 @@

                          Calls

                          nearest_point_2d - + -none~set~2 - +none~set~3 + nurbs_surface%set - + -program~nearest_point_2d->none~set~2 +program~nearest_point_2d->none~set~3 - + -proc~create~2 - +proc~create~3 + nurbs_surface%create - + -program~nearest_point_2d->proc~create~2 +program~nearest_point_2d->proc~create~3 - + -proc~finalize~2 - +proc~finalize~3 + nurbs_surface%finalize - + -program~nearest_point_2d->proc~finalize~2 +program~nearest_point_2d->proc~finalize~3 - + -proc~nearest_point2~2 - +proc~nearest_point2~3 + nurbs_surface%nearest_point2 - + -program~nearest_point_2d->proc~nearest_point2~2 +program~nearest_point_2d->proc~nearest_point2~3 - + -proc~nearest_point~2 - +proc~nearest_point~3 + nurbs_surface%nearest_point - + -program~nearest_point_2d->proc~nearest_point~2 +program~nearest_point_2d->proc~nearest_point~3 - + -proc~set1~2 - +proc~set1~3 + nurbs_surface%set1 - + -none~set~2->proc~set1~2 +none~set~3->proc~set1~3 - + -proc~set2~2 - +proc~set2~3 + nurbs_surface%set2 - + -none~set~2->proc~set2~2 +none~set~3->proc~set2~3 - + -proc~set3~2 - +proc~set3~3 + nurbs_surface%set3 - + -none~set~2->proc~set3~2 +none~set~3->proc~set3~3 - + -proc~set4~2 - +proc~set4~3 + nurbs_surface%set4 - + -none~set~2->proc~set4~2 +none~set~3->proc~set4~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 @@ -551,72 +551,72 @@

                          Calls

                          - + -proc~create~2->interface~ndgrid +proc~create~3->interface~ndgrid - + -proc~is_rational~2 - +proc~is_rational~3 + nurbs_surface%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 - + -proc~nearest_point2~2->proc~nearest_point~2 +proc~nearest_point2~3->proc~nearest_point~3 - + -none~derivative2~2 - +none~derivative2~3 + nurbs_surface%derivative2 - + -proc~nearest_point2~2->none~derivative2~2 +proc~nearest_point2~3->none~derivative2~3 - + -proc~cmp_xg~2 - +proc~cmp_xg~3 + nurbs_surface%cmp_Xg - + -proc~nearest_point2~2->proc~cmp_xg~2 +proc~nearest_point2~3->proc~cmp_xg~3 @@ -629,9 +629,9 @@

                          Calls

                          - + -proc~nearest_point2~2->proc~inv +proc~nearest_point2~3->proc~inv @@ -644,9 +644,9 @@

                          Calls

                          - + -proc~nearest_point~2->interface~nearest_point_help_2d +proc~nearest_point~3->interface~nearest_point_help_2d @@ -680,45 +680,45 @@

                          Calls

                          - + -proc~derivative2_scalar~2 - +proc~derivative2_scalar~3 + nurbs_surface%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_surface%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 @@ -743,39 +743,39 @@

                          Calls

                          - + -proc~cmp_degree~2 - +proc~cmp_degree~3 + nurbs_surface%cmp_degree - + -proc~set1~2->proc~cmp_degree~2 +proc~set1~3->proc~cmp_degree~3 - + -proc~cmp_nc~2 - +proc~cmp_nc~3 + nurbs_surface%cmp_nc - + -proc~set1~2->proc~cmp_nc~2 +proc~set1~3->proc~cmp_nc~3 - + -proc~set2~2->proc~cmp_nc~2 +proc~set2~3->proc~cmp_nc~3 @@ -788,30 +788,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_surface%get_multiplicity - + -proc~cmp_degree~2->proc~get_multiplicity~2 +proc~cmp_degree~3->proc~get_multiplicity~3 @@ -824,9 +824,9 @@

                          Calls

                          - + -proc~cmp_nc~2->interface~compute_multiplicity +proc~cmp_nc~3->interface~compute_multiplicity @@ -845,42 +845,42 @@

                          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->interface~ndgrid +proc~derivative2_vector~3->interface~ndgrid - + -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 @@ -914,9 +914,9 @@

                          Calls

                          - + -proc~get_multiplicity~2->interface~compute_multiplicity +proc~get_multiplicity~3->interface~compute_multiplicity @@ -1023,7 +1023,7 @@

                          Variables

                          - + real(kind=rk) @@ -1039,7 +1039,7 @@

                          Variables

                          - + real(kind=rk) @@ -1055,7 +1055,7 @@

                          Variables

                          - + integer @@ -1071,7 +1071,7 @@

                          Variables

                          - + real(kind=rk), @@ -1087,7 +1087,7 @@

                          Variables

                          - + real(kind=rk), @@ -1103,7 +1103,7 @@

                          Variables

                          - + type(nurbs_surface) @@ -1150,7 +1150,7 @@

                          Variables

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/program/nearest_point_2d_bench.html b/program/nearest_point_2d_bench.html index e7c237208..6fd02537d 100644 --- a/program/nearest_point_2d_bench.html +++ b/program/nearest_point_2d_bench.html @@ -115,14 +115,14 @@

                          Variables

                          @@ -158,8 +158,8 @@

                          Uses

                          - + integer @@ -929,7 +929,7 @@

                          Variables

                          - + integer @@ -961,7 +961,7 @@

                          Variables

                          - + real(kind=rk), @@ -977,7 +977,7 @@

                          Variables

                          - + real(kind=rk), @@ -1009,7 +1009,7 @@

                          Variables

                          - + type(nurbs_surface) @@ -1025,7 +1025,7 @@

                          Variables

                          - + type(timer) @@ -1072,7 +1072,7 @@

                          Variables

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/program/nearest_point_3d.html b/program/nearest_point_3d.html index a1b4bb777..5066155ab 100644 --- a/program/nearest_point_3d.html +++ b/program/nearest_point_3d.html @@ -115,12 +115,12 @@

                          Variables

                          @@ -391,153 +391,153 @@

                          Calls

                          nearest_point_3d - + -none~set - +none~set~2 + nurbs_volume%set - + -program~nearest_point_3d->none~set +program~nearest_point_3d->none~set~2 - + -proc~create - +proc~create~2 + nurbs_volume%create - + -program~nearest_point_3d->proc~create +program~nearest_point_3d->proc~create~2 - + -proc~finalize - +proc~finalize~2 + nurbs_volume%finalize - + -program~nearest_point_3d->proc~finalize +program~nearest_point_3d->proc~finalize~2 - + -proc~nearest_point - - -nurbs_volume%nearest_point +proc~nearest_point2~2 + + +nurbs_volume%nearest_point2 - + -program~nearest_point_3d->proc~nearest_point - - +program~nearest_point_3d->proc~nearest_point2~2 + + - + -proc~nearest_point2 - - -nurbs_volume%nearest_point2 +proc~nearest_point~2 + + +nurbs_volume%nearest_point - + -program~nearest_point_3d->proc~nearest_point2 - - +program~nearest_point_3d->proc~nearest_point~2 + + - + -proc~set1 - +proc~set1~2 + nurbs_volume%set1 - + -none~set->proc~set1 +none~set~2->proc~set1~2 - + -proc~set2 - +proc~set2~2 + nurbs_volume%set2 - + -none~set->proc~set2 +none~set~2->proc~set2~2 - + -proc~set3 - +proc~set3~2 + nurbs_volume%set3 - + -none~set->proc~set3 +none~set~2->proc~set3~2 - + -proc~set4 - +proc~set4~2 + nurbs_volume%set4 - + -none~set->proc~set4 +none~set~2->proc~set4~2 - + -interface~compute_xg - +interface~compute_xg~2 + compute_Xg - + -proc~create->interface~compute_xg +proc~create~2->interface~compute_xg~2 @@ -550,89 +550,74 @@

                          Calls

                          - + -proc~create->interface~ndgrid +proc~create~2->interface~ndgrid - + -proc~is_rational - +proc~is_rational~2 + nurbs_volume%is_rational - + -proc~create->proc~is_rational +proc~create~2->proc~is_rational~2 - - -interface~nearest_point_help_3d - - -nearest_point_help_3d - - - - - -proc~nearest_point->interface~nearest_point_help_3d - - + + +proc~nearest_point2~2->proc~create~2 + + - + -proc~nearest_point2->proc~create - - +proc~nearest_point2~2->proc~finalize~2 + + - - -proc~nearest_point2->proc~finalize - - - - - -proc~nearest_point2->proc~nearest_point - - + + +proc~nearest_point2~2->proc~nearest_point~2 + + - + -none~derivative2 - +none~derivative2~2 + nurbs_volume%derivative2 - - -proc~nearest_point2->none~derivative2 - - + + +proc~nearest_point2~2->none~derivative2~2 + + - + -proc~cmp_xg - +proc~cmp_xg~2 + nurbs_volume%cmp_Xg - - -proc~nearest_point2->proc~cmp_xg - - + + +proc~nearest_point2~2->proc~cmp_xg~2 + + @@ -643,11 +628,26 @@

                          Calls

                          - - -proc~nearest_point2->proc~inv - - + + +proc~nearest_point2~2->proc~inv + + + + + +interface~nearest_point_help_3d + + +nearest_point_help_3d + + + + + +proc~nearest_point~2->interface~nearest_point_help_3d + + @@ -679,45 +679,45 @@

                          Calls

                          - + -proc~derivative2_scalar - +proc~derivative2_scalar~2 + nurbs_volume%derivative2_scalar - + -none~derivative2->proc~derivative2_scalar +none~derivative2~2->proc~derivative2_scalar~2 - + -proc~derivative2_vector - +proc~derivative2_vector~2 + nurbs_volume%derivative2_vector - + -none~derivative2->proc~derivative2_vector +none~derivative2~2->proc~derivative2_vector~2 - + -proc~cmp_xg->interface~compute_xg +proc~cmp_xg~2->interface~compute_xg~2 - + -proc~cmp_xg->proc~is_rational +proc~cmp_xg~2->proc~is_rational~2 @@ -742,39 +742,39 @@

                          Calls

                          - + -proc~cmp_degree - +proc~cmp_degree~2 + nurbs_volume%cmp_degree - + -proc~set1->proc~cmp_degree +proc~set1~2->proc~cmp_degree~2 - + -proc~cmp_nc - +proc~cmp_nc~2 + nurbs_volume%cmp_nc - + -proc~set1->proc~cmp_nc +proc~set1~2->proc~cmp_nc~2 - + -proc~set2->proc~cmp_nc +proc~set2~2->proc~cmp_nc~2 @@ -787,30 +787,30 @@

                          Calls

                          - + -proc~set2->proc~compute_knot_vector +proc~set2~2->proc~compute_knot_vector - + -proc~set3->proc~cmp_degree +proc~set3~2->proc~cmp_degree~2 - + -proc~get_multiplicity - +proc~get_multiplicity~2 + nurbs_volume%get_multiplicity - + -proc~cmp_degree->proc~get_multiplicity +proc~cmp_degree~2->proc~get_multiplicity~2 @@ -823,9 +823,9 @@

                          Calls

                          - + -proc~cmp_nc->interface~compute_multiplicity +proc~cmp_nc~2->interface~compute_multiplicity @@ -844,42 +844,42 @@

                          Calls

                          - + -proc~derivative2_scalar->proc~is_rational +proc~derivative2_scalar~2->proc~is_rational~2 - + -interface~compute_d2tgc - +interface~compute_d2tgc~2 + compute_d2Tgc - + -proc~derivative2_scalar->interface~compute_d2tgc +proc~derivative2_scalar~2->interface~compute_d2tgc~2 - + -proc~derivative2_vector->interface~ndgrid +proc~derivative2_vector~2->interface~ndgrid - + -proc~derivative2_vector->proc~is_rational +proc~derivative2_vector~2->proc~is_rational~2 - + -proc~derivative2_vector->interface~compute_d2tgc +proc~derivative2_vector~2->interface~compute_d2tgc~2 @@ -913,9 +913,9 @@

                          Calls

                          - + -proc~get_multiplicity->interface~compute_multiplicity +proc~get_multiplicity~2->interface~compute_multiplicity @@ -1022,7 +1022,7 @@

                          Variables

                          - + real(kind=rk) @@ -1038,7 +1038,7 @@

                          Variables

                          - + real(kind=rk) @@ -1054,7 +1054,7 @@

                          Variables

                          - + integer @@ -1070,7 +1070,7 @@

                          Variables

                          - + real(kind=rk), @@ -1086,7 +1086,7 @@

                          Variables

                          - + real(kind=rk), @@ -1102,7 +1102,7 @@

                          Variables

                          - + type(nurbs_volume) @@ -1149,7 +1149,7 @@

                          Variables

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/program/shape_c_1d.html b/program/shape_c_1d.html index 1a78a6f60..38fcac5b1 100644 --- a/program/shape_c_1d.html +++ b/program/shape_c_1d.html @@ -115,7 +115,7 @@

                          Variables

                          - shape + shape
                          @@ -385,243 +385,243 @@

                          Calls

                          shape_C_1d - + -proc~create~3 - +proc~create + nurbs_curve%create - + -program~shape_c_1d->proc~create~3 +program~shape_c_1d->proc~create - + -proc~export_xc~3 - +proc~export_xc + nurbs_curve%export_Xc - + -program~shape_c_1d->proc~export_xc~3 +program~shape_c_1d->proc~export_xc - + -proc~export_xg~3 - +proc~export_xg + nurbs_curve%export_Xg - + -program~shape_c_1d->proc~export_xg~3 +program~shape_c_1d->proc~export_xg - + -proc~finalize~3 - +proc~finalize + nurbs_curve%finalize - + -program~shape_c_1d->proc~finalize~3 +program~shape_c_1d->proc~finalize - + -proc~set_c~3 - +proc~set_c + nurbs_curve%set_C - + -program~shape_c_1d->proc~set_c~3 +program~shape_c_1d->proc~set_c - + -proc~show~3 - +proc~show + nurbs_curve%show - + -program~shape_c_1d->proc~show~3 +program~shape_c_1d->proc~show - + -interface~compute_xg~3 - +interface~compute_xg + compute_Xg - + -proc~create~3->interface~compute_xg~3 +proc~create->interface~compute_xg - + -proc~is_rational~3 - +proc~is_rational + nurbs_curve%is_rational - + -proc~create~3->proc~is_rational~3 +proc~create->proc~is_rational - + -proc~cmp_elem_xc_vis~3 - +proc~cmp_elem_xc_vis + nurbs_curve%cmp_elem_Xc_vis - + -proc~export_xc~3->proc~cmp_elem_xc_vis~3 +proc~export_xc->proc~cmp_elem_xc_vis - + -proc~cmp_elem_xg_vis~3 - +proc~cmp_elem_xg_vis + nurbs_curve%cmp_elem_Xg_vis - + -proc~export_xg~3->proc~cmp_elem_xg_vis~3 +proc~export_xg->proc~cmp_elem_xg_vis - + -none~set~3 - +none~set + nurbs_curve%set - + -proc~set_c~3->none~set~3 +proc~set_c->none~set - + -proc~set1a - - -nurbs_curve%set1a +proc~set1 + + +nurbs_curve%set1 - + -none~set~3->proc~set1a +none~set->proc~set1 - + -proc~set1~3 - - -nurbs_curve%set1 +proc~set1a + + +nurbs_curve%set1a - + -none~set~3->proc~set1~3 +none~set->proc~set1a - + -proc~set2~3 - +proc~set2 + nurbs_curve%set2 - + -none~set~3->proc~set2~3 +none~set->proc~set2 - + -proc~set3~3 - +proc~set3 + nurbs_curve%set3 - + -none~set~3->proc~set3~3 +none~set->proc~set3 - + -proc~set4~3 - +proc~set4 + nurbs_curve%set4 - + -none~set~3->proc~set4~3 +none~set->proc~set4 @@ -634,15 +634,15 @@

                          Calls

                          - + -proc~cmp_elem_xc_vis~3->interface~elemconn_c0 +proc~cmp_elem_xc_vis->interface~elemconn_c0 - + -proc~cmp_elem_xg_vis~3->interface~elemconn_c0 +proc~cmp_elem_xg_vis->interface~elemconn_c0 @@ -691,26 +691,26 @@

                          Calls

                          - + -proc~cmp_degree~3 - +proc~cmp_degree + nurbs_curve%cmp_degree - + -proc~set1a->proc~cmp_degree~3 +proc~set1->proc~cmp_degree - + -proc~set1~3->proc~cmp_degree~3 - - +proc~set1a->proc~cmp_degree + + @@ -721,30 +721,30 @@

                          Calls

                          - + -proc~set2~3->proc~compute_knot_vector +proc~set2->proc~compute_knot_vector - + -proc~set3~3->proc~cmp_degree~3 +proc~set3->proc~cmp_degree - + -proc~get_multiplicity~3 - +proc~get_multiplicity + nurbs_curve%get_multiplicity - + -proc~cmp_degree~3->proc~get_multiplicity~3 +proc~cmp_degree->proc~get_multiplicity @@ -772,9 +772,9 @@

                          Calls

                          - + -proc~get_multiplicity~3->interface~compute_multiplicity +proc~get_multiplicity->interface~compute_multiplicity @@ -911,7 +911,7 @@

                          Variables

                          - + type(nurbs_curve) @@ -958,7 +958,7 @@

                          Variables

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/program/shape_c_2d.html b/program/shape_c_2d.html index 35abce81f..775c83e50 100644 --- a/program/shape_c_2d.html +++ b/program/shape_c_2d.html @@ -115,7 +115,7 @@

                          Variables

                          - shape + shape
                          @@ -385,108 +385,108 @@

                          Calls

                          shape_C_2d - + -proc~create~2 - +proc~create~3 + nurbs_surface%create - + -program~shape_c_2d->proc~create~2 +program~shape_c_2d->proc~create~3 - + -proc~export_xc~2 - +proc~export_xc~3 + nurbs_surface%export_Xc - + -program~shape_c_2d->proc~export_xc~2 +program~shape_c_2d->proc~export_xc~3 - + -proc~export_xg~2 - +proc~export_xg~3 + nurbs_surface%export_Xg - + -program~shape_c_2d->proc~export_xg~2 +program~shape_c_2d->proc~export_xg~3 - + -proc~finalize~2 - +proc~finalize~3 + nurbs_surface%finalize - + -program~shape_c_2d->proc~finalize~2 +program~shape_c_2d->proc~finalize~3 - + -proc~set_c~2 - +proc~set_c~3 + nurbs_surface%set_C - + -program~shape_c_2d->proc~set_c~2 +program~shape_c_2d->proc~set_c~3 - + -proc~show~2 - +proc~show~3 + nurbs_surface%show - + -program~shape_c_2d->proc~show~2 +program~shape_c_2d->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 @@ -499,69 +499,69 @@

                          Calls

                          - + -proc~create~2->interface~ndgrid +proc~create~3->interface~ndgrid - + -proc~is_rational~2 - +proc~is_rational~3 + nurbs_surface%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_surface%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_surface%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_surface%set - + -proc~set_c~2->none~set~2 +proc~set_c~3->none~set~3 @@ -595,63 +595,63 @@

                          Calls

                          - + -proc~set1~2 - +proc~set1~3 + nurbs_surface%set1 - + -none~set~2->proc~set1~2 +none~set~3->proc~set1~3 - + -proc~set2~2 - +proc~set2~3 + nurbs_surface%set2 - + -none~set~2->proc~set2~2 +none~set~3->proc~set2~3 - + -proc~set3~2 - +proc~set3~3 + nurbs_surface%set3 - + -none~set~2->proc~set3~2 +none~set~3->proc~set3~3 - + -proc~set4~2 - +proc~set4~3 + nurbs_surface%set4 - + -none~set~2->proc~set4~2 +none~set~3->proc~set4~3 @@ -664,15 +664,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 @@ -721,39 +721,39 @@

                          Calls

                          - + -proc~cmp_degree~2 - +proc~cmp_degree~3 + nurbs_surface%cmp_degree - + -proc~set1~2->proc~cmp_degree~2 +proc~set1~3->proc~cmp_degree~3 - + -proc~cmp_nc~2 - +proc~cmp_nc~3 + nurbs_surface%cmp_nc - + -proc~set1~2->proc~cmp_nc~2 +proc~set1~3->proc~cmp_nc~3 - + -proc~set2~2->proc~cmp_nc~2 +proc~set2~3->proc~cmp_nc~3 @@ -766,30 +766,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_surface%get_multiplicity - + -proc~cmp_degree~2->proc~get_multiplicity~2 +proc~cmp_degree~3->proc~get_multiplicity~3 @@ -802,9 +802,9 @@

                          Calls

                          - + -proc~cmp_nc~2->interface~compute_multiplicity +proc~cmp_nc~3->interface~compute_multiplicity @@ -853,9 +853,9 @@

                          Calls

                          - + -proc~get_multiplicity~2->interface~compute_multiplicity +proc~get_multiplicity~3->interface~compute_multiplicity @@ -962,7 +962,7 @@

                          Variables

                          - + type(nurbs_surface) @@ -1009,7 +1009,7 @@

                          Variables

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/program/shape_c_3d.html b/program/shape_c_3d.html index df741394a..c630f3f59 100644 --- a/program/shape_c_3d.html +++ b/program/shape_c_3d.html @@ -115,7 +115,7 @@

                          Variables

                          - shape + shape
                          @@ -385,108 +385,108 @@

                          Calls

                          shape_C_3d - + -proc~create - +proc~create~2 + nurbs_volume%create - + -program~shape_c_3d->proc~create +program~shape_c_3d->proc~create~2 - + -proc~export_xc - +proc~export_xc~2 + nurbs_volume%export_Xc - + -program~shape_c_3d->proc~export_xc +program~shape_c_3d->proc~export_xc~2 - + -proc~export_xg - +proc~export_xg~2 + nurbs_volume%export_Xg - + -program~shape_c_3d->proc~export_xg +program~shape_c_3d->proc~export_xg~2 - + -proc~finalize - +proc~finalize~2 + nurbs_volume%finalize - + -program~shape_c_3d->proc~finalize +program~shape_c_3d->proc~finalize~2 - + -proc~set_c - +proc~set_c~2 + nurbs_volume%set_C - + -program~shape_c_3d->proc~set_c +program~shape_c_3d->proc~set_c~2 - + -proc~show - +proc~show~2 + nurbs_volume%show - + -program~shape_c_3d->proc~show +program~shape_c_3d->proc~show~2 - + -interface~compute_xg - +interface~compute_xg~2 + compute_Xg - + -proc~create->interface~compute_xg +proc~create~2->interface~compute_xg~2 @@ -499,69 +499,69 @@

                          Calls

                          - + -proc~create->interface~ndgrid +proc~create~2->interface~ndgrid - + -proc~is_rational - +proc~is_rational~2 + nurbs_volume%is_rational - + -proc~create->proc~is_rational +proc~create~2->proc~is_rational~2 - + -proc~cmp_elem_xc_vis - +proc~cmp_elem_xc_vis~2 + nurbs_volume%cmp_elem_Xc_vis - + -proc~export_xc->proc~cmp_elem_xc_vis +proc~export_xc~2->proc~cmp_elem_xc_vis~2 - + -proc~cmp_elem_xg_vis - +proc~cmp_elem_xg_vis~2 + nurbs_volume%cmp_elem_Xg_vis - + -proc~export_xg->proc~cmp_elem_xg_vis +proc~export_xg~2->proc~cmp_elem_xg_vis~2 - + -none~set - +none~set~2 + nurbs_volume%set - + -proc~set_c->none~set +proc~set_c~2->none~set~2 @@ -595,63 +595,63 @@

                          Calls

                          - + -proc~set1 - +proc~set1~2 + nurbs_volume%set1 - + -none~set->proc~set1 +none~set~2->proc~set1~2 - + -proc~set2 - +proc~set2~2 + nurbs_volume%set2 - + -none~set->proc~set2 +none~set~2->proc~set2~2 - + -proc~set3 - +proc~set3~2 + nurbs_volume%set3 - + -none~set->proc~set3 +none~set~2->proc~set3~2 - + -proc~set4 - +proc~set4~2 + nurbs_volume%set4 - + -none~set->proc~set4 +none~set~2->proc~set4~2 @@ -664,15 +664,15 @@

                          Calls

                          - + -proc~cmp_elem_xc_vis->interface~elemconn_c0 +proc~cmp_elem_xc_vis~2->interface~elemconn_c0 - + -proc~cmp_elem_xg_vis->interface~elemconn_c0 +proc~cmp_elem_xg_vis~2->interface~elemconn_c0 @@ -721,39 +721,39 @@

                          Calls

                          - + -proc~cmp_degree - +proc~cmp_degree~2 + nurbs_volume%cmp_degree - + -proc~set1->proc~cmp_degree +proc~set1~2->proc~cmp_degree~2 - + -proc~cmp_nc - +proc~cmp_nc~2 + nurbs_volume%cmp_nc - + -proc~set1->proc~cmp_nc +proc~set1~2->proc~cmp_nc~2 - + -proc~set2->proc~cmp_nc +proc~set2~2->proc~cmp_nc~2 @@ -766,30 +766,30 @@

                          Calls

                          - + -proc~set2->proc~compute_knot_vector +proc~set2~2->proc~compute_knot_vector - + -proc~set3->proc~cmp_degree +proc~set3~2->proc~cmp_degree~2 - + -proc~get_multiplicity - +proc~get_multiplicity~2 + nurbs_volume%get_multiplicity - + -proc~cmp_degree->proc~get_multiplicity +proc~cmp_degree~2->proc~get_multiplicity~2 @@ -802,9 +802,9 @@

                          Calls

                          - + -proc~cmp_nc->interface~compute_multiplicity +proc~cmp_nc~2->interface~compute_multiplicity @@ -853,9 +853,9 @@

                          Calls

                          - + -proc~get_multiplicity->interface~compute_multiplicity +proc~get_multiplicity~2->interface~compute_multiplicity @@ -962,7 +962,7 @@

                          Variables

                          - + type(nurbs_volume) @@ -1009,7 +1009,7 @@

                          Variables

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/program/shape_circle.html b/program/shape_circle.html index 832089837..49d127237 100644 --- a/program/shape_circle.html +++ b/program/shape_circle.html @@ -115,7 +115,7 @@

                          Variables

                          - shape + shape
                          @@ -385,63 +385,63 @@

                          Calls

                          shape_circle - + -proc~create~3 - +proc~create + nurbs_curve%create - + -program~shape_circle->proc~create~3 +program~shape_circle->proc~create - + -proc~export_xc~3 - +proc~export_xc + nurbs_curve%export_Xc - + -program~shape_circle->proc~export_xc~3 +program~shape_circle->proc~export_xc - + -proc~export_xg~3 - +proc~export_xg + nurbs_curve%export_Xg - + -program~shape_circle->proc~export_xg~3 +program~shape_circle->proc~export_xg - + -proc~finalize~3 - +proc~finalize + nurbs_curve%finalize - + -program~shape_circle->proc~finalize~3 +program~shape_circle->proc~finalize @@ -460,168 +460,168 @@

                          Calls

                          - + -proc~show~3 - +proc~show + nurbs_curve%show - + -program~shape_circle->proc~show~3 +program~shape_circle->proc~show - + -interface~compute_xg~3 - +interface~compute_xg + compute_Xg - + -proc~create~3->interface~compute_xg~3 +proc~create->interface~compute_xg - + -proc~is_rational~3 - +proc~is_rational + nurbs_curve%is_rational - + -proc~create~3->proc~is_rational~3 +proc~create->proc~is_rational - + -proc~cmp_elem_xc_vis~3 - +proc~cmp_elem_xc_vis + nurbs_curve%cmp_elem_Xc_vis - + -proc~export_xc~3->proc~cmp_elem_xc_vis~3 +proc~export_xc->proc~cmp_elem_xc_vis - + -proc~cmp_elem_xg_vis~3 - +proc~cmp_elem_xg_vis + nurbs_curve%cmp_elem_Xg_vis - + -proc~export_xg~3->proc~cmp_elem_xg_vis~3 +proc~export_xg->proc~cmp_elem_xg_vis - + -none~set~3 - +none~set + nurbs_curve%set - + -proc~set_circle->none~set~3 +proc~set_circle->none~set - + -proc~set1a - - -nurbs_curve%set1a +proc~set1 + + +nurbs_curve%set1 - + -none~set~3->proc~set1a +none~set->proc~set1 - + -proc~set1~3 - - -nurbs_curve%set1 +proc~set1a + + +nurbs_curve%set1a - + -none~set~3->proc~set1~3 +none~set->proc~set1a - + -proc~set2~3 - +proc~set2 + nurbs_curve%set2 - + -none~set~3->proc~set2~3 +none~set->proc~set2 - + -proc~set3~3 - +proc~set3 + nurbs_curve%set3 - + -none~set~3->proc~set3~3 +none~set->proc~set3 - + -proc~set4~3 - +proc~set4 + nurbs_curve%set4 - + -none~set~3->proc~set4~3 +none~set->proc~set4 @@ -634,15 +634,15 @@

                          Calls

                          - + -proc~cmp_elem_xc_vis~3->interface~elemconn_c0 +proc~cmp_elem_xc_vis->interface~elemconn_c0 - + -proc~cmp_elem_xg_vis~3->interface~elemconn_c0 +proc~cmp_elem_xg_vis->interface~elemconn_c0 @@ -691,26 +691,26 @@

                          Calls

                          - + -proc~cmp_degree~3 - +proc~cmp_degree + nurbs_curve%cmp_degree - + -proc~set1a->proc~cmp_degree~3 +proc~set1->proc~cmp_degree - + -proc~set1~3->proc~cmp_degree~3 - - +proc~set1a->proc~cmp_degree + + @@ -721,30 +721,30 @@

                          Calls

                          - + -proc~set2~3->proc~compute_knot_vector +proc~set2->proc~compute_knot_vector - + -proc~set3~3->proc~cmp_degree~3 +proc~set3->proc~cmp_degree - + -proc~get_multiplicity~3 - +proc~get_multiplicity + nurbs_curve%get_multiplicity - + -proc~cmp_degree~3->proc~get_multiplicity~3 +proc~cmp_degree->proc~get_multiplicity @@ -772,9 +772,9 @@

                          Calls

                          - + -proc~get_multiplicity~3->interface~compute_multiplicity +proc~get_multiplicity->interface~compute_multiplicity @@ -911,7 +911,7 @@

                          Variables

                          - + type(nurbs_curve) @@ -958,7 +958,7 @@

                          Variables

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/program/shape_half_circle.html b/program/shape_half_circle.html index 998f6ced0..c529be0ac 100644 --- a/program/shape_half_circle.html +++ b/program/shape_half_circle.html @@ -115,7 +115,7 @@

                          Variables

                          - shape + shape
                          @@ -385,63 +385,63 @@

                          Calls

                          shape_half_circle - + -proc~create~3 - +proc~create + nurbs_curve%create - + -program~shape_half_circle->proc~create~3 +program~shape_half_circle->proc~create - + -proc~export_xc~3 - +proc~export_xc + nurbs_curve%export_Xc - + -program~shape_half_circle->proc~export_xc~3 +program~shape_half_circle->proc~export_xc - + -proc~export_xg~3 - +proc~export_xg + nurbs_curve%export_Xg - + -program~shape_half_circle->proc~export_xg~3 +program~shape_half_circle->proc~export_xg - + -proc~finalize~3 - +proc~finalize + nurbs_curve%finalize - + -program~shape_half_circle->proc~finalize~3 +program~shape_half_circle->proc~finalize @@ -460,168 +460,168 @@

                          Calls

                          - + -proc~show~3 - +proc~show + nurbs_curve%show - + -program~shape_half_circle->proc~show~3 +program~shape_half_circle->proc~show - + -interface~compute_xg~3 - +interface~compute_xg + compute_Xg - + -proc~create~3->interface~compute_xg~3 +proc~create->interface~compute_xg - + -proc~is_rational~3 - +proc~is_rational + nurbs_curve%is_rational - + -proc~create~3->proc~is_rational~3 +proc~create->proc~is_rational - + -proc~cmp_elem_xc_vis~3 - +proc~cmp_elem_xc_vis + nurbs_curve%cmp_elem_Xc_vis - + -proc~export_xc~3->proc~cmp_elem_xc_vis~3 +proc~export_xc->proc~cmp_elem_xc_vis - + -proc~cmp_elem_xg_vis~3 - +proc~cmp_elem_xg_vis + nurbs_curve%cmp_elem_Xg_vis - + -proc~export_xg~3->proc~cmp_elem_xg_vis~3 +proc~export_xg->proc~cmp_elem_xg_vis - + -none~set~3 - +none~set + nurbs_curve%set - + -proc~set_half_circle->none~set~3 +proc~set_half_circle->none~set - + -proc~set1a - - -nurbs_curve%set1a +proc~set1 + + +nurbs_curve%set1 - + -none~set~3->proc~set1a +none~set->proc~set1 - + -proc~set1~3 - - -nurbs_curve%set1 +proc~set1a + + +nurbs_curve%set1a - + -none~set~3->proc~set1~3 +none~set->proc~set1a - + -proc~set2~3 - +proc~set2 + nurbs_curve%set2 - + -none~set~3->proc~set2~3 +none~set->proc~set2 - + -proc~set3~3 - +proc~set3 + nurbs_curve%set3 - + -none~set~3->proc~set3~3 +none~set->proc~set3 - + -proc~set4~3 - +proc~set4 + nurbs_curve%set4 - + -none~set~3->proc~set4~3 +none~set->proc~set4 @@ -634,15 +634,15 @@

                          Calls

                          - + -proc~cmp_elem_xc_vis~3->interface~elemconn_c0 +proc~cmp_elem_xc_vis->interface~elemconn_c0 - + -proc~cmp_elem_xg_vis~3->interface~elemconn_c0 +proc~cmp_elem_xg_vis->interface~elemconn_c0 @@ -691,26 +691,26 @@

                          Calls

                          - + -proc~cmp_degree~3 - +proc~cmp_degree + nurbs_curve%cmp_degree - + -proc~set1a->proc~cmp_degree~3 +proc~set1->proc~cmp_degree - + -proc~set1~3->proc~cmp_degree~3 - - +proc~set1a->proc~cmp_degree + + @@ -721,30 +721,30 @@

                          Calls

                          - + -proc~set2~3->proc~compute_knot_vector +proc~set2->proc~compute_knot_vector - + -proc~set3~3->proc~cmp_degree~3 +proc~set3->proc~cmp_degree - + -proc~get_multiplicity~3 - +proc~get_multiplicity + nurbs_curve%get_multiplicity - + -proc~cmp_degree~3->proc~get_multiplicity~3 +proc~cmp_degree->proc~get_multiplicity @@ -772,9 +772,9 @@

                          Calls

                          - + -proc~get_multiplicity~3->interface~compute_multiplicity +proc~get_multiplicity->interface~compute_multiplicity @@ -911,7 +911,7 @@

                          Variables

                          - + type(nurbs_curve) @@ -958,7 +958,7 @@

                          Variables

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/program/shape_half_ring_2d.html b/program/shape_half_ring_2d.html index 59d0ce0a8..e3202f8ed 100644 --- a/program/shape_half_ring_2d.html +++ b/program/shape_half_ring_2d.html @@ -115,7 +115,7 @@

                          Variables

                          - shape + shape
                          @@ -385,63 +385,63 @@

                          Calls

                          shape_half_ring_2d - + -proc~create~2 - +proc~create~3 + nurbs_surface%create - + -program~shape_half_ring_2d->proc~create~2 +program~shape_half_ring_2d->proc~create~3 - + -proc~export_xc~2 - +proc~export_xc~3 + nurbs_surface%export_Xc - + -program~shape_half_ring_2d->proc~export_xc~2 +program~shape_half_ring_2d->proc~export_xc~3 - + -proc~export_xg~2 - +proc~export_xg~3 + nurbs_surface%export_Xg - + -program~shape_half_ring_2d->proc~export_xg~2 +program~shape_half_ring_2d->proc~export_xg~3 - + -proc~finalize~2 - +proc~finalize~3 + nurbs_surface%finalize - + -program~shape_half_ring_2d->proc~finalize~2 +program~shape_half_ring_2d->proc~finalize~3 @@ -460,33 +460,33 @@

                          Calls

                          - + -proc~show~2 - +proc~show~3 + nurbs_surface%show - + -program~shape_half_ring_2d->proc~show~2 +program~shape_half_ring_2d->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 @@ -499,69 +499,69 @@

                          Calls

                          - + -proc~create~2->interface~ndgrid +proc~create~3->interface~ndgrid - + -proc~is_rational~2 - +proc~is_rational~3 + nurbs_surface%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_surface%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_surface%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_surface%set - + -proc~set_half_ring~2->none~set~2 +proc~set_half_ring~2->none~set~3 @@ -595,63 +595,63 @@

                          Calls

                          - + -proc~set1~2 - +proc~set1~3 + nurbs_surface%set1 - + -none~set~2->proc~set1~2 +none~set~3->proc~set1~3 - + -proc~set2~2 - +proc~set2~3 + nurbs_surface%set2 - + -none~set~2->proc~set2~2 +none~set~3->proc~set2~3 - + -proc~set3~2 - +proc~set3~3 + nurbs_surface%set3 - + -none~set~2->proc~set3~2 +none~set~3->proc~set3~3 - + -proc~set4~2 - +proc~set4~3 + nurbs_surface%set4 - + -none~set~2->proc~set4~2 +none~set~3->proc~set4~3 @@ -664,15 +664,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 @@ -721,39 +721,39 @@

                          Calls

                          - + -proc~cmp_degree~2 - +proc~cmp_degree~3 + nurbs_surface%cmp_degree - + -proc~set1~2->proc~cmp_degree~2 +proc~set1~3->proc~cmp_degree~3 - + -proc~cmp_nc~2 - +proc~cmp_nc~3 + nurbs_surface%cmp_nc - + -proc~set1~2->proc~cmp_nc~2 +proc~set1~3->proc~cmp_nc~3 - + -proc~set2~2->proc~cmp_nc~2 +proc~set2~3->proc~cmp_nc~3 @@ -766,30 +766,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_surface%get_multiplicity - + -proc~cmp_degree~2->proc~get_multiplicity~2 +proc~cmp_degree~3->proc~get_multiplicity~3 @@ -802,9 +802,9 @@

                          Calls

                          - + -proc~cmp_nc~2->interface~compute_multiplicity +proc~cmp_nc~3->interface~compute_multiplicity @@ -853,9 +853,9 @@

                          Calls

                          - + -proc~get_multiplicity~2->interface~compute_multiplicity +proc~get_multiplicity~3->interface~compute_multiplicity @@ -962,7 +962,7 @@

                          Variables

                          - + type(nurbs_surface) @@ -1009,7 +1009,7 @@

                          Variables

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/program/shape_half_ring_3d.html b/program/shape_half_ring_3d.html index 1b25e6d49..90f73dc4a 100644 --- a/program/shape_half_ring_3d.html +++ b/program/shape_half_ring_3d.html @@ -115,7 +115,7 @@

                          Variables

                          - shape + shape
                          @@ -385,63 +385,63 @@

                          Calls

                          shape_half_ring_3d - + -proc~create - +proc~create~2 + nurbs_volume%create - + -program~shape_half_ring_3d->proc~create +program~shape_half_ring_3d->proc~create~2 - + -proc~export_xc - +proc~export_xc~2 + nurbs_volume%export_Xc - + -program~shape_half_ring_3d->proc~export_xc +program~shape_half_ring_3d->proc~export_xc~2 - + -proc~export_xg - +proc~export_xg~2 + nurbs_volume%export_Xg - + -program~shape_half_ring_3d->proc~export_xg +program~shape_half_ring_3d->proc~export_xg~2 - + -proc~finalize - +proc~finalize~2 + nurbs_volume%finalize - + -program~shape_half_ring_3d->proc~finalize +program~shape_half_ring_3d->proc~finalize~2 @@ -460,33 +460,33 @@

                          Calls

                          - + -proc~show - +proc~show~2 + nurbs_volume%show - + -program~shape_half_ring_3d->proc~show +program~shape_half_ring_3d->proc~show~2 - + -interface~compute_xg - +interface~compute_xg~2 + compute_Xg - + -proc~create->interface~compute_xg +proc~create~2->interface~compute_xg~2 @@ -499,69 +499,69 @@

                          Calls

                          - + -proc~create->interface~ndgrid +proc~create~2->interface~ndgrid - + -proc~is_rational - +proc~is_rational~2 + nurbs_volume%is_rational - + -proc~create->proc~is_rational +proc~create~2->proc~is_rational~2 - + -proc~cmp_elem_xc_vis - +proc~cmp_elem_xc_vis~2 + nurbs_volume%cmp_elem_Xc_vis - + -proc~export_xc->proc~cmp_elem_xc_vis +proc~export_xc~2->proc~cmp_elem_xc_vis~2 - + -proc~cmp_elem_xg_vis - +proc~cmp_elem_xg_vis~2 + nurbs_volume%cmp_elem_Xg_vis - + -proc~export_xg->proc~cmp_elem_xg_vis +proc~export_xg~2->proc~cmp_elem_xg_vis~2 - + -none~set - +none~set~2 + nurbs_volume%set - + -proc~set_half_ring->none~set +proc~set_half_ring->none~set~2 @@ -595,63 +595,63 @@

                          Calls

                          - + -proc~set1 - +proc~set1~2 + nurbs_volume%set1 - + -none~set->proc~set1 +none~set~2->proc~set1~2 - + -proc~set2 - +proc~set2~2 + nurbs_volume%set2 - + -none~set->proc~set2 +none~set~2->proc~set2~2 - + -proc~set3 - +proc~set3~2 + nurbs_volume%set3 - + -none~set->proc~set3 +none~set~2->proc~set3~2 - + -proc~set4 - +proc~set4~2 + nurbs_volume%set4 - + -none~set->proc~set4 +none~set~2->proc~set4~2 @@ -664,15 +664,15 @@

                          Calls

                          - + -proc~cmp_elem_xc_vis->interface~elemconn_c0 +proc~cmp_elem_xc_vis~2->interface~elemconn_c0 - + -proc~cmp_elem_xg_vis->interface~elemconn_c0 +proc~cmp_elem_xg_vis~2->interface~elemconn_c0 @@ -721,39 +721,39 @@

                          Calls

                          - + -proc~cmp_degree - +proc~cmp_degree~2 + nurbs_volume%cmp_degree - + -proc~set1->proc~cmp_degree +proc~set1~2->proc~cmp_degree~2 - + -proc~cmp_nc - +proc~cmp_nc~2 + nurbs_volume%cmp_nc - + -proc~set1->proc~cmp_nc +proc~set1~2->proc~cmp_nc~2 - + -proc~set2->proc~cmp_nc +proc~set2~2->proc~cmp_nc~2 @@ -766,30 +766,30 @@

                          Calls

                          - + -proc~set2->proc~compute_knot_vector +proc~set2~2->proc~compute_knot_vector - + -proc~set3->proc~cmp_degree +proc~set3~2->proc~cmp_degree~2 - + -proc~get_multiplicity - +proc~get_multiplicity~2 + nurbs_volume%get_multiplicity - + -proc~cmp_degree->proc~get_multiplicity +proc~cmp_degree~2->proc~get_multiplicity~2 @@ -802,9 +802,9 @@

                          Calls

                          - + -proc~cmp_nc->interface~compute_multiplicity +proc~cmp_nc~2->interface~compute_multiplicity @@ -853,9 +853,9 @@

                          Calls

                          - + -proc~get_multiplicity->interface~compute_multiplicity +proc~get_multiplicity~2->interface~compute_multiplicity @@ -962,7 +962,7 @@

                          Variables

                          - + type(nurbs_volume) @@ -1009,7 +1009,7 @@

                          Variables

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/program/shape_hexahedron.html b/program/shape_hexahedron.html index f175f2237..7ab36e147 100644 --- a/program/shape_hexahedron.html +++ b/program/shape_hexahedron.html @@ -115,7 +115,7 @@

                          Variables

                          - shape + shape
                          @@ -386,63 +386,63 @@

                          Calls

                          shape_hexahedron - + -proc~create - +proc~create~2 + nurbs_volume%create - + -program~shape_hexahedron->proc~create +program~shape_hexahedron->proc~create~2 - + -proc~export_xc - +proc~export_xc~2 + nurbs_volume%export_Xc - + -program~shape_hexahedron->proc~export_xc +program~shape_hexahedron->proc~export_xc~2 - + -proc~export_xg - +proc~export_xg~2 + nurbs_volume%export_Xg - + -program~shape_hexahedron->proc~export_xg +program~shape_hexahedron->proc~export_xg~2 - + -proc~finalize - +proc~finalize~2 + nurbs_volume%finalize - + -program~shape_hexahedron->proc~finalize +program~shape_hexahedron->proc~finalize~2 @@ -461,33 +461,33 @@

                          Calls

                          - + -proc~show - +proc~show~2 + nurbs_volume%show - + -program~shape_hexahedron->proc~show +program~shape_hexahedron->proc~show~2 - + -interface~compute_xg - +interface~compute_xg~2 + compute_Xg - + -proc~create->interface~compute_xg +proc~create~2->interface~compute_xg~2 @@ -500,69 +500,69 @@

                          Calls

                          - + -proc~create->interface~ndgrid +proc~create~2->interface~ndgrid - + -proc~is_rational - +proc~is_rational~2 + nurbs_volume%is_rational - + -proc~create->proc~is_rational +proc~create~2->proc~is_rational~2 - + -proc~cmp_elem_xc_vis - +proc~cmp_elem_xc_vis~2 + nurbs_volume%cmp_elem_Xc_vis - + -proc~export_xc->proc~cmp_elem_xc_vis +proc~export_xc~2->proc~cmp_elem_xc_vis~2 - + -proc~cmp_elem_xg_vis - +proc~cmp_elem_xg_vis~2 + nurbs_volume%cmp_elem_Xg_vis - + -proc~export_xg->proc~cmp_elem_xg_vis +proc~export_xg~2->proc~cmp_elem_xg_vis~2 - + -none~set - +none~set~2 + nurbs_volume%set - + -proc~set_hexahedron->none~set +proc~set_hexahedron->none~set~2 @@ -611,63 +611,63 @@

                          Calls

                          - + -proc~set1 - +proc~set1~2 + nurbs_volume%set1 - + -none~set->proc~set1 +none~set~2->proc~set1~2 - + -proc~set2 - +proc~set2~2 + nurbs_volume%set2 - + -none~set->proc~set2 +none~set~2->proc~set2~2 - + -proc~set3 - +proc~set3~2 + nurbs_volume%set3 - + -none~set->proc~set3 +none~set~2->proc~set3~2 - + -proc~set4 - +proc~set4~2 + nurbs_volume%set4 - + -none~set->proc~set4 +none~set~2->proc~set4~2 @@ -680,15 +680,15 @@

                          Calls

                          - + -proc~cmp_elem_xc_vis->interface~elemconn_c0 +proc~cmp_elem_xc_vis~2->interface~elemconn_c0 - + -proc~cmp_elem_xg_vis->interface~elemconn_c0 +proc~cmp_elem_xg_vis~2->interface~elemconn_c0 @@ -737,39 +737,39 @@

                          Calls

                          - + -proc~cmp_degree - +proc~cmp_degree~2 + nurbs_volume%cmp_degree - + -proc~set1->proc~cmp_degree +proc~set1~2->proc~cmp_degree~2 - + -proc~cmp_nc - +proc~cmp_nc~2 + nurbs_volume%cmp_nc - + -proc~set1->proc~cmp_nc +proc~set1~2->proc~cmp_nc~2 - + -proc~set2->proc~cmp_nc +proc~set2~2->proc~cmp_nc~2 @@ -782,30 +782,30 @@

                          Calls

                          - + -proc~set2->proc~compute_knot_vector +proc~set2~2->proc~compute_knot_vector - + -proc~set3->proc~cmp_degree +proc~set3~2->proc~cmp_degree~2 - + -proc~get_multiplicity - +proc~get_multiplicity~2 + nurbs_volume%get_multiplicity - + -proc~cmp_degree->proc~get_multiplicity +proc~cmp_degree~2->proc~get_multiplicity~2 @@ -818,9 +818,9 @@

                          Calls

                          - + -proc~cmp_nc->interface~compute_multiplicity +proc~cmp_nc~2->interface~compute_multiplicity @@ -869,9 +869,9 @@

                          Calls

                          - + -proc~get_multiplicity->interface~compute_multiplicity +proc~get_multiplicity~2->interface~compute_multiplicity @@ -978,7 +978,7 @@

                          Variables

                          - + type(nurbs_volume) @@ -1025,7 +1025,7 @@

                          Variables

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/program/shape_ring_2d.html b/program/shape_ring_2d.html index 2c9459bda..fef0270d4 100644 --- a/program/shape_ring_2d.html +++ b/program/shape_ring_2d.html @@ -115,7 +115,7 @@

                          Variables

                          - shape + shape
                          @@ -385,63 +385,63 @@

                          Calls

                          shape_ring_2d - + -proc~create~2 - +proc~create~3 + nurbs_surface%create - + -program~shape_ring_2d->proc~create~2 +program~shape_ring_2d->proc~create~3 - + -proc~export_xc~2 - +proc~export_xc~3 + nurbs_surface%export_Xc - + -program~shape_ring_2d->proc~export_xc~2 +program~shape_ring_2d->proc~export_xc~3 - + -proc~export_xg~2 - +proc~export_xg~3 + nurbs_surface%export_Xg - + -program~shape_ring_2d->proc~export_xg~2 +program~shape_ring_2d->proc~export_xg~3 - + -proc~finalize~2 - +proc~finalize~3 + nurbs_surface%finalize - + -program~shape_ring_2d->proc~finalize~2 +program~shape_ring_2d->proc~finalize~3 @@ -460,33 +460,33 @@

                          Calls

                          - + -proc~show~2 - +proc~show~3 + nurbs_surface%show - + -program~shape_ring_2d->proc~show~2 +program~shape_ring_2d->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 @@ -499,69 +499,69 @@

                          Calls

                          - + -proc~create~2->interface~ndgrid +proc~create~3->interface~ndgrid - + -proc~is_rational~2 - +proc~is_rational~3 + nurbs_surface%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_surface%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_surface%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_surface%set - + -proc~set_ring~2->none~set~2 +proc~set_ring~2->none~set~3 @@ -595,63 +595,63 @@

                          Calls

                          - + -proc~set1~2 - +proc~set1~3 + nurbs_surface%set1 - + -none~set~2->proc~set1~2 +none~set~3->proc~set1~3 - + -proc~set2~2 - +proc~set2~3 + nurbs_surface%set2 - + -none~set~2->proc~set2~2 +none~set~3->proc~set2~3 - + -proc~set3~2 - +proc~set3~3 + nurbs_surface%set3 - + -none~set~2->proc~set3~2 +none~set~3->proc~set3~3 - + -proc~set4~2 - +proc~set4~3 + nurbs_surface%set4 - + -none~set~2->proc~set4~2 +none~set~3->proc~set4~3 @@ -664,15 +664,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 @@ -721,39 +721,39 @@

                          Calls

                          - + -proc~cmp_degree~2 - +proc~cmp_degree~3 + nurbs_surface%cmp_degree - + -proc~set1~2->proc~cmp_degree~2 +proc~set1~3->proc~cmp_degree~3 - + -proc~cmp_nc~2 - +proc~cmp_nc~3 + nurbs_surface%cmp_nc - + -proc~set1~2->proc~cmp_nc~2 +proc~set1~3->proc~cmp_nc~3 - + -proc~set2~2->proc~cmp_nc~2 +proc~set2~3->proc~cmp_nc~3 @@ -766,30 +766,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_surface%get_multiplicity - + -proc~cmp_degree~2->proc~get_multiplicity~2 +proc~cmp_degree~3->proc~get_multiplicity~3 @@ -802,9 +802,9 @@

                          Calls

                          - + -proc~cmp_nc~2->interface~compute_multiplicity +proc~cmp_nc~3->interface~compute_multiplicity @@ -853,9 +853,9 @@

                          Calls

                          - + -proc~get_multiplicity~2->interface~compute_multiplicity +proc~get_multiplicity~3->interface~compute_multiplicity @@ -962,7 +962,7 @@

                          Variables

                          - + type(nurbs_surface) @@ -1009,7 +1009,7 @@

                          Variables

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/program/shape_ring_3d.html b/program/shape_ring_3d.html index ea614c691..ae91eaa47 100644 --- a/program/shape_ring_3d.html +++ b/program/shape_ring_3d.html @@ -115,7 +115,7 @@

                          Variables

                          - shape + shape
                          @@ -385,63 +385,63 @@

                          Calls

                          shape_ring_3d - + -proc~create - +proc~create~2 + nurbs_volume%create - + -program~shape_ring_3d->proc~create +program~shape_ring_3d->proc~create~2 - + -proc~export_xc - +proc~export_xc~2 + nurbs_volume%export_Xc - + -program~shape_ring_3d->proc~export_xc +program~shape_ring_3d->proc~export_xc~2 - + -proc~export_xg - +proc~export_xg~2 + nurbs_volume%export_Xg - + -program~shape_ring_3d->proc~export_xg +program~shape_ring_3d->proc~export_xg~2 - + -proc~finalize - +proc~finalize~2 + nurbs_volume%finalize - + -program~shape_ring_3d->proc~finalize +program~shape_ring_3d->proc~finalize~2 @@ -460,33 +460,33 @@

                          Calls

                          - + -proc~show - +proc~show~2 + nurbs_volume%show - + -program~shape_ring_3d->proc~show +program~shape_ring_3d->proc~show~2 - + -interface~compute_xg - +interface~compute_xg~2 + compute_Xg - + -proc~create->interface~compute_xg +proc~create~2->interface~compute_xg~2 @@ -499,69 +499,69 @@

                          Calls

                          - + -proc~create->interface~ndgrid +proc~create~2->interface~ndgrid - + -proc~is_rational - +proc~is_rational~2 + nurbs_volume%is_rational - + -proc~create->proc~is_rational +proc~create~2->proc~is_rational~2 - + -proc~cmp_elem_xc_vis - +proc~cmp_elem_xc_vis~2 + nurbs_volume%cmp_elem_Xc_vis - + -proc~export_xc->proc~cmp_elem_xc_vis +proc~export_xc~2->proc~cmp_elem_xc_vis~2 - + -proc~cmp_elem_xg_vis - +proc~cmp_elem_xg_vis~2 + nurbs_volume%cmp_elem_Xg_vis - + -proc~export_xg->proc~cmp_elem_xg_vis +proc~export_xg~2->proc~cmp_elem_xg_vis~2 - + -none~set - +none~set~2 + nurbs_volume%set - + -proc~set_ring->none~set +proc~set_ring->none~set~2 @@ -595,63 +595,63 @@

                          Calls

                          - + -proc~set1 - +proc~set1~2 + nurbs_volume%set1 - + -none~set->proc~set1 +none~set~2->proc~set1~2 - + -proc~set2 - +proc~set2~2 + nurbs_volume%set2 - + -none~set->proc~set2 +none~set~2->proc~set2~2 - + -proc~set3 - +proc~set3~2 + nurbs_volume%set3 - + -none~set->proc~set3 +none~set~2->proc~set3~2 - + -proc~set4 - +proc~set4~2 + nurbs_volume%set4 - + -none~set->proc~set4 +none~set~2->proc~set4~2 @@ -664,15 +664,15 @@

                          Calls

                          - + -proc~cmp_elem_xc_vis->interface~elemconn_c0 +proc~cmp_elem_xc_vis~2->interface~elemconn_c0 - + -proc~cmp_elem_xg_vis->interface~elemconn_c0 +proc~cmp_elem_xg_vis~2->interface~elemconn_c0 @@ -721,39 +721,39 @@

                          Calls

                          - + -proc~cmp_degree - +proc~cmp_degree~2 + nurbs_volume%cmp_degree - + -proc~set1->proc~cmp_degree +proc~set1~2->proc~cmp_degree~2 - + -proc~cmp_nc - +proc~cmp_nc~2 + nurbs_volume%cmp_nc - + -proc~set1->proc~cmp_nc +proc~set1~2->proc~cmp_nc~2 - + -proc~set2->proc~cmp_nc +proc~set2~2->proc~cmp_nc~2 @@ -766,30 +766,30 @@

                          Calls

                          - + -proc~set2->proc~compute_knot_vector +proc~set2~2->proc~compute_knot_vector - + -proc~set3->proc~cmp_degree +proc~set3~2->proc~cmp_degree~2 - + -proc~get_multiplicity - +proc~get_multiplicity~2 + nurbs_volume%get_multiplicity - + -proc~cmp_degree->proc~get_multiplicity +proc~cmp_degree~2->proc~get_multiplicity~2 @@ -802,9 +802,9 @@

                          Calls

                          - + -proc~cmp_nc->interface~compute_multiplicity +proc~cmp_nc~2->interface~compute_multiplicity @@ -853,9 +853,9 @@

                          Calls

                          - + -proc~get_multiplicity->interface~compute_multiplicity +proc~get_multiplicity~2->interface~compute_multiplicity @@ -962,7 +962,7 @@

                          Variables

                          - + type(nurbs_volume) @@ -1009,7 +1009,7 @@

                          Variables

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/program/shape_tetragon.html b/program/shape_tetragon.html index 4ec2cdbf0..093921091 100644 --- a/program/shape_tetragon.html +++ b/program/shape_tetragon.html @@ -115,7 +115,7 @@

                          Variables

                          - shape + shape
                          @@ -386,63 +386,63 @@

                          Calls

                          shape_tetragon - + -proc~create~2 - +proc~create~3 + nurbs_surface%create - + -program~shape_tetragon->proc~create~2 +program~shape_tetragon->proc~create~3 - + -proc~export_xc~2 - +proc~export_xc~3 + nurbs_surface%export_Xc - + -program~shape_tetragon->proc~export_xc~2 +program~shape_tetragon->proc~export_xc~3 - + -proc~export_xg~2 - +proc~export_xg~3 + nurbs_surface%export_Xg - + -program~shape_tetragon->proc~export_xg~2 +program~shape_tetragon->proc~export_xg~3 - + -proc~finalize~2 - +proc~finalize~3 + nurbs_surface%finalize - + -program~shape_tetragon->proc~finalize~2 +program~shape_tetragon->proc~finalize~3 @@ -461,33 +461,33 @@

                          Calls

                          - + -proc~show~2 - +proc~show~3 + nurbs_surface%show - + -program~shape_tetragon->proc~show~2 +program~shape_tetragon->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 @@ -500,69 +500,69 @@

                          Calls

                          - + -proc~create~2->interface~ndgrid +proc~create~3->interface~ndgrid - + -proc~is_rational~2 - +proc~is_rational~3 + nurbs_surface%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_surface%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_surface%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_surface%set - + -proc~set_tetragon->none~set~2 +proc~set_tetragon->none~set~3 @@ -611,63 +611,63 @@

                          Calls

                          - + -proc~set1~2 - +proc~set1~3 + nurbs_surface%set1 - + -none~set~2->proc~set1~2 +none~set~3->proc~set1~3 - + -proc~set2~2 - +proc~set2~3 + nurbs_surface%set2 - + -none~set~2->proc~set2~2 +none~set~3->proc~set2~3 - + -proc~set3~2 - +proc~set3~3 + nurbs_surface%set3 - + -none~set~2->proc~set3~2 +none~set~3->proc~set3~3 - + -proc~set4~2 - +proc~set4~3 + nurbs_surface%set4 - + -none~set~2->proc~set4~2 +none~set~3->proc~set4~3 @@ -680,15 +680,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 @@ -737,39 +737,39 @@

                          Calls

                          - + -proc~cmp_degree~2 - +proc~cmp_degree~3 + nurbs_surface%cmp_degree - + -proc~set1~2->proc~cmp_degree~2 +proc~set1~3->proc~cmp_degree~3 - + -proc~cmp_nc~2 - +proc~cmp_nc~3 + nurbs_surface%cmp_nc - + -proc~set1~2->proc~cmp_nc~2 +proc~set1~3->proc~cmp_nc~3 - + -proc~set2~2->proc~cmp_nc~2 +proc~set2~3->proc~cmp_nc~3 @@ -782,30 +782,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_surface%get_multiplicity - + -proc~cmp_degree~2->proc~get_multiplicity~2 +proc~cmp_degree~3->proc~get_multiplicity~3 @@ -818,9 +818,9 @@

                          Calls

                          - + -proc~cmp_nc~2->interface~compute_multiplicity +proc~cmp_nc~3->interface~compute_multiplicity @@ -869,9 +869,9 @@

                          Calls

                          - + -proc~get_multiplicity~2->interface~compute_multiplicity +proc~get_multiplicity~3->interface~compute_multiplicity @@ -978,7 +978,7 @@

                          Variables

                          - + type(nurbs_surface) @@ -1025,7 +1025,7 @@

                          Variables

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/search.html b/search.html index e342c7313..2bfcec2ac 100644 --- a/search.html +++ b/search.html @@ -101,7 +101,7 @@

                          Search Results

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/sourcefile/cmp_area.f90.html b/sourcefile/cmp_area.f90.html index 2cecfda36..f70405272 100644 --- a/sourcefile/cmp_area.f90.html +++ b/sourcefile/cmp_area.f90.html @@ -365,7 +365,7 @@

                          Source Code

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/sourcefile/cmp_length.f90.html b/sourcefile/cmp_length.f90.html index 3f6c1984e..f17654742 100644 --- a/sourcefile/cmp_length.f90.html +++ b/sourcefile/cmp_length.f90.html @@ -362,7 +362,7 @@

                          Source Code

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/sourcefile/cmp_volume.f90.html b/sourcefile/cmp_volume.f90.html index 74e8c832b..69425105e 100644 --- a/sourcefile/cmp_volume.f90.html +++ b/sourcefile/cmp_volume.f90.html @@ -370,7 +370,7 @@

                          Source Code

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/sourcefile/demo_curve.f90.html b/sourcefile/demo_curve.f90.html index 6ddb83ea0..689a92a13 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-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/sourcefile/demo_surface.f90.html b/sourcefile/demo_surface.f90.html index 506a7d616..dfbe14a82 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-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/sourcefile/demo_volume.f90.html b/sourcefile/demo_volume.f90.html index d0cdd37f6..7489ff09b 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-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/sourcefile/example_curve_1.f90.html b/sourcefile/example_curve_1.f90.html index 7473f230d..175917af3 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-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/sourcefile/example_ppm1.f90.html b/sourcefile/example_ppm1.f90.html index 8a95de238..9169bc36c 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-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/sourcefile/example_ppm2.f90.html b/sourcefile/example_ppm2.f90.html index d2c571da1..38fd5b46b 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-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/sourcefile/example_ppm3.f90.html b/sourcefile/example_ppm3.f90.html index e6b39ab8c..3bd5ed23e 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-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/sourcefile/example_surface_1.f90.html b/sourcefile/example_surface_1.f90.html index 4f3ba96c0..82fcfc77a 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-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/sourcefile/example_volume_1.f90.html b/sourcefile/example_volume_1.f90.html index 2ee8d9000..411db1850 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-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/sourcefile/forcad.f90.html b/sourcefile/forcad.f90.html index 7263f6e5b..276aef574 100644 --- a/sourcefile/forcad.f90.html +++ b/sourcefile/forcad.f90.html @@ -835,7 +835,7 @@

                          Source Code

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/sourcefile/forcad_nurbs_curve.f90.html b/sourcefile/forcad_nurbs_curve.f90.html index 9d06c22f7..4df4276f6 100644 --- a/sourcefile/forcad_nurbs_curve.f90.html +++ b/sourcefile/forcad_nurbs_curve.f90.html @@ -3243,7 +3243,7 @@

                          Source Code

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/sourcefile/forcad_nurbs_surface.f90.html b/sourcefile/forcad_nurbs_surface.f90.html index efaf411f7..bc3de7a7a 100644 --- a/sourcefile/forcad_nurbs_surface.f90.html +++ b/sourcefile/forcad_nurbs_surface.f90.html @@ -4035,7 +4035,7 @@

                          Source Code

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/sourcefile/forcad_nurbs_volume.f90.html b/sourcefile/forcad_nurbs_volume.f90.html index df8f01efc..77335cdab 100644 --- a/sourcefile/forcad_nurbs_volume.f90.html +++ b/sourcefile/forcad_nurbs_volume.f90.html @@ -4848,7 +4848,7 @@

                          Source Code

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/sourcefile/forcad_utils.f90.html b/sourcefile/forcad_utils.f90.html index ee4e5894e..2d9695553 100644 --- a/sourcefile/forcad_utils.f90.html +++ b/sourcefile/forcad_utils.f90.html @@ -2000,7 +2000,7 @@

                          Source Code

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/sourcefile/nearest_point_1d.f90.html b/sourcefile/nearest_point_1d.f90.html index b2544fb15..bc669fee4 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-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/sourcefile/nearest_point_2d.f90.html b/sourcefile/nearest_point_2d.f90.html index 51454192a..576a60895 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-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/sourcefile/nearest_point_2d_bench.f90.html b/sourcefile/nearest_point_2d_bench.f90.html index cd0db50ce..ffd2d5ac4 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-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/sourcefile/nearest_point_3d.f90.html b/sourcefile/nearest_point_3d.f90.html index 0a302706b..e19375cbc 100644 --- a/sourcefile/nearest_point_3d.f90.html +++ b/sourcefile/nearest_point_3d.f90.html @@ -418,7 +418,7 @@

                          Source Code

                          Documentation generated by FORD - on 2024-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/sourcefile/put_to_nurbs.f90.html b/sourcefile/put_to_nurbs.f90.html index de73f2968..5ec74cb8d 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-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/sourcefile/shape_c_1d.f90.html b/sourcefile/shape_c_1d.f90.html index 72b9c0915..eb951c091 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-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/sourcefile/shape_c_2d.f90.html b/sourcefile/shape_c_2d.f90.html index baef12ecb..05da15ba1 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-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/sourcefile/shape_c_3d.f90.html b/sourcefile/shape_c_3d.f90.html index 26ed11b74..bb1feeff2 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-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/sourcefile/shape_circle.f90.html b/sourcefile/shape_circle.f90.html index b97763f7f..ad387e290 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-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/sourcefile/shape_half_circle.f90.html b/sourcefile/shape_half_circle.f90.html index 6add8188a..c0b964d9d 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-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/sourcefile/shape_half_ring_2d.f90.html b/sourcefile/shape_half_ring_2d.f90.html index 176a21dba..90a2c41c3 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-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/sourcefile/shape_half_ring_3d.f90.html b/sourcefile/shape_half_ring_3d.f90.html index 791e5ea14..e6e65337f 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-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/sourcefile/shape_hexahedron.f90.html b/sourcefile/shape_hexahedron.f90.html index 0068d3e76..24467a25c 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-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/sourcefile/shape_ring_2d.f90.html b/sourcefile/shape_ring_2d.f90.html index 013890214..8fbdd5125 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-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/sourcefile/shape_ring_3d.f90.html b/sourcefile/shape_ring_3d.f90.html index 6aa83c7f6..5c7482f62 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-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/sourcefile/shape_tetragon.f90.html b/sourcefile/shape_tetragon.f90.html index a3541f241..cc228662c 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-07-01T09:54:44.473032

                          + on 2024-07-01T10:00:02.512255


                          diff --git a/tipuesearch/tipuesearch_content.js b/tipuesearch/tipuesearch_content.js index 87aa0408a..9fdbd8c2d 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 procedure, public :: ansatz Compute the shape functions, derivative of shape functions and dV private pure subroutine ansatz (this, ie, ig, Tgc, dTgc_dXg, dV) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in) :: ie integer, intent(in) :: ig real(kind=rk), intent(out), allocatable :: Tgc (:) real(kind=rk), intent(out), allocatable :: dTgc_dXg (:,:) real(kind=rk), intent(out) :: dV 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 :: cmp_volume Compute the volume of the NURBS volume private pure subroutine cmp_volume (this, volume) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(out) :: volume 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, elem) 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 (:) integer, intent(in), optional :: elem (:) 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, (:) generic, public :: get_nc => get_nc_all , get_nc_dir Get number of control points private pure function get_nc_all (this) result(nc) 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_nc_dir (this, dir) result(nc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: dir Return Value integer procedure, public :: get_ng Get number of geometry points private pure function get_ng (this) result(ng) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value integer, (3) procedure, public :: 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 , set4 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 (:) private pure subroutine set4 (this, degree, nc, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), contiguous :: degree (:) 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 :: set4 Set NURBS volume using degree, number of control points, control points and weights private pure subroutine set4 (this, degree, nc, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), contiguous :: degree (:) 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, elem) 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 (:) integer, intent(in), optional :: elem (:) 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) procedure, private :: get_nc_all Get number of control points in all directions private pure function get_nc_all (this) result(nc) 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_nc_dir Get number of control points in a specific direction private pure function get_nc_dir (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","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 procedure, public :: ansatz Compute the shape functions, derivative of shape functions and dA private pure subroutine ansatz (this, ie, ig, Tgc, dTgc_dXg, dA) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in) :: ie integer, intent(in) :: ig real(kind=rk), intent(out), allocatable :: Tgc (:) real(kind=rk), intent(out), allocatable :: dTgc_dXg (:,:) real(kind=rk), intent(out) :: dA 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_area Compute the area of the NURBS surface private pure subroutine cmp_area (this, area) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(out) :: area 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, elem) 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 (:) integer, intent(in), optional :: elem (:) 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, (:) generic, public :: get_nc => get_nc_all , get_nc_dir Get number of control points private pure function get_nc_all (this) result(nc) 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_nc_dir (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 , set4 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 (:) private pure subroutine set4 (this, degree, nc, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), contiguous :: degree (:) 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 :: set4 Set NURBS surface using degree, number of control points, control points and weights private pure subroutine set4 (this, degree, nc, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), contiguous :: degree (:) 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, elem) 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 (:) integer, intent(in), optional :: elem (:) 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) procedure, private :: get_nc_all Get number of control points in all directions private pure function get_nc_all (this) result(nc) 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_nc_dir Get number of control points in a specific direction private pure function get_nc_dir (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","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 procedure, public :: ansatz Compute the shape functions, derivative of shape functions and dL private pure subroutine ansatz (this, ie, ig, Tgc, dTgc_dXg, dL) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this integer, intent(in) :: ie integer, intent(in) :: ig real(kind=rk), intent(out), allocatable :: Tgc (:) real(kind=rk), intent(out), allocatable :: dTgc_dXg (:,:) real(kind=rk), intent(out) :: dL 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_length Compute the length of the NURBS curve private pure subroutine cmp_length (this, length) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(out) :: length 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, elem) 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 (:) integer, intent(in), optional :: elem (:) 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 , set1a , set2 , set3 , set4 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 set1a (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 set4 (this, degree, nc, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this integer, intent(in) :: degree integer, intent(in) :: nc 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 :: set1a private pure subroutine set1a (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 :: set4 Set NURBS curve using degree, number of control points, control points and weights private pure subroutine set4 (this, degree, nc, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this integer, intent(in) :: degree integer, intent(in) :: 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, 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, elem) 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 (:) integer, intent(in), optional :: elem (:) 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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, elem) 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 (:) integer, intent(in), optional :: elem (:) 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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, elem) 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 (:) integer, intent(in), optional :: elem (:) 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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, elem) 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 (:) integer, intent(in), optional :: elem (:) 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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, elem) 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 (:) integer, intent(in), optional :: elem (:) 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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, elem) 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 (:) integer, intent(in), optional :: elem (:) 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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, elem) 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 (:) integer, intent(in), optional :: elem (:) 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 proc~ansatz nurbs_volume%ansatz proc~ansatz->proc~cmp_elem proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~cmp_elem proc~cmp_volume->proc~ansatz program~example3_volume example3_volume program~example3_volume->proc~cmp_elem program~compute_volume compute_volume program~compute_volume->proc~cmp_volume Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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~ansatz nurbs_volume%ansatz proc~ansatz->proc~cmp_elem none~set nurbs_volume%set proc~ansatz->none~set proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~cmp_elem proc~cmp_volume->proc~ansatz 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 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 program~compute_volume compute_volume program~compute_volume->proc~cmp_volume program~compute_volume->none~set 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_all – ForCAD","text":"private pure function get_nc_all(this) result(nc) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value integer, (3)","tags":"","loc":"proc/get_nc_all.html"},{"title":"get_nc_dir – ForCAD","text":"private pure function get_nc_dir(this, dir) result(nc) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: dir Return Value integer Calls proc~~get_nc_dir~~CallsGraph proc~get_nc_dir nurbs_volume%get_nc_dir interface~compute_multiplicity compute_multiplicity proc~get_nc_dir->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_dir.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~derivative nurbs_volume%derivative none~derivative->proc~derivative_scalar none~derivative->proc~derivative_vector 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 proc~ansatz nurbs_volume%ansatz proc~ansatz->none~derivative proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~ansatz program~compute_volume compute_volume program~compute_volume->proc~cmp_volume Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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":"ansatz – ForCAD","text":"private pure subroutine ansatz(this, ie, ig, Tgc, dTgc_dXg, dV) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in) :: ie integer, intent(in) :: ig real(kind=rk), intent(out), allocatable :: Tgc (:) real(kind=rk), intent(out), allocatable :: dTgc_dXg (:,:) real(kind=rk), intent(out) :: dV Calls proc~~ansatz~~CallsGraph proc~ansatz nurbs_volume%ansatz interface~gauss_leg gauss_leg proc~ansatz->interface~gauss_leg interface~ndgrid ndgrid proc~ansatz->interface~ndgrid interface~unique unique proc~ansatz->interface~unique none~derivative nurbs_volume%derivative proc~ansatz->none~derivative none~set nurbs_volume%set proc~ansatz->none~set proc~cmp_elem nurbs_volume%cmp_elem proc~ansatz->proc~cmp_elem proc~det det proc~ansatz->proc~det proc~inv inv proc~ansatz->proc~inv proc~gauss_legendre_1d gauss_legendre_1D interface~gauss_leg->proc~gauss_legendre_1d proc~gauss_legendre_2d gauss_legendre_2D interface~gauss_leg->proc~gauss_legendre_2d proc~gauss_legendre_3d gauss_legendre_3D interface~gauss_leg->proc~gauss_legendre_3d 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 proc~derivative_scalar nurbs_volume%derivative_scalar none~derivative->proc~derivative_scalar proc~derivative_vector nurbs_volume%derivative_vector none~derivative->proc~derivative_vector 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~set4 nurbs_volume%set4 none~set->proc~set4 proc~cmp_elem->interface~unique interface~elemconn_cn elemConn_Cn proc~cmp_elem->interface~elemconn_cn proc~get_multiplicity nurbs_volume%get_multiplicity proc~cmp_elem->proc~get_multiplicity proc~inv->proc~det proc~inv->proc~inv 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 interface~compute_dtgc compute_dTgc proc~derivative_scalar->interface~compute_dtgc proc~is_rational nurbs_volume%is_rational proc~derivative_scalar->proc~is_rational proc~derivative_vector->interface~ndgrid proc~derivative_vector->interface~compute_dtgc proc~derivative_vector->proc~is_rational gauss_legendre gauss_legendre proc~gauss_legendre_1d->gauss_legendre proc~gauss_legendre_2d->interface~ndgrid proc~gauss_legendre_2d->gauss_legendre proc~kron kron proc~gauss_legendre_2d->proc~kron proc~gauss_legendre_3d->interface~ndgrid proc~gauss_legendre_3d->gauss_legendre proc~gauss_legendre_3d->proc~kron interface~compute_multiplicity compute_multiplicity proc~get_multiplicity->interface~compute_multiplicity 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~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 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. Called by proc~~ansatz~~CalledByGraph proc~ansatz nurbs_volume%ansatz proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~ansatz program~compute_volume compute_volume program~compute_volume->proc~cmp_volume Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/ansatz.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~ansatz nurbs_volume%ansatz proc~ansatz->none~set 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~compute_volume compute_volume program~compute_volume->none~set proc~cmp_volume nurbs_volume%cmp_volume program~compute_volume->proc~cmp_volume 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 proc~cmp_volume->proc~ansatz 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~ansatz nurbs_volume%ansatz proc~ansatz->none~set 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~compute_volume compute_volume program~compute_volume->none~set proc~cmp_volume nurbs_volume%cmp_volume program~compute_volume->proc~cmp_volume 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 proc~cmp_volume->proc~ansatz 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":"cmp_volume – ForCAD","text":"private pure subroutine cmp_volume(this, volume) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(out) :: volume Calls proc~~cmp_volume~~CallsGraph proc~cmp_volume nurbs_volume%cmp_volume proc~ansatz nurbs_volume%ansatz proc~cmp_volume->proc~ansatz proc~cmp_elem nurbs_volume%cmp_elem proc~cmp_volume->proc~cmp_elem proc~ansatz->proc~cmp_elem interface~gauss_leg gauss_leg proc~ansatz->interface~gauss_leg interface~ndgrid ndgrid proc~ansatz->interface~ndgrid interface~unique unique proc~ansatz->interface~unique none~derivative nurbs_volume%derivative proc~ansatz->none~derivative none~set nurbs_volume%set proc~ansatz->none~set proc~det det proc~ansatz->proc~det proc~inv inv proc~ansatz->proc~inv interface~elemconn_cn elemConn_Cn proc~cmp_elem->interface~elemconn_cn 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~gauss_legendre_1d gauss_legendre_1D interface~gauss_leg->proc~gauss_legendre_1d proc~gauss_legendre_2d gauss_legendre_2D interface~gauss_leg->proc~gauss_legendre_2d proc~gauss_legendre_3d gauss_legendre_3D interface~gauss_leg->proc~gauss_legendre_3d 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 proc~derivative_scalar nurbs_volume%derivative_scalar none~derivative->proc~derivative_scalar proc~derivative_vector nurbs_volume%derivative_vector none~derivative->proc~derivative_vector 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~set4 nurbs_volume%set4 none~set->proc~set4 interface~compute_multiplicity compute_multiplicity proc~get_multiplicity->interface~compute_multiplicity proc~inv->proc~det proc~inv->proc~inv proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 interface~compute_dtgc compute_dTgc proc~derivative_scalar->interface~compute_dtgc proc~is_rational nurbs_volume%is_rational proc~derivative_scalar->proc~is_rational proc~derivative_vector->interface~ndgrid proc~derivative_vector->interface~compute_dtgc proc~derivative_vector->proc~is_rational gauss_legendre gauss_legendre proc~gauss_legendre_1d->gauss_legendre proc~gauss_legendre_2d->interface~ndgrid proc~gauss_legendre_2d->gauss_legendre proc~kron kron proc~gauss_legendre_2d->proc~kron proc~gauss_legendre_3d->interface~ndgrid proc~gauss_legendre_3d->gauss_legendre proc~gauss_legendre_3d->proc~kron 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_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. Called by proc~~cmp_volume~~CalledByGraph proc~cmp_volume nurbs_volume%cmp_volume program~compute_volume compute_volume program~compute_volume->proc~cmp_volume Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_volume.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, elem) 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 (:) integer, intent(in), optional :: elem (:) 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. Called by proc~~derivative_scalar~~CalledByGraph proc~derivative_scalar nurbs_volume%derivative_scalar none~derivative nurbs_volume%derivative none~derivative->proc~derivative_scalar proc~ansatz nurbs_volume%ansatz proc~ansatz->none~derivative proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~ansatz program~compute_volume compute_volume program~compute_volume->proc~cmp_volume Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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. Called by proc~~derivative_vector~~CalledByGraph proc~derivative_vector nurbs_volume%derivative_vector none~derivative nurbs_volume%derivative none~derivative->proc~derivative_vector proc~ansatz nurbs_volume%ansatz proc~ansatz->none~derivative proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~ansatz program~compute_volume compute_volume program~compute_volume->proc~cmp_volume Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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 proc~set4 nurbs_volume%set4 none~set->proc~set4 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~set4 nurbs_volume%set4 none~set->proc~set4 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~set4 nurbs_volume%set4 none~set->proc~set4 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~set4 nurbs_volume%set4 none~set->proc~set4 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 proc~nearest_point2 nurbs_volume%nearest_point2 proc~nearest_point2->proc~nearest_point 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.","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 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~inv inv proc~nearest_point2->proc~inv proc~nearest_point nurbs_volume%nearest_point proc~nearest_point2->proc~nearest_point 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~inv->proc~inv proc~det det proc~inv->proc~det interface~nearest_point_help_3d nearest_point_help_3d proc~nearest_point->interface~nearest_point_help_3d 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~set4 nurbs_volume%set4 none~set->proc~set4 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~ansatz nurbs_volume%ansatz proc~ansatz->none~set 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~compute_volume compute_volume program~compute_volume->none~set proc~cmp_volume nurbs_volume%cmp_volume program~compute_volume->proc~cmp_volume 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 proc~cmp_volume->proc~ansatz 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~ansatz nurbs_volume%ansatz proc~ansatz->none~set 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~compute_volume compute_volume program~compute_volume->none~set proc~cmp_volume nurbs_volume%cmp_volume program~compute_volume->proc~cmp_volume 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 proc~cmp_volume->proc~ansatz 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~ansatz nurbs_volume%ansatz proc~ansatz->none~set 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~compute_volume compute_volume program~compute_volume->none~set proc~cmp_volume nurbs_volume%cmp_volume program~compute_volume->proc~cmp_volume 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 proc~cmp_volume->proc~ansatz 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":"set4 – ForCAD","text":"private pure subroutine set4(this, degree, nc, Xc, Wc) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), contiguous :: degree (:) integer, intent(in), contiguous :: nc (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) Called by proc~~set4~~CalledByGraph proc~set4 nurbs_volume%set4 none~set nurbs_volume%set none~set->proc~set4 proc~ansatz nurbs_volume%ansatz proc~ansatz->none~set 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~compute_volume compute_volume program~compute_volume->none~set proc~cmp_volume nurbs_volume%cmp_volume program~compute_volume->proc~cmp_volume 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 proc~cmp_volume->proc~ansatz 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/set4.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~set4 nurbs_volume%set4 none~set->proc~set4 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~set4 nurbs_volume%set4 none~set->proc~set4 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~set4 nurbs_volume%set4 none~set->proc~set4 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~set4 nurbs_volume%set4 none~set->proc~set4 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 none~derivative nurbs_volume%derivative none~derivative->proc~derivative_scalar none~derivative->proc~derivative_vector proc~ansatz nurbs_volume%ansatz proc~ansatz->none~derivative proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~ansatz program~compute_volume compute_volume program~compute_volume->proc~cmp_volume Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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, f_elem) 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 (:) integer, intent(in), optional :: f_elem (:) 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, f_elem) 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 (:) integer, intent(in), optional :: f_elem (:) 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->proc~nearest_point 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(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~~CalledByGraph proc~generate_xc generate_Xc program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~generate_xc Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/generate_xc.html"},{"title":"generate_Xc – ForCAD","text":"function generate_Xc(num_rows, num_cols, peak_height) result(control_points) Arguments Type Intent Optional Attributes Name integer, intent(in) :: num_rows integer, intent(in) :: num_cols real(kind=rk), intent(in) :: peak_height Return Value real(kind=rk), allocatable, (:,:) Called by proc~~generate_xc~2~~CalledByGraph proc~generate_xc~2 generate_Xc program~example3_surface example3_surface program~example3_surface->proc~generate_xc~2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/generate_xc~2.html"},{"title":"generate_Xc – ForCAD","text":"function generate_Xc(num_coils, radius, height, num_points_per_coil) result(control_points) Arguments Type Intent Optional Attributes Name integer, intent(in) :: num_coils real(kind=rk), intent(in) :: radius real(kind=rk), intent(in) :: height integer, intent(in) :: num_points_per_coil Return Value real(kind=rk), allocatable, (:,:) Called by proc~~generate_xc~3~~CalledByGraph proc~generate_xc~3 generate_Xc program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~generate_xc~3 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/generate_xc~3.html"},{"title":"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. Called by proc~~cmp_elem~2~~CalledByGraph proc~cmp_elem~2 nurbs_surface%cmp_elem proc~ansatz~2 nurbs_surface%ansatz proc~ansatz~2->proc~cmp_elem~2 proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~cmp_elem~2 proc~cmp_area->proc~ansatz~2 program~compute_area compute_area program~compute_area->proc~cmp_area Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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~ansatz~2 nurbs_surface%ansatz proc~ansatz~2->proc~cmp_elem~2 none~set~2 nurbs_surface%set proc~ansatz~2->none~set~2 proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~cmp_elem~2 proc~cmp_area->proc~ansatz~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->proc~set1~2 none~set~2->proc~set3~2 program~compute_area compute_area program~compute_area->proc~cmp_area program~compute_area->none~set~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_all – ForCAD","text":"private pure function get_nc_all(this) result(nc) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value integer, (2)","tags":"","loc":"proc/get_nc_all~2.html"},{"title":"get_nc_dir – ForCAD","text":"private pure function get_nc_dir(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_dir~2~~CallsGraph proc~get_nc_dir~2 nurbs_surface%get_nc_dir interface~compute_multiplicity compute_multiplicity proc~get_nc_dir~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_dir~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 none~derivative~2 nurbs_surface%derivative none~derivative~2->proc~derivative_scalar~2 none~derivative~2->proc~derivative_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 proc~ansatz~2 nurbs_surface%ansatz proc~ansatz~2->none~derivative~2 proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~ansatz~2 program~compute_area compute_area program~compute_area->proc~cmp_area Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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":"ansatz – ForCAD","text":"private pure subroutine ansatz(this, ie, ig, Tgc, dTgc_dXg, dA) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in) :: ie integer, intent(in) :: ig real(kind=rk), intent(out), allocatable :: Tgc (:) real(kind=rk), intent(out), allocatable :: dTgc_dXg (:,:) real(kind=rk), intent(out) :: dA Calls proc~~ansatz~2~~CallsGraph proc~ansatz~2 nurbs_surface%ansatz interface~gauss_leg gauss_leg proc~ansatz~2->interface~gauss_leg interface~ndgrid ndgrid proc~ansatz~2->interface~ndgrid interface~unique unique proc~ansatz~2->interface~unique none~derivative~2 nurbs_surface%derivative proc~ansatz~2->none~derivative~2 none~set~2 nurbs_surface%set proc~ansatz~2->none~set~2 proc~cmp_elem~2 nurbs_surface%cmp_elem proc~ansatz~2->proc~cmp_elem~2 proc~det det proc~ansatz~2->proc~det proc~inv inv proc~ansatz~2->proc~inv proc~gauss_legendre_1d gauss_legendre_1D interface~gauss_leg->proc~gauss_legendre_1d proc~gauss_legendre_2d gauss_legendre_2D interface~gauss_leg->proc~gauss_legendre_2d proc~gauss_legendre_3d gauss_legendre_3D interface~gauss_leg->proc~gauss_legendre_3d 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 proc~derivative_scalar~2 nurbs_surface%derivative_scalar none~derivative~2->proc~derivative_scalar~2 proc~derivative_vector~2 nurbs_surface%derivative_vector none~derivative~2->proc~derivative_vector~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~set4~2 nurbs_surface%set4 none~set~2->proc~set4~2 proc~cmp_elem~2->interface~unique interface~elemconn_cn elemConn_Cn proc~cmp_elem~2->interface~elemconn_cn proc~get_multiplicity~2 nurbs_surface%get_multiplicity proc~cmp_elem~2->proc~get_multiplicity~2 proc~inv->proc~det proc~inv->proc~inv 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 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 proc~derivative_vector~2->interface~ndgrid proc~derivative_vector~2->interface~compute_dtgc~2 proc~derivative_vector~2->proc~is_rational~2 gauss_legendre gauss_legendre proc~gauss_legendre_1d->gauss_legendre proc~gauss_legendre_2d->interface~ndgrid proc~gauss_legendre_2d->gauss_legendre proc~kron kron proc~gauss_legendre_2d->proc~kron proc~gauss_legendre_3d->interface~ndgrid proc~gauss_legendre_3d->gauss_legendre proc~gauss_legendre_3d->proc~kron interface~compute_multiplicity compute_multiplicity proc~get_multiplicity~2->interface~compute_multiplicity 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~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~cmp_degree~2->proc~get_multiplicity~2 proc~cmp_nc~2->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. Called by proc~~ansatz~2~~CalledByGraph proc~ansatz~2 nurbs_surface%ansatz proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~ansatz~2 program~compute_area compute_area program~compute_area->proc~cmp_area Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/ansatz~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_area – ForCAD","text":"private pure subroutine cmp_area(this, area) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(out) :: area Calls proc~~cmp_area~~CallsGraph proc~cmp_area nurbs_surface%cmp_area proc~ansatz~2 nurbs_surface%ansatz proc~cmp_area->proc~ansatz~2 proc~cmp_elem~2 nurbs_surface%cmp_elem proc~cmp_area->proc~cmp_elem~2 proc~ansatz~2->proc~cmp_elem~2 interface~gauss_leg gauss_leg proc~ansatz~2->interface~gauss_leg interface~ndgrid ndgrid proc~ansatz~2->interface~ndgrid interface~unique unique proc~ansatz~2->interface~unique none~derivative~2 nurbs_surface%derivative proc~ansatz~2->none~derivative~2 none~set~2 nurbs_surface%set proc~ansatz~2->none~set~2 proc~det det proc~ansatz~2->proc~det proc~inv inv proc~ansatz~2->proc~inv interface~elemconn_cn elemConn_Cn proc~cmp_elem~2->interface~elemconn_cn 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~gauss_legendre_1d gauss_legendre_1D interface~gauss_leg->proc~gauss_legendre_1d proc~gauss_legendre_2d gauss_legendre_2D interface~gauss_leg->proc~gauss_legendre_2d proc~gauss_legendre_3d gauss_legendre_3D interface~gauss_leg->proc~gauss_legendre_3d 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 proc~derivative_scalar~2 nurbs_surface%derivative_scalar none~derivative~2->proc~derivative_scalar~2 proc~derivative_vector~2 nurbs_surface%derivative_vector none~derivative~2->proc~derivative_vector~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~set4~2 nurbs_surface%set4 none~set~2->proc~set4~2 interface~compute_multiplicity compute_multiplicity proc~get_multiplicity~2->interface~compute_multiplicity proc~inv->proc~det proc~inv->proc~inv proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 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 proc~derivative_vector~2->interface~ndgrid proc~derivative_vector~2->interface~compute_dtgc~2 proc~derivative_vector~2->proc~is_rational~2 gauss_legendre gauss_legendre proc~gauss_legendre_1d->gauss_legendre proc~gauss_legendre_2d->interface~ndgrid proc~gauss_legendre_2d->gauss_legendre proc~kron kron proc~gauss_legendre_2d->proc~kron proc~gauss_legendre_3d->interface~ndgrid proc~gauss_legendre_3d->gauss_legendre proc~gauss_legendre_3d->proc~kron 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_degree~2->proc~get_multiplicity~2 proc~cmp_nc~2->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. Called by proc~~cmp_area~~CalledByGraph proc~cmp_area nurbs_surface%cmp_area program~compute_area compute_area program~compute_area->proc~cmp_area Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_area.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~ansatz~2 nurbs_surface%ansatz proc~ansatz~2->none~set~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~compute_area compute_area program~compute_area->none~set~2 proc~cmp_area nurbs_surface%cmp_area program~compute_area->proc~cmp_area 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 proc~cmp_area->proc~ansatz~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~ansatz~2 nurbs_surface%ansatz proc~ansatz~2->none~set~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~compute_area compute_area program~compute_area->none~set~2 proc~cmp_area nurbs_surface%cmp_area program~compute_area->proc~cmp_area 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 proc~cmp_area->proc~ansatz~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, elem) 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 (:) integer, intent(in), optional :: elem (:) 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. Called by proc~~derivative_scalar~2~~CalledByGraph proc~derivative_scalar~2 nurbs_surface%derivative_scalar none~derivative~2 nurbs_surface%derivative none~derivative~2->proc~derivative_scalar~2 proc~ansatz~2 nurbs_surface%ansatz proc~ansatz~2->none~derivative~2 proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~ansatz~2 program~compute_area compute_area program~compute_area->proc~cmp_area Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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. Called by proc~~derivative_vector~2~~CalledByGraph proc~derivative_vector~2 nurbs_surface%derivative_vector none~derivative~2 nurbs_surface%derivative none~derivative~2->proc~derivative_vector~2 proc~ansatz~2 nurbs_surface%ansatz proc~ansatz~2->none~derivative~2 proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~ansatz~2 program~compute_area compute_area program~compute_area->proc~cmp_area Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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 proc~set4~2 nurbs_surface%set4 none~set~2->proc~set4~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~set4~2 nurbs_surface%set4 none~set~2->proc~set4~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~set4~2 nurbs_surface%set4 none~set~2->proc~set4~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~set4~2 nurbs_surface%set4 none~set~2->proc~set4~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 proc~nearest_point2~2 nurbs_surface%nearest_point2 proc~nearest_point2~2->proc~nearest_point~2 program~nearest_point_2d nearest_point_2d program~nearest_point_2d->proc~nearest_point~2 program~nearest_point_2d->proc~nearest_point2~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 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~inv inv proc~nearest_point2~2->proc~inv proc~nearest_point~2 nurbs_surface%nearest_point proc~nearest_point2~2->proc~nearest_point~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~inv->proc~inv proc~det det proc~inv->proc~det interface~nearest_point_help_2d nearest_point_help_2d 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->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~set4~2 nurbs_surface%set4 none~set~2->proc~set4~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~ansatz~2 nurbs_surface%ansatz proc~ansatz~2->none~set~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~compute_area compute_area program~compute_area->none~set~2 proc~cmp_area nurbs_surface%cmp_area program~compute_area->proc~cmp_area 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 proc~cmp_area->proc~ansatz~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~ansatz~2 nurbs_surface%ansatz proc~ansatz~2->none~set~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~compute_area compute_area program~compute_area->none~set~2 proc~cmp_area nurbs_surface%cmp_area program~compute_area->proc~cmp_area 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 proc~cmp_area->proc~ansatz~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~ansatz~2 nurbs_surface%ansatz proc~ansatz~2->none~set~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~compute_area compute_area program~compute_area->none~set~2 proc~cmp_area nurbs_surface%cmp_area program~compute_area->proc~cmp_area 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 proc~cmp_area->proc~ansatz~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":"set4 – ForCAD","text":"private pure subroutine set4(this, degree, nc, Xc, Wc) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), contiguous :: degree (:) integer, intent(in), contiguous :: nc (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) Called by proc~~set4~2~~CalledByGraph proc~set4~2 nurbs_surface%set4 none~set~2 nurbs_surface%set none~set~2->proc~set4~2 proc~ansatz~2 nurbs_surface%ansatz proc~ansatz~2->none~set~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~compute_area compute_area program~compute_area->none~set~2 proc~cmp_area nurbs_surface%cmp_area program~compute_area->proc~cmp_area 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 proc~cmp_area->proc~ansatz~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/set4~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~set4~2 nurbs_surface%set4 none~set~2->proc~set4~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~set4~2 nurbs_surface%set4 none~set~2->proc~set4~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~set4~2 nurbs_surface%set4 none~set~2->proc~set4~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~set4~2 nurbs_surface%set4 none~set~2->proc~set4~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 none~derivative~2 nurbs_surface%derivative none~derivative~2->proc~derivative_scalar~2 none~derivative~2->proc~derivative_vector~2 proc~ansatz~2 nurbs_surface%ansatz proc~ansatz~2->none~derivative~2 proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~ansatz~2 program~compute_area compute_area program~compute_area->proc~cmp_area Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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, elem) 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 (:) integer, intent(in) :: elem (:) 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, elem) 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 (:) integer, intent(in) :: elem (:) 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_point~2 nurbs_surface%nearest_point proc~nearest_point~2->interface~nearest_point_help_2d proc~nearest_point2~2 nurbs_surface%nearest_point2 proc~nearest_point2~2->proc~nearest_point~2 program~nearest_point_2d nearest_point_2d program~nearest_point_2d->proc~nearest_point~2 program~nearest_point_2d->proc~nearest_point2~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_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~4~~CalledByGraph proc~generate_xc~4 generate_Xc program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->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~example3_volume example3_volume program~example3_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":"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~ansatz nurbs_volume%ansatz proc~ansatz->none~set proc~ansatz~2 nurbs_surface%ansatz proc~ansatz~2->none~set~2 proc~ansatz~3 nurbs_curve%ansatz proc~ansatz~3->none~set~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~compute_area compute_area program~compute_area->none~set~2 proc~cmp_area nurbs_surface%cmp_area program~compute_area->proc~cmp_area program~compute_length compute_length program~compute_length->none~set~3 proc~cmp_length nurbs_curve%cmp_length program~compute_length->proc~cmp_length program~compute_volume compute_volume program~compute_volume->none~set proc~cmp_volume nurbs_volume%cmp_volume program~compute_volume->proc~cmp_volume 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 proc~cmp_area->proc~ansatz~2 proc~cmp_length->proc~ansatz~3 proc~cmp_volume->proc~ansatz 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":"det – ForCAD","text":"public pure function det(A) result(detA) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: A (:,:) Return Value real(kind=rk) Called by proc~~det~~CalledByGraph proc~det det proc~ansatz nurbs_volume%ansatz proc~ansatz->proc~det proc~inv inv proc~ansatz->proc~inv proc~ansatz~2 nurbs_surface%ansatz proc~ansatz~2->proc~det proc~ansatz~2->proc~inv proc~inv->proc~det proc~inv->proc~inv proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~ansatz~2 proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~ansatz proc~nearest_point2 nurbs_volume%nearest_point2 proc~nearest_point2->proc~inv proc~nearest_point2~2 nurbs_surface%nearest_point2 proc~nearest_point2~2->proc~inv program~compute_area compute_area program~compute_area->proc~cmp_area program~compute_volume compute_volume program~compute_volume->proc~cmp_volume program~nearest_point_2d nearest_point_2d program~nearest_point_2d->proc~nearest_point2~2 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/det.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":"inv – ForCAD","text":"public pure recursive function inv(A) result(A_inv) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: A (:,:) Return Value real(kind=rk), allocatable, (:,:) Calls proc~~inv~~CallsGraph proc~inv inv proc~inv->proc~inv proc~det det proc~inv->proc~det Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~inv~~CalledByGraph proc~inv inv proc~inv->proc~inv proc~ansatz nurbs_volume%ansatz proc~ansatz->proc~inv proc~ansatz~2 nurbs_surface%ansatz proc~ansatz~2->proc~inv proc~nearest_point2 nurbs_volume%nearest_point2 proc~nearest_point2->proc~inv proc~nearest_point2~2 nurbs_surface%nearest_point2 proc~nearest_point2~2->proc~inv proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~ansatz~2 proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~ansatz program~nearest_point_2d nearest_point_2d program~nearest_point_2d->proc~nearest_point2~2 program~nearest_point_3d nearest_point_3d program~nearest_point_3d->proc~nearest_point2 program~compute_area compute_area program~compute_area->proc~cmp_area program~compute_volume compute_volume program~compute_volume->proc~cmp_volume Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/inv.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~gauss_legendre_2d gauss_legendre_2D proc~gauss_legendre_2d->proc~kron proc~gauss_legendre_3d gauss_legendre_3D proc~gauss_legendre_3d->proc~kron proc~put_to_nurbs nurbs_volume%put_to_nurbs proc~put_to_nurbs->proc~kron interface~gauss_leg gauss_leg interface~gauss_leg->proc~gauss_legendre_2d interface~gauss_leg->proc~gauss_legendre_3d program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->proc~put_to_nurbs proc~ansatz nurbs_volume%ansatz proc~ansatz->interface~gauss_leg proc~ansatz~2 nurbs_surface%ansatz proc~ansatz~2->interface~gauss_leg proc~ansatz~3 nurbs_curve%ansatz proc~ansatz~3->interface~gauss_leg proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~ansatz~2 proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~ansatz~3 proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~ansatz program~compute_area compute_area program~compute_area->proc~cmp_area program~compute_length compute_length program~compute_length->proc~cmp_length program~compute_volume compute_volume program~compute_volume->proc~cmp_volume Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_dir nurbs_volume%get_nc_dir proc~get_nc_dir->interface~compute_multiplicity proc~get_nc_dir~2 nurbs_surface%get_nc_dir proc~get_nc_dir~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~ansatz nurbs_volume%ansatz proc~ansatz->proc~cmp_elem proc~ansatz->none~set proc~ansatz~2 nurbs_surface%ansatz proc~ansatz~2->proc~cmp_elem~2 proc~ansatz~2->none~set~2 proc~ansatz~3 nurbs_curve%ansatz proc~ansatz~3->proc~cmp_elem~3 proc~ansatz~3->none~set~3 proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~cmp_elem~2 proc~cmp_area->proc~ansatz~2 proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~cmp_elem~3 proc~cmp_length->proc~ansatz~3 proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~cmp_elem proc~cmp_volume->proc~ansatz proc~set1a nurbs_curve%set1a proc~set1a->proc~cmp_degree~3 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~set1a 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~compute_area compute_area program~compute_area->none~set~2 program~compute_area->proc~cmp_area program~compute_length compute_length program~compute_length->proc~cmp_length program~compute_length->none~set~3 program~compute_volume compute_volume program~compute_volume->none~set program~compute_volume->proc~cmp_volume 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_dir nurbs_volume%get_nc_dir proc~get_nc_dir->interface~compute_multiplicity proc~get_nc_dir~2 nurbs_surface%get_nc_dir proc~get_nc_dir~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~ansatz nurbs_volume%ansatz proc~ansatz->proc~cmp_elem proc~ansatz->none~set proc~ansatz~2 nurbs_surface%ansatz proc~ansatz~2->proc~cmp_elem~2 proc~ansatz~2->none~set~2 proc~ansatz~3 nurbs_curve%ansatz proc~ansatz~3->proc~cmp_elem~3 proc~ansatz~3->none~set~3 proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~cmp_elem~2 proc~cmp_area->proc~ansatz~2 proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~cmp_elem~3 proc~cmp_length->proc~ansatz~3 proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~cmp_elem proc~cmp_volume->proc~ansatz proc~set1a nurbs_curve%set1a proc~set1a->proc~cmp_degree~3 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~set1a 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~compute_area compute_area program~compute_area->none~set~2 program~compute_area->proc~cmp_area program~compute_length compute_length program~compute_length->proc~cmp_length program~compute_length->none~set~3 program~compute_volume compute_volume program~compute_volume->none~set program~compute_volume->proc~cmp_volume 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":"dyad_t1_t1 – ForCAD","text":"private pure function dyad_t1_t1(a, b) result(c) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: a (:) real(kind=rk), intent(in), contiguous :: b (:) Return Value real(kind=rk), allocatable, (:,:) Called by proc~~dyad_t1_t1~~CalledByGraph proc~dyad_t1_t1 dyad_t1_t1 interface~dyad dyad interface~dyad->proc~dyad_t1_t1 proc~ansatz~3 nurbs_curve%ansatz proc~ansatz~3->interface~dyad proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~ansatz~3 program~compute_length compute_length program~compute_length->proc~cmp_length Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/dyad_t1_t1.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~ansatz nurbs_volume%ansatz proc~ansatz->none~set proc~ansatz~2 nurbs_surface%ansatz proc~ansatz~2->none~set~2 proc~ansatz~3 nurbs_curve%ansatz proc~ansatz~3->none~set~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~compute_area compute_area program~compute_area->none~set~2 proc~cmp_area nurbs_surface%cmp_area program~compute_area->proc~cmp_area program~compute_length compute_length program~compute_length->none~set~3 proc~cmp_length nurbs_curve%cmp_length program~compute_length->proc~cmp_length program~compute_volume compute_volume program~compute_volume->none~set proc~cmp_volume nurbs_volume%cmp_volume program~compute_volume->proc~cmp_volume 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 proc~cmp_area->proc~ansatz~2 proc~cmp_length->proc~ansatz~3 proc~cmp_volume->proc~ansatz 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~ansatz nurbs_volume%ansatz proc~ansatz->interface~unique proc~cmp_elem nurbs_volume%cmp_elem proc~ansatz->proc~cmp_elem proc~ansatz~2 nurbs_surface%ansatz proc~ansatz~2->interface~unique proc~cmp_elem~2 nurbs_surface%cmp_elem proc~ansatz~2->proc~cmp_elem~2 proc~ansatz~3 nurbs_curve%ansatz proc~ansatz~3->interface~unique proc~cmp_elem~3 nurbs_curve%cmp_elem proc~ansatz~3->proc~cmp_elem~3 proc~cmp_elem->interface~unique proc~cmp_elem~2->interface~unique proc~cmp_elem~3->interface~unique proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~ansatz~2 proc~cmp_area->proc~cmp_elem~2 proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~ansatz~3 proc~cmp_length->proc~cmp_elem~3 proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~ansatz proc~cmp_volume->proc~cmp_elem program~example3_volume example3_volume program~example3_volume->proc~cmp_elem program~compute_area compute_area program~compute_area->proc~cmp_area program~compute_length compute_length program~compute_length->proc~cmp_length program~compute_volume compute_volume program~compute_volume->proc~cmp_volume Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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~ansatz nurbs_volume%ansatz proc~ansatz->interface~unique proc~cmp_elem nurbs_volume%cmp_elem proc~ansatz->proc~cmp_elem proc~ansatz~2 nurbs_surface%ansatz proc~ansatz~2->interface~unique proc~cmp_elem~2 nurbs_surface%cmp_elem proc~ansatz~2->proc~cmp_elem~2 proc~ansatz~3 nurbs_curve%ansatz proc~ansatz~3->interface~unique proc~cmp_elem~3 nurbs_curve%cmp_elem proc~ansatz~3->proc~cmp_elem~3 proc~cmp_elem->interface~unique proc~cmp_elem~2->interface~unique proc~cmp_elem~3->interface~unique proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~ansatz~2 proc~cmp_area->proc~cmp_elem~2 proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~ansatz~3 proc~cmp_length->proc~cmp_elem~3 proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~ansatz proc~cmp_volume->proc~cmp_elem program~example3_volume example3_volume program~example3_volume->proc~cmp_elem program~compute_area compute_area program~compute_area->proc~cmp_area program~compute_length compute_length program~compute_length->proc~cmp_length program~compute_volume compute_volume program~compute_volume->proc~cmp_volume Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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 proc~ansatz nurbs_volume%ansatz proc~ansatz->proc~cmp_elem proc~ansatz~2 nurbs_surface%ansatz proc~ansatz~2->proc~cmp_elem~2 proc~ansatz~3 nurbs_curve%ansatz proc~ansatz~3->proc~cmp_elem~3 proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~cmp_elem~2 proc~cmp_area->proc~ansatz~2 proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~cmp_elem~3 proc~cmp_length->proc~ansatz~3 proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~cmp_elem proc~cmp_volume->proc~ansatz program~example3_volume example3_volume program~example3_volume->proc~cmp_elem program~compute_area compute_area program~compute_area->proc~cmp_area program~compute_length compute_length program~compute_length->proc~cmp_length program~compute_volume compute_volume program~compute_volume->proc~cmp_volume Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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 proc~ansatz nurbs_volume%ansatz proc~ansatz->proc~cmp_elem proc~ansatz~2 nurbs_surface%ansatz proc~ansatz~2->proc~cmp_elem~2 proc~ansatz~3 nurbs_curve%ansatz proc~ansatz~3->proc~cmp_elem~3 proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~cmp_elem~2 proc~cmp_area->proc~ansatz~2 proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~cmp_elem~3 proc~cmp_length->proc~ansatz~3 proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~cmp_elem proc~cmp_volume->proc~ansatz program~example3_volume example3_volume program~example3_volume->proc~cmp_elem program~compute_area compute_area program~compute_area->proc~cmp_area program~compute_length compute_length program~compute_length->proc~cmp_length program~compute_volume compute_volume program~compute_volume->proc~cmp_volume Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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 proc~ansatz nurbs_volume%ansatz proc~ansatz->proc~cmp_elem proc~ansatz~2 nurbs_surface%ansatz proc~ansatz~2->proc~cmp_elem~2 proc~ansatz~3 nurbs_curve%ansatz proc~ansatz~3->proc~cmp_elem~3 proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~cmp_elem~2 proc~cmp_area->proc~ansatz~2 proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~cmp_elem~3 proc~cmp_length->proc~ansatz~3 proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~cmp_elem proc~cmp_volume->proc~ansatz program~example3_volume example3_volume program~example3_volume->proc~cmp_elem program~compute_area compute_area program~compute_area->proc~cmp_area program~compute_length compute_length program~compute_length->proc~cmp_length program~compute_volume compute_volume program~compute_volume->proc~cmp_volume Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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":"gauss_legendre_1D – ForCAD","text":"private pure subroutine gauss_legendre_1D(interval, degree, Xksi, Wksi) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: interval (2) integer, intent(in) :: degree real(kind=rk), intent(out), allocatable :: Xksi (:) real(kind=rk), intent(out), allocatable :: Wksi (:) Calls proc~~gauss_legendre_1d~~CallsGraph proc~gauss_legendre_1d gauss_legendre_1D gauss_legendre gauss_legendre proc~gauss_legendre_1d->gauss_legendre Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~gauss_legendre_1d~~CalledByGraph proc~gauss_legendre_1d gauss_legendre_1D interface~gauss_leg gauss_leg interface~gauss_leg->proc~gauss_legendre_1d proc~ansatz nurbs_volume%ansatz proc~ansatz->interface~gauss_leg proc~ansatz~2 nurbs_surface%ansatz proc~ansatz~2->interface~gauss_leg proc~ansatz~3 nurbs_curve%ansatz proc~ansatz~3->interface~gauss_leg proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~ansatz~2 proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~ansatz~3 proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~ansatz program~compute_area compute_area program~compute_area->proc~cmp_area program~compute_length compute_length program~compute_length->proc~cmp_length program~compute_volume compute_volume program~compute_volume->proc~cmp_volume Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/gauss_legendre_1d.html"},{"title":"gauss_legendre_2D – ForCAD","text":"private pure subroutine gauss_legendre_2D(interval1, interval2, degree, Xksi, Wksi) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: interval1 (2) real(kind=rk), intent(in) :: interval2 (2) integer, intent(in) :: degree (2) real(kind=rk), intent(out), allocatable :: Xksi (:,:) real(kind=rk), intent(out), allocatable :: Wksi (:) Calls proc~~gauss_legendre_2d~~CallsGraph proc~gauss_legendre_2d gauss_legendre_2D gauss_legendre gauss_legendre proc~gauss_legendre_2d->gauss_legendre interface~ndgrid ndgrid proc~gauss_legendre_2d->interface~ndgrid proc~kron kron proc~gauss_legendre_2d->proc~kron 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~~gauss_legendre_2d~~CalledByGraph proc~gauss_legendre_2d gauss_legendre_2D interface~gauss_leg gauss_leg interface~gauss_leg->proc~gauss_legendre_2d proc~ansatz nurbs_volume%ansatz proc~ansatz->interface~gauss_leg proc~ansatz~2 nurbs_surface%ansatz proc~ansatz~2->interface~gauss_leg proc~ansatz~3 nurbs_curve%ansatz proc~ansatz~3->interface~gauss_leg proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~ansatz~2 proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~ansatz~3 proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~ansatz program~compute_area compute_area program~compute_area->proc~cmp_area program~compute_length compute_length program~compute_length->proc~cmp_length program~compute_volume compute_volume program~compute_volume->proc~cmp_volume Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/gauss_legendre_2d.html"},{"title":"gauss_legendre_3D – ForCAD","text":"private pure subroutine gauss_legendre_3D(interval1, interval2, interval3, degree, Xksi, Wksi) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: interval1 (2) real(kind=rk), intent(in) :: interval2 (2) real(kind=rk), intent(in) :: interval3 (2) integer, intent(in) :: degree (3) real(kind=rk), intent(out), allocatable :: Xksi (:,:) real(kind=rk), intent(out), allocatable :: Wksi (:) Calls proc~~gauss_legendre_3d~~CallsGraph proc~gauss_legendre_3d gauss_legendre_3D gauss_legendre gauss_legendre proc~gauss_legendre_3d->gauss_legendre interface~ndgrid ndgrid proc~gauss_legendre_3d->interface~ndgrid proc~kron kron proc~gauss_legendre_3d->proc~kron 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~~gauss_legendre_3d~~CalledByGraph proc~gauss_legendre_3d gauss_legendre_3D interface~gauss_leg gauss_leg interface~gauss_leg->proc~gauss_legendre_3d proc~ansatz nurbs_volume%ansatz proc~ansatz->interface~gauss_leg proc~ansatz~2 nurbs_surface%ansatz proc~ansatz~2->interface~gauss_leg proc~ansatz~3 nurbs_curve%ansatz proc~ansatz~3->interface~gauss_leg proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~ansatz~2 proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~ansatz~3 proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~ansatz program~compute_area compute_area program~compute_area->proc~cmp_area program~compute_length compute_length program~compute_length->proc~cmp_length program~compute_volume compute_volume program~compute_volume->proc~cmp_volume Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/gauss_legendre_3d.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~ansatz nurbs_volume%ansatz proc~ansatz->interface~ndgrid interface~gauss_leg gauss_leg proc~ansatz->interface~gauss_leg none~derivative nurbs_volume%derivative proc~ansatz->none~derivative proc~ansatz~2 nurbs_surface%ansatz proc~ansatz~2->interface~ndgrid proc~ansatz~2->interface~gauss_leg none~derivative~2 nurbs_surface%derivative proc~ansatz~2->none~derivative~2 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 proc~gauss_legendre_2d gauss_legendre_2D proc~gauss_legendre_2d->interface~ndgrid proc~gauss_legendre_3d gauss_legendre_3D proc~gauss_legendre_3d->interface~ndgrid interface~gauss_leg->proc~gauss_legendre_2d interface~gauss_leg->proc~gauss_legendre_3d none~derivative->proc~derivative_vector none~derivative2 nurbs_volume%derivative2 none~derivative2->proc~derivative2_vector none~derivative2~2 nurbs_surface%derivative2 none~derivative2~2->proc~derivative2_vector~2 none~derivative~2->proc~derivative_vector~2 proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~ansatz~2 proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~ansatz 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 proc~ansatz~3 nurbs_curve%ansatz proc~ansatz~3->interface~gauss_leg program~compute_area compute_area program~compute_area->proc~cmp_area program~compute_volume compute_volume program~compute_volume->proc~cmp_volume proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~ansatz~3 program~compute_length compute_length program~compute_length->proc~cmp_length Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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~ansatz nurbs_volume%ansatz proc~ansatz->interface~ndgrid interface~gauss_leg gauss_leg proc~ansatz->interface~gauss_leg none~derivative nurbs_volume%derivative proc~ansatz->none~derivative proc~ansatz~2 nurbs_surface%ansatz proc~ansatz~2->interface~ndgrid proc~ansatz~2->interface~gauss_leg none~derivative~2 nurbs_surface%derivative proc~ansatz~2->none~derivative~2 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 proc~gauss_legendre_2d gauss_legendre_2D proc~gauss_legendre_2d->interface~ndgrid proc~gauss_legendre_3d gauss_legendre_3D proc~gauss_legendre_3d->interface~ndgrid interface~gauss_leg->proc~gauss_legendre_2d interface~gauss_leg->proc~gauss_legendre_3d none~derivative->proc~derivative_vector none~derivative2 nurbs_volume%derivative2 none~derivative2->proc~derivative2_vector none~derivative2~2 nurbs_surface%derivative2 none~derivative2~2->proc~derivative2_vector~2 none~derivative~2->proc~derivative_vector~2 proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~ansatz~2 proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~ansatz 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 proc~ansatz~3 nurbs_curve%ansatz proc~ansatz~3->interface~gauss_leg program~compute_area compute_area program~compute_area->proc~cmp_area program~compute_volume compute_volume program~compute_volume->proc~cmp_volume proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~ansatz~3 program~compute_length compute_length program~compute_length->proc~cmp_length Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_dir nurbs_volume%get_nc_dir proc~get_nc_dir->interface~compute_multiplicity proc~get_nc_dir~2 nurbs_surface%get_nc_dir proc~get_nc_dir~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~ansatz nurbs_volume%ansatz proc~ansatz->proc~cmp_elem proc~ansatz->none~set proc~ansatz~2 nurbs_surface%ansatz proc~ansatz~2->proc~cmp_elem~2 proc~ansatz~2->none~set~2 proc~ansatz~3 nurbs_curve%ansatz proc~ansatz~3->proc~cmp_elem~3 proc~ansatz~3->none~set~3 proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~cmp_elem~2 proc~cmp_area->proc~ansatz~2 proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~cmp_elem~3 proc~cmp_length->proc~ansatz~3 proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~cmp_elem proc~cmp_volume->proc~ansatz proc~set1a nurbs_curve%set1a proc~set1a->proc~cmp_degree~3 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~set1a 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~compute_area compute_area program~compute_area->none~set~2 program~compute_area->proc~cmp_area program~compute_length compute_length program~compute_length->proc~cmp_length program~compute_length->none~set~3 program~compute_volume compute_volume program~compute_volume->none~set program~compute_volume->proc~cmp_volume 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":"dyad – ForCAD","text":"public interface dyad Calls interface~~dyad~~CallsGraph interface~dyad dyad proc~dyad_t1_t1 dyad_t1_t1 interface~dyad->proc~dyad_t1_t1 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface 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~~dyad~~CalledByGraph interface~dyad dyad proc~ansatz~3 nurbs_curve%ansatz proc~ansatz~3->interface~dyad proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~ansatz~3 program~compute_length compute_length program~compute_length->proc~cmp_length Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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 dyad_t1_t1 (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 (:) real(kind=rk), intent(in), contiguous :: b (:) Return Value real(kind=rk), allocatable, (:,:)","tags":"","loc":"interface/dyad.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 proc~ansatz nurbs_volume%ansatz proc~ansatz->proc~cmp_elem proc~ansatz~2 nurbs_surface%ansatz proc~ansatz~2->proc~cmp_elem~2 proc~ansatz~3 nurbs_curve%ansatz proc~ansatz~3->proc~cmp_elem~3 proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~cmp_elem~2 proc~cmp_area->proc~ansatz~2 proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~cmp_elem~3 proc~cmp_length->proc~ansatz~3 proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~cmp_elem proc~cmp_volume->proc~ansatz program~example3_volume example3_volume program~example3_volume->proc~cmp_elem program~compute_area compute_area program~compute_area->proc~cmp_area program~compute_length compute_length program~compute_length->proc~cmp_length program~compute_volume compute_volume program~compute_volume->proc~cmp_volume Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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":"gauss_leg – ForCAD","text":"public interface gauss_leg Calls interface~~gauss_leg~~CallsGraph interface~gauss_leg gauss_leg proc~gauss_legendre_1d gauss_legendre_1D interface~gauss_leg->proc~gauss_legendre_1d proc~gauss_legendre_2d gauss_legendre_2D interface~gauss_leg->proc~gauss_legendre_2d proc~gauss_legendre_3d gauss_legendre_3D interface~gauss_leg->proc~gauss_legendre_3d gauss_legendre gauss_legendre proc~gauss_legendre_1d->gauss_legendre proc~gauss_legendre_2d->gauss_legendre interface~ndgrid ndgrid proc~gauss_legendre_2d->interface~ndgrid proc~kron kron proc~gauss_legendre_2d->proc~kron proc~gauss_legendre_3d->gauss_legendre proc~gauss_legendre_3d->interface~ndgrid proc~gauss_legendre_3d->proc~kron 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~~gauss_leg~~CalledByGraph interface~gauss_leg gauss_leg proc~ansatz nurbs_volume%ansatz proc~ansatz->interface~gauss_leg proc~ansatz~2 nurbs_surface%ansatz proc~ansatz~2->interface~gauss_leg proc~ansatz~3 nurbs_curve%ansatz proc~ansatz~3->interface~gauss_leg proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~ansatz~2 proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~ansatz~3 proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~ansatz program~compute_area compute_area program~compute_area->proc~cmp_area program~compute_length compute_length program~compute_length->proc~cmp_length program~compute_volume compute_volume program~compute_volume->proc~cmp_volume Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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 gauss_legendre_1D (interval, degree, Xksi, Wksi) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: interval (2) integer, intent(in) :: degree real(kind=rk), intent(out), allocatable :: Xksi (:) real(kind=rk), intent(out), allocatable :: Wksi (:) private pure subroutine gauss_legendre_2D (interval1, interval2, degree, Xksi, Wksi) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: interval1 (2) real(kind=rk), intent(in) :: interval2 (2) integer, intent(in) :: degree (2) real(kind=rk), intent(out), allocatable :: Xksi (:,:) real(kind=rk), intent(out), allocatable :: Wksi (:) private pure subroutine gauss_legendre_3D (interval1, interval2, interval3, degree, Xksi, Wksi) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: interval1 (2) real(kind=rk), intent(in) :: interval2 (2) real(kind=rk), intent(in) :: interval3 (2) integer, intent(in) :: degree (3) real(kind=rk), intent(out), allocatable :: Xksi (:,:) real(kind=rk), intent(out), allocatable :: Wksi (:)","tags":"","loc":"interface/gauss_leg.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~ansatz nurbs_volume%ansatz proc~ansatz->interface~ndgrid interface~gauss_leg gauss_leg proc~ansatz->interface~gauss_leg none~derivative nurbs_volume%derivative proc~ansatz->none~derivative proc~ansatz~2 nurbs_surface%ansatz proc~ansatz~2->interface~ndgrid proc~ansatz~2->interface~gauss_leg none~derivative~2 nurbs_surface%derivative proc~ansatz~2->none~derivative~2 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 proc~gauss_legendre_2d gauss_legendre_2D proc~gauss_legendre_2d->interface~ndgrid proc~gauss_legendre_3d gauss_legendre_3D proc~gauss_legendre_3d->interface~ndgrid interface~gauss_leg->proc~gauss_legendre_2d interface~gauss_leg->proc~gauss_legendre_3d none~derivative->proc~derivative_vector none~derivative2 nurbs_volume%derivative2 none~derivative2->proc~derivative2_vector none~derivative2~2 nurbs_surface%derivative2 none~derivative2~2->proc~derivative2_vector~2 none~derivative~2->proc~derivative_vector~2 proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~ansatz~2 proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~ansatz 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 proc~ansatz~3 nurbs_curve%ansatz proc~ansatz~3->interface~gauss_leg program~compute_area compute_area program~compute_area->proc~cmp_area program~compute_volume compute_volume program~compute_volume->proc~cmp_volume proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~ansatz~3 program~compute_length compute_length program~compute_length->proc~cmp_length Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~ansatz nurbs_volume%ansatz proc~ansatz->interface~unique proc~cmp_elem nurbs_volume%cmp_elem proc~ansatz->proc~cmp_elem proc~ansatz~2 nurbs_surface%ansatz proc~ansatz~2->interface~unique proc~cmp_elem~2 nurbs_surface%cmp_elem proc~ansatz~2->proc~cmp_elem~2 proc~ansatz~3 nurbs_curve%ansatz proc~ansatz~3->interface~unique proc~cmp_elem~3 nurbs_curve%cmp_elem proc~ansatz~3->proc~cmp_elem~3 proc~cmp_elem->interface~unique proc~cmp_elem~2->interface~unique proc~cmp_elem~3->interface~unique proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~ansatz~2 proc~cmp_area->proc~cmp_elem~2 proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~ansatz~3 proc~cmp_length->proc~cmp_elem~3 proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~ansatz proc~cmp_volume->proc~cmp_elem program~example3_volume example3_volume program~example3_volume->proc~cmp_elem program~compute_area compute_area program~compute_area->proc~cmp_area program~compute_length compute_length program~compute_length->proc~cmp_length program~compute_volume compute_volume program~compute_volume->proc~cmp_volume Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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":"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. Called by proc~~cmp_elem~3~~CalledByGraph proc~cmp_elem~3 nurbs_curve%cmp_elem proc~ansatz~3 nurbs_curve%ansatz proc~ansatz~3->proc~cmp_elem~3 proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~cmp_elem~3 proc~cmp_length->proc~ansatz~3 program~compute_length compute_length program~compute_length->proc~cmp_length Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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~ansatz~3 nurbs_curve%ansatz proc~ansatz~3->proc~cmp_elem~3 none~set~3 nurbs_curve%set proc~ansatz~3->none~set~3 proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~cmp_elem~3 proc~cmp_length->proc~ansatz~3 proc~set1a nurbs_curve%set1a proc~set1a->proc~cmp_degree~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->proc~set1a none~set~3->proc~set1~3 none~set~3->proc~set3~3 program~compute_length compute_length program~compute_length->proc~cmp_length program~compute_length->none~set~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.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 none~derivative~3 nurbs_curve%derivative none~derivative~3->proc~derivative_scalar~3 none~derivative~3->proc~derivative_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 proc~ansatz~3 nurbs_curve%ansatz proc~ansatz~3->none~derivative~3 proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~ansatz~3 program~compute_length compute_length program~compute_length->proc~cmp_length Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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":"ansatz – ForCAD","text":"private pure subroutine ansatz(this, ie, ig, Tgc, dTgc_dXg, dL) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this integer, intent(in) :: ie integer, intent(in) :: ig real(kind=rk), intent(out), allocatable :: Tgc (:) real(kind=rk), intent(out), allocatable :: dTgc_dXg (:,:) real(kind=rk), intent(out) :: dL Calls proc~~ansatz~3~~CallsGraph proc~ansatz~3 nurbs_curve%ansatz interface~dyad dyad proc~ansatz~3->interface~dyad interface~gauss_leg gauss_leg proc~ansatz~3->interface~gauss_leg interface~unique unique proc~ansatz~3->interface~unique none~derivative~3 nurbs_curve%derivative proc~ansatz~3->none~derivative~3 none~set~3 nurbs_curve%set proc~ansatz~3->none~set~3 proc~cmp_elem~3 nurbs_curve%cmp_elem proc~ansatz~3->proc~cmp_elem~3 proc~dyad_t1_t1 dyad_t1_t1 interface~dyad->proc~dyad_t1_t1 proc~gauss_legendre_1d gauss_legendre_1D interface~gauss_leg->proc~gauss_legendre_1d proc~gauss_legendre_2d gauss_legendre_2D interface~gauss_leg->proc~gauss_legendre_2d proc~gauss_legendre_3d gauss_legendre_3D interface~gauss_leg->proc~gauss_legendre_3d proc~unique_integer unique_integer interface~unique->proc~unique_integer proc~unique_real unique_real interface~unique->proc~unique_real proc~derivative_scalar~3 nurbs_curve%derivative_scalar none~derivative~3->proc~derivative_scalar~3 proc~derivative_vector~3 nurbs_curve%derivative_vector none~derivative~3->proc~derivative_vector~3 proc~set1a nurbs_curve%set1a none~set~3->proc~set1a 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~set4~3 nurbs_curve%set4 none~set~3->proc~set4~3 proc~cmp_elem~3->interface~unique interface~elemconn_cn elemConn_Cn proc~cmp_elem~3->interface~elemconn_cn 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 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 proc~derivative_vector~3->interface~compute_dtgc~3 proc~derivative_vector~3->proc~is_rational~3 gauss_legendre gauss_legendre proc~gauss_legendre_1d->gauss_legendre proc~gauss_legendre_2d->gauss_legendre interface~ndgrid ndgrid proc~gauss_legendre_2d->interface~ndgrid proc~kron kron proc~gauss_legendre_2d->proc~kron proc~gauss_legendre_3d->gauss_legendre proc~gauss_legendre_3d->interface~ndgrid proc~gauss_legendre_3d->proc~kron interface~compute_multiplicity compute_multiplicity proc~get_multiplicity~3->interface~compute_multiplicity proc~cmp_degree~3 nurbs_curve%cmp_degree proc~set1a->proc~cmp_degree~3 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~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 proc~cmp_degree~3->proc~get_multiplicity~3 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~~ansatz~3~~CalledByGraph proc~ansatz~3 nurbs_curve%ansatz proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~ansatz~3 program~compute_length compute_length program~compute_length->proc~cmp_length Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/ansatz~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~set1a nurbs_curve%set1a proc~set1a->proc~cmp_degree~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~set1a none~set~3->proc~set1~3 none~set~3->proc~set3~3 proc~ansatz~3 nurbs_curve%ansatz proc~ansatz~3->none~set~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~compute_length compute_length program~compute_length->none~set~3 proc~cmp_length nurbs_curve%cmp_length program~compute_length->proc~cmp_length 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 proc~cmp_length->proc~ansatz~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_length – ForCAD","text":"private pure subroutine cmp_length(this, length) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(out) :: length Calls proc~~cmp_length~~CallsGraph proc~cmp_length nurbs_curve%cmp_length proc~ansatz~3 nurbs_curve%ansatz proc~cmp_length->proc~ansatz~3 proc~cmp_elem~3 nurbs_curve%cmp_elem proc~cmp_length->proc~cmp_elem~3 proc~ansatz~3->proc~cmp_elem~3 interface~dyad dyad proc~ansatz~3->interface~dyad interface~gauss_leg gauss_leg proc~ansatz~3->interface~gauss_leg interface~unique unique proc~ansatz~3->interface~unique none~derivative~3 nurbs_curve%derivative proc~ansatz~3->none~derivative~3 none~set~3 nurbs_curve%set proc~ansatz~3->none~set~3 interface~elemconn_cn elemConn_Cn proc~cmp_elem~3->interface~elemconn_cn proc~cmp_elem~3->interface~unique proc~get_multiplicity~3 nurbs_curve%get_multiplicity proc~cmp_elem~3->proc~get_multiplicity~3 proc~dyad_t1_t1 dyad_t1_t1 interface~dyad->proc~dyad_t1_t1 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~gauss_legendre_1d gauss_legendre_1D interface~gauss_leg->proc~gauss_legendre_1d proc~gauss_legendre_2d gauss_legendre_2D interface~gauss_leg->proc~gauss_legendre_2d proc~gauss_legendre_3d gauss_legendre_3D interface~gauss_leg->proc~gauss_legendre_3d proc~unique_integer unique_integer interface~unique->proc~unique_integer proc~unique_real unique_real interface~unique->proc~unique_real proc~derivative_scalar~3 nurbs_curve%derivative_scalar none~derivative~3->proc~derivative_scalar~3 proc~derivative_vector~3 nurbs_curve%derivative_vector none~derivative~3->proc~derivative_vector~3 proc~set1a nurbs_curve%set1a none~set~3->proc~set1a 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~set4~3 nurbs_curve%set4 none~set~3->proc~set4~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 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 proc~derivative_vector~3->interface~compute_dtgc~3 proc~derivative_vector~3->proc~is_rational~3 gauss_legendre gauss_legendre proc~gauss_legendre_1d->gauss_legendre proc~gauss_legendre_2d->gauss_legendre interface~ndgrid ndgrid proc~gauss_legendre_2d->interface~ndgrid proc~kron kron proc~gauss_legendre_2d->proc~kron proc~gauss_legendre_3d->gauss_legendre proc~gauss_legendre_3d->interface~ndgrid proc~gauss_legendre_3d->proc~kron proc~cmp_degree~3 nurbs_curve%cmp_degree proc~set1a->proc~cmp_degree~3 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~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 ndgrid3 interface~ndgrid->proc~ndgrid3 proc~cmp_degree~3->proc~get_multiplicity~3 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~~cmp_length~~CalledByGraph proc~cmp_length nurbs_curve%cmp_length program~compute_length compute_length program~compute_length->proc~cmp_length Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_length.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, elem) 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 (:) integer, intent(in), optional :: elem (:) 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. Called by proc~~derivative_scalar~3~~CalledByGraph proc~derivative_scalar~3 nurbs_curve%derivative_scalar none~derivative~3 nurbs_curve%derivative none~derivative~3->proc~derivative_scalar~3 proc~ansatz~3 nurbs_curve%ansatz proc~ansatz~3->none~derivative~3 proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~ansatz~3 program~compute_length compute_length program~compute_length->proc~cmp_length Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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. Called by proc~~derivative_vector~3~~CalledByGraph proc~derivative_vector~3 nurbs_curve%derivative_vector none~derivative~3 nurbs_curve%derivative none~derivative~3->proc~derivative_vector~3 proc~ansatz~3 nurbs_curve%ansatz proc~ansatz~3->none~derivative~3 proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~ansatz~3 program~compute_length compute_length program~compute_length->proc~cmp_length Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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~set1a nurbs_curve%set1a none~set~3->proc~set1a 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~set4~3 nurbs_curve%set4 none~set~3->proc~set4~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~set1a->proc~cmp_degree~3 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~set1a nurbs_curve%set1a none~set~3->proc~set1a 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~set4~3 nurbs_curve%set4 none~set~3->proc~set4~3 proc~cmp_degree~3 nurbs_curve%cmp_degree proc~set1a->proc~cmp_degree~3 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~set1a nurbs_curve%set1a none~set~3->proc~set1a 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~set4~3 nurbs_curve%set4 none~set~3->proc~set4~3 proc~cmp_degree~3 nurbs_curve%cmp_degree proc~set1a->proc~cmp_degree~3 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~set1a nurbs_curve%set1a none~set~3->proc~set1a 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~set4~3 nurbs_curve%set4 none~set~3->proc~set4~3 proc~cmp_degree~3 nurbs_curve%cmp_degree proc~set1a->proc~cmp_degree~3 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 proc~nearest_point2~3 nurbs_curve%nearest_point2 proc~nearest_point2~3->proc~nearest_point~3 program~nearest_point_1d nearest_point_1d program~nearest_point_1d->proc~nearest_point~3 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_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 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~nearest_point~3 nurbs_curve%nearest_point proc~nearest_point2~3->proc~nearest_point~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 interface~nearest_point_help_1d nearest_point_help_1d proc~nearest_point~3->interface~nearest_point_help_1d 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~set1a nurbs_curve%set1a none~set~3->proc~set1a 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~set4~3 nurbs_curve%set4 none~set~3->proc~set4~3 proc~cmp_degree~3 nurbs_curve%cmp_degree proc~set1a->proc~cmp_degree~3 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~ansatz~3 nurbs_curve%ansatz proc~ansatz~3->none~set~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~compute_length compute_length program~compute_length->none~set~3 proc~cmp_length nurbs_curve%cmp_length program~compute_length->proc~cmp_length 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 proc~cmp_length->proc~ansatz~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":"set1a – ForCAD","text":"private pure subroutine set1a(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~~set1a~~CallsGraph proc~set1a nurbs_curve%set1a proc~cmp_degree~3 nurbs_curve%cmp_degree proc~set1a->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~~set1a~~CalledByGraph proc~set1a nurbs_curve%set1a none~set~3 nurbs_curve%set none~set~3->proc~set1a proc~ansatz~3 nurbs_curve%ansatz proc~ansatz~3->none~set~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~compute_length compute_length program~compute_length->none~set~3 proc~cmp_length nurbs_curve%cmp_length program~compute_length->proc~cmp_length 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 proc~cmp_length->proc~ansatz~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/set1a.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~ansatz~3 nurbs_curve%ansatz proc~ansatz~3->none~set~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~compute_length compute_length program~compute_length->none~set~3 proc~cmp_length nurbs_curve%cmp_length program~compute_length->proc~cmp_length 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 proc~cmp_length->proc~ansatz~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~ansatz~3 nurbs_curve%ansatz proc~ansatz~3->none~set~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~compute_length compute_length program~compute_length->none~set~3 proc~cmp_length nurbs_curve%cmp_length program~compute_length->proc~cmp_length 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 proc~cmp_length->proc~ansatz~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":"set4 – ForCAD","text":"private pure subroutine set4(this, degree, nc, Xc, Wc) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this integer, intent(in) :: degree integer, intent(in) :: nc real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) Called by proc~~set4~3~~CalledByGraph proc~set4~3 nurbs_curve%set4 none~set~3 nurbs_curve%set none~set~3->proc~set4~3 proc~ansatz~3 nurbs_curve%ansatz proc~ansatz~3->none~set~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~compute_length compute_length program~compute_length->none~set~3 proc~cmp_length nurbs_curve%cmp_length program~compute_length->proc~cmp_length 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 proc~cmp_length->proc~ansatz~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/set4~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~set1a nurbs_curve%set1a none~set~3->proc~set1a 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~set4~3 nurbs_curve%set4 none~set~3->proc~set4~3 proc~cmp_degree~3 nurbs_curve%cmp_degree proc~set1a->proc~cmp_degree~3 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~set1a nurbs_curve%set1a none~set~3->proc~set1a 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~set4~3 nurbs_curve%set4 none~set~3->proc~set4~3 proc~cmp_degree~3 nurbs_curve%cmp_degree proc~set1a->proc~cmp_degree~3 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~set1a nurbs_curve%set1a none~set~3->proc~set1a 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~set4~3 nurbs_curve%set4 none~set~3->proc~set4~3 proc~cmp_degree~3 nurbs_curve%cmp_degree proc~set1a->proc~cmp_degree~3 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 none~derivative~3 nurbs_curve%derivative none~derivative~3->proc~derivative_scalar~3 none~derivative~3->proc~derivative_vector~3 proc~ansatz~3 nurbs_curve%ansatz proc~ansatz~3->none~derivative~3 proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~ansatz~3 program~compute_length compute_length program~compute_length->proc~cmp_length Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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, f_elem) 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 (:) integer, intent(in), optional :: f_elem (:) 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, f_elem) 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 (:) integer, intent(in), optional :: f_elem (:) 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_point~3 nurbs_curve%nearest_point proc~nearest_point~3->interface~nearest_point_help_1d proc~nearest_point2~3 nurbs_curve%nearest_point2 proc~nearest_point2~3->proc~nearest_point~3 program~nearest_point_1d nearest_point_1d program~nearest_point_1d->proc~nearest_point~3 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. 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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~compute_area compute_area program~compute_area->module~forcad program~compute_length compute_length program~compute_length->module~forcad program~compute_volume compute_volume program~compute_volume->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~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, f_elem) 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 (:) integer, intent(in), optional :: f_elem (:) 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, f_elem) 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 (:) integer, intent(in), optional :: f_elem (:) 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 procedure, public :: ansatz Compute the shape functions, derivative of shape functions and dV Read more… 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 :: cmp_volume Compute the volume of the NURBS volume 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… generic, public :: get_nc => get_nc_all , get_nc_dir 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 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 , set4 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 :: set4 Set NURBS volume using degree, number of control points, 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… procedure, private :: get_nc_all Get number of control points in all directions Read more… procedure, private :: get_nc_dir Get number of control points in a specific direction 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_all (this) result(nc) 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_nc_dir (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 ansatz (this, ie, ig, Tgc, dTgc_dXg, dV) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in) :: ie integer, intent(in) :: ig real(kind=rk), intent(out), allocatable :: Tgc (:) real(kind=rk), intent(out), allocatable :: dTgc_dXg (:,:) real(kind=rk), intent(out) :: dV 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 cmp_volume (this, volume) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(out) :: volume 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, elem) 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 (:) integer, intent(in), optional :: elem (:) 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 set4 (this, degree, nc, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), contiguous :: degree (:) 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_nurbs_surface forcad_utils forcad_nurbs_curve forcad_nurbs_volume 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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~compute_area compute_area program~compute_area->module~forcad program~compute_length compute_length program~compute_length->module~forcad program~compute_volume compute_volume program~compute_volume->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~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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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~compute_area compute_area program~compute_area->module~forcad program~compute_length compute_length program~compute_length->module~forcad program~compute_volume compute_volume program~compute_volume->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~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, elem) 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 (:) integer, intent(in) :: elem (:) 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, elem) 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 (:) integer, intent(in) :: elem (:) 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 procedure, public :: ansatz Compute the shape functions, derivative of shape functions and dA Read more… 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_area Compute the area of the NURBS surface 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… generic, public :: get_nc => get_nc_all , get_nc_dir 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 , set4 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 :: set4 Set NURBS surface using degree, number of control points, 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… procedure, private :: get_nc_all Get number of control points in all directions Read more… procedure, private :: get_nc_dir Get number of control points in a specific direction 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_all (this) result(nc) 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_nc_dir (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 ansatz (this, ie, ig, Tgc, dTgc_dXg, dA) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in) :: ie integer, intent(in) :: ig real(kind=rk), intent(out), allocatable :: Tgc (:) real(kind=rk), intent(out), allocatable :: dTgc_dXg (:,:) real(kind=rk), intent(out) :: dA 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_area (this, area) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(out) :: area 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, elem) 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 (:) integer, intent(in), optional :: elem (:) 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 set4 (this, degree, nc, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), contiguous :: degree (:) 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. Uses stdlib_quadrature module~~forcad_utils~~UsesGraph module~forcad_utils forcad_utils stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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_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~compute_area compute_area program~compute_area->module~forcad program~compute_length compute_length program~compute_length->module~forcad program~compute_volume compute_volume program~compute_volume->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 dyad private pure function dyad_t1_t1 (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 (:) real(kind=rk), intent(in), contiguous :: b (:) Return Value real(kind=rk), allocatable, (:,:) 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 gauss_leg private pure subroutine gauss_legendre_1D (interval, degree, Xksi, Wksi) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: interval (2) integer, intent(in) :: degree real(kind=rk), intent(out), allocatable :: Xksi (:) real(kind=rk), intent(out), allocatable :: Wksi (:) private pure subroutine gauss_legendre_2D (interval1, interval2, degree, Xksi, Wksi) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: interval1 (2) real(kind=rk), intent(in) :: interval2 (2) integer, intent(in) :: degree (2) real(kind=rk), intent(out), allocatable :: Xksi (:,:) real(kind=rk), intent(out), allocatable :: Wksi (:) private pure subroutine gauss_legendre_3D (interval1, interval2, interval3, degree, Xksi, Wksi) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: interval1 (2) real(kind=rk), intent(in) :: interval2 (2) real(kind=rk), intent(in) :: interval3 (2) integer, intent(in) :: degree (3) real(kind=rk), intent(out), allocatable :: Xksi (:,:) real(kind=rk), intent(out), allocatable :: Wksi (:) 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 det (A) result(detA) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: A (:,:) Return Value real(kind=rk) 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 recursive function inv (A) result(A_inv) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: A (:,:) 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 dyad_t1_t1 (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 (:) real(kind=rk), intent(in), contiguous :: b (:) Return Value real(kind=rk), allocatable, (:,:) 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 gauss_legendre_1D (interval, degree, Xksi, Wksi) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: interval (2) integer, intent(in) :: degree real(kind=rk), intent(out), allocatable :: Xksi (:) real(kind=rk), intent(out), allocatable :: Wksi (:) private pure subroutine gauss_legendre_2D (interval1, interval2, degree, Xksi, Wksi) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: interval1 (2) real(kind=rk), intent(in) :: interval2 (2) integer, intent(in) :: degree (2) real(kind=rk), intent(out), allocatable :: Xksi (:,:) real(kind=rk), intent(out), allocatable :: Wksi (:) private pure subroutine gauss_legendre_3D (interval1, interval2, interval3, degree, Xksi, Wksi) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: interval1 (2) real(kind=rk), intent(in) :: interval2 (2) real(kind=rk), intent(in) :: interval3 (2) integer, intent(in) :: degree (3) real(kind=rk), intent(out), allocatable :: Xksi (:,:) real(kind=rk), intent(out), allocatable :: Wksi (:) 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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~compute_area compute_area program~compute_area->module~forcad program~compute_length compute_length program~compute_length->module~forcad program~compute_volume compute_volume program~compute_volume->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~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, f_elem) 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 (:) integer, intent(in), optional :: f_elem (:) 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, f_elem) 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 (:) integer, intent(in), optional :: f_elem (:) 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 procedure, public :: ansatz Compute the shape functions, derivative of shape functions and dL Read more… 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_length Compute the length of the NURBS curve 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 , set1a , set2 , set3 , set4 Set NURBS curve Read more… procedure, public :: set1 Set knot vector, control points and weights for the NURBS curve object Read more… procedure, public :: set1a 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 :: set4 Set NURBS curve using degree, number of control points, 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 ansatz (this, ie, ig, Tgc, dTgc_dXg, dL) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this integer, intent(in) :: ie integer, intent(in) :: ig real(kind=rk), intent(out), allocatable :: Tgc (:) real(kind=rk), intent(out), allocatable :: dTgc_dXg (:,:) real(kind=rk), intent(out) :: dL 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_length (this, length) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(out) :: length 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, elem) 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 (:) integer, intent(in), optional :: elem (:) 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 set1a (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 set4 (this, degree, nc, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this integer, intent(in) :: degree integer, intent(in) :: nc 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_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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 proc~set4 nurbs_volume%set4 none~set->proc~set4 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->proc~nearest_point none~derivative2 nurbs_volume%derivative2 proc~nearest_point2->none~derivative2 proc~cmp_xg nurbs_volume%cmp_Xg proc~nearest_point2->proc~cmp_xg proc~inv inv proc~nearest_point2->proc~inv 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~inv->proc~inv proc~det det proc~inv->proc~det 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":"compute_volume – ForCAD","text":"Uses forcad program~~compute_volume~~UsesGraph program~compute_volume compute_volume module~forcad forcad program~compute_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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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. Calls program~~compute_volume~~CallsGraph program~compute_volume compute_volume none~set nurbs_volume%set program~compute_volume->none~set proc~cmp_volume nurbs_volume%cmp_volume program~compute_volume->proc~cmp_volume 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~set4 nurbs_volume%set4 none~set->proc~set4 proc~ansatz nurbs_volume%ansatz proc~cmp_volume->proc~ansatz proc~cmp_elem nurbs_volume%cmp_elem proc~cmp_volume->proc~cmp_elem proc~ansatz->none~set proc~ansatz->proc~cmp_elem interface~gauss_leg gauss_leg proc~ansatz->interface~gauss_leg interface~ndgrid ndgrid proc~ansatz->interface~ndgrid interface~unique unique proc~ansatz->interface~unique none~derivative nurbs_volume%derivative proc~ansatz->none~derivative proc~det det proc~ansatz->proc~det proc~inv inv proc~ansatz->proc~inv interface~elemconn_cn elemConn_Cn proc~cmp_elem->interface~elemconn_cn proc~cmp_elem->interface~unique proc~get_multiplicity nurbs_volume%get_multiplicity proc~cmp_elem->proc~get_multiplicity 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_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~gauss_legendre_1d gauss_legendre_1D interface~gauss_leg->proc~gauss_legendre_1d proc~gauss_legendre_2d gauss_legendre_2D interface~gauss_leg->proc~gauss_legendre_2d proc~gauss_legendre_3d gauss_legendre_3D interface~gauss_leg->proc~gauss_legendre_3d 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 proc~derivative_scalar nurbs_volume%derivative_scalar none~derivative->proc~derivative_scalar proc~derivative_vector nurbs_volume%derivative_vector none~derivative->proc~derivative_vector 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~get_multiplicity->interface~compute_multiplicity proc~inv->proc~det proc~inv->proc~inv proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 interface~compute_dtgc compute_dTgc proc~derivative_scalar->interface~compute_dtgc proc~is_rational nurbs_volume%is_rational proc~derivative_scalar->proc~is_rational proc~derivative_vector->interface~ndgrid proc~derivative_vector->interface~compute_dtgc proc~derivative_vector->proc~is_rational gauss_legendre gauss_legendre proc~gauss_legendre_1d->gauss_legendre proc~gauss_legendre_2d->interface~ndgrid proc~gauss_legendre_2d->gauss_legendre proc~kron kron proc~gauss_legendre_2d->proc~kron proc~gauss_legendre_3d->interface~ndgrid proc~gauss_legendre_3d->gauss_legendre proc~gauss_legendre_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. Variables Type Attributes Name Initial real(kind=rk) :: Xc (8,3) type( nurbs_volume ) :: shape real(kind=rk) :: volume","tags":"","loc":"program/compute_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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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~set1a nurbs_curve%set1a none~set~3->proc~set1a 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~set4~3 nurbs_curve%set4 none~set~3->proc~set4~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~set1a->proc~cmp_degree~3 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":"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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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~set1a nurbs_curve%set1a none~set~3->proc~set1a 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~set4~3 nurbs_curve%set4 none~set~3->proc~set4~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 proc~nearest_point2~3->proc~nearest_point~3 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 interface~nearest_point_help_1d nearest_point_help_1d 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~set1a->proc~cmp_degree~3 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_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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 proc~set4~2 nurbs_surface%set4 none~set~2->proc~set4~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_ppm1 – ForCAD","text":"Uses forimage forcad fortime forcolormap 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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~set4~2 nurbs_surface%set4 none~set~2->proc~set4~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":"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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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~set1a nurbs_curve%set1a none~set~3->proc~set1a 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~set4~3 nurbs_curve%set4 none~set~3->proc~set4~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~set1a->proc~cmp_degree~3 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":"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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 generate_Xc program~example_nurbs_volume->proc~generate_xc 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 proc~set4 nurbs_volume%set4 none~set->proc~set4 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_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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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~set4 nurbs_volume%set4 none~set->proc~set4 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_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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 proc~set4~2 nurbs_surface%set4 none~set~2->proc~set4~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_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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 proc~set4~2 nurbs_surface%set4 none~set~2->proc~set4~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 proc~nearest_point2~2->proc~nearest_point~2 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~inv inv proc~nearest_point2~2->proc~inv interface~nearest_point_help_2d nearest_point_help_2d 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~inv->proc~inv proc~det det proc~inv->proc~det 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":"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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 proc~set4 nurbs_volume%set4 none~set->proc~set4 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":"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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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~2 generate_Xc program~example3_surface->proc~generate_xc~2 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 proc~set4~2 nurbs_surface%set4 none~set~2->proc~set4~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":"compute_length – ForCAD","text":"Uses forcad program~~compute_length~~UsesGraph program~compute_length compute_length module~forcad forcad program~compute_length->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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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. Calls program~~compute_length~~CallsGraph program~compute_length compute_length none~set~3 nurbs_curve%set program~compute_length->none~set~3 proc~cmp_length nurbs_curve%cmp_length program~compute_length->proc~cmp_length proc~set1a nurbs_curve%set1a none~set~3->proc~set1a 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~set4~3 nurbs_curve%set4 none~set~3->proc~set4~3 proc~ansatz~3 nurbs_curve%ansatz proc~cmp_length->proc~ansatz~3 proc~cmp_elem~3 nurbs_curve%cmp_elem proc~cmp_length->proc~cmp_elem~3 proc~ansatz~3->none~set~3 proc~ansatz~3->proc~cmp_elem~3 interface~dyad dyad proc~ansatz~3->interface~dyad interface~gauss_leg gauss_leg proc~ansatz~3->interface~gauss_leg interface~unique unique proc~ansatz~3->interface~unique none~derivative~3 nurbs_curve%derivative proc~ansatz~3->none~derivative~3 interface~elemconn_cn elemConn_Cn proc~cmp_elem~3->interface~elemconn_cn proc~cmp_elem~3->interface~unique proc~get_multiplicity~3 nurbs_curve%get_multiplicity proc~cmp_elem~3->proc~get_multiplicity~3 proc~cmp_degree~3 nurbs_curve%cmp_degree proc~set1a->proc~cmp_degree~3 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~dyad_t1_t1 dyad_t1_t1 interface~dyad->proc~dyad_t1_t1 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~gauss_legendre_1d gauss_legendre_1D interface~gauss_leg->proc~gauss_legendre_1d proc~gauss_legendre_2d gauss_legendre_2D interface~gauss_leg->proc~gauss_legendre_2d proc~gauss_legendre_3d gauss_legendre_3D interface~gauss_leg->proc~gauss_legendre_3d proc~unique_integer unique_integer interface~unique->proc~unique_integer proc~unique_real unique_real interface~unique->proc~unique_real proc~derivative_scalar~3 nurbs_curve%derivative_scalar none~derivative~3->proc~derivative_scalar~3 proc~derivative_vector~3 nurbs_curve%derivative_vector none~derivative~3->proc~derivative_vector~3 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 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 proc~derivative_vector~3->interface~compute_dtgc~3 proc~derivative_vector~3->proc~is_rational~3 gauss_legendre gauss_legendre proc~gauss_legendre_1d->gauss_legendre proc~gauss_legendre_2d->gauss_legendre interface~ndgrid ndgrid proc~gauss_legendre_2d->interface~ndgrid proc~kron kron proc~gauss_legendre_2d->proc~kron proc~gauss_legendre_3d->gauss_legendre proc~gauss_legendre_3d->interface~ndgrid proc~gauss_legendre_3d->proc~kron 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. Variables Type Attributes Name Initial real(kind=rk) :: Xc (2,3) real(kind=rk) :: length type( nurbs_curve ) :: shape","tags":"","loc":"program/compute_length.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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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~3 generate_Xc program~example_nurbs_curve->proc~generate_xc~3 proc~show~3 nurbs_curve%show program~example_nurbs_curve->proc~show~3 proc~set1a nurbs_curve%set1a none~set~3->proc~set1a 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~set4~3 nurbs_curve%set4 none~set~3->proc~set4~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~set1a->proc~cmp_degree~3 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":"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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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~set1a nurbs_curve%set1a none~set~3->proc~set1a 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~set4~3 nurbs_curve%set4 none~set~3->proc~set4~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~set1a->proc~cmp_degree~3 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":"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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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~4 generate_Xc program~example_nurbs_surface->proc~generate_xc~4 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 proc~set4~2 nurbs_surface%set4 none~set~2->proc~set4~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_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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 proc~set4~2 nurbs_surface%set4 none~set~2->proc~set4~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":"example_ppm3 – ForCAD","text":"Uses forimage forcad fortime forcolormap 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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~set4~2 nurbs_surface%set4 none~set~2->proc~set4~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_ppm2 – ForCAD","text":"Uses forimage forcad fortime forcolormap 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 proc~set4~2 nurbs_surface%set4 none~set~2->proc~set4~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":"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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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~5 generate_Xc program~example3_volume->proc~generate_xc~5 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 proc~set4 nurbs_volume%set4 none~set->proc~set4 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":"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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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~set1a nurbs_curve%set1a none~set~3->proc~set1a 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~set4~3 nurbs_curve%set4 none~set~3->proc~set4~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~set1a->proc~cmp_degree~3 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 proc~set4~2 nurbs_surface%set4 none~set~2->proc~set4~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":"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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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~set4~2 nurbs_surface%set4 none~set~2->proc~set4~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":"compute_area – ForCAD","text":"Uses forcad program~~compute_area~~UsesGraph program~compute_area compute_area module~forcad forcad program~compute_area->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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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. Calls program~~compute_area~~CallsGraph program~compute_area compute_area none~set~2 nurbs_surface%set program~compute_area->none~set~2 proc~cmp_area nurbs_surface%cmp_area program~compute_area->proc~cmp_area 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~set4~2 nurbs_surface%set4 none~set~2->proc~set4~2 proc~ansatz~2 nurbs_surface%ansatz proc~cmp_area->proc~ansatz~2 proc~cmp_elem~2 nurbs_surface%cmp_elem proc~cmp_area->proc~cmp_elem~2 proc~ansatz~2->none~set~2 proc~ansatz~2->proc~cmp_elem~2 interface~gauss_leg gauss_leg proc~ansatz~2->interface~gauss_leg interface~ndgrid ndgrid proc~ansatz~2->interface~ndgrid interface~unique unique proc~ansatz~2->interface~unique none~derivative~2 nurbs_surface%derivative proc~ansatz~2->none~derivative~2 proc~det det proc~ansatz~2->proc~det proc~inv inv proc~ansatz~2->proc~inv interface~elemconn_cn elemConn_Cn proc~cmp_elem~2->interface~elemconn_cn proc~cmp_elem~2->interface~unique proc~get_multiplicity~2 nurbs_surface%get_multiplicity proc~cmp_elem~2->proc~get_multiplicity~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~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~gauss_legendre_1d gauss_legendre_1D interface~gauss_leg->proc~gauss_legendre_1d proc~gauss_legendre_2d gauss_legendre_2D interface~gauss_leg->proc~gauss_legendre_2d proc~gauss_legendre_3d gauss_legendre_3D interface~gauss_leg->proc~gauss_legendre_3d 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 proc~derivative_scalar~2 nurbs_surface%derivative_scalar none~derivative~2->proc~derivative_scalar~2 proc~derivative_vector~2 nurbs_surface%derivative_vector none~derivative~2->proc~derivative_vector~2 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~get_multiplicity~2->interface~compute_multiplicity proc~inv->proc~det proc~inv->proc~inv proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 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 proc~derivative_vector~2->interface~ndgrid proc~derivative_vector~2->interface~compute_dtgc~2 proc~derivative_vector~2->proc~is_rational~2 gauss_legendre gauss_legendre proc~gauss_legendre_1d->gauss_legendre proc~gauss_legendre_2d->interface~ndgrid proc~gauss_legendre_2d->gauss_legendre proc~kron kron proc~gauss_legendre_2d->proc~kron proc~gauss_legendre_3d->interface~ndgrid proc~gauss_legendre_3d->gauss_legendre proc~gauss_legendre_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. Variables Type Attributes Name Initial real(kind=rk) :: Xc (4,3) real(kind=rk) :: area type( nurbs_surface ) :: shape","tags":"","loc":"program/compute_area.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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 proc~set4 nurbs_volume%set4 none~set->proc~set4 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":"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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 proc~set4 nurbs_volume%set4 none~set->proc~set4 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":"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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 proc~set4 nurbs_volume%set4 none~set->proc~set4 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":"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":"cmp_volume.f90 – ForCAD","text":"This file depends on sourcefile~~cmp_volume.f90~~EfferentGraph sourcefile~cmp_volume.f90 cmp_volume.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~cmp_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 program compute_volume use forcad implicit none type ( nurbs_volume ) :: shape real ( rk ) :: volume real ( rk ) :: Xc ( 8 , 3 ) 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 ] 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 , 2.0_rk , 2.0_rk ] Xc ( 8 ,:) = [ 2.0_rk , 2.0_rk , 2.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 ) call shape % cmp_volume ( volume ) print * , volume end program","tags":"","loc":"sourcefile/cmp_volume.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":"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~cmp_area.f90 cmp_area.f90 sourcefile~cmp_area.f90->sourcefile~forcad.f90 sourcefile~cmp_length.f90 cmp_length.f90 sourcefile~cmp_length.f90->sourcefile~forcad.f90 sourcefile~cmp_volume.f90 cmp_volume.f90 sourcefile~cmp_volume.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~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 , det , inv , gauss_leg 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 procedure :: set4 !!> Set NURBS volume using degree, number of control points, control points and weights generic :: set => set1 , set2 , set3 , set4 !!> 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 , private :: get_nc_dir !!> Get number of control points in a specific direction procedure , private :: get_nc_all !!> Get number of control points in all directions generic :: get_nc => get_nc_all , get_nc_dir !!> Get number of control 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) procedure :: ansatz !!> Compute the shape functions, derivative of shape functions and dV procedure :: cmp_volume !!> Compute the volume of the NURBS volume ! 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 , f_elem ) 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 (:) integer , intent ( in ), optional :: f_elem (:) 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 , f_elem ) 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 (:) integer , intent ( in ), optional :: f_elem (:) 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 set4 ( this , degree , nc , Xc , Wc ) class ( nurbs_volume ), intent ( inout ) :: this integer , intent ( in ), contiguous :: degree (:) integer , intent ( in ), contiguous :: nc (:) real ( rk ), intent ( in ), contiguous :: Xc (:,:) real ( rk ), intent ( in ), contiguous , optional :: Wc (:) integer :: m ( 3 ), i if ( allocated ( this % Xc )) deallocate ( this % Xc ) this % Xc = Xc this % nc = nc this % degree = degree ! Size of knot vectors m = nc + degree + 1 if ( allocated ( this % knot1 )) deallocate ( this % knot1 ) allocate ( this % knot1 ( m ( 1 ))) this % knot1 ( 1 : degree ( 1 ) + 1 ) = 0.0_rk this % knot1 ( degree ( 1 ) + 2 : m ( 1 ) - degree ( 1 ) - 1 ) = [( real ( i , rk ) / ( m ( 1 ) - 2 * degree ( 1 ) - 1 ), i = 1 , m ( 1 ) - 2 * degree ( 1 ) - 2 )] this % knot1 ( m ( 1 ) - degree ( 1 ): m ( 1 )) = 1.0_rk if ( allocated ( this % knot2 )) deallocate ( this % knot2 ) allocate ( this % knot2 ( m ( 2 ))) this % knot2 ( 1 : degree ( 2 ) + 1 ) = 0.0_rk this % knot2 ( degree ( 2 ) + 2 : m ( 2 ) - degree ( 2 ) - 1 ) = [( real ( i , rk ) / ( m ( 2 ) - 2 * degree ( 2 ) - 1 ), i = 1 , m ( 2 ) - 2 * degree ( 2 ) - 2 )] this % knot2 ( m ( 2 ) - degree ( 2 ): m ( 2 )) = 1.0_rk if ( allocated ( this % knot3 )) deallocate ( this % knot3 ) allocate ( this % knot3 ( m ( 3 ))) this % knot3 ( 1 : degree ( 3 ) + 1 ) = 0.0_rk this % knot3 ( degree ( 3 ) + 2 : m ( 3 ) - degree ( 3 ) - 1 ) = [( real ( i , rk ) / ( m ( 3 ) - 2 * degree ( 3 ) - 1 ), i = 1 , m ( 3 ) - 2 * degree ( 3 ) - 2 )] this % knot3 ( m ( 3 ) - degree ( 3 ): m ( 3 )) = 1.0_rk if ( present ( Wc )) then if ( size ( Wc ) /= nc ( 1 ) * nc ( 2 ) * 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_all ( this ) result ( nc ) class ( nurbs_volume ), intent ( in ) :: this integer :: nc ( 3 ) nc = this % nc end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_nc_dir ( 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 , elem ) class ( nurbs_volume ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: Xt (:) integer , intent ( in ), optional :: elem (:) 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 , elem ) else call compute_dTgc ( Xt , this % knot1 , this % knot2 , this % knot3 , this % degree , this % nc , dTgc , Tgc , elem ) 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 ) :: obj , grad ( 3 ), hess ( 3 , 3 ), dk ( 3 ), alphak , tau , beta , lower_bounds ( 3 ), upper_bounds ( 3 ) real ( rk ), allocatable :: Xg (:), xk (:), Tgc (:), dTgc (:,:), d2Tgc (:,:) 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 copy_this % create ( 50 , 50 , 50 ) call copy_this % nearest_point ( point_Xg = point_Xg , nearest_Xt = xk ) 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 dk = - matmul ( inv ( hess ), 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 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine ansatz ( this , ie , ig , Tgc , dTgc_dXg , dV ) class ( nurbs_volume ), intent ( inout ) :: this integer , intent ( in ) :: ie , ig real ( rk ), intent ( out ) :: dV real ( rk ), allocatable , intent ( out ) :: Tgc (:), dTgc_dXg (:,:) real ( rk ), allocatable :: Xth (:,:), Xth_e (:,:), Xth_eT (:,:), Xc_eT (:,:), Xth1 (:), Xth2 (:), Xth3 (:), Xksi (:,:), Wksi (:) integer , allocatable :: elem_th (:,:), elem_c (:,:), elem_ce (:) type ( nurbs_volume ) :: th , th_e real ( rk ), allocatable :: dTtth_dXksi (:,:), Ttth (:), dTgc_dXt (:,:), Xt (:), dXt_dXksi (:,:), dXg_dXt (:,:) real ( rk ), allocatable :: dXg_dXksi (:,:) !! Jacobian matrix real ( rk ) :: det_dXg_dXksi !! Determinant of the Jacobian matrix call gauss_leg ([ 0.0_rk , 1.0_rk ], [ 0.0_rk , 1.0_rk ], [ 0.0_rk , 1.0_rk ], this % degree , Xksi , Wksi ) Xth1 = unique ( this % knot1 ) Xth2 = unique ( this % knot2 ) Xth3 = unique ( this % knot3 ) call ndgrid ( Xth1 , Xth2 , Xth3 , Xth ) call th % set ([ 0.0_rk , Xth1 , 1.0_rk ], [ 0.0_rk , Xth2 , 1.0_rk ], [ 0.0_rk , Xth3 , 1.0_rk ], Xth ) elem_th = th % cmp_elem () elem_c = this % cmp_elem () Xth_e = Xth ( elem_th ( ie ,:),:) call th_e % set ([ 0.0_rk , 0.0_rk , 1.0_rk , 1.0_rk ], [ 0.0_rk , 0.0_rk , 1.0_rk , 1.0_rk ], [ 0.0_rk , 0.0_rk , 1.0_rk , 1.0_rk ], Xth_e ) Xth_eT = transpose ( Xth_e ) elem_ce = elem_c ( ie ,:) Xc_eT = transpose ( this % Xc ( elem_ce ,:)) call th_e % derivative ( Xksi ( ig ,:), dTtth_dXksi , Ttth ) Xt = matmul ( Xth_eT , Ttth ) dXt_dXksi = matmul ( Xth_eT , dTtth_dXksi ) call this % derivative ( Xt , dTgc_dXt , Tgc , elem_ce ) dXg_dXt = matmul ( Xc_eT , dTgc_dXt ) dTgc_dXg = matmul ( dTgc_dXt , inv ( dXg_dXt )) dXg_dXksi = matmul ( dXg_dXt , dXt_dXksi ) det_dXg_dXksi = det ( dXg_dXksi ) dV = det_dXg_dXksi * Wksi ( ig ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine cmp_volume ( this , volume ) class ( nurbs_volume ), intent ( inout ) :: this real ( rk ), intent ( out ) :: volume real ( rk ), allocatable :: Tgc (:), dTgc_dXg (:,:) integer :: ie , ig real ( rk ) :: dV , dV_ig volume = 0.0_rk do ie = 1 , size ( this % cmp_elem (), 1 ) dV = 0.0_rk do ig = 1 , size ( this % cmp_elem (), 2 ) call this % ansatz ( ie , ig , Tgc , dTgc_dXg , dV_ig ) dV = dV + dV_ig end do volume = volume + dV end do end subroutine !=============================================================================== 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 , elem ) 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 (:) integer , intent ( in ), optional :: elem (:) 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 (:) 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 ) if (. not . present ( elem )) then 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 ))) 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 ) else allocate ( dTgc ( size ( elem ), 3 )) allocate ( Tgc ( size ( elem ))) allocate ( dBi ( size ( elem ), 3 ), Bi ( size ( elem ))) associate ( Biall => kron ( B3 , kron ( B2 , B1 ))) Bi = Biall ( elem ) Tgc = Bi * ( Wc ( elem ) / ( dot_product ( Bi , Wc ( elem )))) end associate associate ( dB1all => kron ( kron ( B3 , B2 ), dB1 ), dB2all => kron ( kron ( B3 , dB2 ), B1 ), dB3all => kron ( kron ( dB3 , B2 ), B1 )) dBi (:, 1 ) = dB1all ( elem ) dBi (:, 2 ) = dB2all ( elem ) dBi (:, 3 ) = dB3all ( elem ) end associate dTgc (:, 1 ) = ( dBi (:, 1 ) * Wc ( elem ) - Tgc * dot_product ( dBi (:, 1 ), Wc ( elem )) ) / dot_product ( Bi , Wc ( elem )) dTgc (:, 2 ) = ( dBi (:, 2 ) * Wc ( elem ) - Tgc * dot_product ( dBi (:, 2 ), Wc ( elem )) ) / dot_product ( Bi , Wc ( elem )) dTgc (:, 3 ) = ( dBi (:, 3 ) * Wc ( elem ) - Tgc * dot_product ( dBi (:, 3 ), Wc ( elem )) ) / dot_product ( Bi , Wc ( elem )) end if 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 , elem ) 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 ), optional :: elem (:) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: Tgc (:) real ( rk ), allocatable :: dB1 (:), dB2 (:), dB3 (:) real ( rk ), allocatable :: B1 (:), B2 (:), B3 (:) 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 ) if (. not . present ( elem )) then allocate ( dTgc ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ), 3 )) allocate ( Tgc ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ))) 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 ) else allocate ( dTgc ( size ( elem ), 3 )) allocate ( Tgc ( size ( elem ))) associate ( B => kron ( B3 , kron ( B2 , B1 ))) Tgc = B ( elem ) end associate associate ( dB1 => kron ( kron ( B3 , B2 ), dB1 ), dB2 => kron ( kron ( B3 , dB2 ), B1 ), dB3 => kron ( kron ( dB3 , B2 ), B1 )) dTgc (:, 1 ) = dB1 ( elem ) dTgc (:, 2 ) = dB2 ( elem ) dTgc (:, 3 ) = dB3 ( elem ) end associate end if 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":"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_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":"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":"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_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":"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":"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~cmp_area.f90 cmp_area.f90 sourcefile~cmp_area.f90->sourcefile~forcad.f90 sourcefile~cmp_length.f90 cmp_length.f90 sourcefile~cmp_length.f90->sourcefile~forcad.f90 sourcefile~cmp_volume.f90 cmp_volume.f90 sourcefile~cmp_volume.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~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":"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":"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":"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":"cmp_length.f90 – ForCAD","text":"This file depends on sourcefile~~cmp_length.f90~~EfferentGraph sourcefile~cmp_length.f90 cmp_length.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~cmp_length.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 compute_length use forcad implicit none type ( nurbs_curve ) :: shape real ( rk ) :: length real ( rk ) :: Xc ( 2 , 3 ) Xc ( 1 ,:) = [ 0.0_rk , 0.0_rk , 0.0_rk ] Xc ( 2 ,:) = [ 2.0_rk , 0.0_rk , 0.0_rk ] call shape % set (& knot = [ 0.0_rk , 0.0_rk , 1.0_rk , 1.0_rk ],& Xc = Xc ) call shape % cmp_length ( length ) print * , length end program","tags":"","loc":"sourcefile/cmp_length.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_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_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~cmp_area.f90 cmp_area.f90 sourcefile~cmp_area.f90->sourcefile~forcad.f90 sourcefile~cmp_length.f90 cmp_length.f90 sourcefile~cmp_length.f90->sourcefile~forcad.f90 sourcefile~cmp_volume.f90 cmp_volume.f90 sourcefile~cmp_volume.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~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 , det , inv , gauss_leg 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 procedure :: set4 !!> Set NURBS surface using degree, number of control points, control points and weights generic :: set => set1 , set2 , set3 , set4 !!> 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 , private :: get_nc_dir !!> Get number of control points in a specific direction procedure , private :: get_nc_all !!> Get number of control points in all directions generic :: get_nc => get_nc_all , get_nc_dir !!> Get number of control 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 , 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) procedure :: ansatz !!> Compute the shape functions, derivative of shape functions and dA procedure :: cmp_area !!> Compute the area of the NURBS surface ! 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 , elem ) 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 (:) integer , intent ( in ) :: elem (:) end subroutine pure subroutine compute_dTgc_bspline_2d_scalar ( f_Xt , f_knot1 , f_knot2 , f_degree , nc , f_dTgc , f_Tgc , elem ) 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 (:) integer , intent ( in ) :: elem (:) 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 set4 ( this , degree , nc , Xc , Wc ) class ( nurbs_surface ), intent ( inout ) :: this integer , intent ( in ), contiguous :: degree (:) integer , intent ( in ), contiguous :: nc (:) real ( rk ), intent ( in ), contiguous :: Xc (:,:) real ( rk ), intent ( in ), contiguous , optional :: Wc (:) integer :: m ( 2 ), i if ( allocated ( this % Xc )) deallocate ( this % Xc ) this % Xc = Xc this % nc = nc this % degree = degree ! Size of knot vectors m = nc + degree + 1 if ( allocated ( this % knot1 )) deallocate ( this % knot1 ) allocate ( this % knot1 ( m ( 1 ))) this % knot1 ( 1 : degree ( 1 ) + 1 ) = 0.0_rk this % knot1 ( degree ( 1 ) + 2 : m ( 1 ) - degree ( 1 ) - 1 ) = [( real ( i , rk ) / ( m ( 1 ) - 2 * degree ( 1 ) - 1 ), i = 1 , m ( 1 ) - 2 * degree ( 1 ) - 2 )] this % knot1 ( m ( 1 ) - degree ( 1 ): m ( 1 )) = 1.0_rk if ( allocated ( this % knot2 )) deallocate ( this % knot2 ) allocate ( this % knot2 ( m ( 2 ))) this % knot2 ( 1 : degree ( 2 ) + 1 ) = 0.0_rk this % knot2 ( degree ( 2 ) + 2 : m ( 2 ) - degree ( 2 ) - 1 ) = [( real ( i , rk ) / ( m ( 2 ) - 2 * degree ( 2 ) - 1 ), i = 1 , m ( 2 ) - 2 * degree ( 2 ) - 2 )] this % knot2 ( m ( 2 ) - degree ( 2 ): m ( 2 )) = 1.0_rk if ( present ( Wc )) then if ( size ( Wc ) /= nc ( 1 ) * 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_all ( this ) result ( nc ) class ( nurbs_surface ), intent ( in ) :: this integer :: nc ( 2 ) nc = this % nc end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_nc_dir ( 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 , elem ) class ( nurbs_surface ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: Xt (:) integer , intent ( in ), optional :: elem (:) 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 , elem ) else ! B-Spline call compute_dTgc ( Xt , this % knot1 , this % knot2 , this % degree , this % nc , dTgc , Tgc , elem ) 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 ) :: obj , grad ( 2 ), hess ( 2 , 2 ), dk ( 2 ), alphak , tau , beta , lower_bounds ( 2 ), upper_bounds ( 2 ) real ( rk ), allocatable :: Xg (:), xk (:), Tgc (:), dTgc (:,:), d2Tgc (:,:) 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 copy_this % create ( 10 , 10 ) call copy_this % nearest_point ( point_Xg = point_Xg , nearest_Xt = xk ) 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 dk = - matmul ( inv ( hess ), 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 subroutine ansatz ( this , ie , ig , Tgc , dTgc_dXg , dA ) class ( nurbs_surface ), intent ( inout ) :: this integer , intent ( in ) :: ie , ig real ( rk ), intent ( out ) :: dA real ( rk ), allocatable , intent ( out ) :: Tgc (:), dTgc_dXg (:,:) real ( rk ), allocatable :: Xth (:,:), Xth_e (:,:), Xth_eT (:,:), Xc_eT (:,:), Xth1 (:), Xth2 (:), Xksi (:,:), Wksi (:) integer , allocatable :: elem_th (:,:), elem_c (:,:), elem_ce (:) type ( nurbs_surface ) :: th , th_e real ( rk ), allocatable :: dTtth_dXksi (:,:), Ttth (:), dTgc_dXt (:,:), Xt (:), dXt_dXksi (:,:), dXg_dXt (:,:) real ( rk ), allocatable :: dXg_dXksi (:,:) !! Jacobian matrix real ( rk ) :: det_dXg_dXksi !! Determinant of the Jacobian matrix call gauss_leg ([ 0.0_rk , 1.0_rk ], [ 0.0_rk , 1.0_rk ], this % degree , Xksi , Wksi ) Xth1 = unique ( this % knot1 ) Xth2 = unique ( this % knot2 ) call ndgrid ( Xth1 , Xth2 , Xth ) call th % set ([ 0.0_rk , Xth1 , 1.0_rk ], [ 0.0_rk , Xth2 , 1.0_rk ], Xth ) elem_th = th % cmp_elem () elem_c = this % cmp_elem () Xth_e = Xth ( elem_th ( ie ,:),:) call th_e % set ([ 0.0_rk , 0.0_rk , 1.0_rk , 1.0_rk ], [ 0.0_rk , 0.0_rk , 1.0_rk , 1.0_rk ], Xth_e ) Xth_eT = transpose ( Xth_e ) elem_ce = elem_c ( ie ,:) Xc_eT = transpose ( this % Xc ( elem_ce ,:)) call th_e % derivative ( Xksi ( ig ,:), dTtth_dXksi , Ttth ) Xt = matmul ( Xth_eT , Ttth ) dXt_dXksi = matmul ( Xth_eT , dTtth_dXksi ) call this % derivative ( Xt , dTgc_dXt , Tgc , elem_ce ) dXg_dXt = matmul ( Xc_eT , dTgc_dXt ) dTgc_dXg = matmul ( dTgc_dXt , inv ( dXg_dXt )) dXg_dXksi = matmul ( dXg_dXt , dXt_dXksi ) det_dXg_dXksi = det ( dXg_dXksi ) dA = det_dXg_dXksi * Wksi ( ig ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine cmp_area ( this , area ) class ( nurbs_surface ), intent ( inout ) :: this real ( rk ), intent ( out ) :: area real ( rk ), allocatable :: Tgc (:), dTgc_dXg (:,:) integer :: ie , ig real ( rk ) :: dA , dA_ig area = 0.0_rk do ie = 1 , size ( this % cmp_elem (), 1 ) dA = 0.0_rk do ig = 1 , size ( this % cmp_elem (), 2 ) call this % ansatz ( ie , ig , Tgc , dTgc_dXg , dA_ig ) dA = dA + dA_ig end do area = area + dA 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 , elem ) 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 (:) integer , intent ( in ), optional :: elem (:) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: Tgc (:) real ( rk ), allocatable :: dB1 (:), dB2 (:), dBi (:,:) real ( rk ), allocatable :: B1 (:), B2 (:), Bi (:) 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 ) if (. not . present ( elem )) then allocate ( dTgc ( nc ( 1 ) * nc ( 2 ), 2 ), Tgc ( nc ( 1 ) * nc ( 2 ))) allocate ( dBi ( nc ( 1 ) * nc ( 2 ), 2 ), Bi ( nc ( 1 ) * nc ( 2 ))) 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 ) else allocate ( dTgc ( size ( elem ), 2 ), Tgc ( size ( elem ))) allocate ( dBi ( size ( elem ), 2 ), Bi ( size ( elem ))) associate ( Biall => kron ( B2 , B1 )) Bi = Biall ( elem ) Tgc = Bi * ( Wc ( elem ) / ( dot_product ( Bi , Wc ( elem )))) end associate associate ( dB1all => kron ( B2 , dB1 ), dB2all => kron ( dB2 , B1 )) dBi (:, 1 ) = dB1all ( elem ) dBi (:, 2 ) = dB2all ( elem ) end associate dTgc (:, 1 ) = ( dBi (:, 1 ) * Wc ( elem ) - Tgc * dot_product ( dBi (:, 1 ), Wc ( elem )) ) / dot_product ( Bi , Wc ( elem )) dTgc (:, 2 ) = ( dBi (:, 2 ) * Wc ( elem ) - Tgc * dot_product ( dBi (:, 2 ), Wc ( elem )) ) / dot_product ( Bi , Wc ( elem )) end if 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 ), Tgc ( ng ( 1 ) * ng ( 2 ), nc ( 1 ) * nc ( 2 ))) allocate ( B1 ( nc ( 1 )), B2 ( nc ( 2 )), dB1 ( nc ( 1 )), dB2 ( nc ( 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 ) Tgc ( i ,:) = kron ( B2 , B1 ) dTgc ( i ,:, 1 ) = kron ( B2 , dB1 ) dTgc ( i ,:, 2 ) = kron ( dB2 , B1 ) end 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 , elem ) 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 ), optional :: elem (:) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: Tgc (:) real ( rk ), allocatable :: dTgc1 (:), dTgc2 (:) real ( rk ), allocatable :: Tgc1 (:), Tgc2 (:) 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 ) if (. not . present ( elem )) then allocate ( dTgc ( nc ( 1 ) * nc ( 2 ), 2 )) Tgc = kron ( Tgc2 , Tgc1 ) dTgc (:, 1 ) = kron ( Tgc2 , dTgc1 ) dTgc (:, 2 ) = kron ( dTgc2 , Tgc1 ) else allocate ( dTgc ( size ( elem ), 2 )) associate ( B => kron ( Tgc2 , Tgc1 )) Tgc = B ( elem ) end associate associate ( dB1 => kron ( Tgc2 , dTgc1 ), dB2 => kron ( dTgc2 , Tgc1 )) dTgc (:, 1 ) = dB1 ( elem ) dTgc (:, 2 ) = dB2 ( elem ) end associate end if 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":"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_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_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":"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":"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":"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":"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":"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~cmp_area.f90 cmp_area.f90 sourcefile~cmp_area.f90->sourcefile~forcad.f90 sourcefile~cmp_length.f90 cmp_length.f90 sourcefile~cmp_length.f90->sourcefile~forcad.f90 sourcefile~cmp_volume.f90 cmp_volume.f90 sourcefile~cmp_volume.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 use stdlib_quadrature , only : gauss_legendre 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 , det , inv , dyad , gauss_leg 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 !=============================================================================== !=============================================================================== interface dyad module procedure dyad_t1_t1 end interface !=============================================================================== !=============================================================================== interface gauss_leg module procedure gauss_legendre_1D module procedure gauss_legendre_2D module procedure gauss_legendre_3D 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 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function det ( A ) result ( detA ) real ( rk ), intent ( in ) :: A (:,:) real ( rk ) :: detA if ( size ( A , 1 ) == size ( A , 2 )) then select case ( size ( A , 1 )) case ( 2 ) detA = A ( 1 , 1 ) * A ( 2 , 2 ) - A ( 1 , 2 ) * A ( 2 , 1 ) case ( 3 ) detA = & + A ( 1 , 1 ) * ( A ( 2 , 2 ) * A ( 3 , 3 ) - A ( 2 , 3 ) * A ( 3 , 2 ) )& - A ( 1 , 2 ) * ( A ( 2 , 1 ) * A ( 3 , 3 ) - A ( 2 , 3 ) * A ( 3 , 1 ) )& + A ( 1 , 3 ) * ( A ( 2 , 1 ) * A ( 3 , 2 ) - A ( 2 , 2 ) * A ( 3 , 1 ) ) end select elseif ( size ( A , 1 ) == 3 . and . size ( A , 2 ) == 2 ) then detA = & + A ( 1 , 1 ) * ( A ( 2 , 2 ) * 1.0_rk - A ( 3 , 2 ) * 1.0_rk )& - A ( 1 , 2 ) * ( A ( 2 , 1 ) * 1.0_rk - A ( 3 , 1 ) * 1.0_rk )& + 1.0_rk * ( A ( 2 , 1 ) * A ( 3 , 2 ) - A ( 3 , 1 ) * A ( 2 , 2 ) ) end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause recursive pure function inv ( A ) result ( A_inv ) real ( rk ), intent ( in ) :: A (:,:) real ( rk ), allocatable :: A_inv (:,:) if ( size ( A , 1 ) == size ( A , 2 )) then select case ( size ( A , 1 )) case ( 2 ) allocate ( A_inv ( size ( A , 1 ), size ( A , 2 ))) A_inv ( 1 , 1 ) = A ( 2 , 2 ) A_inv ( 1 , 2 ) = - A ( 1 , 2 ) A_inv ( 2 , 1 ) = - A ( 2 , 1 ) A_inv ( 2 , 2 ) = A ( 1 , 1 ) A_inv = A_inv / det ( A ) case ( 3 ) allocate ( A_inv ( size ( A , 1 ), size ( A , 2 ))) A_inv ( 1 , 1 ) = A ( 2 , 2 ) * A ( 3 , 3 ) - A ( 2 , 3 ) * A ( 3 , 2 ) A_inv ( 1 , 2 ) = A ( 1 , 3 ) * A ( 3 , 2 ) - A ( 1 , 2 ) * A ( 3 , 3 ) A_inv ( 1 , 3 ) = A ( 1 , 2 ) * A ( 2 , 3 ) - A ( 1 , 3 ) * A ( 2 , 2 ) A_inv ( 2 , 1 ) = A ( 2 , 3 ) * A ( 3 , 1 ) - A ( 2 , 1 ) * A ( 3 , 3 ) A_inv ( 2 , 2 ) = A ( 1 , 1 ) * A ( 3 , 3 ) - A ( 1 , 3 ) * A ( 3 , 1 ) A_inv ( 2 , 3 ) = A ( 1 , 3 ) * A ( 2 , 1 ) - A ( 1 , 1 ) * A ( 2 , 3 ) A_inv ( 3 , 1 ) = A ( 2 , 1 ) * A ( 3 , 2 ) - A ( 2 , 2 ) * A ( 3 , 1 ) A_inv ( 3 , 2 ) = A ( 1 , 2 ) * A ( 3 , 1 ) - A ( 1 , 1 ) * A ( 3 , 2 ) A_inv ( 3 , 3 ) = A ( 1 , 1 ) * A ( 2 , 2 ) - A ( 1 , 2 ) * A ( 2 , 1 ) A_inv = A_inv / det ( A ) end select elseif ( size ( A , 1 ) > size ( A , 2 )) then allocate ( A_inv ( size ( A , 2 ), size ( A , 1 ))) A_inv = transpose ( A ) A_inv = matmul ( inv ( matmul ( A_inv , A )), A_inv ) elseif ( size ( A , 1 ) < size ( A , 2 )) then allocate ( A_inv ( size ( A , 2 ), size ( A , 1 ))) A_inv = transpose ( A ) A_inv = matmul ( A_inv , inv ( matmul ( A , A_inv ))) end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function dyad_t1_t1 ( a , b ) result ( c ) real ( rk ), intent ( in ), contiguous :: a (:) real ( rk ), intent ( in ), contiguous :: b (:) real ( rk ), allocatable :: c (:,:) integer :: i allocate ( c ( size ( a ), size ( b ))) do concurrent ( i = 1 : size ( c , 1 )) c ( i , :) = a ( i ) * b (:) end do end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine gauss_legendre_1D ( interval , degree , Xksi , Wksi ) real ( rk ), intent ( in ) :: interval ( 2 ) integer , intent ( in ) :: degree real ( rk ), allocatable , intent ( out ) :: Xksi (:), Wksi (:) allocate ( Xksi ( degree + 1 ), Wksi ( degree + 1 )) call gauss_legendre ( Xksi , Wksi , interval ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine gauss_legendre_2D ( interval1 , interval2 , degree , Xksi , Wksi ) real ( rk ), intent ( in ) :: interval1 ( 2 ), interval2 ( 2 ) integer , intent ( in ) :: degree ( 2 ) real ( rk ), allocatable , intent ( out ) :: Xksi (:,:), Wksi (:) real ( rk ), allocatable :: Xksi1 (:), Wksi1 (:), Xksi2 (:), Wksi2 (:) allocate ( Xksi1 ( degree ( 1 ) + 1 ), Wksi1 ( degree ( 1 ) + 1 )) allocate ( Xksi2 ( degree ( 2 ) + 1 ), Wksi2 ( degree ( 2 ) + 1 )) call gauss_legendre ( Xksi1 , Wksi1 , interval1 ) call gauss_legendre ( Xksi2 , Wksi2 , interval2 ) call ndgrid ( Xksi1 , Xksi2 , Xksi ) Wksi = kron ( Wksi1 , Wksi2 ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine gauss_legendre_3D ( interval1 , interval2 , interval3 , degree , Xksi , Wksi ) real ( rk ), intent ( in ) :: interval1 ( 2 ), interval2 ( 2 ), interval3 ( 2 ) integer , intent ( in ) :: degree ( 3 ) real ( rk ), allocatable , intent ( out ) :: Xksi (:,:), Wksi (:) real ( rk ), allocatable :: Xksi1 (:), Wksi1 (:), Xksi2 (:), Wksi2 (:), Xksi3 (:), Wksi3 (:) allocate ( Xksi1 ( degree ( 1 ) + 1 ), Wksi1 ( degree ( 1 ) + 1 )) allocate ( Xksi2 ( degree ( 2 ) + 1 ), Wksi2 ( degree ( 2 ) + 1 )) allocate ( Xksi3 ( degree ( 3 ) + 1 ), Wksi3 ( degree ( 3 ) + 1 )) call gauss_legendre ( Xksi1 , Wksi1 , interval1 ) call gauss_legendre ( Xksi2 , Wksi2 , interval2 ) call gauss_legendre ( Xksi3 , Wksi3 , interval3 ) call ndgrid ( Xksi1 , Xksi2 , Xksi3 , Xksi ) Wksi = kron ( kron ( Wksi3 , Wksi2 ), Wksi1 ) end subroutine !=============================================================================== end module forcad_utils","tags":"","loc":"sourcefile/forcad_utils.f90.html"},{"title":"cmp_area.f90 – ForCAD","text":"This file depends on sourcefile~~cmp_area.f90~~EfferentGraph sourcefile~cmp_area.f90 cmp_area.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~cmp_area.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 compute_area use forcad implicit none type ( nurbs_surface ) :: shape real ( rk ) :: area real ( rk ) :: Xc ( 4 , 3 ) 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 ] 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 ) call shape % cmp_area ( area ) print * , area end program","tags":"","loc":"sourcefile/cmp_area.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":"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":"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":"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~cmp_area.f90 cmp_area.f90 sourcefile~cmp_area.f90->sourcefile~forcad.f90 sourcefile~cmp_length.f90 cmp_length.f90 sourcefile~cmp_length.f90->sourcefile~forcad.f90 sourcefile~cmp_volume.f90 cmp_volume.f90 sourcefile~cmp_volume.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~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 , dyad , gauss_leg 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 :: set1a 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 procedure :: set4 !!> Set NURBS curve using degree, number of control points, control points and weights generic :: set => set1 , set1a , set2 , set3 , set4 !!> 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) procedure :: ansatz !!> Compute the shape functions, derivative of shape functions and dL procedure :: cmp_length !!> Compute the length of the NURBS curve ! 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 , f_elem ) 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 (:) integer , intent ( in ), optional :: f_elem (:) end subroutine pure subroutine compute_dTgc_bspline_1d_scalar ( f_Xt , f_knot , f_degree , f_nc , f_dTgc , f_Tgc , f_elem ) 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 (:) integer , intent ( in ), optional :: f_elem (:) 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 knot vector, control points and weights for the NURBS curve object. pure subroutine set1a ( 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 () allocate ( this % Xc ( size ( Xc ), 3 ), source = 0.0_rk ) this % Xc (:, 1 ) = 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 set4 ( this , degree , nc , Xc , Wc ) class ( nurbs_curve ), intent ( inout ) :: this integer , intent ( in ) :: degree integer , intent ( in ) :: nc real ( rk ), intent ( in ), contiguous :: Xc (:,:) real ( rk ), intent ( in ), contiguous , optional :: Wc (:) integer :: m , i if ( allocated ( this % Xc )) deallocate ( this % Xc ) this % Xc = Xc this % nc = nc this % degree = degree ! Size of knot vectors m = nc + degree + 1 if ( allocated ( this % knot )) deallocate ( this % knot ) allocate ( this % knot ( m )) this % knot ( 1 : degree + 1 ) = 0.0_rk this % knot ( degree + 2 : m - degree - 1 ) = [( real ( i , rk ) / ( m - 2 * degree - 1 ), i = 1 , m - 2 * degree - 2 )] this % knot ( m - degree : m ) = 1.0_rk if ( present ( Wc )) then if ( size ( Wc ) /= 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 , elem ) class ( nurbs_curve ), intent ( inout ) :: this real ( rk ), intent ( in ) :: Xt integer , intent ( in ), optional :: elem (:) 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 , elem ) else ! B-Spline call compute_dTgc ( Xt , this % knot , this % degree , this % nc , dTgc , Tgc , elem ) 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 (:) 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 copy_this % create ( 10 ) call copy_this % nearest_point ( point_Xg = point_Xg , nearest_Xt = xk ) 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 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine ansatz ( this , ie , ig , Tgc , dTgc_dXg , dL ) class ( nurbs_curve ), intent ( inout ) :: this integer , intent ( in ) :: ie , ig real ( rk ), intent ( out ) :: dL real ( rk ), allocatable , intent ( out ) :: Tgc (:), dTgc_dXg (:,:) real ( rk ), allocatable :: Xth (:), Xth_e (:), Xc_eT (:,:), Xksi (:), Wksi (:) integer , allocatable :: elem_th (:,:), elem_c (:,:), elem_ce (:) type ( nurbs_curve ) :: th , th_e real ( rk ), allocatable :: dTtth_dXksi (:), Ttth (:), dTgc_dXt (:), dXg_dXt (:) real ( rk ) :: Xt , dXt_dXksi real ( rk ), allocatable :: dXg_dXksi (:) !! Jacobian matrix real ( rk ) :: det_dXg_dXksi !! Determinant of the Jacobian matrix call gauss_leg ([ 0.0_rk , 1.0_rk ], this % degree , Xksi , Wksi ) Xth = unique ( this % knot ) call th % set ([ 0.0_rk , Xth , 1.0_rk ], Xth ) elem_th = th % cmp_elem () elem_c = this % cmp_elem () Xth_e = Xth ( elem_th ( ie ,:)) call th_e % set ([ 0.0_rk , 0.0_rk , 1.0_rk , 1.0_rk ], Xth_e ) elem_ce = elem_c ( ie ,:) Xc_eT = transpose ( this % Xc ( elem_ce ,:)) call th_e % derivative ( Xksi ( ig ), dTtth_dXksi , Ttth ) Xt = dot_product ( Xth_e , Ttth ) dXt_dXksi = dot_product ( Xth_e , dTtth_dXksi ) call this % derivative ( Xt , dTgc_dXt , Tgc , elem_ce ) dXg_dXt = matmul ( Xc_eT , dTgc_dXt ) dTgc_dXg = dyad ( dTgc_dXt , dXg_dXt ) / norm2 ( dXg_dXt ) dXg_dXksi = dXg_dXt * dXt_dXksi det_dXg_dXksi = norm2 ( dXg_dXksi ) dL = det_dXg_dXksi * Wksi ( ig ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine cmp_length ( this , length ) class ( nurbs_curve ), intent ( inout ) :: this real ( rk ), intent ( out ) :: length real ( rk ), allocatable :: Tgc (:), dTgc_dXg (:,:) integer :: ie , ig real ( rk ) :: dL , dL_ig length = 0.0_rk do ie = 1 , size ( this % cmp_elem (), 1 ) dL = 0.0_rk do ig = 1 , size ( this % cmp_elem (), 2 ) call this % ansatz ( ie , ig , Tgc , dTgc_dXg , dL_ig ) dL = dL + dL_ig end do length = length + dL 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 , elem ) 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 (:) integer , intent ( in ), optional :: elem (:) real ( rk ), allocatable , intent ( out ) :: dTgc (:) real ( rk ), allocatable , intent ( out ) :: Tgc (:) real ( rk ), allocatable :: dBi (:), Bi (:) call basis_bspline_der ( Xt , knot , nc , degree , dBi , Bi ) if (. not . present ( elem )) then allocate ( dTgc ( nc ), Tgc ( nc )) Tgc = Bi * ( Wc / ( dot_product ( Bi , Wc ))) dTgc = ( dBi * Wc - Tgc * dot_product ( dBi , Wc ) ) / dot_product ( Bi , Wc ) else allocate ( dTgc ( size ( elem )), Tgc ( size ( elem ))) Tgc = Bi ( elem ) * ( Wc ( elem ) / ( dot_product ( Bi ( elem ), Wc ( elem )))) dTgc = ( dBi ( elem ) * Wc ( elem ) - Tgc * dot_product ( dBi ( elem ), Wc ( elem )) ) / dot_product ( Bi ( elem ), Wc ( elem )) end if 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 , elem ) 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 integer , intent ( in ), optional :: elem (:) real ( rk ), allocatable , intent ( out ) :: dTgc (:) real ( rk ), allocatable , intent ( out ) :: Tgc (:) real ( rk ), allocatable :: dB (:), B (:) if (. not . present ( elem )) then allocate ( dTgc ( nc ), Tgc ( nc )) call basis_bspline_der ( Xt , knot , nc , degree , dTgc , Tgc ) else allocate ( dB ( size ( elem )), B ( size ( elem ))) call basis_bspline_der ( Xt , knot , nc , degree , dB , B ) Tgc = B ( elem ) dTgc = dB ( elem ) end if 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 +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_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 procedure, public :: ansatz Compute the shape functions, derivative of shape functions and dL private pure subroutine ansatz (this, ie, ig, Tgc, dTgc_dXg, dL) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this integer, intent(in) :: ie integer, intent(in) :: ig real(kind=rk), intent(out), allocatable :: Tgc (:) real(kind=rk), intent(out), allocatable :: dTgc_dXg (:,:) real(kind=rk), intent(out) :: dL 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_length Compute the length of the NURBS curve private pure subroutine cmp_length (this, length) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(out) :: length 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, elem) 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 (:) integer, intent(in), optional :: elem (:) 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 , set1a , set2 , set3 , set4 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 set1a (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 set4 (this, degree, nc, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this integer, intent(in) :: degree integer, intent(in) :: nc 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 :: set1a private pure subroutine set1a (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 :: set4 Set NURBS curve using degree, number of control points, control points and weights private pure subroutine set4 (this, degree, nc, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this integer, intent(in) :: degree integer, intent(in) :: 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, 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, elem) 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 (:) integer, intent(in), optional :: elem (:) 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_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 procedure, public :: ansatz Compute the shape functions, derivative of shape functions and dV private pure subroutine ansatz (this, ie, ig, Tgc, dTgc_dXg, dV) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in) :: ie integer, intent(in) :: ig real(kind=rk), intent(out), allocatable :: Tgc (:) real(kind=rk), intent(out), allocatable :: dTgc_dXg (:,:) real(kind=rk), intent(out) :: dV 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 :: cmp_volume Compute the volume of the NURBS volume private pure subroutine cmp_volume (this, volume) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(out) :: volume 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, elem) 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 (:) integer, intent(in), optional :: elem (:) 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, (:) generic, public :: get_nc => get_nc_all , get_nc_dir Get number of control points private pure function get_nc_all (this) result(nc) 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_nc_dir (this, dir) result(nc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: dir Return Value integer procedure, public :: get_ng Get number of geometry points private pure function get_ng (this) result(ng) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value integer, (3) procedure, public :: 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 , set4 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 (:) private pure subroutine set4 (this, degree, nc, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), contiguous :: degree (:) 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 :: set4 Set NURBS volume using degree, number of control points, control points and weights private pure subroutine set4 (this, degree, nc, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), contiguous :: degree (:) 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, elem) 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 (:) integer, intent(in), optional :: elem (:) 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) procedure, private :: get_nc_all Get number of control points in all directions private pure function get_nc_all (this) result(nc) 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_nc_dir Get number of control points in a specific direction private pure function get_nc_dir (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","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 procedure, public :: ansatz Compute the shape functions, derivative of shape functions and dA private pure subroutine ansatz (this, ie, ig, Tgc, dTgc_dXg, dA) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in) :: ie integer, intent(in) :: ig real(kind=rk), intent(out), allocatable :: Tgc (:) real(kind=rk), intent(out), allocatable :: dTgc_dXg (:,:) real(kind=rk), intent(out) :: dA 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_area Compute the area of the NURBS surface private pure subroutine cmp_area (this, area) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(out) :: area 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, elem) 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 (:) integer, intent(in), optional :: elem (:) 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, (:) generic, public :: get_nc => get_nc_all , get_nc_dir Get number of control points private pure function get_nc_all (this) result(nc) 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_nc_dir (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 , set4 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 (:) private pure subroutine set4 (this, degree, nc, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), contiguous :: degree (:) 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 :: set4 Set NURBS surface using degree, number of control points, control points and weights private pure subroutine set4 (this, degree, nc, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), contiguous :: degree (:) 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, elem) 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 (:) integer, intent(in), optional :: elem (:) 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) procedure, private :: get_nc_all Get number of control points in all directions private pure function get_nc_all (this) result(nc) 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_nc_dir Get number of control points in a specific direction private pure function get_nc_dir (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","tags":"","loc":"type/nurbs_surface.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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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, elem) 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 (:) integer, intent(in), optional :: elem (:) 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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, elem) 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 (:) integer, intent(in), optional :: elem (:) 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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_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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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, elem) 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 (:) integer, intent(in), optional :: elem (:) 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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, elem) 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 (:) integer, intent(in), optional :: elem (:) 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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, elem) 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 (:) integer, intent(in), optional :: elem (:) 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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, elem) 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 (:) integer, intent(in), optional :: elem (:) 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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":"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~example3_surface example3_surface program~example3_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~example_nurbs_surface example_nurbs_surface program~example_nurbs_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":"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~~CallsGraph proc~cmp_xg nurbs_curve%cmp_Xg interface~compute_xg compute_Xg proc~cmp_xg->interface~compute_xg proc~is_rational nurbs_curve%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_curve%cmp_Xg proc~nearest_point2 nurbs_curve%nearest_point2 proc~nearest_point2->proc~cmp_xg program~nearest_point_1d nearest_point_1d program~nearest_point_1d->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_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~~CallsGraph proc~cmp_elem nurbs_curve%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_curve%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_curve%cmp_elem proc~ansatz nurbs_curve%ansatz proc~ansatz->proc~cmp_elem proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~cmp_elem proc~cmp_length->proc~ansatz program~compute_length compute_length program~compute_length->proc~cmp_length Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_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~~CallsGraph proc~cmp_elem_xc_vis nurbs_curve%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_curve%cmp_elem_Xc_vis proc~export_xc nurbs_curve%export_Xc proc~export_xc->proc~cmp_elem_xc_vis program~example1_curve example1_curve program~example1_curve->proc~export_xc program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~export_xc program~shape_c_1d shape_C_1d program~shape_c_1d->proc~export_xc program~shape_circle shape_circle program~shape_circle->proc~export_xc program~shape_half_circle shape_half_circle program~shape_half_circle->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_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~~CallsGraph proc~cmp_elem_xg_vis nurbs_curve%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_curve%cmp_elem_Xg_vis proc~export_xg nurbs_curve%export_Xg proc~export_xg->proc~cmp_elem_xg_vis program~example1_curve example1_curve program~example1_curve->proc~export_xg program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~export_xg program~shape_c_1d shape_C_1d program~shape_c_1d->proc~export_xg program~shape_circle shape_circle program~shape_circle->proc~export_xg program~shape_half_circle shape_half_circle program~shape_half_circle->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_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~~CalledByGraph proc~get_wc_all nurbs_curve%get_Wc_all none~get_wc nurbs_curve%get_Wc none~get_wc->proc~get_wc_all proc~modify_wc nurbs_curve%modify_Wc proc~modify_wc->none~get_wc proc~modify_xc nurbs_curve%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_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~~CalledByGraph proc~get_wci nurbs_curve%get_Wci none~get_wc nurbs_curve%get_Wc none~get_wc->proc~get_wci proc~modify_wc nurbs_curve%modify_Wc proc~modify_wc->none~get_wc proc~modify_xc nurbs_curve%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_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~~CalledByGraph proc~get_xc_all nurbs_curve%get_Xc_all none~get_xc nurbs_curve%get_Xc none~get_xc->proc~get_xc_all proc~modify_wc nurbs_curve%modify_Wc proc~modify_wc->none~get_xc proc~modify_xc nurbs_curve%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_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~~CalledByGraph proc~get_xci nurbs_curve%get_Xci none~get_xc nurbs_curve%get_Xc none~get_xc->proc~get_xci proc~modify_wc nurbs_curve%modify_Wc proc~modify_wc->none~get_xc proc~modify_xc nurbs_curve%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_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~~CalledByGraph proc~get_xcid nurbs_curve%get_Xcid none~get_xc nurbs_curve%get_Xc none~get_xc->proc~get_xcid proc~modify_wc nurbs_curve%modify_Wc proc~modify_wc->none~get_xc proc~modify_xc nurbs_curve%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_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.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.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.html"},{"title":"get_Xt – ForCAD","text":"private pure function get_Xt(this) result(Xt) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"proc/get_xt.html"},{"title":"get_continuity – ForCAD","text":"private pure function get_continuity(this) result(c) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value integer, allocatable, (:) Calls proc~~get_continuity~~CallsGraph proc~get_continuity nurbs_curve%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 – 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.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.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.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~~CalledByGraph proc~get_knot_all nurbs_curve%get_knot_all none~get_knot nurbs_curve%get_knot none~get_knot->proc~get_knot_all proc~modify_wc nurbs_curve%modify_Wc proc~modify_wc->none~get_knot proc~modify_xc nurbs_curve%modify_Xc proc~modify_xc->none~get_knot program~example1_curve example1_curve program~example1_curve->none~get_knot Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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, 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~~CalledByGraph proc~get_knoti nurbs_curve%get_knoti none~get_knot nurbs_curve%get_knot none~get_knot->proc~get_knoti proc~modify_wc nurbs_curve%modify_Wc proc~modify_wc->none~get_knot proc~modify_xc nurbs_curve%modify_Xc proc~modify_xc->none~get_knot program~example1_curve example1_curve program~example1_curve->none~get_knot Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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) result(m) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value integer, allocatable, (:) Calls proc~~get_multiplicity~~CallsGraph proc~get_multiplicity nurbs_curve%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_curve%get_multiplicity proc~cmp_degree nurbs_curve%cmp_degree proc~cmp_degree->proc~get_multiplicity proc~cmp_elem nurbs_curve%cmp_elem proc~cmp_elem->proc~get_multiplicity proc~ansatz nurbs_curve%ansatz proc~ansatz->proc~cmp_elem none~set nurbs_curve%set proc~ansatz->none~set proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~cmp_elem proc~cmp_length->proc~ansatz proc~set1 nurbs_curve%set1 proc~set1->proc~cmp_degree proc~set1a nurbs_curve%set1a proc~set1a->proc~cmp_degree proc~set3 nurbs_curve%set3 proc~set3->proc~cmp_degree none~set->proc~set1 none~set->proc~set1a none~set->proc~set3 program~compute_length compute_length program~compute_length->proc~cmp_length program~compute_length->none~set proc~elevate_degree nurbs_curve%elevate_degree proc~elevate_degree->none~set proc~insert_knots nurbs_curve%insert_knots proc~insert_knots->none~set proc~modify_wc nurbs_curve%modify_Wc proc~modify_wc->none~set proc~modify_xc nurbs_curve%modify_Xc proc~modify_xc->none~set proc~remove_knots nurbs_curve%remove_knots proc~remove_knots->none~set proc~set_c nurbs_curve%set_C proc~set_c->none~set proc~set_circle nurbs_curve%set_circle proc~set_circle->none~set proc~set_half_circle nurbs_curve%set_half_circle proc~set_half_circle->none~set program~example1_curve example1_curve program~example1_curve->none~set program~example1_curve->proc~elevate_degree program~example1_curve->proc~insert_knots program~example1_curve->proc~remove_knots program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->none~set program~nearest_point_1d nearest_point_1d program~nearest_point_1d->none~set program~shape_c_1d shape_C_1d program~shape_c_1d->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 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_multiplicity.html"},{"title":"get_nc – ForCAD","text":"private pure function get_nc(this) result(nc) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value integer","tags":"","loc":"proc/get_nc.html"},{"title":"get_ng – ForCAD","text":"private pure function get_ng(this) result(ng) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value integer","tags":"","loc":"proc/get_ng.html"},{"title":"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~~CalledByGraph proc~is_rational nurbs_curve%is_rational proc~basis_scalar nurbs_curve%basis_scalar proc~basis_scalar->proc~is_rational proc~basis_vector nurbs_curve%basis_vector proc~basis_vector->proc~is_rational proc~cmp_xg nurbs_curve%cmp_Xg proc~cmp_xg->proc~is_rational proc~create nurbs_curve%create proc~create->proc~is_rational proc~derivative2_scalar nurbs_curve%derivative2_scalar proc~derivative2_scalar->proc~is_rational proc~derivative2_vector nurbs_curve%derivative2_vector proc~derivative2_vector->proc~is_rational proc~derivative_scalar nurbs_curve%derivative_scalar proc~derivative_scalar->proc~is_rational proc~derivative_vector nurbs_curve%derivative_vector proc~derivative_vector->proc~is_rational proc~elevate_degree nurbs_curve%elevate_degree proc~elevate_degree->proc~is_rational proc~insert_knots nurbs_curve%insert_knots proc~insert_knots->proc~is_rational proc~remove_knots nurbs_curve%remove_knots proc~remove_knots->proc~is_rational none~derivative nurbs_curve%derivative none~derivative->proc~derivative_scalar none~derivative->proc~derivative_vector none~derivative2 nurbs_curve%derivative2 none~derivative2->proc~derivative2_scalar none~derivative2->proc~derivative2_vector proc~nearest_point2 nurbs_curve%nearest_point2 proc~nearest_point2->proc~cmp_xg proc~nearest_point2->proc~create proc~nearest_point2->none~derivative2 program~example1_curve example1_curve program~example1_curve->proc~create program~example1_curve->proc~elevate_degree program~example1_curve->proc~insert_knots program~example1_curve->proc~remove_knots program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~create program~nearest_point_1d nearest_point_1d program~nearest_point_1d->proc~create program~nearest_point_1d->proc~nearest_point2 program~shape_c_1d shape_C_1d program~shape_c_1d->proc~create program~shape_circle shape_circle program~shape_circle->proc~create program~shape_half_circle shape_half_circle program~shape_half_circle->proc~create proc~ansatz nurbs_curve%ansatz proc~ansatz->none~derivative proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~ansatz program~compute_length compute_length program~compute_length->proc~cmp_length Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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":"ansatz – ForCAD","text":"private pure subroutine ansatz(this, ie, ig, Tgc, dTgc_dXg, dL) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this integer, intent(in) :: ie integer, intent(in) :: ig real(kind=rk), intent(out), allocatable :: Tgc (:) real(kind=rk), intent(out), allocatable :: dTgc_dXg (:,:) real(kind=rk), intent(out) :: dL Calls proc~~ansatz~~CallsGraph proc~ansatz nurbs_curve%ansatz interface~dyad dyad proc~ansatz->interface~dyad interface~gauss_leg gauss_leg proc~ansatz->interface~gauss_leg interface~unique unique proc~ansatz->interface~unique none~derivative nurbs_curve%derivative proc~ansatz->none~derivative none~set nurbs_curve%set proc~ansatz->none~set proc~cmp_elem nurbs_curve%cmp_elem proc~ansatz->proc~cmp_elem proc~dyad_t1_t1 dyad_t1_t1 interface~dyad->proc~dyad_t1_t1 proc~gauss_legendre_1d gauss_legendre_1D interface~gauss_leg->proc~gauss_legendre_1d proc~gauss_legendre_2d gauss_legendre_2D interface~gauss_leg->proc~gauss_legendre_2d proc~gauss_legendre_3d gauss_legendre_3D interface~gauss_leg->proc~gauss_legendre_3d proc~unique_integer unique_integer interface~unique->proc~unique_integer proc~unique_real unique_real interface~unique->proc~unique_real proc~derivative_scalar nurbs_curve%derivative_scalar none~derivative->proc~derivative_scalar proc~derivative_vector nurbs_curve%derivative_vector none~derivative->proc~derivative_vector proc~set1 nurbs_curve%set1 none~set->proc~set1 proc~set1a nurbs_curve%set1a none~set->proc~set1a proc~set2 nurbs_curve%set2 none~set->proc~set2 proc~set3 nurbs_curve%set3 none~set->proc~set3 proc~set4 nurbs_curve%set4 none~set->proc~set4 proc~cmp_elem->interface~unique interface~elemconn_cn elemConn_Cn proc~cmp_elem->interface~elemconn_cn proc~get_multiplicity nurbs_curve%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 interface~compute_dtgc compute_dTgc proc~derivative_scalar->interface~compute_dtgc proc~is_rational nurbs_curve%is_rational proc~derivative_scalar->proc~is_rational proc~derivative_vector->interface~compute_dtgc proc~derivative_vector->proc~is_rational gauss_legendre gauss_legendre proc~gauss_legendre_1d->gauss_legendre proc~gauss_legendre_2d->gauss_legendre interface~ndgrid ndgrid proc~gauss_legendre_2d->interface~ndgrid proc~kron kron proc~gauss_legendre_2d->proc~kron proc~gauss_legendre_3d->gauss_legendre proc~gauss_legendre_3d->interface~ndgrid proc~gauss_legendre_3d->proc~kron interface~compute_multiplicity compute_multiplicity proc~get_multiplicity->interface~compute_multiplicity proc~cmp_degree nurbs_curve%cmp_degree proc~set1->proc~cmp_degree proc~set1a->proc~cmp_degree proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector proc~set3->proc~cmp_degree 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 proc~cmp_degree->proc~get_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. Called by proc~~ansatz~~CalledByGraph proc~ansatz nurbs_curve%ansatz proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~ansatz program~compute_length compute_length program~compute_length->proc~cmp_length Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/ansatz.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~~CallsGraph proc~basis_scalar nurbs_curve%basis_scalar interface~compute_tgc compute_Tgc proc~basis_scalar->interface~compute_tgc proc~is_rational nurbs_curve%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, 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~~CallsGraph proc~basis_vector nurbs_curve%basis_vector interface~compute_tgc compute_Tgc proc~basis_vector->interface~compute_tgc proc~is_rational nurbs_curve%is_rational proc~basis_vector->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_vector.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~~CallsGraph proc~cmp_degree nurbs_curve%cmp_degree proc~get_multiplicity nurbs_curve%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_curve%cmp_degree proc~set1 nurbs_curve%set1 proc~set1->proc~cmp_degree proc~set1a nurbs_curve%set1a proc~set1a->proc~cmp_degree proc~set3 nurbs_curve%set3 proc~set3->proc~cmp_degree none~set nurbs_curve%set none~set->proc~set1 none~set->proc~set1a none~set->proc~set3 proc~ansatz nurbs_curve%ansatz proc~ansatz->none~set proc~elevate_degree nurbs_curve%elevate_degree proc~elevate_degree->none~set proc~insert_knots nurbs_curve%insert_knots proc~insert_knots->none~set proc~modify_wc nurbs_curve%modify_Wc proc~modify_wc->none~set proc~modify_xc nurbs_curve%modify_Xc proc~modify_xc->none~set proc~remove_knots nurbs_curve%remove_knots proc~remove_knots->none~set proc~set_c nurbs_curve%set_C proc~set_c->none~set proc~set_circle nurbs_curve%set_circle proc~set_circle->none~set proc~set_half_circle nurbs_curve%set_half_circle proc~set_half_circle->none~set program~compute_length compute_length program~compute_length->none~set proc~cmp_length nurbs_curve%cmp_length program~compute_length->proc~cmp_length program~example1_curve example1_curve program~example1_curve->none~set program~example1_curve->proc~elevate_degree program~example1_curve->proc~insert_knots program~example1_curve->proc~remove_knots program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->none~set program~nearest_point_1d nearest_point_1d program~nearest_point_1d->none~set proc~cmp_length->proc~ansatz program~shape_c_1d shape_C_1d program~shape_c_1d->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 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_length – ForCAD","text":"private pure subroutine cmp_length(this, length) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(out) :: length Calls proc~~cmp_length~~CallsGraph proc~cmp_length nurbs_curve%cmp_length proc~ansatz nurbs_curve%ansatz proc~cmp_length->proc~ansatz proc~cmp_elem nurbs_curve%cmp_elem proc~cmp_length->proc~cmp_elem proc~ansatz->proc~cmp_elem interface~dyad dyad proc~ansatz->interface~dyad interface~gauss_leg gauss_leg proc~ansatz->interface~gauss_leg interface~unique unique proc~ansatz->interface~unique none~derivative nurbs_curve%derivative proc~ansatz->none~derivative none~set nurbs_curve%set proc~ansatz->none~set interface~elemconn_cn elemConn_Cn proc~cmp_elem->interface~elemconn_cn proc~cmp_elem->interface~unique proc~get_multiplicity nurbs_curve%get_multiplicity proc~cmp_elem->proc~get_multiplicity proc~dyad_t1_t1 dyad_t1_t1 interface~dyad->proc~dyad_t1_t1 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~gauss_legendre_1d gauss_legendre_1D interface~gauss_leg->proc~gauss_legendre_1d proc~gauss_legendre_2d gauss_legendre_2D interface~gauss_leg->proc~gauss_legendre_2d proc~gauss_legendre_3d gauss_legendre_3D interface~gauss_leg->proc~gauss_legendre_3d proc~unique_integer unique_integer interface~unique->proc~unique_integer proc~unique_real unique_real interface~unique->proc~unique_real proc~derivative_scalar nurbs_curve%derivative_scalar none~derivative->proc~derivative_scalar proc~derivative_vector nurbs_curve%derivative_vector none~derivative->proc~derivative_vector proc~set1 nurbs_curve%set1 none~set->proc~set1 proc~set1a nurbs_curve%set1a none~set->proc~set1a proc~set2 nurbs_curve%set2 none~set->proc~set2 proc~set3 nurbs_curve%set3 none~set->proc~set3 proc~set4 nurbs_curve%set4 none~set->proc~set4 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 interface~compute_dtgc compute_dTgc proc~derivative_scalar->interface~compute_dtgc proc~is_rational nurbs_curve%is_rational proc~derivative_scalar->proc~is_rational proc~derivative_vector->interface~compute_dtgc proc~derivative_vector->proc~is_rational gauss_legendre gauss_legendre proc~gauss_legendre_1d->gauss_legendre proc~gauss_legendre_2d->gauss_legendre interface~ndgrid ndgrid proc~gauss_legendre_2d->interface~ndgrid proc~kron kron proc~gauss_legendre_2d->proc~kron proc~gauss_legendre_3d->gauss_legendre proc~gauss_legendre_3d->interface~ndgrid proc~gauss_legendre_3d->proc~kron proc~cmp_degree nurbs_curve%cmp_degree proc~set1->proc~cmp_degree proc~set1a->proc~cmp_degree proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector proc~set3->proc~cmp_degree proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 ndgrid3 interface~ndgrid->proc~ndgrid3 proc~cmp_degree->proc~get_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. Called by proc~~cmp_length~~CalledByGraph proc~cmp_length nurbs_curve%cmp_length program~compute_length compute_length program~compute_length->proc~cmp_length Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_length.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~~CallsGraph proc~cmp_nc nurbs_curve%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.","tags":"","loc":"proc/cmp_nc.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~~CallsGraph proc~create nurbs_curve%create interface~compute_xg compute_Xg proc~create->interface~compute_xg proc~is_rational nurbs_curve%is_rational proc~create->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~~create~~CalledByGraph proc~create nurbs_curve%create proc~nearest_point2 nurbs_curve%nearest_point2 proc~nearest_point2->proc~create program~example1_curve example1_curve program~example1_curve->proc~create program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~create program~nearest_point_1d nearest_point_1d program~nearest_point_1d->proc~create program~nearest_point_1d->proc~nearest_point2 program~shape_c_1d shape_C_1d program~shape_c_1d->proc~create program~shape_circle shape_circle program~shape_circle->proc~create program~shape_half_circle shape_half_circle program~shape_half_circle->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_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~~CallsGraph proc~derivative2_scalar nurbs_curve%derivative2_scalar interface~compute_d2tgc compute_d2Tgc proc~derivative2_scalar->interface~compute_d2tgc proc~is_rational nurbs_curve%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_curve%derivative2_scalar none~derivative2 nurbs_curve%derivative2 none~derivative2->proc~derivative2_scalar proc~nearest_point2 nurbs_curve%nearest_point2 proc~nearest_point2->none~derivative2 program~nearest_point_1d nearest_point_1d program~nearest_point_1d->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, 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~~CallsGraph proc~derivative2_vector nurbs_curve%derivative2_vector interface~compute_d2tgc compute_d2Tgc proc~derivative2_vector->interface~compute_d2tgc proc~is_rational nurbs_curve%is_rational proc~derivative2_vector->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_vector~~CalledByGraph proc~derivative2_vector nurbs_curve%derivative2_vector none~derivative2 nurbs_curve%derivative2 none~derivative2->proc~derivative2_vector proc~nearest_point2 nurbs_curve%nearest_point2 proc~nearest_point2->none~derivative2 program~nearest_point_1d nearest_point_1d program~nearest_point_1d->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, elem) 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 (:) integer, intent(in), optional :: elem (:) Calls proc~~derivative_scalar~~CallsGraph proc~derivative_scalar nurbs_curve%derivative_scalar interface~compute_dtgc compute_dTgc proc~derivative_scalar->interface~compute_dtgc proc~is_rational nurbs_curve%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. Called by proc~~derivative_scalar~~CalledByGraph proc~derivative_scalar nurbs_curve%derivative_scalar none~derivative nurbs_curve%derivative none~derivative->proc~derivative_scalar proc~ansatz nurbs_curve%ansatz proc~ansatz->none~derivative proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~ansatz program~compute_length compute_length program~compute_length->proc~cmp_length Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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, 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~~CallsGraph proc~derivative_vector nurbs_curve%derivative_vector interface~compute_dtgc compute_dTgc proc~derivative_vector->interface~compute_dtgc proc~is_rational nurbs_curve%is_rational proc~derivative_vector->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~~derivative_vector~~CalledByGraph proc~derivative_vector nurbs_curve%derivative_vector none~derivative nurbs_curve%derivative none~derivative->proc~derivative_vector proc~ansatz nurbs_curve%ansatz proc~ansatz->none~derivative proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~ansatz program~compute_length compute_length program~compute_length->proc~cmp_length Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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, 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~~CallsGraph proc~elevate_degree nurbs_curve%elevate_degree none~set nurbs_curve%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~is_rational nurbs_curve%is_rational proc~elevate_degree->proc~is_rational proc~set1 nurbs_curve%set1 none~set->proc~set1 proc~set1a nurbs_curve%set1a none~set->proc~set1a proc~set2 nurbs_curve%set2 none~set->proc~set2 proc~set3 nurbs_curve%set3 none~set->proc~set3 proc~set4 nurbs_curve%set4 none~set->proc~set4 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_curve%cmp_degree proc~set1->proc~cmp_degree proc~set1a->proc~cmp_degree proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector proc~set3->proc~cmp_degree proc~get_multiplicity nurbs_curve%get_multiplicity proc~cmp_degree->proc~get_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_curve%elevate_degree program~example1_curve example1_curve program~example1_curve->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_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this character(len=*), intent(in) :: filename Calls proc~~export_xc~~CallsGraph proc~export_xc nurbs_curve%export_Xc proc~cmp_elem_xc_vis nurbs_curve%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_curve%export_Xc program~example1_curve example1_curve program~example1_curve->proc~export_xc program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~export_xc program~shape_c_1d shape_C_1d program~shape_c_1d->proc~export_xc program~shape_circle shape_circle program~shape_circle->proc~export_xc program~shape_half_circle shape_half_circle program~shape_half_circle->proc~export_xc Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/export_xc.html"},{"title":"export_Xg – ForCAD","text":"private impure subroutine export_Xg(this, filename) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this character(len=*), intent(in) :: filename Calls proc~~export_xg~~CallsGraph proc~export_xg nurbs_curve%export_Xg proc~cmp_elem_xg_vis nurbs_curve%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_curve%export_Xg program~example1_curve example1_curve program~example1_curve->proc~export_xg program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~export_xg program~shape_c_1d shape_C_1d program~shape_c_1d->proc~export_xg program~shape_circle shape_circle program~shape_circle->proc~export_xg program~shape_half_circle shape_half_circle program~shape_half_circle->proc~export_xg Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/export_xg.html"},{"title":"finalize – ForCAD","text":"private pure subroutine finalize(this) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this Called by proc~~finalize~~CalledByGraph proc~finalize nurbs_curve%finalize proc~nearest_point2 nurbs_curve%nearest_point2 proc~nearest_point2->proc~finalize program~example1_curve example1_curve program~example1_curve->proc~finalize program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~finalize program~nearest_point_1d nearest_point_1d program~nearest_point_1d->proc~finalize program~nearest_point_1d->proc~nearest_point2 program~shape_c_1d shape_C_1d program~shape_c_1d->proc~finalize program~shape_circle shape_circle program~shape_circle->proc~finalize program~shape_half_circle shape_half_circle program~shape_half_circle->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, 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~~CallsGraph proc~insert_knots nurbs_curve%insert_knots interface~compute_multiplicity compute_multiplicity proc~insert_knots->interface~compute_multiplicity none~set nurbs_curve%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~is_rational nurbs_curve%is_rational proc~insert_knots->proc~is_rational proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~set1 nurbs_curve%set1 none~set->proc~set1 proc~set1a nurbs_curve%set1a none~set->proc~set1a proc~set2 nurbs_curve%set2 none~set->proc~set2 proc~set3 nurbs_curve%set3 none~set->proc~set3 proc~set4 nurbs_curve%set4 none~set->proc~set4 proc~cmp_degree nurbs_curve%cmp_degree proc~set1->proc~cmp_degree proc~set1a->proc~cmp_degree proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector proc~set3->proc~cmp_degree proc~get_multiplicity nurbs_curve%get_multiplicity proc~cmp_degree->proc~get_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_curve%insert_knots program~example1_curve example1_curve program~example1_curve->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_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in) :: W integer, intent(in) :: num Calls proc~~modify_wc~~CallsGraph proc~modify_wc nurbs_curve%modify_Wc none~get_knot nurbs_curve%get_knot proc~modify_wc->none~get_knot none~get_wc nurbs_curve%get_Wc proc~modify_wc->none~get_wc none~get_xc nurbs_curve%get_Xc proc~modify_wc->none~get_xc none~set nurbs_curve%set proc~modify_wc->none~set proc~get_knot_all nurbs_curve%get_knot_all none~get_knot->proc~get_knot_all proc~get_knoti nurbs_curve%get_knoti none~get_knot->proc~get_knoti proc~get_wc_all nurbs_curve%get_Wc_all none~get_wc->proc~get_wc_all proc~get_wci nurbs_curve%get_Wci none~get_wc->proc~get_wci proc~get_xc_all nurbs_curve%get_Xc_all none~get_xc->proc~get_xc_all proc~get_xci nurbs_curve%get_Xci none~get_xc->proc~get_xci proc~get_xcid nurbs_curve%get_Xcid none~get_xc->proc~get_xcid proc~set1 nurbs_curve%set1 none~set->proc~set1 proc~set1a nurbs_curve%set1a none~set->proc~set1a proc~set2 nurbs_curve%set2 none~set->proc~set2 proc~set3 nurbs_curve%set3 none~set->proc~set3 proc~set4 nurbs_curve%set4 none~set->proc~set4 proc~cmp_degree nurbs_curve%cmp_degree proc~set1->proc~cmp_degree proc~set1a->proc~cmp_degree proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector proc~set3->proc~cmp_degree proc~get_multiplicity nurbs_curve%get_multiplicity proc~cmp_degree->proc~get_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem 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.","tags":"","loc":"proc/modify_wc.html"},{"title":"modify_Xc – ForCAD","text":"private pure subroutine modify_Xc(this, X, num, dir) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in) :: X integer, intent(in) :: num integer, intent(in) :: dir Calls proc~~modify_xc~~CallsGraph proc~modify_xc nurbs_curve%modify_Xc none~get_knot nurbs_curve%get_knot proc~modify_xc->none~get_knot none~get_wc nurbs_curve%get_Wc proc~modify_xc->none~get_wc none~get_xc nurbs_curve%get_Xc proc~modify_xc->none~get_xc none~set nurbs_curve%set proc~modify_xc->none~set proc~get_knot_all nurbs_curve%get_knot_all none~get_knot->proc~get_knot_all proc~get_knoti nurbs_curve%get_knoti none~get_knot->proc~get_knoti proc~get_wc_all nurbs_curve%get_Wc_all none~get_wc->proc~get_wc_all proc~get_wci nurbs_curve%get_Wci none~get_wc->proc~get_wci proc~get_xc_all nurbs_curve%get_Xc_all none~get_xc->proc~get_xc_all proc~get_xci nurbs_curve%get_Xci none~get_xc->proc~get_xci proc~get_xcid nurbs_curve%get_Xcid none~get_xc->proc~get_xcid proc~set1 nurbs_curve%set1 none~set->proc~set1 proc~set1a nurbs_curve%set1a none~set->proc~set1a proc~set2 nurbs_curve%set2 none~set->proc~set2 proc~set3 nurbs_curve%set3 none~set->proc~set3 proc~set4 nurbs_curve%set4 none~set->proc~set4 proc~cmp_degree nurbs_curve%cmp_degree proc~set1->proc~cmp_degree proc~set1a->proc~cmp_degree proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector proc~set3->proc~cmp_degree proc~get_multiplicity nurbs_curve%get_multiplicity proc~cmp_degree->proc~get_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem 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.","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_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~~CallsGraph proc~nearest_point nurbs_curve%nearest_point interface~nearest_point_help_1d nearest_point_help_1d proc~nearest_point->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~~CalledByGraph proc~nearest_point nurbs_curve%nearest_point proc~nearest_point2 nurbs_curve%nearest_point2 proc~nearest_point2->proc~nearest_point program~nearest_point_1d nearest_point_1d program~nearest_point_1d->proc~nearest_point program~nearest_point_1d->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_point.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~~CallsGraph proc~nearest_point2 nurbs_curve%nearest_point2 none~derivative2 nurbs_curve%derivative2 proc~nearest_point2->none~derivative2 proc~cmp_xg nurbs_curve%cmp_Xg proc~nearest_point2->proc~cmp_xg proc~create nurbs_curve%create proc~nearest_point2->proc~create proc~finalize nurbs_curve%finalize proc~nearest_point2->proc~finalize proc~nearest_point nurbs_curve%nearest_point proc~nearest_point2->proc~nearest_point proc~derivative2_scalar nurbs_curve%derivative2_scalar none~derivative2->proc~derivative2_scalar proc~derivative2_vector nurbs_curve%derivative2_vector none~derivative2->proc~derivative2_vector interface~compute_xg compute_Xg proc~cmp_xg->interface~compute_xg proc~is_rational nurbs_curve%is_rational proc~cmp_xg->proc~is_rational proc~create->interface~compute_xg proc~create->proc~is_rational interface~nearest_point_help_1d nearest_point_help_1d proc~nearest_point->interface~nearest_point_help_1d proc~derivative2_scalar->proc~is_rational interface~compute_d2tgc compute_d2Tgc proc~derivative2_scalar->interface~compute_d2tgc 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_curve%nearest_point2 program~nearest_point_1d nearest_point_1d program~nearest_point_1d->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":"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~~CallsGraph proc~remove_knots nurbs_curve%remove_knots interface~compute_multiplicity compute_multiplicity proc~remove_knots->interface~compute_multiplicity none~set nurbs_curve%set proc~remove_knots->none~set proc~findspan findspan proc~remove_knots->proc~findspan proc~is_rational nurbs_curve%is_rational proc~remove_knots->proc~is_rational 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~set1 nurbs_curve%set1 none~set->proc~set1 proc~set1a nurbs_curve%set1a none~set->proc~set1a proc~set2 nurbs_curve%set2 none~set->proc~set2 proc~set3 nurbs_curve%set3 none~set->proc~set3 proc~set4 nurbs_curve%set4 none~set->proc~set4 proc~cmp_degree nurbs_curve%cmp_degree proc~set1->proc~cmp_degree proc~set1a->proc~cmp_degree proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector proc~set3->proc~cmp_degree proc~get_multiplicity nurbs_curve%get_multiplicity proc~cmp_degree->proc~get_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_curve%remove_knots program~example1_curve example1_curve program~example1_curve->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_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~~CallsGraph proc~rotate_xc nurbs_curve%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_curve%rotate_Xc program~example1_curve example1_curve program~example1_curve->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_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~~CallsGraph proc~rotate_xg nurbs_curve%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_curve%rotate_Xg program~example1_curve example1_curve program~example1_curve->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, 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~~CallsGraph proc~set1 nurbs_curve%set1 proc~cmp_degree nurbs_curve%cmp_degree proc~set1->proc~cmp_degree proc~get_multiplicity nurbs_curve%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~~set1~~CalledByGraph proc~set1 nurbs_curve%set1 none~set nurbs_curve%set none~set->proc~set1 proc~ansatz nurbs_curve%ansatz proc~ansatz->none~set proc~elevate_degree nurbs_curve%elevate_degree proc~elevate_degree->none~set proc~insert_knots nurbs_curve%insert_knots proc~insert_knots->none~set proc~modify_wc nurbs_curve%modify_Wc proc~modify_wc->none~set proc~modify_xc nurbs_curve%modify_Xc proc~modify_xc->none~set proc~remove_knots nurbs_curve%remove_knots proc~remove_knots->none~set proc~set_c nurbs_curve%set_C proc~set_c->none~set proc~set_circle nurbs_curve%set_circle proc~set_circle->none~set proc~set_half_circle nurbs_curve%set_half_circle proc~set_half_circle->none~set program~compute_length compute_length program~compute_length->none~set proc~cmp_length nurbs_curve%cmp_length program~compute_length->proc~cmp_length program~example1_curve example1_curve program~example1_curve->none~set program~example1_curve->proc~elevate_degree program~example1_curve->proc~insert_knots program~example1_curve->proc~remove_knots program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->none~set program~nearest_point_1d nearest_point_1d program~nearest_point_1d->none~set proc~cmp_length->proc~ansatz program~shape_c_1d shape_C_1d program~shape_c_1d->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 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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":"set1a – ForCAD","text":"private pure subroutine set1a(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~~set1a~~CallsGraph proc~set1a nurbs_curve%set1a proc~cmp_degree nurbs_curve%cmp_degree proc~set1a->proc~cmp_degree proc~get_multiplicity nurbs_curve%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~~set1a~~CalledByGraph proc~set1a nurbs_curve%set1a none~set nurbs_curve%set none~set->proc~set1a proc~ansatz nurbs_curve%ansatz proc~ansatz->none~set proc~elevate_degree nurbs_curve%elevate_degree proc~elevate_degree->none~set proc~insert_knots nurbs_curve%insert_knots proc~insert_knots->none~set proc~modify_wc nurbs_curve%modify_Wc proc~modify_wc->none~set proc~modify_xc nurbs_curve%modify_Xc proc~modify_xc->none~set proc~remove_knots nurbs_curve%remove_knots proc~remove_knots->none~set proc~set_c nurbs_curve%set_C proc~set_c->none~set proc~set_circle nurbs_curve%set_circle proc~set_circle->none~set proc~set_half_circle nurbs_curve%set_half_circle proc~set_half_circle->none~set program~compute_length compute_length program~compute_length->none~set proc~cmp_length nurbs_curve%cmp_length program~compute_length->proc~cmp_length program~example1_curve example1_curve program~example1_curve->none~set program~example1_curve->proc~elevate_degree program~example1_curve->proc~insert_knots program~example1_curve->proc~remove_knots program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->none~set program~nearest_point_1d nearest_point_1d program~nearest_point_1d->none~set proc~cmp_length->proc~ansatz program~shape_c_1d shape_C_1d program~shape_c_1d->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 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/set1a.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~~CallsGraph proc~set2 nurbs_curve%set2 proc~compute_knot_vector compute_knot_vector proc~set2->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~~CalledByGraph proc~set2 nurbs_curve%set2 none~set nurbs_curve%set none~set->proc~set2 proc~ansatz nurbs_curve%ansatz proc~ansatz->none~set proc~elevate_degree nurbs_curve%elevate_degree proc~elevate_degree->none~set proc~insert_knots nurbs_curve%insert_knots proc~insert_knots->none~set proc~modify_wc nurbs_curve%modify_Wc proc~modify_wc->none~set proc~modify_xc nurbs_curve%modify_Xc proc~modify_xc->none~set proc~remove_knots nurbs_curve%remove_knots proc~remove_knots->none~set proc~set_c nurbs_curve%set_C proc~set_c->none~set proc~set_circle nurbs_curve%set_circle proc~set_circle->none~set proc~set_half_circle nurbs_curve%set_half_circle proc~set_half_circle->none~set program~compute_length compute_length program~compute_length->none~set proc~cmp_length nurbs_curve%cmp_length program~compute_length->proc~cmp_length program~example1_curve example1_curve program~example1_curve->none~set program~example1_curve->proc~elevate_degree program~example1_curve->proc~insert_knots program~example1_curve->proc~remove_knots program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->none~set program~nearest_point_1d nearest_point_1d program~nearest_point_1d->none~set proc~cmp_length->proc~ansatz program~shape_c_1d shape_C_1d program~shape_c_1d->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 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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, 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~~CallsGraph proc~set3 nurbs_curve%set3 proc~cmp_degree nurbs_curve%cmp_degree proc~set3->proc~cmp_degree proc~get_multiplicity nurbs_curve%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_curve%set3 none~set nurbs_curve%set none~set->proc~set3 proc~ansatz nurbs_curve%ansatz proc~ansatz->none~set proc~elevate_degree nurbs_curve%elevate_degree proc~elevate_degree->none~set proc~insert_knots nurbs_curve%insert_knots proc~insert_knots->none~set proc~modify_wc nurbs_curve%modify_Wc proc~modify_wc->none~set proc~modify_xc nurbs_curve%modify_Xc proc~modify_xc->none~set proc~remove_knots nurbs_curve%remove_knots proc~remove_knots->none~set proc~set_c nurbs_curve%set_C proc~set_c->none~set proc~set_circle nurbs_curve%set_circle proc~set_circle->none~set proc~set_half_circle nurbs_curve%set_half_circle proc~set_half_circle->none~set program~compute_length compute_length program~compute_length->none~set proc~cmp_length nurbs_curve%cmp_length program~compute_length->proc~cmp_length program~example1_curve example1_curve program~example1_curve->none~set program~example1_curve->proc~elevate_degree program~example1_curve->proc~insert_knots program~example1_curve->proc~remove_knots program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->none~set program~nearest_point_1d nearest_point_1d program~nearest_point_1d->none~set proc~cmp_length->proc~ansatz program~shape_c_1d shape_C_1d program~shape_c_1d->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 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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":"set4 – ForCAD","text":"private pure subroutine set4(this, degree, nc, Xc, Wc) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this integer, intent(in) :: degree integer, intent(in) :: nc real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) Called by proc~~set4~~CalledByGraph proc~set4 nurbs_curve%set4 none~set nurbs_curve%set none~set->proc~set4 proc~ansatz nurbs_curve%ansatz proc~ansatz->none~set proc~elevate_degree nurbs_curve%elevate_degree proc~elevate_degree->none~set proc~insert_knots nurbs_curve%insert_knots proc~insert_knots->none~set proc~modify_wc nurbs_curve%modify_Wc proc~modify_wc->none~set proc~modify_xc nurbs_curve%modify_Xc proc~modify_xc->none~set proc~remove_knots nurbs_curve%remove_knots proc~remove_knots->none~set proc~set_c nurbs_curve%set_C proc~set_c->none~set proc~set_circle nurbs_curve%set_circle proc~set_circle->none~set proc~set_half_circle nurbs_curve%set_half_circle proc~set_half_circle->none~set program~compute_length compute_length program~compute_length->none~set proc~cmp_length nurbs_curve%cmp_length program~compute_length->proc~cmp_length program~example1_curve example1_curve program~example1_curve->none~set program~example1_curve->proc~elevate_degree program~example1_curve->proc~insert_knots program~example1_curve->proc~remove_knots program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->none~set program~nearest_point_1d nearest_point_1d program~nearest_point_1d->none~set proc~cmp_length->proc~ansatz program~shape_c_1d shape_C_1d program~shape_c_1d->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 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/set4.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~~CallsGraph proc~set_c nurbs_curve%set_C none~set nurbs_curve%set proc~set_c->none~set proc~set1 nurbs_curve%set1 none~set->proc~set1 proc~set1a nurbs_curve%set1a none~set->proc~set1a proc~set2 nurbs_curve%set2 none~set->proc~set2 proc~set3 nurbs_curve%set3 none~set->proc~set3 proc~set4 nurbs_curve%set4 none~set->proc~set4 proc~cmp_degree nurbs_curve%cmp_degree proc~set1->proc~cmp_degree proc~set1a->proc~cmp_degree proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector proc~set3->proc~cmp_degree proc~get_multiplicity nurbs_curve%get_multiplicity proc~cmp_degree->proc~get_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem 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~~set_c~~CalledByGraph proc~set_c nurbs_curve%set_C program~shape_c_1d shape_C_1d program~shape_c_1d->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_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 nurbs_curve%set proc~set_circle->none~set proc~set1 nurbs_curve%set1 none~set->proc~set1 proc~set1a nurbs_curve%set1a none~set->proc~set1a proc~set2 nurbs_curve%set2 none~set->proc~set2 proc~set3 nurbs_curve%set3 none~set->proc~set3 proc~set4 nurbs_curve%set4 none~set->proc~set4 proc~cmp_degree nurbs_curve%cmp_degree proc~set1->proc~cmp_degree proc~set1a->proc~cmp_degree proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector proc~set3->proc~cmp_degree proc~get_multiplicity nurbs_curve%get_multiplicity proc~cmp_degree->proc~get_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem 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~~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.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.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.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 nurbs_curve%set proc~set_half_circle->none~set proc~set1 nurbs_curve%set1 none~set->proc~set1 proc~set1a nurbs_curve%set1a none~set->proc~set1a proc~set2 nurbs_curve%set2 none~set->proc~set2 proc~set3 nurbs_curve%set3 none~set->proc~set3 proc~set4 nurbs_curve%set4 none~set->proc~set4 proc~cmp_degree nurbs_curve%cmp_degree proc~set1->proc~cmp_degree proc~set1a->proc~cmp_degree proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector proc~set3->proc~cmp_degree proc~get_multiplicity nurbs_curve%get_multiplicity proc~cmp_degree->proc~get_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem 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~~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~~CalledByGraph proc~show nurbs_curve%show program~example1_curve example1_curve program~example1_curve->proc~show program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~show program~shape_c_1d shape_C_1d program~shape_c_1d->proc~show program~shape_circle shape_circle program~shape_circle->proc~show program~shape_half_circle shape_half_circle program~shape_half_circle->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_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in) :: vec (:) Called by proc~~translate_xc~~CalledByGraph proc~translate_xc nurbs_curve%translate_Xc program~example1_curve example1_curve program~example1_curve->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_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in) :: vec (:) Called by proc~~translate_xg~~CalledByGraph proc~translate_xg nurbs_curve%translate_Xg program~example1_curve example1_curve program~example1_curve->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_curve%basis_scalar proc~basis_scalar->interface~compute_tgc proc~basis_vector nurbs_curve%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_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.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_curve%cmp_Xg proc~cmp_xg->interface~compute_xg proc~create nurbs_curve%create proc~create->interface~compute_xg proc~nearest_point2 nurbs_curve%nearest_point2 proc~nearest_point2->proc~cmp_xg proc~nearest_point2->proc~create program~example1_curve example1_curve program~example1_curve->proc~create program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~create program~nearest_point_1d nearest_point_1d program~nearest_point_1d->proc~create program~nearest_point_1d->proc~nearest_point2 program~shape_c_1d shape_C_1d program~shape_c_1d->proc~create program~shape_circle shape_circle program~shape_circle->proc~create program~shape_half_circle shape_half_circle program~shape_half_circle->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_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.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_curve%derivative2_scalar proc~derivative2_scalar->interface~compute_d2tgc proc~derivative2_vector nurbs_curve%derivative2_vector proc~derivative2_vector->interface~compute_d2tgc none~derivative2 nurbs_curve%derivative2 none~derivative2->proc~derivative2_scalar none~derivative2->proc~derivative2_vector proc~nearest_point2 nurbs_curve%nearest_point2 proc~nearest_point2->none~derivative2 program~nearest_point_1d nearest_point_1d program~nearest_point_1d->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_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.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_curve%derivative_scalar proc~derivative_scalar->interface~compute_dtgc proc~derivative_vector nurbs_curve%derivative_vector proc~derivative_vector->interface~compute_dtgc none~derivative nurbs_curve%derivative none~derivative->proc~derivative_scalar none~derivative->proc~derivative_vector proc~ansatz nurbs_curve%ansatz proc~ansatz->none~derivative proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~ansatz program~compute_length compute_length program~compute_length->proc~cmp_length Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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, f_elem) 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 (:) integer, intent(in), optional :: f_elem (:) 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, f_elem) 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 (:) integer, intent(in), optional :: f_elem (:) 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.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_point nurbs_curve%nearest_point proc~nearest_point->interface~nearest_point_help_1d proc~nearest_point2 nurbs_curve%nearest_point2 proc~nearest_point2->proc~nearest_point program~nearest_point_1d nearest_point_1d program~nearest_point_1d->proc~nearest_point program~nearest_point_1d->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_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_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~2~~CallsGraph proc~cmp_xg~2 nurbs_volume%cmp_Xg interface~compute_xg~2 compute_Xg proc~cmp_xg~2->interface~compute_xg~2 proc~is_rational~2 nurbs_volume%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_volume%cmp_Xg proc~nearest_point2~2 nurbs_volume%nearest_point2 proc~nearest_point2~2->proc~cmp_xg~2 program~nearest_point_3d nearest_point_3d program~nearest_point_3d->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_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~2~~CallsGraph proc~cmp_elem~2 nurbs_volume%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_volume%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. Called by proc~~cmp_elem~2~~CalledByGraph proc~cmp_elem~2 nurbs_volume%cmp_elem proc~ansatz~2 nurbs_volume%ansatz proc~ansatz~2->proc~cmp_elem~2 proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~cmp_elem~2 proc~cmp_volume->proc~ansatz~2 program~example3_volume example3_volume program~example3_volume->proc~cmp_elem~2 program~compute_volume compute_volume program~compute_volume->proc~cmp_volume Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_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~2~~CallsGraph proc~cmp_elem_xc_vis~2 nurbs_volume%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_volume%cmp_elem_Xc_vis proc~export_xc~2 nurbs_volume%export_Xc proc~export_xc~2->proc~cmp_elem_xc_vis~2 program~example3_volume example3_volume program~example3_volume->proc~export_xc~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~export_xc~2 program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->proc~export_xc~2 program~shape_c_3d shape_C_3d program~shape_c_3d->proc~export_xc~2 program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~export_xc~2 program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~export_xc~2 program~shape_ring_3d shape_ring_3d program~shape_ring_3d->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_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~2~~CallsGraph proc~cmp_elem_xg_vis~2 nurbs_volume%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_volume%cmp_elem_Xg_vis proc~export_xg~2 nurbs_volume%export_Xg proc~export_xg~2->proc~cmp_elem_xg_vis~2 program~example3_volume example3_volume program~example3_volume->proc~export_xg~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~export_xg~2 program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->proc~export_xg~2 program~shape_c_3d shape_C_3d program~shape_c_3d->proc~export_xg~2 program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~export_xg~2 program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~export_xg~2 program~shape_ring_3d shape_ring_3d program~shape_ring_3d->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_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~2~~CalledByGraph proc~get_wc_all~2 nurbs_volume%get_Wc_all none~get_wc~2 nurbs_volume%get_Wc none~get_wc~2->proc~get_wc_all~2 proc~modify_wc~2 nurbs_volume%modify_Wc proc~modify_wc~2->none~get_wc~2 proc~modify_xc~2 nurbs_volume%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_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~2~~CalledByGraph proc~get_wci~2 nurbs_volume%get_Wci none~get_wc~2 nurbs_volume%get_Wc none~get_wc~2->proc~get_wci~2 proc~modify_wc~2 nurbs_volume%modify_Wc proc~modify_wc~2->none~get_wc~2 proc~modify_xc~2 nurbs_volume%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_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~2~~CalledByGraph proc~get_xc_all~2 nurbs_volume%get_Xc_all none~get_xc~2 nurbs_volume%get_Xc none~get_xc~2->proc~get_xc_all~2 proc~modify_wc~2 nurbs_volume%modify_Wc proc~modify_wc~2->none~get_xc~2 proc~modify_xc~2 nurbs_volume%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_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~2~~CalledByGraph proc~get_xci~2 nurbs_volume%get_Xci none~get_xc~2 nurbs_volume%get_Xc none~get_xc~2->proc~get_xci~2 proc~modify_wc~2 nurbs_volume%modify_Wc proc~modify_wc~2->none~get_xc~2 proc~modify_xc~2 nurbs_volume%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_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~2~~CalledByGraph proc~get_xcid~2 nurbs_volume%get_Xcid none~get_xc~2 nurbs_volume%get_Xc none~get_xc~2->proc~get_xcid~2 proc~modify_wc~2 nurbs_volume%modify_Wc proc~modify_wc~2->none~get_xc~2 proc~modify_xc~2 nurbs_volume%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_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~2.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~2.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~2.html"},{"title":"get_Xt – ForCAD","text":"private pure function get_Xt(this, dir) result(Xt) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: dir Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"proc/get_xt~2.html"},{"title":"get_continuity – ForCAD","text":"private pure function get_continuity(this, dir) result(c) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: dir Return Value integer, allocatable, (:) Calls proc~~get_continuity~2~~CallsGraph proc~get_continuity~2 nurbs_volume%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_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~2 nurbs_volume%get_degree none~get_degree~2->proc~get_degree_all program~example3_volume example3_volume program~example3_volume->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.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~2 nurbs_volume%get_degree none~get_degree~2->proc~get_degree_dir program~example3_volume example3_volume program~example3_volume->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.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~2.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~2.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~2.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~2~~CalledByGraph proc~get_knot_all~2 nurbs_volume%get_knot_all none~get_knot~2 nurbs_volume%get_knot none~get_knot~2->proc~get_knot_all~2 proc~elevate_degree~2 nurbs_volume%elevate_degree proc~elevate_degree~2->none~get_knot~2 proc~insert_knots~2 nurbs_volume%insert_knots proc~insert_knots~2->none~get_knot~2 proc~modify_wc~2 nurbs_volume%modify_Wc proc~modify_wc~2->none~get_knot~2 proc~modify_xc~2 nurbs_volume%modify_Xc proc~modify_xc~2->none~get_knot~2 proc~remove_knots~2 nurbs_volume%remove_knots proc~remove_knots~2->none~get_knot~2 program~example3_volume example3_volume program~example3_volume->none~get_knot~2 program~example3_volume->proc~elevate_degree~2 program~example3_volume->proc~insert_knots~2 program~example3_volume->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/get_knot_all~2.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~2~~CalledByGraph proc~get_knoti~2 nurbs_volume%get_knoti none~get_knot~2 nurbs_volume%get_knot none~get_knot~2->proc~get_knoti~2 proc~elevate_degree~2 nurbs_volume%elevate_degree proc~elevate_degree~2->none~get_knot~2 proc~insert_knots~2 nurbs_volume%insert_knots proc~insert_knots~2->none~get_knot~2 proc~modify_wc~2 nurbs_volume%modify_Wc proc~modify_wc~2->none~get_knot~2 proc~modify_xc~2 nurbs_volume%modify_Xc proc~modify_xc~2->none~get_knot~2 proc~remove_knots~2 nurbs_volume%remove_knots proc~remove_knots~2->none~get_knot~2 program~example3_volume example3_volume program~example3_volume->none~get_knot~2 program~example3_volume->proc~elevate_degree~2 program~example3_volume->proc~insert_knots~2 program~example3_volume->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/get_knoti~2.html"},{"title":"get_multiplicity – ForCAD","text":"private pure function get_multiplicity(this, dir) result(m) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: dir Return Value integer, allocatable, (:) Calls proc~~get_multiplicity~2~~CallsGraph proc~get_multiplicity~2 nurbs_volume%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_volume%get_multiplicity proc~cmp_degree~2 nurbs_volume%cmp_degree proc~cmp_degree~2->proc~get_multiplicity~2 proc~cmp_elem~2 nurbs_volume%cmp_elem proc~cmp_elem~2->proc~get_multiplicity~2 proc~ansatz~2 nurbs_volume%ansatz proc~ansatz~2->proc~cmp_elem~2 none~set~2 nurbs_volume%set proc~ansatz~2->none~set~2 proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~cmp_elem~2 proc~cmp_volume->proc~ansatz~2 proc~set1~2 nurbs_volume%set1 proc~set1~2->proc~cmp_degree~2 proc~set3~2 nurbs_volume%set3 proc~set3~2->proc~cmp_degree~2 program~example3_volume example3_volume program~example3_volume->proc~cmp_elem~2 program~example3_volume->none~set~2 proc~elevate_degree~2 nurbs_volume%elevate_degree program~example3_volume->proc~elevate_degree~2 proc~insert_knots~2 nurbs_volume%insert_knots program~example3_volume->proc~insert_knots~2 proc~remove_knots~2 nurbs_volume%remove_knots program~example3_volume->proc~remove_knots~2 none~set~2->proc~set1~2 none~set~2->proc~set3~2 program~compute_volume compute_volume program~compute_volume->proc~cmp_volume program~compute_volume->none~set~2 proc~elevate_degree~2->none~set~2 proc~insert_knots~2->none~set~2 proc~modify_wc~2 nurbs_volume%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_xc~2 nurbs_volume%modify_Xc proc~modify_xc~2->none~set~2 proc~remove_knots~2->none~set~2 proc~set_c~2 nurbs_volume%set_C proc~set_c~2->none~set~2 proc~set_half_ring nurbs_volume%set_half_ring proc~set_half_ring->none~set~2 proc~set_hexahedron nurbs_volume%set_hexahedron proc~set_hexahedron->none~set~2 proc~set_ring nurbs_volume%set_ring proc~set_ring->none~set~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->none~set~2 program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->none~set~2 program~nearest_point_3d nearest_point_3d program~nearest_point_3d->none~set~2 program~shape_c_3d shape_C_3d program~shape_c_3d->proc~set_c~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_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~2.html"},{"title":"get_nc_all – ForCAD","text":"private pure function get_nc_all(this) result(nc) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value integer, (3)","tags":"","loc":"proc/get_nc_all.html"},{"title":"get_nc_dir – ForCAD","text":"private pure function get_nc_dir(this, dir) result(nc) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: dir Return Value integer Calls proc~~get_nc_dir~~CallsGraph proc~get_nc_dir nurbs_volume%get_nc_dir interface~compute_multiplicity compute_multiplicity proc~get_nc_dir->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_dir.html"},{"title":"get_ng – ForCAD","text":"private pure function get_ng(this) result(ng) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value integer, (3)","tags":"","loc":"proc/get_ng~2.html"},{"title":"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~2~~CalledByGraph proc~is_rational~2 nurbs_volume%is_rational proc~basis_scalar~2 nurbs_volume%basis_scalar proc~basis_scalar~2->proc~is_rational~2 proc~basis_vector~2 nurbs_volume%basis_vector proc~basis_vector~2->proc~is_rational~2 proc~cmp_xg~2 nurbs_volume%cmp_Xg proc~cmp_xg~2->proc~is_rational~2 proc~create~2 nurbs_volume%create proc~create~2->proc~is_rational~2 proc~derivative2_scalar~2 nurbs_volume%derivative2_scalar proc~derivative2_scalar~2->proc~is_rational~2 proc~derivative2_vector~2 nurbs_volume%derivative2_vector proc~derivative2_vector~2->proc~is_rational~2 proc~derivative_scalar~2 nurbs_volume%derivative_scalar proc~derivative_scalar~2->proc~is_rational~2 proc~derivative_vector~2 nurbs_volume%derivative_vector proc~derivative_vector~2->proc~is_rational~2 none~derivative2~2 nurbs_volume%derivative2 none~derivative2~2->proc~derivative2_scalar~2 none~derivative2~2->proc~derivative2_vector~2 none~derivative~2 nurbs_volume%derivative none~derivative~2->proc~derivative_scalar~2 none~derivative~2->proc~derivative_vector~2 proc~nearest_point2~2 nurbs_volume%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_volume example3_volume program~example3_volume->proc~create~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~create~2 program~nearest_point_3d nearest_point_3d program~nearest_point_3d->proc~create~2 program~nearest_point_3d->proc~nearest_point2~2 program~shape_c_3d shape_C_3d program~shape_c_3d->proc~create~2 program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~create~2 program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~create~2 program~shape_ring_3d shape_ring_3d program~shape_ring_3d->proc~create~2 proc~ansatz~2 nurbs_volume%ansatz proc~ansatz~2->none~derivative~2 proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~ansatz~2 program~compute_volume compute_volume program~compute_volume->proc~cmp_volume Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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":"ansatz – ForCAD","text":"private pure subroutine ansatz(this, ie, ig, Tgc, dTgc_dXg, dV) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in) :: ie integer, intent(in) :: ig real(kind=rk), intent(out), allocatable :: Tgc (:) real(kind=rk), intent(out), allocatable :: dTgc_dXg (:,:) real(kind=rk), intent(out) :: dV Calls proc~~ansatz~2~~CallsGraph proc~ansatz~2 nurbs_volume%ansatz interface~gauss_leg gauss_leg proc~ansatz~2->interface~gauss_leg interface~ndgrid ndgrid proc~ansatz~2->interface~ndgrid interface~unique unique proc~ansatz~2->interface~unique none~derivative~2 nurbs_volume%derivative proc~ansatz~2->none~derivative~2 none~set~2 nurbs_volume%set proc~ansatz~2->none~set~2 proc~cmp_elem~2 nurbs_volume%cmp_elem proc~ansatz~2->proc~cmp_elem~2 proc~det det proc~ansatz~2->proc~det proc~inv inv proc~ansatz~2->proc~inv proc~gauss_legendre_1d gauss_legendre_1D interface~gauss_leg->proc~gauss_legendre_1d proc~gauss_legendre_2d gauss_legendre_2D interface~gauss_leg->proc~gauss_legendre_2d proc~gauss_legendre_3d gauss_legendre_3D interface~gauss_leg->proc~gauss_legendre_3d 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 proc~derivative_scalar~2 nurbs_volume%derivative_scalar none~derivative~2->proc~derivative_scalar~2 proc~derivative_vector~2 nurbs_volume%derivative_vector none~derivative~2->proc~derivative_vector~2 proc~set1~2 nurbs_volume%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_volume%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_volume%set3 none~set~2->proc~set3~2 proc~set4~2 nurbs_volume%set4 none~set~2->proc~set4~2 proc~cmp_elem~2->interface~unique interface~elemconn_cn elemConn_Cn proc~cmp_elem~2->interface~elemconn_cn proc~get_multiplicity~2 nurbs_volume%get_multiplicity proc~cmp_elem~2->proc~get_multiplicity~2 proc~inv->proc~det proc~inv->proc~inv 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 interface~compute_dtgc~2 compute_dTgc proc~derivative_scalar~2->interface~compute_dtgc~2 proc~is_rational~2 nurbs_volume%is_rational proc~derivative_scalar~2->proc~is_rational~2 proc~derivative_vector~2->interface~ndgrid proc~derivative_vector~2->interface~compute_dtgc~2 proc~derivative_vector~2->proc~is_rational~2 gauss_legendre gauss_legendre proc~gauss_legendre_1d->gauss_legendre proc~gauss_legendre_2d->interface~ndgrid proc~gauss_legendre_2d->gauss_legendre proc~kron kron proc~gauss_legendre_2d->proc~kron proc~gauss_legendre_3d->interface~ndgrid proc~gauss_legendre_3d->gauss_legendre proc~gauss_legendre_3d->proc~kron interface~compute_multiplicity compute_multiplicity proc~get_multiplicity~2->interface~compute_multiplicity proc~cmp_degree~2 nurbs_volume%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~cmp_nc~2 nurbs_volume%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~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~cmp_degree~2->proc~get_multiplicity~2 proc~cmp_nc~2->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. Called by proc~~ansatz~2~~CalledByGraph proc~ansatz~2 nurbs_volume%ansatz proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~ansatz~2 program~compute_volume compute_volume program~compute_volume->proc~cmp_volume Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/ansatz~2.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~2~~CallsGraph proc~basis_scalar~2 nurbs_volume%basis_scalar interface~compute_tgc~2 compute_Tgc proc~basis_scalar~2->interface~compute_tgc~2 proc~is_rational~2 nurbs_volume%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, 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~2~~CallsGraph proc~basis_vector~2 nurbs_volume%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_volume%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_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), optional :: dir Calls proc~~cmp_degree~2~~CallsGraph proc~cmp_degree~2 nurbs_volume%cmp_degree proc~get_multiplicity~2 nurbs_volume%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_volume%cmp_degree proc~set1~2 nurbs_volume%set1 proc~set1~2->proc~cmp_degree~2 proc~set3~2 nurbs_volume%set3 proc~set3~2->proc~cmp_degree~2 none~set~2 nurbs_volume%set none~set~2->proc~set1~2 none~set~2->proc~set3~2 proc~ansatz~2 nurbs_volume%ansatz proc~ansatz~2->none~set~2 proc~elevate_degree~2 nurbs_volume%elevate_degree proc~elevate_degree~2->none~set~2 proc~insert_knots~2 nurbs_volume%insert_knots proc~insert_knots~2->none~set~2 proc~modify_wc~2 nurbs_volume%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_xc~2 nurbs_volume%modify_Xc proc~modify_xc~2->none~set~2 proc~remove_knots~2 nurbs_volume%remove_knots proc~remove_knots~2->none~set~2 proc~set_c~2 nurbs_volume%set_C proc~set_c~2->none~set~2 proc~set_half_ring nurbs_volume%set_half_ring proc~set_half_ring->none~set~2 proc~set_hexahedron nurbs_volume%set_hexahedron proc~set_hexahedron->none~set~2 proc~set_ring nurbs_volume%set_ring proc~set_ring->none~set~2 program~compute_volume compute_volume program~compute_volume->none~set~2 proc~cmp_volume nurbs_volume%cmp_volume program~compute_volume->proc~cmp_volume program~example3_volume example3_volume program~example3_volume->none~set~2 program~example3_volume->proc~elevate_degree~2 program~example3_volume->proc~insert_knots~2 program~example3_volume->proc~remove_knots~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->none~set~2 program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->none~set~2 program~nearest_point_3d nearest_point_3d program~nearest_point_3d->none~set~2 proc~cmp_volume->proc~ansatz~2 program~shape_c_3d shape_C_3d program~shape_c_3d->proc~set_c~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_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~2.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~2~~CallsGraph proc~cmp_nc~2 nurbs_volume%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_volume%cmp_nc proc~set1~2 nurbs_volume%set1 proc~set1~2->proc~cmp_nc~2 proc~set2~2 nurbs_volume%set2 proc~set2~2->proc~cmp_nc~2 none~set~2 nurbs_volume%set none~set~2->proc~set1~2 none~set~2->proc~set2~2 proc~ansatz~2 nurbs_volume%ansatz proc~ansatz~2->none~set~2 proc~elevate_degree~2 nurbs_volume%elevate_degree proc~elevate_degree~2->none~set~2 proc~insert_knots~2 nurbs_volume%insert_knots proc~insert_knots~2->none~set~2 proc~modify_wc~2 nurbs_volume%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_xc~2 nurbs_volume%modify_Xc proc~modify_xc~2->none~set~2 proc~remove_knots~2 nurbs_volume%remove_knots proc~remove_knots~2->none~set~2 proc~set_c~2 nurbs_volume%set_C proc~set_c~2->none~set~2 proc~set_half_ring nurbs_volume%set_half_ring proc~set_half_ring->none~set~2 proc~set_hexahedron nurbs_volume%set_hexahedron proc~set_hexahedron->none~set~2 proc~set_ring nurbs_volume%set_ring proc~set_ring->none~set~2 program~compute_volume compute_volume program~compute_volume->none~set~2 proc~cmp_volume nurbs_volume%cmp_volume program~compute_volume->proc~cmp_volume program~example3_volume example3_volume program~example3_volume->none~set~2 program~example3_volume->proc~elevate_degree~2 program~example3_volume->proc~insert_knots~2 program~example3_volume->proc~remove_knots~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->none~set~2 program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->none~set~2 program~nearest_point_3d nearest_point_3d program~nearest_point_3d->none~set~2 proc~cmp_volume->proc~ansatz~2 program~shape_c_3d shape_C_3d program~shape_c_3d->proc~set_c~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_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~2.html"},{"title":"cmp_volume – ForCAD","text":"private pure subroutine cmp_volume(this, volume) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(out) :: volume Calls proc~~cmp_volume~~CallsGraph proc~cmp_volume nurbs_volume%cmp_volume proc~ansatz~2 nurbs_volume%ansatz proc~cmp_volume->proc~ansatz~2 proc~cmp_elem~2 nurbs_volume%cmp_elem proc~cmp_volume->proc~cmp_elem~2 proc~ansatz~2->proc~cmp_elem~2 interface~gauss_leg gauss_leg proc~ansatz~2->interface~gauss_leg interface~ndgrid ndgrid proc~ansatz~2->interface~ndgrid interface~unique unique proc~ansatz~2->interface~unique none~derivative~2 nurbs_volume%derivative proc~ansatz~2->none~derivative~2 none~set~2 nurbs_volume%set proc~ansatz~2->none~set~2 proc~det det proc~ansatz~2->proc~det proc~inv inv proc~ansatz~2->proc~inv interface~elemconn_cn elemConn_Cn proc~cmp_elem~2->interface~elemconn_cn proc~cmp_elem~2->interface~unique proc~get_multiplicity~2 nurbs_volume%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~gauss_legendre_1d gauss_legendre_1D interface~gauss_leg->proc~gauss_legendre_1d proc~gauss_legendre_2d gauss_legendre_2D interface~gauss_leg->proc~gauss_legendre_2d proc~gauss_legendre_3d gauss_legendre_3D interface~gauss_leg->proc~gauss_legendre_3d 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 proc~derivative_scalar~2 nurbs_volume%derivative_scalar none~derivative~2->proc~derivative_scalar~2 proc~derivative_vector~2 nurbs_volume%derivative_vector none~derivative~2->proc~derivative_vector~2 proc~set1~2 nurbs_volume%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_volume%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_volume%set3 none~set~2->proc~set3~2 proc~set4~2 nurbs_volume%set4 none~set~2->proc~set4~2 interface~compute_multiplicity compute_multiplicity proc~get_multiplicity~2->interface~compute_multiplicity proc~inv->proc~det proc~inv->proc~inv proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 interface~compute_dtgc~2 compute_dTgc proc~derivative_scalar~2->interface~compute_dtgc~2 proc~is_rational~2 nurbs_volume%is_rational proc~derivative_scalar~2->proc~is_rational~2 proc~derivative_vector~2->interface~ndgrid proc~derivative_vector~2->interface~compute_dtgc~2 proc~derivative_vector~2->proc~is_rational~2 gauss_legendre gauss_legendre proc~gauss_legendre_1d->gauss_legendre proc~gauss_legendre_2d->interface~ndgrid proc~gauss_legendre_2d->gauss_legendre proc~kron kron proc~gauss_legendre_2d->proc~kron proc~gauss_legendre_3d->interface~ndgrid proc~gauss_legendre_3d->gauss_legendre proc~gauss_legendre_3d->proc~kron proc~cmp_degree~2 nurbs_volume%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~cmp_nc~2 nurbs_volume%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_degree~2->proc~get_multiplicity~2 proc~cmp_nc~2->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. Called by proc~~cmp_volume~~CalledByGraph proc~cmp_volume nurbs_volume%cmp_volume program~compute_volume compute_volume program~compute_volume->proc~cmp_volume Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_volume.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~2~~CallsGraph proc~create~2 nurbs_volume%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_volume%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_volume%create proc~nearest_point2~2 nurbs_volume%nearest_point2 proc~nearest_point2~2->proc~create~2 program~example3_volume example3_volume program~example3_volume->proc~create~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~create~2 program~nearest_point_3d nearest_point_3d program~nearest_point_3d->proc~create~2 program~nearest_point_3d->proc~nearest_point2~2 program~shape_c_3d shape_C_3d program~shape_c_3d->proc~create~2 program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~create~2 program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~create~2 program~shape_ring_3d shape_ring_3d program~shape_ring_3d->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_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~2~~CallsGraph proc~derivative2_scalar~2 nurbs_volume%derivative2_scalar interface~compute_d2tgc~2 compute_d2Tgc proc~derivative2_scalar~2->interface~compute_d2tgc~2 proc~is_rational~2 nurbs_volume%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_volume%derivative2_scalar none~derivative2~2 nurbs_volume%derivative2 none~derivative2~2->proc~derivative2_scalar~2 proc~nearest_point2~2 nurbs_volume%nearest_point2 proc~nearest_point2~2->none~derivative2~2 program~nearest_point_3d nearest_point_3d program~nearest_point_3d->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, 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~2~~CallsGraph proc~derivative2_vector~2 nurbs_volume%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_volume%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_volume%derivative2_vector none~derivative2~2 nurbs_volume%derivative2 none~derivative2~2->proc~derivative2_vector~2 proc~nearest_point2~2 nurbs_volume%nearest_point2 proc~nearest_point2~2->none~derivative2~2 program~nearest_point_3d nearest_point_3d program~nearest_point_3d->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, elem) 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 (:) integer, intent(in), optional :: elem (:) Calls proc~~derivative_scalar~2~~CallsGraph proc~derivative_scalar~2 nurbs_volume%derivative_scalar interface~compute_dtgc~2 compute_dTgc proc~derivative_scalar~2->interface~compute_dtgc~2 proc~is_rational~2 nurbs_volume%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. Called by proc~~derivative_scalar~2~~CalledByGraph proc~derivative_scalar~2 nurbs_volume%derivative_scalar none~derivative~2 nurbs_volume%derivative none~derivative~2->proc~derivative_scalar~2 proc~ansatz~2 nurbs_volume%ansatz proc~ansatz~2->none~derivative~2 proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~ansatz~2 program~compute_volume compute_volume program~compute_volume->proc~cmp_volume Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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, 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~2~~CallsGraph proc~derivative_vector~2 nurbs_volume%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_volume%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. Called by proc~~derivative_vector~2~~CalledByGraph proc~derivative_vector~2 nurbs_volume%derivative_vector none~derivative~2 nurbs_volume%derivative none~derivative~2->proc~derivative_vector~2 proc~ansatz~2 nurbs_volume%ansatz proc~ansatz~2->none~derivative~2 proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~ansatz~2 program~compute_volume compute_volume program~compute_volume->proc~cmp_volume Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_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~2~~CallsGraph proc~elevate_degree~2 nurbs_volume%elevate_degree none~get_knot~2 nurbs_volume%get_knot proc~elevate_degree~2->none~get_knot~2 none~set~2 nurbs_volume%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~get_knot_all~2 nurbs_volume%get_knot_all none~get_knot~2->proc~get_knot_all~2 proc~get_knoti~2 nurbs_volume%get_knoti none~get_knot~2->proc~get_knoti~2 proc~set1~2 nurbs_volume%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_volume%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_volume%set3 none~set~2->proc~set3~2 proc~set4~2 nurbs_volume%set4 none~set~2->proc~set4~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_volume%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~cmp_nc~2 nurbs_volume%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_volume%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_volume%elevate_degree program~example3_volume example3_volume program~example3_volume->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_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this character(len=*), intent(in) :: filename Calls proc~~export_xc~2~~CallsGraph proc~export_xc~2 nurbs_volume%export_Xc proc~cmp_elem_xc_vis~2 nurbs_volume%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_volume%export_Xc program~example3_volume example3_volume program~example3_volume->proc~export_xc~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~export_xc~2 program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->proc~export_xc~2 program~shape_c_3d shape_C_3d program~shape_c_3d->proc~export_xc~2 program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~export_xc~2 program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~export_xc~2 program~shape_ring_3d shape_ring_3d program~shape_ring_3d->proc~export_xc~2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/export_xc~2.html"},{"title":"export_Xg – ForCAD","text":"private impure subroutine export_Xg(this, filename) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this character(len=*), intent(in) :: filename Calls proc~~export_xg~2~~CallsGraph proc~export_xg~2 nurbs_volume%export_Xg proc~cmp_elem_xg_vis~2 nurbs_volume%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_volume%export_Xg program~example3_volume example3_volume program~example3_volume->proc~export_xg~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~export_xg~2 program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->proc~export_xg~2 program~shape_c_3d shape_C_3d program~shape_c_3d->proc~export_xg~2 program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~export_xg~2 program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~export_xg~2 program~shape_ring_3d shape_ring_3d program~shape_ring_3d->proc~export_xg~2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/export_xg~2.html"},{"title":"finalize – ForCAD","text":"private pure subroutine finalize(this) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this Called by proc~~finalize~2~~CalledByGraph proc~finalize~2 nurbs_volume%finalize proc~nearest_point2~2 nurbs_volume%nearest_point2 proc~nearest_point2~2->proc~finalize~2 program~example3_volume example3_volume program~example3_volume->proc~finalize~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~finalize~2 program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->proc~finalize~2 program~nearest_point_3d nearest_point_3d program~nearest_point_3d->proc~finalize~2 program~nearest_point_3d->proc~nearest_point2~2 program~shape_c_3d shape_C_3d program~shape_c_3d->proc~finalize~2 program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~finalize~2 program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~finalize~2 program~shape_ring_3d shape_ring_3d program~shape_ring_3d->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_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~2~~CallsGraph proc~insert_knots~2 nurbs_volume%insert_knots interface~compute_multiplicity compute_multiplicity proc~insert_knots~2->interface~compute_multiplicity none~get_knot~2 nurbs_volume%get_knot proc~insert_knots~2->none~get_knot~2 none~set~2 nurbs_volume%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~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_volume%get_knot_all none~get_knot~2->proc~get_knot_all~2 proc~get_knoti~2 nurbs_volume%get_knoti none~get_knot~2->proc~get_knoti~2 proc~set1~2 nurbs_volume%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_volume%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_volume%set3 none~set~2->proc~set3~2 proc~set4~2 nurbs_volume%set4 none~set~2->proc~set4~2 proc~cmp_degree~2 nurbs_volume%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~cmp_nc~2 nurbs_volume%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_volume%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_volume%insert_knots program~example3_volume example3_volume program~example3_volume->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_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in) :: W integer, intent(in) :: num Calls proc~~modify_wc~2~~CallsGraph proc~modify_wc~2 nurbs_volume%modify_Wc none~get_knot~2 nurbs_volume%get_knot proc~modify_wc~2->none~get_knot~2 none~get_wc~2 nurbs_volume%get_Wc proc~modify_wc~2->none~get_wc~2 none~get_xc~2 nurbs_volume%get_Xc proc~modify_wc~2->none~get_xc~2 none~set~2 nurbs_volume%set proc~modify_wc~2->none~set~2 proc~get_knot_all~2 nurbs_volume%get_knot_all none~get_knot~2->proc~get_knot_all~2 proc~get_knoti~2 nurbs_volume%get_knoti none~get_knot~2->proc~get_knoti~2 proc~get_wc_all~2 nurbs_volume%get_Wc_all none~get_wc~2->proc~get_wc_all~2 proc~get_wci~2 nurbs_volume%get_Wci none~get_wc~2->proc~get_wci~2 proc~get_xc_all~2 nurbs_volume%get_Xc_all none~get_xc~2->proc~get_xc_all~2 proc~get_xcid~2 nurbs_volume%get_Xcid none~get_xc~2->proc~get_xcid~2 proc~get_xci~2 nurbs_volume%get_Xci none~get_xc~2->proc~get_xci~2 proc~set1~2 nurbs_volume%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_volume%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_volume%set3 none~set~2->proc~set3~2 proc~set4~2 nurbs_volume%set4 none~set~2->proc~set4~2 proc~cmp_degree~2 nurbs_volume%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~cmp_nc~2 nurbs_volume%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_volume%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_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in) :: X integer, intent(in) :: num integer, intent(in) :: dir Calls proc~~modify_xc~2~~CallsGraph proc~modify_xc~2 nurbs_volume%modify_Xc none~get_knot~2 nurbs_volume%get_knot proc~modify_xc~2->none~get_knot~2 none~get_wc~2 nurbs_volume%get_Wc proc~modify_xc~2->none~get_wc~2 none~get_xc~2 nurbs_volume%get_Xc proc~modify_xc~2->none~get_xc~2 none~set~2 nurbs_volume%set proc~modify_xc~2->none~set~2 proc~get_knot_all~2 nurbs_volume%get_knot_all none~get_knot~2->proc~get_knot_all~2 proc~get_knoti~2 nurbs_volume%get_knoti none~get_knot~2->proc~get_knoti~2 proc~get_wc_all~2 nurbs_volume%get_Wc_all none~get_wc~2->proc~get_wc_all~2 proc~get_wci~2 nurbs_volume%get_Wci none~get_wc~2->proc~get_wci~2 proc~get_xc_all~2 nurbs_volume%get_Xc_all none~get_xc~2->proc~get_xc_all~2 proc~get_xcid~2 nurbs_volume%get_Xcid none~get_xc~2->proc~get_xcid~2 proc~get_xci~2 nurbs_volume%get_Xci none~get_xc~2->proc~get_xci~2 proc~set1~2 nurbs_volume%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_volume%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_volume%set3 none~set~2->proc~set3~2 proc~set4~2 nurbs_volume%set4 none~set~2->proc~set4~2 proc~cmp_degree~2 nurbs_volume%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~cmp_nc~2 nurbs_volume%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_volume%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_xc~2.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~2~~CallsGraph proc~nearest_point~2 nurbs_volume%nearest_point interface~nearest_point_help_3d nearest_point_help_3d proc~nearest_point~2->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~2~~CalledByGraph proc~nearest_point~2 nurbs_volume%nearest_point proc~nearest_point2~2 nurbs_volume%nearest_point2 proc~nearest_point2~2->proc~nearest_point~2 program~nearest_point_3d nearest_point_3d program~nearest_point_3d->proc~nearest_point~2 program~nearest_point_3d->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_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_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~2~~CallsGraph proc~nearest_point2~2 nurbs_volume%nearest_point2 none~derivative2~2 nurbs_volume%derivative2 proc~nearest_point2~2->none~derivative2~2 proc~cmp_xg~2 nurbs_volume%cmp_Xg proc~nearest_point2~2->proc~cmp_xg~2 proc~create~2 nurbs_volume%create proc~nearest_point2~2->proc~create~2 proc~finalize~2 nurbs_volume%finalize proc~nearest_point2~2->proc~finalize~2 proc~inv inv proc~nearest_point2~2->proc~inv proc~nearest_point~2 nurbs_volume%nearest_point proc~nearest_point2~2->proc~nearest_point~2 proc~derivative2_scalar~2 nurbs_volume%derivative2_scalar none~derivative2~2->proc~derivative2_scalar~2 proc~derivative2_vector~2 nurbs_volume%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_volume%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~inv->proc~inv proc~det det proc~inv->proc~det interface~nearest_point_help_3d nearest_point_help_3d proc~nearest_point~2->interface~nearest_point_help_3d 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_volume%nearest_point2 program~nearest_point_3d nearest_point_3d program~nearest_point_3d->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":"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~2 nurbs_volume%set_elem_Xg_vis proc~put_to_nurbs->proc~set_elem_xg_vis~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~~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~2~~CallsGraph proc~remove_knots~2 nurbs_volume%remove_knots interface~compute_multiplicity compute_multiplicity proc~remove_knots~2->interface~compute_multiplicity none~get_knot~2 nurbs_volume%get_knot proc~remove_knots~2->none~get_knot~2 none~set~2 nurbs_volume%set proc~remove_knots~2->none~set~2 proc~findspan findspan proc~remove_knots~2->proc~findspan 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_volume%get_knot_all none~get_knot~2->proc~get_knot_all~2 proc~get_knoti~2 nurbs_volume%get_knoti none~get_knot~2->proc~get_knoti~2 proc~set1~2 nurbs_volume%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_volume%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_volume%set3 none~set~2->proc~set3~2 proc~set4~2 nurbs_volume%set4 none~set~2->proc~set4~2 proc~cmp_degree~2 nurbs_volume%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~cmp_nc~2 nurbs_volume%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_volume%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_volume%remove_knots program~example3_volume example3_volume program~example3_volume->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_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~2~~CallsGraph proc~rotate_xc~2 nurbs_volume%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_volume%rotate_Xc program~example3_volume example3_volume program~example3_volume->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_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~2~~CallsGraph proc~rotate_xg~2 nurbs_volume%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_volume%rotate_Xg program~example3_volume example3_volume program~example3_volume->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, 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~2~~CallsGraph proc~set1~2 nurbs_volume%set1 proc~cmp_degree~2 nurbs_volume%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~cmp_nc~2 nurbs_volume%cmp_nc proc~set1~2->proc~cmp_nc~2 proc~get_multiplicity~2 nurbs_volume%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_volume%set1 none~set~2 nurbs_volume%set none~set~2->proc~set1~2 proc~ansatz~2 nurbs_volume%ansatz proc~ansatz~2->none~set~2 proc~elevate_degree~2 nurbs_volume%elevate_degree proc~elevate_degree~2->none~set~2 proc~insert_knots~2 nurbs_volume%insert_knots proc~insert_knots~2->none~set~2 proc~modify_wc~2 nurbs_volume%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_xc~2 nurbs_volume%modify_Xc proc~modify_xc~2->none~set~2 proc~remove_knots~2 nurbs_volume%remove_knots proc~remove_knots~2->none~set~2 proc~set_c~2 nurbs_volume%set_C proc~set_c~2->none~set~2 proc~set_half_ring nurbs_volume%set_half_ring proc~set_half_ring->none~set~2 proc~set_hexahedron nurbs_volume%set_hexahedron proc~set_hexahedron->none~set~2 proc~set_ring nurbs_volume%set_ring proc~set_ring->none~set~2 program~compute_volume compute_volume program~compute_volume->none~set~2 proc~cmp_volume nurbs_volume%cmp_volume program~compute_volume->proc~cmp_volume program~example3_volume example3_volume program~example3_volume->none~set~2 program~example3_volume->proc~elevate_degree~2 program~example3_volume->proc~insert_knots~2 program~example3_volume->proc~remove_knots~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->none~set~2 program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->none~set~2 program~nearest_point_3d nearest_point_3d program~nearest_point_3d->none~set~2 proc~cmp_volume->proc~ansatz~2 program~shape_c_3d shape_C_3d program~shape_c_3d->proc~set_c~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_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~2.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~2~~CallsGraph proc~set2~2 nurbs_volume%set2 proc~cmp_nc~2 nurbs_volume%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_volume%set2 none~set~2 nurbs_volume%set none~set~2->proc~set2~2 proc~ansatz~2 nurbs_volume%ansatz proc~ansatz~2->none~set~2 proc~elevate_degree~2 nurbs_volume%elevate_degree proc~elevate_degree~2->none~set~2 proc~insert_knots~2 nurbs_volume%insert_knots proc~insert_knots~2->none~set~2 proc~modify_wc~2 nurbs_volume%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_xc~2 nurbs_volume%modify_Xc proc~modify_xc~2->none~set~2 proc~remove_knots~2 nurbs_volume%remove_knots proc~remove_knots~2->none~set~2 proc~set_c~2 nurbs_volume%set_C proc~set_c~2->none~set~2 proc~set_half_ring nurbs_volume%set_half_ring proc~set_half_ring->none~set~2 proc~set_hexahedron nurbs_volume%set_hexahedron proc~set_hexahedron->none~set~2 proc~set_ring nurbs_volume%set_ring proc~set_ring->none~set~2 program~compute_volume compute_volume program~compute_volume->none~set~2 proc~cmp_volume nurbs_volume%cmp_volume program~compute_volume->proc~cmp_volume program~example3_volume example3_volume program~example3_volume->none~set~2 program~example3_volume->proc~elevate_degree~2 program~example3_volume->proc~insert_knots~2 program~example3_volume->proc~remove_knots~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->none~set~2 program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->none~set~2 program~nearest_point_3d nearest_point_3d program~nearest_point_3d->none~set~2 proc~cmp_volume->proc~ansatz~2 program~shape_c_3d shape_C_3d program~shape_c_3d->proc~set_c~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_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~2.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~2~~CallsGraph proc~set3~2 nurbs_volume%set3 proc~cmp_degree~2 nurbs_volume%cmp_degree proc~set3~2->proc~cmp_degree~2 proc~get_multiplicity~2 nurbs_volume%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_volume%set3 none~set~2 nurbs_volume%set none~set~2->proc~set3~2 proc~ansatz~2 nurbs_volume%ansatz proc~ansatz~2->none~set~2 proc~elevate_degree~2 nurbs_volume%elevate_degree proc~elevate_degree~2->none~set~2 proc~insert_knots~2 nurbs_volume%insert_knots proc~insert_knots~2->none~set~2 proc~modify_wc~2 nurbs_volume%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_xc~2 nurbs_volume%modify_Xc proc~modify_xc~2->none~set~2 proc~remove_knots~2 nurbs_volume%remove_knots proc~remove_knots~2->none~set~2 proc~set_c~2 nurbs_volume%set_C proc~set_c~2->none~set~2 proc~set_half_ring nurbs_volume%set_half_ring proc~set_half_ring->none~set~2 proc~set_hexahedron nurbs_volume%set_hexahedron proc~set_hexahedron->none~set~2 proc~set_ring nurbs_volume%set_ring proc~set_ring->none~set~2 program~compute_volume compute_volume program~compute_volume->none~set~2 proc~cmp_volume nurbs_volume%cmp_volume program~compute_volume->proc~cmp_volume program~example3_volume example3_volume program~example3_volume->none~set~2 program~example3_volume->proc~elevate_degree~2 program~example3_volume->proc~insert_knots~2 program~example3_volume->proc~remove_knots~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->none~set~2 program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->none~set~2 program~nearest_point_3d nearest_point_3d program~nearest_point_3d->none~set~2 proc~cmp_volume->proc~ansatz~2 program~shape_c_3d shape_C_3d program~shape_c_3d->proc~set_c~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_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~2.html"},{"title":"set4 – ForCAD","text":"private pure subroutine set4(this, degree, nc, Xc, Wc) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), contiguous :: degree (:) integer, intent(in), contiguous :: nc (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) Called by proc~~set4~2~~CalledByGraph proc~set4~2 nurbs_volume%set4 none~set~2 nurbs_volume%set none~set~2->proc~set4~2 proc~ansatz~2 nurbs_volume%ansatz proc~ansatz~2->none~set~2 proc~elevate_degree~2 nurbs_volume%elevate_degree proc~elevate_degree~2->none~set~2 proc~insert_knots~2 nurbs_volume%insert_knots proc~insert_knots~2->none~set~2 proc~modify_wc~2 nurbs_volume%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_xc~2 nurbs_volume%modify_Xc proc~modify_xc~2->none~set~2 proc~remove_knots~2 nurbs_volume%remove_knots proc~remove_knots~2->none~set~2 proc~set_c~2 nurbs_volume%set_C proc~set_c~2->none~set~2 proc~set_half_ring nurbs_volume%set_half_ring proc~set_half_ring->none~set~2 proc~set_hexahedron nurbs_volume%set_hexahedron proc~set_hexahedron->none~set~2 proc~set_ring nurbs_volume%set_ring proc~set_ring->none~set~2 program~compute_volume compute_volume program~compute_volume->none~set~2 proc~cmp_volume nurbs_volume%cmp_volume program~compute_volume->proc~cmp_volume program~example3_volume example3_volume program~example3_volume->none~set~2 program~example3_volume->proc~elevate_degree~2 program~example3_volume->proc~insert_knots~2 program~example3_volume->proc~remove_knots~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->none~set~2 program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->none~set~2 program~nearest_point_3d nearest_point_3d program~nearest_point_3d->none~set~2 proc~cmp_volume->proc~ansatz~2 program~shape_c_3d shape_C_3d program~shape_c_3d->proc~set_c~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_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/set4~2.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~2~~CallsGraph proc~set_c~2 nurbs_volume%set_C none~set~2 nurbs_volume%set proc~set_c~2->none~set~2 proc~set1~2 nurbs_volume%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_volume%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_volume%set3 none~set~2->proc~set3~2 proc~set4~2 nurbs_volume%set4 none~set~2->proc~set4~2 proc~cmp_degree~2 nurbs_volume%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~cmp_nc~2 nurbs_volume%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_volume%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_volume%set_C program~shape_c_3d shape_C_3d program~shape_c_3d->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_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), contiguous :: elemConn (:,:) Called by proc~~set_elem~2~~CalledByGraph proc~set_elem~2 nurbs_volume%set_elem program~example3_volume example3_volume program~example3_volume->proc~set_elem~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_elem~2.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~2.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~2~~CalledByGraph proc~set_elem_xg_vis~2 nurbs_volume%set_elem_Xg_vis proc~put_to_nurbs nurbs_volume%put_to_nurbs proc~put_to_nurbs->proc~set_elem_xg_vis~2 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~2.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~2 nurbs_volume%set proc~set_half_ring->none~set~2 proc~set1~2 nurbs_volume%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_volume%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_volume%set3 none~set~2->proc~set3~2 proc~set4~2 nurbs_volume%set4 none~set~2->proc~set4~2 proc~cmp_degree~2 nurbs_volume%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~cmp_nc~2 nurbs_volume%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_volume%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~~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~2 nurbs_volume%set proc~set_hexahedron->none~set~2 proc~hexahedron_xc hexahedron_Xc proc~set_hexahedron->proc~hexahedron_xc proc~set1~2 nurbs_volume%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_volume%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_volume%set3 none~set~2->proc~set3~2 proc~set4~2 nurbs_volume%set4 none~set~2->proc~set4~2 proc~cmp_degree~2 nurbs_volume%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~cmp_nc~2 nurbs_volume%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_volume%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_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~2 nurbs_volume%set proc~set_ring->none~set~2 proc~set1~2 nurbs_volume%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_volume%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_volume%set3 none~set~2->proc~set3~2 proc~set4~2 nurbs_volume%set4 none~set~2->proc~set4~2 proc~cmp_degree~2 nurbs_volume%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~cmp_nc~2 nurbs_volume%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_volume%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~~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~2~~CalledByGraph proc~show~2 nurbs_volume%show program~example3_volume example3_volume program~example3_volume->proc~show~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~show~2 program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->proc~show~2 program~shape_c_3d shape_C_3d program~shape_c_3d->proc~show~2 program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~show~2 program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~show~2 program~shape_ring_3d shape_ring_3d program~shape_ring_3d->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_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in) :: vec (:) Called by proc~~translate_xc~2~~CalledByGraph proc~translate_xc~2 nurbs_volume%translate_Xc program~example3_volume example3_volume program~example3_volume->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_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in) :: vec (:) Called by proc~~translate_xg~2~~CalledByGraph proc~translate_xg~2 nurbs_volume%translate_Xg program~example3_volume example3_volume program~example3_volume->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_volume%basis_scalar proc~basis_scalar~2->interface~compute_tgc~2 proc~basis_vector~2 nurbs_volume%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_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~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_volume%cmp_Xg proc~cmp_xg~2->interface~compute_xg~2 proc~create~2 nurbs_volume%create proc~create~2->interface~compute_xg~2 proc~nearest_point2~2 nurbs_volume%nearest_point2 proc~nearest_point2~2->proc~cmp_xg~2 proc~nearest_point2~2->proc~create~2 program~example3_volume example3_volume program~example3_volume->proc~create~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~create~2 program~nearest_point_3d nearest_point_3d program~nearest_point_3d->proc~create~2 program~nearest_point_3d->proc~nearest_point2~2 program~shape_c_3d shape_C_3d program~shape_c_3d->proc~create~2 program~shape_half_ring_3d shape_half_ring_3d program~shape_half_ring_3d->proc~create~2 program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~create~2 program~shape_ring_3d shape_ring_3d program~shape_ring_3d->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_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~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_volume%derivative2_scalar proc~derivative2_scalar~2->interface~compute_d2tgc~2 proc~derivative2_vector~2 nurbs_volume%derivative2_vector proc~derivative2_vector~2->interface~compute_d2tgc~2 none~derivative2~2 nurbs_volume%derivative2 none~derivative2~2->proc~derivative2_scalar~2 none~derivative2~2->proc~derivative2_vector~2 proc~nearest_point2~2 nurbs_volume%nearest_point2 proc~nearest_point2~2->none~derivative2~2 program~nearest_point_3d nearest_point_3d program~nearest_point_3d->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_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~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_volume%derivative_scalar proc~derivative_scalar~2->interface~compute_dtgc~2 proc~derivative_vector~2 nurbs_volume%derivative_vector proc~derivative_vector~2->interface~compute_dtgc~2 none~derivative~2 nurbs_volume%derivative none~derivative~2->proc~derivative_scalar~2 none~derivative~2->proc~derivative_vector~2 proc~ansatz~2 nurbs_volume%ansatz proc~ansatz~2->none~derivative~2 proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~ansatz~2 program~compute_volume compute_volume program~compute_volume->proc~cmp_volume Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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, f_elem) 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 (:) integer, intent(in), optional :: f_elem (:) 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, f_elem) 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 (:) integer, intent(in), optional :: f_elem (:) 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~2.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~2 nurbs_volume%nearest_point proc~nearest_point~2->interface~nearest_point_help_3d proc~nearest_point2~2 nurbs_volume%nearest_point2 proc~nearest_point2~2->proc~nearest_point~2 program~nearest_point_3d nearest_point_3d program~nearest_point_3d->proc~nearest_point~2 program~nearest_point_3d->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. 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":"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_curve%set2 proc~set2->proc~compute_knot_vector proc~set2~2 nurbs_volume%set2 proc~set2~2->proc~compute_knot_vector proc~set2~3 nurbs_surface%set2 proc~set2~3->proc~compute_knot_vector none~set nurbs_curve%set none~set->proc~set2 none~set~2 nurbs_volume%set none~set~2->proc~set2~2 none~set~3 nurbs_surface%set none~set~3->proc~set2~3 proc~ansatz nurbs_curve%ansatz proc~ansatz->none~set proc~ansatz~2 nurbs_volume%ansatz proc~ansatz~2->none~set~2 proc~ansatz~3 nurbs_surface%ansatz proc~ansatz~3->none~set~3 proc~elevate_degree nurbs_curve%elevate_degree proc~elevate_degree->none~set proc~elevate_degree~2 nurbs_volume%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_curve%insert_knots proc~insert_knots->none~set proc~insert_knots~2 nurbs_volume%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_curve%modify_Wc proc~modify_wc->none~set proc~modify_wc~2 nurbs_volume%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_curve%modify_Xc proc~modify_xc->none~set proc~modify_xc~2 nurbs_volume%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_curve%remove_knots proc~remove_knots->none~set proc~remove_knots~2 nurbs_volume%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_curve%set_C proc~set_c->none~set proc~set_circle nurbs_curve%set_circle proc~set_circle->none~set proc~set_c~2 nurbs_volume%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 proc~set_half_ring nurbs_volume%set_half_ring proc~set_half_ring->none~set~2 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~2 proc~set_ring nurbs_volume%set_ring proc~set_ring->none~set~2 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~compute_area compute_area program~compute_area->none~set~3 proc~cmp_area nurbs_surface%cmp_area program~compute_area->proc~cmp_area program~compute_length compute_length program~compute_length->none~set proc~cmp_length nurbs_curve%cmp_length program~compute_length->proc~cmp_length program~compute_volume compute_volume program~compute_volume->none~set~2 proc~cmp_volume nurbs_volume%cmp_volume program~compute_volume->proc~cmp_volume program~example1_curve example1_curve program~example1_curve->none~set program~example1_curve->proc~elevate_degree program~example1_curve->proc~insert_knots program~example1_curve->proc~remove_knots 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~2 program~example3_volume->proc~elevate_degree~2 program~example3_volume->proc~insert_knots~2 program~example3_volume->proc~remove_knots~2 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->none~set program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->none~set~3 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->none~set~2 program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->none~set~2 program~nearest_point_1d nearest_point_1d program~nearest_point_1d->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~2 proc~cmp_area->proc~ansatz~3 proc~cmp_length->proc~ansatz proc~cmp_volume->proc~ansatz~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_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 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~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 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":"det – ForCAD","text":"public pure function det(A) result(detA) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: A (:,:) Return Value real(kind=rk) Called by proc~~det~~CalledByGraph proc~det det proc~ansatz~2 nurbs_volume%ansatz proc~ansatz~2->proc~det proc~inv inv proc~ansatz~2->proc~inv proc~ansatz~3 nurbs_surface%ansatz proc~ansatz~3->proc~det proc~ansatz~3->proc~inv proc~inv->proc~det proc~inv->proc~inv proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~ansatz~3 proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~ansatz~2 proc~nearest_point2~2 nurbs_volume%nearest_point2 proc~nearest_point2~2->proc~inv proc~nearest_point2~3 nurbs_surface%nearest_point2 proc~nearest_point2~3->proc~inv program~compute_area compute_area program~compute_area->proc~cmp_area program~compute_volume compute_volume program~compute_volume->proc~cmp_volume program~nearest_point_2d nearest_point_2d program~nearest_point_2d->proc~nearest_point2~3 program~nearest_point_3d nearest_point_3d program~nearest_point_3d->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/det.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_curve%insert_knots proc~insert_knots->proc~findspan proc~insert_knots~2 nurbs_volume%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_curve%remove_knots proc~remove_knots->proc~findspan proc~remove_knots~2 nurbs_volume%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 program~example1_curve->proc~remove_knots 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~2 program~example3_volume->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/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":"inv – ForCAD","text":"public pure recursive function inv(A) result(A_inv) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: A (:,:) Return Value real(kind=rk), allocatable, (:,:) Calls proc~~inv~~CallsGraph proc~inv inv proc~inv->proc~inv proc~det det proc~inv->proc~det Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~inv~~CalledByGraph proc~inv inv proc~inv->proc~inv proc~ansatz~2 nurbs_volume%ansatz proc~ansatz~2->proc~inv proc~ansatz~3 nurbs_surface%ansatz proc~ansatz~3->proc~inv proc~nearest_point2~2 nurbs_volume%nearest_point2 proc~nearest_point2~2->proc~inv proc~nearest_point2~3 nurbs_surface%nearest_point2 proc~nearest_point2~3->proc~inv proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~ansatz~3 proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~ansatz~2 program~nearest_point_2d nearest_point_2d program~nearest_point_2d->proc~nearest_point2~3 program~nearest_point_3d nearest_point_3d program~nearest_point_3d->proc~nearest_point2~2 program~compute_area compute_area program~compute_area->proc~cmp_area program~compute_volume compute_volume program~compute_volume->proc~cmp_volume Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/inv.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~gauss_legendre_2d gauss_legendre_2D proc~gauss_legendre_2d->proc~kron proc~gauss_legendre_3d gauss_legendre_3D proc~gauss_legendre_3d->proc~kron proc~put_to_nurbs nurbs_volume%put_to_nurbs proc~put_to_nurbs->proc~kron interface~gauss_leg gauss_leg interface~gauss_leg->proc~gauss_legendre_2d interface~gauss_leg->proc~gauss_legendre_3d program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->proc~put_to_nurbs proc~ansatz nurbs_curve%ansatz proc~ansatz->interface~gauss_leg proc~ansatz~2 nurbs_volume%ansatz proc~ansatz~2->interface~gauss_leg proc~ansatz~3 nurbs_surface%ansatz proc~ansatz~3->interface~gauss_leg proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~ansatz~3 proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~ansatz proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~ansatz~2 program~compute_area compute_area program~compute_area->proc~cmp_area program~compute_length compute_length program~compute_length->proc~cmp_length program~compute_volume compute_volume program~compute_volume->proc~cmp_volume Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_curve%rotate_Xc proc~rotate_xc->proc~rotation proc~rotate_xc~2 nurbs_volume%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_curve%rotate_Xg proc~rotate_xg->proc~rotation proc~rotate_xg~2 nurbs_volume%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 program~example1_curve->proc~rotate_xg 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~2 program~example3_volume->proc~rotate_xg~2 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_curve%elevate_degree proc~elevate_degree->proc~elevate_degree_a_5_9 proc~elevate_degree~2 nurbs_volume%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 program~example3_surface example3_surface program~example3_surface->proc~elevate_degree~3 program~example3_volume example3_volume program~example3_volume->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/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_curve%cmp_elem_Xc_vis proc~cmp_elem_xc_vis->interface~elemconn_c0 proc~cmp_elem_xc_vis~2 nurbs_volume%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_curve%cmp_elem_Xg_vis proc~cmp_elem_xg_vis->interface~elemconn_c0 proc~cmp_elem_xg_vis~2 nurbs_volume%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_curve%export_Xc proc~export_xc->proc~cmp_elem_xc_vis proc~export_xc~2 nurbs_volume%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_curve%export_Xg proc~export_xg->proc~cmp_elem_xg_vis proc~export_xg~2 nurbs_volume%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 program~example1_curve->proc~export_xg 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~2 program~example3_volume->proc~export_xg~2 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~export_xc program~example_nurbs_curve->proc~export_xg program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~export_xc~3 program~example_nurbs_surface->proc~export_xg~3 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~export_xc~2 program~example_nurbs_volume->proc~export_xg~2 program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->proc~export_xc~2 program~example_put_to_nurbs->proc~export_xg~2 program~shape_c_1d shape_C_1d program~shape_c_1d->proc~export_xc program~shape_c_1d->proc~export_xg 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~2 program~shape_c_3d->proc~export_xg~2 program~shape_circle shape_circle program~shape_circle->proc~export_xc program~shape_circle->proc~export_xg program~shape_half_circle shape_half_circle program~shape_half_circle->proc~export_xc program~shape_half_circle->proc~export_xg 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~2 program~shape_half_ring_3d->proc~export_xg~2 program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~export_xc~2 program~shape_hexahedron->proc~export_xg~2 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~2 program~shape_ring_3d->proc~export_xg~2 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_curve%cmp_elem_Xc_vis proc~cmp_elem_xc_vis->interface~elemconn_c0 proc~cmp_elem_xc_vis~2 nurbs_volume%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_curve%cmp_elem_Xg_vis proc~cmp_elem_xg_vis->interface~elemconn_c0 proc~cmp_elem_xg_vis~2 nurbs_volume%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_curve%export_Xc proc~export_xc->proc~cmp_elem_xc_vis proc~export_xc~2 nurbs_volume%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_curve%export_Xg proc~export_xg->proc~cmp_elem_xg_vis proc~export_xg~2 nurbs_volume%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 program~example1_curve->proc~export_xg 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~2 program~example3_volume->proc~export_xg~2 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~export_xc program~example_nurbs_curve->proc~export_xg program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~export_xc~3 program~example_nurbs_surface->proc~export_xg~3 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~export_xc~2 program~example_nurbs_volume->proc~export_xg~2 program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->proc~export_xc~2 program~example_put_to_nurbs->proc~export_xg~2 program~shape_c_1d shape_C_1d program~shape_c_1d->proc~export_xc program~shape_c_1d->proc~export_xg 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~2 program~shape_c_3d->proc~export_xg~2 program~shape_circle shape_circle program~shape_circle->proc~export_xc program~shape_circle->proc~export_xg program~shape_half_circle shape_half_circle program~shape_half_circle->proc~export_xc program~shape_half_circle->proc~export_xg 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~2 program~shape_half_ring_3d->proc~export_xg~2 program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~export_xc~2 program~shape_hexahedron->proc~export_xg~2 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~2 program~shape_ring_3d->proc~export_xg~2 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_curve%cmp_elem_Xc_vis proc~cmp_elem_xc_vis->interface~elemconn_c0 proc~cmp_elem_xc_vis~2 nurbs_volume%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_curve%cmp_elem_Xg_vis proc~cmp_elem_xg_vis->interface~elemconn_c0 proc~cmp_elem_xg_vis~2 nurbs_volume%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_curve%export_Xc proc~export_xc->proc~cmp_elem_xc_vis proc~export_xc~2 nurbs_volume%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_curve%export_Xg proc~export_xg->proc~cmp_elem_xg_vis proc~export_xg~2 nurbs_volume%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 program~example1_curve->proc~export_xg 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~2 program~example3_volume->proc~export_xg~2 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~export_xc program~example_nurbs_curve->proc~export_xg program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~export_xc~3 program~example_nurbs_surface->proc~export_xg~3 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~export_xc~2 program~example_nurbs_volume->proc~export_xg~2 program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->proc~export_xc~2 program~example_put_to_nurbs->proc~export_xg~2 program~shape_c_1d shape_C_1d program~shape_c_1d->proc~export_xc program~shape_c_1d->proc~export_xg 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~2 program~shape_c_3d->proc~export_xg~2 program~shape_circle shape_circle program~shape_circle->proc~export_xc program~shape_circle->proc~export_xg program~shape_half_circle shape_half_circle program~shape_half_circle->proc~export_xc program~shape_half_circle->proc~export_xg 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~2 program~shape_half_ring_3d->proc~export_xg~2 program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~export_xc~2 program~shape_hexahedron->proc~export_xg~2 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~2 program~shape_ring_3d->proc~export_xg~2 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_curve%cmp_nc proc~cmp_nc->interface~compute_multiplicity proc~cmp_nc~2 nurbs_volume%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_curve%get_continuity proc~get_continuity->interface~compute_multiplicity proc~get_continuity~2 nurbs_volume%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_curve%get_multiplicity proc~get_multiplicity->interface~compute_multiplicity proc~get_multiplicity~2 nurbs_volume%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_dir nurbs_volume%get_nc_dir proc~get_nc_dir->interface~compute_multiplicity proc~get_nc_dir~2 nurbs_surface%get_nc_dir proc~get_nc_dir~2->interface~compute_multiplicity proc~insert_knots nurbs_curve%insert_knots proc~insert_knots->interface~compute_multiplicity none~set nurbs_curve%set proc~insert_knots->none~set proc~insert_knots~2 nurbs_volume%insert_knots proc~insert_knots~2->interface~compute_multiplicity none~set~2 nurbs_volume%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_curve%remove_knots proc~remove_knots->interface~compute_multiplicity proc~remove_knots->none~set proc~remove_knots~2 nurbs_volume%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_curve%cmp_degree proc~cmp_degree->proc~get_multiplicity proc~cmp_degree~2 nurbs_volume%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_curve%cmp_elem proc~cmp_elem->proc~get_multiplicity proc~cmp_elem~2 nurbs_volume%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_curve%elevate_degree proc~elevate_degree->proc~elevate_degree_a_5_9 proc~elevate_degree->none~set proc~elevate_degree~2 nurbs_volume%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~2 nurbs_volume%set1 proc~set1~2->proc~cmp_nc~2 proc~set1~2->proc~cmp_degree~2 proc~set1~3 nurbs_surface%set1 proc~set1~3->proc~cmp_nc~3 proc~set1~3->proc~cmp_degree~3 proc~set2~2 nurbs_volume%set2 proc~set2~2->proc~cmp_nc~2 proc~set2~3 nurbs_surface%set2 proc~set2~3->proc~cmp_nc~3 program~example1_curve example1_curve program~example1_curve->proc~insert_knots program~example1_curve->proc~remove_knots program~example1_curve->proc~elevate_degree program~example1_curve->none~set 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~2 program~example3_volume->proc~remove_knots~2 program~example3_volume->proc~cmp_elem~2 program~example3_volume->proc~elevate_degree~2 program~example3_volume->none~set~2 none~set~2->proc~set1~2 none~set~2->proc~set2~2 proc~set3~2 nurbs_volume%set3 none~set~2->proc~set3~2 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~ansatz nurbs_curve%ansatz proc~ansatz->proc~cmp_elem proc~ansatz->none~set proc~ansatz~2 nurbs_volume%ansatz proc~ansatz~2->proc~cmp_elem~2 proc~ansatz~2->none~set~2 proc~ansatz~3 nurbs_surface%ansatz proc~ansatz~3->proc~cmp_elem~3 proc~ansatz~3->none~set~3 proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~cmp_elem~3 proc~cmp_area->proc~ansatz~3 proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~cmp_elem proc~cmp_length->proc~ansatz proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~cmp_elem~2 proc~cmp_volume->proc~ansatz~2 proc~set1 nurbs_curve%set1 proc~set1->proc~cmp_degree proc~set1a nurbs_curve%set1a proc~set1a->proc~cmp_degree proc~set3 nurbs_curve%set3 proc~set3->proc~cmp_degree proc~set3~2->proc~cmp_degree~2 proc~set3~3->proc~cmp_degree~3 none~set->proc~set1 none~set->proc~set1a none~set->proc~set3 proc~modify_wc~2 nurbs_volume%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~2 nurbs_volume%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~set_c~2 nurbs_volume%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_ring nurbs_volume%set_half_ring proc~set_half_ring->none~set~2 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~2 proc~set_ring nurbs_volume%set_ring proc~set_ring->none~set~2 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~compute_area compute_area program~compute_area->none~set~3 program~compute_area->proc~cmp_area program~compute_length compute_length program~compute_length->proc~cmp_length program~compute_length->none~set program~compute_volume compute_volume program~compute_volume->none~set~2 program~compute_volume->proc~cmp_volume 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~2 program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->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~2 proc~modify_wc nurbs_curve%modify_Wc proc~modify_wc->none~set proc~modify_xc nurbs_curve%modify_Xc proc~modify_xc->none~set proc~set_c nurbs_curve%set_C proc~set_c->none~set proc~set_circle nurbs_curve%set_circle proc~set_circle->none~set proc~set_half_circle nurbs_curve%set_half_circle proc~set_half_circle->none~set program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->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_1d nearest_point_1d program~nearest_point_1d->none~set 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~2 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 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_curve%cmp_nc proc~cmp_nc->interface~compute_multiplicity proc~cmp_nc~2 nurbs_volume%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_curve%get_continuity proc~get_continuity->interface~compute_multiplicity proc~get_continuity~2 nurbs_volume%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_curve%get_multiplicity proc~get_multiplicity->interface~compute_multiplicity proc~get_multiplicity~2 nurbs_volume%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_dir nurbs_volume%get_nc_dir proc~get_nc_dir->interface~compute_multiplicity proc~get_nc_dir~2 nurbs_surface%get_nc_dir proc~get_nc_dir~2->interface~compute_multiplicity proc~insert_knots nurbs_curve%insert_knots proc~insert_knots->interface~compute_multiplicity none~set nurbs_curve%set proc~insert_knots->none~set proc~insert_knots~2 nurbs_volume%insert_knots proc~insert_knots~2->interface~compute_multiplicity none~set~2 nurbs_volume%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_curve%remove_knots proc~remove_knots->interface~compute_multiplicity proc~remove_knots->none~set proc~remove_knots~2 nurbs_volume%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_curve%cmp_degree proc~cmp_degree->proc~get_multiplicity proc~cmp_degree~2 nurbs_volume%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_curve%cmp_elem proc~cmp_elem->proc~get_multiplicity proc~cmp_elem~2 nurbs_volume%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_curve%elevate_degree proc~elevate_degree->proc~elevate_degree_a_5_9 proc~elevate_degree->none~set proc~elevate_degree~2 nurbs_volume%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~2 nurbs_volume%set1 proc~set1~2->proc~cmp_nc~2 proc~set1~2->proc~cmp_degree~2 proc~set1~3 nurbs_surface%set1 proc~set1~3->proc~cmp_nc~3 proc~set1~3->proc~cmp_degree~3 proc~set2~2 nurbs_volume%set2 proc~set2~2->proc~cmp_nc~2 proc~set2~3 nurbs_surface%set2 proc~set2~3->proc~cmp_nc~3 program~example1_curve example1_curve program~example1_curve->proc~insert_knots program~example1_curve->proc~remove_knots program~example1_curve->proc~elevate_degree program~example1_curve->none~set 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~2 program~example3_volume->proc~remove_knots~2 program~example3_volume->proc~cmp_elem~2 program~example3_volume->proc~elevate_degree~2 program~example3_volume->none~set~2 none~set~2->proc~set1~2 none~set~2->proc~set2~2 proc~set3~2 nurbs_volume%set3 none~set~2->proc~set3~2 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~ansatz nurbs_curve%ansatz proc~ansatz->proc~cmp_elem proc~ansatz->none~set proc~ansatz~2 nurbs_volume%ansatz proc~ansatz~2->proc~cmp_elem~2 proc~ansatz~2->none~set~2 proc~ansatz~3 nurbs_surface%ansatz proc~ansatz~3->proc~cmp_elem~3 proc~ansatz~3->none~set~3 proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~cmp_elem~3 proc~cmp_area->proc~ansatz~3 proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~cmp_elem proc~cmp_length->proc~ansatz proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~cmp_elem~2 proc~cmp_volume->proc~ansatz~2 proc~set1 nurbs_curve%set1 proc~set1->proc~cmp_degree proc~set1a nurbs_curve%set1a proc~set1a->proc~cmp_degree proc~set3 nurbs_curve%set3 proc~set3->proc~cmp_degree proc~set3~2->proc~cmp_degree~2 proc~set3~3->proc~cmp_degree~3 none~set->proc~set1 none~set->proc~set1a none~set->proc~set3 proc~modify_wc~2 nurbs_volume%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~2 nurbs_volume%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~set_c~2 nurbs_volume%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_ring nurbs_volume%set_half_ring proc~set_half_ring->none~set~2 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~2 proc~set_ring nurbs_volume%set_ring proc~set_ring->none~set~2 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~compute_area compute_area program~compute_area->none~set~3 program~compute_area->proc~cmp_area program~compute_length compute_length program~compute_length->proc~cmp_length program~compute_length->none~set program~compute_volume compute_volume program~compute_volume->none~set~2 program~compute_volume->proc~cmp_volume 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~2 program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->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~2 proc~modify_wc nurbs_curve%modify_Wc proc~modify_wc->none~set proc~modify_xc nurbs_curve%modify_Xc proc~modify_xc->none~set proc~set_c nurbs_curve%set_C proc~set_c->none~set proc~set_circle nurbs_curve%set_circle proc~set_circle->none~set proc~set_half_circle nurbs_curve%set_half_circle proc~set_half_circle->none~set program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->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_1d nearest_point_1d program~nearest_point_1d->none~set 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~2 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 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":"dyad_t1_t1 – ForCAD","text":"private pure function dyad_t1_t1(a, b) result(c) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: a (:) real(kind=rk), intent(in), contiguous :: b (:) Return Value real(kind=rk), allocatable, (:,:) Called by proc~~dyad_t1_t1~~CalledByGraph proc~dyad_t1_t1 dyad_t1_t1 interface~dyad dyad interface~dyad->proc~dyad_t1_t1 proc~ansatz nurbs_curve%ansatz proc~ansatz->interface~dyad proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~ansatz program~compute_length compute_length program~compute_length->proc~cmp_length Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/dyad_t1_t1.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_curve%elevate_degree proc~elevate_degree->proc~elevate_degree_a_5_9 proc~elevate_degree~2 nurbs_volume%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 program~example3_surface example3_surface program~example3_surface->proc~elevate_degree~3 program~example3_volume example3_volume program~example3_volume->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/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_curve%set2 proc~set2->proc~compute_knot_vector proc~set2~2 nurbs_volume%set2 proc~set2~2->proc~compute_knot_vector proc~set2~3 nurbs_surface%set2 proc~set2~3->proc~compute_knot_vector none~set nurbs_curve%set none~set->proc~set2 none~set~2 nurbs_volume%set none~set~2->proc~set2~2 none~set~3 nurbs_surface%set none~set~3->proc~set2~3 proc~ansatz nurbs_curve%ansatz proc~ansatz->none~set proc~ansatz~2 nurbs_volume%ansatz proc~ansatz~2->none~set~2 proc~ansatz~3 nurbs_surface%ansatz proc~ansatz~3->none~set~3 proc~elevate_degree nurbs_curve%elevate_degree proc~elevate_degree->none~set proc~elevate_degree~2 nurbs_volume%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_curve%insert_knots proc~insert_knots->none~set proc~insert_knots~2 nurbs_volume%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_curve%modify_Wc proc~modify_wc->none~set proc~modify_wc~2 nurbs_volume%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_curve%modify_Xc proc~modify_xc->none~set proc~modify_xc~2 nurbs_volume%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_curve%remove_knots proc~remove_knots->none~set proc~remove_knots~2 nurbs_volume%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_curve%set_C proc~set_c->none~set proc~set_circle nurbs_curve%set_circle proc~set_circle->none~set proc~set_c~2 nurbs_volume%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 proc~set_half_ring nurbs_volume%set_half_ring proc~set_half_ring->none~set~2 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~2 proc~set_ring nurbs_volume%set_ring proc~set_ring->none~set~2 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~compute_area compute_area program~compute_area->none~set~3 proc~cmp_area nurbs_surface%cmp_area program~compute_area->proc~cmp_area program~compute_length compute_length program~compute_length->none~set proc~cmp_length nurbs_curve%cmp_length program~compute_length->proc~cmp_length program~compute_volume compute_volume program~compute_volume->none~set~2 proc~cmp_volume nurbs_volume%cmp_volume program~compute_volume->proc~cmp_volume program~example1_curve example1_curve program~example1_curve->none~set program~example1_curve->proc~elevate_degree program~example1_curve->proc~insert_knots program~example1_curve->proc~remove_knots 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~2 program~example3_volume->proc~elevate_degree~2 program~example3_volume->proc~insert_knots~2 program~example3_volume->proc~remove_knots~2 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->none~set program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->none~set~3 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->none~set~2 program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->none~set~2 program~nearest_point_1d nearest_point_1d program~nearest_point_1d->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~2 proc~cmp_area->proc~ansatz~3 proc~cmp_length->proc~ansatz proc~cmp_volume->proc~ansatz~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_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 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~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 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~ansatz nurbs_curve%ansatz proc~ansatz->interface~unique proc~cmp_elem nurbs_curve%cmp_elem proc~ansatz->proc~cmp_elem proc~ansatz~2 nurbs_volume%ansatz proc~ansatz~2->interface~unique proc~cmp_elem~2 nurbs_volume%cmp_elem proc~ansatz~2->proc~cmp_elem~2 proc~ansatz~3 nurbs_surface%ansatz proc~ansatz~3->interface~unique proc~cmp_elem~3 nurbs_surface%cmp_elem proc~ansatz~3->proc~cmp_elem~3 proc~cmp_elem->interface~unique proc~cmp_elem~2->interface~unique proc~cmp_elem~3->interface~unique proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~ansatz~3 proc~cmp_area->proc~cmp_elem~3 proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~ansatz proc~cmp_length->proc~cmp_elem proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~ansatz~2 proc~cmp_volume->proc~cmp_elem~2 program~example3_volume example3_volume program~example3_volume->proc~cmp_elem~2 program~compute_area compute_area program~compute_area->proc~cmp_area program~compute_length compute_length program~compute_length->proc~cmp_length program~compute_volume compute_volume program~compute_volume->proc~cmp_volume Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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~ansatz nurbs_curve%ansatz proc~ansatz->interface~unique proc~cmp_elem nurbs_curve%cmp_elem proc~ansatz->proc~cmp_elem proc~ansatz~2 nurbs_volume%ansatz proc~ansatz~2->interface~unique proc~cmp_elem~2 nurbs_volume%cmp_elem proc~ansatz~2->proc~cmp_elem~2 proc~ansatz~3 nurbs_surface%ansatz proc~ansatz~3->interface~unique proc~cmp_elem~3 nurbs_surface%cmp_elem proc~ansatz~3->proc~cmp_elem~3 proc~cmp_elem->interface~unique proc~cmp_elem~2->interface~unique proc~cmp_elem~3->interface~unique proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~ansatz~3 proc~cmp_area->proc~cmp_elem~3 proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~ansatz proc~cmp_length->proc~cmp_elem proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~ansatz~2 proc~cmp_volume->proc~cmp_elem~2 program~example3_volume example3_volume program~example3_volume->proc~cmp_elem~2 program~compute_area compute_area program~compute_area->proc~cmp_area program~compute_length compute_length program~compute_length->proc~cmp_length program~compute_volume compute_volume program~compute_volume->proc~cmp_volume Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_curve%elevate_degree proc~elevate_degree->proc~elevate_degree_a_5_9 proc~elevate_degree~2 nurbs_volume%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 program~example3_surface example3_surface program~example3_surface->proc~elevate_degree~3 program~example3_volume example3_volume program~example3_volume->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_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_curve%insert_knots proc~insert_knots->proc~insert_knot_a_5_1 proc~insert_knots~2 nurbs_volume%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 program~example3_surface example3_surface program~example3_surface->proc~insert_knots~3 program~example3_volume example3_volume program~example3_volume->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_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_curve%remove_knots proc~remove_knots->proc~remove_knots_a_5_8 proc~remove_knots~2 nurbs_volume%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 program~example3_surface example3_surface program~example3_surface->proc~remove_knots~3 program~example3_volume example3_volume program~example3_volume->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_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_curve%cmp_elem proc~cmp_elem->interface~elemconn_cn proc~cmp_elem~2 nurbs_volume%cmp_elem proc~cmp_elem~2->interface~elemconn_cn proc~cmp_elem~3 nurbs_surface%cmp_elem proc~cmp_elem~3->interface~elemconn_cn proc~ansatz nurbs_curve%ansatz proc~ansatz->proc~cmp_elem proc~ansatz~2 nurbs_volume%ansatz proc~ansatz~2->proc~cmp_elem~2 proc~ansatz~3 nurbs_surface%ansatz proc~ansatz~3->proc~cmp_elem~3 proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~cmp_elem~3 proc~cmp_area->proc~ansatz~3 proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~cmp_elem proc~cmp_length->proc~ansatz proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~cmp_elem~2 proc~cmp_volume->proc~ansatz~2 program~example3_volume example3_volume program~example3_volume->proc~cmp_elem~2 program~compute_area compute_area program~compute_area->proc~cmp_area program~compute_length compute_length program~compute_length->proc~cmp_length program~compute_volume compute_volume program~compute_volume->proc~cmp_volume Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_curve%cmp_elem proc~cmp_elem->interface~elemconn_cn proc~cmp_elem~2 nurbs_volume%cmp_elem proc~cmp_elem~2->interface~elemconn_cn proc~cmp_elem~3 nurbs_surface%cmp_elem proc~cmp_elem~3->interface~elemconn_cn proc~ansatz nurbs_curve%ansatz proc~ansatz->proc~cmp_elem proc~ansatz~2 nurbs_volume%ansatz proc~ansatz~2->proc~cmp_elem~2 proc~ansatz~3 nurbs_surface%ansatz proc~ansatz~3->proc~cmp_elem~3 proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~cmp_elem~3 proc~cmp_area->proc~ansatz~3 proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~cmp_elem proc~cmp_length->proc~ansatz proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~cmp_elem~2 proc~cmp_volume->proc~ansatz~2 program~example3_volume example3_volume program~example3_volume->proc~cmp_elem~2 program~compute_area compute_area program~compute_area->proc~cmp_area program~compute_length compute_length program~compute_length->proc~cmp_length program~compute_volume compute_volume program~compute_volume->proc~cmp_volume Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_curve%cmp_elem proc~cmp_elem->interface~elemconn_cn proc~cmp_elem~2 nurbs_volume%cmp_elem proc~cmp_elem~2->interface~elemconn_cn proc~cmp_elem~3 nurbs_surface%cmp_elem proc~cmp_elem~3->interface~elemconn_cn proc~ansatz nurbs_curve%ansatz proc~ansatz->proc~cmp_elem proc~ansatz~2 nurbs_volume%ansatz proc~ansatz~2->proc~cmp_elem~2 proc~ansatz~3 nurbs_surface%ansatz proc~ansatz~3->proc~cmp_elem~3 proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~cmp_elem~3 proc~cmp_area->proc~ansatz~3 proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~cmp_elem proc~cmp_length->proc~ansatz proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~cmp_elem~2 proc~cmp_volume->proc~ansatz~2 program~example3_volume example3_volume program~example3_volume->proc~cmp_elem~2 program~compute_area compute_area program~compute_area->proc~cmp_area program~compute_length compute_length program~compute_length->proc~cmp_length program~compute_volume compute_volume program~compute_volume->proc~cmp_volume Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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":"gauss_legendre_1D – ForCAD","text":"private pure subroutine gauss_legendre_1D(interval, degree, Xksi, Wksi) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: interval (2) integer, intent(in) :: degree real(kind=rk), intent(out), allocatable :: Xksi (:) real(kind=rk), intent(out), allocatable :: Wksi (:) Calls proc~~gauss_legendre_1d~~CallsGraph proc~gauss_legendre_1d gauss_legendre_1D gauss_legendre gauss_legendre proc~gauss_legendre_1d->gauss_legendre Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~gauss_legendre_1d~~CalledByGraph proc~gauss_legendre_1d gauss_legendre_1D interface~gauss_leg gauss_leg interface~gauss_leg->proc~gauss_legendre_1d proc~ansatz nurbs_curve%ansatz proc~ansatz->interface~gauss_leg proc~ansatz~2 nurbs_volume%ansatz proc~ansatz~2->interface~gauss_leg proc~ansatz~3 nurbs_surface%ansatz proc~ansatz~3->interface~gauss_leg proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~ansatz~3 proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~ansatz proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~ansatz~2 program~compute_area compute_area program~compute_area->proc~cmp_area program~compute_length compute_length program~compute_length->proc~cmp_length program~compute_volume compute_volume program~compute_volume->proc~cmp_volume Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/gauss_legendre_1d.html"},{"title":"gauss_legendre_2D – ForCAD","text":"private pure subroutine gauss_legendre_2D(interval1, interval2, degree, Xksi, Wksi) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: interval1 (2) real(kind=rk), intent(in) :: interval2 (2) integer, intent(in) :: degree (2) real(kind=rk), intent(out), allocatable :: Xksi (:,:) real(kind=rk), intent(out), allocatable :: Wksi (:) Calls proc~~gauss_legendre_2d~~CallsGraph proc~gauss_legendre_2d gauss_legendre_2D gauss_legendre gauss_legendre proc~gauss_legendre_2d->gauss_legendre interface~ndgrid ndgrid proc~gauss_legendre_2d->interface~ndgrid proc~kron kron proc~gauss_legendre_2d->proc~kron 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~~gauss_legendre_2d~~CalledByGraph proc~gauss_legendre_2d gauss_legendre_2D interface~gauss_leg gauss_leg interface~gauss_leg->proc~gauss_legendre_2d proc~ansatz nurbs_curve%ansatz proc~ansatz->interface~gauss_leg proc~ansatz~2 nurbs_volume%ansatz proc~ansatz~2->interface~gauss_leg proc~ansatz~3 nurbs_surface%ansatz proc~ansatz~3->interface~gauss_leg proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~ansatz~3 proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~ansatz proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~ansatz~2 program~compute_area compute_area program~compute_area->proc~cmp_area program~compute_length compute_length program~compute_length->proc~cmp_length program~compute_volume compute_volume program~compute_volume->proc~cmp_volume Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/gauss_legendre_2d.html"},{"title":"gauss_legendre_3D – ForCAD","text":"private pure subroutine gauss_legendre_3D(interval1, interval2, interval3, degree, Xksi, Wksi) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: interval1 (2) real(kind=rk), intent(in) :: interval2 (2) real(kind=rk), intent(in) :: interval3 (2) integer, intent(in) :: degree (3) real(kind=rk), intent(out), allocatable :: Xksi (:,:) real(kind=rk), intent(out), allocatable :: Wksi (:) Calls proc~~gauss_legendre_3d~~CallsGraph proc~gauss_legendre_3d gauss_legendre_3D gauss_legendre gauss_legendre proc~gauss_legendre_3d->gauss_legendre interface~ndgrid ndgrid proc~gauss_legendre_3d->interface~ndgrid proc~kron kron proc~gauss_legendre_3d->proc~kron 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~~gauss_legendre_3d~~CalledByGraph proc~gauss_legendre_3d gauss_legendre_3D interface~gauss_leg gauss_leg interface~gauss_leg->proc~gauss_legendre_3d proc~ansatz nurbs_curve%ansatz proc~ansatz->interface~gauss_leg proc~ansatz~2 nurbs_volume%ansatz proc~ansatz~2->interface~gauss_leg proc~ansatz~3 nurbs_surface%ansatz proc~ansatz~3->interface~gauss_leg proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~ansatz~3 proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~ansatz proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~ansatz~2 program~compute_area compute_area program~compute_area->proc~cmp_area program~compute_length compute_length program~compute_length->proc~cmp_length program~compute_volume compute_volume program~compute_volume->proc~cmp_volume Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/gauss_legendre_3d.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~ansatz~2 nurbs_volume%ansatz proc~ansatz~2->interface~ndgrid interface~gauss_leg gauss_leg proc~ansatz~2->interface~gauss_leg none~derivative~2 nurbs_volume%derivative proc~ansatz~2->none~derivative~2 proc~ansatz~3 nurbs_surface%ansatz proc~ansatz~3->interface~ndgrid proc~ansatz~3->interface~gauss_leg none~derivative~3 nurbs_surface%derivative proc~ansatz~3->none~derivative~3 proc~basis_vector~2 nurbs_volume%basis_vector proc~basis_vector~2->interface~ndgrid proc~basis_vector~3 nurbs_surface%basis_vector proc~basis_vector~3->interface~ndgrid proc~create~2 nurbs_volume%create proc~create~2->interface~ndgrid proc~create~3 nurbs_surface%create proc~create~3->interface~ndgrid proc~derivative2_vector~2 nurbs_volume%derivative2_vector proc~derivative2_vector~2->interface~ndgrid proc~derivative2_vector~3 nurbs_surface%derivative2_vector proc~derivative2_vector~3->interface~ndgrid proc~derivative_vector~2 nurbs_volume%derivative_vector proc~derivative_vector~2->interface~ndgrid proc~derivative_vector~3 nurbs_surface%derivative_vector proc~derivative_vector~3->interface~ndgrid proc~gauss_legendre_2d gauss_legendre_2D proc~gauss_legendre_2d->interface~ndgrid proc~gauss_legendre_3d gauss_legendre_3D proc~gauss_legendre_3d->interface~ndgrid interface~gauss_leg->proc~gauss_legendre_2d interface~gauss_leg->proc~gauss_legendre_3d none~derivative2~2 nurbs_volume%derivative2 none~derivative2~2->proc~derivative2_vector~2 none~derivative2~3 nurbs_surface%derivative2 none~derivative2~3->proc~derivative2_vector~3 none~derivative~2->proc~derivative_vector~2 none~derivative~3->proc~derivative_vector~3 proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~ansatz~3 proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~ansatz~2 proc~nearest_point2~2 nurbs_volume%nearest_point2 proc~nearest_point2~2->proc~create~2 proc~nearest_point2~2->none~derivative2~2 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~2 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~2 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~2 program~nearest_point_3d->proc~nearest_point2~2 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~2 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~2 program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~create~2 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~2 program~shape_tetragon shape_tetragon program~shape_tetragon->proc~create~3 proc~ansatz nurbs_curve%ansatz proc~ansatz->interface~gauss_leg program~compute_area compute_area program~compute_area->proc~cmp_area program~compute_volume compute_volume program~compute_volume->proc~cmp_volume proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~ansatz program~compute_length compute_length program~compute_length->proc~cmp_length Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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~ansatz~2 nurbs_volume%ansatz proc~ansatz~2->interface~ndgrid interface~gauss_leg gauss_leg proc~ansatz~2->interface~gauss_leg none~derivative~2 nurbs_volume%derivative proc~ansatz~2->none~derivative~2 proc~ansatz~3 nurbs_surface%ansatz proc~ansatz~3->interface~ndgrid proc~ansatz~3->interface~gauss_leg none~derivative~3 nurbs_surface%derivative proc~ansatz~3->none~derivative~3 proc~basis_vector~2 nurbs_volume%basis_vector proc~basis_vector~2->interface~ndgrid proc~basis_vector~3 nurbs_surface%basis_vector proc~basis_vector~3->interface~ndgrid proc~create~2 nurbs_volume%create proc~create~2->interface~ndgrid proc~create~3 nurbs_surface%create proc~create~3->interface~ndgrid proc~derivative2_vector~2 nurbs_volume%derivative2_vector proc~derivative2_vector~2->interface~ndgrid proc~derivative2_vector~3 nurbs_surface%derivative2_vector proc~derivative2_vector~3->interface~ndgrid proc~derivative_vector~2 nurbs_volume%derivative_vector proc~derivative_vector~2->interface~ndgrid proc~derivative_vector~3 nurbs_surface%derivative_vector proc~derivative_vector~3->interface~ndgrid proc~gauss_legendre_2d gauss_legendre_2D proc~gauss_legendre_2d->interface~ndgrid proc~gauss_legendre_3d gauss_legendre_3D proc~gauss_legendre_3d->interface~ndgrid interface~gauss_leg->proc~gauss_legendre_2d interface~gauss_leg->proc~gauss_legendre_3d none~derivative2~2 nurbs_volume%derivative2 none~derivative2~2->proc~derivative2_vector~2 none~derivative2~3 nurbs_surface%derivative2 none~derivative2~3->proc~derivative2_vector~3 none~derivative~2->proc~derivative_vector~2 none~derivative~3->proc~derivative_vector~3 proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~ansatz~3 proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~ansatz~2 proc~nearest_point2~2 nurbs_volume%nearest_point2 proc~nearest_point2~2->proc~create~2 proc~nearest_point2~2->none~derivative2~2 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~2 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~2 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~2 program~nearest_point_3d->proc~nearest_point2~2 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~2 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~2 program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~create~2 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~2 program~shape_tetragon shape_tetragon program~shape_tetragon->proc~create~3 proc~ansatz nurbs_curve%ansatz proc~ansatz->interface~gauss_leg program~compute_area compute_area program~compute_area->proc~cmp_area program~compute_volume compute_volume program~compute_volume->proc~cmp_volume proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~ansatz program~compute_length compute_length program~compute_length->proc~cmp_length Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_curve%cmp_nc proc~cmp_nc->interface~compute_multiplicity proc~cmp_nc~2 nurbs_volume%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_curve%get_continuity proc~get_continuity->interface~compute_multiplicity proc~get_continuity~2 nurbs_volume%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_curve%get_multiplicity proc~get_multiplicity->interface~compute_multiplicity proc~get_multiplicity~2 nurbs_volume%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_dir nurbs_volume%get_nc_dir proc~get_nc_dir->interface~compute_multiplicity proc~get_nc_dir~2 nurbs_surface%get_nc_dir proc~get_nc_dir~2->interface~compute_multiplicity proc~insert_knots nurbs_curve%insert_knots proc~insert_knots->interface~compute_multiplicity none~set nurbs_curve%set proc~insert_knots->none~set proc~insert_knots~2 nurbs_volume%insert_knots proc~insert_knots~2->interface~compute_multiplicity none~set~2 nurbs_volume%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_curve%remove_knots proc~remove_knots->interface~compute_multiplicity proc~remove_knots->none~set proc~remove_knots~2 nurbs_volume%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_curve%cmp_degree proc~cmp_degree->proc~get_multiplicity proc~cmp_degree~2 nurbs_volume%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_curve%cmp_elem proc~cmp_elem->proc~get_multiplicity proc~cmp_elem~2 nurbs_volume%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_curve%elevate_degree proc~elevate_degree->proc~elevate_degree_a_5_9 proc~elevate_degree->none~set proc~elevate_degree~2 nurbs_volume%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~2 nurbs_volume%set1 proc~set1~2->proc~cmp_nc~2 proc~set1~2->proc~cmp_degree~2 proc~set1~3 nurbs_surface%set1 proc~set1~3->proc~cmp_nc~3 proc~set1~3->proc~cmp_degree~3 proc~set2~2 nurbs_volume%set2 proc~set2~2->proc~cmp_nc~2 proc~set2~3 nurbs_surface%set2 proc~set2~3->proc~cmp_nc~3 program~example1_curve example1_curve program~example1_curve->proc~insert_knots program~example1_curve->proc~remove_knots program~example1_curve->proc~elevate_degree program~example1_curve->none~set 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~2 program~example3_volume->proc~remove_knots~2 program~example3_volume->proc~cmp_elem~2 program~example3_volume->proc~elevate_degree~2 program~example3_volume->none~set~2 none~set~2->proc~set1~2 none~set~2->proc~set2~2 proc~set3~2 nurbs_volume%set3 none~set~2->proc~set3~2 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~ansatz nurbs_curve%ansatz proc~ansatz->proc~cmp_elem proc~ansatz->none~set proc~ansatz~2 nurbs_volume%ansatz proc~ansatz~2->proc~cmp_elem~2 proc~ansatz~2->none~set~2 proc~ansatz~3 nurbs_surface%ansatz proc~ansatz~3->proc~cmp_elem~3 proc~ansatz~3->none~set~3 proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~cmp_elem~3 proc~cmp_area->proc~ansatz~3 proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~cmp_elem proc~cmp_length->proc~ansatz proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~cmp_elem~2 proc~cmp_volume->proc~ansatz~2 proc~set1 nurbs_curve%set1 proc~set1->proc~cmp_degree proc~set1a nurbs_curve%set1a proc~set1a->proc~cmp_degree proc~set3 nurbs_curve%set3 proc~set3->proc~cmp_degree proc~set3~2->proc~cmp_degree~2 proc~set3~3->proc~cmp_degree~3 none~set->proc~set1 none~set->proc~set1a none~set->proc~set3 proc~modify_wc~2 nurbs_volume%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~2 nurbs_volume%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~set_c~2 nurbs_volume%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_ring nurbs_volume%set_half_ring proc~set_half_ring->none~set~2 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~2 proc~set_ring nurbs_volume%set_ring proc~set_ring->none~set~2 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~compute_area compute_area program~compute_area->none~set~3 program~compute_area->proc~cmp_area program~compute_length compute_length program~compute_length->proc~cmp_length program~compute_length->none~set program~compute_volume compute_volume program~compute_volume->none~set~2 program~compute_volume->proc~cmp_volume 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~2 program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->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~2 proc~modify_wc nurbs_curve%modify_Wc proc~modify_wc->none~set proc~modify_xc nurbs_curve%modify_Xc proc~modify_xc->none~set proc~set_c nurbs_curve%set_C proc~set_c->none~set proc~set_circle nurbs_curve%set_circle proc~set_circle->none~set proc~set_half_circle nurbs_curve%set_half_circle proc~set_half_circle->none~set program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->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_1d nearest_point_1d program~nearest_point_1d->none~set 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~2 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 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":"dyad – ForCAD","text":"public interface dyad Calls interface~~dyad~~CallsGraph interface~dyad dyad proc~dyad_t1_t1 dyad_t1_t1 interface~dyad->proc~dyad_t1_t1 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface 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~~dyad~~CalledByGraph interface~dyad dyad proc~ansatz nurbs_curve%ansatz proc~ansatz->interface~dyad proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~ansatz program~compute_length compute_length program~compute_length->proc~cmp_length Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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 dyad_t1_t1 (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 (:) real(kind=rk), intent(in), contiguous :: b (:) Return Value real(kind=rk), allocatable, (:,:)","tags":"","loc":"interface/dyad.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_curve%cmp_elem_Xc_vis proc~cmp_elem_xc_vis->interface~elemconn_c0 proc~cmp_elem_xc_vis~2 nurbs_volume%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_curve%cmp_elem_Xg_vis proc~cmp_elem_xg_vis->interface~elemconn_c0 proc~cmp_elem_xg_vis~2 nurbs_volume%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_curve%export_Xc proc~export_xc->proc~cmp_elem_xc_vis proc~export_xc~2 nurbs_volume%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_curve%export_Xg proc~export_xg->proc~cmp_elem_xg_vis proc~export_xg~2 nurbs_volume%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 program~example1_curve->proc~export_xg 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~2 program~example3_volume->proc~export_xg~2 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~export_xc program~example_nurbs_curve->proc~export_xg program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~export_xc~3 program~example_nurbs_surface->proc~export_xg~3 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~export_xc~2 program~example_nurbs_volume->proc~export_xg~2 program~example_put_to_nurbs example_put_to_nurbs program~example_put_to_nurbs->proc~export_xc~2 program~example_put_to_nurbs->proc~export_xg~2 program~shape_c_1d shape_C_1d program~shape_c_1d->proc~export_xc program~shape_c_1d->proc~export_xg 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~2 program~shape_c_3d->proc~export_xg~2 program~shape_circle shape_circle program~shape_circle->proc~export_xc program~shape_circle->proc~export_xg program~shape_half_circle shape_half_circle program~shape_half_circle->proc~export_xc program~shape_half_circle->proc~export_xg 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~2 program~shape_half_ring_3d->proc~export_xg~2 program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~export_xc~2 program~shape_hexahedron->proc~export_xg~2 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~2 program~shape_ring_3d->proc~export_xg~2 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_curve%cmp_elem proc~cmp_elem->interface~elemconn_cn proc~cmp_elem~2 nurbs_volume%cmp_elem proc~cmp_elem~2->interface~elemconn_cn proc~cmp_elem~3 nurbs_surface%cmp_elem proc~cmp_elem~3->interface~elemconn_cn proc~ansatz nurbs_curve%ansatz proc~ansatz->proc~cmp_elem proc~ansatz~2 nurbs_volume%ansatz proc~ansatz~2->proc~cmp_elem~2 proc~ansatz~3 nurbs_surface%ansatz proc~ansatz~3->proc~cmp_elem~3 proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~cmp_elem~3 proc~cmp_area->proc~ansatz~3 proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~cmp_elem proc~cmp_length->proc~ansatz proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~cmp_elem~2 proc~cmp_volume->proc~ansatz~2 program~example3_volume example3_volume program~example3_volume->proc~cmp_elem~2 program~compute_area compute_area program~compute_area->proc~cmp_area program~compute_length compute_length program~compute_length->proc~cmp_length program~compute_volume compute_volume program~compute_volume->proc~cmp_volume Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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":"gauss_leg – ForCAD","text":"public interface gauss_leg Calls interface~~gauss_leg~~CallsGraph interface~gauss_leg gauss_leg proc~gauss_legendre_1d gauss_legendre_1D interface~gauss_leg->proc~gauss_legendre_1d proc~gauss_legendre_2d gauss_legendre_2D interface~gauss_leg->proc~gauss_legendre_2d proc~gauss_legendre_3d gauss_legendre_3D interface~gauss_leg->proc~gauss_legendre_3d gauss_legendre gauss_legendre proc~gauss_legendre_1d->gauss_legendre proc~gauss_legendre_2d->gauss_legendre interface~ndgrid ndgrid proc~gauss_legendre_2d->interface~ndgrid proc~kron kron proc~gauss_legendre_2d->proc~kron proc~gauss_legendre_3d->gauss_legendre proc~gauss_legendre_3d->interface~ndgrid proc~gauss_legendre_3d->proc~kron 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~~gauss_leg~~CalledByGraph interface~gauss_leg gauss_leg proc~ansatz nurbs_curve%ansatz proc~ansatz->interface~gauss_leg proc~ansatz~2 nurbs_volume%ansatz proc~ansatz~2->interface~gauss_leg proc~ansatz~3 nurbs_surface%ansatz proc~ansatz~3->interface~gauss_leg proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~ansatz~3 proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~ansatz proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~ansatz~2 program~compute_area compute_area program~compute_area->proc~cmp_area program~compute_length compute_length program~compute_length->proc~cmp_length program~compute_volume compute_volume program~compute_volume->proc~cmp_volume Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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 gauss_legendre_1D (interval, degree, Xksi, Wksi) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: interval (2) integer, intent(in) :: degree real(kind=rk), intent(out), allocatable :: Xksi (:) real(kind=rk), intent(out), allocatable :: Wksi (:) private pure subroutine gauss_legendre_2D (interval1, interval2, degree, Xksi, Wksi) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: interval1 (2) real(kind=rk), intent(in) :: interval2 (2) integer, intent(in) :: degree (2) real(kind=rk), intent(out), allocatable :: Xksi (:,:) real(kind=rk), intent(out), allocatable :: Wksi (:) private pure subroutine gauss_legendre_3D (interval1, interval2, interval3, degree, Xksi, Wksi) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: interval1 (2) real(kind=rk), intent(in) :: interval2 (2) real(kind=rk), intent(in) :: interval3 (2) integer, intent(in) :: degree (3) real(kind=rk), intent(out), allocatable :: Xksi (:,:) real(kind=rk), intent(out), allocatable :: Wksi (:)","tags":"","loc":"interface/gauss_leg.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~ansatz~2 nurbs_volume%ansatz proc~ansatz~2->interface~ndgrid interface~gauss_leg gauss_leg proc~ansatz~2->interface~gauss_leg none~derivative~2 nurbs_volume%derivative proc~ansatz~2->none~derivative~2 proc~ansatz~3 nurbs_surface%ansatz proc~ansatz~3->interface~ndgrid proc~ansatz~3->interface~gauss_leg none~derivative~3 nurbs_surface%derivative proc~ansatz~3->none~derivative~3 proc~basis_vector~2 nurbs_volume%basis_vector proc~basis_vector~2->interface~ndgrid proc~basis_vector~3 nurbs_surface%basis_vector proc~basis_vector~3->interface~ndgrid proc~create~2 nurbs_volume%create proc~create~2->interface~ndgrid proc~create~3 nurbs_surface%create proc~create~3->interface~ndgrid proc~derivative2_vector~2 nurbs_volume%derivative2_vector proc~derivative2_vector~2->interface~ndgrid proc~derivative2_vector~3 nurbs_surface%derivative2_vector proc~derivative2_vector~3->interface~ndgrid proc~derivative_vector~2 nurbs_volume%derivative_vector proc~derivative_vector~2->interface~ndgrid proc~derivative_vector~3 nurbs_surface%derivative_vector proc~derivative_vector~3->interface~ndgrid proc~gauss_legendre_2d gauss_legendre_2D proc~gauss_legendre_2d->interface~ndgrid proc~gauss_legendre_3d gauss_legendre_3D proc~gauss_legendre_3d->interface~ndgrid interface~gauss_leg->proc~gauss_legendre_2d interface~gauss_leg->proc~gauss_legendre_3d none~derivative2~2 nurbs_volume%derivative2 none~derivative2~2->proc~derivative2_vector~2 none~derivative2~3 nurbs_surface%derivative2 none~derivative2~3->proc~derivative2_vector~3 none~derivative~2->proc~derivative_vector~2 none~derivative~3->proc~derivative_vector~3 proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~ansatz~3 proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~ansatz~2 proc~nearest_point2~2 nurbs_volume%nearest_point2 proc~nearest_point2~2->proc~create~2 proc~nearest_point2~2->none~derivative2~2 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~2 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~2 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~2 program~nearest_point_3d->proc~nearest_point2~2 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~2 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~2 program~shape_hexahedron shape_hexahedron program~shape_hexahedron->proc~create~2 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~2 program~shape_tetragon shape_tetragon program~shape_tetragon->proc~create~3 proc~ansatz nurbs_curve%ansatz proc~ansatz->interface~gauss_leg program~compute_area compute_area program~compute_area->proc~cmp_area program~compute_volume compute_volume program~compute_volume->proc~cmp_volume proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~ansatz program~compute_length compute_length program~compute_length->proc~cmp_length Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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~ansatz nurbs_curve%ansatz proc~ansatz->interface~unique proc~cmp_elem nurbs_curve%cmp_elem proc~ansatz->proc~cmp_elem proc~ansatz~2 nurbs_volume%ansatz proc~ansatz~2->interface~unique proc~cmp_elem~2 nurbs_volume%cmp_elem proc~ansatz~2->proc~cmp_elem~2 proc~ansatz~3 nurbs_surface%ansatz proc~ansatz~3->interface~unique proc~cmp_elem~3 nurbs_surface%cmp_elem proc~ansatz~3->proc~cmp_elem~3 proc~cmp_elem->interface~unique proc~cmp_elem~2->interface~unique proc~cmp_elem~3->interface~unique proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~ansatz~3 proc~cmp_area->proc~cmp_elem~3 proc~cmp_length nurbs_curve%cmp_length proc~cmp_length->proc~ansatz proc~cmp_length->proc~cmp_elem proc~cmp_volume nurbs_volume%cmp_volume proc~cmp_volume->proc~ansatz~2 proc~cmp_volume->proc~cmp_elem~2 program~example3_volume example3_volume program~example3_volume->proc~cmp_elem~2 program~compute_area compute_area program~compute_area->proc~cmp_area program~compute_length compute_length program~compute_length->proc~cmp_length program~compute_volume compute_volume program~compute_volume->proc~cmp_volume Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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":"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. Called by proc~~cmp_elem~3~~CalledByGraph proc~cmp_elem~3 nurbs_surface%cmp_elem proc~ansatz~3 nurbs_surface%ansatz proc~ansatz~3->proc~cmp_elem~3 proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~cmp_elem~3 proc~cmp_area->proc~ansatz~3 program~compute_area compute_area program~compute_area->proc~cmp_area Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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~ansatz~3 nurbs_surface%ansatz proc~ansatz~3->proc~cmp_elem~3 none~set~3 nurbs_surface%set proc~ansatz~3->none~set~3 proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~cmp_elem~3 proc~cmp_area->proc~ansatz~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->proc~set1~3 none~set~3->proc~set3~3 program~compute_area compute_area program~compute_area->proc~cmp_area program~compute_area->none~set~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_all – ForCAD","text":"private pure function get_nc_all(this) result(nc) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value integer, (2)","tags":"","loc":"proc/get_nc_all~2.html"},{"title":"get_nc_dir – ForCAD","text":"private pure function get_nc_dir(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_dir~2~~CallsGraph proc~get_nc_dir~2 nurbs_surface%get_nc_dir interface~compute_multiplicity compute_multiplicity proc~get_nc_dir~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_dir~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~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 none~derivative~3 nurbs_surface%derivative none~derivative~3->proc~derivative_scalar~3 none~derivative~3->proc~derivative_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 proc~ansatz~3 nurbs_surface%ansatz proc~ansatz~3->none~derivative~3 proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~ansatz~3 program~compute_area compute_area program~compute_area->proc~cmp_area Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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":"ansatz – ForCAD","text":"private pure subroutine ansatz(this, ie, ig, Tgc, dTgc_dXg, dA) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in) :: ie integer, intent(in) :: ig real(kind=rk), intent(out), allocatable :: Tgc (:) real(kind=rk), intent(out), allocatable :: dTgc_dXg (:,:) real(kind=rk), intent(out) :: dA Calls proc~~ansatz~3~~CallsGraph proc~ansatz~3 nurbs_surface%ansatz interface~gauss_leg gauss_leg proc~ansatz~3->interface~gauss_leg interface~ndgrid ndgrid proc~ansatz~3->interface~ndgrid interface~unique unique proc~ansatz~3->interface~unique none~derivative~3 nurbs_surface%derivative proc~ansatz~3->none~derivative~3 none~set~3 nurbs_surface%set proc~ansatz~3->none~set~3 proc~cmp_elem~3 nurbs_surface%cmp_elem proc~ansatz~3->proc~cmp_elem~3 proc~det det proc~ansatz~3->proc~det proc~inv inv proc~ansatz~3->proc~inv proc~gauss_legendre_1d gauss_legendre_1D interface~gauss_leg->proc~gauss_legendre_1d proc~gauss_legendre_2d gauss_legendre_2D interface~gauss_leg->proc~gauss_legendre_2d proc~gauss_legendre_3d gauss_legendre_3D interface~gauss_leg->proc~gauss_legendre_3d 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 proc~derivative_scalar~3 nurbs_surface%derivative_scalar none~derivative~3->proc~derivative_scalar~3 proc~derivative_vector~3 nurbs_surface%derivative_vector none~derivative~3->proc~derivative_vector~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~set4~3 nurbs_surface%set4 none~set~3->proc~set4~3 proc~cmp_elem~3->interface~unique interface~elemconn_cn elemConn_Cn proc~cmp_elem~3->interface~elemconn_cn proc~get_multiplicity~3 nurbs_surface%get_multiplicity proc~cmp_elem~3->proc~get_multiplicity~3 proc~inv->proc~det proc~inv->proc~inv 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 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 proc~derivative_vector~3->interface~ndgrid proc~derivative_vector~3->interface~compute_dtgc~3 proc~derivative_vector~3->proc~is_rational~3 gauss_legendre gauss_legendre proc~gauss_legendre_1d->gauss_legendre proc~gauss_legendre_2d->interface~ndgrid proc~gauss_legendre_2d->gauss_legendre proc~kron kron proc~gauss_legendre_2d->proc~kron proc~gauss_legendre_3d->interface~ndgrid proc~gauss_legendre_3d->gauss_legendre proc~gauss_legendre_3d->proc~kron interface~compute_multiplicity compute_multiplicity proc~get_multiplicity~3->interface~compute_multiplicity 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~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~cmp_degree~3->proc~get_multiplicity~3 proc~cmp_nc~3->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. Called by proc~~ansatz~3~~CalledByGraph proc~ansatz~3 nurbs_surface%ansatz proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~ansatz~3 program~compute_area compute_area program~compute_area->proc~cmp_area Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/ansatz~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_area – ForCAD","text":"private pure subroutine cmp_area(this, area) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(out) :: area Calls proc~~cmp_area~~CallsGraph proc~cmp_area nurbs_surface%cmp_area proc~ansatz~3 nurbs_surface%ansatz proc~cmp_area->proc~ansatz~3 proc~cmp_elem~3 nurbs_surface%cmp_elem proc~cmp_area->proc~cmp_elem~3 proc~ansatz~3->proc~cmp_elem~3 interface~gauss_leg gauss_leg proc~ansatz~3->interface~gauss_leg interface~ndgrid ndgrid proc~ansatz~3->interface~ndgrid interface~unique unique proc~ansatz~3->interface~unique none~derivative~3 nurbs_surface%derivative proc~ansatz~3->none~derivative~3 none~set~3 nurbs_surface%set proc~ansatz~3->none~set~3 proc~det det proc~ansatz~3->proc~det proc~inv inv proc~ansatz~3->proc~inv interface~elemconn_cn elemConn_Cn proc~cmp_elem~3->interface~elemconn_cn 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~gauss_legendre_1d gauss_legendre_1D interface~gauss_leg->proc~gauss_legendre_1d proc~gauss_legendre_2d gauss_legendre_2D interface~gauss_leg->proc~gauss_legendre_2d proc~gauss_legendre_3d gauss_legendre_3D interface~gauss_leg->proc~gauss_legendre_3d 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 proc~derivative_scalar~3 nurbs_surface%derivative_scalar none~derivative~3->proc~derivative_scalar~3 proc~derivative_vector~3 nurbs_surface%derivative_vector none~derivative~3->proc~derivative_vector~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~set4~3 nurbs_surface%set4 none~set~3->proc~set4~3 interface~compute_multiplicity compute_multiplicity proc~get_multiplicity~3->interface~compute_multiplicity proc~inv->proc~det proc~inv->proc~inv proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 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 proc~derivative_vector~3->interface~ndgrid proc~derivative_vector~3->interface~compute_dtgc~3 proc~derivative_vector~3->proc~is_rational~3 gauss_legendre gauss_legendre proc~gauss_legendre_1d->gauss_legendre proc~gauss_legendre_2d->interface~ndgrid proc~gauss_legendre_2d->gauss_legendre proc~kron kron proc~gauss_legendre_2d->proc~kron proc~gauss_legendre_3d->interface~ndgrid proc~gauss_legendre_3d->gauss_legendre proc~gauss_legendre_3d->proc~kron 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_degree~3->proc~get_multiplicity~3 proc~cmp_nc~3->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. Called by proc~~cmp_area~~CalledByGraph proc~cmp_area nurbs_surface%cmp_area program~compute_area compute_area program~compute_area->proc~cmp_area Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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_area.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~ansatz~3 nurbs_surface%ansatz proc~ansatz~3->none~set~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~compute_area compute_area program~compute_area->none~set~3 proc~cmp_area nurbs_surface%cmp_area program~compute_area->proc~cmp_area 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 proc~cmp_area->proc~ansatz~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~ansatz~3 nurbs_surface%ansatz proc~ansatz~3->none~set~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~compute_area compute_area program~compute_area->none~set~3 proc~cmp_area nurbs_surface%cmp_area program~compute_area->proc~cmp_area 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 proc~cmp_area->proc~ansatz~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, elem) 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 (:) integer, intent(in), optional :: elem (:) 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. Called by proc~~derivative_scalar~3~~CalledByGraph proc~derivative_scalar~3 nurbs_surface%derivative_scalar none~derivative~3 nurbs_surface%derivative none~derivative~3->proc~derivative_scalar~3 proc~ansatz~3 nurbs_surface%ansatz proc~ansatz~3->none~derivative~3 proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~ansatz~3 program~compute_area compute_area program~compute_area->proc~cmp_area Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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. Called by proc~~derivative_vector~3~~CalledByGraph proc~derivative_vector~3 nurbs_surface%derivative_vector none~derivative~3 nurbs_surface%derivative none~derivative~3->proc~derivative_vector~3 proc~ansatz~3 nurbs_surface%ansatz proc~ansatz~3->none~derivative~3 proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~ansatz~3 program~compute_area compute_area program~compute_area->proc~cmp_area Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in 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 proc~set4~3 nurbs_surface%set4 none~set~3->proc~set4~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~set4~3 nurbs_surface%set4 none~set~3->proc~set4~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~set4~3 nurbs_surface%set4 none~set~3->proc~set4~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~set4~3 nurbs_surface%set4 none~set~3->proc~set4~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 proc~nearest_point2~3 nurbs_surface%nearest_point2 proc~nearest_point2~3->proc~nearest_point~3 program~nearest_point_2d nearest_point_2d program~nearest_point_2d->proc~nearest_point~3 program~nearest_point_2d->proc~nearest_point2~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 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~inv inv proc~nearest_point2~3->proc~inv proc~nearest_point~3 nurbs_surface%nearest_point proc~nearest_point2~3->proc~nearest_point~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~inv->proc~inv proc~det det proc~inv->proc~det interface~nearest_point_help_2d nearest_point_help_2d 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->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~set4~3 nurbs_surface%set4 none~set~3->proc~set4~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~ansatz~3 nurbs_surface%ansatz proc~ansatz~3->none~set~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~compute_area compute_area program~compute_area->none~set~3 proc~cmp_area nurbs_surface%cmp_area program~compute_area->proc~cmp_area 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 proc~cmp_area->proc~ansatz~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~ansatz~3 nurbs_surface%ansatz proc~ansatz~3->none~set~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~compute_area compute_area program~compute_area->none~set~3 proc~cmp_area nurbs_surface%cmp_area program~compute_area->proc~cmp_area 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 proc~cmp_area->proc~ansatz~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~ansatz~3 nurbs_surface%ansatz proc~ansatz~3->none~set~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~compute_area compute_area program~compute_area->none~set~3 proc~cmp_area nurbs_surface%cmp_area program~compute_area->proc~cmp_area 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 proc~cmp_area->proc~ansatz~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":"set4 – ForCAD","text":"private pure subroutine set4(this, degree, nc, Xc, Wc) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), contiguous :: degree (:) integer, intent(in), contiguous :: nc (:) real(kind=rk), intent(in), contiguous :: Xc (:,:) real(kind=rk), intent(in), optional, contiguous :: Wc (:) Called by proc~~set4~3~~CalledByGraph proc~set4~3 nurbs_surface%set4 none~set~3 nurbs_surface%set none~set~3->proc~set4~3 proc~ansatz~3 nurbs_surface%ansatz proc~ansatz~3->none~set~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~compute_area compute_area program~compute_area->none~set~3 proc~cmp_area nurbs_surface%cmp_area program~compute_area->proc~cmp_area 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 proc~cmp_area->proc~ansatz~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/set4~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~set4~3 nurbs_surface%set4 none~set~3->proc~set4~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~set4~3 nurbs_surface%set4 none~set~3->proc~set4~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~set4~3 nurbs_surface%set4 none~set~3->proc~set4~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~set4~3 nurbs_surface%set4 none~set~3->proc~set4~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 none~derivative~3 nurbs_surface%derivative none~derivative~3->proc~derivative_scalar~3 none~derivative~3->proc~derivative_vector~3 proc~ansatz~3 nurbs_surface%ansatz proc~ansatz~3->none~derivative~3 proc~cmp_area nurbs_surface%cmp_area proc~cmp_area->proc~ansatz~3 program~compute_area compute_area program~compute_area->proc~cmp_area Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of 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, elem) 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 (:) integer, intent(in) :: elem (:) 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, elem) 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 (:) integer, intent(in) :: elem (:) 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_point~3 nurbs_surface%nearest_point proc~nearest_point~3->interface~nearest_point_help_2d proc~nearest_point2~3 nurbs_surface%nearest_point2 proc~nearest_point2~3->proc~nearest_point~3 program~nearest_point_2d nearest_point_2d program~nearest_point_2d->proc~nearest_point~3 program~nearest_point_2d->proc~nearest_point2~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":"forcad – ForCAD","text":"Uses forcad_nurbs_surface forcad_utils forcad_nurbs_curve forcad_nurbs_volume 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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~compute_area compute_area program~compute_area->module~forcad program~compute_length compute_length program~compute_length->module~forcad program~compute_volume compute_volume program~compute_volume->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~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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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~compute_area compute_area program~compute_area->module~forcad program~compute_length compute_length program~compute_length->module~forcad program~compute_volume compute_volume program~compute_volume->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~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, f_elem) 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 (:) integer, intent(in), optional :: f_elem (:) 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, f_elem) 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 (:) integer, intent(in), optional :: f_elem (:) 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 procedure, public :: ansatz Compute the shape functions, derivative of shape functions and dL Read more… 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_length Compute the length of the NURBS curve 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 , set1a , set2 , set3 , set4 Set NURBS curve Read more… procedure, public :: set1 Set knot vector, control points and weights for the NURBS curve object Read more… procedure, public :: set1a 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 :: set4 Set NURBS curve using degree, number of control points, 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 ansatz (this, ie, ig, Tgc, dTgc_dXg, dL) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this integer, intent(in) :: ie integer, intent(in) :: ig real(kind=rk), intent(out), allocatable :: Tgc (:) real(kind=rk), intent(out), allocatable :: dTgc_dXg (:,:) real(kind=rk), intent(out) :: dL 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_length (this, length) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(out) :: length 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, elem) 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 (:) integer, intent(in), optional :: elem (:) 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 set1a (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 set4 (this, degree, nc, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this integer, intent(in) :: degree integer, intent(in) :: nc 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_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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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~compute_area compute_area program~compute_area->module~forcad program~compute_length compute_length program~compute_length->module~forcad program~compute_volume compute_volume program~compute_volume->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~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, f_elem) 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 (:) integer, intent(in), optional :: f_elem (:) 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, f_elem) 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 (:) integer, intent(in), optional :: f_elem (:) 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 procedure, public :: ansatz Compute the shape functions, derivative of shape functions and dV Read more… 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 :: cmp_volume Compute the volume of the NURBS volume 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… generic, public :: get_nc => get_nc_all , get_nc_dir 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 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 , set4 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 :: set4 Set NURBS volume using degree, number of control points, 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… procedure, private :: get_nc_all Get number of control points in all directions Read more… procedure, private :: get_nc_dir Get number of control points in a specific direction 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_all (this) result(nc) 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_nc_dir (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 ansatz (this, ie, ig, Tgc, dTgc_dXg, dV) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in) :: ie integer, intent(in) :: ig real(kind=rk), intent(out), allocatable :: Tgc (:) real(kind=rk), intent(out), allocatable :: dTgc_dXg (:,:) real(kind=rk), intent(out) :: dV 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 cmp_volume (this, volume) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(out) :: volume 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, elem) 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 (:) integer, intent(in), optional :: elem (:) 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 set4 (this, degree, nc, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), contiguous :: degree (:) 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. Uses stdlib_quadrature module~~forcad_utils~~UsesGraph module~forcad_utils forcad_utils stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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_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~compute_area compute_area program~compute_area->module~forcad program~compute_length compute_length program~compute_length->module~forcad program~compute_volume compute_volume program~compute_volume->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 dyad private pure function dyad_t1_t1 (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 (:) real(kind=rk), intent(in), contiguous :: b (:) Return Value real(kind=rk), allocatable, (:,:) 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 gauss_leg private pure subroutine gauss_legendre_1D (interval, degree, Xksi, Wksi) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: interval (2) integer, intent(in) :: degree real(kind=rk), intent(out), allocatable :: Xksi (:) real(kind=rk), intent(out), allocatable :: Wksi (:) private pure subroutine gauss_legendre_2D (interval1, interval2, degree, Xksi, Wksi) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: interval1 (2) real(kind=rk), intent(in) :: interval2 (2) integer, intent(in) :: degree (2) real(kind=rk), intent(out), allocatable :: Xksi (:,:) real(kind=rk), intent(out), allocatable :: Wksi (:) private pure subroutine gauss_legendre_3D (interval1, interval2, interval3, degree, Xksi, Wksi) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: interval1 (2) real(kind=rk), intent(in) :: interval2 (2) real(kind=rk), intent(in) :: interval3 (2) integer, intent(in) :: degree (3) real(kind=rk), intent(out), allocatable :: Xksi (:,:) real(kind=rk), intent(out), allocatable :: Wksi (:) 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 det (A) result(detA) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: A (:,:) Return Value real(kind=rk) 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 recursive function inv (A) result(A_inv) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: A (:,:) 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 dyad_t1_t1 (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 (:) real(kind=rk), intent(in), contiguous :: b (:) Return Value real(kind=rk), allocatable, (:,:) 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 gauss_legendre_1D (interval, degree, Xksi, Wksi) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: interval (2) integer, intent(in) :: degree real(kind=rk), intent(out), allocatable :: Xksi (:) real(kind=rk), intent(out), allocatable :: Wksi (:) private pure subroutine gauss_legendre_2D (interval1, interval2, degree, Xksi, Wksi) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: interval1 (2) real(kind=rk), intent(in) :: interval2 (2) integer, intent(in) :: degree (2) real(kind=rk), intent(out), allocatable :: Xksi (:,:) real(kind=rk), intent(out), allocatable :: Wksi (:) private pure subroutine gauss_legendre_3D (interval1, interval2, interval3, degree, Xksi, Wksi) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: interval1 (2) real(kind=rk), intent(in) :: interval2 (2) real(kind=rk), intent(in) :: interval3 (2) integer, intent(in) :: degree (3) real(kind=rk), intent(out), allocatable :: Xksi (:,:) real(kind=rk), intent(out), allocatable :: Wksi (:) 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_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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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~compute_area compute_area program~compute_area->module~forcad program~compute_length compute_length program~compute_length->module~forcad program~compute_volume compute_volume program~compute_volume->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~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, elem) 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 (:) integer, intent(in) :: elem (:) 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, elem) 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 (:) integer, intent(in) :: elem (:) 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 procedure, public :: ansatz Compute the shape functions, derivative of shape functions and dA Read more… 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_area Compute the area of the NURBS surface 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… generic, public :: get_nc => get_nc_all , get_nc_dir 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 , set4 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 :: set4 Set NURBS surface using degree, number of control points, 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… procedure, private :: get_nc_all Get number of control points in all directions Read more… procedure, private :: get_nc_dir Get number of control points in a specific direction 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_all (this) result(nc) 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_nc_dir (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 ansatz (this, ie, ig, Tgc, dTgc_dXg, dA) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in) :: ie integer, intent(in) :: ig real(kind=rk), intent(out), allocatable :: Tgc (:) real(kind=rk), intent(out), allocatable :: dTgc_dXg (:,:) real(kind=rk), intent(out) :: dA 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_area (this, area) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(out) :: area 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, elem) 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 (:) integer, intent(in), optional :: elem (:) 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 set4 (this, degree, nc, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), contiguous :: degree (:) 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":"example_put_to_nurbs – ForCAD","text":"Uses forcad_utils forcad 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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~2 nurbs_volume%set program~example_put_to_nurbs->none~set~2 proc~export_xc~2 nurbs_volume%export_Xc program~example_put_to_nurbs->proc~export_xc~2 proc~export_xg~2 nurbs_volume%export_Xg program~example_put_to_nurbs->proc~export_xg~2 proc~finalize~2 nurbs_volume%finalize program~example_put_to_nurbs->proc~finalize~2 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~2 nurbs_volume%show program~example_put_to_nurbs->proc~show~2 proc~set1~2 nurbs_volume%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_volume%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_volume%set3 none~set~2->proc~set3~2 proc~set4~2 nurbs_volume%set4 none~set~2->proc~set4~2 proc~cmp_elem_xc_vis~2 nurbs_volume%cmp_elem_Xc_vis proc~export_xc~2->proc~cmp_elem_xc_vis~2 proc~cmp_elem_xg_vis~2 nurbs_volume%cmp_elem_Xg_vis proc~export_xg~2->proc~cmp_elem_xg_vis~2 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~2 nurbs_volume%set_elem_Xg_vis proc~put_to_nurbs->proc~set_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_volume%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~cmp_nc~2 nurbs_volume%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_volume%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 :: X (:,:) type( nurbs_volume ) :: control_shape integer, allocatable :: elem (:,:) integer :: i integer :: nunit","tags":"","loc":"program/example_put_to_nurbs.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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 nurbs_curve%set program~example_nurbs_curve->none~set proc~create nurbs_curve%create program~example_nurbs_curve->proc~create proc~export_xc nurbs_curve%export_Xc program~example_nurbs_curve->proc~export_xc proc~export_xg nurbs_curve%export_Xg program~example_nurbs_curve->proc~export_xg proc~finalize nurbs_curve%finalize program~example_nurbs_curve->proc~finalize proc~generate_xc generate_Xc program~example_nurbs_curve->proc~generate_xc proc~show nurbs_curve%show program~example_nurbs_curve->proc~show proc~set1 nurbs_curve%set1 none~set->proc~set1 proc~set1a nurbs_curve%set1a none~set->proc~set1a proc~set2 nurbs_curve%set2 none~set->proc~set2 proc~set3 nurbs_curve%set3 none~set->proc~set3 proc~set4 nurbs_curve%set4 none~set->proc~set4 interface~compute_xg compute_Xg proc~create->interface~compute_xg proc~is_rational nurbs_curve%is_rational proc~create->proc~is_rational proc~cmp_elem_xc_vis nurbs_curve%cmp_elem_Xc_vis proc~export_xc->proc~cmp_elem_xc_vis proc~cmp_elem_xg_vis nurbs_curve%cmp_elem_Xg_vis proc~export_xg->proc~cmp_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_curve%cmp_degree proc~set1->proc~cmp_degree proc~set1a->proc~cmp_degree 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_curve%get_multiplicity proc~cmp_degree->proc~get_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem 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. 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_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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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~2 nurbs_volume%create program~shape_half_ring_3d->proc~create~2 proc~export_xc~2 nurbs_volume%export_Xc program~shape_half_ring_3d->proc~export_xc~2 proc~export_xg~2 nurbs_volume%export_Xg program~shape_half_ring_3d->proc~export_xg~2 proc~finalize~2 nurbs_volume%finalize program~shape_half_ring_3d->proc~finalize~2 proc~set_half_ring nurbs_volume%set_half_ring program~shape_half_ring_3d->proc~set_half_ring proc~show~2 nurbs_volume%show program~shape_half_ring_3d->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_volume%is_rational proc~create~2->proc~is_rational~2 proc~cmp_elem_xc_vis~2 nurbs_volume%cmp_elem_Xc_vis proc~export_xc~2->proc~cmp_elem_xc_vis~2 proc~cmp_elem_xg_vis~2 nurbs_volume%cmp_elem_Xg_vis proc~export_xg~2->proc~cmp_elem_xg_vis~2 none~set~2 nurbs_volume%set proc~set_half_ring->none~set~2 proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 ndgrid3 interface~ndgrid->proc~ndgrid3 proc~set1~2 nurbs_volume%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_volume%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_volume%set3 none~set~2->proc~set3~2 proc~set4~2 nurbs_volume%set4 none~set~2->proc~set4~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_volume%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~cmp_nc~2 nurbs_volume%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_volume%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_volume ) :: shape","tags":"","loc":"program/shape_half_ring_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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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~2 generate_Xc program~example3_surface->proc~generate_xc~2 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 proc~set4~3 nurbs_surface%set4 none~set~3->proc~set4~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":"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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 nurbs_curve%set program~nearest_point_1d->none~set proc~create nurbs_curve%create program~nearest_point_1d->proc~create proc~finalize nurbs_curve%finalize program~nearest_point_1d->proc~finalize proc~nearest_point nurbs_curve%nearest_point program~nearest_point_1d->proc~nearest_point proc~nearest_point2 nurbs_curve%nearest_point2 program~nearest_point_1d->proc~nearest_point2 proc~set1 nurbs_curve%set1 none~set->proc~set1 proc~set1a nurbs_curve%set1a none~set->proc~set1a proc~set2 nurbs_curve%set2 none~set->proc~set2 proc~set3 nurbs_curve%set3 none~set->proc~set3 proc~set4 nurbs_curve%set4 none~set->proc~set4 interface~compute_xg compute_Xg proc~create->interface~compute_xg proc~is_rational nurbs_curve%is_rational proc~create->proc~is_rational interface~nearest_point_help_1d nearest_point_help_1d proc~nearest_point->interface~nearest_point_help_1d proc~nearest_point2->proc~create proc~nearest_point2->proc~finalize proc~nearest_point2->proc~nearest_point none~derivative2 nurbs_curve%derivative2 proc~nearest_point2->none~derivative2 proc~cmp_xg nurbs_curve%cmp_Xg proc~nearest_point2->proc~cmp_xg proc~derivative2_scalar nurbs_curve%derivative2_scalar none~derivative2->proc~derivative2_scalar proc~derivative2_vector nurbs_curve%derivative2_vector none~derivative2->proc~derivative2_vector proc~cmp_xg->interface~compute_xg proc~cmp_xg->proc~is_rational proc~cmp_degree nurbs_curve%cmp_degree proc~set1->proc~cmp_degree proc~set1a->proc~cmp_degree proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector proc~set3->proc~cmp_degree proc~get_multiplicity nurbs_curve%get_multiplicity proc~cmp_degree->proc~get_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->proc~is_rational proc~derivative2_vector->interface~compute_d2tgc 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. 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":"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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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~3 generate_Xc program~example_nurbs_surface->proc~generate_xc~3 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 proc~set4~3 nurbs_surface%set4 none~set~3->proc~set4~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":"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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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~2 nurbs_volume%get_degree program~example3_volume->none~get_degree~2 none~get_knot~2 nurbs_volume%get_knot program~example3_volume->none~get_knot~2 none~set~2 nurbs_volume%set program~example3_volume->none~set~2 proc~cmp_degreeface nurbs_volume%cmp_degreeFace program~example3_volume->proc~cmp_degreeface proc~cmp_elemface nurbs_volume%cmp_elemFace program~example3_volume->proc~cmp_elemface proc~cmp_elem~2 nurbs_volume%cmp_elem program~example3_volume->proc~cmp_elem~2 proc~create~2 nurbs_volume%create program~example3_volume->proc~create~2 proc~elevate_degree~2 nurbs_volume%elevate_degree program~example3_volume->proc~elevate_degree~2 proc~export_xc~2 nurbs_volume%export_Xc program~example3_volume->proc~export_xc~2 proc~export_xg~2 nurbs_volume%export_Xg program~example3_volume->proc~export_xg~2 proc~finalize~2 nurbs_volume%finalize program~example3_volume->proc~finalize~2 proc~generate_xc~4 generate_Xc program~example3_volume->proc~generate_xc~4 proc~insert_knots~2 nurbs_volume%insert_knots program~example3_volume->proc~insert_knots~2 proc~remove_knots~2 nurbs_volume%remove_knots program~example3_volume->proc~remove_knots~2 proc~rotate_xc~2 nurbs_volume%rotate_Xc program~example3_volume->proc~rotate_xc~2 proc~rotate_xg~2 nurbs_volume%rotate_Xg program~example3_volume->proc~rotate_xg~2 proc~set_elem~2 nurbs_volume%set_elem program~example3_volume->proc~set_elem~2 proc~show~2 nurbs_volume%show program~example3_volume->proc~show~2 proc~translate_xc~2 nurbs_volume%translate_Xc program~example3_volume->proc~translate_xc~2 proc~translate_xg~2 nurbs_volume%translate_Xg program~example3_volume->proc~translate_xg~2 proc~get_degree_all nurbs_volume%get_degree_all none~get_degree~2->proc~get_degree_all proc~get_degree_dir nurbs_volume%get_degree_dir none~get_degree~2->proc~get_degree_dir proc~get_knot_all~2 nurbs_volume%get_knot_all none~get_knot~2->proc~get_knot_all~2 proc~get_knoti~2 nurbs_volume%get_knoti none~get_knot~2->proc~get_knoti~2 proc~set1~2 nurbs_volume%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_volume%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_volume%set3 none~set~2->proc~set3~2 proc~set4~2 nurbs_volume%set4 none~set~2->proc~set4~2 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_volume%get_multiplicity proc~cmp_elem~2->proc~get_multiplicity~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_volume%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~cmp_elem_xc_vis~2 nurbs_volume%cmp_elem_Xc_vis proc~export_xc~2->proc~cmp_elem_xc_vis~2 proc~cmp_elem_xg_vis~2 nurbs_volume%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~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_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~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~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 proc~get_multiplicity~2->interface~compute_multiplicity cosd cosd proc~rotation->cosd sind sind proc~rotation->sind proc~cmp_degree~2 nurbs_volume%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~cmp_nc~2 nurbs_volume%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~cmp_degree~2->proc~get_multiplicity~2 proc~cmp_nc~2->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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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~2 nurbs_volume%set program~example_nurbs_volume->none~set~2 proc~create~2 nurbs_volume%create program~example_nurbs_volume->proc~create~2 proc~export_xc~2 nurbs_volume%export_Xc program~example_nurbs_volume->proc~export_xc~2 proc~export_xg~2 nurbs_volume%export_Xg program~example_nurbs_volume->proc~export_xg~2 proc~finalize~2 nurbs_volume%finalize program~example_nurbs_volume->proc~finalize~2 proc~generate_xc~5 generate_Xc program~example_nurbs_volume->proc~generate_xc~5 proc~show~2 nurbs_volume%show program~example_nurbs_volume->proc~show~2 proc~set1~2 nurbs_volume%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_volume%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_volume%set3 none~set~2->proc~set3~2 proc~set4~2 nurbs_volume%set4 none~set~2->proc~set4~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_volume%is_rational proc~create~2->proc~is_rational~2 proc~cmp_elem_xc_vis~2 nurbs_volume%cmp_elem_Xc_vis proc~export_xc~2->proc~cmp_elem_xc_vis~2 proc~cmp_elem_xg_vis~2 nurbs_volume%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_volume%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~cmp_nc~2 nurbs_volume%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_volume%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_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_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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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~2 nurbs_volume%create program~shape_hexahedron->proc~create~2 proc~export_xc~2 nurbs_volume%export_Xc program~shape_hexahedron->proc~export_xc~2 proc~export_xg~2 nurbs_volume%export_Xg program~shape_hexahedron->proc~export_xg~2 proc~finalize~2 nurbs_volume%finalize program~shape_hexahedron->proc~finalize~2 proc~set_hexahedron nurbs_volume%set_hexahedron program~shape_hexahedron->proc~set_hexahedron proc~show~2 nurbs_volume%show program~shape_hexahedron->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_volume%is_rational proc~create~2->proc~is_rational~2 proc~cmp_elem_xc_vis~2 nurbs_volume%cmp_elem_Xc_vis proc~export_xc~2->proc~cmp_elem_xc_vis~2 proc~cmp_elem_xg_vis~2 nurbs_volume%cmp_elem_Xg_vis proc~export_xg~2->proc~cmp_elem_xg_vis~2 none~set~2 nurbs_volume%set proc~set_hexahedron->none~set~2 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~2 nurbs_volume%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_volume%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_volume%set3 none~set~2->proc~set3~2 proc~set4~2 nurbs_volume%set4 none~set~2->proc~set4~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_volume%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~cmp_nc~2 nurbs_volume%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_volume%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_volume ) :: shape","tags":"","loc":"program/shape_hexahedron.html"},{"title":"example_ppm3 – ForCAD","text":"Uses fortime forcad forimage forcolormap 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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~set4~3 nurbs_surface%set4 none~set~3->proc~set4~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_ppm2 – ForCAD","text":"Uses fortime forcad forimage forcolormap 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 proc~set4~3 nurbs_surface%set4 none~set~3->proc~set4~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_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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 proc~set4~3 nurbs_surface%set4 none~set~3->proc~set4~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":"nearest_point_2d_bench – ForCAD","text":"Uses fortime forcad 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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~set4~3 nurbs_surface%set4 none~set~3->proc~set4~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":"compute_volume – ForCAD","text":"Uses forcad program~~compute_volume~~UsesGraph program~compute_volume compute_volume module~forcad forcad program~compute_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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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. Calls program~~compute_volume~~CallsGraph program~compute_volume compute_volume none~set~2 nurbs_volume%set program~compute_volume->none~set~2 proc~cmp_volume nurbs_volume%cmp_volume program~compute_volume->proc~cmp_volume proc~set1~2 nurbs_volume%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_volume%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_volume%set3 none~set~2->proc~set3~2 proc~set4~2 nurbs_volume%set4 none~set~2->proc~set4~2 proc~ansatz~2 nurbs_volume%ansatz proc~cmp_volume->proc~ansatz~2 proc~cmp_elem~2 nurbs_volume%cmp_elem proc~cmp_volume->proc~cmp_elem~2 proc~ansatz~2->none~set~2 proc~ansatz~2->proc~cmp_elem~2 interface~gauss_leg gauss_leg proc~ansatz~2->interface~gauss_leg interface~ndgrid ndgrid proc~ansatz~2->interface~ndgrid interface~unique unique proc~ansatz~2->interface~unique none~derivative~2 nurbs_volume%derivative proc~ansatz~2->none~derivative~2 proc~det det proc~ansatz~2->proc~det proc~inv inv proc~ansatz~2->proc~inv interface~elemconn_cn elemConn_Cn proc~cmp_elem~2->interface~elemconn_cn proc~cmp_elem~2->interface~unique proc~get_multiplicity~2 nurbs_volume%get_multiplicity proc~cmp_elem~2->proc~get_multiplicity~2 proc~cmp_degree~2 nurbs_volume%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~cmp_nc~2 nurbs_volume%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_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~gauss_legendre_1d gauss_legendre_1D interface~gauss_leg->proc~gauss_legendre_1d proc~gauss_legendre_2d gauss_legendre_2D interface~gauss_leg->proc~gauss_legendre_2d proc~gauss_legendre_3d gauss_legendre_3D interface~gauss_leg->proc~gauss_legendre_3d 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 proc~derivative_scalar~2 nurbs_volume%derivative_scalar none~derivative~2->proc~derivative_scalar~2 proc~derivative_vector~2 nurbs_volume%derivative_vector none~derivative~2->proc~derivative_vector~2 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~get_multiplicity~2->interface~compute_multiplicity proc~inv->proc~det proc~inv->proc~inv proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 interface~compute_dtgc~2 compute_dTgc proc~derivative_scalar~2->interface~compute_dtgc~2 proc~is_rational~2 nurbs_volume%is_rational proc~derivative_scalar~2->proc~is_rational~2 proc~derivative_vector~2->interface~ndgrid proc~derivative_vector~2->interface~compute_dtgc~2 proc~derivative_vector~2->proc~is_rational~2 gauss_legendre gauss_legendre proc~gauss_legendre_1d->gauss_legendre proc~gauss_legendre_2d->interface~ndgrid proc~gauss_legendre_2d->gauss_legendre proc~kron kron proc~gauss_legendre_2d->proc~kron proc~gauss_legendre_3d->interface~ndgrid proc~gauss_legendre_3d->gauss_legendre proc~gauss_legendre_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. Variables Type Attributes Name Initial real(kind=rk) :: Xc (8,3) type( nurbs_volume ) :: shape real(kind=rk) :: volume","tags":"","loc":"program/compute_volume.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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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~2 nurbs_volume%set program~nearest_point_3d->none~set~2 proc~create~2 nurbs_volume%create program~nearest_point_3d->proc~create~2 proc~finalize~2 nurbs_volume%finalize program~nearest_point_3d->proc~finalize~2 proc~nearest_point2~2 nurbs_volume%nearest_point2 program~nearest_point_3d->proc~nearest_point2~2 proc~nearest_point~2 nurbs_volume%nearest_point program~nearest_point_3d->proc~nearest_point~2 proc~set1~2 nurbs_volume%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_volume%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_volume%set3 none~set~2->proc~set3~2 proc~set4~2 nurbs_volume%set4 none~set~2->proc~set4~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_volume%is_rational proc~create~2->proc~is_rational~2 proc~nearest_point2~2->proc~create~2 proc~nearest_point2~2->proc~finalize~2 proc~nearest_point2~2->proc~nearest_point~2 none~derivative2~2 nurbs_volume%derivative2 proc~nearest_point2~2->none~derivative2~2 proc~cmp_xg~2 nurbs_volume%cmp_Xg proc~nearest_point2~2->proc~cmp_xg~2 proc~inv inv proc~nearest_point2~2->proc~inv interface~nearest_point_help_3d nearest_point_help_3d proc~nearest_point~2->interface~nearest_point_help_3d proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 ndgrid3 interface~ndgrid->proc~ndgrid3 proc~derivative2_scalar~2 nurbs_volume%derivative2_scalar none~derivative2~2->proc~derivative2_scalar~2 proc~derivative2_vector~2 nurbs_volume%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~inv->proc~inv proc~det det proc~inv->proc~det proc~cmp_degree~2 nurbs_volume%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~cmp_nc~2 nurbs_volume%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_volume%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 (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":"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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 nurbs_curve%create program~shape_half_circle->proc~create proc~export_xc nurbs_curve%export_Xc program~shape_half_circle->proc~export_xc proc~export_xg nurbs_curve%export_Xg program~shape_half_circle->proc~export_xg proc~finalize nurbs_curve%finalize program~shape_half_circle->proc~finalize proc~set_half_circle nurbs_curve%set_half_circle program~shape_half_circle->proc~set_half_circle proc~show nurbs_curve%show program~shape_half_circle->proc~show interface~compute_xg compute_Xg proc~create->interface~compute_xg proc~is_rational nurbs_curve%is_rational proc~create->proc~is_rational proc~cmp_elem_xc_vis nurbs_curve%cmp_elem_Xc_vis proc~export_xc->proc~cmp_elem_xc_vis proc~cmp_elem_xg_vis nurbs_curve%cmp_elem_Xg_vis proc~export_xg->proc~cmp_elem_xg_vis none~set nurbs_curve%set proc~set_half_circle->none~set proc~set1 nurbs_curve%set1 none~set->proc~set1 proc~set1a nurbs_curve%set1a none~set->proc~set1a proc~set2 nurbs_curve%set2 none~set->proc~set2 proc~set3 nurbs_curve%set3 none~set->proc~set3 proc~set4 nurbs_curve%set4 none~set->proc~set4 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_curve%cmp_degree proc~set1->proc~cmp_degree proc~set1a->proc~cmp_degree proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector proc~set3->proc~cmp_degree proc~get_multiplicity nurbs_curve%get_multiplicity proc~cmp_degree->proc~get_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem 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. Variables Type Attributes Name Initial type( nurbs_curve ) :: shape","tags":"","loc":"program/shape_half_circle.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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 proc~set4~3 nurbs_surface%set4 none~set~3->proc~set4~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_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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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~2 nurbs_volume%create program~shape_c_3d->proc~create~2 proc~export_xc~2 nurbs_volume%export_Xc program~shape_c_3d->proc~export_xc~2 proc~export_xg~2 nurbs_volume%export_Xg program~shape_c_3d->proc~export_xg~2 proc~finalize~2 nurbs_volume%finalize program~shape_c_3d->proc~finalize~2 proc~set_c~2 nurbs_volume%set_C program~shape_c_3d->proc~set_c~2 proc~show~2 nurbs_volume%show program~shape_c_3d->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_volume%is_rational proc~create~2->proc~is_rational~2 proc~cmp_elem_xc_vis~2 nurbs_volume%cmp_elem_Xc_vis proc~export_xc~2->proc~cmp_elem_xc_vis~2 proc~cmp_elem_xg_vis~2 nurbs_volume%cmp_elem_Xg_vis proc~export_xg~2->proc~cmp_elem_xg_vis~2 none~set~2 nurbs_volume%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_volume%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_volume%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_volume%set3 none~set~2->proc~set3~2 proc~set4~2 nurbs_volume%set4 none~set~2->proc~set4~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_volume%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~cmp_nc~2 nurbs_volume%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_volume%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_volume ) :: shape","tags":"","loc":"program/shape_c_3d.html"},{"title":"compute_area – ForCAD","text":"Uses forcad program~~compute_area~~UsesGraph program~compute_area compute_area module~forcad forcad program~compute_area->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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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. Calls program~~compute_area~~CallsGraph program~compute_area compute_area none~set~3 nurbs_surface%set program~compute_area->none~set~3 proc~cmp_area nurbs_surface%cmp_area program~compute_area->proc~cmp_area 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~set4~3 nurbs_surface%set4 none~set~3->proc~set4~3 proc~ansatz~3 nurbs_surface%ansatz proc~cmp_area->proc~ansatz~3 proc~cmp_elem~3 nurbs_surface%cmp_elem proc~cmp_area->proc~cmp_elem~3 proc~ansatz~3->none~set~3 proc~ansatz~3->proc~cmp_elem~3 interface~gauss_leg gauss_leg proc~ansatz~3->interface~gauss_leg interface~ndgrid ndgrid proc~ansatz~3->interface~ndgrid interface~unique unique proc~ansatz~3->interface~unique none~derivative~3 nurbs_surface%derivative proc~ansatz~3->none~derivative~3 proc~det det proc~ansatz~3->proc~det proc~inv inv proc~ansatz~3->proc~inv interface~elemconn_cn elemConn_Cn proc~cmp_elem~3->interface~elemconn_cn proc~cmp_elem~3->interface~unique proc~get_multiplicity~3 nurbs_surface%get_multiplicity proc~cmp_elem~3->proc~get_multiplicity~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~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~gauss_legendre_1d gauss_legendre_1D interface~gauss_leg->proc~gauss_legendre_1d proc~gauss_legendre_2d gauss_legendre_2D interface~gauss_leg->proc~gauss_legendre_2d proc~gauss_legendre_3d gauss_legendre_3D interface~gauss_leg->proc~gauss_legendre_3d 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 proc~derivative_scalar~3 nurbs_surface%derivative_scalar none~derivative~3->proc~derivative_scalar~3 proc~derivative_vector~3 nurbs_surface%derivative_vector none~derivative~3->proc~derivative_vector~3 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~get_multiplicity~3->interface~compute_multiplicity proc~inv->proc~det proc~inv->proc~inv proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 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 proc~derivative_vector~3->interface~ndgrid proc~derivative_vector~3->interface~compute_dtgc~3 proc~derivative_vector~3->proc~is_rational~3 gauss_legendre gauss_legendre proc~gauss_legendre_1d->gauss_legendre proc~gauss_legendre_2d->interface~ndgrid proc~gauss_legendre_2d->gauss_legendre proc~kron kron proc~gauss_legendre_2d->proc~kron proc~gauss_legendre_3d->interface~ndgrid proc~gauss_legendre_3d->gauss_legendre proc~gauss_legendre_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. Variables Type Attributes Name Initial real(kind=rk) :: Xc (4,3) real(kind=rk) :: area type( nurbs_surface ) :: shape","tags":"","loc":"program/compute_area.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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 proc~set4~3 nurbs_surface%set4 none~set~3->proc~set4~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":"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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 nurbs_curve%create program~shape_circle->proc~create proc~export_xc nurbs_curve%export_Xc program~shape_circle->proc~export_xc proc~export_xg nurbs_curve%export_Xg program~shape_circle->proc~export_xg proc~finalize nurbs_curve%finalize program~shape_circle->proc~finalize proc~set_circle nurbs_curve%set_circle program~shape_circle->proc~set_circle proc~show nurbs_curve%show program~shape_circle->proc~show interface~compute_xg compute_Xg proc~create->interface~compute_xg proc~is_rational nurbs_curve%is_rational proc~create->proc~is_rational proc~cmp_elem_xc_vis nurbs_curve%cmp_elem_Xc_vis proc~export_xc->proc~cmp_elem_xc_vis proc~cmp_elem_xg_vis nurbs_curve%cmp_elem_Xg_vis proc~export_xg->proc~cmp_elem_xg_vis none~set nurbs_curve%set proc~set_circle->none~set proc~set1 nurbs_curve%set1 none~set->proc~set1 proc~set1a nurbs_curve%set1a none~set->proc~set1a proc~set2 nurbs_curve%set2 none~set->proc~set2 proc~set3 nurbs_curve%set3 none~set->proc~set3 proc~set4 nurbs_curve%set4 none~set->proc~set4 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_curve%cmp_degree proc~set1->proc~cmp_degree proc~set1a->proc~cmp_degree proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector proc~set3->proc~cmp_degree proc~get_multiplicity nurbs_curve%get_multiplicity proc~cmp_degree->proc~get_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem 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. Variables Type Attributes Name Initial type( nurbs_curve ) :: shape","tags":"","loc":"program/shape_circle.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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 proc~set4~3 nurbs_surface%set4 none~set~3->proc~set4~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":"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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 proc~set4~3 nurbs_surface%set4 none~set~3->proc~set4~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 proc~nearest_point2~3->proc~nearest_point~3 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~inv inv proc~nearest_point2~3->proc~inv interface~nearest_point_help_2d nearest_point_help_2d 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~inv->proc~inv proc~det det proc~inv->proc~det 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":"compute_length – ForCAD","text":"Uses forcad program~~compute_length~~UsesGraph program~compute_length compute_length module~forcad forcad program~compute_length->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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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. Calls program~~compute_length~~CallsGraph program~compute_length compute_length none~set nurbs_curve%set program~compute_length->none~set proc~cmp_length nurbs_curve%cmp_length program~compute_length->proc~cmp_length proc~set1 nurbs_curve%set1 none~set->proc~set1 proc~set1a nurbs_curve%set1a none~set->proc~set1a proc~set2 nurbs_curve%set2 none~set->proc~set2 proc~set3 nurbs_curve%set3 none~set->proc~set3 proc~set4 nurbs_curve%set4 none~set->proc~set4 proc~ansatz nurbs_curve%ansatz proc~cmp_length->proc~ansatz proc~cmp_elem nurbs_curve%cmp_elem proc~cmp_length->proc~cmp_elem proc~ansatz->none~set proc~ansatz->proc~cmp_elem interface~dyad dyad proc~ansatz->interface~dyad interface~gauss_leg gauss_leg proc~ansatz->interface~gauss_leg interface~unique unique proc~ansatz->interface~unique none~derivative nurbs_curve%derivative proc~ansatz->none~derivative interface~elemconn_cn elemConn_Cn proc~cmp_elem->interface~elemconn_cn proc~cmp_elem->interface~unique proc~get_multiplicity nurbs_curve%get_multiplicity proc~cmp_elem->proc~get_multiplicity proc~cmp_degree nurbs_curve%cmp_degree proc~set1->proc~cmp_degree proc~set1a->proc~cmp_degree proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector proc~set3->proc~cmp_degree proc~dyad_t1_t1 dyad_t1_t1 interface~dyad->proc~dyad_t1_t1 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~gauss_legendre_1d gauss_legendre_1D interface~gauss_leg->proc~gauss_legendre_1d proc~gauss_legendre_2d gauss_legendre_2D interface~gauss_leg->proc~gauss_legendre_2d proc~gauss_legendre_3d gauss_legendre_3D interface~gauss_leg->proc~gauss_legendre_3d proc~unique_integer unique_integer interface~unique->proc~unique_integer proc~unique_real unique_real interface~unique->proc~unique_real proc~derivative_scalar nurbs_curve%derivative_scalar none~derivative->proc~derivative_scalar proc~derivative_vector nurbs_curve%derivative_vector none~derivative->proc~derivative_vector proc~cmp_degree->proc~get_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem 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 interface~compute_dtgc compute_dTgc proc~derivative_scalar->interface~compute_dtgc proc~is_rational nurbs_curve%is_rational proc~derivative_scalar->proc~is_rational proc~derivative_vector->interface~compute_dtgc proc~derivative_vector->proc~is_rational gauss_legendre gauss_legendre proc~gauss_legendre_1d->gauss_legendre proc~gauss_legendre_2d->gauss_legendre interface~ndgrid ndgrid proc~gauss_legendre_2d->interface~ndgrid proc~kron kron proc~gauss_legendre_2d->proc~kron proc~gauss_legendre_3d->gauss_legendre proc~gauss_legendre_3d->interface~ndgrid proc~gauss_legendre_3d->proc~kron 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. Variables Type Attributes Name Initial real(kind=rk) :: Xc (2,3) real(kind=rk) :: length type( nurbs_curve ) :: shape","tags":"","loc":"program/compute_length.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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 nurbs_curve%create program~shape_c_1d->proc~create proc~export_xc nurbs_curve%export_Xc program~shape_c_1d->proc~export_xc proc~export_xg nurbs_curve%export_Xg program~shape_c_1d->proc~export_xg proc~finalize nurbs_curve%finalize program~shape_c_1d->proc~finalize proc~set_c nurbs_curve%set_C program~shape_c_1d->proc~set_c proc~show nurbs_curve%show program~shape_c_1d->proc~show interface~compute_xg compute_Xg proc~create->interface~compute_xg proc~is_rational nurbs_curve%is_rational proc~create->proc~is_rational proc~cmp_elem_xc_vis nurbs_curve%cmp_elem_Xc_vis proc~export_xc->proc~cmp_elem_xc_vis proc~cmp_elem_xg_vis nurbs_curve%cmp_elem_Xg_vis proc~export_xg->proc~cmp_elem_xg_vis none~set nurbs_curve%set proc~set_c->none~set proc~set1 nurbs_curve%set1 none~set->proc~set1 proc~set1a nurbs_curve%set1a none~set->proc~set1a proc~set2 nurbs_curve%set2 none~set->proc~set2 proc~set3 nurbs_curve%set3 none~set->proc~set3 proc~set4 nurbs_curve%set4 none~set->proc~set4 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_curve%cmp_degree proc~set1->proc~cmp_degree proc~set1a->proc~cmp_degree proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector proc~set3->proc~cmp_degree proc~get_multiplicity nurbs_curve%get_multiplicity proc~cmp_degree->proc~get_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem 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. Variables Type Attributes Name Initial type( nurbs_curve ) :: shape","tags":"","loc":"program/shape_c_1d.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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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~2 nurbs_volume%create program~shape_ring_3d->proc~create~2 proc~export_xc~2 nurbs_volume%export_Xc program~shape_ring_3d->proc~export_xc~2 proc~export_xg~2 nurbs_volume%export_Xg program~shape_ring_3d->proc~export_xg~2 proc~finalize~2 nurbs_volume%finalize program~shape_ring_3d->proc~finalize~2 proc~set_ring nurbs_volume%set_ring program~shape_ring_3d->proc~set_ring proc~show~2 nurbs_volume%show program~shape_ring_3d->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_volume%is_rational proc~create~2->proc~is_rational~2 proc~cmp_elem_xc_vis~2 nurbs_volume%cmp_elem_Xc_vis proc~export_xc~2->proc~cmp_elem_xc_vis~2 proc~cmp_elem_xg_vis~2 nurbs_volume%cmp_elem_Xg_vis proc~export_xg~2->proc~cmp_elem_xg_vis~2 none~set~2 nurbs_volume%set proc~set_ring->none~set~2 proc~ndgrid2 ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 ndgrid3 interface~ndgrid->proc~ndgrid3 proc~set1~2 nurbs_volume%set1 none~set~2->proc~set1~2 proc~set2~2 nurbs_volume%set2 none~set~2->proc~set2~2 proc~set3~2 nurbs_volume%set3 none~set~2->proc~set3~2 proc~set4~2 nurbs_volume%set4 none~set~2->proc~set4~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_volume%cmp_degree proc~set1~2->proc~cmp_degree~2 proc~cmp_nc~2 nurbs_volume%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_volume%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_volume ) :: shape","tags":"","loc":"program/shape_ring_3d.html"},{"title":"example_ppm1 – ForCAD","text":"Uses fortime forcad forimage forcolormap 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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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~set4~3 nurbs_surface%set4 none~set~3->proc~set4~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":"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 stdlib_quadrature stdlib_quadrature module~forcad_utils->stdlib_quadrature 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 nurbs_curve%get_knot program~example1_curve->none~get_knot none~set nurbs_curve%set program~example1_curve->none~set proc~create nurbs_curve%create program~example1_curve->proc~create proc~elevate_degree nurbs_curve%elevate_degree program~example1_curve->proc~elevate_degree proc~export_xc nurbs_curve%export_Xc program~example1_curve->proc~export_xc proc~export_xg nurbs_curve%export_Xg program~example1_curve->proc~export_xg proc~finalize nurbs_curve%finalize program~example1_curve->proc~finalize proc~get_degree nurbs_curve%get_degree program~example1_curve->proc~get_degree proc~insert_knots nurbs_curve%insert_knots program~example1_curve->proc~insert_knots proc~remove_knots nurbs_curve%remove_knots program~example1_curve->proc~remove_knots proc~rotate_xc nurbs_curve%rotate_Xc program~example1_curve->proc~rotate_xc proc~rotate_xg nurbs_curve%rotate_Xg program~example1_curve->proc~rotate_xg proc~show nurbs_curve%show program~example1_curve->proc~show proc~translate_xc nurbs_curve%translate_Xc program~example1_curve->proc~translate_xc proc~translate_xg nurbs_curve%translate_Xg program~example1_curve->proc~translate_xg proc~get_knot_all nurbs_curve%get_knot_all none~get_knot->proc~get_knot_all proc~get_knoti nurbs_curve%get_knoti none~get_knot->proc~get_knoti proc~set1 nurbs_curve%set1 none~set->proc~set1 proc~set1a nurbs_curve%set1a none~set->proc~set1a proc~set2 nurbs_curve%set2 none~set->proc~set2 proc~set3 nurbs_curve%set3 none~set->proc~set3 proc~set4 nurbs_curve%set4 none~set->proc~set4 interface~compute_xg compute_Xg proc~create->interface~compute_xg proc~is_rational nurbs_curve%is_rational proc~create->proc~is_rational 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~elevate_degree->proc~is_rational proc~cmp_elem_xc_vis nurbs_curve%cmp_elem_Xc_vis proc~export_xc->proc~cmp_elem_xc_vis proc~cmp_elem_xg_vis nurbs_curve%cmp_elem_Xg_vis proc~export_xg->proc~cmp_elem_xg_vis 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~insert_knots->proc~is_rational proc~remove_knots->none~set proc~remove_knots->interface~compute_multiplicity proc~remove_knots->proc~findspan proc~remove_knots->proc~is_rational 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 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 cosd cosd proc~rotation->cosd sind sind proc~rotation->sind proc~cmp_degree nurbs_curve%cmp_degree proc~set1->proc~cmp_degree proc~set1a->proc~cmp_degree 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~get_multiplicity nurbs_curve%get_multiplicity proc~cmp_degree->proc~get_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. 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":"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":"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~cmp_area.f90 cmp_area.f90 sourcefile~cmp_area.f90->sourcefile~forcad.f90 sourcefile~cmp_length.f90 cmp_length.f90 sourcefile~cmp_length.f90->sourcefile~forcad.f90 sourcefile~cmp_volume.f90 cmp_volume.f90 sourcefile~cmp_volume.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~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":"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_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_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":"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":"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":"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":"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~cmp_area.f90 cmp_area.f90 sourcefile~cmp_area.f90->sourcefile~forcad.f90 sourcefile~cmp_length.f90 cmp_length.f90 sourcefile~cmp_length.f90->sourcefile~forcad.f90 sourcefile~cmp_volume.f90 cmp_volume.f90 sourcefile~cmp_volume.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~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 , dyad , gauss_leg 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 :: set1a 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 procedure :: set4 !!> Set NURBS curve using degree, number of control points, control points and weights generic :: set => set1 , set1a , set2 , set3 , set4 !!> 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) procedure :: ansatz !!> Compute the shape functions, derivative of shape functions and dL procedure :: cmp_length !!> Compute the length of the NURBS curve ! 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 , f_elem ) 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 (:) integer , intent ( in ), optional :: f_elem (:) end subroutine pure subroutine compute_dTgc_bspline_1d_scalar ( f_Xt , f_knot , f_degree , f_nc , f_dTgc , f_Tgc , f_elem ) 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 (:) integer , intent ( in ), optional :: f_elem (:) 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 knot vector, control points and weights for the NURBS curve object. pure subroutine set1a ( 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 () allocate ( this % Xc ( size ( Xc ), 3 ), source = 0.0_rk ) this % Xc (:, 1 ) = 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 set4 ( this , degree , nc , Xc , Wc ) class ( nurbs_curve ), intent ( inout ) :: this integer , intent ( in ) :: degree integer , intent ( in ) :: nc real ( rk ), intent ( in ), contiguous :: Xc (:,:) real ( rk ), intent ( in ), contiguous , optional :: Wc (:) integer :: m , i if ( allocated ( this % Xc )) deallocate ( this % Xc ) this % Xc = Xc this % nc = nc this % degree = degree ! Size of knot vectors m = nc + degree + 1 if ( allocated ( this % knot )) deallocate ( this % knot ) allocate ( this % knot ( m )) this % knot ( 1 : degree + 1 ) = 0.0_rk this % knot ( degree + 2 : m - degree - 1 ) = [( real ( i , rk ) / ( m - 2 * degree - 1 ), i = 1 , m - 2 * degree - 2 )] this % knot ( m - degree : m ) = 1.0_rk if ( present ( Wc )) then if ( size ( Wc ) /= 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 , elem ) class ( nurbs_curve ), intent ( inout ) :: this real ( rk ), intent ( in ) :: Xt integer , intent ( in ), optional :: elem (:) 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 , elem ) else ! B-Spline call compute_dTgc ( Xt , this % knot , this % degree , this % nc , dTgc , Tgc , elem ) 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 (:) 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 copy_this % create ( 10 ) call copy_this % nearest_point ( point_Xg = point_Xg , nearest_Xt = xk ) 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 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine ansatz ( this , ie , ig , Tgc , dTgc_dXg , dL ) class ( nurbs_curve ), intent ( inout ) :: this integer , intent ( in ) :: ie , ig real ( rk ), intent ( out ) :: dL real ( rk ), allocatable , intent ( out ) :: Tgc (:), dTgc_dXg (:,:) real ( rk ), allocatable :: Xth (:), Xth_e (:), Xc_eT (:,:), Xksi (:), Wksi (:) integer , allocatable :: elem_th (:,:), elem_c (:,:), elem_ce (:) type ( nurbs_curve ) :: th , th_e real ( rk ), allocatable :: dTtth_dXksi (:), Ttth (:), dTgc_dXt (:), dXg_dXt (:) real ( rk ) :: Xt , dXt_dXksi real ( rk ), allocatable :: dXg_dXksi (:) !! Jacobian matrix real ( rk ) :: det_dXg_dXksi !! Determinant of the Jacobian matrix call gauss_leg ([ 0.0_rk , 1.0_rk ], this % degree , Xksi , Wksi ) Xth = unique ( this % knot ) call th % set ([ 0.0_rk , Xth , 1.0_rk ], Xth ) elem_th = th % cmp_elem () elem_c = this % cmp_elem () Xth_e = Xth ( elem_th ( ie ,:)) call th_e % set ([ 0.0_rk , 0.0_rk , 1.0_rk , 1.0_rk ], Xth_e ) elem_ce = elem_c ( ie ,:) Xc_eT = transpose ( this % Xc ( elem_ce ,:)) call th_e % derivative ( Xksi ( ig ), dTtth_dXksi , Ttth ) Xt = dot_product ( Xth_e , Ttth ) dXt_dXksi = dot_product ( Xth_e , dTtth_dXksi ) call this % derivative ( Xt , dTgc_dXt , Tgc , elem_ce ) dXg_dXt = matmul ( Xc_eT , dTgc_dXt ) dTgc_dXg = dyad ( dTgc_dXt , dXg_dXt ) / norm2 ( dXg_dXt ) dXg_dXksi = dXg_dXt * dXt_dXksi det_dXg_dXksi = norm2 ( dXg_dXksi ) dL = det_dXg_dXksi * Wksi ( ig ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine cmp_length ( this , length ) class ( nurbs_curve ), intent ( inout ) :: this real ( rk ), intent ( out ) :: length real ( rk ), allocatable :: Tgc (:), dTgc_dXg (:,:) integer :: ie , ig real ( rk ) :: dL , dL_ig length = 0.0_rk do ie = 1 , size ( this % cmp_elem (), 1 ) dL = 0.0_rk do ig = 1 , size ( this % cmp_elem (), 2 ) call this % ansatz ( ie , ig , Tgc , dTgc_dXg , dL_ig ) dL = dL + dL_ig end do length = length + dL 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 , elem ) 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 (:) integer , intent ( in ), optional :: elem (:) real ( rk ), allocatable , intent ( out ) :: dTgc (:) real ( rk ), allocatable , intent ( out ) :: Tgc (:) real ( rk ), allocatable :: dBi (:), Bi (:) call basis_bspline_der ( Xt , knot , nc , degree , dBi , Bi ) if (. not . present ( elem )) then allocate ( dTgc ( nc ), Tgc ( nc )) Tgc = Bi * ( Wc / ( dot_product ( Bi , Wc ))) dTgc = ( dBi * Wc - Tgc * dot_product ( dBi , Wc ) ) / dot_product ( Bi , Wc ) else allocate ( dTgc ( size ( elem )), Tgc ( size ( elem ))) Tgc = Bi ( elem ) * ( Wc ( elem ) / ( dot_product ( Bi ( elem ), Wc ( elem )))) dTgc = ( dBi ( elem ) * Wc ( elem ) - Tgc * dot_product ( dBi ( elem ), Wc ( elem )) ) / dot_product ( Bi ( elem ), Wc ( elem )) end if 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 , elem ) 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 integer , intent ( in ), optional :: elem (:) real ( rk ), allocatable , intent ( out ) :: dTgc (:) real ( rk ), allocatable , intent ( out ) :: Tgc (:) real ( rk ), allocatable :: dB (:), B (:) if (. not . present ( elem )) then allocate ( dTgc ( nc ), Tgc ( nc )) call basis_bspline_der ( Xt , knot , nc , degree , dTgc , Tgc ) else allocate ( dB ( size ( elem )), B ( size ( elem ))) call basis_bspline_der ( Xt , knot , nc , degree , dB , B ) Tgc = B ( elem ) dTgc = dB ( elem ) end if 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":"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":"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_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_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~cmp_area.f90 cmp_area.f90 sourcefile~cmp_area.f90->sourcefile~forcad.f90 sourcefile~cmp_length.f90 cmp_length.f90 sourcefile~cmp_length.f90->sourcefile~forcad.f90 sourcefile~cmp_volume.f90 cmp_volume.f90 sourcefile~cmp_volume.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~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 , det , inv , gauss_leg 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 procedure :: set4 !!> Set NURBS volume using degree, number of control points, control points and weights generic :: set => set1 , set2 , set3 , set4 !!> 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 , private :: get_nc_dir !!> Get number of control points in a specific direction procedure , private :: get_nc_all !!> Get number of control points in all directions generic :: get_nc => get_nc_all , get_nc_dir !!> Get number of control 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) procedure :: ansatz !!> Compute the shape functions, derivative of shape functions and dV procedure :: cmp_volume !!> Compute the volume of the NURBS volume ! 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 , f_elem ) 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 (:) integer , intent ( in ), optional :: f_elem (:) 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 , f_elem ) 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 (:) integer , intent ( in ), optional :: f_elem (:) 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 set4 ( this , degree , nc , Xc , Wc ) class ( nurbs_volume ), intent ( inout ) :: this integer , intent ( in ), contiguous :: degree (:) integer , intent ( in ), contiguous :: nc (:) real ( rk ), intent ( in ), contiguous :: Xc (:,:) real ( rk ), intent ( in ), contiguous , optional :: Wc (:) integer :: m ( 3 ), i if ( allocated ( this % Xc )) deallocate ( this % Xc ) this % Xc = Xc this % nc = nc this % degree = degree ! Size of knot vectors m = nc + degree + 1 if ( allocated ( this % knot1 )) deallocate ( this % knot1 ) allocate ( this % knot1 ( m ( 1 ))) this % knot1 ( 1 : degree ( 1 ) + 1 ) = 0.0_rk this % knot1 ( degree ( 1 ) + 2 : m ( 1 ) - degree ( 1 ) - 1 ) = [( real ( i , rk ) / ( m ( 1 ) - 2 * degree ( 1 ) - 1 ), i = 1 , m ( 1 ) - 2 * degree ( 1 ) - 2 )] this % knot1 ( m ( 1 ) - degree ( 1 ): m ( 1 )) = 1.0_rk if ( allocated ( this % knot2 )) deallocate ( this % knot2 ) allocate ( this % knot2 ( m ( 2 ))) this % knot2 ( 1 : degree ( 2 ) + 1 ) = 0.0_rk this % knot2 ( degree ( 2 ) + 2 : m ( 2 ) - degree ( 2 ) - 1 ) = [( real ( i , rk ) / ( m ( 2 ) - 2 * degree ( 2 ) - 1 ), i = 1 , m ( 2 ) - 2 * degree ( 2 ) - 2 )] this % knot2 ( m ( 2 ) - degree ( 2 ): m ( 2 )) = 1.0_rk if ( allocated ( this % knot3 )) deallocate ( this % knot3 ) allocate ( this % knot3 ( m ( 3 ))) this % knot3 ( 1 : degree ( 3 ) + 1 ) = 0.0_rk this % knot3 ( degree ( 3 ) + 2 : m ( 3 ) - degree ( 3 ) - 1 ) = [( real ( i , rk ) / ( m ( 3 ) - 2 * degree ( 3 ) - 1 ), i = 1 , m ( 3 ) - 2 * degree ( 3 ) - 2 )] this % knot3 ( m ( 3 ) - degree ( 3 ): m ( 3 )) = 1.0_rk if ( present ( Wc )) then if ( size ( Wc ) /= nc ( 1 ) * nc ( 2 ) * 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_all ( this ) result ( nc ) class ( nurbs_volume ), intent ( in ) :: this integer :: nc ( 3 ) nc = this % nc end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_nc_dir ( 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 , elem ) class ( nurbs_volume ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: Xt (:) integer , intent ( in ), optional :: elem (:) 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 , elem ) else call compute_dTgc ( Xt , this % knot1 , this % knot2 , this % knot3 , this % degree , this % nc , dTgc , Tgc , elem ) 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 ) :: obj , grad ( 3 ), hess ( 3 , 3 ), dk ( 3 ), alphak , tau , beta , lower_bounds ( 3 ), upper_bounds ( 3 ) real ( rk ), allocatable :: Xg (:), xk (:), Tgc (:), dTgc (:,:), d2Tgc (:,:) 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 copy_this % create ( 50 , 50 , 50 ) call copy_this % nearest_point ( point_Xg = point_Xg , nearest_Xt = xk ) 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 dk = - matmul ( inv ( hess ), 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 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine ansatz ( this , ie , ig , Tgc , dTgc_dXg , dV ) class ( nurbs_volume ), intent ( inout ) :: this integer , intent ( in ) :: ie , ig real ( rk ), intent ( out ) :: dV real ( rk ), allocatable , intent ( out ) :: Tgc (:), dTgc_dXg (:,:) real ( rk ), allocatable :: Xth (:,:), Xth_e (:,:), Xth_eT (:,:), Xc_eT (:,:), Xth1 (:), Xth2 (:), Xth3 (:), Xksi (:,:), Wksi (:) integer , allocatable :: elem_th (:,:), elem_c (:,:), elem_ce (:) type ( nurbs_volume ) :: th , th_e real ( rk ), allocatable :: dTtth_dXksi (:,:), Ttth (:), dTgc_dXt (:,:), Xt (:), dXt_dXksi (:,:), dXg_dXt (:,:) real ( rk ), allocatable :: dXg_dXksi (:,:) !! Jacobian matrix real ( rk ) :: det_dXg_dXksi !! Determinant of the Jacobian matrix call gauss_leg ([ 0.0_rk , 1.0_rk ], [ 0.0_rk , 1.0_rk ], [ 0.0_rk , 1.0_rk ], this % degree , Xksi , Wksi ) Xth1 = unique ( this % knot1 ) Xth2 = unique ( this % knot2 ) Xth3 = unique ( this % knot3 ) call ndgrid ( Xth1 , Xth2 , Xth3 , Xth ) call th % set ([ 0.0_rk , Xth1 , 1.0_rk ], [ 0.0_rk , Xth2 , 1.0_rk ], [ 0.0_rk , Xth3 , 1.0_rk ], Xth ) elem_th = th % cmp_elem () elem_c = this % cmp_elem () Xth_e = Xth ( elem_th ( ie ,:),:) call th_e % set ([ 0.0_rk , 0.0_rk , 1.0_rk , 1.0_rk ], [ 0.0_rk , 0.0_rk , 1.0_rk , 1.0_rk ], [ 0.0_rk , 0.0_rk , 1.0_rk , 1.0_rk ], Xth_e ) Xth_eT = transpose ( Xth_e ) elem_ce = elem_c ( ie ,:) Xc_eT = transpose ( this % Xc ( elem_ce ,:)) call th_e % derivative ( Xksi ( ig ,:), dTtth_dXksi , Ttth ) Xt = matmul ( Xth_eT , Ttth ) dXt_dXksi = matmul ( Xth_eT , dTtth_dXksi ) call this % derivative ( Xt , dTgc_dXt , Tgc , elem_ce ) dXg_dXt = matmul ( Xc_eT , dTgc_dXt ) dTgc_dXg = matmul ( dTgc_dXt , inv ( dXg_dXt )) dXg_dXksi = matmul ( dXg_dXt , dXt_dXksi ) det_dXg_dXksi = det ( dXg_dXksi ) dV = det_dXg_dXksi * Wksi ( ig ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine cmp_volume ( this , volume ) class ( nurbs_volume ), intent ( inout ) :: this real ( rk ), intent ( out ) :: volume real ( rk ), allocatable :: Tgc (:), dTgc_dXg (:,:) integer :: ie , ig real ( rk ) :: dV , dV_ig volume = 0.0_rk do ie = 1 , size ( this % cmp_elem (), 1 ) dV = 0.0_rk do ig = 1 , size ( this % cmp_elem (), 2 ) call this % ansatz ( ie , ig , Tgc , dTgc_dXg , dV_ig ) dV = dV + dV_ig end do volume = volume + dV end do end subroutine !=============================================================================== 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 , elem ) 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 (:) integer , intent ( in ), optional :: elem (:) 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 (:) 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 ) if (. not . present ( elem )) then 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 ))) 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 ) else allocate ( dTgc ( size ( elem ), 3 )) allocate ( Tgc ( size ( elem ))) allocate ( dBi ( size ( elem ), 3 ), Bi ( size ( elem ))) associate ( Biall => kron ( B3 , kron ( B2 , B1 ))) Bi = Biall ( elem ) Tgc = Bi * ( Wc ( elem ) / ( dot_product ( Bi , Wc ( elem )))) end associate associate ( dB1all => kron ( kron ( B3 , B2 ), dB1 ), dB2all => kron ( kron ( B3 , dB2 ), B1 ), dB3all => kron ( kron ( dB3 , B2 ), B1 )) dBi (:, 1 ) = dB1all ( elem ) dBi (:, 2 ) = dB2all ( elem ) dBi (:, 3 ) = dB3all ( elem ) end associate dTgc (:, 1 ) = ( dBi (:, 1 ) * Wc ( elem ) - Tgc * dot_product ( dBi (:, 1 ), Wc ( elem )) ) / dot_product ( Bi , Wc ( elem )) dTgc (:, 2 ) = ( dBi (:, 2 ) * Wc ( elem ) - Tgc * dot_product ( dBi (:, 2 ), Wc ( elem )) ) / dot_product ( Bi , Wc ( elem )) dTgc (:, 3 ) = ( dBi (:, 3 ) * Wc ( elem ) - Tgc * dot_product ( dBi (:, 3 ), Wc ( elem )) ) / dot_product ( Bi , Wc ( elem )) end if 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 , elem ) 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 ), optional :: elem (:) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: Tgc (:) real ( rk ), allocatable :: dB1 (:), dB2 (:), dB3 (:) real ( rk ), allocatable :: B1 (:), B2 (:), B3 (:) 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 ) if (. not . present ( elem )) then allocate ( dTgc ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ), 3 )) allocate ( Tgc ( nc ( 1 ) * nc ( 2 ) * nc ( 3 ))) 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 ) else allocate ( dTgc ( size ( elem ), 3 )) allocate ( Tgc ( size ( elem ))) associate ( B => kron ( B3 , kron ( B2 , B1 ))) Tgc = B ( elem ) end associate associate ( dB1 => kron ( kron ( B3 , B2 ), dB1 ), dB2 => kron ( kron ( B3 , dB2 ), B1 ), dB3 => kron ( kron ( dB3 , B2 ), B1 )) dTgc (:, 1 ) = dB1 ( elem ) dTgc (:, 2 ) = dB2 ( elem ) dTgc (:, 3 ) = dB3 ( elem ) end associate end if 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":"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":"cmp_volume.f90 – ForCAD","text":"This file depends on sourcefile~~cmp_volume.f90~~EfferentGraph sourcefile~cmp_volume.f90 cmp_volume.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~cmp_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 program compute_volume use forcad implicit none type ( nurbs_volume ) :: shape real ( rk ) :: volume real ( rk ) :: Xc ( 8 , 3 ) 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 ] 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 , 2.0_rk , 2.0_rk ] Xc ( 8 ,:) = [ 2.0_rk , 2.0_rk , 2.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 ) call shape % cmp_volume ( volume ) print * , volume end program","tags":"","loc":"sourcefile/cmp_volume.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":"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":"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~cmp_area.f90 cmp_area.f90 sourcefile~cmp_area.f90->sourcefile~forcad.f90 sourcefile~cmp_length.f90 cmp_length.f90 sourcefile~cmp_length.f90->sourcefile~forcad.f90 sourcefile~cmp_volume.f90 cmp_volume.f90 sourcefile~cmp_volume.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 use stdlib_quadrature , only : gauss_legendre 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 , det , inv , dyad , gauss_leg 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 !=============================================================================== !=============================================================================== interface dyad module procedure dyad_t1_t1 end interface !=============================================================================== !=============================================================================== interface gauss_leg module procedure gauss_legendre_1D module procedure gauss_legendre_2D module procedure gauss_legendre_3D 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 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function det ( A ) result ( detA ) real ( rk ), intent ( in ) :: A (:,:) real ( rk ) :: detA if ( size ( A , 1 ) == size ( A , 2 )) then select case ( size ( A , 1 )) case ( 2 ) detA = A ( 1 , 1 ) * A ( 2 , 2 ) - A ( 1 , 2 ) * A ( 2 , 1 ) case ( 3 ) detA = & + A ( 1 , 1 ) * ( A ( 2 , 2 ) * A ( 3 , 3 ) - A ( 2 , 3 ) * A ( 3 , 2 ) )& - A ( 1 , 2 ) * ( A ( 2 , 1 ) * A ( 3 , 3 ) - A ( 2 , 3 ) * A ( 3 , 1 ) )& + A ( 1 , 3 ) * ( A ( 2 , 1 ) * A ( 3 , 2 ) - A ( 2 , 2 ) * A ( 3 , 1 ) ) end select elseif ( size ( A , 1 ) == 3 . and . size ( A , 2 ) == 2 ) then detA = & + A ( 1 , 1 ) * ( A ( 2 , 2 ) * 1.0_rk - A ( 3 , 2 ) * 1.0_rk )& - A ( 1 , 2 ) * ( A ( 2 , 1 ) * 1.0_rk - A ( 3 , 1 ) * 1.0_rk )& + 1.0_rk * ( A ( 2 , 1 ) * A ( 3 , 2 ) - A ( 3 , 1 ) * A ( 2 , 2 ) ) end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause recursive pure function inv ( A ) result ( A_inv ) real ( rk ), intent ( in ) :: A (:,:) real ( rk ), allocatable :: A_inv (:,:) if ( size ( A , 1 ) == size ( A , 2 )) then select case ( size ( A , 1 )) case ( 2 ) allocate ( A_inv ( size ( A , 1 ), size ( A , 2 ))) A_inv ( 1 , 1 ) = A ( 2 , 2 ) A_inv ( 1 , 2 ) = - A ( 1 , 2 ) A_inv ( 2 , 1 ) = - A ( 2 , 1 ) A_inv ( 2 , 2 ) = A ( 1 , 1 ) A_inv = A_inv / det ( A ) case ( 3 ) allocate ( A_inv ( size ( A , 1 ), size ( A , 2 ))) A_inv ( 1 , 1 ) = A ( 2 , 2 ) * A ( 3 , 3 ) - A ( 2 , 3 ) * A ( 3 , 2 ) A_inv ( 1 , 2 ) = A ( 1 , 3 ) * A ( 3 , 2 ) - A ( 1 , 2 ) * A ( 3 , 3 ) A_inv ( 1 , 3 ) = A ( 1 , 2 ) * A ( 2 , 3 ) - A ( 1 , 3 ) * A ( 2 , 2 ) A_inv ( 2 , 1 ) = A ( 2 , 3 ) * A ( 3 , 1 ) - A ( 2 , 1 ) * A ( 3 , 3 ) A_inv ( 2 , 2 ) = A ( 1 , 1 ) * A ( 3 , 3 ) - A ( 1 , 3 ) * A ( 3 , 1 ) A_inv ( 2 , 3 ) = A ( 1 , 3 ) * A ( 2 , 1 ) - A ( 1 , 1 ) * A ( 2 , 3 ) A_inv ( 3 , 1 ) = A ( 2 , 1 ) * A ( 3 , 2 ) - A ( 2 , 2 ) * A ( 3 , 1 ) A_inv ( 3 , 2 ) = A ( 1 , 2 ) * A ( 3 , 1 ) - A ( 1 , 1 ) * A ( 3 , 2 ) A_inv ( 3 , 3 ) = A ( 1 , 1 ) * A ( 2 , 2 ) - A ( 1 , 2 ) * A ( 2 , 1 ) A_inv = A_inv / det ( A ) end select elseif ( size ( A , 1 ) > size ( A , 2 )) then allocate ( A_inv ( size ( A , 2 ), size ( A , 1 ))) A_inv = transpose ( A ) A_inv = matmul ( inv ( matmul ( A_inv , A )), A_inv ) elseif ( size ( A , 1 ) < size ( A , 2 )) then allocate ( A_inv ( size ( A , 2 ), size ( A , 1 ))) A_inv = transpose ( A ) A_inv = matmul ( A_inv , inv ( matmul ( A , A_inv ))) end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function dyad_t1_t1 ( a , b ) result ( c ) real ( rk ), intent ( in ), contiguous :: a (:) real ( rk ), intent ( in ), contiguous :: b (:) real ( rk ), allocatable :: c (:,:) integer :: i allocate ( c ( size ( a ), size ( b ))) do concurrent ( i = 1 : size ( c , 1 )) c ( i , :) = a ( i ) * b (:) end do end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine gauss_legendre_1D ( interval , degree , Xksi , Wksi ) real ( rk ), intent ( in ) :: interval ( 2 ) integer , intent ( in ) :: degree real ( rk ), allocatable , intent ( out ) :: Xksi (:), Wksi (:) allocate ( Xksi ( degree + 1 ), Wksi ( degree + 1 )) call gauss_legendre ( Xksi , Wksi , interval ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine gauss_legendre_2D ( interval1 , interval2 , degree , Xksi , Wksi ) real ( rk ), intent ( in ) :: interval1 ( 2 ), interval2 ( 2 ) integer , intent ( in ) :: degree ( 2 ) real ( rk ), allocatable , intent ( out ) :: Xksi (:,:), Wksi (:) real ( rk ), allocatable :: Xksi1 (:), Wksi1 (:), Xksi2 (:), Wksi2 (:) allocate ( Xksi1 ( degree ( 1 ) + 1 ), Wksi1 ( degree ( 1 ) + 1 )) allocate ( Xksi2 ( degree ( 2 ) + 1 ), Wksi2 ( degree ( 2 ) + 1 )) call gauss_legendre ( Xksi1 , Wksi1 , interval1 ) call gauss_legendre ( Xksi2 , Wksi2 , interval2 ) call ndgrid ( Xksi1 , Xksi2 , Xksi ) Wksi = kron ( Wksi1 , Wksi2 ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine gauss_legendre_3D ( interval1 , interval2 , interval3 , degree , Xksi , Wksi ) real ( rk ), intent ( in ) :: interval1 ( 2 ), interval2 ( 2 ), interval3 ( 2 ) integer , intent ( in ) :: degree ( 3 ) real ( rk ), allocatable , intent ( out ) :: Xksi (:,:), Wksi (:) real ( rk ), allocatable :: Xksi1 (:), Wksi1 (:), Xksi2 (:), Wksi2 (:), Xksi3 (:), Wksi3 (:) allocate ( Xksi1 ( degree ( 1 ) + 1 ), Wksi1 ( degree ( 1 ) + 1 )) allocate ( Xksi2 ( degree ( 2 ) + 1 ), Wksi2 ( degree ( 2 ) + 1 )) allocate ( Xksi3 ( degree ( 3 ) + 1 ), Wksi3 ( degree ( 3 ) + 1 )) call gauss_legendre ( Xksi1 , Wksi1 , interval1 ) call gauss_legendre ( Xksi2 , Wksi2 , interval2 ) call gauss_legendre ( Xksi3 , Wksi3 , interval3 ) call ndgrid ( Xksi1 , Xksi2 , Xksi3 , Xksi ) Wksi = kron ( kron ( Wksi3 , Wksi2 ), Wksi1 ) end subroutine !=============================================================================== end module forcad_utils","tags":"","loc":"sourcefile/forcad_utils.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_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~cmp_area.f90 cmp_area.f90 sourcefile~cmp_area.f90->sourcefile~forcad.f90 sourcefile~cmp_length.f90 cmp_length.f90 sourcefile~cmp_length.f90->sourcefile~forcad.f90 sourcefile~cmp_volume.f90 cmp_volume.f90 sourcefile~cmp_volume.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~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 , det , inv , gauss_leg 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 procedure :: set4 !!> Set NURBS surface using degree, number of control points, control points and weights generic :: set => set1 , set2 , set3 , set4 !!> 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 , private :: get_nc_dir !!> Get number of control points in a specific direction procedure , private :: get_nc_all !!> Get number of control points in all directions generic :: get_nc => get_nc_all , get_nc_dir !!> Get number of control 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 , 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) procedure :: ansatz !!> Compute the shape functions, derivative of shape functions and dA procedure :: cmp_area !!> Compute the area of the NURBS surface ! 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 , elem ) 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 (:) integer , intent ( in ) :: elem (:) end subroutine pure subroutine compute_dTgc_bspline_2d_scalar ( f_Xt , f_knot1 , f_knot2 , f_degree , nc , f_dTgc , f_Tgc , elem ) 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 (:) integer , intent ( in ) :: elem (:) 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 set4 ( this , degree , nc , Xc , Wc ) class ( nurbs_surface ), intent ( inout ) :: this integer , intent ( in ), contiguous :: degree (:) integer , intent ( in ), contiguous :: nc (:) real ( rk ), intent ( in ), contiguous :: Xc (:,:) real ( rk ), intent ( in ), contiguous , optional :: Wc (:) integer :: m ( 2 ), i if ( allocated ( this % Xc )) deallocate ( this % Xc ) this % Xc = Xc this % nc = nc this % degree = degree ! Size of knot vectors m = nc + degree + 1 if ( allocated ( this % knot1 )) deallocate ( this % knot1 ) allocate ( this % knot1 ( m ( 1 ))) this % knot1 ( 1 : degree ( 1 ) + 1 ) = 0.0_rk this % knot1 ( degree ( 1 ) + 2 : m ( 1 ) - degree ( 1 ) - 1 ) = [( real ( i , rk ) / ( m ( 1 ) - 2 * degree ( 1 ) - 1 ), i = 1 , m ( 1 ) - 2 * degree ( 1 ) - 2 )] this % knot1 ( m ( 1 ) - degree ( 1 ): m ( 1 )) = 1.0_rk if ( allocated ( this % knot2 )) deallocate ( this % knot2 ) allocate ( this % knot2 ( m ( 2 ))) this % knot2 ( 1 : degree ( 2 ) + 1 ) = 0.0_rk this % knot2 ( degree ( 2 ) + 2 : m ( 2 ) - degree ( 2 ) - 1 ) = [( real ( i , rk ) / ( m ( 2 ) - 2 * degree ( 2 ) - 1 ), i = 1 , m ( 2 ) - 2 * degree ( 2 ) - 2 )] this % knot2 ( m ( 2 ) - degree ( 2 ): m ( 2 )) = 1.0_rk if ( present ( Wc )) then if ( size ( Wc ) /= nc ( 1 ) * 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_all ( this ) result ( nc ) class ( nurbs_surface ), intent ( in ) :: this integer :: nc ( 2 ) nc = this % nc end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_nc_dir ( 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 , elem ) class ( nurbs_surface ), intent ( inout ) :: this real ( rk ), intent ( in ), contiguous :: Xt (:) integer , intent ( in ), optional :: elem (:) 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 , elem ) else ! B-Spline call compute_dTgc ( Xt , this % knot1 , this % knot2 , this % degree , this % nc , dTgc , Tgc , elem ) 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 ) :: obj , grad ( 2 ), hess ( 2 , 2 ), dk ( 2 ), alphak , tau , beta , lower_bounds ( 2 ), upper_bounds ( 2 ) real ( rk ), allocatable :: Xg (:), xk (:), Tgc (:), dTgc (:,:), d2Tgc (:,:) 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 copy_this % create ( 10 , 10 ) call copy_this % nearest_point ( point_Xg = point_Xg , nearest_Xt = xk ) 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 dk = - matmul ( inv ( hess ), 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 subroutine ansatz ( this , ie , ig , Tgc , dTgc_dXg , dA ) class ( nurbs_surface ), intent ( inout ) :: this integer , intent ( in ) :: ie , ig real ( rk ), intent ( out ) :: dA real ( rk ), allocatable , intent ( out ) :: Tgc (:), dTgc_dXg (:,:) real ( rk ), allocatable :: Xth (:,:), Xth_e (:,:), Xth_eT (:,:), Xc_eT (:,:), Xth1 (:), Xth2 (:), Xksi (:,:), Wksi (:) integer , allocatable :: elem_th (:,:), elem_c (:,:), elem_ce (:) type ( nurbs_surface ) :: th , th_e real ( rk ), allocatable :: dTtth_dXksi (:,:), Ttth (:), dTgc_dXt (:,:), Xt (:), dXt_dXksi (:,:), dXg_dXt (:,:) real ( rk ), allocatable :: dXg_dXksi (:,:) !! Jacobian matrix real ( rk ) :: det_dXg_dXksi !! Determinant of the Jacobian matrix call gauss_leg ([ 0.0_rk , 1.0_rk ], [ 0.0_rk , 1.0_rk ], this % degree , Xksi , Wksi ) Xth1 = unique ( this % knot1 ) Xth2 = unique ( this % knot2 ) call ndgrid ( Xth1 , Xth2 , Xth ) call th % set ([ 0.0_rk , Xth1 , 1.0_rk ], [ 0.0_rk , Xth2 , 1.0_rk ], Xth ) elem_th = th % cmp_elem () elem_c = this % cmp_elem () Xth_e = Xth ( elem_th ( ie ,:),:) call th_e % set ([ 0.0_rk , 0.0_rk , 1.0_rk , 1.0_rk ], [ 0.0_rk , 0.0_rk , 1.0_rk , 1.0_rk ], Xth_e ) Xth_eT = transpose ( Xth_e ) elem_ce = elem_c ( ie ,:) Xc_eT = transpose ( this % Xc ( elem_ce ,:)) call th_e % derivative ( Xksi ( ig ,:), dTtth_dXksi , Ttth ) Xt = matmul ( Xth_eT , Ttth ) dXt_dXksi = matmul ( Xth_eT , dTtth_dXksi ) call this % derivative ( Xt , dTgc_dXt , Tgc , elem_ce ) dXg_dXt = matmul ( Xc_eT , dTgc_dXt ) dTgc_dXg = matmul ( dTgc_dXt , inv ( dXg_dXt )) dXg_dXksi = matmul ( dXg_dXt , dXt_dXksi ) det_dXg_dXksi = det ( dXg_dXksi ) dA = det_dXg_dXksi * Wksi ( ig ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine cmp_area ( this , area ) class ( nurbs_surface ), intent ( inout ) :: this real ( rk ), intent ( out ) :: area real ( rk ), allocatable :: Tgc (:), dTgc_dXg (:,:) integer :: ie , ig real ( rk ) :: dA , dA_ig area = 0.0_rk do ie = 1 , size ( this % cmp_elem (), 1 ) dA = 0.0_rk do ig = 1 , size ( this % cmp_elem (), 2 ) call this % ansatz ( ie , ig , Tgc , dTgc_dXg , dA_ig ) dA = dA + dA_ig end do area = area + dA 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 , elem ) 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 (:) integer , intent ( in ), optional :: elem (:) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: Tgc (:) real ( rk ), allocatable :: dB1 (:), dB2 (:), dBi (:,:) real ( rk ), allocatable :: B1 (:), B2 (:), Bi (:) 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 ) if (. not . present ( elem )) then allocate ( dTgc ( nc ( 1 ) * nc ( 2 ), 2 ), Tgc ( nc ( 1 ) * nc ( 2 ))) allocate ( dBi ( nc ( 1 ) * nc ( 2 ), 2 ), Bi ( nc ( 1 ) * nc ( 2 ))) 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 ) else allocate ( dTgc ( size ( elem ), 2 ), Tgc ( size ( elem ))) allocate ( dBi ( size ( elem ), 2 ), Bi ( size ( elem ))) associate ( Biall => kron ( B2 , B1 )) Bi = Biall ( elem ) Tgc = Bi * ( Wc ( elem ) / ( dot_product ( Bi , Wc ( elem )))) end associate associate ( dB1all => kron ( B2 , dB1 ), dB2all => kron ( dB2 , B1 )) dBi (:, 1 ) = dB1all ( elem ) dBi (:, 2 ) = dB2all ( elem ) end associate dTgc (:, 1 ) = ( dBi (:, 1 ) * Wc ( elem ) - Tgc * dot_product ( dBi (:, 1 ), Wc ( elem )) ) / dot_product ( Bi , Wc ( elem )) dTgc (:, 2 ) = ( dBi (:, 2 ) * Wc ( elem ) - Tgc * dot_product ( dBi (:, 2 ), Wc ( elem )) ) / dot_product ( Bi , Wc ( elem )) end if 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 ), Tgc ( ng ( 1 ) * ng ( 2 ), nc ( 1 ) * nc ( 2 ))) allocate ( B1 ( nc ( 1 )), B2 ( nc ( 2 )), dB1 ( nc ( 1 )), dB2 ( nc ( 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 ) Tgc ( i ,:) = kron ( B2 , B1 ) dTgc ( i ,:, 1 ) = kron ( B2 , dB1 ) dTgc ( i ,:, 2 ) = kron ( dB2 , B1 ) end 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 , elem ) 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 ), optional :: elem (:) real ( rk ), allocatable , intent ( out ) :: dTgc (:,:) real ( rk ), allocatable , intent ( out ) :: Tgc (:) real ( rk ), allocatable :: dTgc1 (:), dTgc2 (:) real ( rk ), allocatable :: Tgc1 (:), Tgc2 (:) 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 ) if (. not . present ( elem )) then allocate ( dTgc ( nc ( 1 ) * nc ( 2 ), 2 )) Tgc = kron ( Tgc2 , Tgc1 ) dTgc (:, 1 ) = kron ( Tgc2 , dTgc1 ) dTgc (:, 2 ) = kron ( dTgc2 , Tgc1 ) else allocate ( dTgc ( size ( elem ), 2 )) associate ( B => kron ( Tgc2 , Tgc1 )) Tgc = B ( elem ) end associate associate ( dB1 => kron ( Tgc2 , dTgc1 ), dB2 => kron ( dTgc2 , Tgc1 )) dTgc (:, 1 ) = dB1 ( elem ) dTgc (:, 2 ) = dB2 ( elem ) end associate end if 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":"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":"cmp_area.f90 – ForCAD","text":"This file depends on sourcefile~~cmp_area.f90~~EfferentGraph sourcefile~cmp_area.f90 cmp_area.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~cmp_area.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 compute_area use forcad implicit none type ( nurbs_surface ) :: shape real ( rk ) :: area real ( rk ) :: Xc ( 4 , 3 ) 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 ] 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 ) call shape % cmp_area ( area ) print * , area end program","tags":"","loc":"sourcefile/cmp_area.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":"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":"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":"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":"cmp_length.f90 – ForCAD","text":"This file depends on sourcefile~~cmp_length.f90~~EfferentGraph sourcefile~cmp_length.f90 cmp_length.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~cmp_length.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 compute_length use forcad implicit none type ( nurbs_curve ) :: shape real ( rk ) :: length real ( rk ) :: Xc ( 2 , 3 ) Xc ( 1 ,:) = [ 0.0_rk , 0.0_rk , 0.0_rk ] Xc ( 2 ,:) = [ 2.0_rk , 0.0_rk , 0.0_rk ] call shape % set (& knot = [ 0.0_rk , 0.0_rk , 1.0_rk , 1.0_rk ],& Xc = Xc ) call shape % cmp_length ( length ) print * , length end program","tags":"","loc":"sourcefile/cmp_length.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_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":"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_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"}]} \ No newline at end of file diff --git a/type/nurbs_curve.html b/type/nurbs_curve.html index b3bfa8585..1e63bce9e 100644 --- a/type/nurbs_curve.html +++ b/type/nurbs_curve.html @@ -118,17 +118,17 @@

                          Variables

                          @@ -155,75 +155,75 @@

                          Type-Bound Procedures

                          - ansatz - basis - cmp_Xg - cmp_degree - cmp_elem - cmp_elem_Xc_vis - cmp_elem_Xg_vis + ansatz + basis + cmp_Xg + cmp_degree + cmp_elem + cmp_elem_Xc_vis + cmp_elem_Xg_vis cmp_length - 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 + 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 set1a - set2 - set3 - set4 - set_C + set2 + set3 + set4 + 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
                          @@ -256,7 +256,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
                          - + 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,
                          - + real(kind=rk), private,
                          - + integer, private
                          - + integer, private