Changeset 11480 for NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/DOM/domvvl.F90
- Timestamp:
- 2019-08-29T11:23:25+02:00 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/DOM/domvvl.F90
r10978 r11480 13 13 !! dom_vvl_init : define initial vertical scale factors, depths and column thickness 14 14 !! dom_vvl_sf_nxt : Compute next vertical scale factors 15 !! dom_vvl_sf_ swp: Swap vertical scale factors and update the vertical grid15 !! dom_vvl_sf_update : Swap vertical scale factors and update the vertical grid 16 16 !! dom_vvl_interpol : Interpolate vertical scale factors from one grid point to another 17 17 !! dom_vvl_rst : read/write restart file … … 37 37 PUBLIC dom_vvl_init ! called by domain.F90 38 38 PUBLIC dom_vvl_sf_nxt ! called by step.F90 39 PUBLIC dom_vvl_sf_ swp! called by step.F9039 PUBLIC dom_vvl_sf_update ! called by step.F90 40 40 PUBLIC dom_vvl_interpol ! called by dynnxt.F90 41 41 … … 181 181 ! 182 182 ! !== thickness of the water column !! (ocean portion only) 183 ht _n(:,:) = e3t(:,:,1,Kmm) * tmask(:,:,1) !!gm BUG : this should be 1/2 * e3w(k=1) ....184 hu _b(:,:) = e3u(:,:,1,Kbb) * umask(:,:,1)185 hu _n(:,:) = e3u(:,:,1,Kmm) * umask(:,:,1)186 hv _b(:,:) = e3v(:,:,1,Kbb) * vmask(:,:,1)187 hv _n(:,:) = e3v(:,:,1,Kmm) * vmask(:,:,1)183 ht(:,:) = e3t(:,:,1,Kmm) * tmask(:,:,1) !!gm BUG : this should be 1/2 * e3w(k=1) .... 184 hu(:,:,Kbb) = e3u(:,:,1,Kbb) * umask(:,:,1) 185 hu(:,:,Kmm) = e3u(:,:,1,Kmm) * umask(:,:,1) 186 hv(:,:,Kbb) = e3v(:,:,1,Kbb) * vmask(:,:,1) 187 hv(:,:,Kmm) = e3v(:,:,1,Kmm) * vmask(:,:,1) 188 188 DO jk = 2, jpkm1 189 ht _n(:,:) = ht_n(:,:) + e3t(:,:,jk,Kmm) * tmask(:,:,jk)190 hu _b(:,:) = hu_b(:,:) + e3u(:,:,jk,Kbb) * umask(:,:,jk)191 hu _n(:,:) = hu_n(:,:) + e3u(:,:,jk,Kmm) * umask(:,:,jk)192 hv _b(:,:) = hv_b(:,:) + e3v(:,:,jk,Kbb) * vmask(:,:,jk)193 hv _n(:,:) = hv_n(:,:) + e3v(:,:,jk,Kmm) * vmask(:,:,jk)189 ht(:,:) = ht(:,:) + e3t(:,:,jk,Kmm) * tmask(:,:,jk) 190 hu(:,:,Kbb) = hu(:,:,Kbb) + e3u(:,:,jk,Kbb) * umask(:,:,jk) 191 hu(:,:,Kmm) = hu(:,:,Kmm) + e3u(:,:,jk,Kmm) * umask(:,:,jk) 192 hv(:,:,Kbb) = hv(:,:,Kbb) + e3v(:,:,jk,Kbb) * vmask(:,:,jk) 193 hv(:,:,Kmm) = hv(:,:,Kmm) + e3v(:,:,jk,Kmm) * vmask(:,:,jk) 194 194 END DO 195 195 ! 196 196 ! !== inverse of water column thickness ==! (u- and v- points) 197 r1_hu _b(:,:) = ssumask(:,:) / ( hu_b(:,:) + 1._wp - ssumask(:,:) ) ! _i mask due to ISF198 r1_hu _n(:,:) = ssumask(:,:) / ( hu_n(:,:) + 1._wp - ssumask(:,:) )199 r1_hv _b(:,:) = ssvmask(:,:) / ( hv_b(:,:) + 1._wp - ssvmask(:,:) )200 r1_hv _n(:,:) = ssvmask(:,:) / ( hv_n(:,:) + 1._wp - ssvmask(:,:) )197 r1_hu(:,:,Kbb) = ssumask(:,:) / ( hu(:,:,Kbb) + 1._wp - ssumask(:,:) ) ! _i mask due to ISF 198 r1_hu(:,:,Kmm) = ssumask(:,:) / ( hu(:,:,Kmm) + 1._wp - ssumask(:,:) ) 199 r1_hv(:,:,Kbb) = ssvmask(:,:) / ( hv(:,:,Kbb) + 1._wp - ssvmask(:,:) ) 200 r1_hv(:,:,Kmm) = ssvmask(:,:) / ( hv(:,:,Kmm) + 1._wp - ssvmask(:,:) ) 201 201 202 202 ! !== z_tilde coordinate case ==! (Restoring frequencies) … … 550 550 ! *********************************** ! 551 551 552 hu _a(:,:) = e3u(:,:,1,Kaa) * umask(:,:,1)553 hv _a(:,:) = e3v(:,:,1,Kaa) * vmask(:,:,1)552 hu(:,:,Kaa) = e3u(:,:,1,Kaa) * umask(:,:,1) 553 hv(:,:,Kaa) = e3v(:,:,1,Kaa) * vmask(:,:,1) 554 554 DO jk = 2, jpkm1 555 hu _a(:,:) = hu_a(:,:) + e3u(:,:,jk,Kaa) * umask(:,:,jk)556 hv _a(:,:) = hv_a(:,:) + e3v(:,:,jk,Kaa) * vmask(:,:,jk)555 hu(:,:,Kaa) = hu(:,:,Kaa) + e3u(:,:,jk,Kaa) * umask(:,:,jk) 556 hv(:,:,Kaa) = hv(:,:,Kaa) + e3v(:,:,jk,Kaa) * vmask(:,:,jk) 557 557 END DO 558 558 ! ! Inverse of the local depth 559 559 !!gm BUG ? don't understand the use of umask_i here ..... 560 r1_hu _a(:,:) = ssumask(:,:) / ( hu_a(:,:) + 1._wp - ssumask(:,:) )561 r1_hv _a(:,:) = ssvmask(:,:) / ( hv_a(:,:) + 1._wp - ssvmask(:,:) )560 r1_hu(:,:,Kaa) = ssumask(:,:) / ( hu(:,:,Kaa) + 1._wp - ssumask(:,:) ) 561 r1_hv(:,:,Kaa) = ssvmask(:,:) / ( hv(:,:,Kaa) + 1._wp - ssvmask(:,:) ) 562 562 ! 563 563 IF( ln_timing ) CALL timing_stop('dom_vvl_sf_nxt') … … 566 566 567 567 568 SUBROUTINE dom_vvl_sf_ swp( kt, Kbb, Kmm, Kaa )569 !!---------------------------------------------------------------------- 570 !! *** ROUTINE dom_vvl_sf_ swp***568 SUBROUTINE dom_vvl_sf_update( kt, Kbb, Kmm, Kaa ) 569 !!---------------------------------------------------------------------- 570 !! *** ROUTINE dom_vvl_sf_update *** 571 571 !! 572 !! ** Purpose : compute time filter and swap of scale factors572 !! ** Purpose : for z tilde case: compute time filter and swap of scale factors 573 573 !! compute all depths and related variables for next time step 574 574 !! write outputs and restart file 575 575 !! 576 !! ** Method : - swap of e3t with trick for volume/tracer conservation 576 !! ** Method : - swap of e3t with trick for volume/tracer conservation (ONLY FOR Z TILDE CASE) 577 577 !! - reconstruct scale factor at other grid points (interpolate) 578 578 !! - recompute depths and water height fields 579 579 !! 580 !! ** Action : - e3t_(b/n), tilde_e3t_(b/n) and e3(u/v)_nready for next time step580 !! ** Action : - tilde_e3t_(b/n) ready for next time step 581 581 !! - Recompute: 582 582 !! e3(u/v)_b … … 599 599 IF( ln_linssh ) RETURN ! No calculation in linear free surface 600 600 ! 601 IF( ln_timing ) CALL timing_start('dom_vvl_sf_ swp')601 IF( ln_timing ) CALL timing_start('dom_vvl_sf_update') 602 602 ! 603 603 IF( kt == nit000 ) THEN 604 604 IF(lwp) WRITE(numout,*) 605 IF(lwp) WRITE(numout,*) 'dom_vvl_sf_ swp : - time filter and swap of scale factors'606 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~~~ - interpolate scale factors and compute depths for next time step'605 IF(lwp) WRITE(numout,*) 'dom_vvl_sf_update : - interpolate scale factors and compute depths for next time step' 606 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~~~~~~' 607 607 ENDIF 608 608 ! … … 619 619 tilde_e3t_n(:,:,:) = tilde_e3t_a(:,:,:) 620 620 ENDIF 621 gdept(:,:,:,Kbb) = gdept(:,:,:,Kmm)622 gdepw(:,:,:,Kbb) = gdepw(:,:,:,Kmm)623 624 e3t(:,:,:,Kmm) = e3t(:,:,:,Kaa)625 e3u(:,:,:,Kmm) = e3u(:,:,:,Kaa)626 e3v(:,:,:,Kmm) = e3v(:,:,:,Kaa)627 621 628 622 ! Compute all missing vertical scale factor and depths … … 630 624 ! Horizontal scale factor interpolations 631 625 ! -------------------------------------- 632 ! - ML - e3u(:,:,:,Kbb) and e3v(:,:,:,Kbb) are al lready computed in dynnxt633 ! - JC - hu _b, hv_b, hur_b, hvr_b also626 ! - ML - e3u(:,:,:,Kbb) and e3v(:,:,:,Kbb) are already computed in dynnxt 627 ! - JC - hu(:,:,:,Kbb), hv(:,:,:,:,Kbb), hur_b, hvr_b also 634 628 635 629 CALL dom_vvl_interpol( e3u(:,:,:,Kmm), e3f(:,:,:), 'F' ) … … 663 657 ! Local depth and Inverse of the local depth of the water 664 658 ! ------------------------------------------------------- 665 hu_n(:,:) = hu_a(:,:) ; r1_hu_n(:,:) = r1_hu_a(:,:) 666 hv_n(:,:) = hv_a(:,:) ; r1_hv_n(:,:) = r1_hv_a(:,:) 667 ! 668 ht_n(:,:) = e3t(:,:,1,Kmm) * tmask(:,:,1) 659 ! 660 ht(:,:) = e3t(:,:,1,Kmm) * tmask(:,:,1) 669 661 DO jk = 2, jpkm1 670 ht _n(:,:) = ht_n(:,:) + e3t(:,:,jk,Kmm) * tmask(:,:,jk)662 ht(:,:) = ht(:,:) + e3t(:,:,jk,Kmm) * tmask(:,:,jk) 671 663 END DO 672 664 … … 675 667 IF( lrst_oce ) CALL dom_vvl_rst( kt, Kbb, Kmm, 'WRITE' ) 676 668 ! 677 IF( ln_timing ) CALL timing_stop('dom_vvl_sf_ swp')678 ! 679 END SUBROUTINE dom_vvl_sf_ swp669 IF( ln_timing ) CALL timing_stop('dom_vvl_sf_update') 670 ! 671 END SUBROUTINE dom_vvl_sf_update 680 672 681 673
Note: See TracChangeset
for help on using the changeset viewer.