calculate_GCfieldswE_p Subroutine

public subroutine calculate_GCfieldswE_p(F, Y_R, Y_PHI, Y_Z, B_R, B_PHI, B_Z, E_R, E_PHI, E_Z, curlb_R, curlb_PHI, curlb_Z, gradB_R, gradB_PHI, gradB_Z, flag_cache, PSIp)

Arguments

Type IntentOptional AttributesName
type(FIELDS), intent(in) :: F
real(kind=rp), intent(in), DIMENSION(8):: Y_R
real(kind=rp), intent(in), DIMENSION(8):: Y_PHI
real(kind=rp), intent(in), DIMENSION(8):: Y_Z
real(kind=rp), intent(out), DIMENSION(8):: B_R
real(kind=rp), intent(out), DIMENSION(8):: B_PHI
real(kind=rp), intent(out), DIMENSION(8):: B_Z
real(kind=rp), intent(out), DIMENSION(8):: E_R
real(kind=rp), intent(out), DIMENSION(8):: E_PHI
real(kind=rp), intent(out), DIMENSION(8):: E_Z
real(kind=rp), intent(out), DIMENSION(8):: curlb_R
real(kind=rp), intent(out), DIMENSION(8):: curlb_PHI
real(kind=rp), intent(out), DIMENSION(8):: curlb_Z
real(kind=rp), intent(out), DIMENSION(8):: gradB_R
real(kind=rp), intent(out), DIMENSION(8):: gradB_PHI
real(kind=rp), intent(out), DIMENSION(8):: gradB_Z
integer(kind=is), intent(inout), DIMENSION(8):: flag_cache
real(kind=rp), intent(out), DIMENSION(8):: PSIp

Contents


Source Code

subroutine calculate_GCfieldswE_p(F,Y_R,Y_PHI,Y_Z,B_R,B_PHI,B_Z,E_R,E_PHI,E_Z, &
     curlb_R,curlb_PHI,curlb_Z,gradB_R,gradB_PHI,gradB_Z,flag_cache,PSIp)
  REAL(rp), DIMENSION(8), INTENT(IN)      :: Y_R,Y_PHI,Y_Z
  TYPE(FIELDS), INTENT(IN)                               :: F
  REAL(rp), DIMENSION(8),  INTENT(OUT)   :: B_R,B_PHI,B_Z
  REAL(rp), DIMENSION(8),  INTENT(OUT)   :: gradB_R,gradB_PHI,gradB_Z
  REAL(rp), DIMENSION(8),  INTENT(OUT)   :: curlb_R,curlb_PHI,curlb_Z
  REAL(rp), DIMENSION(8),  INTENT(OUT)   :: E_R,E_PHI,E_Z
  REAL(rp), DIMENSION(8)   :: Bmag,EPHI
  INTEGER                                                :: cc
  REAL(rp), DIMENSION(8),INTENT(OUT)  :: PSIp
  REAL(rp), DIMENSION(8,6)  :: A
  INTEGER(is),DIMENSION(8),INTENT(INOUT)   :: flag_cache

  call check_if_in_fields_domain_p(F,Y_R,Y_PHI,Y_Z,flag_cache)
       
  call EZspline_derivative(bfield_2d%A, efield_2d%PHI, 8, Y_R, Y_Z, A, &
       EPHI, ezerr)
  call EZspline_error(ezerr)

  !A(:,1) = PSIp
  !A(:,2) = dPSIp/dR
  !A(:,3) = dPSIp/dZ
  !A(:,4) = d^2PSIp/dR^2
  !A(:,5) = d^2PSIp/dZ^2
  !A(:,6) = d^2PSIp/dRdZ

  !$OMP SIMD
!    !$OMP& aligned(PSIp,A,B_R,Y_R,B_PHI,B_Z,Bmag,gradB_R,gradB_PHI,gradB_Z, &
!    !$OMP& curlb_R,curlb_PHI,curlb_Z,E_R,E_PHI,E_Z)
  do cc=1_idef,8_idef
     PSIp(cc)=A(cc,1)

     B_R(cc) = A(cc,3)/Y_R(cc)
     ! BR = (dA/dZ)/R
     B_PHI(cc) = -F%Bo*F%Ro/Y_R(cc)
     ! BPHI = Fo*Ro/R
     B_Z(cc) = -A(cc,2)/Y_R(cc)
     ! BR = -(dA/dR)/R


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

     gradB_R(cc)=(B_R(cc)*A(cc,6)-B_Z(cc)*A(cc,4)-Bmag(cc)*Bmag(cc))/ &
          (Y_R(cc)*Bmag(cc))
     gradB_PHI(cc)=0._rp
     gradB_Z(cc)=(B_R(cc)*A(cc,5)-B_Z(cc)*A(cc,6))/ &
          (Y_R(cc)*Bmag(cc))

     curlb_R(cc)=B_PHI(cc)*gradB_Z(cc)/(Bmag(cc)*Bmag(cc))
     curlb_PHI(cc)=(Bmag(cc)/Y_R(cc)*(B_Z(cc)+A(cc,4)+A(cc,5))- &
          B_R(cc)*gradB_Z(cc)+B_Z(cc)*gradB_R(cc))/ &
          (Bmag(cc)*Bmag(cc))
     curlb_Z(cc)=-B_PHI(cc)*gradB_R(cc)/(Bmag(cc)*Bmag(cc))

     if (F%E_2x1t) then
        E_R(cc) = 0._rp
        E_PHI(cc) = EPHI(cc)
        E_Z(cc) = 0._rp
     else
        E_R(cc) = 0._rp
        E_PHI(cc) = 0._rp
        E_Z(cc) = 0._rp
     end if

     
  end do

end subroutine calculate_GCfieldswE_p