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

Changeset 12461 for NEMO/branches


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

Changes as the original branch updated to vn4.1

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

Legend:

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

    r11715 r12461  
    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) 
    3939    
     40   LOGICAL, PUBLIC ::   cpl_mslp = .FALSE. ! Presure is passed via coupling  
     41 
    4042   TYPE(FLD), ALLOCATABLE, DIMENSION(:) ::   sf_apr   ! structure of input fields (file informations, fields read) 
    4143 
     
    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 
    151  
    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(:,:) 
     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 
    163158         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 ) 
     159      
     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 )  
     180         ENDIF 
    173181         IF( lwxios ) CALL iom_swap(      cxios_context          ) 
    174182      ENDIF 
  • NEMO/branches/UKMO/r12083_cpl-pressure/src/OCE/SBC/sbccpl.F90

    r11715 r12461  
    191191 
    192192   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   alb_oce_mix    ! ocean albedo sent to atmosphere (mix clear/overcast sky) 
    193  
    194    REAL(wp) ::   rpref = 101000._wp   ! reference atmospheric pressure[N/m2]  
    195    REAL(wp) ::   r1_grau              ! = 1.e0 / (grav * rau0)  
    196193 
    197194   INTEGER , ALLOCATABLE, SAVE, DIMENSION(:) ::   nrcvinfo           ! OASIS info argument 
     
    550547      !                                                      ! Mean Sea Level Pressure   !  
    551548      !                                                      ! ------------------------- !  
    552       srcv(jpr_mslp)%clname = 'O_MSLP'     ;   IF( TRIM(sn_rcv_mslp%cldes  ) == 'coupled' )    srcv(jpr_mslp)%laction = .TRUE.  
     549      srcv(jpr_mslp)%clname = 'O_MSLP'   
     550      IF( TRIM(sn_rcv_mslp%cldes  ) == 'coupled' ) THEN   
     551         srcv(jpr_mslp)%laction = .TRUE.   
     552         cpl_mslp = .TRUE.   
     553      ENDIF 
    553554      ! 
    554555      !                                                      ! ------------------------- ! 
     
    10951096      !!---------------------------------------------------------------------- 
    10961097      USE zdf_oce,  ONLY :   ln_zdfswm 
     1098      USE sbcssm ,  ONLY :   sbc_ssm_cpl   
     1099      USE lib_fortran     ! distributed memory computing library 
    10971100      ! 
    10981101      INTEGER, INTENT(in) ::   kt          ! ocean model time step index 
     
    12591262      !                                                      ! ========================= !  
    12601263      IF( srcv(jpr_mslp)%laction ) THEN                    ! UKMO SHELF effect of atmospheric pressure on SSH  
    1261           IF( kt /= nit000 )   ssh_ibb(:,:) = ssh_ib(:,:)    !* Swap of ssh_ib fields  
    1262  
    1263           r1_grau = 1.e0 / (grav * rau0)               !* constant for optimization  
    1264           ssh_ib(:,:) = - ( frcv(jpr_mslp)%z3(:,:,1) - rpref ) * r1_grau    ! equivalent ssh (inverse barometer)  
    1265           apr   (:,:) =     frcv(jpr_mslp)%z3(:,:,1)                         !atmospheric pressure  
     1264          IF( ln_apr_dyn ) THEN  
     1265             IF( kt /= nit000 )   ssh_ibb(:,:) = ssh_ib(:,:)    !* Swap of ssh_ib fields 
    12661266     
    1267           IF( kt == nit000 ) ssh_ibb(:,:) = ssh_ib(:,:)  ! correct this later (read from restart if possible)  
     1267             !                                                  !* update the reference atmospheric pressure (if necessary)   
     1268             IF( ln_ref_apr )  rn_pref = glob_sum( 'sbccpl', frcv(jpr_mslp)%z3(:,:,1) * e1e2t(:,:) ) / tarea  
     1269      
     1270             ssh_ib(:,:) = - ( frcv(jpr_mslp)%z3(:,:,1) - rn_pref ) * r1_grau  ! equivalent ssh (inverse barometer)   
     1271             apr   (:,:) =     frcv(jpr_mslp)%z3(:,:,1)                        !atmospheric pressure   
     1272             !  
     1273             CALL iom_put( "ssh_ib", ssh_ib )                                  !* output the inverse barometer ssh  
     1274             !                                         ! ---------------------------------------- !   
     1275             IF( kt == nit000 ) THEN                   !   set the forcing field at nit000 - 1    !   
     1276                !                                      ! ---------------------------------------- !   
     1277                !* Restart: read in restart file   
     1278                IF( ln_rstart .AND. iom_varid( numror, 'ssh_ibb', ldstop = .FALSE. ) > 0 ) THEN   
     1279                   IF(lwp) WRITE(numout,*) 'sbc_cpl:   ssh_ibb read in the restart file'   
     1280                   CALL iom_get( numror, jpdom_autoglo, 'ssh_ibb', ssh_ibb )   ! before inv. barometer ssh   
     1281                ELSE                                         !* no restart: set from nit000 values   
     1282                   IF(lwp) WRITE(numout,*) 'sbc_cpl:   ssh_ibb set to nit000 values'   
     1283                   ssh_ibb(:,:) = ssh_ib(:,:)   
     1284                ENDIF   
     1285             ENDIF   
     1286             !                                         ! ---------------------------------------- !   
     1287             IF( lrst_oce ) THEN                       ! Write in the ocean restart file     !   
     1288                !                                      ! ---------------------------------------- !   
     1289                IF(lwp) WRITE(numout,*)   
     1290                IF(lwp) WRITE(numout,*) 'sbc_cpl : ssh_ib written in ocean restart file at it= ', kt,' date= ', ndastp   
     1291                IF(lwp) WRITE(numout,*) '~~~~'   
     1292                CALL iom_rstput( kt, nitrst, numrow, 'ssh_ibb' , ssh_ib )   
     1293             ENDIF   
     1294          ENDIF  
     1295       
     1296          ! Update mean ssh   
     1297          IF( nn_components /= jp_iam_sas ) CALL sbc_ssm_cpl( kt ) 
    12681298      END IF  
    12691299      ! 
  • NEMO/branches/UKMO/r12083_cpl-pressure/src/OCE/SBC/sbcmod.F90

    r11715 r12461  
    379379      !!              - updte the ice fraction : fr_i 
    380380      !!---------------------------------------------------------------------- 
     381      USE sbcapr, ONLY: sbc_apr  
     382      USE bdydta, ONLY: bdy_dta  
     383      ! 
    381384      INTEGER, INTENT(in) ::   kt   ! ocean time step 
    382385      ! 
     
    411414      !                                            !        forcing field computation         ! 
    412415      !                                            ! ---------------------------------------- ! 
     416      IF( ln_apr_dyn ) CALL sbc_apr( kt )                ! atmospheric pressure provided at kt+0.5*nn_fsbc  
     417                                                         ! (caution called before sbc_ssm) 
    413418      ! 
    414419      ll_sas = nn_components == jp_iam_sas               ! component flags 
     
    435440      ! 
    436441      IF( ln_mixcpl )          CALL sbc_cpl_rcv   ( kt, nn_fsbc, nn_ice )   ! forced-coupled mixed formulation after forcing 
     442      IF( ln_bdy )             CALL bdy_dta ( kt, kt_offset=+1 )            ! update dynamic & tracer data at open boundaries  
     443 
     444! (caution called after sbc_ssm[_cpl] and before ice) 
    437445      ! 
    438446      IF ( ln_wave .AND. (ln_tauwoc .OR. ln_tauw) ) CALL sbc_wstress( )      ! Wind stress provided by waves  
  • 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 
  • NEMO/branches/UKMO/r12083_cpl-pressure/src/OCE/step.F90

    r11715 r12461  
    111111      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    112112      IF( ln_tide    )   CALL sbc_tide( kstp )                   ! update tide potential 
    113       IF( ln_apr_dyn )   CALL sbc_apr ( kstp )                   ! atmospheric pressure (NB: call before bdy_dta which needs ssh_ib)  
    114       IF( ln_bdy     )   CALL bdy_dta ( kstp, kt_offset = +1 )   ! update dynamic & tracer data at open boundaries 
    115113                         CALL sbc     ( kstp )                   ! Sea Boundary Condition (including sea-ice) 
    116114 
Note: See TracChangeset for help on using the changeset viewer.