hmap_frenet_get_ddx_dqij Subroutine

public subroutine hmap_frenet_get_ddx_dqij(sf, q_in, ddx_dq11, ddx_dq12, ddx_dq13, ddx_dq22, ddx_dq23, ddx_dq33)

evaluate all second derivatives d^2x(1:3)/(dq^i dq^j), i,j=1,2,3 is evaluated at q_in=(X^1,X^2,zeta),

Type Bound

t_hmap_frenet

Arguments

Type IntentOptional Attributes Name
class(t_hmap_frenet), intent(in) :: sf
real(kind=wp), intent(in) :: q_in(3)
real(kind=wp), intent(out), DIMENSION(3) :: ddx_dq11
real(kind=wp), intent(out), DIMENSION(3) :: ddx_dq12
real(kind=wp), intent(out), DIMENSION(3) :: ddx_dq13
real(kind=wp), intent(out), DIMENSION(3) :: ddx_dq22
real(kind=wp), intent(out), DIMENSION(3) :: ddx_dq23
real(kind=wp), intent(out), DIMENSION(3) :: ddx_dq33

Calls

proc~~hmap_frenet_get_ddx_dqij~~CallsGraph proc~hmap_frenet_get_ddx_dqij t_hmap_frenet%hmap_frenet_get_ddx_dqij interface~cross CROSS proc~hmap_frenet_get_ddx_dqij->interface~cross proc~hmap_frenet_eval_x0_fromrz t_hmap_frenet%hmap_frenet_eval_X0_fromRZ proc~hmap_frenet_get_ddx_dqij->proc~hmap_frenet_eval_x0_fromrz proc~hmap_frenet_sigma t_hmap_frenet%hmap_frenet_sigma proc~hmap_frenet_get_ddx_dqij->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_get_ddx_dqij~~CalledByGraph proc~hmap_frenet_get_ddx_dqij t_hmap_frenet%hmap_frenet_get_ddx_dqij proc~hmap_frenet_test hmap_frenet_test proc~hmap_frenet_test->proc~hmap_frenet_get_ddx_dqij 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

SUBROUTINE hmap_frenet_get_ddx_dqij( sf ,q_in,ddx_dq11,ddx_dq12,ddx_dq13,ddx_dq22,ddx_dq23,ddx_dq33)
  IMPLICIT NONE
  !-----------------------------------------------------------------------------------------------------------------------------------
  ! INPUT VARIABLES
  CLASS(t_hmap_frenet), INTENT(IN) :: sf
  REAL(wp)            , INTENT(IN) :: q_in(3)
  !-----------------------------------------------------------------------------------------------------------------------------------
  ! OUTPUT VARIABLES
  REAL(wp),DIMENSION(3),INTENT(OUT) :: ddx_dq11,ddx_dq12,ddx_dq13,ddx_dq22,ddx_dq23,ddx_dq33
  !-----------------------------------------------------------------------------------------------------------------------------------
  REAL(wp),DIMENSION(3) :: X0,X0p,X0pp,X0ppp,X0p4,Bloc,T,N,B
  REAL(wp)          :: lp,absB,kappa,tau,sigma
  REAL(wp)          :: lp_p,absB_p,kappa_p,tau_p
!===================================================================================================================================
  !  |x |
  !  |y |=  X0(zeta) + sigma*(N(zeta)*q1 + B(zeta)*q2)
  !  |z |
  ASSOCIATE(q1=>q_in(1),q2=>q_in(2),zeta=>q_in(3))
  CALL sf%eval_X0(zeta,X0,X0p,X0pp,X0ppp,X0p4=X0p4)
  lp=SQRT(SUM(X0p*X0p))
  T=X0p/lp
  Bloc=CROSS(X0p,X0pp)
  absB=SQRT(SUM(Bloc*Bloc))
  kappa=absB/(lp**3)
  sigma=sf%sigma(zeta)
  tau  = SUM(X0ppp*Bloc)/(absB**2)
  lp_p = SUM(X0pp*X0p) / lp
  absB_p = SUM(Bloc*CROSS(X0p, X0ppp)) / absB
  kappa_p = (absB_p*lp -3*absB * lp_p) / (lp**4)
  tau_p   = (SUM(X0p4*Bloc)*absB -2*SUM(X0ppp*Bloc)*absB_p) / (absB**3)
  B=Bloc/absB
  N=CROSS(B,T)
  ddx_dq11=0.0_wp
  ddx_dq12=0.0_wp
  ddx_dq13=sigma*lp*(-kappa*T +tau*B)

  ddx_dq22=0.0_wp
  ddx_dq23=-sigma*lp*tau*N
  ddx_dq33(1:3)= lp_p*((1.0_wp-sigma*kappa*q1)*T +sigma*tau*(B*q1-N*q2)) &
                 +lp*sigma*( -kappa_p*q1*T +tau_p*(B*q1-N*q2)                     &
                            +lp*( (1.0_wp-sigma*kappa*q1)*(kappa*N)             &
                                 +sigma*tau*((-tau*N)*q1-((-kappa*T +tau*B))*q2)) )
  END ASSOCIATE
END SUBROUTINE hmap_frenet_get_ddx_dqij