Changeset 12377 for NEMO/trunk/src/OCE/OBS
- Timestamp:
- 2020-02-12T15:39:06+01:00 (4 years ago)
- Location:
- NEMO/trunk
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/trunk
- Property svn:externals
-
old new 3 3 ^/utils/build/mk@HEAD mk 4 4 ^/utils/tools@HEAD tools 5 ^/vendors/AGRIF/dev @HEAD ext/AGRIF5 ^/vendors/AGRIF/dev_r11615_ENHANCE-04_namelists_as_internalfiles_agrif@HEAD ext/AGRIF 6 6 ^/vendors/FCM@HEAD ext/FCM 7 7 ^/vendors/IOIPSL@HEAD ext/IOIPSL
-
- Property svn:externals
-
NEMO/trunk/src/OCE/OBS/diaobs.F90
r11536 r12377 103 103 CONTAINS 104 104 105 SUBROUTINE dia_obs_init 105 SUBROUTINE dia_obs_init( Kmm ) 106 106 !!---------------------------------------------------------------------- 107 107 !! *** ROUTINE dia_obs_init *** … … 114 114 !! 115 115 !!---------------------------------------------------------------------- 116 INTEGER, PARAMETER :: jpmaxnfiles = 1000 ! Maximum number of files for each obs type 116 INTEGER, INTENT(in) :: Kmm ! ocean time level indices 117 INTEGER, PARAMETER :: jpmaxnfiles = 1000 ! Maximum number of files for each obs type 117 118 INTEGER, DIMENSION(:), ALLOCATABLE :: ifilesprof, ifilessurf ! Number of profile & surface files 118 119 INTEGER :: ios ! Local integer output status for namelist read … … 201 202 202 203 ! Read namelist namobs : control observation diagnostics 203 REWIND( numnam_ref ) ! Namelist namobs in reference namelist204 204 READ ( numnam_ref, namobs, IOSTAT = ios, ERR = 901) 205 205 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namobs in reference namelist' ) 206 REWIND( numnam_cfg ) ! Namelist namobs in configuration namelist207 206 READ ( numnam_cfg, namobs, IOSTAT = ios, ERR = 902 ) 208 207 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namobs in configuration namelist' ) … … 429 428 & jpi, jpj, jpk, & 430 429 & zmask1, zglam1, zgphi1, zmask2, zglam2, zgphi2, & 431 & ln_nea, ln_bound_reject, &430 & ln_nea, ln_bound_reject, Kmm, & 432 431 & kdailyavtypes = nn_profdavtypes ) 433 432 END DO … … 459 458 ! 460 459 IF( TRIM(cobstypessurf(jtype)) == 'sla' ) THEN 461 CALL obs_rea_mdt( surfdataqc(jtype), n2dintsurf(jtype) )460 CALL obs_rea_mdt( surfdataqc(jtype), n2dintsurf(jtype), Kmm ) 462 461 IF( ln_altbias ) & 463 462 & CALL obs_rea_altbias ( surfdataqc(jtype), n2dintsurf(jtype), cn_altbiasfile ) … … 483 482 484 483 485 SUBROUTINE dia_obs( kstp )484 SUBROUTINE dia_obs( kstp, Kmm ) 486 485 !!---------------------------------------------------------------------- 487 486 !! *** ROUTINE dia_obs *** … … 496 495 !! ** Action : 497 496 !!---------------------------------------------------------------------- 498 USE dom_oce, ONLY : gdept _n, gdept_1d ! Ocean space and time domain variables497 USE dom_oce, ONLY : gdept, gdept_1d ! Ocean space domain variables (Kmm time-level only) 499 498 USE phycst , ONLY : rday ! Physical constants 500 USE oce , ONLY : ts n, un, vn, sshn ! Ocean dynamics and tracers variables499 USE oce , ONLY : ts, uu, vv, ssh ! Ocean dynamics and tracers variables (Kmm time-level only) 501 500 USE phycst , ONLY : rday ! Physical constants 502 501 #if defined key_si3 … … 511 510 !! * Arguments 512 511 INTEGER, INTENT(IN) :: kstp ! Current timestep 512 INTEGER, INTENT(in) :: Kmm ! ocean time level indices 513 513 !! * Local declarations 514 514 INTEGER :: idaystp ! Number of timesteps per day … … 551 551 SELECT CASE ( TRIM(cobstypesprof(jtype)) ) 552 552 CASE('prof') 553 zprofvar1(:,:,:) = ts n(:,:,:,jp_tem)554 zprofvar2(:,:,:) = ts n(:,:,:,jp_sal)553 zprofvar1(:,:,:) = ts(:,:,:,jp_tem,Kmm) 554 zprofvar2(:,:,:) = ts(:,:,:,jp_sal,Kmm) 555 555 zprofmask1(:,:,:) = tmask(:,:,:) 556 556 zprofmask2(:,:,:) = tmask(:,:,:) … … 560 560 zgphi2(:,:) = gphit(:,:) 561 561 CASE('vel') 562 zprofvar1(:,:,:) = u n(:,:,:)563 zprofvar2(:,:,:) = v n(:,:,:)562 zprofvar1(:,:,:) = uu(:,:,:,Kmm) 563 zprofvar2(:,:,:) = vv(:,:,:,Kmm) 564 564 zprofmask1(:,:,:) = umask(:,:,:) 565 565 zprofmask2(:,:,:) = vmask(:,:,:) … … 575 575 & nit000, idaystp, & 576 576 & zprofvar1, zprofvar2, & 577 & gdept _n(:,:,:), gdepw_n(:,:,:),&577 & gdept(:,:,:,Kmm), gdepw(:,:,:,Kmm), & 578 578 & zprofmask1, zprofmask2, & 579 579 & zglam1, zglam2, zgphi1, zgphi2, & … … 594 594 SELECT CASE ( TRIM(cobstypessurf(jtype)) ) 595 595 CASE('sst') 596 zsurfvar(:,:) = ts n(:,:,1,jp_tem)596 zsurfvar(:,:) = ts(:,:,1,jp_tem,Kmm) 597 597 CASE('sla') 598 zsurfvar(:,:) = ssh n(:,:)598 zsurfvar(:,:) = ssh(:,:,Kmm) 599 599 CASE('sss') 600 zsurfvar(:,:) = ts n(:,:,1,jp_sal)600 zsurfvar(:,:) = ts(:,:,1,jp_sal,Kmm) 601 601 CASE('sic') 602 602 IF ( kstp == 0 ) THEN -
NEMO/trunk/src/OCE/OBS/obs_averg_h2d.F90
r10425 r12377 52 52 SUBROUTINE obs_avg_h2d_init( kpk, kpk2, kmaxifp, kmaxjfp, k2dint, plam, pphi, & 53 53 & pglam, pgphi, pglamf, pgphif, pmask, plamscl, pphiscl, lindegrees, & 54 & pweig, pobsmask,iminpoints )54 & pweig, iminpoints ) 55 55 !!----------------------------------------------------------------------- 56 56 !! … … 98 98 REAL(KIND=wp), DIMENSION(kmaxifp,kmaxjfp,kpk2), INTENT(OUT) :: & 99 99 & pweig ! Weights for averaging 100 REAL(KIND=wp), DIMENSION(kpk2), INTENT(OUT) :: &101 & pobsmask ! Vertical mask for observations102 100 INTEGER, INTENT(IN), OPTIONAL :: & 103 101 & iminpoints ! Reject point which is not surrounded -
NEMO/trunk/src/OCE/OBS/obs_oper.F90
r10068 r12377 31 31 INTEGER, PARAMETER, PUBLIC :: imaxavtypes = 20 !: Max number of daily avgd obs types 32 32 33 !! * Substitutions 34 # include "do_loop_substitute.h90" 33 35 !!---------------------------------------------------------------------- 34 36 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 187 189 ! Initialize daily mean for first timestep of the day 188 190 IF ( idayend == 1 .OR. kt == 0 ) THEN 189 DO jk = 1, jpk 190 DO jj = 1, jpj 191 DO ji = 1, jpi 192 prodatqc%vdmean(ji,jj,jk,1) = 0.0 193 prodatqc%vdmean(ji,jj,jk,2) = 0.0 194 END DO 195 END DO 196 END DO 197 ENDIF 198 199 DO jk = 1, jpk 200 DO jj = 1, jpj 201 DO ji = 1, jpi 202 ! Increment field 1 for computing daily mean 203 prodatqc%vdmean(ji,jj,jk,1) = prodatqc%vdmean(ji,jj,jk,1) & 204 & + pvar1(ji,jj,jk) 205 ! Increment field 2 for computing daily mean 206 prodatqc%vdmean(ji,jj,jk,2) = prodatqc%vdmean(ji,jj,jk,2) & 207 & + pvar2(ji,jj,jk) 208 END DO 209 END DO 210 END DO 191 DO_3D_11_11( 1, jpk ) 192 prodatqc%vdmean(ji,jj,jk,1) = 0.0 193 prodatqc%vdmean(ji,jj,jk,2) = 0.0 194 END_3D 195 ENDIF 196 197 DO_3D_11_11( 1, jpk ) 198 ! Increment field 1 for computing daily mean 199 prodatqc%vdmean(ji,jj,jk,1) = prodatqc%vdmean(ji,jj,jk,1) & 200 & + pvar1(ji,jj,jk) 201 ! Increment field 2 for computing daily mean 202 prodatqc%vdmean(ji,jj,jk,2) = prodatqc%vdmean(ji,jj,jk,2) & 203 & + pvar2(ji,jj,jk) 204 END_3D 211 205 212 206 ! Compute the daily mean at the end of day … … 215 209 IF (lwp) WRITE(numout,*) 'Calculating prodatqc%vdmean on time-step: ',kt 216 210 CALL FLUSH(numout) 217 DO jk = 1, jpk 218 DO jj = 1, jpj 219 DO ji = 1, jpi 220 prodatqc%vdmean(ji,jj,jk,1) = prodatqc%vdmean(ji,jj,jk,1) & 221 & * zdaystp 222 prodatqc%vdmean(ji,jj,jk,2) = prodatqc%vdmean(ji,jj,jk,2) & 223 & * zdaystp 224 END DO 225 END DO 226 END DO 211 DO_3D_11_11( 1, jpk ) 212 prodatqc%vdmean(ji,jj,jk,1) = prodatqc%vdmean(ji,jj,jk,1) & 213 & * zdaystp 214 prodatqc%vdmean(ji,jj,jk,2) = prodatqc%vdmean(ji,jj,jk,2) & 215 & * zdaystp 216 END_3D 227 217 ENDIF 228 218 … … 342 332 CALL obs_int_h2d_init( 1, 1, k2dint, zlam, zphi, & 343 333 & zglam2(:,:,iobs), zgphi2(:,:,iobs), & 344 & zmask2(:,:,1,iobs), zweig2, zmsk_2 334 & zmask2(:,:,1,iobs), zweig2, zmsk_2) 345 335 346 336 ENDIF … … 760 750 ! Initialize night-time mean for first timestep of the day 761 751 IF ( idayend == 1 .OR. kt == 0 ) THEN 762 DO jj = 1, jpj 763 DO ji = 1, jpi 764 surfdataqc%vdmean(ji,jj) = 0.0 765 zmeanday(ji,jj) = 0.0 766 icount_night(ji,jj) = 0 767 END DO 768 END DO 752 DO_2D_11_11 753 surfdataqc%vdmean(ji,jj) = 0.0 754 zmeanday(ji,jj) = 0.0 755 icount_night(ji,jj) = 0 756 END_2D 769 757 ENDIF 770 758 … … 773 761 imask_night(:,:) = INT( zouttmp(:,:) ) 774 762 775 DO jj = 1, jpj 776 DO ji = 1, jpi 777 ! Increment the temperature field for computing night mean and counter 778 surfdataqc%vdmean(ji,jj) = surfdataqc%vdmean(ji,jj) & 779 & + psurf(ji,jj) * REAL( imask_night(ji,jj) ) 780 zmeanday(ji,jj) = zmeanday(ji,jj) + psurf(ji,jj) 781 icount_night(ji,jj) = icount_night(ji,jj) + imask_night(ji,jj) 782 END DO 783 END DO 763 DO_2D_11_11 764 ! Increment the temperature field for computing night mean and counter 765 surfdataqc%vdmean(ji,jj) = surfdataqc%vdmean(ji,jj) & 766 & + psurf(ji,jj) * REAL( imask_night(ji,jj) ) 767 zmeanday(ji,jj) = zmeanday(ji,jj) + psurf(ji,jj) 768 icount_night(ji,jj) = icount_night(ji,jj) + imask_night(ji,jj) 769 END_2D 784 770 785 771 ! Compute the night-time mean at the end of the day … … 787 773 IF ( idayend == 0 ) THEN 788 774 IF (lwp) WRITE(numout,*) 'Calculating surfdataqc%vdmean on time-step: ',kt 789 DO jj = 1, jpj 790 DO ji = 1, jpi 791 ! Test if "no night" point 792 IF ( icount_night(ji,jj) > 0 ) THEN 793 surfdataqc%vdmean(ji,jj) = surfdataqc%vdmean(ji,jj) & 794 & / REAL( icount_night(ji,jj) ) 795 ELSE 796 !At locations where there is no night (e.g. poles), 797 ! calculate daily mean instead of night-time mean. 798 surfdataqc%vdmean(ji,jj) = zmeanday(ji,jj) * zdaystp 799 ENDIF 800 END DO 801 END DO 775 DO_2D_11_11 776 ! Test if "no night" point 777 IF ( icount_night(ji,jj) > 0 ) THEN 778 surfdataqc%vdmean(ji,jj) = surfdataqc%vdmean(ji,jj) & 779 & / REAL( icount_night(ji,jj) ) 780 ELSE 781 !At locations where there is no night (e.g. poles), 782 ! calculate daily mean instead of night-time mean. 783 surfdataqc%vdmean(ji,jj) = zmeanday(ji,jj) * zdaystp 784 ENDIF 785 END_2D 802 786 ENDIF 803 787 … … 924 908 & zglamf(:,:,iobs), zgphif(:,:,iobs), & 925 909 & zmask(:,:,iobs), plamscl, pphiscl, & 926 & lindegrees, zweig , zobsmask)910 & lindegrees, zweig ) 927 911 928 912 ! Average the model SST to the observation footprint -
NEMO/trunk/src/OCE/OBS/obs_prep.F90
r10068 r12377 244 244 & kpi, kpj, kpk, & 245 245 & zmask1, pglam1, pgphi1, zmask2, pglam2, pgphi2, & 246 & ld_nea, ld_bound_reject, kdailyavtypes, kqc_cutoff )246 & ld_nea, ld_bound_reject, Kmm, kdailyavtypes, kqc_cutoff ) 247 247 248 248 !!---------------------------------------------------------------------- … … 274 274 LOGICAL, INTENT(IN) :: ld_bound_reject ! Switch for rejecting observations near the boundary 275 275 INTEGER, INTENT(IN) :: kpi, kpj, kpk ! Local domain sizes 276 INTEGER, INTENT(IN) :: Kmm ! time-level index 276 277 INTEGER, DIMENSION(imaxavtypes), OPTIONAL :: & 277 278 & kdailyavtypes ! Types for daily averages … … 420 421 & inlav1obs, ld_nea, & 421 422 & ibdyv1obs, ld_bound_reject, & 422 & iqc_cutoff )423 & iqc_cutoff, Kmm ) 423 424 424 425 CALL obs_mpp_sum_integer( iosdv1obs, iosdv1obsmpp ) … … 442 443 & inlav2obs, ld_nea, & 443 444 & ibdyv2obs, ld_bound_reject, & 444 & iqc_cutoff )445 & iqc_cutoff, Kmm ) 445 446 446 447 CALL obs_mpp_sum_integer( iosdv2obs, iosdv2obsmpp ) … … 1094 1095 & klanobs, knlaobs, ld_nea, & 1095 1096 & kbdyobs, ld_bound_reject, & 1096 & kqc_cutoff 1097 & kqc_cutoff, Kmm ) 1097 1098 !!---------------------------------------------------------------------- 1098 1099 !! *** ROUTINE obs_coo_spc_3d *** … … 1116 1117 !!---------------------------------------------------------------------- 1117 1118 !! * Modules used 1118 USE dom_oce, ONLY : & ! Geographical information 1119 USE dom_oce, ONLY : & ! Geographical information 1119 1120 & gdepw_1d, & 1120 1121 & gdepw_0, & 1121 & gdepw _n,&1122 & gdept _n,&1122 & gdepw, & 1123 & gdept, & 1123 1124 & ln_zco, & 1124 1125 & ln_zps … … 1160 1161 LOGICAL, INTENT(IN) :: ld_bound_reject ! Flag observations near open boundary 1161 1162 INTEGER, INTENT(IN) :: kqc_cutoff ! Cutoff QC value 1163 INTEGER, INTENT(IN) :: Kmm ! time-level index 1162 1164 1163 1165 !! * Local declarations … … 1230 1232 CALL obs_int_comm_2d( 2, 2, kprofno, kpi, kpj, igrdi, igrdj, plam, zglam ) 1231 1233 CALL obs_int_comm_2d( 2, 2, kprofno, kpi, kpj, igrdi, igrdj, pphi, zgphi ) 1232 CALL obs_int_comm_3d( 2, 2, kprofno, kpi, kpj, kpk, igrdi, igrdj, gdepw _n(:,:,:), &1234 CALL obs_int_comm_3d( 2, 2, kprofno, kpi, kpj, kpk, igrdi, igrdj, gdepw(:,:,:,Kmm), & 1233 1235 & zgdepw ) 1234 1236 -
NEMO/trunk/src/OCE/OBS/obs_read_altbias.F90
r10068 r12377 29 29 & gphit 30 30 USE oce, ONLY : & ! Model variables 31 & ssh n31 & ssh 32 32 USE obs_inter_h2d 33 33 USE obs_utils ! Various observation tools -
NEMO/trunk/src/OCE/OBS/obs_readmdt.F90
r10425 r12377 25 25 & tmask, tmask_i, e1e2t, gphit, glamt 26 26 USE obs_const, ONLY : obfillflt ! Fillvalue 27 USE oce , ONLY : ssh n! Model variables27 USE oce , ONLY : ssh ! Model variables 28 28 29 29 IMPLICIT NONE … … 37 37 REAL(wp), PUBLIC :: rn_mdtcutoff = 65.0_wp ! MDT cutoff for computed correction 38 38 39 !! * Substitutions 40 # include "do_loop_substitute.h90" 39 41 !!---------------------------------------------------------------------- 40 42 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 44 46 CONTAINS 45 47 46 SUBROUTINE obs_rea_mdt( sladata, k2dint )48 SUBROUTINE obs_rea_mdt( sladata, k2dint, Kmm ) 47 49 !!--------------------------------------------------------------------- 48 50 !! … … 59 61 TYPE(obs_surf), INTENT(inout) :: sladata ! SLA data 60 62 INTEGER , INTENT(in) :: k2dint ! ? 63 INTEGER , INTENT(in) :: Kmm ! ? 61 64 ! 62 65 CHARACTER(LEN=12), PARAMETER :: cpname = 'obs_rea_mdt' … … 106 109 ! Remove the offset between the MDT used with the sla and the model MDT 107 110 IF( nn_msshc == 1 .OR. nn_msshc == 2 ) & 108 & CALL obs_offset_mdt( jpi, jpj, z_mdt, zfill )111 & CALL obs_offset_mdt( jpi, jpj, z_mdt, zfill, Kmm ) 109 112 110 113 ! Intepolate the MDT already on the model grid at the observation point … … 169 172 170 173 171 SUBROUTINE obs_offset_mdt( kpi, kpj, mdt, zfill )174 SUBROUTINE obs_offset_mdt( kpi, kpj, mdt, zfill, Kmm ) 172 175 !!--------------------------------------------------------------------- 173 176 !! … … 183 186 !!---------------------------------------------------------------------- 184 187 INTEGER, INTENT(IN) :: kpi, kpj 188 INTEGER, INTENT(IN) :: Kmm 185 189 REAL(wp), DIMENSION(kpi,kpj), INTENT(INOUT) :: mdt ! MDT used on the model grid 186 190 REAL(wp) , INTENT(IN ) :: zfill … … 211 215 zeta2 = 0.0 212 216 213 DO jj = 1, jpj 214 DO ji = 1, jpi 215 zdxdy = e1e2t(ji,jj) * zpromsk(ji,jj) 216 zarea = zarea + zdxdy 217 zeta1 = zeta1 + mdt(ji,jj) * zdxdy 218 zeta2 = zeta2 + sshn (ji,jj) * zdxdy 219 END DO 220 END DO 217 DO_2D_11_11 218 zdxdy = e1e2t(ji,jj) * zpromsk(ji,jj) 219 zarea = zarea + zdxdy 220 zeta1 = zeta1 + mdt(ji,jj) * zdxdy 221 zeta2 = zeta2 + ssh(ji,jj,Kmm) * zdxdy 222 END_2D 221 223 222 224 CALL mpp_sum( 'obs_readmdt', zeta1 ) -
NEMO/trunk/src/OCE/OBS/obs_sstbias.F90
r9023 r12377 28 28 & glamt 29 29 USE oce, ONLY : & ! Model variables 30 & ssh n30 & ssh 31 31 USE obs_inter_h2d 32 32 USE obs_utils ! Various observation tools -
NEMO/trunk/src/OCE/OBS/obs_write.F90
r10425 r12377 46 46 END TYPE obswriinfo 47 47 48 !! * Substitutions 49 # include "do_loop_substitute.h90" 48 50 !!---------------------------------------------------------------------- 49 51 !! NEMO/OCE 4.0 , NEMO Consortium (2018)
Note: See TracChangeset
for help on using the changeset viewer.