1 SUBROUTINE becoil (rad, zee, br, bp, bz, brvac, bpvac, bzvac, &
3 USE vparams,
ONLY: nthreed
5 USE parallel_include_module
10 REAL(dp),
DIMENSION(nuv3),
INTENT(in) :: rad, zee
11 REAL(dp),
DIMENSION(nuv3),
INTENT(out) :: br, bp, bz
12 REAL(dp),
DIMENSION(nr0b,nz0b,np0b),
INTENT(in) ::
18 CHARACTER(LEN=50),
PARAMETER :: warning =
19 1
'Plasma Boundary exceeded Vacuum Grid Size'
23 INTEGER,
SAVE :: icount = 0
24 INTEGER :: i, kv, ir, jz, ir1, jz1
25 REAL(dp) :: rad0, zee0, ri, zj,
26 1 pr, qz, w22, w21, w12, w11, tbecon, tbecoff
45 DO i = nuv3min, nuv3max
50 rad0 = min(rad(i), rmaxb)
51 rad0 = max(rad0, rminb)
52 zee0 = min(zee(i), zmaxb)
53 zee0 = max(zee0, zminb)
57 kv = 1 + mod(i - 1,nv)
63 ir = int((rad0 - rminb)/delrb) + 1
64 jz = int((zee0 - zminb)/delzb) + 1
65 ir1 = min(nr0b,ir + 1)
66 jz1 = min(nz0b,jz + 1)
71 ri = rminb + (ir - 1)*delrb
72 zj = zminb + (jz - 1)*delzb
73 pr = (rad0 - ri)/delrb
74 qz = (zee0 - zj)/delzb
78 w11 = 1 + w22 - (pr + qz)
82 br(i) = w11*brvac(ir,jz,kv) + w22*brvac(ir1,jz1,kv) +
83 1 w21*brvac(ir1,jz,kv) + w12*brvac(ir,jz1,kv)
84 bz(i) = w11*bzvac(ir,jz,kv) + w22*bzvac(ir1,jz1,kv) +
85 1 w21*bzvac(ir1,jz,kv) + w12*bzvac(ir,jz1,kv)
86 bp(i) = w11*bpvac(ir,jz,kv) + w22*bpvac(ir1,jz1,kv) +
87 1 w21*bpvac(ir1,jz,kv) + w12*bpvac(ir,jz1,kv)
94 IF (mod(icount,25).EQ.0 .AND. rank.EQ.0)
THEN
98 IF (rad0 .gt. rmaxb) i = 1
99 IF (zee0 .gt. zmaxb) i = i + 2
102 IF (ri .lt. rminb) i = i + 4
103 IF (zj .lt. zminb) i = i + 8
104 IF (i .ne. 0 .and. lscreen)
THEN
106 WRITE (nthreed, *) warning
107 IF (i/8 .ne. 0) print *,
' zmin = ', zj
109 IF (i/4 .ne. 0) print *,
' rmin = ', ri
111 IF (i/2 .ne. 0) print *,
' zmax = ', zee0
113 IF (i .ne. 0) print *,
' rmax = ', rad0
117 CALL second0(tbecoff)
118 becoil_time = becoil_time + (tbecoff - tbecon)
120 END SUBROUTINE becoil