- Timestamp:
- 2016-01-08T10:35:19+01:00 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2014/dev_r4704_NOC5_MPP_BDY_UPDATE/NEMOGCM/NEMO/OPA_SRC/DYN/dynbfr.F90
r3294 r6225 10 10 11 11 !!---------------------------------------------------------------------- 12 !! dyn_bfr : Update the momentum trend with the bottom friction contribution12 !! dyn_bfr : Update the momentum trend with the bottom friction contribution 13 13 !!---------------------------------------------------------------------- 14 USE oce 15 USE dom_oce 16 USE zdf_oce 17 USE zdfbfr 18 USE trd mod ! ocean active dynamics and tracers trends19 USE trd mod_oce ! ocean variables trends20 USE in_out_manager 21 USE prtctl 22 USE timing 23 USE wrk_nemo 14 USE oce ! ocean dynamics and tracers variables 15 USE dom_oce ! ocean space and time domain variables 16 USE zdf_oce ! ocean vertical physics variables 17 USE zdfbfr ! ocean bottom friction variables 18 USE trd_oce ! trends: ocean variables 19 USE trddyn ! trend manager: dynamics 20 USE in_out_manager ! I/O manager 21 USE prtctl ! Print control 22 USE timing ! Timing 23 USE wrk_nemo ! Memory Allocation 24 24 25 25 IMPLICIT NONE 26 26 PRIVATE 27 27 28 PUBLIC dyn_bfr 28 PUBLIC dyn_bfr ! routine called by step.F90 29 29 30 30 !! * Substitutions 31 # include "domzgr_substitute.h90"32 # include "zdfddm_substitute.h90"33 31 # include "vectopt_loop_substitute.h90" 34 32 !!---------------------------------------------------------------------- … … 57 55 IF( nn_timing == 1 ) CALL timing_start('dyn_bfr') 58 56 ! 57 !!gm issue: better to put the logical in step to control the call of zdf_bfr 58 !! ==> change the logical from ln_bfrimp to ln_bfr_exp !! 59 59 IF( .NOT.ln_bfrimp) THEN ! only for explicit bottom friction form 60 60 ! implicit bfr is implemented in dynzdf_imp 61 61 62 !!gm bug : time step is only rdt (not 2 rdt if euler start !) 62 63 zm1_2dt = - 1._wp / ( 2._wp * rdt ) 63 64 64 IF( l_trddyn ) THEN ! temporary save of ua and vatrends65 CALL wrk_alloc( jpi,jpj,jpk, ztrdu, ztrdv )65 IF( l_trddyn ) THEN ! trends: store the input trends 66 CALL wrk_alloc( jpi,jpj,jpk, ztrdu, ztrdv ) 66 67 ztrdu(:,:,:) = ua(:,:,:) 67 68 ztrdv(:,:,:) = va(:,:,:) … … 69 70 70 71 71 # if defined key_vectopt_loop72 DO jj = 1, 173 DO ji = jpi+2, jpij-jpi-1 ! vector opt. (forced unrolling)74 # else75 72 DO jj = 2, jpjm1 76 73 DO ji = 2, jpim1 77 # endif78 74 ikbu = mbku(ji,jj) ! deepest ocean u- & v-levels 79 75 ikbv = mbkv(ji,jj) 80 76 ! 81 77 ! Apply stability criteria on absolute value : abs(bfr/e3) < 1/(2dt) => bfr/e3 > -1/(2dt) 82 ua(ji,jj,ikbu) = ua(ji,jj,ikbu) + MAX( bfrua(ji,jj) / fse3u(ji,jj,ikbu) , zm1_2dt ) * ub(ji,jj,ikbu)83 va(ji,jj,ikbv) = va(ji,jj,ikbv) + MAX( bfrva(ji,jj) / fse3v(ji,jj,ikbv) , zm1_2dt ) * vb(ji,jj,ikbv)78 ua(ji,jj,ikbu) = ua(ji,jj,ikbu) + MAX( bfrua(ji,jj) / e3u_n(ji,jj,ikbu) , zm1_2dt ) * ub(ji,jj,ikbu) 79 va(ji,jj,ikbv) = va(ji,jj,ikbv) + MAX( bfrva(ji,jj) / e3v_n(ji,jj,ikbv) , zm1_2dt ) * vb(ji,jj,ikbv) 84 80 END DO 85 81 END DO 86 87 82 ! 88 IF( l_trddyn ) THEN ! save the vertical diffusive trends for further diagnostics 83 IF( ln_isfcav ) THEN ! ocean cavities 84 DO jj = 2, jpjm1 85 DO ji = 2, jpim1 86 ! (ISF) stability criteria for top friction 87 ikbu = miku(ji,jj) ! first wet ocean u- & v-levels 88 ikbv = mikv(ji,jj) 89 ! 90 ! Apply stability criteria on absolute value : abs(bfr/e3) < 1/(2dt) => bfr/e3 > -1/(2dt) 91 ua(ji,jj,ikbu) = ua(ji,jj,ikbu) + MAX( tfrua(ji,jj) / e3u_n(ji,jj,ikbu) , zm1_2dt ) * ub(ji,jj,ikbu) & 92 & * (1.-umask(ji,jj,1)) 93 va(ji,jj,ikbv) = va(ji,jj,ikbv) + MAX( tfrva(ji,jj) / e3v_n(ji,jj,ikbv) , zm1_2dt ) * vb(ji,jj,ikbv) & 94 & * (1.-vmask(ji,jj,1)) 95 ! (ISF) 96 END DO 97 END DO 98 END IF 99 ! 100 IF( l_trddyn ) THEN ! trends: send trends to trddyn for further diagnostics 89 101 ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 90 102 ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 91 CALL trd_ mod( ztrdu(:,:,:), ztrdv(:,:,:), jpdyn_trd_bfr, 'DYN', kt )92 CALL wrk_dealloc( jpi,jpj,jpk, ztrdu, ztrdv )103 CALL trd_dyn( ztrdu(:,:,:), ztrdv(:,:,:), jpdyn_bfr, kt ) 104 CALL wrk_dealloc( jpi,jpj,jpk, ztrdu, ztrdv ) 93 105 ENDIF 94 106 ! ! print mean trends (used for debugging)
Note: See TracChangeset
for help on using the changeset viewer.