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 3607 for branches/2012/dev_NOC_2012_rev3555/NEMOGCM/NEMO/OPA_SRC/SBC/sbcssm.F90 – NEMO

Ignore:
Timestamp:
2012-11-19T16:24:13+01:00 (11 years ago)
Author:
acc
Message:

Branch dev_NOC_2012_rev3555. #1006. Step 2: Add changes from the 2012/dev_r3322_NOCS09_SAS (Stand Alone Surface module) branch

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2012/dev_NOC_2012_rev3555/NEMOGCM/NEMO/OPA_SRC/SBC/sbcssm.F90

    r3294 r3607  
    2727   PUBLIC   sbc_ssm    ! routine called by step.F90 
    2828    
     29   LOGICAL, SAVE  ::   l_ssm_mean = .FALSE.       ! keep track of whether means have been read 
     30                                                  ! from restart file 
     31 
    2932   !! * Substitutions 
    3033#  include "domzgr_substitute.h90" 
     
    5457      !!--------------------------------------------------------------------- 
    5558      !                                                   ! ---------------------------------------- ! 
    56       IF( nn_fsbc == 1 ) THEN                             !      Instantaneous surface fields        ! 
     59      IF( nn_fsbc == 1 ) THEN                             !   Instantaneous surface fields        ! 
    5760         !                                                ! ---------------------------------------- ! 
    58          IF( kt == nit000 ) THEN 
    59             IF(lwp) WRITE(numout,*) 
    60             IF(lwp) WRITE(numout,*) 'sbc_ssm : sea surface mean fields, nn_fsbc=1 : instantaneous values' 
    61             IF(lwp) WRITE(numout,*) '~~~~~~~ ' 
    62          ENDIF 
    63          ! 
    6461         ssu_m(:,:) = ub(:,:,1) 
    6562         ssv_m(:,:) = vb(:,:,1) 
     
    7370         ! 
    7471      ELSE 
    75          !                                                ! ---------------------------------------- ! 
    76          IF( kt == nit000) THEN                           !       Initialisation: 1st time-step      ! 
    77             !                                             ! ---------------------------------------- ! 
     72         !                                                ! ----------------------------------------------- ! 
     73         IF( kt == nit000 && .NOT. l_ssm_mean ) THEN      !   Initialisation: 1st time-step, no input means ! 
     74            !                                             ! ----------------------------------------------- ! 
    7875            IF(lwp) WRITE(numout,*) 
    79             IF(lwp) WRITE(numout,*) 'sbc_ssm : sea surface mean fields' 
    80             ! 
    81             IF( ln_rstart .AND. iom_varid( numror, 'nn_fsbc', ldstop = .FALSE. ) > 0 ) THEN  
    82                CALL iom_get( numror               , 'nn_fsbc', zf_sbc )   ! sbc frequency of previous run 
    83                CALL iom_get( numror, jpdom_autoglo, 'ssu_m'  , ssu_m  )   ! sea surface mean velocity    (T-point) 
    84                CALL iom_get( numror, jpdom_autoglo, 'ssv_m'  , ssv_m  )   !   "         "    velocity    (V-point) 
    85                CALL iom_get( numror, jpdom_autoglo, 'sst_m'  , sst_m  )   !   "         "    temperature (T-point) 
    86                CALL iom_get( numror, jpdom_autoglo, 'sss_m'  , sss_m  )   !   "         "    salinity    (T-point) 
    87                CALL iom_get( numror, jpdom_autoglo, 'ssh_m'  , ssh_m  )   !   "         "    height      (T-point) 
    88                ! 
    89                IF( zf_sbc /= REAL( nn_fsbc, wp ) ) THEN      ! nn_fsbc has changed between 2 runs 
    90                   IF(lwp) WRITE(numout,*) '~~~~~~~   restart with a change in the frequency of mean ',   & 
    91                      &                    'from ', zf_sbc, ' to ', nn_fsbc 
    92                   zcoef = REAL( nn_fsbc - 1, wp ) / zf_sbc 
    93                   ssu_m(:,:) = zcoef * ssu_m(:,:) 
    94                   ssv_m(:,:) = zcoef * ssv_m(:,:) 
    95                   sst_m(:,:) = zcoef * sst_m(:,:) 
    96                   sss_m(:,:) = zcoef * sss_m(:,:) 
    97                   ssh_m(:,:) = zcoef * ssh_m(:,:) 
    98                ELSE 
    99                   IF(lwp) WRITE(numout,*) '~~~~~~~   mean fields read in the ocean restart file' 
    100                ENDIF 
    101             ELSE 
    102                IF(lwp) WRITE(numout,*) '~~~~~~~   mean fields initialised to instantaneous values' 
    103                zcoef = REAL( nn_fsbc - 1, wp ) 
    104                ssu_m(:,:) = zcoef * ub(:,:,1) 
    105                ssv_m(:,:) = zcoef * vb(:,:,1) 
    106                sst_m(:,:) = zcoef * tsn(:,:,1,jp_tem) 
    107                sss_m(:,:) = zcoef * tsn(:,:,1,jp_sal) 
    108                !                          ! removed inverse barometer ssh when Patm forcing is used  
    109                IF( ln_apr_dyn ) THEN   ;   ssh_m(:,:) = zcoef * ( sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) ) 
    110                ELSE                    ;   ssh_m(:,:) = zcoef *   sshn(:,:) 
    111                ENDIF 
    112  
     76            IF(lwp) WRITE(numout,*) '~~~~~~~   mean fields initialised to instantaneous values' 
     77            zcoef = REAL( nn_fsbc - 1, wp ) 
     78            ssu_m(:,:) = zcoef * ub(:,:,1) 
     79            ssv_m(:,:) = zcoef * vb(:,:,1) 
     80            sst_m(:,:) = zcoef * tsn(:,:,1,jp_tem) 
     81            sss_m(:,:) = zcoef * tsn(:,:,1,jp_sal) 
     82            !                          ! removed inverse barometer ssh when Patm forcing is used  
     83            IF( ln_apr_dyn ) THEN   ;   ssh_m(:,:) = zcoef * ( sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) ) 
     84            ELSE                    ;   ssh_m(:,:) = zcoef *   sshn(:,:) 
    11385            ENDIF 
    11486            !                                             ! ---------------------------------------- ! 
     
    165137   END SUBROUTINE sbc_ssm 
    166138 
     139   SUBROUTINE sbc_ssm_init 
     140      !!---------------------------------------------------------------------- 
     141      !!                  ***  ROUTINE sbc_ssm_init  *** 
     142      !! 
     143      !! ** Purpose :   Initialisation of the sbc data 
     144      !! 
     145      !! ** Action  : - read parameters 
     146      !!---------------------------------------------------------------------- 
     147      REAL(wp) ::   zcoef               ! local scalar 
     148      !!---------------------------------------------------------------------- 
     149 
     150      IF( nn_fsbc == 1 ) THEN 
     151         ! 
     152         IF(lwp) WRITE(numout,*) 
     153         IF(lwp) WRITE(numout,*) 'sbc_ssm : sea surface mean fields, nn_fsbc=1 : instantaneous values' 
     154         IF(lwp) WRITE(numout,*) '~~~~~~~ ' 
     155         ! 
     156      ELSE 
     157         !                
     158         IF(lwp) WRITE(numout,*) 
     159         IF(lwp) WRITE(numout,*) 'sbc_ssm : sea surface mean fields' 
     160         IF(lwp) WRITE(numout,*) '~~~~~~~ ' 
     161         ! 
     162         IF( ln_rstart .AND. iom_varid( numror, 'nn_fsbc', ldstop = .FALSE. ) > 0 ) THEN 
     163            l_ssm_mean = .TRUE. 
     164            CALL iom_get( numror               , 'nn_fsbc', zf_sbc )   ! sbc frequency of previous run 
     165            CALL iom_get( numror, jpdom_autoglo, 'ssu_m'  , ssu_m  )   ! sea surface mean velocity    (T-point) 
     166            CALL iom_get( numror, jpdom_autoglo, 'ssv_m'  , ssv_m  )   !   "         "    velocity    (V-point) 
     167            CALL iom_get( numror, jpdom_autoglo, 'sst_m'  , sst_m  )   !   "         "    temperature (T-point) 
     168            CALL iom_get( numror, jpdom_autoglo, 'sss_m'  , sss_m  )   !   "         "    salinity    (T-point) 
     169            CALL iom_get( numror, jpdom_autoglo, 'ssh_m'  , ssh_m  )   !   "         "    height      (T-point) 
     170            ! 
     171            IF( zf_sbc /= REAL( nn_fsbc, wp ) ) THEN      ! nn_fsbc has changed between 2 runs 
     172               IF(lwp) WRITE(numout,*) '~~~~~~~   restart with a change in the frequency of mean ',   & 
     173                  &                    'from ', zf_sbc, ' to ', nn_fsbc  
     174               zcoef = REAL( nn_fsbc - 1, wp ) / zf_sbc  
     175               ssu_m(:,:) = zcoef * ssu_m(:,:)  
     176               ssv_m(:,:) = zcoef * ssv_m(:,:) 
     177               sst_m(:,:) = zcoef * sst_m(:,:) 
     178               sss_m(:,:) = zcoef * sss_m(:,:) 
     179               ssh_m(:,:) = zcoef * ssh_m(:,:) 
     180            ELSE 
     181               IF(lwp) WRITE(numout,*) '~~~~~~~   mean fields read in the ocean restart file' 
     182            ENDIF 
     183         ENDIF 
     184      ENDIF 
     185      ! 
     186   END SUBROUTINE sbc_ssm_init 
     187 
    167188   !!====================================================================== 
    168189END MODULE sbcssm 
Note: See TracChangeset for help on using the changeset viewer.