[ English | Japanese ] [ Gt4f90io Reference Manual | Gt4f90io Tutorial ]

!= Sample program for gt4_history/gt4f90io
!
! * 2007/06/25 M.Odaka
! * 2006/10/25 Y.Morikawa
! * 2003/08/21 M.Odaka
! * 2001/02/27 S.Takehiro
!
! Solving diffusion equation
! $! du/dt = \kappa d^2 u/dx^2 !$
! for giving values of $u$ at $x=[0,1]$.
!
program diffusion_3

use gt4_history                                   ! Access module(モジュール指定)
use dc_types, only : DP                           ! Access module (モジュール指定)

integer, parameter     :: nx=30                   ! Grid number (グリッド数)
integer, parameter     :: nt=200                  ! Time step number (時間ステップ数)
integer, parameter     :: ndisp=10                ! Output interval (出力間隔)
real(DP), parameter    :: dx=1.0/(nx-1)           ! Grid interval (グリッド間隔)
real(DP), parameter    :: dt=0.0005               ! Time step (時間間隔)
real(DP), dimension(nx):: x=(/(dx*(i-1),i=1,nx)/) ! X coordinate (座標変数)
real(DP), dimension(nx):: temp                    ! Temperature (温度)
real(DP), parameter    :: kappa=1.0               ! Diffusion coefficient (熱拡散係数)

tinit = 0.0                                       ! Set initial Time
! (初期時刻設定)

temp = exp(-((x-0.5)/0.1)**2)                     ! Set initial value
! (初期値設定)

call HistoryCreate( &                             ! Create output file
& file='diffusion_3.nc', &                      ! (ヒストリー作成)
& title='Diffusion equation',                        &
& source='Sample program of gt4_history/gt4f90io',   &
& institution='GFD_Dennou Club davis project',       &
& dims=(/'x','t'/), dimsizes=(/nx,0/),               &
& longnames=(/'X-coordinate','time        '/),       &
& units=(/'m','s'/),                                 &
& origin=real(tinit), interval=real(ndisp*dt) )

call HistoryPut('x',x)                            ! Output 'x' (次元変数出力)

call HistoryAddVariable( &                        ! Set output variable
& varname='temp', dims=(/'x','t'/), &           ! (変数定義)
& longname='temperature', units='K', xtype='double')

call HistoryPut('temp',temp)                      ! Output 'temp' (変数出力)

do it=1,nt
temp(2:nx-1) = temp(2:nx-1) &                   ! Time integration (時間積分)
& + kappa*(temp(3:nx)-2*temp(2:nx-1)+temp(1:nx-2))/dx**2*dt

if ( mod(it,ndisp) == 0 ) then
call HistoryPut('temp',temp)                  ! Output 'temp' (変数出力)
endif
enddo

call HistoryClose
stop
end program diffusion_3


ここでは実数型変数の精度を, dc_types モジュールが用意する 倍精度実数種別型パラメタ DP を用いて指定しました. dc_types モジュールにはこの他に整数型や文字型変数のための 種別型パラメタが用意されています. 詳しくは リファレンスマニュアル を参照してください.

$Id: dc_types.rd,v 1.5 2007/08/29 08:52:03 odakker2 Exp$
gtool4 Development Group / GFD Dennou Staff