#!/bin/ksh
set -x

# compiler

if [ $# -ne 1 ]
then
echo "NEED TO SPECIFY FORECAST HOUR TO COMPARE"
exit
fi

FC=f90
FOPTS="-O2"

# forecast hour to compare

HR=${1}

# paths

export ROOTDIR=`pwd`
export TSTRUNDIR=$ROOTDIR
export CNSTFILE=$ROOTDIR/cnst.file

FILE1=$TSTRUNDIR/restrt${HR}.t00s

###############################################################
###############################################################

cd $BENCHDIR

rm -f code.f diffrest.x core

cat <<\codeEOF >code.f

       program compare

	PARAMETER (IM=60,JM=91,LM=38,NSOIL=4)
	PARAMETER (LB=2*IM+JM-3)

       integer(4) idat(3)
       logical run,first
       real(4),allocatable::a(:,:),b(:,:),dum2da(:,:),dum2db(:,:)
       real(4),allocatable::c(:,:,:),d(:,:,:)

	REAL,ALLOCATABLE::TEMP1(:,:),TEMP2(:,:),TEMP3(:,:),
     +		TEMP4(:,:),TEMP5(:,:),TEMP6(:,:),TEMP7(:,:)
	REAL,ALLOCATABLE::TEMP1b(:,:),TEMP2b(:,:),TEMP3b(:,:),
     +		TEMP4b(:,:),TEMP5b(:,:),TEMP6b(:,:),TEMP7b(:,:)

	real(4),allocatable::pdb(:,:),tb(:,:,:),qb(:,:,:),
     +			     ub(:,:,:),vb(:,:,:)
	real(4),allocatable::pdb2(:,:),tb2(:,:,:),qb2(:,:,:),
     +			     ub2(:,:,:),vb2(:,:,:)

	REAL :: TRMS,QRMS,URMS,
     +		VRMS,Q2RMS
	REAL :: TMAXDF,QMAXDF,UMAXDF,
     +		VMAXDF,Q2MAXDF,UL(2*LM),ULB(2*LM)

	INTEGER,ALLOCATABLE :: ITEMP(:,:),ITEMP2(:,:),LMH(:,:),
     +			       LMV(:,:),ITEMPB(:,:),ITEMP2B(:,:)

       character(4) icmeta,jcmeta,lcmeta
       character(32) label
	logical sigma

	
	write(6,*) 'unit 10 opened, about to read'

       read(10)run,idat,ihrst,ntsd,label
       print *,' 1st file run,idat,ihrst,ntsd=',run,idat,ihrst,ntsd

       allocate(dum2da(im,jm))
       allocate(dum2db(im,jm))
       allocate(a(im,jm))
       allocate(b(im,jm))
	ALLOCATE(TEMP1(IM,JM),TEMP1B(IM,JM),TEMP2(IM,JM),TEMP2B(IM,JM))
	ALLOCATE(TEMP3(IM,JM),TEMP3B(IM,JM),TEMP4(IM,JM),TEMP4B(IM,JM))
	ALLOCATE(TEMP5(IM,JM),TEMP5B(IM,JM),TEMP6(IM,JM),TEMP6B(IM,JM))
	ALLOCATE(TEMP7(IM,JM),TEMP7B(IM,JM))

C
C* PDOMG,RESOMG
C
       READ(10)TEMP1,TEMP2
C      CALL RMSDIFF2D(TEMP1,TEMP1B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'PDOMG, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP2,TEMP2B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'RESOMG, rmsdf: ', rms,extrem
C
C* OMGALF

	ALLOCATE(LMH(IM,JM))
	LMH=38

C
       DO L=1,LM
        READ(10) DUM2DA
C	   CALL RMSDIFF(DUM2DA,DUM2DB,IM,JM,LMH,L,RMS,VMAXDIF,extrem)
c	if (vmaxdif .gt. 0) write(6,*) 'L, rms OMGALF dif: ',L,rms,extrem
       ENDDO

C
C* header stuff
C
      READ(10) run,idat,ihrst,ntsd,label,first,iout,nshde

C
C* PD,RES,FIS
C
      READ(10) A,TEMP1,TEMP2

C      CALL RMSDIFF2D(A,B,im,jm,rms,rmaxdf,extrem)

C	if (rmaxdf .gt. 0) then
C      WRITE(6,633) rms,rmaxdf,extrem
C	endif
  633 FORMAT(' PD rms, max diffs, maxval: ',e9.4,1x,e9.4,1x,e9.4)
CC      CALL RMSDIFF2D(TEMP1,TEMP1B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'RES, rmsdf: ', rms,extrem
CC      CALL RMSDIFF2D(TEMP2,TEMP2B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'FIS, rmsdf: ', rms,extrem

C
C* PDB,TB,QB,UB,VB
C
	ALLOCATE (PDB(LB,2),TB(LB,LM,2),QB(LB,LM,2),
     +				UB(LB,LM,2),VB(LB,LM,2))
	READ(10) PDB,TB,QB,UB,VB

	rmax1=0.

	DEALLOCATE(PDB,TB,QB,UB,VB)
C
C* T,Q,U,V,Q2
C


      DO L=1,LM

	if (L .eq. 1) then
	write(6,*) '********************************************'
	write(6,*) 'NOTE:  VALUES COMPUTED FOR ATMOSPHERIC '
	write(6,*) '       GRIDPOINTS ONLY'
	write(6,*) '********************************************'
	endif

           READ(10) DUM2DA
	
	   CALL RMSVAL(DUM2DA,IM,JM,LMH,L,RMS,extrem)
	
	   TRMS=RMS
	   TEXRM=EXTREM

C------------------------------------------------

           READ(10) DUM2DA

	   CALL RMSVAL(DUM2DA,IM,JM,LMH,L,RMS,extrem)
        
           QRMS=RMS
	   QEXRM=EXTREM

C------------------------------------------------

           READ(10) DUM2DA

           CALL RMSVAL(DUM2DA,IM,JM,LMH,L,RMS,extrem)
        
           URMS=RMS
	   UEXRM=EXTREM

C------------------------------------------------

           READ(10) DUM2DA

           CALL RMSVAL(DUM2DA,IM,JM,LMH,L,RMS,extrem)
        
           VRMS=RMS
	   VEXRM=EXTREM

C------------------------------------------------

           READ(10) DUM2DA

           CALL RMSVAL(DUM2DA,IM,JM,LMH,L,RMS,extrem)

           Q2RMS=RMS
	   Q2EXRM=EXTREM

C------------------------------------------------

	WRITE(6,644) L,TRMS,TEXRM
	WRITE(6,645) L,QRMS,QEXRM
	WRITE(6,646) L,URMS,UEXRM
	WRITE(6,647) L,VRMS,VEXRM
	WRITE(6,643) L,Q2RMS,Q2EXRM
	WRITE(6,*) '----------------------------------------------------'

  643 FORMAT('Q2 AT LEV: ',I2,2x,'RMS VAL: ',e12.7,2x,
     +	     'ABS LRG VAL: ', e12.7)
  644 FORMAT('T  AT LEV: ',I2,2x,'RMS VAL: ',e12.7,2x,
     +	     'ABS LRG VAL: ', e12.7)
  645 FORMAT('Q  AT LEV: ',I2,2x,'RMS VAL: ',e12.7,2x,
     +	     'ABS LRG VAL: ', e12.7)
  646 FORMAT('U  AT LEV: ',I2,2x,'RMS VAL: ',e12.7,2x,
     +	     'ABS LRG VAL: ', e12.7)
  647 FORMAT('V  AT LEV: ',I2,2x,'RMS VAL: ',e12.7,2x,
     +	     'ABS LRG VAL: ', e12.7)


C
C*  RAD TEND,CWM,TRAIN,TCUCN
C
	READ(10) TEMP1
	READ(10) TEMP2
	READ(10) TEMP3
	READ(10) TEMP4

C      CALL RMSDIFF2D(TEMP1,TEMP1B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'RADTEND, rmsdf: ', rmaxdf
C      CALL RMSDIFF2D(TEMP2,TEMP2B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'CWM, rmsdf: ', rmaxdf
C      CALL RMSDIFF2D(TEMP3,TEMP3B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'TRAIN, rmsdf: ', rmaxdf
C      CALL RMSDIFF2D(TEMP4,TEMP4B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'TCUCN, rmsdf: ', rmaxdf

      ENDDO

	write(6,*) 'past 3D reads'
C
C*  RSWIN,RSWOUT,TG,Z0,AKMS,CZEN
C

	READ(10) RUN,IDAT,IHRST,NTSD,LABEL,TEMP1,TEMP2,TEMP3,
     +		 TEMP4,((TEMP5(I,J),I=1,IM),J=1,JM),TEMP6


C      CALL RMSDIFF2D(TEMP1,TEMP1B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'RSWIN, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP2,TEMP2B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'RSWOUT, rmsdf: ', rms,extrem
C     CALL RMSDIFF2D(TEMP3,TEMP3B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'TG, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP4,TEMP4B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'Z0, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP5,TEMP5B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'AKMS, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP6,TEMP6B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'CZEN, rmsdf: ', rms,extrem
C
C*  AKHS,THS,QS,TWBS,QWBS,HBOT,CFRACL
C

	READ(10) TEMP1,TEMP2,TEMP3,TEMP4,TEMP5,TEMP6,TEMP7

C      CALL RMSDIFF2D(TEMP1,TEMP1B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'AKHS, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP2,TEMP2B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'THS, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP3,TEMP3B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'QS, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP4,TEMP4B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'TWBS, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP5,TEMP5B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'QWBS, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP6,TEMP6B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'HBOT, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP7,TEMP7B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'CFRACL, rmsdf: ', rms,extrem
C
C
C*  THZ0,QZ0,UZ0,VZ0,USTAR,HTOP,CFRACM
C
	READ(10) TEMP1,TEMP2,((TEMP3(I,J),I=1,IM),J=1,JM),
     +		 ((TEMP4(I,J),I=1,IM),J=1,JM),TEMP5,TEMP6,TEMP7

C      CALL RMSDIFF2D(TEMP1,TEMP1B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'THZ0, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP2,TEMP2B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'QZ0, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP3,TEMP3B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'UZ0, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP4,TEMP4B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'VZ0, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP5,TEMP5B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'USTAR, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP6,TEMP6B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'HTOP, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP7,TEMP7B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'CFRACM, rmsdf: ', rms,extrem

C
C*  SNO,WET,CLDEFI,RF,PSLP,CUPPT,CFRACH
C

	READ(10) TEMP1,TEMP2,TEMP3,TEMP4,TEMP5,TEMP6,TEMP7

C      CALL RMSDIFF2D(TEMP1,TEMP1B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'SNO, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP2,TEMP2B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'WET, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP3,TEMP3B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'CLDEFI, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP4,TEMP4B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'RF, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP5,TEMP5B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'PSLP, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP6,TEMP6B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'CUPPT, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP7,TEMP7B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'CFRACH, rmsdf: ', rms,extrem

C
C*  SOILTB,SFCEXC,SMSTAV,SMSTOT,GRNFLX,PCTSNO
C

        READ(10) TEMP1,TEMP2,TEMP3,TEMP4,TEMP5,TEMP6

C      CALL RMSDIFF2D(TEMP1,TEMP1B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'SOILTB, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP2,TEMP2B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'SFCEXC, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP3,TEMP3B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'SMSTAV, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP4,TEMP4B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'SMSTOT, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP5,TEMP5B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'GRNFLX, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP6,TEMP6B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'PCTSNO, rmsdf: ', rms,extrem

C
C*  RLWIN,RADOT,CZMEAN,SIGT4
C

	READ(10) TEMP1,((TEMP2(I,J),I=1,IM),J=1,JM),TEMP3,TEMP4

C      CALL RMSDIFF2D(TEMP1,TEMP1B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'RLWIN, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP2,TEMP2B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'RADOT, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP3,TEMP3B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'CZMEAN, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP4,TEMP4B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'SIGT4, rmsdf: ', rms,extrem

C
C*  U00,UL,LC,SR

	ALLOCATE(ITEMP(IM,JM),ITEMPB(IM,JM))

	READ(10) TEMP1,UL,ITEMP,TEMP3

C      CALL RMSDIFF2D(TEMP1,TEMP1B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'U00, rmsdf: ', rms,extrem
	
C	rmax1=0.
C	do L=1,2*LM
C	if (abs(UL(L)-ULB(L)) .gt. rmax1) rmax1=abs(UL(L)-ULB(L))
C	enddo
C	if (rmax1 .gt. 0) write(6,*) 'UL, rmsdf: ', rmax1

C      CALL RMSDIFF2D(ITEMP,ITEMPB,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'LC, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP3,TEMP3B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'SR, rmsdf: ', rms,extrem

	DEALLOCATE(ITEMP,ITEMPB)

C
C*   PREC,ACPREC,ACCLIQ,CUPREC
C
	READ(10) RUN,IDAT,IHRST,NTSD,LABEL,TEMP1,DUM2DA,TEMP3,TEMP4

C      CALL RMSDIFF2D(TEMP1,TEMP1B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'PREC, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(DUM2DA,DUM2DB,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'ACPREC, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP3,TEMP3B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'ACCLIQ, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP4,TEMP4B,im,jm,rms,rmaxdf,extrem)
c	if (rmaxdf .gt. 0) write(6,*) 'CUPREC, rmsdf: ', rms,extrem


C
C*  ACFRCV,NCFRCV,ACFRST,NCFRST
C
	ALLOCATE(ITEMP(IM,JM),ITEMP2(IM,JM),ITEMPB(IM,JM),ITEMP2B(IM,JM))

	READ(10) TEMP1,ITEMP,TEMP3,ITEMP2

C      CALL RMSDIFF2D(TEMP1,TEMP1B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'ACFRCV, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(ITEMP,ITEMPB,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'NCFRCV, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP3,TEMP3B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'ACFRST, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP4,TEMP4B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'NCFRST, rmsdf: ', rms,extrem

	DEALLOCATE(ITEMP,ITEMP2,ITEMPB,ITEMP2B)

C
C*  ACSNOW,ACSNOM,SSROFF,BGROFF
C

	READ(10) TEMP1,TEMP2,TEMP3,TEMP4

c      CALL RMSDIFF2D(TEMP1,TEMP1B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'ACSNOW, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP2,TEMP2B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'ACSNOM, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP3,TEMP3B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'SSROFF, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP4,TEMP4B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'BGROFF, rmsdf: ', rms,extrem
C
C*  SFCSHX,SFCLHX,SUBSHX,SNOPCX,SFCUVX,SFCEVP,POTEVP
C

	READ(10) TEMP1,TEMP2,TEMP3,TEMP4,TEMP5,TEMP6,TEMP7

C      CALL RMSDIFF2D(TEMP1,TEMP1B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'SFCSHX, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP2,TEMP2B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'SFCLHX, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP3,TEMP3B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'SUBSHX, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP4,TEMP4B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'SNOPCX, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP5,TEMP5B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'SFCUVX, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP6,TEMP6B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'SFCEVP, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP7,TEMP7B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'POTEVP, rmsdf: ', rms,extrem

C
C*  ASWIN,ASWOUT,ASWTOA,ALWIN,ALWOUT,ALWTOA
C

	READ(10) TEMP1,TEMP2,TEMP3,TEMP4,TEMP5,TEMP6

C      CALL RMSDIFF2D(TEMP1,TEMP1B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'ASWIN, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP2,TEMP2B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'ASWOUT, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP3,TEMP3B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'ASWTOA, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP4,TEMP4B,im,jm,rms,rmaxdf,extrem)
c	if (rmaxdf .gt. 0) write(6,*) 'ALWIN, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP5,TEMP5B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'ALWOUT, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP6,TEMP6B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'ALWTOA, rmsdf: ', rms,extrem

C
C*  ARDSW,ARDLW,ASRFC,AVRAIN,AVCNVC
C

	READ(10) ARDSW,ARDLW,ASRFC,AVRAIN,AVCNVC
	
C	if (ARDSW .ne. ARDSWB) write(6,*) 'ARDSW: ', ARDSW,ARDSWB
c	if (ARDLW .ne. ARDLWB) write(6,*) 'ARDLW: ', ARDLW,ARDSLB
C	if (ASRFC .ne. ASRFCB) write(6,*) 'ASRFC: ', ASRFC,ASRFCB
C	if (AVRAIN .ne. AVRAINB) write(6,*) 'AVRAIN: ', 
C     +			AVRAIN,AVRAINB
C	if (AVCNVC .ne. AVCNVCB) write(6,*) 'AVCNVC: ', 
C     +			AVCNVC,AVCNVCB

C
C*  TH10,Q10,U10,V10,TSHLTR,QSHLTR,PSHLTR
C

	READ(10) TEMP1, TEMP2, TEMP3, TEMP4, TEMP5, TEMP6, TEMP7

C      CALL RMSDIFF2D(TEMP1,TEMP1B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'TH10, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP2,TEMP2B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'Q10, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP3,TEMP3B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'U10, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP4,TEMP4B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'V10, rmsdf: ', rms,extrem
      CALL RMSVAL2D(TEMP5,im,jm,rms,extrem)
	if (rmaxdf .gt. 0) write(6,*) 'TSHLTR, rmsval: ', rms,extrem
C      CALL RMSDIFF2D(TEMP6,TEMP6B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'QSHLTR, rmsdf: ', rms,extrem
C      CALL RMSDIFF2D(TEMP7,TEMP7B,im,jm,rms,rmaxdf,extrem)
C	if (rmaxdf .gt. 0) write(6,*) 'PSHLTR, rmsdf: ', rms,extrem


       allocate(c(im,jm,nsoil))
       allocate(d(im,jm,nsoil))

C
C*  SMC
C
	READ(10) C

	DO II=1,NSOIL
         DO J=1,JM
          DO I=1,IM
	    TEMP1(I,J)=C(I,J,II)
          ENDDO
         ENDDO

C	CALL RMSDIFF2D(TEMP1,TEMP2,IM,JM,RMS,VMAXDIF,extrem)
C	if (vmaxdif .gt. 0) write(6,*) 'SMC at level ', II, RMS,extrem
	ENDDO
C
C*  CMC
C
	READ(10) TEMP1
	
C	CALL RMSDIFF2D(TEMP1,TEMP2,IM,JM,RMS,VMAXDIF,extrem)
C	if (vmaxdif .gt. 0) write(6,*) 'CMC, rmsdf: ', rms,extrem

C
C*  STC
C
	READ(10) C

	DO II=1,NSOIL
         DO J=1,JM
          DO I=1,IM
	    TEMP1(I,J)=C(I,J,II)
          ENDDO
         ENDDO

C	CALL RMSDIFF2D(TEMP1,TEMP2,IM,JM,RMS,VMAXDIF,extrem)

	if (VMAXDIF .gt. 0) then
C	write(6,649) II,RMS,VMAXDIF,extrem
	endif

	ENDDO
  649	format('SOIL T, LEV: ', I2,1x,'RMS DIFF: ', e9.3,2x,
     +	       'MAX DIFF: ', e9.3,2x,' MAX VAL: ', e8.3)
	

	STOP
	END

C23456789012345678901234567890123456789012345678901234567890123456789012

      SUBROUTINE RMSVAL (ar,idim,jdim,lmh,l,rmsvalue,extrem)

       real ar(idim,jdim)
	integer lmh(idim,jdim)

	extrem=-999999.
        rsum=0.
	NPOINTS=0

       do j=1,jdim
       do i=1,idim
	IF (L .le. LMH(I,J)) THEN
  	 NPOINTS=NPOINTS+1
	 aval=abs(ar(i,j))
	 if (aval .gt. extrem) extrem=aval
         rsum=rsum+(ar(i,j))**2.
        ENDIF
       enddo
       enddo

        rmsvalue=(rsum/NPOINTS)**0.5

       return
       end

C23456789012345678901234567890123456789012345678901234567890123456789012

      SUBROUTINE RMSVAL2D (ar,idim,jdim,rmsval,extrem)

       real ar(idim,jdim)

        extrem=-999999.
        rsum=0.

       do j=1,jdim
       do i=1,idim
        aval=abs(ar(i,j))
        if (aval .gt. extrem) extrem=aval
           rsum=rsum+(ar(i,j))**2.
       enddo
       enddo

       rmsval=(rsum/(idim*jdim))**0.5

       return
       end


!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      SUBROUTINE extreme (ar,br,idim,jdim,ipt,jpt)

       real ar(idim,jdim),br(idim,jdim)

	rmax=-999999.

       do j=1,jdim
       do i=1,idim
	adif=abs(ar(i,j)-br(i,j))
	if (adif .gt. rmax) then
	 rmax=adif
	 ipt=i
	 jpt=j
	endif
       enddo
       enddo

       return
       end

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

codeEOF

$FC $FOPTS -o diffrest.x code.f

ln -sf  $FILE1                 ftn10
ln -sf  $CNSTFILE	       ftn30

./diffrest.x

exit
