Ngraph による等電位線(カラー等高線)の描画
(5,0),(-5,0) に電荷があるときの等電位線です。
ソースプログラム
1 program
main
2 parameter
(nx=41,ny=41)
3 dimension
x(nx,ny),y(nx,ny),u(nx,ny)
4 integer
msk(nx,ny)
5 character*80
fname
6 c
7 x1=5.0
8 y1=0.0
9 x2=-5.0
10 y2=0.0
11 c
12 do 10 j=1,ny
13
do 10 i=1,nx
14
x(i,j)=float(i-21)*0.5
15
y(i,j)=float(j-21)*0.5
16
r1=sqrt((x(i,j)-x1)*(x(i,j)-x1)+(y(i,j)-y1)*(y(i,j)-y1))
17
r2=sqrt((x(i,j)-x2)*(x(i,j)-x2)+(y(i,j)-y2)*(y(i,j)-y2))
18
if ((r1.ne.0.0).and.(r2.ne.0.0)) then
19
u(i,j)= 1.0/r1 + 1.0/r2
20
msk(i,j)=0
21
else
22
u(i,j)=0.0
23
msk(i,j)=1
24
endif
25 10 continue
26 c
27 c --- I/O unit number
28 nd=10
29 c
30 c --- number of contour
lines
31 nc=15
32 c
33 c --- draw area
34 i1 = 1
35 j1 = 1
36 i2 = nx
37 j2 = ny
38 c
39 c --- frame of drawing
area
40 fname='frame'
41 call ngfrms(nd,fname,nx,ny,x,y,i1,j1,i2,j2,msk)
42 c
43 c --- contour lines of
44 c
geometric sequencial levels (auto setting)
45 fname='u'
46 call ngcc2s(nd,fname,nx,ny,x,y,u,nc,i1,j1,i2,j2,msk)
47 c
48 stop
49 end
12〜25行で配列 x(i,j), y(i,j) に位置座標、u(i,j) に静電ポテンシャルの値を代入してます。2つの電荷からの距離r1
または r2 がゼロになるところでポテンシャルは発散します。配列 msk(i,j) は描画領域の一部をマスクするための配列で
msk(i,j)=0 以外のところは描画しません。ここでは、このポテンシャルが発散するところで
msk(i,j)=1 として描画領域からはずすようにします。
41 行で描画領域のフレーム(枠)を描くためのサブルーチン
ngfrms を呼び出し、46行目で等高線描画のためのサブルーチン ngcc2s を呼び出しています。描画領域の指定が必要ない場合は引数
が少い ngcc2aなどもあります。サブルーチンの詳細はサブルーチンリファレンスをご覧ください。