C $Header: /home/ubuntu/mnt/e9_copy/MITgcm/pkg/ecco/ecco_cost_init_fixed.F,v 1.16 2009/03/17 15:35:24 heimbach Exp $ C $Name: $ #include "PACKAGES_CONFIG.h" #include "AD_CONFIG.h" #include "COST_CPPOPTIONS.h" subroutine ecco_cost_init_fixed( mythid ) c ================================================================== c SUBROUTINE ecco_cost_init_fixed c ================================================================== c c o Set contributions to the cost function and the cost function c itself to zero. The cost function and the individual contribu- c tions are defined in the header file "ecco_cost.h". c c started: Christian Eckert eckert@mit.edu 30-Jun-1999 c c changed: Christian Eckert eckert@mit.edu 25-Feb-2000 c c - Restructured the code in order to create a package c for the MITgcmUV. c c changed: Ralf Giering 18-Jan-2001 c c - move namelist reading to cost_readparms.F c c ================================================================== c SUBROUTINE ecco_cost_init_fixed c ================================================================== implicit none c == global variables == #include "EEPARAMS.h" #include "SIZE.h" #include "GRID.h" #include "PARAMS.h" #ifdef ALLOW_CAL #include "cal.h" #endif #include "ecco_cost.h" c == routine arguments == integer mythid c == local variables == integer tempDate1(4) integer tempDate2(4) integer gwunit integer ilo,ihi integer irec logical exst _RL dummy _RL missingObsFlag PARAMETER ( missingObsFlag = 1. _d 23 ) character*(max_len_mbuf) msgbuf c == external functions == integer cal_IntYears external cal_IntYears integer cal_IntMonths external cal_IntMonths integer cal_IntDays external cal_IntDays integer ifnblnk external ifnblnk integer ilnblnk external ilnblnk c == end of interface == #ifdef ALLOW_CAL c-- The number of monthly and daily averages generated by the c-- current model integration. nyearsrec = cal_IntYears( mythid ) nmonsrec = cal_IntMonths( mythid ) ndaysrec = cal_IntDays( mythid ) _BEGIN_MASTER( myThid ) c-- Get the complete dates of the ... c-- ... TMI data. call cal_FullDate( tmistartdate1, tmistartdate2, & tmistartdate, mythid ) c-- ... SST data. call cal_FullDate( sststartdate1, sststartdate2, & sststartdate, mythid ) c-- ... SSS data. call cal_FullDate( sssstartdate1, sssstartdate2, & sssstartdate, mythid ) c-- ... BP data. call cal_FullDate( bpstartdate1, bpstartdate2, & bpstartdate, mythid ) c-- ... T/P data. call cal_FullDate( topexstartdate1, topexstartdate2, & topexstartdate, mythid ) c-- ... ERS data. call cal_FullDate( ersstartdate1, ersstartdate2, & ersstartdate, mythid ) c-- ... GFO data. call cal_FullDate( gfostartdate1, gfostartdate2, & gfostartdate, mythid ) c-- ... SCAT data. call cal_FullDate( scatstartdate1, scatstartdate2, & scatxstartdate, mythid ) call cal_FullDate( scatstartdate1, scatstartdate2, & scatystartdate, mythid ) c-- ... ARGO data. call cal_FullDate( argotstartdate1, argotstartdate2, & argotstartdate, mythid ) call cal_FullDate( argosstartdate1, argotstartdate2, & argosstartdate, mythid ) _END_MASTER( mythid ) #endif /* ALLOW_CAL */ call ecco_check( myThid ) c-- Get the weights that are to be used for the individual cost c-- function contributions. call ecco_cost_weights( mythid ) c-- Initialise adjoint of monthly mean files calculated c-- in cost_averagesfields (and their ad...). cph( cph The following init. shoud not be applied if in the middle cph of a divided adjoint run cph) #ifndef ALLOW_TANGENTLINEAR_RUN cph!!! and I think it needs to be seen by TAF cph!!! for repeated TLM runs cph!!! inquire( file='costfinal', exist=exst ) if ( .NOT. exst) then call ecco_cost_init_barfiles( mythid ) endif #endif #ifdef ALLOW_TRANSPORT_COST_CONTRIBUTION do irec = 1, ndaysrec wtransp(irec) = 0. _d 0 transpobs(irec) = 0. _d 0 enddo if ( costTranspDataFile .NE. ' ' ) then _BEGIN_MASTER(myThid) ilo = ifnblnk(costTranspDataFile) ihi = ilnblnk(costTranspDataFile) CALL OPEN_COPY_DATA_FILE( I costTranspDataFile(ilo:ihi), I 'ECCO_COST_INIT_FIXED', O gwunit, I myThid ) do irec = 1, ndaysrec c-- read daily transport time series c-- 1st: transport in m/s c-- 2nd: date in YYYYMMDD c-- 3rd: uncertainty in m/s read(gwunit,*) transpobs(irec), dummy, wtransp(irec) c-- convert std.dev. to weight if ( wtransp(irec) .NE. 0. ) & wtransp(irec) =1.0/(wtransp(irec)*wtransp(irec)) c-- set weight to zero for missing values if ( transpobs(irec) .EQ. missingObsFlag ) & wtransp(irec) = 0. _d 0 enddo _END_MASTER(myThid) _BARRIER endif #endif /* ALLOW_TRANSPORT_COST_CONTRIBUTION */ #ifdef ALLOW_SSH_COST_CONTRIBUTION c-- Read flags for picking SSH time averages do irec = 1, ndaysrec tpTimeMask(irec) = 1. _d 0 ersTimeMask(irec) = 1. _d 0 gfoTimeMask(irec) = 1. _d 0 enddo c _BEGIN_MASTER(myThid) c #ifdef ALLOW_SSH_TPANOM_COST_CONTRIBUTION if ( tpTimeMaskFile .NE. ' ' ) then ilo = ifnblnk(tpTimeMaskFile) ihi = ilnblnk(tpTimeMaskFile) CALL OPEN_COPY_DATA_FILE( I tpTimeMaskFile(ilo:ihi), I 'cost_ssh tp', O gwunit, I myThid ) do irec = 1, ndaysrec read(gwunit,*) tpTimeMask(irec) enddo endif #endif c #ifdef ALLOW_SSH_ERSANOM_COST_CONTRIBUTION if ( ersTimeMaskFile .NE. ' ' ) then ilo = ifnblnk(ersTimeMaskFile) ihi = ilnblnk(ersTimeMaskFile) CALL OPEN_COPY_DATA_FILE( I ersTimeMaskFile(ilo:ihi), I 'cost_ssh ers', O gwunit, I myThid ) do irec = 1, ndaysrec read(gwunit,*) ersTimeMask(irec) enddo endif #endif c #ifdef ALLOW_SSH_GFOANOM_COST_CONTRIBUTION if ( gfoTimeMaskFile .NE. ' ' ) then ilo = ifnblnk(gfoTimeMaskFile) ihi = ilnblnk(gfoTimeMaskFile) CALL OPEN_COPY_DATA_FILE( I gfoTimeMaskFile(ilo:ihi), I 'cost_ssh gfo', O gwunit, I myThid ) do irec = 1, ndaysrec read(gwunit,*) gfoTimeMask(irec) enddo endif #endif c do irec = 1, ndaysrec if ( & ( tpTimeMask(irec).NE.0. .AND. tpTimeMask(irec).NE.1. ) .OR. & ( ersTimeMask(irec).NE.0. .AND. ersTimeMask(irec).NE.1. ) .OR. & ( ersTimeMask(irec).NE.0. .AND. ersTimeMask(irec).NE.1. ) ) & then WRITE(msgBuf,'(2A,I)') & 'ecco_cost_init_fixed: (SSH)TimeMask not 0. or 1. ', & 'for irec (=day) ', irec CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, & SQUEEZE_RIGHT , myThid ) CALL PRINT_ERROR( msgBuf , myThid ) STOP 'ABNORMAL END: S/R ECCO_COST_INIT_FIXED' endif enddo c _END_MASTER(myThid) _BARRIER #endif c-- Summarize the cost function's setup. _BEGIN_MASTER( mythid ) call ecco_cost_summary( mythid ) _END_MASTER( mythid ) _BARRIER end