MODULE bartrop_uv USE dom_oce ! ocean space and time domain USE oce, ONLY: un, vn USE par_oce, ONLY: jpi, jpj, jpkm1 USE lbclnk, ONLY: lbc_lnk USE lib_mpp ! MPP library IMPLICIT NONE PRIVATE PUBLIC bartrop_vel !! * Accessibility PUBLIC bartrop_uv_alloc ! routines called by step.F90 REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:,:) :: un_dm, vn_dm !! * Substitutions # include "domzgr_substitute.h90" CONTAINS INTEGER FUNCTION bartrop_uv_alloc() !!---------------------------------------------------------------------------- !! *** FUNCTION bartrop_uv_alloc *** !!---------------------------------------------------------------------------- ALLOCATE( un_dm(jpi,jpj), vn_dm(jpi,jpj), STAT=bartrop_uv_alloc ) ! IF( lk_mpp ) CALL mpp_sum( bartrop_uv_alloc ) IF( bartrop_uv_alloc /= 0 ) CALL ctl_warn('bartrop_uv_alloc: failed to allocate arrays.') END FUNCTION bartrop_uv_alloc !----------------------------------------------------------------------------------- ! ! Convert baroclinic to barotropic velocities by integrating over water column ! !----------------------------------------------------------------------------------- SUBROUTINE bartrop_vel() INTEGER :: ji, jj, jk ! loop indices un_dm(:,:) = 0.0 vn_dm(:,:) = 0.0 ! vertical sum IF( lk_vopt_loop ) THEN ! vector opt., forced unroll DO jk = 1, jpkm1 DO ji = 1, jpij un_dm(ji,1) = un_dm(ji,1) + fse3u(ji,1,jk) * un(ji,1,jk) vn_dm(ji,1) = vn_dm(ji,1) + fse3v(ji,1,jk) * vn(ji,1,jk) END DO END DO ELSE ! No vector opt. DO jk = 1, jpkm1 un_dm(:,:) = un_dm(:,:) + fse3u(:,:,jk) * un(:,:,jk) vn_dm(:,:) = vn_dm(:,:) + fse3v(:,:,jk) * vn(:,:,jk) END DO ENDIF un_dm(:,:) = un_dm(:,:) * hur(:,:) vn_dm(:,:) = vn_dm(:,:) * hvr(:,:) END SUBROUTINE bartrop_vel END MODULE bartrop_uv