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~2 nurbs_volume%get_knot program~fdm_elevate_and_insert_3d->none~get_knot~2 none~get_wc~2 nurbs_volume%get_Wc program~fdm_elevate_and_insert_3d->none~get_wc~2 none~get_xc~2 nurbs_volume%get_Xc program~fdm_elevate_and_insert_3d->none~get_xc~2 none~set~2 nurbs_volume%set program~fdm_elevate_and_insert_3d->none~set~2 proc~elevate_degree~2 nurbs_volume%elevate_degree program~fdm_elevate_and_insert_3d->proc~elevate_degree~2 proc~finalize~2 nurbs_volume%finalize program~fdm_elevate_and_insert_3d->proc~finalize~2 proc~generate_xc~6 generate_Xc program~fdm_elevate_and_insert_3d->proc~generate_xc~6 proc~insert_knots~2 nurbs_volume%insert_knots program~fdm_elevate_and_insert_3d->proc~insert_knots~2 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~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~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~is_rational~2 nurbs_volume%is_rational proc~elevate_degree~2->proc~is_rational~2 proc~insert_knots~2->none~get_knot~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 s_loc s_loc proc~insert_knots~2->s_loc set set proc~insert_knots~2->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~2->set 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->set proc~set2~2->proc~cmp_nc~2 proc~compute_knot_vector compute_knot_vector proc~set2~2->proc~compute_knot_vector proc~set3~2->set proc~set3~2->proc~cmp_degree~2 proc~set4~2->set proc~factln factln proc~bincoeff->proc~factln proc~cmp_degree~2->set proc~get_multiplicity~2 nurbs_volume%get_multiplicity proc~cmp_degree~2->proc~get_multiplicity~2 proc~cmp_nc~2->interface~compute_multiplicity proc~cmp_nc~2->set proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~get_multiplicity~2->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, (:,:)