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 12461 for NEMO/branches/UKMO/r12083_cpl-pressure/src/OCE/SBC/sbcssm.F90 – NEMO

Ignore:
Timestamp:
2020-02-25T18:24:46+01:00 (4 years ago)
Author:
jcastill
Message:

Changes as the original branch updated to vn4.1

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/UKMO/r12083_cpl-pressure/src/OCE/SBC/sbcssm.F90

    r11715 r12461  
    2828 
    2929   PUBLIC   sbc_ssm        ! routine called by step.F90 
     30   PUBLIC   sbc_ssm_cpl    ! routine called by sbccpl.F90 
    3031   PUBLIC   sbc_ssm_init   ! routine called by sbcmod.F90 
    3132 
     
    7677         sss_m(:,:) = zts(:,:,jp_sal) 
    7778         !                          ! removed inverse barometer ssh when Patm forcing is used (for sea-ice dynamics) 
    78          IF( ln_apr_dyn ) THEN   ;   ssh_m(:,:) = sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) 
    79          ELSE                    ;   ssh_m(:,:) = sshn(:,:) 
     79         IF( .NOT. cpl_mslp ) THEN  
     80            IF( ln_apr_dyn ) THEN   ;   ssh_m(:,:) = sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) )  
     81            ELSE                    ;   ssh_m(:,:) = sshn(:,:)  
     82            ENDIF 
    8083         ENDIF 
    8184         ! 
     
    99102            sss_m(:,:) = zcoef * zts(:,:,jp_sal) 
    100103            !                          ! removed inverse barometer ssh when Patm forcing is used (for sea-ice dynamics) 
    101             IF( ln_apr_dyn ) THEN   ;   ssh_m(:,:) = zcoef * ( sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) ) 
    102             ELSE                    ;   ssh_m(:,:) = zcoef * sshn(:,:) 
     104            IF( .NOT. cpl_mslp ) THEN  
     105               IF( ln_apr_dyn ) THEN   ;   ssh_m(:,:) = zcoef * ( sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) )  
     106               ELSE                    ;   ssh_m(:,:) = zcoef * sshn(:,:)  
     107               ENDIF 
    103108            ENDIF 
    104109            ! 
     
    113118            sst_m(:,:) = 0._wp 
    114119            sss_m(:,:) = 0._wp 
    115             ssh_m(:,:) = 0._wp 
     120            IF( .NOT. cpl_mslp ) ssh_m(:,:) = 0._wp 
    116121            e3t_m(:,:) = 0._wp 
    117122            frq_m(:,:) = 0._wp 
     
    127132         sss_m(:,:) = sss_m(:,:) + zts(:,:,jp_sal) 
    128133         !                          ! removed inverse barometer ssh when Patm forcing is used (for sea-ice dynamics) 
    129          IF( ln_apr_dyn ) THEN   ;   ssh_m(:,:) = ssh_m(:,:) + sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) 
    130          ELSE                    ;   ssh_m(:,:) = ssh_m(:,:) + sshn(:,:) 
     134         IF( .NOT. cpl_mslp ) THEN  
     135            IF( ln_apr_dyn ) THEN   ;   ssh_m(:,:) = ssh_m(:,:) + sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) )  
     136            ELSE                    ;   ssh_m(:,:) = ssh_m(:,:) + sshn(:,:)  
     137            ENDIF 
    131138         ENDIF 
    132139         ! 
     
    143150            ssu_m(:,:) = ssu_m(:,:) * zcoef     ! mean suface current  [m/s] 
    144151            ssv_m(:,:) = ssv_m(:,:) * zcoef     ! 
    145             ssh_m(:,:) = ssh_m(:,:) * zcoef     ! mean SSH             [m] 
     152            IF( .NOT. cpl_mslp ) ssh_m(:,:) = ssh_m(:,:) * zcoef     ! mean SSH             [m] 
    146153            e3t_m(:,:) = e3t_m(:,:) * zcoef     ! mean vertical scale factor [m] 
    147154            frq_m(:,:) = frq_m(:,:) * zcoef     ! mean fraction of solar net radiation absorbed in the 1st T level [-] 
     
    162169            CALL iom_rstput( kt, nitrst, numrow, 'sst_m'  , sst_m, ldxios = lwxios  ) 
    163170            CALL iom_rstput( kt, nitrst, numrow, 'sss_m'  , sss_m, ldxios = lwxios  ) 
    164             CALL iom_rstput( kt, nitrst, numrow, 'ssh_m'  , ssh_m, ldxios = lwxios  ) 
     171            IF( .NOT. cpl_mslp ) CALL iom_rstput( kt, nitrst, numrow, 'ssh_m'  , ssh_m, ldxios = lwxios  ) 
    165172            CALL iom_rstput( kt, nitrst, numrow, 'e3t_m'  , e3t_m, ldxios = lwxios  ) 
    166173            CALL iom_rstput( kt, nitrst, numrow, 'frq_m'  , frq_m, ldxios = lwxios  ) 
     
    182189      ! 
    183190   END SUBROUTINE sbc_ssm 
     191 
     192   SUBROUTINE sbc_ssm_cpl( kt )   
     193      !!---------------------------------------------------------------------   
     194      !!                   ***  ROUTINE sbc_ssm_cpl  ***   
     195      !!                        
     196      !! ** Purpose :   provide ocean surface variable to sea-surface boundary   
     197      !!                condition computation when pressure is read from coupling   
     198      !!                   
     199      !! ** Method  :   The inverse barometer ssh (i.e. ssh associated with Patm)   
     200      !!                is added to ssh_m when ln_apr_dyn = T. Required for sea-ice dynamics.   
     201      !!---------------------------------------------------------------------   
     202      INTEGER, INTENT(in) ::   kt   ! ocean time step   
     203      !   
     204      REAL(wp) ::   zcoef       ! local scalar   
     205      !!---------------------------------------------------------------------   
     206      !   
     207      IF( nn_fsbc == 1 ) THEN                             ! Instantaneous surface fields        !   
     208         !                                                ! ---------------------------------------- !   
     209         IF( ln_apr_dyn ) THEN   ;   ssh_m(:,:) = sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) )   
     210         ELSE                    ;   ssh_m(:,:) = sshn(:,:)   
     211         ENDIF   
     212      ELSE   
     213         !                                                ! ----------------------------------------------- !   
     214         IF( kt == nit000 .AND. .NOT. l_ssm_mean ) THEN   ! Initialisation: 1st time-step, no input means !   
     215            !                                             ! ----------------------------------------------- !   
     216            IF(lwp) WRITE(numout,*)   
     217            IF(lwp) WRITE(numout,*) '~~~~~~~   mean ssh field initialised to instantaneous values'   
     218            zcoef = REAL( nn_fsbc - 1, wp )   
     219            zcoef = REAL( nn_fsbc - 1, wp )   
     220            IF( ln_apr_dyn ) THEN    ;  ssh_m(:,:) = zcoef * ( sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) )   
     221            ELSE                     ;  ssh_m(:,:) = zcoef * sshn(:,:)   
     222            ENDIF   
     223            !                                             ! ---------------------------------------- !   
     224         ELSEIF( MOD( kt - 2 , nn_fsbc ) == 0 ) THEN      ! Initialisation: New mean computation   !   
     225            !                                             ! ---------------------------------------- !   
     226            ssh_m(:,:) = 0.e0   
     227         ENDIF   
     228     
     229         IF( ln_apr_dyn ) THEN   ;   ssh_m(:,:) = ssh_m(:,:) + sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) )   
     230         ELSE                    ;   ssh_m(:,:) = ssh_m(:,:) + sshn(:,:)   
     231         ENDIF   
     232         !                                                ! ---------------------------------------- !   
     233         IF( MOD( kt - 1 , nn_fsbc ) == 0 ) THEN          ! Mean value at each nn_fsbc time-step   !   
     234            !                                             ! ---------------------------------------- !   
     235            zcoef = 1. / REAL( nn_fsbc, wp )   
     236            ssh_m(:,:) = ssh_m(:,:) * zcoef           ! mean SSH [m]   
     237         ENDIF   
     238         !                                                ! ---------------------------------------- !   
     239         IF( lrst_oce ) THEN                              ! Write in the ocean restart file     !   
     240            !                                             ! ---------------------------------------- !   
     241            IF(lwp) WRITE(numout,*)   
     242            IF(lwp) WRITE(numout,*) 'sbc_ssm_cpl : ssh mean field written in ocean restart file ',   &   
     243               &                    'at it= ', kt,' date= ', ndastp   
     244            IF(lwp) WRITE(numout,*) '~~~~~~~'   
     245            CALL iom_rstput( kt, nitrst, numrow, 'ssh_m'  , ssh_m  )   
     246         ENDIF   
     247      ENDIF   
     248      !   
     249      IF( MOD( kt - 1 , nn_fsbc ) == 0 ) THEN          !   Mean value at each nn_fsbc time-step   !   
     250         CALL iom_put( 'ssh_m', ssh_m )   
     251      ENDIF   
     252      !   
     253   END SUBROUTINE sbc_ssm_cpl 
    184254 
    185255 
Note: See TracChangeset for help on using the changeset viewer.