Changeset 15400
- Timestamp:
- 2021-10-19T11:34:55+02:00 (3 years ago)
- Location:
- branches/UKMO/dev_r5518_obs_oper_update/NEMOGCM/NEMO/OPA_SRC/OBS
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/UKMO/dev_r5518_obs_oper_update/NEMOGCM/NEMO/OPA_SRC/OBS/obs_level_search.h90
r12506 r15400 47 47 kobsk(ji) = 1 48 48 depk: DO jk = 2, kgrd-1 49 IF ( pgrddep(jk) > =pobsdep(ji) ) EXIT depk49 IF ( pgrddep(jk) > pobsdep(ji) ) EXIT depk 50 50 END DO depk 51 51 kobsk(ji) = jk -
branches/UKMO/dev_r5518_obs_oper_update/NEMOGCM/NEMO/OPA_SRC/OBS/obs_prep.F90
r15255 r15400 1224 1224 INTEGER :: iig, ijg ! i,j of observation on model grid point. 1225 1225 INTEGER :: jobs, jobsp, jk, ji, jj 1226 REAL(KIND=wp) :: maxdep t, maxdepw1226 REAL(KIND=wp) :: maxdepw 1227 1227 1228 1228 ! Get grid point indices … … 1317 1317 1318 1318 ! Calculate max T and W depths of 2x2 grid 1319 maxdept=zgdept(1,1,NINT(zbathy(1,1,jobs)),jobs)1320 1319 maxdepw=zgdepw(1,1,NINT(zbathy(1,1,jobs))+1,jobs) 1321 1320 DO jj = 1, 2 1322 1321 DO ji = 1, 2 1323 IF ( zgdept(ji,jj,NINT(zbathy(ji,jj,jobs)),jobs) > maxdept ) THEN1324 maxdept = zgdept(ji,jj,NINT(zbathy(ji,jj,jobs)),jobs)1325 END IF1326 1322 IF ( zgdepw(ji,jj,NINT(zbathy(ji,jj,jobs))+1,jobs) > maxdepw ) THEN 1327 1323 maxdepw = zgdepw(ji,jj,NINT(zbathy(ji,jj,jobs))+1,jobs) … … 1398 1394 ENDIF 1399 1395 ENDIF 1400 1401 ! Set observation depth equal to that of the first model depth 1402 IF ( pobsdep(jobsp) < MINVAL(zgdept(1:2,1:2,1,jobs) ) ) THEN 1403 pobsdep(jobsp) = MINVAL(zgdept(1:2,1:2,1,jobs)) 1404 ENDIF 1405 1406 ! Set observation depth equal to that of the last wet T-point 1407 IF ( ( pobsdep(jobsp) > maxdept ) .AND. & 1408 & ( pobsdep(jobsp) < maxdepw ) ) THEN 1409 pobsdep(jobsp) = maxdept 1410 END IF 1411 1396 1412 1397 #if defined key_bdy 1413 1398 ! Flag if the observation falls close to the boundary rim -
branches/UKMO/dev_r5518_obs_oper_update/NEMOGCM/NEMO/OPA_SRC/OBS/obsinter_z1d.h90
r7960 r15400 62 62 z1dm = ( pdep(kkco(jdep)) - pobsdep(jdep) ) 63 63 z1dp = ( pobsdep(jdep) - pdep(kkco(jdep)-1) ) 64 IF ( pobsmask(kkco(jdep)) == 0.0_wp ) z1dp = 0.0_wp 65 66 zsum = z1dm + z1dp 64 67 65 68 IF ( k1dint == 0 ) THEN 69 70 !----------------------------------------------------------------- 71 ! Linear interpolation 72 !----------------------------------------------------------------- 73 pobs(jdep) = ( z1dm * pobsk(kkco(jdep)-1) & 74 & + z1dp * pobsk(kkco(jdep) ) ) / zsum 75 76 ELSEIF ( k1dint == 1 ) THEN 77 78 !----------------------------------------------------------------- 79 ! Cubic spline interpolation 80 !----------------------------------------------------------------- 81 zsum2 = zsum * zsum 82 pobs(jdep) = ( z1dm * pobsk (kkco(jdep)-1) & 83 & + z1dp * pobsk (kkco(jdep) ) & 84 & + ( z1dm * ( z1dm * z1dm - zsum2 ) * pobs2k(kkco(jdep)-1) & 85 & + z1dp * ( z1dp * z1dp - zsum2 ) * pobs2k(kkco(jdep) ) & 86 & ) / 6.0_wp & 87 & ) / zsum 88 89 ENDIF 66 ! Where both levels are masked, return a fill value 67 IF ( ( pobsmask(kkco(jdep)-1) == 0.0_wp ) .AND. (pobsmask(kkco(jdep)) == 0.0_wp) ) THEN 68 pobs(jdep) = 99999. 69 ELSE 70 71 ! Where upper level is masked (e.g., under ice cavity), only use deeper level 72 ! otherwise where ob is at or above upper level model T-point, 73 ! use upper model level rather than extrapolate 74 IF ( pobsmask(kkco(jdep)-1) == 0.0_wp ) THEN 75 z1dm = 0.0_wp 76 ELSE IF ( pobsdep(jdep) <= pdep(kkco(jdep)-1) ) THEN 77 z1dp = 0.0_wp 78 END IF 79 80 ! Where deeper level is masked (e.g., near sea bed), only use upper level 81 ! otherwise where ob is at or below deeper level model T-point, 82 ! use deeper model level rather than extrapolate 83 IF ( pobsmask(kkco(jdep)) == 0.0_wp ) THEN 84 z1dp = 0.0_wp 85 ELSE IF ( pobsdep(jdep) >= pdep(kkco(jdep)) ) THEN 86 z1dm = 0.0_wp 87 END IF 88 89 zsum = z1dm + z1dp 90 91 IF ( k1dint == 0 ) THEN 92 93 !----------------------------------------------------------------- 94 ! Linear interpolation 95 !----------------------------------------------------------------- 96 pobs(jdep) = ( z1dm * pobsk(kkco(jdep)-1) & 97 & + z1dp * pobsk(kkco(jdep) ) ) / zsum 98 99 ELSEIF ( k1dint == 1 ) THEN 100 101 !----------------------------------------------------------------- 102 ! Cubic spline interpolation 103 !----------------------------------------------------------------- 104 zsum2 = zsum * zsum 105 pobs(jdep) = ( z1dm * pobsk (kkco(jdep)-1) & 106 & + z1dp * pobsk (kkco(jdep) ) & 107 & + ( z1dm * ( z1dm * z1dm - zsum2 ) * pobs2k(kkco(jdep)-1) & 108 & + z1dp * ( z1dp * z1dp - zsum2 ) * pobs2k(kkco(jdep) ) & 109 & ) / 6.0_wp & 110 & ) / zsum 111 112 ENDIF 113 ENDIF 90 114 END DO 91 115
Note: See TracChangeset
for help on using the changeset viewer.