hmap_frenet_get_dx_dqi Subroutine

public subroutine hmap_frenet_get_dx_dqi(sf, q_in, dx_dq1, dx_dq2, dx_dq3)

evaluate all first derivatives dx(1:3)/dq^i, i=1,2,3 , 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) :: dx_dq1
real(kind=wp), intent(out), DIMENSION(3) :: dx_dq2
real(kind=wp), intent(out), DIMENSION(3) :: dx_dq3

Calls

proc~~hmap_frenet_get_dx_dqi~~CallsGraph proc~hmap_frenet_get_dx_dqi t_hmap_frenet%hmap_frenet_get_dx_dqi interface~cross CROSS proc~hmap_frenet_get_dx_dqi->interface~cross proc~hmap_frenet_eval_x0_fromrz t_hmap_frenet%hmap_frenet_eval_X0_fromRZ proc~hmap_frenet_get_dx_dqi->proc~hmap_frenet_eval_x0_fromrz proc~hmap_frenet_sigma t_hmap_frenet%hmap_frenet_sigma proc~hmap_frenet_get_dx_dqi->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_dx_dqi~~CalledByGraph proc~hmap_frenet_get_dx_dqi t_hmap_frenet%hmap_frenet_get_dx_dqi proc~hmap_frenet_test hmap_frenet_test proc~hmap_frenet_test->proc~hmap_frenet_get_dx_dqi 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_dx_dqi( sf ,q_in,dx_dq1,dx_dq2,dx_dq3)
  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) :: dx_dq1,dx_dq2,dx_dq3
  !-----------------------------------------------------------------------------------------------------------------------------------
  ! LOCAL VARIABLES
  REAL(wp),DIMENSION(3) :: X0,X0p,X0pp,X0ppp,T,N,B
  REAL(wp)          :: lp,absB,kappa,tau,sigma
  !===================================================================================================================================
  !  |x |
  !  |y |=  X0(zeta) + sigma*(N(zeta)*q1 + B(zeta)*q2)
  !  |z |
  !  dh/dq1 =sigma*N , dh/dq2=sigma*B
  !  dh/dq3 = l' [(1-sigma*kappa*q1)T + sigma*tau*(B*q1-N*q2) ]
  ASSOCIATE(q1=>q_in(1),q2=>q_in(2),zeta=>q_in(3))
  CALL sf%eval_X0(zeta,X0,X0p,X0pp,X0ppp)
  lp=SQRT(SUM(X0p*X0p))
  T=X0p/lp
  B=CROSS(X0p,X0pp)
  absB=SQRT(SUM(B*B))
  kappa=absB/(lp**3)
  sigma=sf%sigma(zeta)
  tau=SUM(X0ppp*B)/(absB**2)
  B=B/absB
  N=CROSS(B,T)
  dx_dq1(1:3)= sigma*N
  dx_dq2(1:3)= sigma*B
  dx_dq3(1:3)=lp*((1.0_wp-sigma*kappa*q1)*T +sigma*tau*(B*q1-N*q2))
  END ASSOCIATE !zeta
END SUBROUTINE hmap_frenet_get_dx_dqi