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 440 for trunk/NEMO/OPA_SRC/SBC/ocesbc.F90 – NEMO

Ignore:
Timestamp:
2006-04-19T16:43:17+02:00 (18 years ago)
Author:
opalod
Message:

nemo_v1_update_046 : CT : - light modifications related to the way to make SST/SSS damping

  • add a flx_init subroutine to read the namflx namelist to get feedback coefficients for SST(dqdt0)/SSS(deds0) damping
  • replace the ztrp variable by the dqdt0 read in the namflx namelist
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMO/OPA_SRC/SBC/ocesbc.F90

    r434 r440  
    8787      !! * Local declarations 
    8888      INTEGER ::   ji, jj                   ! dummy loop indices 
    89       REAL(wp) ::   ztx, ztaux, zty, ztauy, ztrp 
     89      REAL(wp) ::   ztx, ztaux, zty, ztauy 
    9090      REAL(wp) ::   ztdta, ztgel, zqrp 
    9191      !!---------------------------------------------------------------------- 
     
    113113         ! Surface heat flux (W/m2) 
    114114         ! ----------------------- 
    115          ztrp = 0.e0 
    116115 
    117116         ! restoring heat flux 
     
    124123               ztdta = MAX( t_dta(ji,jj,1), ztgel ) 
    125124#endif 
    126                zqrp = ztrp * ( tb(ji,jj,1) - ztdta ) 
     125               zqrp = dqdt0 * ( tb(ji,jj,1) - ztdta ) 
    127126 
    128127               qrp(ji,jj) = (1.0-freeze(ji,jj) ) * zqrp 
     
    306305      !! * Local declarations 
    307306      INTEGER  ::   ji, jj, jf         ! dummy loop indices 
    308       REAL(wp) ::   ztrp, ztgel,    &  ! temporary scalars 
     307      REAL(wp) ::   ztgel,          &  ! temporary scalars 
    309308         zice, zhemis, zqrp, zqri,  &  !    "         " 
    310309         zq, zqi, zerp, ze, zei, zro   !    "         " 
     
    313312      ! Compute fluxes 
    314313      ! -------------- 
    315  
    316       ! constant initialization 
    317       ztrp = -40.   ! restoring term for temperature (w/m2/k) 
    318314 
    319315      DO jj = 1, jpj 
     
    343339 
    344340            zqrp = 0. 
    345             zqri = ztrp*MIN( 0., tb(ji,jj,1)-ztgel ) 
     341            zqri = dqdt0*MIN( 0., tb(ji,jj,1)-ztgel ) 
    346342            qrp(ji,jj) = ( ( 1. - zice ) * zqrp + zice * zqri ) * tmask(ji,jj,1) 
    347343 
     
    417413      REAL(wp) ::  zxy 
    418414      REAL(wp) ::  zsice, zqri, zqrp, ztdta, zqrj 
    419       REAL(wp) ::  zq, zqi, zhemis, ztrp 
     415      REAL(wp) ::  zq, zqi, zhemis 
    420416      REAL(wp), DIMENSION(jpi,jpj) :: zeri, zerps, ziclim 
    421417      REAL(wp), DIMENSION(jpi,jpj) :: zqt, zqsr, zemp   
     
    456452         CALL oce_sbc_dmp 
    457453 
    458          ztrp = -40.             ! restoring terme for temperature (w/m2/k)    
    459454         zsice = - 0.04 / 0.8    ! ratio of isohaline compressibility over isotherme compressibility  
    460455                                 ! ( d rho / dt ) / ( d rho / ds )      ( s = 34, t = -1.8 ) 
     
    486481               ! - gamma*min(0,t-tgel) if climatological and opa ice (ziclim=1 zicopa=1) 
    487482 
    488                zqri = ztrp * ( tb(ji,jj,1) - ( fzptn(ji,jj) - 1.) ) 
    489                zqrj = ztrp * MIN( 0., tb(ji,jj,1) - fzptn(ji,jj) ) 
     483               zqri = dqdt0 * ( tb(ji,jj,1) - ( fzptn(ji,jj) - 1.) ) 
     484               zqrj = dqdt0 * MIN( 0., tb(ji,jj,1) - fzptn(ji,jj) ) 
    490485 
    491486               qrp(ji,jj) =  ( ziclim(ji,jj) * ( (1 - freeze(ji,jj)) * zqri    & 
     
    493488 
    494489#if ! defined key_flx_bulk_monthly || ! defined key_flx_bulk_daily 
    495                zqrp = ztrp * ( tb(ji,jj,1) - ztdta ) 
     490               zqrp = dqdt0 * ( tb(ji,jj,1) - ztdta ) 
    496491               qrp(ji,jj) = qrp(ji,jj) + (1. - ziclim(ji,jj)) * zqrp 
    497492# endif 
     
    579574      USE flxrnf                       ! ocean runoffs 
    580575      USE daymod, ONLY : nyear         ! calendar 
     576      USE dtasss                       ! sea surface salinity data 
    581577 
    582578      !! * arguments 
     
    588584         qsr0 = 0.e0,               &  ! solar heat flux 
    589585         emp0 = 0.e0                   ! net freshwater flux 
    590       REAL(wp) ::   ztrp, zemp_S, zemp_N, zemp_sais, zTstar, zcos_sais1, zconv, zcos_sais2 
     586      REAL(wp) ::   zsrp,           & 
     587         zemp_S, zemp_N, zemp_sais, & 
     588         zTstar, zcos_sais1, zconv, & 
     589         zcos_sais2 
    591590      REAL(wp) ::           & 
    592591         zsumemp,           &          ! tampon used for the emp sum 
     
    643642          zcos_sais2 = COS( (ztime - ztimemax2) / (ztimemax2 - ztimemin2) * rpi ) 
    644643 
    645           ztrp= - 40.          ! retroaction term (W/m2/K) 
    646644          zconv = 3.16e-5      ! convert 1m/yr->3.16e-5mm/s 
    647645          DO jj = 1, jpj 
     
    653651                   &             * COS( rpi * (gphit(ji,jj) - 5.)        &                   
    654652                   &                        / (53.5 * ( 1 + 11 / 53.5 * zcos_sais2 ) * 2.) )  
    655                 qt  (ji,jj) = ztrp * ( tb(ji,jj,1) - t_star(ji,jj) ) 
     653                qt  (ji,jj) = dqdt0 * ( tb(ji,jj,1) - t_star(ji,jj) ) 
    656654                IF( gphit(ji,jj) >= 14.845 .AND. 37.2 >= gphit(ji,jj)) THEN 
    657655                   ! zero at 37.8 deg, max at 24.6 deg 
     
    693691          ENDIF 
    694692 
    695           !salinity terms 
     693          IF( lk_dtasss ) THEN           ! Sea surface salinity damping 
     694             ! deds0 from (mm/day) => (mm/s) 
     695             zsrp = deds0 / rday  
     696             erp(:,:) = zsrp * ( sss(:,:) - sb(:,:,1) ) / ( sn(:,:,1) + 1.e-20 ) 
     697          ELSE                           ! NO Sea surface salinity damping  
     698             zsrp = 0.e0 
     699             erp(:,:) = 0.e0 
     700          ENDIF 
     701 
     702          ! freshwater fluxes terms 
    696703          DO jj = 1, jpj 
    697704             DO ji = 1, jpi 
    698                 erp(ji,jj) = 0.e0  
    699705                emp(ji, jj) =  emp(ji,jj) - zsumemp * tmask(ji,jj,1) 
    700                 emps(ji, jj)=  emp(ji,jj) 
     706                emps(ji, jj)=  emp(ji,jj) + erp(ji,jj) 
    701707             END DO 
    702708          END DO 
     
    722728            WRITE(numout,*)'           zsumemp    = ',zsumemp 
    723729            WRITE(numout,*)'           zsurf      = ',zsurf  
    724             WRITE(numout,*)'           ztrp       = ',ztrp 
     730            WRITE(numout,*)'           dqdt0      = ',dqdt0 
     731            WRITE(numout,*)'           deds0      = ',deds0 
    725732            WRITE(numout,*)'           zconv      = ',zconv  
    726733         ENDIF 
     
    728735      ELSE 
    729736 
     737         ! Constant surface fluxes 
     738 
    730739         IF( kt == nit000 ) THEN 
    731  
    732             ! Read Namelist namflx : surface thermohaline fluxes 
    733             ! -------------------- 
    734             REWIND ( numnam ) 
    735             READ   ( numnam, namflx ) 
    736     
    737             IF(lwp) WRITE(numout,*)' ' 
    738             IF(lwp) WRITE(numout,*)' ocesbc  : Constant surface fluxes read in namelist' 
    739             IF(lwp) WRITE(numout,*)' ~~~~~~~ ' 
    740             IF(lwp) WRITE(numout,*)'           Namelist namflx: set the constant flux values' 
    741             IF(lwp) WRITE(numout,*)'              net heat flux          q0   = ', q0  , ' W/m2' 
    742             IF(lwp) WRITE(numout,*)'              solar heat flux        qsr0 = ', qsr0, ' W/m2' 
    743             IF(lwp) WRITE(numout,*)'              net heat flux          emp0 = ', emp0, ' W/m2' 
     740            IF(lwp) THEN 
     741               WRITE(numout,*)' ' 
     742               WRITE(numout,*)' ocesbc  : Constant surface fluxes read in namelist' 
     743               WRITE(numout,*)' ~~~~~~~ ' 
     744               WRITE(numout,*)'           Namelist namflx: set the constant flux values' 
     745               WRITE(numout,*)'              net heat flux          q0   = ', q0  , ' W/m2' 
     746               WRITE(numout,*)'              solar heat flux        qsr0 = ', qsr0, ' W/m2' 
     747               WRITE(numout,*)'              net heat flux          emp0 = ', emp0, ' W/m2' 
     748            ENDIF 
    744749 
    745750            qt    (:,:) = q0 
     
    752757            runoff(:,:) = 0.e0 
    753758         ENDIF 
     759 
    754760      ENDIF 
    755761 
     
    777783      INTEGER ::   ji, jj                   ! dummy loop indices 
    778784      REAL(wp), DIMENSION(jpi,jpj)  :: zsss, zfreeze 
    779       REAL(wp) ::   zerp, ztrp, zsrp 
     785      REAL(wp) ::   zerp, zsrp 
    780786      CHARACTER (len=71) :: charout 
    781787#if ! defined key_dynspg_rl 
     
    807813      ! -------------- 
    808814      ! Restoring coefficients on SST and SSS    
    809       IF( lk_cpl ) THEN 
    810          ztrp = 0.e0 
    811          zsrp = 0.e0 
    812       ELSE 
    813          ztrp  = -40.                   ! (W/m2/K)     
    814          zsrp  = ztrp * ro0cpr * rauw   ! (Kg/m2/s2)  
    815       ENDIF 
     815      zsrp = dqdt0 * ro0cpr * rauw   ! (Kg/m2/s)  
    816816 
    817817#if ! defined key_dynspg_rl  
Note: See TracChangeset for help on using the changeset viewer.