[935] | 1 | MODULE p4zlim |
---|
| 2 | !!====================================================================== |
---|
| 3 | !! *** MODULE p4zlim *** |
---|
| 4 | !! TOP : PISCES |
---|
| 5 | !!====================================================================== |
---|
| 6 | !! History : 1.0 ! 2004 (O. Aumont) Original code |
---|
| 7 | !! 2.0 ! 2007-12 (C. Ethe, G. Madec) F90 |
---|
| 8 | !!---------------------------------------------------------------------- |
---|
| 9 | #if defined key_pisces |
---|
| 10 | !!---------------------------------------------------------------------- |
---|
| 11 | !! 'key_pisces' PISCES bio-model |
---|
| 12 | !!---------------------------------------------------------------------- |
---|
| 13 | !! p4z_lim : Compute the nutrients limitation terms |
---|
| 14 | !! p4z_lim_init : Read the namelist |
---|
| 15 | !!---------------------------------------------------------------------- |
---|
| 16 | USE trc |
---|
| 17 | USE oce_trc ! |
---|
[1119] | 18 | USE trc ! |
---|
[1073] | 19 | USE sms_pisces ! |
---|
[935] | 20 | |
---|
| 21 | IMPLICIT NONE |
---|
| 22 | PRIVATE |
---|
| 23 | |
---|
[1073] | 24 | PUBLIC p4z_lim |
---|
[935] | 25 | |
---|
| 26 | !! * Shared module variables |
---|
[1073] | 27 | REAL(wp), PUBLIC :: & |
---|
| 28 | conc0 = 2.e-6_wp , & !: |
---|
| 29 | conc1 = 10.e-6_wp , & !: |
---|
| 30 | conc2 = 2.e-11_wp , & !: |
---|
| 31 | conc2m = 8.E-11_wp , & !: |
---|
| 32 | conc3 = 1.e-10_wp , & !: |
---|
| 33 | conc3m = 4.e-10_wp , & !: |
---|
| 34 | concnnh4 = 1.e-7_wp , & !: |
---|
| 35 | concdnh4 = 5.e-7_wp , & !: |
---|
| 36 | xksi1 = 2.E-6_wp , & !: |
---|
| 37 | xksi2 = 3.33E-6_wp , & !: |
---|
| 38 | xkdoc = 417.E-6_wp , & !: |
---|
| 39 | caco3r = 0.3_wp !: |
---|
[935] | 40 | |
---|
| 41 | |
---|
| 42 | !!* Substitution |
---|
[1953] | 43 | # include "top_substitute.h90" |
---|
[935] | 44 | !!---------------------------------------------------------------------- |
---|
| 45 | !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007) |
---|
[1152] | 46 | !! $Id$ |
---|
[935] | 47 | !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) |
---|
| 48 | !!---------------------------------------------------------------------- |
---|
| 49 | |
---|
| 50 | CONTAINS |
---|
| 51 | |
---|
| 52 | SUBROUTINE p4z_lim( kt, jnt ) |
---|
| 53 | !!--------------------------------------------------------------------- |
---|
| 54 | !! *** ROUTINE p4z_lim *** |
---|
| 55 | !! |
---|
| 56 | !! ** Purpose : Compute the co-limitations by the various nutrients |
---|
| 57 | !! for the various phytoplankton species |
---|
| 58 | !! |
---|
| 59 | !! ** Method : - ??? |
---|
| 60 | !!--------------------------------------------------------------------- |
---|
| 61 | INTEGER, INTENT(in) :: kt, jnt ! ocean time step |
---|
| 62 | INTEGER :: ji, jj, jk |
---|
| 63 | REAL(wp) :: zlim1, zlim2, zlim3, zlim4, zno3, zferlim |
---|
| 64 | REAL(wp) :: zconctemp, zconctemp2, zconctempn, zconctempn2 |
---|
| 65 | REAL(wp) :: ztemp, zdenom |
---|
| 66 | !!--------------------------------------------------------------------- |
---|
| 67 | |
---|
| 68 | |
---|
| 69 | IF( ( kt * jnt ) == nittrc000 ) CALL p4z_lim_init ! Initialization (first time-step only) |
---|
| 70 | |
---|
| 71 | |
---|
| 72 | ! Tuning of the iron concentration to a minimum |
---|
| 73 | ! level that is set to the detection limit |
---|
| 74 | ! ------------------------------------- |
---|
| 75 | |
---|
| 76 | DO jk = 1, jpkm1 |
---|
| 77 | DO jj = 1, jpj |
---|
| 78 | DO ji = 1, jpi |
---|
| 79 | zno3=trn(ji,jj,jk,jpno3) |
---|
| 80 | zferlim = MAX( 1.5e-11*(zno3/40E-6)**2, 3e-12 ) |
---|
| 81 | zferlim = MIN( zferlim, 1.5e-11 ) |
---|
| 82 | trn(ji,jj,jk,jpfer) = MAX( trn(ji,jj,jk,jpfer), zferlim ) |
---|
| 83 | END DO |
---|
| 84 | END DO |
---|
| 85 | END DO |
---|
| 86 | |
---|
| 87 | ! Computation of a variable Ks for iron on diatoms |
---|
| 88 | ! taking into account that increasing biomass is |
---|
| 89 | ! made of generally bigger cells |
---|
| 90 | ! ------------------------------------------------ |
---|
| 91 | |
---|
| 92 | DO jk = 1, jpkm1 |
---|
| 93 | DO jj = 1, jpj |
---|
| 94 | DO ji = 1, jpi |
---|
| 95 | zconctemp = MAX( 0.e0 , trn(ji,jj,jk,jpdia)-5e-7 ) |
---|
| 96 | zconctemp2 = trn(ji,jj,jk,jpdia) - zconctemp |
---|
| 97 | zconctempn = MAX( 0.e0 , trn(ji,jj,jk,jpphy)-1e-6 ) |
---|
| 98 | zconctempn2 = trn(ji,jj,jk,jpphy) - zconctempn |
---|
| 99 | concdfe(ji,jj,jk) = ( zconctemp2 * conc3 + conc3m * zconctemp) & |
---|
| 100 | & / ( trn(ji,jj,jk,jpdia) + rtrn ) |
---|
| 101 | concdfe(ji,jj,jk) = MAX( conc3, concdfe(ji,jj,jk) ) |
---|
| 102 | concnfe(ji,jj,jk) = ( zconctempn2 * conc2 + conc2m * zconctempn) & |
---|
| 103 | & / ( trn(ji,jj,jk,jpphy) + rtrn ) |
---|
| 104 | concnfe(ji,jj,jk) = MAX( conc2, concnfe(ji,jj,jk) ) |
---|
| 105 | END DO |
---|
| 106 | END DO |
---|
| 107 | END DO |
---|
| 108 | |
---|
| 109 | DO jk = 1, jpkm1 |
---|
| 110 | DO jj = 1, jpj |
---|
| 111 | DO ji = 1, jpi |
---|
| 112 | |
---|
| 113 | ! Michaelis-Menten Limitation term for nutrients |
---|
| 114 | ! Small flagellates |
---|
| 115 | ! ----------------------------------------------- |
---|
| 116 | zdenom = 1. / & |
---|
| 117 | & ( conc0 * concnnh4 + concnnh4 * trn(ji,jj,jk,jpno3) + conc0 * trn(ji,jj,jk,jpnh4) ) |
---|
| 118 | xnanono3(ji,jj,jk) = trn(ji,jj,jk,jpno3) * concnnh4 * zdenom |
---|
| 119 | xnanonh4(ji,jj,jk) = trn(ji,jj,jk,jpnh4) * conc0 * zdenom |
---|
| 120 | |
---|
| 121 | zlim1 = xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) |
---|
| 122 | zlim2 = trn(ji,jj,jk,jppo4) / ( trn(ji,jj,jk,jppo4) + concnnh4 ) |
---|
| 123 | zlim3 = trn(ji,jj,jk,jpfer) / ( trn(ji,jj,jk,jpfer) + concnfe(ji,jj,jk) ) |
---|
| 124 | xlimphy(ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) |
---|
| 125 | zlim1 = trn(ji,jj,jk,jpnh4) / ( concnnh4 + trn(ji,jj,jk,jpnh4) ) |
---|
| 126 | zlim3 = trn(ji,jj,jk,jpfer) / ( conc2 + trn(ji,jj,jk,jpfer) ) |
---|
| 127 | zlim4 = trn(ji,jj,jk,jpdoc) / ( xkdoc + trn(ji,jj,jk,jpdoc) ) |
---|
| 128 | xlimbac(ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) * zlim4 |
---|
| 129 | |
---|
| 130 | END DO |
---|
| 131 | END DO |
---|
| 132 | END DO |
---|
| 133 | |
---|
| 134 | DO jk = 1, jpkm1 |
---|
| 135 | DO jj = 1, jpj |
---|
| 136 | DO ji = 1, jpi |
---|
| 137 | |
---|
| 138 | ! Michaelis-Menten Limitation term for nutrients Diatoms |
---|
| 139 | ! ---------------------------------------------- |
---|
| 140 | zdenom = 1. / & |
---|
| 141 | & ( conc1 * concdnh4 + concdnh4 * trn(ji,jj,jk,jpno3) + conc1 * trn(ji,jj,jk,jpnh4) ) |
---|
| 142 | |
---|
| 143 | xdiatno3(ji,jj,jk) = trn(ji,jj,jk,jpno3) * concdnh4 * zdenom |
---|
| 144 | xdiatnh4(ji,jj,jk) = trn(ji,jj,jk,jpnh4) * conc1 * zdenom |
---|
| 145 | |
---|
| 146 | zlim1 = xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) |
---|
| 147 | zlim2 = trn(ji,jj,jk,jppo4) / ( trn(ji,jj,jk,jppo4) + concdnh4 ) |
---|
| 148 | zlim3 = trn(ji,jj,jk,jpsil) / ( trn(ji,jj,jk,jpsil) + xksi (ji,jj) ) |
---|
| 149 | zlim4 = trn(ji,jj,jk,jpfer) / ( trn(ji,jj,jk,jpfer) + concdfe(ji,jj,jk) ) |
---|
| 150 | xlimdia(ji,jj,jk) = MIN( zlim1, zlim2, zlim3, zlim4 ) |
---|
| 151 | |
---|
| 152 | END DO |
---|
| 153 | END DO |
---|
| 154 | END DO |
---|
| 155 | |
---|
| 156 | |
---|
| 157 | ! Compute the fraction of nanophytoplankton that is made of calcifiers |
---|
| 158 | ! -------------------------------------------------------------------- |
---|
| 159 | |
---|
| 160 | DO jk = 1, jpkm1 |
---|
| 161 | DO jj = 1, jpj |
---|
| 162 | DO ji = 1, jpi |
---|
[2082] | 163 | ztemp = MAX( 0., tsn(ji,jj,jk,jp_tem) ) |
---|
[935] | 164 | xfracal(ji,jj,jk) = caco3r * xlimphy(ji,jj,jk) & |
---|
| 165 | & * MAX( 0.0001, ztemp / ( 2.+ ztemp ) ) & |
---|
| 166 | & * MAX( 1., trn(ji,jj,jk,jpphy) * 1.e6 / 2. ) |
---|
| 167 | xfracal(ji,jj,jk) = MIN( 0.8 , xfracal(ji,jj,jk) ) |
---|
| 168 | xfracal(ji,jj,jk) = MAX( 0.01, xfracal(ji,jj,jk) ) |
---|
| 169 | END DO |
---|
| 170 | END DO |
---|
| 171 | END DO |
---|
| 172 | ! |
---|
| 173 | END SUBROUTINE p4z_lim |
---|
| 174 | |
---|
| 175 | SUBROUTINE p4z_lim_init |
---|
| 176 | |
---|
| 177 | !!---------------------------------------------------------------------- |
---|
| 178 | !! *** ROUTINE p4z_lim_init *** |
---|
| 179 | !! |
---|
| 180 | !! ** Purpose : Initialization of nutrient limitation parameters |
---|
| 181 | !! |
---|
[1119] | 182 | !! ** Method : Read the nampislim namelist and check the parameters |
---|
[935] | 183 | !! called at the first timestep (nittrc000) |
---|
| 184 | !! |
---|
[1119] | 185 | !! ** input : Namelist nampislim |
---|
[935] | 186 | !! |
---|
| 187 | !!---------------------------------------------------------------------- |
---|
| 188 | |
---|
[1119] | 189 | NAMELIST/nampislim/ conc0, conc1, conc2, conc2m, conc3, conc3m, & |
---|
[935] | 190 | & concnnh4, concdnh4, xksi1, xksi2, xkdoc, caco3r |
---|
| 191 | |
---|
| 192 | REWIND( numnat ) ! read numnat |
---|
[1119] | 193 | READ ( numnat, nampislim ) |
---|
[935] | 194 | |
---|
| 195 | IF(lwp) THEN ! control print |
---|
| 196 | WRITE(numout,*) ' ' |
---|
[1119] | 197 | WRITE(numout,*) ' Namelist parameters for nutrient limitations, nampislim' |
---|
[935] | 198 | WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' |
---|
| 199 | WRITE(numout,*) ' mean rainratio caco3r =', caco3r |
---|
| 200 | WRITE(numout,*) ' NO3, PO4 half saturation conc0 =', conc0 |
---|
| 201 | WRITE(numout,*) ' half saturation constant for Si uptake xksi1 =', xksi1 |
---|
| 202 | WRITE(numout,*) ' half saturation constant for Si/C xksi2 =', xksi2 |
---|
| 203 | WRITE(numout,*) ' 2nd half-sat. of DOC remineralization xkdoc =', xkdoc |
---|
| 204 | WRITE(numout,*) ' Phosphate half saturation for diatoms conc1 =', conc1 |
---|
| 205 | WRITE(numout,*) ' Iron half saturation for phyto conc2 =', conc2 |
---|
| 206 | WRITE(numout,*) ' Max iron half saturation for phyto conc2m =', conc2m |
---|
| 207 | WRITE(numout,*) ' Iron half saturation for diatoms conc3 =', conc3 |
---|
| 208 | WRITE(numout,*) ' Maxi iron half saturation for diatoms conc3m =', conc3m |
---|
| 209 | WRITE(numout,*) ' NH4 half saturation for phyto concnnh4 =', concnnh4 |
---|
| 210 | WRITE(numout,*) ' NH4 half saturation for diatoms concdnh4 =', concdnh4 |
---|
| 211 | ENDIF |
---|
| 212 | |
---|
| 213 | END SUBROUTINE p4z_lim_init |
---|
| 214 | |
---|
| 215 | #else |
---|
| 216 | !!====================================================================== |
---|
| 217 | !! Dummy module : No PISCES bio-model |
---|
| 218 | !!====================================================================== |
---|
| 219 | CONTAINS |
---|
| 220 | SUBROUTINE p4z_lim ! Empty routine |
---|
| 221 | END SUBROUTINE p4z_lim |
---|
| 222 | #endif |
---|
| 223 | |
---|
| 224 | !!====================================================================== |
---|
| 225 | END MODULE p4zlim |
---|