###前提実現したいこと
Intel fortran によりコンパイルし出力されたバイナリデータを、個人パソコンで読み込みアスキーとして出力したいと考えています。
現在、プログラムを作成し実行したのですが、読み込み時にエラーが発生しました。
解決方法を教えてください。
###発生している問題・エラーメッセージ
At line 41 of file Data_q.f90 (unit = 41, file = 'UVWPT_cent_000001step001') Fortran runtime error: I/O past end of record on unformatted file Error termination. Backtrace: Could not print backtrace: libbacktrace could not find executable to open #0 0xffffffff #1 0xffffffff #2 0xffffffff #3 0xffffffff #4 0xffffffff #5 0xffffffff #6 0xffffffff #7 0xffffffff #8 0xffffffff #9 0xffffffff #10 0xffffffff #11 0xffffffff #12 0xffffffff
###ソースコード
gfortran
1 Program main 2 implicit none 3 4 Real*4 time 5 integer :: i , j , k, Nt,ISTART, IEND,ROOP 6 integer, Parameter :: RPS = 4 7 Integer, Parameter :: RPE = 4 8 integer, Parameter :: ks = 347 9 Integer, Parameter :: ke = 353 10 integer, Parameter :: js = 347 11 Integer, Parameter :: je = 353 12 Integer, Parameter :: Nx = 1801 13 Real*4, dimension(-2:1803,347:353,347:353) :: U 14 Real*4, dimension(-2:1803,347:353,347:353) :: Data_q 15 Character( len = 35 ) :: IN_NAME, INPUT_NAME 16 17 18 19 do ROOP = 1, RPS 20 ISTART = ((ROOP-1)*(Nx-1)/RPS) 21 IEND = (ROOP*(Nx-1)/RPS)-1 22 23 IF(ROOP==1 ) ISTART = -2 24 IF(ROOP==RPS) IEND = Nx+2 25 26 Do k = 347, 353 , 1 27 Do j = 347, 353 , 1 28 Do i = ISTART, IEND , 1 29 U(i,j,k) = 0.0d0 30 End Do 31 End Do 32 End Do 33 34 write(INPUT_NAME,'(a,i3.3)')'UVWPT_cent_000001step',ROOP 35 Open( 41,File = INPUT_NAME, Form = 'unformatted', status = 'unknown') 36 37 Read(41) Nt, time 38 39 40 !--- U --- 41 Read(41) Data_q 42 Do k = 347, 353,1 43 Do j = 347, 353,1 44 Do i = ISTART,IEND,1 45 U(i,j,k) = Data_q(i,j,k) 46 End Do; End Do; End Do 47 48 Close(41) 49 50 END DO 51 52====出力======= 53 Do ROOP = 1, RPE 54 ISTART = ((ROOP-1)*(Nx-1)/RPE) 55 IEND = (ROOP*(Nx-1)/RPE)-1 56 57 IF(ROOP==1 ) ISTART=-2 58 IF(ROOP==RPE) IEND =Nx+2 59 60 write(IN_NAME,'(a,i3.3,a)')'UVWPT_cent_000001step',ROOP,'.txt' 61 Open(42, File = IN_NAME, Form = 'formatted', Status = 'unknown') 62 Write(42) Nt, time 63 64!--- U --- 65 Data_q = 0.0d0 66 67 Do k = ks, ke,1 68 Do j = js, je,1 69 Do i = ISTART, IEND,1 70 71 Data_q(i,j,k) = U(i,j,k) 72 73 End Do; End Do; End Do 74 75 Write(42) Data_q 76 77 78 79 close(42) 80 81 End do 82 83 Stop 84 End Program
出力されたバイナリファイルはintel fortranでコンパイルされたのちに出力されたものです。また個人パソコンで変換する際にはgfortarnを使用しています。
そのため異なるコンパイラが原因によりこのような問題が発生しているのでしょうか。
###補足
バイナリデータが出力される際のソースコードの一部を添付します。
ifort
1 Implicit none 2 Integer i, j, k,ISTART, IEND, ROOP 3 4 Real*4, dimension(:,:,:),allocatable :: Data_q 5 6 Integer js,je,ks,ke 7 8 js=j_sta 9 je=j_end 10 ks=k_sta 11 ke=k_end 12 13 if(j_sta==1) js=-2 14 if(j_end==Ny) je=Ny+2 15 if(k_sta==1) ks=-2 16 if(k_end==Nz) ke=Nz+2 17 18 Do ROOP = 1, RPE 19 ISTART = ((ROOP-1)*(Nx-1)/RPE) 20 IEND = (ROOP*(Nx-1)/RPE)-1 21 22 IF(ROOP==1 ) ISTART=-2 23 IF(ROOP==RPE) IEND =Nx+2 24 25!*******************[input file name]*************************************************** 26 27 28 write(IN_NAME,'(a,i6.6,a,i3.3)')'UVWPT_cent_',nt,'step',ROOP 29 Open(41, File = IN_NAME, Form = 'unformatted', Status = 'unknown') 30 Write(41) Nt, time 31 32 33!--- U --- 34 Allocate (Data_q (ISTART:IEND,347:353,347:353)) 35 Data_q = 0.0d0 36 37 Do k = ks, ke,1 38 Do j = js, je,1 39 Do i = ISTART, IEND,1 40 If((k .ge. 347) .and. (k .le. 353))then 41 If((j .ge. 347) .and. (j .le. 353))then 42 Data_q(i,j,k) = U(i,j,k) 43 End if; End if 44 End Do; End Do; End Do 45 46 Write(41) Data_q 47 48 Deallocate (Data_q ) 49
###利用環境
intel fortran はMPIで使用しています。
バイナリからアスキーへの変換(gfortran)を試みている Windows 10 Pro 64bit OSです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/04 03:32
2021/11/04 16:11
2021/11/05 10:15