C $Header: /u/gcmpack/MITgcm/pkg/ctrl/ctrl_init_rec.F,v 1.1 2013/01/26 14:45:56 heimbach Exp $ C $Name: $ #include "CTRL_OPTIONS.h" C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| subroutine CTRL_INIT_REC( I fldname, I fldstartdate1, fldstartdate2, fldperiod, nfac, O fldstartdate, diffrec, startrec, endrec, I mythid ) c ================================================================== c SUBROUTINE ctrl_init_rec c ================================================================== c c helper routine to compute the first and last record of a c time dependent control variable c c Martin.Losch@awi.de, 2011-Mar-15 c c ================================================================== c SUBROUTINE ctrl_init_rec c ================================================================== implicit none c == global variables == #include "SIZE.h" #include "EEPARAMS.h" #include "PARAMS.h" #ifdef ALLOW_CAL # include "cal.h" #endif c == input variables == c fldstartdate1/2 : start time (date/time) of fld c fldperod : sampling interval of fld c nfac : factor for the case that fld is an obcs variable c in this case nfac = 4, otherwise nfac = 1 c mythid : thread ID of this instance character*(*) fldname integer fldstartdate1 integer fldstartdate2 _RL fldperiod integer nfac integer mythid c == output variables == c fldstartdate : full date from fldstartdate1 and 2 c startrec : first record of ctrl variable c startrec : last record of ctrl variable c diffrec : difference between first and last record of ctrl variable integer fldstartdate(4) integer startrec integer endrec integer diffrec c == local variables == integer i #ifdef ALLOW_CAL integer difftime(4) _RL diffsecs #endif /* ALLOW_CAL */ character*(max_len_mbuf) msgbuf integer il c == functions == integer ilnblnk external if ( debugLevel .GE. debLevB ) then il=ilnblnk(fldname) WRITE( msgBuf,'(A,A)') & 'CTRL_INIT_REC: Getting record indices for ',fldname(1:il) CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, & SQUEEZE_RIGHT , myThid ) endif c initialise some output do i = 1,4 fldstartdate(i) = 0 end
do startrec = 0 endrec = 0 diffrec = 0 if ( fldperiod .EQ. -12. ) then startrec = 1 endrec = 12*nfac elseif ( fldperiod .EQ. 0. ) then startrec = 1 endrec = 1*nfac else # ifdef ALLOW_CAL call CAL_FULLDATE( fldstartdate1, fldstartdate2, & fldstartdate , mythid ) call CAL_TIMEPASSED( fldstartdate, modelstartdate, & difftime, mythid ) call CAL_TOSECONDS ( difftime, diffsecs, mythid ) startrec = int((modelstart + startTime - diffsecs)/ & fldperiod) + 1 endrec = int((modelend + startTime - diffsecs + modelstep/2)/ & fldperiod) + 2 if ( nfac .ne. 1 ) then c This is the case of obcs. startrec = (startrec - 1)*nfac + 1 endrec = endrec*nfac endif else /* ndef ALLOW_CAL */ startrec = 1 endrec = (int((endTime - startTime)/fldperiod) + 1)*nfac #endif /* ALLOW_CAL */ endif diffrec = endrec - startrec + 1 if ( debugLevel .GE. debLevB ) then WRITE( msgBuf,'(A,A,A)') & 'CTRL_INIT_REC: Record indices for ',fldname(1:il),':' CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, & SQUEEZE_RIGHT , myThid ) WRITE( msgBuf,'(A,I10,A,I10)') & 'CTRL_INIT_REC: startrec = ',startrec,', endrec = ',endrec CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, & SQUEEZE_RIGHT , myThid ) endif return end