!= Sample program for gt4_history/gt4f90io and ISPACK ! ! * 2006/10/25 Y.Morikawa ! * 2003/08/21 M.Odaka ! * 2001/02/27 S.Takehiro ! ! Solving 2-D Boussinesq fluid system ! \[ ! d\zeta/dt + J(\psi,\zeta) = Ra \; dT/dx + \nabla\zeta, \] \[ ! dT/dt + J(\psi,T) - d\psi/dx = \nabla T, \] \[ ! \nabla\psi = \zeta, \] \[ ! \psi = \zeta = T = 0 \quad at \; y=0,1. ! \] ! program benard2 use c2pack use gt4_history integer, parameter :: km=16, lm=8 ! 切断波数の設定(X,Y) integer, parameter :: im=64, jm=16 ! 格子点の設定(X,Y) real(8) :: psi(0:jm,0:im-1), temp(0:jm,0:im-1) real(8) :: wpsi(-km:km,lm), wtemp(-km:km,lm), wzeta(-km:km,lm) real(8) :: x(0:jm,0:im-1), y(0:jm,0:im-1) real(8), parameter :: xmin=0.0, xmax=4.0 real(8), parameter :: ymin=0.0, ymax=1.0 real(8), parameter :: Ra=1.0e4 real(8), parameter :: dt=1e-4 integer, parameter :: nt=5000, ndisp=500 type(GT_HISTORY) :: hst_psi, hst_temp integer :: i,j tinit = 0.0 ! 初期時刻設定 do i=0,im-1 do j=0,jm x(j,i)= (xmax-xmin)/im*i y(j,i)= (ymax-ymin)/jm*j enddo enddo temp = 0.0 temp(jm/2,im/2) = 0.01 call c2initial(im,jm,km,lm,xmax,ymax) wtemp = wsin_g(temp) ! 初期値設定 wpsi = 0.0 ; wzeta = 0.0 ! 初期値設定 temp = temp + 1-y ! データ出力用 call output_gtool4_init ! ヒストリー初期化 do it=1,nt wtemp = wtemp + dt*( -jac_ws(wpsi,wtemp) + dx_ws(wpsi) + nabla_ws(wtemp) ) wzeta = wzeta + & & dt*( - jac_ws(wpsi,wzeta) & & + Ra*dx_ws(wtemp) + nabla_ws(wzeta) ) wpsi = nabla_inv_ws(wzeta) if(mod(it,ndisp) .eq. 0)then temp = grid_ws(wtemp)+1-y psi = grid_ws(wpsi) call output_gtool4 endif enddo call output_gtool4_close stop contains subroutine output_gtool4_init call HistoryCreate( & ! ヒストリー作成 & file='psi.nc', title='convection in rotating annulus', & & source='Sample program of gt4_history/gt4f90io', & & institution='GFD_Dennou Club davis project', & & dims=(/'x','y','t'/), dimsizes=(/im,jm+1,0/), & & longnames=(/'X-coordinate','Y-coordinate','time '/),& & units=(/'1','1','1'/), & & origin=real(tinit), interval=real(ndisp*dt), & & history=hst_psi ) call HistoryPut('x',x(1,0:im-1),hst_psi) ! 変数出力 call HistoryPut('y',y(0:jm,1),hst_psi) ! 変数出力 call HistoryAddVariable( & ! 変数定義 & varname='psi', dims=(/'x','y','t'/), & & longname='stream function', units='1', xtype='double',& & history=hst_psi ) call HistoryCreate( & ! ヒストリー作成 & file='temp.nc', title='convection in rotating annulus', & & source='Sample program of gt4_history/gt4f90io', & & institution='GFD_Dennou Club davis project', & & dims=(/'x','y','t'/), dimsizes=(/im,jm+1,0/), & & longnames=(/'X-coordinate','Y-coordinate','time '/),& & units=(/'1','1','1'/), & & origin=real(tinit), interval=real(ndisp*dt), & & history=hst_temp ) call HistoryPut('x',x(1,0:im-1),hst_temp) ! 変数出力 call HistoryPut('y',y(0:jm,1),hst_temp) ! 変数出力 call HistoryAddVariable( & ! 変数定義 & varname='temp', dims=(/'x','y','t'/), & & longname='temperature', units='1', xtype='double',& & history=hst_temp) end subroutine output_gtool4_init subroutine output_gtool4 write(6,*) 'it = ',it call HistoryPut('t',real(it*dt),hst_psi) call HistoryPut('psi',trans_g(psi),hst_psi) call HistoryPut('t',real(it*dt),hst_temp) call HistoryPut('temp',trans_g(temp),hst_temp) end subroutine output_gtool4 subroutine output_gtool4_close call HistoryClose(hst_psi) call HistoryClose(hst_temp) end subroutine output_gtool4_close end program benard2