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 6225 for branches/2014/dev_r4704_NOC5_MPP_BDY_UPDATE/NEMOGCM/NEMO/OPA_SRC/BDY/bdydyn.F90 – NEMO

Ignore:
Timestamp:
2016-01-08T10:35:19+01:00 (8 years ago)
Author:
jamesharle
Message:

Update MPP_BDY_UPDATE branch to be consistent with head of trunk

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2014/dev_r4704_NOC5_MPP_BDY_UPDATE/NEMOGCM/NEMO/OPA_SRC/BDY/bdydyn.F90

    r4689 r6225  
    2424   USE oce             ! ocean dynamics and tracers  
    2525   USE dom_oce         ! ocean space and time domain 
    26    USE dynspg_oce       
    2726   USE bdy_oce         ! ocean open boundary conditions 
    2827   USE bdydyn2d        ! open boundary conditions for barotropic solution 
     
    3534   PRIVATE 
    3635 
    37    PUBLIC   bdy_dyn     ! routine called in dynspg_flt (if lk_dynspg_flt) or  
    38                         ! dyn_nxt (if lk_dynspg_ts or lk_dynspg_exp) 
     36   PUBLIC   bdy_dyn    ! routine called in dyn_nxt 
    3937 
    40 #  include "domzgr_substitute.h90" 
    4138   !!---------------------------------------------------------------------- 
    4239   !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
     
    5350      !! 
    5451      !!---------------------------------------------------------------------- 
    55       !! 
    56       INTEGER, INTENT( in )           :: kt               ! Main time step counter 
    57       LOGICAL, INTENT( in ), OPTIONAL :: dyn3d_only       ! T => only update baroclinic velocities 
    58       !! 
    59       INTEGER               :: jk,ii,ij,ib_bdy,ib,igrd     ! Loop counter 
    60       LOGICAL               :: ll_dyn2d, ll_dyn3d, ll_orlanski 
    61       !! 
     52      INTEGER, INTENT(in)           ::   kt           ! Main time step counter 
     53      LOGICAL, INTENT(in), OPTIONAL ::   dyn3d_only   ! T => only update baroclinic velocities 
     54      ! 
     55      INTEGER ::   jk, ii, ij, ib_bdy, ib, igrd     ! Loop counter 
     56      LOGICAL ::   ll_dyn2d, ll_dyn3d, ll_orlanski 
    6257      REAL(wp), POINTER, DIMENSION(:,:) :: pua2d, pva2d     ! after barotropic velocities 
    63  
    64       IF( nn_timing == 1 ) CALL timing_start('bdy_dyn') 
    65  
     58      !!---------------------------------------------------------------------- 
     59      ! 
     60      IF( nn_timing == 1 )   CALL timing_start('bdy_dyn') 
     61      ! 
    6662      ll_dyn2d = .true. 
    6763      ll_dyn3d = .true. 
    68  
     64      ! 
    6965      IF( PRESENT(dyn3d_only) ) THEN 
    70          IF( dyn3d_only ) ll_dyn2d = .false. 
     66         IF( dyn3d_only )   ll_dyn2d = .false. 
    7167      ENDIF 
    72  
     68      ! 
    7369      ll_orlanski = .false. 
    7470      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 
     71         IF ( cn_dyn2d(ib_bdy) == 'orlanski' .OR. cn_dyn2d(ib_bdy) == 'orlanski_npo' & 
     72     &   .OR. cn_dyn3d(ib_bdy) == 'orlanski' .OR. cn_dyn3d(ib_bdy) == 'orlanski_npo')  ll_orlanski = .true. 
     73      END DO 
    7874 
    7975      !------------------------------------------------------- 
     
    8177      !------------------------------------------------------- 
    8278 
    83       CALL wrk_alloc(jpi,jpj,pua2d,pva2d)  
     79      CALL wrk_alloc( jpi,jpj,   pua2d, pva2d )  
    8480 
    8581      !------------------------------------------------------- 
     
    8783      !------------------------------------------------------- 
    8884 
    89       ! "After" velocities:  
     85      !                          ! "After" velocities:  
     86      pua2d(:,:) = 0._wp 
     87      pva2d(:,:) = 0._wp      
     88      DO jk = 1, jpkm1 
     89         pua2d(:,:) = pua2d(:,:) + e3u_a(:,:,jk) * ua(:,:,jk) * umask(:,:,jk) 
     90         pva2d(:,:) = pva2d(:,:) + e3v_a(:,:,jk) * va(:,:,jk) * vmask(:,:,jk) 
     91      END DO 
     92      pua2d(:,:) = pua2d(:,:) * r1_hu_a(:,:) 
     93      pva2d(:,:) = pva2d(:,:) * r1_hv_a(:,:) 
    9094 
    91       pua2d(:,:) = 0.e0 
    92       pva2d(:,:) = 0.e0       
    93       DO jk = 1, jpkm1 
    94          pua2d(:,:) = pua2d(:,:) + fse3u_a(:,:,jk) * umask(:,:,jk) * ua(:,:,jk) 
    95          pva2d(:,:) = pva2d(:,:) + fse3v_a(:,:,jk) * vmask(:,:,jk) * va(:,:,jk) 
     95      DO jk = 1 , jpkm1 
     96         ua(:,:,jk) = ( ua(:,:,jk) - pua2d(:,:) ) * umask(:,:,jk) 
     97         va(:,:,jk) = ( va(:,:,jk) - pva2d(:,:) ) * vmask(:,:,jk) 
    9698      END DO 
    9799 
    98       pua2d(:,:) = pua2d(:,:) * hur_a(:,:) 
    99       pva2d(:,:) = pva2d(:,:) * hvr_a(:,:) 
    100100 
    101       DO jk = 1 , jpkm1 
    102          ua(:,:,jk) = (ua(:,:,jk) - pua2d(:,:)) * umask(:,:,jk) 
    103          va(:,:,jk) = (va(:,:,jk) - pva2d(:,:)) * vmask(:,:,jk) 
    104       END DO 
    105  
    106       ! "Before" velocities (required for Orlanski condition):  
    107  
    108       IF ( ll_orlanski ) THEN           
     101      IF( ll_orlanski ) THEN     ! "Before" velocities (Orlanski condition only)  
    109102         DO jk = 1 , jpkm1 
    110             ub(:,:,jk) = (ub(:,:,jk) - ub_b(:,:)) * umask(:,:,jk) 
    111             vb(:,:,jk) = (vb(:,:,jk) - vb_b(:,:)) * vmask(:,:,jk) 
     103            ub(:,:,jk) = ( ub(:,:,jk) - ub_b(:,:) ) * umask(:,:,jk) 
     104            vb(:,:,jk) = ( vb(:,:,jk) - vb_b(:,:) ) * vmask(:,:,jk) 
    112105         END DO 
    113       END IF 
     106      ENDIF 
    114107 
    115108      !------------------------------------------------------- 
     
    118111      !------------------------------------------------------- 
    119112 
    120       IF( ll_dyn2d ) CALL bdy_dyn2d( kt, pua2d, pva2d, ub_b, vb_b, hur_a(:,:), hvr_a(:,:), ssha ) 
     113      IF( ll_dyn2d )   CALL bdy_dyn2d( kt, pua2d, pva2d, ub_b, vb_b, r1_hu_a(:,:), r1_hv_a(:,:), ssha ) 
    121114 
    122       IF( ll_dyn3d ) CALL bdy_dyn3d( kt ) 
     115      IF( ll_dyn3d )   CALL bdy_dyn3d( kt ) 
    123116 
    124117      !------------------------------------------------------- 
    125118      ! Recombine velocities 
    126119      !------------------------------------------------------- 
    127  
     120      ! 
    128121      DO jk = 1 , jpkm1 
    129122         ua(:,:,jk) = ( ua(:,:,jk) + pua2d(:,:) ) * umask(:,:,jk) 
    130123         va(:,:,jk) = ( va(:,:,jk) + pva2d(:,:) ) * vmask(:,:,jk) 
    131124      END DO 
    132  
     125      ! 
    133126      IF ( ll_orlanski ) THEN 
    134127         DO jk = 1 , jpkm1 
     
    137130         END DO 
    138131      END IF 
    139  
    140       CALL wrk_dealloc(jpi,jpj,pua2d,pva2d)  
    141  
    142       IF( nn_timing == 1 ) CALL timing_stop('bdy_dyn') 
    143  
     132      ! 
     133      CALL wrk_dealloc( jpi,jpj,  pua2d, pva2d )  
     134      ! 
     135      IF( nn_timing == 1 )   CALL timing_stop('bdy_dyn') 
     136      ! 
    144137   END SUBROUTINE bdy_dyn 
    145138 
Note: See TracChangeset for help on using the changeset viewer.