現在(2015-11-07 (土) 15:06:03)作成中です。 既に書いている内容も大幅に変わる可能性が高いので注意。


神戸大学 大学院システム情報学研究科 計算科学専攻 陰山 聡



【目次】


前回の宿題は、「thermal_diffusion.f90を理解しておくこと」であったので、 その中身がわかっているものと仮定して今回は話を進める。

2次元可視化

今回は2次元データの可視化を行う。 前回と同様gnuplotを利用する。

gnuplotで2次元データをプロットする場合、そのデータのフォーマットは

x00 y00 関数値
x01 y00 関数値
x02 y00 関数値
 ・
 ・
 ・
x09 y00 関数値
(空行)
x00 y01 関数値
x01 y01 関数値
x02 y01 関数値
 ・
 ・
 ・
x09 y01 関数値
(空行)
 ・
 ・
 ・
x09 y09 関数値

である。

2次元データ出力ルーチン

thermal_diffusion.f90による2次元データ出力ルーチン temperature__output_2d_profile は、正方形上(x,y平面上)に分布する温度をすべて書き出すものである。 中身を見てみよう。

 subroutine temperature__output_2d_profile
   real(DP), dimension(0:MESH_SIZE+1,    &
                       0:MESH_SIZE+1) :: prof
   integer                            :: counter = 0   ! saved
   integer                            :: ierr          ! use for MPI
   integer                            :: jstart_, jend_
   character(len=4)                   :: serial_num    ! put on file name
   character(len=*), parameter        :: base = "../data/temp.2d."
   integer :: i, j
   call set_jstart_and_jend(jstart_,jend_)
   write(serial_num,'(i4.4)') counter
   prof(:,:) = parallel__set_prof_2d(jstart_,jend_,temp(:,jstart_:jend_))
   if ( myrank==0 ) then
      open(10,file=base//serial_num)
      do j = 0 , MESH_SIZE+1
         do i = 0 , MESH_SIZE+1
            write(10,*) i, j, prof(i,j)
         end do
         write(10,*)' ' ! gnuplot requires a blank line here.
      end do
      close(10)
   end if
   counter = counter + 1
 end subroutine temperature__output_2d_profile

【演習】

heat2_sendrecv_check.f90をmpif90コマンドでコンパイルし、

#ref(): Usage:([pagename/]attached-file-name[,parameters, ... ][,title])

宿題

上記 thermal_diffusion.f90コードを理解しておくこと。(レポート提出必要なし。)

授業アンケート

今回の演習内容はどうでしたか?(どれか一つ、一度だけ押してください。)

選択肢 投票
簡単すぎた 0  
難しすぎた 0  
ちょうどよかった 0  

質問、コメントなど自由にどうぞ

「お名前」欄は空欄で可。

最新の10件を表示しています。 コメントページを参照

  • 感想、質問など気楽に書き込んでください。もちろん匿名で可。名前欄を空白のままでOK。 -- 陰山? 2010-07-15 (木) 00:13:47
  • これはテストです。 -- テスト? 2011-03-11 (金) 14:35:26
お名前:

as of 2024-04-20 (土) 17:19:46 (6113)