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 15603 for branches/UKMO/dev_r5518_GO6_starthour_obsoper/NEMOGCM/NEMO/OPA_SRC/TRA/trabbl.F90 – NEMO

Ignore:
Timestamp:
2021-12-16T10:39:55+01:00 (3 years ago)
Author:
mattmartin
Message:

Updated NEMO branch for coupled NWP at GO6 to include stochastic model perturbations.
For more info see ticket: https://code.metoffice.gov.uk/trac/nwpscience/ticket/1125.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/dev_r5518_GO6_starthour_obsoper/NEMOGCM/NEMO/OPA_SRC/TRA/trabbl.F90

    r12555 r15603  
    3232   USE trdtra         ! trends: active tracers 
    3333   ! 
    34    USE iom            ! IOM library                
     34   USE iom            ! IOM library 
    3535   USE in_out_manager ! I/O manager 
    3636   USE lbclnk         ! ocean lateral boundary conditions 
     
    3838   USE wrk_nemo       ! Memory Allocation 
    3939   USE timing         ! Timing 
    40    USE lib_fortran    ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined)   
     40   USE lib_fortran    ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined) 
     41   USE stopack 
    4142 
    4243   IMPLICIT NONE 
     
    6768   INTEGER , ALLOCATABLE, SAVE, DIMENSION(:,:), PUBLIC ::   mgrhu    , mgrhv       ! = +/-1, sign of grad(H) in u-(v-)direction (PUBLIC for TAM) 
    6869   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)         ::   ahu_bbl_0, ahv_bbl_0   ! diffusive bbl flux coefficients at u and v-points 
     70   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)         ::   ahu_bbl_1, ahv_bbl_1   ! diffusive bbl flux coefficients at u and v-points 
    6971   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:), PUBLIC ::   e3u_bbl_0, e3v_bbl_0   ! thichness of the bbl (e3) at u and v-points (PUBLIC for TAM) 
    7072 
     
    8688         &      vtr_bbl  (jpi,jpj) , ahv_bbl  (jpi,jpj) , mbkv_d  (jpi,jpj) , mgrhv(jpi,jpj) ,     & 
    8789         &      ahu_bbl_0(jpi,jpj) , ahv_bbl_0(jpi,jpj) ,                                          & 
     90         &      ahu_bbl_1(jpi,jpj) , ahv_bbl_1(jpi,jpj) ,                                          & 
    8891         &      e3u_bbl_0(jpi,jpj) , e3v_bbl_0(jpi,jpj) ,                                      STAT=tra_bbl_alloc ) 
    8992         ! 
     
    195198      ALLOCATE(zptb(1:jpi, 1:jpj)) 
    196199      ! 
     200      ahu_bbl_1(:,:) = ahu_bbl(:,:) 
     201#if defined key_traldf_c2d || key_traldf_c3d 
     202      IF( ln_stopack .AND. nn_spp_ahubbl > 0 ) THEN 
     203          CALL spp_gen(1, ahu_bbl_1, nn_spp_ahubbl, rn_ahubbl_sd, jk_spp_ahubbl ) 
     204      ENDIF 
     205#else 
     206      IF ( ln_stopack .AND. nn_spp_ahubbl > 0 ) & 
     207         & CALL ctl_stop( 'tra_bbl_dif: parameter perturbation will only work with '// & 
     208                          'key_traldf_c2d or key_traldf_c3d') 
     209#endif 
     210 
     211 
     212      ahv_bbl_1(:,:) = ahv_bbl(:,:) 
     213#if defined key_traldf_c2d || key_traldf_c3d 
     214      IF( ln_stopack .AND. nn_spp_ahvbbl > 0 ) THEN 
     215          CALL spp_gen(1, ahv_bbl_1, nn_spp_ahvbbl, rn_ahvbbl_sd, jk_spp_ahvbbl ) 
     216      ENDIF 
     217#else 
     218      IF ( ln_stopack .AND. nn_spp_ahvbbl > 0 ) & 
     219         & CALL ctl_stop( 'tra_bbl_dif: parameter perturbation will only work with '// & 
     220                          'key_traldf_c2d or key_traldf_c3d') 
     221#endif 
     222 
     223      ! 
    197224      DO jn = 1, kjpt                                     ! tracer loop 
    198225         !                                                ! =========== 
     
    203230            END DO 
    204231         END DO 
    205          !                
     232         ! 
    206233         DO jj = 2, jpjm1                                    ! Compute the trend 
    207234            DO ji = 2, jpim1 
     
    209236               zbtr = r1_e12t(ji,jj)  / fse3t(ji,jj,ik) 
    210237               pta(ji,jj,ik,jn) = pta(ji,jj,ik,jn)                                                         & 
    211                   &               + (   ahu_bbl(ji  ,jj  ) * ( zptb(ji+1,jj  ) - zptb(ji  ,jj  ) )   & 
    212                   &                   - ahu_bbl(ji-1,jj  ) * ( zptb(ji  ,jj  ) - zptb(ji-1,jj  ) )   & 
    213                   &                   + ahv_bbl(ji  ,jj  ) * ( zptb(ji  ,jj+1) - zptb(ji  ,jj  ) )   & 
    214                   &                   - ahv_bbl(ji  ,jj-1) * ( zptb(ji  ,jj  ) - zptb(ji  ,jj-1) )   ) * zbtr 
     238                  &               + (   ahu_bbl_1(ji  ,jj  ) * ( zptb(ji+1,jj  ) - zptb(ji  ,jj  ) )   & 
     239                  &                   - ahu_bbl_1(ji-1,jj  ) * ( zptb(ji  ,jj  ) - zptb(ji-1,jj  ) )   & 
     240                  &                   + ahv_bbl_1(ji  ,jj  ) * ( zptb(ji  ,jj+1) - zptb(ji  ,jj  ) )   & 
     241                  &                   - ahv_bbl_1(ji  ,jj-1) * ( zptb(ji  ,jj  ) - zptb(ji  ,jj-1) )   ) * zbtr 
    215242            END DO 
    216243         END DO 
     
    415442                  za = zab(ji+1,jj,jp_tem) + zab(ji,jj,jp_tem)               ! 2*(alpha,beta) at u-point 
    416443                  zb = zab(ji+1,jj,jp_sal) + zab(ji,jj,jp_sal) 
    417                   !                                                          ! 2*masked bottom density gradient  
     444                  !                                                          ! 2*masked bottom density gradient 
    418445                  zgdrho = (  za * ( zts(ji+1,jj,jp_tem) - zts(ji,jj,jp_tem) )    & 
    419446                            - zb * ( zts(ji+1,jj,jp_sal) - zts(ji,jj,jp_sal) )  ) * umask(ji,jj,1) 
     
    578605               gdept_0(ji+1,jj,mbkt(ji+1,jj)) - gdept_0(ji,jj,mbkt(ji,jj)) )  ) 
    579606            ENDIF 
    580             !      
     607            ! 
    581608            IF( gdept_0(ji,jj+1,mbkt(ji,jj+1)) - gdept_0(ji,jj,mbkt(ji,jj)) /= 0._wp ) THEN 
    582609               mgrhv(ji,jj) = INT(  SIGN( 1.e0, & 
     
    598625      ahu_bbl_0(:,:) = rn_ahtbbl * e2u(:,:) * e3u_bbl_0(:,:) / e1u(:,:)  * umask(:,:,1) 
    599626      ahv_bbl_0(:,:) = rn_ahtbbl * e1v(:,:) * e3v_bbl_0(:,:) / e2v(:,:)  * vmask(:,:,1) 
    600  
    601627 
    602628      IF( cp_cfg == "orca" ) THEN   !* ORCA configuration : regional enhancement of ah_bbl 
Note: See TracChangeset for help on using the changeset viewer.