* PACKAGE ASTRT !" 初期値入出力( 1 time level ) *" ver 1.00 92/10/13 takepiro * ********************************************************************** SUBROUTINE RDSTRT !" 初期値の読み込みと再生成 O ( GAU , GAV , GAW , GAT , O GATOR , GAPOR , O ITA , ISTEP , C ITSTRT, ALAT , DLAT , ARAD , DRAD ) * * [PARAM] #ifdef SYS_IBMS INCLUDE (ZCDIM) !" 格子点数, 波数 INCLUDE (ZHDIM) !" 文字列文字数 #else #include "zcdim.F" !" 格子点数, 波数 #include "zhdim.F" !" 文字列文字数 #endif * * [OUTPUT] REAL GAU ( IDIM, JDIM, 0:KDIM ) !" 西風 u REAL GAV ( IDIM, JDIM, 0:KDIM ) !" 南風 v REAL GAW ( IDIM, JDIM, 0:KDIM ) !" 鉛直風 w REAL GAT ( IDIM, JDIM, 0:KDIM ) !" 温度 T REAL GATOR ( IDIM, JDIM, 0:KDIM ) !" トロイダル Ψ REAL GAPOR ( IDIM, JDIM, 0:KDIM ) !" ポロイダル Φ *" : 格子点データ(t) * INTEGER ISTEP !" 通しステップ数 INTEGER ITA !" 通し時間(t) *" : 時刻等 * * [CONST] INTEGER ITSTRT !" 計算開始時刻 REAL ALAT ( JDIM ) !" 緯度 REAL DLAT ( JDIM ) !" 緯度荷重 REAL ARAD ( 0:KDIM ) !" rレベル(整数) REAL DRAD ( 0:KDIM ) !" Δr(整数) *" : 座標格子 * * [INTERNAL WORK] INTEGER ITINIT !" 初期値時刻 INTEGER ITDBFR !" 同後方許容誤差 INTEGER ITDAFT !" 同前方許容誤差 INTEGER ISTEPV, II, ISCDIF, ITDIF INTEGER IFPAR, JFPAR, IFLSTR, IERR INTEGER IEOD, ISTEPA * * [INTERNAL PARAM] INTEGER IDATEA( 6 ) !" 時刻:年月日時分秒 INTEGER IDATEB( 6 ) !" 時刻:年月日時分秒 CHARACTER FILE *(NFILN) !" 入力ファイル:初期値 CHARACTER TUNIT *4 !" 時刻単位 INTEGER TINIT !" 初期データ時刻 INTEGER IDATEI( 6 ) !" 同年月日時分秒 INTEGER DTBFR !" 同後方許容誤差 INTEGER DTAFTR !" 同前方許容誤差 DATA FILE / ' ' / DATA TUNIT / 'DAY ' / DATA TINIT / -999 / DATA DTBFR / 0 / DATA DTAFTR / 10 / INTEGER IFILED INTEGER IOMODE DATA IFILED / 40 / DATA IOMODE / 0 / * NAMELIST /NMINIT/ FILE, TINIT, DTBFR, DTAFTR NAMELIST /NMDATE/ IDATEI * WRITE ( 6,* ) ' INITIAL DATA READ DATE=92/09/30' * *" << INITIM : 初期値の時刻 >> * ITINIT = ITSTRT CALL REWNML ( IFPAR , JFPAR ) READ ( IFPAR, NMINIT, END=190 ) 190 WRITE ( JFPAR, NMINIT ) * IF ( TINIT .NE. -999 ) THEN CALL ACTIME ( TINIT, TUNIT, '#', ITINIT ) ELSE ITINIT = ITSTRT ENDIF * CALL ACTIME ( DTBFR, TUNIT, '#', ITDBFR ) CALL ACTIME ( DTAFTR, TUNIT, '#', ITDAFT ) * IF ( ITINIT .GE. 0 ) THEN WRITE ( 6,* ) ' TRY TO READ HIST AT T = ', ITINIT ELSE CALL REWNML ( IFPAR , JFPAR ) READ ( IFPAR, NMDATE, END=1090 ) 1090 WRITE ( JFPAR, NMDATE ) WRITE ( 6,* ) ' TRY TO READ HIST AT T = ', IDATEI ENDIF * *" << RDSTR : 初期値の読み込み >> * CALL IFLOPN O ( IFLSTR, IERR , I FILE , IFILED, 'READ', 'UNFORMATTED' ) * CALL RDGDST !" 初期値(GA)の読み込み O ( GAU , GAV , GAW , GAT , O ITA , IDATEA, ISTEPA, IEOD , I 'GA' , ITINIT, IDATEI, I ITDBFR, ITDAFT, IFLSTR, IOMODE ) * IF ( IEOD .GE. 1 ) THEN CALL MSGDMP( 'E','GRSTRT','***** No Initial Data. ******') * ** STOP ** ENDIF * *" << VORDIV : 渦度発散の読み込みと生成 >> * CALL RDGDSV !" 渦度発散(GA)の読み込み O ( GATOR , GAPOR , O ISTEPV, IEOD , I 'GA' , IFLSTR, IOMODE ) * c$$$ IF ( ( IEOD.GE.1 ) .OR. ( ISTEPV.NE.ISTEP ) ) THEN c$$$ CALL DSTRT !" 初期データの再生成 c$$$ M ( GAU , GAV , GAW , GAT , c$$$ O GATOR , GAPOR , c$$$ C ALAT , DLAT , c$$$ C ARAD , DRAD ) c$$$ ENDIF c$$$ ENDIF * CALL GFCLSE ( IFLSTR ) * *" << CHGDAT : 日付の変更 >> * c$$$ IF ( ITINIT .GE. 0 ) THEN c$$$ DO 5100 II = 1,6 c$$$ IDATEI( II ) = IDATEB( II ) c$$$ 5100 CONTINUE c$$$* c$$$ CALL REWNML ( IFPAR , JFPAR ) c$$$ READ ( IFPAR, NMDATE, END=5190 ) c$$$ 5190 WRITE ( JFPAR, NMDATE ) c$$$* c$$$ CALL DIDATE c$$$ O ( ISCDIF, c$$$ I IDATEA, IDATEB ) c$$$ DO 5300 II = 1, 6 c$$$ IDATEB( II ) = IDATEI( II ) c$$$ 5300 CONTINUE c$$$ CALL AIDATE c$$$ O ( IDATEA, c$$$ I IDATEB, ISCDIF ) c$$$* c$$$ ITDIF = ITB - ITINIT c$$$ ITA = ITA - ITB + ITDIF + ITSTRT c$$$ ITB = ITDIF + ITSTRT c$$$ ELSE c$$$* c$$$ ITA = ITA - ITB + ITSTRT c$$$ ITB = ITSTRT c$$$ ENDIF c$$$* c$$$ IF ( ITINIT .NE. ITSTRT ) THEN c$$$ CALL MSGDMP('M', 'GRSTRT', 'INITIAL TIME IT IS MODIFIED' ) c$$$ ENDIF c$$$ WRITE ( 6,* ) ' **** INITIAL IT, DATE ', c$$$ & ITB, (IDATEB( II ), II=1, 6) * RETURN END *********************************************************************** SUBROUTINE RDGDST !" 初期値(GD)の読み込み O ( GDU , GDV , GDW , GDT , O ITD , IDATED, ISTEP , IEOD , I HAB , ITINIT, IDATEI, I ITDBFR, ITDAFT, IFLSTR, IOMODE ) * * [PARAM] #ifdef SYS_IBMS INCLUDE (ZCDIM) !" 格子点数, 波数 #else #include "zcdim.F" !" 格子点数, 波数 #endif * * [OUTPUT] REAL GDU ( IDIM, JDIM, 0:KDIM ) !" 西風 u REAL GDV ( IDIM, JDIM, 0:KDIM ) !" 南風 v REAL GDW ( IDIM, JDIM, 0:KDIM ) !" 鉛直風 w REAL GDT ( IDIM, JDIM, 0:KDIM ) !" 温度 T *" : 格子点データ * INTEGER ISTEP !" 通しステップ数 INTEGER ITD !" 通し時間 INTEGER IDATED( 6 ) !" 時刻:年月日時分秒 *" : 時刻等 INTEGER IEOD !" データありなし * * [INPUT] CHARACTER HAB *(*) !" GA or GB INTEGER ITINIT !" 初期値時刻 INTEGER IDATEI( 6 ) !" 同年月日時分秒 INTEGER ITDBFR !" 同後方許容誤差 INTEGER ITDAFT !" 同前方許容誤差 INTEGER IFLSTR !" 装置番号 INTEGER IOMODE !" 表示モード * * [INTERNAL WORK] INTEGER IEODU, IEODV, IEODW, IEODT INTEGER ITDUR, ISCDIF CHARACTER HU*3, HV*3, HW*3, HT*3 HU = HAB(1:2)//'U' HV = HAB(1:2)//'V' HW = HAB(1:2)//'W' HT = HAB(1:2)//'T' * 1100 CONTINUE * CALL GDREAD O ( GDU , IEODU , O ITD , IDATED, ISTEP , ITDUR , I IFLSTR, HU , IOMODE, 'ALEV' ) * IF ( IEODU .EQ. 0 ) THEN WRITE ( 6,* ) ' READ HIST AT T = ', ITD * IF ( ( ITDBFR .GE. 0 ) .AND. ( ITDAFT .GE. 0 ) ) THEN IF ( ITINIT .GE. 0 ) THEN IF ( ( ITD .LT. ITINIT-ITDBFR ).OR. & ( ITD .GT. ITINIT+ITDAFT ) ) THEN GOTO 1100 *" ------> 次のデータ -----> ENDIF c$$$ ELSE c$$$ CALL DIDATE !" 時刻差 c$$$ O ( ISCDIF, c$$$ I IDATED, IDATEI ) c$$$ IF ( ( ISCDIF .LT. -ITDBFR ) .OR. c$$$ & ( ISCDIF .GT. ITDAFT ) ) THEN c$$$ GOTO 1100 c$$$*" ------> 次のデータ -----> c$$$ ENDIF ENDIF ENDIF ENDIF * CALL GDREAD O ( GDV , IEODV , O ITD , IDATED, ISTEP , ITDUR , I IFLSTR, HV , IOMODE, 'ALEV' ) * CALL GDREAD O ( GDW , IEODW , O ITD , IDATED, ISTEP , ITDUR , I IFLSTR, HW , IOMODE, 'ALEV' ) * CALL GDREAD O ( GDT , IEODT , O ITD , IDATED, ISTEP , ITDUR , I IFLSTR, HT , IOMODE, 'ALEV' ) * IEOD = MAX( IEODU, IEODV, IEODW, IEODT ) * RETURN END *********************************************************************** SUBROUTINE RDGDSV !" ポテンシャルの読み込み O ( GDTOR , GDPOR , O ISTEP , IEOD , I HAB , IFLSTR, IOMODE ) * * [PARAM] #ifdef SYS_IBMS INCLUDE (ZCDIM) !" 格子点数, 波数 #else #include "zcdim.F" !" 格子点数, 波数 #endif * * [OUTPUT] REAL GDTOR ( IDIM, JDIM, 0:KDIM ) !" トロイダル Ψ REAL GDPOR ( IDIM, JDIM, 0:KDIM ) !" ポロイダル Φ *" : 格子点データ * INTEGER ISTEP !" 通しステップ数 INTEGER IEOD !" データありなし * * [INPUT] CHARACTER HAB *(*) !" GA or GB INTEGER IFLSTR !" 装置番号 INTEGER IOMODE !" 表示モード * * [INTERNAL WORK] INTEGER ITD !" 通し時間 INTEGER IDATED( 6 ) !" 時刻:年月日時分秒 INTEGER IEODP, IEODT, ITDUR * CHARACTER HTOR*5, HPOR*5 HTOR = HAB(1:2)//'TOR' HPOR = HAB(1:2)//'POR' * CALL GDREAD O ( GDTOR , IEODT , O ITD , IDATED, ISTEP , ITDUR , I IFLSTR, HTOR , IOMODE, 'ALEV' ) * CALL GDREAD O ( GDPOR , IEODP , O ITD , IDATED, ISTEP , ITDUR , I IFLSTR, HPOR , IOMODE, 'ALEV' ) * IEOD = MAX( IEODT, IEODP ) * RETURN END *********************************************************************** SUBROUTINE WRRSTR !" リスタート・ファイルの書き込み I ( GAU , GAV , GAW , GAT , I GATOR , GAPOR , I ITA , ISTEP ) * * [PARAM] #ifdef SYS_IBMS INCLUDE (ZCDIM) !" 格子点数, 波数 INCLUDE (ZHDIM) !" 文字列文字数 #else #include "zcdim.F" !" 格子点数, 波数 #include "zhdim.F" !" 文字列文字数 #endif * * [INPUT] REAL GAU ( IDIM, JDIM, 0:KDIM ) !" 西風 u REAL GAV ( IDIM, JDIM, 0:KDIM ) !" 南風 v REAL GAW ( IDIM, JDIM, 0:KDIM ) !" 鉛直風 w REAL GAT ( IDIM, JDIM, 0:KDIM ) !" 温度 T REAL GATOR ( IDIM, JDIM, 0:KDIM ) !" トロイダル Ψ REAL GAPOR ( IDIM, JDIM, 0:KDIM ) !" ポロイダル Φ *" : 格子点データ(t) 格子点データ(t+Δt) * INTEGER ISTEP !" 通しステップ数 INTEGER ITA !" 通し時間(t) INTEGER ITB !" 通し時間(t-Δt) *" : 時刻等 * * [INTERNAL PARAM] INTEGER IDATEA( 6 ) !" 時刻:年月日時分秒 INTEGER IDATEB( 6 ) !" 時刻:年月日時分秒 CHARACTER FILE *(NFILN) !" 出力ファイル:再出発 CHARACTER DFMT *(NCC) !" 出力フォーマット DATA FILE / ' ' / DATA DFMT / 'UR8' / LOGICAL OVORDV !" 渦度発散を出すか? DATA OVORDV / .TRUE. / INTEGER JFILED DATA JFILED / 41 / LOGICAL OFIRST DATA OFIRST / .TRUE. / LOGICAL OADVNC REAL DELT SAVE * NAMELIST /NMRSTR/ FILE, DFMT, OVORDV * * [INTERNAL WORK] INTEGER IFPAR, JFPAR, JFLRST, IERR * IF ( OFIRST ) THEN OFIRST = .FALSE. CALL REWNML ( IFPAR , JFPAR ) READ ( IFPAR, NMRSTR, END=1090 ) 1090 WRITE ( JFPAR, NMRSTR ) * CALL IFLOPN O ( JFLRST, IERR , I FILE , JFILED, 'WRITE', 'UNFORMATTED' ) CALL INQTIM O ( ITA , ITB , IDATEA, IDATEB, O ISTEP , DELT , OADVNC ) ENDIF * CALL WRRSTX !" 基本リスタート・ファイルの書き込み I ( GAU , GAV , GAW , GAT , I ITA , IDATEA, ISTEP , I JFLRST, DFMT ) * CALL WRRSTY !" 渦度発散リスタート・ファイルの書き込み I ( GATOR , GAPOR , I ITA , IDATEA, ISTEP , I JFLRST, DFMT ) * RETURN END *********************************************************************** SUBROUTINE WRRSTX !" 基本リスタート・ファイルの書き込み I ( GAU , GAV , GAW , GAT , I ITA , IDATEA, ISTEP , I JFLRST, HDFMT ) * * [PARAM] #ifdef SYS_IBMS INCLUDE (ZCDIM) !" 格子点数, 波数 INCLUDE (ZHDIM) !" 文字列文字数 #else #include "zcdim.F" !" 格子点数, 波数 #include "zhdim.F" !" 文字列文字数 #endif * * [INPUT] REAL GAU ( IDIM, JDIM, 0:KDIM ) !" 西風 u REAL GAV ( IDIM, JDIM, 0:KDIM ) !" 南風 v REAL GAW ( IDIM, JDIM, 0:KDIM ) !" 鉛直風 w REAL GAT ( IDIM, JDIM, 0:KDIM ) !" 温度 T *" : 格子点データ(t) 格子点データ(t+Δt) * INTEGER ISTEP !" 通しステップ数 INTEGER ITA !" 通し時間(t) INTEGER IDATEA( 6 ) !" 時刻:年月日時分秒 *" : 時刻等 * INTEGER JFLRST !" 出力ファイル CHARACTER HDFMT *(*) !" 出力フォーマット * * [INTERNAL PARAM] INTEGER IOMODE INTEGER NOEND INTEGER ITDUR DATA IOMODE / 0 / DATA NOEND / 0 / DATA ITDUR / 1 / * *" << GAWRIT : ファイル出力 (GA) >> * CALL GDWRIT I ( GAU , I 'GAU' , 'u-velocity @ t ','1/s' , I ITA , IDATEA, ISTEP , ITDUR , I JFLRST, IOMODE, NOEND , 'ALEV', HDFMT ) * CALL GDWRIT I ( GAV , I 'GAV' , 'v-velocity @ t ','1/s' , I ITA , IDATEA, ISTEP , ITDUR , I JFLRST, IOMODE, NOEND , 'ALEV', HDFMT ) * CALL GDWRIT I ( GAW , I 'GAW' , 'w-velocity @ t ','1/s' , I ITA , IDATEA, ISTEP , ITDUR , I JFLRST, IOMODE, NOEND , 'ALEV', HDFMT ) * CALL GDWRIT I ( GAT , I 'GAT' , 'temperature @ t ','K' , I ITA , IDATEA, ISTEP , ITDUR , I JFLRST, IOMODE, NOEND , 'ALEV', HDFMT ) * RETURN END *********************************************************************** SUBROUTINE WRRSTY !" ポテンシャルリスタート・ファイルの書き込み I ( GATOR , GAPOR , I ITA , IDATEA, ISTEP , I JFLRST, HDFMT ) * * [PARAM] #ifdef SYS_IBMS INCLUDE (ZCDIM) !" 格子点数, 波数 INCLUDE (ZHDIM) !" 文字列文字数 #else #include "zcdim.F" !" 格子点数, 波数 #include "zhdim.F" !" 文字列文字数 #endif * * [INPUT] REAL GATOR ( IDIM, JDIM, 0:KDIM ) !" トロイダル Ψ REAL GAPOR ( IDIM, JDIM, 0:KDIM ) !" ポロイダル Φ *" : 格子点データ(t) 格子点データ(t+Δt) * INTEGER ISTEP !" 通しステップ数 INTEGER ITA !" 通し時間(t) INTEGER IDATEA( 6 ) !" 時刻:年月日時分秒 *" : 時刻等 * INTEGER JFLRST !" 出力ファイル CHARACTER HDFMT *(*) !" 出力フォーマット * * [INTERNAL PARAM] INTEGER IOMODE INTEGER NOEND INTEGER ITDUR DATA IOMODE / 0 / DATA NOEND / 0 / DATA ITDUR / 1 / * *" << GAVRDV : 渦度発散 (GA) >> * CALL GDWRIT I ( GATOR , I 'GATOR', 'toloidal pot. @ t ','1/s' , I ITA , IDATEA, ISTEP , ITDUR , I JFLRST, IOMODE, NOEND , 'ALEV', HDFMT ) * CALL GDWRIT I ( GAPOR , I 'GAPOR', 'poroidal pot. @ t ','1/s' , I ITA , IDATEA, ISTEP , ITDUR , I JFLRST, IOMODE, NOEND , 'ALEV', HDFMT ) * RETURN END