fdm_elevate_and_insert_1d Program

Uses

  • program~~fdm_elevate_and_insert_1d~~UsesGraph program~fdm_elevate_and_insert_1d fdm_elevate_and_insert_1d fortime fortime program~fdm_elevate_and_insert_1d->fortime module~forcad forcad program~fdm_elevate_and_insert_1d->module~forcad module~forcad_utils forcad_utils program~fdm_elevate_and_insert_1d->module~forcad_utils module~forcad_kinds forcad_kinds module~forcad->module~forcad_kinds 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->module~forcad_kinds module~forcad_nurbs_curve->module~forcad_utils module~forcad_nurbs_curve->module~forcad_kinds fordebug fordebug module~forcad_nurbs_curve->fordebug module~forcad_nurbs_surface->module~forcad_utils module~forcad_nurbs_surface->module~forcad_kinds module~forcad_nurbs_surface->fordebug module~forcad_nurbs_volume->module~forcad_utils module~forcad_nurbs_volume->module~forcad_kinds module~forcad_nurbs_volume->fordebug

set control points

set weights set knot vector

set NURBS curve

deallocate temporary arrays

copy initial NURBS curve (before refinement)

get initial control points, dimension, number of control points and degrees of freedom elevate degree and get sensitivities (Bs: in compact form, memory efficient) set knot vectors to insert multiplicities of knots to insert

insert knots and get sensitivities (Bs: in compact form, memory efficient) compute global sensitivities (dXc_old/dXc_new) get new degrees of freedom (after refinement)

start finite difference computations compute relative error between finite difference and analytical sensitivities

finalize


Calls

program~~fdm_elevate_and_insert_1d~~CallsGraph program~fdm_elevate_and_insert_1d fdm_elevate_and_insert_1d none~get_knot nurbs_curve%get_knot program~fdm_elevate_and_insert_1d->none~get_knot none~get_wc nurbs_curve%get_Wc program~fdm_elevate_and_insert_1d->none~get_wc none~get_xc nurbs_curve%get_Xc program~fdm_elevate_and_insert_1d->none~get_xc none~set nurbs_curve%set program~fdm_elevate_and_insert_1d->none~set proc~elevate_degree nurbs_curve%elevate_degree program~fdm_elevate_and_insert_1d->proc~elevate_degree proc~finalize nurbs_curve%finalize program~fdm_elevate_and_insert_1d->proc~finalize proc~generate_xc~2 generate_Xc program~fdm_elevate_and_insert_1d->proc~generate_xc~2 proc~insert_knots nurbs_curve%insert_knots program~fdm_elevate_and_insert_1d->proc~insert_knots proc~kron_eye kron_eye program~fdm_elevate_and_insert_1d->proc~kron_eye proc~linspace linspace program~fdm_elevate_and_insert_1d->proc~linspace timer_start timer_start program~fdm_elevate_and_insert_1d->timer_start timer_stop timer_stop program~fdm_elevate_and_insert_1d->timer_stop 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~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~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~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~elevate_degree_a_5_9->interface~compute_multiplicity proc~bincoeff bincoeff proc~elevate_degree_a_5_9->proc~bincoeff proc~cmp_degree nurbs_curve%cmp_degree proc~set1->proc~cmp_degree set set proc~set1->set proc~set1a->proc~cmp_degree proc~set1a->set proc~cmp_nc nurbs_curve%cmp_nc proc~set2->proc~cmp_nc proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector proc~set2->set proc~set3->proc~cmp_degree proc~set3->set proc~set4->set proc~factln factln proc~bincoeff->proc~factln proc~get_multiplicity nurbs_curve%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

Variables

Type Attributes Name Initial
real(kind=rk), allocatable :: B(:,:)
real(kind=rk), allocatable :: Bfd(:,:)
real(kind=rk), allocatable :: Bs(:,:)
real(kind=rk), allocatable :: S1(:,:)
real(kind=rk), allocatable :: S2(:,:)
real(kind=rk), allocatable :: Wc(:)
real(kind=rk), allocatable :: Xc(:,:)
real(kind=rk), allocatable :: Xc0(:,:)
real(kind=rk), allocatable :: Xcm_vec(:)
real(kind=rk), allocatable :: Xcp_vec(:)
real(kind=rk), allocatable :: Xm(:,:)
real(kind=rk), allocatable :: Xp(:,:)
integer :: d
integer :: dim
integer :: i
integer :: idx
real(kind=rk), allocatable :: knot(:)
integer :: nc0
integer :: ndof_new
integer :: ndof_old
integer, parameter :: nins = 5

number of knots to insert

integer, allocatable :: r(:)
real(kind=rk) :: rel_err
type(nurbs_curve) :: sh0
type(nurbs_curve) :: shfd
type(nurbs_curve) :: shr
type(timer) :: t
integer, parameter :: tdeg = 3

degrees to elevate

real(kind=rk), parameter :: tol = 1e-5_rk

tolerance of finite differences

real(kind=rk), allocatable :: u(:)

Functions

pure function generate_Xc(L) result(control_points)

Arguments

Type IntentOptional Attributes Name
real(kind=rk), intent(in) :: L

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