build_twist_taper Subroutine

pure subroutine build_twist_taper(this, Length, nc, twist_deg, taper)

Apply a z-progressive twist and linear taper to a NURBS hexahedron.

Let the control points be indexed by along . Define the normalized axial coordinate which varies from 0 at the bottom face to 1 at the top face.

The total twist angle (in radians) at level is i.e. a linear ramp from to .

The in-plane (x–y) taper scale is chosen linear in : so at the bottom and at the top (shrinking if ).

For each control point , first shift to the in-plane centroid of the box, apply the scale and rotation by about , and keep unchanged:

Knots are preserved; only the control points are updated.

Arguments

Type IntentOptional Attributes Name
type(nurbs_volume), intent(inout) :: this

Volume to be transformed.

real(kind=rk), intent(in) :: Length(3)

Box lengths .

integer, intent(in) :: nc(3)

Control points sizes.

real(kind=rk), intent(in) :: twist_deg

Total twist at top face (degrees).

real(kind=rk), intent(in) :: taper

In-plane scale at top face (0<taper≤1).


Calls

proc~~build_twist_taper~~CallsGraph proc~build_twist_taper build_twist_taper none~get_knot~2 nurbs_volume%get_knot proc~build_twist_taper->none~get_knot~2 none~get_wc~2 nurbs_volume%get_Wc proc~build_twist_taper->none~get_wc~2 none~get_xc~2 nurbs_volume%get_Xc proc~build_twist_taper->none~get_xc~2 none~set~2 nurbs_volume%set proc~build_twist_taper->none~set~2 proc~is_rational~2 nurbs_volume%is_rational proc~build_twist_taper->proc~is_rational~2 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~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 set set proc~set1~2->set proc~set2~2->proc~cmp_nc~2 proc~compute_knot_vector compute_knot_vector proc~set2~2->proc~compute_knot_vector proc~set2~2->set proc~set3~2->proc~cmp_degree~2 proc~set3~2->set proc~set4~2->set 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->set interface~compute_multiplicity compute_multiplicity proc~cmp_nc~2->interface~compute_multiplicity proc~repelem repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity1 compute_multiplicity1 interface~compute_multiplicity->proc~compute_multiplicity1 proc~compute_multiplicity2 compute_multiplicity2 interface~compute_multiplicity->proc~compute_multiplicity2 proc~get_multiplicity~2->interface~compute_multiplicity

Called by

proc~~build_twist_taper~~CalledByGraph proc~build_twist_taper build_twist_taper program~example_twist_taper example_twist_taper program~example_twist_taper->proc~build_twist_taper