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 3991 for branches/2013/dev_r3987_METO1_MERCATOR6_OBC_BDY_merge/NEMOGCM/NEMO/OPA_SRC/BDY/bdydyn.F90 – NEMO

Ignore:
Timestamp:
2013-07-29T11:04:44+02:00 (11 years ago)
Author:
davestorkey
Message:

New branch from later branch point on trunk so you can do a clean
diff of all the changes. Copy in changes from dev_r3891_METO1_MERCATOR6_OBC_BDY_merge.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2013/dev_r3987_METO1_MERCATOR6_OBC_BDY_merge/NEMOGCM/NEMO/OPA_SRC/BDY/bdydyn.F90

    r3968 r3991  
    3030   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
    3131   USE in_out_manager  ! 
    32    USE domvvl          ! variable volume 
    3332 
    3433   IMPLICIT NONE 
     
    5756      LOGICAL, INTENT( in ), OPTIONAL :: dyn3d_only       ! T => only update baroclinic velocities 
    5857      !! 
    59       INTEGER               :: jk,ii,ij,ib,igrd     ! Loop counter 
    60       LOGICAL               :: ll_dyn2d, ll_dyn3d   
     58      INTEGER               :: jk,ii,ij,ib_bdy,ib,igrd     ! Loop counter 
     59      LOGICAL               :: ll_dyn2d, ll_dyn3d, ll_orlanski 
    6160      !! 
    6261 
     
    7069      ENDIF 
    7170 
     71      ll_orlanski = .false. 
     72      DO ib_bdy = 1, nb_bdy 
     73         IF ( cn_dyn2d(ib_bdy) == 'orlanski' .or. cn_dyn2d(ib_bdy) == 'orlanski_npo' & 
     74     &   .or. cn_dyn3d(ib_bdy) == 'orlanski' .or. cn_dyn3d(ib_bdy) == 'orlanski_npo') ll_orlanski = .true. 
     75      ENDDO 
     76 
    7277      !------------------------------------------------------- 
    7378      ! Set pointers 
     
    7782      phur => hur 
    7883      phvr => hvr 
    79       CALL wrk_alloc(jpi,jpj,pu2d,pv2d)  
     84      CALL wrk_alloc(jpi,jpj,pua2d,pva2d)  
     85      IF ( ll_orlanski ) CALL wrk_alloc(jpi,jpj,pub2d,pvb2d)  
    8086 
    8187      !------------------------------------------------------- 
     
    8389      !------------------------------------------------------- 
    8490 
    85       pu2d(:,:) = 0.e0 
    86       pv2d(:,:) = 0.e0 
    87       IF (lk_vvl) THEN 
     91      ! "After" velocities:  
     92 
     93      pua2d(:,:) = 0.e0 
     94      pva2d(:,:) = 0.e0 
     95      DO jk = 1, jpkm1   !! Vertically integrated momentum trends 
     96          pua2d(:,:) = pua2d(:,:) + fse3u(:,:,jk) * umask(:,:,jk) * ua(:,:,jk) 
     97          pva2d(:,:) = pva2d(:,:) + fse3v(:,:,jk) * vmask(:,:,jk) * va(:,:,jk) 
     98      END DO 
     99      pua2d(:,:) = pua2d(:,:) * phur(:,:) 
     100      pva2d(:,:) = pva2d(:,:) * phvr(:,:) 
     101      DO jk = 1 , jpkm1 
     102         ua(:,:,jk) = ua(:,:,jk) - pua2d(:,:) 
     103         va(:,:,jk) = va(:,:,jk) - pva2d(:,:) 
     104      END DO 
     105 
     106      ! "Before" velocities (required for Orlanski condition):  
     107 
     108      IF ( ll_orlanski ) THEN 
     109         pub2d(:,:) = 0.e0 
     110         pvb2d(:,:) = 0.e0 
    88111         DO jk = 1, jpkm1   !! Vertically integrated momentum trends 
    89             pu2d(:,:) = pu2d(:,:) + fse3u_a(:,:,jk) * umask(:,:,jk) * ua(:,:,jk) 
    90             pv2d(:,:) = pv2d(:,:) + fse3v_a(:,:,jk) * vmask(:,:,jk) * va(:,:,jk) 
     112             pub2d(:,:) = pub2d(:,:) + fse3u(:,:,jk) * umask(:,:,jk) * ub(:,:,jk) 
     113             pvb2d(:,:) = pvb2d(:,:) + fse3v(:,:,jk) * vmask(:,:,jk) * vb(:,:,jk) 
    91114         END DO 
    92          pu2d(:,:) = pu2d(:,:) / ( hu_0(:,:) + sshu_a(:,:) + 1._wp - umask(:,:,1) ) 
    93          pv2d(:,:) = pv2d(:,:) / ( hv_0(:,:) + sshv_a(:,:) + 1._wp - vmask(:,:,1) ) 
    94       ELSE 
    95          DO jk = 1, jpkm1   !! Vertically integrated momentum trends 
    96             pu2d(:,:) = pu2d(:,:) + fse3u(:,:,jk) * umask(:,:,jk) * ua(:,:,jk) 
    97             pv2d(:,:) = pv2d(:,:) + fse3v(:,:,jk) * vmask(:,:,jk) * va(:,:,jk) 
     115         pub2d(:,:) = pub2d(:,:) * phur(:,:) 
     116         pvb2d(:,:) = pvb2d(:,:) * phvr(:,:) 
     117         DO jk = 1 , jpkm1 
     118            ub(:,:,jk) = ub(:,:,jk) - pub2d(:,:) 
     119            vb(:,:,jk) = vb(:,:,jk) - pvb2d(:,:) 
    98120         END DO 
    99          pu2d(:,:) = pu2d(:,:) * phur(:,:) 
    100          pv2d(:,:) = pv2d(:,:) * phvr(:,:) 
    101       ENDIF 
    102       DO jk = 1 , jpkm1 
    103          ua(:,:,jk) = ua(:,:,jk) - pu2d(:,:) * umask(:,:,jk) 
    104          va(:,:,jk) = va(:,:,jk) - pv2d(:,:) * vmask(:,:,jk) 
    105       END DO 
     121      END IF 
    106122 
    107123      !------------------------------------------------------- 
     
    119135 
    120136      DO jk = 1 , jpkm1 
    121          ua(:,:,jk) = ( ua(:,:,jk) + pu2d(:,:) ) * umask(:,:,jk) 
    122          va(:,:,jk) = ( va(:,:,jk) + pv2d(:,:) ) * vmask(:,:,jk) 
     137         ua(:,:,jk) = ( ua(:,:,jk) + pua2d(:,:) ) * umask(:,:,jk) 
     138         va(:,:,jk) = ( va(:,:,jk) + pva2d(:,:) ) * vmask(:,:,jk) 
    123139      END DO 
    124140 
    125       CALL wrk_dealloc(jpi,jpj,pu2d,pv2d)  
     141      IF ( ll_orlanski ) THEN 
     142         DO jk = 1 , jpkm1 
     143            ub(:,:,jk) = ( ub(:,:,jk) + pub2d(:,:) ) * umask(:,:,jk) 
     144            vb(:,:,jk) = ( vb(:,:,jk) + pvb2d(:,:) ) * vmask(:,:,jk) 
     145         END DO 
     146      END IF 
     147 
     148      CALL wrk_dealloc(jpi,jpj,pua2d,pva2d)  
     149      IF ( ll_orlanski ) CALL wrk_dealloc(jpi,jpj,pub2d,pvb2d)  
    126150 
    127151      IF( nn_timing == 1 ) CALL timing_stop('bdy_dyn') 
Note: See TracChangeset for help on using the changeset viewer.