New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 11260 – NEMO

Changeset 11260


Ignore:
Timestamp:
2019-07-12T09:38:35+02:00 (5 years ago)
Author:
rrenshaw
Message:

further fix for ob below model bathymetry

Location:
branches/UKMO/AMM15_v3_6_STABLE_package_reanalysis3/NEMOGCM/NEMO/OPA_SRC/OBS
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/AMM15_v3_6_STABLE_package_reanalysis3/NEMOGCM/NEMO/OPA_SRC/OBS/obs_level_search.h90

    r8058 r11260  
    2121      !!        !  2006-10  (A. Weaver) Cleanup 
    2222      !!        !  2008-10  (K. Mogensen) Remove assumptions on grid. 
     23      !!        !  2019-07  (R. Renshaw) Don't exceed model bottom. 
    2324      !!---------------------------------------------------------------------- 
    2425 
     
    4647            IF ( pgrddep(jk) >= pobsdep(ji) ) EXIT depk 
    4748         END DO depk 
    48          kobsk(ji) = jk 
     49         kobsk(ji) = MIN( jk, kgrd ) 
    4950      END DO 
    5051 
  • branches/UKMO/AMM15_v3_6_STABLE_package_reanalysis3/NEMOGCM/NEMO/OPA_SRC/OBS/obsinter_z1d.h90

    r11256 r11260  
    2626      !!      ! 06-10 (A. Weaver) Cleanup 
    2727      !!      ! 07-01 (K. Mogensen) Use profile rather than single level 
    28       !!      ! 19-07 (R. Renshaw) Checks on kkco and zsum to avoid occasional NaNs 
     28      !!      ! 19-07 (R. Renshaw) Avoid division by zero 
    2929      !!--------------------------------------------------------------------- 
    3030 
     
    5151      REAL(KIND=wp) :: zsum2 
    5252      INTEGER :: jdep             ! Observation depths loop variable 
    53       INTEGER :: kkco_fix        ! kkco(jdep) limited to number of model levels 
    5453     
    5554      !------------------------------------------------------------------------ 
     
    6261         ! Initialization 
    6362         !--------------------------------------------------------------------- 
    64 !        kkco (from obs_level_search) sometimes has model level kpk+1 which doesn't exist 
    65          kkco_fix = MIN( kkco(jdep), kpk ) 
    66          z1dm = ( pdep(kkco_fix) - pobsdep(jdep)      ) 
    67          z1dp = ( pobsdep(jdep)    - pdep(kkco_fix-1) ) 
    68 !        Where ob is below model bottom, use model bottom and don't extrapolate 
    69          IF ( pdep(kkco_fix) <= pobsdep(jdep) ) z1dm = 0.0_wp 
     63         z1dm = ( pdep(kkco(jdep)) - pobsdep(jdep)      ) 
     64         z1dp = ( pobsdep(jdep)    - pdep(kkco(jdep)-1) ) 
     65!        Where ob is below model bottom, use model bottom rather than extrapolate 
     66         IF ( pdep(kkco(jdep)) <= pobsdep(jdep) ) z1dm = 0.0_wp 
    7067!        Where lower level is missing, use higher level 
    71          IF ( pobsmask(kkco_fix) == 0.0_wp ) z1dp = 0.0_wp 
     68         IF ( pobsmask(kkco(jdep)) == 0.0_wp ) z1dp = 0.0_wp 
    7269 
    7370         zsum = z1dm + z1dp 
     
    8077            !  Linear interpolation 
    8178            !----------------------------------------------------------------- 
    82             pobs(jdep) = (   z1dm * pobsk(kkco_fix-1) & 
    83                &           + z1dp * pobsk(kkco_fix  ) ) / zsum 
     79            pobs(jdep) = (   z1dm * pobsk(kkco(jdep)-1) & 
     80               &           + z1dp * pobsk(kkco(jdep)  ) ) / zsum 
    8481 
    8582         ELSEIF ( k1dint == 1 ) THEN 
     
    8986            !----------------------------------------------------------------- 
    9087            zsum2 = zsum * zsum 
    91             pobs(jdep)  = (  z1dm                             * pobsk (kkco_fix-1) & 
    92                &           + z1dp                             * pobsk (kkco_fix  ) & 
    93                &           + ( z1dm * ( z1dm * z1dm - zsum2 ) * pobs2k(kkco_fix-1) & 
    94                &           +   z1dp * ( z1dp * z1dp - zsum2 ) * pobs2k(kkco_fix  ) & 
     88            pobs(jdep)  = (  z1dm                             * pobsk (kkco(jdep)-1) & 
     89               &           + z1dp                             * pobsk (kkco(jdep)  ) & 
     90               &           + ( z1dm * ( z1dm * z1dm - zsum2 ) * pobs2k(kkco(jdep)-1) & 
     91               &           +   z1dp * ( z1dp * z1dp - zsum2 ) * pobs2k(kkco(jdep)  ) & 
    9592               &             ) / 6.0_wp                                              & 
    9693               &          ) / zsum 
     
    9996 
    10097         ELSE  ! take value directly from the higher model level 
    101             pobs(jdep)  = pobsk(kkco_fix-1) 
     98            pobs(jdep)  = pobsk(kkco(jdep)-1) 
    10299         ENDIF 
    103100 
Note: See TracChangeset for help on using the changeset viewer.