Ngraph による等電位線(カラー等高線)の描画

(5,0),(-5,0) に電荷があるときの等電位線です。

等電位線(1)
 

ソースプログラム

     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などもあります。サブルーチンの詳細はサブルーチンリファレンスをご覧ください。

                                                   ng2dトップページ