Changeset 15297 for NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/SED/sedinorg.F90
- Timestamp:
- 2021-09-28T11:20:56+02:00 (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/SED/sedinorg.F90
r15127 r15297 7 7 !! * Modules used 8 8 USE sed ! sediment global variable 9 USE sed_oce 9 10 USE sedini 11 USE sedmat 10 12 USE lib_mpp ! distribued memory computing library 11 13 USE lib_fortran … … 45 47 ! --- local variables 46 48 INTEGER :: ji,jk ! dummy looop indices 47 REAL(wp) :: zsieq48 REAL(wp) :: zsolid1, zreasat 49 REAL(wp), DIMENSION(jpoce) :: zsieq, reac_silf 50 REAL(wp) :: zsolid1, zreasat, zco3sat 49 51 REAL(wp) :: zsatur, zsatur2, znusil, zsolcpcl, zsolcpsi, zexcess 52 REAL(wp), DIMENSION(jpoce,jpksed) :: zundsat, zrearat, psms 50 53 !! 51 54 !!---------------------------------------------------------------------- … … 71 74 END DO 72 75 zsolcpsi = MAX( zsolcpsi, rtrn ) 73 zsieq = sieqs(ji) * MAX(0.25, 1.0 - (0.045 * zsolcpcl / zsolcpsi )**0.58 ) 76 zsieq(ji) = sieqs(ji) * MAX(0.2, 1.0 - (0.045 * zsolcpcl / zsolcpsi )**0.58 ) 77 reac_silf(ji) = reac_sil * ( 0.05 + 0.055 * ( 1.64 * ( zsolcpcl / zsolcpsi + 0.01 ) )**(-0.75) ) / 1.25 78 END DO 74 79 75 !----------------------------------------------------------76 ! 5. Beginning of Pore Water diffusion and solid reaction77 !---------------------------------------------------------78 80 79 !----------------------------------------------------------------------------- 80 ! For jk=2,jpksed, and for couple 81 ! 1 : jwsil/jsopal ( SI/Opal ) 82 ! 2 : jsclay/jsclay ( clay/clay ) 83 ! 3 : jwoxy/jspoc ( O2/POC ) 84 ! reaction rate is a function of solid=concentration in solid reactif in [mol/l] 85 ! and undersaturation in [mol/l]. 86 ! Solid weight fractions should be in ie [mol/l]) 87 ! second member and solution are in zundsat variable 88 !------------------------------------------------------------------------- 81 DO ji = 1, jpoce 89 82 DO jk = 2, jpksed 90 83 zsolid1 = volc(ji,jk,jsopal) * solcp(ji,jk,jsopal) 91 zsatur = MAX(0., ( zsieq - pwcp(ji,jk,jwsil) ) / zsieq)84 zsatur = MAX(0., ( zsieq(ji) - pwcp(ji,jk,jwsil) ) / zsieq(ji) ) 92 85 zsatur2 = (1.0 + temp(ji) / 400.0 )**37 93 86 znusil = ( 0.225 * ( 1.0 + temp(ji) / 15.) * zsatur + 0.775 * zsatur2 * zsatur**9.25 ) 94 solcp(ji,jk,jsopal) = solcp(ji,jk,jsopal) - reac_sil * znusil * dtsed * solcp(ji,jk,jsopal)95 pwcp(ji,jk,jwsil) = pwcp(ji,jk,jwsil) + reac_sil * znusil * dtsed * zsolid187 solcp(ji,jk,jsopal) = solcp(ji,jk,jsopal) - reac_silf(ji) * znusil * dtsed * solcp(ji,jk,jsopal) 88 pwcp(ji,jk,jwsil) = pwcp(ji,jk,jwsil) + reac_silf(ji) * znusil * dtsed * zsolid1 96 89 END DO 97 90 END DO … … 104 97 ! *densSW(l)**2 converts aksps [mol2/kg sol2] into [mol2/l2] to get [undsat] in [mol/l] 105 98 DO ji = 1, jpoce 106 saturco3(ji,:) = 1.0 - co3por(ji,:) * calcon2(ji) / ( aksps(ji) * densSW(ji) * densSW(ji) + rtrn ) 107 DO jk = 2, jpksed 99 zco3sat = aksps(ji) * densSW(ji) * densSW(ji) / ( calcon2(ji) + rtrn ) 100 saturco3(ji,:) = 1.0 - co3por(ji,:) / ( rtrn + zco3sat ) 101 DO jk = 1, jpksed 108 102 zsolid1 = volc(ji,jk,jscal) * solcp(ji,jk,jscal) 109 zexcess = MAX( 0., saturco3(ji,jk) ) 110 zreasat = reac_cal * dtsed * zexcess * zsolid1 111 solcp(ji,jk,jscal) = solcp(ji,jk,jscal) - zreasat / volc(ji,jk,jscal) 103 zundsat(ji,jk) = MAX( 0., zco3sat - co3por(ji,jk) ) 104 zrearat(ji,jk) = ( reac_cal * zsolid1 / ( zco3sat + rtrn ) ) / & 105 & ( 1. + reac_cal * dtsed * zundsat(ji,jk) / ( zco3sat + rtrn ) ) 106 END DO 107 END DO 108 109 psms(:,:) = 0.0 110 ! solves tridiagonal system 111 CALL sed_mat_dsri( jwdic, -zrearat(:,:), psms(:,:), dtsed, zundsat ) 112 113 ! New solid concentration values (jk=2 to jksed) for cacO3 114 DO jk = 2, jpksed 115 DO ji = 1, jpoce 116 zreasat = zrearat(ji,jk) * dtsed * zundsat(ji,jk) / ( volc(ji,jk,jscal) + rtrn ) 117 solcp(ji,jk,jscal) = solcp(ji,jk,jscal) - zreasat 118 zreasat = zrearat(ji,jk) * dtsed * zundsat(ji,jk) 112 119 ! For DIC 113 120 pwcp(ji,jk,jwdic) = pwcp(ji,jk,jwdic) + zreasat 114 121 ! For alkalinity 115 pwcp(ji,jk,jwalk) = pwcp(ji,jk,jwalk) + 2.0 * zreasat 116 END DO 117 END DO 122 pwcp(ji,jk,jwalk) = pwcp(ji,jk,jwalk) + 2.* zreasat 123 ENDDO 124 ENDDO 125 118 126 119 127 IF( ln_timing ) CALL timing_stop('sed_inorg')
Note: See TracChangeset
for help on using the changeset viewer.