program rms_RAMS !********************************************************************** ! * . . . ! * PROGRAM: rms_RAMS ! * PRGMMR: M. ZUPANSKI ORG: CIRA/CSU DATE: 2003-09-09 ! * ! * ABSTRACT: Prepare formated x1d file, suitable for plotting ! * ! * PROGRAM LOG: ! * ! * 09/09/2003 ..... M. ZUPANSKI: Original 'transform.F' ! * 10/17/2003 ..... M. ZUPANSKI: Innovation normalization ! * 10/22/2003 ..... M. ZUPANSKI: Innovation histogram ! * 10/22/2003 ..... M. ZUPANSKI: plotting ! * 10/24/2003 ..... M. ZUPANSKI: Root-Mean-Squared error calculation ! * 06/25/2004 ..... D. ZUPANSKI: Root-Mean-Squared calculation for RAMS ! * ! ********************************************************************** !----- integer,parameter::in_file1=20 ! input file1 # integer,parameter::in_file2=21 ! input file2 # integer,parameter::out_rms1=51 ! formatted RMS file # integer,parameter::out_rms2=52 ! formatted RMS file # integer,parameter::out_rmsl1=53 ! formatted RMS file # integer,parameter::out_rmsl2=54 ! formatted RMS file # !----- integer :: im,jm,lm integer :: im2,jm2,lm2 integer :: histvar_max,kk character(len=9) :: u_name,u_name2 real :: rms real,dimension(:,:,:),allocatable::u_1,u_2 real,dimension(:),allocatable::rms1d real,dimension(:,:),allocatable::rmsl !----------------------------------------- histvar_max=6 100 format(6E20.10) rewind in_file1 rewind in_file2 rewind out_rms1 rewind out_rms2 read(in_file1) im,jm,lm read(in_file2) im2,jm2,lm2 if(im.ne.im2) then write(*,*) " PROBLEM: im=",im," im2=",im2 stop endif if(jm.ne.jm2) then write(*,*) " PROBLEM: jm=",jm," jm2=",jm2 stop endif if(lm.ne.lm2) then write(*,*) " PROBLEM: lm=",lm," lm2=",lm2 stop endif allocate(u_1(1:im,1:jm,1:lm)) allocate(u_2(1:im,1:jm,1:lm)) allocate(rms1d(1:histvar_max)) allocate(rmsl(1:lm,1:histvar_max)) do kk=1,histvar_max !-- read in first file read(in_file1) u_name read(in_file1) u_1 !-- read in second file read(in_file2) u_name2 if(u_name.ne.u_name2) then write(*,*) " PROBLEM: u_name=",u_name2," u_name2=",u_name2 stop endif read(in_file2) u_2 !-- calculate rms error rms=0.0 rmsl(:,kk)=0.0 do l=1,lm do j=1,jm do i=1,im rms=rms+(u_1(i,j,l)-u_2(i,j,l))**2 rmsl(l,kk)=rmsl(l,kk)+(u_1(i,j,l)-u_2(i,j,l))**2 end do end do rmsl(l,kk)=sqrt(rmsl(l,kk)/float(im*jm)) end do rms1d(kk)=sqrt(rms/float(im*jm*lm)) !-- write formatted file end do !!!! do kk=1,histvar_max k_start=1 k_end=min(3,histvar_max) write(out_rms1,100) (rms1d(kk),kk=k_start,k_end) do l=1,lm write(out_rmsl1,100) (rmsl(l,kk),kk=k_start,k_end) enddo if (histvar_max.gt.k_end) then k_start=k_end+1 k_end=histvar_max write(out_rms2,100) (rms1d(kk),kk=k_start,k_end) do l=1,lm write(out_rmsl2,100) (rmsl(l,kk),kk=k_start,k_end) enddo end if deallocate(rms1d) deallocate(rmsl) end program rms_RAMS