Changeset 12928 for NEMO/branches/2019/dev_r11078_OSMOSIS_IMMERSE_Nurser/src/TOP/PISCES/P4Z/p4zsms.F90
- Timestamp:
- 2020-05-14T21:46:00+02:00 (4 years ago)
- Location:
- NEMO/branches/2019/dev_r11078_OSMOSIS_IMMERSE_Nurser
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r11078_OSMOSIS_IMMERSE_Nurser
- Property svn:externals
-
old new 6 6 ^/vendors/FCM@HEAD ext/FCM 7 7 ^/vendors/IOIPSL@HEAD ext/IOIPSL 8 9 # SETTE 10 ^/utils/CI/sette@HEAD sette
-
- Property svn:externals
-
NEMO/branches/2019/dev_r11078_OSMOSIS_IMMERSE_Nurser/src/TOP/PISCES/P4Z/p4zsms.F90
r12178 r12928 17 17 USE p4zlys ! Calcite saturation 18 18 USE p4zflx ! Gas exchange 19 USE p4z sbc! External source of nutrients19 USE p4zbc ! External source of nutrients 20 20 USE p4zsed ! Sedimentation 21 21 USE p4zint ! time interpolation … … 35 35 INTEGER :: numco2, numnut, numnit ! logical unit for co2 budget 36 36 REAL(wp) :: alkbudget, no3budget, silbudget, ferbudget, po4budget 37 REAL(wp) :: xfact 1, xfact2, xfact337 REAL(wp) :: xfact, xfact1, xfact2, xfact3 38 38 39 39 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xnegtr ! Array used to indicate negative tracer values 40 40 41 !! * Substitutions 42 # include "do_loop_substitute.h90" 41 43 !!---------------------------------------------------------------------- 42 44 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 46 48 CONTAINS 47 49 48 SUBROUTINE p4z_sms( kt )50 SUBROUTINE p4z_sms( kt, Kbb, Kmm, Krhs ) 49 51 !!--------------------------------------------------------------------- 50 52 !! *** ROUTINE p4z_sms *** … … 58 60 !!--------------------------------------------------------------------- 59 61 ! 60 INTEGER, INTENT( in ) :: kt ! ocean time-step index 62 INTEGER, INTENT( in ) :: kt ! ocean time-step index 63 INTEGER, INTENT( in ) :: Kbb, Kmm, Krhs ! time level index 61 64 !! 62 65 INTEGER :: ji, jj, jk, jnt, jn, jl 63 66 REAL(wp) :: ztra 64 67 CHARACTER (len=25) :: charout 68 REAL(wp), ALLOCATABLE, DIMENSION(:,: ) :: zw2d 69 REAL(wp), ALLOCATABLE, DIMENSION(:,:,: ) :: zw3d 70 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:,:) :: ztrdt ! 4D workspace 71 65 72 !!--------------------------------------------------------------------- 66 73 ! … … 72 79 ! 73 80 IF( .NOT. ln_rsttr ) THEN 74 CALL p4z_che 75 CALL ahini_for_at( hi)! set PH at kt=nit00081 CALL p4z_che( Kbb, Kmm ) ! initialize the chemical constants 82 CALL ahini_for_at( hi, Kbb ) ! set PH at kt=nit000 76 83 t_oce_co2_flx_cum = 0._wp 77 84 ELSE 78 CALL p4z_rst( nittrc000, 'READ' ) !* read or initialize all required fields85 CALL p4z_rst( nittrc000, Kbb, Kmm, 'READ' ) !* read or initialize all required fields 79 86 ENDIF 80 87 ! 81 88 ENDIF 82 89 ! 83 IF( ln_pisdmp .AND. MOD( kt - nn_dttrc, nn_pisdmp ) == 0 ) CALL p4z_dmp( kt ) ! Relaxation of some tracers 84 ! 85 rfact = r2dttrc 86 ! 87 IF( ( ln_top_euler .AND. kt == nittrc000 ) .OR. ( .NOT.ln_top_euler .AND. kt <= nittrc000 + nn_dttrc ) ) THEN 90 IF( ln_pisdmp .AND. MOD( kt - 1, nn_pisdmp ) == 0 ) CALL p4z_dmp( kt, Kbb, Kmm ) ! Relaxation of some tracers 91 ! 92 rfact = rDt_trc 93 ! 94 ! trends computation initialisation 95 IF( l_trdtrc ) THEN 96 ALLOCATE( ztrdt(jpi,jpj,jpk,jp_pisces) ) !* store now fields before applying the Asselin filter 97 ztrdt(:,:,:,:) = tr(:,:,:,:,Kmm) 98 ENDIF 99 ! 100 101 IF( ( ln_top_euler .AND. kt == nittrc000 ) .OR. ( .NOT.ln_top_euler .AND. kt <= nittrc000 + 1 ) ) THEN 88 102 rfactr = 1. / rfact 89 103 rfact2 = rfact / REAL( nrdttrc, wp ) 90 104 rfact2r = 1. / rfact2 91 105 xstep = rfact2 / rday ! Time step duration for biology 106 xfact = 1.e+3 * rfact2r 92 107 IF(lwp) WRITE(numout,*) 93 IF(lwp) WRITE(numout,*) ' Passive Tracer time step rfact = ', rfact, ' r dt = ', rdt108 IF(lwp) WRITE(numout,*) ' Passive Tracer time step rfact = ', rfact, ' rn_Dt = ', rn_Dt 94 109 IF(lwp) write(numout,*) ' PISCES Biology time step rfact2 = ', rfact2 95 110 IF(lwp) WRITE(numout,*) 96 111 ENDIF 97 112 98 IF( ( neuler == 0 .AND. kt == nittrc000 ).OR. ln_top_euler ) THEN113 IF( l_1st_euler .OR. ln_top_euler ) THEN 99 114 DO jn = jp_pcs0, jp_pcs1 ! SMS on tracer without Asselin time-filter 100 tr b(:,:,:,jn) = trn(:,:,:,jn)115 tr(:,:,:,jn,Kbb) = tr(:,:,:,jn,Kmm) 101 116 END DO 102 117 ENDIF 103 118 ! 104 IF( ll_ sbc ) CALL p4z_sbc( kt) ! external sources of nutrients119 IF( ll_bc ) CALL p4z_bc( kt, Kbb, Kmm, Krhs ) ! external sources of nutrients 105 120 ! 106 121 #if ! defined key_sed_off 107 CALL p4z_che 108 CALL p4z_int( kt )! computation of various rates for biogeochemistry122 CALL p4z_che( Kbb, Kmm ) ! computation of chemical constants 123 CALL p4z_int( kt, Kbb, Kmm ) ! computation of various rates for biogeochemistry 109 124 ! 110 125 DO jnt = 1, nrdttrc ! Potential time splitting if requested 111 126 ! 112 CALL p4z_bio( kt, jnt ) ! Biology113 CALL p4z_lys( kt, jnt ) ! Compute CaCO3 saturation114 CALL p4z_sed( kt, jnt ) ! Surface and Bottom boundary conditions115 CALL p4z_flx( kt, jnt ) ! Compute surface fluxes127 CALL p4z_bio( kt, jnt, Kbb, Kmm, Krhs ) ! Biology 128 CALL p4z_lys( kt, jnt, Kbb, Krhs ) ! Compute CaCO3 saturation 129 CALL p4z_sed( kt, jnt, Kbb, Kmm, Krhs ) ! Surface and Bottom boundary conditions 130 CALL p4z_flx( kt, jnt, Kbb, Kmm, Krhs ) ! Compute surface fluxes 116 131 ! 117 132 xnegtr(:,:,:) = 1.e0 118 133 DO jn = jp_pcs0, jp_pcs1 119 DO jk = 1, jpk 120 DO jj = 1, jpj 121 DO ji = 1, jpi 122 IF( ( trb(ji,jj,jk,jn) + tra(ji,jj,jk,jn) ) < 0.e0 ) THEN 123 ztra = ABS( trb(ji,jj,jk,jn) ) / ( ABS( tra(ji,jj,jk,jn) ) + rtrn ) 124 xnegtr(ji,jj,jk) = MIN( xnegtr(ji,jj,jk), ztra ) 125 ENDIF 126 END DO 127 END DO 128 END DO 134 DO_3D_11_11( 1, jpk ) 135 IF( ( tr(ji,jj,jk,jn,Kbb) + tr(ji,jj,jk,jn,Krhs) ) < 0.e0 ) THEN 136 ztra = ABS( tr(ji,jj,jk,jn,Kbb) ) / ( ABS( tr(ji,jj,jk,jn,Krhs) ) + rtrn ) 137 xnegtr(ji,jj,jk) = MIN( xnegtr(ji,jj,jk), ztra ) 138 ENDIF 139 END_3D 129 140 END DO 130 141 ! ! where at least 1 tracer concentration becomes negative 131 142 ! ! 132 143 DO jn = jp_pcs0, jp_pcs1 133 tr b(:,:,:,jn) = trb(:,:,:,jn) + xnegtr(:,:,:) * tra(:,:,:,jn)144 tr(:,:,:,jn,Kbb) = tr(:,:,:,jn,Kbb) + xnegtr(:,:,:) * tr(:,:,:,jn,Krhs) 134 145 END DO 135 146 ! 147 IF( iom_use( 'INTdtAlk' ) .OR. iom_use( 'INTdtDIC' ) .OR. iom_use( 'INTdtFer' ) .OR. & 148 & iom_use( 'INTdtDIN' ) .OR. iom_use( 'INTdtDIP' ) .OR. iom_use( 'INTdtSil' ) ) THEN 149 ! 150 ALLOCATE( zw3d(jpi,jpj,jpk), zw2d(jpi,jpj) ) 151 zw3d(:,:,jpk) = 0. 152 DO jk = 1, jpkm1 153 zw3d(:,:,jk) = xnegtr(:,:,jk) * xfact * e3t(:,:,jk,Kmm) * tmask(:,:,jk) 154 ENDDO 155 ! 156 zw2d(:,:) = 0. 157 DO jk = 1, jpkm1 158 zw2d(:,:) = zw2d(:,:) + zw3d(:,:,jk) * tr(:,:,jk,jptal,Krhs) 159 ENDDO 160 CALL iom_put( 'INTdtAlk', zw2d ) 161 ! 162 zw2d(:,:) = 0. 163 DO jk = 1, jpkm1 164 zw2d(:,:) = zw2d(:,:) + zw3d(:,:,jk) * tr(:,:,jk,jpdic,Krhs) 165 ENDDO 166 CALL iom_put( 'INTdtDIC', zw2d ) 167 ! 168 zw2d(:,:) = 0. 169 DO jk = 1, jpkm1 170 zw2d(:,:) = zw2d(:,:) + zw3d(:,:,jk) * rno3 * ( tr(:,:,jk,jpno3,Krhs) + tr(:,:,jk,jpnh4,Krhs) ) 171 ENDDO 172 CALL iom_put( 'INTdtDIN', zw2d ) 173 ! 174 zw2d(:,:) = 0. 175 DO jk = 1, jpkm1 176 zw2d(:,:) = zw2d(:,:) + zw3d(:,:,jk) * po4r * tr(:,:,jk,jppo4,Krhs) 177 ENDDO 178 CALL iom_put( 'INTdtDIP', zw2d ) 179 ! 180 zw2d(:,:) = 0. 181 DO jk = 1, jpkm1 182 zw2d(:,:) = zw2d(:,:) + zw3d(:,:,jk) * tr(:,:,jk,jpfer,Krhs) 183 ENDDO 184 CALL iom_put( 'INTdtFer', zw2d ) 185 ! 186 zw2d(:,:) = 0. 187 DO jk = 1, jpkm1 188 zw2d(:,:) = zw2d(:,:) + zw3d(:,:,jk) * tr(:,:,jk,jpsil,Krhs) 189 ENDDO 190 CALL iom_put( 'INTdtSil', zw2d ) 191 ! 192 DEALLOCATE( zw3d, zw2d ) 193 ENDIF 194 ! 136 195 DO jn = jp_pcs0, jp_pcs1 137 tr a(:,:,:,jn) = 0._wp196 tr(:,:,:,jn,Krhs) = 0._wp 138 197 END DO 139 198 ! 140 199 IF( ln_top_euler ) THEN 141 200 DO jn = jp_pcs0, jp_pcs1 142 tr n(:,:,:,jn) = trb(:,:,:,jn)201 tr(:,:,:,jn,Kmm) = tr(:,:,:,jn,Kbb) 143 202 END DO 144 203 ENDIF 145 204 END DO 146 147 205 ! 148 206 IF( l_trdtrc ) THEN 149 207 DO jn = jp_pcs0, jp_pcs1 150 CALL trd_trc( tra(:,:,:,jn), jn, jptra_sms, kt ) ! save trends 208 ztrdt(:,:,:,jn) = ( tr(:,:,:,jn,Kbb) - ztrdt(:,:,:,jn) ) * rfact2r 209 CALL trd_trc( tr(:,:,:,jn,Krhs), jn, jptra_sms, kt, Kmm ) ! save trends 151 210 END DO 211 DEALLOCATE( ztrdt ) 152 212 END IF 153 213 #endif … … 155 215 IF( ln_sediment ) THEN 156 216 ! 157 CALL sed_model( kt ) ! Main program of Sediment model217 CALL sed_model( kt, Kbb, Kmm, Krhs ) ! Main program of Sediment model 158 218 ! 159 219 IF( ln_top_euler ) THEN 160 220 DO jn = jp_pcs0, jp_pcs1 161 tr n(:,:,:,jn) = trb(:,:,:,jn)221 tr(:,:,:,jn,Kmm) = tr(:,:,:,jn,Kbb) 162 222 END DO 163 223 ENDIF … … 165 225 ENDIF 166 226 ! 167 IF( lrst_trc ) CALL p4z_rst( kt, 'WRITE' )!* Write PISCES informations in restart file168 ! 169 170 IF( lk_iomput .OR. ln_check_mass ) CALL p4z_chk_mass( kt )! Mass conservation checking171 172 IF( lwm .AND. kt == nittrc000 ) CALL FLUSH( numonp ) ! flush output namelist PISCES227 IF( lrst_trc ) CALL p4z_rst( kt, Kbb, Kmm, 'WRITE' ) !* Write PISCES informations in restart file 228 ! 229 230 IF( lk_iomput .OR. ln_check_mass ) CALL p4z_chk_mass( kt, Kmm ) ! Mass conservation checking 231 232 IF( lwm .AND. kt == nittrc000 ) CALL FLUSH( numonp ) ! flush output namelist PISCES 173 233 ! 174 234 IF( ln_timing ) CALL timing_stop('p4z_sms') … … 201 261 ENDIF 202 262 203 REWIND( numnatp_ref ) ! Namelist nampisbio in reference namelist : Pisces variables204 263 READ ( numnatp_ref, nampisbio, IOSTAT = ios, ERR = 901) 205 264 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisbio in reference namelist' ) 206 REWIND( numnatp_cfg ) ! Namelist nampisbio in configuration namelist : Pisces variables207 265 READ ( numnatp_cfg, nampisbio, IOSTAT = ios, ERR = 902 ) 208 266 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'nampisbio in configuration namelist' ) … … 232 290 233 291 234 REWIND( numnatp_ref ) ! Namelist nampisdmp in reference namelist : Pisces damping235 292 READ ( numnatp_ref, nampisdmp, IOSTAT = ios, ERR = 905) 236 293 905 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisdmp in reference namelist' ) 237 REWIND( numnatp_cfg ) ! Namelist nampisdmp in configuration namelist : Pisces damping238 294 READ ( numnatp_cfg, nampisdmp, IOSTAT = ios, ERR = 906 ) 239 295 906 IF( ios > 0 ) CALL ctl_nam ( ios , 'nampisdmp in configuration namelist' ) … … 247 303 ENDIF 248 304 249 REWIND( numnatp_ref ) ! Namelist nampismass in reference namelist : Pisces mass conservation check250 305 READ ( numnatp_ref, nampismass, IOSTAT = ios, ERR = 907) 251 306 907 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampismass in reference namelist' ) 252 REWIND( numnatp_cfg ) ! Namelist nampismass in configuration namelist : Pisces mass conservation check253 307 READ ( numnatp_cfg, nampismass, IOSTAT = ios, ERR = 908 ) 254 308 908 IF( ios > 0 ) CALL ctl_nam ( ios , 'nampismass in configuration namelist' ) … … 264 318 265 319 266 SUBROUTINE p4z_rst( kt, cdrw )320 SUBROUTINE p4z_rst( kt, Kbb, Kmm, cdrw ) 267 321 !!--------------------------------------------------------------------- 268 322 !! *** ROUTINE p4z_rst *** … … 275 329 !!--------------------------------------------------------------------- 276 330 INTEGER , INTENT(in) :: kt ! ocean time-step 331 INTEGER , INTENT(in) :: Kbb, Kmm ! time level indices 277 332 CHARACTER(len=*), INTENT(in) :: cdrw ! "READ"/"WRITE" flag 278 333 !!--------------------------------------------------------------------- … … 287 342 CALL iom_get( numrtr, jpdom_autoglo, 'PH' , hi(:,:,:) ) 288 343 ELSE 289 CALL p4z_che 290 CALL ahini_for_at( hi)344 CALL p4z_che( Kbb, Kmm ) ! initialize the chemical constants 345 CALL ahini_for_at( hi, Kbb ) 291 346 ENDIF 292 347 CALL iom_get( numrtr, jpdom_autoglo, 'Silicalim', xksi(:,:) ) … … 335 390 336 391 337 SUBROUTINE p4z_dmp( kt )392 SUBROUTINE p4z_dmp( kt, Kbb, Kmm ) 338 393 !!---------------------------------------------------------------------- 339 394 !! *** p4z_dmp *** … … 342 397 !!---------------------------------------------------------------------- 343 398 ! 344 INTEGER, INTENT( in ) :: kt ! time step 399 INTEGER, INTENT( in ) :: kt ! time step 400 INTEGER, INTENT( in ) :: Kbb, Kmm ! time level indices 345 401 ! 346 402 REAL(wp) :: alkmean = 2426. ! mean value of alkalinity ( Glodap ; for Goyet 2391. ) … … 363 419 zarea = 1._wp / glob_sum( 'p4zsms', cvol(:,:,:) ) * 1e6 364 420 365 zalksumn = glob_sum( 'p4zsms', tr n(:,:,:,jptal) * cvol(:,:,:) ) * zarea366 zpo4sumn = glob_sum( 'p4zsms', tr n(:,:,:,jppo4) * cvol(:,:,:) ) * zarea * po4r367 zno3sumn = glob_sum( 'p4zsms', tr n(:,:,:,jpno3) * cvol(:,:,:) ) * zarea * rno3368 zsilsumn = glob_sum( 'p4zsms', tr n(:,:,:,jpsil) * cvol(:,:,:) ) * zarea421 zalksumn = glob_sum( 'p4zsms', tr(:,:,:,jptal,Kmm) * cvol(:,:,:) ) * zarea 422 zpo4sumn = glob_sum( 'p4zsms', tr(:,:,:,jppo4,Kmm) * cvol(:,:,:) ) * zarea * po4r 423 zno3sumn = glob_sum( 'p4zsms', tr(:,:,:,jpno3,Kmm) * cvol(:,:,:) ) * zarea * rno3 424 zsilsumn = glob_sum( 'p4zsms', tr(:,:,:,jpsil,Kmm) * cvol(:,:,:) ) * zarea 369 425 370 426 IF(lwp) WRITE(numout,*) ' TALKN mean : ', zalksumn 371 tr n(:,:,:,jptal) = trn(:,:,:,jptal) * alkmean / zalksumn427 tr(:,:,:,jptal,Kmm) = tr(:,:,:,jptal,Kmm) * alkmean / zalksumn 372 428 373 429 IF(lwp) WRITE(numout,*) ' PO4N mean : ', zpo4sumn 374 tr n(:,:,:,jppo4) = trn(:,:,:,jppo4) * po4mean / zpo4sumn430 tr(:,:,:,jppo4,Kmm) = tr(:,:,:,jppo4,Kmm) * po4mean / zpo4sumn 375 431 376 432 IF(lwp) WRITE(numout,*) ' NO3N mean : ', zno3sumn 377 tr n(:,:,:,jpno3) = trn(:,:,:,jpno3) * no3mean / zno3sumn433 tr(:,:,:,jpno3,Kmm) = tr(:,:,:,jpno3,Kmm) * no3mean / zno3sumn 378 434 379 435 IF(lwp) WRITE(numout,*) ' SiO3N mean : ', zsilsumn 380 tr n(:,:,:,jpsil) = MIN( 400.e-6,trn(:,:,:,jpsil) * silmean / zsilsumn )436 tr(:,:,:,jpsil,Kmm) = MIN( 400.e-6,tr(:,:,:,jpsil,Kmm) * silmean / zsilsumn ) 381 437 ! 382 438 ! 383 439 IF( .NOT. ln_top_euler ) THEN 384 zalksumb = glob_sum( 'p4zsms', tr b(:,:,:,jptal) * cvol(:,:,:) ) * zarea385 zpo4sumb = glob_sum( 'p4zsms', tr b(:,:,:,jppo4) * cvol(:,:,:) ) * zarea * po4r386 zno3sumb = glob_sum( 'p4zsms', tr b(:,:,:,jpno3) * cvol(:,:,:) ) * zarea * rno3387 zsilsumb = glob_sum( 'p4zsms', tr b(:,:,:,jpsil) * cvol(:,:,:) ) * zarea440 zalksumb = glob_sum( 'p4zsms', tr(:,:,:,jptal,Kbb) * cvol(:,:,:) ) * zarea 441 zpo4sumb = glob_sum( 'p4zsms', tr(:,:,:,jppo4,Kbb) * cvol(:,:,:) ) * zarea * po4r 442 zno3sumb = glob_sum( 'p4zsms', tr(:,:,:,jpno3,Kbb) * cvol(:,:,:) ) * zarea * rno3 443 zsilsumb = glob_sum( 'p4zsms', tr(:,:,:,jpsil,Kbb) * cvol(:,:,:) ) * zarea 388 444 389 445 IF(lwp) WRITE(numout,*) ' ' 390 446 IF(lwp) WRITE(numout,*) ' TALKB mean : ', zalksumb 391 tr b(:,:,:,jptal) = trb(:,:,:,jptal) * alkmean / zalksumb447 tr(:,:,:,jptal,Kbb) = tr(:,:,:,jptal,Kbb) * alkmean / zalksumb 392 448 393 449 IF(lwp) WRITE(numout,*) ' PO4B mean : ', zpo4sumb 394 tr b(:,:,:,jppo4) = trb(:,:,:,jppo4) * po4mean / zpo4sumb450 tr(:,:,:,jppo4,Kbb) = tr(:,:,:,jppo4,Kbb) * po4mean / zpo4sumb 395 451 396 452 IF(lwp) WRITE(numout,*) ' NO3B mean : ', zno3sumb 397 tr b(:,:,:,jpno3) = trb(:,:,:,jpno3) * no3mean / zno3sumb453 tr(:,:,:,jpno3,Kbb) = tr(:,:,:,jpno3,Kbb) * no3mean / zno3sumb 398 454 399 455 IF(lwp) WRITE(numout,*) ' SiO3B mean : ', zsilsumb 400 tr b(:,:,:,jpsil) = MIN( 400.e-6,trb(:,:,:,jpsil) * silmean / zsilsumb )456 tr(:,:,:,jpsil,Kbb) = MIN( 400.e-6,tr(:,:,:,jpsil,Kbb) * silmean / zsilsumb ) 401 457 ENDIF 402 458 ENDIF … … 407 463 408 464 409 SUBROUTINE p4z_chk_mass( kt )465 SUBROUTINE p4z_chk_mass( kt, Kmm ) 410 466 !!---------------------------------------------------------------------- 411 467 !! *** ROUTINE p4z_chk_mass *** … … 415 471 !!--------------------------------------------------------------------- 416 472 INTEGER, INTENT( in ) :: kt ! ocean time-step index 473 INTEGER, INTENT( in ) :: Kmm ! time level indices 417 474 REAL(wp) :: zrdenittot, zsdenittot, znitrpottot 418 475 CHARACTER(LEN=100) :: cltxt … … 438 495 ! Compute the budget of NO3, ALK, Si, Fer 439 496 IF( ln_p4z ) THEN 440 zwork(:,:,:) = tr n(:,:,:,jpno3) + trn(:,:,:,jpnh4) &441 & + tr n(:,:,:,jpphy) + trn(:,:,:,jpdia) &442 & + tr n(:,:,:,jppoc) + trn(:,:,:,jpgoc) + trn(:,:,:,jpdoc) &443 & + tr n(:,:,:,jpzoo) + trn(:,:,:,jpmes)497 zwork(:,:,:) = tr(:,:,:,jpno3,Kmm) + tr(:,:,:,jpnh4,Kmm) & 498 & + tr(:,:,:,jpphy,Kmm) + tr(:,:,:,jpdia,Kmm) & 499 & + tr(:,:,:,jppoc,Kmm) + tr(:,:,:,jpgoc,Kmm) + tr(:,:,:,jpdoc,Kmm) & 500 & + tr(:,:,:,jpzoo,Kmm) + tr(:,:,:,jpmes,Kmm) 444 501 ELSE 445 zwork(:,:,:) = tr n(:,:,:,jpno3) + trn(:,:,:,jpnh4) + trn(:,:,:,jpnph) &446 & + tr n(:,:,:,jpndi) + trn(:,:,:,jpnpi) &447 & + tr n(:,:,:,jppon) + trn(:,:,:,jpgon) + trn(:,:,:,jpdon) &448 & + ( tr n(:,:,:,jpzoo) + trn(:,:,:,jpmes) ) * no3rat3502 zwork(:,:,:) = tr(:,:,:,jpno3,Kmm) + tr(:,:,:,jpnh4,Kmm) + tr(:,:,:,jpnph,Kmm) & 503 & + tr(:,:,:,jpndi,Kmm) + tr(:,:,:,jpnpi,Kmm) & 504 & + tr(:,:,:,jppon,Kmm) + tr(:,:,:,jpgon,Kmm) + tr(:,:,:,jpdon,Kmm) & 505 & + ( tr(:,:,:,jpzoo,Kmm) + tr(:,:,:,jpmes,Kmm) ) * no3rat3 449 506 ENDIF 450 507 ! … … 456 513 IF( iom_use( "ppo4tot" ) .OR. ( ln_check_mass .AND. kt == nitend ) ) THEN 457 514 IF( ln_p4z ) THEN 458 zwork(:,:,:) = tr n(:,:,:,jppo4) &459 & + tr n(:,:,:,jpphy) + trn(:,:,:,jpdia) &460 & + tr n(:,:,:,jppoc) + trn(:,:,:,jpgoc) + trn(:,:,:,jpdoc) &461 & + tr n(:,:,:,jpzoo) + trn(:,:,:,jpmes)515 zwork(:,:,:) = tr(:,:,:,jppo4,Kmm) & 516 & + tr(:,:,:,jpphy,Kmm) + tr(:,:,:,jpdia,Kmm) & 517 & + tr(:,:,:,jppoc,Kmm) + tr(:,:,:,jpgoc,Kmm) + tr(:,:,:,jpdoc,Kmm) & 518 & + tr(:,:,:,jpzoo,Kmm) + tr(:,:,:,jpmes,Kmm) 462 519 ELSE 463 zwork(:,:,:) = tr n(:,:,:,jppo4) + trn(:,:,:,jppph) &464 & + tr n(:,:,:,jppdi) + trn(:,:,:,jpppi) &465 & + tr n(:,:,:,jppop) + trn(:,:,:,jpgop) + trn(:,:,:,jpdop) &466 & + ( tr n(:,:,:,jpzoo) + trn(:,:,:,jpmes) ) * po4rat3520 zwork(:,:,:) = tr(:,:,:,jppo4,Kmm) + tr(:,:,:,jppph,Kmm) & 521 & + tr(:,:,:,jppdi,Kmm) + tr(:,:,:,jpppi,Kmm) & 522 & + tr(:,:,:,jppop,Kmm) + tr(:,:,:,jpgop,Kmm) + tr(:,:,:,jpdop,Kmm) & 523 & + ( tr(:,:,:,jpzoo,Kmm) + tr(:,:,:,jpmes,Kmm) ) * po4rat3 467 524 ENDIF 468 525 ! … … 473 530 ! 474 531 IF( iom_use( "psiltot" ) .OR. ( ln_check_mass .AND. kt == nitend ) ) THEN 475 zwork(:,:,:) = tr n(:,:,:,jpsil) + trn(:,:,:,jpgsi) + trn(:,:,:,jpdsi)532 zwork(:,:,:) = tr(:,:,:,jpsil,Kmm) + tr(:,:,:,jpgsi,Kmm) + tr(:,:,:,jpdsi,Kmm) 476 533 ! 477 534 silbudget = glob_sum( 'p4zsms', zwork(:,:,:) * cvol(:,:,:) ) … … 481 538 ! 482 539 IF( iom_use( "palktot" ) .OR. ( ln_check_mass .AND. kt == nitend ) ) THEN 483 zwork(:,:,:) = tr n(:,:,:,jpno3) * rno3 + trn(:,:,:,jptal) + trn(:,:,:,jpcal) * 2.540 zwork(:,:,:) = tr(:,:,:,jpno3,Kmm) * rno3 + tr(:,:,:,jptal,Kmm) + tr(:,:,:,jpcal,Kmm) * 2. 484 541 ! 485 542 alkbudget = glob_sum( 'p4zsms', zwork(:,:,:) * cvol(:,:,:) ) ! … … 489 546 ! 490 547 IF( iom_use( "pfertot" ) .OR. ( ln_check_mass .AND. kt == nitend ) ) THEN 491 zwork(:,:,:) = tr n(:,:,:,jpfer) + trn(:,:,:,jpnfe) + trn(:,:,:,jpdfe) &492 & + tr n(:,:,:,jpbfe) + trn(:,:,:,jpsfe) &493 & + ( tr n(:,:,:,jpzoo) + trn(:,:,:,jpmes) ) * ferat3548 zwork(:,:,:) = tr(:,:,:,jpfer,Kmm) + tr(:,:,:,jpnfe,Kmm) + tr(:,:,:,jpdfe,Kmm) & 549 & + tr(:,:,:,jpbfe,Kmm) + tr(:,:,:,jpsfe,Kmm) & 550 & + ( tr(:,:,:,jpzoo,Kmm) + tr(:,:,:,jpmes,Kmm) ) * ferat3 494 551 ! 495 552 ferbudget = glob_sum( 'p4zsms', zwork(:,:,:) * cvol(:,:,:) )
Note: See TracChangeset
for help on using the changeset viewer.