Ignore:
Timestamp:
2013-11-20T17:28:04+01:00 (7 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/BDY/bdydyn.F90

    r4153 r4292  
    3030   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
    3131   USE in_out_manager  ! 
    32    USE domvvl          ! variable volume 
     32   USE domvvl 
    3333 
    3434   IMPLICIT NONE 
     
    5757      LOGICAL, INTENT( in ), OPTIONAL :: dyn3d_only       ! T => only update baroclinic velocities 
    5858      !! 
    59       INTEGER               :: jk,ii,ij,ib,igrd     ! Loop counter 
    60       LOGICAL               :: ll_dyn2d, ll_dyn3d   
    61       !! 
     59      INTEGER               :: jk,ii,ij,ib_bdy,ib,igrd     ! Loop counter 
     60      LOGICAL               :: ll_dyn2d, ll_dyn3d, ll_orlanski 
     61      !! 
     62      REAL(wp), POINTER, DIMENSION(:,:) :: phur1, phvr1     ! inverse depth at u and v points 
    6263 
    6364      IF( nn_timing == 1 ) CALL timing_start('bdy_dyn') 
     
    7071      ENDIF 
    7172 
     73      ll_orlanski = .false. 
     74      DO ib_bdy = 1, nb_bdy 
     75         IF ( cn_dyn2d(ib_bdy) == 'orlanski' .or. cn_dyn2d(ib_bdy) == 'orlanski_npo' & 
     76     &   .or. cn_dyn3d(ib_bdy) == 'orlanski' .or. cn_dyn3d(ib_bdy) == 'orlanski_npo') ll_orlanski = .true. 
     77      ENDDO 
     78 
    7279      !------------------------------------------------------- 
    7380      ! Set pointers 
     
    7784      phur => hur 
    7885      phvr => hvr 
    79       CALL wrk_alloc(jpi,jpj,pu2d,pv2d)  
     86      CALL wrk_alloc(jpi,jpj,pua2d,pva2d)  
     87      IF ( ll_orlanski ) CALL wrk_alloc(jpi,jpj,pub2d,pvb2d,phur1,phvr1)  
    8088 
    8189      !------------------------------------------------------- 
     
    8391      !------------------------------------------------------- 
    8492 
    85       pu2d(:,:) = 0.e0 
    86       pv2d(:,:) = 0.e0 
     93      ! "After" velocities:  
     94 
     95      pua2d(:,:) = 0.e0 
     96      pva2d(:,:) = 0.e0 
     97       
    8798      IF (lk_vvl) THEN 
    88          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) 
    91          END DO 
    92          pu2d(:,:) = pu2d(:,:) / ( hu_0(:,:) + sshu_a(:,:) + 1._wp - umask(:,:,1) ) 
    93          pv2d(:,:) = pv2d(:,:) / ( hv_0(:,:) + sshv_a(:,:) + 1._wp - vmask(:,:,1) ) 
     99         phur1(:,:) = 0. 
     100         phvr1(:,:) = 0. 
     101         DO jk = 1, jpkm1 
     102            phur1(:,:) = phur1(:,:) + fse3u_a(:,:,jk) * umask(:,:,jk) 
     103            phvr1(:,:) = phvr1(:,:) + fse3v_a(:,:,jk) * vmask(:,:,jk) 
     104            pua2d(:,:) = pua2d(:,:) + fse3u_a(:,:,jk) * umask(:,:,jk) * ua(:,:,jk) 
     105            pva2d(:,:) = pva2d(:,:) + fse3v_a(:,:,jk) * vmask(:,:,jk) * va(:,:,jk) 
     106         END DO 
     107         phur1(:,:) = umask(:,:,1) / ( phur1(:,:) + 1. - umask(:,:,1) ) 
     108         phvr1(:,:) = vmask(:,:,1) / ( phvr1(:,:) + 1. - vmask(:,:,1) ) 
     109         pua2d(:,:) = pua2d(:,:) * phur1(:,:) 
     110         pva2d(:,:) = pva2d(:,:) * phvr1(:,:) 
    94111      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) 
    98          END DO 
    99          pu2d(:,:) = pu2d(:,:) * phur(:,:) 
    100          pv2d(:,:) = pv2d(:,:) * phvr(:,:) 
     112         DO jk = 1, jpkm1 
     113            pua2d(:,:) = pua2d(:,:) + fse3u(:,:,jk) * umask(:,:,jk) * ua(:,:,jk) 
     114            pva2d(:,:) = pva2d(:,:) + fse3v(:,:,jk) * vmask(:,:,jk) * va(:,:,jk) 
     115         END DO 
     116         pua2d(:,:) = pua2d(:,:) * phur(:,:) 
     117         pva2d(:,:) = pva2d(:,:) * phvr(:,:) 
    101118      ENDIF 
     119 
    102120      DO jk = 1 , jpkm1 
    103          ua(:,:,jk) = ua(:,:,jk) - pu2d(:,:) * umask(:,:,jk) 
    104          va(:,:,jk) = va(:,:,jk) - pv2d(:,:) * vmask(:,:,jk) 
     121         ua(:,:,jk) = ua(:,:,jk) - pua2d(:,:) 
     122         va(:,:,jk) = va(:,:,jk) - pva2d(:,:) 
    105123      END DO 
     124 
     125      ! "Before" velocities (required for Orlanski condition):  
     126 
     127      IF ( ll_orlanski ) THEN           
     128         pub2d(:,:) = 0.e0 
     129         pvb2d(:,:) = 0.e0 
     130 
     131         IF (lk_vvl) THEN 
     132            phur1(:,:) = 0. 
     133            phvr1(:,:) = 0. 
     134            DO jk = 1, jpkm1   !! Vertically integrated momentum trends 
     135               phur1(:,:) = phur1(:,:) + fse3u_b(:,:,jk) * umask(:,:,jk) 
     136               phvr1(:,:) = phvr1(:,:) + fse3v_b(:,:,jk) * vmask(:,:,jk) 
     137               pub2d(:,:) = pub2d(:,:) + fse3u_b(:,:,jk) * umask(:,:,jk) * ub(:,:,jk) 
     138               pvb2d(:,:) = pvb2d(:,:) + fse3v_b(:,:,jk) * vmask(:,:,jk) * vb(:,:,jk) 
     139            END DO 
     140            phur1(:,:) = umask(:,:,1) / ( phur1(:,:) + 1. - umask(:,:,1) ) 
     141            phvr1(:,:) = vmask(:,:,1) / ( phvr1(:,:) + 1. - vmask(:,:,1) ) 
     142            pub2d(:,:) = pub2d(:,:) * phur1(:,:) 
     143            pvb2d(:,:) = pvb2d(:,:) * phvr1(:,:) 
     144         ELSE 
     145            DO jk = 1, jpkm1   !! Vertically integrated momentum trends 
     146               pub2d(:,:) = pub2d(:,:) + fse3u(:,:,jk) * umask(:,:,jk) * ub(:,:,jk) 
     147               pvb2d(:,:) = pvb2d(:,:) + fse3v(:,:,jk) * vmask(:,:,jk) * vb(:,:,jk) 
     148            END DO 
     149            pub2d(:,:) = pub2d(:,:) * phur(:,:) 
     150            pvb2d(:,:) = pvb2d(:,:) * phvr(:,:) 
     151         ENDIF 
     152 
     153         DO jk = 1 , jpkm1 
     154            ub(:,:,jk) = ub(:,:,jk) - pub2d(:,:) 
     155            vb(:,:,jk) = vb(:,:,jk) - pvb2d(:,:) 
     156         END DO 
     157      END IF 
    106158 
    107159      !------------------------------------------------------- 
     
    119171 
    120172      DO jk = 1 , jpkm1 
    121          ua(:,:,jk) = ( ua(:,:,jk) + pu2d(:,:) ) * umask(:,:,jk) 
    122          va(:,:,jk) = ( va(:,:,jk) + pv2d(:,:) ) * vmask(:,:,jk) 
     173         ua(:,:,jk) = ( ua(:,:,jk) + pua2d(:,:) ) * umask(:,:,jk) 
     174         va(:,:,jk) = ( va(:,:,jk) + pva2d(:,:) ) * vmask(:,:,jk) 
    123175      END DO 
    124176 
    125       CALL wrk_dealloc(jpi,jpj,pu2d,pv2d)  
     177      IF ( ll_orlanski ) THEN 
     178         DO jk = 1 , jpkm1 
     179            ub(:,:,jk) = ( ub(:,:,jk) + pub2d(:,:) ) * umask(:,:,jk) 
     180            vb(:,:,jk) = ( vb(:,:,jk) + pvb2d(:,:) ) * vmask(:,:,jk) 
     181         END DO 
     182      END IF 
     183 
     184      CALL wrk_dealloc(jpi,jpj,pua2d,pva2d)  
     185      IF ( ll_orlanski ) CALL wrk_dealloc(jpi,jpj,pub2d,pvb2d)  
    126186 
    127187      IF( nn_timing == 1 ) CALL timing_stop('bdy_dyn') 
Note: See TracChangeset for help on using the changeset viewer.