File indexing completed on 2025-12-17 06:09:02 UTC
view on githubraw file Latest commit 033a68c0 on 2025-12-16 22:15:39 UTC
ad59256d7d aver*0001 #include "OBSFIT_OPTIONS.h"
0002
0003
0004
0005
0006
0007 SUBROUTINE OBSFIT_READ_OBS(
0008 I fNb,
0009 I vNb,
0010 I irec,
0011 O vec_loc,
0012 I myThid )
0013
0014
0015
0016
0017
0018
0019
0020
0021 IMPLICIT NONE
0022
0023 #include "SIZE.h"
0024 #include "EEPARAMS.h"
0025 #include "PARAMS.h"
0026 #include "GRID.h"
0027 #include "DYNVARS.h"
0028 #ifdef ALLOW_OBSFIT
0029 # include "netcdf.inc"
0030 # include "OBSFIT_SIZE.h"
0031 # include "OBSFIT.h"
0032 #endif
0033
0034
0035
0036
0037
0038
0039 INTEGER fNb, vNb
0040 INTEGER irec, myThid
0041 _RL vec_loc
0042
0043
0044 #ifdef ALLOW_OBSFIT
0045
0046
0047 INTEGER vv, err, varID, tmpObsNo
0048 INTEGER vec_start,vec_count
0049 _RL vec_tmp1(1000),vec_tmp2(1000)
033a68c0be Jean*0050 CHARACTER*(MAX_LEN_MBUF) msgbuf
ad59256d7d aver*0051
0052 IF ( (irec.LT.obsfit_minind_buff) .OR.
0053 & (irec.GT.obsfit_maxind_buff) .OR.
0054 & (obsfit_curfile_buff.NE.fNb) ) THEN
0055 err = NF_INQ_DIMID( fiddata_obs(fNb),'iOBS', varID )
0056 CALL OBSFIT_NF_ERROR(
0057 & 'READ_OBS: NF_INQ_DIMID fiddata iObs',
033a68c0be Jean*0058 & err, 0, 0, myThid )
ad59256d7d aver*0059 err = NF_INQ_DIMLEN( fiddata_obs(fNb), varID, tmpObsNo )
0060 CALL OBSFIT_NF_ERROR( 'READ_OBS: NF_INQ_DIMLEN tmpObsNo',
033a68c0be Jean*0061 & err, 0, 0, myThid )
ad59256d7d aver*0062
0063 IF ( obsfit_curfile_buff.NE.fNb ) THEN
0064
0065 obsfit_minind_buff = MAX(1,irec-500+1)
0066 obsfit_maxind_buff = MIN(tmpObsNo,irec+500)
0067
0068 ELSEIF ( irec.LT.obsfit_minind_buff ) THEN
0069
0070 obsfit_minind_buff = MAX(1,irec-999)
0071 obsfit_maxind_buff = irec
0072
0073 ELSE
0074
0075 obsfit_minind_buff = irec
0076 obsfit_maxind_buff = MIN(tmpObsNo,irec+999)
0077
0078 ENDIF
0079
0080 #ifdef ALLOW_DEBUG
0081 IF ( debugLevel.GE.debLevD ) THEN
0082 WRITE( msgbuf,'(A,5I9)' )
0083 & 'buffer readobsfile ',
0084 & obsfit_minind_buff, obsfit_maxind_buff,
0085 & irec, ObsNo(fNb), tmpObsNo
0086 CALL PRINT_MESSAGE( msgbuf,
0087 & standardMessageUnit, SQUEEZE_RIGHT, myThid )
0088 ENDIF
0089 #endif
0090
0091 vec_start = obsfit_minind_buff
0092 vec_count = obsfit_maxind_buff-obsfit_minind_buff+1
0093
0094 err = NF_INQ_VARID( fiddata_obs(fNb), obsfit_nameval, varID )
0095 CALL OBSFIT_NF_ERROR(
033a68c0be Jean*0096 & 'READ_OBS: NF_INQ_VARID obsfit_nameval',err,0,0,myThid )
ad59256d7d aver*0097 err = NF_GET_VARA_DOUBLE( fiddata_obs(fNb), varID, vec_start,
0098 & vec_count, vec_tmp1 )
0099 CALL OBSFIT_NF_ERROR(
033a68c0be Jean*0100 & 'READ_OBS: NF_GET_VARA_DOUBLE vec_tmp1',err,0,0,myThid )
ad59256d7d aver*0101 err = NF_INQ_VARID( fiddata_obs(fNb), obsfit_nameuncert, varID )
0102 CALL OBSFIT_NF_ERROR(
033a68c0be Jean*0103 & 'READ_OBS: NF_INQ_VARID obsfit_nameuncert',err,0,0,myThid )
ad59256d7d aver*0104 err = NF_GET_VARA_DOUBLE( fiddata_obs(fNb), varID, vec_start,
0105 & vec_count, vec_tmp2 )
0106 CALL OBSFIT_NF_ERROR(
033a68c0be Jean*0107 & 'READ_OBS: NF_GET_VARA_DOUBLE vec_tmp2',err,0,0,myThid )
ad59256d7d aver*0108
0109 IF ( err.NE.NF_NOERR ) THEN
0110 WRITE( errorMessageUnit,'(A)' )
0111 & 'WARNING in obsfit_read_obs: record not found!!'
0112 ENDIF
0113
0114 DO vv = 1, vec_count
0115 obsfit_data_buff(vv) = vec_tmp1(vv)
0116 obsfit_uncert_buff(vv) = vec_tmp2(vv)
0117 ENDDO
0118
0119 obsfit_curfile_buff = fNb
0120 ENDIF
0121
0122 IF ( vNb.LT.0 ) THEN
0123 vec_loc = obsfit_uncert_buff(irec-obsfit_minind_buff+1)
0124
0125 ELSE
0126 vec_loc = obsfit_data_buff(irec-obsfit_minind_buff+1)
0127 ENDIF
0128
0129 #endif /* ALLOW_OBSFIT */
0130
0131 RETURN
0132 END
0133
0134