- Timestamp:
- 2013-11-20T17:28:04+01:00 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/OPA_SRC/BDY/bdydyn.F90
r4153 r4292 30 30 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 31 31 USE in_out_manager ! 32 USE domvvl ! variable volume32 USE domvvl 33 33 34 34 IMPLICIT NONE … … 57 57 LOGICAL, INTENT( in ), OPTIONAL :: dyn3d_only ! T => only update baroclinic velocities 58 58 !! 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 62 63 63 64 IF( nn_timing == 1 ) CALL timing_start('bdy_dyn') … … 70 71 ENDIF 71 72 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 72 79 !------------------------------------------------------- 73 80 ! Set pointers … … 77 84 phur => hur 78 85 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) 80 88 81 89 !------------------------------------------------------- … … 83 91 !------------------------------------------------------- 84 92 85 pu2d(:,:) = 0.e0 86 pv2d(:,:) = 0.e0 93 ! "After" velocities: 94 95 pua2d(:,:) = 0.e0 96 pva2d(:,:) = 0.e0 97 87 98 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(:,:) 94 111 ELSE 95 DO jk = 1, jpkm1 !! Vertically integrated momentum trends96 pu 2d(:,:) = pu2d(:,:) + fse3u(:,:,jk) * umask(:,:,jk) * ua(:,:,jk)97 pv 2d(:,:) = pv2d(:,:) + fse3v(:,:,jk) * vmask(:,:,jk) * va(:,:,jk)98 END DO 99 pu 2d(:,:) = pu2d(:,:) * phur(:,:)100 pv 2d(:,:) = 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(:,:) 101 118 ENDIF 119 102 120 DO jk = 1 , jpkm1 103 ua(:,:,jk) = ua(:,:,jk) - pu 2d(:,:) * umask(:,:,jk)104 va(:,:,jk) = va(:,:,jk) - pv 2d(:,:) * vmask(:,:,jk)121 ua(:,:,jk) = ua(:,:,jk) - pua2d(:,:) 122 va(:,:,jk) = va(:,:,jk) - pva2d(:,:) 105 123 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 106 158 107 159 !------------------------------------------------------- … … 119 171 120 172 DO jk = 1 , jpkm1 121 ua(:,:,jk) = ( ua(:,:,jk) + pu 2d(:,:) ) * umask(:,:,jk)122 va(:,:,jk) = ( va(:,:,jk) + pv 2d(:,:) ) * vmask(:,:,jk)173 ua(:,:,jk) = ( ua(:,:,jk) + pua2d(:,:) ) * umask(:,:,jk) 174 va(:,:,jk) = ( va(:,:,jk) + pva2d(:,:) ) * vmask(:,:,jk) 123 175 END DO 124 176 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) 126 186 127 187 IF( nn_timing == 1 ) CALL timing_stop('bdy_dyn')
Note: See TracChangeset
for help on using the changeset viewer.