unitVectors_p Subroutine

private subroutine unitVectors_p(pchunk, b_unit_X, b_unit_Y, b_unit_Z, b1_X, b1_Y, b1_Z, b2_X, b2_Y, b2_Z, b3_X, b3_Y, b3_Z)

Arguments

Type IntentOptional AttributesName
integer, intent(in) :: pchunk
real(kind=rp), intent(in), DIMENSION(pchunk):: b_unit_X
real(kind=rp), intent(in), DIMENSION(pchunk):: b_unit_Y
real(kind=rp), intent(in), DIMENSION(pchunk):: b_unit_Z
real(kind=rp), intent(out), DIMENSION(pchunk):: b1_X
real(kind=rp), intent(out), DIMENSION(pchunk):: b1_Y
real(kind=rp), intent(out), DIMENSION(pchunk):: b1_Z
real(kind=rp), intent(out), DIMENSION(pchunk):: b2_X
real(kind=rp), intent(out), DIMENSION(pchunk):: b2_Y
real(kind=rp), intent(out), DIMENSION(pchunk):: b2_Z
real(kind=rp), intent(out), DIMENSION(pchunk):: b3_X
real(kind=rp), intent(out), DIMENSION(pchunk):: b3_Y
real(kind=rp), intent(out), DIMENSION(pchunk):: b3_Z

Called by

proc~~unitvectors_p~~CalledByGraph proc~unitvectors_p unitVectors_p proc~include_coulombcollisions_fo_p include_CoulombCollisions_FO_p proc~include_coulombcollisions_fo_p->proc~unitvectors_p proc~include_coulombcollisions_fofio_p include_CoulombCollisions_FOfio_p proc~include_coulombcollisions_fofio_p->proc~unitvectors_p proc~advance_fofio_vars advance_FOfio_vars proc~advance_fofio_vars->proc~include_coulombcollisions_fofio_p proc~advance_fp3dinterp_vars advance_FP3Dinterp_vars proc~advance_fp3dinterp_vars->proc~include_coulombcollisions_fo_p proc~advance_fointerp_vars advance_FOinterp_vars proc~advance_fointerp_vars->proc~include_coulombcollisions_fo_p proc~advance_fp3deqn_vars advance_FP3Deqn_vars proc~advance_fp3deqn_vars->proc~include_coulombcollisions_fo_p proc~advance_foeqn_vars advance_FOeqn_vars proc~advance_foeqn_vars->proc~include_coulombcollisions_fo_p 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_fofio_vars 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 proc~adv_foeqn_top adv_FOeqn_top proc~adv_foeqn_top->proc~advance_fp3deqn_vars proc~adv_foeqn_top->proc~advance_foeqn_vars proc~adv_fointerp_aorsa_top adv_FOinterp_aorsa_top proc~adv_fointerp_aorsa_top->proc~advance_fointerp_vars program~main main program~main->proc~adv_fointerp_top program~main->proc~adv_fofio_top program~main->proc~adv_fointerp_mars_top program~main->proc~adv_foeqn_top program~main->proc~adv_fointerp_aorsa_top

Contents

Source Code


Source Code

  subroutine unitVectors_p(pchunk,b_unit_X,b_unit_Y,b_unit_Z,b1_X,b1_Y,b1_Z, &
       b2_X,b2_Y,b2_Z,b3_X,b3_Y,b3_Z)
    INTEGER, INTENT(IN)  :: pchunk
    REAL(rp), DIMENSION(pchunk), INTENT(IN) 	:: b_unit_X,b_unit_Y,b_unit_Z
    REAL(rp), DIMENSION(pchunk), INTENT(OUT) :: b1_X,b1_Y,b1_Z
    REAL(rp), DIMENSION(pchunk), INTENT(OUT) :: b2_X,b2_Y,b2_Z
    REAL(rp), DIMENSION(pchunk), INTENT(OUT) :: b3_X,b3_Y,b3_Z
    REAL(rp), DIMENSION(pchunk) :: b2mag,b3mag
    integer(ip) :: cc

    !$OMP SIMD 
!    !$OMP& aligned(b1_X,b1_Y,b1_Z,b_unit_X,b_unit_Y,b_unit_Z, &
!    !$OMP& b2_X,b2_Y,b2_Z,b2mag,b3_X,b3_Y,b3_Z,b3mag)
    do cc=1_idef,pchunk
       b1_X(cc) = b_unit_X(cc)
       b1_Y(cc) = b_unit_Y(cc)
       b1_Z(cc) = b_unit_Z(cc)

       b2_X(cc) = b1_Y(cc)
       b2_Y(cc) = -b1_X(cc)
       b2_Z(cc) = 0._rp

       b2mag(cc)=sqrt(b2_X(cc)*b2_X(cc)+b2_Y(cc)*b2_Y(cc)+b2_Z(cc)*b2_Z(cc))

       b2_X(cc) = b2_X(cc)/b2mag(cc)
       b2_Y(cc) = b2_Y(cc)/b2mag(cc)
       b2_Z(cc) = b2_Z(cc)/b2mag(cc)

       b3_X(cc)=b1_Y(cc)*b2_Z(cc)-b1_Z(cc)*b2_Y(cc)
       b3_Y(cc)=b1_Z(cc)*b2_X(cc)-b1_X(cc)*b2_Z(cc)
       b3_Z(cc)=b1_X(cc)*b2_Y(cc)-b1_Y(cc)*b2_X(cc)

       b3mag(cc)=sqrt(b3_X(cc)*b3_X(cc)+b3_Y(cc)*b3_Y(cc)+b3_Z(cc)*b3_Z(cc))

       b3_X(cc) = b3_X(cc)/b3mag(cc)
       b3_Y(cc) = b3_Y(cc)/b3mag(cc)
       b3_Z(cc) = b3_Z(cc)/b3mag(cc)
    end do
    !$OMP END SIMD
    
  end subroutine unitVectors_p