- Timestamp:
- 2019-08-23T10:37:22+02:00 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/UKMO/dev_r5518_obs_oper_update/NEMOGCM/NEMO/OPA_SRC/OBS/obs_oper.F90
r9306 r11468 62 62 SUBROUTINE obs_prof_opt( prodatqc, kt, kpi, kpj, kpk, & 63 63 & kit000, kdaystp, kvar, & 64 & pvar, p gdept, pgdepw,&65 & p mask,&64 & pvar, pclim, & 65 & pgdept, pgdepw, pmask, & 66 66 & plam, pphi, & 67 67 & k1dint, k2dint, kdailyavtypes ) … … 137 137 REAL(KIND=wp), INTENT(IN), DIMENSION(kpi,kpj,kpk) :: & 138 138 & pvar, & ! Model field for variable 139 & pclim, & ! Climatology field for variable 139 140 & pmask ! Land-sea mask for variable 140 141 REAL(KIND=wp), INTENT(IN), DIMENSION(kpi,kpj) :: & … … 172 173 REAL(KIND=wp), DIMENSION(kpk) :: & 173 174 & zobsk, & 174 & zobs2k 175 & zobs2k, & 176 & zclm2k 175 177 REAL(KIND=wp), DIMENSION(2,2,1) :: & 176 178 & zweig1, & … … 178 180 REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE :: & 179 181 & zmask, & 182 & zclim, & 180 183 & zint, & 181 184 & zinm, & … … 187 190 REAL(KIND=wp), DIMENSION(1) :: zmsk 188 191 REAL(KIND=wp), DIMENSION(:,:,:), ALLOCATABLE :: interp_corner 189 192 REAL(KIND=wp), DIMENSION(:,:,:), ALLOCATABLE :: interp_corner_clim 193 190 194 LOGICAL :: ld_dailyav 191 195 … … 262 266 & ) 263 267 268 IF ( prodatqc%lclim ) ALLOCATE( zclim(2,2,kpk,ipro) ) 269 264 270 DO jobs = prodatqc%nprofup + 1, prodatqc%nprofup + ipro 265 271 iobs = jobs - prodatqc%nprofup … … 286 292 CALL obs_int_comm_3d( 2, 2, ipro, kpi, kpj, kpk, igrdi, igrdj, pgdepw, zgdepw ) 287 293 294 IF ( prodatqc%lclim ) THEN 295 CALL obs_int_comm_3d( 2, 2, ipro, kpi, kpj, kpk, igrdi, igrdj, pclim, zclim ) 296 ENDIF 297 288 298 ! At the end of the day also get interpolated means 289 299 IF ( ld_dailyav .AND. idayend == 0 ) THEN … … 349 359 inum_obs = iend - ista + 1 350 360 ALLOCATE(interp_corner(2,2,inum_obs),iv_indic(inum_obs)) 351 361 IF ( prodatqc%lclim ) ALLOCATE( interp_corner_clim(2,2,inum_obs) ) 362 352 363 DO iin=1,2 353 364 DO ijn=1,2 … … 358 369 & zobs2k, zgdept(iin,ijn,:,iobs), & 359 370 & zmask(iin,ijn,:,iobs)) 371 372 IF ( prodatqc%lclim ) THEN 373 CALL obs_int_z1d_spl( kpk, & 374 & zclim(iin,ijn,:,iobs), & 375 & zclm2k, zgdept(iin,ijn,:,iobs), & 376 & zmask(iin,ijn,:,iobs)) 377 ENDIF 378 360 379 ENDIF 361 380 … … 371 390 & zgdept(iin,ijn,:,iobs), & 372 391 & zmask(iin,ijn,:,iobs)) 373 392 393 IF ( prodatqc%lclim ) THEN 394 CALL obs_int_z1d(kpk, iv_indic, k1dint, inum_obs, & 395 & prodatqc%var(kvar)%vdep(ista:iend), & 396 & zclim(iin,ijn,:,iobs), & 397 & zclm2k, interp_corner_clim(iin,ijn,:), & 398 & zgdept(iin,ijn,:,iobs), & 399 & zmask(iin,ijn,:,iobs)) 400 ENDIF 401 374 402 ENDDO 375 403 ENDDO … … 386 414 inum_obs = iend - ista + 1 387 415 ALLOCATE(interp_corner(2,2,inum_obs), iv_indic(inum_obs)) 416 IF ( prodatqc%lclim ) ALLOCATE( interp_corner_clim(2,2,inum_obs) ) 388 417 DO iin=1,2 389 418 DO ijn=1,2 … … 394 423 & zobs2k, zgdept(iin,ijn,:,iobs), & 395 424 & zmask(iin,ijn,:,iobs)) 425 426 IF ( prodatqc%lclim ) THEN 427 CALL obs_int_z1d_spl( kpk, & 428 & zclim(iin,ijn,:,iobs),& 429 & zclm2k, zgdept(iin,ijn,:,iobs), & 430 & zmask(iin,ijn,:,iobs)) 431 ENDIF 396 432 397 433 ENDIF … … 408 444 & zgdept(iin,ijn,:,iobs), & 409 445 & zmask(iin,ijn,:,iobs) ) 446 447 IF ( prodatqc%lclim ) THEN 448 CALL obs_int_z1d(kpk, iv_indic, k1dint, inum_obs, & 449 & prodatqc%var(kvar)%vdep(ista:iend), & 450 & zclim(iin,ijn,:,iobs), & 451 & zclm2k,interp_corner_clim(iin,ijn,:), & 452 & zgdept(iin,ijn,:,iobs), & 453 & zmask(iin,ijn,:,iobs) ) 454 ENDIF 410 455 411 456 ENDDO … … 451 496 & prodatqc%var(kvar)%vmod(iend:iend) ) 452 497 498 IF ( prodatqc%lclim ) THEN 499 CALL obs_int_h2d( 1, 1, zweig, interp_corner_clim(:,:,ikn), & 500 & prodatqc%var(kvar)%vclm(iend:iend) ) 501 ENDIF 502 453 503 ! Set QC flag for any observations found below the bottom 454 504 ! needed as the check here is more strict than that in obs_prep … … 458 508 459 509 DEALLOCATE(interp_corner,iv_indic) 460 510 IF ( prodatqc%lclim ) DEALLOCATE( interp_corner_clim ) 511 461 512 ENDIF 462 513 … … 475 526 & ) 476 527 528 IF ( prodatqc%lclim ) DEALLOCATE( zclim ) 529 477 530 ! At the end of the day also get interpolated means 478 531 IF ( ld_dailyav .AND. idayend == 0 ) THEN … … 487 540 488 541 SUBROUTINE obs_surf_opt( surfdataqc, kt, kpi, kpj, & 489 & kit000, kdaystp, psurf, p surfmask, &542 & kit000, kdaystp, psurf, pclim, psurfmask, & 490 543 & k2dint, ldnightav, plamscl, pphiscl, & 491 544 & lindegrees ) … … 541 594 REAL(wp), INTENT(IN), DIMENSION(kpi,kpj) :: & 542 595 & psurf, & ! Model surface field 596 & pclim, & ! Climatological surface field 543 597 & psurfmask ! Land-sea mask 544 598 LOGICAL, INTENT(IN) :: ldnightav ! Logical for averaging night-time data … … 569 623 REAL(wp) :: zlam 570 624 REAL(wp) :: zphi 571 REAL(wp), DIMENSION(1) :: zext, zobsmask 625 REAL(wp), DIMENSION(1) :: zext, zobsmask, zclm 572 626 REAL(wp) :: zdaystp 573 627 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: & … … 577 631 & zsurfm, & 578 632 & zsurftmp, & 633 & zclim, & 579 634 & zglam, & 580 635 & zgphi, & … … 586 641 & zouttmp, & 587 642 & zmeanday ! to compute model sst in region of 24h daylight (pole) 588 643 589 644 !------------------------------------------------------------------------ 590 645 ! Local initialization … … 679 734 & ) 680 735 736 IF ( surfdataqc%lclim ) ALLOCATE( zclim(imaxifp,imaxjfp,isurf) ) 737 681 738 DO jobs = surfdataqc%nsurfup + 1, surfdataqc%nsurfup + isurf 682 739 iobs = jobs - surfdataqc%nsurfup … … 715 772 CALL obs_int_comm_2d( imaxifp, imaxjfp, isurf, kpi, kpj, & 716 773 & igrdi, igrdj, psurf, zsurf ) 717 CALL obs_int_comm_2d( imaxifp+1, imaxjfp+1, isurf, kpi, kpj, & 718 & igrdip1, igrdjp1, glamf, zglamf ) 719 CALL obs_int_comm_2d( imaxifp+1, imaxjfp+1, isurf, kpi, kpj, & 720 & igrdip1, igrdjp1, gphif, zgphif ) 774 775 IF ( k2dint > 4 ) THEN 776 CALL obs_int_comm_2d( imaxifp+1, imaxjfp+1, isurf, kpi, kpj, & 777 & igrdip1, igrdjp1, glamf, zglamf ) 778 CALL obs_int_comm_2d( imaxifp+1, imaxjfp+1, isurf, kpi, kpj, & 779 & igrdip1, igrdjp1, gphif, zgphif ) 780 ENDIF 781 782 IF ( surfdataqc%lclim ) THEN 783 CALL obs_int_comm_2d( imaxifp, imaxjfp, isurf, kpi, kpj, & 784 & igrdi, igrdj, pclim, zclim ) 785 ENDIF 721 786 722 787 ! At the end of the day get interpolated means … … 775 840 CALL obs_int_h2d( 1, 1, zweig, zsurftmp(:,:,iobs), zext ) 776 841 842 IF ( surfdataqc%lclim ) THEN 843 CALL obs_int_h2d( 1, 1, zweig, zclim(:,:,iobs), zclm ) 844 ENDIF 845 846 777 847 ELSE 778 848 … … 788 858 & zweig, zsurftmp(:,:,iobs), zext ) 789 859 860 IF ( surfdataqc%lclim ) THEN 861 CALL obs_avg_h2d( 1, 1, imaxifp, imaxjfp, & 862 & zweig, zclim(:,:,iobs), zclm ) 863 ENDIF 864 790 865 ENDIF 791 866 … … 797 872 surfdataqc%rmod(jobs,1) = zext(1) 798 873 ENDIF 874 875 IF ( surfdataqc%lclim ) surfdataqc%rclm(jobs,1) = zclm(1) 799 876 800 877 IF ( zext(1) == obfillflt ) THEN … … 821 898 & ) 822 899 900 IF ( surfdataqc%lclim ) DEALLOCATE( zclim ) 901 823 902 ! At the end of the day also deallocate night-time mean array 824 903 IF ( idayend == 0 .AND. ldnightav ) THEN
Note: See TracChangeset
for help on using the changeset viewer.