- Timestamp:
- 2020-03-26T11:57:02+01:00 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/UKMO/dev_r5518_obs_oper_update/NEMOGCM/NEMO/OPA_SRC/OBS/diaobs.F90
r12140 r12610 22 22 USE obs_read_surf ! Reading and allocation of surface obs 23 23 USE obs_readmdt ! Reading and allocation of MDT for SLA. 24 USE obs_readsnowdepth ! Get model snow depth for conversion of freeboard to ice thickness 24 25 USE obs_prep ! Preparation of obs. (grid search etc). 25 26 USE obs_oper ! Observation operators … … 53 54 LOGICAL :: ln_sst_fp_indegs !: T=> SST obs footprint size specified in degrees, F=> in metres 54 55 LOGICAL :: ln_sss_fp_indegs !: T=> SSS obs footprint size specified in degrees, F=> in metres 55 LOGICAL :: ln_sic_fp_indegs !: T=> sea-ice obs footprint size specified in degrees, F=> in metres 56 LOGICAL :: ln_sic_fp_indegs !: T=> SIC obs footprint size specified in degrees, F=> in metres 57 LOGICAL :: ln_sit_fp_indegs !: T=> SIT obs footprint size specified in degrees, F=> in metres 56 58 LOGICAL :: ln_output_clim !: Logical switch for interpolating and writing T/S climatology 57 59 LOGICAL :: ln_time_mean_sla_bkg !: Logical switch for applying time mean of SLA background to remove tidal signal … … 65 67 REAL(wp) :: rn_sss_avglamscl !: E/W diameter of SSS observation footprint 66 68 REAL(wp) :: rn_sss_avgphiscl !: N/S diameter of SSS observation footprint 67 REAL(wp) :: rn_sic_avglamscl !: E/W diameter of sea-ice observation footprint 68 REAL(wp) :: rn_sic_avgphiscl !: N/S diameter of sea-ice observation footprint 69 REAL(wp) :: rn_sic_avglamscl !: E/W diameter of SIC observation footprint 70 REAL(wp) :: rn_sic_avgphiscl !: N/S diameter of SIC observation footprint 71 REAL(wp) :: rn_sit_avglamscl !: E/W diameter of SIT observation footprint 72 REAL(wp) :: rn_sit_avgphiscl !: N/S diameter of SIT observation footprint 69 73 REAL(wp), PUBLIC :: & 70 74 & MeanPeriodHours = 24. + (5./6.) !: Meaning period for surface data. … … 76 80 INTEGER :: nn_2dint_sst !: SST horizontal interpolation method (-1 = default) 77 81 INTEGER :: nn_2dint_sss !: SSS horizontal interpolation method (-1 = default) 78 INTEGER :: nn_2dint_sic !: Seaice horizontal interpolation method (-1 = default) 82 INTEGER :: nn_2dint_sic !: SIC horizontal interpolation method (-1 = default) 83 INTEGER :: nn_2dint_sit !: SIT horizontal interpolation method (-1 = default) 79 84 80 85 INTEGER, DIMENSION(imaxavtypes) :: & … … 136 141 !! ! 15-02 (M. Martin) Simplification of namelist and code 137 142 !!---------------------------------------------------------------------- 143 #if defined key_cice 144 USE sbc_oce, ONLY : & ! CICE variables 145 & thick_s ! snow depth for freeboard conversion 146 #endif 138 147 139 148 IMPLICIT NONE … … 157 166 & cn_slafbfiles, & ! Sea level anomaly input filenames 158 167 & cn_sicfbfiles, & ! Seaice concentration input filenames 168 & cn_sitfbfiles, & ! Seaice thickness input filenames 159 169 & cn_velfbfiles, & ! Velocity profile input filenames 160 170 & cn_sssfbfiles, & ! Sea surface salinity input filenames … … 189 199 190 200 201 LOGICAL :: ln_seaicetypes = .FALSE. ! Logical switch indicating data type is sea ice 191 202 LOGICAL :: ln_t3d ! Logical switch for temperature profiles 192 203 LOGICAL :: ln_s3d ! Logical switch for salinity profiles … … 194 205 LOGICAL :: ln_sst ! Logical switch for sea surface temperature 195 206 LOGICAL :: ln_sic ! Logical switch for sea ice concentration 207 LOGICAL :: ln_sit ! Logical switch for sea ice thickness 196 208 LOGICAL :: ln_sss ! Logical switch for sea surface salinity obs 197 209 LOGICAL :: ln_vel3d ! Logical switch for velocity (u,v) obs … … 252 264 253 265 NAMELIST/namobs/ln_diaobs, ln_t3d, ln_s3d, ln_sla, & 254 & ln_sst, ln_sic, ln_s ss, ln_vel3d, &266 & ln_sst, ln_sic, ln_sit, ln_sss, ln_vel3d, & 255 267 & ln_slchltot, ln_slchldia, ln_slchlnon, & 256 268 & ln_slchldin, ln_slchlmic, ln_slchlnan, & … … 269 281 & ln_sla_fp_indegs, ln_sst_fp_indegs, & 270 282 & ln_sss_fp_indegs, ln_sic_fp_indegs, & 283 & ln_sit_fp_indegs, & 271 284 & cn_profbfiles, cn_slafbfiles, & 272 285 & cn_sstfbfiles, cn_sicfbfiles, & 286 & cn_sitfbfiles, & 273 287 & cn_velfbfiles, cn_sssfbfiles, & 274 288 & cn_slchltotfbfiles, cn_slchldiafbfiles, & … … 292 306 & rn_sss_avglamscl, rn_sss_avgphiscl, & 293 307 & rn_sic_avglamscl, rn_sic_avgphiscl, & 308 & rn_sit_avglamscl, rn_sit_avgphiscl, & 294 309 & nn_1dint, nn_2dint_default, & 295 310 & nn_2dint_sla, nn_2dint_sst, & 296 & nn_2dint_sss, nn_2dint_sic, 311 & nn_2dint_sss, nn_2dint_sic, nn_2dint_sit, & 297 312 & nn_msshc, rn_mdtcorr, rn_mdtcutoff, & 298 313 & nn_profdavtypes … … 307 322 cn_sstfbfiles(:) = '' 308 323 cn_sicfbfiles(:) = '' 324 cn_sitfbfiles(:) = '' 309 325 cn_velfbfiles(:) = '' 310 326 cn_sssfbfiles(:) = '' … … 369 385 WRITE(numout,*) ' Logical switch for SLA observations ln_sla = ', ln_sla 370 386 WRITE(numout,*) ' Logical switch for SST observations ln_sst = ', ln_sst 371 WRITE(numout,*) ' Logical switch for Sea Ice observations ln_sic = ', ln_sic 387 WRITE(numout,*) ' Logical switch for SIC observations ln_sic = ', ln_sic 388 WRITE(numout,*) ' Logical switch for SIT observations ln_sit = ', ln_sit 372 389 WRITE(numout,*) ' Logical switch for velocity observations ln_vel3d = ', ln_vel3d 373 390 WRITE(numout,*) ' Logical switch for SSS observations ln_sss = ', ln_sss … … 408 425 WRITE(numout,*) ' Type of horizontal interpolation method for SSS nn_2dint_sss = ', nn_2dint_sss 409 426 WRITE(numout,*) ' Type of horizontal interpolation method for SIC nn_2dint_sic = ', nn_2dint_sic 427 WRITE(numout,*) ' Type of horizontal interpolation method for SIT nn_2dint_sit = ', nn_2dint_sit 410 428 WRITE(numout,*) ' Default E/W diameter of obs footprint rn_default_avglamscl = ', rn_default_avglamscl 411 429 WRITE(numout,*) ' Default N/S diameter of obs footprint rn_default_avgphiscl = ', rn_default_avgphiscl … … 420 438 WRITE(numout,*) ' SIC N/S diameter of obs footprint rn_sic_avgphiscl = ', rn_sic_avgphiscl 421 439 WRITE(numout,*) ' SIC obs footprint in deg [T] or m [F] ln_sic_fp_indegs = ', ln_sic_fp_indegs 440 WRITE(numout,*) ' SIT E/W diameter of obs footprint rn_sit_avglamscl = ', rn_sit_avglamscl 441 WRITE(numout,*) ' SIT N/S diameter of obs footprint rn_sit_avgphiscl = ', rn_sit_avgphiscl 442 WRITE(numout,*) ' SIT obs footprint in deg [T] or m [F] ln_sit_fp_indegs = ', ln_sit_fp_indegs 422 443 WRITE(numout,*) ' Rejection of observations near land switch ln_nea = ', ln_nea 423 444 WRITE(numout,*) ' Rejection of obs near open bdys ln_bound_reject = ', ln_bound_reject … … 441 462 & ln_pchltot, ln_pno3, ln_psi4, ln_ppo4, & 442 463 & ln_pdic, ln_palk, ln_pph, ln_po2 /) ) 443 nsurftypes = COUNT( (/ln_sla, ln_sst, ln_sic, ln_s ss,&464 nsurftypes = COUNT( (/ln_sla, ln_sst, ln_sic, ln_sit, ln_sss, & 444 465 & ln_slchltot, ln_slchldia, ln_slchlnon, ln_slchldin, & 445 466 & ln_slchlmic, ln_slchlnan, ln_slchlpic, ln_schltot, & … … 560 581 cobstypessurf(jtype) = 'sic' 561 582 clsurffiles(jtype,:) = cn_sicfbfiles 583 ENDIF 584 IF (ln_sit) THEN 585 jtype = jtype + 1 586 cobstypessurf(jtype) = 'sit' 587 clsurffiles(jtype,:) = cn_sitfbfiles 562 588 ENDIF 563 589 IF (ln_sss) THEN … … 675 701 ztype_avgphiscl = rn_sic_avgphiscl 676 702 ltype_fp_indegs = ln_sic_fp_indegs 703 ltype_night = .FALSE. 704 ELSE IF ( TRIM(cobstypessurf(jtype)) == 'sit' ) THEN 705 IF ( nn_2dint_sit == -1 ) THEN 706 n2dint_type = nn_2dint_default 707 ELSE 708 n2dint_type = nn_2dint_sit 709 ENDIF 710 ztype_avglamscl = rn_sit_avglamscl 711 ztype_avgphiscl = rn_sit_avgphiscl 712 ltype_fp_indegs = ln_sit_fp_indegs 677 713 ltype_night = .FALSE. 678 714 ELSE IF ( TRIM(cobstypessurf(jtype)) == 'sss' ) THEN … … 863 899 & ltype_clim = .TRUE. 864 900 865 IF ( TRIM(cobstypessurf(jtype)) == 'sla' ) THEN 901 IF ( (TRIM(cobstypessurf(jtype)) == 'sla') .OR. & 902 & (TRIM(cobstypessurf(jtype)) == 'sit') ) THEN 866 903 nvarssurf(jtype) = 1 867 904 nextrsurf(jtype) = 2 … … 879 916 ELSE IF ( TRIM(cobstypessurf(jtype)) == 'sic' ) THEN 880 917 clvars(1) = 'ICECONC' 918 ELSE IF ( TRIM(cobstypessurf(jtype)) == 'sit' ) THEN 919 clvars(1) = 'FBD' 920 ln_seaicetypes = .TRUE. 881 921 ELSE IF ( TRIM(cobstypessurf(jtype)) == 'sss' ) THEN 882 922 clvars(1) = 'SSS' … … 920 960 & llnightav(jtype), ltype_clim, ln_time_mean_sla_bkg, clvars ) 921 961 922 CALL obs_pre_surf( surfdata(jtype), surfdataqc(jtype), ln_nea, ln_bound_reject )962 CALL obs_pre_surf( surfdata(jtype), surfdataqc(jtype), ln_nea, ln_bound_reject, ln_seaicetypes ) 923 963 924 964 IF ( TRIM(cobstypessurf(jtype)) == 'sla' ) THEN … … 927 967 & CALL obs_rea_altbias ( surfdataqc(jtype), n2dintsurf(jtype), cn_altbiasfile ) 928 968 ENDIF 969 970 #if defined key_cice 971 IF ( TRIM(cobstypessurf(jtype)) == 'sit' ) THEN 972 CALL obs_rea_snowdepth( surfdataqc(jtype), n2dintsurf(jtype), thick_s(:,:) ) 973 ENDIF 974 #endif 929 975 930 976 IF ( TRIM(cobstypessurf(jtype)) == 'sst' .AND. ln_sstbias ) THEN … … 995 1041 #endif 996 1042 #if defined key_cice 997 USE sbc_oce, ONLY : fr_i ! ice fraction 1043 USE sbc_oce, ONLY : & ! CICE variables 1044 & fr_i, & ! ice fraction 1045 & thick_i ! ice thickness 998 1046 #endif 999 1047 #if defined key_top … … 1329 1377 & 'time-step but some obs are valid then.' ) 1330 1378 WRITE(numout,*)surfdataqc(jtype)%nsstpmpp(1), & 1331 & ' sea-ice obs will be missed'1379 & ' sea-ice concentration obs will be missed' 1332 1380 ENDIF 1333 surfdataqc(jtype)%nsurfup = surfdataqc(jtype)%nsurfup + &1334 & surfdataqc(jtype)%nsstp(1)1335 CYCLE1336 1381 ELSE 1337 1382 #if defined key_cice … … 1340 1385 zsurfvar(:,:) = 1._wp - frld(:,:) 1341 1386 #else 1342 CALL ctl_stop( ' Trying to run sea-ice observation operator', &1387 CALL ctl_stop( ' Trying to run sea-ice concentration observation operator', & 1343 1388 & ' but no sea-ice model appears to have been defined' ) 1389 #endif 1390 ENDIF 1391 1392 CASE('sit') 1393 IF ( kstp == 0 ) THEN 1394 IF ( lwp .AND. surfdataqc(jtype)%nsstpmpp(1) > 0 ) THEN 1395 CALL ctl_warn( 'Sea-ice not initialised on zeroth '// & 1396 & 'time-step but some obs are valid then.' ) 1397 WRITE(numout,*)surfdataqc(jtype)%nsstpmpp(1), & 1398 & ' sea-ice thickness obs will be missed and QC flag set to 4' 1399 ENDIF 1400 ELSE 1401 #if defined key_cice 1402 zsurfvar(:,:) = thick_i(:,:) 1403 #elif defined key_lim2 || defined key_lim3 1404 CALL ctl_stop( ' No sea-ice thickness observation operator defined for LIM model' ) 1405 #else 1406 CALL ctl_stop( ' Trying to run sea-ice thickness observation operator', & 1407 & ' but no sea-ice model appears to have been defined' ) 1344 1408 #endif 1345 1409 ENDIF … … 1641 1705 & lfpindegs(jtype), kmeanstp = imeanstp ) 1642 1706 1707 1643 1708 ELSE 1644 1709 CALL obs_surf_opt( surfdataqc(jtype), kstp, jpi, jpj, & … … 1648 1713 & ravglamscl(jtype), ravgphiscl(jtype), & 1649 1714 & lfpindegs(jtype) ) 1715 ENDIF 1716 1717 ! Change label of data from FBD ("freeboard") to SIT ("Sea Ice 1718 ! Thickness") 1719 IF ( TRIM(surfdataqc(jtype)%cvars(1)) == 'FBD' ) THEN 1720 surfdata(jtype)%cvars(1) = 'SIT' 1650 1721 ENDIF 1651 1722
Note: See TracChangeset
for help on using the changeset viewer.