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 4292 for branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/OPA_SRC/step.F90 – NEMO

Ignore:
Timestamp:
2013-11-20T17:28:04+01:00 (10 years ago)
Author:
cetlod
Message:

dev_MERGE_2013 : 1st step of the merge, see ticket #1185

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/OPA_SRC/step.F90

    r4230 r4292  
    9595      ! Update data, open boundaries, surface boundary condition (including sea-ice) 
    9696      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
     97      IF( lk_tide    )   CALL sbc_tide( kstp ) 
     98      IF( lk_obc     )   CALL obc_dta ( kstp )        ! update dynamic and tracer data at open boundaries 
     99      IF( lk_obc     )   CALL obc_rad ( kstp )        ! compute phase velocities at open boundaries 
     100      IF( lk_bdy     )   CALL bdy_dta ( kstp, time_offset=+1 )   ! update dynamic & tracer data at open boundaries 
     101 
    97102                         CALL sbc    ( kstp )         ! Sea Boundary Condition (including sea-ice) 
    98  
    99       IF( lk_tide.AND.(kstp /= nit000 ))   CALL tide_init ( kstp ) 
    100       IF( lk_tide    )   CALL sbc_tide( kstp ) 
    101       IF( lk_obc     )   CALL obc_dta( kstp )         ! update dynamic and tracer data at open boundaries 
    102       IF( lk_obc     )   CALL obc_rad( kstp )         ! compute phase velocities at open boundaries 
    103       IF( lk_bdy     )   CALL bdy_dta( kstp, time_offset=+1 ) ! update dynamic and tracer data at open boundaries 
    104  
    105       !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    106       !  Ocean dynamics : ssh, wn, hdiv, rot                                 ! 
    107       !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    108                          CALL ssh_wzv( kstp )         ! after ssh & vertical velocity 
     103                                                      ! clem: moved here for bdy ice purpose 
     104      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
     105      !  Ocean dynamics : hdiv, rot, ssh, e3, wn 
     106      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
     107                         CALL zdf_bfr( kstp )         ! bottom friction (if quadratic) 
     108                         CALL ssh_nxt       ( kstp )  ! after ssh (includes call to div_cur) 
     109      IF( lk_dynspg_ts ) THEN 
     110                                  CALL wzv           ( kstp )  ! now cross-level velocity  
     111          ! In case the time splitting case, update almost all momentum trends here: 
     112          ! Note that the computation of vertical velocity above, hence "after" sea level 
     113          ! is necessary to compute momentum advection for the rhs of barotropic loop: 
     114                                  CALL eos    ( tsn, rhd, rhop )                 ! now in situ density for hpg computation 
     115          IF( ln_zps      )       CALL zps_hde( kstp, jpts, tsn, gtsu, gtsv,  &  ! zps: now hor. derivative 
     116                &                                          rhd, gru , grv  )     ! of t, s, rd at the last ocean level 
     117 
     118                                  ua(:,:,:) = 0.e0             ! set dynamics trends to zero 
     119                                  va(:,:,:) = 0.e0 
     120          IF(  ln_asmiau .AND. & 
     121             & ln_dyninc       )  CALL dyn_asm_inc  ( kstp )   ! apply dynamics assimilation increment 
     122          IF( ln_neptsimp )       CALL dyn_nept_cor ( kstp )   ! subtract Neptune velocities (simplified) 
     123          IF( lk_bdy           )  CALL bdy_dyn3d_dmp( kstp )   ! bdy damping trends 
     124                                  CALL dyn_adv      ( kstp )   ! advection (vector or flux form) 
     125                                  CALL dyn_vor      ( kstp )   ! vorticity term including Coriolis 
     126                                  CALL dyn_ldf      ( kstp )   ! lateral mixing 
     127          IF( ln_neptsimp )       CALL dyn_nept_cor ( kstp )   ! add Neptune velocities (simplified) 
     128#if defined key_agrif 
     129          IF(.NOT. Agrif_Root())  CALL Agrif_Sponge_dyn        ! momentum sponge 
     130#endif 
     131                                  CALL dyn_hpg( kstp )         ! horizontal gradient of Hydrostatic pressure 
     132                                  CALL dyn_spg( kstp, indic )  ! surface pressure gradient 
     133 
     134                                  hdivb(:,:,:) = hdivn(:,:,:)  ! Store now divergence and rot temporarly, revert to these below  
     135                                  rotb(:,:,:)  = rotn(:,:,:)      
     136                                  ua_sv(:,:,:) = ua(:,:,:)     ! Save trends (barotropic trend has been fully updated) 
     137                                  va_sv(:,:,:) = va(:,:,:) 
     138 
     139                                  CALL div_cur( kstp )         ! Horizontal divergence & Relative vorticity (2nd call in time-split case) 
     140      ENDIF 
     141      IF( lk_vvl     )   CALL dom_vvl_sf_nxt( kstp )  ! after vertical scale factors 
     142                         CALL wzv           ( kstp )  ! now cross-level velocity (original) 
    109143 
    110144      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
     
    115149      ! 
    116150      !  VERTICAL PHYSICS 
    117                          CALL zdf_bfr( kstp )         ! bottom friction 
    118  
    119151      !                                               ! Vertical eddy viscosity and diffusivity coefficients 
    120152      IF( lk_zdfric  )   CALL zdf_ric( kstp )            ! Richardson number dependent Kz 
     
    122154      IF( lk_zdfgls  )   CALL zdf_gls( kstp )            ! GLS closure scheme for Kz 
    123155      IF( lk_zdfkpp  )   CALL zdf_kpp( kstp )            ! KPP closure scheme for Kz 
    124       IF( lk_zdfcst  )   THEN                            ! Constant Kz (reset avt, avm[uv] to the background value) 
     156      IF( lk_zdfcst  ) THEN                              ! Constant Kz (reset avt, avm[uv] to the background value) 
    125157         avt (:,:,:) = rn_avt0 * tmask(:,:,:) 
    126158         avmu(:,:,:) = rn_avm0 * umask(:,:,:) 
     
    146178      ! 
    147179      IF( lk_ldfslp ) THEN                            ! slope of lateral mixing 
    148                          CALL eos( tsb, rhd )                ! before in situ density 
     180                         CALL eos( tsb, rhd, gdept_0(:,:,:) )             ! before in situ density 
    149181         IF( ln_zps )    CALL zps_hde( kstp, jpts, tsb, gtsu, gtsv,  &    ! Partial steps: before horizontal gradient 
    150182            &                                      rhd, gru , grv  )      ! of t, s, rd at the last ocean level 
     
    193225                             tsa(:,:,:,:) = 0.e0            ! set tracer trends to zero 
    194226 
    195 !write(numout,*) "MAV kt",kstp 
    196 !write(numout,'(a5,3(1x,f21.18))') "INIn:",tsn(24,11,1,jp_tem),tsn(24,11,1,jp_sal),sshn(24,11) 
    197 !write(numout,'(a5,3(1x,f21.18))') "INIa:",tsa(24,11,1,jp_tem),tsa(24,11,1,jp_sal),ssha(24,11) 
    198227      IF(  ln_asmiau .AND. & 
    199228         & ln_trainc     )   CALL tra_asm_inc( kstp )       ! apply tracer assimilation increment 
     
    205234      IF( lk_bdy         )   CALL bdy_tra_dmp( kstp )       ! bdy damping trends 
    206235                             CALL tra_adv    ( kstp )       ! horizontal & vertical advection 
    207 !write(numout,'(a5,3(1x,f21.18))') "ADVn:",tsn(24,11,1,jp_tem),tsn(24,11,1,jp_sal),sshn(24,11) 
    208 !write(numout,'(a5,3(1x,f21.18))') "ADVa:",tsa(24,11,1,jp_tem),tsa(24,11,1,jp_sal),ssha(24,11) 
    209236      IF( lk_zdfkpp      )   CALL tra_kpp    ( kstp )       ! KPP non-local tracer fluxes 
    210237                             CALL tra_ldf    ( kstp )       ! lateral mixing 
    211 !write(numout,'(a5,3(1x,f21.18))') "LDFn:",tsn(24,11,1,jp_tem),tsn(24,11,1,jp_sal),sshn(24,11) 
    212 !write(numout,'(a5,3(1x,f21.18))') "LDFa:",tsa(24,11,1,jp_tem),tsa(24,11,1,jp_sal),ssha(24,11) 
    213238#if defined key_agrif 
    214239      IF(.NOT. Agrif_Root()) CALL Agrif_Sponge_tra          ! tracers sponge 
    215240#endif 
    216241                             CALL tra_zdf    ( kstp )       ! vertical mixing and after tracer fields 
    217 !do jk=1,jpk 
    218 !write(numout,'(a5,3(1x,f21.18))') "ZDFn:",tsn(5,10,jk,jp_tem),tsn(5,10,jk,jp_sal),tmask(5,10,jk) 
    219 !write(numout,'(a5,3(1x,f21.18))') "ZDFa:",tsa(5,10,jk,jp_tem),tsa(5,10,jk,jp_sal),ssha(5,10) 
    220 !end do 
    221242 
    222243      IF( ln_dynhpg_imp  ) THEN                             ! semi-implicit hpg (time stepping then eos) 
    223244         IF( ln_zdfnpc   )   CALL tra_npc( kstp )                ! update after fields by non-penetrative convection 
    224245                             CALL tra_nxt( kstp )                ! tracer fields at next time step 
    225                              CALL eos    ( tsa, rhd, rhop )      ! Time-filtered in situ density for hpg computation 
     246                             CALL eos    ( tsa, rhd, rhop, fsdept_n(:,:,:) )  ! Time-filtered in situ density for hpg computation 
    226247         IF( ln_zps      )   CALL zps_hde( kstp, jpts, tsa, gtsu, gtsv,  &    ! zps: time filtered hor. derivative 
    227248            &                                          rhd, gru , grv  )      ! of t, s, rd at the last ocean level 
    228249 
    229250      ELSE                                                  ! centered hpg  (eos then time stepping) 
    230                              CALL eos    ( tsn, rhd, rhop )      ! now in situ density for hpg computation 
    231          IF( ln_zps      )   CALL zps_hde( kstp, jpts, tsn, gtsu, gtsv,  &    ! zps: now hor. derivative 
     251         IF ( .NOT. lk_dynspg_ts ) THEN                     ! eos already called in time-split case 
     252                                CALL eos    ( tsn, rhd, rhop, fsdept_n(:,:,:) )  ! now in situ density for hpg computation 
     253            IF( ln_zps      )   CALL zps_hde( kstp, jpts, tsn, gtsu, gtsv,  &    ! zps: now hor. derivative 
    232254            &                                          rhd, gru , grv  )      ! of t, s, rd at the last ocean level 
    233 !write(numout,'(a5,3(1x,f21.18))') "ZPSn:",tsn(24,11,1,jp_tem),tsn(24,11,1,jp_sal),sshn(24,11) 
    234 !write(numout,'(a5,3(1x,f21.18))') "ZPSa:",tsa(24,11,1,jp_tem),tsa(24,11,1,jp_sal),ssha(24,11) 
     255         ENDIF 
    235256         IF( ln_zdfnpc   )   CALL tra_npc( kstp )                ! update after fields by non-penetrative convection 
    236257                             CALL tra_nxt( kstp )                ! tracer fields at next time step 
    237 !write(numout,'(a5,3(1x,f21.18))') "NXTn:",tsn(24,11,1,jp_tem),tsn(24,11,1,jp_sal),sshn(25,11) 
    238 !write(numout,'(a5,3(1x,f21.18))') "NXTa:",tsa(24,11,1,jp_tem),tsa(24,11,1,jp_sal),ssha(24,11) 
    239258      ENDIF 
    240259 
     
    242261      ! Dynamics                                    (tsa used as workspace) 
    243262      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
     263      IF( lk_dynspg_ts   )  THEN 
     264                                                             ! revert to previously computed momentum tendencies 
     265                                                             ! (not using ua, va as temporary arrays during tracers' update could avoid that) 
     266                               ua(:,:,:) = ua_sv(:,:,:) 
     267                               va(:,:,:) = va_sv(:,:,:) 
     268                                                             ! Revert now divergence and rotational to previously computed ones  
     269                                                             !(needed because of the time swap in div_cur, at the beginning of each time step) 
     270                               hdivn(:,:,:) = hdivb(:,:,:) 
     271                               rotn(:,:,:)  = rotb(:,:,:)  
     272 
     273                               CALL dyn_bfr( kstp )         ! bottom friction 
     274                               CALL dyn_zdf( kstp )         ! vertical diffusion 
     275      ELSE 
    244276                               ua(:,:,:) = 0.e0             ! set dynamics trends to zero 
    245277                               va(:,:,:) = 0.e0 
    246278 
    247       IF(  ln_asmiau .AND. & 
    248          & ln_dyninc       )   CALL dyn_asm_inc( kstp )     ! apply dynamics assimilation increment 
    249       IF( ln_bkgwri )          CALL asm_bkg_wri( kstp )     ! output background fields 
    250       IF( ln_neptsimp )        CALL dyn_nept_cor( kstp )    ! subtract Neptune velocities (simplified) 
    251       IF( lk_bdy           )   CALL bdy_dyn3d_dmp(kstp )    ! bdy damping trends 
     279        IF(  ln_asmiau .AND. & 
     280           & ln_dyninc      )  CALL dyn_asm_inc( kstp )     ! apply dynamics assimilation increment 
     281        IF( ln_bkgwri )        CALL asm_bkg_wri( kstp )     ! output background fields 
     282        IF( ln_neptsimp )      CALL dyn_nept_cor( kstp )    ! subtract Neptune velocities (simplified) 
     283        IF( lk_bdy          )  CALL bdy_dyn3d_dmp(kstp )    ! bdy damping trends 
    252284                               CALL dyn_adv( kstp )         ! advection (vector or flux form) 
    253285                               CALL dyn_vor( kstp )         ! vorticity term including Coriolis 
    254286                               CALL dyn_ldf( kstp )         ! lateral mixing 
    255       IF( ln_neptsimp )        CALL dyn_nept_cor( kstp )    ! add Neptune velocities (simplified) 
    256 #if defined key_agrif 
    257       IF(.NOT. Agrif_Root())  CALL Agrif_Sponge_dyn        ! momemtum sponge 
     287        IF( ln_neptsimp )      CALL dyn_nept_cor( kstp )    ! add Neptune velocities (simplified) 
     288#if defined key_agrif 
     289        IF(.NOT. Agrif_Root()) CALL Agrif_Sponge_dyn        ! momemtum sponge 
    258290#endif 
    259291                               CALL dyn_hpg( kstp )         ! horizontal gradient of Hydrostatic pressure 
     
    261293                               CALL dyn_zdf( kstp )         ! vertical diffusion 
    262294                               CALL dyn_spg( kstp, indic )  ! surface pressure gradient 
     295      ENDIF 
    263296                               CALL dyn_nxt( kstp )         ! lateral velocity at next time step 
    264297 
    265                                CALL ssh_nxt( kstp )         ! sea surface height at next time step 
     298                               CALL ssh_swp( kstp )         ! swap of sea surface height 
     299      IF( lk_vvl           )   CALL dom_vvl_sf_swp( kstp )  ! swap of vertical scale factors 
    266300 
    267301      IF( ln_diahsb        )   CALL dia_hsb( kstp )         ! - ML - global conservation diagnostics 
Note: See TracChangeset for help on using the changeset viewer.