123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- MODULE dynnxt_c1d
- !!======================================================================
- !! *** MODULE dynnxt_c1d ***
- !! Ocean dynamics: time stepping in 1D configuration
- !!======================================================================
- !! History : 2.0 ! 2004-10 (C. Ethe) Original code from dynnxt.F90
- !! 3.0 ! 2008-04 (G.madec) Style only
- !!----------------------------------------------------------------------
- #if defined key_c1d
- !!----------------------------------------------------------------------
- !! 'key_c1d' 1D Configuration
- !!----------------------------------------------------------------------
- !! dyn_nxt_c1d : update the horizontal velocity from the momentum trend
- !!----------------------------------------------------------------------
- USE oce ! ocean dynamics and tracers
- USE dom_oce ! ocean space and time domain
- USE in_out_manager ! I/O manager
- USE lbclnk ! lateral boundary condition (or mpp link)
- USE prtctl ! Print control
- IMPLICIT NONE
- PRIVATE
- PUBLIC dyn_nxt_c1d ! routine called by step.F90
- !!----------------------------------------------------------------------
- !! NEMO/C1D 3.3 , NEMO Consortium (2010)
- !! $Id: dynnxt_c1d.F90 2355 2015-05-20 07:11:50Z ufla $
- !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
- !!----------------------------------------------------------------------
- CONTAINS
- SUBROUTINE dyn_nxt_c1d ( kt )
- !!----------------------------------------------------------------------
- !! *** ROUTINE dyn_nxt_c1d ***
- !!
- !! ** Purpose : Compute the after horizontal velocity from the momentum trend.
- !!
- !! ** Method : Apply lateral boundary conditions on the trends (ua,va)
- !! through calls to routine lbc_lnk.
- !! After velocity is compute using a leap-frog scheme environment:
- !! (ua,va) = (ub,vb) + 2 rdt (ua,va)
- !! Time filter applied on now horizontal velocity to avoid the
- !! divergence of two consecutive time-steps and swap of dynamics
- !! arrays to start the next time step:
- !! (ub,vb) = (un,vn) + atfp [ (ub,vb) + (ua,va) - 2 (un,vn) ]
- !! (un,vn) = (ua,va)
- !!
- !! ** Action : - Update ub,vb arrays, the before horizontal velocity
- !! - Update un,vn arrays, the now horizontal velocity
- !!----------------------------------------------------------------------
- INTEGER, INTENT( in ) :: kt ! ocean time-step index
- !!
- INTEGER :: jk ! dummy loop indices
- REAL(wp) :: z2dt ! temporary scalar
- !!----------------------------------------------------------------------
- IF( kt == nit000 ) THEN
- IF(lwp) WRITE(numout,*)
- IF(lwp) WRITE(numout,*) 'dyn_nxt_c1d : time stepping on 1D configuation'
- IF(lwp) WRITE(numout,*) '~~~~~~~~~~~'
- ENDIF
- z2dt = 2._wp * rdt ! Local constant initialization
- IF( neuler == 0 .AND. kt == nit000 ) z2dt = rdt
- CALL lbc_lnk( ua, 'U', -1. ) ; CALL lbc_lnk( va, 'V', -1. ) ! Lateral boundary conditions
- DO jk = 1, jpkm1 ! Next Velocity
- ua(:,:,jk) = ( ub(:,:,jk) + z2dt * ua(:,:,jk) ) * umask(:,:,jk)
- va(:,:,jk) = ( vb(:,:,jk) + z2dt * va(:,:,jk) ) * vmask(:,:,jk)
- END DO
-
- DO jk = 1, jpkm1 ! Time filter and swap of dynamics arrays
- IF( neuler == 0 .AND. kt == nit000 ) THEN ! Euler (forward) time stepping
- ub(:,:,jk) = un(:,:,jk)
- vb(:,:,jk) = vn(:,:,jk)
- un(:,:,jk) = ua(:,:,jk)
- vn(:,:,jk) = va(:,:,jk)
- ELSE ! Leap-frog time stepping
- ub(:,:,jk) = atfp * ( ub(:,:,jk) + ua(:,:,jk) ) + atfp1 * un(:,:,jk)
- vb(:,:,jk) = atfp * ( vb(:,:,jk) + va(:,:,jk) ) + atfp1 * vn(:,:,jk)
- un(:,:,jk) = ua(:,:,jk)
- vn(:,:,jk) = va(:,:,jk)
- ENDIF
- END DO
- IF(ln_ctl) CALL prt_ctl( tab3d_1=un, clinfo1=' nxt_c1d - Un: ', mask1=umask, &
- & tab3d_2=vn, clinfo2=' Vn: ' , mask2=vmask )
- !
- END SUBROUTINE dyn_nxt_c1d
- #else
- !!----------------------------------------------------------------------
- !! Default key NO 1D Config
- !!----------------------------------------------------------------------
- CONTAINS
- SUBROUTINE dyn_nxt_c1d ( kt )
- WRITE(*,*) 'dyn_nxt_c1d: You should not have seen this print! error?', kt
- END SUBROUTINE dyn_nxt_c1d
- #endif
- !!======================================================================
- END MODULE dynnxt_c1d
|