sBase_eval Subroutine

private subroutine sBase_eval(sf, x, deriv, iElem, base_x)

Uses

  • proc~~sbase_eval~~UsesGraph proc~sbase_eval t_sBase%sBase_eval module~modgvec_basis1d MODgvec_Basis1D proc~sbase_eval->module~modgvec_basis1d module~modgvec_globals MODgvec_Globals module~modgvec_basis1d->module~modgvec_globals iso_fortran_env iso_fortran_env module~modgvec_globals->iso_fortran_env

evaluate sbase at position x [0,1], NOT EFFICIENT!!

Type Bound

t_sBase

Arguments

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

self

real(kind=wp), intent(in) :: x

position [0,1] where to evaluate

integer, intent(in) :: deriv
integer, intent(out) :: iElem
real(kind=wp), intent(out) :: base_x(:)

all basis functions (0:deg) evaluated


Calls

proc~~sbase_eval~~CallsGraph proc~sbase_eval t_sBase%sBase_eval 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

Called by

proc~~sbase_eval~~CalledByGraph proc~sbase_eval t_sBase%sBase_eval proc~sbase_evaldof2d_s t_sBase%sBase_evalDOF2D_s proc~sbase_evaldof2d_s->proc~sbase_eval proc~sbase_evaldof_s t_sBase%sBase_evalDOF_s proc~sbase_evaldof_s->proc~sbase_eval proc~sbase_test sBase_test proc~sbase_test->proc~sbase_eval proc~sbase_test->proc~sbase_evaldof_s proc~sbase_new sBase_new proc~sbase_test->proc~sbase_new proc~base_evaldof_x t_base%base_evalDOF_x proc~base_evaldof_x->proc~sbase_evaldof_s proc~buildtransform_sfl t_transform_sfl%BuildTransform_SFL proc~buildtransform_sfl->proc~sbase_evaldof2d_s proc~get_boozer_sinterp t_sfl_boozer%Get_Boozer_sinterp proc~buildtransform_sfl->proc~get_boozer_sinterp 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~eval_prof_r eval_prof_r proc~eval_prof_r->proc~sbase_evaldof_s proc~evaluate_base_list_stz_all evaluate_base_list_stz_all proc~evaluate_base_list_stz_all->proc~sbase_evaldof2d_s proc~evaluate_base_list_tz evaluate_base_list_tz proc~evaluate_base_list_tz->proc~sbase_evaldof2d_s proc~evaluate_base_list_tz_all evaluate_base_list_tz_all proc~evaluate_base_list_tz_all->proc~sbase_evaldof2d_s proc~evaluate_base_tens evaluate_base_tens proc~evaluate_base_tens->proc~sbase_evaldof2d_s proc~evaluate_base_tens_all evaluate_base_tens_all proc~evaluate_base_tens_all->proc~sbase_evaldof2d_s proc~find_pest_angles_2d find_pest_angles_2D proc~find_pest_angles_2d->proc~sbase_evaldof2d_s proc~get_boozer_sinterp->proc~sbase_evaldof2d_s proc~get_field Get_Field proc~get_field->proc~sbase_evaldof2d_s proc~get_field->proc~sbase_evaldof_s proc~gvec_to_jorek_prepare gvec_to_jorek_prepare proc~gvec_to_jorek_prepare->proc~sbase_evaldof2d_s proc~gvec_to_jorek_prepare->proc~sbase_evaldof_s proc~gvec_to_jorek_prepare->proc~get_field proc~lambda_solve Lambda_solve proc~lambda_solve->proc~sbase_evaldof_s proc~readstatefilefromascii ReadStateFileFromASCII proc~readstatefilefromascii->proc~sbase_evaldof_s proc~readstatefilefromascii->proc~sbase_new proc~base_new Base_new proc~readstatefilefromascii->proc~base_new proc~sbase_init t_sBase%sBase_init proc~sbase_init->proc~sbase_test proc~transform_angles_3d->proc~sbase_evaldof2d_s proc~transform_angles_sinterp->proc~sbase_evaldof2d_s interface~readstate ReadState interface~readstate->proc~readstatefilefromascii proc~eval_iota_r eval_iota_r proc~eval_iota_r->proc~eval_prof_r proc~eval_phi_r eval_phi_r proc~eval_phi_r->proc~eval_prof_r proc~eval_phiprime_r eval_phiPrime_r proc~eval_phiprime_r->proc~eval_prof_r proc~eval_pres_r eval_pres_r proc~eval_pres_r->proc~eval_prof_r proc~get_boozer get_boozer proc~get_boozer->proc~get_boozer_sinterp proc~init_la_from_solution Init_LA_from_Solution proc~init_la_from_solution->proc~lambda_solve proc~sbase_copy t_sBase%sBase_copy proc~sbase_copy->proc~sbase_init proc~sbase_new->proc~sbase_init proc~base_copy t_base%base_copy proc~base_copy->proc~sbase_copy proc~base_new->proc~sbase_new proc~init_gvec_to_jorek init_gvec_to_jorek proc~init_gvec_to_jorek->interface~readstate proc~init_base Init_Base proc~init_gvec_to_jorek->proc~init_base proc~initsolutionmhd3d t_functional_mhd3d%InitSolutionMHD3D proc~initsolutionmhd3d->proc~init_la_from_solution proc~restartfromstate RestartFromState proc~restartfromstate->interface~readstate proc~init_base->proc~base_new proc~initmhd3d t_functional_mhd3d%InitMHD3D proc~initmhd3d->proc~base_new proc~initsolution~2 InitSolution proc~initsolution~2->proc~initsolutionmhd3d proc~rungvec rungvec proc~rungvec->proc~initsolutionmhd3d proc~rungvec->proc~initmhd3d proc~transform_sfl_init t_transform_sfl%transform_SFL_init proc~transform_sfl_init->proc~base_new proc~init Init proc~init->proc~initmhd3d proc~start_rungvec start_rungvec proc~start_rungvec->proc~rungvec proc~transform_sfl_new transform_sfl_new proc~transform_sfl_new->proc~transform_sfl_init program~gvec GVEC program~gvec->proc~rungvec program~gvec_post GVEC_POST program~gvec_post->proc~initmhd3d

Source Code

SUBROUTINE sBase_eval( sf , x,deriv,iElem,base_x)
! MODULES
USE MODgvec_Basis1D, ONLY:LagrangeInterpolationPolys
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
! INPUT VARIABLES
  CLASS(t_sbase), INTENT(IN   ) :: sf    !! self
  REAL(wp)      , INTENT(IN   ) :: x     !! position [0,1] where to evaluate
  INTEGER       , INTENT(IN   ) :: deriv !! 0: evaluation,1: 1st derivative
!-----------------------------------------------------------------------------------------------------------------------------------
! OUTPUT VARIABLES
  INTEGER       , INTENT(  OUT) :: iElem
  REAL(wp)      , INTENT(  OUT) :: base_x(:)  !! all basis functions (0:deg) evaluated
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
  INTEGER :: ideriv
  REAL(wp):: xiloc,baseloc(0:sf%deg,0:sf%deg)
!===================================================================================================================================
SELECT TYPE(sf)
TYPE IS(t_sbase_disc)
  iElem=sf%grid%find_elem(x)
  xiloc  =(x-sf%grid%sp(iElem-1))*2.0_wp/sf%grid%ds(iElem)-1.0_wp !in [-1,1]

  IF(deriv.EQ.0)THEN
    CALL LagrangeInterpolationPolys(xiloc,sf%deg,sf%xiIP,sf%wBaryIP,base_x(:))
  ELSEIF(deriv.GT.sf%deg) THEN
    base_x=0.0_wp
  ELSE
    CALL LagrangeInterpolationPolys(xiloc,sf%deg,sf%xiIP,sf%wBaryIP,baseloc(:,0))
    DO ideriv=1,deriv
      baseloc(:,ideriv)=MATMUL(TRANSPOSE(sf%DmatIP),baseloc(:,ideriv-1))*(2.0_wp/sf%grid%ds(iElem))
    END DO
    base_x=baseloc(:,deriv)
  END IF!deriv
TYPE IS(t_sbase_spl)
  IF(deriv.EQ.0)THEN
    CALL sf%bspl%eval_basis(x,base_x(:),iElem)
  ELSEIF(deriv.GT.sf%deg) THEN
    iElem=sf%grid%find_elem(x)
    base_x=0.0_wp
  ELSE
    CALL sf%bspl%eval_basis_and_n_derivs(x,deriv,baseloc(0:deriv,:),iElem)
    base_x=baseloc(deriv,:)
  END IF

  IF(iElem.EQ.-1)CALL abort(__STAMP__,&
                            'PROBLEM, iElem not found in spline eval (sbase_eval)...')
CLASS DEFAULT
  CALL abort(__STAMP__, &
    "this type of continuity not implemented!")
END SELECT !TYPE

END SUBROUTINE sbase_eval