BuildTransform_SFL Subroutine

private subroutine BuildTransform_SFL(sf, X1_base_in, X2_base_in, LA_base_in, X1_in, X2_in, LA_in)

Uses

  • proc~~buildtransform_sfl~~UsesGraph proc~buildtransform_sfl t_transform_sfl%BuildTransform_SFL module~modgvec_base MODgvec_base proc~buildtransform_sfl->module~modgvec_base module~modgvec_sfl_boozer MODgvec_SFL_Boozer proc~buildtransform_sfl->module~modgvec_sfl_boozer module~modgvec_fbase MODgvec_fBase module~modgvec_base->module~modgvec_fbase module~modgvec_globals MODgvec_Globals module~modgvec_base->module~modgvec_globals module~modgvec_sbase MODgvec_sBase module~modgvec_base->module~modgvec_sbase module~modgvec_sgrid MODgvec_sGrid module~modgvec_base->module~modgvec_sgrid module~modgvec_sfl_boozer->module~modgvec_fbase module~modgvec_sfl_boozer->module~modgvec_globals module~modgvec_hmap MODgvec_hmap module~modgvec_sfl_boozer->module~modgvec_hmap module~modgvec_newton MODgvec_Newton module~modgvec_sfl_boozer->module~modgvec_newton module~modgvec_fbase->module~modgvec_globals iso_fortran_env iso_fortran_env module~modgvec_globals->iso_fortran_env 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_newton->module~modgvec_globals module~modgvec_sbase->module~modgvec_globals module~modgvec_sbase->module~modgvec_sgrid module~sll_m_bsplines sll_m_bsplines module~modgvec_sbase->module~sll_m_bsplines module~sll_m_spline_interpolator_1d sll_m_spline_interpolator_1d module~modgvec_sbase->module~sll_m_spline_interpolator_1d module~sll_m_spline_matrix sll_m_spline_matrix module~modgvec_sbase->module~sll_m_spline_matrix module~modgvec_sgrid->module~modgvec_globals module~modgvec_c_hmap->module~modgvec_globals module~modgvec_hmap_axisnb->module~modgvec_fbase module~modgvec_hmap_axisnb->module~modgvec_globals module~modgvec_hmap_axisnb->module~modgvec_c_hmap module~modgvec_io_netcdf MODgvec_IO_NETCDF module~modgvec_hmap_axisnb->module~modgvec_io_netcdf module~modgvec_hmap_cyl->module~modgvec_globals module~modgvec_hmap_cyl->module~modgvec_c_hmap module~modgvec_hmap_frenet->module~modgvec_globals module~modgvec_hmap_frenet->module~modgvec_c_hmap module~modgvec_hmap_knot->module~modgvec_globals module~modgvec_hmap_knot->module~modgvec_c_hmap module~modgvec_hmap_rz->module~modgvec_globals module~modgvec_hmap_rz->module~modgvec_c_hmap module~sll_m_bsplines_base sll_m_bsplines_base module~sll_m_bsplines->module~sll_m_bsplines_base module~sll_m_bsplines_non_uniform sll_m_bsplines_non_uniform module~sll_m_bsplines->module~sll_m_bsplines_non_uniform module~sll_m_bsplines_uniform sll_m_bsplines_uniform module~sll_m_bsplines->module~sll_m_bsplines_uniform module~sll_m_working_precision sll_m_working_precision module~sll_m_bsplines->module~sll_m_working_precision module~sll_m_spline_interpolator_1d->module~sll_m_spline_matrix module~sll_m_boundary_condition_descriptors sll_m_boundary_condition_descriptors module~sll_m_spline_interpolator_1d->module~sll_m_boundary_condition_descriptors module~sll_m_spline_interpolator_1d->module~sll_m_bsplines_base module~sll_m_spline_1d sll_m_spline_1d module~sll_m_spline_interpolator_1d->module~sll_m_spline_1d module~sll_m_spline_interpolator_1d->module~sll_m_working_precision module~sll_m_spline_matrix_banded sll_m_spline_matrix_banded module~sll_m_spline_matrix->module~sll_m_spline_matrix_banded module~sll_m_spline_matrix_base sll_m_spline_matrix_base module~sll_m_spline_matrix->module~sll_m_spline_matrix_base module~sll_m_spline_matrix_dense sll_m_spline_matrix_dense module~sll_m_spline_matrix->module~sll_m_spline_matrix_dense module~sll_m_spline_matrix->module~sll_m_working_precision module~modgvec_io_netcdf->module~modgvec_globals netcdf netcdf module~modgvec_io_netcdf->netcdf module~sll_m_bsplines_base->module~sll_m_working_precision module~sll_m_bsplines_non_uniform->module~sll_m_bsplines_base module~sll_m_bsplines_non_uniform->module~sll_m_working_precision module~sll_m_bsplines_uniform->module~sll_m_bsplines_base module~sll_m_bsplines_uniform->module~sll_m_working_precision module~sll_m_spline_1d->module~sll_m_bsplines_base module~sll_m_spline_1d->module~sll_m_working_precision module~sll_m_spline_matrix_banded->iso_fortran_env module~sll_m_spline_matrix_banded->module~sll_m_spline_matrix_base module~sll_m_spline_matrix_banded->module~sll_m_working_precision module~sll_m_spline_matrix_base->module~sll_m_working_precision module~sll_m_spline_matrix_dense->iso_fortran_env module~sll_m_spline_matrix_dense->module~sll_m_spline_matrix_base module~sll_m_spline_matrix_dense->module~sll_m_working_precision

Builds X1 and X2 in SFL coordinates

Type Bound

t_transform_sfl

Arguments

Type IntentOptional Attributes Name
class(t_transform_sfl), intent(inout) :: sf

self

class(t_base), intent(in) :: X1_base_in
class(t_base), intent(in) :: X2_base_in
class(t_base), intent(in) :: LA_base_in
real(kind=wp), intent(in) :: X1_in(1:X1_base_in%s%nbase,1:X1_base_in%f%modes)
real(kind=wp), intent(in) :: X2_in(1:X2_base_in%s%nbase,1:X2_base_in%f%modes)
real(kind=wp), intent(in) :: LA_in(1:LA_base_in%s%nbase,1:LA_base_in%f%modes)

Calls

proc~~buildtransform_sfl~~CallsGraph proc~buildtransform_sfl t_transform_sfl%BuildTransform_SFL __perfoff __perfoff proc~buildtransform_sfl->__perfoff __perfon __perfon proc~buildtransform_sfl->__perfon proc~find_pest_angles find_pest_angles proc~buildtransform_sfl->proc~find_pest_angles proc~get_boozer_sinterp t_sfl_boozer%Get_Boozer_sinterp proc~buildtransform_sfl->proc~get_boozer_sinterp proc~sbase_evaldof2d_s t_sBase%sBase_evalDOF2D_s proc~buildtransform_sfl->proc~sbase_evaldof2d_s proc~self_find_boozer_angles t_sfl_boozer%self_find_boozer_angles proc~buildtransform_sfl->proc~self_find_boozer_angles proc~to_spline_with_bc to_spline_with_BC proc~buildtransform_sfl->proc~to_spline_with_bc proc~transform_angles_3d Transform_Angles_3d proc~buildtransform_sfl->proc~transform_angles_3d proc~transform_angles_sinterp Transform_Angles_sinterp proc~buildtransform_sfl->proc~transform_angles_sinterp proc~find_pest_angles->__perfoff proc~find_pest_angles->__perfon interface~progressbar ProgressBar proc~find_pest_angles->interface~progressbar proc~fbase_evaldof_xn t_fBase%fBase_evalDOF_xn proc~find_pest_angles->proc~fbase_evaldof_xn proc~get_pest_newton get_pest_newton proc~find_pest_angles->proc~get_pest_newton swrite swrite proc~find_pest_angles->swrite proc~get_boozer_sinterp->__perfoff proc~get_boozer_sinterp->__perfon proc~get_boozer_sinterp->proc~sbase_evaldof2d_s eval_gij_aux eval_gij_aux proc~get_boozer_sinterp->eval_gij_aux eval_jh_aux eval_jh_aux proc~get_boozer_sinterp->eval_jh_aux proc~get_boozer_sinterp->interface~progressbar proc~fbase_change_base t_fBase%fBase_change_base proc~get_boozer_sinterp->proc~fbase_change_base proc~fbase_evaldof_ip_tens t_fBase%fBase_evalDOF_IP_tens proc~get_boozer_sinterp->proc~fbase_evaldof_ip_tens proc~fbase_new fBase_new proc~get_boozer_sinterp->proc~fbase_new proc~fbase_projectiptodof_tens t_fBase%fBase_projectIPtoDOF_tens proc~get_boozer_sinterp->proc~fbase_projectiptodof_tens proc~lambda_setup_and_solve Lambda_setup_and_solve proc~get_boozer_sinterp->proc~lambda_setup_and_solve proc~get_boozer_sinterp->swrite proc~sbase_evaldof2d_s->__perfoff proc~sbase_evaldof2d_s->__perfon __matvec_t __matvec_t proc~sbase_evaldof2d_s->__matvec_t proc~sbase_eval t_sBase%sBase_eval proc~sbase_evaldof2d_s->proc~sbase_eval proc~find_boozer_angles find_boozer_angles proc~self_find_boozer_angles->proc~find_boozer_angles proc~sbase_applybctodof_lgm t_sBase%sBase_applyBCtoDOF_LGM proc~to_spline_with_bc->proc~sbase_applybctodof_lgm proc~sbase_initdof t_sBase%sBase_initDOF proc~to_spline_with_bc->proc~sbase_initdof proc~transform_angles_3d->__perfoff proc~transform_angles_3d->__perfon proc~transform_angles_3d->proc~sbase_evaldof2d_s proc~transform_angles_3d->proc~to_spline_with_bc proc~transform_angles_3d->interface~progressbar proc~transform_angles_3d->proc~fbase_evaldof_xn proc~fbase_initdof t_fBase%fBase_initDOF proc~transform_angles_3d->proc~fbase_initdof proc~transform_angles_3d->swrite proc~transform_angles_sinterp->__perfoff proc~transform_angles_sinterp->__perfon proc~transform_angles_sinterp->proc~sbase_evaldof2d_s proc~transform_angles_sinterp->proc~to_spline_with_bc __matvec_n __matvec_n proc~transform_angles_sinterp->__matvec_n proc~transform_angles_sinterp->__matvec_t proc~transform_angles_sinterp->interface~progressbar proc~fbase_eval t_fBase%fBase_eval proc~transform_angles_sinterp->proc~fbase_eval proc~transform_angles_sinterp->proc~fbase_evaldof_ip_tens proc~transform_angles_sinterp->proc~fbase_new proc~transform_angles_sinterp->swrite interface~progressbar->interface~progressbar proc~fbase_compare t_fBase%fBase_compare proc~fbase_change_base->proc~fbase_compare proc~fbase_eval_xn t_fBase%fBase_eval_xn proc~fbase_eval->proc~fbase_eval_xn proc~fbase_evaldof_ip_tens->proc~fbase_evaldof_xn __dgemm_nn __dgemm_nn proc~fbase_evaldof_ip_tens->__dgemm_nn proc~fbase_evaldof_xn->__matvec_n proc~fbase_evaldof_xn->proc~fbase_eval_xn proc~fbase_initdof->proc~fbase_projectiptodof_tens proc~fbase_projectxntodof t_fBase%fBase_projectxntoDOF proc~fbase_initdof->proc~fbase_projectxntodof proc~fbase_new->__perfoff proc~fbase_new->__perfon proc~fbase_init t_fBase%fBase_init proc~fbase_new->proc~fbase_init __adgemm_tn __adgemm_tn proc~fbase_projectiptodof_tens->__adgemm_tn __dgemm_nt __dgemm_nt proc~fbase_projectiptodof_tens->__dgemm_nt proc~find_boozer_angles->__perfoff proc~find_boozer_angles->__perfon proc~find_boozer_angles->interface~progressbar proc~find_boozer_angles->proc~fbase_evaldof_xn proc~find_boozer_angles->swrite proc~get_booz_newton get_booz_newton proc~find_boozer_angles->proc~get_booz_newton interface~newtonroot1d_fdf NewtonRoot1D_FdF proc~get_pest_newton->interface~newtonroot1d_fdf proc~lambda_setup_and_solve->__perfoff proc~lambda_setup_and_solve->__perfon proc~lambda_setup_and_solve->proc~fbase_projectiptodof_tens proc~solve SOLVE proc~lambda_setup_and_solve->proc~solve proc~sbase_applybctodof_lgm->proc~solve eval_basis eval_basis proc~sbase_eval->eval_basis eval_basis_and_n_derivs eval_basis_and_n_derivs proc~sbase_eval->eval_basis_and_n_derivs lagrangeinterpolationpolys lagrangeinterpolationpolys proc~sbase_eval->lagrangeinterpolationpolys proc~sgrid_find_elem t_sGrid%sGrid_find_elem proc~sbase_eval->proc~sgrid_find_elem compute_interpolant compute_interpolant proc~sbase_initdof->compute_interpolant interface~newtonroot1d_fdf->interface~newtonroot1d_fdf proc~fbase_init->swrite proc~fbase_alloc fBase_alloc proc~fbase_init->proc~fbase_alloc proc~fbase_test fBase_test proc~fbase_init->proc~fbase_test proc~fbase_projectxntodof->proc~fbase_eval_xn __pamatvec_t __pamatvec_t proc~fbase_projectxntodof->__pamatvec_t interface~newtonroot2d NewtonRoot2D proc~get_booz_newton->interface~newtonroot2d dgetrf dgetrf proc~solve->dgetrf dgetrs dgetrs proc~solve->dgetrs interface~newtonroot2d->interface~newtonroot2d proc~fbase_test->proc~fbase_change_base proc~fbase_test->proc~fbase_evaldof_ip_tens proc~fbase_test->proc~fbase_evaldof_xn proc~fbase_test->proc~fbase_initdof proc~fbase_test->swrite proc~fbase_test->proc~fbase_compare proc~fbase_test->proc~fbase_init proc~fbase_evaldof_x t_fBase%fBase_evalDOF_x proc~fbase_test->proc~fbase_evaldof_x proc~fbase_evaldof_xn_tens t_fBase%fBase_evalDOF_xn_tens proc~fbase_test->proc~fbase_evaldof_xn_tens proc~fbase_evaldof_x->proc~fbase_eval 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

Source Code

SUBROUTINE BuildTransform_SFL(sf,X1_base_in,X2_base_in,LA_base_in,X1_in,X2_in,LA_in)
! MODULES
USE MODgvec_base   ,ONLY: t_base,base_new
USE MODgvec_SFL_Boozer,ONLY: find_boozer_Angles
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------

! INPUT VARIABLES
  CLASS(t_base),INTENT(IN) :: X1_base_in,X2_base_in,LA_base_in           !< base classes belong to solution U_in
  REAL(wp),INTENT(IN)      :: X1_in(1:X1_base_in%s%nbase,1:X1_base_in%f%modes)
  REAL(wp),INTENT(IN)      :: X2_in(1:X2_base_in%s%nbase,1:X2_base_in%f%modes)
  REAL(wp),INTENT(IN)      :: LA_in(1:LA_base_in%s%nbase,1:LA_base_in%f%modes)
!-----------------------------------------------------------------------------------------------------------------------------------
! OUTPUT VARIABLES
  CLASS(t_transform_sfl), INTENT(INOUT) :: sf !! self
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
  INTEGER :: irho,nrho,mnIP
  REAL(wp),ALLOCATABLE :: Gt_rho(:,:),thetzeta_trafo(:,:,:)
  REAL(wp):: spos
!===================================================================================================================================
__PERFON('BuildTransform_SFL')
nrho = sf%X1sfl_base%s%nBase
mnIP = sf%X1sfl_base%f%mn_IP
ALLOCATE(thetzeta_trafo(2,mnIP,nrho))
SELECT CASE(sf%whichSFLcoord)
CASE(1) !PEST
  !interpolate lambda at rho positions (for find_pest_angles)

  SELECT CASE(sf%to_angle_method)
  CASE(1)
    ALLOCATE(Gt_rho(LA_base_in%f%modes,nrho))
    DO irho=1,nrho
      spos=MIN(MAX(1.0e-4_wp,sf%X1sfl_base%s%s_IP(irho)),1.0_wp-1.0e-12_wp)
      Gt_rho(:,irho)=LA_base_in%s%evalDOF2D_s(spos,LA_base_in%f%modes,0,LA_in(:,:))
    END DO
    CALL find_pest_angles(nrho,LA_base_in%f,Gt_rho,sf%X1sfl_base%f%mn_IP,sf%X1sfl_base%f%x_IP,thetzeta_trafo)
    DEALLOCATE(Gt_rho)
    CALL transform_Angles_3d(X1_base_in,X1_in,"X1sfl",sf%X1sfl_base,sf%X1sfl,thetzeta_trafo)
    CALL transform_Angles_3d(X2_base_in,X2_in,"X2sfl",sf%X2sfl_base,sf%X2sfl,thetzeta_trafo)
  CASE(2)
    CALL Transform_Angles_sinterp(LA_base_in,LA_in,X1_base_in,X1_in,"X1",sf%X1sfl_base,sf%X1sfl)
    CALL Transform_Angles_sinterp(LA_base_in,LA_in,X2_base_in,X2_in,"X2",sf%X2sfl_base,sf%X2sfl)
  END SELECT
CASE(2) !BOOZER
  CALL sf%booz%Get_Boozer(X1_base_in,X2_base_in,LA_base_in,X1_in,X2_in,LA_in) ! fill sf%booz%lambda,sf%booz%nu for find_angles
  ALLOCATE(Gt_rho(sf%GZ_base%f%modes,nrho))
  DO irho=1,nrho
    Gt_rho(:,irho)=sf%booz%lambda(:,irho)+sf%booz%iota(irho)*sf%booz%nu(:,irho)
  END DO
  CALL to_spline_with_BC(sf%GZ_base,Gt_rho,sf%Gthet)
  CALL to_spline_with_BC(sf%GZ_base,sf%booz%nu,sf%GZ)
  DEALLOCATE(Gt_rho)
  SELECT CASE(sf%to_angle_method)
  CASE(1)
    CALL sf%booz%find_angles(sf%X1sfl_base%f%mn_IP,sf%X1sfl_base%f%x_IP, thetzeta_trafo)
    CALL transform_Angles_3d(X1_base_in,X1_in   ,"X1sfl",sf%X1sfl_base,sf%X1sfl,thetzeta_trafo)
    CALL transform_Angles_3d(X2_base_in,X2_in   ,"X2sfl",sf%X2sfl_base,sf%X2sfl,thetzeta_trafo)
    CALL Transform_Angles_3d(sf%GZ_base,sf%Gthet,"Gtsfl",sf%GZsfl_base,sf%Gtsfl,thetzeta_trafo)
    CALL Transform_Angles_3d(sf%GZ_base,sf%GZ   ,"GZsfl",sf%GZsfl_base,sf%GZsfl,thetzeta_trafo)
  CASE(2)
    CALL Transform_Angles_sinterp(sf%GZ_base,sf%Gthet,sf%GZ_base,sf%GZ,"GZ",sf%GZsfl_base,sf%GZsfl,B_in=sf%GZ)
    CALL Transform_Angles_sinterp(sf%GZ_base,sf%Gthet,sf%GZ_base,sf%Gthet,"Gt",sf%Gzsfl_base,sf%Gtsfl,B_in=sf%GZ)
    CALL Transform_Angles_sinterp(sf%GZ_base,sf%Gthet,X1_base_in,X1_in,"X1",sf%X1sfl_base,sf%X1sfl,B_in=sf%GZ)
    CALL Transform_Angles_sinterp(sf%GZ_base,sf%Gthet,X2_base_in,X2_in,"X2",sf%X2sfl_base,sf%X2sfl,B_in=sf%GZ)
  END SELECT

END SELECT

DEALLOCATE(thetzeta_trafo)
__PERFOFF('BuildTransform_SFL')
END SUBROUTINE BuildTransform_SFL