PROGRAM COST_FILT_STEP ! ********************************************************************** ! * . . . ! * PROGRAM: COST_FILT_STEP ! * PRGMMR: M. ZUPANSKI ORG: CIRA/CSU DATE: 2001-04-25 ! * ! * ABSTRACT: THIS PROGRAM PERFORMS THE GRAVITY WAVE PENALTY CALCUL ! * BASED ON DIABATIC DIGITAL FILTER (HUANG AND LYNCH, 1997) ! * STEP-LENGTH RELATED SUMS (ETOP EBOT) ! * ! * PROGRAM LOG: ! * ! * 04/25/2001 ..... M. ZUPANSKI: ! * 05/22/2002 ..... M. ZUPANSKI: ensemble DA upgrade ! * ! ********************************************************************** INCLUDE 'ntype.h' !!! NTYPE= No. of cntrl vrbl types INCLUDE 'mpif.h' !----------------------------------------------------------------------- INCLUDE 'CNTRL4D.comm' !----------------------------------------------------------------------- REAL,DIMENSION(:,:,:),ALLOCATABLE :: CGBL,CXGBL !--- CHARACTER*30 OLDNAME,TRYNAME INTEGER IOLD,ITRY INCLUDE 'namelist.h' !!! define namelists (all) !--- read input files 'cntrl_index.name' (33) and 'cntrl_specs.name' (34) INCLUDE 'read_namelist' ! read all namelists !----------------------------------------------------------------------- !*** !*** INITIALIZE ALL QUANTITIES ASSOCIATED WITH GRID DECOMPOSITION !*** !-- define model grid ------------- imeta=IM jmeta=JM !================================================================= WRITE(*,*) " " WRITE(*,5055) WRITE(3,*) " " WRITE(3,5055) 5055 FORMAT('START STEP_FILT '/) !--- READ CONTROL PARAMETERS CALL INITCTRL !========PENALTY STEP CALCULATION (DIGITAL FILTER)============== !==================================================================== EPSTOP=0.0 EPSBOT=0.0 !--- read input vector C= old g.w. increment !--- read input vector CX= trial (updated) g.w. increment !==== IF(EPSL1.GT.0.0) THEN !==== ALLOCATE(CGBL(imeta,jmeta,NLEV)) WRITE(OLDNAME,110) 110 FORMAT('oldfilt_incr') IOLD=21 CLOSE(IOLD) OPEN(IOLD,file=OLDNAME,status='unknown',form='unformatted') READ(IOLD) CGBL CLOSE(IOLD,STATUS='KEEP') CALL MAT_VEC (imeta,jmeta,NLEV,CGBL) !==== ALLOCATE(CXGBL(imeta,jmeta,NLEV)) WRITE(TRYNAME,111) 111 FORMAT('tryfilt_incr') ITRY=22 CLOSE(ITRY) OPEN(ITRY,file=TRYNAME,status='unknown',form='unformatted') READ(ITRY) CXGBL CLOSE(ITRY,STATUS='KEEP') CALL MAT_VEC (imeta,jmeta,NLEV,CXGBL) !---------------------------------------------------- ! ! ! EPSTOP and EPSBOT calculation ! do k=1,NLEV do j=1,jmeta do i=1,imeta EPSTOP=EPSTOP-CGBL(i,j,k)*(CXGBL(i,j,k)-CGBL(i,j,k)) EPSBOT=EPSBOT+(CXGBL(i,j,k)-CGBL(i,j,k))*(CXGBL(i,j,k)-CGBL(i,j,k)) end do end do end do DEALLOCATE(CGBL) DEALLOCATE(CXGBL) !==== END IF !==== ! !--- write the step-length related sums ! IPEN=52 CLOSE(IPEN) OPEN(IPEN,file='pensum',status='unknown',form='unformatted') WRITE(IPEN) EPSTOP,EPSBOT WRITE(*,*)"EPSTOP=",EPSTOP," EPSBOT=",EPSBOT WRITE(*,*) " " WRITE(*,8888) WRITE(3,*)"EPSTOP=",EPSTOP," EPSBOT=",EPSBOT WRITE(3,*) " " WRITE(3,8888) 8888 FORMAT('END OF THE STEP_ETAFILT '/) !------ STOP END