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 --- resolution
of contour fill
40 ires
= 300
41 jres
= 300
42 c
43 c --- frame of drawing
area
44 fname='frame'
45 call
ngfrms(nd,fname,nx,ny,x,y,i1,j1,i2,j2,msk)
46 c
47 c --- contour lines
of
48 c
geometric sequencial levels (auto setting)
49 fname='u_mono'
50 call
ngcm2s(nd,fname,nx,ny,x,y,u,nc,i1,j1,i2,j2,msk)
51 fname='u_fill'
52 call
ngcf2s(nd,fname,nx,ny,x,y,u,nc,i1,j1,i2,j2,msk,ires,jres)
53 c
54 stop
55 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 として描画領域からはずすようにします。
27〜41行でサブルーチンに渡す変数を説明的に示してます。44
行で描画領域のフレーム(枠)を描くためのサブルーチン ngfrms を呼び出し、50行でモノクロ等高線描画のためのサブルーチン
ngcm2s を呼び出しています。そして、52行で色分け塗り潰しのためのサブルーチン
ngcf2s を呼び出しています。描画領域の指定が必要ない場合は引数 i1,
j1, i2, j2, msk のいらない ngfrma, ngcm2a, ngcf2a などもあります。