Changeset 5910 for branches/2015
- Timestamp:
- 2015-11-23T16:06:56+01:00 (8 years ago)
- Location:
- branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/DYN
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg.F90
r5120 r5910 250 250 IF( ( ioptio > 1 .AND. .NOT. lk_esopa ) .OR. ( ioptio == 0 .AND. .NOT. lk_c1d ) ) & 251 251 & CALL ctl_stop( ' Choose only one surface pressure gradient scheme with a key cpp' ) 252 IF( ( lk_dynspg_ts .OR. lk_dynspg_exp ).AND. ln_isfcav ) &253 & CALL ctl_stop( ' dynspg_ ts and dynspg_exp not tested with ice shelf cavity ' )252 IF( lk_dynspg_exp .AND. ln_isfcav ) & 253 & CALL ctl_stop( ' dynspg_exp not tested with ice shelf cavity ' ) 254 254 ! 255 255 IF( lk_esopa ) nspg = -1 -
branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_ts.F90
r5624 r5910 144 144 INTEGER :: ji, jj, jk, jn ! dummy loop indices 145 145 INTEGER :: ikbu, ikbv, noffset ! local integers 146 INTEGER :: iktu, iktv ! local integers 146 147 REAL(wp) :: zraur, z1_2dt_b, z2dt_bf ! local scalars 147 148 REAL(wp) :: zx1, zy1, zx2, zy2 ! - - … … 242 243 DO jj = 1, jpjm1 243 244 DO ji = 1, jpim1 244 zwz(ji,jj) = ( ht(ji ,jj+1) + ht(ji+1,jj+1) + &245 & ht(ji ,jj ) + ht(ji+1,jj ) ) &246 & / ( MAX( 1.0_wp, tmask(ji ,jj+1, 1) + tmask(ji+1,jj+1,1) + &247 & tmask(ji ,jj , 1) + tmask(ji+1,jj , 1) ))245 zwz(ji,jj) = ( ht(ji ,jj+1) + ht(ji+1,jj+1) + & 246 & ht(ji ,jj ) + ht(ji+1,jj ) ) & 247 & / ( MAX( 1.0_wp, ssmask(ji ,jj+1) + ssmask(ji+1,jj+1) + & 248 & ssmask(ji ,jj ) + ssmask(ji+1,jj ) ) ) 248 249 IF( zwz(ji,jj) /= 0._wp ) zwz(ji,jj) = 1._wp / zwz(ji,jj) 249 250 END DO … … 389 390 DO jj = 2, jpjm1 ! Remove coriolis term (and possibly spg) from barotropic trend 390 391 DO ji = fs_2, fs_jpim1 391 zu_frc(ji,jj) = zu_frc(ji,jj) - zu_trd(ji,jj) * umask(ji,jj,1)392 zv_frc(ji,jj) = zv_frc(ji,jj) - zv_trd(ji,jj) * vmask(ji,jj,1)392 zu_frc(ji,jj) = zu_frc(ji,jj) - zu_trd(ji,jj) * ssumask(ji,jj) 393 zv_frc(ji,jj) = zv_frc(ji,jj) - zv_trd(ji,jj) * ssvmask(ji,jj) 393 394 END DO 394 395 END DO … … 418 419 zu_frc(:,:) = zu_frc(:,:) + hur(:,:) * bfrua(:,:) * zwx(:,:) 419 420 zv_frc(:,:) = zv_frc(:,:) + hvr(:,:) * bfrva(:,:) * zwy(:,:) 421 ! 422 ! ! Add top stress contribution from baroclinic velocities: 423 IF (ln_bt_fw) THEN 424 DO jj = 2, jpjm1 425 DO ji = fs_2, fs_jpim1 ! vector opt. 426 iktu = miku(ji,jj) 427 iktv = mikv(ji,jj) 428 zwx(ji,jj) = un(ji,jj,iktu) - un_b(ji,jj) ! NOW top baroclinic velocities 429 zwy(ji,jj) = vn(ji,jj,iktv) - vn_b(ji,jj) 430 END DO 431 END DO 432 ELSE 433 DO jj = 2, jpjm1 434 DO ji = fs_2, fs_jpim1 ! vector opt. 435 iktu = miku(ji,jj) 436 iktv = mikv(ji,jj) 437 zwx(ji,jj) = ub(ji,jj,iktu) - ub_b(ji,jj) ! BEFORE top baroclinic velocities 438 zwy(ji,jj) = vb(ji,jj,iktv) - vb_b(ji,jj) 439 END DO 440 END DO 441 ENDIF 442 ! 443 ! Note that the "unclipped" top friction parameter is used even with explicit drag 444 zu_frc(:,:) = zu_frc(:,:) + hur(:,:) * tfrua(:,:) * zwx(:,:) 445 zv_frc(:,:) = zv_frc(:,:) + hvr(:,:) * tfrva(:,:) * zwy(:,:) 420 446 ! 421 447 IF (ln_bt_fw) THEN ! Add wind forcing … … 549 575 DO jj = 2, jpjm1 ! Sea Surface Height at u- & v-points 550 576 DO ji = 2, fs_jpim1 ! Vector opt. 551 zwx(ji,jj) = z1_2 * umask(ji,jj,1) * r1_e12u(ji,jj) &577 zwx(ji,jj) = z1_2 * ssumask(ji,jj) * r1_e12u(ji,jj) & 552 578 & * ( e12t(ji ,jj) * zsshp2_e(ji ,jj) & 553 579 & + e12t(ji+1,jj) * zsshp2_e(ji+1,jj) ) 554 zwy(ji,jj) = z1_2 * vmask(ji,jj,1) * r1_e12v(ji,jj) &580 zwy(ji,jj) = z1_2 * ssvmask(ji,jj) * r1_e12v(ji,jj) & 555 581 & * ( e12t(ji,jj ) * zsshp2_e(ji,jj ) & 556 582 & + e12t(ji,jj+1) * zsshp2_e(ji,jj+1) ) … … 612 638 END DO 613 639 END DO 614 ssha_e(:,:) = ( sshn_e(:,:) - rdtbt * ( zssh_frc(:,:) + zhdiv(:,:) ) ) * tmask(:,:,1)640 ssha_e(:,:) = ( sshn_e(:,:) - rdtbt * ( zssh_frc(:,:) + zhdiv(:,:) ) ) * ssmask(:,:) 615 641 CALL lbc_lnk( ssha_e, 'T', 1._wp ) 616 642 … … 627 653 DO jj = 2, jpjm1 628 654 DO ji = 2, jpim1 ! NO Vector Opt. 629 zsshu_a(ji,jj) = z1_2 * umask(ji,jj,1) * r1_e12u(ji,jj)&630 & * ( e12t(ji ,jj ) * ssha_e(ji ,jj ) &631 & + e12t(ji+1,jj ) * ssha_e(ji+1,jj ) )632 zsshv_a(ji,jj) = z1_2 * vmask(ji,jj,1) * r1_e12v(ji,jj)&633 & * ( e12t(ji ,jj ) * ssha_e(ji ,jj ) &634 & + e12t(ji ,jj+1) * ssha_e(ji ,jj+1) )655 zsshu_a(ji,jj) = z1_2 * ssumask(ji,jj) * r1_e12u(ji,jj) & 656 & * ( e12t(ji ,jj ) * ssha_e(ji ,jj ) & 657 & + e12t(ji+1,jj ) * ssha_e(ji+1,jj ) ) 658 zsshv_a(ji,jj) = z1_2 * ssvmask(ji,jj) * r1_e12v(ji,jj) & 659 & * ( e12t(ji ,jj ) * ssha_e(ji ,jj ) & 660 & + e12t(ji ,jj+1) * ssha_e(ji ,jj+1) ) 635 661 END DO 636 662 END DO … … 666 692 DO jj = 2, jpjm1 667 693 DO ji = 2, jpim1 668 zx1 = z1_2 * umask(ji ,jj,1) * r1_e12u(ji ,jj) &694 zx1 = z1_2 * ssumask(ji ,jj) * r1_e12u(ji ,jj) & 669 695 & * ( e12t(ji ,jj ) * zsshp2_e(ji ,jj) & 670 696 & + e12t(ji+1,jj ) * zsshp2_e(ji+1,jj ) ) 671 zy1 = z1_2 * vmask(ji ,jj,1) * r1_e12v(ji ,jj ) &697 zy1 = z1_2 * ssvmask(ji ,jj) * r1_e12v(ji ,jj ) & 672 698 & * ( e12t(ji ,jj ) * zsshp2_e(ji ,jj ) & 673 699 & + e12t(ji ,jj+1) * zsshp2_e(ji ,jj+1) ) … … 741 767 zv_trd(:,:) = zv_trd(:,:) + bfrva(:,:) * zvn_e(:,:) * hvr_e(:,:) 742 768 ! 769 ! Add top stresses: 770 zu_trd(:,:) = zu_trd(:,:) + tfrua(:,:) * zun_e(:,:) * hur_e(:,:) 771 zv_trd(:,:) = zv_trd(:,:) + tfrva(:,:) * zvn_e(:,:) * hvr_e(:,:) 772 ! 743 773 ! Surface pressure trend: 744 774 DO jj = 2, jpjm1 … … 753 783 ! 754 784 ! Set next velocities: 755 IF( ln_dynadv_vec .OR. (.NOT. lk_vvl) ) THEN 785 IF( ln_dynadv_vec .OR. (.NOT. lk_vvl) ) THEN ! Vector form 756 786 DO jj = 2, jpjm1 757 787 DO ji = fs_2, fs_jpim1 ! vector opt. … … 760 790 & + zu_trd(ji,jj) & 761 791 & + zu_frc(ji,jj) ) & 762 & ) * umask(ji,jj,1)792 & ) * ssumask(ji,jj) 763 793 764 794 va_e(ji,jj) = ( zvn_e(ji,jj) & … … 766 796 & + zv_trd(ji,jj) & 767 797 & + zv_frc(ji,jj) ) & 768 & ) * vmask(ji,jj,1)769 END DO 770 END DO 771 772 ELSE 798 & ) * ssvmask(ji,jj) 799 END DO 800 END DO 801 802 ELSE ! Flux form 773 803 DO jj = 2, jpjm1 774 804 DO ji = fs_2, fs_jpim1 ! vector opt. 775 805 776 zhura = umask(ji,jj,1)/(hu_0(ji,jj) + zsshu_a(ji,jj) + 1._wp - umask(ji,jj,1))777 zhvra = vmask(ji,jj,1)/(hv_0(ji,jj) + zsshv_a(ji,jj) + 1._wp - vmask(ji,jj,1))806 zhura = ssumask(ji,jj)/(hu_0(ji,jj) + zsshu_a(ji,jj) + 1._wp - ssumask(ji,jj)) 807 zhvra = ssvmask(ji,jj)/(hv_0(ji,jj) + zsshv_a(ji,jj) + 1._wp - ssvmask(ji,jj)) 778 808 779 809 ua_e(ji,jj) = ( hu_e(ji,jj) * zun_e(ji,jj) & … … 796 826 hu_e (:,:) = hu_0(:,:) + zsshu_a(:,:) 797 827 hv_e (:,:) = hv_0(:,:) + zsshv_a(:,:) 798 hur_e(:,:) = umask(:,:,1) / ( hu_e(:,:) + 1._wp - umask(:,:,1) )799 hvr_e(:,:) = vmask(:,:,1) / ( hv_e(:,:) + 1._wp - vmask(:,:,1) )828 hur_e(:,:) = ssumask(:,:) / ( hu_e(:,:) + 1._wp - ssumask(:,:) ) 829 hvr_e(:,:) = ssvmask(:,:) / ( hv_e(:,:) + 1._wp - ssvmask(:,:) ) 800 830 ! 801 831 ENDIF … … 832 862 ua_b (:,:) = ua_b (:,:) + za1 * ua_e (:,:) 833 863 va_b (:,:) = va_b (:,:) + za1 * va_e (:,:) 834 ELSE 864 ELSE ! Sum transports 835 865 ua_b (:,:) = ua_b (:,:) + za1 * ua_e (:,:) * hu_e (:,:) 836 866 va_b (:,:) = va_b (:,:) + za1 * va_e (:,:) * hv_e (:,:) … … 850 880 DO jj = 1, jpjm1 851 881 DO ji = 1, jpim1 ! NO Vector Opt. 852 zsshu_a(ji,jj) = z1_2 * umask(ji,jj,1)* r1_e12u(ji,jj) &853 & * ( e12t(ji ,jj) * ssha(ji ,jj) &882 zsshu_a(ji,jj) = z1_2 * ssumask(ji,jj) * r1_e12u(ji,jj) & 883 & * ( e12t(ji ,jj) * ssha(ji ,jj) & 854 884 & + e12t(ji+1,jj) * ssha(ji+1,jj) ) 855 zsshv_a(ji,jj) = z1_2 * vmask(ji,jj,1)* r1_e12v(ji,jj) &856 & * ( e12t(ji,jj ) * ssha(ji,jj ) &885 zsshv_a(ji,jj) = z1_2 * ssvmask(ji,jj) * r1_e12v(ji,jj) & 886 & * ( e12t(ji,jj ) * ssha(ji,jj ) & 857 887 & + e12t(ji,jj+1) * ssha(ji,jj+1) ) 858 888 END DO … … 887 917 END DO 888 918 ! Save barotropic velocities not transport: 889 ua_b (:,:) = ua_b(:,:) / ( hu_0(:,:) + zsshu_a(:,:) + 1._wp - umask(:,:,1) )890 va_b (:,:) = va_b(:,:) / ( hv_0(:,:) + zsshv_a(:,:) + 1._wp - vmask(:,:,1) )919 ua_b (:,:) = ua_b(:,:) / ( hu_0(:,:) + zsshu_a(:,:) + 1._wp - ssumask(:,:) ) 920 va_b (:,:) = va_b(:,:) / ( hv_0(:,:) + zsshv_a(:,:) + 1._wp - ssvmask(:,:) ) 891 921 ENDIF 892 922 !
Note: See TracChangeset
for help on using the changeset viewer.