Changeset 11256


Ignore:
Timestamp:
2019-07-11T16:06:20+02:00 (13 months ago)
Author:
rrenshaw
Message:

bug fix for obs below model bathymetry

File:
1 edited

Legend:

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

    r8058 r11256  
    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 
    2829      !!--------------------------------------------------------------------- 
    2930 
     
    5051      REAL(KIND=wp) :: zsum2 
    5152      INTEGER :: jdep             ! Observation depths loop variable 
     53      INTEGER :: kkco_fix        ! kkco(jdep) limited to number of model levels 
    5254     
    5355      !------------------------------------------------------------------------ 
     
    6062         ! Initialization 
    6163         !--------------------------------------------------------------------- 
    62          z1dm = ( pdep(kkco(jdep)) - pobsdep(jdep)      ) 
    63          z1dp = ( pobsdep(jdep)    - pdep(kkco(jdep)-1) ) 
    64          IF ( pobsmask(kkco(jdep)) == 0.0_wp ) z1dp = 0.0_wp 
     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 
     70!        Where lower level is missing, use higher level 
     71         IF ( pobsmask(kkco_fix) == 0.0_wp ) z1dp = 0.0_wp 
    6572 
    6673         zsum = z1dm + z1dp 
     74         ! if pobsmask==0 and model level depth==observed depth, we get zsum=0 
     75         IF ( zsum > 0.0_wp ) THEN 
    6776          
    6877         IF ( k1dint == 0 ) THEN 
     
    7180            !  Linear interpolation 
    7281            !----------------------------------------------------------------- 
    73             pobs(jdep) = (   z1dm * pobsk(kkco(jdep)-1) & 
    74                &           + z1dp * pobsk(kkco(jdep)  ) ) / zsum 
     82            pobs(jdep) = (   z1dm * pobsk(kkco_fix-1) & 
     83               &           + z1dp * pobsk(kkco_fix  ) ) / zsum 
    7584 
    7685         ELSEIF ( k1dint == 1 ) THEN 
     
    8089            !----------------------------------------------------------------- 
    8190            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)  ) & 
     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  ) & 
    8695               &             ) / 6.0_wp                                              & 
    8796               &          ) / zsum 
    8897 
    8998         ENDIF 
     99 
     100         ELSE  ! take value directly from the higher model level 
     101            pobs(jdep)  = pobsk(kkco_fix-1) 
     102         ENDIF 
     103 
    90104      END DO 
    91105 
Note: See TracChangeset for help on using the changeset viewer.