 
 
 
 
 
   ![[*]](footnote.png) を用いて、HR図を描いてみよう。
 を用いて、HR図を描いてみよう。
| 項目 | 格納形式 | 行中の位置 | 
| HR番号 | I4 | 1 - 4 | 
| 名前 | A7 | 8 - 14 | 
| 赤経 (時) | I2 | 74 - 75 | 
| 赤経 (分) | I2 | 77 - 78 | 
| 赤経 (秒) | F4.1 | 80 - 83 | 
| 赤緯 符号 | A1 | 85 | 
| 赤緯 (度) | I2 | 86 - 87 | 
| 赤緯 (分) | I2 | 89 - 90 | 
| 赤緯 (秒) | I2 | 92 - 93 | 
| 実視等級 | F5.2 | 109 - 113 | 
| スペクトル型 | A2 | 137 - 138 | 
| 視差 | F5.3 | 170 - 174 | 
| 型 | 表記 | 意味 | 
| 文字 |  |  文字 | 
| 整数 |  |  桁整数(含符号) | 
| 実数 |  | 小数点以下  桁、少数と符号も含め全体で  文字 | 
|  | 小数点以下  桁、少数と符号も含め全体で  文字(単
精度) | |
|  | 小数点以下  桁、少数と符号も含め全体で  文字(倍
精度) | |
| 空白 |  | |
| 行替 |  | 
但し、格納形式の は、
 は、 文字分の文字データを意味し、
文字分の文字データを意味し、
 は、
 は、 桁の整数データである事を意味し、
桁の整数データである事を意味し、
 は、小数点以下
 は、小数点以下 桁で且つ小数点と符号も含めて
桁で且つ小数点と符号も含めて 桁の実数 
である事を意味している
 桁の実数 
である事を意味している  。尚、書式としては、他に
。尚、書式としては、他に
 を1.25E-08と表すような
を1.25E-08と表すような という形式がある。整数部は
という形式がある。整数部は
 から
から までの整数、仮数部は小数点以下
までの整数、仮数部は小数点以下 桁で、且つE-08という表記
も含めて全部で
桁で、且つE-08という表記
も含めて全部で 文字である事を意味している
文字である事を意味している  。
。
 、星までの距離を
、星までの距離を (パーセク)とすると、絶対等級
(パーセク)とすると、絶対等級 は
は
|  | (5) | 
 (パーセク)は、
年周視差を
(パーセク)は、
年周視差を (秒)、地球の公転長半径を
(秒)、地球の公転長半径を (天文単位)とすると、
(天文単位)とすると、
|  | (6) | 
格納形式が決まっているデータの読み込みや、決まった形式での書き込みのために、
FORMAT文なるものが用意されている。
以下に掲げるのは、BSC4カタログをBSC4.DATとして、読み込み、年周視差と
実視等級から絶対等級を求め、また、HR図にグラフ化する際に便利なように
スペクトル型を数値化し
た上で別のカタログに別の様式で格納するためのプログラム
![[*]](footnote.png) である。
である。
      program main
      implicit NONE
      integer N,m,maxindex
      parameter(N=50000,m=7,maxindex=10)
      integer j,number_of_stars,jj,jjj
      real Vmag,parallax
      real Abs_mag(N),Sp_index(N)
      character*1 Sp_type,Sp_sub,s(m),sub(maxindex)
      data s/'O','B','A','F','G','K','M'/
      data sub/'0','1','2','3','4','5','6','7','8','9'/
c-------------------------------------------------------------------------------
      number_of_stars=0
      open(unit=1,file='BSC4.DAT',status='OLD')
      open(unit=2,file='STARS.DAT',status='NEW')
! Read the BSC catalogue:
      do j=1,N
        read (1,100,end=20) Vmag,Sp_type,Sp_sub,parallax
        if(parallax.gt.0.)then
          do jj=1,m
            if(Sp_type.eq.s(jj))then
              do jjj=1,maxindex
                if(Sp_sub.eq.sub(jjj))then
                  number_of_stars=number_of_stars+1
                  Abs_mag(number_of_stars)=Vmag+5.0
     *                                     +5.0*log10(parallax)
                  Sp_index(number_of_stars)=float(10*(jj-1) + (jjj-1))
                  write(2,220) j,Vmag,
     *                         Sp_index(number_of_stars),
     *                         Abs_mag(number_of_stars)
                end if
              end do
            end if
          end do
        end if
      end do
   20 write(6,131) number_of_stars
      close(1)
      close(2)
  100 format(108x,f5.2,23x,2a1,31x,f5.3)
  131 format(////'   there are ',i6,' stars in the catalog'//)
  220 format(i7,3(3x,f5.2))
      stop
      end
READ文が今までのようにread(*,*)やread(1,*)ではなく、
read(1,100)となっている事に注目しよう。最初の1は、ユニット番号
1番から読み込む事を意味している事は、もう判ると思う。次の100は、
100番の文番号のついたFORMAT文の形式で読む事を意味している。
100番の文番号の文は、確かにFORMAT文になっており、表5.1の
形式で読み込もうとしている事が判るであろう。
READ文で、end=20とあるのは、データを読み終えたら、20番の
文番号に飛ぶ事を意味している。データを幾つ読むのか、予め定まって
いない場合に、使われる手段であることは以前に説明した。
この100番の文番号のついたFORMAT文では、HR番号や赤経赤緯等、今の目
的に要しないデータを読み飛ばすために、 Xで
Xで 個分の空白データを読んで
いる。
WRITE文も、220番のFORMAT文を従えており、実数形式で
実視等級、スペクトル型に対応する数値、絶対等級を書き込もうとしている。
220番のFORMAT文での3xは、
3個の空欄を空ける事を意味している。文番号は、1文字目から5文字目までに書く
事が約束となっている。
個分の空白データを読んで
いる。
WRITE文も、220番のFORMAT文を従えており、実数形式で
実視等級、スペクトル型に対応する数値、絶対等級を書き込もうとしている。
220番のFORMAT文での3xは、
3個の空欄を空ける事を意味している。文番号は、1文字目から5文字目までに書く
事が約束となっている。
 -座標
に対応させようとしている。Sp_typeがOであれば、1の位、Bであ
れば10代、Aであれば20代をあてがう。そこで、7元の配列s(7)を
s(1)='O'、s(2)='B'、
-座標
に対応させようとしている。Sp_typeがOであれば、1の位、Bであ
れば10代、Aであれば20代をあてがう。そこで、7元の配列s(7)を
s(1)='O'、s(2)='B'、 、s(7)='M'と定義して、
Sp_typeがどのs(n)に一致するかを調べれば良い。
ところで、プログラム中で中身が変わる事のない7元の配列s(7)を、
s(1)='O'、s(2)='B'、
、s(7)='M'と定義して、
Sp_typeがどのs(n)に一致するかを調べれば良い。
ところで、プログラム中で中身が変わる事のない7元の配列s(7)を、
s(1)='O'、s(2)='B'、 、s(7)='M'と定義式をいちいち
書くのは煩わしいし、プログラムもみにくくなる。
上のプログラムでは、代わりに、
data s/'O','B',
、s(7)='M'と定義式をいちいち
書くのは煩わしいし、プログラムもみにくくなる。
上のプログラムでは、代わりに、
data s/'O','B', 'M'/のような文で与えている。
このような文をDATA文という。これは、1文字の文字型データ配列s(7)を
定義し、
s(1)='O'、s(2)='B'、s(3)='A'、
'M'/のような文で与えている。
このような文をDATA文という。これは、1文字の文字型データ配列s(7)を
定義し、
s(1)='O'、s(2)='B'、s(3)='A'、 s(7)='M'
と与える役割を果たしている。その次の行の
data sub/'0','1',
 s(7)='M'
と与える役割を果たしている。その次の行の
data sub/'0','1', '9'/
も同様の役割を果たす。
'9'/
も同様の役割を果たす。
 
 
 
 
