rProfile_eval_at_rho Function

public function rProfile_eval_at_rho(sf, rho, deriv) result(derivative)

evaluate the n-th derivative of a radial profile with respect to rho ~sqrt(magnetic flux). NOTE: n has to be in [0,4] due to an explicit implementation of the product rule.

Type Bound

c_rProfile

Arguments

Type IntentOptional Attributes Name
class(c_rProfile) :: sf

self

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

rho position rho ~sqrt(magnetic flux)

integer, intent(in), optional :: deriv

derivative in rho

Return Value real(kind=wp)

n-th derivative of a radial profile with respect to rho ~sqrt(magnetic flux).


Calls

proc~~rprofile_eval_at_rho~~CallsGraph proc~rprofile_eval_at_rho c_rProfile%rProfile_eval_at_rho eval_at_rho2 eval_at_rho2 proc~rprofile_eval_at_rho->eval_at_rho2 proc~rho2_derivative rho2_derivative proc~rprofile_eval_at_rho->proc~rho2_derivative proc~rprofile_drho2 c_rProfile%rProfile_drho2 proc~rprofile_eval_at_rho->proc~rprofile_drho2 proc~rprofile_drho3 c_rProfile%rProfile_drho3 proc~rprofile_eval_at_rho->proc~rprofile_drho3 proc~rprofile_drho4 c_rProfile%rProfile_drho4 proc~rprofile_eval_at_rho->proc~rprofile_drho4 proc~poly_derivative_prefactor poly_derivative_prefactor proc~rho2_derivative->proc~poly_derivative_prefactor proc~rprofile_drho2->eval_at_rho2 proc~rprofile_drho2->proc~rho2_derivative proc~rprofile_drho3->eval_at_rho2 proc~rprofile_drho3->proc~rho2_derivative proc~rprofile_drho4->eval_at_rho2 proc~rprofile_drho4->proc~rho2_derivative

Called by

proc~~rprofile_eval_at_rho~~CalledByGraph proc~rprofile_eval_at_rho c_rProfile%rProfile_eval_at_rho proc~evaluate_profile evaluate_profile proc~evaluate_profile->proc~rprofile_eval_at_rho proc~init_boozer init_boozer proc~init_boozer->proc~rprofile_eval_at_rho proc~init_la_from_solution Init_LA_from_Solution proc~init_la_from_solution->proc~rprofile_eval_at_rho proc~initprofilesgp InitProfilesGP proc~initprofilesgp->proc~rprofile_eval_at_rho proc~initvmec InitVMEC proc~initvmec->proc~rprofile_eval_at_rho proc~vmec1d_visu VMEC1D_visu proc~vmec1d_visu->proc~rprofile_eval_at_rho proc~writestatetoascii WriteStateToASCII proc~writestatetoascii->proc~rprofile_eval_at_rho interface~writestate WriteState interface~writestate->proc~writestatetoascii proc~analyze Analyze proc~analyze->proc~vmec1d_visu proc~initsolutionmhd3d t_functional_mhd3d%InitSolutionMHD3D proc~initsolutionmhd3d->proc~init_la_from_solution proc~initsolutionmhd3d->proc~initprofilesgp proc~initsolutionmhd3d->interface~writestate program~gvec_post GVEC_POST program~gvec_post->proc~initprofilesgp proc~minimizemhd3d_descent MinimizeMHD3D_descent proc~minimizemhd3d_descent->interface~writestate proc~minimizemhd3d t_functional_mhd3d%MinimizeMHD3D proc~minimizemhd3d->proc~minimizemhd3d_descent

Source Code

  FUNCTION rProfile_eval_at_rho(sf, rho, deriv) RESULT(derivative)
  ! MODULES
  !-----------------------------------------------------------------------------------------------------------------------------------
  ! INPUT VARIABLES
    CLASS(c_rProfile)  :: sf !! self
    REAL(wp), INTENT(IN) :: rho                !! rho position rho ~sqrt(magnetic flux)
    INTEGER,  OPTIONAL, INTENT(IN)   :: deriv  !! derivative in rho
  !-----------------------------------------------------------------------------------------------------------------------------------
  ! OUTPUT VARIABLES
    REAL(wp) :: derivative  !! n-th derivative of a radial profile with respect to rho ~sqrt(magnetic flux).
  !-----------------------------------------------------------------------------------------------------------------------------------
  ! LOCAL VARIABLES
    INTEGER :: deriv_case
    REAL(wp) :: rho2
  !===================================================================================================================================
    IF (PRESENT(deriv)) THEN
        deriv_case = deriv
    ELSE
        deriv_case = 0
    END IF

    rho2 = rho2_derivative(rho,deriv=0)
    SELECT CASE(deriv_case)
    CASE(0)
        derivative = sf%eval_at_rho2(rho2, deriv=0)
    CASE(1)
        derivative = sf%eval_at_rho2(rho2,deriv=1)*rho2_derivative(rho,deriv=1)
    CASE(2)
        derivative = sf%rProfile_drho2(rho)
    CASE(3)
        derivative = sf%rProfile_drho3(rho)
    CASE(4)
        derivative = sf%rProfile_drho4(rho)
    CASE DEFAULT
        CALL abort(__STAMP__,&
            "error in rprofile: derivatives higher than 4 with respect to rho=sqrt(phi/phi_edge) are not implemented!")
    END SELECT
  END FUNCTION rProfile_eval_at_rho