analytical_fields_GC_p Subroutine

public subroutine analytical_fields_GC_p(pchunk, 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, PSIp)

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):: B_R
real(kind=rp), intent(out), DIMENSION(pchunk):: B_PHI
real(kind=rp), intent(out), DIMENSION(pchunk):: B_Z
real(kind=rp), intent(out), DIMENSION(pchunk):: E_R
real(kind=rp), intent(out), DIMENSION(pchunk):: E_PHI
real(kind=rp), intent(out), DIMENSION(pchunk):: E_Z
real(kind=rp), intent(out), DIMENSION(pchunk):: curlB_R
real(kind=rp), intent(out), DIMENSION(pchunk):: curlB_PHI
real(kind=rp), intent(out), DIMENSION(pchunk):: curlB_Z
real(kind=rp), intent(out), DIMENSION(pchunk):: gradB_R
real(kind=rp), intent(out), DIMENSION(pchunk):: gradB_PHI
real(kind=rp), intent(out), DIMENSION(pchunk):: gradB_Z
real(kind=rp), intent(out), DIMENSION(pchunk):: PSIp

Called by

proc~~analytical_fields_gc_p~~CalledByGraph proc~analytical_fields_gc_p analytical_fields_GC_p proc~advance_gceqn_vars advance_GCeqn_vars proc~advance_gceqn_vars->proc~analytical_fields_gc_p proc~include_coulombcollisionsla_gc_p include_CoulombCollisionsLA_GC_p proc~include_coulombcollisionsla_gc_p->proc~analytical_fields_gc_p proc~include_coulombcollisions_gc_p include_CoulombCollisions_GC_p proc~include_coulombcollisions_gc_p->proc~analytical_fields_gc_p proc~advance_fpeqn_vars advance_FPeqn_vars proc~advance_fpeqn_vars->proc~include_coulombcollisions_gc_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~adv_gcinterp_psiwe_top adv_GCinterp_psiwE_top proc~adv_gcinterp_psiwe_top->proc~include_coulombcollisions_gc_p proc~advance_gcinterp_3dbdb1_vars advance_GCinterp_3DBdB1_vars proc~advance_gcinterp_3dbdb1_vars->proc~include_coulombcollisions_gc_p proc~advance_gcinterp_b_vars advance_GCinterp_B_vars proc~advance_gcinterp_b_vars->proc~include_coulombcollisions_gc_p proc~advance_gcinterp_psi_vars_fs advance_GCinterp_psi_vars_FS 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~include_coulombcollisions_gc_p proc~advance_gcinterp_psi2x1t_vars advance_GCinterp_psi2x1t_vars proc~advance_gcinterp_psi2x1t_vars->proc~include_coulombcollisions_gc_p proc~advance_gcinterp_2dbdb_vars advance_GCinterp_2DBdB_vars proc~advance_gcinterp_2dbdb_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~include_coulombcollisions_gc_p proc~adv_gceqn_top adv_GCeqn_top proc~adv_gceqn_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 program~main main program~main->proc~adv_gcinterp_psi_top program~main->proc~adv_gcinterp_psiwe_top program~main->proc~adv_gceqn_top program~main->proc~adv_gcinterp_psi_top_fs 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_gcinterp_3dbdb_top adv_GCinterp_3DBdB_top program~main->proc~adv_gcinterp_3dbdb_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_gcinterp_3dbdb_top->proc~advance_fpinterp_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 analytical_fields_GC_p(pchunk,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,PSIp)
    INTEGER, INTENT(IN) :: pchunk
    TYPE(FIELDS), INTENT(IN)                                   :: F
    REAL(rp),DIMENSION(pchunk),INTENT(IN)  :: Y_R,Y_PHI,Y_Z
    REAL(rp),DIMENSION(pchunk),INTENT(OUT) :: B_R,B_PHI,B_Z
    REAL(rp),DIMENSION(pchunk),INTENT(OUT) :: gradB_R,gradB_PHI,gradB_Z
    REAL(rp),DIMENSION(pchunk),INTENT(OUT) :: curlB_R,curlB_PHI,curlB_Z
    REAL(rp),DIMENSION(pchunk),INTENT(OUT) :: E_R,E_PHI,E_Z
    REAL(rp),DIMENSION(pchunk),INTENT(OUT) :: PSIp
    REAL(rp),DIMENSION(pchunk)  :: dRBR,dRBPHI,dRBZ,dZBR,dZBPHI,dZBZ,Bmag,dRbhatPHI
    REAL(rp),DIMENSION(pchunk)  :: dRbhatZ,dZbhatR,dZbhatPHI,qprof,rm,theta
    REAL(rp)  :: B0,E0,lam,R0,q0
    integer(ip) :: cc

    B0=F%Bo
    E0=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,gradB_R,gradB_PHI,gradB_Z, &
!    !$OMP& curlB_R,curlB_PHI,curlB_Z,E_R,E_PHI,E_Z,PSIp)
    do cc=1_idef,pchunk
       rm(cc)=sqrt((Y_R(cc)-R0)*(Y_R(cc)-R0)+Y_Z(cc)*Y_Z(cc))
       theta(cc)=atan2(Y_Z(cc),(Y_R(cc)-R0))
       qprof(cc) = 1.0_rp + (rm(cc)*rm(cc)/(lam*lam))

       PSIp(cc)=Y_R(cc)*lam**2*B0/ &
            (2*q0*(R0+rm(cc)*cos(theta(cc))))* &
            log(1+(rm(cc)/lam)**2)
       
       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))

       dRBR(cc)=-B0*Y_Z(cc)/(q0*qprof(cc)*Y_R(cc))*(1./Y_R(cc)+ &
            2*(Y_R(cc)-R0)/(lam*lam*qprof(cc)))
       dRBPHI(cc)=B0*R0/(Y_R(cc)*Y_R(cc))
       dRBZ(cc)=B0/(q0*qprof(cc)*Y_R(cc))*(-R0/Y_R(cc)+2*(Y_R(cc)- &
            R0)*(Y_R(cc)-R0)/(lam*lam*qprof(cc)))
       dZBR(cc)=B0/(q0*qprof(cc)*Y_R(cc))*(1-2*Y_Z(cc)*Y_Z(cc)/ &
            (lam*lam*qprof(cc)))
       dZBPHI(cc)=0._rp
       dZBZ(cc)=B0*(Y_R(cc)-R0)/(q0*Y_R(cc))*2*Y_Z(cc)/ &
            (lam*lam*qprof(cc)*qprof(cc))

       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)*dRBR(cc)+B_PHI(cc)*dRBPHI(cc)+B_Z(cc)*dRBZ(cc))/ &
            Bmag(cc)
       gradB_PHI(cc)=0._rp
       gradB_Z(cc)=(B_R(cc)*dZBR(cc)+B_PHI(cc)*dZBPHI(cc)+B_Z(cc)*dZBZ(cc))/ &
            Bmag(cc)

       dRbhatPHI(cc)=(Bmag(cc)*dRBPHI(cc)-B_PHI(cc)*gradB_R(cc))/ &
            (Bmag(cc)*Bmag(cc))
       dRbhatZ(cc)=(Bmag(cc)*dRBZ(cc)-B_Z(cc)*gradB_R(cc))/(Bmag(cc)*Bmag(cc))
       dZbhatR(cc)=(Bmag(cc)*dZBR(cc)-B_R(cc)*gradB_Z(cc))/(Bmag(cc)*Bmag(cc))
       dZbhatPHI(cc)=(Bmag(cc)*dZBPHI(cc)-B_PHI(cc)*gradB_Z(cc))/ &
            (Bmag(cc)*Bmag(cc))

       curlb_R(cc)=-dZbhatPHI(cc)
       curlb_PHI(cc)=dZbhatR(cc)-dRbhatZ(cc)
       curlb_Z(cc)=B_PHI(cc)/(Bmag(cc)*Y_R(cc))+dRbhatPHI(cc)         

       
       E_R(cc) = 0.0_rp
       E_PHI(cc) = E0*R0/Y_R(cc)
       E_Z(cc) = 0.0_rp


       
    end do
    !$OMP END SIMD

  end subroutine analytical_fields_GC_p