Back to home page

darwin3

 
 

    


File indexing completed on 2026-01-27 18:49:57 UTC

view on githubraw file Latest commit b4e9a6eb on 2026-01-16 16:45:30 UTC
ad59256d7d aver*0001 #include "OBSFIT_OPTIONS.h"
                0002 #include "AD_CONFIG.h"
                0003 
                0004 CBOP
                0005 C     !ROUTINE: OBSFIT_INIT_FIXED
                0006 
                0007 C     !INTERFACE:
                0008       SUBROUTINE OBSFIT_INIT_FIXED( myThid )
                0009 
                0010 C     !DESCRIPTION:
                0011 C     ==================================================================
                0012 C     | Initialize ObsFit variables that are kept fixed during the run
                0013 C     ==================================================================
                0014 
                0015 C     !USES:
                0016       IMPLICIT NONE
                0017 C     == Global variables ===
                0018 #include "SIZE.h"
                0019 #include "EEPARAMS.h"
                0020 #include "PARAMS.h"
                0021 #include "GRID.h"
                0022 #include "DYNVARS.h"
                0023 #ifdef ALLOW_CAL
                0024 #include "cal.h"
                0025 #endif
                0026 #ifdef ALLOW_OBSFIT
                0027 # include "OBSFIT_SIZE.h"
                0028 # include "OBSFIT.h"
                0029 # include "netcdf.inc"
                0030 #endif
                0031 
                0032 C     !INPUT PARAMETERS:
                0033 C     myThid :: my thread ID number
                0034       INTEGER myThid
                0035 CEOP
                0036 
                0037 #ifdef ALLOW_OBSFIT
                0038 C     !FUNCTIONS:
                0039       INTEGER  ILNBLNK
                0040       EXTERNAL ILNBLNK
                0041       INTEGER  MDS_RECLEN
                0042       EXTERNAL MDS_RECLEN
                0043 
                0044 C     !LOCAL VARIABLES:
                0045 C     i,j,bi,bj    :: loop indices
                0046 C     iG,jG        :: global indices
                0047 C     diffsecs     :: absolute time
                0048       INTEGER i,j,k,l,bi,bj,iG,jG
                0049       INTEGER obs_num, num_file, sampleNo_tile
                0050       INTEGER ic, ip, iq, kLev, iINTERP
                0051       INTEGER chunkObs, chunk
                0052       INTEGER iUnit
                0053       INTEGER stopObsfit, stopGenericGrid
                0054       INTEGER loopThroughSamples, weighSamples, readDelT
                0055       INTEGER obsIsInRunTime, sampleIsInTile, sampleIsValid
                0056       INTEGER fid, dimid, varID(2)
                0057       INTEGER varID0, varID1a, varID1b, varID1c
                0058       INTEGER varID2, varID3a, varID3b, varID4, varID5
                0059       INTEGER varID6, varID7
                0060       INTEGER varID_intp1, varID_intp2, varID_intp11, varID_intp22
                0061       INTEGER varID_intp3, varID_intp4, varID_intp5, varID_intp6
                0062       INTEGER tmpdate(4), tmpdiff(4)
                0063       INTEGER tmp_type2(1000), type_cur
                0064       INTEGER sample_i, sample_j, sample_k1, sample_k2
                0065       INTEGER np_cur
                0066       INTEGER ObsNo_valid, ObsNo_div1000
                0067       INTEGER sample_cnt
                0068       INTEGER hh, obsNo_hh, obs_np_max
                0069       INTEGER ntype_ssh,ntype_other, obs_is_ssh_loc
                0070       INTEGER vec_start, vec_count
                0071       INTEGER vec_start2(2), vec_count2(2)
                0072       INTEGER IL, JL, err, nerr
                0073       _RL tmpyymmdd(1000),tmphhmmss(1000),diffsecs
                0074       _RL yymmddMin,yymmddMax
                0075       _RL hhmmssMin,hhmmssMax
                0076       _RL tmpnp(1000), tmpdelT(1000)
                0077       _RL tmp_lon, tmp_lon2(1000), tmp_lat2(1000), lon_cur, lat_cur
                0078       _RL tmp_depth2(1000), depth_cur, delT_cur
                0079       _RL tmp_weight2(1000)
b4e9a6eb7c aver*0080       _RL tmp_sample_time(NSAMPLES_MAX_GLO)
                0081       _RL tmp_sample_delT(NSAMPLES_MAX_GLO)
ad59256d7d aver*0082       _RL lon_1, lon_2, lat_1, lat_2
                0083       _RL depth_1, depth_2
                0084       _RL lon_tmp1, lon_tmp2, lat_tmp1, lat_tmp2
                0085       _RL lat_fac, lon_fac, depth_fac
                0086       _RL mask(NUM_INTERP_PTS_OBS)
                0087       _RL w(NUM_INTERP_PTS_OBS), wtot
                0088       _RL tmp_i(1000,NUM_INTERP_PTS_OBS)
                0089       _RL tmp_j(1000,NUM_INTERP_PTS_OBS)
                0090       _RL tmp_k(1000,NUM_INTERP_PTS_OBS)
                0091       _RL tmp_frac(1000,NUM_INTERP_PTS_OBS),tmp_sum_fracs
                0092       _RL tmp_xC11(1000),tmp_yC11(1000)
                0093       _RL tmp_xCNINJ(1000),tmp_yCNINJ(1000)
                0094 c     _RL xy_buffer_r8(0:sNx+1,0:sNy+1)
                0095       CHARACTER*(MAX_LEN_FNAM) obsfitfile, fnamedatanc
                0096       CHARACTER*(MAX_LEN_FNAM) obsfnameequinc, obsfnameequincglo
                0097       CHARACTER*(MAX_LEN_FNAM) fnamemisfit
                0098 # ifdef ALLOW_ADJOINT_RUN
                0099       CHARACTER*(MAX_LEN_FNAM) adobsfnameequinc, adobsfnameequincglo
                0100 # endif
                0101 # ifdef ALLOW_TANGENTLINEAR_RUN
                0102       CHARACTER*(MAX_LEN_FNAM) tlobsfnameequinc, tlobsfnameequincglo
                0103 # endif
                0104       CHARACTER*(MAX_LEN_MBUF) msgbuf
                0105       LOGICAL exst
                0106 
                0107       iUnit = standardMessageUnit
                0108       WRITE( msgbuf,'(A)' ) ' '
                0109       CALL PRINT_MESSAGE( msgbuf, iUnit, SQUEEZE_RIGHT, myThid )
                0110       WRITE( msgbuf,'(A)' )
                0111      &     '// ======================================================='
                0112       CALL PRINT_MESSAGE( msgbuf, iUnit, SQUEEZE_RIGHT, myThid )
                0113       WRITE( msgbuf,'(A)' )
                0114      &     '// insitu obsfit model sampling >>> START <<<'
                0115       CALL PRINT_MESSAGE( msgbuf, iUnit, SQUEEZE_RIGHT, myThid )
                0116       WRITE( msgbuf,'(A)' )
                0117      &     '// ======================================================='
                0118       CALL PRINT_MESSAGE( msgbuf, iUnit, SQUEEZE_RIGHT, myThid )
                0119       WRITE(msgbuf,'(A)' ) ' '
                0120       CALL PRINT_MESSAGE( msgbuf, iUnit, SQUEEZE_RIGHT, myThid )
                0121 
                0122       stopObsfit=0
                0123       stopGenericGrid=0
                0124 
                0125       IF ( (.NOT.obsfitDoGenGrid) .AND.
                0126      &     (.NOT.usingSphericalPolarGrid .OR. rotateGrid) ) THEN
                0127        WRITE( msgBuf,'(2A)' ) 'OBSFIT_INIT_FIXED: ',
                0128      &      'obsfitDoGenGrid=.true. is required'
                0129        CALL PRINT_ERROR( msgBuf, myThid )
                0130        WRITE( msgBuf,'(2A)' ) 'OBSFIT_INIT_FIXED: ',
                0131      &      'unless usingSphericalGrid=.TRUE. and rotateGrid=.FALSE.'
                0132        CALL PRINT_ERROR( msgBuf, myThid )
                0133        CALL ALL_PROC_DIE( myThid )
                0134        STOP 'ABNORMAL END: S/R OBSFIT_INIT_FIXED'
                0135       ENDIF
                0136 
                0137 c      IF ( obsfitDoGenGrid ) THEN
                0138 c       WRITE(msgBuf,'(2A)') 'OBSFIT_INIT_FIXED: ',
                0139 c     &  'obsfitDoGenGrid has not been tested yet'
                0140 c       CALL PRINT_ERROR( msgBuf, myThid )
                0141 c       CALL ALL_PROC_DIE( myThid )
                0142 c       STOP 'ABNORMAL END: S/R OBSFIT_INIT_FIXED'
                0143 c      ENDIF
                0144 
                0145       WRITE( msgbuf,'(A)' ) ' '
                0146       CALL PRINT_MESSAGE( msgbuf, iUnit, SQUEEZE_RIGHT, myThid )
                0147       WRITE( msgbuf,'(A)' ) 'general packages parameters :'
                0148 
                0149       JL  = ILNBLNK( obsfitDir )
                0150       IF (JL.NE.0) THEN
                0151        WRITE( msgbuf,'(2A)' ) '  obsfitDir ',obsfitDir(1:JL)
                0152       ELSE
                0153        WRITE( msgbuf,'(2A)' ) '  obsfitDir ','./'
                0154       ENDIF
                0155       CALL PRINT_MESSAGE( msgBuf, iUnit, SQUEEZE_RIGHT, myThid )
                0156       WRITE( msgbuf,'(A,l5)' ) '  obsfitDoGenGrid  ',obsfitDoGenGrid
                0157       CALL PRINT_MESSAGE( msgBuf, iUnit, SQUEEZE_RIGHT, myThid )
                0158       WRITE( msgbuf,'(A,l5)' ) '  obsfitDoNcOutput ',obsfitDoNcOutput
                0159       CALL PRINT_MESSAGE( msgBuf, iUnit, SQUEEZE_RIGHT, myThid )
                0160       WRITE( msgbuf,'(A)' ) ' '
                0161       CALL PRINT_MESSAGE( msgbuf, iUnit, SQUEEZE_RIGHT, myThid )
                0162 
                0163       _BEGIN_MASTER( myThid )
                0164 
                0165 C Initialize global variables for obsfit_read_obs.F
                0166       obsfit_curfile_buff = 0
                0167       DO l = 1, 1000
                0168        obsfit_data_buff(l) = 0. _d 0
                0169        obsfit_uncert_buff(l) = 0. _d 0
                0170       ENDDO
                0171 
                0172       yymmddMin=modelstartdate(1)
                0173       yymmddMax=modelenddate(1)
                0174       hhmmssMin=modelstartdate(2)
                0175       hhmmssMax=modelenddate(2)
                0176 
                0177       DO num_file = 1, NFILESMAX_OBS
                0178 
                0179        ObsNo_hh=0
                0180        obs_np_max=0
                0181        obs_is_ssh_loc=0
                0182        obs_is_ssh(num_file)=0
                0183 
                0184        obsfitFile=' '
                0185        IL = ILNBLNK( obsfitFiles(num_file) )
                0186        IF (IL.NE.0) THEN
                0187         WRITE( obsfitFile,'(1A)' ) obsfitFiles(num_file)(1:IL)
                0188         WRITE( msgbuf,'(A)' ) ' '
                0189         CALL PRINT_MESSAGE( msgbuf, iUnit, SQUEEZE_RIGHT, myThid )
                0190         WRITE( msgbuf,'(A,I3,2A)' ) 'obsfit file #', num_file,
                0191      &       ' is ', obsfitFile(1:IL)
                0192         CALL PRINT_MESSAGE( msgbuf, iUnit, SQUEEZE_RIGHT, myThid )
                0193        ENDIF
                0194 
                0195        IL = ILNBLNK( obsfitFile )
                0196        IF (IL.NE.0) THEN
                0197 
                0198 C===========================================================
                0199 C Open input files and read information
                0200 C===========================================================
                0201 
                0202         WRITE( fnamedatanc,'(2A)' ) obsfitFile(1:IL),'.nc'
                0203         err = NF_OPEN( fnamedatanc, NF_NOWRITE, fiddata_obs(num_file) )
                0204         CALL OBSFIT_NF_ERROR(
                0205      &       'INIT_FIXED: NF_OPEN fiddata',err,0,0,myThid )
                0206 
                0207 C Read number of observations and available dimensions:
                0208         fid = fiddata_obs(num_file)
                0209 
                0210         err = NF_INQ_DIMID( fid,'iOBS', dimid )
                0211         CALL OBSFIT_NF_ERROR(
                0212      &       'INIT_FIXED: NF_INQ_DIMID iOBS',err,0,0,myThid )
                0213         err = NF_INQ_DIMLEN( fid, dimid, obsNo(num_file) )
                0214         CALL OBSFIT_NF_ERROR(
                0215      &       'INIT_FIXED: NF_INQ_DIMLEN ObsNo',err,0,0,myThid )
                0216 
                0217         WRITE(msgbuf,'(A,I9)')
                0218      &       '  # of observations in file                   =',
                0219      &       obsNo(num_file)
                0220         CALL PRINT_MESSAGE( msgbuf, iUnit, SQUEEZE_RIGHT, myThid )
                0221 
                0222 C Read number of interpolation points (generic grid only):
                0223         err = NF_INQ_DIMID(fid,'iINTERP', dimid)
                0224         IF (err.EQ.NF_NOERR) THEN
                0225          err = NF_INQ_DIMLEN( fid, dimid, iINTERP )
                0226         ELSE
                0227 
                0228          IF ( debugLevel .GE. debLevA ) THEN
                0229           WRITE( msgBuf,'(3A,I3)' )
                0230      &         'S/R OBSFIT_INIT_FIXED: ',
                0231      &         'no iINTERP dim in data file using iINTERP ',
                0232      &         '= NUM_INTERP_POINTS =', NUM_INTERP_PTS_OBS
                0233           CALL PRINT_MESSAGE( msgBuf, iUnit, SQUEEZE_RIGHT, myThid )
                0234          ENDIF
                0235 
                0236          iINTERP = NUM_INTERP_PTS_OBS
                0237 
                0238         ENDIF!if (err.EQ.NF_NOERR)
                0239 
                0240         WRITE( msgbuf,'(A,I9)' )
                0241      &       '  # of interpolation points                   =',
                0242      &       iINTERP
                0243         CALL PRINT_MESSAGE( msgbuf, iUnit, SQUEEZE_RIGHT, myThid )
                0244 
                0245 C Read number of samples (if missing, assume it's 1):
                0246         loopThroughSamples = 1
                0247         err = NF_INQ_VARID( fid, 'obs_np', varID0 )
                0248         IF (err.NE.NF_NOERR) THEN
                0249          loopThroughSamples = 0
                0250 
                0251          WRITE( msgbuf,'(2A)' )
                0252      &        '      input obsfit file does not have NP ',
                0253      &        '      (num. samples); assume NP=1 for all obs '
                0254          CALL PRINT_MESSAGE( msgbuf, iUnit, SQUEEZE_RIGHT, myThid )
                0255 
                0256         ENDIF
                0257 
                0258 C Read the info for observations:
                0259         err = NF_INQ_VARID( fid, 'obs_YYYYMMDD', varID1a )
                0260         nerr = err
                0261         CALL OBSFIT_NF_ERROR(
                0262      &       'INIT_FIXED: NF_INQ_DIMID obs_YYYYMMDD',err,0,0,myThid )
                0263         err = NF_INQ_VARID( fid, 'obs_HHMMSS', varID1b )
                0264         nerr = nerr + err
                0265         CALL OBSFIT_NF_ERROR(
                0266      &       'INIT_FIXED: NF_INQ_DIMID obs_HHMMSS',err,0,0,myThid )
                0267         err = NF_INQ_VARID( fid, 'obs_val', varID6 )
                0268         nerr = nerr + err
                0269         CALL OBSFIT_NF_ERROR(
                0270      &       'INIT_FIXED: NF_INQ_DIMID obs_val',err,0,0,myThid )
                0271         err = NF_INQ_VARID( fid, 'obs_uncert', varID7 )
                0272         nerr = nerr + err
                0273         CALL OBSFIT_NF_ERROR(
                0274      &       'INIT_FIXED: NF_INQ_DIMID obs_uncert',err,0,0,myThid )
                0275 
                0276         IF (nerr.NE.NF_NOERR) THEN
                0277          IL  = ILNBLNK( obsfitFile )
                0278          WRITE( msgBuf,'(3A)' )
                0279      &        'OBSFIT_INIT_FIXED: file ', obsfitFile(1:IL),
                0280      &        '.nc is not in the pkg/obsfit format'
                0281          CALL PRINT_ERROR( msgBuf, myThid )
                0282          stopObsfit = 1
                0283         ENDIF
                0284 
                0285         readDelT = 1
                0286         err = NF_INQ_VARID( fid,'obs_delT', varID1c )
b4e9a6eb7c aver*0287 C Time interval (if missing, assume instantaneous):
ad59256d7d aver*0288         IF (err.NE.NF_NOERR) THEN
                0289          readDelT = 0
                0290          WRITE( msgbuf,'(2A)' )
                0291      &        '      input obsfit file does not have time interval;',
                0292      &        '      assume observations are instantaneous '
                0293          CALL PRINT_MESSAGE( msgbuf, iUnit, SQUEEZE_RIGHT, myThid )
                0294         ENDIF
                0295 
                0296 C Read the info for samples:
                0297         err = NF_INQ_VARID( fid,'sample_type',varID2 )
                0298         nerr = err
                0299         CALL OBSFIT_NF_ERROR(
                0300      &       'INIT_FIXED: NF_INQ_DIMID sample_type',err,0,0,myThid )
                0301         err = NF_INQ_VARID( fid,'sample_lon', varID3a )
                0302         nerr = err
                0303         CALL OBSFIT_NF_ERROR(
                0304      &       'INIT_FIXED: NF_INQ_DIMID sample_lon',err,0,0,myThid )
                0305         err = NF_INQ_VARID( fid,'sample_lat', varID3b )
                0306         nerr = err
                0307         CALL OBSFIT_NF_ERROR(
                0308      &       'INIT_FIXED: NF_INQ_DIMID sample_lat',err,0,0,myThid )
                0309         err = NF_INQ_VARID( fid,'sample_depth', varID4 )
                0310         nerr = err
                0311         CALL OBSFIT_NF_ERROR(
                0312      &       'INIT_FIXED: NF_INQ_DIMID sample_depth',err,0,0,myThid )
                0313 
                0314         IF (err.NE.NF_NOERR) THEN
                0315          IL  = ILNBLNK( obsfitFile )
                0316          WRITE( msgBuf,'(3A)' )
                0317      &        'OBSFIT_INIT_FIXED: file ', obsfitFile(1:IL),
                0318      &        '.nc is not in the pkg/obsfit format'
                0319          CALL PRINT_ERROR( msgBuf, myThid )
                0320          stopObsfit=1
                0321         ENDIF
                0322 
                0323         weighSamples = 1
                0324         err = NF_INQ_VARID( fid,'sample_weight', varID5 )
                0325 C Weight for each sample (if missing, assume all samples weigh equally):
                0326         IF (err.NE.NF_NOERR) THEN
                0327          weighSamples = 0
                0328          WRITE( msgbuf,'(2A)' )
                0329      &        '      input obsfit file does not have sample weight;',
                0330      &        '      assume all samples are weighed evenly '
                0331          CALL PRINT_MESSAGE( msgbuf, iUnit, SQUEEZE_RIGHT, myThid )
                0332         ENDIF
                0333 
                0334         IF (obsfitDoGenGrid) THEN
                0335 C Read interpolation information (grid points, fractions, etc.)
                0336          err = NF_INQ_VARID(fid,'sample_interp_XC11',varID_intp1)
                0337          err = NF_INQ_VARID(fid,'sample_interp_YC11',varID_intp2)
                0338          err = NF_INQ_VARID(fid,'sample_interp_XCNINJ',varID_intp11)
                0339          err = NF_INQ_VARID(fid,'sample_interp_YCNINJ',varID_intp22)
                0340          err = NF_INQ_VARID(fid,'sample_interp_frac',varID_intp3)
                0341          err = NF_INQ_VARID(fid,'sample_interp_i',varID_intp4)
                0342          err = NF_INQ_VARID(fid,'sample_interp_j',varID_intp5)
                0343          err = NF_INQ_VARID(fid,'sample_interp_k',varID_intp6)
                0344          IF (err.NE.NF_NOERR) THEN
                0345           IL  = ILNBLNK( obsfitFile )
                0346           WRITE( msgBuf,'(3A)' )
                0347      &         'OBSFIT_INIT_FIXED: file ', obsfitFile(1:IL), '.nc is',
                0348      &         ' missing interpolation information (obsfitDoGenGrid)'
                0349           CALL PRINT_ERROR( msgBuf, myThid )
                0350           stopGenericGrid=2
                0351          ENDIF
                0352         ENDIF
                0353 
                0354 C Variables names for equi files
                0355         obsfit_nameequi = 'mod_val'
                0356         obsfit_namemask = 'mod_mask'
                0357         obsfit_nameval = 'obs_val'
                0358         obsfit_nameuncert = 'obs_uncert'
                0359 
                0360 C Create global files for obs-equivalent
                0361         IF ( myProcId .EQ. 0 ) THEN
                0362 
                0363          WRITE( obsfnameequincglo,'(3A)' )
                0364      &        obsfitDir(1:JL),obsfitFile(1:IL),'.equi.nc'
                0365 # ifdef ALLOW_ADJOINT_RUN
                0366          WRITE( adobsfnameequincglo,'(4A)' )
                0367      &        obsfitDir(1:JL),'ad',
                0368      &        obsfitFile(1:IL),'.equi.nc'
                0369 # endif /* ALLOW_ADJOINT_RUN */
                0370 # ifdef ALLOW_TANGENTLINEAR_RUN
                0371          WRITE( tlobsfnameequincglo,'(4A)' )
                0372      &        obsfitDir(1:JL),'tl',
                0373      &        obsfitFile(1:IL),'.equi.nc'
                0374 # endif /* ALLOW_TANGENTLINEAR_RUN */
                0375 
                0376          JL = ILNBLNK( obsfitDir )
                0377          INQUIRE( file=obsfnameequincglo, exist=exst )
                0378          IF (.NOT.exst) THEN
                0379           err = NF_CREATE( obsfnameequincglo, NF_CLOBBER,
                0380      &          fidglobal(num_file) )
                0381           err = NF_DEF_DIM( fidglobal(num_file), 'iOBS',
                0382      &          ObsNo(num_file), dimid )
                0383           err = NF_DEF_VAR( fidglobal(num_file),
                0384      &          obsfit_nameequi,NF_DOUBLE,1,dimid,varID(1) )
                0385           err = NF_PUT_ATT_DOUBLE( fidglobal(num_file),
                0386      &          varID(1),'_FillValue',NF_DOUBLE,1, -9999. _d 0 )
                0387           err = NF_DEF_VAR( fidglobal(num_file),
                0388      &          obsfit_namemask,NF_DOUBLE,1,dimid,varID(2) )
                0389           err = NF_PUT_ATT_DOUBLE( fidglobal(num_file),
                0390      &          varID(2),'_FillValue',NF_DOUBLE,1, -9999. _d 0 )
                0391           err = NF_ENDDEF( fidglobal(num_file) )
                0392           err = NF_CLOSE( fidglobal(num_file) )
                0393           err = NF_OPEN( obsfnameequincglo, NF_WRITE,
                0394      &          fidglobal(num_file) )
                0395          ELSE
                0396           err = NF_OPEN( obsfnameequincglo, NF_WRITE,
                0397      &          fidglobal(num_file) )
                0398           err = NF_INQ_VARID( fidglobal(num_file), obsfit_namemask,
                0399      &          varID(2) )
                0400 
                0401          ENDIF
b4e9a6eb7c aver*0402 C Initialize mask values to 0
ad59256d7d aver*0403          DO obs_num = 1, ObsNo(num_file)
                0404           err = NF_PUT_VARA_DOUBLE( fidglobal(num_file), varID(2),
                0405      &          obs_num, 1, 0. _d 0 )
                0406           CALL OBSFIT_NF_ERROR(
                0407      &         'INIT_FIXED: NF_PUT_VARA_DOUBLE zero',err,0,0,myThid )
                0408          ENDDO
                0409 
                0410 #ifdef ALLOW_ADJOINT_RUN
                0411          INQUIRE( file=adobsfnameequincglo, exist=exst )
                0412          IF (.NOT.exst) THEN
                0413           err = NF_CREATE( adobsfnameequincglo,NF_CLOBBER,
                0414      &          fidadglobal(num_file) )
                0415           err = NF_DEF_DIM( fidadglobal(num_file),'iOBS',
                0416      &          ObsNo(num_file),dimid )
                0417           err = NF_DEF_VAR( fidadglobal(num_file),
                0418      &          'mod_val',NF_DOUBLE,1,dimid,varID(1) )
                0419           err = NF_PUT_ATT_DOUBLE( fidadglobal(num_file),
                0420      &          varID(1),'_FillValue', NF_DOUBLE,1, 0. _d 0 )
                0421           err = NF_DEF_VAR( fidadglobal(num_file),
                0422      &          'mod_mask',NF_DOUBLE, 1,dimid,varID(2) )
                0423           err = NF_PUT_ATT_DOUBLE( fidadglobal(num_file),
                0424      &          varID(2),'_FillValue',NF_DOUBLE,1, 0. _d 0 )
                0425           err = NF_ENDDEF( fidadglobal(num_file) )
                0426           err = NF_CLOSE( fidadglobal(num_file) )
                0427           err = NF_OPEN( adobsfnameequincglo, NF_WRITE,
                0428      &          fidadglobal(num_file) )
                0429          ELSE
                0430           err = NF_OPEN( adobsfnameequincglo, NF_WRITE,
                0431      &          fidadglobal(num_file) )
                0432          ENDIF
                0433 #endif
                0434 #ifdef ALLOW_TANGENTLINEAR_RUN
                0435          INQUIRE( file=tlobsfnameequincglo, exist=exst )
                0436          IF (.NOT.exst) THEN
                0437           err = NF_CREATE( tlobsfnameequincglo,NF_CLOBBER,
                0438      &          fidtanglobal(num_file) )
                0439           err = NF_DEF_DIM( fidtanglobal(num_file),'iOBS',
                0440      &          ObsNo(num_file),dimid )
                0441           err = NF_DEF_VAR( fidtanglobal(num_file),
                0442      &          'mod_val',NF_DOUBLE,1,dimid,varID(1) )
                0443           err = NF_PUT_ATT_DOUBLE( fidtanglobal(num_file),
                0444      &          varID(1),'_FillValue',NF_DOUBLE,1, 0. _d 0 )
                0445           err = NF_DEF_VAR( fidtanglobal(num_file),
                0446      &          'mod_mask',NF_DOUBLE,1,dimid,varID(2))
                0447           err = NF_PUT_ATT_DOUBLE( fidtanglobal(num_file),
                0448      &          varID(2),'_FillValue',NF_DOUBLE,1, 0. _d 0 )
                0449           err = NF_ENDDEF( fidtanglobal(num_file) )
                0450           err = NF_CLOSE( fidtanglobal(num_file) )
                0451           err = NF_OPEN( tlobsfnameequincglo, NF_WRITE,
                0452      &          fidtanglobal(num_file) )
                0453          ELSE
                0454           err = NF_OPEN( tlobsfnameequincglo, NF_WRITE,
                0455      &          fidtanglobal(num_file) )
                0456          ENDIF
                0457 #endif
                0458 
                0459 C Global file for misfits
                0460          WRITE( fnamemisfit,'(3A)' )
                0461      &        obsfitDir(1:JL),obsfitfile(1:IL),'.misfit.nc'
                0462          INQUIRE( file=fnamemisfit, exist=exst )
                0463          IF (.NOT.exst) THEN
                0464           err = NF_CREATE( fnamemisfit,NF_CLOBBER,fidmisfit(num_file) )
                0465           err = NF_DEF_DIM( fidmisfit(num_file),'iOBS',ObsNo(num_file),
                0466      &          dimid )
                0467           err = NF_DEF_VAR( fidmisfit(num_file),'misfit',
                0468      &          NF_DOUBLE,1,dimid,varID(1) )
                0469           err = NF_PUT_ATT_DOUBLE( fidmisfit(num_file),varID(1),
                0470      &          '_FillValue',NF_DOUBLE,1,-9999. _d 0 )
                0471           err = NF_ENDDEF( fidmisfit(num_file) )
                0472           err = NF_CLOSE( fidmisfit(num_file) )
                0473          ELSE
                0474           err = NF_OPEN( fnamemisfit, NF_WRITE,fidmisfit(num_file) )
                0475          ENDIF
                0476 
                0477         ENDIF !myProcId
                0478 
                0479 C===========================================================
                0480 C First: loop through observations
                0481 C===========================================================
                0482 C Default values
                0483         DO obs_num = 1, NOBSMAX_OBS
                0484          obs_np(num_file,obs_num) = 1
                0485          obs_ind_glob(num_file,obs_num) = 0
                0486         ENDDO
                0487 
                0488 C Main loop: look for valid obs (within model run time)
                0489         ObsNo_valid = 0
                0490         Obsno_div1000 = max(0,int(ObsNo(num_file)/1000))
                0491 
                0492 C Counter tracking position of first sample number for each obs
                0493         sample_cnt = 1
                0494 
                0495         DO chunkObs = 1, Obsno_div1000+1
                0496          chunk = 1000*(chunkObs-1)
                0497 
                0498          IF ( MIN(ObsNo(num_file), 1000*chunkObs ).GE.
                0499      &      1+chunk ) THEN
                0500 
                0501 C Read a chunk
                0502           vec_start = 1+chunk
                0503           vec_count = MIN(1000,ObsNo(num_file)-chunk)
                0504 
                0505           IF ( (vec_count.LE.0) .OR.
                0506      &         (vec_count.GT.1000) .OR.
                0507      &         (vec_start.LE.0) .OR.
                0508      &         (vec_count+vec_start-1.GT.ObsNo(num_file)) )
                0509      &    THEN
                0510            IL  = ILNBLNK( obsfitFile )
                0511            WRITE( msgBuf,'(3A)' )
                0512      &          'OBSFIT_INIT_FIXED: file ', obsfitFile(1:IL),
                0513      &          '.nc was not read properly (case 1).'
                0514            CALL PRINT_ERROR( msgBuf, myThid )
                0515            stopObsfit = 1
                0516           ENDIF
                0517 
                0518 C Read time
                0519           err = NF_GET_VARA_DOUBLE( fid,varID1a,vec_start,
                0520      &          vec_count, tmpyymmdd )
                0521           err = NF_GET_VARA_DOUBLE( fid,varID1b,vec_start,
                0522      &          vec_count, tmphhmmss )
                0523 C Read time interval
                0524           IF ( readDelT.GT.0 ) THEN
                0525            err = NF_GET_VARA_DOUBLE( fid,varID1c,vec_start,
                0526      &           vec_count, tmpdelT )
                0527           ENDIF
                0528 C Read number of samples per obs
                0529           IF ( loopThroughSamples.EQ.1 ) THEN
                0530            err = NF_GET_VARA_DOUBLE( fid,varID0,vec_start,
                0531      &           vec_count, tmpnp )
                0532           ENDIF
                0533 
                0534           IF (err.NE.NF_NOERR) THEN
                0535            WRITE( msgBuf,'(3A)' )
                0536      &          'OBSFIT_INIT_FIXED: file ', obsfitFile(1:IL),
                0537      &          '.nc was not read properly (case 2).'
                0538            CALL PRINT_ERROR( msgBuf, myThid )
                0539            stopObsfit = 1
                0540           ENDIF
                0541 
                0542 C Loop through this chunk
                0543           DO ic = 1, MIN(1000,ObsNo(num_file)-chunk)
                0544 
                0545            IF ( stopObsfit .EQ. 0 ) THEN
                0546             obsIsInRunTime = 1
                0547 
                0548 CAV if obs starts before model run, will be ignored even if it ends after
                0549 CAV model starts - ok for now
                0550             IF (( ( tmpyymmdd(ic).GT.yymmddMin ) .OR.
                0551      &           (( tmpyymmdd(ic).EQ.yymmddMin ) .AND.
                0552      &            ( tmphhmmss(ic).GE.hhmmssMin )) ) .AND.
                0553      &          ( ( tmpyymmdd(ic).LT.yymmddMax ) .OR.
                0554      &           (( tmpyymmdd(ic).EQ.yymmddMax ) .AND.
                0555      &            ( tmphhmmss(ic).LE.hhmmssMax )) )) THEN
                0556              hh = INT(tmphhmmss(ic))/10000
                0557              IF ( hh.LT.hoursPerDay ) THEN
                0558               obsIsInRunTime = 1
                0559               CALL CAL_FULLDATE( INT(tmpyymmdd(ic)),
                0560      &             INT(tmphhmmss(ic)),tmpdate,myThid )
                0561               CALL CAL_TIMEPASSED( modelstartdate,tmpdate,
                0562      &             tmpdiff,myThid )
                0563               CALL CAL_TOSECONDS( tmpdiff,diffsecs,myThid )
                0564               diffsecs = diffsecs+nIter0*deltaTClock
                0565              ELSE
                0566 C If tmphhmmss is out of range then disregard obs
                0567               obsIsInRunTime = 0
                0568               diffsecs = -deltaTClock
                0569               ObsNo_hh = ObsNo_hh+1
                0570              ENDIF
                0571             ELSE
                0572              obsIsInRunTime = 0
                0573              diffsecs = -deltaTClock
                0574             ENDIF
                0575 
                0576             IF ( loopThroughSamples.EQ.1 ) THEN
                0577              np_cur = tmpnp(ic)
                0578             ELSE
                0579              np_cur = 1
                0580             ENDIF
                0581 
                0582             IF ( readDelT.EQ.1 ) THEN
                0583              IF ( tmpdelT(ic).GT.0. _d 0 ) THEN
                0584 C delT>0: time average
                0585               delT_cur = tmpdelT(ic)
                0586               obsfitOperation(num_file) = 1
                0587              ELSEIF (tmpdelT(ic).LT.0. _d 0) THEN
                0588 C delT<0: time integral
                0589               delT_cur = -tmpdelT(ic)
                0590               obsfitOperation(num_file) = 2
                0591              ELSE
                0592 C delT=0: instantaneous
                0593               delT_cur = 0. _d 0
                0594               obsfitOperation(num_file) = 0
                0595              ENDIF
                0596             ELSE
                0597              delT_cur = 0. _d 0
                0598              obsfitOperation(num_file) = 0
                0599             ENDIF
                0600 
                0601             IF ( obsIsInRunTime.EQ.1 ) THEN
                0602 C If yes then store obs index position and number of samples:
                0603              ObsNo_valid = ObsNo_valid+1
                0604              obs_ind_glob(num_file,ObsNo_valid) = ic+chunk
                0605 C Number of samples in each valid observation
                0606              obs_np(num_file,ObsNo_valid) = np_cur
                0607              IF ( np_cur.GT.obs_np_max ) obs_np_max = np_cur
                0608 C Position of first sample
                0609              obs_sample1_ind(num_file,ObsNo_valid) = sample_cnt
                0610              obs_delT(num_file,ObsNo_valid) = delT_cur
                0611             ENDIF !obsIsInRunTime.EQ.1
                0612 
                0613 C Regardless of whether obs is in run time or not,
                0614 C keep track of sample index position
                0615 C and assign time to samples
                0616             DO k = 1, np_cur
                0617              tmp_sample_time(sample_cnt) = diffsecs
                0618              tmp_sample_delT(sample_cnt) = delT_cur
                0619              sample_cnt = sample_cnt+1
                0620             ENDDO
                0621 
                0622 C Check that maximum size was not reached:
                0623             IF ( ObsNo_valid.GT.NOBSMAX_OBS ) THEN
                0624              WRITE( msgBuf,'(3A)' )
                0625      &            'OBSFIT_INIT_FIXED: file ', obsfitFile(1:IL),
                0626      &            '.nc was not read properly (increase NOBSMAX_OBS).'
                0627              CALL PRINT_ERROR( msgBuf, myThid )
                0628              stopObsfit = 1
                0629             ENDIF
                0630 
                0631 C Check that maximum NP was not reached:
                0632             IF ( obs_np_max.GT.NSAMP_PER_OBS_MAX ) THEN
                0633              WRITE( msgBuf,'(3A)' )
                0634      &           'OBSFIT_INIT_FIXED: file ', obsfitFile(1:IL),
                0635      &           '.nc  was not read properly ',
                0636      &           '(increase NSAMP_PER_OBS_MAX).'
                0637              CALL PRINT_ERROR( msgBuf, myThid )
                0638              stopObsfit = 1
                0639             ENDIF
                0640 
                0641            ENDIF !stopObsfit
                0642           ENDDO !ic
                0643          ENDIF !chunk
                0644         ENDDO !chunkObs
                0645 
                0646 C Number of valid observations in the file
                0647         ObsNo(num_file) = ObsNo_valid
                0648 
                0649         WRITE( msgbuf,'(A,I9)' )
                0650      &       '  # of obs with erroneous HHMMSS values =', ObsNo_hh
                0651         CALL PRINT_MESSAGE( msgbuf, iUnit, SQUEEZE_RIGHT, myThid )
                0652 
                0653         WRITE(msgbuf,'(A,I9)')
                0654      &       '  # of obs within time period  =', ObsNo(num_file)
                0655         CALL PRINT_MESSAGE( msgbuf, iUnit, SQUEEZE_RIGHT, myThid )
                0656 
                0657 C===========================================================
                0658 C Second: loop through samples
                0659 C===========================================================
                0660         DO bj = 1, nSy
                0661          DO bi = 1, nSx
                0662 
                0663 C Main loop: look for valid samples (in tile)
                0664           err = NF_INQ_DIMID( fid,'iSAMPLE', dimid )
                0665 C If isample is not a dimension, use iobs for size of sampleno
                0666           IF (err.NE.NF_NOERR) THEN
                0667            sampleNo(num_file,bi,bj) = ObsNo(num_file)
                0668           ELSE
                0669            err = NF_INQ_DIMLEN( fid, dimid, sampleNo(num_file,bi,bj) )
                0670           ENDIF
                0671 
                0672           DO ip = 1, NSAMP_PER_TILE_MAX
                0673            sample_timeS(num_file,ip,bi,bj)  = -999. _d 0
                0674            sample_timeE(num_file,ip,bi,bj)  = -999. _d 0
                0675            sample_lon(num_file,ip,bi,bj)    = -999. _d 0
                0676            sample_lat(num_file,ip,bi,bj)    = -999. _d 0
                0677            sample_depth(num_file,ip,bi,bj)  = -999. _d 0
                0678            sample_weight(num_file,ip,bi,bj) = 1. _d 0
                0679            DO iq = 1, NUM_INTERP_PTS_OBS
                0680             sample_interp_i(num_file,ip,iq,bi,bj)    = 1
                0681             sample_interp_j(num_file,ip,iq,bi,bj)    = 1
                0682             sample_interp_k(num_file,ip,iq,bi,bj)    = 1
                0683             sample_interp_frac(num_file,ip,iq,bi,bj) = 0. _d 0
                0684            ENDDO
                0685            sample_interp_xC11(num_file,ip,bi,bj)   = -999. _d 0
                0686            sample_interp_yC11(num_file,ip,bi,bj)   = -999. _d 0
                0687            sample_interp_xCNINJ(num_file,ip,bi,bj) = -999. _d 0
                0688            sample_interp_yCNINJ(num_file,ip,bi,bj) = -999. _d 0
                0689           ENDDO
                0690 
                0691           sampleNo_tile = 0
                0692           Obsno_div1000 = MAX(0,INT(sampleNo(num_file,bi,bj)/1000))
                0693 
                0694           ntype_ssh = 0
                0695           ntype_other = 0
                0696 
                0697           DO chunkObs = 1, Obsno_div1000+1
                0698            chunk = 1000*(chunkObs-1)
                0699 
                0700            IF ( MIN(sampleNo(num_file,bi,bj), 1000*chunkObs).GE.
                0701      &          1+chunk ) THEN
                0702 
                0703 C Read a chunk
                0704             vec_start = 1+chunk
                0705             vec_count = MIN(1000,sampleNo(num_file,bi,bj)-chunk)
                0706 
                0707             IF ( (vec_count.LE.0).OR.(vec_count.GT.1000).OR.
                0708      &           (vec_start.LE.0).OR.
                0709      &           (vec_count+vec_start-1.GT.
                0710      &            sampleNo(num_file,bi,bj)) ) THEN
                0711              IL  = ILNBLNK( obsfitFile )
                0712              WRITE( msgBuf,'(3A)' )
                0713      &            'OBSFIT_INIT_FIXED: file ', obsfitFile(1:IL),
                0714      &            '.nc was not read properly (case 3).'
                0715              CALL PRINT_ERROR( msgBuf, myThid )
                0716              stopObsfit = 1
                0717             ENDIF
                0718 
                0719             err = NF_GET_VARA_INT( fid,varID2,vec_start,
                0720      &            vec_count, tmp_type2 )
                0721             err = NF_GET_VARA_DOUBLE( fid,varID3a,vec_start,
                0722      &            vec_count, tmp_lon2 )
                0723             err = NF_GET_VARA_DOUBLE( fid,varID3b,vec_start,
                0724      &            vec_count, tmp_lat2 )
                0725             err = NF_GET_VARA_DOUBLE( fid,varID4,vec_start,
                0726      &            vec_count, tmp_depth2 )
                0727             IF ( weighSamples.EQ.1 ) THEN
                0728              err = NF_GET_VARA_DOUBLE( fid,varID5,vec_start,
                0729      &             vec_count, tmp_weight2 )
                0730             ENDIF
                0731 
                0732 C If obsfitDoGenGrid then also read in the interpolation fractions
                0733 C and indices
                0734             IF ( obsfitDoGenGrid ) THEN
                0735              err = NF_GET_VARA_DOUBLE( fid,varID_intp1,vec_start,
                0736      &             vec_count, tmp_xC11 )
                0737              err = NF_GET_VARA_DOUBLE( fid,varID_intp2,vec_start,
                0738      &             vec_count, tmp_yC11 )
                0739              err = NF_GET_VARA_DOUBLE( fid,varID_intp11,vec_start,
                0740      &             vec_count, tmp_xCNINJ )
                0741              err = NF_GET_VARA_DOUBLE( fid,varID_intp22,vec_start,
                0742      &             vec_count, tmp_yCNINJ )
                0743              DO iq = 1, iINTERP
                0744               vec_start2(1) = iq
                0745               vec_start2(2) = 1+chunk
                0746               vec_count2(1) = 1
                0747               vec_count2(2) = min(1000,
                0748      &        sampleNo(num_file,bi,bj)-chunk)
                0749               err = NF_GET_VARA_DOUBLE( fid,varID_intp3,vec_start2,
                0750      &              vec_count2, tmp_frac(1,iq) )
                0751               err = NF_GET_VARA_DOUBLE( fid,varID_intp4,vec_start2,
                0752      &              vec_count2, tmp_i(1,iq) )
                0753               err = NF_GET_VARA_DOUBLE( fid,varID_intp5,vec_start2,
                0754      &              vec_count2, tmp_j(1,iq) )
                0755               err = NF_GET_VARA_DOUBLE( fid,varID_intp6,vec_start2,
                0756      &              vec_count2, tmp_k(1,iq) )
                0757              ENDDO
                0758             ENDIF
                0759 
                0760             IF ( err.NE.NF_NOERR ) THEN
                0761              WRITE( msgBuf,'(3A)' )
                0762      &            'OBSFIT_INIT_FIXED: file ', obsfitFile(1:IL),
                0763      &            '.nc was not read properly (case 4).'
                0764              CALL PRINT_ERROR( msgBuf, myThid )
                0765              stopObsfit = 1
                0766             ENDIF
                0767 
                0768 C Loop through this chunk
                0769             DO ic = 1, MIN(1000,sampleNo(num_file,bi,bj)-chunk)
                0770 
                0771              IF ( stopObsfit .EQ. 0) THEN
                0772 
                0773               sampleIsValid = 1
                0774               sampleIsInTile = 1
                0775 
                0776 C Check that sample time is valid
                0777               IF ( tmp_sample_time(ic+chunk).LT.0. _d 0 ) THEN
                0778                sampleIsValid = 0
                0779               ENDIF
                0780               IF ( (tmp_sample_time(ic+chunk).GT.modelend) .OR.
                0781      &             (tmp_sample_time(ic+chunk).LT.modelstart) ) THEN
                0782                sampleIsValid = 0
                0783               ENDIF
                0784 
                0785               type_cur = tmp_type2(ic)
                0786               lon_cur = tmp_lon2(ic)
                0787               lat_cur = tmp_lat2(ic)
                0788               depth_cur = tmp_depth2(ic)
                0789 
                0790 C Keep track of which variables in the file
                0791               IF ( type_cur.EQ.5 ) THEN
                0792                ntype_ssh = ntype_ssh+1
                0793               ELSE
                0794                ntype_other = ntype_other+1
                0795               ENDIF
                0796 
                0797 C Determine whether sample is in current tile domain
                0798 C Process only valid samples ( sampleIsValid.EQ.1 )
                0799 
                0800 C===========================================================
                0801 C lat-lon grid case
                0802 C===========================================================
                0803               IF ( (.NOT.obsfitDoGenGrid ).AND.
                0804      &             ( sampleIsValid.EQ.1 ) ) THEN
                0805                IF ( xC(sNx+1,1,bi,bj).LT.xC(1,1,bi,bj) ) THEN
                0806                 tmp_lon = xC(sNx+1,1,bi,bj)+360. _d 0
                0807                ELSE
                0808                 tmp_lon = xC(sNx+1,1,bi,bj)
                0809                ENDIF
                0810 
                0811                IF ( (xC(1,1,bi,bj).LE.lon_cur).AND.
                0812      &              (tmp_lon.GT.lon_cur).AND.
                0813      &              (yC(1,1,bi,bj).LE.lat_cur).AND.
                0814      &              (yC(1,sNy+1,bi,bj).GT.lat_cur) ) THEN
                0815 C Do nothing
                0816                ELSEIF ( (xC(sNx+1,1,bi,bj).LT.xC(1,1,bi,bj)).AND.
                0817      &                  (xC(1,1,bi,bj).LE.lon_cur+360. _d 0).AND.
                0818      &                  (tmp_lon.GT.lon_cur+360. _d 0).AND.
                0819      &                  (yC(1,1,bi,bj).LE.lat_cur).AND.
                0820      &                  (yC(1,sNy+1,bi,bj).GT.lat_cur) ) THEN
                0821                 lon_cur=lon_cur+360. _d 0
                0822                ELSE
                0823 C Not in this tile
                0824                 sampleIsInTile = 0
                0825                ENDIF
                0826 
                0827 C Now determine value of i,j,k south-west-down of data point
                0828                sample_i = -10
                0829                sample_j = -10
                0830                sample_k1 = -10
                0831                sample_k2 = -10
                0832                lon_1 = -10
                0833                lon_2 = -10
                0834                lat_1 = -10
                0835                lat_2 = -10
                0836                depth_1 = -10
                0837                depth_2 = -10
                0838 
                0839                IF ( sampleIsInTile.EQ.1 ) THEN
                0840 
                0841 C Value of k, below the data point:
                0842 C Case 1: above first depth level
                0843                 IF ( -rC(1).GT.depth_cur ) THEN
                0844                  sample_k1 = 1
                0845                  sample_k2 = 1
                0846                  depth_fac = 1. _d 0
                0847                 ENDIF
                0848 C Case 2: below last depth level
                0849                 IF ( -rC(Nr).LE.depth_cur ) THEN
                0850                  sample_k1 = Nr
                0851                  sample_k2 = Nr
                0852                  depth_fac = 1. _d 0
                0853                 ENDIF
                0854 C Case 3: between two depth levels
                0855                 DO kLev = 1, Nr-1
                0856                  IF ( (-rC(kLev).LE.depth_cur).AND.
                0857      &                (-rC(kLev+1).GT.depth_cur) ) THEN
                0858                   sample_k1 = kLev
                0859                   sample_k2 = kLev+1
                0860                   depth_1 = -rC(kLev)
                0861                   depth_2 = -rC(kLev+1)
                0862                   depth_fac = (depth_cur-depth_1)/(depth_2-depth_1)
                0863                  ENDIF
                0864                 ENDDO
                0865 
                0866                 DO j = 1, sNy+1
                0867                  DO i = 1, sNx+1
                0868 
                0869                   IF ( type_cur.EQ.3 ) THEN
                0870 C Zonal velocity
                0871                    lon_tmp1 = xG(i,j,bi,bj)
                0872                    lon_tmp2 = xG(i+1,j,bi,bj)
                0873                    lat_tmp1 = yC(i,j,bi,bj)
                0874                    lat_tmp2 = yC(i,j+1,bi,bj)
                0875                   ELSEIF ( type_cur.EQ.4 ) THEN
                0876 c Meridional velocity
                0877                    lon_tmp1 = xC(i,j,bi,bj)
                0878                    lon_tmp2 = xC(i+1,j,bi,bj)
                0879                    lat_tmp1 = yG(i,j,bi,bj)
                0880                    lat_tmp2 = yG(i,j+1,bi,bj)
                0881                   ELSE
                0882                    lon_tmp1 = xC(i,j,bi,bj)
                0883                    lon_tmp2 = xC(i+1,j,bi,bj)
                0884                    lat_tmp1 = yC(i,j,bi,bj)
                0885                    lat_tmp2 = yC(i,j+1,bi,bj)
                0886                   ENDIF
                0887 
                0888 C Value of j, south of the data point:
                0889                   IF ( (lat_tmp1.LE.lat_cur).AND.
                0890      &                 (lat_tmp2.GT.lat_cur) ) THEN
                0891                    sample_j = j
                0892                    lat_1 = lat_tmp1
                0893                    lat_2 = lat_tmp2
                0894                   ENDIF
                0895 
                0896 C Value of i, west of the data point:
                0897                   IF ( xC(i+1,j,bi,bj).LT.xC(1,j,bi,bj) ) THEN
                0898                    lon_tmp2 = lon_tmp2+360
                0899                   ENDIF
                0900                   IF ( xC(i,j,bi,bj).LT.xC(1,j,bi,bj) ) THEN
                0901                    lon_tmp1 = lon_tmp1+360
                0902                   ENDIF
                0903                   IF ( (lon_tmp1.LE.lon_cur).AND.
                0904      &                 (lon_tmp2.GT.lon_cur) ) THEN
                0905                    sample_i = i
                0906                    lon_1 = lon_tmp1
                0907                    lon_2 = lon_tmp2
                0908                   ENDIF
                0909 
                0910                  ENDDO !i
                0911                 ENDDO !j
                0912                ENDIF !sampleIsInTile
                0913 
                0914                IF ( (sample_i.EQ.-10).OR.(sample_j.EQ.-10) ) THEN
                0915                 sampleIsInTile = 0
                0916                ENDIF
                0917                IF ( (sample_k1.EQ.-10).OR.(sample_k2.EQ.-10) ) THEN
                0918                 sampleIsInTile = 0
                0919                ENDIF
                0920 
                0921                IF ( sampleIsInTile.EQ.1 ) THEN
                0922 C If yes then store sample index position and number of samples:
                0923                 sampleNo_tile = sampleNo_tile+1
                0924                 sample_ind_glob(num_file,sampleNo_tile,bi,bj)
                0925      &           = ic+chunk
                0926                 sample_timeS(num_file,sampleNo_tile,bi,bj)=
                0927      &           tmp_sample_time(ic+chunk)
                0928 C "-1" to avoid counting in an extra time step
                0929 C when time averaging
                0930                 IF ( obsfitOperation(num_file).eq.0 ) THEN
                0931                  sample_timeE(num_file,sampleNo_tile,bi,bj)=
                0932      &            sample_timeS(num_file,sampleNo_tile,bi,bj)
                0933      &            +tmp_sample_delT(ic+chunk)
                0934                 ELSE
                0935                  sample_timeE(num_file,sampleNo_tile,bi,bj)=
                0936      &            sample_timeS(num_file,sampleNo_tile,bi,bj)
                0937      &            +tmp_sample_delT(ic+chunk)-1
                0938                 ENDIF
                0939                 sample_lon(num_file,sampleNo_tile,bi,bj)=lon_cur
                0940                 sample_lat(num_file,sampleNo_tile,bi,bj)=lat_cur
                0941                 sample_depth(num_file,sampleNo_tile,bi,bj)=depth_cur
                0942                 IF ( weighSamples.EQ.1 ) THEN
                0943                  sample_weight(num_file,sampleNo_tile,bi,bj)=
                0944      &            tmp_weight2(ic)
                0945                 ENDIF
                0946                 sample_type(num_file,sampleNo_tile,bi,bj)=type_cur
                0947 
                0948 C Store interpolation fractions and indices
                0949                 lon_fac = (lon_cur-lon_1)/(lon_2-lon_1)
                0950                 lat_fac = (lat_cur-lat_1)/(lat_2-lat_1)
                0951 
                0952                 w(1)=(1-lon_fac)*(1-lat_fac)*(1-depth_fac)
                0953                 sample_interp_i(num_file,sampleNo_tile,1,bi,bj)
                0954      &           =sample_i
                0955                 sample_interp_j(num_file,sampleNo_tile,1,bi,bj)
                0956      &           =sample_j
                0957                 sample_interp_k(num_file,sampleNo_tile,1,bi,bj)
                0958      &           =sample_k1
                0959                 w(2)=lon_fac*(1-lat_fac)*(1-depth_fac)
                0960                 sample_interp_i(num_file,sampleNo_tile,2,bi,bj)
                0961      &           =sample_i+1
                0962                 sample_interp_j(num_file,sampleNo_tile,2,bi,bj)
                0963      &           =sample_j
                0964                 sample_interp_k(num_file,sampleNo_tile,2,bi,bj)
                0965      &           =sample_k1
                0966                 w(3)=(1-lon_fac)*lat_fac*(1-depth_fac)
                0967                 sample_interp_i(num_file,sampleNo_tile,3,bi,bj)
                0968      &           =sample_i
                0969                 sample_interp_j(num_file,sampleNo_tile,3,bi,bj)
                0970      &           =sample_j+1
                0971                 sample_interp_k(num_file,sampleNo_tile,3,bi,bj)
                0972      &           =sample_k1
                0973                 w(4)=lon_fac*lat_fac*(1-depth_fac)
                0974                 sample_interp_i(num_file,sampleNo_tile,4,bi,bj)
                0975      &           =sample_i+1
                0976                 sample_interp_j(num_file,sampleNo_tile,4,bi,bj)
                0977      &           =sample_j+1
                0978                 sample_interp_k(num_file,sampleNo_tile,4,bi,bj)
                0979      &           =sample_k1
                0980                 w(5)=(1-lon_fac)*(1-lat_fac)*depth_fac
                0981                 sample_interp_i(num_file,sampleNo_tile,5,bi,bj)
                0982      &           =sample_i
                0983                 sample_interp_j(num_file,sampleNo_tile,5,bi,bj)
                0984      &           =sample_j
                0985                 sample_interp_k(num_file,sampleNo_tile,5,bi,bj)
                0986      &           =sample_k2
                0987                 w(6)=lon_fac*(1-lat_fac)*depth_fac
                0988                 sample_interp_i(num_file,sampleNo_tile,6,bi,bj)
                0989      &           =sample_i+1
                0990                 sample_interp_j(num_file,sampleNo_tile,6,bi,bj)
                0991      &           =sample_j
                0992                 sample_interp_k(num_file,sampleNo_tile,6,bi,bj)
                0993      &           =sample_k2
                0994                 w(7)=(1-lon_fac)*lat_fac*depth_fac
                0995                 sample_interp_i(num_file,sampleNo_tile,7,bi,bj)
                0996      &           =sample_i
                0997                 sample_interp_j(num_file,sampleNo_tile,7,bi,bj)
                0998      &           =sample_j+1
                0999                 sample_interp_k(num_file,sampleNo_tile,7,bi,bj)
                1000      &           =sample_k2
                1001                 w(8)=lon_fac*lat_fac*depth_fac
                1002                 sample_interp_i(num_file,sampleNo_tile,8,bi,bj)
                1003      &           =sample_i+1
                1004                 sample_interp_j(num_file,sampleNo_tile,8,bi,bj)
                1005      &           =sample_j+1
                1006                 sample_interp_k(num_file,sampleNo_tile,8,bi,bj)
                1007      &           =sample_k2
                1008 
                1009 C Ignore points that are not "wet"
                1010                 IF ( type_cur.EQ.3 ) THEN
                1011 c Zonal velocity
                1012                  mask(1)=maskW(sample_i,sample_j,sample_k1,bi,bj)
                1013                  mask(2)=maskW(sample_i+1,sample_j,sample_k1,bi,bj)
                1014                  mask(3)=maskW(sample_i,sample_j+1,sample_k1,bi,bj)
                1015                  mask(4)=maskW(sample_i+1,sample_j+1,sample_k1,bi,bj)
                1016                  mask(5)=maskW(sample_i,sample_j,sample_k2,bi,bj)
                1017                  mask(6)=maskW(sample_i+1,sample_j,sample_k2,bi,bj)
                1018                  mask(7)=maskW(sample_i,sample_j+1,sample_k2,bi,bj)
                1019                  mask(8)=maskW(sample_i+1,sample_j+1,sample_k2,bi,bj)
                1020                 ELSEIF ( type_cur.EQ.4 ) THEN
                1021 c Meridional velocity
                1022                  mask(1)=maskS(sample_i,sample_j,sample_k1,bi,bj)
                1023                  mask(2)=maskS(sample_i+1,sample_j,sample_k1,bi,bj)
                1024                  mask(3)=maskS(sample_i,sample_j+1,sample_k1,bi,bj)
                1025                  mask(4)=maskS(sample_i+1,sample_j+1,sample_k1,bi,bj)
                1026                  mask(5)=maskS(sample_i,sample_j,sample_k2,bi,bj)
                1027                  mask(6)=maskS(sample_i+1,sample_j,sample_k2,bi,bj)
                1028                  mask(7)=maskS(sample_i,sample_j+1,sample_k2,bi,bj)
                1029                  mask(8)=maskS(sample_i+1,sample_j+1,sample_k2,bi,bj)
                1030                 ELSE
                1031                  mask(1)=maskC(sample_i,sample_j,sample_k1,bi,bj)
                1032                  mask(2)=maskC(sample_i+1,sample_j,sample_k1,bi,bj)
                1033                  mask(3)=maskC(sample_i,sample_j+1,sample_k1,bi,bj)
                1034                  mask(4)=maskC(sample_i+1,sample_j+1,sample_k1,bi,bj)
                1035                  mask(5)=maskC(sample_i,sample_j,sample_k2,bi,bj)
                1036                  mask(6)=maskC(sample_i+1,sample_j,sample_k2,bi,bj)
                1037                  mask(7)=maskC(sample_i,sample_j+1,sample_k2,bi,bj)
                1038                  mask(8)=maskC(sample_i+1,sample_j+1,sample_k2,bi,bj)
                1039                 ENDIF !type_cur
                1040 
                1041                 wtot = 0
                1042                 DO iq = 1, NUM_INTERP_PTS_OBS
                1043                  IF (mask(iq).EQ.0) w(iq)=0
                1044                  wtot = wtot+w(iq)
                1045                 ENDDO
                1046                 DO iq = 1, NUM_INTERP_PTS_OBS
                1047                  sample_interp_frac(num_file,sampleNo_tile,iq,bi,bj) =
                1048      &            w(iq)/(wtot+1. _d -10)
                1049                 ENDDO
                1050 
                1051                ENDIF !sampleIsInTile
                1052 
                1053 C===========================================================
                1054 C Generic grid case
                1055 C===========================================================
                1056 C Determine whether sample is in current tile domain
                1057               ELSEIF ( sampleIsValid.EQ.1 ) THEN
                1058 
                1059                IF ( stopGenericGrid.EQ.0 ) THEN
                1060 
                1061                 IF ( (abs(tmp_xC11(ic) - xC(1,1,bi,bj))
                1062      &               .LT.0.0001 _d 0 ).AND.
                1063      &               (abs(tmp_yC11(ic) - yC(1,1,bi,bj))
                1064      &               .LT.0.0001 _d 0).AND.
                1065      &               (abs(tmp_xCNINJ(ic) - xC(sNx,sNy,bi,bj))
                1066      &               .LT.0.0001 _d 0).AND.
                1067      &               (abs(tmp_yCNINJ(ic) - yC(sNx,sNy,bi,bj))
                1068      &               .LT.0.0001 _d 0) ) THEN
                1069 C Do nothing
                1070                 ELSE
                1071                  sampleIsInTile = 0
                1072                 ENDIF
                1073 
                1074                 IF ( sampleIsInTile.EQ.1 ) THEN
                1075 C If yes then store sample_time and interpolation fractions and indices:
                1076                  sampleNo_tile = sampleNo_tile+1
                1077                  sample_type(num_file,sampleNo_tile,bi,bj)=type_cur
                1078                  sample_timeS(num_file,sampleNo_tile,bi,bj)=
                1079      &            tmp_sample_time(ic+chunk)
                1080 C "-1" to avoid counting in an extra time step
                1081 C when time averaging
                1082                  IF ( obsfitOperation(num_file).EQ.0 ) THEN
                1083                   sample_timeE(num_file,sampleNo_tile,bi,bj)=
                1084      &             sample_timeS(num_file,sampleNo_tile,bi,bj)
                1085      &             +tmp_sample_delT(ic+chunk)
                1086                  ELSE
                1087                   sample_timeE(num_file,sampleNo_tile,bi,bj)=
                1088      &             sample_timeS(num_file,sampleNo_tile,bi,bj)
                1089      &             +tmp_sample_delT(ic+chunk)-1
                1090                  ENDIF
                1091                  IF ( weighSamples.EQ.1 ) THEN
                1092                   sample_weight(num_file,sampleNo_tile,bi,bj)=
                1093      &             tmp_weight2(ic)
                1094                  ENDIF
                1095                  sample_interp_xC11(num_file,sampleNo_tile,
                1096      &            bi,bj)=tmp_xC11(ic)
                1097                  sample_interp_yC11(num_file,sampleNo_tile,
                1098      &            bi,bj)=tmp_yC11(ic)
                1099                  sample_interp_xCNINJ(num_file,sampleNo_tile,
                1100      &            bi,bj)=tmp_xCNINJ(ic)
                1101                  sample_interp_yCNINJ(num_file,sampleNo_tile,
                1102      &            bi,bj)=tmp_yCNINJ(ic)
                1103                  tmp_sum_fracs = 0. _d 0
                1104 
                1105 C Loop over interpolation points
                1106                  DO iq = 1, iINTERP
                1107                   sample_interp_frac(num_file,sampleNo_tile,iq,
                1108      &             bi,bj)=tmp_frac(ic,iq)
                1109                   sample_interp_i(num_file,sampleNo_tile,iq,
                1110      &             bi,bj)=tmp_i(ic,iq)
                1111                   sample_interp_j(num_file,sampleNo_tile,iq,
                1112      &             bi,bj)=tmp_j(ic,iq)
                1113                   sample_interp_k(num_file,sampleNo_tile,iq,
                1114      &             bi,bj)=tmp_k(ic,iq)
                1115                   tmp_sum_fracs = tmp_sum_fracs+tmp_frac(ic,iq)
                1116 
                1117 C More test of the inputs: is the offline-computed
                1118 C interpolation information consistent (self and with grid)
                1119                   IF ( (tmp_i(ic,iq).LT.0).OR.
                1120      &                 (tmp_j(ic,iq).LT.0).OR.
                1121      &                 (tmp_i(ic,iq).GT.sNx+1).OR.
                1122      &                 (tmp_j(ic,iq).GT.sNy+1) ) THEN
                1123                    WRITE( msgBuf,'(4A)' )
                1124      &                  'OBSFIT_INIT_FIXED: file ',
                1125      &                  obsfitFile(1:IL),
                1126      &                  '.nc includes inconsistent interpolation ',
                1127      &                  ' points (obsfitDoGenGrid; out of tile)'
                1128                    CALL PRINT_ERROR( msgBuf, myThid )
                1129                     stopGenericGrid = 1
                1130                   ENDIF
                1131 #ifdef ALLOW_OBSFIT_EXCLUDE_CORNERS
                1132                   IF ( tmp_frac(ic,iq) .NE. 0. _d 0) THEN
                1133                    IF ( ((tmp_i(ic,iq).EQ.0) .AND.
                1134      &                   (tmp_j(ic,iq).EQ.0)) .OR.
                1135      &                  ((tmp_i(ic,iq).EQ.sNx+1) .AND.
                1136      &                   (tmp_j(ic,iq).EQ.sNy+1)) .OR.
                1137      &                  ((tmp_i(ic,iq).EQ.0) .AND.
                1138      &                   (tmp_j(ic,iq).EQ.sNy+1)) .OR.
                1139      &                  ((tmp_i(ic,iq).EQ.sNx+1) .AND.
                1140      &                   (tmp_j(ic,iq).EQ.0)) ) THEN
                1141                     WRITE( msgBuf,'(4A)' )
                1142      &                   'OBSFIT_INIT_FIXED: file ',
                1143      &                   obsfitFile(1:IL),
                1144      &                   '.nc includes inconsistent interpolation ',
                1145      &                   ' points (obsfitDoGenGrid; overlap corners)'
                1146                     CALL PRINT_ERROR( msgBuf, myThid )
                1147                      stopGenericGrid = 1
                1148                    ENDIF
                1149                   ENDIF
                1150 #endif /* ALLOW_OBSFIT_EXCLUDE_CORNERS */
                1151                   IF ( (tmp_frac(ic,iq).LT.0. _d 0).OR.
                1152      &                 (tmp_frac(ic,iq).GT.1. _d 0) ) THEN
                1153                    WRITE( msgBuf,'(4A)' )
                1154      &                  'OBSFIT_INIT_FIXED: file ',
                1155      &                   obsfitFile(1:IL),
                1156      &                   '.nc includes inconsistent interpolation ',
                1157      &                   ' points (obsfitDoGenGrid; sum not 0-1)'
                1158                    CALL PRINT_ERROR( msgBuf, myThid )
                1159                    stopGenericGrid = 1
                1160                   ENDIF
                1161                  ENDDO! iq
                1162 
                1163                  IF ( abs(tmp_sum_fracs -1. _d 0 ) .GT.
                1164      &                0.0001 _d 0) THEN
                1165                   WRITE( msgBuf,'(4A)' )
                1166      &                 'OBSFIT_INIT_FIXED: file ',
                1167      &                 obsfitFile(1:IL),
                1168      &                 '.nc includes inconsistent interpolation ',
                1169      &                 ' weights (obsfitDoGenGrid; sum not 1)'
                1170                   CALL PRINT_ERROR( msgBuf, myThid )
                1171                   stopGenericGrid = 1
                1172                  ENDIF
                1173 
                1174                  sample_ind_glob(num_file,sampleNo_tile,bi,bj)
                1175      &            =ic+chunk
                1176 
                1177                 ENDIF !sampleIsInTile
                1178                ENDIF !stopGenericGrid
                1179               ENDIF !obsfitDoGenGrid)
                1180 
                1181 C ==============================================================================
                1182 
                1183 C Check that maximum size was not reached:
                1184               IF ( sampleNo_tile.GT.NSAMP_PER_TILE_MAX ) THEN
                1185                WRITE( msgBuf,'(3A)' )
                1186      &              'OBSFIT_INIT_FIXED: file ', obsfitFile(1:IL),
                1187      &              '.nc was not read properly ',
                1188      &              '(increase NSAMP_PER_TILE_MAX).'
                1189                CALL PRINT_ERROR( msgBuf, myThid )
                1190                stopObsfit = 1
                1191               ENDIF
                1192 
                1193              ENDIF !stopObsfit
                1194             ENDDO !ic
                1195            ENDIF !chunk
                1196           ENDDO !chunkObs
                1197 
                1198 C Number of valid samples in the file
                1199           sampleNo(num_file,bi,bj) = sampleNo_tile
                1200 
                1201           WRITE( msgbuf,'(A,I4,A,I4)' )
                1202      &         '  current tile is bi,bj                      =',
                1203      &         bi,',',bj
                1204           CALL PRINT_MESSAGE(
                1205      &         msgbuf, iUnit, SQUEEZE_RIGHT, myThid )
                1206 
                1207           WRITE( msgbuf,'(A,I9)' )
                1208      &         '  # of samples within tile and time period  =',
                1209      &         sampleNo(num_file,bi,bj)
                1210           CALL PRINT_MESSAGE(
                1211      &         msgbuf, iUnit, SQUEEZE_RIGHT, myThid )
                1212 
                1213           IF ( ntype_ssh.GT.0 ) THEN
                1214            IF ( ntype_other.GT.0 ) THEN
                1215             WRITE( msgBuf,'(4A)' )
                1216      &           'OBSFIT_INIT_FIXED: file ', obsfitFile(1:IL),
                1217      &           'includes both SSH and non-SSH observations; ',
                1218      &           'this is not currently supported.'
                1219             CALL PRINT_ERROR( msgBuf, myThid )
                1220             stopObsfit = 1
                1221            ELSE
                1222             obs_is_ssh_loc = obs_is_ssh_loc+1
                1223            ENDIF
                1224           ENDIF
                1225 
                1226 C===========================================================
                1227 C Create files for model counterparts to samples
                1228 C===========================================================
                1229 
                1230           IF ( sampleNo(num_file,bi,bj).GT.0 ) THEN
                1231            iG=bi+(myXGlobalLo-1)/sNx ! Kludge until unstructered tiles
                1232            jG=bj+(myYGlobalLo-1)/sNy ! Kludge until unstructered tiles
                1233 
                1234            JL  = ILNBLNK( obsfitDir )
                1235 
                1236            IF ( obsfitDoNcOutput ) THEN
                1237 
                1238             WRITE( obsfnameequinc,'(3A,I3.3,A,I3.3,A)' )
                1239      &           obsfitDir(1:JL),obsfitFile(1:IL),
                1240      &           '.',iG,'.',jG,'.equi.nc'
                1241 #ifdef ALLOW_ADJOINT_RUN
                1242             WRITE( adobsfnameequinc,'(4A,I3.3,A,I3.3,A)' )
                1243      &           obsfitDir(1:JL),'ad',obsfitFile(1:IL),
                1244      &           '.',iG,'.',jG,'.equi.nc'
                1245 #endif
                1246 #ifdef ALLOW_TANGENTLINEAR_RUN
                1247             WRITE( tlobsfnameequinc,'(4A,I3.3,A,I3.3,A)' )
                1248      &           obsfitDir(1:JL),'tl',obsfitFile(1:IL),
                1249      &           '.',iG,'.',jG,'.equi.nc'
                1250 #endif
                1251             INQUIRE( file=obsfnameequinc, exist=exst )
                1252             IF (.NOT.exst) THEN
                1253              CALL OBSFIT_INIT_EQUIFILES( num_file,
                1254      &            fiddata_obs(num_file),obsfnameequinc,
                1255      &            fidfwd_obs(num_file,bi,bj),
                1256      &            sampleNo(num_file,bi,bj),bi,bj,myThid )
                1257              ELSE
                1258               err = NF_OPEN( obsfnameequinc,NF_WRITE,
                1259      &              fidfwd_obs(num_file,bi,bj) )
                1260              ENDIF
                1261 #ifdef ALLOW_ADJOINT_RUN
                1262              INQUIRE( file=adobsfnameequinc, exist=exst )
                1263              IF (.NOT.exst) THEN
                1264               CALL OBSFIT_INIT_EQUIFILES( num_file,
                1265      &             fiddata_obs(num_file),adobsfnameequinc,
                1266      &             fidadj_obs(num_file,bi,bj),
                1267      &             sampleNo(num_file,bi,bj),bi,bj,myThid )
                1268              ELSE
                1269               err = NF_OPEN( adobsfnameequinc,NF_WRITE,
                1270      &              fidadj_obs(num_file,bi,bj) )
                1271              ENDIF
                1272 #endif
                1273 #ifdef ALLOW_TANGENTLINEAR_RUN
                1274              INQUIRE( file=tlobsfnameequinc, exist=exst )
                1275              IF (.NOT.exst) THEN
                1276               CALL OBSFIT_INIT_EQUIFILES( num_file,
                1277      &             fiddata_obs(num_file),tlobsfnameequinc,
                1278      &             fidtan_obs(num_file,bi,bj),
                1279      &             sampleNo(num_file,bi,bj),bi,bj,myThid )
                1280              ELSE
                1281               err = NF_OPEN( tlobsfnameequinc,NF_WRITE,
                1282      &              fidtan_obs(num_file,bi,bj) )
                1283              ENDIF
                1284 #endif
                1285             ELSE !obsfitDoNcOutput
                1286 
                1287              WRITE( obsfnameequinc,'(3A,I3.3,A,I3.3,A)' )
                1288      &            obsfitDir(1:JL),obsfitFile(1:IL),'.',iG,'.',jG,
                1289      &            '.equi.data'
                1290 #ifdef ALLOW_ADJOINT_RUN
                1291              WRITE( adobsfnameequinc,'(4A,I3.3,A,I3.3,A)' )
                1292      &            obsfitDir(1:JL),'ad',
                1293      &            obsfitFile(1:IL),'.',iG,'.',jG,'.equi.data'
                1294 #endif
                1295 #ifdef ALLOW_TANGENTLINEAR_RUN
                1296              WRITE( tlobsfnameequinc,'(4A,I3.3,A,I3.3,A)' )
                1297      &            obsfitDir(1:JL),'tl',
                1298      &            obsfitFile(1:IL),'.',iG,'.',jG,'.equi.data'
                1299 #endif
                1300 
                1301              INQUIRE( file=obsfnameequinc, exist=exst )
                1302 #ifdef OBSFIT_USE_MDSFINDUNITS
                1303              CALL MDSFINDUNIT( fidfwd_obs(num_file,bi,bj), myThid )
                1304 #else
                1305              CALL OBSFIT_FINDUNIT( fidfwd_obs(num_file,bi,bj),
                1306      &            myThid )
                1307 #endif
                1308              IF (.NOT.exst) THEN
                1309               CALL OBSFIT_INIT_EQUIFILES( num_file,
                1310      &             fiddata_obs(num_file),obsfnameequinc,
                1311      &             fidfwd_obs(num_file,bi,bj),
                1312      &             sampleNo(num_file,bi,bj),bi,bj,myThid )
                1313              ELSE
                1314               OPEN( fidfwd_obs(num_file,bi,bj),
                1315      &              file=obsfnameequinc,form ='unformatted',
                1316      &              status='unknown',access='direct',
                1317      &              recl=2*WORDLENGTH*2 )
                1318              ENDIF
                1319 #ifdef ALLOW_ADJOINT_RUN
                1320              INQUIRE( file=adobsfnameequinc, exist=exst )
                1321 #ifdef OBSFIT_USE_MDSFINDUNITS
                1322              CALL MDSFINDUNIT( fidadj_obs(num_file,bi,bj), myThid )
                1323 #else
                1324              CALL OBSFIT_FINDUNIT( fidadj_obs(num_file,bi,bj),
                1325      &            myThid )
                1326 #endif
                1327              IF (.NOT.exst) THEN
                1328               CALL OBSFIT_INIT_EQUIFILES( num_file,
                1329      &             fiddata_obs(num_file),adobsfnameequinc,
                1330      &             fidadj_obs(num_file,bi,bj),
                1331      &             sampleNo(num_file,bi,bj),bi,bj,myThid )
                1332              ELSE
                1333               OPEN( fidadj_obs(num_file,bi,bj),
                1334      &              file=adobsfnameequinc,form ='unformatted',
                1335      &              status='unknown', access='direct',
                1336      &              recl=2*WORDLENGTH*2 )
                1337              ENDIF
                1338 #endif
                1339 #ifdef ALLOW_TANGENTLINEAR_RUN
                1340              INQUIRE( file=tlobsfnameequinc, exist=exst )
                1341 #ifdef OBSFIT_USE_MDSFINDUNITS
                1342              CALL MDSFINDUNIT( fidtan_obs(num_file,bi,bj), myThid )
                1343 #else
                1344              CALL OBSFIT_FINDUNIT( fidtan_obs(num_file,bi,bj),
                1345      &            myThid )
                1346 #endif
                1347              IF (.NOT.exst) THEN
                1348               CALL OBSFIT_INIT_EQUIFILES( num_file,
                1349      &             fiddata_obs(num_file),tlobsfnameequinc,
                1350      &             fidtan_obs(num_file,bi,bj),
                1351      &             sampleNo(num_file,bi,bj),bi,bj,myThid )
                1352               ELSE
                1353                OPEN( fidtan_obs(num_file,bi,bj),file=
                1354      &               tlobsfnameequinc,form ='unformatted',
                1355      &               status='unknown', access='direct',
                1356      &               recl=2*WORDLENGTH*2 )
                1357             ENDIF
                1358 #endif
                1359 
                1360            ENDIF !ObsfitDoNcOutput
                1361           ENDIF !sampleNo
                1362          ENDDO !bj
                1363         ENDDO !bi
                1364 
                1365         CALL GLOBAL_SUM_INT(obs_is_ssh_loc, myThid)
                1366         obs_is_ssh(num_file)=obs_is_ssh_loc
                1367 
                1368 C===========================================================
                1369 
                1370        ELSE !if (IL.NE.0)
                1371 
                1372         DO bj = 1, nSy
                1373          DO bi = 1, nSx
                1374           ObsNo(num_file) = 0
                1375           sampleNo(num_file,bi,bj) = 0
                1376           DO ip = 1, NOBSMAX_OBS
                1377            obs_np(num_file,ip) = -999. _d 0
                1378           ENDDO
                1379           DO ip = 1, NSAMP_PER_TILE_MAX
                1380            sample_timeS(num_file,ip,bi,bj)    = -999. _d 0
                1381            sample_timeE(num_file,ip,bi,bj)    = -999. _d 0
                1382            sample_lon(num_file,ip,bi,bj)      = -999. _d 0
                1383            sample_lat(num_file,ip,bi,bj)      = -999. _d 0
                1384            sample_depth(num_file,ip,bi,bj)    = -999. _d 0
                1385            sample_ind_glob(num_file,ip,bi,bj) = 0
                1386            DO iq = 1,NUM_INTERP_PTS_OBS
                1387             sample_interp_i(num_file,ip,iq,bi,bj)    = 1
                1388             sample_interp_j(num_file,ip,iq,bi,bj)    = 1
                1389             sample_interp_k(num_file,ip,iq,bi,bj)    = 1
                1390             sample_interp_frac(num_file,ip,iq,bi,bj) = 0. _d 0
                1391            ENDDO
                1392            sample_interp_xC11(num_file,ip,bi,bj)   = -999. _d 0
                1393            sample_interp_yC11(num_file,ip,bi,bj)   = -999. _d 0
                1394            sample_interp_xCNINJ(num_file,ip,bi,bj) = -999. _d 0
                1395            sample_interp_yCNINJ(num_file,ip,bi,bj) = -999. _d 0
                1396           ENDDO
                1397          ENDDO !bi
                1398         ENDDO !bj
                1399 
                1400        ENDIF !if (IL.NE.0)
                1401       ENDDO !num_file
                1402 
                1403 C===========================================================
                1404 C error cases:
                1405 C===========================================================
                1406 
                1407 c1) you want to provide interpolation information
                1408 
                1409 C For generic grid. Needs to go inside bi,bj loop
                1410       IF ( stopGenericGrid.EQ.2 ) THEN
                1411 c         iG=bi+(myXGlobalLo-1)/sNx ! Kludge until unstructered tiles
                1412 c         jG=bj+(myYGlobalLo-1)/sNy ! Kludge until unstructered tiles
                1413 ccgf XC grid
                1414 c       CALL MDSFINDUNIT( fid , myThid )
                1415 c       WRITE(obsfnameequinc(1:80),'(a,i3.3,a,i3.3,a,i4.4,a,i4.4,a)')
                1416 c     & 'profilesXCincl1PointOverlap.',iG,'.',jG,'.',sNx,'.',sNy,'.data'
                1417 c         k=MDS_RECLEN(64,(sNx+2)*(sNy+2),myThid)
                1418 c            WRITE(standardMessageUnit,'(A,/,2A)')
                1419 c     & 'OBSFIT_INIT_FIXED: creating grid from profiles; file:',
                1420 c     & obsfnameequinc
                1421 c       OPEN( fid, file= obsfnameequinc, form ='unformatted',
                1422 c     &      status='unknown',access='direct', recl= k)
                1423 c        DO m=0,sNy+1
                1424 c         DO l=0,sNx+1
                1425 c          xy_buffer_r8(l,m)=xC(l,m,bi,bj)
                1426 c         ENDDO
                1427 c        ENDDO
                1428 c#ifdef _BYTESWAPIO
                1429 c            CALL MDS_BYTESWAPR8((sNx+2)*(sNy+2),xy_buffer_r8)
                1430 c#endif
                1431 c       WRITE(fid,rec=1) xy_buffer_r8
                1432 c       close(fid)
                1433 ccgf YC grid
                1434 c       CALL MDSFINDUNIT( fid , myThid )
                1435 c       WRITE(obsfnameequinc(1:80),'(a,i3.3,a,i3.3,a,i4.4,a,i4.4,a)')
                1436 c     & 'profilesYCincl1PointOverlap.',iG,'.',jG,'.',sNx,'.',sNy,'.data'
                1437 c         k=MDS_RECLEN(64,(sNx+2)*(sNy+2),myThid)
                1438 c            WRITE(standardMessageUnit,'(A,/,A)')
                1439 c     & 'OBSFIT_INIT_FIXED: creating grid from profiles; file:',
                1440 c     & obsfnameequinc
                1441 c       OPEN( fid, file= obsfnameequinc, form ='unformatted',
                1442 c     & status='unknown', access='direct', recl= k)
                1443 c        DO m=0,sNy+1
                1444 c         DO l=0,sNx+1
                1445 c                xy_buffer_r8(l,m)=yC(l,m,bi,bj)
                1446 c         ENDDO
                1447 c        ENDDO
                1448 c#ifdef _BYTESWAPIO
                1449 c            CALL MDS_BYTESWAPR8((sNx+2)*(sNy+2),xy_buffer_r8)
                1450 c#endif
                1451 c       WRITE(fid,rec=1) xy_buffer_r8
                1452 c       close(fid)
                1453 
                1454        WRITE( msgBuf,'(3A)' )
                1455      &      'OBSFIT_INIT_FIXED : ',
                1456      &      'when using obsfitDoGenGrid ',
                1457      &      'you have to provide interpolation fractions etc. '
                1458        CALL PRINT_ERROR( msgBuf, myThid )
                1459        WRITE( msgBuf,'(2A)' )
                1460      &      'and some of your nc files dont have them. ',
                1461      &      'You could use profiles_prep_mygrid.m and/or'
                1462        CALL PRINT_ERROR( msgBuf, myThid )
                1463        WRITE( msgBuf,'(A)' )
                1464      &      'use the grid info in profiles*incl1PointOverlap*data'
                1465        CALL PRINT_ERROR( msgBuf, myThid )
                1466        stopObsfit=1
                1467 
                1468       ENDIF
                1469 
                1470       _END_MASTER( myThid )
                1471       _BARRIER
                1472 
                1473 c2) stop after other kind of errors
                1474       CALL GLOBAL_SUM_INT( stopObsfit , myThid )
                1475       IF ( stopObsfit.GE.1) THEN
                1476        CALL ALL_PROC_DIE( myThid )
                1477        STOP 'ABNORMAL END: S/R OBSFIT_INIT_FIXED'
                1478       ENDIF
                1479 
                1480       CALL GLOBAL_SUM_INT( stopGenericGrid , myThid )
                1481       IF ( stopGenericGrid.GE.1) THEN
                1482        CALL ALL_PROC_DIE( myThid )
                1483        STOP 'ABNORMAL END: S/R OBSFIT_INIT_FIXED'
                1484       ENDIF
                1485 
                1486       WRITE(msgbuf,'(A)') ' '
                1487       CALL PRINT_MESSAGE( msgbuf, iUnit, SQUEEZE_RIGHT, myThid )
                1488       WRITE( msgbuf,'(A)' )
                1489      &'// ======================================================='
                1490       CALL PRINT_MESSAGE( msgbuf, iUnit, SQUEEZE_RIGHT, myThid )
                1491 
                1492       WRITE( msgbuf,'(A)' )
                1493      &'// obsfit model sampling >>> END <<<'
                1494       CALL PRINT_MESSAGE( msgbuf, iUnit, SQUEEZE_RIGHT, myThid )
                1495 
                1496       WRITE( msgbuf,'(A)' )
                1497      &'// ======================================================='
                1498       CALL PRINT_MESSAGE( msgbuf, iUnit, SQUEEZE_RIGHT, myThid )
                1499 
                1500       WRITE( msgbuf,'(A)' ) ' '
                1501       CALL PRINT_MESSAGE( msgbuf, iUnit, SQUEEZE_RIGHT, myThid )
                1502 
                1503 #endif
                1504 
                1505       RETURN
                1506       END
                1507 
                1508 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|