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 15423 – NEMO

Changeset 15423


Ignore:
Timestamp:
2021-10-21T11:54:46+02:00 (2 years ago)
Author:
jcastill
Message:

Changes compiling

Location:
NEMO/branches/UKMO/r14075_cpl-pressure/src/OCE
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/UKMO/r14075_cpl-pressure/src/OCE/SBC/sbcapr.F90

    r14075 r15423  
    1616   USE fldread         ! read input fields 
    1717   USE in_out_manager  ! I/O manager 
    18    USE lib_fortran     ! distribued memory computing library 
     18   USE lib_fortran     ! distributed memory computing library 
    1919   USE iom             ! IOM library 
    2020   USE lib_mpp         ! MPP library 
     
    2929   LOGICAL, PUBLIC ::   ln_apr_obc = .false.   !: inverse barometer added to OBC ssh data  
    3030   LOGICAL, PUBLIC ::   ln_ref_apr             !: ref. pressure: global mean Patm (F) or a constant (F) 
    31    REAL(wp)        ::   rn_pref                !  reference atmospheric pressure   [N/m2] 
     31   REAL(wp),PUBLIC ::   rn_pref                !  reference atmospheric pressure   [N/m2] 
    3232 
    3333   REAL(wp), ALLOCATABLE, SAVE, PUBLIC, DIMENSION(:,:) ::   ssh_ib    ! Inverse barometer now    sea surface height   [m] 
     
    3535   REAL(wp), ALLOCATABLE, SAVE, PUBLIC, DIMENSION(:,:) ::   apr       ! atmospheric pressure at kt                 [N/m2] 
    3636    
    37    REAL(wp) ::   tarea                ! whole domain mean masked ocean surface 
    38    REAL(wp) ::   r1_grau              ! = 1.e0 / (grav * rau0) 
     37   REAL(wp), PUBLIC ::   tarea                 ! whole domain mean masked ocean surface  
     38   REAL(wp), PUBLIC ::   r1_grau               ! = 1.e0 / (grav * rau0) 
     39 
     40   LOGICAL, PUBLIC ::   cpl_mslp = .FALSE. ! Presure is passed via coupling 
    3941    
    4042   TYPE(FLD), ALLOCATABLE, DIMENSION(:) ::   sf_apr   ! structure of input fields (file informations, fields read) 
     
    7880      IF(lwm) WRITE ( numond, namsbc_apr ) 
    7981      ! 
    80       ALLOCATE( sf_apr(1), STAT=ierror )           !* allocate and fill sf_sst (forcing structure) with sn_sst 
    81       IF( ierror > 0 )   CALL ctl_stop( 'STOP', 'sbc_apr: unable to allocate sf_apr structure' ) 
    82       ! 
    83       CALL fld_fill( sf_apr, (/ sn_apr /), cn_dir, 'sbc_apr', 'Atmospheric pressure ', 'namsbc_apr' ) 
     82      IF( .NOT. cpl_mslp ) THEN  
     83         ALLOCATE( sf_apr(1), STAT=ierror )           !* allocate and fill sf_sst (forcing structure) with sn_sst  
     84         IF( ierror > 0 )   CALL ctl_stop( 'STOP', 'sbc_apr: unable to allocate sf_apr structure' )  
     85         !  
     86         CALL fld_fill( sf_apr, (/ sn_apr /), cn_dir, 'sbc_apr', 'Atmospheric pressure ', 'namsbc_apr' ) 
    8487                                ALLOCATE( sf_apr(1)%fnow(jpi,jpj,1)   ) 
    85       IF( sn_apr%ln_tint )   ALLOCATE( sf_apr(1)%fdta(jpi,jpj,1,2) ) 
    86                              ALLOCATE( ssh_ib(jpi,jpj) , ssh_ibb(jpi,jpj) ) 
    87                              ALLOCATE( apr (jpi,jpj) ) 
     88         IF( sn_apr%ln_tint )   ALLOCATE( sf_apr(1)%fdta(jpi,jpj,1,2) )  
     89      ENDIF  
     90                                ALLOCATE( ssh_ib(jpi,jpj) , ssh_ibb(jpi,jpj) )  
     91                                ALLOCATE( apr (jpi,jpj) ) 
    8892      ! 
    8993      IF( lwp )THEN                                 !* control print 
    9094         WRITE(numout,*) 
    91          WRITE(numout,*) '   Namelist namsbc_apr : Atmospheric PRessure as extrenal forcing' 
     95         IF( cpl_mslp ) THEN  
     96            WRITE(numout,*) '   Namelist namsbc_apr : Atmospheric PRessure as extrenal forcing'  
     97         ELSE    
     98            WRITE(numout,*) '   Namelist namsbc_apr : Atmospheric Pressure as extrenal forcing'    
     99         ENDIF 
    92100         WRITE(numout,*) '      ref. pressure: global mean Patm (T) or a constant (F)  ln_ref_apr = ', ln_ref_apr 
    93101      ENDIF 
     
    132140      !!---------------------------------------------------------------------- 
    133141 
    134       !                                         ! ========================== ! 
    135       IF( MOD( kt-1, nn_fsbc ) == 0 ) THEN      !    At each sbc time-step   ! 
    136          !                                      ! ===========+++============ ! 
    137          ! 
    138          IF( kt /= nit000 )   ssh_ibb(:,:) = ssh_ib(:,:)    !* Swap of ssh_ib fields 
    139          ! 
    140          CALL fld_read( kt, nn_fsbc, sf_apr )               !* input Patm provided at kt + nn_fsbc/2 
    141          ! 
    142          !                                                  !* update the reference atmospheric pressure (if necessary) 
    143          IF( ln_ref_apr )   rn_pref = glob_sum( 'sbcapr', sf_apr(1)%fnow(:,:,1) * e1e2t(:,:) ) / tarea 
    144          ! 
    145          !                                                  !* Patm related forcing at kt 
    146          ssh_ib(:,:) = - ( sf_apr(1)%fnow(:,:,1) - rn_pref ) * r1_grau    ! equivalent ssh (inverse barometer) 
    147          apr   (:,:) =     sf_apr(1)%fnow(:,:,1)                        ! atmospheric pressure 
    148          ! 
    149          CALL iom_put( "ssh_ib", ssh_ib )                   !* output the inverse barometer ssh 
    150       ENDIF 
     142      IF( .NOT. cpl_mslp ) THEN   
     143                                                   ! ========================== !   
     144         IF( MOD( kt-1, nn_fsbc ) == 0 ) THEN      !    At each sbc time-step   !   
     145            !                                      ! ===========+++============ !  
     146            IF( kt /= nit000 )   ssh_ibb(:,:) = ssh_ib(:,:)    !* Swap of ssh_ib fields   
     147            !   
     148            CALL fld_read( kt, nn_fsbc, sf_apr )               !* input Patm provided at kt + nn_fsbc/2   
     149            !   
     150            !                                                  !* update the reference atmospheric pressure (if necessary)   
     151            IF( ln_ref_apr )   rn_pref = glob_sum( 'sbcapr', sf_apr(1)%fnow(:,:,1) * e1e2t(:,:) ) / tarea   
     152            !   
     153            !                                                  !* Patm related forcing at kt   
     154            ssh_ib(:,:) = - ( sf_apr(1)%fnow(:,:,1) - rn_pref ) * r1_grau    ! equivalent ssh (inverse barometer)   
     155            apr   (:,:) =     sf_apr(1)%fnow(:,:,1)                          ! atmospheric pressure   
     156            !   
     157            CALL iom_put( "ssh_ib", ssh_ib )                   !* output the inverse barometer ssh  
     158         ENDIF 
    151159 
    152       !                                         ! ---------------------------------------- ! 
    153       IF( kt == nit000 ) THEN                   !   set the forcing field at nit000 - 1    ! 
    154          !                                      ! ---------------------------------------- ! 
    155          !                                            !* Restart: read in restart file 
    156          IF( ln_rstart .AND. iom_varid( numror, 'ssh_ibb', ldstop = .FALSE. ) > 0 ) THEN  
    157             IF(lwp) WRITE(numout,*) 'sbc_apr:   ssh_ibb read in the restart file' 
    158             CALL iom_get( numror, jpdom_autoglo, 'ssh_ibb', ssh_ibb, ldxios = lrxios )   ! before inv. barometer ssh 
    159             ! 
    160          ELSE                                         !* no restart: set from nit000 values 
    161             IF(lwp) WRITE(numout,*) 'sbc_apr:   ssh_ibb set to nit000 values' 
    162             ssh_ibb(:,:) = ssh_ib(:,:) 
     160         !                                         ! ---------------------------------------- !   
     161         IF( kt == nit000 ) THEN                   !   set the forcing field at nit000 - 1    !   
     162            !                                      ! ---------------------------------------- !   
     163            !                                            !* Restart: read in restart file   
     164            IF( ln_rstart .AND. iom_varid( numror, 'ssh_ibb', ldstop = .FALSE. ) > 0 ) THEN    
     165               IF(lwp) WRITE(numout,*) 'sbc_apr:   ssh_ibb read in the restart file'   
     166               CALL iom_get( numror, jpdom_autoglo, 'ssh_ibb', ssh_ibb )   ! before inv. barometer ssh   
     167               !   
     168            ELSE                                         !* no restart: set from nit000 values   
     169               IF(lwp) WRITE(numout,*) 'sbc_apr:   ssh_ibb set to nit000 values'   
     170               ssh_ibb(:,:) = ssh_ib(:,:)   
     171            ENDIF   
     172         ENDIF   
     173         !                                         ! ---------------------------------------- !   
     174         IF( lrst_oce ) THEN                       !      Write in the ocean restart file     !   
     175            !                                      ! ---------------------------------------- !   
     176            IF(lwp) WRITE(numout,*)   
     177            IF(lwp) WRITE(numout,*) 'sbc_apr : ssh_ib written in ocean restart file at it= ', kt,' date= ', ndastp   
     178            IF(lwp) WRITE(numout,*) '~~~~'   
     179            CALL iom_rstput( kt, nitrst, numrow, 'ssh_ibb' , ssh_ib )   
    163180         ENDIF 
    164       ENDIF 
    165       !                                         ! ---------------------------------------- ! 
    166       IF( lrst_oce ) THEN                       !      Write in the ocean restart file     ! 
    167          !                                      ! ---------------------------------------- ! 
    168          IF(lwp) WRITE(numout,*) 
    169          IF(lwp) WRITE(numout,*) 'sbc_apr : ssh_ib written in ocean restart file at it= ', kt,' date= ', ndastp 
    170          IF(lwp) WRITE(numout,*) '~~~~' 
    171          IF( lwxios ) CALL iom_swap(      cwxios_context          ) 
    172          CALL iom_rstput( kt, nitrst, numrow, 'ssh_ibb' , ssh_ib, ldxios = lwxios ) 
    173181         IF( lwxios ) CALL iom_swap(      cxios_context          ) 
    174182      ENDIF 
  • NEMO/branches/UKMO/r14075_cpl-pressure/src/OCE/SBC/sbccpl.F90

    r14075 r15423  
    209209#endif 
    210210 
    211    REAL(wp) ::   rpref = 101000._wp   ! reference atmospheric pressure[N/m2]  
    212    REAL(wp) ::   r1_grau              ! = 1.e0 / (grav * rau0)  
    213  
    214211   INTEGER , ALLOCATABLE, SAVE, DIMENSION(:) ::   nrcvinfo           ! OASIS info argument 
    215212 
     
    573570      !                                                      ! Mean Sea Level Pressure   !  
    574571      !                                                      ! ------------------------- !  
    575       srcv(jpr_mslp)%clname = 'O_MSLP'     ;   IF( TRIM(sn_rcv_mslp%cldes  ) == 'coupled' )    srcv(jpr_mslp)%laction = .TRUE.  
     572      srcv(jpr_mslp)%clname = 'O_MSLP'    
     573      IF( TRIM(sn_rcv_mslp%cldes  ) == 'coupled' ) THEN    
     574         srcv(jpr_mslp)%laction = .TRUE.    
     575         cpl_mslp = .TRUE.    
     576      ENDIF 
    576577      ! 
    577578      !                                                      ! ------------------------- ! 
     
    11221123      !!---------------------------------------------------------------------- 
    11231124      USE zdf_oce,  ONLY :   ln_zdfswm 
     1125      USE sbcssm ,  ONLY :   sbc_ssm_cpl    
     1126      USE lib_fortran     ! distributed memory computing library 
    11241127      ! 
    11251128      INTEGER, INTENT(in) ::   kt          ! ocean model time step index 
     
    12941297      !                                                      ! ========================= !  
    12951298      IF( srcv(jpr_mslp)%laction ) THEN                    ! UKMO SHELF effect of atmospheric pressure on SSH  
    1296           IF( kt /= nit000 )   ssh_ibb(:,:) = ssh_ib(:,:)    !* Swap of ssh_ib fields  
    1297  
    1298           r1_grau = 1.e0 / (grav * rau0)               !* constant for optimization  
    1299           ssh_ib(:,:) = - ( frcv(jpr_mslp)%z3(:,:,1) - rpref ) * r1_grau    ! equivalent ssh (inverse barometer)  
    1300           apr   (:,:) =     frcv(jpr_mslp)%z3(:,:,1)                         !atmospheric pressure  
     1299          IF( ln_apr_dyn ) THEN   
     1300             IF( kt /= nit000 )   ssh_ibb(:,:) = ssh_ib(:,:)   !* Swap of ssh_ib fields 
    13011301     
    1302           IF( kt == nit000 ) ssh_ibb(:,:) = ssh_ib(:,:)  ! correct this later (read from restart if possible)  
     1302             !                                                  !* update the reference atmospheric pressure (if necessary)    
     1303             IF( ln_ref_apr )  rn_pref = glob_sum( 'sbccpl', frcv(jpr_mslp)%z3(:,:,1) * e1e2t(:,:) ) / tarea   
     1304 
     1305             ssh_ib(:,:) = - ( frcv(jpr_mslp)%z3(:,:,1) - rn_pref ) * r1_grau  ! equivalent ssh (inverse barometer)    
     1306             apr   (:,:) =     frcv(jpr_mslp)%z3(:,:,1)                        !atmospheric pressure    
     1307             !   
     1308             CALL iom_put( "ssh_ib", ssh_ib )                                  !* output the inverse barometer ssh   
     1309             !                                         ! ---------------------------------------- !    
     1310             IF( kt == nit000 ) THEN                   !   set the forcing field at nit000 - 1    !    
     1311                !                                      ! ---------------------------------------- !    
     1312                !* Restart: read in restart file    
     1313                IF( ln_rstart .AND. iom_varid( numror, 'ssh_ibb', ldstop = .FALSE. ) > 0 ) THEN    
     1314                   IF(lwp) WRITE(numout,*) 'sbc_cpl:   ssh_ibb read in the restart file'    
     1315                   CALL iom_get( numror, jpdom_autoglo, 'ssh_ibb', ssh_ibb )   ! before inv. barometer ssh    
     1316                ELSE                                         !* no restart: set from nit000 values    
     1317                   IF(lwp) WRITE(numout,*) 'sbc_cpl:   ssh_ibb set to nit000 values'    
     1318                   ssh_ibb(:,:) = ssh_ib(:,:)    
     1319                ENDIF    
     1320             ENDIF    
     1321             !                                         ! ---------------------------------------- !    
     1322             IF( lrst_oce ) THEN                       !      Write in the ocean restart file     !    
     1323                !                                      ! ---------------------------------------- !    
     1324                IF(lwp) WRITE(numout,*)    
     1325                IF(lwp) WRITE(numout,*) 'sbc_cpl : ssh_ib written in ocean restart file at it= ', kt,' date= ', ndastp    
     1326                IF(lwp) WRITE(numout,*) '~~~~'    
     1327                CALL iom_rstput( kt, nitrst, numrow, 'ssh_ibb' , ssh_ib )    
     1328             ENDIF    
     1329           ENDIF   
     1330         
     1331           ! Update mean ssh    
     1332           IF( nn_components /= jp_iam_sas ) CALL sbc_ssm_cpl( kt ) 
    13031333      END IF  
    13041334      ! 
  • NEMO/branches/UKMO/r14075_cpl-pressure/src/OCE/SBC/sbcmod.F90

    r14075 r15423  
    391391      !!              - updte the ice fraction : fr_i 
    392392      !!---------------------------------------------------------------------- 
     393      USE sbcapr, ONLY: sbc_apr   
     394      USE bdydta, ONLY: bdy_dta   
     395      ! 
    393396      INTEGER, INTENT(in) ::   kt   ! ocean time step 
    394397      ! 
     
    423426      !                                            !        forcing field computation         ! 
    424427      !                                            ! ---------------------------------------- ! 
     428      IF( ln_apr_dyn ) CALL sbc_apr( kt )                ! atmospheric pressure provided at kt+0.5*nn_fsbc   
     429                                                         ! (caution called before sbc_ssm) 
    425430      ! 
    426431      ll_sas = nn_components == jp_iam_sas               ! component flags 
     
    443448      CASE( jp_purecpl )   ;   CALL sbc_cpl_rcv   ( kt, nn_fsbc, nn_ice )   ! pure coupled formulation 
    444449      CASE( jp_none    ) 
    445          IF( ll_opa    )      CALL sbc_cpl_rcv   ( kt, nn_fsbc, nn_ice )   ! OPA-SAS coupling: OPA receiving fields from SAS 
     450         IF( .NOT. ln_mixcpl ) CALL sbc_cpl_rcv   ( kt, nn_fsbc, nn_ice )   ! OPA-SAS coupling: OPA receiving fields from SAS 
    446451      END SELECT 
    447452      ! 
    448       IF( ln_mixcpl )          CALL sbc_cpl_rcv   ( kt, nn_fsbc, nn_ice )   ! forced-coupled mixed formulation after forcing 
     453      IF( ln_mixcpl .OR. ( ln_wave .AND. nsbc .NE. jp_purecpl .AND. nsbc .NE. jp_none ) ) &  
     454                               CALL sbc_cpl_rcv   ( kt, nn_fsbc, nn_ice )   ! forced-coupled mixed formulation after forcing  
     455      IF( ln_bdy )             CALL bdy_dta ( kt, kt_offset=+1 )            ! update dynamic & tracer data at open boundaries   
     456  
     457! (caution called after sbc_ssm[_cpl] and before ice) 
    449458      ! 
    450459      IF ( ln_wave .AND. (ln_tauwoc .OR. ln_tauw) ) CALL sbc_wstress( )      ! Wind stress provided by waves  
  • NEMO/branches/UKMO/r14075_cpl-pressure/src/OCE/SBC/sbcssm.F90

    r14075 r15423  
    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  ) 
     
    183190   END SUBROUTINE sbc_ssm 
    184191 
     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 
    185254 
    186255   SUBROUTINE sbc_ssm_init 
  • NEMO/branches/UKMO/r14075_cpl-pressure/src/OCE/step.F90

    r14075 r15423  
    109109      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    110110      IF( ln_tide    )   CALL sbc_tide( kstp )                   ! update tide potential 
    111       IF( ln_apr_dyn )   CALL sbc_apr ( kstp )                   ! atmospheric pressure (NB: call before bdy_dta which needs ssh_ib)  
    112       IF( ln_bdy     )   CALL bdy_dta ( kstp, kt_offset = +1 )   ! update dynamic & tracer data at open boundaries 
    113111                         CALL sbc     ( kstp )                   ! Sea Boundary Condition (including sea-ice) 
    114112 
Note: See TracChangeset for help on using the changeset viewer.