C $Header: /u/gcmpack/MITgcm/pkg/ecco/cost_averagesgeneric.F,v 1.10 2015/03/23 21:10:04 gforget Exp $
C $Name: $
#include "ECCO_OPTIONS.h"
subroutine COST_AVERAGESGENERIC(
& localbarfile,
& localbar, localfld, xx_localbar_mean_dummy,
& first, last, startofloc, endofloc, inloc,
& sum1loc, locrec, nnz, mythid )
c ==================================================================
c SUBROUTINE cost_averagesgeneric
c ==================================================================
c
c o Compute time averages of cost variables
c
c ==================================================================
c SUBROUTINE cost_averagesgeneric
c ==================================================================
implicit none
c == global variables ==
#include "EEPARAMS.h"
#include "SIZE.h"
#include "PARAMS.h"
#ifdef ALLOW_ECCO
# include "ecco.h"
#endif
c == routine arguments ==
integer mythid
integer nnz
integer locrec
integer sum1loc
_RL localbar(1-olx:snx+olx,1-oly:sny+oly,nnz,nsx,nsy)
_RL localfld(1-olx:snx+olx,1-oly:sny+oly,nnz,nsx,nsy)
_RL xx_localbar_mean_dummy
logical first
logical last
logical startofloc
logical endofloc
logical inloc
character*(MAX_LEN_FNAM) localbarfile
c == local variables ==
integer bi,bj
integer i,j,k
integer itlo,ithi
integer jtlo,jthi
integer jmin,jmax
integer imin,imax
integer il
character*(128) fname
#ifdef ALLOW_ECCO_DEBUG
character*(max_len_mbuf) msgbuf
#endif
c == external functions ==
integer ilnblnk
external
c == end of interface ==
#ifdef ALLOW_ECCO_DEBUG
write(msgbuf,'(a)') '>> entering'
call PRINT_MESSAGE( msgbuf, standardmessageunit,
& SQUEEZE_RIGHT , mythid)
il=ilnblnk( localbarfile )
write(msgbuf,'(a,a)')
& 'cost_averagesgeneric, file : ',localbarfile(1:il)
call PRINT_MESSAGE( msgbuf, standardmessageunit,
& SQUEEZE_RIGHT , mythid)
write(msgbuf,'(a,5L5)')
& 'cost_averagesgeneric, logicals : ',
& first, last, startofloc, endofloc, inloc
call PRINT_MESSAGE( msgbuf, standardmessageunit,
& SQUEEZE_RIGHT , mythid)
write(msgbuf,'(a,3i5)')
& 'cost_averagesgeneric, integers : ',
& sum1loc, locrec, nnz
call PRINT_MESSAGE( msgbuf, standardmessageunit,
& SQUEEZE_RIGHT , mythid)
write(msgbuf,'(a)') '<< leaving'
call PRINT_MESSAGE( msgbuf, standardmessageunit,
& SQUEEZE_RIGHT , mythid)
#endif
jtlo = mybylo(mythid)
jthi = mybyhi(mythid)
itlo = mybxlo(mythid)
ithi = mybxhi(mythid)
jmin = 1
jmax = sny
imin = 1
imax = snx
if (startofloc .and. endofloc) then
c-- Save snapshot at every time step
do bj = jtlo,jthi
do bi = itlo,ithi
do k = 1,nnz
do j = jmin,jmax
do i = imin,imax
localbar(i,j,k,bi,bj) = localfld(i,j,k,bi,bj)
enddo
enddo
enddo
enddo
enddo
c-- Save ...bar on file.
write(fname(1:128),'(80a)') ' '
il=ilnblnk( localbarfile )
write(fname,'(2a,i10.10)')
& localbarfile(1:il), '.', eccoiter
#ifdef ALLOW_AUTODIFF
if ( nnz .EQ. 1 ) then
call ACTIVE_WRITE_XY( fname, localbar, locrec, eccoiter,
& mythid, xx_localbar_mean_dummy )
else
call ACTIVE_WRITE_XYZ( fname, localbar, locrec, eccoiter,
& mythid, xx_localbar_mean_dummy )
endif
#else
if ( nnz .EQ. 1 ) then
CALL WRITE_REC_XY_RL( fname, localbar, locrec, 1, myThid )
else
CALL WRITE_REC_XYZ_RL( fname, localbar, locrec, 1, myThid )
endif
#endif
elseif (first .or. startofloc) then
c-- Assign the first value to the array holding the average.
do bj = jtlo,jthi
do bi = itlo,ithi
do k = 1,nnz
do j = jmin,jmax
do i = imin,imax
localbar(i,j,k,bi,bj) = localfld(i,j,k,bi,bj)
enddo
enddo
enddo
enddo
enddo
else if (last .or. endofloc) then
c-- Add the last value and devide by the number of accumulated records.
do bj = jtlo,jthi
do bi = itlo,ithi
do k = 1,nnz
do j = jmin,jmax
do i = imin,imax
localbar(i,j,k,bi,bj) =
& (localbar(i,j,k,bi,bj)
& +localfld(i,j,k,bi,bj))/
& float(sum1loc)
enddo
enddo
enddo
enddo
enddo
c-- Save ...bar on file.
write(fname(1:128),'(80a)') ' '
il=ilnblnk( localbarfile )
write(fname,'(2a,i10.10)')
& localbarfile(1:il), '.', eccoiter
#ifdef ALLOW_AUTODIFF
if ( nnz .EQ. 1 ) then
call ACTIVE_WRITE_XY( fname, localbar, locrec, eccoiter,
& mythid, xx_localbar_mean_dummy )
else
call ACTIVE_WRITE_XYZ( fname, localbar, locrec, eccoiter,
& mythid, xx_localbar_mean_dummy )
endif
#else
if ( nnz .EQ. 1 ) then
CALL WRITE_REC_XY_RL( fname, localbar, locrec, 1, myThid )
else
CALL WRITE_REC_XYZ_RL( fname, localbar, locrec, 1, myThid )
endif
#endif
else if ( ( inloc ) .and.
& .not. (first .or. startofloc) .and.
& .not. (last .or. endofloc ) ) then
c-- Accumulate the array holding the average.
do bj = jtlo,jthi
do bi = itlo,ithi
do j = jmin,jmax
do k = 1,nnz
do i = imin,imax
localbar(i,j,k,bi,bj) =
& localbar(i,j,k,bi,bj) + localfld(i,j,k,bi,bj)
enddo
enddo
enddo
enddo
enddo
else
stop 'in cost_averagesgeneric'
endif
return
end