fBase_eval1d_zeta Function

private function fBase_eval1d_zeta(sf, deriv, nzeta, zeta) result(base1d_zeta)

evaluate special 1D base in zeta direction (cos(mt_i),sin(mt_i)) or its derivative(s) on a given set of points for tensor-product evaluation of 2D sin and cos base: sin(mthet-nzeta) = sin(mthet)cos(nzeta)-cos(mthet)sin(nzeta) == dot_product( (sin(mthet),-cos(mthet)) , (cos(nzeta),sin(nzeta))) cos(mthet-nzeta) = cos(mthet)cos(nzeta)+sin(mthet)sin(nzeta) == dot_product( (cos(mthet), sin(mthet)) , (cos(nzeta),sin(nzeta))) so for the 1D base, nTotal1d is always 2*n_max+1

Arguments

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

self

integer, intent(in) :: deriv

=0: base, =1: dzeta , =2: dzeta^2

integer, intent(in) :: nzeta

number of points in zeta

real(kind=wp), intent(in) :: zeta(1:nzeta)

zeta 1D point positions

Return Value real(kind=wp), (1:2,-sf%mn_max(2):sf%mn_max(2),1:nzeta)


Called by

proc~~fbase_eval1d_zeta~~CalledByGraph proc~fbase_eval1d_zeta fBase_eval1d_zeta proc~fbase_evaldof_xn_tens t_fBase%fBase_evalDOF_xn_tens proc~fbase_evaldof_xn_tens->proc~fbase_eval1d_zeta proc~evaluate_base_tens evaluate_base_tens proc~evaluate_base_tens->proc~fbase_evaldof_xn_tens proc~evaluate_base_tens_all evaluate_base_tens_all proc~evaluate_base_tens_all->proc~fbase_evaldof_xn_tens proc~fbase_test fBase_test proc~fbase_test->proc~fbase_evaldof_xn_tens proc~fbase_init t_fBase%fBase_init proc~fbase_test->proc~fbase_init proc~fbase_init->proc~fbase_test proc~fbase_copy t_fBase%fBase_copy proc~fbase_copy->proc~fbase_init proc~fbase_new fBase_new proc~fbase_new->proc~fbase_init proc~base_new Base_new proc~base_new->proc~fbase_new proc~bff_convert_to_modes t_boundaryFromFile%bff_convert_to_modes proc~bff_convert_to_modes->proc~fbase_new proc~get_boozer_sinterp t_sfl_boozer%Get_Boozer_sinterp proc~get_boozer_sinterp->proc~fbase_new proc~hmap_axisnb_init_params hmap_axisNB_init_params proc~hmap_axisnb_init_params->proc~fbase_new proc~init_base Init_Base proc~init_base->proc~fbase_new proc~init_base->proc~base_new proc~sfl_boozer_new sfl_boozer_new proc~sfl_boozer_new->proc~fbase_new proc~transform_angles_sinterp Transform_Angles_sinterp proc~transform_angles_sinterp->proc~fbase_new interface~t_hmap_axisnb t_hmap_axisNB interface~t_hmap_axisnb->proc~hmap_axisnb_init_params proc~hmap_axisnb_init hmap_axisNB_init interface~t_hmap_axisnb->proc~hmap_axisnb_init proc~buildtransform_sfl t_transform_sfl%BuildTransform_SFL proc~buildtransform_sfl->proc~get_boozer_sinterp proc~buildtransform_sfl->proc~transform_angles_sinterp proc~get_boozer get_boozer proc~get_boozer->proc~get_boozer_sinterp proc~hmap_axisnb_init->proc~hmap_axisnb_init_params proc~init_gvec_to_jorek init_gvec_to_jorek proc~init_gvec_to_jorek->proc~init_base interface~readstate ReadState proc~init_gvec_to_jorek->interface~readstate proc~initmhd3d t_functional_mhd3d%InitMHD3D proc~initmhd3d->proc~base_new proc~initmhd3d->proc~bff_convert_to_modes proc~readstatefilefromascii ReadStateFileFromASCII proc~readstatefilefromascii->proc~base_new proc~transform_sfl_init t_transform_sfl%transform_SFL_init proc~transform_sfl_init->proc~base_new interface~readstate->proc~readstatefilefromascii proc~transform_sfl_new transform_sfl_new proc~transform_sfl_new->proc~transform_sfl_init proc~restartfromstate RestartFromState proc~restartfromstate->interface~readstate

Source Code

FUNCTION fBase_eval1d_zeta(sf,deriv,nzeta,zeta) RESULT(base1d_zeta)
  ! MODULES
  IMPLICIT NONE
  !-----------------------------------------------------------------------------------------------------------------------------------
  ! INPUT VARIABLES
    CLASS(t_fBase), INTENT(IN   ) :: sf         !! self
    INTEGER       , INTENT(IN   ) :: deriv !! =0: base, =1: dzeta , =2: dzeta^2
    INTEGER       , INTENT(IN   ) :: nzeta       !! number of points in zeta
    REAL(wp)      , INTENT(IN   ) :: zeta(1:nzeta)   !! zeta 1D point positions
  !-----------------------------------------------------------------------------------------------------------------------------------
  ! OUTPUT VARIABLES
    REAL(wp)                      :: base1d_zeta(1:2,-sf%mn_max(2):sf%mn_max(2),1:nzeta)
  !-----------------------------------------------------------------------------------------------------------------------------------
  ! LOCAL VARIABLES
    INTEGER :: n,n_max,nfp
    REAL(wp):: nn
  !===================================================================================================================================
  n_max=sf%mn_max(2)
  nfp=sf%nfp

  SELECT CASE(deriv)
  CASE(0)
    DO n=-n_max,n_max
      nn=REAL(n*nfp,wp)
      base1D_zeta(      1,n,:)  = COS(nn*zeta(:))
      base1D_zeta(      2,n,:)  = SIN(nn*zeta(:))
    END DO
  CASE(1)  !
    DO n=-n_max,n_max
      nn=REAL(n*nfp,wp)
      base1D_zeta(      1,n,:)  = -nn*SIN(nn*zeta(:))
      base1D_zeta(      2,n,:)  =  nn*COS(nn*zeta(:))
    END DO
  CASE(2)
    DO n=-n_max,n_max
      nn=REAL(n*nfp,wp)
      base1D_zeta(      1,n,:)  = -nn*nn*COS(nn*zeta(:))
      base1D_zeta(      2,n,:)  = -nn*nn*SIN(nn*zeta(:))
    END DO
  CASE DEFAULT
    CALL abort(__STAMP__, &
           "fBase_eval1d_zeta: derivative must be 0,1,2 !")
    END SELECT
  END FUNCTION fBase_eval1d_zeta