183
184
185
186
187 integer, intent(in) :: ng, tile
188 integer, intent(in) :: LBi, UBi, LBj, UBj
189 integer, intent(in) :: IminS, ImaxS, JminS, JmaxS
190 integer, intent(in) :: nrhs, nstp, nnew
191
192# ifdef ASSUMED_SHAPE
193# ifdef MASKING
194 real(r8), intent(in) :: umask(LBi:,LBj:)
195 real(r8), intent(in) :: vmask(LBi:,LBj:)
196# endif
197# ifdef WET_DRY_NOT_YET
198 real(r8), intent(in) :: umask_wet(LBi:,LBj:)
199 real(r8), intent(in) :: vmask_wet(LBi:,LBj:)
200# endif
201 real(r8), intent(in) :: om_v(LBi:,LBj:)
202 real(r8), intent(in) :: on_u(LBi:,LBj:)
203 real(r8), intent(in) :: pm(LBi:,LBj:)
204 real(r8), intent(in) :: pn(LBi:,LBj:)
205 real(r8), intent(in) :: Hz(LBi:,LBj:,:)
206 real(r8), intent(in) :: z_r(LBi:,LBj:,:)
207 real(r8), intent(in) :: z_w(LBi:,LBj:,0:)
208 real(r8), intent(in) :: Akv(LBi:,LBj:,0:)
209 real(r8), intent(in) :: DU_avg1(LBi:,LBj:)
210 real(r8), intent(in) :: DV_avg1(LBi:,LBj:)
211 real(r8), intent(in) :: DU_avg2(LBi:,LBj:)
212 real(r8), intent(in) :: DV_avg2(LBi:,LBj:)
213 real(r8), intent(in) :: u(LBi:,LBj:,:,:)
214 real(r8), intent(in) :: v(LBi:,LBj:,:,:)
215# ifdef NEARSHORE_MELLOR
216 real(r8), intent(in) :: ubar_stokes(LBi:,LBj:)
217 real(r8), intent(in) :: vbar_stokes(LBi:,LBj:)
218 real(r8), intent(in) :: tl_ubar_stokes(LBi:,LBj:)
219 real(r8), intent(in) :: tl_vbar_stokes(LBi:,LBj:)
220# endif
221 real(r8), intent(in) :: tl_Hz(LBi:,LBj:,:)
222 real(r8), intent(in) :: tl_z_r(LBi:,LBj:,:)
223 real(r8), intent(in) :: tl_z_w(LBi:,LBj:,0:)
224 real(r8), intent(in) :: tl_Akv(LBi:,LBj:,0:)
225 real(r8), intent(in) :: tl_DU_avg1(LBi:,LBj:)
226 real(r8), intent(in) :: tl_DV_avg1(LBi:,LBj:)
227 real(r8), intent(in) :: tl_DU_avg2(LBi:,LBj:)
228 real(r8), intent(in) :: tl_DV_avg2(LBi:,LBj:)
229 real(r8), intent(in) :: tl_ru(LBi:,LBj:,0:,:)
230 real(r8), intent(in) :: tl_rv(LBi:,LBj:,0:,:)
231
232# ifdef DIAGNOSTICS_UV
233
234
235
236
237
238
239
240
241# endif
242 real(r8), intent(inout) :: Huon(LBi:,LBj:,:)
243 real(r8), intent(inout) :: Hvom(LBi:,LBj:,:)
244 real(r8), intent(inout) :: tl_u(LBi:,LBj:,:,:)
245 real(r8), intent(inout) :: tl_v(LBi:,LBj:,:,:)
246# ifdef NEARSHORE_MELLOR
247 real(r8), intent(inout) :: u_stokes(LBi:,LBj:,:)
248 real(r8), intent(inout) :: v_stokes(LBi:,LBj:,:)
249 real(r8), intent(inout) :: tl_u_stokes(LBi:,LBj:,:)
250 real(r8), intent(inout) :: tl_v_stokes(LBi:,LBj:,:)
251# endif
252 real(r8), intent(out) :: tl_ubar(LBi:,LBj:,:)
253 real(r8), intent(out) :: tl_vbar(LBi:,LBj:,:)
254 real(r8), intent(out) :: tl_Huon(LBi:,LBj:,:)
255 real(r8), intent(out) :: tl_Hvom(LBi:,LBj:,:)
256
257# else
258
259# ifdef MASKING
260 real(r8), intent(in) :: umask(LBi:UBi,LBj:UBj)
261 real(r8), intent(in) :: vmask(LBi:UBi,LBj:UBj)
262# endif
263# ifdef WET_DRY_NOT_YET
264 real(r8), intent(in) :: umask_wet(LBi:UBi,LBj:UBj)
265 real(r8), intent(in) :: vmask_wet(LBi:UBi,LBj:UBj)
266# endif
267 real(r8), intent(in) :: om_v(LBi:UBi,LBj:UBj)
268 real(r8), intent(in) :: on_u(LBi:UBi,LBj:UBj)
269 real(r8), intent(in) :: pm(LBi:UBi,LBj:UBj)
270 real(r8), intent(in) :: pn(LBi:UBi,LBj:UBj)
271 real(r8), intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
272 real(r8), intent(in) :: z_r(LBi:UBi,LBj:UBj,N(ng))
273 real(r8), intent(in) :: z_w(LBi:UBi,LBj:UBj,0:N(ng))
274 real(r8), intent(in) :: Akv(LBi:UBi,LBj:UBj,0:N(ng))
275 real(r8), intent(in) :: DU_avg1(LBi:UBi,LBj:UBj)
276 real(r8), intent(in) :: DV_avg1(LBi:UBi,LBj:UBj)
277 real(r8), intent(in) :: DU_avg2(LBi:UBi,LBj:UBj)
278 real(r8), intent(in) :: DV_avg2(LBi:UBi,LBj:UBj)
279 real(r8), intent(in) :: u(LBi:UBi,LBj:UBj,N(ng),2)
280 real(r8), intent(in) :: v(LBi:UBi,LBj:UBj,N(ng),2)
281# ifdef NEARSHORE_MELLOR
282 real(r8), intent(in) :: ubar_stokes(LBi:UBi,LBj:UBj)
283 real(r8), intent(in) :: vbar_stokes(LBi:UBi,LBj:UBj)
284 real(r8), intent(in) :: tl_ubar_stokes(LBi:UBi,LBj:UBj)
285 real(r8), intent(in) :: tl_vbar_stokes(LBi:UBi,LBj:UBj)
286# endif
287
288 real(r8), intent(in) :: tl_Hz(LBi:UBi,LBj:UBj,N(ng))
289 real(r8), intent(in) :: tl_z_r(LBi:UBi,LBj:UBj,N(ng))
290 real(r8), intent(in) :: tl_z_w(LBi:UBi,LBj:UBj,0:N(ng))
291 real(r8), intent(in) :: tl_Akv(LBi:UBi,LBj:UBj,0:N(ng))
292 real(r8), intent(in) :: tl_DU_avg1(LBi:UBi,LBj:UBj)
293 real(r8), intent(in) :: tl_DV_avg1(LBi:UBi,LBj:UBj)
294 real(r8), intent(in) :: tl_DU_avg2(LBi:UBi,LBj:UBj)
295 real(r8), intent(in) :: tl_DV_avg2(LBi:UBi,LBj:UBj)
296 real(r8), intent(in) :: tl_ru(LBi:UBi,LBj:UBj,0:N(ng),2)
297 real(r8), intent(in) :: tl_rv(LBi:UBi,LBj:UBj,0:N(ng),2)
298# ifdef DIAGNOSTICS_UV
299
300
301
302
303
304
305
306
307# endif
308 real(r8), intent(inout) :: Huon(LBi:UBi,LBj:UBj,N(ng))
309 real(r8), intent(inout) :: Hvom(LBi:UBi,LBj:UBj,N(ng))
310 real(r8), intent(inout) :: tl_u(LBi:UBi,LBj:UBj,N(ng),2)
311 real(r8), intent(inout) :: tl_v(LBi:UBi,LBj:UBj,N(ng),2)
312# ifdef NEARSHORE_MELLOR
313 real(r8), intent(inout) :: u_stokes(LBi:UBi,LBj:UBj,N(ng))
314 real(r8), intent(inout) :: v_stokes(LBi:UBi,LBj:UBj,N(ng))
315 real(r8), intent(inout) :: tl_u_stokes(LBi:UBi,LBj:UBj,N(ng))
316 real(r8), intent(inout) :: tl_v_stokes(LBi:UBi,LBj:UBj,N(ng))
317# endif
318 real(r8), intent(out) :: tl_ubar(LBi:UBi,LBj:UBj,3)
319 real(r8), intent(out) :: tl_vbar(LBi:UBi,LBj:UBj,3)
320 real(r8), intent(out) :: tl_Huon(LBi:UBi,LBj:UBj,N(ng))
321 real(r8), intent(out) :: tl_Hvom(LBi:UBi,LBj:UBj,N(ng))
322# endif
323
324
325
326 integer :: i, idiag, is, j, k
327
328 real(r8) :: cff, cff1, cff2
329 real(r8) :: tl_cff, tl_cff1, tl_cff2
330
331 real(r8), dimension(IminS:ImaxS) :: CF1
332 real(r8), dimension(IminS:ImaxS) :: FC1
333# ifdef NEARSHORE_MELLOR
334 real(r8), dimension(IminS:ImaxS) :: CFs1
335 real(r8), dimension(IminS:ImaxS) :: DCs1
336# endif
337 real(r8), dimension(IminS:ImaxS,0:N(ng)) :: AK
338 real(r8), dimension(IminS:ImaxS,0:N(ng)) :: BC
339 real(r8), dimension(IminS:ImaxS,0:N(ng)) :: CF
340 real(r8), dimension(IminS:ImaxS,0:N(ng)) :: DC
341 real(r8), dimension(IminS:ImaxS,0:N(ng)) :: DC1
342 real(r8), dimension(IminS:ImaxS,0:N(ng)) :: FC
343# ifdef NEARSHORE_MELLOR
344 real(r8), dimension(IminS:ImaxS,0:N(ng)) :: CFs
345 real(r8), dimension(IminS:ImaxS,0:N(ng)) :: DCs
346# endif
347 real(r8), dimension(IminS:ImaxS,N(ng)) :: Hzk
348 real(r8), dimension(IminS:ImaxS,N(ng)) :: oHz
349# ifdef DIAGNOSTICS_UV
350
351
352# endif
353 real(r8), dimension(IminS:ImaxS,0:N(ng)) :: tl_AK
354 real(r8), dimension(IminS:ImaxS,0:N(ng)) :: tl_BC
355 real(r8), dimension(IminS:ImaxS,0:N(ng)) :: tl_CF
356 real(r8), dimension(IminS:ImaxS,0:N(ng)) :: tl_DC
357 real(r8), dimension(IminS:ImaxS,0:N(ng)) :: tl_FC
358# ifdef NEARSHORE_MELLOR
359 real(r8), dimension(IminS:ImaxS,0:N(ng)) :: tl_CFs
360 real(r8), dimension(IminS:ImaxS,0:N(ng)) :: tl_DCs
361# endif
362 real(r8), dimension(IminS:ImaxS,N(ng)) :: tl_Hzk
363 real(r8), dimension(IminS:ImaxS,N(ng)) :: tl_oHz
364
365# include "set_bounds.h"
366
367
368
369
370
371 DO j=jstr,jend
372 DO i=istru,iend
373 ak(i,0)=0.5_r8*(akv(i-1,j,0)+ &
374 & akv(i ,j,0))
375 tl_ak(i,0)=0.5_r8*(tl_akv(i-1,j,0)+ &
376 & tl_akv(i ,j,0))
377 DO k=1,n(ng)
378 ak(i,k)=0.5_r8*(akv(i-1,j,k)+ &
379 & akv(i ,j,k))
380 tl_ak(i,k)=0.5_r8*(tl_akv(i-1,j,k)+ &
381 & tl_akv(i ,j,k))
382 hzk(i,k)=0.5_r8*(hz(i-1,j,k)+ &
383 & hz(i ,j,k))
384 tl_hzk(i,k)=0.5_r8*(tl_hz(i-1,j,k)+ &
385 & tl_hz(i ,j,k))
386# if defined SPLINES_VVISC || defined DIAGNOSTICS_UV
387 ohz(i,k)=1.0_r8/hzk(i,k)
388 tl_ohz(i,k)=-ohz(i,k)*ohz(i,k)*tl_hzk(i,k)
389# endif
390 END DO
391 END DO
392
393
394
395# if defined STOCHASTIC_OPT && !defined STOCH_OPT_WHITE
396 IF (iic(ng).eq.ntfirst(ng).and.soinitial(ng)) THEN
397# else
398 IF (iic(ng).eq.ntfirst(ng)) THEN
399# endif
400 cff=0.25_r8*dt(ng)
401# if defined STOCHASTIC_OPT && !defined STOCH_OPT_WHITE
402 ELSE IF (iic(ng).eq.(ntfirst(ng)+1).and.soinitial(ng)) THEN
403# else
404 ELSE IF (iic(ng).eq.(ntfirst(ng)+1)) THEN
405# endif
406 cff=0.25_r8*dt(ng)*3.0_r8/2.0_r8
407 ELSE
408 cff=0.25_r8*dt(ng)*23.0_r8/12.0_r8
409 END IF
410 DO i=istru,iend
411 dc(i,0)=cff*(pm(i,j)+pm(i-1,j))*(pn(i,j)+pn(i-1,j))
412 END DO
413
414
415
416
417 DO k=1,n(ng)
418 DO i=istru,iend
419
420
421
422 tl_u(i,j,k,nnew)=tl_u(i,j,k,nnew)+ &
423 & dc(i,0)*tl_ru(i,j,k,nrhs)
424# ifdef SPLINES_VVISC
425
426
427 tl_u(i,j,k,nnew)=tl_u(i,j,k,nnew)*ohz(i,k)+ &
428 & (u(i,j,k,nnew)*hzk(i,k))*tl_ohz(i,k)
429# endif
430# ifdef DIAGNOSTICS_UV
431
432
433
434
435
436# if defined UV_VIS2 || defined UV_VIS4
437
438
439
440# endif
441
442# ifdef BODYFORCE
443
444
445
446# endif
447
448# endif
449 END DO
450 END DO
451
452# ifdef SPLINES_VVISC
453
454
455
456
457
458
459 cff1=1.0_r8/6.0_r8
460 DO k=1,n(ng)-1
461 DO i=istru,iend
462 fc(i,k)=cff1*hzk(i,k )-dt(ng)*ak(i,k-1)*ohz(i,k )
463 cf(i,k)=cff1*hzk(i,k+1)-dt(ng)*ak(i,k+1)*ohz(i,k+1)
464 END DO
465 END DO
466 DO i=istru,iend
467 cf(i,0)=0.0_r8
468 dc(i,0)=0.0_r8
469 END DO
470
471
472
473 cff1=1.0_r8/3.0_r8
474 DO k=1,n(ng)-1
475 DO i=istru,iend
476 bc(i,k)=cff1*(hzk(i,k)+hzk(i,k+1))+ &
477 & dt(ng)*ak(i,k)*(ohz(i,k)+ohz(i,k+1))
478 cff=1.0_r8/(bc(i,k)-fc(i,k)*cf(i,k-1))
479 cf(i,k)=cff*cf(i,k)
480 dc(i,k)=cff*(u(i,j,k+1,nnew)-u(i,j,k,nnew)- &
481 & fc(i,k)*dc(i,k-1))
482 END DO
483 END DO
484
485
486
487
488 DO i=istru,iend
489 dc(i,n(ng))=0.0_r8
490 END DO
491 DO k=n(ng)-1,1,-1
492 DO i=istru,iend
493 dc(i,k)=dc(i,k)-cf(i,k)*dc(i,k+1)
494 END DO
495 END DO
496
497
498
499
500
501 cff1=1.0_r8/6.0_r8
502 DO k=1,n(ng)-1
503 DO i=istru,iend
504 fc(i,k)=cff1*hzk(i,k )- &
505 & dt(ng)*ak(i,k-1)*ohz(i,k )
506 tl_fc(i,k)=cff1*tl_hzk(i,k )- &
507 & dt(ng)*(tl_ak(i,k-1)*ohz(i,k )+ &
508 & ak(i,k-1)*tl_ohz(i,k ))
509 cf(i,k)=cff1*hzk(i,k+1)- &
510 & dt(ng)*ak(i,k+1)*ohz(i,k+1)
511 tl_cf(i,k)=cff1*tl_hzk(i,k+1)- &
512 & dt(ng)*(tl_ak(i,k+1)*ohz(i,k+1)+ &
513 & ak(i,k+1)*tl_ohz(i,k+1))
514 END DO
515 END DO
516 DO i=istru,iend
517 cf(i,0)=0.0_r8
518 tl_cf(i,0)=0.0_r8
519 tl_dc(i,0)=0.0_r8
520 END DO
521
522
523
524 cff1=1.0_r8/3.0_r8
525 DO k=1,n(ng)-1
526 DO i=istru,iend
527 bc(i,k)=cff1*(hzk(i,k)+hzk(i,k+1))+ &
528 & dt(ng)*ak(i,k)*(ohz(i,k)+ohz(i,k+1))
529 tl_bc(i,k)=cff1*(tl_hzk(i,k)+tl_hzk(i,k+1))+ &
530 & dt(ng)*(tl_ak(i,k)*(ohz(i,k)+ohz(i,k+1))+ &
531 & ak(i,k)*(tl_ohz(i,k)+tl_ohz(i,k+1)))
532 cff=1.0_r8/(bc(i,k)-fc(i,k)*cf(i,k-1))
533 cf(i,k)=cff*cf(i,k)
534 tl_dc(i,k)=cff*(tl_u(i,j,k+1,nnew)- &
535 & tl_u(i,j,k ,nnew)- &
536 & (tl_fc(i,k)*dc(i,k-1)+ &
537 & tl_bc(i,k)*dc(i,k )+ &
538 & tl_cf(i,k)*dc(i,k+1))- &
539 & fc(i,k)*tl_dc(i,k-1))
540 END DO
541 END DO
542
543
544
545 DO i=istru,iend
546 tl_dc(i,n(ng))=0.0_r8
547 END DO
548 DO k=n(ng)-1,1,-1
549 DO i=istru,iend
550 tl_dc(i,k)=tl_dc(i,k)-cf(i,k)*tl_dc(i,k+1)
551 END DO
552 END DO
553
554
555
556
557 DO k=1,n(ng)
558 DO i=istru,iend
559 tl_dc(i,k)=tl_dc(i,k)*ak(i,k)+dc(i,k)*tl_ak(i,k)
560 dc(i,k)=dc(i,k)*ak(i,k)
561
562
563 tl_cff=dt(ng)*(tl_ohz(i,k)*(dc(i,k)-dc(i,k-1))+ &
564 & ohz(i,k)*(tl_dc(i,k)-tl_dc(i,k-1)))
565
566
567 tl_u(i,j,k,nnew)=tl_u(i,j,k,nnew)+tl_cff
568# ifdef DIAGNOSTICS_UV
569
570# endif
571 END DO
572 END DO
573# else
574
575
576
577
578
579
580
581
582
583
584
585 cff=-lambda*dt(ng)/0.5_r8
586 DO k=1,n(ng)-1
587 DO i=istru,iend
588 cff1=1.0_r8/(z_r(i,j,k+1)+z_r(i-1,j,k+1)- &
589 & z_r(i,j,k )-z_r(i-1,j,k ))
590 tl_cff1=-cff1*cff1*(tl_z_r(i,j,k+1)+tl_z_r(i-1,j,k+1)- &
591 & tl_z_r(i,j,k )-tl_z_r(i-1,j,k ))
592 fc(i,k)=cff*cff1*ak(i,k)
593 tl_fc(i,k)=cff*(tl_cff1*ak(i,k)+cff1*tl_ak(i,k))
594 END DO
595 END DO
596 DO i=istru,iend
597 fc(i,0)=0.0_r8
598 tl_fc(i,0)=0.0_r8
599 fc(i,n(ng))=0.0_r8
600 tl_fc(i,n(ng))=0.0_r8
601 END DO
602
603
604
605
606 DO k=1,n(ng)
607 DO i=istru,iend
608 bc(i,k)=hzk(i,k)-fc(i,k)-fc(i,k-1)
609 tl_bc(i,k)=tl_hzk(i,k)-tl_fc(i,k)-tl_fc(i,k-1)
610 END DO
611 END DO
612 DO k=2,n(ng)-1
613 DO i=istru,iend
614 dc(i,k)=tl_u(i,j,k,nnew)- &
615 & (tl_fc(i,k-1)*u(i,j,k-1,nnew)+ &
616 & tl_bc(i,k )*u(i,j,k ,nnew)+ &
617 & tl_fc(i,k )*u(i,j,k+1,nnew))
618 END DO
619 END DO
620 DO i=istru,iend
621 dc(i,1)=tl_u(i,j,1,nnew)- &
622 & (tl_bc(i,1)*u(i,j,1,nnew)+ &
623 & tl_fc(i,1)*u(i,j,2,nnew))
624 dc(i,n(ng))=tl_u(i,j,n(ng),nnew)- &
625 & (tl_fc(i,n(ng)-1)*u(i,j,n(ng)-1,nnew)+ &
626 & tl_bc(i,n(ng) )*u(i,j,n(ng) ,nnew))
627 END DO
628 DO i=istru,iend
629 cff=1.0_r8/bc(i,1)
630 cf(i,1)=cff*fc(i,1)
631 dc(i,1)=cff*dc(i,1)
632 END DO
633 DO k=2,n(ng)-1
634 DO i=istru,iend
635 cff=1.0_r8/(bc(i,k)-fc(i,k-1)*cf(i,k-1))
636 cf(i,k)=cff*fc(i,k)
637 dc(i,k)=cff*(dc(i,k)-fc(i,k-1)*dc(i,k-1))
638 END DO
639 END DO
640
641
642
643
644 DO i=istru,iend
645# ifdef DIAGNOSTICS_UV
646
647# endif
648 dc(i,n(ng))=(dc(i,n(ng))-fc(i,n(ng)-1)*dc(i,n(ng)-1))/ &
649 & (bc(i,n(ng))-fc(i,n(ng)-1)*cf(i,n(ng)-1))
650
651
652 tl_u(i,j,n(ng),nnew)=dc(i,n(ng))
653# ifdef DIAGNOSTICS_UV
654
655
656# endif
657 END DO
658 DO k=n(ng)-1,1,-1
659 DO i=istru,iend
660# ifdef DIAGNOSTICS_UV
661
662# endif
663 dc(i,k)=dc(i,k)-cf(i,k)*dc(i,k+1)
664
665
666 tl_u(i,j,k,nnew)=dc(i,k)
667# ifdef DIAGNOSTICS_UV
668
669
670# endif
671 END DO
672 END DO
673# endif
674
675
676
677
678 DO i=istru,iend
679 cf(i,0)=hzk(i,1)
680 tl_cf(i,0)=tl_hzk(i,1)
681 dc(i,0)=u(i,j,1,nnew)*hzk(i,1)
682 tl_dc(i,0)=tl_u(i,j,1,nnew)*hzk(i,1)+ &
683 & u(i,j,1,nnew)*tl_hzk(i,1)
684# ifdef NEARSHORE_MELLOR
685 dcs(i,0)=u_stokes(i,j,1)*hzk(i,1)
686 tl_dcs(i,0)=tl_u_stokes(i,j,1)*hzk(i,1)+ &
687 & u_stokes(i,j,1)*tl_hzk(i,1)
688# endif
689# ifdef DIAGNOSTICS_UV
690
691
692# ifdef UV_COR
693
694# endif
695# if defined UV_VIS2 || defined UV_VIS4
696
697
698
699# endif
700# ifdef UV_ADV
701
702
703
704# endif
705# ifdef NEARSHORE_MELLOR
706
707# endif
708# endif
709 END DO
710 DO k=2,n(ng)
711 DO i=istru,iend
712 cf(i,0)=cf(i,0)+hzk(i,k)
713 tl_cf(i,0)=tl_cf(i,0)+tl_hzk(i,k)
714 dc(i,0)=dc(i,0)+u(i,j,k,nnew)*hzk(i,k)
715 tl_dc(i,0)=tl_dc(i,0)+ &
716 & tl_u(i,j,k,nnew)*hzk(i,k)+ &
717 & u(i,j,k,nnew)*tl_hzk(i,k)
718# ifdef NEARSHORE_MELLOR
719 dcs(i,0)=dcs(i,0)+u_stokes(i,j,k)*hzk(i,k)
720 tl_dcs(i,0)=tl_dcs(i,0)+ &
721 & tl_u_stokes(i,j,k)*hzk(i,k)+ &
722 & u_stokes(i,j,k)*tl_hzk(i,k)
723# endif
724# ifdef DIAGNOSTICS_UV
725
726
727
728
729# ifdef UV_COR
730
731
732# endif
733# if defined UV_VIS2 || defined UV_VIS4
734
735
736
737
738
739
740# endif
741# ifdef UV_ADV
742
743
744
745
746
747
748# endif
749# ifdef NEARSHORE_MELLOR
750
751
752# endif
753# endif
754 END DO
755 END DO
756 DO i=istru,iend
757 dc1(i,0)=dc(i,0)
758 cff1=1.0_r8/(cf(i,0)*on_u(i,j))
759 tl_cff1=-cff1*cff1*tl_cf(i,0)*on_u(i,j)
760 dc(i,0)=(dc(i,0)*on_u(i,j)-du_avg1(i,j))*cff1
761 tl_dc(i,0)=(tl_dc(i,0)*on_u(i,j)-tl_du_avg1(i,j))*cff1+ &
762 & (dc1(i,0)*on_u(i,j)-du_avg1(i,j))*tl_cff1
763# ifdef NEARSHORE_MELLOR
764 dcs1(i)=dcs(i,0)
765 cff2=1.0_r8/cf(i,0)
766 tl_cff2=-cff2*cff2*tl_cf(i,0)
767 dcs(i,0)=dcs(i,0)*cff2-ubar_stokes(i,j)
768 tl_dcs(i,0)=tl_dcs(i,0)*cff2+ &
769 & dcs1(i)*tl_cff2-tl_ubar_stokes(i,j)
770# endif
771# ifdef DIAGNOSTICS_UV
772
773
774
775
776
777
778
779# endif
780 END DO
781
782
783
784 DO k=1,n(ng)
785 DO i=istru,iend
786
787
788 tl_u(i,j,k,nnew)=tl_u(i,j,k,nnew)-tl_dc(i,0)
789# ifdef MASKING
790
791
792 tl_u(i,j,k,nnew)=tl_u(i,j,k,nnew)*umask(i,j)
793# endif
794# ifdef WET_DRY_NOT_YET
795
796
797 tl_u(i,j,k,nnew)=tl_u(i,j,k,nnew)*umask_wet(i,j)
798# endif
799# ifdef NEARSHORE_MELLOR
800
801
802 tl_u_stokes(i,j,k)=tl_u_stokes(i,j,k)-tl_dcs(i,0)
803# ifdef MASKING
804
805
806 tl_u_stokes(i,j,k)=tl_u_stokes(i,j,k)*umask(i,j)
807# endif
808# ifdef WET_DRY_NOT_YET
809
810
811 tl_u_stokes(i,j,k)=tl_u_stokes(i,j,k)*umask_wet(i,j)
812# endif
813# endif
814# ifdef DIAGNOSTICS_UV
815
816
817
818
819# ifdef UV_COR
820
821
822# endif
823# if defined UV_VIS2 || defined UV_VIS4
824
825
826
827
828
829
830# endif
831# ifdef UV_ADV
832
833
834
835
836
837
838# endif
839# ifdef NEARSHORE_MELLOR
840
841
842# endif
843# endif
844 END DO
845 END DO
846
847# if defined DIAGNOSTICS_UV && defined MASKING
848
849
850
851
852
853
854
855# endif
856
857
858
859
860
861 IF (j.ge.jstrv) THEN
862 DO i=istr,iend
863 ak(i,0)=0.5_r8*(akv(i,j-1,0)+ &
864 & akv(i,j ,0))
865 tl_ak(i,0)=0.5_r8*(tl_akv(i,j-1,0)+ &
866 & tl_akv(i,j ,0))
867 DO k=1,n(ng)
868 ak(i,k)=0.5_r8*(akv(i,j-1,k)+ &
869 & akv(i,j ,k))
870 tl_ak(i,k)=0.5_r8*(tl_akv(i,j-1,k)+ &
871 & tl_akv(i,j ,k))
872 hzk(i,k)=0.5_r8*(hz(i,j-1,k)+ &
873 & hz(i,j ,k))
874 tl_hzk(i,k)=0.5_r8*(tl_hz(i,j-1,k)+ &
875 & tl_hz(i,j ,k))
876# if defined SPLINES_VVISC || defined DIAGNOSTICS_UV
877 ohz(i,k)=1.0_r8/hzk(i,k)
878 tl_ohz(i,k)=-ohz(i,k)*ohz(i,k)*tl_hzk(i,k)
879# endif
880 END DO
881 END DO
882
883
884
885# if defined STOCHASTIC_OPT && !defined STOCH_OPT_WHITE
886 IF (iic(ng).eq.ntfirst(ng).and.soinitial(ng)) THEN
887# else
888 IF (iic(ng).eq.ntfirst(ng)) THEN
889# endif
890 cff=0.25_r8*dt(ng)
891# if defined STOCHASTIC_OPT && !defined STOCH_OPT_WHITE
892 ELSE IF (iic(ng).eq.(ntfirst(ng)+1).and.soinitial(ng)) THEN
893# else
894 ELSE IF (iic(ng).eq.(ntfirst(ng)+1)) THEN
895# endif
896 cff=0.25_r8*dt(ng)*3.0_r8/2.0_r8
897 ELSE
898 cff=0.25_r8*dt(ng)*23.0_r8/12.0_r8
899 END IF
900 DO i=istr,iend
901 dc(i,0)=cff*(pm(i,j)+pm(i,j-1))*(pn(i,j)+pn(i,j-1))
902 END DO
903
904
905
906
907 DO k=1,n(ng)
908 DO i=istr,iend
909
910
911 tl_v(i,j,k,nnew)=tl_v(i,j,k,nnew)+ &
912 & dc(i,0)*tl_rv(i,j,k,nrhs)
913# ifdef SPLINES_VVISC
914
915
916 tl_v(i,j,k,nnew)=tl_v(i,j,k,nnew)*ohz(i,k)+ &
917 & (v(i,j,k,nnew)*hzk(i,k))*tl_ohz(i,k)
918# endif
919# ifdef DIAGNOSTICS_UV
920
921
922
923
924
925
926# if defined UV_VIS2 || defined UV_VIS4
927
928
929
930# endif
931
932# ifdef BODYFORCE
933
934
935
936# endif
937
938# endif
939 END DO
940 END DO
941
942# ifdef SPLINES_VVISC
943
944
945
946
947
948
949 cff1=1.0_r8/6.0_r8
950 DO k=1,n(ng)-1
951 DO i=istr,iend
952 fc(i,k)=cff1*hzk(i,k )-dt(ng)*ak(i,k-1)*ohz(i,k )
953 cf(i,k)=cff1*hzk(i,k+1)-dt(ng)*ak(i,k+1)*ohz(i,k+1)
954 END DO
955 END DO
956 DO i=istr,iend
957 cf(i,0)=0.0_r8
958 dc(i,0)=0.0_r8
959 END DO
960
961
962
963 cff1=1.0_r8/3.0_r8
964 DO k=1,n(ng)-1
965 DO i=istr,iend
966 bc(i,k)=cff1*(hzk(i,k)+hzk(i,k+1))+ &
967 & dt(ng)*ak(i,k)*(ohz(i,k)+ohz(i,k+1))
968 cff=1.0_r8/(bc(i,k)-fc(i,k)*cf(i,k-1))
969 cf(i,k)=cff*cf(i,k)
970 dc(i,k)=cff*(v(i,j,k+1,nnew)-v(i,j,k,nnew)- &
971 & fc(i,k)*dc(i,k-1))
972 END DO
973 END DO
974
975
976
977
978 DO i=istr,iend
979 dc(i,n(ng))=0.0_r8
980 END DO
981 DO k=n(ng)-1,1,-1
982 DO i=istr,iend
983 dc(i,k)=dc(i,k)-cf(i,k)*dc(i,k+1)
984 END DO
985 END DO
986
987
988
989
990
991 cff1=1.0_r8/6.0_r8
992 DO k=1,n(ng)-1
993 DO i=istr,iend
994 fc(i,k)=cff1*hzk(i,k )- &
995 & dt(ng)*ak(i,k-1)*ohz(i,k )
996 tl_fc(i,k)=cff1*tl_hzk(i,k )- &
997 & dt(ng)*(tl_ak(i,k-1)*ohz(i,k )+ &
998 & ak(i,k-1)*tl_ohz(i,k ))
999 cf(i,k)=cff1*hzk(i,k+1)- &
1000 & dt(ng)*ak(i,k+1)*ohz(i,k+1)
1001 tl_cf(i,k)=cff1*tl_hzk(i,k+1)- &
1002 & dt(ng)*(tl_ak(i,k+1)*ohz(i,k+1)+ &
1003 & ak(i,k+1)*tl_ohz(i,k+1))
1004 END DO
1005 END DO
1006 DO i=istr,iend
1007 cf(i,0)=0.0_r8
1008 tl_cf(i,0)=0.0_r8
1009 tl_dc(i,0)=0.0_r8
1010 END DO
1011
1012
1013
1014 cff1=1.0_r8/3.0_r8
1015 DO k=1,n(ng)-1
1016 DO i=istr,iend
1017 bc(i,k)=cff1*(hzk(i,k)+hzk(i,k+1))+ &
1018 & dt(ng)*ak(i,k)*(ohz(i,k)+ohz(i,k+1))
1019 tl_bc(i,k)=cff1*(tl_hzk(i,k)+tl_hzk(i,k+1))+ &
1020 & dt(ng)*(tl_ak(i,k)*(ohz(i,k)+ohz(i,k+1))+ &
1021 & ak(i,k)*(tl_ohz(i,k)+tl_ohz(i,k+1)))
1022 cff=1.0_r8/(bc(i,k)-fc(i,k)*cf(i,k-1))
1023 cf(i,k)=cff*cf(i,k)
1024 tl_dc(i,k)=cff*(tl_v(i,j,k+1,nnew)- &
1025 & tl_v(i,j,k ,nnew)- &
1026 & (tl_fc(i,k)*dc(i,k-1)+ &
1027 & tl_bc(i,k)*dc(i,k )+ &
1028 & tl_cf(i,k)*dc(i,k+1))- &
1029 & fc(i,k)*tl_dc(i,k-1))
1030 END DO
1031 END DO
1032
1033
1034
1035 DO i=istr,iend
1036 tl_dc(i,n(ng))=0.0_r8
1037 END DO
1038 DO k=n(ng)-1,1,-1
1039 DO i=istr,iend
1040 tl_dc(i,k)=tl_dc(i,k)-cf(i,k)*tl_dc(i,k+1)
1041 END DO
1042 END DO
1043
1044
1045
1046
1047 DO k=1,n(ng)
1048 DO i=istr,iend
1049 tl_dc(i,k)=tl_dc(i,k)*ak(i,k)+dc(i,k)*tl_ak(i,k)
1050 dc(i,k)=dc(i,k)*ak(i,k)
1051
1052
1053 tl_cff=dt(ng)*(tl_ohz(i,k)*(dc(i,k)-dc(i,k-1))+ &
1054 & ohz(i,k)*(tl_dc(i,k)-tl_dc(i,k-1)))
1055
1056
1057 tl_v(i,j,k,nnew)=tl_v(i,j,k,nnew)+tl_cff
1058# ifdef DIAGNOSTICS_UV
1059
1060# endif
1061 END DO
1062 END DO
1063# else
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075 cff=-lambda*dt(ng)/0.5_r8
1076 DO k=1,n(ng)-1
1077 DO i=istr,iend
1078 cff1=1.0_r8/(z_r(i,j,k+1)+z_r(i,j-1,k+1)- &
1079 & z_r(i,j,k )-z_r(i,j-1,k ))
1080 tl_cff1=-cff1*cff1*(tl_z_r(i,j,k+1)+tl_z_r(i,j-1,k+1)- &
1081 & tl_z_r(i,j,k )-tl_z_r(i,j-1,k ))
1082 fc(i,k)=cff*cff1*ak(i,k)
1083 tl_fc(i,k)=cff*(tl_cff1*ak(i,k)+cff1*tl_ak(i,k))
1084 END DO
1085 END DO
1086 DO i=istr,iend
1087 fc(i,0)=0.0_r8
1088 tl_fc(i,0)=0.0_r8
1089 fc(i,n(ng))=0.0_r8
1090 tl_fc(i,n(ng))=0.0_r8
1091 END DO
1092
1093
1094
1095 DO k=1,n(ng)
1096 DO i=istr,iend
1097 bc(i,k)=hzk(i,k)-fc(i,k)-fc(i,k-1)
1098 tl_bc(i,k)=tl_hzk(i,k)-tl_fc(i,k)-tl_fc(i,k-1)
1099 END DO
1100 END DO
1101 DO k=2,n(ng)-1
1102 DO i=istr,iend
1103 dc(i,k)=tl_v(i,j,k,nnew)- &
1104 & (tl_fc(i,k-1)*v(i,j,k-1,nnew)+ &
1105 & tl_bc(i,k )*v(i,j,k ,nnew)+ &
1106 & tl_fc(i,k )*v(i,j,k+1,nnew))
1107 END DO
1108 END DO
1109 DO i=istr,iend
1110 dc(i,1)=tl_v(i,j,1,nnew)- &
1111 & (tl_bc(i,1)*v(i,j,1,nnew)+ &
1112 & tl_fc(i,1)*v(i,j,2,nnew))
1113 dc(i,n(ng))=tl_v(i,j,n(ng),nnew)- &
1114 & (tl_fc(i,n(ng)-1)*v(i,j,n(ng)-1,nnew)+ &
1115 & tl_bc(i,n(ng) )*v(i,j,n(ng) ,nnew))
1116 END DO
1117 DO i=istr,iend
1118 cff=1.0_r8/bc(i,1)
1119 cf(i,1)=cff*fc(i,1)
1120 dc(i,1)=cff*dc(i,1)
1121 END DO
1122 DO k=2,n(ng)-1
1123 DO i=istr,iend
1124 cff=1.0_r8/(bc(i,k)-fc(i,k-1)*cf(i,k-1))
1125 cf(i,k)=cff*fc(i,k)
1126 dc(i,k)=cff*(dc(i,k)-fc(i,k-1)*dc(i,k-1))
1127 END DO
1128 END DO
1129
1130
1131
1132
1133 DO i=istr,iend
1134# ifdef DIAGNOSTICS_UV
1135
1136# endif
1137 dc(i,n(ng))=(dc(i,n(ng))-fc(i,n(ng)-1)*dc(i,n(ng)-1))/ &
1138 & (bc(i,n(ng))-fc(i,n(ng)-1)*cf(i,n(ng)-1))
1139
1140
1141 tl_v(i,j,n(ng),nnew)=dc(i,n(ng))
1142# ifdef DIAGNOSTICS_UV
1143
1144
1145# endif
1146 END DO
1147 DO k=n(ng)-1,1,-1
1148 DO i=istr,iend
1149# ifdef DIAGNOSTICS_UV
1150
1151# endif
1152 dc(i,k)=dc(i,k)-cf(i,k)*dc(i,k+1)
1153
1154
1155 tl_v(i,j,k,nnew)=dc(i,k)
1156# ifdef DIAGNOSTICS_UV
1157
1158
1159# endif
1160 END DO
1161 END DO
1162# endif
1163
1164
1165
1166
1167 DO i=istr,iend
1168 cf(i,0)=hzk(i,1)
1169 tl_cf(i,0)=tl_hzk(i,1)
1170 dc(i,0)=v(i,j,1,nnew)*hzk(i,1)
1171 tl_dc(i,0)=tl_v(i,j,1,nnew)*hzk(i,1)+ &
1172 & v(i,j,1,nnew)*tl_hzk(i,1)
1173# ifdef NEARSHORE_MELLOR
1174 dcs(i,0)=v_stokes(i,j,1)*hzk(i,1)
1175 tl_dcs(i,0)=tl_v_stokes(i,j,1)*hzk(i,1)+ &
1176 & v_stokes(i,j,1)*tl_hzk(i,1)
1177# endif
1178# ifdef DIAGNOSTICS_UV
1179
1180
1181# ifdef UV_COR
1182
1183# endif
1184# if defined UV_VIS2 || defined UV_VIS4
1185
1186
1187
1188# endif
1189# ifdef UV_ADV
1190
1191
1192
1193# endif
1194# ifdef NEARSHORE_MELLOR
1195
1196# endif
1197# endif
1198 END DO
1199 DO k=2,n(ng)
1200 DO i=istr,iend
1201 cf(i,0)=cf(i,0)+hzk(i,k)
1202 tl_cf(i,0)=tl_cf(i,0)+tl_hzk(i,k)
1203 dc(i,0)=dc(i,0)+v(i,j,k,nnew)*hzk(i,k)
1204 tl_dc(i,0)=tl_dc(i,0)+ &
1205 & tl_v(i,j,k,nnew)*hzk(i,k)+ &
1206 & v(i,j,k,nnew)*tl_hzk(i,k)
1207# ifdef NEARSHORE_MELLOR
1208 dcs(i,0)=dcs(i,0)+v_stokes(i,j,k)*hzk(i,k)
1209 tl_dcs(i,0)=tl_dcs(i,0)+ &
1210 & tl_v_stokes(i,j,k)*hzk(i,k)+ &
1211 & v_stokes(i,j,k)*tl_hzk(i,k)
1212# endif
1213# ifdef DIAGNOSTICS_UV
1214
1215
1216
1217
1218# ifdef UV_COR
1219
1220
1221# endif
1222# if defined UV_VIS2 || defined UV_VIS4
1223
1224
1225
1226
1227
1228
1229# endif
1230# ifdef UV_ADV
1231
1232
1233
1234
1235
1236
1237# endif
1238# ifdef NEARSHORE_MELLOR
1239
1240
1241# endif
1242# endif
1243 END DO
1244 END DO
1245 DO i=istr,iend
1246 dc1(i,0)=dc(i,0)
1247 cff1=1.0_r8/(cf(i,0)*om_v(i,j))
1248 tl_cff1=-cff1*cff1*tl_cf(i,0)*om_v(i,j)
1249 dc(i,0)=(dc(i,0)*om_v(i,j)-dv_avg1(i,j))*cff1
1250 tl_dc(i,0)=(tl_dc(i,0)*om_v(i,j)-tl_dv_avg1(i,j))*cff1+ &
1251 & (dc1(i,0)*om_v(i,j)-dv_avg1(i,j))*tl_cff1
1252# ifdef NEARSHORE_MELLOR
1253 dcs1(i)=dcs(i,0)
1254 cff2=1.0_r8/cf(i,0)
1255 tl_cff2=-cff2*cff2*tl_cf(i,0)
1256 dcs(i,0)=dcs(i,0)*cff2-vbar_stokes(i,j)
1257 tl_dcs(i,0)=tl_dcs(i,0)*cff2+ &
1258 & dcs1(i,0)*tl_cff2-tl_vbar_stokes(i,j)
1259# endif
1260# ifdef DIAGNOSTICS_UV
1261
1262
1263
1264
1265
1266
1267
1268# endif
1269 END DO
1270
1271
1272
1273 DO k=1,n(ng)
1274 DO i=istr,iend
1275
1276
1277 tl_v(i,j,k,nnew)=tl_v(i,j,k,nnew)-tl_dc(i,0)
1278# ifdef MASKING
1279
1280
1281 tl_v(i,j,k,nnew)=tl_v(i,j,k,nnew)*vmask(i,j)
1282# endif
1283# ifdef WET_DRY_NOT_YET
1284
1285
1286 tl_v(i,j,k,nnew)=tl_v(i,j,k,nnew)*vmask_wet(i,j)
1287# endif
1288# ifdef NEARSHORE_MELLOR
1289
1290
1291 tl_v_stokes(i,j,k)=tl_v_stokes(i,j,k)-tl_dcs(i,0)
1292# ifdef MASKING
1293
1294
1295 tl_v_stokes(i,j,k)=tl_v_stokes(i,j,k)*vmask(i,j)
1296# endif
1297# ifdef WET_DRY_NOT_YET
1298
1299
1300 tl_v_stokes(i,j,k)=tl_v_stokes(i,j,k)*vmask_wet(i,j)
1301# endif
1302# endif
1303# ifdef DIAGNOSTICS_UV
1304
1305
1306
1307
1308# ifdef UV_COR
1309
1310
1311# endif
1312# if defined UV_VIS2 || defined UV_VIS4
1313
1314
1315
1316
1317
1318
1319# endif
1320# ifdef UV_ADV
1321
1322
1323
1324
1325
1326
1327# endif
1328# ifdef NEARSHORE_MELLOR
1329
1330
1331# endif
1332# endif
1333 END DO
1334 END DO
1335
1336# if defined DIAGNOSTICS_UV && defined MASKING
1337
1338
1339
1340
1341
1342
1343
1344# endif
1345 END IF
1346 END DO
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358 CALL tl_u3dbc_tile (ng, tile, &
1359 & lbi, ubi, lbj, ubj, n(ng), &
1360 & imins, imaxs, jmins, jmaxs, &
1361 & nstp, nnew, &
1362 & tl_u)
1363
1364
1365
1366
1367
1368
1369 CALL tl_v3dbc_tile (ng, tile, &
1370 & lbi, ubi, lbj, ubj, n(ng), &
1371 & imins, imaxs, jmins, jmaxs, &
1372 & nstp, nnew, &
1373 & tl_v)
1374
1375
1376
1377
1378
1379 IF (luvsrc(ng)) THEN
1380 DO is=1,nsrc(ng)
1381 i=sources(ng)%Isrc(is)
1382 j=sources(ng)%Jsrc(is)
1383 IF (((istrr.le.i).and.(i.le.iendr)).and. &
1384 & ((jstrr.le.j).and.(j.le.jendr))) THEN
1385 IF (int(sources(ng)%Dsrc(is)).eq.0) THEN
1386 DO k=1,n(ng)
1387 cff1=1.0_r8/(on_u(i,j)* &
1388 & 0.5_r8*(z_w(i-1,j,k)-z_w(i-1,j,k-1)+ &
1389 & z_w(i ,j,k)-z_w(i ,j,k-1)))
1390 tl_cff1=-cff1*cff1*on_u(i,j)* &
1391 & 0.5_r8*(tl_z_w(i-1,j,k)-tl_z_w(i-1,j,k-1)+ &
1392 & tl_z_w(i ,j,k)-tl_z_w(i ,j,k-1))
1393
1394
1395 tl_u(i,j,k,nnew)=sources(ng)%tl_Qsrc(is,k)*cff1+ &
1396 & sources(ng)%Qsrc(is,k)*tl_cff1
1397 END DO
1398 ELSE IF (int(sources(ng)%Dsrc(is)).eq.1) THEN
1399 DO k=1,n(ng)
1400 cff1=1.0_r8/(om_v(i,j)* &
1401 & 0.5_r8*(z_w(i,j-1,k)-z_w(i,j-1,k-1)+ &
1402 & z_w(i,j ,k)-z_w(i,j ,k-1)))
1403 tl_cff1=-cff1*cff1*om_v(i,j)* &
1404 & 0.5_r8*(tl_z_w(i,j-1,k)-tl_z_w(i,j-1,k-1)+ &
1405 & tl_z_w(i,j ,k)-tl_z_w(i,j ,k-1))
1406
1407
1408 tl_v(i,j,k,nnew)=sources(ng)%tl_Qsrc(is,k)*cff1+ &
1409 & sources(ng)%Qsrc(is,k)*tl_cff1
1410 END DO
1411 END IF
1412 END IF
1413 END DO
1414 END IF
1415
1416
1417
1418
1419
1420
1421
1422 DO j=jstrt,jendt
1423 DO i=istrp,iendt
1424 dc(i,0)=0.0_r8
1425 tl_dc(i,0)=0.0_r8
1426 cf(i,0)=0.0_r8
1427 tl_cf(i,0)=0.0_r8
1428# ifdef NEARSHORE_MELLOR
1429 cfs(i,0)=0.0_r8
1430 tl_cfs(i,0)=0.0_r8
1431# endif
1432 fc(i,0)=0.0_r8
1433 tl_fc(i,0)=0.0_r8
1434 END DO
1435
1436
1437
1438
1439
1440
1441 DO k=1,n(ng)
1442 DO i=istrp,iendt
1443 cff=0.5_r8*on_u(i,j)
1444 dc(i,k)=cff*(hz(i,j,k)+hz(i-1,j,k))
1445 tl_dc(i,k)=cff*(tl_hz(i,j,k)+tl_hz(i-1,j,k))
1446 dc(i,0)=dc(i,0)+dc(i,k)
1447 tl_dc(i,0)=tl_dc(i,0)+tl_dc(i,k)
1448 cf(i,0)=cf(i,0)+ &
1449 & dc(i,k)*u(i,j,k,nnew)
1450 tl_cf(i,0)=tl_cf(i,0)+ &
1451 & tl_dc(i,k)*u(i,j,k,nnew)+ &
1452 & dc(i,k)*tl_u(i,j,k,nnew)
1453# ifdef NEARSHORE_MELLOR
1454 cfs(i,0)=cfs(i,0)+ &
1455 & dc(i,k)*u_stokes(i,j,k)
1456 tl_cfs(i,0)=tl_cfs(i,0)+ &
1457 & tl_dc(i,k)*u_stokes(i,j,k)+ &
1458 & dc(i,k)*tl_u_stokes(i,j,k)
1459# endif
1460 END DO
1461 END DO
1462 DO i=istrp,iendt
1463 dc1(i,0)=dc(i,0)
1464# ifdef NEARSHORE_MELLOR
1465 cff2=dc(i,0)*ubar_stokes(i,j)
1466 tl_cff2=tl_dc(i,0)*ubar_stokes(i,j)+ &
1467 & dc(i,0)*tl_ubar_stokes(i,j)
1468# endif
1469 dc(i,0)=1.0_r8/dc(i,0)
1470 tl_dc(i,0)=-tl_dc(i,0)/(dc1(i,0)*dc1(i,0))
1471 cf1(i)=cf(i,0)
1472 cf(i,0)=dc(i,0)*(cf(i,0)-du_avg1(i,j))
1473 tl_cf(i,0)=tl_dc(i,0)*(cf1(i)-du_avg1(i,j))+ &
1474 & dc(i,0)*(tl_cf(i,0)-tl_du_avg1(i,j))
1475# ifdef NEARSHORE_MELLOR
1476 cfs1(i)=cfs(i,0)
1477 cfs(i,0)=dc(i,0)*(cfs(i,0)-cff2)
1478 tl_cfs(i,0)=tl_dc(i,0)*(cfs1(i)-cff2)+ &
1479 & dc(i,0)*(tl_cfs(i,0)-tl_cff2)
1480# endif
1481
1482
1483 tl_ubar(i,j,1)=tl_dc(i,0)*du_avg1(i,j)+ &
1484 & dc(i,0)*tl_du_avg1(i,j)
1485
1486
1487 tl_ubar(i,j,2)=tl_ubar(i,j,1)
1488# ifdef DIAGNOSTICS_UV
1489
1490
1491# endif
1492 END DO
1493# ifdef DIAGNOSTICS_UV
1494
1495
1496
1497
1498
1499
1500
1501# ifdef MASKING
1502
1503# endif
1504
1505
1506# endif
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520 IF (.not.(compositegrid(iwest,ng).or.ewperiodic(ng))) THEN
1521 IF (domain(ng)%Western_Edge(tile)) THEN
1522 DO k=1,n(ng)
1523
1524
1525 tl_u(istr,j,k,nnew)=tl_u(istr,j,k,nnew)- &
1526 & tl_cf(istr,0)
1527# ifdef MASKING
1528
1529
1530
1531 tl_u(istr,j,k,nnew)=tl_u(istr,j,k,nnew)* &
1532 & umask(istr,j)
1533# endif
1534# ifdef WET_DRY_NOT_YET
1535
1536
1537
1538 tl_u(istr,j,k,nnew)=tl_u(istr,j,k,nnew)* &
1539 & umask_wet(istr,j)
1540# endif
1541# ifdef NEARSHORE_MELLOR
1542
1543
1544 tl_u_stokes(istr,j,k)=tl_u_stokes(istr,j,k)- &
1545 & tl_cfs(istr,0)
1546# ifdef MASKING
1547
1548
1549
1550 tl_u_stokes(istr,j,k)=tl_u_stokes(istr,j,k)* &
1551 & umask(istr,j)
1552# endif
1553# ifdef WET_DRY_NOT_YET
1554
1555
1556
1557 tl_u_stokes(istr,j,k)=tl_u_stokes(istr,j,k)* &
1558 & umask_wet(istr,j)
1559# endif
1560# endif
1561 END DO
1562 END IF
1563 END IF
1564
1565 IF (.not.(compositegrid(ieast,ng).or.ewperiodic(ng))) THEN
1566 IF (domain(ng)%Eastern_Edge(tile)) THEN
1567 DO k=1,n(ng)
1568
1569
1570 tl_u(iend+1,j,k,nnew)=tl_u(iend+1,j,k,nnew)- &
1571 & tl_cf(iend+1,0)
1572# ifdef MASKING
1573
1574
1575
1576 tl_u(iend+1,j,k,nnew)=tl_u(iend+1,j,k,nnew)* &
1577 & umask(iend+1,j)
1578# endif
1579# ifdef WET_DRY_NOT_YET
1580
1581
1582
1583 tl_u(iend+1,j,k,nnew)=tl_u(iend+1,j,k,nnew)* &
1584 & umask_wet(iend+1,j)
1585# endif
1586# ifdef NEARSHORE_MELLOR
1587
1588
1589 tl_u_stokes(iend+1,j,k)=tl_u_stokes(iend+1,j,k)- &
1590 & tl_cfs(iend+1,0)
1591# ifdef MASKING
1592
1593
1594
1595 tl_u_stokes(iend+1,j,k)=tl_u_stokes(iend+1,j,k)* &
1596 & umask(iend+1,j)
1597# endif
1598# ifdef WET_DRY_NOT_YET
1599
1600
1601
1602 tl_u_stokes(iend+1,j,k)=tl_u_stokes(iend+1,j,k)* &
1603 & umask_wet(iend+1,j)
1604# endif
1605# endif
1606 END DO
1607 END IF
1608 END IF
1609
1610 IF (.not.(compositegrid(isouth,ng).or.nsperiodic(ng))) THEN
1611 IF (j.eq.0) THEN
1612 DO k=1,n(ng)
1613 DO i=istru,iend
1614
1615
1616 tl_u(i,j,k,nnew)=tl_u(i,j,k,nnew)- &
1617 & tl_cf(i,0)
1618# ifdef MASKING
1619
1620
1621 tl_u(i,j,k,nnew)=tl_u(i,j,k,nnew)* &
1622 & umask(i,j)
1623# endif
1624# ifdef WET_DRY_NOT_YET
1625
1626
1627
1628 tl_u(i,j,k,nnew)=tl_u(i,j,k,nnew)* &
1629 & umask_wet(i,j)
1630# endif
1631# ifdef NEARSHORE_MELLOR
1632
1633
1634 tl_u_stokes(i,j,k)=tl_u_stokes(i,j,k)- &
1635 & tl_cfs(i,0)
1636# ifdef MASKING
1637
1638
1639
1640 tl_u_stokes(i,j,k)=tl_u_stokes(i,j,k)* &
1641 & umask(i,j)
1642# endif
1643# ifdef WET_DRY_NOT_YET
1644
1645
1646
1647 tl_u_stokes(i,j,k)=tl_u_stokes(i,j,k)* &
1648 & umask_wet(i,j)
1649# endif
1650# endif
1651 END DO
1652 END DO
1653 END IF
1654 END IF
1655
1656 IF (.not.(compositegrid(inorth,ng).or.nsperiodic(ng))) THEN
1657 IF (j.eq.mm(ng)+1) THEN
1658 DO k=1,n(ng)
1659 DO i=istru,iend
1660
1661
1662 tl_u(i,j,k,nnew)=tl_u(i,j,k,nnew)- &
1663 & tl_cf(i,0)
1664# ifdef MASKING
1665
1666
1667 tl_u(i,j,k,nnew)=tl_u(i,j,k,nnew)* &
1668 & umask(i,j)
1669# endif
1670# ifdef WET_DRY_NOT_YET
1671
1672
1673 tl_u(i,j,k,nnew)=tl_u(i,j,k,nnew)* &
1674 & umask_wet(i,j)
1675# endif
1676# ifdef NEARSHORE_MELLOR
1677
1678
1679 tl_u_stokes(i,j,k)=tl_u_stokes(i,j,k)- &
1680 & tl_cfs(i,0)
1681# ifdef MASKING
1682
1683
1684
1685 tl_u_stokes(i,j,k)=tl_u_stokes(i,j,k)* &
1686 & umask(i,j)
1687# endif
1688# ifdef WET_DRY_NOT_YET
1689
1690
1691
1692 tl_u_stokes(i,j,k)=tl_u_stokes(i,j,k)* &
1693 & umask_wet(i,j)
1694# endif
1695# endif
1696 END DO
1697 END DO
1698 END IF
1699 END IF
1700
1701
1702
1703 DO k=n(ng),1,-1
1704 DO i=istrp,iendt
1705 huon(i,j,k)=0.5_r8*(huon(i,j,k)+u(i,j,k,nnew)*dc(i,k))
1706 tl_huon(i,j,k)=0.5_r8*(tl_huon(i,j,k)+ &
1707 & tl_u(i,j,k,nnew)*dc(i,k)+ &
1708 & u(i,j,k,nnew)*tl_dc(i,k))
1709# ifdef NEARSHORE_MELLOR
1710 huon(i,j,k)=huon(i,j,k)+0.5_r8*u_stokes(i,j,k)*dc(i,k)
1711 tl_huon(i,j,k)=tl_huon(i,j,k)+ &
1712 & 0.5_r8*(tl_u_stokes(i,j,k)*dc(i,k)+ &
1713 & u_stokes(i,j,k)*tl_dc(i,k))
1714# endif
1715 fc(i,0)=fc(i,0)+huon(i,j,k)
1716 tl_fc(i,0)=tl_fc(i,0)+tl_huon(i,j,k)
1717# ifdef DIAGNOSTICS_UV
1718
1719# endif
1720 END DO
1721 END DO
1722 DO i=istrp,iendt
1723 fc1(i)=fc(i,0)
1724 fc(i,0)=dc(i,0)*(fc(i,0)-du_avg2(i,j))
1725 tl_fc(i,0)=tl_dc(i,0)*(fc1(i)-du_avg2(i,j))+ &
1726 & dc(i,0)*(tl_fc(i,0)-tl_du_avg2(i,j))
1727 END DO
1728 DO k=1,n(ng)
1729 DO i=istrp,iendt
1730 huon(i,j,k)=huon(i,j,k)-dc(i,k)*fc(i,0)
1731 tl_huon(i,j,k)=tl_huon(i,j,k)- &
1732 & tl_dc(i,k)*fc(i,0)- &
1733 & dc(i,k)*tl_fc(i,0)
1734 END DO
1735 END DO
1736
1737
1738
1739 IF (j.ge.jstr) THEN
1740 DO i=istrt,iendt
1741 dc(i,0)=0.0_r8
1742 tl_dc(i,0)=0.0_r8
1743 cf(i,0)=0.0_r8
1744 tl_cf(i,0)=0.0_r8
1745# ifdef NEARSHORE_MELLOR
1746 cfs(i,0)=0.0_r8
1747 tl_cfs(i,0)=0.0_r8
1748# endif
1749 fc(i,0)=0.0_r8
1750 tl_fc(i,0)=0.0_r8
1751 END DO
1752
1753
1754
1755
1756
1757
1758 DO k=1,n(ng)
1759 DO i=istrt,iendt
1760 cff=0.5_r8*om_v(i,j)
1761 dc(i,k)=cff*(hz(i,j,k)+hz(i,j-1,k))
1762 tl_dc(i,k)=cff*(tl_hz(i,j,k)+tl_hz(i,j-1,k))
1763 dc(i,0)=dc(i,0)+dc(i,k)
1764 tl_dc(i,0)=tl_dc(i,0)+tl_dc(i,k)
1765 cf(i,0)=cf(i,0)+ &
1766 & dc(i,k)*v(i,j,k,nnew)
1767 tl_cf(i,0)=tl_cf(i,0)+ &
1768 & tl_dc(i,k)*v(i,j,k,nnew)+ &
1769 & dc(i,k)*tl_v(i,j,k,nnew)
1770# ifdef NEARSHORE_MELLOR
1771 cfs(i,0)=cfs(i,0)+ &
1772 & dc(i,k)*v_stokes(i,j,k)
1773 tl_cfs(i,0)=tl_cfs(i,0)+ &
1774 & tl_dc(i,k)*v_stokes(i,j,k)+ &
1775 & dc(i,k)*tl_v_stokes(i,j,k)
1776# endif
1777 END DO
1778 END DO
1779 DO i=istrt,iendt
1780 dc1(i,0)=dc(i,0)
1781# ifdef NEARSHORE_MELLOR
1782 cff2=dc(i,0)*vbar_stokes(i,j)
1783 tl_cff2=tl_dc(i,0)*vbar_stokes(i,j)+ &
1784 & dc(i,0)*tl_vbar_stokes(i,j)
1785# endif
1786 dc(i,0)=1.0_r8/dc(i,0)
1787 tl_dc(i,0)=-tl_dc(i,0)/(dc1(i,0)*dc1(i,0))
1788 cf1(i)=cf(i,0)
1789 cf(i,0)=dc(i,0)*(cf(i,0)-dv_avg1(i,j))
1790 tl_cf(i,0)=tl_dc(i,0)*(cf1(i)-dv_avg1(i,j))+ &
1791 & dc(i,0)*(tl_cf(i,0)-tl_dv_avg1(i,j))
1792# ifdef NEARSHORE_MELLOR
1793 cfs1(i)=cfs(i,0)
1794 cfs(i,0)=dc(i,0)*(cfs(i,0)-cff2)
1795 tl_cfs(i,0)=tl_dc(i,0)*(cfs1(i)-cff2)+ &
1796 & dc(i,0)*(tl_cfs(i,0)-tl_cff2)
1797# endif
1798
1799
1800 tl_vbar(i,j,1)=tl_dc(i,0)*dv_avg1(i,j)+ &
1801 & dc(i,0)*tl_dv_avg1(i,j)
1802
1803
1804 tl_vbar(i,j,2)=tl_vbar(i,j,1)
1805# ifdef DIAGNOSTICS_UV
1806
1807
1808
1809
1810
1811# endif
1812 END DO
1813# ifdef DIAGNOSTICS_UV
1814
1815
1816
1817
1818
1819
1820
1821# ifdef MASKING
1822
1823# endif
1824
1825
1826# endif
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840 IF (.not.(compositegrid(iwest,ng).or.ewperiodic(ng))) THEN
1841 IF (domain(ng)%Western_Edge(tile)) THEN
1842 DO k=1,n(ng)
1843
1844
1845 tl_v(istr-1,j,k,nnew)=tl_v(istr-1,j,k,nnew)- &
1846 & tl_cf(istr-1,0)
1847# ifdef MASKING
1848
1849
1850
1851 tl_v(istr-1,j,k,nnew)=tl_v(istr-1,j,k,nnew)* &
1852 & vmask(istr-1,j)
1853# endif
1854# ifdef WET_DRY_NOT_YET
1855
1856
1857
1858 tl_v(istr-1,j,k,nnew)=tl_v(istr-1,j,k,nnew)* &
1859 & vmask_wet(istr-1,j)
1860# endif
1861# ifdef NEARSHORE_MELLOR
1862
1863
1864
1865 tl_v_stokes(istr-1,j,k)=tl_v_stokes(istr-1,j,k)- &
1866 & tl_cfs(istr-1,0)
1867# ifdef MASKING
1868
1869
1870
1871 tl_v_stokes(istr-1,j,k)=tl_v_stokes(istr-1,j,k)* &
1872 & vmask(istr-1,j)
1873# endif
1874# ifdef WET_DRY_NOT_YET
1875
1876
1877
1878 tl_v_stokes(istr-1,j,k)=tl_v_stokes(istr-1,j,k)* &
1879 & vmask_wet(istr-1,j)
1880# endif
1881# endif
1882 END DO
1883 END IF
1884 END IF
1885
1886 IF (.not.(compositegrid(ieast,ng).or.ewperiodic(ng))) THEN
1887 IF (domain(ng)%Eastern_Edge(tile)) THEN
1888 DO k=1,n(ng)
1889
1890
1891 tl_v(iend+1,j,k,nnew)=tl_v(iend+1,j,k,nnew)- &
1892 & tl_cf(iend+1,0)
1893# ifdef MASKING
1894
1895
1896
1897 tl_v(iend+1,j,k,nnew)=tl_v(iend+1,j,k,nnew)* &
1898 & vmask(iend+1,j)
1899# endif
1900# ifdef WET_DRY_NOT_YET
1901
1902
1903
1904 tl_v(iend+1,j,k,nnew)=tl_v(iend+1,j,k,nnew)* &
1905 & vmask_wet(iend+1,j)
1906# endif
1907# ifdef NEARSHORE_MELLOR
1908
1909
1910
1911 tl_v_stokes(iend+1,j,k)=tl_v_stokes(iend+1,j,k)- &
1912 & tl_cfs(iend+1,0)
1913# ifdef MASKING
1914
1915
1916
1917 tl_v_stokes(iend+1,j,k)=tl_v_stokes(iend+1,j,k)* &
1918 & vmask(iend+1,j)
1919# endif
1920# ifdef WET_DRY_NOT_YET
1921
1922
1923
1924 tl_v_stokes(iend+1,j,k)=tl_v_stokes(iend+1,j,k)* &
1925 & vmask_wet(iend+1,j)
1926# endif
1927# endif
1928 END DO
1929 END IF
1930 END IF
1931
1932 IF (.not.(compositegrid(isouth,ng).or.nsperiodic(ng))) THEN
1933 IF (j.eq.1) THEN
1934 DO k=1,n(ng)
1935 DO i=istr,iend
1936
1937
1938 tl_v(i,j,k,nnew)=tl_v(i,j,k,nnew)- &
1939 & tl_cf(i,0)
1940# ifdef MASKING
1941
1942
1943
1944 tl_v(i,j,k,nnew)=tl_v(i,j,k,nnew)* &
1945 & vmask(i,j)
1946# endif
1947# ifdef WET_DRY_NOT_YET
1948
1949
1950
1951 tl_v(i,j,k,nnew)=tl_v(i,j,k,nnew)* &
1952 & vmask_wet(i,j)
1953# endif
1954# ifdef NEARSHORE_MELLOR
1955
1956
1957 tl_v_stokes(i,j,k)=tl_v_stokes(i,j,k)- &
1958 & tl_cfs(i,0)
1959# ifdef MASKING
1960
1961
1962 tl_v_stokes(i,j,k)=tl_v_stokes(i,j,k)* &
1963 & vmask(i,j)
1964# endif
1965# ifdef WET_DRY_NOT_YET
1966
1967
1968
1969 tl_v_stokes(i,j,k)=tl_v_stokes(i,j,k)* &
1970 & vmask_wet(i,j)
1971# endif
1972# endif
1973 END DO
1974 END DO
1975 END IF
1976 END IF
1977
1978 IF (.not.(compositegrid(inorth,ng).or.nsperiodic(ng))) THEN
1979 IF (j.eq.mm(ng)+1) THEN
1980 DO k=1,n(ng)
1981 DO i=istr,iend
1982
1983
1984 tl_v(i,j,k,nnew)=tl_v(i,j,k,nnew)- &
1985 & tl_cf(i,0)
1986# ifdef MASKING
1987
1988
1989
1990 tl_v(i,j,k,nnew)=tl_v(i,j,k,nnew)* &
1991 & vmask(i,j)
1992# endif
1993# ifdef WET_DRY_NOT_YET
1994
1995
1996
1997 tl_v(i,j,k,nnew)=tl_v(i,j,k,nnew)* &
1998 & vmask_wet(i,j)
1999# endif
2000# ifdef NEARSHORE_MELLOR
2001
2002
2003 tl_v_stokes(i,j,k)=tl_v_stokes(i,j,k)- &
2004 & tl_cfs(i,0)
2005# ifdef MASKING
2006
2007
2008
2009 tl_v_stokes(i,j,k)=tl_v_stokes(i,j,k)* &
2010 & vmask(i,j)
2011# endif
2012# ifdef WET_DRY_NOT_YET
2013
2014
2015
2016 tl_v_stokes(i,j,k)=tl_v_stokes(i,j,k)* &
2017 & vmask_wet(i,j)
2018# endif
2019# endif
2020 END DO
2021 END DO
2022 END IF
2023 END IF
2024
2025
2026
2027 DO k=n(ng),1,-1
2028 DO i=istrt,iendt
2029 hvom(i,j,k)=0.5_r8*(hvom(i,j,k)+v(i,j,k,nnew)*dc(i,k))
2030 tl_hvom(i,j,k)=0.5_r8*(tl_hvom(i,j,k)+ &
2031 & tl_v(i,j,k,nnew)*dc(i,k)+ &
2032 & v(i,j,k,nnew)*tl_dc(i,k))
2033# ifdef NEARSHORE_MELLOR
2034 hvom(i,j,k)=hvom(i,j,k)+0.5_r8*v_stokes(i,j,k)*dc(i,k)
2035 tl_hvom(i,j,k)=tl_hvom(i,j,k)+ &
2036 & 0.5_r8*(tl_v_stokes(i,j,k)*dc(i,k)+ &
2037 & v_stokes(i,j,k)*tl_dc(i,k))
2038# endif
2039 fc(i,0)=fc(i,0)+hvom(i,j,k)
2040 tl_fc(i,0)=tl_fc(i,0)+tl_hvom(i,j,k)
2041# ifdef DIAGNOSTICS_UV
2042
2043
2044# endif
2045 END DO
2046 END DO
2047 DO i=istrt,iendt
2048 fc1(i)=fc(i,0)
2049 fc(i,0)=dc(i,0)*(fc(i,0)-dv_avg2(i,j))
2050 tl_fc(i,0)=tl_dc(i,0)*(fc1(i)-dv_avg2(i,j))+ &
2051 & dc(i,0)*(tl_fc(i,0)-tl_dv_avg2(i,j))
2052 END DO
2053 DO k=1,n(ng)
2054 DO i=istrt,iendt
2055 hvom(i,j,k)=hvom(i,j,k)-dc(i,k)*fc(i,0)
2056 tl_hvom(i,j,k)=tl_hvom(i,j,k)- &
2057 & tl_dc(i,k)*fc(i,0)- &
2058 & dc(i,k)*tl_fc(i,0)
2059 END DO
2060 END DO
2061 END IF
2062 END DO
2063
2064
2065
2066
2067
2068 IF (ewperiodic(ng).or.nsperiodic(ng)) THEN
2069
2070
2071
2072
2073 CALL exchange_u3d_tile (ng, tile, &
2074 & lbi, ubi, lbj, ubj, 1, n(ng), &
2075 & tl_u(:,:,:,nnew))
2076
2077
2078
2079
2080 CALL exchange_v3d_tile (ng, tile, &
2081 & lbi, ubi, lbj, ubj, 1, n(ng), &
2082 & tl_v(:,:,:,nnew))
2083
2084 CALL exchange_u3d_tile (ng, tile, &
2085 & lbi, ubi, lbj, ubj, 1, n(ng), &
2086 & huon)
2087 CALL exchange_u3d_tile (ng, tile, &
2088 & lbi, ubi, lbj, ubj, 1, n(ng), &
2089 & tl_huon)
2090
2091 CALL exchange_v3d_tile (ng, tile, &
2092 & lbi, ubi, lbj, ubj, 1, n(ng), &
2093 & hvom)
2094 CALL exchange_v3d_tile (ng, tile, &
2095 & lbi, ubi, lbj, ubj, 1, n(ng), &
2096 & tl_hvom)
2097
2098 DO k=1,2
2099
2100
2101
2102
2103 CALL exchange_u2d_tile (ng, tile, &
2104 & lbi, ubi, lbj, ubj, &
2105 & tl_ubar(:,:,k))
2106
2107
2108
2109
2110 CALL exchange_v2d_tile (ng, tile, &
2111 & lbi, ubi, lbj, ubj, &
2112 & tl_vbar(:,:,k))
2113 END DO
2114 END IF
2115
2116# ifdef DISTRIBUTE
2117
2118
2119
2120
2121
2122
2123
2124 CALL mp_exchange3d (ng, tile, itlm, 4, &
2125 & lbi, ubi, lbj, ubj, 1, n(ng), &
2126 & nghostpoints, &
2127 & ewperiodic(ng), nsperiodic(ng), &
2128 & tl_u(:,:,:,nnew), tl_v(:,:,:,nnew), &
2129 & tl_huon, tl_hvom)
2130 CALL mp_exchange3d (ng, tile, itlm, 2, &
2131 & lbi, ubi, lbj, ubj, 1, n(ng), &
2132 & nghostpoints, &
2133 & ewperiodic(ng), nsperiodic(ng), &
2134 & huon, hvom)
2135
2136
2137
2138
2139
2140
2141
2142
2143 CALL mp_exchange2d (ng, tile, itlm, 4, &
2144 & lbi, ubi, lbj, ubj, &
2145 & nghostpoints, &
2146 & ewperiodic(ng), nsperiodic(ng), &
2147 & tl_ubar(:,:,1), tl_vbar(:,:,1), &
2148 & tl_ubar(:,:,2), tl_vbar(:,:,2))
2149# endif
2150# ifdef UV_DESTAGGERED
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160 CALL tl_uv_c2a_grid (ng, tile, itlm, nnew)
2161# endif
2162
2163 RETURN