c======================================================================| subroutine sub_indat(fnin,fntmp,angref6,nang,dtr,nnset 1 ,ifnpo,idprop) c======================================================================| implicit none integer,intent(in) :: nang,ifnpo,idprop real*8,intent(in) :: angref6(nang),dtr character*100 ,intent(in):: fntmp(nang) integer,intent(out) :: nnset integer :: i,j,ifn0,ifn1,ifn2,iang real*8 :: parain(12),js1 real*8 :: angref1,dtin,dtset character*100 :: fnin,fnout integer :: nnin real*8,allocatable :: datain(:,:),jsin(:),dataset(:,:),jsset(:) real*8,allocatable :: dataset1(:) real*8,allocatable :: dang(:),jstmp(:) real*8,allocatable :: dang2(:),dang3(:),jstmp2(:),jstmp3(:) real*8 :: dangtmp0,dtmp1,paramx(8) ifn0=ifnpo ifn1=41 ifn2=42 !---count line number call count_lines(fnin,nnin) allocate(datain(13,nnin),jsin(nnin),dang(nnin),jstmp(nnin)) allocate(dang2(nnin),dang3(nnin),jstmp2(nnin),jstmp3(nnin)) !---read input data open(ifn1,file=fnin,status='old') do i=1,nnin read(ifn1,*) js1,(parain(j),j=1,12) !!!!!!! elena : Dimensions mismatch (13/12) datain(1:12,i)=parain(:) jsin(i)=js1 enddo dtin=(jsin(2)-jsin(1))*float(idprop) !--REV0318 !---set output time dtset=dtr nnset=int(float(nnin)*dtin/dtset) allocate(dataset(13,nnset),jsset(nnset),dataset1(nnset)) do i=1,nnset jsset(i)=jsin(1)+dtset*float(i)*float(idprop) !--REV0318 enddo !---shift to 6 reference longitude & output do iang=1,nang !---6 ref.angles angref1=angref6(iang) dang=datain(10,:)-angref1 !---angle interpolation (note +/-180 deg.) dang2(1)=dang(1) do i=2,nnin dangtmp0=dang(i)-dang(i-1) if(abs(dangtmp0).ge.300.) dangtmp0=0. dang2(i)=dang2(i-1)+dangtmp0 enddo dang3=dang2 if(sum(dang2)/float(nnin).gt.360.) dang2=dang2-360. if(sum(dang2)/float(nnin).gt.360.) dang2=dang2-360. if(sum(dang2)/float(nnin).lt.-360.) dang2=dang2+360. if(sum(dang2)/float(nnin).lt.-360.) dang2=dang2+360. if(sum(dang2)/float(nnin).lt.0.) dang3=dang2+360. if(sum(dang2)/float(nnin).ge.0.) dang3=dang2-360. do i=1,nnin if(dang(i).lt.-180.) dang(i)=dang(i)+360. if(dang(i).gt.180.) dang(i)=dang(i)-360. enddo jstmp=jsin-dang/360.*26.*86400. jstmp2=-dang2/360.*26.*86400. jstmp3=-dang3/360.*26.*86400. call convim(jstmp,jsset,jstmp2,dataset1 1 ,nnin,nnset,jstmp2(1),jstmp2(nnin)) dataset(2,:)=dataset1 call convim(jstmp,jsset,jstmp3,dataset1 1 ,nnin,nnset,jstmp3(1),jstmp3(nnin)) dataset(3,:)=dataset1 do i=1,nnset j=2 if(abs(dataset(2,i)).gt.abs(dataset(3,i))) j=3 dataset(13,i)=dataset(j,i) enddo c---angle jump (1/2) dang=datain(10,:) dang2(1)=dang(1) do i=2,nnin dangtmp0=dang(i)-dang(i-1) if(abs(dangtmp0).ge.300.) dangtmp0=0. dang2(i)=dang2(i-1)+dangtmp0 enddo datain(10,:)=dang2 dang=datain(12,:) dang2(1)=dang(1) do i=2,nnin dangtmp0=dang(i)-dang(i-1) if(abs(dangtmp0).ge.300.) dangtmp0=0. dang2(i)=dang2(i-1)+dangtmp0 enddo datain(12,:)=dang2 c---data conversion do i=1,12 call convim(jstmp,jsset,datain(i,:),dataset1 1 ,nnin,nnset,datain(i,1),datain(i,nnin)) dataset(i,:)=dataset1 c---angle jump (2/2) if((i.eq.10.or.i.eq.12))then do j=1,nnset if(dataset(i,j).lt.0.) dataset(i,j)=dataset(i,j)+360. if(dataset(i,j).lt.0.) dataset(i,j)=dataset(i,j)+360. if(dataset(i,j).gt.360.) dataset(i,j)=dataset(i,j)-360. if(dataset(i,j).gt.360.) dataset(i,j)=dataset(i,j)-360. enddo endif enddo c---interpolation using non-extreme value do i=2,nnset dangtmp0=dataset(10,i)-dataset(10,i-1) dataset1(i)=dangtmp0 enddo dataset1(1)=dataset1(2) dtmp1=sum(abs(dataset1))/float(nnset) do j=1,8 paramx(j)=sum(abs(dataset(j,:)))/float(nnset)+1. enddo do i=1,nnset dangtmp0=dataset1(i) if(abs(dangtmp0).le.dtmp1*0.01)then do j=1,8 if(abs(dataset(j,i)).gt.abs(paramx(j))*5.) 1 dataset(j,i)=paramx(j) enddo endif enddo c---data output fnout=fntmp(iang) open(ifn2,file=fnout,status='unknown',form='formatted') do i=1,nnset write(ifn2,'(f12.0,13(1pe15.5))') jsset(i),dataset(1:13,i) enddo close(ifn2,status='keep') enddo !---6 ref.angles c---closing close(ifn1,status='keep') deallocate(jsin,jsset,datain,dataset,dang,jstmp) return end c==================================================