Changeset 2148 for branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/DOM
- Timestamp:
- 2010-10-04T15:53:42+02:00 (14 years ago)
- Location:
- branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/DOM
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/DOM/dom_oce.F90
r2006 r2148 145 145 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: e3vw_1 !: analytical vertical scale factors at VW-- 146 146 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: e3w_1 , e3uw_1 !: W--UW points (m) 147 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: e3t_b !: before - - - - T points (m) 148 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: e3u_b , e3v_b !: - - - - - U--V points (m) 147 149 #else 148 150 LOGICAL, PUBLIC, PARAMETER :: lk_vvl = .FALSE. !: fixed grid flag -
branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/DOM/domvvl.F90
r2004 r2148 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 … … 62 64 IF( lk_zco ) CALL ctl_stop( 'dom_vvl : key_zco is incompatible with variable volume option key_vvl') 63 65 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 66 fsdept(:,:,:) = gdept (:,:,:) 67 fsdepw(:,:,:) = gdepw (:,:,:) 68 fsde3w(:,:,:) = gdep3w(:,:,:) 69 fse3t (:,:,:) = e3t (:,:,:) 70 fse3u (:,:,:) = e3u (:,:,:) 71 fse3v (:,:,:) = e3v (:,:,:) 72 fse3f (:,:,:) = e3f (:,:,:) 73 fse3w (:,:,:) = e3w (:,:,:) 74 fse3uw(:,:,:) = e3uw (:,:,:) 75 fse3vw(:,:,:) = e3vw (:,:,:) 89 76 90 77 ! !== mu computation ==! … … 130 117 hv_0(:,:) = hv_0(:,:) + fse3v_0(:,:,jk) * vmask(:,:,jk) 131 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(:,:) 132 125 133 126 DO jj = 1, jpjm1 ! initialise before and now Sea Surface Height at u-, v-, f-points 134 127 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) ) 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 ) 133 zv_t_ip1j = zs_t(ji+1,jj ) * sshb(ji+1,jj ) 134 zv_t_ijp1 = zs_t(ji ,jj+1) * sshb(ji ,jj+1) 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 ) 139 zv_t_ip1j = zs_t(ji+1,jj ) * sshn(ji+1,jj ) 140 zv_t_ijp1 = zs_t(ji ,jj+1) * sshn(ji ,jj+1) 141 zv_t_ip1jp1 = zs_t(ji ,jj+1) * sshn(ji ,jj+1) 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 ) 150 145 END DO 151 146 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. ) 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(:,:,:), 'V', 1. ) 166 ! Add initial scale factor to scale factor anomaly 167 fse3u_b(:,:,:) = fse3u_b(:,:,:) + fse3u_0(:,:,:) 168 fse3v_b(:,:,:) = fse3v_b(:,:,:) + fse3v_0(:,:,:) 155 169 ! 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 170 END SUBROUTINE dom_vvl 173 171 -
branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/DOM/domzgr_substitute.h90
r1565 r2148 46 46 # define fse3vw(i,j,k) e3vw_1(i,j,k) 47 47 48 # define fsdept_b(i,j,k) (fsdept_0(i,j,k)*(1.+sshb(i,j)*mut(i,j,k))) 49 # define fsdepw_b(i,j,k) (fsdepw_0(i,j,k)*(1.+sshb(i,j)*mut(i,j,k))) 50 # define fsde3w_b(i,j,k) (fsde3w_0(i,j,k)*(1.+sshb(i,j)*mut(i,j,k))-sshb(i,j)) 51 # define fse3t_b(i,j,k) (fse3t_0(i,j,k)*(1.+sshb(i,j)*mut(i,j,k))) 52 # define fse3u_b(i,j,k) (fse3u_0(i,j,k)*(1.+sshu_b(i,j)*muu(i,j,k))) 53 # define fse3v_b(i,j,k) (fse3v_0(i,j,k)*(1.+sshv_b(i,j)*muv(i,j,k))) 54 # define fse3f_b(i,j,k) (fse3f_0(i,j,k)*(1.+sshf_b(i,j)*muf(i,j,k))) 55 # define fse3w_b(i,j,k) (fse3w_0(i,j,k)*(1.+sshb(i,j)*mut(i,j,k))) 48 # define fse3t_b(i,j,k) e3t_b(i,j,k) 49 # define fse3u_b(i,j,k) e3u_b(i,j,k) 50 # define fse3v_b(i,j,k) e3v_b(i,j,k) 56 51 # define fse3uw_b(i,j,k) (fse3uw_0(i,j,k)*(1.+sshu_b(i,j)*muu(i,j,k))) 57 52 # define fse3vw_b(i,j,k) (fse3vw_0(i,j,k)*(1.+sshv_b(i,j)*muv(i,j,k))) … … 70 65 # define fse3t_m(i,j,k) (fse3t_0(i,j,k)*(1.+ssh_m(i,j)*mut(i,j,k))) 71 66 72 # define fsdept_a(i,j,k) (fsdept_0(i,j,k)*(1.+ssha(i,j)*mut(i,j,k)))73 # define fsdepw_a(i,j,k) (fsdepw_0(i,j,k)*(1.+ssha(i,j)*mut(i,j,k)))74 # define fsde3w_a(i,j,k) (fsde3w_0(i,j,k)*(1.+ssha(i,j)*mut(i,j,k))-ssha(i,j))75 67 # define fse3t_a(i,j,k) (fse3t_0(i,j,k)*(1.+ssha(i,j)*mut(i,j,k))) 76 68 # define fse3u_a(i,j,k) (fse3u_0(i,j,k)*(1.+sshu_a(i,j)*muu(i,j,k))) 77 69 # define fse3v_a(i,j,k) (fse3v_0(i,j,k)*(1.+sshv_a(i,j)*muv(i,j,k))) 78 # define fse3f_a(i,j,k) (fse3f_0(i,j,k)*(1.+sshf_a(i,j)*muf(i,j,k)))79 # define fse3w_a(i,j,k) (fse3w_0(i,j,k)*(1.+ssha(i,j)*mut(i,j,k)))80 # define fse3uw_a(i,j,k) (fse3uw_0(i,j,k)*(1.+sshu_a(i,j)*muu(i,j,k)))81 # define fse3vw_a(i,j,k) (fse3vw_0(i,j,k)*(1.+sshv_a(i,j)*muv(i,j,k)))82 70 83 71 #else … … 94 82 # define fse3vw(i,j,k) fse3vw_0(i,j,k) 95 83 96 # define fsdept_b(i,j,k) fsdept_0(i,j,k)97 # define fsdepw_b(i,j,k) fsdepw_0(i,j,k)98 # define fsde3w_b(i,j,k) fsde3w_0(i,j,k)99 84 # define fse3t_b(i,j,k) fse3t_0(i,j,k) 100 85 # define fse3u_b(i,j,k) fse3u_0(i,j,k) 101 86 # define fse3v_b(i,j,k) fse3v_0(i,j,k) 102 # define fse3f_b(i,j,k) fse3f_0(i,j,k)103 # define fse3w_b(i,j,k) fse3w_0(i,j,k)104 87 # define fse3uw_b(i,j,k) fse3uw_0(i,j,k) 105 88 # define fse3vw_b(i,j,k) fse3vw_0(i,j,k) … … 118 101 # define fse3t_m(i,j,k) fse3t_0(i,j,k) 119 102 120 # define fsdept_a(i,j,k) fsdept_0(i,j,k)121 # define fsdepw_a(i,j,k) fsdepw_0(i,j,k)122 # define fsde3w_a(i,j,k) fsde3w_0(i,j,k)123 103 # define fse3t_a(i,j,k) fse3t_0(i,j,k) 124 104 # define fse3u_a(i,j,k) fse3u_0(i,j,k) 125 105 # define fse3v_a(i,j,k) fse3v_0(i,j,k) 126 # define fse3f_a(i,j,k) fse3f_0(i,j,k)127 # define fse3w_a(i,j,k) fse3w_0(i,j,k)128 # define fse3uw_a(i,j,k) fse3uw_0(i,j,k)129 # define fse3vw_a(i,j,k) fse3vw_0(i,j,k)130 106 #endif 131 107 !!----------------------------------------------------------------------
Note: See TracChangeset
for help on using the changeset viewer.