- Timestamp:
- 2021-08-11T13:24:27+02:00 (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/UKMO/NEMO_4.0.4_generic_obs/src/OCE/OBS/obs_field.F90
r15144 r15180 37 37 38 38 ! Expected names for observation types with special behaviours (not needed for all observation types) 39 CHARACTER(LEN=8) :: cobsname_sst = 'SST' ! Expected variable name for SST40 CHARACTER(LEN=8) :: cobsname_temp3d = 'POTM' ! Expected variable name for 3D temperature41 CHARACTER(LEN=8) :: cobsname_sal3d = 'PSAL' ! Expected variable name for 3D salinity42 39 CHARACTER(LEN=8) :: cobsname_uvel3d = 'UVEL' ! Expected variable name for 3D zonal currents 43 40 CHARACTER(LEN=8) :: cobsname_vvel3d = 'VVEL' ! Expected variable name for 3D meridional currents … … 47 44 TYPE obs_group 48 45 ! 49 CHARACTER(LEN= 128):: cgroupname !: Name of obs group (for stdout)46 CHARACTER(LEN=25) :: cgroupname !: Name of obs group (for stdout) 50 47 CHARACTER(LEN=8), DIMENSION(:), ALLOCATABLE :: cobstypes !: Observation types to read from files 51 48 CHARACTER(LEN=128), DIMENSION(:), ALLOCATABLE :: cobsfiles !: Observation file names 52 CHARACTER(LEN=128), DIMENSION(:), ALLOCATABLE :: csstbiasfiles !: SST bias input file names 49 CHARACTER(LEN=128), DIMENSION(:), ALLOCATABLE :: cobsbiasfiles !: Bias input file names 50 CHARACTER(LEN=128) :: cbiasvarname !: Bias variable name in input file 53 51 CHARACTER(LEN=128) :: caltbiasfile !: Altimeter bias input file name 54 52 ! … … 57 55 INTEGER :: nobstypes !: Number of observation types 58 56 INTEGER :: nobsfiles !: Number of observation files 59 INTEGER :: n extvars !: Number of extra variables to get60 INTEGER :: n sstbiasfiles !: Number of SST bias files57 INTEGER :: nobsbiasfiles !: Number of bias files 58 INTEGER :: nbiasvar !: Index of observation type to be bias corrected 61 59 INTEGER :: navtypes !: Number of profile data types representing a daily average 60 INTEGER :: nextvars !: Number of extra variables in addition to any in input files 61 INTEGER :: naddvars !: Number of additional variables in addition to any in input files 62 62 INTEGER :: n1dint !: Type of vertical interpolation method 63 63 INTEGER :: n2dint !: Type of horizontal interpolation method … … 67 67 LOGICAL :: lsurf !: Logical switch for surface data 68 68 LOGICAL :: lprof !: Logical switch for profile data 69 LOGICAL :: lsst !: Logical switch for SST data70 LOGICAL :: ltemp3d !: Logical switch for 3D temperature data71 LOGICAL :: lsal3d !: Logical switch for 3D salinity data72 69 LOGICAL :: lvel3d !: Logical switch for 3D velocity data 73 70 LOGICAL :: lsla !: Logical switch for SLA data 74 71 LOGICAL :: laltbias !: Logical switch for altimeter bias correction 75 LOGICAL :: l sstbias !: Logical switch for SSTbias correction72 LOGICAL :: lobsbias !: Logical switch for bias correction 76 73 LOGICAL :: lnea !: Logical switch for rejecting observations near land 77 74 LOGICAL :: lbound_reject !: Logical switch for rejecting obs near the boundary 78 75 LOGICAL :: lignmis !: Logical switch for ignoring missing files 79 LOGICAL :: l s_at_t !: Logical switch for computing model S at T obs if not there76 LOGICAL :: lall_at_all !: Logical switch for computing all model variables at all obs points 80 77 LOGICAL :: lnight !: Logical switch for calculating night-time average 81 LOGICAL :: loutput_clim !: Logical switch for writing climatological values to fdbk files82 LOGICAL :: ltime_mean_sla_bkg !: Logical switch for applying time mean of SLA background to remove tidal signal83 78 LOGICAL :: lfp_indegs !: Logical: T=> averaging footprint is in degrees, F=> in metres 84 79 ! … … 118 113 ALLOCATE( sdobsgroup%cobstypes (sdobsgroup%nobstypes ), & 119 114 & sdobsgroup%cobsfiles (sdobsgroup%nobsfiles ), & 120 & sdobsgroup%c sstbiasfiles(sdobsgroup%nsstbiasfiles ), &115 & sdobsgroup%cobsbiasfiles(sdobsgroup%nobsbiasfiles ), & 121 116 & sdobsgroup%nprofdavtypes(sdobsgroup%navtypes ), & 122 117 & sdobsgroup%rglam (jpi,jpj, sdobsgroup%nobstypes), & … … 144 139 DEALLOCATE( sdobsgroup%cobstypes, & 145 140 & sdobsgroup%cobsfiles, & 146 & sdobsgroup%c sstbiasfiles, &141 & sdobsgroup%cobsbiasfiles, & 147 142 & sdobsgroup%nprofdavtypes, & 148 143 & sdobsgroup%rglam, & … … 174 169 CHARACTER(LEN=8), DIMENSION(jpmaxntypes) :: cn_obstypes 175 170 CHARACTER(LEN=128), DIMENSION(jpmaxnfiles) :: cn_obsfiles 176 CHARACTER(LEN=128), DIMENSION(jpmaxnfiles) :: cn_sstbiasfiles 171 CHARACTER(LEN=128), DIMENSION(jpmaxnfiles) :: cn_obsbiasfiles 172 CHARACTER(LEN=128) :: cn_type_to_biascorrect 173 CHARACTER(LEN=128) :: cn_obsbiasfile_varname 177 174 CHARACTER(LEN=128) :: cn_altbiasfile 178 175 INTEGER, DIMENSION(imaxavtypes) :: nn_profdavtypes … … 184 181 LOGICAL :: ln_prof 185 182 LOGICAL :: ln_altbias 186 LOGICAL :: ln_ sstbias183 LOGICAL :: ln_obsbias 187 184 LOGICAL :: ln_nea 188 185 LOGICAL :: ln_bound_reject 189 186 LOGICAL :: ln_ignmis 190 LOGICAL :: ln_ s_at_t187 LOGICAL :: ln_all_at_all 191 188 LOGICAL :: ln_night 192 LOGICAL :: ln_output_clim193 LOGICAL :: ln_time_mean_sla_bkg194 189 LOGICAL :: ln_fp_indegs 195 190 REAL(wp) :: rn_avglamscl … … 201 196 & cn_obsfiles, cn_obstypes, ln_nea, ln_bound_reject, & 202 197 & ln_ignmis, nn_2dint, nn_1dint, nn_profdavtypes, & 203 & ln_fp_indegs, rn_avglamscl, rn_avgphiscl, ln_sstbias, & 204 & cn_sstbiasfiles, ln_night, ln_altbias, & 198 & ln_fp_indegs, rn_avglamscl, rn_avgphiscl, ln_obsbias, & 199 & cn_obsbiasfiles, cn_type_to_biascorrect, & 200 & cn_obsbiasfile_varname, ln_night, ln_altbias, & 205 201 & cn_altbiasfile, nn_msshc, rn_mdtcorr, rn_mdtcutoff, & 206 & ln_ time_mean_sla_bkg, ln_s_at_t, ln_output_clim202 & ln_all_at_all 207 203 !!---------------------------------------------------------------------- 208 204 209 205 cn_obstypes(:) = '' 210 206 cn_obsfiles(:) = '' 211 cn_ sstbiasfiles(:) = ''207 cn_obsbiasfiles(:) = '' 212 208 nn_profdavtypes(:) = -1 213 209 … … 229 225 sdobsgroup%nobstypes = 0 230 226 sdobsgroup%nobsfiles = 0 227 sdobsgroup%naddvars = 0 231 228 sdobsgroup%nextvars = 0 232 229 sdobsgroup%navtypes = 0 233 sdobsgroup%nsstbiasfiles = 0 234 sdobsgroup%lsst = .false. 235 sdobsgroup%ltemp3d = .false. 236 sdobsgroup%lsal3d = .false. 230 sdobsgroup%nobsbiasfiles = 0 237 231 sdobsgroup%lvel3d = .false. 238 232 sdobsgroup%lsla = .false. … … 254 248 END DO 255 249 DO jfile = 1, jpmaxnfiles 256 IF ( TRIM(cn_ sstbiasfiles(jfile)) /= '' ) THEN257 sdobsgroup%n sstbiasfiles = sdobsgroup%nsstbiasfiles + 1250 IF ( TRIM(cn_obsbiasfiles(jfile)) /= '' ) THEN 251 sdobsgroup%nobsbiasfiles = sdobsgroup%nobsbiasfiles + 1 258 252 ENDIF 259 253 END DO … … 266 260 itype = itype + 1 267 261 sdobsgroup%cobstypes(itype) = TRIM(cn_obstypes(jtype)) 268 IF ( TRIM(sdobsgroup%cobstypes(itype)) == cobsname_sst ) THEN 269 sdobsgroup%lsst = .true. 270 ELSEIF ( TRIM(sdobsgroup%cobstypes(itype)) == cobsname_temp3d ) THEN 271 sdobsgroup%ltemp3d = .true. 272 sdobsgroup%nextvars = sdobsgroup%nextvars + 1 273 ELSEIF ( TRIM(sdobsgroup%cobstypes(itype)) == cobsname_sal3d ) THEN 274 sdobsgroup%lsal3d = .true. 275 ELSEIF ( (TRIM(sdobsgroup%cobstypes(itype)) == cobsname_uvel3d) .OR. & 276 & (TRIM(sdobsgroup%cobstypes(itype)) == cobsname_vvel3d) ) THEN 262 IF ( (TRIM(sdobsgroup%cobstypes(itype)) == cobsname_uvel3d) .OR. & 263 & (TRIM(sdobsgroup%cobstypes(itype)) == cobsname_vvel3d) ) THEN 277 264 sdobsgroup%lvel3d = .true. 278 sdobsgroup%nextvars = sdobsgroup%nextvars + 1279 265 ELSEIF ( TRIM(sdobsgroup%cobstypes(itype)) == cobsname_sla ) THEN 280 266 sdobsgroup%lsla = .true. 281 sdobsgroup%nextvars = sdobsgroup%nextvars + 2 267 ! THESE WILL EACH NEED TO BE 1 (ADD=SSH, EXT=MDT) 268 sdobsgroup%naddvars = 0 269 sdobsgroup%nextvars = 0 270 ! DO THIS FOR FBD TOO 282 271 ENDIF 283 272 ! … … 313 302 ifile = 0 314 303 DO jfile = 1, jpmaxnfiles 315 IF ( TRIM(cn_ sstbiasfiles(jfile)) /= '' ) THEN304 IF ( TRIM(cn_obsbiasfiles(jfile)) /= '' ) THEN 316 305 ifile = ifile + 1 317 sdobsgroup%csstbiasfiles(ifile) = cn_sstbiasfiles(jfile) 318 ENDIF 319 END DO 306 sdobsgroup%cobsbiasfiles(ifile) = cn_obsbiasfiles(jfile) 307 ENDIF 308 END DO 309 IF ( ln_obsbias ) THEN 310 sdobsgroup%nbiasvar = -1 311 DO jtype = 1, sdobsgroup%nobstypes 312 IF ( TRIM(sdobsgroup%cobstypes(itype)) == TRIM(cn_type_to_biascorrect) ) THEN 313 sdobsgroup%nbiasvar = jtype 314 EXIT 315 ENDIF 316 ENDDO 317 ENDIF 320 318 321 319 sdobsgroup%caltbiasfile = cn_altbiasfile … … 326 324 sdobsgroup%lprof = ln_prof 327 325 sdobsgroup%laltbias = ln_altbias 328 sdobsgroup%lsstbias = ln_sstbias 326 sdobsgroup%lobsbias = ln_obsbias 327 sdobsgroup%cbiasvarname = cn_obsbiasfile_varname 329 328 sdobsgroup%lnea = ln_nea 330 329 sdobsgroup%lbound_reject = ln_bound_reject 331 330 sdobsgroup%lignmis = ln_ignmis 332 sdobsgroup%l s_at_t = ln_s_at_t331 sdobsgroup%lall_at_all = ln_all_at_all 333 332 sdobsgroup%lnight = ln_night 334 sdobsgroup%loutput_clim = ln_output_clim335 sdobsgroup%ltime_mean_sla_bkg = ln_time_mean_sla_bkg336 333 sdobsgroup%lfp_indegs = ln_fp_indegs 337 334 sdobsgroup%ravglamscl = rn_avglamscl … … 395 392 WRITE(numout,*) ' N/S diameter of obs footprint rn_avgphiscl = ', sdobsgroup%ravgphiscl 396 393 WRITE(numout,*) ' Logical switch for night-time average ln_night = ', sdobsgroup%lnight 394 WRITE(numout,*) ' Logical switch for bias correction ln_obsbias = ', sdobsgroup%lobsbias 395 IF ( sdobsgroup%lobsbias ) THEN 396 WRITE(numout,*) ' Observation type to be bias corrected cn_type_to_biascorrect = ', TRIM(sdobsgroup%cobstypes(sdobsgroup%nbiasvar)) 397 WRITE(numout,*) ' Bias variable name in bias files cn_obsbiasfile_varname = ', TRIM(sdobsgroup%cbiasvarname) 398 WRITE(numout,*) ' Bias files in group:', sdobsgroup%nobsbiasfiles 399 DO jfile = 1, sdobsgroup%nobsbiasfiles 400 WRITE(numout,*) ' ', TRIM(sdobsgroup%cobsbiasfiles(jfile)) 401 END DO 402 ENDIF 397 403 WRITE(numout,*) ' Settings only for profile data, which is ', sdobsgroup%lprof 398 404 WRITE(numout,*) ' Type of vertical interpolation method nn_1dint = ', sdobsgroup%n1dint 399 405 WRITE(numout,*) ' Daily average types nn_profdavtypes = ', sdobsgroup%nprofdavtypes 400 WRITE(numout,*) ' Settings only for SST data, which is ', sdobsgroup%lsst 401 WRITE(numout,*) ' Logical switch for sst bias ln_sstbias = ', sdobsgroup%lsstbias 402 IF ( sdobsgroup%lsstbias ) THEN 403 WRITE(numout,*) ' SST bias files in group:' 404 DO jfile = 1, sdobsgroup%nsstbiasfiles 405 WRITE(numout,*) ' ', TRIM(sdobsgroup%csstbiasfiles(jfile)) 406 END DO 407 ENDIF 406 WRITE(numout,*) ' Logical switch to compute all vars at all pts ln_all_at_all = ', sdobsgroup%lall_at_all 408 407 WRITE(numout,*) ' Settings only for SLA data, which is ', sdobsgroup%lsla 409 408 WRITE(numout,*) ' Logical switch for alt bias ln_altbias = ', sdobsgroup%laltbias 410 409 WRITE(numout,*) ' Alt bias file name cn_altbiasfile = ', TRIM(sdobsgroup%caltbiasfile) 411 WRITE(numout,*) ' Logical switch for time-mean of SLA ln_time_mean_sla_bkg = ', sdobsgroup%ltime_mean_sla_bkg412 410 WRITE(numout,*) ' MSSH correction scheme nn_msshc = ', sdobsgroup%nmsshc 413 411 WRITE(numout,*) ' MDT correction rn_mdtcorr = ', sdobsgroup%rmdtcorr 414 412 WRITE(numout,*) ' MDT cutoff for computed correction rn_mdtcutoff = ', sdobsgroup%rmdtcutoff 415 WRITE(numout,*) ' Settings only for 3D temperature/salinity data, temperature is ', sdobsgroup%ltemp3d416 WRITE(numout,*) ' salinity is ', sdobsgroup%lsal3d417 WRITE(numout,*) ' Logical switch to compute model S at T obs ln_s_at_t = ', sdobsgroup%ls_at_t418 WRITE(numout,*) ' Logical switch for writing climat. at obs points ln_output_clim = ', sdobsgroup%loutput_clim419 413 ENDIF 420 414 … … 432 426 ENDIF 433 427 434 IF ( (sdobsgroup%l sst) .AND. (sdobsgroup%lsstbias) .AND. (sdobsgroup%nsstbiasfiles == 0) ) THEN435 CALL ctl_stop( ' No SSTbias files specified for this observation group' )428 IF ( (sdobsgroup%lobsbias) .AND. (sdobsgroup%nobsbiasfiles == 0) ) THEN 429 CALL ctl_stop( ' No bias files specified for this observation group' ) 436 430 ENDIF 437 431
Note: See TracChangeset
for help on using the changeset viewer.