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 12448 for branches/UKMO/AMM15_v3_6_STABLE_package_collate_spectral_optics/NEMOGCM/NEMO/OPA_SRC/SBC/sbcssm.F90 – NEMO

Ignore:
Timestamp:
2020-02-24T17:39:27+01:00 (4 years ago)
Author:
dford
Message:

Update to head of AMM15_v3_6_STABLE_package_collate (12437).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/AMM15_v3_6_STABLE_package_collate_spectral_optics/NEMOGCM/NEMO/OPA_SRC/SBC/sbcssm.F90

    r8058 r12448  
    2626 
    2727   PUBLIC   sbc_ssm         ! routine called by step.F90 
     28   PUBLIC   sbc_ssm_cpl     ! routine called by sbccpl.F90 
    2829   PUBLIC   sbc_ssm_init    ! routine called by sbcmod.F90 
    2930 
     
    7778         sss_m(:,:) = zts(:,:,jp_sal) 
    7879         !                          ! removed inverse barometer ssh when Patm forcing is used (for sea-ice dynamics) 
    79          IF( ln_apr_dyn ) THEN   ;   ssh_m(:,:) = sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) 
    80          ELSE                    ;   ssh_m(:,:) = sshn(:,:) 
     80         IF( .NOT. cpl_mslp ) THEN  
     81            IF( ln_apr_dyn ) THEN   ;   ssh_m(:,:) = sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) )  
     82            ELSE                    ;   ssh_m(:,:) = sshn(:,:)  
     83            ENDIF 
    8184         ENDIF 
    8285         ! 
     
    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.e0 
    114119            sss_m(:,:) = 0.e0 
    115             ssh_m(:,:) = 0.e0 
     120            IF( .NOT. cpl_mslp ) ssh_m(:,:) = 0.e0 
    116121            IF( lk_vvl )   e3t_m(:,:) = 0.e0 
    117122            frq_m(:,:) = 0.e0 
     
    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            IF( lk_vvl )   e3t_m(:,:) = fse3t_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 [-] 
     
    161168            CALL iom_rstput( kt, nitrst, numrow, 'sst_m'  , sst_m  ) 
    162169            CALL iom_rstput( kt, nitrst, numrow, 'sss_m'  , sss_m  ) 
    163             CALL iom_rstput( kt, nitrst, numrow, 'ssh_m'  , ssh_m  ) 
     170            IF( .NOT. cpl_mslp ) CALL iom_rstput( kt, nitrst, numrow, 'ssh_m'  , ssh_m  ) 
    164171            IF( lk_vvl )   CALL iom_rstput( kt, nitrst, numrow, 'e3t_m'  , e3t_m  ) 
    165172            CALL iom_rstput( kt, nitrst, numrow, 'frq_m'  , frq_m  ) 
     
    174181         CALL iom_put( 'sst_m', sst_m ) 
    175182         CALL iom_put( 'sss_m', sss_m ) 
    176          CALL iom_put( 'ssh_m', ssh_m ) 
     183         IF( .NOT. cpl_mslp ) CALL iom_put( 'ssh_m', ssh_m ) 
    177184         IF( lk_vvl )   CALL iom_put( 'e3t_m', e3t_m ) 
    178185         CALL iom_put( 'frq_m', frq_m ) 
     
    180187      ! 
    181188   END SUBROUTINE sbc_ssm 
     189 
     190   SUBROUTINE sbc_ssm_cpl( kt )  
     191      !!---------------------------------------------------------------------  
     192      !!                   ***  ROUTINE sbc_ssm_cpl  ***  
     193      !!                       
     194      !! ** Purpose :   provide ocean surface variable to sea-surface boundary  
     195      !!                condition computation when pressure is read from coupling  
     196      !!                  
     197      !! ** Method  :   The inverse barometer ssh (i.e. ssh associated with Patm)  
     198      !!                is added to ssh_m when ln_apr_dyn = T. Required for sea-ice dynamics.  
     199      !!---------------------------------------------------------------------  
     200      INTEGER, INTENT(in) ::   kt   ! ocean time step  
     201      !  
     202      REAL(wp) ::   zcoef       ! local scalar  
     203      !!---------------------------------------------------------------------  
     204      !  
     205      IF( nn_fsbc == 1 ) THEN                             !      Instantaneous surface fields        !  
     206         !                                                ! ---------------------------------------- !  
     207         IF( ln_apr_dyn ) THEN   ;   ssh_m(:,:) = sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) )  
     208         ELSE                    ;   ssh_m(:,:) = sshn(:,:)  
     209         ENDIF  
     210      ELSE  
     211         !                                                ! ----------------------------------------------- !  
     212         IF( kt == nit000 .AND. .NOT. l_ssm_mean ) THEN   !   Initialisation: 1st time-step, no input means !  
     213            !                                             ! ----------------------------------------------- !  
     214            IF(lwp) WRITE(numout,*)  
     215            IF(lwp) WRITE(numout,*) '~~~~~~~   mean ssh field initialised to instantaneous values'  
     216            zcoef = REAL( nn_fsbc - 1, wp )  
     217            zcoef = REAL( nn_fsbc - 1, wp )  
     218            IF( ln_apr_dyn ) THEN    ;  ssh_m(:,:) = zcoef * ( sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) )  
     219            ELSE                     ;  ssh_m(:,:) = zcoef * sshn(:,:)  
     220            ENDIF  
     221            !                                             ! ---------------------------------------- !  
     222         ELSEIF( MOD( kt - 2 , nn_fsbc ) == 0 ) THEN      !   Initialisation: New mean computation   !  
     223            !                                             ! ---------------------------------------- !  
     224            ssh_m(:,:) = 0.e0  
     225         ENDIF  
     226    
     227         IF( ln_apr_dyn ) THEN   ;   ssh_m(:,:) = ssh_m(:,:) + sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) )  
     228         ELSE                    ;   ssh_m(:,:) = ssh_m(:,:) + sshn(:,:)  
     229         ENDIF  
     230         !                                                ! ---------------------------------------- !  
     231         IF( MOD( kt - 1 , nn_fsbc ) == 0 ) THEN          !   Mean value at each nn_fsbc time-step   !  
     232            !                                             ! ---------------------------------------- !  
     233            zcoef = 1. / REAL( nn_fsbc, wp )  
     234            ssh_m(:,:) = ssh_m(:,:) * zcoef           ! mean SSH [m]  
     235         ENDIF  
     236         !                                                ! ---------------------------------------- !  
     237         IF( lrst_oce ) THEN                              !      Write in the ocean restart file     !  
     238            !                                             ! ---------------------------------------- !  
     239            IF(lwp) WRITE(numout,*)  
     240            IF(lwp) WRITE(numout,*) 'sbc_ssm_cpl : ssh mean field written in ocean restart file ',   &  
     241               &                    'at it= ', kt,' date= ', ndastp  
     242            IF(lwp) WRITE(numout,*) '~~~~~~~'  
     243            CALL iom_rstput( kt, nitrst, numrow, 'ssh_m'  , ssh_m  )  
     244         ENDIF  
     245      ENDIF  
     246      !  
     247      IF( MOD( kt - 1 , nn_fsbc ) == 0 ) THEN          !   Mean value at each nn_fsbc time-step   !  
     248         CALL iom_put( 'ssh_m', ssh_m )  
     249      ENDIF  
     250      !  
     251   END SUBROUTINE sbc_ssm_cpl 
    182252 
    183253   SUBROUTINE sbc_ssm_init 
Note: See TracChangeset for help on using the changeset viewer.