Changeset 12377 for NEMO/trunk/src/TOP/PISCES/P2Z/p2zexp.F90
- Timestamp:
- 2020-02-12T15:39:06+01:00 (4 years ago)
- Location:
- NEMO/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/trunk
- Property svn:externals
-
old new 3 3 ^/utils/build/mk@HEAD mk 4 4 ^/utils/tools@HEAD tools 5 ^/vendors/AGRIF/dev @HEAD ext/AGRIF5 ^/vendors/AGRIF/dev_r11615_ENHANCE-04_namelists_as_internalfiles_agrif@HEAD ext/AGRIF 6 6 ^/vendors/FCM@HEAD ext/FCM 7 7 ^/vendors/IOIPSL@HEAD ext/IOIPSL
-
- Property svn:externals
-
NEMO/trunk/src/TOP/PISCES/P2Z/p2zexp.F90
r10425 r12377 38 38 39 39 !! * Substitutions 40 # include " vectopt_loop_substitute.h90"40 # include "do_loop_substitute.h90" 41 41 !!---------------------------------------------------------------------- 42 42 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 46 46 CONTAINS 47 47 48 SUBROUTINE p2z_exp( kt )48 SUBROUTINE p2z_exp( kt, Kmm, Krhs ) 49 49 !!--------------------------------------------------------------------- 50 50 !! *** ROUTINE p2z_exp *** … … 60 60 !!--------------------------------------------------------------------- 61 61 !! 62 INTEGER, INTENT( in ) :: kt ! ocean time-step index 62 INTEGER, INTENT( in ) :: kt ! ocean time-step index 63 INTEGER, INTENT( in ) :: Kmm, Krhs ! time level indices 63 64 !! 64 65 INTEGER :: ji, jj, jk, jl, ikt … … 70 71 IF( ln_timing ) CALL timing_start('p2z_exp') 71 72 ! 72 IF( kt == nittrc000 ) CALL p2z_exp_init 73 IF( kt == nittrc000 ) CALL p2z_exp_init( Kmm ) 73 74 74 75 zsedpoca(:,:) = 0. … … 80 81 ! LAYERS IS DETERMINED BY DMIN3 DEFINED IN sms_p2z.F90 81 82 ! ---------------------------------------------------------------------- 82 DO jk = 1, jpkm1 83 DO jj = 2, jpjm1 84 DO ji = fs_2, fs_jpim1 85 ze3t = 1. / e3t_n(ji,jj,jk) 86 tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3) + ze3t * dmin3(ji,jj,jk) * xksi(ji,jj) 87 END DO 88 END DO 89 END DO 83 DO_3D_00_00( 1, jpkm1 ) 84 ze3t = 1. / e3t(ji,jj,jk,Kmm) 85 tr(ji,jj,jk,jpno3,Krhs) = tr(ji,jj,jk,jpno3,Krhs) + ze3t * dmin3(ji,jj,jk) * xksi(ji,jj) 86 END_3D 90 87 91 88 ! Find the last level of the water column … … 95 92 zgeolpoc = 0.e0 ! Initialization 96 93 ! Release of nutrients from the "simple" sediment 97 DO jj = 2, jpjm1 98 DO ji = fs_2, fs_jpim1 99 ikt = mbkt(ji,jj) 100 tra(ji,jj,ikt,jpno3) = tra(ji,jj,ikt,jpno3) + sedlam * sedpocn(ji,jj) / e3t_n(ji,jj,ikt) 101 ! Deposition of organic matter in the sediment 102 zwork = vsed * trn(ji,jj,ikt,jpdet) 103 zsedpoca(ji,jj) = ( zwork + dminl(ji,jj) * xksi(ji,jj) & 104 & - sedlam * sedpocn(ji,jj) - sedlostpoc * sedpocn(ji,jj) ) * rdt 105 zgeolpoc = zgeolpoc + sedlostpoc * sedpocn(ji,jj) * e1e2t(ji,jj) 106 END DO 107 END DO 108 109 DO jj = 2, jpjm1 110 DO ji = fs_2, fs_jpim1 111 tra(ji,jj,1,jpno3) = tra(ji,jj,1,jpno3) + zgeolpoc * cmask(ji,jj) / areacot / e3t_n(ji,jj,1) 112 END DO 113 END DO 94 DO_2D_00_00 95 ikt = mbkt(ji,jj) 96 tr(ji,jj,ikt,jpno3,Krhs) = tr(ji,jj,ikt,jpno3,Krhs) + sedlam * sedpocn(ji,jj) / e3t(ji,jj,ikt,Kmm) 97 ! Deposition of organic matter in the sediment 98 zwork = vsed * tr(ji,jj,ikt,jpdet,Kmm) 99 zsedpoca(ji,jj) = ( zwork + dminl(ji,jj) * xksi(ji,jj) & 100 & - sedlam * sedpocn(ji,jj) - sedlostpoc * sedpocn(ji,jj) ) * rdt 101 zgeolpoc = zgeolpoc + sedlostpoc * sedpocn(ji,jj) * e1e2t(ji,jj) 102 END_2D 103 104 DO_2D_00_00 105 tr(ji,jj,1,jpno3,Krhs) = tr(ji,jj,1,jpno3,Krhs) + zgeolpoc * cmask(ji,jj) / areacot / e3t(ji,jj,1,Kmm) 106 END_2D 114 107 115 108 CALL lbc_lnk( 'p2zexp', sedpocn, 'T', 1. ) … … 127 120 ELSE 128 121 ! 129 DO jj = 1, jpj 130 DO ji = 1, jpi 131 zsedpocd = zsedpoca(ji,jj) - 2. * sedpocn(ji,jj) + sedpocb(ji,jj) ! time laplacian on tracers 132 sedpocb(ji,jj) = sedpocn(ji,jj) + atfp * zsedpocd ! sedpocb <-- filtered sedpocn 133 sedpocn(ji,jj) = zsedpoca(ji,jj) ! sedpocn <-- sedpoca 134 END DO 135 END DO 122 DO_2D_11_11 123 zsedpocd = zsedpoca(ji,jj) - 2. * sedpocn(ji,jj) + sedpocb(ji,jj) ! time laplacian on tracers 124 sedpocb(ji,jj) = sedpocn(ji,jj) + atfp * zsedpocd ! sedpocb <-- filtered sedpocn 125 sedpocn(ji,jj) = zsedpoca(ji,jj) ! sedpocn <-- sedpoca 126 END_2D 136 127 ! 137 128 ENDIF … … 146 137 ENDIF 147 138 ! 148 IF( ln_ctl) THEN ! print mean trends (used for debugging)139 IF(sn_cfctl%l_prttrc) THEN ! print mean trends (used for debugging) 149 140 WRITE(charout, FMT="('exp')") 150 141 CALL prt_ctl_trc_info(charout) 151 CALL prt_ctl_trc(tab4d=tr a, mask=tmask, clinfo=ctrcnm)142 CALL prt_ctl_trc(tab4d=tr(:,:,:,:,Krhs), mask=tmask, clinfo=ctrcnm) 152 143 ENDIF 153 144 ! … … 157 148 158 149 159 SUBROUTINE p2z_exp_init 150 SUBROUTINE p2z_exp_init( Kmm ) 160 151 !!---------------------------------------------------------------------- 161 152 !! *** ROUTINE p4z_exp_init *** 162 153 !! ** purpose : specific initialisation for export 163 154 !!---------------------------------------------------------------------- 155 INTEGER, INTENT(in) :: Kmm ! time level index 164 156 INTEGER :: ji, jj, jk 165 157 REAL(wp) :: zmaskt, zfluo, zfluu … … 181 173 zdm0 = 0._wp 182 174 zrro = 1._wp 183 DO jk = jpkb, jpkm1 184 DO jj = 1, jpj 185 DO ji = 1, jpi 186 zfluo = ( gdepw_n(ji,jj,jk ) / gdepw_n(ji,jj,jpkb) )**xhr 187 zfluu = ( gdepw_n(ji,jj,jk+1) / gdepw_n(ji,jj,jpkb) )**xhr 188 IF( zfluo.GT.1. ) zfluo = 1._wp 189 zdm0(ji,jj,jk) = zfluo - zfluu 190 IF( jk <= jpkb-1 ) zdm0(ji,jj,jk) = 0._wp 191 zrro(ji,jj) = zrro(ji,jj) - zdm0(ji,jj,jk) 192 END DO 193 END DO 194 END DO 175 DO_3D_11_11( jpkb, jpkm1 ) 176 zfluo = ( gdepw(ji,jj,jk ,Kmm) / gdepw(ji,jj,jpkb,Kmm) )**xhr 177 zfluu = ( gdepw(ji,jj,jk+1,Kmm) / gdepw(ji,jj,jpkb,Kmm) )**xhr 178 IF( zfluo.GT.1. ) zfluo = 1._wp 179 zdm0(ji,jj,jk) = zfluo - zfluu 180 IF( jk <= jpkb-1 ) zdm0(ji,jj,jk) = 0._wp 181 zrro(ji,jj) = zrro(ji,jj) - zdm0(ji,jj,jk) 182 END_3D 195 183 ! 196 184 zdm0(:,:,jpk) = zrro(:,:) … … 202 190 dminl(:,:) = 0._wp 203 191 dmin3(:,:,:) = zdm0 204 DO jk = 1, jpk 205 DO jj = 1, jpj 206 DO ji = 1, jpi 207 IF( tmask(ji,jj,jk) == 0._wp ) THEN 208 dminl(ji,jj) = dminl(ji,jj) + dmin3(ji,jj,jk) 209 dmin3(ji,jj,jk) = 0._wp 210 ENDIF 211 END DO 212 END DO 213 END DO 214 215 DO jj = 1, jpj 216 DO ji = 1, jpi 217 IF( tmask(ji,jj,1) == 0 ) dmin3(ji,jj,1) = 0._wp 218 END DO 219 END DO 192 DO_3D_11_11( 1, jpk ) 193 IF( tmask(ji,jj,jk) == 0._wp ) THEN 194 dminl(ji,jj) = dminl(ji,jj) + dmin3(ji,jj,jk) 195 dmin3(ji,jj,jk) = 0._wp 196 ENDIF 197 END_3D 198 199 DO_2D_11_11 200 IF( tmask(ji,jj,1) == 0 ) dmin3(ji,jj,1) = 0._wp 201 END_2D 220 202 221 203 ! Coastal mask 222 204 cmask(:,:) = 0._wp 223 DO jj = 2, jpjm1 224 DO ji = fs_2, fs_jpim1 225 IF( tmask(ji,jj,1) /= 0. ) THEN 226 zmaskt = tmask(ji+1,jj,1) * tmask(ji-1,jj,1) * tmask(ji,jj+1,1) * tmask(ji,jj-1,1) 227 IF( zmaskt == 0. ) cmask(ji,jj) = 1._wp 228 END IF 229 END DO 230 END DO 205 DO_2D_00_00 206 IF( tmask(ji,jj,1) /= 0. ) THEN 207 zmaskt = tmask(ji+1,jj,1) * tmask(ji-1,jj,1) * tmask(ji,jj+1,1) * tmask(ji,jj-1,1) 208 IF( zmaskt == 0. ) cmask(ji,jj) = 1._wp 209 END IF 210 END_2D 231 211 CALL lbc_lnk( 'p2zexp', cmask , 'T', 1. ) ! lateral boundary conditions on cmask (sign unchanged) 232 212 areacot = glob_sum( 'p2zexp', e1e2t(:,:) * cmask(:,:) )
Note: See TracChangeset
for help on using the changeset viewer.