in_plasma Subroutine

public subroutine in_plasma(xyz, inp, input_coords, coeffs, uvw_out)

Indicator subroutine to determine if a position is in a region where the plasma parameter and fields are valid/known

Arguments

Type IntentOptional AttributesName
real(kind=Float64), intent(in), dimension(3):: xyz

Position in beam coordinates

logical, intent(out) :: inp

Indicates whether plasma parameters and fields are valid/known

integer, intent(in), optional :: input_coords

Indicates coordinate system of xyz. Beam grid (0), machine (1) and cylindrical (2)

type(InterpolCoeffs3D), intent(out), optional :: coeffs

Interpolation coefficients used in calculation

real(kind=Float64), intent(out), optional dimension(3):: uvw_out

Position in machine coordinates


Calls

proc~~in_plasma~~CallsGraph proc~in_plasma in_plasma proc~cyl_to_uvw cyl_to_uvw proc~in_plasma->proc~cyl_to_uvw interface~interpol_coeff interpol_coeff proc~in_plasma->interface~interpol_coeff proc~xyz_to_uvw xyz_to_uvw proc~in_plasma->proc~xyz_to_uvw proc~cyl_interpol3d_coeff cyl_interpol3D_coeff interface~interpol_coeff->proc~cyl_interpol3d_coeff proc~interpol1d_coeff interpol1D_coeff interface~interpol_coeff->proc~interpol1d_coeff proc~interpol2d_coeff_arr interpol2D_coeff_arr interface~interpol_coeff->proc~interpol2d_coeff_arr proc~interpol2d_coeff interpol2D_coeff interface~interpol_coeff->proc~interpol2d_coeff proc~cyl_interpol3d_coeff_arr cyl_interpol3D_coeff_arr interface~interpol_coeff->proc~cyl_interpol3d_coeff_arr proc~interpol1d_coeff_arr interpol1D_coeff_arr interface~interpol_coeff->proc~interpol1d_coeff_arr proc~cyl_interpol3d_coeff->proc~interpol2d_coeff proc~interpol2d_coeff_arr->proc~interpol2d_coeff proc~cyl_interpol3d_coeff_arr->proc~cyl_interpol3d_coeff proc~cyl_interpol3d_coeff_arr->proc~interpol2d_coeff proc~interpol1d_coeff_arr->proc~interpol1d_coeff

Called by

proc~~in_plasma~~CalledByGraph proc~in_plasma in_plasma proc~get_fields get_fields proc~get_fields->proc~in_plasma proc~make_beam_grid make_beam_grid proc~make_beam_grid->proc~in_plasma proc~track_cylindrical track_cylindrical proc~track_cylindrical->proc~in_plasma proc~track_cylindrical->proc~get_fields proc~mc_nbi mc_nbi proc~mc_nbi->proc~in_plasma proc~fida_weights_los fida_weights_los proc~fida_weights_los->proc~in_plasma proc~fida_weights_los->proc~get_fields proc~get_plasma get_plasma proc~fida_weights_los->proc~get_plasma proc~track track proc~fida_weights_los->proc~track proc~read_mc read_mc proc~read_mc->proc~in_plasma proc~get_plasma->proc~in_plasma proc~dcx_spec dcx_spec proc~dcx_spec->proc~in_plasma proc~dcx_spec->proc~get_plasma proc~store_photons store_photons proc~dcx_spec->proc~store_photons proc~track->proc~in_plasma proc~track->proc~get_fields proc~halo_spec halo_spec proc~halo_spec->proc~in_plasma proc~halo_spec->proc~get_plasma proc~halo_spec->proc~store_photons proc~nbi_spec nbi_spec proc~nbi_spec->proc~in_plasma proc~nbi_spec->proc~store_photons proc~get_plasma_extrema get_plasma_extrema proc~get_plasma_extrema->proc~in_plasma proc~pnpa_f pnpa_f proc~pnpa_f->proc~get_plasma proc~mc_fastion_pass_grid mc_fastion_pass_grid proc~pnpa_f->proc~mc_fastion_pass_grid proc~attenuate attenuate proc~pnpa_f->proc~attenuate proc~store_npa store_npa proc~pnpa_f->proc~store_npa proc~bremsstrahlung bremsstrahlung proc~bremsstrahlung->proc~get_plasma proc~read_distribution read_distribution proc~read_distribution->proc~read_mc proc~mc_fastion_pass_grid->proc~get_fields proc~attenuate->proc~get_plasma proc~ndmc ndmc proc~ndmc->proc~get_fields proc~ndmc->proc~mc_nbi proc~ndmc->proc~track program~fidasim fidasim program~fidasim->proc~make_beam_grid program~fidasim->proc~fida_weights_los program~fidasim->proc~dcx_spec program~fidasim->proc~halo_spec program~fidasim->proc~nbi_spec program~fidasim->proc~pnpa_f program~fidasim->proc~bremsstrahlung program~fidasim->proc~read_distribution program~fidasim->proc~ndmc proc~pfida_f pfida_f program~fidasim->proc~pfida_f proc~fida_mc fida_mc program~fidasim->proc~fida_mc proc~pnpa_mc pnpa_mc program~fidasim->proc~pnpa_mc proc~halo halo program~fidasim->proc~halo proc~pfida_mc pfida_mc program~fidasim->proc~pfida_mc proc~dcx dcx program~fidasim->proc~dcx proc~npa_weights npa_weights program~fidasim->proc~npa_weights proc~fida_f fida_f program~fidasim->proc~fida_f proc~neutron_mc neutron_mc program~fidasim->proc~neutron_mc proc~npa_f npa_f program~fidasim->proc~npa_f proc~npa_mc npa_mc program~fidasim->proc~npa_mc proc~fida_weights_mc fida_weights_mc program~fidasim->proc~fida_weights_mc proc~cold_spec cold_spec program~fidasim->proc~cold_spec proc~make_diagnostic_grids make_diagnostic_grids program~fidasim->proc~make_diagnostic_grids proc~neutron_f neutron_f program~fidasim->proc~neutron_f proc~pfida_f->proc~track_cylindrical proc~pfida_f->proc~get_plasma proc~pfida_f->proc~mc_fastion_pass_grid proc~fida_mc->proc~get_fields proc~fida_mc->proc~track proc~store_photons->proc~get_fields proc~pnpa_mc->proc~get_fields proc~pnpa_mc->proc~get_plasma proc~pnpa_mc->proc~attenuate proc~pnpa_mc->proc~store_npa proc~halo->proc~get_plasma proc~halo->proc~track proc~mc_halo mc_halo proc~halo->proc~mc_halo proc~pfida_mc->proc~get_fields proc~pfida_mc->proc~track_cylindrical proc~pfida_mc->proc~get_plasma proc~dcx->proc~get_plasma proc~dcx->proc~track proc~dcx->proc~mc_halo proc~store_npa->proc~get_fields proc~npa_weights->proc~get_fields proc~npa_weights->proc~attenuate proc~get_beam_cx_rate get_beam_cx_rate proc~npa_weights->proc~get_beam_cx_rate proc~fida_f->proc~get_plasma proc~fida_f->proc~track proc~mc_fastion mc_fastion proc~fida_f->proc~mc_fastion proc~neutron_mc->proc~get_fields proc~neutron_mc->proc~get_plasma proc~mc_halo->proc~get_plasma proc~npa_f->proc~get_plasma proc~npa_f->proc~attenuate proc~npa_f->proc~store_npa proc~npa_f->proc~get_beam_cx_rate proc~npa_f->proc~mc_fastion proc~npa_mc->proc~get_fields proc~npa_mc->proc~attenuate proc~npa_mc->proc~store_npa proc~npa_mc->proc~get_beam_cx_rate proc~get_beam_cx_rate->proc~get_plasma proc~store_fw_photons store_fw_photons proc~store_fw_photons->proc~get_fields proc~fida_weights_mc->proc~get_fields proc~fida_weights_mc->proc~get_plasma proc~fida_weights_mc->proc~track proc~cold_spec->proc~get_plasma proc~cold_spec->proc~store_photons proc~make_diagnostic_grids->proc~get_fields proc~make_diagnostic_grids->proc~track_cylindrical proc~make_diagnostic_grids->proc~track proc~make_passive_grid make_passive_grid proc~make_diagnostic_grids->proc~make_passive_grid proc~neutron_f->proc~get_fields proc~neutron_f->proc~get_plasma proc~make_passive_grid->proc~get_plasma_extrema proc~mc_fastion->proc~get_fields proc~store_bes_photons store_bes_photons proc~store_bes_photons->proc~store_photons proc~store_fida_photons store_fida_photons proc~store_fida_photons->proc~store_photons

Contents

Source Code


Source Code

subroutine in_plasma(xyz, inp, input_coords, coeffs, uvw_out)
    !+ Indicator subroutine to determine if a position is in a region where
    !+ the plasma parameter and fields are valid/known
    real(Float64), dimension(3), intent(in) :: xyz
        !+ Position in beam coordinates
    logical, intent(out)                    :: inp
        !+ Indicates whether plasma parameters and fields are valid/known
    integer, intent(in), optional           :: input_coords
        !+ Indicates coordinate system of xyz. Beam grid (0), machine (1) and cylindrical (2)
    type(InterpolCoeffs3D), intent(out), optional      :: coeffs
        !+ Interpolation coefficients used in calculation
    real(Float64), dimension(3), intent(out), optional :: uvw_out
        !+ Position in machine coordinates

    real(Float64), dimension(3) :: uvw
    type(InterpolCoeffs3D) :: b
    real(Float64) :: R, W, mask
    real(Float64) :: phi
    integer :: i, j, k, k2, err, ics

    err = 1

    if(present(input_coords)) then
        ics = input_coords
    else
        ics = 0
    endif

    if(ics.eq.0) then
        call xyz_to_uvw(xyz,uvw)
    endif
    if(ics.eq.1) then
        uvw = xyz
    endif
    if(ics.eq.2) then
        call cyl_to_uvw(xyz,uvw)
    endif

    R = sqrt(uvw(1)*uvw(1) + uvw(2)*uvw(2))
    W = uvw(3)
    phi = atan2(uvw(2),uvw(1))
    !! Interpolate mask value
    call interpol_coeff(inter_grid%r, inter_grid%z, inter_grid%phi, R, W, phi, b, err)

    inp = .False.
    if(err.eq.0) then
        i = b%i
        j = b%j
        k = b%k
        if(inter_grid%nphi .eq. 1) then
            k2 = min(k+1,inter_grid%nphi)
        else
            k2 = k+1
        endif
        mask = b%b111*equil%mask(i,j,k)     + b%b112*equil%mask(i,j,k2) +   &
               b%b121*equil%mask(i,j+1,k)   + b%b122*equil%mask(i,j+1,k2) + &
               b%b211*equil%mask(i+1,j,k)   + b%b212*equil%mask(i+1,j,k2) + &
               b%b221*equil%mask(i+1,j+1,k) + b%b222*equil%mask(i+1,j+1,k2)

        if((mask.ge.0.5).and.(err.eq.0)) then
            inp = .True.
        endif
    endif


    if(present(coeffs)) coeffs = b
    if(present(uvw_out)) uvw_out = uvw

end subroutine in_plasma