[592] | 1 | MODULE domvvl |
---|
| 2 | !!====================================================================== |
---|
| 3 | !! *** MODULE domvvl *** |
---|
| 4 | !! Ocean : |
---|
| 5 | !!====================================================================== |
---|
| 6 | !! History : 9.0 ! 06-06 (B. Levier, L. Marie) original code |
---|
| 7 | !!---------------------------------------------------------------------- |
---|
| 8 | |
---|
| 9 | !!---------------------------------------------------------------------- |
---|
| 10 | !! 'key_vvl' variable volume |
---|
| 11 | !!---------------------------------------------------------------------- |
---|
| 12 | !!---------------------------------------------------------------------- |
---|
| 13 | !! dom_vvl : defined scale factors & depths at each time step |
---|
| 14 | !! dom_vvl_ini : defined coefficients to distribute ssh on each layers |
---|
| 15 | !! dom_vvl_ssh : defined the ocean sea level at each time step |
---|
| 16 | !!---------------------------------------------------------------------- |
---|
| 17 | !! * Modules used |
---|
| 18 | USE oce ! ocean dynamics and tracers |
---|
| 19 | USE dom_oce ! ocean space and time domain |
---|
| 20 | USE in_out_manager ! I/O manager |
---|
| 21 | USE lib_mpp ! distributed memory computing library |
---|
| 22 | USE lbclnk ! ocean lateral boundary conditions (or mpp link) |
---|
[719] | 23 | USE dynspg_oce ! surface pressure gradient variables |
---|
| 24 | USE ocesbc ! ocean surface boundary condition |
---|
| 25 | USE phycst ! physical constants |
---|
[592] | 26 | |
---|
| 27 | IMPLICIT NONE |
---|
| 28 | PRIVATE |
---|
| 29 | |
---|
| 30 | !! * Routine accessibility |
---|
| 31 | PUBLIC dom_vvl_ini ! called by dom_init.F90 |
---|
| 32 | PUBLIC dom_vvl_ssh ! called by trazdf.F90 |
---|
| 33 | PUBLIC dom_vvl ! called by istate.F90 and step.F90 |
---|
[661] | 34 | PUBLIC dom_vvl_sf_ini ! |
---|
| 35 | PUBLIC dom_vvl_sf ! |
---|
[592] | 36 | |
---|
| 37 | !! * Module variables |
---|
| 38 | REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: & !: |
---|
| 39 | mut, muu, muv, muf !: |
---|
| 40 | |
---|
| 41 | REAL(wp), DIMENSION(jpk) :: r2dt ! vertical profile time-step, = 2 rdttra |
---|
| 42 | ! ! except at nit000 (=rdttra) if neuler=0 |
---|
| 43 | |
---|
| 44 | !! * Substitutions |
---|
| 45 | # include "domzgr_substitute.h90" |
---|
| 46 | # include "vectopt_loop_substitute.h90" |
---|
| 47 | !!---------------------------------------------------------------------- |
---|
| 48 | !! OPA 9.0 , LOCEAN-IPSL (2005) |
---|
[719] | 49 | !! $Header$ |
---|
[592] | 50 | !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) |
---|
| 51 | !!---------------------------------------------------------------------- |
---|
| 52 | |
---|
| 53 | CONTAINS |
---|
| 54 | |
---|
| 55 | #if defined key_vvl |
---|
| 56 | |
---|
| 57 | SUBROUTINE dom_vvl_ini |
---|
| 58 | !!---------------------------------------------------------------------- |
---|
| 59 | !! *** ROUTINE dom_vvl_ini *** |
---|
| 60 | !! |
---|
| 61 | !! ** Purpose : compute coefficients muX at T-U-V-F points to spread |
---|
| 62 | !! ssh over the whole water column (scale factors) |
---|
| 63 | !! |
---|
| 64 | !!---------------------------------------------------------------------- |
---|
| 65 | INTEGER :: ji, jj, jk, zpk |
---|
| 66 | REAL(wp), DIMENSION(jpi,jpj) :: zmut, zmuu, zmuv, zmuf ! 2D workspace |
---|
| 67 | !!---------------------------------------------------------------------- |
---|
| 68 | |
---|
| 69 | IF(lwp) THEN |
---|
| 70 | WRITE(numout,*) |
---|
| 71 | WRITE(numout,*) 'dom_vvl_ini : Variable volume activated' |
---|
| 72 | WRITE(numout,*) '~~~~~~~~~~~ compute coef. used to spread ssh over each layers' |
---|
| 73 | ENDIF |
---|
| 74 | |
---|
| 75 | IF( ln_zps ) CALL ctl_stop( 'dom_vvl_ini : option ln_zps is incompatible with variable volume option key_vvl') |
---|
| 76 | |
---|
| 77 | #if defined key_zco || defined key_dynspg_rl |
---|
| 78 | CALL ctl_stop( 'dom_vvl_ini : options key_zco/key_dynspg_rl are incompatible with variable volume option key_vvl') |
---|
| 79 | #endif |
---|
| 80 | |
---|
| 81 | fsvdept (:,:,:) = gdept (:,:,:) |
---|
| 82 | fsvdepw (:,:,:) = gdepw (:,:,:) |
---|
| 83 | fsvde3w (:,:,:) = gdep3w(:,:,:) |
---|
| 84 | fsve3t (:,:,:) = e3t (:,:,:) |
---|
| 85 | fsve3u (:,:,:) = e3u (:,:,:) |
---|
| 86 | fsve3v (:,:,:) = e3v (:,:,:) |
---|
| 87 | fsve3f (:,:,:) = e3f (:,:,:) |
---|
| 88 | fsve3w (:,:,:) = e3w (:,:,:) |
---|
| 89 | fsve3uw (:,:,:) = e3uw (:,:,:) |
---|
| 90 | fsve3vw (:,:,:) = e3vw (:,:,:) |
---|
| 91 | |
---|
| 92 | ! mu computation |
---|
| 93 | zmut(:,:) = 0.e0 |
---|
| 94 | zmuu(:,:) = 0.e0 |
---|
| 95 | zmuv(:,:) = 0.e0 |
---|
| 96 | zmuf(:,:) = 0.e0 |
---|
| 97 | mut (:,:,:) = 0.e0 |
---|
| 98 | muu (:,:,:) = 0.e0 |
---|
| 99 | muv (:,:,:) = 0.e0 |
---|
| 100 | muf (:,:,:) = 0.e0 |
---|
| 101 | |
---|
| 102 | DO jj = 1, jpj |
---|
| 103 | DO ji = 1, jpi |
---|
| 104 | zpk = mbathy(ji,jj) - 1 |
---|
| 105 | DO jk = 1, zpk |
---|
| 106 | zmut(ji,jj) = zmut(ji,jj) + fsve3t(ji,jj,jk) * SUM( fsve3t(ji,jj,jk:zpk) ) |
---|
| 107 | zmuu(ji,jj) = zmuu(ji,jj) + fsve3u(ji,jj,jk) * SUM( fsve3u(ji,jj,jk:zpk) ) |
---|
| 108 | zmuv(ji,jj) = zmuv(ji,jj) + fsve3v(ji,jj,jk) * SUM( fsve3v(ji,jj,jk:zpk) ) |
---|
| 109 | zmuf(ji,jj) = zmuf(ji,jj) + fsve3f(ji,jj,jk) * SUM( fsve3f(ji,jj,jk:zpk) ) |
---|
| 110 | END DO |
---|
| 111 | END DO |
---|
| 112 | END DO |
---|
| 113 | |
---|
| 114 | DO jj = 1, jpj |
---|
| 115 | DO ji = 1, jpi |
---|
| 116 | zpk = mbathy(ji,jj) - 1 |
---|
| 117 | DO jk = 1, zpk |
---|
| 118 | mut(ji,jj,jk) = SUM( fsve3t(ji,jj,jk:zpk) ) / zmut(ji,jj) |
---|
| 119 | muu(ji,jj,jk) = SUM( fsve3u(ji,jj,jk:zpk) ) / zmuu(ji,jj) |
---|
| 120 | muv(ji,jj,jk) = SUM( fsve3v(ji,jj,jk:zpk) ) / zmuv(ji,jj) |
---|
| 121 | muf(ji,jj,jk) = SUM( fsve3f(ji,jj,jk:zpk) ) / zmuf(ji,jj) |
---|
| 122 | END DO |
---|
| 123 | END DO |
---|
| 124 | END DO |
---|
| 125 | |
---|
| 126 | |
---|
| 127 | END SUBROUTINE dom_vvl_ini |
---|
| 128 | |
---|
| 129 | |
---|
| 130 | |
---|
| 131 | SUBROUTINE dom_vvl |
---|
| 132 | !!---------------------------------------------------------------------- |
---|
| 133 | !! *** ROUTINE dom_vvl *** |
---|
| 134 | !! |
---|
| 135 | !! ** Purpose : compute ssh at U-V-F points, T-W scale factors and local |
---|
| 136 | !! depths at each time step. |
---|
| 137 | !!---------------------------------------------------------------------- |
---|
| 138 | !! * Local declarations |
---|
| 139 | INTEGER :: ji, jj, jk ! dummy loop indices |
---|
| 140 | REAL(wp), DIMENSION(jpi,jpj) :: zsshf ! 2D workspace |
---|
| 141 | !!---------------------------------------------------------------------- |
---|
| 142 | |
---|
| 143 | ! Sea Surface Height at u-v-fpoints |
---|
| 144 | DO jj = 1, jpjm1 |
---|
| 145 | DO ji = 1,jpim1 |
---|
| 146 | sshu(ji,jj) = 0.5 * umask(ji,jj,1) / ( e1u(ji,jj) * e2u(ji,jj) ) & |
---|
| 147 | & * ( e1t(ji ,jj) * e2t(ji ,jj) * sshn(ji ,jj) & |
---|
| 148 | & + e1t(ji+1,jj) * e2t(ji+1,jj) * sshn(ji+1,jj) ) |
---|
| 149 | ! |
---|
| 150 | sshv(ji,jj) = 0.5 * vmask(ji,jj,1) / ( e1v(ji,jj) * e2v(ji,jj) ) & |
---|
| 151 | & * ( e1t(ji,jj ) * e2t(ji,jj ) * sshn(ji,jj ) & |
---|
| 152 | & + e1t(ji,jj+1) * e2t(ji,jj+1) * sshn(ji,jj+1) ) |
---|
| 153 | ! |
---|
| 154 | zsshf(ji,jj) = 0.25 * fmask(ji,jj,1) & |
---|
| 155 | & * ( sshn(ji ,jj) + sshn(ji ,jj+1) & |
---|
| 156 | & + sshn(ji+1,jj) + sshn(ji+1,jj+1) ) |
---|
| 157 | END DO |
---|
| 158 | END DO |
---|
| 159 | |
---|
| 160 | ! Boundaries conditions |
---|
| 161 | CALL lbc_lnk( sshu, 'U', 1. ) |
---|
| 162 | CALL lbc_lnk( sshv, 'V', 1. ) |
---|
| 163 | CALL lbc_lnk( zsshf, 'F', 1. ) |
---|
| 164 | |
---|
| 165 | ! Scale factors at T levels |
---|
| 166 | DO jk = 1, jpkm1 |
---|
| 167 | fse3t(:,:,jk) = fsve3t(:,:,jk) * ( 1 + sshn(:,:) * mut(:,:,jk) ) |
---|
| 168 | fse3u(:,:,jk) = fsve3u(:,:,jk) * ( 1 + sshu(:,:) * muu(:,:,jk) ) |
---|
| 169 | fse3v(:,:,jk) = fsve3v(:,:,jk) * ( 1 + sshv(:,:) * muv(:,:,jk) ) |
---|
| 170 | fse3f(:,:,jk) = fsve3f(:,:,jk) * ( 1 + zsshf(:,:) * muf(:,:,jk) ) |
---|
| 171 | END DO |
---|
| 172 | |
---|
| 173 | ! Scale factors at W levels |
---|
| 174 | fse3w (:,:,1) = fse3t(:,:,1) |
---|
| 175 | fse3uw(:,:,1) = fse3u(:,:,1) |
---|
| 176 | fse3vw(:,:,1) = fse3v(:,:,1) |
---|
| 177 | DO jk = 2, jpk |
---|
| 178 | fse3w (:,:,jk) = 0.5 * ( fse3t(:,:,jk-1) + fse3t(:,:,jk) ) |
---|
| 179 | fse3uw(:,:,jk) = 0.5 * ( fse3u(:,:,jk-1) + fse3u(:,:,jk) ) |
---|
| 180 | fse3vw(:,:,jk) = 0.5 * ( fse3v(:,:,jk-1) + fse3v(:,:,jk) ) |
---|
| 181 | END DO |
---|
| 182 | |
---|
| 183 | ! T and W points depth |
---|
| 184 | fsdept(:,:,1) = 0.5 * fse3w(:,:,1) |
---|
| 185 | fsdepw(:,:,1) = 0.e0 |
---|
| 186 | fsde3w(:,:,1) = fsdept(:,:,1) - sshn(:,:) |
---|
| 187 | DO jk = 2, jpk |
---|
| 188 | fsdept(:,:,jk) = fsdept(:,:,jk-1) + fse3w(:,:,jk) |
---|
| 189 | fsdepw(:,:,jk) = fsdepw(:,:,jk-1) + fse3t(:,:,jk-1) |
---|
| 190 | fsde3w(:,:,jk) = fsdept(:,:,jk ) - sshn(:,:) |
---|
| 191 | END DO |
---|
| 192 | |
---|
| 193 | ! Local depth or Inverse of the local depth of the water column at u- and v-points |
---|
| 194 | ! ------------------------------ |
---|
| 195 | |
---|
| 196 | ! Ocean depth at U- and V-points |
---|
| 197 | hu(:,:) = 0.e0 ; hv(:,:) = 0.e0 |
---|
| 198 | |
---|
| 199 | DO jk = 1, jpk |
---|
| 200 | hu(:,:) = hu(:,:) + fse3u(:,:,jk) * umask(:,:,jk) |
---|
| 201 | hv(:,:) = hv(:,:) + fse3v(:,:,jk) * vmask(:,:,jk) |
---|
| 202 | END DO |
---|
| 203 | |
---|
| 204 | |
---|
| 205 | ! Inverse of the local depth |
---|
| 206 | hur(:,:) = fse3u(:,:,1) ! Lower bound : thickness of the first model level |
---|
| 207 | hvr(:,:) = fse3v(:,:,1) |
---|
| 208 | |
---|
| 209 | DO jk = 2, jpk ! Sum of the vertical scale factors |
---|
| 210 | hur(:,:) = hur(:,:) + fse3u(:,:,jk) * umask(:,:,jk) |
---|
| 211 | hvr(:,:) = hvr(:,:) + fse3v(:,:,jk) * vmask(:,:,jk) |
---|
| 212 | END DO |
---|
| 213 | |
---|
| 214 | ! Compute and mask the inverse of the local depth |
---|
| 215 | hur(:,:) = 1. / hur(:,:) * umask(:,:,1) |
---|
| 216 | hvr(:,:) = 1. / hvr(:,:) * vmask(:,:,1) |
---|
| 217 | |
---|
| 218 | END SUBROUTINE dom_vvl |
---|
| 219 | |
---|
| 220 | |
---|
| 221 | |
---|
| 222 | SUBROUTINE dom_vvl_ssh( kt ) |
---|
| 223 | !!---------------------------------------------------------------------- |
---|
| 224 | !! *** ROUTINE dom_vvl_ssh *** |
---|
| 225 | !! |
---|
| 226 | !! ** Purpose : compute the ssha field used in tra_zdf, dynnxt, tranxt |
---|
| 227 | !! and dynspg routines |
---|
| 228 | !!---------------------------------------------------------------------- |
---|
| 229 | !! * Arguments |
---|
| 230 | INTEGER, INTENT( in ) :: kt ! time step |
---|
| 231 | |
---|
| 232 | !! * Local declarations |
---|
| 233 | INTEGER :: ji, jj, jk ! dummy loop indices |
---|
| 234 | REAL(wp) :: z2dt, zraur ! temporary scalars |
---|
| 235 | REAL(wp), DIMENSION(jpi,jpj) :: zun, zvn, zhdiv ! 2D workspace |
---|
| 236 | !!---------------------------------------------------------------------- |
---|
| 237 | |
---|
| 238 | !! Sea surface height after (ssha) in variable volume case |
---|
| 239 | !! --------------------------====-----===============----- |
---|
| 240 | !! ssha is needed for the tracer time-stepping (trazdf_imp or |
---|
| 241 | !! tra_nxt), for the ssh time-stepping (dynspg_*) and for the |
---|
| 242 | !! dynamics time-stepping (dynspg_flt or dyn_nxt, and wzv). |
---|
| 243 | !! un, vn (or un_b and vn_b) and emp are needed, so it must be |
---|
| 244 | !! done after the call of oce_sbc. |
---|
| 245 | |
---|
| 246 | IF( neuler == 0 .AND. kt == nit000 ) THEN ! at nit000 |
---|
| 247 | r2dt(:) = rdttra(:) ! = rdtra (restarting with Euler time stepping) |
---|
| 248 | ELSEIF( kt <= nit000 + 1) THEN ! at nit000 or nit000+1 |
---|
| 249 | r2dt(:) = 2. * rdttra(:) ! = 2 rdttra (leapfrog) |
---|
| 250 | ENDIF |
---|
| 251 | |
---|
| 252 | z2dt = r2dt(1) |
---|
| 253 | zraur = 1. / rauw |
---|
| 254 | |
---|
| 255 | ! Vertically integrated quantities |
---|
| 256 | ! -------------------------------- |
---|
| 257 | IF( .NOT. lk_dynspg_ts .OR. (neuler == 0 .AND. kt == nit000) ) THEN |
---|
| 258 | zun(:,:) = 0.e0 ; zvn(:,:) = 0.e0 |
---|
| 259 | ! |
---|
| 260 | DO jk = 1, jpkm1 |
---|
| 261 | ! ! Vertically integrated transports (now) |
---|
| 262 | zun(:,:) = zun(:,:) + fse3u(:,:,jk) * un(:,:,jk) |
---|
| 263 | zvn(:,:) = zvn(:,:) + fse3v(:,:,jk) * vn(:,:,jk) |
---|
| 264 | END DO |
---|
| 265 | ELSE ! lk_dynspg_ts is true |
---|
| 266 | zun (:,:) = un_b(:,:) ; zvn (:,:) = vn_b(:,:) |
---|
| 267 | ENDIF |
---|
| 268 | |
---|
| 269 | ! Horizontal divergence of barotropic transports |
---|
| 270 | !-------------------------------------------------- |
---|
| 271 | DO jj = 2, jpjm1 |
---|
| 272 | DO ji = 2, jpim1 ! vector opt. |
---|
| 273 | zhdiv(ji,jj) = ( e2u(ji ,jj ) * zun(ji ,jj ) & |
---|
| 274 | & - e2u(ji-1,jj ) * zun(ji-1,jj ) & |
---|
| 275 | & + e1v(ji ,jj ) * zvn(ji ,jj ) & |
---|
| 276 | & - e1v(ji ,jj-1) * zvn(ji ,jj-1) ) & |
---|
| 277 | & / ( e1t(ji,jj) * e2t(ji,jj) ) |
---|
| 278 | END DO |
---|
| 279 | END DO |
---|
| 280 | |
---|
| 281 | #if defined key_obc && ( key_dynspg_exp || key_dynspg_ts ) |
---|
| 282 | ! open boundaries (div must be zero behind the open boundary) |
---|
| 283 | ! mpp remark: The zeroing of hdiv can probably be extended to 1->jpi/jpj for the correct row/column |
---|
| 284 | IF( lp_obc_east ) zhdiv(nie0p1:nie1p1,nje0 :nje1) = 0.e0 ! east |
---|
| 285 | IF( lp_obc_west ) zhdiv(niw0 :niw1 ,njw0 :njw1) = 0.e0 ! west |
---|
| 286 | IF( lp_obc_north ) zhdiv(nin0 :nin1 ,njn0p1:njn1p1) = 0.e0 ! north |
---|
| 287 | IF( lp_obc_south ) zhdiv(nis0 :nis1 ,njs0 :njs1) = 0.e0 ! south |
---|
| 288 | #endif |
---|
| 289 | |
---|
| 290 | CALL lbc_lnk( zhdiv, 'T', 1. ) |
---|
| 291 | |
---|
| 292 | ! Sea surface elevation time stepping |
---|
| 293 | ! ----------------------------------- |
---|
| 294 | IF( .NOT. lk_dynspg_ts .OR. (neuler == 0 .AND. kt == nit000) ) THEN |
---|
| 295 | ssha(:,:) = sshb(:,:) - z2dt * ( zraur * emp(:,:) + zhdiv(:,:) ) * tmask(:,:,1) |
---|
| 296 | ELSE ! lk_dynspg_ts is true |
---|
| 297 | ssha(:,:) = ( sshb_b(:,:) - z2dt * ( zraur * emp(:,:) + zhdiv(:,:) ) ) * tmask(:,:,1) |
---|
| 298 | ENDIF |
---|
| 299 | |
---|
| 300 | |
---|
| 301 | END SUBROUTINE dom_vvl_ssh |
---|
| 302 | |
---|
[661] | 303 | SUBROUTINE dom_vvl_sf( zssh, gridp, sfe3 ) |
---|
[642] | 304 | !!---------------------------------------------------------------------- |
---|
[661] | 305 | !! *** ROUTINE dom_vvl_sf *** |
---|
[642] | 306 | !! |
---|
| 307 | !! ** Purpose : compute vertical scale factor at each time step |
---|
| 308 | !!---------------------------------------------------------------------- |
---|
| 309 | !! * Arguments |
---|
| 310 | CHARACTER(LEN=1) , INTENT( in ) :: gridp ! grid point type |
---|
| 311 | REAL(wp), DIMENSION(jpi,jpj) , INTENT( in ) :: zssh ! 2D workspace |
---|
[661] | 312 | REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT( out) :: sfe3 ! 3D workspace |
---|
[642] | 313 | |
---|
| 314 | !! * Local declarations |
---|
| 315 | INTEGER :: jk ! dummy loop indices |
---|
| 316 | !!---------------------------------------------------------------------- |
---|
| 317 | |
---|
| 318 | SELECT CASE (gridp) |
---|
| 319 | |
---|
| 320 | CASE ('U') |
---|
| 321 | ! |
---|
| 322 | DO jk = 1, jpk |
---|
| 323 | sfe3(:,:,jk) = fsve3u(:,:,jk) * ( 1 + zssh(:,:) * muu(:,:,jk) ) |
---|
| 324 | ENDDO |
---|
| 325 | |
---|
| 326 | CASE ('V') |
---|
| 327 | ! |
---|
| 328 | DO jk = 1, jpk |
---|
| 329 | sfe3(:,:,jk) = fsve3v(:,:,jk) * ( 1 + zssh(:,:) * muv(:,:,jk) ) |
---|
| 330 | ENDDO |
---|
| 331 | |
---|
| 332 | CASE ('T') |
---|
| 333 | ! |
---|
| 334 | DO jk = 1, jpk |
---|
| 335 | sfe3(:,:,jk) = fsve3t(:,:,jk) * ( 1 + zssh(:,:) * mut(:,:,jk) ) |
---|
| 336 | ENDDO |
---|
| 337 | |
---|
| 338 | END SELECT |
---|
| 339 | |
---|
[661] | 340 | END SUBROUTINE dom_vvl_sf |
---|
[642] | 341 | |
---|
[661] | 342 | SUBROUTINE dom_vvl_sf_ini( gridp, sfe3ini ) |
---|
[642] | 343 | !!---------------------------------------------------------------------- |
---|
[661] | 344 | !! *** ROUTINE dom_vvl_sf_ini *** |
---|
[642] | 345 | !! |
---|
| 346 | !! ** Purpose : affect the appropriate vertical scale factor. It is done |
---|
| 347 | !! to avoid compiling error when using key_zco cpp key |
---|
| 348 | !!---------------------------------------------------------------------- |
---|
| 349 | !! * Arguments |
---|
| 350 | CHARACTER(LEN=1) , INTENT( in ) :: gridp ! grid point type |
---|
[661] | 351 | REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT (out) :: sfe3ini ! 3D workspace |
---|
[642] | 352 | !!---------------------------------------------------------------------- |
---|
| 353 | |
---|
| 354 | SELECT CASE (gridp) |
---|
| 355 | |
---|
| 356 | CASE ('U') |
---|
| 357 | ! |
---|
| 358 | sfe3ini(:,:,:) = fse3u(:,:,:) |
---|
| 359 | |
---|
| 360 | CASE ('V') |
---|
| 361 | ! |
---|
| 362 | sfe3ini(:,:,:) = fse3v(:,:,:) |
---|
| 363 | |
---|
| 364 | CASE ('T') |
---|
| 365 | ! |
---|
| 366 | sfe3ini(:,:,:) = fse3t(:,:,:) |
---|
| 367 | |
---|
| 368 | END SELECT |
---|
| 369 | |
---|
[661] | 370 | END SUBROUTINE dom_vvl_sf_ini |
---|
[592] | 371 | #else |
---|
| 372 | !!---------------------------------------------------------------------- |
---|
| 373 | !! Default option : Empty routine |
---|
| 374 | !!---------------------------------------------------------------------- |
---|
| 375 | SUBROUTINE dom_vvl_ini |
---|
| 376 | END SUBROUTINE dom_vvl_ini |
---|
| 377 | SUBROUTINE dom_vvl |
---|
| 378 | END SUBROUTINE dom_vvl |
---|
| 379 | SUBROUTINE dom_vvl_ssh( kt ) |
---|
| 380 | !! * Arguments |
---|
| 381 | INTEGER, INTENT( in ) :: kt ! time step |
---|
| 382 | WRITE(*,*) 'dom_vvl_ssh: You should not have seen this print! error?', kt |
---|
| 383 | END SUBROUTINE dom_vvl_ssh |
---|
[661] | 384 | SUBROUTINE dom_vvl_sf( zssh, gridp, sfe3 ) |
---|
[642] | 385 | !! * Arguments |
---|
| 386 | CHARACTER(LEN=1) , INTENT( in ) :: gridp ! grid point type |
---|
| 387 | REAL(wp), DIMENSION(jpi,jpj) , INTENT( in ) :: zssh ! 2D workspace |
---|
[661] | 388 | REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT (out) :: sfe3 ! 3D workspace |
---|
[642] | 389 | sfe3(:,:,:) = 0.e0 |
---|
| 390 | WRITE(*,*) 'sfe3: You should not have seen this print! error?', gridp |
---|
| 391 | WRITE(*,*) 'sfe3: You should not have seen this print! error?', zssh(1,1) |
---|
[661] | 392 | END SUBROUTINE dom_vvl_sf |
---|
| 393 | SUBROUTINE dom_vvl_sf_ini( gridp, sfe3ini ) |
---|
[642] | 394 | !! * Arguments |
---|
| 395 | CHARACTER(LEN=1) , INTENT( in ) :: gridp ! grid point type |
---|
[661] | 396 | REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT (out) :: sfe3ini ! 3D workspace |
---|
[642] | 397 | sfe3ini(:,:,:) = 0.e0 |
---|
| 398 | WRITE(*,*) 'sfe3ini: You should not have seen this print! error?', gridp |
---|
[661] | 399 | END SUBROUTINE dom_vvl_sf_ini |
---|
[592] | 400 | #endif |
---|
| 401 | |
---|
| 402 | !!====================================================================== |
---|
| 403 | END MODULE domvvl |
---|