- Timestamp:
- 2021-09-02T17:52:53+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_prep.F90
r15180 r15225 22 22 USE obs_inter_sup ! Interpolation support 23 23 USE obs_oper ! Observation operators 24 USE obs_field, ONLY : & ! Velocity variable names 25 & cobsname_uvel, & 26 & cobsname_vvel 24 27 USE lib_mpp, ONLY : ctl_warn, ctl_stop 25 28 USE bdy_oce, ONLY : & ! Boundary information … … 150 153 ! ----------------------------------------------------------------------- 151 154 152 CALL obs_coo_grd( surfdata%nsurf, surfdata%mi, surfdata%mj, & 153 & surfdata%nqc, igrdobs ) 155 DO jvar = 1, surfdata%nvar 156 CALL obs_coo_grd( surfdata%nsurf, surfdata%mi(:,jvar), & 157 & surfdata%mj(:,jvar), surfdata%nqc, igrdobs ) 158 END DO 154 159 155 160 CALL obs_mpp_sum_integer( igrdobs, igrdobsmpp ) … … 160 165 161 166 DO jvar = 1, surfdata%nvar 162 CALL obs_coo_spc_2d( surfdata%nsurf, &163 & jpi, jpj,&164 & surfdata%mi , surfdata%mj,&165 & surfdata%rlam, surfdata%rphi,&166 & pglam(:,:,jvar), pgphi(:,:,jvar),&167 & zmask(:,:,jvar), surfdata%nqc,&168 & iosdsobs(jvar), ilansobs(jvar),&169 & inlasobs(jvar), ld_nea,&170 & ibdysobs(jvar), ld_bound_reject,&167 CALL obs_coo_spc_2d( surfdata%nsurf, & 168 & jpi, jpj, & 169 & surfdata%mi(:,jvar), surfdata%mj(:,jvar), & 170 & surfdata%rlam, surfdata%rphi, & 171 & pglam(:,:,jvar), pgphi(:,:,jvar), & 172 & zmask(:,:,jvar), surfdata%nqc, & 173 & iosdsobs(jvar), ilansobs(jvar), & 174 & inlasobs(jvar), ld_nea, & 175 & ibdysobs(jvar), ld_bound_reject, & 171 176 & iqc_cutoff ) 172 177 CALL obs_mpp_sum_integer( iosdsobs(jvar), iosdsobsmpp(jvar) ) … … 333 338 INTEGER :: iuvchkumpp ! - reject UVEL if VVEL rejected 334 339 INTEGER :: iuvchkvmpp ! - reject VVEL if UVEL rejected 340 INTEGER :: iuvar ! - UVEL index 341 INTEGER :: ivvar ! - VVEL index 335 342 TYPE(obs_prof_valid) :: llvalid ! Profile selection 336 343 TYPE(obs_prof_valid), DIMENSION(profdata%nvar) :: & … … 443 450 ! ----------------------------------------------------------------------- 444 451 445 IF ( TRIM(profdata%cvars(1)) == 'UVEL' ) THEN 446 CALL obs_uv_rej( profdata, iuvchku, iuvchkv, iqc_cutoff ) 452 iuvar = 0 453 ivvar = 0 454 DO jvar = 1,profdata%nvar 455 IF ( TRIM(profdata%cvars(jvar)) == cobsname_uvel ) THEN 456 iuvar = jvar 457 ELSEIF ( TRIM(profdata%cvars(jvar)) == cobsname_vvel ) THEN 458 ivvar = jvar 459 ENDIF 460 END DO 461 IF ( (iuvar > 0) .AND. (ivvar > 0) ) THEN 462 CALL obs_uv_rej( profdata, iuvchku, iuvchkv, iqc_cutoff, iuvar, ivvar ) 447 463 CALL obs_mpp_sum_integer( iuvchku, iuvchkumpp ) 448 464 CALL obs_mpp_sum_integer( iuvchkv, iuvchkvmpp ) … … 504 520 & inlavobsmpp(jvar) 505 521 ENDIF 506 IF ( TRIM(profdata%cvars(jvar)) == 'UVEL' ) THEN 507 WRITE(numout,*) ' U observation rejected since V rejected = ', & 508 & iuvchku 509 ELSE IF ( TRIM(profdata%cvars(jvar)) == 'VVEL' ) THEN 510 WRITE(numout,*) ' V observation rejected since U rejected = ', & 511 & iuvchkv 522 IF ( (iuvar > 0) .AND. (ivvar > 0) ) THEN 523 IF ( TRIM(profdata%cvars(jvar)) == cobsname_uvel ) THEN 524 WRITE(numout,*) ' U observation rejected since V rejected = ', & 525 & iuvchku 526 ELSE IF ( TRIM(profdata%cvars(jvar)) == cobsname_vvel ) THEN 527 WRITE(numout,*) ' V observation rejected since U rejected = ', & 528 & iuvchkv 529 ENDIF 512 530 ENDIF 513 531 WRITE(numout,*) ' Remaining '//prodatqc%cvars(jvar)//' data near open boundary (removed) = ',& … … 1374 1392 1375 1393 1376 SUBROUTINE obs_uv_rej( profdata, knumu, knumv, kqc_cutoff )1394 SUBROUTINE obs_uv_rej( profdata, knumu, knumv, kqc_cutoff, kuvar, kvvar ) 1377 1395 !!---------------------------------------------------------------------- 1378 1396 !! *** ROUTINE obs_uv_rej *** … … 1391 1409 INTEGER, INTENT(INOUT) :: knumu ! Number of u rejected 1392 1410 INTEGER, INTENT(INOUT) :: knumv ! Number of v rejected 1393 INTEGER, INTENT(IN) :: kqc_cutoff ! QC cutoff value 1411 INTEGER, INTENT(IN) :: kqc_cutoff ! QC cutoff value 1412 INTEGER, INTENT(IN) :: kuvar ! Index of u 1413 INTEGER, INTENT(IN) :: kvvar ! Index of v 1394 1414 ! 1395 1415 INTEGER :: jprof … … 1400 1420 DO jprof = 1, profdata%nprof !== Loop over profiles ==! 1401 1421 ! 1402 IF ( ( profdata%npvsta(jprof, 1) /= profdata%npvsta(jprof,2) ) .OR. &1403 & ( profdata%npvend(jprof, 1) /= profdata%npvend(jprof,2) ) ) THEN1422 IF ( ( profdata%npvsta(jprof,kuvar) /= profdata%npvsta(jprof,kvvar) ) .OR. & 1423 & ( profdata%npvend(jprof,kuvar) /= profdata%npvend(jprof,kvvar) ) ) THEN 1404 1424 ! 1405 1425 CALL ctl_stop('U,V profiles inconsistent in obs_uv_rej') … … 1408 1428 ENDIF 1409 1429 ! 1410 DO jobs = profdata%npvsta(jprof, 1), profdata%npvend(jprof,1)1430 DO jobs = profdata%npvsta(jprof,kuvar), profdata%npvend(jprof,kuvar) 1411 1431 ! 1412 IF ( ( profdata%var( 1)%nvqc(jobs) > kqc_cutoff ) .AND. &1413 & ( profdata%var( 2)%nvqc(jobs) <= kqc_cutoff) ) THEN1414 profdata%var( 2)%nvqc(jobs) = IBSET(profdata%var(1)%nvqc(jobs),15)1432 IF ( ( profdata%var(kuvar)%nvqc(jobs) > kqc_cutoff ) .AND. & 1433 & ( profdata%var(kvvar)%nvqc(jobs) <= kqc_cutoff) ) THEN 1434 profdata%var(kvvar)%nvqc(jobs) = IBSET(profdata%var(kuvar)%nvqc(jobs),15) 1415 1435 knumv = knumv + 1 1416 1436 ENDIF 1417 IF ( ( profdata%var( 2)%nvqc(jobs) > kqc_cutoff ) .AND. &1418 & ( profdata%var( 1)%nvqc(jobs) <= kqc_cutoff) ) THEN1419 profdata%var( 1)%nvqc(jobs) = IBSET(profdata%var(1)%nvqc(jobs),15)1437 IF ( ( profdata%var(kvvar)%nvqc(jobs) > kqc_cutoff ) .AND. & 1438 & ( profdata%var(kuvar)%nvqc(jobs) <= kqc_cutoff) ) THEN 1439 profdata%var(kuvar)%nvqc(jobs) = IBSET(profdata%var(kuvar)%nvqc(jobs),15) 1420 1440 knumu = knumu + 1 1421 1441 ENDIF
Note: See TracChangeset
for help on using the changeset viewer.