Changeset 10127
- Timestamp:
- 2018-09-13T17:27:54+02:00 (6 years ago)
- Location:
- NEMO/trunk/src/TOP/PISCES/P4Z
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/trunk/src/TOP/PISCES/P4Z/p4zsbc.F90
r10111 r10127 75 75 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: hydrofe !: Hydrothermal vent supply of iron 76 76 77 REAL(wp), PUBLIC :: rivalkinput, rivdicinput, nitdepinput, sumdepsi 78 REAL(wp), PUBLIC :: rivdininput, rivdipinput, rivdsiinput 77 REAL(wp), PUBLIC :: sedsilfrac, sedcalfrac 78 REAL(wp), PUBLIC :: rivalkinput, rivdicinput 79 REAL(wp), PUBLIC :: rivdininput, rivdipinput, rivdsiinput 79 80 80 81 !! * Substitutions … … 110 111 IF( kt == nit000 .OR. ( kt /= nit000 .AND. ntimes_dust > 1 ) ) THEN 111 112 CALL fld_read( kt, 1, sf_dust ) 112 IF( nn_ice_tr == -1 .AND. .NOT.ln_ironice ) THEN ; dust(:,:) = sf_dust(1)%fnow(:,:,1)113 ELSE ; dust(:,:) = sf_dust(1)%fnow(:,:,1) * ( 1.-fr_i(:,:) )113 IF( nn_ice_tr == -1 .AND. .NOT.ln_ironice ) THEN ; dust(:,:) = MAX( rtrn, sf_dust(1)%fnow(:,:,1) ) 114 ELSE ; dust(:,:) = MAX( rtrn, sf_dust(1)%fnow(:,:,1) * ( 1.-fr_i(:,:) ) ) 114 115 ENDIF 115 116 ENDIF … … 174 175 zcoef = rno3 * 14E6 * ryyss 175 176 CALL fld_read( kt, 1, sf_ndepo ) 176 nitdep(:,:) = sf_ndepo(1)%fnow(:,:,1) / zcoef / e3t_n(:,:,1)177 nitdep(:,:) = MAX( rtrn, sf_ndepo(1)%fnow(:,:,1) / zcoef / e3t_n(:,:,1) ) 177 178 ENDIF 178 179 IF( .NOT.ln_linssh ) THEN 179 180 zcoef = rno3 * 14E6 * ryyss 180 nitdep(:,:) = sf_ndepo(1)%fnow(:,:,1) / zcoef / e3t_n(:,:,1)181 nitdep(:,:) = MAX( rtrn, sf_ndepo(1)%fnow(:,:,1) / zcoef / e3t_n(:,:,1) ) 181 182 ENDIF 182 183 ENDIF … … 210 211 REAL(wp), DIMENSION(nbtimes) :: zsteps ! times records 211 212 REAL(wp), DIMENSION(:), ALLOCATABLE :: rivinput 212 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: z dust, zndepo, zriver, zcmask213 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: zriver, zcmask 213 214 ! 214 215 CHARACTER(len=100) :: cn_dir ! Root directory for location of ssr files … … 309 310 CALL iom_open ( TRIM( sn_dust%clname ) , numdust ) 310 311 CALL iom_gettime( numdust, zsteps, kntime=ntimes_dust) ! get number of record in file 311 ALLOCATE( zdust(jpi,jpj,ntimes_dust) ) 312 DO jm = 1, ntimes_dust 313 CALL iom_get( numdust, jpdom_data, TRIM( sn_dust%clvar ), zdust(:,:,jm), jm ) 314 END DO 315 CALL iom_close( numdust ) 316 ztimes_dust = 1._wp / REAL(ntimes_dust, wp) 317 sumdepsi = 0.e0 318 DO jm = 1, ntimes_dust 319 sumdepsi = sumdepsi + glob_sum( zdust(:,:,jm) * e1e2t(:,:) * tmask(:,:,1) * ztimes_dust ) 320 END DO 321 sumdepsi = sumdepsi / ( nyear_len(1) * rday ) * 12. * 8.8 * 0.075 * mfrac / 28.1 322 DEALLOCATE( zdust) 323 ENDIF 324 ELSE 325 sumdepsi = 0._wp 312 END IF 326 313 END IF 327 314 … … 421 408 CALL iom_open ( TRIM( sn_ndepo%clname ), numdepo ) 422 409 CALL iom_gettime( numdepo, zsteps, kntime=ntimes_ndep) 423 ALLOCATE( zndepo(jpi,jpj,ntimes_ndep) ) 424 DO jm = 1, ntimes_ndep 425 CALL iom_get( numdepo, jpdom_data, TRIM( sn_ndepo%clvar ), zndepo(:,:,jm), jm ) 426 END DO 427 CALL iom_close( numdepo ) 428 ztimes_ndep = 1._wp / REAL(ntimes_ndep, wp) 429 nitdepinput = 0._wp 430 DO jm = 1, ntimes_ndep 431 nitdepinput = nitdepinput + glob_sum( zndepo(:,:,jm) * e1e2t(:,:) * tmask(:,:,1) * ztimes_ndep ) 432 ENDDO 433 nitdepinput = nitdepinput / rno3 / 14E6 434 DEALLOCATE( zndepo) 435 ENDIF 436 ELSE 437 nitdepinput = 0._wp 410 ENDIF 438 411 ENDIF 439 412 … … 527 500 WRITE(numout,*) ' DIC Supply : ', rivdicinput*1E3*12./1E12 ,' TgC/yr' 528 501 WRITE(numout,*) 529 WRITE(numout,*) ' Total input of elements from atmospheric supply' 530 WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 531 WRITE(numout,*) ' N Supply : ', nitdepinput*rno3*1E3/1E12*14.,' TgN/yr' 532 WRITE(numout,*) 533 ENDIF 502 ENDIF 503 ! 504 sedsilfrac = 0.03 ! percentage of silica loss in the sediments 505 sedcalfrac = 0.6 ! percentage of calcite loss in the sediments 534 506 ! 535 507 END SUBROUTINE p4z_sbc_init -
NEMO/trunk/src/TOP/PISCES/P4Z/p4zsed.F90
r10068 r10127 49 49 ! 50 50 INTEGER, INTENT(in) :: kt, knt ! ocean time step 51 INTEGER :: ji, jj, jk, ikt 52 REAL(wp) :: zsumsedsi, zsumsedpo4, zsumsedcal 53 REAL(wp) :: zrivalk, zrivsil, zrivno3 51 INTEGER :: ji, jj, jk, ikt 52 REAL(wp) :: zrivalk, zrivsil, zrivno3 54 53 REAL(wp) :: zwflux, zfminus, zfplus 55 54 REAL(wp) :: zlim, zfact, zfactcal … … 62 61 ! 63 62 CHARACTER (len=25) :: charout 64 REAL(wp), DIMENSION(jpi,jpj ) :: zwork1, zwork2, zwork3 65 REAL(wp), DIMENSION(jpi,jpj ) :: zdenit2d, zbureff 63 REAL(wp), DIMENSION(jpi,jpj ) :: zdenit2d, zbureff, zwork 66 64 REAL(wp), DIMENSION(jpi,jpj ) :: zwsbio3, zwsbio4, zwscal 67 65 REAL(wp), DIMENSION(jpi,jpj ) :: zsedcal, zsedsi, zsedc … … 82 80 zdenit2d(:,:) = 0.e0 83 81 zbureff (:,:) = 0.e0 84 zwork1 (:,:) = 0.e0 85 zwork2 (:,:) = 0.e0 86 zwork3 (:,:) = 0.e0 82 zwork (:,:) = 0.e0 87 83 zsedsi (:,:) = 0.e0 88 84 zsedcal (:,:) = 0.e0 … … 255 251 & + trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) ) * 1E6 256 252 zbureff(ji,jj) = 0.013 + 0.53 * zflx**2 / ( 7.0 + zflx )**2 257 ENDIF 258 END DO 259 END DO 260 261 ! Loss of biogenic silicon, Caco3 organic carbon in the sediments. 262 ! First, the total loss is computed. 263 ! The factor for calcite comes from the alkalinity effect 264 ! ------------------------------------------------------------- 265 DO jj = 1, jpj 266 DO ji = 1, jpi 267 IF( tmask(ji,jj,1) == 1 ) THEN 268 ikt = mbkt(ji,jj) 269 zwork1(ji,jj) = trb(ji,jj,ikt,jpgsi) * zwsbio4(ji,jj) 270 zwork2(ji,jj) = trb(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj) + trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) 271 ! For calcite, burial efficiency is made a function of saturation 272 zfactcal = MIN( excess(ji,jj,ikt), 0.2 ) 273 zfactcal = MIN( 1., 1.3 * ( 0.2 - zfactcal ) / ( 0.4 - zfactcal ) ) 274 zwork3(ji,jj) = trb(ji,jj,ikt,jpcal) * zwscal(ji,jj) * 2.e0 * zfactcal 275 ENDIF 276 END DO 277 END DO 278 zsumsedsi = glob_sum( zwork1(:,:) * e1e2t(:,:) ) * r1_rday 279 zsumsedpo4 = glob_sum( zwork2(:,:) * e1e2t(:,:) ) * r1_rday 280 zsumsedcal = glob_sum( zwork3(:,:) * e1e2t(:,:) ) * r1_rday 253 ENDIF 254 END DO 255 END DO 281 256 ! 282 257 ENDIF … … 285 260 ! Thus, the amount of silica lost in the sediments equal the supply at the surface (dust+rivers) 286 261 ! ------------------------------------------------------ 287 IF( .NOT.lk_sed ) zrivsil = 1._wp - ( sumdepsi + rivdsiinput * r1_ryyss ) / ( zsumsedsi + rtrn )262 IF( .NOT.lk_sed ) zrivsil = 1._wp - sedsilfrac 288 263 289 264 DO jj = 1, jpj … … 312 287 zfactcal = MIN( excess(ji,jj,ikt), 0.2 ) 313 288 zfactcal = MIN( 1., 1.3 * ( 0.2 - zfactcal ) / ( 0.4 - zfactcal ) ) 314 zrivalk = 1._wp - ( rivalkinput * r1_ryyss ) * zfactcal / ( zsumsedcal + rtrn )289 zrivalk = sedcalfrac * zfactcal 315 290 tra(ji,jj,ikt,jptal) = tra(ji,jj,ikt,jptal) + zcaloss * zrivalk * 2.0 316 291 tra(ji,jj,ikt,jpdic) = tra(ji,jj,ikt,jpdic) + zcaloss * zrivalk … … 492 467 IF( iom_use("Nfix" ) ) CALL iom_put( "Nfix", nitrpot(:,:,:) * nitrfix * rno3 * zfact * tmask(:,:,:) ) ! nitrogen fixation 493 468 IF( iom_use("INTNFIX") ) THEN ! nitrogen fixation rate in ocean ( vertically integrated ) 494 zwork 1(:,:) = 0.469 zwork(:,:) = 0. 495 470 DO jk = 1, jpkm1 496 zwork 1(:,:) = zwork1(:,:) + nitrpot(:,:,jk) * nitrfix * rno3 * zfact * e3t_n(:,:,jk) * tmask(:,:,jk)471 zwork(:,:) = zwork(:,:) + nitrpot(:,:,jk) * nitrfix * rno3 * zfact * e3t_n(:,:,jk) * tmask(:,:,jk) 497 472 ENDDO 498 CALL iom_put( "INTNFIX" , zwork 1)473 CALL iom_put( "INTNFIX" , zwork ) 499 474 ENDIF 500 475 IF( iom_use("SedCal" ) ) CALL iom_put( "SedCal", zsedcal(:,:) * zfact )
Note: See TracChangeset
for help on using the changeset viewer.