check_if_in_profiles_domain_p Subroutine

private subroutine check_if_in_profiles_domain_p(pchunk, Y_R, Y_PHI, Y_Z, flag)

Arguments

Type IntentOptional AttributesName
integer, intent(in) :: pchunk
real(kind=rp), intent(in), DIMENSION(pchunk):: Y_R
real(kind=rp), intent(in), DIMENSION(pchunk):: Y_PHI
real(kind=rp), intent(in), DIMENSION(pchunk):: Y_Z
integer(kind=is), intent(inout), DIMENSION(pchunk):: flag

Flag that determines whether particles are followed in the simulation (flag=1), or not (flag=0).


Called by

proc~~check_if_in_profiles_domain_p~~CalledByGraph proc~check_if_in_profiles_domain_p check_if_in_profiles_domain_p proc~interp_collision_p interp_collision_p proc~interp_collision_p->proc~check_if_in_profiles_domain_p proc~interp_focollision_p interp_FOcollision_p proc~interp_focollision_p->proc~check_if_in_profiles_domain_p proc~interp_nre interp_nRE proc~interp_nre->proc~check_if_in_profiles_domain_p proc~interp_hcollision_p interp_Hcollision_p proc~interp_hcollision_p->proc~check_if_in_profiles_domain_p proc~gceom1_p GCEoM1_p proc~gceom1_p->proc~interp_focollision_p proc~include_coulombcollisions_gc_p include_CoulombCollisions_GC_p proc~include_coulombcollisions_gc_p->proc~interp_focollision_p proc~include_coulombcollisions_gc_p->proc~interp_hcollision_p proc~include_coulombcollisions_fo_p include_CoulombCollisions_FO_p proc~include_coulombcollisions_fo_p->proc~interp_focollision_p proc~include_coulombcollisionsla_gc_p include_CoulombCollisionsLA_GC_p proc~include_coulombcollisionsla_gc_p->proc~interp_focollision_p proc~include_coulombcollisionsla_gc_p->proc~interp_hcollision_p proc~sample_hollmann_distribution_1dtransport sample_Hollmann_distribution_1Dtransport proc~sample_hollmann_distribution_1dtransport->proc~interp_nre proc~advance_gcinterp_psiwe_vars advance_GCinterp_psiwE_vars proc~advance_gcinterp_psiwe_vars->proc~gceom1_p proc~adv_gcinterp_psi_top adv_GCinterp_psi_top proc~adv_gcinterp_psi_top->proc~include_coulombcollisions_gc_p proc~advance_fpinterp_vars advance_FPinterp_vars proc~adv_gcinterp_psi_top->proc~advance_fpinterp_vars proc~advance_gcinterp_3dbdb1_vars advance_GCinterp_3DBdB1_vars proc~advance_gcinterp_3dbdb1_vars->proc~gceom1_p proc~advance_gcinterp_3dbdb1_vars->proc~include_coulombcollisions_gc_p proc~advance_fp3deqn_vars advance_FP3Deqn_vars proc~advance_fp3deqn_vars->proc~include_coulombcollisions_fo_p proc~advance_gcinterp_psi_vars advance_GCinterp_psi_vars proc~advance_gcinterp_psi_vars->proc~gceom1_p proc~advance_fp3dinterp_vars advance_FP3Dinterp_vars proc~advance_fp3dinterp_vars->proc~include_coulombcollisions_fo_p proc~advance_gcinterp_psi2x1t_vars advance_GCinterp_psi2x1t_vars proc~advance_gcinterp_psi2x1t_vars->proc~gceom1_p proc~advance_gcinterp_psi2x1t_vars->proc~include_coulombcollisions_gc_p proc~advance_fpinterp_vars->proc~include_coulombcollisions_gc_p proc~advance_gcinterp_3dbdb_vars advance_GCinterp_3DBdB_vars proc~advance_gcinterp_3dbdb_vars->proc~gceom1_p proc~advance_gcinterp_3dbdb_vars->proc~include_coulombcollisions_gc_p proc~advance_fointerp_vars advance_FOinterp_vars proc~advance_fointerp_vars->proc~include_coulombcollisions_fo_p proc~advance_gcinterp_2dbdb_vars advance_GCinterp_2DBdB_vars proc~advance_gcinterp_2dbdb_vars->proc~gceom1_p proc~advance_gcinterp_2dbdb_vars->proc~include_coulombcollisions_gc_p proc~get_hollmann_distribution_1dtransport get_Hollmann_distribution_1Dtransport proc~get_hollmann_distribution_1dtransport->proc~sample_hollmann_distribution_1dtransport proc~adv_gceqn_top adv_GCeqn_top proc~adv_gceqn_top->proc~include_coulombcollisions_gc_p proc~advance_gcinterp_b_vars advance_GCinterp_B_vars proc~advance_gcinterp_b_vars->proc~gceom1_p proc~advance_gcinterp_b_vars->proc~include_coulombcollisions_gc_p proc~advance_fpeqn_vars advance_FPeqn_vars proc~advance_fpeqn_vars->proc~include_coulombcollisions_gc_p proc~advance_gcinterp_psi_vars_fs advance_GCinterp_psi_vars_FS proc~advance_gcinterp_psi_vars_fs->proc~gceom1_p proc~advance_gcinterp_psi_vars_fs->proc~include_coulombcollisions_gc_p proc~advance_gcinterp_b2d_vars advance_GCinterp_B2D_vars proc~advance_gcinterp_b2d_vars->proc~gceom1_p proc~advance_gcinterp_b2d_vars->proc~include_coulombcollisions_gc_p proc~advance_foeqn_vars advance_FOeqn_vars proc~advance_foeqn_vars->proc~include_coulombcollisions_fo_p proc~adv_gcinterp_psiwe_top adv_GCinterp_psiwE_top proc~adv_gcinterp_psiwe_top->proc~include_coulombcollisions_gc_p proc~adv_gcinterp_psi_top_fs adv_GCinterp_psi_top_FS proc~adv_gcinterp_psi_top_fs->proc~advance_fpinterp_vars proc~adv_fointerp_top adv_FOinterp_top proc~adv_fointerp_top->proc~advance_fp3dinterp_vars proc~adv_fointerp_top->proc~advance_fointerp_vars proc~adv_fofio_top adv_FOfio_top proc~adv_fofio_top->proc~advance_fp3dinterp_vars proc~adv_fointerp_mars_top adv_FOinterp_mars_top proc~adv_fointerp_mars_top->proc~advance_fointerp_vars program~main main program~main->proc~adv_gcinterp_psi_top program~main->proc~adv_gceqn_top program~main->proc~adv_gcinterp_psiwe_top program~main->proc~adv_gcinterp_psi_top_fs program~main->proc~adv_fointerp_top program~main->proc~adv_fofio_top program~main->proc~adv_fointerp_mars_top proc~adv_gcinterp_psi2x1t_top adv_GCinterp_psi2x1t_top program~main->proc~adv_gcinterp_psi2x1t_top proc~adv_gcinterp_b_top adv_GCinterp_B_top program~main->proc~adv_gcinterp_b_top proc~adv_foeqn_top adv_FOeqn_top program~main->proc~adv_foeqn_top proc~adv_gcinterp_3dbdb_top adv_GCinterp_3DBdB_top program~main->proc~adv_gcinterp_3dbdb_top proc~adv_fointerp_aorsa_top adv_FOinterp_aorsa_top program~main->proc~adv_fointerp_aorsa_top proc~adv_gcinterp_3dbdb1_top adv_GCinterp_3DBdB1_top program~main->proc~adv_gcinterp_3dbdb1_top proc~adv_gcinterp_2dbdb_top adv_GCinterp_2DBdB_top program~main->proc~adv_gcinterp_2dbdb_top proc~adv_gcinterp_b2d_top adv_GCinterp_B2D_top program~main->proc~adv_gcinterp_b2d_top proc~adv_gcinterp_psi2x1t_top->proc~advance_fpinterp_vars proc~adv_gcinterp_b_top->proc~advance_fpinterp_vars proc~adv_foeqn_top->proc~advance_fp3deqn_vars proc~adv_foeqn_top->proc~advance_foeqn_vars proc~adv_gcinterp_3dbdb_top->proc~advance_fpinterp_vars proc~adv_fointerp_aorsa_top->proc~advance_fointerp_vars proc~adv_gcinterp_3dbdb1_top->proc~advance_fpinterp_vars proc~adv_gcinterp_2dbdb_top->proc~advance_fpinterp_vars proc~adv_gcinterp_b2d_top->proc~advance_fpinterp_vars

Contents


Source Code

  subroutine check_if_in_profiles_domain_p(pchunk,Y_R,Y_PHI,Y_Z,flag)
    INTEGER, INTENT(IN)  :: pchunk
    REAL(rp), DIMENSION(pchunk),  INTENT(IN)      :: Y_R,Y_PHI,Y_Z
    INTEGER(is), DIMENSION(pchunk), INTENT(INOUT)  :: flag
    !! Flag that determines whether particles are followed
    !! in the simulation (flag=1), or not (flag=0).
    INTEGER                                                :: IR
    !! @param IR Variable used to localize the grid cell in
    !! the \((R,\phi,Z)\) or \((R,Z)\) grid containing the fields data that
    !! corresponds to the radial position of the particles.
    INTEGER                                                :: IPHI
    !! @param IPHI Variable used to localize the grid cell in
    !! the \((R,\phi,Z)\) or \((R,Z)\) grid containing the fields data that
    !! corresponds to the azimuthal position of the particles.
    INTEGER                                                :: IZ
    !! @param IZ Variable used to localize the grid cell in the
    !! \((R,\phi,Z)\) or \((R,Z)\) grid containing the fields data that
    !! corresponds to the vertical position of the particles.
    INTEGER(ip)                                            :: pp
    !! @param pp Particle iterator.
    INTEGER(ip)                                            :: ss
    !! @param ss Species iterator.
    

    if (ALLOCATED(profiles_domain%FLAG3D)) then
       !$OMP SIMD
!       !$OMP& aligned(IR,IPHI,IZ)
       do pp=1_idef,pchunk
          IR = INT(FLOOR((Y_R(pp)  - profiles_domain%Ro + &
               0.5_rp*profiles_domain%DR)/profiles_domain%DR) + 1.0_rp,idef)
          IPHI = INT(FLOOR((Y_PHI(pp)  + 0.5_rp*profiles_domain%DPHI)/ &
               profiles_domain%DPHI) + 1.0_rp,idef)
          IZ = INT(FLOOR((Y_Z(pp)  + ABS(profiles_domain%Zo) + &
               0.5_rp*profiles_domain%DZ)/profiles_domain%DZ) + 1.0_rp,idef)

          if ((profiles_domain%FLAG3D(IR,IPHI,IZ).NE.1_is).OR. &
               ((IR.GT.profiles_3d%NR).OR.(IZ.GT.profiles_3d%NZ))) then
             flag(pp) = 0_is
          end if
       end do
       !$OMP END SIMD
    else
       !$OMP SIMD
!       !$OMP& aligned(IR,IZ)
       do pp=1_idef,pchunk
          IR = INT(FLOOR((Y_R(pp)  - profiles_domain%Ro + &
               0.5_rp*profiles_domain%DR)/profiles_domain%DR) + 1.0_rp,idef)
          IZ = INT(FLOOR((Y_Z(pp)  + ABS(profiles_domain%Zo) + &
               0.5_rp*profiles_domain%DZ)/profiles_domain%DZ) + 1.0_rp,idef)

          if ((profiles_domain%FLAG2D(IR,IZ).NE.1_is).OR. &
               ((IR.GT.profiles_2d%NR).OR.(IZ.GT.profiles_2d%NZ))) then
             flag(pp) = 0_is

!             write(output_unit_write,'("Shit''s fucked.")')
          end if
       end do      
       !$OMP END SIMD
!       write(output_unit_write,'("Shit''s not fucked.")')
    end if
  end subroutine check_if_in_profiles_domain_p