Changeset 2005 for branches/DEV_r1837_MLF/NEMO/OPA_SRC/DOM/domvvl.F90
- Timestamp:
- 2010-07-09T15:07:02+02:00 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/DEV_r1837_MLF/NEMO/OPA_SRC/DOM/domvvl.F90
r1694 r2005 51 51 !!---------------------------------------------------------------------- 52 52 INTEGER :: ji, jj, jk 53 REAL(wp) :: zcoefu, zcoefv, zcoeff 53 REAL(wp) :: zcoefu , zcoefv , zcoeff ! temporary scalars 54 REAL(wp) :: zv_t_ij, zv_t_ip1j, zv_t_ijp1, zv_t_ip1jp1 ! - - 55 REAL(wp), DIMENSION(jpi,jpj) :: zs_t, zs_u_1, zs_v_1 ! - 2D workspace 54 56 !!---------------------------------------------------------------------- 55 57 … … 115 117 hv_0(:,:) = hv_0(:,:) + fse3v_0(:,:,jk) * vmask(:,:,jk) 116 118 END DO 119 120 ! surface at t-points and inverse surface at (u/v)-points used in surface averaging computations 121 ! for ssh and scale factors 122 zs_t (:,:) = e1t(:,:) * e2t(:,:) 123 zs_u_1(:,:) = 0.5 / e1u(:,:) * e2u(:,:) 124 zs_v_1(:,:) = 0.5 / e1v(:,:) * e2v(:,:) 117 125 118 126 DO jj = 1, jpjm1 ! initialise before and now Sea Surface Height at u-, v-, f-points 119 127 DO ji = 1, jpim1 ! NO vector opt. 120 zcoefu = 0.5 * umask(ji,jj,1) / ( e1u(ji,jj) * e2u(ji,jj) ) 121 zcoefv = 0.5 * vmask(ji,jj,1) / ( e1v(ji,jj) * e2v(ji,jj) ) 122 zcoeff = 0.25 * umask(ji,jj,1) * umask(ji,jj+1,1) 123 sshu_b(ji,jj) = zcoefu * ( e1t(ji ,jj) * e2t(ji ,jj) * sshb(ji ,jj) & 124 & + e1t(ji+1,jj) * e2t(ji+1,jj) * sshb(ji+1,jj) ) 125 sshv_b(ji,jj) = zcoefv * ( e1t(ji,jj ) * e2t(ji,jj ) * sshb(ji,jj ) & 126 & + e1t(ji,jj+1) * e2t(ji,jj+1) * sshb(ji,jj+1) ) 127 sshf_b(ji,jj) = zcoeff * ( sshb(ji ,jj) + sshb(ji ,jj+1) & 128 & + sshb(ji+1,jj) + sshb(ji+1,jj+1) ) 129 sshu_n(ji,jj) = zcoefu * ( e1t(ji ,jj) * e2t(ji ,jj) * sshn(ji ,jj) & 130 & + e1t(ji+1,jj) * e2t(ji+1,jj) * sshn(ji+1,jj) ) 131 sshv_n(ji,jj) = zcoefv * ( e1t(ji,jj ) * e2t(ji,jj ) * sshn(ji,jj ) & 132 & + e1t(ji,jj+1) * e2t(ji,jj+1) * sshn(ji,jj+1) ) 133 sshf_n(ji,jj) = zcoeff * ( sshn(ji ,jj) + sshn(ji ,jj+1) & 134 & + sshn(ji+1,jj) + sshn(ji+1,jj+1) ) 128 zcoefu = umask(ji,jj,1) * zs_u_1(ji,jj) 129 zcoefv = vmask(ji,jj,1) * zs_v_1(ji,jj) 130 zcoeff = 0.5 * umask(ji,jj,1) * umask(ji,jj+1,1) / ( e1f(ji,jj) * e2f(ji,jj) ) 131 ! before fields 132 zv_t_ij = zs_t(ji ,jj ) * sshb(ji ,jj ,jk) 133 zv_t_ip1j = zs_t(ji+1,jj ) * sshb(ji+1,jj ,jk) 134 zv_t_ijp1 = zs_t(ji ,jj+1) * sshb(ji ,jj+1,jk) 135 sshu_b(ji,jj) = zcoefu * ( zv_t_ij + zv_t_ip1j ) 136 sshv_b(ji,jj) = zcoefv * ( zv_t_ij + zv_t_ijp1 ) 137 ! now fields 138 zv_t_ij = zs_t(ji ,jj ) * sshn(ji ,jj ,jk) 139 zv_t_ip1j = zs_t(ji+1,jj ) * sshn(ji+1,jj ,jk) 140 zv_t_ijp1 = zs_t(ji ,jj+1) * sshn(ji ,jj+1,jk) 141 zv_t_ip1jp1 = zs_t(ji ,jj+1) * sshn(ji ,jj+1,jk) 142 sshu_n(ji,jj) = zcoefu * ( zv_t_ij + zv_t_ip1j ) 143 sshv_n(ji,jj) = zcoefv * ( zv_t_ij + zv_t_ijp1 ) 144 sshf_n(ji,jj) = zcoeff * ( zv_t_ij + zv_t_ip1j + zv_t_ijp1 + zv_t_ip1jp1 ) 135 145 END DO 136 146 END DO 137 CALL lbc_lnk( sshu_b, 'U', 1. ) ; CALL lbc_lnk( sshu_n, 'U', 1. ) ! lateral boundary conditions 138 CALL lbc_lnk( sshv_b, 'V', 1. ) ; CALL lbc_lnk( sshv_n, 'V', 1. ) 139 CALL lbc_lnk( sshf_b, 'F', 1. ) ; CALL lbc_lnk( sshf_n, 'F', 1. ) 147 CALL lbc_lnk( sshu_n, 'U', 1. ) ; CALL lbc_lnk( sshu_b, 'U', 1. ) ! lateral boundary conditions 148 CALL lbc_lnk( sshv_n, 'V', 1. ) ; CALL lbc_lnk( sshv_b, 'V', 1. ) 149 CALL lbc_lnk( sshf_n, 'F', 1. ) 150 151 ! initialise before scale factors at (u/v)-points 152 ! Scale factor anomaly at (u/v)-points: surface averaging of scale factor at t-points 153 DO jk = 1, jpkm1 154 DO jj = 1, jpjm1 155 DO ji = 1, jpim1 156 zv_t_ij = zs_t(ji ,jj ) * fse3t_b(ji ,jj ,jk) 157 zv_t_ip1j = zs_t(ji+1,jj ) * fse3t_b(ji+1,jj ,jk) 158 zv_t_ijp1 = zs_t(ji ,jj+1) * fse3t_b(ji ,jj+1,jk) 159 fse3u_b(ji,jj,jk) = umask(ji,jj,jk) * ( zs_u_1(ji,jj) * ( zv_t_ij + zv_t_ip1j ) - fse3u_0(ji,jj,jk) ) 160 fse3v_b(ji,jj,jk) = vmask(ji,jj,jk) * ( zs_v_1(ji,jj) * ( zv_t_ij + zv_t_ijp1 ) - fse3v_0(ji,jj,jk) ) 161 END DO 162 END DO 163 END DO 164 CALL lbc_lnk( fse3u_b, 'U', 1. ) ! lateral boundary conditions 165 CALL lbc_lnk( fse3v_b, 'U', 1. ) 166 ! Add initial scale factor to scale factor anomaly 167 fse3u_b(:,:,:) = fse3u_b(:,:,:) + fse3u_0(:,:,:) 168 fse3v_b(:,:,:) = fse3v_b(:,:,:) + fse3v_0(:,:,:) 140 169 ! 141 170 END SUBROUTINE dom_vvl
Note: See TracChangeset
for help on using the changeset viewer.