c---------------------------------------------------------------------| c FDTD3dm1.f ( Maxwell Equation Simulator ) | c | c FDTD法によるスラブ座標系(x,y,z)でのプラズマ中における | c マクスウェル方程式の2次元数値計算 | c サブルーチン:PLASMA | c 位置(x,y,z)での密度 F ,磁場 GX, GY, GZ,減衰率 dmp を与える | c サブルーチン:YUDENTAI | c 位置(x,y,z)を与えて,比誘電率(Sr, Si), 比透磁率 Qr を与える | c サブルーチン:REISIN | c x=Xminでの入射波形の時間分布を与える | c サブルーチン:PROFILE | c x=Xminでの入射波形のz方向分布を与える | c Conducting Wall Bounary Conditionを用いる | c プログラム作成者: 北條仁士, 筑波大学 2004年 11月 | c---------------------------------------------------------------------| implicit real*8(a-h,o-z) dimension BX(501,201,201), BY(501,201,201), BZ(501,201,201) dimension EX(501,201,201), EY(501,201,201), EZ(501,201,201) dimension PX(501,201,201), PY(501,201,201), PZ(501,201,201) dimension EX1(501,201,201), EY1(501,201,201), EZ1(501,201,201) dimension DE(501) common /BLK1/w0,B0,OMEGA pi = 3.141592654d0 c---------------------------------------------------------------------| c 数値計算パラメータの設定 | c w0 = 3.0d11 のとき,長さの規格化 c/w0 = 1 mm , dx=dy=dz= 0.1 mm | c w0 = 3.0d10 のとき,長さの規格化 c/w0 = 1 cm , dx=dy=dz= 1.0 mm | c---------------------------------------------------------------------| w0 = 2.5d10 B0 = 1.0d0 dt = 0.05d0 dx = 0.10d0 dy = 0.10d0 dz = 0.10d0 wx = dt / dx wy = dt / dy wz = dt / dz c---------------------------------------------------------------------| c システムパラメータの設定 | c 入力周波数:OMEGA は GHz で表示 | c システム長:Xmin, Zmin, Xmax, Zmax はミリ単位で表示 | c---------------------------------------------------------------------| itmax = 5000 OMEGA = 2.45d0 FREQ = 2.0d9*pi*OMEGA / w0 Xmin = 0.0d0 Ymin = 0.0d0 Zmin = 0.0d0 Xmax = 20.0d0 Ymax = 10.0d0 Zmax = 10.0d0 IMX = idint( (Xmax - Xmin) / dx + 0.5d0 ) JMX = idint( (Ymax - Ymin) / dy + 0.5d0 ) KMX = idint( (Zmax - Zmin) / dz + 0.5d0 ) IMDX = IMX / 100 JMDY = JMX / 100 KMDZ = KMX / 100 c---------------------------------------------------------------------| c 電磁場の初期値の設定 | c---------------------------------------------------------------------| do k=1,KMX+1 do j=1,JMX+1 do i=1,IMX+1 BX(i,j,k) = 0.0d0 BY(i,j,k) = 0.0d0 BZ(i,j,k) = 0.0d0 EX(i,j,k) = 0.0d0 EY(i,j,k) = 0.0d0 EZ(i,j,k) = 0.0d0 PX(i,j,k) = 0.0d0 PY(i,j,k) = 0.0d0 PZ(i,j,k) = 0.0d0 EX1(i,j,k) = 0.0d0 EY1(i,j,k) = 0.0d0 EZ1(i,j,k) = 0.0d0 end do end do end do c---------------------------------------------------------------------| c 計算のスタート:時間 : time = ( it ) * dt | c---------------------------------------------------------------------| it = 0 20 continue it = it + 1 c---------------------------------------------------------------------| c z=Zminで励起する入射波の条件設定 | c---------------------------------------------------------------------| time = dt * dfloat(it) do k=1,KMX+1 do j=1,JMX+1 z = dfloat(k-1)*dz + Zmin y = dfloat(j-1)*dy + Ymin p0 = 2.d0*pi*OMEGA / 30.d0 C1 = - p0*pi/10.d0 / ( (pi/10.d0)**2 + (pi/10.d0)**2 ) C2 = p0*pi/10.d0 / ( (pi/10.d0)**2 + (pi/10.d0)**2 ) c BX(1,j,k)= dcos(pi*y/10.d0)*dcos(pi*z/10.d0)*dsin(-FREQ*time) c EY(1,j,k)= C1*dcos(pi*y/10.d0)*dsin(pi*z/10.d0)*dcos(-FREQ*time) c EZ(1,j,k)= C2*dsin(pi*y/10.d0)*dcos(pi*z/10.d0)*dcos(-FREQ*time) p0 = 2.d0*pi*OMEGA / 30.d0 C2 = p0*pi/10.d0 / ( (pi/10.d0)**2 + (pi/10.d0)**2 ) EX(1,j,k)= dsin(pi*y/10.d0)*dsin(pi*z/10.d0)*dsin(-FREQ*time) c BZ(1,j,k)= C2*dcos(pi*y/10.d0)*dsin(pi*z/10.d0)*dcos(-FREQ*time) end do end do c---------------------------------------------------------------------| c 電磁場の磁場成分 BX, BY, BZ の計算 | c---------------------------------------------------------------------| do i=1,IMX+1 do j=1,JMX do k=1,KMX x = dfloat(i-1)*dx + Xmin + dx/2.d0 y = dfloat(j-1)*dy + Ymin + dy/2.d0 z = dfloat(k-1)*dz + Zmin + dz/2.d0 CALL YUDENTAI( x, y, z, Sr, Si, Qr ) BX(i,j,k) = BX(i,j,k) + wz*( EY(i,j,k+1) - EY(i,j,k) ) / Qr BX(i,j,k) = BX(i,j,k) - wy*( EZ(i,j+1,k) - EZ(i,j,k) ) / Qr end do end do end do do i=1,IMX do j=1,JMX+1 do k=1,KMX x = dfloat(i-1)*dx + Xmin + dx/2.d0 y = dfloat(j-1)*dy + Ymin + dy/2.d0 z = dfloat(k-1)*dz + Zmin + dz/2.d0 CALL YUDENTAI( x, y, z, Sr, Si, Qr ) BY(i,j,k) = BY(i,j,k) + wx*( EZ(i+1,j,k) - EZ(i,j,k) ) / Qr BY(i,j,k) = BY(i,j,k) - wz*( EX(i,j,k+1) - EX(i,j,k) ) / Qr end do end do end do do i=1,IMX do j=1,JMX do k=1,KMX+1 x = dfloat(i-1)*dx + Xmin + dx/2.d0 y = dfloat(j-1)*dy + Ymin + dy/2.d0 z = dfloat(k-1)*dz + Zmin + dz/2.d0 CALL YUDENTAI( x, y, z, Sr, Si, Qr ) BZ(i,j,k) = BZ(i,j,k) + wy*( EX(i,j+1,k) - EX(i,j,k) ) / Qr BZ(i,j,k) = BZ(i,j,k) - wx*( EY(i+1,j,k) - EY(i,j,k) ) / Qr end do end do end do c---------------------------------------------------------------------| c 誘起電流成分 PX, PY, PZ の計算 | c---------------------------------------------------------------------| do k=2,KMX do j=2,JMX do i=2,IMX x = dfloat(i-1)*dx + Xmin y = dfloat(j-1)*dy + Ymin z = dfloat(k-1)*dz + Zmin CALL PLASMA( x, y, z, dmp, F, A, GX, GY, GZ ) C1 = ( 1.d0 - dmp*dt/2.d0 ) / ( 1.d0 + dmp*dt/2.d0) D1 = 1.d0 / ( 1.d0 + dmp*dt/2.d0) PXT = C1*PX(i,j,k) + D1*dt*F*EX(i,j,k) PXT = PXT - D1*dt*A*( PY(i,j,k)*GZ - PZ(i,j,k)*GY ) PYT = C1*PY(i,j,k) + D1*dt*F*EY(i,j,k) PYT = PYT - D1*dt*A*( PZ(i,j,k)*GX - PX(i,j,k)*GZ ) PZT = C1*PZ(i,j,k) + D1*dt*F*EZ(i,j,k) PZT = PZT - D1*dt*A*( PX(i,j,k)*GY - PY(i,j,k)*GX ) PX(i,j,k) = PXT PY(i,j,k) = PYT PZ(i,j,k) = PZT end do end do end do c---------------------------------------------------------------------| c 電磁場の電場成分 EX, EY, EZ の計算 | c---------------------------------------------------------------------| do i=1,IMX do j=2,JMX do k=2,KMX x = dfloat(i-1)*dx + Xmin y = dfloat(j-1)*dy + Ymin z = dfloat(k-1)*dz + Zmin CALL YUDENTAI( x, y, z, Sr, Si, Qr ) V = ( OMEGA*2.0d9*pi/w0 ) * Si / Sr C = ( 1.d0 - V*dt/2.d0 ) / ( 1.d0 + V*dt/2.d0) D = 1.d0 / Sr / ( 1.d0 + V*dt/2.d0) EX(i,j,k) = C*EX(i,j,k) - D*dt*PX(i,j,k) EX(i,j,k) = EX(i,j,k) + D*wy*( BZ(i,j,k) - BZ(i,j-1,k) ) EX(i,j,k) = EX(i,j,k) - D*wz*( BY(i,j,k) - BY(i,j,k-1) ) end do end do end do do i=2,IMX do j=1,JMX do k=2,KMX x = dfloat(i-1)*dx + Xmin y = dfloat(j-1)*dy + Ymin z = dfloat(k-1)*dz + Zmin CALL YUDENTAI( x, y, z, Sr, Si, Qr ) V = ( OMEGA*2.0d9*pi/w0 ) * Si / Sr C = ( 1.d0 - V*dt/2.d0 ) / ( 1.d0 + V*dt/2.d0) D = 1.d0 / Sr / ( 1.d0 + V*dt/2.d0) EY(i,j,k) = C*EY(i,j,k) - D*dt*PY(i,j,k) EY(i,j,k) = EY(i,j,k) + D*wz*( BX(i,j,k) - BX(i,j,k-1) ) EY(i,j,k) = EY(i,j,k) - D*wx*( BZ(i,j,k) - BZ(i-1,j,k) ) end do end do end do do i=2,IMX do j=2,JMX do k=1,KMX x = dfloat(i-1)*dx + Xmin y = dfloat(j-1)*dy + Ymin z = dfloat(k-1)*dz + Zmin CALL YUDENTAI( x, y, z, Sr, Si, Qr ) V = ( OMEGA*2.0d9*pi/w0 ) * Si / Sr C = ( 1.d0 - V*dt/2.d0 ) / ( 1.d0 + V*dt/2.d0) D = 1.d0 / Sr / ( 1.d0 + V*dt/2.d0) EZ(i,j,k) = C*EZ(i,j,k) - D*dt*PZ(i,j,k) EZ(i,j,k) = EZ(i,j,k) + D*wx*( BY(i,j,k) - BY(i-1,j,k) ) EZ(i,j,k) = EZ(i,j,k) - D*wy*( BX(i,j,k) - BX(i,j-1,k) ) end do end do end do c---------------------------------------------------------------------| c YZ面(x=Xmax)でのMurの1次の吸収境界条件 | c---------------------------------------------------------------------| CT = ( wx - 1.d0 ) / ( wx + 1.d0 ) do j=1,JMX do k=1,KMX+1 EY(IMX+1,j,k) = EY1(IMX,j,k) + CT*( EY(IMX,j,k)-EY1(IMX+1,j,k) ) end do end do do j=1,JMX+1 do k=1,KMX EZ(IMX+1,j,k) = EZ1(IMX,j,k) + CT*( EZ(IMX,j,k)-EZ1(IMX+1,j,k) ) end do end do c---------------------------------------------------------------------| c YZ面(x=Xmax)での EY=EZ=0 | c---------------------------------------------------------------------| c do j=1,JMX c do k=1,KMX+1 c EY(IMX+1,j,k) = 0.d0 c end do c end do c do j=1,JMX+1 c do k=1,KMX c EZ(IMX+1,j,k) = 0.d0 c end do c end do c---------------------------------------------------------------------| c YZ面(x=Xmin)での EY=EZ=0 | c---------------------------------------------------------------------| c do j=1,JMX c do k=1,KMX+1 c EY(1,j,k) = 0.d0 c end do c end do c do j=1,JMX+1 c do k=1,KMX c EZ(1,j,k) = 0.d0 c end do c end do c---------------------------------------------------------------------| c XZ面(y=Ymax)での EX=EZ=0 | c---------------------------------------------------------------------| do i=1,IMX+1 do k=1,KMX EZ(i,JMX+1,k) = 0.d0 end do end do do i=1,IMX do k=1,KMX+1 EX(i,JMX+1,k) = 0.d0 end do end do c---------------------------------------------------------------------| c XZ面(y=Ymin)での EX=EZ=0 | c---------------------------------------------------------------------| do i=1,IMX+1 do k=1,KMX EZ(i,1,k) = 0.d0 end do end do do i=1,IMX do k=1,KMX+1 EX(i,1,k) = 0.d0 end do end do c---------------------------------------------------------------------| c XY面(z=Zmax)での EX=EY=0 | c---------------------------------------------------------------------| do i=1,IMX do j=1,JMX+1 EX(i,j,KMX+1) = 0.d0 end do end do do i=1,IMX+1 do j=1,JMX EY(i,j,KMX+1) = 0.d0 end do end do c---------------------------------------------------------------------| c XY面(z=Zmin)での EX=EY=0 | c---------------------------------------------------------------------| do i=1,IMX do j=1,JMX+1 EX(i,j,1) = 0.d0 end do end do do i=1,IMX+1 do j=1,JMX EY(i,j,1) = 0.d0 end do end do c--------------------------------------------------------------------- do k=1,KMX+1 do j=1,JMX+1 do i=1,IMX+1 EX1(i,j,k) = EX(i,j,k) EY1(i,j,k) = EY(i,j,k) EZ1(i,j,k) = EZ(i,j,k) end do end do end do c---------------------------------------------------------------------| c 電磁場の十分に小さい値はゼロで置き換える | c it = itmax になれば,計算を終了する | c---------------------------------------------------------------------| do k=1,KMX+1 do j=1,JMX+1 do i=1,IMX+1 if( dabs(EX(i,j,k)) .lt. 1.0d-80 ) EX(i,j,k) = 0.d0 if( dabs(EY(i,j,k)) .lt. 1.0d-80 ) EY(i,j,k) = 0.d0 if( dabs(EZ(i,j,k)) .lt. 1.0d-80 ) EZ(i,j,k) = 0.d0 if( dabs(BX(i,j,k)) .lt. 1.0d-80 ) BX(i,j,k) = 0.d0 if( dabs(BY(i,j,k)) .lt. 1.0d-80 ) BY(i,j,k) = 0.d0 if( dabs(BZ(i,j,k)) .lt. 1.0d-80 ) BZ(i,j,k) = 0.d0 end do end do end do IF( it.EQ.500 ) go to 501 IF( it.EQ.1000 ) go to 502 IF( it.EQ.1500 ) go to 503 IF( it.EQ.2000 ) go to 504 IF( it.EQ.2500 ) go to 505 IF( it.EQ.3000 ) go to 506 IF( it.EQ.3500 ) go to 507 IF( it.EQ.4000 ) go to 508 IF( it.EQ.4500 ) go to 509 if( it.eq.itmax ) go to 510 go to 20 c---------------------------------------------------------------------| c 電磁場の値のデータファイルを作る | c---------------------------------------------------------------------| 501 open( 11, FILE='exp1', STATUS='unknown' ) do i=1,IMX+1 x = dfloat(i-1)*dx + Xmin write(11,911) x, EX(i,51,51) 911 format(1h , e15.5, 2x, e15.5 ) end do close(11) open( 21, FILE='eyp1', STATUS='unknown' ) do i=1,IMX+1 x = dfloat(i-1)*dx + Xmin write(21,911) x, EY(i,51,51) end do close(21) go to 20 c-------------------------------------------------- 502 open( 12, FILE='exp2', STATUS='unknown' ) do i=1,IMX+1 x = dfloat(i-1)*dx + Xmin write(12,911) x, EX(i,51,51) end do close(12) open( 22, FILE='eyp2', STATUS='unknown' ) do i=1,IMX+1 x = dfloat(i-1)*dx + Xmin write(22,911) x, EY(i,51,51) end do close(22) go to 20 c-------------------------------------------------- 503 open( 13, FILE='exp3', STATUS='unknown' ) do i=1,IMX+1 x = dfloat(i-1)*dx + Xmin write(13,911) x, EX(i,51,51) end do close(13) open( 23, FILE='eyp3', STATUS='unknown' ) do i=1,IMX+1 x = dfloat(i-1)*dx + Xmin write(23,911) x, EY(i,51,51) end do close(23) go to 20 c-------------------------------------------------- 504 open( 14, FILE='exp4', STATUS='unknown' ) do i=1,IMX+1 x = dfloat(i-1)*dx + Xmin write(14,911) x, EX(i,51,51) end do close(14) open( 24, FILE='eyp4', STATUS='unknown' ) do i=1,IMX+1 x = dfloat(i-1)*dx + Xmin write(24,911) x, EY(i,51,51) end do close(24) go to 20 c-------------------------------------------------- 505 open( 15, FILE='exp5', STATUS='unknown' ) do i=1,IMX+1 x = dfloat(i-1)*dx + Xmin write(15,911) x, EX(i,51,51) end do close(15) open( 25, FILE='eyp5', STATUS='unknown' ) do i=1,IMX+1 x = dfloat(i-1)*dx + Xmin write(25,911) x, EY(i,51,51) end do close(25) go to 20 c-------------------------------------------------- 506 open( 16, FILE='exp6', STATUS='unknown' ) do i=1,IMX+1 x = dfloat(i-1)*dx + Xmin write(16,911) x, EX(i,51,51) end do close(16) open( 26, FILE='eyp6', STATUS='unknown' ) do i=1,IMX+1 x = dfloat(i-1)*dx + Xmin write(26,911) x, EY(i,51,51) end do close(26) go to 20 c-------------------------------------------------- 507 open( 17, FILE='exp7', STATUS='unknown' ) do i=1,IMX+1 x = dfloat(i-1)*dx + Xmin write(17,911) x, EX(i,51,51) end do close(17) open( 27, FILE='eyp7', STATUS='unknown' ) do i=1,IMX+1 x = dfloat(i-1)*dx + Xmin write(27,911) x, EY(i,51,51) end do close(27) go to 20 c-------------------------------------------------- 508 open( 18, FILE='exp8', STATUS='unknown' ) do i=1,IMX+1 x = dfloat(i-1)*dx + Xmin write(18,911) x, EX(i,51,51) end do close(18) open( 28, FILE='eyp8', STATUS='unknown' ) do i=1,IMX+1 x = dfloat(i-1)*dx + Xmin write(28,911) x, EY(i,51,51) end do close(28) go to 20 c-------------------------------------------------- 509 open( 19, FILE='exp9', STATUS='unknown' ) do i=1,IMX+1 x = dfloat(i-1)*dx + Xmin write(19,911) x, EX(i,51,51) end do close(19) open( 29, FILE='eyp9', STATUS='unknown' ) do i=1,IMX+1 x = dfloat(i-1)*dx + Xmin write(29,911) x, EY(i,51,51) end do close(29) go to 20 c------------------------------------------------- 510 open( 20, FILE='exp10', STATUS='unknown' ) do i=1,IMX+1 x = dfloat(i-1)*dx + Xmin write(20,911) x, EX(i,51,51) end do close(20) open( 30, FILE='eyp10', STATUS='unknown' ) do i=1,IMX+1 x = dfloat(i-1)*dx + Xmin write(30,911) x, EY(i,51,51) end do close(30) open( 31, FILE='exdata10', STATUS='unknown' ) do j=1,JMX+1,JMDY write(31,931) (EX(131,j,k),k=1,KMX+1,KMDZ) 931 format(1h , e15.5, 100(2x, e15.5) ) end do close(31) open( 32, FILE='eydata10', STATUS='unknown' ) do j=1,JMX+1,JMDY write(32,932) (EY(131,j,k),k=1,KMX+1,KMDZ) 932 format(1h , e15.5, 100(2x, e15.5) ) end do close(32) open( 33, FILE='ezdata10', STATUS='unknown' ) do j=1,JMX+1,JMDY write(33,933) (EZ(131,j,k),k=1,KMX+1,KMDZ) 933 format(1h , e15.5, 100(2x, e15.5) ) end do close(33) open( 34, FILE='dexp10', STATUS='unknown' ) do i=1,IMX x = dfloat(i-1)*dx + Xmin DE(i) = EX(i,51,51) - EX(i+1,51,51) write(34,934) x, DE(i) 934 format(1h , e15.5, 2x, e15.5 ) end do close(34) open( 35, FILE='SLEX10', STATUS='unknown' ) do i=1,IMX+1,2 write(35,935) (EX(i,51,k),k=1,KMX+1,KMDZ) 935 format(1h , e15.5, 100(2x, e15.5) ) end do close(35) open( 36, FILE='SLEY10', STATUS='unknown' ) do i=1,IMX+1,2 write(36,936) (EY(i,51,k),k=1,KMX+1,KMDZ) 936 format(1h , e15.5, 100(2x, e15.5) ) end do close(36) open( 37, FILE='SLEZ10', STATUS='unknown' ) do i=1,IMX+1,2 write(37,937) (EZ(i,51,k),k=1,KMX+1,KMDZ) 937 format(1h , e15.5, 100(2x, e15.5) ) end do close(37) c---------------------------------------------------------------------| c メインプログラムの終了 | c---------------------------------------------------------------------| 9999 stop end c---------------------------------------------------------------------| c サブルーチン:PLASMA | c 位置(x,z)での密度 F ,磁場 GX, GY, GZ,減衰率 dmp を与える | c 最大密度 :DENTY は cm-3 で表示 | c 磁場 :B0, BEX0 は Tesla で表示 | c---------------------------------------------------------------------| SUBROUTINE PLASMA( x, y, z, dmp, F, A, GX, GY, GZ ) implicit real*8(a-h, o-z) common /BLK1/w0,B0,OMEGA pi = 3.141592654d0 DENTY = 3.0d11 cc DENTY = 6.75d11 BEX0 = 0.0d0 dmp = 0.08d0 dmp = 0.04d0 F0 = 3.181d9 * DENTY / ( w0*w0 ) A = 1.76d11 * B0 / w0 cc IF( x .LT. 12.d0 ) F = 0.0d0 cc IF( x .GE. 12.d0 ) F = F0*(x-12.d0)/8.d0 cc IF( x .GE. 12.d0 ) F = F0 IF( x.LT.8.0d0 ) F = 0.0d0 IF( x.LT.8.0d0 ) go to 999 F = F0 * dtanh( (x - 8.0d0)/2.0d0 ) cc F = F0*( 1.d0 + dtanh( (x-12.d0)/3.d0 ) )/2.d0 F = F *( dtanh((z-2.d0)/1.5d0) - dtanh((z-8.d0)/1.5d0) )/2.d0 F = F *( dtanh((y-2.d0)/1.5d0) - dtanh((y-8.d0)/1.5d0) )/2.d0 999 GX = 0.0d0 GZ = 0.0d0 GY = BEX0 / B0 return end c---------------------------------------------------------------------| c サブルーチン:YUDENTAI | c 位置(x,z)での比誘電率(Sr, Si), 比透磁率 Qrを与える | c---------------------------------------------------------------------| SUBROUTINE YUDENTAI( x, y, z, Sr, Si, Qr ) implicit real*8(a-h,o-z) common /BLK1/w0,B0,OMEGA pi = 3.141592654d0 Sr = 1.d0 Si = 0.d0 Qr = 1.d0 IF( (x-7.d0)*(x-8.d0) .LT. 0.d0 ) Sr = 4.0d0 IF( x .EQ. 7.d0 ) Sr = 2.5d0 IF( x .EQ. 8.d0 ) Sr = 2.5d0 999 return end c---------------------------------------------------------------------| c サブルーチン:REISIN | c x=Xminでの入射波の波形の時間分布を与える | c---------------------------------------------------------------------| c SUBROUTINE REISIN( time, Bunpt ) c implicit real*8(a-h,o-z) c common /BLK1/w0,B0,OMEGA c pai = 3.141592654d0 c Freq = 2.0d9*pai*OMEGA / w0 c Bunpt = dsin( Freq * time ) c return c end c---------------------------------------------------------------------| c サブルーチン:PROFILE | c x=Xexcでの入射波の波形のz方向分布を与える | c---------------------------------------------------------------------| c SUBROUTINE PROFILE( y, z, Bunp ) c implicit real*8(a-h,o-z) c pai = 3.141592654d0 c yy = y - 5.d0 c zz = z - 5.d0 c R = dsqrt( yy**2 + zz**2 ) c Bunp = dexp( - ( R / 2.0d0 )**2 ) c IF( R.LE.2.d0 ) Bunp = ( 1.d0 - (R/2.d0)**2 )**2 c IF( R.GT.2.d0 ) Bunp = 0.d0 c return c end