- Timestamp:
- 2019-12-11T17:15:54+01:00 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r11943_MERGE_2019/src/TOP/PISCES/P4Z/p4zsed.F90
r11949 r12193 15 15 USE sms_pisces ! PISCES Source Minus Sink variables 16 16 USE p4zlim ! Co-limitations of differents nutrients 17 USE p4zsbc ! External source of nutrients18 17 USE p4zint ! interpolation and computation of various fields 19 18 USE sed ! Sediment module … … 25 24 26 25 PUBLIC p4z_sed 26 PUBLIC p4z_sed_init 27 27 PUBLIC p4z_sed_alloc 28 28 29 REAL(wp), PUBLIC :: nitrfix !: Nitrogen fixation rate 30 REAL(wp), PUBLIC :: diazolight !: Nitrogen fixation sensitivty to light 31 REAL(wp), PUBLIC :: concfediaz !: Fe half-saturation Cste for diazotrophs 32 29 33 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: nitrpot !: Nitrogen fixation 30 34 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,: ) :: sdenit !: Nitrate reduction in the sediments 31 REAL(wp) :: r1_rday !: inverse of rday 32 LOGICAL, SAVE :: lk_sed 35 ! 36 REAL(wp), SAVE :: r1_rday 37 REAL(wp), SAVE :: sedsilfrac, sedcalfrac 33 38 34 39 !!---------------------------------------------------------------------- … … 54 59 INTEGER :: ji, jj, jk, ikt 55 60 REAL(wp) :: zrivalk, zrivsil, zrivno3 56 REAL(wp) :: z wflux, zlim, zfact, zfactcal61 REAL(wp) :: zlim, zfact, zfactcal 57 62 REAL(wp) :: zo2, zno3, zflx, zpdenit, z1pdenit, zolimit 58 63 REAL(wp) :: zsiloss, zcaloss, zws3, zws4, zwsc, zdep … … 67 72 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zsoufer, zlight 68 73 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: ztrpo4, ztrdop, zirondep, zpdep 69 REAL(wp), ALLOCATABLE, DIMENSION(:,: ) :: zsidep, zironice70 74 !!--------------------------------------------------------------------- 71 75 ! 72 76 IF( ln_timing ) CALL timing_start('p4z_sed') 73 77 ! 74 IF( kt == nittrc000 .AND. knt == 1 ) THEN 75 r1_rday = 1. / rday 76 IF (ln_sediment .AND. ln_sed_2way) THEN 77 lk_sed = .TRUE. 78 ELSE 79 lk_sed = .FALSE. 80 ENDIF 81 ENDIF 82 ! 83 IF( kt == nittrc000 .AND. knt == 1 ) r1_rday = 1. / rday 84 ! 78 85 79 ! Allocate temporary workspace 86 80 ALLOCATE( ztrpo4(jpi,jpj,jpk) ) … … 94 88 zsedc (:,:) = 0.e0 95 89 96 ! Iron input/uptake due to sea ice : Crude parameterization based on Lancelot et al. 97 ! ---------------------------------------------------- 98 IF( ln_ironice ) THEN 99 ! 100 ALLOCATE( zironice(jpi,jpj) ) 101 ! 90 IF( .NOT.lk_sed ) THEN 91 ! OA: Warning, the following part is necessary to avoid CFL problems above the sediments 92 ! -------------------------------------------------------------------- 102 93 DO jj = 1, jpj 103 94 DO ji = 1, jpi 104 zdep = rfact2 / e3t(ji,jj,1,Kmm) 105 zwflux = fmmflx(ji,jj) / 1000._wp 106 zironice(ji,jj) = MAX( -0.99 * tr(ji,jj,1,jpfer,Kbb), -zwflux * icefeinput * zdep ) 107 END DO 108 END DO 109 ! 110 tr(:,:,1,jpfer,Krhs) = tr(:,:,1,jpfer,Krhs) + zironice(:,:) 111 ! 112 IF( lk_iomput .AND. knt == nrdttrc .AND. iom_use( "Ironice" ) ) & 113 & CALL iom_put( "Ironice", zironice(:,:) * 1.e+3 * rfact2r * e3t(:,:,1,Kmm) * tmask(:,:,1) ) ! iron flux from ice 114 ! 115 DEALLOCATE( zironice ) 116 ! 117 ENDIF 118 119 ! Add the external input of nutrients from dust deposition 120 ! ---------------------------------------------------------- 121 IF( ln_dust ) THEN 122 ! 123 ALLOCATE( zsidep(jpi,jpj), zpdep(jpi,jpj,jpk), zirondep(jpi,jpj,jpk) ) 124 ! ! Iron and Si deposition at the surface 125 IF( ln_solub ) THEN 126 zirondep(:,:,1) = solub(:,:) * dust(:,:) * mfrac * rfact2 / e3t(:,:,1,Kmm) / 55.85 + 3.e-10 * r1_ryyss 127 ELSE 128 zirondep(:,:,1) = dustsolub * dust(:,:) * mfrac * rfact2 / e3t(:,:,1,Kmm) / 55.85 + 3.e-10 * r1_ryyss 129 ENDIF 130 zsidep(:,:) = 8.8 * 0.075 * dust(:,:) * mfrac * rfact2 / e3t(:,:,1,Kmm) / 28.1 131 zpdep (:,:,1) = 0.1 * 0.021 * dust(:,:) * mfrac * rfact2 / e3t(:,:,1,Kmm) / 31. / po4r 132 ! ! Iron solubilization of particles in the water column 133 ! ! dust in kg/m2/s ---> 1/55.85 to put in mol/Fe ; wdust in m/j 134 zwdust = 0.03 * rday / ( wdust * 55.85 ) / ( 270. * rday ) 135 DO jk = 2, jpkm1 136 zirondep(:,:,jk) = dust(:,:) * mfrac * zwdust * rfact2 * EXP( -gdept(:,:,jk,Kmm) / 540. ) 137 zpdep (:,:,jk) = zirondep(:,:,jk) * 0.023 138 END DO 139 ! ! Iron solubilization of particles in the water column 140 tr(:,:,1,jpsil,Krhs) = tr(:,:,1,jpsil,Krhs) + zsidep (:,:) 141 DO jk = 1, jpkm1 142 tr(:,:,jk,jppo4,Krhs) = tr(:,:,jk,jppo4,Krhs) + zpdep (:,:,jk) 143 tr(:,:,jk,jpfer,Krhs) = tr(:,:,jk,jpfer,Krhs) + zirondep(:,:,jk) 144 ENDDO 145 ! 146 IF( lk_iomput ) THEN 147 IF( knt == nrdttrc ) THEN 148 IF( iom_use( "Irondep" ) ) & 149 & CALL iom_put( "Irondep", zirondep(:,:,1) * 1.e+3 * rfact2r * e3t(:,:,1,Kmm) * tmask(:,:,1) ) ! surface downward dust depo of iron 150 IF( iom_use( "pdust" ) ) & 151 & CALL iom_put( "pdust" , dust(:,:) / ( wdust * rday ) * tmask(:,:,1) ) ! dust concentration at surface 152 ENDIF 153 ENDIF 154 DEALLOCATE( zsidep, zpdep, zirondep ) 155 ! 156 ENDIF 157 158 ! Add the external input of nutrients from river 159 ! ---------------------------------------------------------- 160 IF( ln_river ) THEN 161 DO jj = 1, jpj 162 DO ji = 1, jpi 163 DO jk = 1, nk_rnf(ji,jj) 164 tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) + rivdip(ji,jj) * rfact2 165 tr(ji,jj,jk,jpno3,Krhs) = tr(ji,jj,jk,jpno3,Krhs) + rivdin(ji,jj) * rfact2 166 tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) + rivdic(ji,jj) * 5.e-5 * rfact2 167 tr(ji,jj,jk,jpsil,Krhs) = tr(ji,jj,jk,jpsil,Krhs) + rivdsi(ji,jj) * rfact2 168 tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) + rivdic(ji,jj) * rfact2 169 tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + ( rivalk(ji,jj) - rno3 * rivdin(ji,jj) ) * rfact2 170 tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + rivdoc(ji,jj) * rfact2 171 ENDDO 172 ENDDO 173 ENDDO 174 IF (ln_ligand) THEN 175 DO jj = 1, jpj 176 DO ji = 1, jpi 177 DO jk = 1, nk_rnf(ji,jj) 178 tr(ji,jj,jk,jplgw,Krhs) = tr(ji,jj,jk,jplgw,Krhs) + rivdic(ji,jj) * 5.e-5 * rfact2 179 ENDDO 180 ENDDO 181 ENDDO 182 ENDIF 183 IF( ln_p5z ) THEN 184 DO jj = 1, jpj 185 DO ji = 1, jpi 186 DO jk = 1, nk_rnf(ji,jj) 187 tr(ji,jj,jk,jpdop,Krhs) = tr(ji,jj,jk,jpdop,Krhs) + rivdop(ji,jj) * rfact2 188 tr(ji,jj,jk,jpdon,Krhs) = tr(ji,jj,jk,jpdon,Krhs) + rivdon(ji,jj) * rfact2 189 ENDDO 190 ENDDO 191 ENDDO 192 ENDIF 193 ENDIF 194 195 ! Add the external input of nutrients from nitrogen deposition 196 ! ---------------------------------------------------------- 197 IF( ln_ndepo ) THEN 198 tr(:,:,1,jpno3,Krhs) = tr(:,:,1,jpno3,Krhs) + nitdep(:,:) * rfact2 199 tr(:,:,1,jptal,Krhs) = tr(:,:,1,jptal,Krhs) - rno3 * nitdep(:,:) * rfact2 200 ENDIF 201 202 ! Add the external input of iron from hydrothermal vents 203 ! ------------------------------------------------------ 204 IF( ln_hydrofe ) THEN 205 tr(:,:,:,jpfer,Krhs) = tr(:,:,:,jpfer,Krhs) + hydrofe(:,:,:) * rfact2 206 IF( ln_ligand ) THEN 207 tr(:,:,:,jplgw,Krhs) = tr(:,:,:,jplgw,Krhs) + ( hydrofe(:,:,:) * lgw_rath ) * rfact2 208 ENDIF 209 ! 210 IF( lk_iomput .AND. knt == nrdttrc .AND. iom_use( "HYDR" ) ) & 211 & CALL iom_put( "HYDR", hydrofe(:,:,:) * 1.e+3 * tmask(:,:,:) ) ! hydrothermal iron input 212 ENDIF 213 214 ! OA: Warning, the following part is necessary to avoid CFL problems above the sediments 215 ! -------------------------------------------------------------------- 216 DO jj = 1, jpj 217 DO ji = 1, jpi 218 ikt = mbkt(ji,jj) 219 zdep = e3t(ji,jj,ikt,Kmm) / xstep 220 zwsbio4(ji,jj) = MIN( 0.99 * zdep, wsbio4(ji,jj,ikt) ) 221 zwsbio3(ji,jj) = MIN( 0.99 * zdep, wsbio3(ji,jj,ikt) ) 222 END DO 223 END DO 224 ! 225 IF( .NOT.lk_sed ) THEN 226 ! 227 ! Add the external input of iron from sediment mobilization 228 ! ------------------------------------------------------ 229 IF( ln_ironsed ) THEN 230 tr(:,:,:,jpfer,Krhs) = tr(:,:,:,jpfer,Krhs) + ironsed(:,:,:) * rfact2 231 ! 232 IF( lk_iomput .AND. knt == nrdttrc .AND. iom_use( "Ironsed" ) ) & 233 & CALL iom_put( "Ironsed", ironsed(:,:,:) * 1.e+3 * tmask(:,:,:) ) ! iron inputs from sediments 234 ENDIF 95 ikt = mbkt(ji,jj) 96 zdep = e3t(ji,jj,ikt,Kmm) / xstep 97 zwsbio4(ji,jj) = MIN( 0.99 * zdep, wsbio4(ji,jj,ikt) ) 98 zwsbio3(ji,jj) = MIN( 0.99 * zdep, wsbio3(ji,jj,ikt) ) 99 END DO 100 END DO 235 101 236 102 ! Computation of the sediment denitrification proportion: The metamodel from midlleburg (2006) is being used … … 495 361 END SUBROUTINE p4z_sed 496 362 363 SUBROUTINE p4z_sed_init 364 !!---------------------------------------------------------------------- 365 !! *** routine p4z_sed_init *** 366 !! 367 !! ** purpose : initialization of some parameters 368 !! 369 !!---------------------------------------------------------------------- 370 !!---------------------------------------------------------------------- 371 INTEGER :: ji, jj, jk, jm 372 INTEGER :: ios ! Local integer output status for namelist read 373 ! 374 !! 375 NAMELIST/nampissed/ nitrfix, diazolight, concfediaz 376 !!---------------------------------------------------------------------- 377 ! 378 IF(lwp) THEN 379 WRITE(numout,*) 380 WRITE(numout,*) 'p4z_sed_init : initialization of sediment mobilisation ' 381 WRITE(numout,*) '~~~~~~~~~~~~ ' 382 ENDIF 383 ! !* set file information 384 READ ( numnatp_ref, nampissed, IOSTAT = ios, ERR = 901) 385 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampissed in reference namelist' ) 386 READ ( numnatp_cfg, nampissed, IOSTAT = ios, ERR = 902 ) 387 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'nampissed in configuration namelist' ) 388 IF(lwm) WRITE ( numonp, nampissed ) 389 390 IF(lwp) THEN 391 WRITE(numout,*) ' Namelist : nampissed ' 392 WRITE(numout,*) ' nitrogen fixation rate nitrfix = ', nitrfix 393 WRITE(numout,*) ' nitrogen fixation sensitivty to light diazolight = ', diazolight 394 WRITE(numout,*) ' Fe half-saturation cste for diazotrophs concfediaz = ', concfediaz 395 ENDIF 396 ! 397 r1_rday = 1. / rday 398 ! 399 sedsilfrac = 0.03 ! percentage of silica loss in the sediments 400 sedcalfrac = 0.6 ! percentage of calcite loss in the sediments 401 ! 402 lk_sed = ln_sediment .AND. ln_sed_2way 403 ! 404 END SUBROUTINE p4z_sed_init 497 405 498 406 INTEGER FUNCTION p4z_sed_alloc()
Note: See TracChangeset
for help on using the changeset viewer.