C $Header: /u/gcmpack/MITgcm/pkg/ecco/cost_gencal.F,v 1.4 2016/03/01 23:05:15 gforget Exp $
C $Name: $
#include "ECCO_OPTIONS.h"
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
CBOP
C !ROUTINE: cost_gencal
C !INTERFACE:
subroutine COST_GENCAL(
I localbarfile, localobsfile,
I irec, localstartdate, localperiod,
O fname1, fname2, localrec, obsrec, exst,
I mythid )
C !DESCRIPTION: \bv
C ==================================================================
C SUBROUTINE cost_gencal
C ==================================================================
C reads and pre-processes bar file records
C ==================================================================
C SUBROUTINE cost_gencal
C ==================================================================
C \ev
C !USES:
IMPLICIT NONE
C == global variables ==
#include "EEPARAMS.h"
#include "SIZE.h"
#include "PARAMS.h"
#ifdef ALLOW_CAL
# include "cal.h"
#endif
#ifdef ALLOW_ECCO
# include "ecco.h"
#endif
c == routine arguments ==
integer mythid, irec, localstartdate(4)
_RL localperiod
character*(MAX_LEN_FNAM) localbarfile
character*(MAX_LEN_FNAM) localobsfile
character*(128) fname1, fname2
integer localrec, obsrec
#ifdef ALLOW_ECCO
c == local variables ==
c CHARACTER*(MAX_LEN_MBUF) msgBuf
integer k, il
_RL daytime
_RL diffsecs
integer dayiter
integer daydate(4)
integer difftime(4)
integer tempDate_1
integer middate(4)
integer yday, ymod
integer md, dd, sd, ld, wd
integer mody, modm
integer beginmodel, beginlocal
logical exst
c == external functions ==
integer ilnblnk
external
c == end of interface ==
CEOP
write(fname1(1:128),'(80a)') ' '
il=ilnblnk( localbarfile )
write(fname1(1:128),'(2a,i10.10)')
& localbarfile(1:il),'.',eccoiter
if ( localperiod.EQ.dTtracerLev(1) ) then
localrec = irec
obsrec = irec
yday = 0
elseif ( localperiod .EQ. 86400. ) then
c-- assume daily fields
obsrec = irec
daytime = FLOAT(secondsperday*(irec-1)) + modelstart
dayiter = hoursperday*(irec-1) + modeliter0
call CAL_GETDATE( dayiter, daytime, daydate, mythid )
call CAL_CONVDATE( daydate,yday,md,dd,sd,ld,wd,mythid )
ymod = modelstartdate(1)/10000
do k=1,4
middate(k)=0
enddo
tempDate_1 = yday*10000+100+1
if ( ymod .GE. yday ) then
call CAL_FULLDATE( modelstartdate(1), 0, middate, mythid)
else
call CAL_FULLDATE( tempDate_1, 0, middate, mythid)
endif
call CAL_TIMEPASSED( middate, daydate, difftime, mythid )
call CAL_TOSECONDS( difftime, diffsecs, mythid )
c localrec = floor(diffsecs/localperiod) + 1
localrec = int(diffsecs/localperiod) + 1
else
c-- assume monthly fields
obsrec = irec
mody = modelstartdate(1)/10000
modm = modelstartdate(1)/100 - mody*100
yday = mody + INT((modm-1+irec-1)/12)
localrec = 1 + MOD(modm-1+irec-1,12)
endif
il=ilnblnk(localobsfile)
write(fname2(1:128),'(2a,i4)')
& localobsfile(1:il), '_', yday
inquire( file=fname2, exist=exst )
if (.NOT. exst) then
c assume that the data set is cyclic
write(fname2(1:128),'(a)') localobsfile(1:il)
inquire( file=fname2, exist=exst )
endif
#endif /* ALLOW_ECCO */
RETURN
END