fdm_elevate_and_insert_2d Program

Uses

  • program~~fdm_elevate_and_insert_2d~~UsesGraph program~fdm_elevate_and_insert_2d fdm_elevate_and_insert_2d fortime fortime program~fdm_elevate_and_insert_2d->fortime module~forcad forcad program~fdm_elevate_and_insert_2d->module~forcad module~forcad_utils forcad_utils program~fdm_elevate_and_insert_2d->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 vectors set NURBS surface

deallocate temporary arrays

copy initial NURBS surface (before refinement)

get initial control points, dimension, number of control points and degrees of freedom elevate degree in two directions and get sensitivities (Bs: in compact form, memory efficient) set knot vectors to insert multiplicities of knots to insert insert knots in three directions and get sensitivities (Bs: in compact form, memory efficient) compute global sensitivities (dXc_old/dXc_new) start finite difference computations

compute relative error between finite difference and analytical sensitivities

finalize


Calls

program~~fdm_elevate_and_insert_2d~~CallsGraph program~fdm_elevate_and_insert_2d fdm_elevate_and_insert_2d none~get_knot nurbs_surface%get_knot program~fdm_elevate_and_insert_2d->none~get_knot none~get_wc nurbs_surface%get_Wc program~fdm_elevate_and_insert_2d->none~get_wc none~get_xc nurbs_surface%get_Xc program~fdm_elevate_and_insert_2d->none~get_xc none~set nurbs_surface%set program~fdm_elevate_and_insert_2d->none~set proc~elevate_degree nurbs_surface%elevate_degree program~fdm_elevate_and_insert_2d->proc~elevate_degree proc~finalize nurbs_surface%finalize program~fdm_elevate_and_insert_2d->proc~finalize proc~generate_xc~5 generate_Xc program~fdm_elevate_and_insert_2d->proc~generate_xc~5 proc~insert_knots nurbs_surface%insert_knots program~fdm_elevate_and_insert_2d->proc~insert_knots proc~kron_eye kron_eye program~fdm_elevate_and_insert_2d->proc~kron_eye proc~linspace linspace program~fdm_elevate_and_insert_2d->proc~linspace timer_start timer_start program~fdm_elevate_and_insert_2d->timer_start timer_stop timer_stop program~fdm_elevate_and_insert_2d->timer_stop proc~get_knot_all nurbs_surface%get_knot_all none~get_knot->proc~get_knot_all proc~get_knoti nurbs_surface%get_knoti none~get_knot->proc~get_knoti proc~get_wc_all nurbs_surface%get_Wc_all none~get_wc->proc~get_wc_all proc~get_wci nurbs_surface%get_Wci none~get_wc->proc~get_wci proc~get_xc_all nurbs_surface%get_Xc_all none~get_xc->proc~get_xc_all proc~get_xci nurbs_surface%get_Xci none~get_xc->proc~get_xci proc~get_xcid nurbs_surface%get_Xcid none~get_xc->proc~get_xcid proc~set1 nurbs_surface%set1 none~set->proc~set1 proc~set2 nurbs_surface%set2 none~set->proc~set2 proc~set3 nurbs_surface%set3 none~set->proc~set3 proc~set4 nurbs_surface%set4 none~set->proc~set4 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~is_rational nurbs_surface%is_rational proc~elevate_degree->proc~is_rational proc~insert_knots->none~get_knot 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 s_loc s_loc proc~insert_knots->s_loc set set proc~insert_knots->set 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~set1->set proc~cmp_degree nurbs_surface%cmp_degree proc~set1->proc~cmp_degree proc~cmp_nc nurbs_surface%cmp_nc proc~set1->proc~cmp_nc proc~set2->set proc~set2->proc~cmp_nc proc~compute_knot_vector compute_knot_vector proc~set2->proc~compute_knot_vector proc~set3->set proc~set3->proc~cmp_degree proc~set4->set proc~factln factln proc~bincoeff->proc~factln proc~cmp_degree->set proc~get_multiplicity nurbs_surface%get_multiplicity proc~cmp_degree->proc~get_multiplicity proc~cmp_nc->interface~compute_multiplicity proc~cmp_nc->set 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 :: S3(:,:)
real(kind=rk), allocatable :: S4(:,:)
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, parameter :: dg1 = 3

degrees to elevate

integer, parameter :: dg2 = 2

degrees to elevate

integer :: dim
integer :: i
integer :: idx
real(kind=rk), allocatable :: knot1(:)
real(kind=rk), allocatable :: knot2(:)
integer, parameter :: n1 = 5

number of knots to insert

integer, parameter :: n2 = 4

number of knots to insert

integer :: nc0
integer :: ndof_new
integer :: ndof_old
integer, allocatable :: r1(:)
integer, allocatable :: r2(:)
real(kind=rk) :: rel_err
type(nurbs_surface) :: sh0
type(nurbs_surface) :: shfd
type(nurbs_surface) :: shr
type(timer) :: t
real(kind=rk), parameter :: tol = 1e-5_rk

tolerance of finite differences

real(kind=rk), allocatable :: u1(:)
real(kind=rk), allocatable :: u2(:)

Functions

pure function generate_Xc(L) result(cp)

Arguments

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

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