Changeset 2240 for branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC
- Timestamp:
- 2010-10-13T10:48:48+02:00 (14 years ago)
- Location:
- branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC
- Files:
-
- 14 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/DOM/dom_oce.F90
r2239 r2240 120 120 LOGICAL, PUBLIC :: ln_zps = .FALSE. !: z-coordinate - partial step 121 121 LOGICAL, PUBLIC :: ln_sco = .FALSE. !: s-coordinate or hybrid z-s coordinate 122 #if defined key_zco123 LOGICAL, PUBLIC, PARAMETER :: lk_zco = .TRUE. !: z-coordinate flag (1D arrays)124 #else125 LOGICAL, PUBLIC, PARAMETER :: lk_zco = .FALSE. !: z-coordinate flag (3D arrays)126 122 127 123 !! All coordinates … … 133 129 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: e3vw !: analytical vertical scale factors at VW-- 134 130 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: e3w , e3uw !: W--UW points (m) 135 #endif136 131 #if defined key_vvl 137 132 LOGICAL, PUBLIC, PARAMETER :: lk_vvl = .TRUE. !: variable grid flag -
branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/DOM/domvvl.F90
r2236 r2240 62 62 ENDIF 63 63 64 IF( lk_zco ) CALL ctl_stop( 'dom_vvl : key_zco is incompatible with variable volume option key_vvl')65 64 66 65 fsdept(:,:,:) = gdept (:,:,:) -
branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/DOM/domwri.F90
r2004 r2240 168 168 CALL iom_rstput( 0, 0, inum4, 'mbathy', zprt, ktype = jp_i2 ) 169 169 170 #if ! defined key_zco171 170 IF( ln_sco ) THEN ! s-coordinate 172 171 CALL iom_rstput( 0, 0, inum4, 'hbatt', hbatt ) ! ! depth … … 235 234 ENDIF 236 235 237 #endif238 236 239 237 IF( ln_zco ) THEN -
branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/DOM/domzgr.F90
r2236 r2240 74 74 !! - vertical coordinate (gdep., e3.) depending on the 75 75 !! coordinate chosen : 76 !! ln_zco=T z-coordinate (forced if lk_zco)76 !! ln_zco=T z-coordinate 77 77 !! ln_zps=T z-coordinate with partial steps 78 78 !! ln_zco=T s-coordinate … … 103 103 IF( ln_sco ) ioptio = ioptio + 1 104 104 IF ( ioptio /= 1 ) CALL ctl_stop( ' none or several vertical coordinate options used' ) 105 IF( lk_zco ) THEN106 IF(lwp) WRITE(numout,*) ' z-coordinate with reduced incore memory requirement'107 IF( ln_zps .OR. ln_sco ) CALL ctl_stop( ' reduced memory with zps or sco option is impossible' )108 ENDIF109 105 110 106 ! Build the vertical coordinate system … … 679 675 !! ** Purpose : define the z-coordinate system 680 676 !! 681 !! ** Method : set 3D coord. arrays to reference 1D array if lk_zco=T677 !! ** Method : set 3D coord. arrays to reference 1D array 682 678 !!---------------------------------------------------------------------- 683 679 INTEGER :: jk 684 680 !!---------------------------------------------------------------------- 685 681 ! 686 IF( .NOT.lk_zco ) THEN 687 DO jk = 1, jpk 688 fsdept(:,:,jk) = gdept_0(jk) 689 fsdepw(:,:,jk) = gdepw_0(jk) 690 fsde3w(:,:,jk) = gdepw_0(jk) 691 fse3t (:,:,jk) = e3t_0(jk) 692 fse3u (:,:,jk) = e3t_0(jk) 693 fse3v (:,:,jk) = e3t_0(jk) 694 fse3f (:,:,jk) = e3t_0(jk) 695 fse3w (:,:,jk) = e3w_0(jk) 696 fse3uw(:,:,jk) = e3w_0(jk) 697 fse3vw(:,:,jk) = e3w_0(jk) 698 END DO 699 ENDIF 682 DO jk = 1, jpk 683 fsdept(:,:,jk) = gdept_0(jk) 684 fsdepw(:,:,jk) = gdepw_0(jk) 685 fsde3w(:,:,jk) = gdepw_0(jk) 686 fse3t (:,:,jk) = e3t_0(jk) 687 fse3u (:,:,jk) = e3t_0(jk) 688 fse3v (:,:,jk) = e3t_0(jk) 689 fse3f (:,:,jk) = e3t_0(jk) 690 fse3w (:,:,jk) = e3w_0(jk) 691 fse3uw(:,:,jk) = e3w_0(jk) 692 fse3vw(:,:,jk) = e3w_0(jk) 693 END DO 700 694 ! 701 695 END SUBROUTINE zgr_zco 702 696 703 #if defined key_zco704 !!----------------------------------------------------------------------705 !! 'key_zco' : "pure" zco (gdep & e3 are 1D arrays)706 !!----------------------------------------------------------------------707 SUBROUTINE zgr_zps ! Empty routine708 END SUBROUTINE zgr_zps709 SUBROUTINE zgr_sco ! Empty routine710 END SUBROUTINE zgr_sco711 712 #else713 697 !!---------------------------------------------------------------------- 714 698 !! Default option : zco, zps and/or sco available (gedp & e3 are 3D arrays) … … 1558 1542 END SUBROUTINE zgr_sco 1559 1543 1560 #endif1561 1544 1562 1545 !!====================================================================== -
branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/DOM/domzgr_substitute.h90
r2236 r2240 8 8 !! 3.1 ! 2009-02 (G. Madec, M. Leclair) pure z* coordinate 9 9 !!---------------------------------------------------------------------- 10 #if defined key_zco11 ! reference for pure z-coordinate (1D - no i,j and time dependency)12 # define fsdept_0(i,j,k) gdept_0(k)13 # define fsdepw_0(i,j,k) gdepw_0(k)14 # define fsde3w_0(i,j,k) gdepw_0(k)15 # define fse3t_0(i,j,k) e3t_0(k)16 # define fse3u_0(i,j,k) e3t_0(k)17 # define fse3v_0(i,j,k) e3t_0(k)18 # define fse3f_0(i,j,k) e3t_0(k)19 # define fse3w_0(i,j,k) e3w_0(k)20 # define fse3uw_0(i,j,k) e3w_0(k)21 # define fse3vw_0(i,j,k) e3w_0(k)22 #else23 10 ! reference for s- or zps-coordinate (3D no time dependency) 24 11 # define fsdept_0(i,j,k) gdept(i,j,k) … … 32 19 # define fse3uw_0(i,j,k) e3uw(i,j,k) 33 20 # define fse3vw_0(i,j,k) e3vw(i,j,k) 34 #endif35 21 #if defined key_vvl 36 22 ! s* or z*-coordinate (3D + time dependency) + use of additional now arrays (..._1) -
branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/DYN/divcur.F90
r2236 r2240 54 54 !! - compute the now divergence given by : 55 55 !! hdivn = 1/(e1t*e2t*e3t) ( di[e2u*e3u un] + dj[e1v*e3v vn] ) 56 !! Note: if lk_zco=T, e3u=e3v=e3t, they are simplified in the57 56 !! above expression 58 57 !! - apply lateral boundary conditions on hdivn … … 112 111 DO jj = 2, jpjm1 113 112 DO ji = fs_2, fs_jpim1 ! vector opt. 114 #if defined key_zco115 hdivn(ji,jj,jk) = ( e2u(ji,jj) * un(ji,jj,jk) - e2u(ji-1,jj ) * un(ji-1,jj ,jk) &116 & + e1v(ji,jj) * vn(ji,jj,jk) - e1v(ji ,jj-1) * vn(ji ,jj-1,jk) ) &117 & / ( e1t(ji,jj) * e2t(ji,jj) )118 #else119 113 hdivn(ji,jj,jk) = & 120 114 ( e2u(ji,jj)*fse3u(ji,jj,jk) * un(ji,jj,jk) - e2u(ji-1,jj )*fse3u(ji-1,jj ,jk) * un(ji-1,jj ,jk) & 121 115 + e1v(ji,jj)*fse3v(ji,jj,jk) * vn(ji,jj,jk) - e1v(ji ,jj-1)*fse3v(ji ,jj-1,jk) * vn(ji ,jj-1,jk) ) & 122 116 / ( e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) ) 123 #endif124 117 END DO 125 118 END DO … … 266 259 !! - compute the now divergence given by : 267 260 !! hdivn = 1/(e1t*e2t*e3t) ( di[e2u*e3u un] + dj[e1v*e3v vn] ) 268 !! Note: if lk_zco=T, e3u=e3v=e3t, they are simplified in the269 261 !! above expression 270 262 !! - apply lateral boundary conditions on hdivn … … 319 311 DO jj = 2, jpjm1 320 312 DO ji = fs_2, fs_jpim1 ! vector opt. 321 #if defined key_zco322 hdivn(ji,jj,jk) = ( e2u(ji,jj) * un(ji,jj,jk) - e2u(ji-1,jj ) * un(ji-1,jj ,jk) &323 & + e1v(ji,jj) * vn(ji,jj,jk) - e1v(ji ,jj-1) * vn(ji ,jj-1,jk) ) &324 / ( e1t(ji,jj) * e2t(ji,jj) )325 #else326 313 hdivn(ji,jj,jk) = & 327 314 ( e2u(ji,jj)*fse3u(ji,jj,jk) * un(ji,jj,jk) - e2u(ji-1,jj )*fse3u(ji-1,jj ,jk) * un(ji-1,jj ,jk) & 328 315 + e1v(ji,jj)*fse3v(ji,jj,jk) * vn(ji,jj,jk) - e1v(ji ,jj-1)*fse3v(ji ,jj-1,jk) * vn(ji ,jj-1,jk) ) & 329 316 / ( e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) ) 330 #endif331 317 END DO 332 318 END DO -
branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/DYN/dynldf_bilap.F90
r1152 r2240 162 162 zuf(ji,jj,jk) = fmask(ji,jj,jk) * ( zcv(ji+1,jj ) - zcv(ji,jj) & 163 163 & - zcu(ji ,jj+1) + zcu(ji,jj) ) & 164 #if defined key_zco165 & / ( e1f(ji,jj)*e2f(ji,jj) )166 #else167 164 & * fse3f(ji,jj,jk) / ( e1f(ji,jj)*e2f(ji,jj) ) 168 #endif169 165 END DO 170 166 END DO … … 173 169 DO jj = 1, jpjm1 174 170 DO ji = 1, fs_jpim1 ! vector opt. 175 #if defined key_zco176 zlu(ji,jj,jk) = e2u(ji,jj) * zlu(ji,jj,jk)177 zlv(ji,jj,jk) = e1v(ji,jj) * zlv(ji,jj,jk)178 #else179 171 zlu(ji,jj,jk) = e2u(ji,jj) * fse3u(ji,jj,jk) * zlu(ji,jj,jk) 180 172 zlv(ji,jj,jk) = e1v(ji,jj) * fse3v(ji,jj,jk) * zlv(ji,jj,jk) 181 #endif182 173 END DO 183 174 END DO … … 186 177 DO jj = 2, jpj 187 178 DO ji = fs_2, jpi ! vector opt. 188 #if defined key_zco189 zbt = e1t(ji,jj) * e2t(ji,jj)190 #else191 179 zbt = e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) 192 #endif193 180 zut(ji,jj,jk) = ( zlu(ji,jj,jk) - zlu(ji-1,jj ,jk) & 194 181 & + zlv(ji,jj,jk) - zlv(ji ,jj-1,jk) ) / zbt … … 210 197 DO jj = 2, jpjm1 211 198 DO ji = fs_2, fs_jpim1 ! vector opt. 212 #if defined key_zco213 ze2u = e2u(ji,jj)214 ze2v = e1v(ji,jj)215 #else216 199 ze2u = e2u(ji,jj) * fse3u(ji,jj,jk) 217 200 ze2v = e1v(ji,jj) * fse3v(ji,jj,jk) 218 #endif219 201 ! horizontal biharmonic diffusive trends 220 202 zua = - ( zuf(ji ,jj,jk) - zuf(ji,jj-1,jk) ) / ze2u & -
branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/DYN/dynldf_lap.F90
r1954 r2240 50 50 !! difu = 1/e1u di[ahmt hdivb] - 1/(e2u*e3u) dj-1[e3f ahmf rotb] 51 51 !! difv = 1/e2v dj[ahmt hdivb] + 1/(e1v*e3v) di-1[e3f ahmf rotb] 52 !! If lk_zco=T, e3f=e3u=e3v, the vertical scale factor are simplified53 52 !! in the rotational part of the diffusion. 54 53 !! Add this before trend to the general trend (ua,va): … … 87 86 DO jj = 2, jpjm1 88 87 DO ji = fs_2, fs_jpim1 ! vector opt. 89 #if defined key_zco90 ! horizontal diffusive trends91 ze2u = rotb (ji,jj,jk)*fsahmf(ji,jj,jk)92 ze1v = hdivb(ji,jj,jk)*fsahmt(ji,jj,jk)93 zua = - ( ze2u - rotb (ji,jj-1,jk)*fsahmf(ji,jj-1,jk) ) / e2u(ji,jj) &94 + ( hdivb(ji+1,jj,jk)*fsahmt(ji+1,jj,jk) - ze1v ) / e1u(ji,jj)95 96 zva = + ( ze2u - rotb (ji-1,jj,jk)*fsahmf(ji-1,jj,jk) ) / e1v(ji,jj) &97 + ( hdivb(ji,jj+1,jk)*fsahmt(ji,jj+1,jk) - ze1v ) / e2v(ji,jj)98 #else99 88 ze2u = rotb (ji,jj,jk)*fsahmf(ji,jj,jk)*fse3f(ji,jj,jk) 100 89 ze1v = hdivb(ji,jj,jk)*fsahmt(ji,jj,jk) … … 105 94 zva = + ( ze2u - rotb (ji-1,jj,jk)*fsahmf(ji-1,jj,jk)*fse3f(ji-1,jj,jk) ) / ( e1v(ji,jj) * fse3v(ji,jj,jk) ) & 106 95 + ( hdivb(ji,jj+1,jk)*fsahmt(ji,jj+1,jk) - ze1v ) / e2v(ji,jj) 107 #endif108 96 109 97 ! add it to the general momentum trends -
branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/LDF/ldfdyn_c3d.h90
r2236 r2240 148 148 END DO 149 149 ELSE ! partial steps or s-ccordinate 150 # if defined key_zco151 zc = gdept_0(jpkm1)152 # else153 150 zc = MAXVAL( fsdept(:,:,jpkm1) ) 154 # endif155 151 IF( lk_mpp ) CALL mpp_max( zc ) ! max over the global domain 156 152 -
branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/TRA/traadv_muscl.F90
r2236 r2240 180 180 ! ! "Poleward" heat and salt transports (contribution of upstream fluxes) 181 181 IF( cdtype == 'TRA' .AND. ln_diaptr .AND. ( MOD( kt, nf_ptr ) == 0 ) ) THEN 182 IF( lk_zco ) THEN183 DO jk = 1, jpkm1184 DO jj = 2, jpjm1185 DO ji = fs_2, fs_jpim1 ! vector opt.186 zwy(ji,jj,jk) = zwy(ji,jj,jk) * fse3v(ji,jj,jk)187 END DO188 END DO189 END DO190 ENDIF191 182 IF( jn == jp_tem ) pht_adv(:) = ptr_vj( zwy(:,:,:) ) 192 183 IF( jn == jp_sal ) pst_adv(:) = ptr_vj( zwy(:,:,:) ) -
branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/TRA/traadv_muscl2.F90
r2236 r2240 202 202 ! ! "Poleward" heat and salt transports (contribution of upstream fluxes) 203 203 IF( cdtype == 'TRA' .AND. ln_diaptr .AND. ( MOD( kt, nf_ptr ) == 0 ) ) THEN 204 IF( lk_zco ) THEN205 DO jk = 1, jpkm1206 DO jj = 2, jpjm1207 DO ji = fs_2, fs_jpim1 ! vector opt.208 zwy(ji,jj,jk) = zwy(ji,jj,jk) * fse3v(ji,jj,jk)209 END DO210 END DO211 END DO212 ENDIF213 204 IF( jn == jp_tem ) pht_adv(:) = ptr_vj( zwy(:,:,:) ) 214 205 IF( jn == jp_sal ) pst_adv(:) = ptr_vj( zwy(:,:,:) ) -
branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/TRA/traadv_ubs.F90
r2236 r2240 184 184 ! ! "Poleward" heat and salt transports (contribution of upstream fluxes) 185 185 IF( cdtype == 'TRA' .AND. ln_diaptr .AND. ( MOD( kt, nf_ptr ) == 0 ) ) THEN 186 IF( lk_zco ) THEN187 DO jk = 1, jpkm1188 DO jj = 2, jpjm1189 DO ji = fs_2, fs_jpim1 ! vector opt.190 zwy(ji,jj,jk) = zwy(ji,jj,jk) * fse3v(ji,jj,jk)191 END DO192 END DO193 END DO194 ENDIF195 186 IF( jn == jp_tem ) pht_adv(:) = ptr_vj( zwy(:,:,:) ) 196 187 IF( jn == jp_sal ) pst_adv(:) = ptr_vj( zwy(:,:,:) ) -
branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/TRA/traldf_lap.F90
r2104 r2240 57 57 !! difft = 1/(e1t*e2t*e3t) { di-1[ aht e2u*e3u/e1u di(tb) ] 58 58 !! + dj-1[ aht e1v*e3v/e2v dj(tb) ] } 59 !! Note: key_zco defined, the e3t=e3u=e3v, the trend becomes:60 !! difft = 1/(e1t*e2t) { di-1[ aht e2u/e1u di(tb) ]61 !! + dj-1[ aht e1v/e2v dj(tb) ] }62 59 !! Add this trend to the general tracer trend pta : 63 60 !! pta = pta + difft -
branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/TRA/tranxt.F90
r2236 r2240 143 143 ! Leap-Frog + Asselin filter time stepping 144 144 IF( lk_vvl ) THEN ; CALL tra_nxt_vvl( kt, 'TRA', tsb, tsn, tsa, jpts ) ! variable volume level (vvl) 145 ELSE ; CALL tra_nxt_fix( kt, 145 ELSE ; CALL tra_nxt_fix( kt, 'TRA', tsb, tsn, tsa, jpts ) ! fixed volume level 146 146 ENDIF 147 147 … … 172 172 173 173 174 SUBROUTINE tra_nxt_fix( kt, ptb, ptn, pta, kjpt )174 SUBROUTINE tra_nxt_fix( kt, cdtype, ptb, ptn, pta, kjpt ) 175 175 !!---------------------------------------------------------------------- 176 176 !! *** ROUTINE tra_nxt_fix *** … … 195 195 !! - (ta,sa) time averaged (t,s) (ln_dynhpg_imp = T) 196 196 !!---------------------------------------------------------------------- 197 INTEGER , INTENT(in ) :: kt ! ocean time-step index198 INTEGER , INTENT(in ) :: kjpt ! number of tracers199 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: ptb ! before tracer fields200 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: ptn ! nowtracer fields201 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: pta ! tracer trend202 !!197 INTEGER , INTENT(in ) :: kt ! ocean time-step index 198 CHARACTER(len=3), INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) 199 INTEGER , INTENT(in ) :: kjpt ! number of tracers 200 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: ptb ! before tracer fields 201 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: ptn ! now tracer fields 202 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: pta ! tracer trend 203 203 INTEGER :: ji, jj, jk, jn ! dummy loop indices 204 204 REAL(wp) :: ztd, ztm ! temporary scalars … … 222 222 ELSE ! general case (Leapfrog + Asselin filter 223 223 ! 224 ! ! ----------------------- !225 IF( ln_dynhpg_imp ) THEN! semi-implicite hpg case !226 ! ! ----------------------- !224 ! ! ----------------------- ! 225 IF( ln_dynhpg_imp .AND. cdtype == 'TRA' ) THEN ! semi-implicite hpg case ! 226 ! ! ----------------------- ! 227 227 DO jn = 1, kjpt 228 228 DO jk = 1, jpkm1 … … 317 317 ELSE ! general case (Leapfrog + Asselin filter) 318 318 ! 319 ! ! ----------------------- !320 IF( ln_dynhpg_imp ) THEN! semi-implicite hpg case !321 ! ! ----------------------- !319 ! ! ----------------------- ! 320 IF( ln_dynhpg_imp .AND. cdtype == 'TRA' ) THEN ! semi-implicite hpg case ! 321 ! ! ----------------------- ! 322 322 DO jn = 1, kjpt 323 323 DO jk = 1, jpkm1
Note: See TracChangeset
for help on using the changeset viewer.