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 11442 for branches/UKMO/dev_r5518_GO6_package_FOAMv14/NEMOGCM/NEMO/OPA_SRC/SBC/sbcssr.F90 – NEMO

Ignore:
Timestamp:
2019-08-16T12:32:43+02:00 (5 years ago)
Author:
mattmartin
Message:

Introduction of stochastic physics in NEMO, based on Andrea Storto's code.
For details, see ticket https://code.metoffice.gov.uk/trac/utils/ticket/251.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/dev_r5518_GO6_package_FOAMv14/NEMOGCM/NEMO/OPA_SRC/SBC/sbcssr.F90

    r6486 r11442  
    2525   USE timing         ! Timing 
    2626   USE lib_fortran    ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined)   
     27   USE stopack 
     28   USE wrk_nemo       ! Memory Allocation 
    2729 
    2830   IMPLICIT NONE 
     
    7577      REAL(wp) ::   zerp     ! local scalar for evaporation damping 
    7678      REAL(wp) ::   zqrp     ! local scalar for heat flux damping 
    77       REAL(wp) ::   zsrp     ! local scalar for unit conversion of rn_deds factor 
    7879      REAL(wp) ::   zerp_bnd ! local scalar for unit conversion of rn_epr_max factor 
     80      REAL(wp), POINTER, DIMENSION(:,:) :: rn_dqdt_s, zsrp 
    7981      INTEGER  ::   ierror   ! return error code 
    8082      !! 
     
    9597            ! 
    9698            IF( nn_sstr == 1 ) THEN                                   !* Temperature restoring term 
     99 
     100               CALL wrk_alloc( jpi, jpj, rn_dqdt_s ) 
     101               rn_dqdt_s(:,:) = rn_dqdt 
     102 
     103               IF( ln_stopack .AND. nn_spp_dqdt > 0 ) & 
     104                  & CALL spp_gen( kt, rn_dqdt_s, nn_spp_dqdt, rn_dqdt_sd, jk_spp_dqdt ) 
    97105               DO jj = 1, jpj 
    98106                  DO ji = 1, jpi 
    99                      zqrp = rn_dqdt * ( sst_m(ji,jj) - sf_sst(1)%fnow(ji,jj,1) ) 
     107                     zqrp = rn_dqdt_s(ji,jj) * ( sst_m(ji,jj) - sf_sst(1)%fnow(ji,jj,1) ) 
    100108                     qns(ji,jj) = qns(ji,jj) + zqrp 
    101109                     qrp(ji,jj) = zqrp 
     
    103111               END DO 
    104112               CALL iom_put( "qrp", qrp )                             ! heat flux damping 
     113               CALL wrk_dealloc( jpi, jpj, rn_dqdt_s ) 
    105114            ENDIF 
    106115            ! 
    107116            IF( nn_sssr == 1 ) THEN                                   !* Salinity damping term (salt flux only (sfx)) 
    108                zsrp = rn_deds / rday                                  ! from [mm/day] to [kg/m2/s] 
     117               CALL wrk_alloc( jpi, jpj, zsrp) 
     118               zsrp(:,:) = rn_deds 
     119               IF( ln_stopack .AND. nn_spp_dedt > 0 ) & 
     120                  & CALL spp_gen(kt, zsrp, nn_spp_dedt, rn_dedt_sd, jk_spp_deds ) 
    109121!CDIR COLLAPSE 
    110122               DO jj = 1, jpj 
    111123                  DO ji = 1, jpi 
    112                      zerp = zsrp * ( 1. - 2.*rnfmsk(ji,jj) )   &      ! No damping in vicinity of river mouths 
     124                     zerp = (zsrp(ji,jj)/rday) * ( 1. - 2.*rnfmsk(ji,jj) )   &      ! No damping in vicinity of river mouths 
    113125                        &        * ( sss_m(ji,jj) - sf_sss(1)%fnow(ji,jj,1) )  
    114126                     sfx(ji,jj) = sfx(ji,jj) + zerp                 ! salt flux 
     
    117129               END DO 
    118130               CALL iom_put( "erp", erp )                             ! freshwater flux damping 
     131               CALL wrk_dealloc( jpi,jpj, zsrp ) 
    119132               ! 
    120133            ELSEIF( nn_sssr == 2 ) THEN                               !* Salinity damping term (volume flux (emp) and associated heat flux (qns) 
    121                zsrp = rn_deds / rday                                  ! from [mm/day] to [kg/m2/s] 
     134               CALL wrk_alloc( jpi, jpj, zsrp) 
     135               zsrp(:,:) = rn_deds 
     136               IF( ln_stopack .AND. nn_spp_dedt > 0 ) & 
     137                  & CALL spp_gen( kt, zsrp, nn_spp_dedt, rn_dedt_sd, jk_spp_deds ) 
    122138               zerp_bnd = rn_sssr_bnd / rday                          !       -              -     
    123139!CDIR COLLAPSE 
    124140               DO jj = 1, jpj 
    125141                  DO ji = 1, jpi                             
    126                      zerp = zsrp * ( 1. - 2.*rnfmsk(ji,jj) )   &      ! No damping in vicinity of river mouths 
     142                     zerp = (zsrp(ji,jj)/rday) * ( 1. - 2.*rnfmsk(ji,jj) )   &      ! No damping in vicinity of river mouths 
    127143                        &        * ( sss_m(ji,jj) - sf_sss(1)%fnow(ji,jj,1) )   & 
    128144                        &        / MAX(  sss_m(ji,jj), 1.e-20   ) 
     
    134150               END DO 
    135151               CALL iom_put( "erp", erp )                             ! freshwater flux damping 
     152               CALL wrk_dealloc( jpi,jpj,zsrp ) 
    136153            ENDIF 
    137154            ! 
Note: See TracChangeset for help on using the changeset viewer.