Changeset 10874 for NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/traldf_lap_blp.F90
- Timestamp:
- 2019-04-15T15:57:37+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/TRA/traldf_lap_blp.F90
r10806 r10874 45 45 CONTAINS 46 46 47 SUBROUTINE tra_ldf_lap( kt, kit000, ktlev, kt2lev,cdtype, pahu, pahv, pgu , pgv , &47 SUBROUTINE tra_ldf_lap( kt, kit000, cdtype, pahu, pahv, pgu , pgv , & 48 48 & pgui, pgvi, & 49 & pt , pt_rhs, kjpt, kpass )49 & ptb , pta , kjpt, kpass ) 50 50 !!---------------------------------------------------------------------- 51 51 !! *** ROUTINE tra_ldf_lap *** … … 59 59 !! difft = 1/(e1e2t*e3t) { di-1[ pahu e2u*e3u/e1u di(tb) ] 60 60 !! + dj-1[ pahv e1v*e3v/e2v dj(tb) ] } 61 !! Add this trend to the general tracer trend pt _rhs:62 !! pt _rhs = pt_rhs+ difft63 !! 64 !! ** Action : - Update pt _rhsarrays with the before iso-level61 !! Add this trend to the general tracer trend pta : 62 !! pta = pta + difft 63 !! 64 !! ** Action : - Update pta arrays with the before iso-level 65 65 !! harmonic mixing trend. 66 66 !!---------------------------------------------------------------------- 67 67 INTEGER , INTENT(in ) :: kt ! ocean time-step index 68 68 INTEGER , INTENT(in ) :: kit000 ! first time step index 69 INTEGER , INTENT(in ) :: ktlev ! time level index for e3t70 INTEGER , INTENT(in ) :: kt2lev ! time level index for 2-time-level thicknesses71 69 CHARACTER(len=3) , INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) 72 70 INTEGER , INTENT(in ) :: kjpt ! number of tracers … … 75 73 REAL(wp), DIMENSION(jpi,jpj ,kjpt), INTENT(in ) :: pgu, pgv ! tracer gradient at pstep levels 76 74 REAL(wp), DIMENSION(jpi,jpj, kjpt), INTENT(in ) :: pgui, pgvi ! tracer gradient at top levels 77 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: pt ! before and now tracer fields78 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pt _rhs! tracer trend75 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: ptb ! before and now tracer fields 76 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pta ! tracer trend 79 77 ! 80 78 INTEGER :: ji, jj, jk, jn ! dummy loop indices … … 102 100 DO jj = 1, jpjm1 103 101 DO ji = 1, fs_jpim1 ! vector opt. 104 zaheeu(ji,jj,jk) = zsign * pahu(ji,jj,jk) * e2_e1u(ji,jj) * e3u (ji,jj,jk,ktlev) !!gm * umask(ji,jj,jk) pah masked!105 zaheev(ji,jj,jk) = zsign * pahv(ji,jj,jk) * e1_e2v(ji,jj) * e3v (ji,jj,jk,ktlev) !!gm * vmask(ji,jj,jk)102 zaheeu(ji,jj,jk) = zsign * pahu(ji,jj,jk) * e2_e1u(ji,jj) * e3u_n(ji,jj,jk) !!gm * umask(ji,jj,jk) pah masked! 103 zaheev(ji,jj,jk) = zsign * pahv(ji,jj,jk) * e1_e2v(ji,jj) * e3v_n(ji,jj,jk) !!gm * vmask(ji,jj,jk) 106 104 END DO 107 105 END DO … … 115 113 DO jj = 1, jpjm1 116 114 DO ji = 1, fs_jpim1 117 ztu(ji,jj,jk) = zaheeu(ji,jj,jk) * ( pt (ji+1,jj ,jk,jn) - pt(ji,jj,jk,jn) )118 ztv(ji,jj,jk) = zaheev(ji,jj,jk) * ( pt (ji ,jj+1,jk,jn) - pt(ji,jj,jk,jn) )115 ztu(ji,jj,jk) = zaheeu(ji,jj,jk) * ( ptb(ji+1,jj ,jk,jn) - ptb(ji,jj,jk,jn) ) 116 ztv(ji,jj,jk) = zaheev(ji,jj,jk) * ( ptb(ji ,jj+1,jk,jn) - ptb(ji,jj,jk,jn) ) 119 117 END DO 120 118 END DO … … 140 138 DO jj = 2, jpjm1 141 139 DO ji = fs_2, fs_jpim1 142 pt _rhs(ji,jj,jk,jn) = pt_rhs(ji,jj,jk,jn) + ( ztu(ji,jj,jk) - ztu(ji-1,jj,jk) &140 pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + ( ztu(ji,jj,jk) - ztu(ji-1,jj,jk) & 143 141 & + ztv(ji,jj,jk) - ztv(ji,jj-1,jk) ) & 144 & / ( e1e2t(ji,jj) * e3t (ji,jj,jk,ktlev) )142 & / ( e1e2t(ji,jj) * e3t_n(ji,jj,jk) ) 145 143 END DO 146 144 END DO … … 161 159 162 160 163 SUBROUTINE tra_ldf_blp( kt, kit000, ktlev, kt2lev,cdtype, pahu, pahv, pgu , pgv , &161 SUBROUTINE tra_ldf_blp( kt, kit000, cdtype, pahu, pahv, pgu , pgv , & 164 162 & pgui, pgvi, & 165 & pt , pt_rhs, kjpt, kldf )163 & ptb , pta , kjpt, kldf ) 166 164 !!---------------------------------------------------------------------- 167 165 !! *** ROUTINE tra_ldf_blp *** … … 174 172 !! It is computed by two successive calls to laplacian routine 175 173 !! 176 !! ** Action : pt _rhsupdated with the before rotated bilaplacian diffusion174 !! ** Action : pta updated with the before rotated bilaplacian diffusion 177 175 !!---------------------------------------------------------------------- 178 176 INTEGER , INTENT(in ) :: kt ! ocean time-step index 179 177 INTEGER , INTENT(in ) :: kit000 ! first time step index 180 INTEGER , INTENT(in ) :: ktlev ! time level index for e3t181 INTEGER , INTENT(in ) :: kt2lev ! time level index for 2-time-level thicknesses182 178 CHARACTER(len=3) , INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) 183 179 INTEGER , INTENT(in ) :: kjpt ! number of tracers … … 186 182 REAL(wp), DIMENSION(jpi,jpj ,kjpt), INTENT(in ) :: pgu, pgv ! tracer gradient at pstep levels 187 183 REAL(wp), DIMENSION(jpi,jpj, kjpt), INTENT(in ) :: pgui, pgvi ! tracer gradient at top levels 188 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: pt ! before and now tracer fields189 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pt _rhs! tracer trend184 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: ptb ! before and now tracer fields 185 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pta ! tracer trend 190 186 ! 191 187 INTEGER :: ji, jj, jk, jn ! dummy loop indices … … 207 203 zlap(:,:,:,:) = 0._wp 208 204 ! 209 SELECT CASE ( kldf ) !== 1st laplacian applied to pt (output in zlap) ==!205 SELECT CASE ( kldf ) !== 1st laplacian applied to ptb (output in zlap) ==! 210 206 ! 211 207 CASE ( np_blp ) ! iso-level bilaplacian 212 CALL tra_ldf_lap ( kt, kit000, ktlev, kt2lev, cdtype, pahu, pahv, pgu, pgv, pgui, pgvi, pt, zlap, kjpt, 1 )208 CALL tra_ldf_lap ( kt, kit000, cdtype, pahu, pahv, pgu, pgv, pgui, pgvi, ptb, zlap, kjpt, 1 ) 213 209 CASE ( np_blp_i ) ! rotated bilaplacian : standard operator (Madec) 214 CALL tra_ldf_iso ( kt, kit000, ktlev, kt2lev, cdtype, pahu, pahv, pgu, pgv, pgui, pgvi, pt, pt, zlap, kjpt, 1 )210 CALL tra_ldf_iso ( kt, kit000, cdtype, pahu, pahv, pgu, pgv, pgui, pgvi, ptb, ptb, zlap, kjpt, 1 ) 215 211 CASE ( np_blp_it ) ! rotated bilaplacian : triad operator (griffies) 216 CALL tra_ldf_triad( kt, kit000, ktlev, kt2lev, cdtype, pahu, pahv, pgu, pgv, pgui, pgvi, pt, pt, zlap, kjpt, 1 )212 CALL tra_ldf_triad( kt, kit000, cdtype, pahu, pahv, pgu, pgv, pgui, pgvi, ptb, ptb, zlap, kjpt, 1 ) 217 213 END SELECT 218 214 ! … … 223 219 ENDIF 224 220 ! 225 SELECT CASE ( kldf ) !== 2nd laplacian applied to zlap (output in pt _rhs) ==!221 SELECT CASE ( kldf ) !== 2nd laplacian applied to zlap (output in pta) ==! 226 222 ! 227 223 CASE ( np_blp ) ! iso-level bilaplacian 228 CALL tra_ldf_lap ( kt, kit000, ktlev, kt2lev, cdtype, pahu, pahv, zglu, zglv, zgui, zgvi, zlap, pt_rhs, kjpt, 2 )224 CALL tra_ldf_lap ( kt, kit000, cdtype, pahu, pahv, zglu, zglv, zgui, zgvi, zlap, pta, kjpt, 2 ) 229 225 CASE ( np_blp_i ) ! rotated bilaplacian : standard operator (Madec) 230 CALL tra_ldf_iso ( kt, kit000, ktlev, kt2lev, cdtype, pahu, pahv, zglu, zglv, zgui, zgvi, zlap, pt, pt_rhs, kjpt, 2 )226 CALL tra_ldf_iso ( kt, kit000, cdtype, pahu, pahv, zglu, zglv, zgui, zgvi, zlap, ptb, pta, kjpt, 2 ) 231 227 CASE ( np_blp_it ) ! rotated bilaplacian : triad operator (griffies) 232 CALL tra_ldf_triad( kt, kit000, ktlev, kt2lev, cdtype, pahu, pahv, zglu, zglv, zgui, zgvi, zlap, pt, pt_rhs, kjpt, 2 )228 CALL tra_ldf_triad( kt, kit000, cdtype, pahu, pahv, zglu, zglv, zgui, zgvi, zlap, ptb, pta, kjpt, 2 ) 233 229 END SELECT 234 230 !
Note: See TracChangeset
for help on using the changeset viewer.