Changeset 2528 for trunk/NEMOGCM/NEMO/OPA_SRC/DOM/domvvl.F90
- Timestamp:
- 2010-12-27T18:33:53+01:00 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMOGCM/NEMO/OPA_SRC/DOM/domvvl.F90
- Property svn:eol-style deleted
r1983 r2528 36 36 # include "vectopt_loop_substitute.h90" 37 37 !!---------------------------------------------------------------------- 38 !! NEMO/OPA 3. 2 , LOCEAN-IPSL (2009)38 !! NEMO/OPA 3.3 , NEMO Consortium (2010) 39 39 !! $Id$ 40 !! Software governed by the CeCILL licence ( modipsl/doc/NEMO_CeCILL.txt)40 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 41 41 !!---------------------------------------------------------------------- 42 42 … … 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 … … 60 62 ENDIF 61 63 62 IF( lk_zco ) CALL ctl_stop( 'dom_vvl : key_zco is incompatible with variable volume option key_vvl')63 64 64 IF( ln_zco) THEN 65 DO jk = 1, jpk 66 gdept(:,:,jk) = gdept_0(jk) 67 gdepw(:,:,jk) = gdepw_0(jk) 68 gdep3w(:,:,jk) = gdepw_0(jk) 69 e3t (:,:,jk) = e3t_0(jk) 70 e3u (:,:,jk) = e3t_0(jk) 71 e3v (:,:,jk) = e3t_0(jk) 72 e3f (:,:,jk) = e3t_0(jk) 73 e3w (:,:,jk) = e3w_0(jk) 74 e3uw(:,:,jk) = e3w_0(jk) 75 e3vw(:,:,jk) = e3w_0(jk) 76 END DO 77 ELSE 78 fsdept(:,:,:) = gdept (:,:,:) 79 fsdepw(:,:,:) = gdepw (:,:,:) 80 fsde3w(:,:,:) = gdep3w(:,:,:) 81 fse3t (:,:,:) = e3t (:,:,:) 82 fse3u (:,:,:) = e3u (:,:,:) 83 fse3v (:,:,:) = e3v (:,:,:) 84 fse3f (:,:,:) = e3f (:,:,:) 85 fse3w (:,:,:) = e3w (:,:,:) 86 fse3uw(:,:,:) = e3uw (:,:,:) 87 fse3vw(:,:,:) = e3vw (:,:,:) 88 ENDIF 65 fsdept(:,:,:) = gdept (:,:,:) 66 fsdepw(:,:,:) = gdepw (:,:,:) 67 fsde3w(:,:,:) = gdep3w(:,:,:) 68 fse3t (:,:,:) = e3t (:,:,:) 69 fse3u (:,:,:) = e3u (:,:,:) 70 fse3v (:,:,:) = e3v (:,:,:) 71 fse3f (:,:,:) = e3f (:,:,:) 72 fse3w (:,:,:) = e3w (:,:,:) 73 fse3uw(:,:,:) = e3uw (:,:,:) 74 fse3vw(:,:,:) = e3vw (:,:,:) 89 75 90 76 ! !== mu computation ==! … … 130 116 hv_0(:,:) = hv_0(:,:) + fse3v_0(:,:,jk) * vmask(:,:,jk) 131 117 END DO 118 119 ! surface at t-points and inverse surface at (u/v)-points used in surface averaging computations 120 ! for ssh and scale factors 121 zs_t (:,:) = e1t(:,:) * e2t(:,:) 122 zs_u_1(:,:) = 0.5 / e1u(:,:) * e2u(:,:) 123 zs_v_1(:,:) = 0.5 / e1v(:,:) * e2v(:,:) 132 124 133 125 DO jj = 1, jpjm1 ! initialise before and now Sea Surface Height at u-, v-, f-points 134 126 DO ji = 1, jpim1 ! NO vector opt. 135 zcoefu = 0.5 * umask(ji,jj,1) / ( e1u(ji,jj) * e2u(ji,jj) ) 136 zcoefv = 0.5 * vmask(ji,jj,1) / ( e1v(ji,jj) * e2v(ji,jj) ) 137 zcoeff = 0.25 * umask(ji,jj,1) * umask(ji,jj+1,1) 138 sshu_b(ji,jj) = zcoefu * ( e1t(ji ,jj) * e2t(ji ,jj) * sshb(ji ,jj) & 139 & + e1t(ji+1,jj) * e2t(ji+1,jj) * sshb(ji+1,jj) ) 140 sshv_b(ji,jj) = zcoefv * ( e1t(ji,jj ) * e2t(ji,jj ) * sshb(ji,jj ) & 141 & + e1t(ji,jj+1) * e2t(ji,jj+1) * sshb(ji,jj+1) ) 142 sshf_b(ji,jj) = zcoeff * ( sshb(ji ,jj) + sshb(ji ,jj+1) & 143 & + sshb(ji+1,jj) + sshb(ji+1,jj+1) ) 144 sshu_n(ji,jj) = zcoefu * ( e1t(ji ,jj) * e2t(ji ,jj) * sshn(ji ,jj) & 145 & + e1t(ji+1,jj) * e2t(ji+1,jj) * sshn(ji+1,jj) ) 146 sshv_n(ji,jj) = zcoefv * ( e1t(ji,jj ) * e2t(ji,jj ) * sshn(ji,jj ) & 147 & + e1t(ji,jj+1) * e2t(ji,jj+1) * sshn(ji,jj+1) ) 148 sshf_n(ji,jj) = zcoeff * ( sshn(ji ,jj) + sshn(ji ,jj+1) & 149 & + sshn(ji+1,jj) + sshn(ji+1,jj+1) ) 127 zcoefu = umask(ji,jj,1) * zs_u_1(ji,jj) 128 zcoefv = vmask(ji,jj,1) * zs_v_1(ji,jj) 129 zcoeff = 0.5 * umask(ji,jj,1) * umask(ji,jj+1,1) / ( e1f(ji,jj) * e2f(ji,jj) ) 130 ! before fields 131 zv_t_ij = zs_t(ji ,jj ) * sshb(ji ,jj ) 132 zv_t_ip1j = zs_t(ji+1,jj ) * sshb(ji+1,jj ) 133 zv_t_ijp1 = zs_t(ji ,jj+1) * sshb(ji ,jj+1) 134 sshu_b(ji,jj) = zcoefu * ( zv_t_ij + zv_t_ip1j ) 135 sshv_b(ji,jj) = zcoefv * ( zv_t_ij + zv_t_ijp1 ) 136 ! now fields 137 zv_t_ij = zs_t(ji ,jj ) * sshn(ji ,jj ) 138 zv_t_ip1j = zs_t(ji+1,jj ) * sshn(ji+1,jj ) 139 zv_t_ijp1 = zs_t(ji ,jj+1) * sshn(ji ,jj+1) 140 zv_t_ip1jp1 = zs_t(ji ,jj+1) * sshn(ji ,jj+1) 141 sshu_n(ji,jj) = zcoefu * ( zv_t_ij + zv_t_ip1j ) 142 sshv_n(ji,jj) = zcoefv * ( zv_t_ij + zv_t_ijp1 ) 143 sshf_n(ji,jj) = zcoeff * ( zv_t_ij + zv_t_ip1j + zv_t_ijp1 + zv_t_ip1jp1 ) 150 144 END DO 151 145 END DO 152 CALL lbc_lnk( sshu_b, 'U', 1. ) ; CALL lbc_lnk( sshu_n, 'U', 1. ) ! lateral boundary conditions 153 CALL lbc_lnk( sshv_b, 'V', 1. ) ; CALL lbc_lnk( sshv_n, 'V', 1. ) 154 CALL lbc_lnk( sshf_b, 'F', 1. ) ; CALL lbc_lnk( sshf_n, 'F', 1. ) 146 CALL lbc_lnk( sshu_n, 'U', 1. ) ; CALL lbc_lnk( sshu_b, 'U', 1. ) ! lateral boundary conditions 147 CALL lbc_lnk( sshv_n, 'V', 1. ) ; CALL lbc_lnk( sshv_b, 'V', 1. ) 148 CALL lbc_lnk( sshf_n, 'F', 1. ) 149 150 ! initialise before scale factors at (u/v)-points 151 ! Scale factor anomaly at (u/v)-points: surface averaging of scale factor at t-points 152 DO jk = 1, jpkm1 153 DO jj = 1, jpjm1 154 DO ji = 1, jpim1 155 zv_t_ij = zs_t(ji ,jj ) * fse3t_b(ji ,jj ,jk) 156 zv_t_ip1j = zs_t(ji+1,jj ) * fse3t_b(ji+1,jj ,jk) 157 zv_t_ijp1 = zs_t(ji ,jj+1) * fse3t_b(ji ,jj+1,jk) 158 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) ) 159 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) ) 160 END DO 161 END DO 162 END DO 163 CALL lbc_lnk( fse3u_b(:,:,:), 'U', 1. ) ! lateral boundary conditions 164 CALL lbc_lnk( fse3v_b(:,:,:), 'V', 1. ) 165 ! Add initial scale factor to scale factor anomaly 166 fse3u_b(:,:,:) = fse3u_b(:,:,:) + fse3u_0(:,:,:) 167 fse3v_b(:,:,:) = fse3v_b(:,:,:) + fse3v_0(:,:,:) 155 168 ! 156 DO jk = 1, jpkm1157 fsdept(:,:,jk) = fsdept_n(:,:,jk) ! now local depths stored in fsdep. arrays158 fsdepw(:,:,jk) = fsdepw_n(:,:,jk)159 fsde3w(:,:,jk) = fsde3w_n(:,:,jk)160 !161 fse3t (:,:,jk) = fse3t_n (:,:,jk) ! vertical scale factors stored in fse3. arrays162 fse3u (:,:,jk) = fse3u_n (:,:,jk)163 fse3v (:,:,jk) = fse3v_n (:,:,jk)164 fse3f (:,:,jk) = fse3f_n (:,:,jk)165 fse3w (:,:,jk) = fse3w_n (:,:,jk)166 fse3uw(:,:,jk) = fse3uw_n(:,:,jk)167 fse3vw(:,:,jk) = fse3vw_n(:,:,jk)168 END DO169 170 171 172 169 END SUBROUTINE dom_vvl 173 170
Note: See TracChangeset
for help on using the changeset viewer.