-2

ご迷惑をおかけして申し訳ありませんが、コードを再送信しました。問題: バイナリ (.DAT) ファイルから降水量を読み取るプログラムを作成しようとしています。各グリッドの降水量の値を計算し、グリッドごとに月の最大値を出力として返します。たとえば、6 月に 25 という最高値があった場合、出力値は "Jun" になります。

implicit none   
integer,parameter :: ix=44,iy=27,nyr=12  
integer :: ntot  
real :: v_obs(ix,iy,nyr),TestVal,b(ix,iy,nyr),wet(ix,iy)     
real:: Mon(12),Y(12),missing_obs,missing_mod,missing  
integer :: ii,jj,i,j,k,ik,jk,irec,m,n  
character (130) dir,jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec  
data missing_obs/-999000000/  
data missing/-999./    
open(21,file='C:/Fortran/test-dat.dat',access='direct',recl=ix*iy*nyr,form='unformatted')  
open(23,file='C:/wet-month.dat',access='direct',recl=ix*iy*nyr,form='unformatted')  
irec=1  
Do j=1,nyr  
read(21,rec=irec) ((v_obs(ii,jj,j),ii=1,ix),jj=1,iy)  
ntot=0  
do ik=1,nyr  
ntot=ntot+1  
Y(ik)=v_obs(ii,jj,ik)  
enddo  
if (Y(ik) .eq. missing_obs)then  
wet=-999  
go to 199  
endif  
enddo  
Mon(1)=v_obs(ii,jj,1)  
Mon(2)=v_obs(ii,jj,2)  
Mon(3)=v_obs(ii,jj,3)  
Mon(4)=v_obs(ii,jj,4)  
Mon(5)=v_obs(ii,jj,5)  
Mon(6)=v_obs(ii,jj,6)  
Mon(7)=v_obs(ii,jj,7)  
Mon(8)=v_obs(ii,jj,8)  
Mon(9)=v_obs(ii,jj,9)  
Mon(10)=v_obs(ii,jj,10)  
Mon(11)=v_obs(ii,jj,11)  
Mon(12)=v_obs(ii,jj,12)  
TestVal=MAXVAL(Mon)  
If (TestVal .eq. Mon(1)) then   
wet=jan 
else if (TestVal .eq. Mon(2)) Then  
wet=feb  
else if (TestVal .eq. Mon(3)) Then  
wet=mar  
else if (TestVal .eq. Mon(4)) Then  
wet=apr  
else if (TestVal .eq. Mon(5)) Then  
wet=may  
else if (TestVal .eq. Mon(6)) Then  
wet=jun  
else if (TestVal .eq. Mon(7)) Then  
wet=jul  
else if (TestVal .eq. Mon(8)) Then  
wet=aug  
else if (TestVal .eq. Mon(9)) Then  
wet=sep  
else if (TestVal .eq. Mon(10)) Then  
wet=oct  
else if (TestVal .eq. Mon(11)) Then  
wet=nov  
else if (TestVal .eq. Mon(12)) Then  
wet=dec  
endif   
199     continue  
irec=1  
do k=1,nyr  
write(23,rec=irec)((wet(ii,jj),ii=1,ix),jj=1,iy)  
irec=irec+1  
enddo  
close(21)  
close(22)  
end

コンパイルエラーは言う

You cannot assign an expression of type CHARACTER(LEN=130) to a variable of type REAL(KIND=1)" i.e: "wet=jan".

グリッドポイントごとにデータを文字として保存したいのですが、このエラーを解決するのを手伝ってください。

4

1 に答える 1