analytical_fields_Bmag_p Subroutine

public subroutine analytical_fields_Bmag_p(pchunk, F, Y_R, Y_PHI, Y_Z, Bmag, E_PHI)

Arguments

Type IntentOptional AttributesName
integer, intent(in) :: pchunk
type(FIELDS), intent(in) :: F
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
real(kind=rp), intent(out), DIMENSION(pchunk):: Bmag
real(kind=rp), intent(out), DIMENSION(pchunk):: E_PHI

Called by

proc~~analytical_fields_bmag_p~~CalledByGraph proc~analytical_fields_bmag_p analytical_fields_Bmag_p proc~adv_gceqn_top adv_GCeqn_top proc~adv_gceqn_top->proc~analytical_fields_bmag_p program~main main program~main->proc~adv_gceqn_top

Contents


Source Code

  subroutine analytical_fields_Bmag_p(pchunk,F,Y_R,Y_PHI,Y_Z,Bmag,E_PHI)
    INTEGER, INTENT(IN)  :: pchunk
    TYPE(FIELDS), INTENT(IN)                                   :: F
    REAL(rp)  :: R0,B0,lam,q0,EF0
    REAL(rp),DIMENSION(pchunk),INTENT(IN)  :: Y_R,Y_PHI,Y_Z
    REAL(rp),DIMENSION(pchunk) :: B_R,B_PHI,B_Z,rm,qprof
    REAL(rp),DIMENSION(pchunk),INTENT(OUT) :: Bmag,E_PHI
    integer(ip) :: cc

    
    B0=F%Bo
    EF0=F%Eo
    lam=F%AB%lambda
    R0=F%AB%Ro
    q0=F%AB%qo

    !$OMP SIMD
    !    !$OMP& aligned(Y_R,Y_PHI,Y_Z,B_R,B_PHI,B_Z,rm,qprof,Bmag)
    do cc=1_idef,pchunk
       rm(cc)=sqrt((Y_R(cc)-R0)*(Y_R(cc)-R0)+Y_Z(cc)*Y_Z(cc))
       qprof(cc) = 1.0_rp + (rm(cc)*rm(cc)/(lam*lam))

       B_R(cc)=B0*Y_Z(cc)/(q0*qprof(cc)*Y_R(cc))
       B_PHI(cc)=-B0*R0/Y_R(cc)
       B_Z(cc)=-B0*(Y_R(cc)-R0)/(q0*qprof(cc)*Y_R(cc))

       Bmag(cc)=sqrt(B_R(cc)*B_R(cc)+B_PHI(cc)*B_PHI(cc)+B_Z(cc)*B_Z(cc))

       E_PHI(cc)=EF0*R0/Y_R(cc)       
    end do
    !$OMP END SIMD

  end subroutine analytical_fields_Bmag_p