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 11394 for branches/UKMO/dev_r5518_GO6_package_FOAMv14_STOPACK/NEMOGCM/NEMO/OPA_SRC/step.F90 – NEMO

Ignore:
Timestamp:
2019-08-02T15:14:02+02:00 (5 years ago)
Author:
mattmartin
Message:

First implementation of STOPACK in the GO6 package branch.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/dev_r5518_GO6_package_FOAMv14_STOPACK/NEMOGCM/NEMO/OPA_SRC/step.F90

    r9288 r11394  
    118118         CALL lbc_lnk( tsb(:,:,:,tind), 'T', 1. ) 
    119119      END DO 
    120  
     120       
     121      IF( ln_stopack )   CALL stopack_pert( kstp ) 
    121122                         CALL sbc    ( kstp )         ! Sea Boundary Condition (including sea-ice) 
    122123                                                      ! clem: moved here for bdy ice purpose 
     124 
    123125      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    124126      ! Update stochastic parameters and random T/S fluctuations 
    125127      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    126        IF( ln_sto_eos ) CALL sto_par( kstp )          ! Stochastic parameters 
    127        IF( ln_sto_eos ) CALL sto_pts( tsn  )          ! Random T/S fluctuations 
     128 
     129      IF( ln_sto_eos )   CALL sto_par( kstp )          ! Stochastic parameters 
     130      IF( ln_sto_eos )   CALL sto_pts( tsn  )          ! Random T/S fluctuations 
     131      IF( ln_skeb  )     CALL skeb_comp( kstp ) 
    128132 
    129133      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
     
    149153      ENDIF 
    150154      IF( ln_rnf_mouth ) THEN                         ! increase diffusivity at rivers mouths 
    151          DO jk = 2, nkrnf   ;   avt(:,:,jk) = avt(:,:,jk) + 2.e0 * rn_avt_rnf * rnfmsk(:,:) * tmask(:,:,jk)   ;   END DO 
     155         IF ( nn_spp_arnf .GT. 0 ) THEN 
     156              rn_avt_rnf0 = rn_avt_rnf 
     157              CALL spp_gen( kstp, rn_avt_rnf0,nn_spp_arnf,rn_arnf_sd,jk_spp_arnf ) 
     158         ENDIF 
     159         DO jk = 2, nkrnf   ;   avt(:,:,jk) = avt(:,:,jk) + 2.e0 * rn_avt_rnf0(:,:) * rnfmsk(:,:) * tmask(:,:,jk)   ;   END DO 
    152160      ENDIF 
    153161      IF( ln_zdfevd  )   CALL zdf_evd( kstp )         ! enhanced vertical eddy diffusivity 
     
    163171      IF( lrst_oce .AND. lk_zdftke )   CALL tke_rst( kstp, 'WRITE' ) 
    164172      IF( lrst_oce .AND. lk_zdfgls )   CALL gls_rst( kstp, 'WRITE' ) 
     173      IF( lrst_oce .AND. ln_stopack)   CALL stopack_rst( kstp, 'WRITE' ) 
    165174      ! 
    166175      !  LATERAL  PHYSICS 
    167176      ! 
    168177      IF( lk_ldfslp ) THEN                            ! slope of lateral mixing 
    169          CALL eos( tsb, rhd, gdept_0(:,:,:) )               ! before in situ density 
     178         IF(ln_sto_eos ) CALL sto_pts( tsn )          ! Random T/S fluctuations 
     179                         CALL eos( tsb, rhd, gdept_0(:,:,:) )               ! before in situ density 
    170180         IF( ln_zps .AND. .NOT. ln_isfcav)                               & 
    171181            &            CALL zps_hde    ( kstp, jpts, tsb, gtsu, gtsv,  &  ! Partial steps: before horizontal gradient 
     
    202212          ! Note that the computation of vertical velocity above, hence "after" sea level 
    203213          ! is necessary to compute momentum advection for the rhs of barotropic loop: 
    204             CALL eos    ( tsn, rhd, rhop, fsdept_n(:,:,:) ) ! now in situ density for hpg computation 
     214            IF(ln_sto_eos ) CALL sto_pts( tsn )                             ! Random T/S fluctuations 
     215                            CALL eos    ( tsn, rhd, rhop, fsdept_n(:,:,:) ) ! now in situ density for hpg computation 
    205216            IF( ln_zps .AND. .NOT. ln_isfcav)                               & 
    206217               &            CALL zps_hde    ( kstp, jpts, tsn, gtsu, gtsv,  &    ! Partial steps: before horizontal gradient 
     
    214225                                  va(:,:,:) = 0.e0 
    215226          IF(  lk_asminc .AND. ln_asmiau .AND. & 
    216              & ln_dyninc       )  CALL dyn_asm_inc  ( kstp )   ! apply dynamics assimilation increment 
    217           IF( ln_neptsimp )       CALL dyn_nept_cor ( kstp )   ! subtract Neptune velocities (simplified) 
    218           IF( lk_bdy           )  CALL bdy_dyn3d_dmp( kstp )   ! bdy damping trends 
    219                                   CALL dyn_adv      ( kstp )   ! advection (vector or flux form) 
    220                                   CALL dyn_vor      ( kstp )   ! vorticity term including Coriolis 
    221                                   CALL dyn_ldf      ( kstp )   ! lateral mixing 
    222           IF( ln_neptsimp )       CALL dyn_nept_cor ( kstp )   ! add Neptune velocities (simplified) 
     227             & ln_dyninc       )  CALL dyn_asm_inc   ( kstp )   ! apply dynamics assimilation increment 
     228          IF( ln_sppt_dyn )       CALL dyn_sppt_apply( kstp, 0 ) 
     229          IF( ln_neptsimp )       CALL dyn_nept_cor  ( kstp )   ! subtract Neptune velocities (simplified) 
     230          IF( lk_bdy           )  CALL bdy_dyn3d_dmp ( kstp )   ! bdy damping trends 
     231                                  CALL dyn_adv       ( kstp )   ! advection (vector or flux form) 
     232                                  CALL dyn_vor       ( kstp )   ! vorticity term including Coriolis 
     233                                  CALL dyn_ldf       ( kstp )   ! lateral mixing 
     234          IF( ln_neptsimp )       CALL dyn_nept_cor  ( kstp )   ! add Neptune velocities (simplified) 
    223235#if defined key_agrif 
    224236          IF(.NOT. Agrif_Root())  CALL Agrif_Sponge_dyn        ! momentum sponge 
     
    262274                             tsa(:,:,:,:) = 0.e0            ! set tracer trends to zero 
    263275 
    264       IF(  lk_asminc .AND. ln_asmiau .AND. & 
    265          & ln_trainc     )   CALL tra_asm_inc( kstp )       ! apply tracer assimilation increment 
     276      IF( ln_sppt_tra )      CALL tra_sppt_apply ( kstp, 0 ) 
     277      IF( lk_asminc .AND. ln_asmiau .AND. & 
     278        & ln_trainc      )   CALL tra_asm_inc( kstp )       ! apply tracer assimilation increment 
    266279                             CALL tra_sbc    ( kstp )       ! surface boundary condition 
    267280      IF( ln_traqsr      )   CALL tra_qsr    ( kstp )       ! penetrative solar radiation qsr 
     
    280293      IF(.NOT. Agrif_Root()) CALL Agrif_Sponge_tra          ! tracers sponge 
    281294#endif 
     295      IF( ln_sppt_tra )      CALL tra_sppt_apply ( kstp, 1 ) 
    282296                             CALL tra_zdf    ( kstp )       ! vertical mixing and after tracer fields 
    283297 
     
    285299         IF( ln_zdfnpc   )   CALL tra_npc( kstp )                ! update after fields by non-penetrative convection 
    286300                             CALL tra_nxt( kstp )                ! tracer fields at next time step 
     301         IF( ln_sppt_tra )   CALL tra_sppt_apply ( kstp, 2 ) 
    287302                             CALL eos    ( tsa, rhd, rhop, fsdept_n(:,:,:) )  ! Time-filtered in situ density for hpg computation 
    288303            IF( ln_zps .AND. .NOT. ln_isfcav)                                & 
     
    308323                             CALL tra_nxt( kstp )                ! tracer fields at next time step 
    309324         IF( ln_bias )       CALL dyn_bias( kstp ) 
     325         IF( ln_sppt_tra )   THEN 
     326                                CALL tra_sppt_apply ( kstp, 2 ) 
     327                                CALL eos    ( tsn, rhd, rhop, fsdept_n(:,:,:) )  ! now in situ density for hpg computation 
     328                                IF( ln_zps .AND. .NOT. ln_isfcav)                & 
     329                                & CALL zps_hde    ( kstp, jpts, tsn, gtsu, gtsv,  &    ! Partial steps: before horizontal gradient 
     330                                &                   rhd, gru , grv    )  ! of t, s, rd at the last ocean level 
     331                                IF( ln_zps .AND.       ln_isfcav)                                   &  
     332                                & CALL zps_hde_isf( kstp, jpts, tsn, gtsu, gtsv,  &    ! Partial steps for top cell (ISF) 
     333                                &                   rhd, gru , grv , aru , arv , gzu , gzv , ge3ru , ge3rv ,   & 
     334                                &                   gtui, gtvi, grui, grvi, arui, arvi, gzui, gzvi, ge3rui, ge3rvi    ) ! of t, s, rd at the last ocean level 
     335         ENDIF 
    310336      ENDIF 
    311337 
     
    324350 
    325351                               CALL dyn_bfr( kstp )         ! bottom friction 
     352            IF( ln_sppt_dyn )  CALL dyn_sppt_apply ( kstp, 1 ) 
    326353                               CALL dyn_zdf( kstp )         ! vertical diffusion 
    327354      ELSE 
     
    331358        IF(  lk_asminc .AND. ln_asmiau .AND. & 
    332359           & ln_dyninc      )  CALL dyn_asm_inc( kstp )     ! apply dynamics assimilation increment 
     360        IF( ln_sppt_dyn )      CALL dyn_sppt_apply ( kstp, 0 ) 
    333361        IF( ln_bkgwri )        CALL asm_bkg_wri( kstp )     ! output background fields 
    334362        IF( ln_neptsimp )      CALL dyn_nept_cor( kstp )    ! subtract Neptune velocities (simplified) 
     
    343371                               CALL dyn_hpg( kstp )         ! horizontal gradient of Hydrostatic pressure 
    344372                               CALL dyn_bfr( kstp )         ! bottom friction 
     373            IF( ln_sppt_dyn )  CALL dyn_sppt_apply ( kstp, 1 ) 
    345374                               CALL dyn_zdf( kstp )         ! vertical diffusion 
    346375                               CALL dyn_spg( kstp, indic )  ! surface pressure gradient 
    347376      ENDIF 
    348377                               CALL dyn_nxt( kstp )         ! lateral velocity at next time step 
     378            IF( ln_sppt_dyn )  CALL dyn_sppt_apply ( kstp, 2 ) 
     379            IF( ln_skeb )      CALL skeb_apply ( kstp ) 
    349380 
    350381                               CALL ssh_swp( kstp )         ! swap of sea surface height 
     
    381412         IF( lwm.AND.numoni /= -1 ) CALL FLUSH    ( numoni )     ! flush output namelist ice 
    382413      ENDIF 
     414      IF( ln_sto_eos       )   CALL sto_rst_write( kstp )   ! write restart file for stochastic parameters 
    383415 
    384416 
Note: See TracChangeset for help on using the changeset viewer.