fdm_elevate_and_insert_3d Program

Uses

  • program~~fdm_elevate_and_insert_3d~~UsesGraph program~fdm_elevate_and_insert_3d fdm_elevate_and_insert_3d fortime fortime program~fdm_elevate_and_insert_3d->fortime module~forcad forcad program~fdm_elevate_and_insert_3d->module~forcad module~forcad_utils forcad_utils program~fdm_elevate_and_insert_3d->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 volume

deallocate temporary arrays

copy initial NURBS volume (before refinement)

get initial control points, dimension, number of control points and degrees of freedom elevate degree in three 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) 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_3d~~CallsGraph program~fdm_elevate_and_insert_3d fdm_elevate_and_insert_3d none~get_knot nurbs_volume%get_knot program~fdm_elevate_and_insert_3d->none~get_knot none~get_wc nurbs_volume%get_Wc program~fdm_elevate_and_insert_3d->none~get_wc none~get_xc nurbs_volume%get_Xc program~fdm_elevate_and_insert_3d->none~get_xc none~set nurbs_volume%set program~fdm_elevate_and_insert_3d->none~set proc~elevate_degree nurbs_volume%elevate_degree program~fdm_elevate_and_insert_3d->proc~elevate_degree proc~finalize nurbs_volume%finalize program~fdm_elevate_and_insert_3d->proc~finalize proc~generate_xc~8 generate_Xc program~fdm_elevate_and_insert_3d->proc~generate_xc~8 proc~insert_knots nurbs_volume%insert_knots program~fdm_elevate_and_insert_3d->proc~insert_knots proc~kron_eye kron_eye program~fdm_elevate_and_insert_3d->proc~kron_eye proc~linspace linspace program~fdm_elevate_and_insert_3d->proc~linspace timer_start timer_start program~fdm_elevate_and_insert_3d->timer_start timer_stop timer_stop program~fdm_elevate_and_insert_3d->timer_stop 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~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_volume%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_volume%cmp_degree proc~set1->proc~cmp_degree proc~cmp_nc nurbs_volume%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_volume%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 :: S5(:,:)
real(kind=rk), allocatable :: S6(:,:)
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 = 4

degrees to elevate

integer, parameter :: dg2 = 3

degrees to elevate

integer, parameter :: dg3 = 2

degrees to elevate

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

number of knots to insert

integer, parameter :: n2 = 3

number of knots to insert

integer, parameter :: n3 = 4

number of knots to insert

integer :: nc0
integer :: ndof_new
integer :: ndof_old
integer, allocatable :: r1(:)
integer, allocatable :: r2(:)
integer, allocatable :: r3(:)
real(kind=rk) :: rel_err
type(nurbs_volume) :: sh0
type(nurbs_volume) :: shfd
type(nurbs_volume) :: 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(:)
real(kind=rk), allocatable :: u3(:)

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, (:,:)