forcad_nurbs_curve Module

This module defines the 'nurbs_curve' type for representing a Non-Uniform Rational B-Spline (NURBS) curve.


Uses

  • 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

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

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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional 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 IntentOptional Attributes Name
class(nurbs_curve), intent(inout) :: this
real(kind=rk), intent(in) :: vec(:)