- Timestamp:
- 2015-02-17T10:06:39+01:00 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2014/dev_r4650_UKMO3_masked_damping/NEMOGCM/NEMO/OPA_SRC/DYN/dynvor.F90
r4624 r5086 15 15 !! 3.2 ! 2009-04 (R. Benshila) vvl: correction of een scheme 16 16 !! 3.3 ! 2010-10 (C. Ethe, G. Madec) reorganisation of initialisation phase 17 !! 3.7 ! 2014-04 (G. Madec) trend simplification: suppress jpdyn_trd_dat vorticity 17 18 !!---------------------------------------------------------------------- 18 19 … … 29 30 USE dommsk ! ocean mask 30 31 USE dynadv ! momentum advection (use ln_dynadv_vec value) 31 USE trd mod ! ocean dynamics trends32 USE trd mod_oce ! ocean variables trends32 USE trd_oce ! trends: ocean variables 33 USE trddyn ! trend manager: dynamics 33 34 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 34 35 USE prtctl ! Print control … … 50 51 LOGICAL, PUBLIC :: ln_dynvor_mix !: mixed scheme 51 52 LOGICAL, PUBLIC :: ln_dynvor_een !: energy and enstrophy conserving scheme 53 LOGICAL, PUBLIC :: ln_dynvor_een_old !: energy and enstrophy conserving scheme (original formulation) 52 54 53 55 INTEGER :: nvor = 0 ! type of vorticity trend used … … 73 75 !! ** Action : - Update (ua,va) with the now vorticity term trend 74 76 !! - save the trends in (ztrdu,ztrdv) in 2 parts (relative 75 !! and planetary vorticity trends) ('key_trddyn') 77 !! and planetary vorticity trends) and send them to trd_dyn 78 !! for futher diagnostics (l_trddyn=T) 76 79 !!---------------------------------------------------------------------- 77 80 INTEGER, INTENT( in ) :: kt ! ocean time-step index … … 108 111 ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 109 112 ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 110 CALL trd_ mod( ztrdu, ztrdv, jpdyn_trd_rvo, 'DYN', kt )113 CALL trd_dyn( ztrdu, ztrdv, jpdyn_rvo, kt ) 111 114 ztrdu(:,:,:) = ua(:,:,:) 112 115 ztrdv(:,:,:) = va(:,:,:) … … 114 117 ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 115 118 ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 116 CALL trd_mod( ztrdu, ztrdv, jpdyn_trd_pvo, 'DYN', kt ) 117 CALL trd_mod( ztrdu, ztrdv, jpdyn_trd_dat, 'DYN', kt ) 119 CALL trd_dyn( ztrdu, ztrdv, jpdyn_pvo, kt ) 118 120 ELSE 119 121 CALL vor_ene( kt, ntot, ua, va ) ! total vorticity … … 127 129 ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 128 130 ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 129 CALL trd_ mod( ztrdu, ztrdv, jpdyn_trd_rvo, 'DYN', kt )131 CALL trd_dyn( ztrdu, ztrdv, jpdyn_rvo, kt ) 130 132 ztrdu(:,:,:) = ua(:,:,:) 131 133 ztrdv(:,:,:) = va(:,:,:) … … 133 135 ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 134 136 ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 135 CALL trd_mod( ztrdu, ztrdv, jpdyn_trd_pvo, 'DYN', kt ) 136 CALL trd_mod( ztrdu, ztrdv, jpdyn_trd_dat, 'DYN', kt ) 137 CALL trd_dyn( ztrdu, ztrdv, jpdyn_pvo, kt ) 137 138 ELSE 138 139 CALL vor_ens( kt, ntot, ua, va ) ! total vorticity … … 146 147 ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 147 148 ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 148 CALL trd_ mod( ztrdu, ztrdv, jpdyn_trd_rvo, 'DYN', kt )149 CALL trd_dyn( ztrdu, ztrdv, jpdyn_rvo, kt ) 149 150 ztrdu(:,:,:) = ua(:,:,:) 150 151 ztrdv(:,:,:) = va(:,:,:) … … 152 153 ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 153 154 ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 154 CALL trd_mod( ztrdu, ztrdv, jpdyn_trd_pvo, 'DYN', kt ) 155 CALL trd_mod( ztrdu, ztrdv, jpdyn_trd_dat, 'DYN', kt ) 155 CALL trd_dyn( ztrdu, ztrdv, jpdyn_pvo, kt ) 156 156 ELSE 157 157 CALL vor_mix( kt ) ! total vorticity (mix=ens-ene) … … 165 165 ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 166 166 ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 167 CALL trd_ mod( ztrdu, ztrdv, jpdyn_trd_rvo, 'DYN', kt )167 CALL trd_dyn( ztrdu, ztrdv, jpdyn_rvo, kt ) 168 168 ztrdu(:,:,:) = ua(:,:,:) 169 169 ztrdv(:,:,:) = va(:,:,:) … … 171 171 ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 172 172 ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 173 CALL trd_mod( ztrdu, ztrdv, jpdyn_trd_pvo, 'DYN', kt ) 174 CALL trd_mod( ztrdu, ztrdv, jpdyn_trd_dat, 'DYN', kt ) 173 CALL trd_dyn( ztrdu, ztrdv, jpdyn_pvo, kt ) 175 174 ELSE 176 175 CALL vor_een( kt, ntot, ua, va ) ! total vorticity … … 211 210 !! 212 211 !! ** Action : - Update (ua,va) with the now vorticity term trend 213 !! - save the trends in (ztrdu,ztrdv) in 2 parts (relative214 !! and planetary vorticity trends) ('key_trddyn')215 212 !! 216 213 !! References : Sadourny, r., 1975, j. atmos. sciences, 32, 680-689. … … 328 325 !! 329 326 !! ** Action : - Update (ua,va) arrays with the now vorticity term trend 330 !! - Save the trends in (ztrdu,ztrdv) in 2 parts (relative331 !! and planetary vorticity trends) ('key_trddyn')332 327 !! 333 328 !! References : Sadourny, r., 1975, j. atmos. sciences, 32, 680-689. … … 444 439 !! 445 440 !! ** Action : - Update (ua,va) arrays with the now vorticity term trend 446 !! - Save the trends in (ztrdu,ztrdv) in 2 parts (relative447 !! and planetary vorticity trends) ('key_trddyn')448 441 !! 449 442 !! References : Sadourny, r., 1975, j. atmos. sciences, 32, 680-689. … … 557 550 !! 558 551 !! ** Action : - Update (ua,va) with the now vorticity term trend 559 !! - save the trends in (ztrdu,ztrdv) in 2 parts (relative560 !! and planetary vorticity trends) ('key_trddyn')561 552 !! 562 553 !! References : Arakawa and Lamb 1980, Mon. Wea. Rev., 109, 18-36 … … 601 592 IF( ierr /= 0 ) CALL ctl_stop( 'STOP', 'dyn:vor_een : unable to allocate arrays' ) 602 593 ENDIF 603 ze3f(:,:,:) = 0. d0594 ze3f(:,:,:) = 0._wp 604 595 #endif 605 596 ENDIF 606 597 607 598 IF( kt == nit000 .OR. lk_vvl ) THEN ! reciprocal of e3 at F-point (masked averaging of e3t over ocean points) 608 DO jk = 1, jpk 609 DO jj = 1, jpjm1 610 DO ji = 1, jpim1 611 ze3 = ( fse3t(ji,jj+1,jk)*tmask(ji,jj+1,jk) + fse3t(ji+1,jj+1,jk)*tmask(ji+1,jj+1,jk) & 612 & + fse3t(ji,jj ,jk)*tmask(ji,jj ,jk) + fse3t(ji+1,jj ,jk)*tmask(ji+1,jj ,jk) ) 613 zmsk = ( tmask(ji,jj+1,jk) + tmask(ji+1,jj+1,jk) & 614 & + tmask(ji,jj ,jk) + tmask(ji+1,jj ,jk) ) 615 IF( ze3 /= 0._wp ) ze3f(ji,jj,jk) = zmsk / ze3 616 END DO 617 END DO 618 END DO 599 600 IF( ln_dynvor_een_old ) THEN ! original formulation 601 DO jk = 1, jpk 602 DO jj = 1, jpjm1 603 DO ji = 1, jpim1 604 ze3 = ( fse3t(ji,jj+1,jk)*tmask(ji,jj+1,jk) + fse3t(ji+1,jj+1,jk)*tmask(ji+1,jj+1,jk) & 605 & + fse3t(ji,jj ,jk)*tmask(ji,jj ,jk) + fse3t(ji+1,jj ,jk)*tmask(ji+1,jj ,jk) ) 606 IF( ze3 /= 0._wp ) ze3f(ji,jj,jk) = 4.0_wp / ze3 607 END DO 608 END DO 609 END DO 610 ELSE ! new formulation from NEMO 3.6 611 DO jk = 1, jpk 612 DO jj = 1, jpjm1 613 DO ji = 1, jpim1 614 ze3 = ( fse3t(ji,jj+1,jk)*tmask(ji,jj+1,jk) + fse3t(ji+1,jj+1,jk)*tmask(ji+1,jj+1,jk) & 615 & + fse3t(ji,jj ,jk)*tmask(ji,jj ,jk) + fse3t(ji+1,jj ,jk)*tmask(ji+1,jj ,jk) ) 616 zmsk = ( tmask(ji,jj+1,jk) + tmask(ji+1,jj+1,jk) & 617 & + tmask(ji,jj ,jk) + tmask(ji+1,jj ,jk) ) 618 IF( ze3 /= 0._wp ) ze3f(ji,jj,jk) = zmsk / ze3 619 END DO 620 END DO 621 END DO 622 ENDIF 623 619 624 CALL lbc_lnk( ze3f, 'F', 1. ) 620 625 ENDIF … … 715 720 INTEGER :: ios ! Local integer output status for namelist read 716 721 !! 717 NAMELIST/namdyn_vor/ ln_dynvor_ens, ln_dynvor_ene, ln_dynvor_mix, ln_dynvor_een 722 NAMELIST/namdyn_vor/ ln_dynvor_ens, ln_dynvor_ene, ln_dynvor_mix, ln_dynvor_een, ln_dynvor_een_old 718 723 !!---------------------------------------------------------------------- 719 724 … … 736 741 WRITE(numout,*) ' mixed enstrophy/energy conserving scheme ln_dynvor_mix = ', ln_dynvor_mix 737 742 WRITE(numout,*) ' enstrophy and energy conserving scheme ln_dynvor_een = ', ln_dynvor_een 743 WRITE(numout,*) ' enstrophy and energy conserving scheme (old) ln_dynvor_een_old= ', ln_dynvor_een_old 738 744 ENDIF 739 745 … … 759 765 IF( ln_dynvor_mix ) ioptio = ioptio + 1 760 766 IF( ln_dynvor_een ) ioptio = ioptio + 1 767 IF( ln_dynvor_een_old ) ioptio = ioptio + 1 761 768 IF( lk_esopa ) ioptio = 1 762 769 … … 767 774 IF( ln_dynvor_ens ) nvor = 1 768 775 IF( ln_dynvor_mix ) nvor = 2 769 IF( ln_dynvor_een ) nvor = 3776 IF( ln_dynvor_een .or. ln_dynvor_een_old ) nvor = 3 770 777 IF( lk_esopa ) nvor = -1 771 778
Note: See TracChangeset
for help on using the changeset viewer.