hmap_frenet_init_aux Function

public function hmap_frenet_init_aux(sf, zeta, do_2nd_der) result(xv)

initialize the aux variable

Arguments

Type IntentOptional Attributes Name
class(t_hmap_frenet), intent(in) :: sf

self

real(kind=wp), intent(in) :: zeta
logical, intent(in) :: do_2nd_der

compute second derivative and store second derivative terms

Return Value type(t_hmap_frenet_auxvar)


Calls

proc~~hmap_frenet_init_aux~~CallsGraph proc~hmap_frenet_init_aux hmap_frenet_init_aux interface~cross CROSS proc~hmap_frenet_init_aux->interface~cross proc~hmap_frenet_eval_x0_fromrz t_hmap_frenet%hmap_frenet_eval_X0_fromRZ proc~hmap_frenet_init_aux->proc~hmap_frenet_eval_x0_fromrz proc~hmap_frenet_sigma t_hmap_frenet%hmap_frenet_sigma proc~hmap_frenet_init_aux->proc~hmap_frenet_sigma interface~cross->interface~cross proc~eval_fourier1d eval_fourier1d proc~hmap_frenet_eval_x0_fromrz->proc~eval_fourier1d

Called by

proc~~hmap_frenet_init_aux~~CalledByGraph proc~hmap_frenet_init_aux hmap_frenet_init_aux interface~t_hmap_frenet_auxvar t_hmap_frenet_auxvar interface~t_hmap_frenet_auxvar->proc~hmap_frenet_init_aux proc~hmap_frenet_test hmap_frenet_test proc~hmap_frenet_test->proc~hmap_frenet_init_aux proc~hmap_frenet_init_params hmap_frenet_init_params proc~hmap_frenet_init_params->proc~hmap_frenet_test interface~t_hmap_frenet t_hmap_frenet interface~t_hmap_frenet->proc~hmap_frenet_init_params proc~hmap_frenet_init hmap_frenet_init interface~t_hmap_frenet->proc~hmap_frenet_init proc~hmap_frenet_init->proc~hmap_frenet_init_params

Source Code

FUNCTION hmap_frenet_init_aux( sf ,zeta,do_2nd_der) RESULT(xv)
! MODULES
  IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
! INPUT VARIABLES
  CLASS(t_hmap_frenet),INTENT(IN) :: sf !! self
  REAL(wp)            ,INTENT(IN) :: zeta
  LOGICAL             ,INTENT(IN) :: do_2nd_der !! compute second derivative and store second derivative terms
!-----------------------------------------------------------------------------------------------------------------------------------
! OUTPUT VARIABLES
  TYPE(t_hmap_frenet_auxvar)      :: xv
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
  REAL(wp),DIMENSION(3) :: X0p,X0pp,X0ppp,X0p4,Bloc
  REAL(wp)  :: absB,absB_p
!===================================================================================================================================
  xv%do_2nd_der=do_2nd_der
  xv%zeta = zeta
  IF(xv%do_2nd_der)THEN
    CALL sf%eval_X0(zeta, xv%X0, X0p, X0pp, X0ppp,X0p4=X0p4)
  ELSE
    CALL sf%eval_X0(zeta, xv%X0, X0p, X0pp, X0ppp)
  END IF

  xv%lp = SQRT(SUM(X0p*X0p))
  xv%T = X0p / xv%lp
  Bloc = CROSS(X0p, X0pp)
  absB = SQRT(SUM(Bloc*Bloc))
  xv%kappa = absB / (xv%lp**3)
  IF(xv%kappa.LT.1.0e-8) &
      CALL abort(__STAMP__, &
          "hmap_frenet cannot evaluate frame at curvature < 1e-8 !", RealInfo=zeta)
  xv%sigma = sf%sigma(zeta)
  xv%tau = SUM(X0ppp*Bloc) / (absB**2)
  xv%B = Bloc / absB
  xv%N = CROSS(xv%B, xv%T)

  IF(xv%do_2nd_der)THEN
    xv%lp_p = SUM(X0pp*X0p) / xv%lp
    absB_p = SUM(Bloc*CROSS(X0p, X0ppp)) / absB
    xv%kappa_p = (absB_p*xv%lp -3*absB * xv%lp_p) / (xv%lp**4)
    xv%tau_p   = (SUM(X0p4*Bloc)*absB -2*SUM(X0ppp*Bloc)*absB_p) / (absB**3)
  END IF

  END FUNCTION hmap_frenet_init_aux