sfl_boozer_new Subroutine

public subroutine sfl_boozer_new(sf, mn_max, mn_nyq, nfp, sin_cos, hmap_in, nrho, rho_pos, iota, phiPrime, relambda_in)

Uses

  • proc~~sfl_boozer_new~~UsesGraph proc~sfl_boozer_new sfl_boozer_new module~modgvec_fbase MODgvec_fBase proc~sfl_boozer_new->module~modgvec_fbase module~modgvec_hmap MODgvec_hmap proc~sfl_boozer_new->module~modgvec_hmap module~modgvec_globals MODgvec_Globals module~modgvec_fbase->module~modgvec_globals module~modgvec_c_hmap MODgvec_c_hmap module~modgvec_hmap->module~modgvec_c_hmap module~modgvec_hmap_axisnb MODgvec_hmap_axisNB module~modgvec_hmap->module~modgvec_hmap_axisnb module~modgvec_hmap_cyl MODgvec_hmap_cyl module~modgvec_hmap->module~modgvec_hmap_cyl module~modgvec_hmap_frenet MODgvec_hmap_frenet module~modgvec_hmap->module~modgvec_hmap_frenet module~modgvec_hmap_knot MODgvec_hmap_knot module~modgvec_hmap->module~modgvec_hmap_knot module~modgvec_hmap_rz MODgvec_hmap_RZ module~modgvec_hmap->module~modgvec_hmap_rz module~modgvec_c_hmap->module~modgvec_globals iso_fortran_env iso_fortran_env module~modgvec_globals->iso_fortran_env module~modgvec_hmap_axisnb->module~modgvec_fbase module~modgvec_hmap_axisnb->module~modgvec_c_hmap module~modgvec_hmap_axisnb->module~modgvec_globals module~modgvec_io_netcdf MODgvec_IO_NETCDF module~modgvec_hmap_axisnb->module~modgvec_io_netcdf module~modgvec_hmap_cyl->module~modgvec_c_hmap module~modgvec_hmap_cyl->module~modgvec_globals module~modgvec_hmap_frenet->module~modgvec_c_hmap module~modgvec_hmap_frenet->module~modgvec_globals module~modgvec_hmap_knot->module~modgvec_c_hmap module~modgvec_hmap_knot->module~modgvec_globals module~modgvec_hmap_rz->module~modgvec_c_hmap module~modgvec_hmap_rz->module~modgvec_globals module~modgvec_io_netcdf->module~modgvec_globals netcdf netcdf module~modgvec_io_netcdf->netcdf

initialize sfl boozer class

Arguments

Type IntentOptional Attributes Name
type(t_sfl_boozer), intent(inout), ALLOCATABLE :: sf

self

integer, intent(in) :: mn_max(2)

maximum Fourier modes in theta and zeta

integer, intent(in) :: mn_nyq(2)

number of equidistant integration points (trapezoidal rule) in m and n

integer, intent(in) :: nfp

number of field periods

character(len=8) :: sin_cos

can be either only sine: " sin" only cosine: " cos" or full: "sin_cos"

type(PP_T_HMAP), intent(in), TARGET :: hmap_in
integer, intent(in) :: nrho

number of rho positions

real(kind=wp), intent(in) :: rho_pos(nrho)

rho positions, iota and phiPrime at these rho positions

real(kind=wp), intent(in) :: iota(nrho)

rho positions, iota and phiPrime at these rho positions

real(kind=wp), intent(in) :: phiPrime(nrho)

rho positions, iota and phiPrime at these rho positions

logical, intent(in), optional :: relambda_in

DEFAULT=TRUE: lambda is recomputed on the given fourier resolution, RECOMMENDED for exact integrability condition of boozer transform, but slower. FALSE: lambda from equilibrium solution is taken.


Calls

proc~~sfl_boozer_new~~CallsGraph proc~sfl_boozer_new sfl_boozer_new proc~fbase_new fBase_new proc~sfl_boozer_new->proc~fbase_new proc~hmap_new_auxvar hmap_new_auxvar proc~sfl_boozer_new->proc~hmap_new_auxvar __perfoff __perfoff proc~fbase_new->__perfoff __perfon __perfon proc~fbase_new->__perfon proc~fbase_init t_fBase%fBase_init proc~fbase_new->proc~fbase_init pp_t_hmap_auxvar pp_t_hmap_auxvar proc~hmap_new_auxvar->pp_t_hmap_auxvar proc~fbase_alloc fBase_alloc proc~fbase_init->proc~fbase_alloc proc~fbase_test fBase_test proc~fbase_init->proc~fbase_test swrite swrite proc~fbase_init->swrite proc~fbase_test->proc~fbase_init proc~fbase_test->swrite proc~fbase_change_base t_fBase%fBase_change_base proc~fbase_test->proc~fbase_change_base proc~fbase_compare t_fBase%fBase_compare proc~fbase_test->proc~fbase_compare proc~fbase_evaldof_ip_tens t_fBase%fBase_evalDOF_IP_tens proc~fbase_test->proc~fbase_evaldof_ip_tens proc~fbase_evaldof_x t_fBase%fBase_evalDOF_x proc~fbase_test->proc~fbase_evaldof_x proc~fbase_evaldof_xn t_fBase%fBase_evalDOF_xn proc~fbase_test->proc~fbase_evaldof_xn proc~fbase_evaldof_xn_tens t_fBase%fBase_evalDOF_xn_tens proc~fbase_test->proc~fbase_evaldof_xn_tens proc~fbase_initdof t_fBase%fBase_initDOF proc~fbase_test->proc~fbase_initdof proc~fbase_change_base->proc~fbase_compare proc~fbase_evaldof_ip_tens->proc~fbase_evaldof_xn __dgemm_nn __dgemm_nn proc~fbase_evaldof_ip_tens->__dgemm_nn proc~fbase_eval t_fBase%fBase_eval proc~fbase_evaldof_x->proc~fbase_eval __matvec_n __matvec_n proc~fbase_evaldof_xn->__matvec_n proc~fbase_eval_xn t_fBase%fBase_eval_xn proc~fbase_evaldof_xn->proc~fbase_eval_xn proc~fbase_evaldof_xn_tens->__dgemm_nn proc~fbase_eval1d_thet fBase_eval1d_thet proc~fbase_evaldof_xn_tens->proc~fbase_eval1d_thet proc~fbase_eval1d_zeta fBase_eval1d_zeta proc~fbase_evaldof_xn_tens->proc~fbase_eval1d_zeta proc~fbase_projectiptodof_tens t_fBase%fBase_projectIPtoDOF_tens proc~fbase_initdof->proc~fbase_projectiptodof_tens proc~fbase_projectxntodof t_fBase%fBase_projectxntoDOF proc~fbase_initdof->proc~fbase_projectxntodof proc~fbase_eval->proc~fbase_eval_xn __adgemm_tn __adgemm_tn proc~fbase_projectiptodof_tens->__adgemm_tn __dgemm_nt __dgemm_nt proc~fbase_projectiptodof_tens->__dgemm_nt proc~fbase_projectxntodof->proc~fbase_eval_xn __pamatvec_t __pamatvec_t proc~fbase_projectxntodof->__pamatvec_t

Source Code

SUBROUTINE sfl_boozer_new(sf,mn_max,mn_nyq,nfp,sin_cos,hmap_in,nrho,rho_pos,iota,phiPrime,relambda_in)
  ! MODULES
  USE MODgvec_fbase   ,ONLY: fbase_new
  USE MODgvec_hmap,  ONLY: hmap_new_auxvar
  IMPLICIT NONE
  !---------------------------------------------------------------------------------------------------------------------------------
  ! INPUT VARIABLES
  INTEGER,INTENT(IN) :: mn_max(2)  !! maximum Fourier modes in theta and zeta
  INTEGER,INTENT(IN) :: mn_nyq(2)  !! number of equidistant integration points (trapezoidal rule) in m and n
  INTEGER,INTENT(IN) :: nfp        !! number of field periods
  CHARACTER(LEN=8)   :: sin_cos      !! can be either only sine: " _sin_" only cosine: " _cos_" or full: "_sin_cos_"
#ifdef PP_WHICH_HMAP
  TYPE(PP_T_HMAP),INTENT(IN),TARGET :: hmap_in
#else
  CLASS(c_hmap)  ,INTENT(IN),TARGET :: hmap_in
#endif
  INTEGER,INTENT(IN) :: nrho       !! number of rho positions
  REAL(wp),INTENT(IN) :: rho_pos(nrho),iota(nrho),phiPrime(nrho)  !! rho positions, iota and phiPrime at these rho positions
  LOGICAL, INTENT(IN),OPTIONAL :: relambda_in  !! DEFAULT=TRUE: lambda is recomputed on the given fourier resolution, RECOMMENDED
                                   !!   for exact integrability condition of boozer transform, but slower.
                                   !! FALSE: lambda from equilibrium solution is taken.
  ! OUTPUT VARIABLES
  TYPE(t_sfl_boozer), ALLOCATABLE,INTENT(INOUT) :: sf !! self
  !=================================================================================================================================
  ALLOCATE(sf)
  sf%nrho = nrho
  ALLOCATE(sf%rho_pos(nrho),sf%iota(nrho),sf%phiPrime(nrho))
  sf%rho_pos = rho_pos
  IF(ANY((sf%rho_pos.LT.1e-4_wp).OR.(sf%rho_pos.GT. 1.0_wp))) CALL abort(__STAMP__, &
         "sfl_boozer_new: rho_pos must be >1e-4 and <=1.0")
  sf%iota = iota
  sf%phiPrime = phiPrime
  IF(PRESENT(relambda_in)) THEN
    sf%relambda=relambda_in
  ELSE
    sf%relambda = .TRUE. ! default
  END IF
  CALL fbase_new(sf%nu_fbase,mn_max,mn_nyq,nfp,sin_cos,.TRUE.)
  sf%hmap => hmap_in
  CALL hmap_new_auxvar(sf%hmap,sf%nu_fbase%x_IP(2,:),sf%hmap_xv,.TRUE.)
  ALLOCATE(sf%lambda(sf%nu_fbase%modes,nrho),sf%nu(sf%nu_fbase%modes,nrho))
  sf%initialized=.TRUE.
END SUBROUTINE sfl_boozer_new