Changeset 12377 for NEMO/trunk/src/TOP/PISCES/P4Z/p4zpoc.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/P4Z/p4zpoc.F90
r11536 r12377 37 37 38 38 39 !! * Substitutions 40 # include "do_loop_substitute.h90" 39 41 !!---------------------------------------------------------------------- 40 42 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 44 46 CONTAINS 45 47 46 SUBROUTINE p4z_poc( kt, knt )48 SUBROUTINE p4z_poc( kt, knt, Kbb, Kmm, Krhs ) 47 49 !!--------------------------------------------------------------------- 48 50 !! *** ROUTINE p4z_poc *** … … 52 54 !! ** Method : - ??? 53 55 !!--------------------------------------------------------------------- 54 INTEGER, INTENT(in) :: kt, knt ! ocean time step and ??? 56 INTEGER, INTENT(in) :: kt, knt ! ocean time step and ??? 57 INTEGER, INTENT(in) :: Kbb, Kmm, Krhs ! time level indices 55 58 ! 56 59 INTEGER :: ji, jj, jk, jn … … 103 106 ! ----------------------------------------------------------------------- 104 107 ztremint(:,:,:) = zremigoc(:,:,:) 105 DO jk = 2, jpkm1 106 DO jj = 1, jpj 107 DO ji = 1, jpi 108 IF (tmask(ji,jj,jk) == 1.) THEN 109 zdep = hmld(ji,jj) 110 ! 111 ! In the case of GOC, lability is constant in the mixed layer 112 ! It is computed only below the mixed layer depth 113 ! ------------------------------------------------------------ 114 ! 115 IF( gdept_n(ji,jj,jk) > zdep ) THEN 116 alphat = 0. 117 remint = 0. 118 ! 119 zsizek1 = e3t_n(ji,jj,jk-1) / 2. / (wsbio4(ji,jj,jk-1) + rtrn) * tgfunc(ji,jj,jk-1) 120 zsizek = e3t_n(ji,jj,jk) / 2. / (wsbio4(ji,jj,jk) + rtrn) * tgfunc(ji,jj,jk) 121 ! 122 IF ( gdept_n(ji,jj,jk-1) <= zdep ) THEN 123 ! 124 ! The first level just below the mixed layer needs a 125 ! specific treatment because lability is supposed constant 126 ! everywhere within the mixed layer. This means that 127 ! change in lability in the bottom part of the previous cell 128 ! should not be computed 129 ! ---------------------------------------------------------- 130 ! 131 ! POC concentration is computed using the lagrangian 132 ! framework. It is only used for the lability param 133 zpoc = trb(ji,jj,jk-1,jpgoc) + consgoc(ji,jj,jk) * rday / rfact2 & 134 & * e3t_n(ji,jj,jk) / 2. / (wsbio4(ji,jj,jk) + rtrn) 135 zpoc = MAX(0., zpoc) 136 ! 137 DO jn = 1, jcpoc 138 ! 139 ! Lagrangian based algorithm. The fraction of each 140 ! lability class is computed starting from the previous 141 ! level 142 ! ----------------------------------------------------- 143 ! 144 ! the concentration of each lability class is calculated 145 ! as the sum of the different sources and sinks 146 ! Please note that production of new GOC experiences 147 ! degradation 148 alphag(ji,jj,jk,jn) = alphag(ji,jj,jk-1,jn) * exp( -reminp(jn) * zsizek ) * zpoc & 149 & + prodgoc(ji,jj,jk) * alphan(jn) / tgfunc(ji,jj,jk) / reminp(jn) & 150 & * ( 1. - exp( -reminp(jn) * zsizek ) ) * rday / rfact2 151 alphat = alphat + alphag(ji,jj,jk,jn) 152 remint = remint + alphag(ji,jj,jk,jn) * reminp(jn) 153 END DO 154 ELSE 155 ! 156 ! standard algorithm in the rest of the water column 157 ! See the comments in the previous block. 158 ! --------------------------------------------------- 159 ! 160 zpoc = trb(ji,jj,jk-1,jpgoc) + consgoc(ji,jj,jk-1) * rday / rfact2 & 161 & * e3t_n(ji,jj,jk-1) / 2. / (wsbio4(ji,jj,jk-1) + rtrn) + consgoc(ji,jj,jk) & 162 & * rday / rfact2 * e3t_n(ji,jj,jk) / 2. / (wsbio4(ji,jj,jk) + rtrn) 163 zpoc = max(0., zpoc) 164 ! 165 DO jn = 1, jcpoc 166 alphag(ji,jj,jk,jn) = alphag(ji,jj,jk-1,jn) * exp( -reminp(jn) * ( zsizek & 167 & + zsizek1 ) ) * zpoc + ( prodgoc(ji,jj,jk-1) / tgfunc(ji,jj,jk-1) * ( 1. & 168 & - exp( -reminp(jn) * zsizek1 ) ) * exp( -reminp(jn) * zsizek ) + prodgoc(ji,jj,jk) & 169 & / tgfunc(ji,jj,jk) * ( 1. - exp( -reminp(jn) * zsizek ) ) ) * rday / rfact2 / reminp(jn) * alphan(jn) 170 alphat = alphat + alphag(ji,jj,jk,jn) 171 remint = remint + alphag(ji,jj,jk,jn) * reminp(jn) 172 END DO 173 ENDIF 174 ! 175 DO jn = 1, jcpoc 176 ! The contribution of each lability class at the current 177 ! level is computed 178 alphag(ji,jj,jk,jn) = alphag(ji,jj,jk,jn) / ( alphat + rtrn) 179 END DO 180 ! Computation of the mean remineralisation rate 181 ztremint(ji,jj,jk) = MAX(0., remint / ( alphat + rtrn) ) 182 ! 183 ENDIF 184 ENDIF 108 DO_3D_11_11( 2, jpkm1 ) 109 IF (tmask(ji,jj,jk) == 1.) THEN 110 zdep = hmld(ji,jj) 111 ! 112 ! In the case of GOC, lability is constant in the mixed layer 113 ! It is computed only below the mixed layer depth 114 ! ------------------------------------------------------------ 115 ! 116 IF( gdept(ji,jj,jk,Kmm) > zdep ) THEN 117 alphat = 0. 118 remint = 0. 119 ! 120 zsizek1 = e3t(ji,jj,jk-1,Kmm) / 2. / (wsbio4(ji,jj,jk-1) + rtrn) * tgfunc(ji,jj,jk-1) 121 zsizek = e3t(ji,jj,jk,Kmm) / 2. / (wsbio4(ji,jj,jk) + rtrn) * tgfunc(ji,jj,jk) 122 ! 123 IF ( gdept(ji,jj,jk-1,Kmm) <= zdep ) THEN 124 ! 125 ! The first level just below the mixed layer needs a 126 ! specific treatment because lability is supposed constant 127 ! everywhere within the mixed layer. This means that 128 ! change in lability in the bottom part of the previous cell 129 ! should not be computed 130 ! ---------------------------------------------------------- 131 ! 132 ! POC concentration is computed using the lagrangian 133 ! framework. It is only used for the lability param 134 zpoc = tr(ji,jj,jk-1,jpgoc,Kbb) + consgoc(ji,jj,jk) * rday / rfact2 & 135 & * e3t(ji,jj,jk,Kmm) / 2. / (wsbio4(ji,jj,jk) + rtrn) 136 zpoc = MAX(0., zpoc) 137 ! 138 DO jn = 1, jcpoc 139 ! 140 ! Lagrangian based algorithm. The fraction of each 141 ! lability class is computed starting from the previous 142 ! level 143 ! ----------------------------------------------------- 144 ! 145 ! the concentration of each lability class is calculated 146 ! as the sum of the different sources and sinks 147 ! Please note that production of new GOC experiences 148 ! degradation 149 alphag(ji,jj,jk,jn) = alphag(ji,jj,jk-1,jn) * exp( -reminp(jn) * zsizek ) * zpoc & 150 & + prodgoc(ji,jj,jk) * alphan(jn) / tgfunc(ji,jj,jk) / reminp(jn) & 151 & * ( 1. - exp( -reminp(jn) * zsizek ) ) * rday / rfact2 152 alphat = alphat + alphag(ji,jj,jk,jn) 153 remint = remint + alphag(ji,jj,jk,jn) * reminp(jn) 154 END DO 155 ELSE 156 ! 157 ! standard algorithm in the rest of the water column 158 ! See the comments in the previous block. 159 ! --------------------------------------------------- 160 ! 161 zpoc = tr(ji,jj,jk-1,jpgoc,Kbb) + consgoc(ji,jj,jk-1) * rday / rfact2 & 162 & * e3t(ji,jj,jk-1,Kmm) / 2. / (wsbio4(ji,jj,jk-1) + rtrn) + consgoc(ji,jj,jk) & 163 & * rday / rfact2 * e3t(ji,jj,jk,Kmm) / 2. / (wsbio4(ji,jj,jk) + rtrn) 164 zpoc = max(0., zpoc) 165 ! 166 DO jn = 1, jcpoc 167 alphag(ji,jj,jk,jn) = alphag(ji,jj,jk-1,jn) * exp( -reminp(jn) * ( zsizek & 168 & + zsizek1 ) ) * zpoc + ( prodgoc(ji,jj,jk-1) / tgfunc(ji,jj,jk-1) * ( 1. & 169 & - exp( -reminp(jn) * zsizek1 ) ) * exp( -reminp(jn) * zsizek ) + prodgoc(ji,jj,jk) & 170 & / tgfunc(ji,jj,jk) * ( 1. - exp( -reminp(jn) * zsizek ) ) ) * rday / rfact2 / reminp(jn) * alphan(jn) 171 alphat = alphat + alphag(ji,jj,jk,jn) 172 remint = remint + alphag(ji,jj,jk,jn) * reminp(jn) 173 END DO 174 ENDIF 175 ! 176 DO jn = 1, jcpoc 177 ! The contribution of each lability class at the current 178 ! level is computed 179 alphag(ji,jj,jk,jn) = alphag(ji,jj,jk,jn) / ( alphat + rtrn) 185 180 END DO 186 END DO 187 END DO 181 ! Computation of the mean remineralisation rate 182 ztremint(ji,jj,jk) = MAX(0., remint / ( alphat + rtrn) ) 183 ! 184 ENDIF 185 ENDIF 186 END_3D 188 187 189 188 IF( ln_p4z ) THEN ; zremigoc(:,:,:) = MIN( xremip , ztremint(:,:,:) ) … … 192 191 193 192 IF( ln_p4z ) THEN 194 DO jk = 1, jpkm1 195 DO jj = 1, jpj 196 DO ji = 1, jpi 197 ! POC disaggregation by turbulence and bacterial activity. 198 ! -------------------------------------------------------- 199 zremig = zremigoc(ji,jj,jk) * xstep * tgfunc(ji,jj,jk) 200 zorem2 = zremig * trb(ji,jj,jk,jpgoc) 201 orem(ji,jj,jk) = zorem2 202 zorem3(ji,jj,jk) = zremig * solgoc * trb(ji,jj,jk,jpgoc) 203 zofer2 = zremig * trb(ji,jj,jk,jpbfe) 204 zofer3 = zremig * solgoc * trb(ji,jj,jk,jpbfe) 205 206 ! ------------------------------------- 207 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zorem3(ji,jj,jk) 208 tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) - zorem2 - zorem3(ji,jj,jk) 209 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zofer3 210 tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) - zofer2 - zofer3 211 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zorem2 212 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zofer2 213 zfolimi(ji,jj,jk) = zofer2 214 END DO 215 END DO 216 END DO 193 DO_3D_11_11( 1, jpkm1 ) 194 ! POC disaggregation by turbulence and bacterial activity. 195 ! -------------------------------------------------------- 196 zremig = zremigoc(ji,jj,jk) * xstep * tgfunc(ji,jj,jk) 197 zorem2 = zremig * tr(ji,jj,jk,jpgoc,Kbb) 198 orem(ji,jj,jk) = zorem2 199 zorem3(ji,jj,jk) = zremig * solgoc * tr(ji,jj,jk,jpgoc,Kbb) 200 zofer2 = zremig * tr(ji,jj,jk,jpbfe,Kbb) 201 zofer3 = zremig * solgoc * tr(ji,jj,jk,jpbfe,Kbb) 202 203 ! ------------------------------------- 204 tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) + zorem3(ji,jj,jk) 205 tr(ji,jj,jk,jpgoc,Krhs) = tr(ji,jj,jk,jpgoc,Krhs) - zorem2 - zorem3(ji,jj,jk) 206 tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + zofer3 207 tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) - zofer2 - zofer3 208 tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zorem2 209 tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) + zofer2 210 zfolimi(ji,jj,jk) = zofer2 211 END_3D 217 212 ELSE 218 DO jk = 1, jpkm1 219 DO jj = 1, jpj 220 DO ji = 1, jpi 221 ! POC disaggregation by turbulence and bacterial activity. 222 ! -------------------------------------------------------- 223 zremig = zremigoc(ji,jj,jk) * xstep * tgfunc(ji,jj,jk) 224 zopoc2 = zremig * trb(ji,jj,jk,jpgoc) 225 orem(ji,jj,jk) = zopoc2 226 zorem3(ji,jj,jk) = zremig * solgoc * trb(ji,jj,jk,jpgoc) 227 zopon2 = xremipn / xremipc * zremig * trb(ji,jj,jk,jpgon) 228 zopop2 = xremipp / xremipc * zremig * trb(ji,jj,jk,jpgop) 229 zofer2 = xremipn / xremipc * zremig * trb(ji,jj,jk,jpbfe) 230 231 ! ------------------------------------- 232 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zorem3(ji,jj,jk) 233 tra(ji,jj,jk,jppon) = tra(ji,jj,jk,jppon) + solgoc * zopon2 234 tra(ji,jj,jk,jppop) = tra(ji,jj,jk,jppop) + solgoc * zopop2 235 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + solgoc * zofer2 236 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zopoc2 237 tra(ji,jj,jk,jpdon) = tra(ji,jj,jk,jpdon) + zopon2 238 tra(ji,jj,jk,jpdop) = tra(ji,jj,jk,jpdop) + zopop2 239 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zofer2 240 tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) - zopoc2 - zorem3(ji,jj,jk) 241 tra(ji,jj,jk,jpgon) = tra(ji,jj,jk,jpgon) - zopon2 * (1. + solgoc) 242 tra(ji,jj,jk,jpgop) = tra(ji,jj,jk,jpgop) - zopop2 * (1. + solgoc) 243 tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) - zofer2 * (1. + solgoc) 244 zfolimi(ji,jj,jk) = zofer2 245 END DO 246 END DO 247 END DO 213 DO_3D_11_11( 1, jpkm1 ) 214 ! POC disaggregation by turbulence and bacterial activity. 215 ! -------------------------------------------------------- 216 zremig = zremigoc(ji,jj,jk) * xstep * tgfunc(ji,jj,jk) 217 zopoc2 = zremig * tr(ji,jj,jk,jpgoc,Kbb) 218 orem(ji,jj,jk) = zopoc2 219 zorem3(ji,jj,jk) = zremig * solgoc * tr(ji,jj,jk,jpgoc,Kbb) 220 zopon2 = xremipn / xremipc * zremig * tr(ji,jj,jk,jpgon,Kbb) 221 zopop2 = xremipp / xremipc * zremig * tr(ji,jj,jk,jpgop,Kbb) 222 zofer2 = xremipn / xremipc * zremig * tr(ji,jj,jk,jpbfe,Kbb) 223 224 ! ------------------------------------- 225 tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) + zorem3(ji,jj,jk) 226 tr(ji,jj,jk,jppon,Krhs) = tr(ji,jj,jk,jppon,Krhs) + solgoc * zopon2 227 tr(ji,jj,jk,jppop,Krhs) = tr(ji,jj,jk,jppop,Krhs) + solgoc * zopop2 228 tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + solgoc * zofer2 229 tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zopoc2 230 tr(ji,jj,jk,jpdon,Krhs) = tr(ji,jj,jk,jpdon,Krhs) + zopon2 231 tr(ji,jj,jk,jpdop,Krhs) = tr(ji,jj,jk,jpdop,Krhs) + zopop2 232 tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) + zofer2 233 tr(ji,jj,jk,jpgoc,Krhs) = tr(ji,jj,jk,jpgoc,Krhs) - zopoc2 - zorem3(ji,jj,jk) 234 tr(ji,jj,jk,jpgon,Krhs) = tr(ji,jj,jk,jpgon,Krhs) - zopon2 * (1. + solgoc) 235 tr(ji,jj,jk,jpgop,Krhs) = tr(ji,jj,jk,jpgop,Krhs) - zopop2 * (1. + solgoc) 236 tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) - zofer2 * (1. + solgoc) 237 zfolimi(ji,jj,jk) = zofer2 238 END_3D 248 239 ENDIF 249 240 250 IF( ln_ctl) THEN ! print mean trends (used for debugging)241 IF(sn_cfctl%l_prttrc) THEN ! print mean trends (used for debugging) 251 242 WRITE(charout, FMT="('poc1')") 252 243 CALL prt_ctl_trc_info(charout) 253 CALL prt_ctl_trc(tab4d=tr a, mask=tmask, clinfo=ctrcnm)244 CALL prt_ctl_trc(tab4d=tr(:,:,:,:,Krhs), mask=tmask, clinfo=ctrcnm) 254 245 ENDIF 255 246 … … 268 259 ! ---------------------------------------------------------------- 269 260 ! 270 DO jk = 1, jpkm1 271 DO jj = 1, jpj 272 DO ji = 1, jpi 273 zdep = hmld(ji,jj) 274 IF (tmask(ji,jj,jk) == 1. .AND. gdept_n(ji,jj,jk) <= zdep ) THEN 275 totprod(ji,jj) = totprod(ji,jj) + prodpoc(ji,jj,jk) * e3t_n(ji,jj,jk) * rday/ rfact2 276 ! The temperature effect is included here 277 totthick(ji,jj) = totthick(ji,jj) + e3t_n(ji,jj,jk)* tgfunc(ji,jj,jk) 278 totcons(ji,jj) = totcons(ji,jj) - conspoc(ji,jj,jk) * e3t_n(ji,jj,jk) * rday/ rfact2 & 279 & / ( trb(ji,jj,jk,jppoc) + rtrn ) 280 ENDIF 281 END DO 282 END DO 283 END DO 261 DO_3D_11_11( 1, jpkm1 ) 262 zdep = hmld(ji,jj) 263 IF (tmask(ji,jj,jk) == 1. .AND. gdept(ji,jj,jk,Kmm) <= zdep ) THEN 264 totprod(ji,jj) = totprod(ji,jj) + prodpoc(ji,jj,jk) * e3t(ji,jj,jk,Kmm) * rday/ rfact2 265 ! The temperature effect is included here 266 totthick(ji,jj) = totthick(ji,jj) + e3t(ji,jj,jk,Kmm)* tgfunc(ji,jj,jk) 267 totcons(ji,jj) = totcons(ji,jj) - conspoc(ji,jj,jk) * e3t(ji,jj,jk,Kmm) * rday/ rfact2 & 268 & / ( tr(ji,jj,jk,jppoc,Kbb) + rtrn ) 269 ENDIF 270 END_3D 284 271 285 272 ! Computation of the lability spectrum in the mixed layer. In the mixed … … 287 274 ! --------------------------------------------------------------------- 288 275 ztremint(:,:,:) = zremipoc(:,:,:) 289 DO jk = 1, jpkm1 290 DO jj = 1, jpj 291 DO ji = 1, jpi 292 IF (tmask(ji,jj,jk) == 1.) THEN 293 zdep = hmld(ji,jj) 294 alphat = 0.0 295 remint = 0.0 296 IF( gdept_n(ji,jj,jk) <= zdep ) THEN 297 DO jn = 1, jcpoc 298 ! For each lability class, the system is supposed to be 299 ! at equilibrium: Prod - Sink - w alphap = 0. 300 alphap(ji,jj,jk,jn) = totprod(ji,jj) * alphan(jn) / ( reminp(jn) & 301 & * totthick(ji,jj) + totcons(ji,jj) + wsbio + rtrn ) 302 alphat = alphat + alphap(ji,jj,jk,jn) 303 END DO 304 DO jn = 1, jcpoc 305 alphap(ji,jj,jk,jn) = alphap(ji,jj,jk,jn) / ( alphat + rtrn) 306 remint = remint + alphap(ji,jj,jk,jn) * reminp(jn) 307 END DO 308 ! Mean remineralization rate in the mixed layer 309 ztremint(ji,jj,jk) = MAX( 0., remint ) 310 ENDIF 311 ENDIF 312 END DO 313 END DO 314 END DO 276 DO_3D_11_11( 1, jpkm1 ) 277 IF (tmask(ji,jj,jk) == 1.) THEN 278 zdep = hmld(ji,jj) 279 alphat = 0.0 280 remint = 0.0 281 IF( gdept(ji,jj,jk,Kmm) <= zdep ) THEN 282 DO jn = 1, jcpoc 283 ! For each lability class, the system is supposed to be 284 ! at equilibrium: Prod - Sink - w alphap = 0. 285 alphap(ji,jj,jk,jn) = totprod(ji,jj) * alphan(jn) / ( reminp(jn) & 286 & * totthick(ji,jj) + totcons(ji,jj) + wsbio + rtrn ) 287 alphat = alphat + alphap(ji,jj,jk,jn) 288 END DO 289 DO jn = 1, jcpoc 290 alphap(ji,jj,jk,jn) = alphap(ji,jj,jk,jn) / ( alphat + rtrn) 291 remint = remint + alphap(ji,jj,jk,jn) * reminp(jn) 292 END DO 293 ! Mean remineralization rate in the mixed layer 294 ztremint(ji,jj,jk) = MAX( 0., remint ) 295 ENDIF 296 ENDIF 297 END_3D 315 298 ! 316 299 IF( ln_p4z ) THEN ; zremipoc(:,:,:) = MIN( xremip , ztremint(:,:,:) ) … … 326 309 ! ----------------------------------------------------------------------- 327 310 ! 328 DO jk = 2, jpkm1 329 DO jj = 1, jpj 330 DO ji = 1, jpi 331 IF (tmask(ji,jj,jk) == 1.) THEN 332 zdep = hmld(ji,jj) 333 IF( gdept_n(ji,jj,jk) > zdep ) THEN 334 alphat = 0. 335 remint = 0. 336 ! 337 ! the scale factors are corrected with temperature 338 zsizek1 = e3t_n(ji,jj,jk-1) / 2. / (wsbio3(ji,jj,jk-1) + rtrn) * tgfunc(ji,jj,jk-1) 339 zsizek = e3t_n(ji,jj,jk) / 2. / (wsbio3(ji,jj,jk) + rtrn) * tgfunc(ji,jj,jk) 340 ! 341 ! Special treatment of the level just below the MXL 342 ! See the comments in the GOC section 343 ! --------------------------------------------------- 344 ! 345 IF ( gdept_n(ji,jj,jk-1) <= zdep ) THEN 346 ! 347 ! Computation of the POC concentration using the 348 ! lagrangian algorithm 349 zpoc = trb(ji,jj,jk-1,jppoc) + conspoc(ji,jj,jk) * rday / rfact2 & 350 & * e3t_n(ji,jj,jk) / 2. / (wsbio3(ji,jj,jk) + rtrn) 351 zpoc = max(0., zpoc) 352 ! 353 DO jn = 1, jcpoc 354 ! computation of the lability spectrum applying the 355 ! different sources and sinks 356 alphap(ji,jj,jk,jn) = alphap(ji,jj,jk-1,jn) * exp( -reminp(jn) * zsizek ) * zpoc & 357 & + ( prodpoc(ji,jj,jk) * alphan(jn) + zorem3(ji,jj,jk) * alphag(ji,jj,jk,jn) ) & 358 & / tgfunc(ji,jj,jk) / reminp(jn) * rday / rfact2 * ( 1. - exp( -reminp(jn) & 359 & * zsizek ) ) 360 alphap(ji,jj,jk,jn) = MAX( 0., alphap(ji,jj,jk,jn) ) 361 alphat = alphat + alphap(ji,jj,jk,jn) 362 END DO 363 ELSE 364 ! 365 ! Lability parameterization for the interior of the ocean 366 ! This is very similar to what is done in the previous 367 ! block 368 ! -------------------------------------------------------- 369 ! 370 zpoc = trb(ji,jj,jk-1,jppoc) + conspoc(ji,jj,jk-1) * rday / rfact2 & 371 & * e3t_n(ji,jj,jk-1) / 2. / (wsbio3(ji,jj,jk-1) + rtrn) + conspoc(ji,jj,jk) & 372 & * rday / rfact2 * e3t_n(ji,jj,jk) / 2. / (wsbio3(ji,jj,jk) + rtrn) 373 zpoc = max(0., zpoc) 374 ! 375 DO jn = 1, jcpoc 376 alphap(ji,jj,jk,jn) = alphap(ji,jj,jk-1,jn) * exp( -reminp(jn) & 377 & * ( zsizek + zsizek1 ) ) * zpoc + ( prodpoc(ji,jj,jk-1) * alphan(jn) & 378 & + zorem3(ji,jj,jk-1) * alphag(ji,jj,jk-1,jn) ) * rday / rfact2 / reminp(jn) & 379 & / tgfunc(ji,jj,jk-1) * ( 1. - exp( -reminp(jn) * zsizek1 ) ) * exp( -reminp(jn) & 380 & * zsizek ) + ( prodpoc(ji,jj,jk) * alphan(jn) + zorem3(ji,jj,jk) & 381 & * alphag(ji,jj,jk,jn) ) * rday / rfact2 / reminp(jn) / tgfunc(ji,jj,jk) * ( 1. & 382 & - exp( -reminp(jn) * zsizek ) ) 383 alphap(ji,jj,jk,jn) = max(0., alphap(ji,jj,jk,jn) ) 384 alphat = alphat + alphap(ji,jj,jk,jn) 385 END DO 386 ENDIF 387 ! Normalization of the lability spectrum so that the 388 ! integral is equal to 1 389 DO jn = 1, jcpoc 390 alphap(ji,jj,jk,jn) = alphap(ji,jj,jk,jn) / ( alphat + rtrn) 391 remint = remint + alphap(ji,jj,jk,jn) * reminp(jn) 392 END DO 393 ! Mean remineralization rate in the water column 394 ztremint(ji,jj,jk) = MAX( 0., remint ) 395 ENDIF 396 ENDIF 311 DO_3D_11_11( 2, jpkm1 ) 312 IF (tmask(ji,jj,jk) == 1.) THEN 313 zdep = hmld(ji,jj) 314 IF( gdept(ji,jj,jk,Kmm) > zdep ) THEN 315 alphat = 0. 316 remint = 0. 317 ! 318 ! the scale factors are corrected with temperature 319 zsizek1 = e3t(ji,jj,jk-1,Kmm) / 2. / (wsbio3(ji,jj,jk-1) + rtrn) * tgfunc(ji,jj,jk-1) 320 zsizek = e3t(ji,jj,jk,Kmm) / 2. / (wsbio3(ji,jj,jk) + rtrn) * tgfunc(ji,jj,jk) 321 ! 322 ! Special treatment of the level just below the MXL 323 ! See the comments in the GOC section 324 ! --------------------------------------------------- 325 ! 326 IF ( gdept(ji,jj,jk-1,Kmm) <= zdep ) THEN 327 ! 328 ! Computation of the POC concentration using the 329 ! lagrangian algorithm 330 zpoc = tr(ji,jj,jk-1,jppoc,Kbb) + conspoc(ji,jj,jk) * rday / rfact2 & 331 & * e3t(ji,jj,jk,Kmm) / 2. / (wsbio3(ji,jj,jk) + rtrn) 332 zpoc = max(0., zpoc) 333 ! 334 DO jn = 1, jcpoc 335 ! computation of the lability spectrum applying the 336 ! different sources and sinks 337 alphap(ji,jj,jk,jn) = alphap(ji,jj,jk-1,jn) * exp( -reminp(jn) * zsizek ) * zpoc & 338 & + ( prodpoc(ji,jj,jk) * alphan(jn) + zorem3(ji,jj,jk) * alphag(ji,jj,jk,jn) ) & 339 & / tgfunc(ji,jj,jk) / reminp(jn) * rday / rfact2 * ( 1. - exp( -reminp(jn) & 340 & * zsizek ) ) 341 alphap(ji,jj,jk,jn) = MAX( 0., alphap(ji,jj,jk,jn) ) 342 alphat = alphat + alphap(ji,jj,jk,jn) 343 END DO 344 ELSE 345 ! 346 ! Lability parameterization for the interior of the ocean 347 ! This is very similar to what is done in the previous 348 ! block 349 ! -------------------------------------------------------- 350 ! 351 zpoc = tr(ji,jj,jk-1,jppoc,Kbb) + conspoc(ji,jj,jk-1) * rday / rfact2 & 352 & * e3t(ji,jj,jk-1,Kmm) / 2. / (wsbio3(ji,jj,jk-1) + rtrn) + conspoc(ji,jj,jk) & 353 & * rday / rfact2 * e3t(ji,jj,jk,Kmm) / 2. / (wsbio3(ji,jj,jk) + rtrn) 354 zpoc = max(0., zpoc) 355 ! 356 DO jn = 1, jcpoc 357 alphap(ji,jj,jk,jn) = alphap(ji,jj,jk-1,jn) * exp( -reminp(jn) & 358 & * ( zsizek + zsizek1 ) ) * zpoc + ( prodpoc(ji,jj,jk-1) * alphan(jn) & 359 & + zorem3(ji,jj,jk-1) * alphag(ji,jj,jk-1,jn) ) * rday / rfact2 / reminp(jn) & 360 & / tgfunc(ji,jj,jk-1) * ( 1. - exp( -reminp(jn) * zsizek1 ) ) * exp( -reminp(jn) & 361 & * zsizek ) + ( prodpoc(ji,jj,jk) * alphan(jn) + zorem3(ji,jj,jk) & 362 & * alphag(ji,jj,jk,jn) ) * rday / rfact2 / reminp(jn) / tgfunc(ji,jj,jk) * ( 1. & 363 & - exp( -reminp(jn) * zsizek ) ) 364 alphap(ji,jj,jk,jn) = max(0., alphap(ji,jj,jk,jn) ) 365 alphat = alphat + alphap(ji,jj,jk,jn) 366 END DO 367 ENDIF 368 ! Normalization of the lability spectrum so that the 369 ! integral is equal to 1 370 DO jn = 1, jcpoc 371 alphap(ji,jj,jk,jn) = alphap(ji,jj,jk,jn) / ( alphat + rtrn) 372 remint = remint + alphap(ji,jj,jk,jn) * reminp(jn) 397 373 END DO 398 END DO 399 END DO 374 ! Mean remineralization rate in the water column 375 ztremint(ji,jj,jk) = MAX( 0., remint ) 376 ENDIF 377 ENDIF 378 END_3D 400 379 401 380 IF( ln_p4z ) THEN ; zremipoc(:,:,:) = MIN( xremip , ztremint(:,:,:) ) … … 404 383 405 384 IF( ln_p4z ) THEN 406 DO jk = 1, jpkm1 407 DO jj = 1, jpj 408 DO ji = 1, jpi 409 IF (tmask(ji,jj,jk) == 1.) THEN 410 ! POC disaggregation by turbulence and bacterial activity. 411 ! -------------------------------------------------------- 412 zremip = zremipoc(ji,jj,jk) * xstep * tgfunc(ji,jj,jk) 413 zorem = zremip * trb(ji,jj,jk,jppoc) 414 zofer = zremip * trb(ji,jj,jk,jpsfe) 415 416 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zorem 417 orem(ji,jj,jk) = orem(ji,jj,jk) + zorem 418 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zofer 419 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zorem 420 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zofer 421 zfolimi(ji,jj,jk) = zfolimi(ji,jj,jk) + zofer 422 ENDIF 423 END DO 424 END DO 425 END DO 385 DO_3D_11_11( 1, jpkm1 ) 386 IF (tmask(ji,jj,jk) == 1.) THEN 387 ! POC disaggregation by turbulence and bacterial activity. 388 ! -------------------------------------------------------- 389 zremip = zremipoc(ji,jj,jk) * xstep * tgfunc(ji,jj,jk) 390 zorem = zremip * tr(ji,jj,jk,jppoc,Kbb) 391 zofer = zremip * tr(ji,jj,jk,jpsfe,Kbb) 392 393 tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zorem 394 orem(ji,jj,jk) = orem(ji,jj,jk) + zorem 395 tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) + zofer 396 tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) - zorem 397 tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) - zofer 398 zfolimi(ji,jj,jk) = zfolimi(ji,jj,jk) + zofer 399 ENDIF 400 END_3D 426 401 ELSE 427 DO jk = 1, jpkm1 428 DO jj = 1, jpj 429 DO ji = 1, jpi 430 ! POC disaggregation by turbulence and bacterial activity. 431 ! -------------------------------------------------------- 432 zremip = zremipoc(ji,jj,jk) * xstep * tgfunc(ji,jj,jk) 433 zopoc = zremip * trb(ji,jj,jk,jppoc) 434 orem(ji,jj,jk) = orem(ji,jj,jk) + zopoc 435 zopon = xremipn / xremipc * zremip * trb(ji,jj,jk,jppon) 436 zopop = xremipp / xremipc * zremip * trb(ji,jj,jk,jppop) 437 zofer = xremipn / xremipc * zremip * trb(ji,jj,jk,jpsfe) 438 439 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zopoc 440 tra(ji,jj,jk,jppon) = tra(ji,jj,jk,jppon) - zopon 441 tra(ji,jj,jk,jppop) = tra(ji,jj,jk,jppop) - zopop 442 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zofer 443 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zopoc 444 tra(ji,jj,jk,jpdon) = tra(ji,jj,jk,jpdon) + zopon 445 tra(ji,jj,jk,jpdop) = tra(ji,jj,jk,jpdop) + zopop 446 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zofer 447 zfolimi(ji,jj,jk) = zfolimi(ji,jj,jk) + zofer 448 END DO 449 END DO 450 END DO 402 DO_3D_11_11( 1, jpkm1 ) 403 ! POC disaggregation by turbulence and bacterial activity. 404 ! -------------------------------------------------------- 405 zremip = zremipoc(ji,jj,jk) * xstep * tgfunc(ji,jj,jk) 406 zopoc = zremip * tr(ji,jj,jk,jppoc,Kbb) 407 orem(ji,jj,jk) = orem(ji,jj,jk) + zopoc 408 zopon = xremipn / xremipc * zremip * tr(ji,jj,jk,jppon,Kbb) 409 zopop = xremipp / xremipc * zremip * tr(ji,jj,jk,jppop,Kbb) 410 zofer = xremipn / xremipc * zremip * tr(ji,jj,jk,jpsfe,Kbb) 411 412 tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) - zopoc 413 tr(ji,jj,jk,jppon,Krhs) = tr(ji,jj,jk,jppon,Krhs) - zopon 414 tr(ji,jj,jk,jppop,Krhs) = tr(ji,jj,jk,jppop,Krhs) - zopop 415 tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) - zofer 416 tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zopoc 417 tr(ji,jj,jk,jpdon,Krhs) = tr(ji,jj,jk,jpdon,Krhs) + zopon 418 tr(ji,jj,jk,jpdop,Krhs) = tr(ji,jj,jk,jpdop,Krhs) + zopop 419 tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) + zofer 420 zfolimi(ji,jj,jk) = zfolimi(ji,jj,jk) + zofer 421 END_3D 451 422 ENDIF 452 423 … … 460 431 ENDIF 461 432 462 IF( ln_ctl) THEN ! print mean trends (used for debugging)433 IF(sn_cfctl%l_prttrc) THEN ! print mean trends (used for debugging) 463 434 WRITE(charout, FMT="('poc2')") 464 435 CALL prt_ctl_trc_info(charout) 465 CALL prt_ctl_trc(tab4d=tr a, mask=tmask, clinfo=ctrcnm)436 CALL prt_ctl_trc(tab4d=tr(:,:,:,:,Krhs), mask=tmask, clinfo=ctrcnm) 466 437 ENDIF 467 438 ! … … 497 468 ENDIF 498 469 ! 499 REWIND( numnatp_ref ) ! Namelist nampisrem in reference namelist : Pisces remineralization500 470 READ ( numnatp_ref, nampispoc, IOSTAT = ios, ERR = 901) 501 471 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampispoc in reference namelist' ) 502 REWIND( numnatp_cfg ) ! Namelist nampisrem in configuration namelist : Pisces remineralization503 472 READ ( numnatp_cfg, nampispoc, IOSTAT = ios, ERR = 902 ) 504 473 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'nampispoc in configuration namelist' )
Note: See TracChangeset
for help on using the changeset viewer.