Changeset 11035


Ignore:
Timestamp:
2019-05-22T15:10:12+02:00 (18 months ago)
Author:
frrh
Message:

Apply changes from UKMO GMED ticket 453 to fix OOB bugs in
the calculation of diagnostic tnpeo and to apply the correct calculation
as per the current NEMO vn4.0 and 3.6_STABLE code bases, in place of the
existing incorrect formula. Thus, tnpeo diagnostic values will change
following this update.
Model prognostics and eveolution are unaffected.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/dev_r5518_GO6_package/NEMOGCM/NEMO/OPA_SRC/DIA/diaar5.F90

    r7563 r11035  
    8181      ! 
    8282      REAL(wp), POINTER, DIMENSION(:,:)     :: zarea_ssh , zbotpres       ! 2D workspace  
    83       REAL(wp), POINTER, DIMENSION(:,:)     :: pe                         ! 2D workspace  
     83      REAL(wp), POINTER, DIMENSION(:,:)     :: zpe                        ! 2D workspace  
    8484      REAL(wp), POINTER, DIMENSION(:,:,:)   :: zrhd , zrhop               ! 3D workspace 
    8585      REAL(wp), POINTER, DIMENSION(:,:,:,:) :: ztsn                       ! 4D workspace 
     
    9191      IF( kt == nit000 )     CALL dia_ar5_init 
    9292  
    93       CALL wrk_alloc( jpi , jpj              , zarea_ssh , zbotpres, pe ) 
     93      CALL wrk_alloc( jpi , jpj              , zarea_ssh , zbotpres, zpe) 
    9494      CALL wrk_alloc( jpi , jpj , jpk        , zrhd      , zrhop    ) 
    9595      CALL wrk_alloc( jpi , jpj , jpk , jpts , ztsn                 ) 
     
    207207      ! Exclude points where rn2 is negative as convection kicks in here and 
    208208      ! work is not being done against stratification 
    209           pe(:,:) = 0._wp 
     209          zpe(:,:) = 0._wp 
    210210          IF( lk_zdfddm ) THEN 
    211              DO ji=1,jpi 
    212                 DO jj=1,jpj 
    213                    DO jk=1,jpk 
    214                       zrw =   ( fsdepw(ji,jj,jk  ) - fsdept(ji,jj,jk) )   & 
    215                          &  / ( fsdept(ji,jj,jk-1) - fsdept(ji,jj,jk) ) 
    216                       ! 
    217                       zaw = rab_n(ji,jj,jk,jp_tem) * (1. - zrw) + rab_n(ji,jj,jk-1,jp_tem)* zrw 
    218                       zbw = rab_n(ji,jj,jk,jp_sal) * (1. - zrw) + rab_n(ji,jj,jk-1,jp_sal)* zrw 
    219                       ! 
    220                       pe(ji, jj) = pe(ji, jj) - MIN(0._wp, rn2(ji,jj,jk)) * & 
    221                            &       grav * (avt(ji,jj,jk) * zaw * (tsn(ji,jj,jk-1,jp_tem) - tsn(ji,jj,jk,jp_tem) )  & 
    222                            &       - fsavs(ji,jj,jk) * zbw * (tsn(ji,jj,jk-1,jp_sal) - tsn(ji,jj,jk,jp_sal) ) ) 
    223  
     211             DO jk = 2, jpk 
     212                DO jj = 1, jpj 
     213                   DO ji = 1, jpi 
     214                     IF( rn2(ji,jj,jk) > 0._wp ) THEN 
     215 
     216                        zrw =   ( fsdepw(ji,jj,jk  ) - fsdept(ji,jj,jk) )   & 
     217                           &  / ( fsdept(ji,jj,jk-1) - fsdept(ji,jj,jk) ) 
     218                        ! 
     219                        zaw = rab_n(ji,jj,jk,jp_tem) * (1. - zrw) + rab_n(ji,jj,jk-1,jp_tem)* zrw 
     220                        zbw = rab_n(ji,jj,jk,jp_sal) * (1. - zrw) + rab_n(ji,jj,jk-1,jp_sal)* zrw 
     221                        ! 
     222 
     223                        zpe(ji, jj) = zpe(ji, jj)            & 
     224                                    -  grav * (  avt(ji,jj,jk) * zaw * (tsn(ji,jj,jk-1,jp_tem) - tsn(ji,jj,jk,jp_tem) )  & 
     225                                               - fsavs(ji,jj,jk) * zbw * (tsn(ji,jj,jk-1,jp_sal) - tsn(ji,jj,jk,jp_sal) )) 
     226 
     227                      ENDIF 
    224228                   ENDDO 
    225229                ENDDO 
    226230             ENDDO 
    227231          ELSE 
    228              DO ji=1,jpi 
    229                 DO jj=1,jpj 
    230                    DO jk=1,jpk 
    231                        pe(ji,jj) = pe(ji,jj) + avt(ji, jj, jk) * MIN(0._wp,rn2(ji, jj, jk)) * rau0 * fse3w(ji, jj, jk) 
     232             DO jk=1,jpk 
     233                DO ji=1,jpi 
     234                   DO jj=1,jpj 
     235                      zpe(ji,jj) = zpe(ji,jj) + avt(ji, jj, jk) * MIN(0._wp,rn2(ji, jj, jk)) * rau0 * e3w_n(ji, jj, jk) 
    232236                   ENDDO 
    233237                ENDDO 
    234238             ENDDO 
    235239          ENDIF 
    236           CALL iom_put( 'tnpeo', pe ) 
     240          CALL lbc_lnk(zpe, 'T', 1._wp)  
     241          CALL iom_put( 'tnpeo', zpe )           
    237242      ENDIF 
    238243      ! 
    239       CALL wrk_dealloc( jpi , jpj              , zarea_ssh , zbotpres, pe ) 
     244      CALL wrk_dealloc( jpi , jpj              , zarea_ssh , zbotpres, zpe ) 
    240245      CALL wrk_dealloc( jpi , jpj , jpk        , zrhd      , zrhop    ) 
    241246      CALL wrk_dealloc( jpi , jpj , jpk , jpts , ztsn                 ) 
Note: See TracChangeset for help on using the changeset viewer.