calculate_2DBdBfields_p Subroutine

public subroutine calculate_2DBdBfields_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, flag_cache, 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
integer(kind=is), intent(inout), DIMENSION(pchunk):: flag_cache
real(kind=rp), intent(out), DIMENSION(pchunk):: PSIp

Calls

proc~~calculate_2dbdbfields_p~~CallsGraph proc~calculate_2dbdbfields_p calculate_2DBdBfields_p ezspline_interp ezspline_interp proc~calculate_2dbdbfields_p->ezspline_interp proc~check_if_in_fields_domain_p check_if_in_fields_domain_p proc~calculate_2dbdbfields_p->proc~check_if_in_fields_domain_p ezspline_error ezspline_error proc~calculate_2dbdbfields_p->ezspline_error

Called by

proc~~calculate_2dbdbfields_p~~CalledByGraph proc~calculate_2dbdbfields_p calculate_2DBdBfields_p proc~include_coulombcollisionsla_gc_p include_CoulombCollisionsLA_GC_p proc~include_coulombcollisionsla_gc_p->proc~calculate_2dbdbfields_p proc~advance_gcinterp_2dbdb_vars advance_GCinterp_2DBdB_vars proc~advance_gcinterp_2dbdb_vars->proc~calculate_2dbdbfields_p proc~include_coulombcollisions_gc_p include_CoulombCollisions_GC_p proc~advance_gcinterp_2dbdb_vars->proc~include_coulombcollisions_gc_p proc~include_coulombcollisions_gc_p->proc~calculate_2dbdbfields_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_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 calculate_2DBdBfields_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, &
     flag_cache,PSIp)
  INTEGER, INTENT(IN)  :: pchunk 
  REAL(rp), DIMENSION(pchunk), INTENT(IN)      :: Y_R,Y_PHI,Y_Z
  TYPE(FIELDS), INTENT(IN)                               :: F
  REAL(rp), DIMENSION(pchunk),  INTENT(OUT)   :: B_R,B_PHI,B_Z
  REAL(rp), DIMENSION(pchunk,3)   :: BR,BPHI,BZ
  REAL(rp), DIMENSION(pchunk)   :: dBRdR,dBPHIdR,dBZdR
  REAL(rp), DIMENSION(pchunk)   :: dBRdPHI,dBPHIdPHI,dBZdPHI
  REAL(rp), DIMENSION(pchunk)   :: dBRdZ,dBPHIdZ,dBZdZ
  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)   :: Bmag
  INTEGER                                                :: cc
  REAL(rp), DIMENSION(pchunk,6)  :: A
  INTEGER(is),DIMENSION(pchunk),INTENT(INOUT)   :: flag_cache

  call check_if_in_fields_domain_p(pchunk,F,Y_R,Y_PHI,Y_Z,flag_cache)

  call EZspline_interp(bfield_2d%R,bfield_2d%PHI,bfield_2d%Z, &
       efield_2d%R,efield_2d%PHI,efield_2d%Z,bfield_2d%A, &
       pchunk,Y_R,Y_Z,BR,BPHI,BZ,E_R,E_PHI,E_Z,PSIp,ezerr)
  call EZspline_error(ezerr)

  
!  call EZspline_interp(bfield_2d%R,bfield_2d%PHI,bfield_2d%Z, &
!       dbdR_2d%R,dbdR_2d%PHI,dBdR_2d%Z, &
!       dbdPHI_2d%R,dbdPHI_2d%PHI,dbdPHI_2d%Z, &
!       dbdZ_2d%R,dbdZ_2d%PHI,dbdZ_2d%Z, &
!       efield_2d%R,efield_2d%PHI,efield_2d%Z,8,Y_R,Y_Z,B_R,B_PHI,B_Z, &
!       dBRdR,dBPHIdR,dBZdR,dBRdPHI,dBPHIdPHI,dBZdPHI,dBRdZ,dBPHIdZ,dBZdZ, &
!       E_R,E_PHI,E_Z,ezerr)
!  call EZspline_error(ezerr)

  !$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,pchunk

     B_R(cc)=BR(cc,1)
     B_PHI(cc)=BPHI(cc,1)
     B_Z(cc)=BZ(cc,1)

     dBRdR(cc)=BR(cc,2)
     dBRdPHI(cc)=0._rp
     dBRdZ(cc)=BR(cc,3)

     dBPHIdR(cc)=BPHI(cc,2)
     dBPHIdPHI(cc)=0._rp
     dBPHIdZ(cc)=BPHI(cc,3)

     dBZdR(cc)=BZ(cc,2)
     dBZdPHI(cc)=0._rp
     dBZdZ(cc)=BZ(cc,3)
     
     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)*dBRdR(cc)+B_PHI(cc)*dBPHIdR(cc)+ &
          B_Z(cc)*dBZdR(cc))/Bmag(cc)
     gradB_PHI(cc)=(B_R(cc)*dBRdPHI(cc)+B_PHI(cc)*dBPHIdPHI(cc)+ &
          B_Z(cc)*dBZdPHI(cc))/(Y_R(cc)*Bmag(cc))
     gradB_Z(cc)=(B_R(cc)*dBRdZ(cc)+B_PHI(cc)*dBPHIdZ(cc)+ &
          B_Z(cc)*dBZdZ(cc))/Bmag(cc)

     curlb_R(cc)=(Bmag(cc)*dBZdPHI(cc)/Y_R(cc)-B_Z(cc)*gradB_PHI(cc)- &
          Bmag(cc)*dBPHIdZ(cc)+B_PHI(cc)*gradB_Z(cc))/(Bmag(cc)*bmag(cc))
     curlb_PHI(cc)=(Bmag(cc)*dBRdZ(cc)-B_R(cc)*gradB_Z(cc)- &
          Bmag(cc)*dBZdR(cc)+B_Z(cc)*gradB_R(cc))/(Bmag(cc)*bmag(cc))
     curlb_Z(cc)=(Bmag(cc)*B_PHI(cc)/Y_R(cc)+Bmag(cc)*dBPHIdR(cc)- &
          B_PHI(cc)*gradB_R(cc)-Bmag(cc)*dBRdPHI(cc)/Y_R(cc)+ &
          B_R(cc)*gradB_PHI(cc))/(Bmag(cc)*bmag(cc))
     
  end do
  !$OMP END SIMD
  
   
!  write(output_unit_write,'("PSIp: ",E17.10)') PSIp
  
!  write(output_unit_write,'("Y_R: ",E17.10)') Y_R
!  write(output_unit_write,'("Y_Z: ",E17.10)') Y_Z
  
!  write(output_unit_write,'("B_R: ",E17.10)') B_R
!  write(output_unit_write,'("B_PHIinterp: ",E17.10)') B_PHI
!  write(output_unit_write,'("B_Z: ",E17.10)') B_Z

end subroutine calculate_2DBdBfields_p