Subrotuine that calculates and returns the electric field using the same analytical model of the 'analytical_fields' subroutine.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(FIELDS), | intent(in) | :: | F | An instance of the KORC derived type FIELDS. |
||
real(kind=rp), | intent(in), | DIMENSION(:,:), ALLOCATABLE | :: | Y | Cylindrical coordinates of each particle in the simulation; Y(1,:) = , Y(2,:) = , Y(3,:) = . |
|
real(kind=rp), | intent(inout), | DIMENSION(:,:), ALLOCATABLE | :: | E | Electric field components in Cartesian coordinates; E(1,:) = , E(2,:) = , E(3,:) = |
|
integer(kind=is), | intent(in), | DIMENSION(:), ALLOCATABLE | :: | flag | Flag for each particle to decide whether it is being followed (flag=T) or not (flag=F). |
subroutine analytical_electric_field_cyl(F,Y,E,flag)
!! @note Subrotuine that calculates and returns the electric field using the
!! same analytical model of the 'analytical_fields' subroutine. @endnote
TYPE(FIELDS), INTENT(IN) :: F
!! An instance of the KORC derived type FIELDS.
REAL(rp), DIMENSION(:,:), ALLOCATABLE, INTENT(IN) :: Y
!! Cylindrical coordinates of each particle in the simulation;
!! Y(1,:) = \(R\), Y(2,:) = \(\phi\), Y(3,:) = \(Z\).
REAL(rp), DIMENSION(:,:), ALLOCATABLE, INTENT(INOUT) :: E
!! Electric field components in Cartesian coordinates;
!! E(1,:) = \(E_x\), E(2,:) = \(E_y\), E(3,:) = \(E_z\)
INTEGER(is), DIMENSION(:), ALLOCATABLE, INTENT(IN) :: flag
!! Flag for each particle to decide whether it is being followed (flag=T)
!! or not (flag=F).
REAL(rp) :: Ephi
!! Azimuthal electric field.
INTEGER(ip) :: pp
!! Particle iterator.
INTEGER(ip) :: ss
!! Particle species iterator.
if (abs(F%Eo) > 0) then
ss = SIZE(Y,1)
!$OMP PARALLEL DO FIRSTPRIVATE(ss) PRIVATE(pp,Ephi) SHARED(F,Y,E,flag)
do pp=1_idef,ss
if ( flag(pp) .EQ. 1_is ) then
Ephi = F%Eo*F%Ro/Y(pp,1)
E(pp,1) = -Ephi*SIN(Y(pp,2))
E(pp,2) = Ephi*COS(Y(pp,2))
E(pp,3) = 0.0_rp
end if
end do
!$OMP END PARALLEL DO
end if
end subroutine analytical_electric_field_cyl