program fieldline implicit none integer pgopen,N real x(10),y(10),q(10),qtotal real xmin,xmax,ymin,ymax external ran3 if (pgopen('/xwin') .le. 0) stop xmin=0. xmax=10. ymin=0. ymax=10. call pgsci(1) call pgpap(13.0,0.6) call pgenv(xmin,xmax,ymin,ymax,1,1) 10 call pgsci(3) call pglab('','','Electrostatic Field Lines') call screen(x,y,q,N,qtotal) call draw_lines(N,x,y,q,qtotal) call pgask(0) call pgpage goto 10 call pgclos stop end subroutine screen(x,y,q,N,qtotal) integer i,N real x(*),y(*),q(*),qtotal real xp,yp character*10 ch c write(*,*) 'input range of x' c read(*,*) xmin c read(*,*) xmax c write(*,*) 'input range of y' c read(*,*) ymin c read(*,*) ymax N=3 iseed=5 c write(*,*) 'input numbers of your charges' c read(*,*) N do i=1,N c write(*,*) 'input your position of your charge one by one' c call pgband(7,0,1,1,xp,yp,ch) xp=10*ran3(iseed) yp=10*ran3(iseed) x(i)=xp y(i)=yp c write(*,*) 'the position of your charge is',x(i),y(i) c write(*,*) 'input your charge one by one' c read(*,*) q(i) q(i)=20*ran3(iseed)-10 qtotal=qtotal+q(i) if (q(i) .gt. 0) then call pgsci(2) call pgpt(1,x(i),y(i),9) else call pgsci(4) call pgpt(1,x(i),y(i),9) endif enddo return end subroutine draw_lines(N,x,y,q,qtotal) real lpc,Emin,dtheta,theta,sig,xline(2),yline(2) real E0,Ex,Ey,ds_small,ds_big,dx,dy,r,E,pi,x(*),y(*),q(*) real a integer i,j,k,quit call pgsci(6) a=0.1 pi=3.1415926 lpc=8 Emin=0.01 c mhl sig=sign(1,qtotal) sig=qtotal/abs(qtotal) ds_small=0.01*sig ds_big=sig do i=1,N if (q(i)*sig .gt. 0) then dtheta=(2*pi)/(lpc*abs(q(i))) do theta=0,2*pi,dtheta xline(1)=x(i)+a*cos(theta) yline(1)=y(i)+a*sin(theta) do k=1,5000 Ex=0 Ey=0 do j=1,N dx=xline(1)-x(j) dy=yline(1)-y(j) r=sqrt(dx*dx+dy*dy) if (r .gt. 0.9*a) then E0=q(j)/(r*r*r) Ex=Ex+E0*dx Ey=Ey+E0*dy else goto 10 endif enddo E=sqrt(Ex*Ex+Ey*Ey) if ((E .gt. Emin).or.(r .lt. 20)) then xline(2)=xline(1)+ds_small*Ex/E yline(2)=yline(1)+ds_small*Ey/E call pgpt(1,xline(2),yline(2),1) xline(1)=xline(2) yline(1)=yline(2) else xline(2)=xline(1)+ds_big*Ex/E yline(2)=yline(1)+ds_big*Ey/E call pgpt(1,xline(2),yline(2),1) xline(1)=xline(2) yline(1)=yline(2) endif enddo 10 enddo endif enddo end