Changeset 775
- Timestamp:
- 2007-12-19T14:45:15+01:00 (16 years ago)
- Location:
- branches/dev_001_GM/NEMO/TOP_SRC/PISCES_SMS
- Files:
-
- 2 deleted
- 21 moved
Legend:
- Unmodified
- Added
- Removed
-
branches/dev_001_GM/NEMO/TOP_SRC/PISCES_SMS/p4zbio.F90
r774 r775 1 2 CCC $Header$ 3 CCC TOP 1.0 , LOCEAN-IPSL (2005) 4 C This software is governed by CeCILL licence see modipsl/doc/NEMO_CeCILL.txt 5 C --------------------------------------------------------------------------- 6 SUBROUTINE p4zbio 7 CDIR$ LIST 8 #if defined key_top && defined key_pisces 9 CCC ------------------------------------------------------------------ 10 CCC 11 CCC ROUTINE p4zbio : PISCES MODEL 12 CCC ***************************** 13 CCC 14 CC 15 CC PURPOSE. 16 CC -------- 17 CC *P4ZBIO* ECOSYSTEM MODEL IN THE WHOLE OCEAN 18 CC THIS ROUTINE COMPUTES THE DIFFERENT INTERACTIONS 19 CC BETWEEN THE DIFFERENT COMPARTMENTS OF THE MODEL 20 CC EXTERNAL : 21 CC ---------- 22 CC p4zopt, p4zprod, p4znano, p4zdiat, p4zmicro, p4zmeso 23 CC p4zsink, p4zrem 24 CC 25 CC MODIFICATIONS: 26 CC -------------- 27 CC original : 2004 O. Aumont 28 CC ---------------------------------------------------------------- 29 CC parameters and commons 30 CC ====================== 31 CDIR$ NOLIST 32 USE oce_trc 33 USE trp_trc 34 USE sms 35 IMPLICIT NONE 36 #include "domzgr_substitute.h90" 37 CDIR$ LIST 38 CC----------------------------------------------------------------- 39 CC local declarations 40 CC ================== 41 C 42 INTEGER ji, jj, jk, jn 43 44 REAL zdenom,zdenom1(jpi,jpj,jpk) 45 REAL prodca,ztemp 46 1 MODULE p4zbio 2 !!====================================================================== 3 !! *** MODULE p4zbio *** 4 !! TOP : PISCES bio-model 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_bio : computes the interactions between the different 14 !! compartments of PISCES 15 !!---------------------------------------------------------------------- 16 USE oce_trc ! 17 USE trp_trc ! 18 USE sms ! 19 USE p4zsink ! 20 USE p4zsink_kriest ! 21 USE p4zopt ! 22 USE p4zlim ! 23 USE p4zprod ! 24 USE p4znano ! 25 USE p4zdiat ! 26 USE p4zmicro ! 27 USE p4zmeso ! 28 USE p4zrem ! 29 30 IMPLICIT NONE 31 PRIVATE 32 33 PUBLIC p4z_bio ! called in p4zprg.F90 34 35 !!* Substitution 36 # include "domzgr_substitute.h90" 37 !!---------------------------------------------------------------------- 38 !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007) 39 !! $Header:$ 40 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 41 !!---------------------------------------------------------------------- 42 43 CONTAINS 44 45 SUBROUTINE p4z_bio 46 !!--------------------------------------------------------------------- 47 !! *** ROUTINE p4z_bio *** 48 !! 49 !! ** Purpose : Ecosystem model in the whole ocean: computes the 50 !! different interactions between the different compartments 51 !! of PISCES 52 !! 53 !! ** Method : - ??? 54 !!--------------------------------------------------------------------- 55 INTEGER :: ji, jj, jk, jn 56 REAL(wp) :: zdenom, ztemp 57 REAL(wp) :: zprodt, zprodca 58 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zdenom1 59 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zfracal 60 #if defined key_kriest 61 REAL(wp) :: znumpoc, znumdoc 62 #else 63 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zdenom2 64 #endif 65 !!--------------------------------------------------------------------- 66 67 ! ASSIGN THE SHEAR RATE THAT IS USED FOR AGGREGATION 68 ! OF PHYTOPLANKTON AND DETRITUS 69 70 zdiss(:,:,:) = 0.01 71 72 !!gm the use of nmld should be better here? 73 DO jk = 1, jpkm1 74 DO jj = 1, jpj 75 DO ji = 1, jpi 76 IF( fsdepw(ji,jj,jk+1) .le. hmld(ji,jj) ) zdiss(ji,jj,jk) = 1.e0 77 END DO 78 END DO 79 END DO 80 81 ! Compute de different ratios for scavenging of iron 82 ! -------------------------------------------------- 83 84 DO jk = 1, jpk 85 DO jj = 1, jpj 86 DO ji = 1, jpi 47 87 #if ! defined key_kriest 48 REAL zdenom2(jpi,jpj,jpk) 88 zdenom = 1. / ( trn(ji,jj,jk,jppoc) + trn(ji,jj,jk,jpgoc) & 89 & + trn(ji,jj,jk,jpdsi) + trn(ji,jj,jk,jpcal) + rtrn ) 90 zdenom1(ji,jj,jk) = trn(ji,jj,jk,jppoc) * zdenom 91 zdenom2(ji,jj,jk) = trn(ji,jj,jk,jpgoc) * zdenom 49 92 #else 50 REAL znumpoc, znumdoc 93 zdenom = 1. / ( trn(ji,jj,jk,jppoc) & 94 & + trn(ji,jj,jk,jpdsi) + trn(ji,jj,jk,jpcal) + rtrn ) 95 zdenom1(ji,jj,jk) = trn(ji,jj,jk,jppoc) * zdenom 51 96 #endif 52 C 53 REAL prodt 54 REAL zfracal(jpi,jpj,jpk) 55 C 56 C ASSIGN THE SHEAR RATE THAT IS USED FOR AGGREGATION 57 C OF PHYTOPLANKTON AND DETRITUS 58 C 59 zdiss(:,:,:) = 0.01 60 C 61 DO jk=1,jpkm1 62 DO jj=1,jpj 63 DO ji=1,jpi 64 if (fsdepw(ji,jj,jk+1).le.hmld(ji,jj)) zdiss(ji,jj,jk)=1. 65 END DO 66 END DO 67 END DO 68 C 69 C Compute de different ratios for scavenging of iron 70 C -------------------------------------------------- 71 C 72 DO jk=1,jpk 73 DO jj=1,jpj 74 DO ji=1,jpi 75 #if ! defined key_kriest 76 zdenom=1./(trn(ji,jj,jk,jppoc)+trn(ji,jj,jk,jpgoc) 77 $ +trn(ji,jj,jk,jpdsi)+trn(ji,jj,jk,jpcal)+rtrn) 78 C 79 zdenom1(ji,jj,jk)=trn(ji,jj,jk,jppoc)*zdenom 80 zdenom2(ji,jj,jk)=trn(ji,jj,jk,jpgoc)*zdenom 97 END DO 98 END DO 99 END DO 100 101 ! Compute the fraction of nanophytoplankton that is made of calcifiers 102 ! -------------------------------------------------------------------- 103 104 DO jk = 1, jpkm1 105 DO jj = 1, jpj 106 DO ji = 1, jpi 107 ztemp = MAX( 0., tn(ji,jj,jk) ) 108 zfracal(ji,jj,jk) = caco3r * xlimphy(ji,jj,jk) & 109 & * MAX( 0.0001, ztemp / ( 2.+ ztemp ) ) & 110 & * MAX( 1., trn(ji,jj,jk,jpphy) * 1.e6 / 2. ) 111 zfracal(ji,jj,jk) = MIN( 0.8 , zfracal(ji,jj,jk) ) 112 zfracal(ji,jj,jk) = MAX( 0.01, zfracal(ji,jj,jk) ) 113 END DO 114 END DO 115 END DO 116 117 ! computation of the vertical flux of particulate organic matter 118 ! -------------------------------------------------------------- 119 120 IF( lk_kriest ) THEN ; CALL p4z_sink_kriest ! Sink due to vertical flux of POM 121 ELSE ; CALL p4z_sink ! 122 ENDIF 123 124 ! compute the PAR in the water column 125 ! ----------------------------------- 126 127 CALL p4z_opt ! Optical 128 129 ! compute the co-limitations by the various nutrients 130 ! ---------------------------------------------------- 131 132 CALL p4z_lim 133 134 ! compute phytoplankton growth rate over the global ocean. 135 ! ------------------------------------------------------- 136 ! (Growth rates for each element is computed (C, Si, Fe, Chl)) 137 138 CALL p4z_prod 139 140 ! phytoplankton mortality (Mortality losses for each elements are computed (C, Fe, Si, Chl) ) 141 ! ----------------------- 142 143 CALL p4z_nano ! nanophytoplankton 144 145 CALL p4z_diat ! diatoms 146 147 ! zooplankton sources/sinks routines (each elements are computed (C, Fe, Si, Chl) ) 148 ! ---------------------------------- 149 150 CALL p4z_micro ! microzooplankton 151 152 CALL p4z_meso ! mesozooplankton 153 154 ! computation of remineralization terms of organic matter + scavenging of Fe 155 ! -------------------------------------------------------------------------- 156 157 CALL p4z_rem ! remineralization 158 159 160 ! Determination of tracers concentration as a function of biological sources and sinks 161 ! ------------------------------------------------------------------------------------ 162 163 DO jk = 1, jpkm1 164 165 ! Evolution of PO4 166 ! ---------------- 167 trn(:,:,jk,jppo4) = trn(:,:,jk,jppo4) - prorca(:,:,jk) - prorca2(:,:,jk) & 168 & + olimi (:,:,jk) + grarem (:,:,jk) * sigma1 & 169 & + denitr(:,:,jk) + grarem2(:,:,jk) * sigma2 170 171 ! Evolution of NO3 and NH4 172 ! ------------------------ 173 trn(:,:,jk,jpno3) = trn(:,:,jk,jpno3) - pronew(:,:,jk) - pronew2(:,:,jk) & 174 & + onitr (:,:,jk) - denitr (:,:,jk) * rdenit 175 176 trn(:,:,jk,jpnh4) = trn(:,:,jk,jpnh4) - proreg(:,:,jk) - proreg2(:,:,jk) & 177 & + olimi (:,:,jk) + grarem (:,:,jk) * sigma1 & 178 & + grarem2(:,:,jk) * sigma2 & 179 & - onitr (:,:,jk) + denitr (:,:,jk) 180 181 ! Evolution of Phytoplankton 182 ! -------------------------- 183 trn(:,:,jk,jpphy) = trn(:,:,jk,jpphy) + prorca (:,:,jk) * ( 1.- excret ) - tortp(:,:,jk) & 184 & - grazp (:,:,jk) - grazn(:,:,jk) - respp(:,:,jk) 185 186 trn(:,:,jk,jpnch) = trn(:,:,jk,jpnch) + prorca6(:,:,jk) * ( 1.- excret ) - tortnch(:,:,jk) & 187 & - grazpch(:,:,jk) - graznch(:,:,jk)- respnch(:,:,jk) 188 189 ! Evolution of Diatoms 190 ! -------------------- 191 trn(:,:,jk,jpdia) = trn(:,:,jk,jpdia) + prorca2(:,:,jk) * ( 1.- excret2 ) - tortp2(:,:,jk) & 192 & - respp2 (:,:,jk) - grazd(:,:,jk) - grazsd(:,:,jk) 193 194 trn(:,:,jk,jpdch) = trn(:,:,jk,jpdch) + prorca7(:,:,jk) * ( 1.- excret2 ) - tortdch(:,:,jk) & 195 & - respdch(:,:,jk) - grazdch(:,:,jk) - grazsch(:,:,jk) 196 197 ! Evolution of Zooplankton 198 ! ------------------------ 199 trn(:,:,jk,jpzoo) = trn(:,:,jk,jpzoo) + epsher * ( grazp(:,:,jk) + grazm(:,:,jk) + grazsd(:,:,jk) ) & 200 & - grazz(:,:,jk) - tortz(:,:,jk) - respz(:,:,jk) 201 202 ! Evolution of Mesozooplankton 203 ! ------------------------ 204 trn(:,:,jk,jpmes) = trn(:,:,jk,jpmes) + epsher2 * ( grazd (:,:,jk) + grazz (:,:,jk) + grazn(:,:,jk) & 205 & + grazpoc(:,:,jk) + grazffe(:,:,jk) ) & 206 & - tortz2(:,:,jk) - respz2(:,:,jk) 207 208 ! Evolution of O2 209 ! --------------- 210 trn(:,:,jk,jpoxy) = trn(:,:,jk,jpoxy) + o2ut * ( proreg(:,:,jk) + proreg2(:,:,jk) - olimi(:,:,jk) & 211 & -grarem(:,:,jk) * sigma1 - grarem2(:,:,jk) * sigma2 ) & 212 & + ( o2ut + o2nit ) * ( pronew(:,:,jk) + pronew2(:,:,jk) ) & 213 & - o2nit * onitr(:,:,jk) 214 215 ! Evolution of IRON 216 ! ----------------- 217 trn(:,:,jk,jpfer) = trn(:,:,jk,jpfer) + ( excret - 1.) * prorca5(:,:,jk) - xaggdfe (:,:,jk) & 218 & + ( excret2 - 1.) * prorca4(:,:,jk) - xbactfer(:,:,jk) & 219 & + grafer(:,:,jk) + grafer2(:,:,jk) & 220 & + ofer (:,:,jk) - xscave (:,:,jk) 221 ! 222 END DO 223 224 225 #if defined key_kriest 226 227 #include "p4zbio_kriest.h90" 81 228 82 229 #else 83 zdenom=1./(trn(ji,jj,jk,jppoc) 84 $ +trn(ji,jj,jk,jpdsi)+trn(ji,jj,jk,jpcal)+rtrn) 85 zdenom1(ji,jj,jk)=trn(ji,jj,jk,jppoc)*zdenom 230 231 #include "p4zbio_std.h90" 86 232 87 233 #endif 88 END DO 89 END DO 90 END DO 91 C 92 C Compute the fraction of nanophytoplankton that is made 93 C of calcifiers 94 C ------------------------------------------------------ 95 C 96 DO jk=1,jpkm1 97 DO jj=1,jpj 98 DO ji=1,jpi 99 ztemp=max(0.,tn(ji,jj,jk)) 100 zfracal(ji,jj,jk)=caco3r*xlimphy(ji,jj,jk)*max(0.0001 101 & ,ztemp/(2.+ztemp))*max(1.,trn(ji,jj,jk,jpphy)*1E6/2.) 102 zfracal(ji,jj,jk)=min(0.8,zfracal(ji,jj,jk)) 103 zfracal(ji,jj,jk)=max(0.01,zfracal(ji,jj,jk)) 104 END DO 105 END DO 106 END DO 107 108 C 109 C Call subroutine for computation of the vertical flux 110 C of particulate organic matter 111 C ---------------------------------------------------- 112 C 113 CALL p4zsink 114 115 C 116 C Call optical routine to compute the PAR in the water column 117 C ----------------------------------------------------------- 118 C 119 CALL p4zopt 120 C 121 C Call routine to compute the co-limitations by the various 122 C nutrients 123 C --------------------------------------------------------- 124 C 125 CALL p4zlim 126 C 127 C Call production routine to compute phytoplankton growth rate 128 C over the global ocean. Growth rates for each element is 129 C computed (C, Si, Fe, Chl) 130 C ------------------------------------------------------------ 131 C 132 CALL p4zprod 133 C 134 C Call phytoplankton mortality routines. Mortality losses for 135 C Each elements are computed (C, Fe, Si, Chl) 136 C ----------------------------------------------------------- 137 C 138 CALL p4znano 139 CALL p4zdiat 140 C 141 C Call zooplankton sources/sinks routines. 142 C Each elements are computed (C, Fe, Si, Chl) 143 C ----------------------------------------------------------- 144 C 145 CALL p4zmicro 146 CALL p4zmeso 147 148 C 149 C Call subroutine for computation of remineralization 150 C terms of organic matter+scavenging of Fe 151 C ---------------------------------------------------- 152 CALL p4zrem 153 C 154 C Determination of tracers concentration as a function of 155 C biological sources and sinks 156 C -------------------------------------------------------- 157 C 158 DO jk = 1,jpkm1 159 DO jj = 1,jpj 160 DO ji = 1,jpi 161 C 162 C Evolution of PO4 163 C ---------------- 164 C 165 trn(ji,jj,jk,jppo4) = trn(ji,jj,jk,jppo4) 166 & -prorca(ji,jj,jk)-prorca2(ji,jj,jk) 167 & +olimi(ji,jj,jk)+grarem(ji,jj,jk)*sigma1+denitr(ji,jj,jk) 168 & +grarem2(ji,jj,jk)*sigma2 169 C 170 C Evolution of NO3 and NH4 171 C ------------------------ 172 C 173 trn(ji,jj,jk,jpno3) = trn(ji,jj,jk,jpno3) 174 & -pronew(ji,jj,jk)-pronew2(ji,jj,jk)+onitr(ji,jj,jk) 175 & -denitr(ji,jj,jk)*rdenit 176 177 trn(ji,jj,jk,jpnh4) = trn(ji,jj,jk,jpnh4) 178 & -proreg(ji,jj,jk)-proreg2(ji,jj,jk)+olimi(ji,jj,jk) 179 & +grarem(ji,jj,jk)*sigma1+grarem2(ji,jj,jk)*sigma2 180 & -onitr(ji,jj,jk)+denitr(ji,jj,jk) 181 182 END DO 183 END DO 184 END DO 185 186 DO jk = 1,jpkm1 187 DO jj = 1,jpj 188 DO ji = 1,jpi 189 190 C 191 C Evolution of Phytoplankton 192 C -------------------------- 193 C 194 trn(ji,jj,jk,jpphy) = trn(ji,jj,jk,jpphy) 195 & +prorca(ji,jj,jk)*(1.-excret)-tortp(ji,jj,jk) 196 & -grazp(ji,jj,jk)-grazn(ji,jj,jk)-respp(ji,jj,jk) 197 198 trn(ji,jj,jk,jpnch) = trn(ji,jj,jk,jpnch) 199 & +prorca6(ji,jj,jk)*(1.-excret)-tortnch(ji,jj,jk) 200 & -grazpch(ji,jj,jk)-graznch(ji,jj,jk)-respnch(ji,jj,jk) 201 C 202 C Evolution of Diatoms 203 C ------------------ 204 C 205 trn(ji,jj,jk,jpdia) = trn(ji,jj,jk,jpdia) 206 & +prorca2(ji,jj,jk)*(1.-excret2)-tortp2(ji,jj,jk) 207 & -respp2(ji,jj,jk)-grazd(ji,jj,jk)-grazsd(ji,jj,jk) 208 209 trn(ji,jj,jk,jpdch) = trn(ji,jj,jk,jpdch) 210 & +prorca7(ji,jj,jk)*(1.-excret2)-tortdch(ji,jj,jk) 211 & -respdch(ji,jj,jk)-grazdch(ji,jj,jk)-grazsch(ji,jj,jk) 212 END DO 213 END DO 214 END DO 215 216 DO jk = 1,jpkm1 217 DO jj = 1,jpj 218 DO ji = 1,jpi 219 C 220 C Evolution of Zooplankton 221 C ------------------------ 222 C 223 trn(ji,jj,jk,jpzoo) = trn(ji,jj,jk,jpzoo) 224 & +epsher*(grazp(ji,jj,jk)+grazm(ji,jj,jk)+grazsd(ji,jj,jk)) 225 & -grazz(ji,jj,jk)-tortz(ji,jj,jk)-respz(ji,jj,jk) 226 C 227 C Evolution of Mesozooplankton 228 C ------------------------ 229 C 230 trn(ji,jj,jk,jpmes) = trn(ji,jj,jk,jpmes) 231 & +epsher2*(grazd(ji,jj,jk)+grazz(ji,jj,jk)+grazn(ji,jj,jk) 232 & +grazpoc(ji,jj,jk)+grazffe(ji,jj,jk))-tortz2(ji,jj,jk) 233 & -respz2(ji,jj,jk) 234 END DO 235 END DO 236 END DO 237 238 239 DO jk = 1,jpkm1 240 DO jj = 1,jpj 241 DO ji = 1,jpi 242 C 243 C Evolution of O2 244 C --------------- 245 C 246 trn(ji,jj,jk,jpoxy) = trn(ji,jj,jk,jpoxy) 247 & +o2ut*(proreg(ji,jj,jk)+proreg2(ji,jj,jk)-olimi(ji,jj,jk) 248 & -grarem(ji,jj,jk)*sigma1-grarem2(ji,jj,jk)*sigma2) 249 & +(o2ut+o2nit)*( pronew(ji,jj,jk)+pronew2(ji,jj,jk)) 250 & -o2nit*onitr(ji,jj,jk) 251 C 252 END DO 253 END DO 254 END DO 255 256 257 DO jk = 1,jpkm1 258 DO jj = 1,jpj 259 DO ji = 1,jpi 260 C 261 C Evolution of IRON 262 C ----------------- 263 C 264 trn(ji,jj,jk,jpfer) = trn(ji,jj,jk,jpfer) 265 & +(excret-1.)*prorca5(ji,jj,jk)-xaggdfe(ji,jj,jk) 266 & +(excret2-1.)*prorca4(ji,jj,jk)-xbactfer(ji,jj,jk) 267 & +grafer(ji,jj,jk)+grafer2(ji,jj,jk) 268 & +ofer(ji,jj,jk)-xscave(ji,jj,jk) 269 C 270 END DO 271 END DO 272 END DO 273 274 275 #if defined key_kriest 276 277 #include "p4zbio.kriest.h" 234 235 236 DO jk = 1, jpkm1 237 238 ! Evolution of biogenic Silica 239 ! ---------------------------- 240 trn(:,:,jk,jpbsi) = trn(:,:,jk,jpbsi) + prorca3(:,:,jk) * ( 1.- excret2 ) - grazss(:,:,jk) & 241 & - tortds (:,:,jk) - respds(:,:,jk) - grazs (:,:,jk) 242 243 ! Evolution of sinking biogenic silica 244 ! ------------------------------------ 245 trn(:,:,jk,jpdsi) = trn(:,:,jk,jpdsi) + tortds (:,:,jk) + respds(:,:,jk) + grazs(:,:,jk) & 246 & - osil (:,:,jk) + grazss(:,:,jk) 247 248 ! Evolution of biogenic diatom Iron 249 ! --------------------------------- 250 trn(:,:,jk,jpdfe) = trn(:,:,jk,jpdfe) + prorca4(:,:,jk) * ( 1.- excret2 ) - grazsf(:,:,jk) & 251 & - tortdf (:,:,jk) - respdf(:,:,jk) - grazf (:,:,jk) 252 253 ! Evolution of biogenic nanophytoplankton Iron 254 ! -------------------------------------------- 255 trn(:,:,jk,jpnfe) = trn(:,:,jk,jpnfe) + prorca5(:,:,jk) * ( 1.- excret ) - graznf(:,:,jk) & 256 & - tortnf (:,:,jk) - respnf(:,:,jk) - grazpf(:,:,jk) 257 258 ! Evolution of dissolved Silica 259 ! ----------------------------- 260 trn(:,:,jk,jpsil) = trn(:,:,jk,jpsil) - ( 1.- excret2 ) * prorca3(:,:,jk) + osil(:,:,jk) 261 262 END DO 263 264 ! Evolution of calcite and silicates as a function of the two tracers 265 ! ------------------------------------------------------------------- 266 DO jk = 1, jpkm1 267 DO jj = 1, jpj 268 DO ji = 1, jpi 269 270 zprodt = prorca(ji,jj,jk) + prorca2(ji,jj,jk) - olimi(ji,jj,jk) - grarem(ji,jj,jk) * sigma1 & 271 & - grarem2(ji,jj,jk) * sigma2 - denitr(ji,jj,jk) 272 zprodca = pronew(ji,jj,jk) + pronew2(ji,jj,jk) - onitr(ji,jj,jk) + rdenit * denitr(ji,jj,jk) 273 274 ! potential production of calcite and biogenic silicate 275 ! ------------------------------------------------------ 276 prcaca(ji,jj,jk) = zfracal(ji,jj,jk) & 277 & * ( part * ( unass*grazp(ji,jj,jk) + unass2*grazn(ji,jj,jk) ) & 278 & + tortp(ji,jj,jk) + respp(ji,jj,jk) ) 279 280 ! Consumption of Total (12C)O2 281 ! ---------------------------- 282 trn(ji,jj,jk,jpdic) = trn(ji,jj,jk,jpdic) - zprodt - prcaca(ji,jj,jk) 283 284 ! Consumption of alkalinity due to ca++ uptake and increase of 285 ! alkalinity due to nitrate consumption during organic soft tissue production 286 ! --------------------------------------------------------- 287 trn(ji,jj,jk,jptal) = trn(ji,jj,jk,jptal) + rno3 * zprodca - 2.* prcaca(ji,jj,jk) 288 ! 289 END DO 290 END DO 291 END DO 292 293 294 ! Production of calcite due to biological production 295 ! -------------------------------------------------- 296 DO jk = 1, jpkm1 297 trn(:,:,jk,jpcal) = trn(:,:,jk,jpcal) + prcaca(:,:,jk) 298 END DO 299 300 301 ! Loop to test if tracers concentrations fall below 0. 302 ! ---------------------------------------------------- 303 304 znegtr(:,:,:) = 1.e0 305 DO jn = 1, jptra 306 DO jk = 1, jpk 307 DO jj = 1, jpj 308 DO ji = 1, jpi 309 IF( trn(ji,jj,jk,jn) < 0.e0 ) znegtr(ji,jj,jk) = 0.e0 310 END DO 311 END DO 312 END DO 313 END DO 314 ! ! where at least 1 tracer concentration becomes negative 315 ! ! all tracer tendancy are set to zero (i.e. trn = trb) 316 DO jn = 1, jptra 317 trn(:,:,:,jn) = trb(:,:,:,jn) + znegtr(:,:,:) * ( trn(:,:,:,jn) - trb(:,:,:,jn) ) 318 END DO 319 320 # if defined key_trc_dia3d 321 !!gm potential bug hard coded index on trc3d 322 trc3d(:,:,:, 4) = etot(:,:,:) 323 trc3d(:,:,:, 5) = prorca (:,:,:) * znegtr(:,:,:) * 1.e3 * rfact2r 324 trc3d(:,:,:, 6) = prorca2(:,:,:) * znegtr(:,:,:) * 1.e3 * rfact2r 325 trc3d(:,:,:, 7) = pronew (:,:,:) * znegtr(:,:,:) * 1.e3 * rfact2r 326 trc3d(:,:,:, 8) = pronew2(:,:,:) * znegtr(:,:,:) * 1.e3 * rfact2r 327 trc3d(:,:,:, 9) = prorca3(:,:,:) * znegtr(:,:,:) * 1.e3 * rfact2r 328 trc3d(:,:,:,10) = prorca4(:,:,:) * znegtr(:,:,:) * 1.e3 * rfact2r 329 # if ! defined key_kriest 330 trc3d(:,:,:,11) = prorca5(:,:,:) * znegtr(:,:,:) * 1.e3 * rfact2r 331 # else 332 trc3d(:,:,:,11) = prcaca (:,:,:) * znegtr(:,:,:) * 1.e3 * rfact2r 333 # endif 334 # endif 335 ! 336 END SUBROUTINE p4z_bio 278 337 279 338 #else 280 281 #include "p4zbio.std.h" 282 283 #endif 284 285 286 287 DO jk = 1,jpkm1 288 DO jj = 1,jpj 289 DO ji = 1,jpi 290 C 291 C Evolution of biogenic Silica 292 C ---------------------------- 293 C 294 trn(ji,jj,jk,jpbsi) = trn(ji,jj,jk,jpbsi) 295 & +prorca3(ji,jj,jk)*(1.-excret2)-grazss(ji,jj,jk) 296 & -tortds(ji,jj,jk)-respds(ji,jj,jk)-grazs(ji,jj,jk) 297 C 298 END DO 299 END DO 300 END DO 301 302 DO jk = 1,jpkm1 303 DO jj = 1,jpj 304 DO ji = 1,jpi 305 C 306 C Evolution of sinking biogenic silica 307 C ------------------------------------ 308 C 309 trn(ji,jj,jk,jpdsi)=trn(ji,jj,jk,jpdsi) 310 & +tortds(ji,jj,jk)+respds(ji,jj,jk)+grazs(ji,jj,jk) 311 & -osil(ji,jj,jk)+grazss(ji,jj,jk) 312 C 313 END DO 314 END DO 315 END DO 316 317 DO jk = 1,jpkm1 318 DO jj = 1,jpj 319 DO ji = 1,jpi 320 C 321 C Evolution of biogenic diatom Iron 322 C --------------------------------- 323 C 324 trn(ji,jj,jk,jpdfe) = trn(ji,jj,jk,jpdfe) 325 & +prorca4(ji,jj,jk)*(1.-excret2)-grazsf(ji,jj,jk) 326 & -tortdf(ji,jj,jk)-respdf(ji,jj,jk)-grazf(ji,jj,jk) 327 C 328 C Evolution of biogenic nanophytoplankton Iron 329 C -------------------------------------------- 330 C 331 trn(ji,jj,jk,jpnfe) = trn(ji,jj,jk,jpnfe) 332 & +prorca5(ji,jj,jk)*(1.-excret)-graznf(ji,jj,jk) 333 & -tortnf(ji,jj,jk)-respnf(ji,jj,jk)-grazpf(ji,jj,jk) 334 C 335 C Evolution of dissolved Silica 336 C ----------------------------- 337 C 338 trn(ji,jj,jk,jpsil) = trn(ji,jj,jk,jpsil) 339 & -(1.-excret2)*prorca3(ji,jj,jk)+osil(ji,jj,jk) 340 C 341 END DO 342 END DO 343 END DO 344 C 345 C Evolution of calcite and silicates as a function of the two tracers 346 C ------------------------------------------------------------------- 347 C 348 DO jk = 1,jpkm1 349 DO jj = 1,jpj 350 DO ji = 1,jpi 351 C 352 prodt = prorca(ji,jj,jk)+prorca2(ji,jj,jk) 353 & -olimi(ji,jj,jk)-grarem(ji,jj,jk)*sigma1 354 & -grarem2(ji,jj,jk)*sigma2-denitr(ji,jj,jk) 355 356 prodca = pronew(ji,jj,jk)+pronew2(ji,jj,jk) 357 & -onitr(ji,jj,jk)+rdenit*denitr(ji,jj,jk) 358 C 359 C potential production of calcite and biogenic silicate 360 C ------------------------------------------------------ 361 C 362 prcaca(ji,jj,jk)= 363 & zfracal(ji,jj,jk)*(part*(unass*grazp(ji,jj,jk)+ 364 & unass2*grazn(ji,jj,jk))+tortp(ji,jj,jk)+respp(ji,jj,jk)) 365 C 366 C Consumption of Total (12C)O2 367 C ---------------------------- 368 C 369 trn(ji,jj,jk,jpdic) = trn(ji,jj,jk,jpdic) 370 & -prodt-prcaca(ji,jj,jk) 371 C 372 C Consumption of alkalinity due to ca++ uptake and increase 373 C of alkalinity due to nitrate consumption during organic 374 C soft tissue production 375 C --------------------------------------------------------- 376 C 377 trn(ji,jj,jk,jptal) = trn(ji,jj,jk,jptal) 378 & +rno3*prodca-2.*prcaca(ji,jj,jk) 379 END DO 380 END DO 381 END DO 382 C 383 DO jk = 1,jpkm1 384 DO jj = 1,jpj 385 DO ji = 1,jpi 386 C 387 C Production of calcite due to biological production 388 C -------------------------------------------------- 389 C 390 trn(ji,jj,jk,jpcal) = trn(ji,jj,jk,jpcal) 391 & +prcaca(ji,jj,jk) 392 END DO 393 END DO 394 ENDDO 395 C 396 C 397 C Loop to test if tracers concentrations fall below 0. 398 C ---------------------------------------------------- 399 C 400 C 401 znegtr(:,:,:) = 1. 402 C 403 DO jn = 1,jptra 404 DO jk = 1,jpk 405 DO jj = 1,jpj 406 DO ji = 1,jpi 407 if (trn(ji,jj,jk,jn).lt.0.) then 408 znegtr(ji,jj,jk)=0. 409 endif 410 END DO 411 END DO 412 END DO 413 END DO 414 C 415 DO jn = 1,jptra 416 trn(:,:,:,jn) = trb(:,:,:,jn)+ 417 & znegtr(:,:,:)*(trn(:,:,:,jn)-trb(:,:,:,jn)) 418 END DO 419 C 420 # if defined key_trc_dia3d 421 trc3d(:,:,:,4)=etot(:,:,:) 422 trc3d(:,:,:,5)=prorca(:,:,:)*znegtr(:,:,:)*1e3*rfact2r 423 trc3d(:,:,:,6)=prorca2(:,:,:)*znegtr(:,:,:)*1e3*rfact2r 424 trc3d(:,:,:,7)=pronew(:,:,:)*znegtr(:,:,:)*1e3*rfact2r 425 trc3d(:,:,:,8)=pronew2(:,:,:)*znegtr(:,:,:)*1e3*rfact2r 426 trc3d(:,:,:,9)=prorca3(:,:,:)*znegtr(:,:,:)*1e3*rfact2r 427 trc3d(:,:,:,10)=prorca4(:,:,:)*znegtr(:,:,:)*1e3*rfact2r 428 #if ! defined key_kriest 429 trc3d(:,:,:,11)=prorca5(:,:,:)*znegtr(:,:,:)*1e3*rfact2r 430 #else 431 trc3d(:,:,:,11)=prcaca(:,:,:)*znegtr(:,:,:)*1e3*rfact2r 432 #endif 433 # endif 434 C 435 #endif 436 C 437 RETURN 438 END 339 !!====================================================================== 340 !! Dummy module : No PISCES bio-model 341 !!====================================================================== 342 CONTAINS 343 SUBROUTINE p4z_bio ! Empty routine 344 END SUBROUTINE p4z_bio 345 #endif 346 347 !!====================================================================== 348 END MODULE p4zbio -
branches/dev_001_GM/NEMO/TOP_SRC/PISCES_SMS/p4zbio_kriest.h90
r774 r775 1 1 2 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 3 !CC p4zbio : PISCES MODEL - Kriest parameterization 4 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 2 5 3 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 4 CCC p4zbio : PISCES MODEL - Kriest parameterization 5 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 6 DO jk = 1, jpkm1 7 DO jj = 1, jpj 8 DO ji = 1, jpi 9 10 ! Evolution of DOC 11 ! ---------------- 12 trn(ji,jj,jk,jpdoc) = trn(ji,jj,jk,jpdoc) + orem(ji,jj,jk) & 13 & + excret2 * prorca2(ji,jj,jk) & 14 & + excret * prorca (ji,jj,jk) - olimi(ji,jj,jk) & 15 & - denitr(ji,jj,jk) & 16 & + grarem (ji,jj,jk) * (1.-sigma1) & 17 & + grarem2(ji,jj,jk) * (1.-sigma2) - xaggdoc(ji,jj,jk) 18 19 ! Evolution of Detritus 20 ! --------------------- 21 znumpoc = trn(ji,jj,jk,jpnum) / ( trn(ji,jj,jk,jppoc) + rtrn ) 22 znumdoc = znumpoc 6 23 7 DO jk = 1,jpkm1 8 DO jj = 1,jpj 9 DO ji = 1,jpi 10 C 11 C Evolution of DOC 12 C ---------------- 13 C 14 trn(ji,jj,jk,jpdoc) = trn(ji,jj,jk,jpdoc) 15 & +orem(ji,jj,jk)+excret2*prorca2(ji,jj,jk) 16 & +excret*prorca(ji,jj,jk)-olimi(ji,jj,jk)-denitr(ji,jj,jk) 17 & +grarem(ji,jj,jk)*(1.-sigma1)+grarem2(ji,jj,jk) 18 & *(1.-sigma2)-xaggdoc(ji,jj,jk) 19 END DO 20 END DO 24 trn(ji,jj,jk,jppoc) = trn(ji,jj,jk,jppoc) - grazpoc(ji,jj,jk) & 25 & + grapoc (ji,jj,jk) + grapoc2(ji,jj,jk) & 26 & - grazm (ji,jj,jk) + tortz2 (ji,jj,jk) & 27 & + respz (ji,jj,jk) + respz2 (ji,jj,jk) & 28 & + respp (ji,jj,jk) + respp2 (ji,jj,jk) & 29 & + tortp2 (ji,jj,jk) + tortz (ji,jj,jk) & 30 & + tortp (ji,jj,jk) - orem (ji,jj,jk) & 31 & + xaggdoc(ji,jj,jk) - grazffe(ji,jj,jk) 32 33 ! Evolution of number of aggregates 34 ! --------------------------------- 35 trn(ji,jj,jk,jpnum) = trn(ji,jj,jk,jpnum) - xagg(ji,jj,jk) & 36 & - ( orem(ji,jj,jk) + grazpoc(ji,jj,jk) ) * znumpoc & 37 & + ( tortp(ji,jj,jk) ) * xkr_nnano & 38 & + ( tortp2(ji,jj,jk) + respp(ji,jj,jk) + tortz(ji,jj,jk) & 39 & + grapoc(ji,jj,jk) - grazm(ji,jj,jk) & 40 & + respz(ji,jj,jk) ) * xkr_ndiat & 41 & + ( grapoc2(ji,jj,jk) + tortz2(ji,jj,jk) & 42 & + respz2 (ji,jj,jk) ) * xkr_nmeso & 43 & + respp2(ji,jj,jk) * xkr_naggr & 44 & + xaggdoc(ji,jj,jk) * znumdoc & 45 & - grazffe(ji,jj,jk) * znumpoc * wsbio4(ji,jj,jk) & 46 & / ( wsbio3(ji,jj,jk) + rtrn ) 47 48 trn(ji,jj,jk,jpnum) = MAX( trn(ji,jj,jk,jpnum), trn(ji,jj,jk,jppoc) / xkr_massp / xnumm(jk) ) 49 50 trn(ji,jj,jk,jpnum) = MIN( trn(ji,jj,jk,jpnum), trn(ji,jj,jk,jppoc) / xkr_massp / 1.1 ) 51 52 ! Evolution of biogenic Iron 53 ! -------------------------- 54 trn(ji,jj,jk,jpsfe) = trn(ji,jj,jk,jpsfe) + unass * ( grazpf(ji,jj,jk) + grazsf(ji,jj,jk) ) & 55 & - ( 1.- unass2 ) * grazpof(ji,jj,jk) - ( 1.- unass ) * grazmf(ji,jj,jk) & 56 & - ( 1.- unass2 ) * grazfff(ji,jj,jk) + unass2 * ( graznf(ji,jj,jk) & 57 & + grazf(ji,jj,jk) + ferat3 * grazz(ji,jj,jk) ) + ferat3 & 58 & * (tortz2(ji,jj,jk)+respz2(ji,jj,jk)+tortz(ji,jj,jk) & 59 & + respz(ji,jj,jk) ) - ofer(ji,jj,jk) + ( respnf(ji,jj,jk) & 60 & + tortnf(ji,jj,jk) ) + tortdf(ji,jj,jk) + respdf(ji,jj,jk) & 61 & + xbactfer(ji,jj,jk) + xscave(ji,jj,jk) * zdenom1(ji,jj,jk) 62 END DO 63 END DO 21 64 END DO 22 23 24 DO jk = 1,jpkm125 DO jj = 1,jpj26 DO ji = 1,jpi27 C28 C Evolution of Detritus29 C ---------------------30 C31 znumpoc=trn(ji,jj,jk,jpnum)/(trn(ji,jj,jk,jppoc)+rtrn)32 znumdoc=znumpoc33 34 trn(ji,jj,jk,jppoc) = trn(ji,jj,jk,jppoc)35 & -grazpoc(ji,jj,jk)36 & +grapoc(ji,jj,jk)+grapoc2(ji,jj,jk)37 & -grazm(ji,jj,jk)+tortz2(ji,jj,jk)38 & +respz(ji,jj,jk)+respz2(ji,jj,jk)39 & +respp(ji,jj,jk)+respp2(ji,jj,jk)40 & +tortp2(ji,jj,jk)+tortz(ji,jj,jk)41 & +tortp(ji,jj,jk)-orem(ji,jj,jk)42 & +xaggdoc(ji,jj,jk)-grazffe(ji,jj,jk)43 C44 C Evolution of number of aggregates45 C ---------------------------------46 C47 trn(ji,jj,jk,jpnum) = trn(ji,jj,jk,jpnum)48 & -xagg(ji,jj,jk)-(orem(ji,jj,jk)49 & +grazpoc(ji,jj,jk))*znumpoc50 & +(tortp(ji,jj,jk))*xkr_nnano51 & +(tortp2(ji,jj,jk)+respp(ji,jj,jk)+tortz(ji,jj,jk)52 & +grapoc(ji,jj,jk)-grazm(ji,jj,jk)53 & +respz(ji,jj,jk))*xkr_ndiat54 & +(grapoc2(ji,jj,jk)+tortz2(ji,jj,jk)55 & +respz2(ji,jj,jk))*xkr_nmeso56 & +respp2(ji,jj,jk)*xkr_naggr57 & +xaggdoc(ji,jj,jk)*znumdoc58 & -grazffe(ji,jj,jk)*znumpoc*wsbio4(ji,jj,jk)59 & /(wsbio3(ji,jj,jk)+rtrn)60 C61 trn(ji,jj,jk,jpnum) = max(trn(ji,jj,jk,jpnum),62 & trn(ji,jj,jk,jppoc)/xkr_massp/xnumm(jk))63 C64 trn(ji,jj,jk,jpnum) = min(trn(ji,jj,jk,jpnum),65 & trn(ji,jj,jk,jppoc)/xkr_massp/1.1)66 C67 68 END DO69 END DO70 END DO71 72 73 74 DO jk = 1,jpkm175 DO jj = 1,jpj76 DO ji = 1,jpi77 C78 C Evolution of biogenic Iron79 C --------------------------80 C81 trn(ji,jj,jk,jpsfe) = trn(ji,jj,jk,jpsfe)82 & +unass*(grazpf(ji,jj,jk)+grazsf(ji,jj,jk))83 & -(1.-unass2)*grazpof(ji,jj,jk)-(1.-unass)*grazmf(ji,jj,jk)84 & -(1.-unass2)*grazfff(ji,jj,jk)+unass2*(graznf(ji,jj,jk)85 & +grazf(ji,jj,jk)+ferat3*grazz(ji,jj,jk))+ferat386 & *(tortz2(ji,jj,jk)+respz2(ji,jj,jk)+tortz(ji,jj,jk)87 & +respz(ji,jj,jk))-ofer(ji,jj,jk)+(respnf(ji,jj,jk)88 & +tortnf(ji,jj,jk))+tortdf(ji,jj,jk)+respdf(ji,jj,jk)89 & +xbactfer(ji,jj,jk)+xscave(ji,jj,jk)*zdenom1(ji,jj,jk)90 END DO91 END DO92 END DO93 -
branches/dev_001_GM/NEMO/TOP_SRC/PISCES_SMS/p4zbio_std.h90
r774 r775 1 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC2 CCC p4zbio : PISCES MODEL - Standard parameterization3 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC1 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 2 !CC p4zbio : PISCES MODEL - Standard parameterization 3 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 4 4 5 DO jk = 1,jpkm1 6 DO jj = 1,jpj 7 DO ji = 1,jpi 8 C 9 C Evolution of DOC 10 C ---------------- 11 C 12 trn(ji,jj,jk,jpdoc) = trn(ji,jj,jk,jpdoc) 13 & +orem(ji,jj,jk)+excret2*prorca2(ji,jj,jk) 14 & +excret*prorca(ji,jj,jk)-olimi(ji,jj,jk)-denitr(ji,jj,jk) 15 & +grarem(ji,jj,jk)*(1.-sigma1)+grarem2(ji,jj,jk) 16 & *(1.-sigma2)-xaggdoc(ji,jj,jk)-xaggdoc2(ji,jj,jk) 17 END DO 18 END DO 5 DO jk = 1, jpkm1 6 7 ! Evolution of DOC 8 ! ---------------- 9 trn(:,:,jk,jpdoc) = trn(:,:,jk,jpdoc) + orem(:,:,jk) + excret2 * prorca2(:,:,jk) & 10 & + excret * prorca(:,:,jk) - olimi(:,:,jk) - denitr(:,:,jk) & 11 & + grarem(:,:,jk) * (1.-sigma1) + grarem2(:,:,jk) * (1.-sigma2) & 12 & - xaggdoc(:,:,jk) - xaggdoc2(:,:,jk) 13 14 ! Evolution of Detritus 15 ! --------------------- 16 trn(:,:,jk,jppoc) = trn(:,:,jk,jppoc) - grazpoc(:,:,jk) + grapoc(:,:,jk) - grazm (:,:,jk) & 17 & + respz (:,:,jk) - xagg (:,:,jk) + xaggdoc(:,:,jk) & 18 & + ( 1.-0.5 * zfracal(:,:,jk) ) * ( tortp(:,:,jk) + respp(:,:,jk) ) & 19 & + 0.5 * tortp2 (:,:,jk) & 20 & + orem2(:,:,jk) + tortz(:,:,jk) - orem(:,:,jk) 21 22 ! Evolution of rapid Detritus 23 ! --------------------------- 24 trn(:,:,jk,jpgoc) = trn(:,:,jk,jpgoc) + grapoc2(:,:,jk) + respp2(:,:,jk) + xagg (:,:,jk) & 25 & + tortz2 (:,:,jk) + respz2(:,:,jk) - orem2(:,:,jk) & 26 & + 0.5*zfracal(:,:,jk)*(respp(:,:,jk)+tortp(:,:,jk)) & 27 & + 0.5*tortp2(:,:,jk)+xaggdoc2(:,:,jk)-grazffe(:,:,jk) 28 29 ! Evolution of small biogenic Iron 30 ! -------------------------------- 31 trn(:,:,jk,jpsfe) = trn(:,:,jk,jpsfe) + unass * ( grazpf(:,:,jk) + grazsf(:,:,jk) ) & 32 & - grazpof(:,:,jk) - ( 1.- unass ) * grazmf(:,:,jk) & 33 & + ( 1.- 0.5 * zfracal(:,:,jk) ) * ( tortnf(:,:,jk) & 34 & + respnf(:,:,jk) ) + 0.5 * tortdf(:,:,jk) + ferat3 * & 35 & ( tortz(:,:,jk) + respz(:,:,jk) ) - ofer(:,:,jk) & 36 & + ofer2(:,:,jk) - xaggfe(:,:,jk) & 37 & + xscave(:,:,jk) * zdenom1(:,:,jk) 38 39 ! Evolution of big biogenic Iron 40 ! ------------------------------ 41 trn(:,:,jk,jpbfe) = trn(:,:,jk,jpbfe) + unass2 * ( graznf (:,:,jk) + grazf(:,:,jk) + grazfff(:,:,jk) & 42 & + grazpof(:,:,jk) + ferat3 * grazz(:,:,jk) ) & 43 & + ferat3 * ( tortz2 (:,:,jk) + respz2(:,:,jk) ) & 44 & - ofer2(:,:,jk) & 45 & + 0.5 * zfracal(:,:,jk) * ( respnf(:,:,jk) + tortnf(:,:,jk) ) & 46 & + 0.5 * tortdf (:,:,jk) + respdf(:,:,jk) + xaggfe(:,:,jk) & 47 & + xbactfer(:,:,jk) - grazfff(:,:,jk) + xscave(:,:,jk) * zdenom2(:,:,jk) 48 ! 19 49 END DO 20 21 DO jk = 1,jpkm122 DO jj = 1,jpj23 DO ji = 1,jpi24 C25 C Evolution of Detritus26 C ---------------------27 C28 trn(ji,jj,jk,jppoc) = trn(ji,jj,jk,jppoc)29 & -grazpoc(ji,jj,jk)+grapoc(ji,jj,jk)-grazm(ji,jj,jk)30 & +respz(ji,jj,jk)-xagg(ji,jj,jk)+xaggdoc(ji,jj,jk)31 & +(1.-0.5*zfracal(ji,jj,jk))*(tortp(ji,jj,jk)32 & +respp(ji,jj,jk))+0.5*tortp2(ji,jj,jk)33 & +orem2(ji,jj,jk)+tortz(ji,jj,jk)-orem(ji,jj,jk)34 C35 C Evolution of rapid Detritus36 C ---------------------37 C38 trn(ji,jj,jk,jpgoc) = trn(ji,jj,jk,jpgoc)39 & +grapoc2(ji,jj,jk)+respp2(ji,jj,jk)+xagg(ji,jj,jk)40 & +tortz2(ji,jj,jk)+respz2(ji,jj,jk)-orem2(ji,jj,jk)41 & +0.5*zfracal(ji,jj,jk)*(respp(ji,jj,jk)+tortp(ji,jj,jk))42 & +0.5*tortp2(ji,jj,jk)+xaggdoc2(ji,jj,jk)-grazffe(ji,jj,jk)43 C44 END DO45 END DO46 END DO47 48 49 50 DO jk = 1,jpkm151 DO jj = 1,jpj52 DO ji = 1,jpi53 C54 C Evolution of small biogenic Iron55 C --------------------------56 C57 trn(ji,jj,jk,jpsfe) = trn(ji,jj,jk,jpsfe)58 & +unass*(grazpf(ji,jj,jk)+grazsf(ji,jj,jk))59 & -grazpof(ji,jj,jk)-(1.-unass)*grazmf(ji,jj,jk)60 & +(1.-0.5*zfracal(ji,jj,jk))*(tortnf(ji,jj,jk)61 & +respnf(ji,jj,jk))+0.5*tortdf(ji,jj,jk)+ferat3*62 & (tortz(ji,jj,jk)+respz(ji,jj,jk))-ofer(ji,jj,jk)63 & +ofer2(ji,jj,jk)-xaggfe(ji,jj,jk)64 & +xscave(ji,jj,jk)*zdenom1(ji,jj,jk)65 C66 C Evolution of big biogenic Iron67 C --------------------------68 C69 trn(ji,jj,jk,jpbfe) = trn(ji,jj,jk,jpbfe)70 & +unass2*(graznf(ji,jj,jk)+grazf(ji,jj,jk)+grazfff(ji,jj,jk)71 & +grazpof(ji,jj,jk)+ferat3*grazz(ji,jj,jk))+ferat3*72 & (tortz2(ji,jj,jk)+respz2(ji,jj,jk))-ofer2(ji,jj,jk)73 & +0.5*zfracal(ji,jj,jk)*(respnf(ji,jj,jk)+tortnf(ji,jj,jk))74 & +0.5*tortdf(ji,jj,jk)+respdf(ji,jj,jk)+xaggfe(ji,jj,jk)75 & +xbactfer(ji,jj,jk)-grazfff(ji,jj,jk)+xscave(ji,jj,jk)76 & *zdenom2(ji,jj,jk)77 END DO78 END DO79 END DO80 -
branches/dev_001_GM/NEMO/TOP_SRC/PISCES_SMS/p4zche.F90
r774 r775 1 2 CCC $Header$ 3 CCC TOP 1.0 , LOCEAN-IPSL (2005) 4 C This software is governed by CeCILL licence see modipsl/doc/NEMO_CeCILL.txt 5 C --------------------------------------------------------------------------- 6 CDIR$ LIST 7 SUBROUTINE p4zche 8 #if defined key_top && defined key_pisces 9 CCC--------------------------------------------------------------------- 10 CCC 11 CCC ROUTINE p4zche : PISCES MODEL 12 CCC ***************************** 13 CCC 14 CCC PURPOSE. 15 CCC -------- 16 CCC *P4ZCHE* : Sea water chemistry computed following OCMIP protocol 17 CCC 18 CCC 19 CC EXTERNALS. 20 CC ---------- 21 CC rhop 22 CC 23 CC MODIFICATIONS: 24 CC -------------- 25 CC original : 1988 E. Maier-Reimer 26 CC additions : 1998 O. Aumont 27 CC modifications : 1999 C. Le Quere 28 CC modifications : 2004 O. Aumont 29 CC modifications : 2006 R. Gangsto 30 CC---------------------------------------------------------------------- 31 CC parameters and commons 32 CC ====================== 33 CDIR$ nolist 34 USE oce_trc 35 USE trp_trc 36 USE sms 37 IMPLICIT NONE 1 MODULE p4zche 2 !!====================================================================== 3 !! *** MODULE p4zche *** 4 !! TOP : PISCES Sea water chemistry computed following OCMIP protocol 5 !!====================================================================== 6 !! History : - ! 1988 (E. Maier-Reimer) Original code 7 !! - ! 1998 (O. Aumont) addition 8 !! - ! 1999 (C. Le Quere) modification 9 !! 1.0 ! 2004 (O. Aumont) modification 10 !! - ! 2006 (R. Gangsto) modification 11 !! 2.0 ! 2007-12 (C. Ethe, G. Madec) F90 12 !!---------------------------------------------------------------------- 13 #if defined key_pisces 14 !!---------------------------------------------------------------------- 15 !! 'key_pisces' PISCES bio-model 16 !!---------------------------------------------------------------------- 17 !! p4z_che : Sea water chemistry computed following OCMIP protocol 18 !!---------------------------------------------------------------------- 19 USE oce_trc ! 20 USE trp_trc ! 21 USE sms ! 22 23 IMPLICIT NONE 24 PRIVATE 25 26 PUBLIC p4z_che ! called in p4zprg.F90 27 28 !!* Substitution 38 29 #include "domzgr_substitute.h90" 39 CDIR$ list 40 CC---------------------------------------------------------------------- 41 CC local declarations 42 CC ================== 43 C 44 INTEGER ji, jj, jk 45 REAL tkel, sal, qtt, zbuf1, zbuf2 46 REAL pres, tc, cl, cpexp, cek0, oxy, cpexp2 47 REAL zsqrt, ztr, zlogt, cek1 48 REAL zqtt, qtt2, sal15, zis, zis2, zisqrt 49 REAL ckb, ck1, ck2, ckw, ak1, ak2, akb, aksp0, akw 50 REAL ckp1, ckp2, ckp3, cksi, akp1, akp2, akp3, aksi 51 REAL st, ft, cks, ckf, aks, akf, aksp1 52 53 C 54 C* 1. CHEMICAL CONSTANTS - SURFACE LAYER 55 C --------------------------------------- 56 C 57 DO jj = 1,jpj 58 DO ji = 1,jpi 59 C 60 C* 1.1 SET ABSOLUTE TEMPERATURE 61 C ------------------------------ 62 C 63 tkel = tn(ji,jj,1)+273.16 64 qtt = tkel*0.01 65 qtt2=qtt*qtt 66 sal = sn(ji,jj,1) + (1.-tmask(ji,jj,1))*35. 67 zqtt=log(qtt) 68 C 69 C* 1.2 LN(K0) OF SOLUBILITY OF CO2 (EQ. 12, WEISS, 1980) 70 C AND FOR THE ATMOSPHERE FOR NON IDEAL GAS 71 C ------------------------------------------------------- 72 C 73 cek0 = c00+c01/qtt+c02*zqtt+sal*(c03+c04*qtt+c05*qtt2) 74 cek1 = ca0+ca1/qtt+ca2*zqtt+ca3*qtt2+sal*(ca4 75 & +ca5*qtt+ca6*qtt2) 76 C 77 C* 1.3 LN(K0) OF SOLUBILITY OF O2 and N2 (EQ. 4, WEISS, 1970) 78 C ------------------------------------------------------------ 79 C 80 oxy = ox0+ox1/qtt+ox2*zqtt+sal*(ox3+ox4*qtt+ox5*qtt2) 81 C 82 C* 1.4 SET SOLUBILITIES OF O2 AND CO2 83 C ----------------------------------- 84 C 85 chemc(ji,jj,1) = exp(cek0)*1.E-6*rhop(ji,jj,1)/1000. 86 chemc(ji,jj,2) = exp(oxy)*oxyco 87 chemc(ji,jj,3) = exp(cek1)*1.E-6*rhop(ji,jj,1)/1000. 88 C 89 ENDDO 30 !!---------------------------------------------------------------------- 31 !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007) 32 !! $Header:$ 33 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 34 !!---------------------------------------------------------------------- 35 36 CONTAINS 37 38 SUBROUTINE p4z_che 39 !!--------------------------------------------------------------------- 40 !! *** ROUTINE p4z_che *** 41 !! 42 !! ** Purpose : Sea water chemistry computed following OCMIP protocol 43 !! 44 !! ** Method : - ... 45 !!--------------------------------------------------------------------- 46 INTEGER :: ji, jj, jk 47 REAL(wp) :: ztkel, zsal , zqtt , zbuf1 , zbuf2 48 REAL(wp) :: zpres, ztc , zcl , zcpexp, zcek0, zoxy , zcpexp2 49 REAL(wp) :: zsqrt, ztr , zlogt , zcek1 50 REAL(wp) :: zlqtt, zqtt2, zsal15, zis , zis2 , zisqrt 51 REAL(wp) :: zckb , zck1 , zck2 , zckw , zak1 , zak2 , zakb , zaksp0, zakw 52 REAL(wp) :: zckp1, zckp2, zckp3 , zcksi , zakp1, zakp2 , zakp3, zaksi 53 REAL(wp) :: zst , zft , zcks , zckf , zaks , zakf , zaksp1 54 !!--------------------------------------------------------------------- 55 56 ! CHEMICAL CONSTANTS - SURFACE LAYER 57 ! ---------------------------------- 58 59 DO jj = 1, jpj 60 DO ji = 1, jpi 61 62 ! ! SET ABSOLUTE TEMPERATURE 63 ztkel = tn(ji,jj,1) + 273.16 64 zqtt = ztkel * 0.01 65 zqtt2 = zqtt * zqtt 66 zsal = sn(ji,jj,1) + (1.- tmask(ji,jj,1) ) * 35. 67 zlqtt = LOG( zqtt ) 68 69 ! ! LN(K0) OF SOLUBILITY OF CO2 (EQ. 12, WEISS, 1980) 70 ! ! AND FOR THE ATMOSPHERE FOR NON IDEAL GAS 71 zcek0 = c00 + c01 / zqtt + c02 * zlqtt + zsal * ( c03 + c04 * zqtt + c05 * zqtt2 ) 72 zcek1 = ca0 + ca1 / zqtt + ca2 * zlqtt + ca3 * zqtt2 + zsal*( ca4 + ca5 * zqtt + ca6 * zqtt2 ) 73 74 ! ! LN(K0) OF SOLUBILITY OF O2 and N2 (EQ. 4, WEISS, 1970) 75 zoxy = ox0 + ox1 / zqtt + ox2 * zlqtt + zsal * ( ox3 + ox4 * zqtt + ox5 * zqtt2 ) 76 77 ! ! SET SOLUBILITIES OF O2 AND CO2 78 chemc(ji,jj,1) = EXP( zcek0 ) * 1.e-6 * rhop(ji,jj,1) / 1000. 79 chemc(ji,jj,2) = EXP( zoxy ) * oxyco 80 chemc(ji,jj,3) = EXP( zcek1 ) * 1.e-6 * rhop(ji,jj,1) / 1000. 81 82 END DO 90 83 END DO 91 C 92 C* 2 CHEMICAL CONSTANTS - DEEP OCEAN 93 C ------------------------------------- 94 C 95 DO jk = 1,jpk 96 DO jj = 1,jpj 97 DO ji = 1,jpi 98 C 99 C* 2.1 SET PRESSION 100 C ----------------- 101 C 102 pres = 1.025e-1*fsdept(ji,jj,jk) 103 C 104 C* 2.2 SET ABSOLUTE TEMPERATURE 105 C ------------------------------ 106 C 107 tkel = tn(ji,jj,jk)+273.16 108 qtt = tkel*0.01 109 sal = sn(ji,jj,jk) + (1.-tmask(ji,jj,jk))*35. 110 zsqrt = sqrt(sal) 111 sal15 = zsqrt*sal 112 zlogt = log(tkel) 113 ztr = 1./tkel 114 zis = 19.924*sal/(1000.-1.005*sal) 115 zis2 = zis*zis 116 zisqrt = sqrt(zis) 117 tc = tn(ji,jj,jk) + (1.-tmask(ji,jj,jk))*20. 118 C 119 C* 2.3 CHLORINITY (WOOSTER ET AL., 1969) 120 C --------------------------------------- 121 C 122 cl = sal*salchl 123 C 124 C* 2.4 TOTAL SULFATE CONCENTR. [MOLES/kg soln] 125 C -------------------------------------------- 126 C 127 st = st1*cl*st2 128 C 129 C* 2.5 TOTAL FLUORIDE CONCENTR. [MOLES/kg soln] 130 C --------------------------------------------- 131 C 132 ft = ft1*cl*ft2 133 C 134 C* 2.6 DISSOCIATION CONSTANT FOR SULFATES 135 C on free H scale (Dickson 1990) 136 C ------------------------------------------------------- 137 C 138 cks=exp(ks1*ztr+ks0+ks2*zlogt+(ks3*ztr+ks4+ks5*zlogt) 139 & *zisqrt+(ks6*ztr+ks7+ks8*zlogt)*zis+ks9*ztr*zis 140 & *zisqrt+ks10*ztr*zis2+log(ks11+ks12*sal)) 141 C 142 C* 2.7 DISSOCIATION CONSTANT FOR FLUORIDES 143 C on free H scale (Dickson and Riley 79) 144 C ------------------------------------------------------- 145 C 146 ckf=exp(kf1*ztr+kf0+kf2*zisqrt+log(kf3+kf4*sal)) 147 148 C 149 C* 2.4 DISSOCIATION CONSTANT FOR CARBONATE AND BORATE 150 C ------------------------------------------------------- 151 C 152 ckb = (cb0+cb1*zsqrt+cb2*sal+cb3*sal15+cb4*sal*sal)*ztr 153 & +(cb5+cb6*zsqrt+cb7*sal)+ 154 & (cb8+cb9*zsqrt+cb10*sal)*zlogt+cb11*zsqrt*tkel 155 & +log((1.+st/cks+ft/ckf)/(1.+st/cks)) 156 ck1 = c10*ztr+c11+c12*zlogt+c13*sal+c14*sal**2 157 ck2 = c20*ztr+c21+c22*sal+c23*sal**2 158 C 159 C* 2.5 PKW (H2O) (DICKSON AND RILEY, 1979) 160 C ----------------------------------------- 161 C 162 ckw = cw0*ztr+cw1+cw2*zlogt+(cw3*ztr+cw4+cw5*zlogt)* 163 & zsqrt+cw6*sal 164 165 C 166 C 167 C* 2.10 DISSOCIATION CONSTANT FOR PHOSPHATE AND SILICATE (seawater scale) 168 C --------------------------------------------------------------------- 169 C 170 ckp1 = cp10+cp11*ztr+cp12*zlogt+zsqrt*(cp13*ztr 171 & +cp14)+sal*(cp15*ztr+cp16) 172 ckp2 = cp20+cp21*ztr+cp22*zlogt+zsqrt*(cp23*ztr 173 & +cp24)+sal*(cp25*ztr+cp26) 174 ckp3 = cp30+cp31*ztr+zsqrt*(cp32*ztr 175 & +cp33)+sal*(cp34*ztr+cp35) 176 cksi = cs10+cs11*ztr+cs12*zlogt+zisqrt*(cs13*ztr 177 & +cs14)+zis*(cs15*ztr+cs16)+zis2*(cs17*ztr 178 & +cs18)+log(1.+cs19*sal) 179 & +log(cs20+cs21*sal) 180 181 C 182 C*2.7 APPARENT SOLUBILITY PRODUCT K'SP OF CALCITE IN SEAWATER 183 C (S=27-43, T=2-25 DEG C) AT pres =0 (ATMOSPH. PRESSURE) 184 C (MUCCI 1983) 185 C ------------------------------------------------------------- 186 C 187 aksp0 = akcc1+akcc2*tkel+akcc3*ztr+akcc4*log10(tkel)+ 188 & (akcc5+akcc6*tkel+ 189 & akcc7*ztr)*zsqrt+akcc8*sal+akcc9*sal15 190 191 192 C 193 C* 2.6 K1, K2 OF CARBONIC ACID, KB OF BORIC ACID, KW (H2O) (LIT.?) 194 C ----------------------------------------------------------------- 195 C 196 ak1 = 10**(ck1) 197 ak2 = 10**(ck2) 198 akb = exp(ckb) 199 akp1 = exp(ckp1) 200 akp2 = exp(ckp2) 201 akp3 = exp(ckp3) 202 aksi = exp(cksi) 203 akw = exp(ckw) 204 aksp1 = 10**(aksp0) 205 aks = exp(cks) 206 akf = exp(ckf) 207 208 209 C 210 C* 2.8 FORMULA FOR CPEXP AFTER EDMOND AND GIESKES (1970) 211 C (REFERENCE TO CULBERSON AND PYTKOQICZ (1968) AS MADE 212 C IN BROECKER ET AL. (1982) IS INCORRECT; HERE RGAS IS 213 C TAKEN TENFOLD TO CORRECT FOR THE NOTATION OF pres IN 214 C DBAR INSTEAD OF BAR AND THE EXPRESSION FOR CPEXP IS 215 C MULTIPLIED BY LN(10.) TO ALLOW USE OF EXP-FUNCTION 216 C WITH BASIS E IN THE FORMULA FOR AKSPP (CF. EDMOND 217 C AND GIESKES (1970), P. 1285 AND P. 1286 (THE SMALL 218 C FORMULA ON P. 1286 IS RIGHT AND CONSISTENT WITH THE 219 C SIGN IN PARTIAL MOLAR VOLUME CHANGE AS SHOWN ON 220 C P. 1285)) 221 C ----------------------------------------------------------- 222 C 223 cpexp = pres /(rgas*tkel) 224 cpexp2 = pres * pres/(rgas*tkel) 225 C 226 C* 2.9 KB OF BORIC ACID, K1,K2 OF CARBONIC ACID PRESSURE 227 C CORRECTION AFTER CULBERSON AND PYTKOWICZ (1968) 228 C (CF. BROECKER ET AL., 1982) 229 C -------------------------------------------------------- 230 C 231 zbuf1 = -(devk1(3)+devk2(3)*tc+devk3(3)*tc*tc) 232 zbuf2 = 0.5*(devk4(3)+devk5(3)*tc) 233 akb3(ji,jj,jk) = akb*exp(zbuf1*cpexp+zbuf2*cpexp2) 234 235 zbuf1 = -(devk1(1)+devk2(1)*tc+devk3(1)*tc*tc) 236 zbuf2 = 0.5*(devk4(1)+devk5(1)*tc) 237 ak13(ji,jj,jk) = ak1*exp(zbuf1*cpexp+zbuf2*cpexp2) 238 239 zbuf1 = -(devk1(2)+devk2(2)*tc+devk3(2)*tc*tc) 240 zbuf2 = 0.5*(devk4(2)+devk5(2)*tc) 241 ak23(ji,jj,jk) = ak2*exp(zbuf1*cpexp+zbuf2*cpexp2) 242 243 zbuf1 = -(devk1(4)+devk2(4)*tc+devk3(4)*tc*tc) 244 zbuf2 = 0.5*(devk4(4)+devk5(4)*tc) 245 akp13(ji,jj,jk) = akp1*exp(zbuf1*cpexp+zbuf2*cpexp2) 246 247 zbuf1 = -(devk1(5)+devk2(5)*tc+devk3(5)*tc*tc) 248 zbuf2 = 0.5*(devk4(5)+devk5(5)*tc) 249 akp23(ji,jj,jk) = akp2*exp(zbuf1*cpexp+zbuf2*cpexp2) 250 251 zbuf1 = -(devk1(6)+devk2(6)*tc+devk3(6)*tc*tc) 252 zbuf2 = 0.5*(devk4(6)+devk5(6)*tc) 253 akp33(ji,jj,jk) = akp3*exp(zbuf1*cpexp+zbuf2*cpexp2) 254 255 zbuf1 = -(devk1(7)+devk2(7)*tc+devk3(7)*tc*tc) 256 zbuf2 = 0.5*(devk4(7)+devk5(7)*tc) 257 akw3(ji,jj,jk) = akw*exp(zbuf1*cpexp+zbuf2*cpexp2) 258 259 C Ksi 260 C aksi3(ji,jj,jk) = aksi 261 C 262 C Or using coefficient of borates (cf millero 95+ corrected version html doc co2sys) 263 C "deltaVsi and deltaKsi have been estimated from the value of boric acid" 264 C 265 zbuf1 = -(devk1(3)+devk2(3)*tc+devk3(3)*tc*tc) 266 zbuf2 = 0.5*(devk4(3)+devk5(3)*tc) 267 aksi3(ji,jj,jk) = aksi*exp(zbuf1*cpexp+zbuf2*cpexp2) 268 269 C 270 C 271 C* 2.15 APPARENT SOLUBILITY PRODUCT K'SP OF CALCITE 272 C AS FUNCTION OF PRESSURE FOLLOWING MILLERO 273 C (P. 1285) AND BERNER (1976) 274 C ------------------------------------------------- 275 276 zbuf1 = -(devk1(8)+devk2(8)*tc+devk3(8)*tc*tc) 277 zbuf2 = 0.5*(devk4(8)+devk5(8)*tc) 278 aksp(ji,jj,jk) = aksp1*exp(zbuf1*cpexp+zbuf2*cpexp2) 279 280 C Pressure correction for sulfate and fluoride 281 C 282 zbuf1 = -(devk1(9)+devk2(9)*tc+devk3(9)*tc*tc) 283 zbuf2 = 0.5*(devk4(9)+devk5(9)*tc) 284 aks3(ji,jj,jk) = aks*exp(zbuf1*cpexp+zbuf2*cpexp2) 285 286 zbuf1 = -(devk1(10)+devk2(10)*tc+devk3(10)*tc*tc) 287 zbuf2 = 0.5*(devk4(10)+devk5(10)*tc) 288 akf3(ji,jj,jk) = akf*exp(zbuf1*cpexp+zbuf2*cpexp2) 289 290 291 C 292 C* 2.11 TOTAL BORATE CONCENTR. [MOLES/L] 293 C -------------------------------------- 294 C 295 borat(ji,jj,jk) = bor1*cl*bor2 296 C 297 C 2.12 Iron and SIO3 saturation concentration from ... 298 C ---------------------------------------------------- 299 C 300 sio3eq(ji,jj,jk)=exp(log(10.)*(6.44-968./tkel))*1E-6 301 fekeq(ji,jj,jk)=10**(17.27-1565.7/(273.15+tc)) 302 C 303 ENDDO 304 ENDDO 84 85 ! CHEMICAL CONSTANTS - DEEP OCEAN 86 ! ------------------------------- 87 88 DO jk = 1, jpk 89 DO jj = 1, jpj 90 DO ji = 1, jpi 91 92 ! SET PRESSION 93 zpres = 1.025e-1 * fsdept(ji,jj,jk) 94 95 ! SET ABSOLUTE TEMPERATURE 96 ztkel = tn(ji,jj,jk) + 273.16 97 zqtt = ztkel * 0.01 98 zsal = sn(ji,jj,jk) + ( 1.-tmask(ji,jj,jk) ) * 35. 99 zsqrt = SQRT( zsal ) 100 zsal15 = zsqrt * zsal 101 zlogt = LOG( ztkel ) 102 ztr = 1. / ztkel 103 zis = 19.924 * zsal / ( 1000.- 1.005 * zsal ) 104 zis2 = zis * zis 105 zisqrt = SQRT( zis ) 106 ztc = tn(ji,jj,jk) + ( 1.- tmask(ji,jj,jk) ) * 20. 107 108 ! CHLORINITY (WOOSTER ET AL., 1969) 109 zcl = zsal * salchl 110 111 ! TOTAL SULFATE CONCENTR. [MOLES/kg soln] 112 zst = st1 * zcl * st2 113 114 ! TOTAL FLUORIDE CONCENTR. [MOLES/kg soln] 115 zft = ft1 * zcl * ft2 116 117 ! DISSOCIATION CONSTANT FOR SULFATES on free H scale (Dickson 1990) 118 zcks = EXP( ks1 * ztr + ks0 + ks2 * zlogt & 119 & + ( ks3 * ztr + ks4 + ks5 * zlogt ) * zisqrt & 120 & + ( ks6 * ztr + ks7 + ks8 * zlogt ) * zis & 121 & + ks9 * ztr * zis * zisqrt + ks10 * ztr *zis2 + LOG( ks11 + ks12 *zsal ) ) 122 123 ! DISSOCIATION CONSTANT FOR FLUORIDES on free H scale (Dickson and Riley 79) 124 zckf = EXP( kf1 * ztr + kf0 + kf2 * zisqrt + LOG( kf3 + kf4 * zsal ) ) 125 126 ! DISSOCIATION CONSTANT FOR CARBONATE AND BORATE 127 zckb = ( cb0 + cb1 * zsqrt + cb2 * zsal + cb3 * zsal15 + cb4 * zsal * zsal ) * ztr & 128 & + ( cb5 + cb6 * zsqrt + cb7 * zsal ) & 129 & + ( cb8 + cb9 * zsqrt + cb10 * zsal ) * zlogt + cb11 * zsqrt * ztkel & 130 & + LOG( ( 1.+ zst / zcks + zft / zckf ) / ( 1.+ zst / zcks ) ) 131 !!gm zsal**2 to be replaced by a *... 132 zck1 = c10 * ztr + c11 + c12 * zlogt + c13 * zsal + c14 * zsal**2 133 zck2 = c20 * ztr + c21 + c22 * zsal + c23 * zsal**2 134 135 ! PKW (H2O) (DICKSON AND RILEY, 1979) 136 zckw = cw0 * ztr + cw1 + cw2 * zlogt + ( cw3 * ztr + cw4 + cw5 * zlogt ) * zsqrt + cw6 * zsal 137 138 ! DISSOCIATION CONSTANT FOR PHOSPHATE AND SILICATE (seawater scale) 139 zckp1 = cp10 + cp11 * ztr + cp12 * zlogt + zsqrt * ( cp13 * ztr + cp14 ) + zsal * ( cp15 * ztr + cp16 ) 140 zckp2 = cp20 + cp21 * ztr + cp22 * zlogt + zsqrt * ( cp23 * ztr + cp24 ) + zsal * ( cp25 * ztr + cp26 ) 141 zckp3 = cp30 + cp31 * ztr + zsqrt * ( cp32 * ztr + cp33 ) + zsal * ( cp34 * ztr + cp35 ) 142 zcksi = cs10 + cs11 * ztr + cs12 * zlogt + zisqrt* ( cs13 * ztr + cs14 ) + zis * ( cs15 * ztr + cs16 ) & 143 & + zis2 * ( cs17 * ztr + cs18 ) + LOG( 1. + cs19 * zsal ) & 144 & + LOG( cs20 + cs21 * zsal ) 145 146 ! APPARENT SOLUBILITY PRODUCT K'SP OF CALCITE IN SEAWATER 147 ! (S=27-43, T=2-25 DEG C) at pres =0 (atmos. pressure) (MUCCI 1983) 148 zaksp0 = akcc1 + akcc2 * ztkel + akcc3 * ztr + akcc4 * LOG10( ztkel ) & 149 & + ( akcc5 + akcc6 * ztkel + akcc7 * ztr ) * zsqrt + akcc8 * zsal + akcc9 * zsal15 150 151 ! K1, K2 OF CARBONIC ACID, KB OF BORIC ACID, KW (H2O) (LIT.?) 152 zak1 = 10**(zck1) 153 zak2 = 10**(zck2) 154 zakb = EXP( zckb ) 155 zakp1 = EXP( zckp1 ) 156 zakp2 = EXP( zckp2 ) 157 zakp3 = EXP( zckp3 ) 158 zaksi = EXP( zcksi ) 159 zakw = EXP( zckw ) 160 zaksp1 = 10**(zaksp0) 161 zaks = exp( zcks ) 162 zakf = exp( zckf ) 163 164 ! FORMULA FOR CPEXP AFTER EDMOND & GIESKES (1970) 165 ! (REFERENCE TO CULBERSON & PYTKOQICZ (1968) AS MADE 166 ! IN BROECKER ET AL. (1982) IS INCORRECT; HERE RGAS IS 167 ! TAKEN TENFOLD TO CORRECT FOR THE NOTATION OF pres IN 168 ! DBAR INSTEAD OF BAR AND THE EXPRESSION FOR CPEXP IS 169 ! MULTIPLIED BY LN(10.) TO ALLOW USE OF EXP-FUNCTION 170 ! WITH BASIS E IN THE FORMULA FOR AKSPP (CF. EDMOND 171 ! & GIESKES (1970), P. 1285-1286 (THE SMALL 172 ! FORMULA ON P. 1286 IS RIGHT AND CONSISTENT WITH THE 173 ! SIGN IN PARTIAL MOLAR VOLUME CHANGE AS SHOWN ON P. 1285)) 174 zcpexp = zpres /(rgas*ztkel) 175 zcpexp2 = zpres * zpres/(rgas*ztkel) 176 177 ! KB OF BORIC ACID, K1,K2 OF CARBONIC ACID PRESSURE 178 ! CORRECTION AFTER CULBERSON AND PYTKOWICZ (1968) 179 ! (CF. BROECKER ET AL., 1982) 180 zbuf1 = - ( devk1(3) + devk2(3) * ztc + devk3(3) * ztc * ztc ) 181 zbuf2 = 0.5 * ( devk4(3) + devk5(3) * ztc ) 182 akb3(ji,jj,jk) = zakb * EXP( zbuf1 * zcpexp + zbuf2 * zcpexp2 ) 183 184 zbuf1 = -(devk1(1)+devk2(1)*ztc+devk3(1)*ztc*ztc) 185 zbuf2 = 0.5*(devk4(1)+devk5(1)*ztc) 186 ak13(ji,jj,jk) = zak1 * EXP( zbuf1 * zcpexp + zbuf2 * zcpexp2 ) 187 188 zbuf1 = - ( devk1(2) + devk2(2) * ztc + devk3(2) * ztc * ztc ) 189 zbuf2 = 0.5 * ( devk4(2) + devk5(2) * ztc ) 190 ak23(ji,jj,jk) = zak2 * EXP( zbuf1 * zcpexp + zbuf2 * zcpexp2 ) 191 192 zbuf1 = - ( devk1(4) + devk2(4) * ztc + devk3(4) * ztc * ztc ) 193 zbuf2 = 0.5 * ( devk4(4) + devk5(4) * ztc ) 194 akp13(ji,jj,jk) = zakp1 * EXP( zbuf1 * zcpexp + zbuf2 * zcpexp2 ) 195 196 zbuf1 = - ( devk1(5) + devk2(5) * ztc + devk3(5) * ztc * ztc ) 197 zbuf2 = 0.5 * ( devk4(5) + devk5(5) * ztc ) 198 akp23(ji,jj,jk) = zakp2 * EXP( zbuf1 * zcpexp + zbuf2 * zcpexp2 ) 199 200 zbuf1 = - ( devk1(6) + devk2(6) * ztc + devk3(6) * ztc * ztc ) 201 zbuf2 = 0.5 * ( devk4(6) + devk5(6) * ztc ) 202 akp33(ji,jj,jk) = zakp3 * EXP( zbuf1 * zcpexp + zbuf2 * zcpexp2 ) 203 204 zbuf1 = - ( devk1(7) + devk2(7) * ztc + devk3(7) * ztc * ztc ) 205 zbuf2 = 0.5 * ( devk4(7) + devk5(7) * ztc ) 206 akw3(ji,jj,jk) = zakw * EXP( zbuf1 * zcpexp + zbuf2 * zcpexp2 ) 207 208 ! Ksi 209 ! aksi3(ji,jj,jk) = zaksi 210 ! 211 ! Or using coefficient of borates (cf millero 95+ corrected version html doc co2sys) 212 ! "deltaVsi and deltaKsi have been estimated from the value of boric acid" 213 zbuf1 = - ( devk1(3) + devk2(3) * ztc + devk3(3) * ztc * ztc ) 214 zbuf2 = 0.5 * ( devk4(3) + devk5(3) * ztc ) 215 aksi3(ji,jj,jk) = zaksi * EXP( zbuf1 * zcpexp + zbuf2 * zcpexp2 ) 216 217 ! APPARENT SOLUBILITY PRODUCT K'SP OF CALCITE 218 ! AS FUNCTION OF PRESSURE FOLLOWING MILLERO 219 ! (P. 1285) AND BERNER (1976) 220 zbuf1 = - ( devk1(8) + devk2(8) * ztc + devk3(8) * ztc * ztc ) 221 zbuf2 = 0.5 * ( devk4(8) + devk5(8) * ztc ) 222 aksp(ji,jj,jk) = zaksp1 * EXP( zbuf1 * zcpexp + zbuf2 * zcpexp2 ) 223 224 ! Pressure correction for sulfate and fluoride 225 zbuf1 = - ( devk1(9) + devk2(9) * ztc + devk3(9) * ztc * ztc ) 226 zbuf2 = 0.5 * ( devk4(9) + devk5(9) * ztc ) 227 aks3(ji,jj,jk) = zaks * EXP( zbuf1 * zcpexp + zbuf2 * zcpexp2 ) 228 229 zbuf1 = - ( devk1(10) + devk2(10) * ztc + devk3(10) * ztc * ztc ) 230 zbuf2 = 0.5 * ( devk4(10) + devk5(10) * ztc ) 231 akf3(ji,jj,jk) = zakf * EXP( zbuf1 * zcpexp + zbuf2 * zcpexp2 ) 232 233 ! TOTAL BORATE CONCENTR. [MOLES/L] 234 borat(ji,jj,jk) = bor1 * zcl * bor2 235 236 ! Iron and SIO3 saturation concentration from ... 237 sio3eq(ji,jj,jk) = EXP( LOG( 10.) * ( 6.44 - 968. / ztkel ) ) * 1.e-6 238 fekeq (ji,jj,jk) = 10**( 17.27 - 1565.7 / ( 273.15 + ztc ) ) 239 240 END DO 241 END DO 305 242 END DO 306 C 307 #endif 308 C 309 RETURN 310 END 243 ! 244 END SUBROUTINE p4z_che 245 246 #else 247 !!====================================================================== 248 !! Dummy module : No PISCES bio-model 249 !!====================================================================== 250 CONTAINS 251 SUBROUTINE p4z_che( kt ) ! Empty routine 252 INTEGER, INTENT( in ) :: kt 253 WRITE(*,*) 'p4z_che: You should not have seen this print! error?', kt 254 END SUBROUTINE p4z_che 255 #endif 256 257 !!====================================================================== 258 END MODULE p4zche -
branches/dev_001_GM/NEMO/TOP_SRC/PISCES_SMS/p4zday.F90
r774 r775 1 CCC$Header$ 2 CCC TOP 1.0 , LOCEAN-IPSL (2005) 3 C This software is governed by CeCILL licence see modipsl/doc/NEMO_CeCILL.txt 4 C --------------------------------------------------------------------------- 5 CDIR$ LIST 6 SUBROUTINE p4zday 7 #if defined key_top && defined key_pisces 8 CCC--------------------------------------------------------------------- 9 CCC 10 CCC ROUTINE p4zday : PISCES MODEL 11 CCC ***************************** 12 CCC 13 CCC PURPOSE : 14 CCC --------- 15 CCC PISCES : compute the day length depending on latitude 16 CCC and the day 17 CCC 18 CC INPUT : 19 CC ----- 20 CC argument 21 CC ktask : task identificator 22 CC common 23 CC all the common defined in opa 24 CC 25 CC 26 CC OUTPUT : : no 27 CC ------ 28 CC 29 CC EXTERNAL : 30 CC -------- 31 CC None 32 CC 33 CC MODIFICATIONS: 34 CC -------------- 35 CC original : E. Maier-Reimer (GBC 1993) 36 CC additions : C. Le Quere (1999) 37 CC modifications : O. Aumont (2004) 38 CC---------------------------------------------------------------------- 39 CC parameters and commons 40 CC ====================== 41 USE oce_trc 42 USE trp_trc 43 USE sms 44 IMPLICIT NONE 45 CC---------------------------------------------------------------------- 46 CC local declarations 47 CC ================== 48 INTEGER ji, jj, iyy 49 REAL rum, delta, codel, phi, argu 50 C 51 C Get year 52 C -------- 53 C 54 iyy = ndastp/10000 1 MODULE p4zday 2 !!====================================================================== 3 !! *** MODULE p4zday *** 4 !! TOP : PISCES compute the day length depending on latitude and the day 5 !!====================================================================== 6 !! History : - ! 1993 (E. Maier-Reimer) Original code GBC 1993 7 !! - ! 1999 (C. Le Quere) 8 !! 1.0 ! 2004 (O. Aumont) Original code 9 !! 2.0 ! 2007-12 (C. Ethe, G. Madec) F90 10 !!---------------------------------------------------------------------- 11 #if defined key_pisces 12 !!---------------------------------------------------------------------- 13 !! 'key_pisces' PISCES bio-model 14 !!---------------------------------------------------------------------- 15 !! p4z_day : compute the day length depending on latitude and the day 16 !!---------------------------------------------------------------------- 17 USE oce_trc ! 18 USE trp_trc ! 19 USE sms ! 55 20 56 IF(lwp) write(numout,*) 57 IF(lwp) write(numout,*) 'p4zday - Julian day ', nday_year 58 IF(lwp) write(numout,*) 21 IMPLICIT NONE 22 PRIVATE 23 24 PUBLIC p4z_day ! called in p4zprod.F90 25 26 !!* Substitution 27 # include "domzgr_substitute.h90" 28 !!---------------------------------------------------------------------- 29 !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007) 30 !! $Header:$ 31 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 32 !!---------------------------------------------------------------------- 33 34 CONTAINS 35 36 SUBROUTINE p4z_day 37 !!--------------------------------------------------------------------- 38 !! *** ROUTINE p4z_day *** 39 !! 40 !! ** Purpose : compute the day length depending on latitude and the day 41 !! 42 !! ** Method : - ??? 43 !!--------------------------------------------------------------------- 44 INTEGER :: ji, jj 45 INTEGER :: iyy 46 REAL(wp) :: zrum, zdelta, zcodel, zphi, zargu 47 !!--------------------------------------------------------------------- 48 49 ! Get year 50 ! -------- 51 52 iyy = ndastp / 10000 53 54 IF(lwp) write(numout,*) 55 IF(lwp) write(numout,*) 'p4zday : - Julian day ', nday_year 56 IF(lwp) write(numout,*) '~~~~~~' 59 57 60 58 61 IF (nleapy.EQ.1 .AND. MOD(iyy,4).EQ.0) THEN62 rum = FLOAT(nday_year-80)/366.59 IF( nleapy == 1 .AND. MOD( iyy, 4 ) == 0 ) THEN 60 zrum = FLOAT( nday_year - 80 ) / 366. 63 61 ELSE 64 rum = FLOAT(nday_year-80)/365.62 zrum = FLOAT( nday_year - 80 ) / 365. 65 63 ENDIF 66 64 67 C 68 delta = SIN(rum*rpi*2.)*sin(rpi*23.5/180.) 69 codel = asin(delta) 65 zdelta = SIN( zrum * rpi * 2. ) * sin( rpi * 23.5 / 180. ) 66 zcodel = ASIN( zdelta ) 70 67 71 DO jj = 1, jpj72 DO ji = 1,jpi73 phi = gphit(ji,jj)*rpi/180.74 argu = tan(codel)*tan(phi)75 strn(ji,jj) = 0.76 argu=min(1.,argu)77 argu=max(-1.,argu)78 strn(ji,jj)=24.-2.*acos(argu)*180./rpi/15.79 strn(ji,jj)=max(strn(ji,jj),0.)80 END DO68 DO jj = 1, jpj 69 DO ji = 1, jpi 70 zphi = gphit(ji,jj) * rpi / 180. 71 zargu = TAN( zcodel ) * TAN( zphi ) 72 strn(ji,jj) = 0.e0 73 zargu = MIN( 1., zargu ) 74 zargu = MAX( -1., zargu ) 75 strn(ji,jj) = 24.- 2.* ACOS( zargu ) * 180./ rpi / 15. 76 strn(ji,jj) = MAX( strn(ji,jj), 0.e0 ) 77 END DO 81 78 END DO 82 C 83 #endif 84 RETURN 85 END 79 ! 80 END SUBROUTINE p4z_day 81 82 #else 83 !!====================================================================== 84 !! Dummy module : No PISCES bio-model 85 !!====================================================================== 86 CONTAINS 87 SUBROUTINE p4z_day ! Empty routine 88 END SUBROUTINE p4z_day 89 #endif 90 91 !!====================================================================== 92 END MODULE p4zday -
branches/dev_001_GM/NEMO/TOP_SRC/PISCES_SMS/p4zdiat.F90
r774 r775 1 MODULE p4zdiat 2 !!====================================================================== 3 !! *** MODULE p4zdiat *** 4 !! TOP : PISCES Compute the mortality terms for diatoms 5 !!====================================================================== 6 !! History : 1.0 ! 2002 (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_diat : Compute the mortality terms for diatoms 14 !!---------------------------------------------------------------------- 15 USE oce_trc ! 16 USE trp_trc ! 17 USE sms ! 1 18 2 CCC $Header$ 3 CCC TOP 1.0 , LOCEAN-IPSL (2005) 4 C This software is governed by CeCILL licence see modipsl/doc/NEMO_CeCILL.txt 5 C --------------------------------------------------------------------------- 6 CDIR$ LIST 7 SUBROUTINE p4zdiat 8 #if defined key_top && defined key_pisces 9 CCC--------------------------------------------------------------------- 10 CCC 11 CCC ROUTINE p4zdiat : PISCES MODEL 12 CCC ****************************** 13 CCC 14 CCC PURPOSE : 15 CCC --------- 16 CCC Compute the mortality terms for diatoms 17 CCC 18 CC INPUT : 19 CC ----- 20 CC argument 21 CC None 22 CC common 23 CC all the common defined in opa 24 CC 25 CC 26 CC OUTPUT : : no 27 CC ------ 28 CC 29 CC EXTERNAL : 30 CC -------- 31 CC None 32 CC 33 CC MODIFICATIONS: 34 CC -------------- 35 CC original : O. Aumont (2002) 36 CC---------------------------------------------------------------------- 37 CC parameters and commons 38 CC ====================== 39 CDIR$ NOLIST 40 USE oce_trc 41 USE trp_trc 42 USE sms 43 IMPLICIT NONE 44 CDIR$ LIST 45 CC---------------------------------------------------------------------- 46 CC local declarations 47 CC ================== 48 INTEGER ji, jj, jk 49 REAL zfact,zstep,compadi 50 C 51 C Time step duration for biology 52 C ------------------------------ 53 C 54 zstep=rfact2/rjjss 55 C 56 C Aggregation term for diatoms is increased in case of nutrient 57 C stress as observed in reality. The stressed cells become more 58 C sticky and coagulate to sink quickly out of the euphotic zone 59 C ------------------------------------------------------------ 60 C 61 DO jk = 1,jpkm1 62 DO jj = 1,jpj 63 DO ji = 1,jpi 64 C 65 compadi = max((trn(ji,jj,jk,jpdia)-1E-8),0.) 66 zfact=1./(trn(ji,jj,jk,jpdia)+rtrn) 67 C 68 C Aggregation term for diatoms is increased in case of nutrient 69 C stress as observed in reality. The stressed cells become more 70 C sticky and coagulate to sink quickly out of the euphotic zone 71 C ------------------------------------------------------------ 72 C 73 respp2(ji,jj,jk) = 1E6*zstep 74 & *(wchl+wchld*(1.-xlimdia(ji,jj,jk))) 75 & *zdiss(ji,jj,jk)*compadi*trn(ji,jj,jk,jpdia) 76 # if defined key_off_degrad 77 & *facvol(ji,jj,jk) 78 # endif 19 IMPLICIT NONE 20 PRIVATE 21 22 PUBLIC p4z_diat ! called in p4zbio.F90 23 24 !!* Substitution 25 # include "domzgr_substitute.h90" 26 !!---------------------------------------------------------------------- 27 !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007) 28 !! $Header:$ 29 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 30 !!---------------------------------------------------------------------- 31 32 CONTAINS 33 34 SUBROUTINE p4z_diat 35 !!--------------------------------------------------------------------- 36 !! *** ROUTINE p4z_diat *** 37 !! 38 !! ** Purpose : Compute the mortality terms for diatoms 39 !! 40 !! ** Method : - ??? 41 !!--------------------------------------------------------------------- 42 INTEGER :: ji, jj, jk 43 REAL(wp) :: zfact, zstep, zcompadi 44 !!--------------------------------------------------------------------- 45 46 zstep = rfact2 / rjjss ! Time step duration for biology 47 48 49 ! Aggregation term for diatoms is increased in case of nutrient 50 ! stress as observed in reality. The stressed cells become more 51 ! sticky and coagulate to sink quickly out of the euphotic zone 52 ! ------------------------------------------------------------ 53 54 DO jk = 1, jpkm1 55 DO jj = 1, jpj 56 DO ji = 1, jpi 57 58 zcompadi = MAX( ( trn(ji,jj,jk,jpdia) - 1e-8), 0. ) 59 zfact = 1. / ( trn(ji,jj,jk,jpdia) + rtrn ) 60 61 ! Aggregation term for diatoms is increased in case of nutrient 62 ! stress as observed in reality. The stressed cells become more 63 ! sticky and coagulate to sink quickly out of the euphotic zone 64 ! ------------------------------------------------------------ 65 66 respp2 (ji,jj,jk) = 1.e6 * zstep * ( wchl + wchld * ( 1.- xlimdia(ji,jj,jk) ) ) & 67 # if defined key_off_degrad 68 & * facvol(ji,jj,jk) & 69 # endif 70 & * zdiss(ji,jj,jk) * zcompadi * trn(ji,jj,jk,jpdia) 79 71 80 respds(ji,jj,jk) = respp2(ji,jj,jk) 81 & *trn(ji,jj,jk,jpbsi)*zfact 72 respds (ji,jj,jk) = respp2(ji,jj,jk) * trn(ji,jj,jk,jpbsi) * zfact 82 73 83 respdf(ji,jj,jk) = respp2(ji,jj,jk) 84 & *trn(ji,jj,jk,jpdfe)*zfact 74 respdf (ji,jj,jk) = respp2(ji,jj,jk) * trn(ji,jj,jk,jpdfe) * zfact 85 75 86 respdch(ji,jj,jk)=respp2(ji,jj,jk) 87 & *trn(ji,jj,jk,jpdch)*zfact 88 C 89 C Phytoplankton mortality. 90 C ------------------------ 91 C 92 tortp2(ji,jj,jk) = mprat2*zstep*trn(ji,jj,jk,jpdia) 93 & /(xkmort+trn(ji,jj,jk,jpdia))*compadi 94 # if defined key_off_degrad 95 & *facvol(ji,jj,jk) 96 # endif 76 respdch(ji,jj,jk) = respp2(ji,jj,jk) * trn(ji,jj,jk,jpdch) * zfact 97 77 98 tortds(ji,jj,jk) = tortp2(ji,jj,jk) 99 & *trn(ji,jj,jk,jpbsi)*zfact 78 ! Phytoplankton mortality. 79 ! ------------------------ 80 tortp2 (ji,jj,jk) = mprat2 * zstep * trn(ji,jj,jk,jpdia) & 81 # if defined key_off_degrad 82 & * facvol(ji,jj,jk) & 83 # endif 84 & / ( xkmort + trn(ji,jj,jk,jpdia) ) * zcompadi 100 85 101 tortdf(ji,jj,jk)=tortp2(ji,jj,jk) 102 & *trn(ji,jj,jk,jpdfe)*zfact 86 tortds (ji,jj,jk) = tortp2(ji,jj,jk) * trn(ji,jj,jk,jpbsi) * zfact 103 87 104 tortdch(ji,jj,jk)=tortp2(ji,jj,jk) 105 & *trn(ji,jj,jk,jpdch)*zfact 106 C 88 tortdf (ji,jj,jk) = tortp2(ji,jj,jk) * trn(ji,jj,jk,jpdfe) * zfact 89 90 tortdch(ji,jj,jk) = tortp2(ji,jj,jk) * trn(ji,jj,jk,jpdch) * zfact 91 107 92 END DO 108 END DO 109 END DO 110 C 111 #endif 112 RETURN 113 END 93 END DO 94 END DO 95 ! 96 END SUBROUTINE p4z_diat 97 98 #else 99 !!====================================================================== 100 !! Dummy module : No PISCES bio-model 101 !!====================================================================== 102 CONTAINS 103 SUBROUTINE p4z_diat ! Empty routine 104 END SUBROUTINE p4z_diat 105 #endif 106 107 !!====================================================================== 108 END MODULE p4zdiat -
branches/dev_001_GM/NEMO/TOP_SRC/PISCES_SMS/p4zflx.F90
r774 r775 1 MODULE p4zflx 2 !!====================================================================== 3 !! *** MODULE p4zflx *** 4 !! TOP : PISCES CALCULATES GAS EXCHANGE AND CHEMISTRY AT SEA SURFACE 5 !!====================================================================== 6 !! History : - ! 1988-07 (E. MAIER-REIMER) Original code 7 !! - ! 1998 (O. Aumont) additions 8 !! - ! 1999 (C. Le Quere) modifications 9 !! 1.0 ! 2004 (O. Aumont) modifications 10 !! 2.0 ! 2007-12 (C. Ethe, G. Madec) F90 11 !!---------------------------------------------------------------------- 12 #if defined key_pisces 13 !!---------------------------------------------------------------------- 14 !! 'key_pisces' PISCES bio-model 15 !!---------------------------------------------------------------------- 16 !! p4z_flx : CALCULATES GAS EXCHANGE AND CHEMISTRY AT SEA SURFACE 17 !!---------------------------------------------------------------------- 18 USE oce_trc ! 19 USE trp_trc 20 USE sms 1 21 2 CCC $Header$ 3 CCC TOP 1.0 , LOCEAN-IPSL (2005) 4 C This software is governed by CeCILL licence see modipsl/doc/NEMO_CeCILL.txt 5 C --------------------------------------------------------------------------- 6 CDIR$ LIST 7 SUBROUTINE p4zflx 8 #if defined key_top && defined key_pisces 9 CCC--------------------------------------------------------------------- 10 CCC 11 CCC ROUTINE p4zflx : PISCES MODEL 12 CCC ***************************** 13 CCC 14 CCC 15 CC PURPOSE. 16 CC -------- 17 CC *P4ZFLX* CALCULATES GAS EXCHANGE AND CHEMISTRY AT SEA SURFACE 18 CC 19 CC EXTERNALS. 20 CC ---------- 21 CC NONE. 22 CC 23 CC MODIFICATIONS: 24 CC -------------- 25 CC original : 1988-07 E. MAIER-REIMER MPI HAMBURG 26 CC additions : 1998 O. Aumont 27 CC modifications : 1999 C. Le Quere 28 CC modifications : 2004 O. Aumont 29 CC ----------------------------------------------------------------- 30 CC parameters and commons 31 CC ====================== 32 CDIR$ NOLIST 33 USE oce_trc 34 USE trp_trc 35 USE sms 36 IMPLICIT NONE 37 #include "domzgr_substitute.h90" 38 CDIR$ LIST 39 CC---------------------------------------------------------------------- 40 CC local declarations 41 CC ================== 42 C 43 INTEGER nspyr, ji, jj, krorr 44 REAL zpdtan 45 REAL kgco2(jpi,jpj),kgo2(jpi,jpj),h2co3(jpi,jpj) 46 REAL ttc, ws 47 REAL fld, flu, oxy16, flu16, zfact 48 REAL zph,ah2,zbot,zdic,zalk,schmitto2, zalka 49 REAL schmittco2 50 C 51 C 52 C 1. ASSIGNATION TO EXPONENTS IN THE LISS AND MERLIVAT 53 C FORMULATION OF THE GAS EXCHANGE RATE 54 c ----------------------------------------------------- 55 C 22 IMPLICIT NONE 23 PRIVATE 24 25 PUBLIC p4z_flx ! called in p4zprg.F90 26 27 !!* Substitution 28 # include "domzgr_substitute.h90" 29 !!---------------------------------------------------------------------- 30 !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007) 31 !! $Header:$ 32 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 33 !!---------------------------------------------------------------------- 34 35 CONTAINS 36 37 SUBROUTINE p4z_flx 38 !!--------------------------------------------------------------------- 39 !! *** ROUTINE p4z_flx *** 40 !! 41 !! ** Purpose : CALCULATES GAS EXCHANGE AND CHEMISTRY AT SEA SURFACE 42 !! 43 !! ** Method : - ??? 44 !!--------------------------------------------------------------------- 45 INTEGER :: ji, jj, jrorr 46 REAL(wp) :: zpdtan, zttc, zws 47 REAL(wp) :: zfld, zflu, zoxy16, zflu16, zfact 48 REAL(wp) :: zph, zah2, zbot, zdic, zalk, zschmitto2, zalka, zschmittco2 49 REAL(wp), DIMENSION(jpi,jpj) :: zkgco2, zkgo2, zh2co3 50 !!--------------------------------------------------------------------- 51 52 ! ----------------------------------------------------- 53 ! ASSIGNATION TO EXPONENTS IN THE LISS AND MERLIVAT 54 ! FORMULATION OF THE GAS EXCHANGE RATE 55 ! ----------------------------------------------------- 56 56 57 zpdtan = raass / rdt 57 nspyr = nint(zpdtan)58 58 59 C 60 C* 1.1 SURFACE CHEMISTRY (PCO2 AND [H+] IN 61 C SURFACE LAYER); THE RESULT OF THIS CALCULATION 62 C IS USED TO COMPUTE AIR-SEA FLUX OF CO2 63 C --------------------------------------------------- 64 C 65 DO krorr = 1,10 66 C 67 DO jj = 1,jpj 68 DO ji = 1,jpi 69 C 70 C* 1.2 DUMMY VARIABLES FOR DIC, H+, AND BORATE 71 C -------------------------------------------- 72 C 73 zbot = borat(ji,jj,1) 74 zfact = rhop(ji,jj,1)/1000.+rtrn 75 zdic = trn(ji,jj,1,jpdic)/zfact 76 zph = max(hi(ji,jj,1),1.E-10)/zfact 77 zalka = trn(ji,jj,1,jptal)/zfact 78 C 79 C* 1.3 CALCULATE [ALK]([CO3--], [HCO3-]) 80 C ------------------------------------ 81 C 82 zalk=zalka- 83 & (akw3(ji,jj,1)/zph-zph+zbot/(1.+zph/akb3(ji,jj,1))) 84 C 85 C* 1.4 CALCULATE [H+] AND [H2CO3] 86 C ----------------------------------------- 87 C 88 ah2=sqrt((zdic-zalk)**2+4*(zalk*ak23(ji,jj,1) 89 & /ak13(ji,jj,1))*(2*zdic-zalk)) 90 ah2=0.5*ak13(ji,jj,1)/zalk*((zdic-zalk)+ah2) 91 h2co3(ji,jj) = (2*zdic-zalk)/(2.+ak13(ji,jj,1)/ah2)*zfact 92 hi(ji,jj,1) = ah2*zfact 93 END DO 94 END DO 59 ! SURFACE CHEMISTRY (PCO2 AND [H+] IN 60 ! SURFACE LAYER); THE RESULT OF THIS CALCULATION 61 ! IS USED TO COMPUTE AIR-SEA FLUX OF CO2 62 63 DO jrorr = 1, 10 64 65 DO jj = 1, jpj 66 DO ji = 1, jpi 67 68 ! DUMMY VARIABLES FOR DIC, H+, AND BORATE 69 zbot = borat(ji,jj,1) 70 zfact = rhop(ji,jj,1) / 1000. + rtrn 71 zdic = trn(ji,jj,1,jpdic) / zfact 72 zph = MAX( hi(ji,jj,1), 1.e-10 ) / zfact 73 zalka = trn(ji,jj,1,jptal) / zfact 74 75 ! CALCULATE [ALK]([CO3--], [HCO3-]) 76 zalk = zalka - ( akw3(ji,jj,1) / zph - zph + zbot / ( 1.+ zph / akb3(ji,jj,1) ) ) 77 78 ! CALCULATE [H+] AND [H2CO3] 79 zah2 = SQRT( (zdic-zalk)**2 + 4.* ( zalk * ak23(ji,jj,1) & 80 & / ak13(ji,jj,1) ) * ( 2.* zdic - zalk ) ) 81 zah2 = 0.5 * ak13(ji,jj,1) / zalk * ( ( zdic - zalk ) + zah2 ) 82 zh2co3(ji,jj) = ( 2.* zdic - zalk ) / ( 2.+ ak13(ji,jj,1) / zah2 ) * zfact 83 hi(ji,jj,1) = zah2 * zfact 84 END DO 85 END DO 95 86 END DO 96 C 97 C 98 C 2. COMPUTE FLUXES 99 C -------------- 100 C 101 C 2.1 FIRST COMPUTE GAS EXCHANGE COEFFICIENTS 102 C ------------------------------------------- 103 C 104 DO jj = 1,jpj 105 DO ji = 1,jpi 106 C 107 ttc = min(35.,tn(ji,jj,1)) 108 schmittco2=2073.1-125.62*ttc+3.6276*ttc**2 109 & -0.043126*ttc**3 110 ws=vatm(ji,jj) 111 C 112 C 2.2 COMPUTE GAS EXCHANGE FOR CO2 113 C -------------------------------- 114 C 115 kgco2(ji,jj) = (0.3*ws*ws + 2.5*(0.5246+ttc*(0.016256+ 116 & ttc*0.00049946)))*sqrt(660./schmittco2) 117 C 118 C 2.3 CONVERT TO m/s, and apply sea-ice cover 119 C ----------------------------------------------------- 120 C 121 kgco2(ji,jj) = kgco2(ji,jj)/(100.*3600.) 122 & *(1-freeze(ji,jj))*tmask(ji,jj,1) 123 # if defined key_off_degrad 124 & *facvol(ji,jj,1) 125 # endif 126 C 87 88 89 ! -------------- 90 ! COMPUTE FLUXES 91 ! -------------- 92 93 ! FIRST COMPUTE GAS EXCHANGE COEFFICIENTS 94 ! ------------------------------------------- 95 96 DO jj = 1, jpj 97 DO ji = 1, jpi 98 99 zttc = MIN( 35., tn(ji,jj,1) ) 100 !!gm optimisation & more precise computation with factorisation of the polynome 101 zschmittco2 = 2073.1 - 125.62 * zttc + 3.6276 * zttc**2 - 0.043126 * zttc**3 102 zws = vatm(ji,jj) 103 104 ! COMPUTE GAS EXCHANGE FOR CO2 105 zkgco2(ji,jj) = ( 0.3 * zws * zws & 106 & + 2.5 * ( 0.5246 + zttc * ( 0.016256 + zttc * 0.00049946 ) ) ) & 107 & * SQRT( 660./ zschmittco2 ) 108 109 ! CONVERT TO m/s, and apply sea-ice cover 110 zkgco2(ji,jj) = zkgco2(ji,jj) / ( 100. * 3600. ) & 111 # if defined key_off_degrad 112 & * facvol(ji,jj,1) & 113 # endif 114 & * ( 1.- freeze(ji,jj) ) * tmask(ji,jj,1) 115 127 116 END DO 128 END DO 129 C 130 C 2.5 COMPUTE GAS EXCHANGE COEFFICIENT FO O2 FROM 131 C Waninkhof EQUATIONS 132 C ----------------------------------------------- 133 C 134 DO jj = 1,jpj 135 DO ji = 1,jpi 136 C 137 ws = vatm(ji,jj) 138 ttc = min(35.,tn(ji,jj,1)) 139 schmitto2 = 1953.4-128.0*ttc+3.9918*ttc**2 140 & -0.050091*ttc**3 117 END DO 141 118 142 kgo2(ji,jj) = (0.3*ws*ws + 2.5*(0.5246+ttc*(0.016256+ 143 & ttc*0.00049946)))*sqrt(660./schmitto2) 119 ! COMPUTE GAS EXCHANGE COEFFICIENT FO O2 FROM Waninkhof EQUATIONS 120 DO jj = 1, jpj 121 DO ji = 1, jpi 144 122 145 C 146 C CONVERT TO m/s AND APPLY SEA ICE COVER 147 C ------------------------------------- 148 C 149 kgo2(ji,jj) = kgo2(ji,jj)/(100.*3600.) 150 & *(1-freeze(ji,jj))*tmask(ji,jj,1) 151 # if defined key_off_degrad 152 & *facvol(ji,jj,1) 153 # endif 154 C 155 ENDDO 156 ENDDO 157 C 158 DO jj = 1,jpj 159 DO ji = 1,jpi 160 C 161 C Compute CO2 flux for the sea and air 162 C ------------------------------------ 163 C 164 fld = atcco2*tmask(ji,jj,1)*chemc(ji,jj,3)*kgco2(ji,jj) 165 flu = h2co3(ji,jj)*tmask(ji,jj,1)*kgco2(ji,jj) 166 tra(ji,jj,1,jpdic)= tra(ji,jj,1,jpdic)+(fld-flu) 167 & /fse3t(ji,jj,1) 168 C 169 C Compute O2 flux 170 C --------------- 171 C 172 oxy16 = trn(ji,jj,1,jpoxy) 173 flu16 = (atcox*chemc(ji,jj,2)-oxy16)*kgo2(ji,jj) 174 tra(ji,jj,1,jpoxy) = tra(ji,jj,1,jpoxy)+flu16 175 & /fse3t(ji,jj,1) 176 C 177 C Save diagnostics 178 C ---------------- 179 C 180 # if defined key_trc_diaadd 181 trc2d(ji,jj,1) = (fld-flu)*1000. 182 trc2d(ji,jj,2) = flu16*1000. 183 trc2d(ji,jj,3) = kgco2(ji,jj) 184 trc2d(ji,jj,4) = atcco2-h2co3(ji,jj)/(chemc(ji,jj,3)+rtrn) 185 # endif 186 C 187 END DO 123 zws = vatm(ji,jj) 124 zttc = MIN( 35., tn(ji,jj,1) ) 125 !!gm optimisation & more precise computation with factorisation of the polynome 126 zschmitto2 = 1953.4 - 128.0 * zttc + 3.9918 * zttc**2 - 0.050091 * zttc**3 127 128 zkgo2(ji,jj) = ( 0.3 * zws * zws & 129 & + 2.5 * ( 0.5246 + zttc * ( 0.016256 + zttc * 0.00049946 ) ) ) & 130 & * SQRT( 660./ zschmitto2 ) 131 132 ! CONVERT TO m/s AND APPLY SEA ICE COVER 133 zkgo2(ji,jj) = zkgo2(ji,jj) / ( 100.*3600.) & 134 # if defined key_off_degrad 135 & * facvol(ji,jj,1) & 136 # endif 137 & * ( 1.- freeze(ji,jj) ) *tmask(ji,jj,1) 138 139 END DO 188 140 END DO 189 C 190 #endif 191 RETURN 192 END 141 142 DO jj = 1, jpj 143 DO ji = 1, jpi 144 145 ! Compute CO2 flux for the sea and air 146 zfld = atcco2 * tmask(ji,jj,1) * chemc(ji,jj,3) * zkgco2(ji,jj) 147 zflu = zh2co3(ji,jj) * tmask(ji,jj,1) * zkgco2(ji,jj) 148 tra(ji,jj,1,jpdic) = tra(ji,jj,1,jpdic) + ( zfld - zflu ) / fse3t(ji,jj,1) 149 150 ! Compute O2 flux 151 zoxy16 = trn(ji,jj,1,jpoxy) 152 zflu16 = ( atcox * chemc(ji,jj,2) - zoxy16 ) * zkgo2(ji,jj) 153 tra(ji,jj,1,jpoxy) = tra(ji,jj,1,jpoxy) + zflu16 / fse3t(ji,jj,1) 154 155 # if defined key_trc_diaadd 156 ! Save diagnostics 157 trc2d(ji,jj,1) = ( zfld - zflu ) * 1000. 158 trc2d(ji,jj,2) = zflu16 * 1000. 159 trc2d(ji,jj,3) = zkgco2(ji,jj) 160 trc2d(ji,jj,4) = atcco2 - zh2co3(ji,jj) / ( chemc(ji,jj,3) + rtrn ) 161 # endif 162 END DO 163 END DO 164 ! 165 END SUBROUTINE p4z_flx 166 167 #else 168 !!====================================================================== 169 !! Dummy module : No PISCES bio-model 170 !!====================================================================== 171 CONTAINS 172 SUBROUTINE p4z_flx( kt ) ! Empty routine 173 INTEGER, INTENT( in ) :: kt 174 WRITE(*,*) 'p4z_flx: You should not have seen this print! error?', kt 175 END SUBROUTINE p4z_flx 176 #endif 177 178 !!====================================================================== 179 END MODULE p4zflx -
branches/dev_001_GM/NEMO/TOP_SRC/PISCES_SMS/p4zint.F90
r774 r775 1 MODULE p4zint 2 !!====================================================================== 3 !! *** MODULE p4zint *** 4 !! TOP : PISCES interpolation and computation of various accessory fields 5 !!====================================================================== 6 !! History : 1.0 ! 2004-03 (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_int : interpolation and computation of various accessory fields 14 !!---------------------------------------------------------------------- 15 USE oce_trc ! 16 USE trp_trc 17 USE sms 1 18 2 CCC $Header$ 3 CCC TOP 1.0 , LOCEAN-IPSL (2005) 4 C This software is governed by CeCILL licence see modipsl/doc/NEMO_CeCILL.txt 5 C --------------------------------------------------------------------------- 6 CDIR$ LIST 7 SUBROUTINE p4zint(kt) 8 #if defined key_top && defined key_pisces 9 CCC 10 CCC 11 CCC ROUTINE p4zint : PISCES MODEL 12 CCC ***************************** 13 CCC 14 CC 15 CC PURPOSE : 16 CC --------- 17 CC *P4ZINT* INTERPOLATION AND COMPUTATION OF 18 CC VARIOUS ACCESSORY FIELDS 19 CC INPUT : 20 CC ----- 21 CC argument 22 CC kt : time step 23 CC 24 CC EXTERNAL : 25 CC ---------- 26 CC NONE 27 CC 28 CC MODIFICATIONS: 29 CC -------------- 30 CC original : 2004 O. Aumont 31 CC ---------------------------------------------------------------- 32 CC parameters and commons 33 CC ====================== 34 CDIR$ NOLIST 35 USE oce_trc 36 USE trp_trc 37 USE sms 38 IMPLICIT NONE 39 CDIR$ LIST 40 CC----------------------------------------------------------------- 41 CC------ 42 CC local declarations 43 CC ================== 44 C 45 INTEGER kt 46 INTEGER ji, jj 47 INTEGER iman 48 INTEGER nspyr,nvit1t,nvit2t 49 REAL zpdtan, zman, zpdtmo, zdemi 50 REAL zt, zdum 51 C 52 C 19 IMPLICIT NONE 20 PRIVATE 21 22 PUBLIC p4z_int ! called in p4zprg.F90 23 24 !!---------------------------------------------------------------------- 25 !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007) 26 !! $Header:$ 27 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 28 !!---------------------------------------------------------------------- 29 30 CONTAINS 31 32 SUBROUTINE p4z_int( kt ) 33 !!--------------------------------------------------------------------- 34 !! *** ROUTINE p4z_int *** 35 !! 36 !! ** Purpose : interpolation and computation of various accessory fields 37 !! 38 !! ** Method : - ??? 39 !!--------------------------------------------------------------------- 40 INTEGER, INTENT( in ) :: kt ! ocean time-step index 41 !! 42 INTEGER :: ji, jj 43 INTEGER :: iman, ivit1t, ivit2t 44 REAL(wp) :: zpdtan, zman, zpdtmo, zdemi 45 REAL(wp) :: zt, zdum 46 !!--------------------------------------------------------------------- 47 53 48 zpdtan = raass / rdt 54 nspyr = nint(zpdtan)55 49 zman = 12. 56 50 iman = 12 … … 59 53 zt = ( float ( kt) + zdemi) / zpdtmo 60 54 61 C recherche de l'indice des enregistrements 62 C du modele dynamique encadrant le pas de temps kt. 63 C -------------------------------------------------- 64 C 65 xtvit = zt - float(int ( zt)) 66 nvit1t = int (zt) 67 nvit2t = nvit1t+1 68 nvit1t = MOD ( nvit1t, iman) 69 IF ( nvit1t .EQ. 0 ) nvit1t = iman 70 nvit2t = MOD ( nvit2t, iman) 71 IF ( nvit2t .EQ. 0 ) nvit2t = iman 72 C 73 C Interpolation of dust deposition 74 C -------------------------------- 75 C 76 dust(:,:) = (1.-xtvit)*dustmo(:,:,nvit1t) 77 $ +xtvit*dustmo(:,:,nvit2t) 78 C 79 C 80 C Computation of phyto and zoo metabolic rate 81 C ------------------------------------------- 82 C 55 ! recherche de l indice des enregistrements 56 ! du modele dynamique encadrant le pas de temps kt. 57 ! -------------------------------------------------- 83 58 84 Tgfunc(:,:,:) = exp(0.063913*tn(:,:,:)) 85 Tgfunc2(:,:,:) = exp(0.07608*tn(:,:,:)) 86 C 87 C Computation of the silicon dependant half saturation 88 C constant for silica uptake 89 C --------------------------------------------------- 90 C 91 DO ji=1,jpi 92 DO jj=1,jpj 93 zdum=trn(ji,jj,1,jpsil)**2 94 xksimax(ji,jj) = max(xksimax(ji,jj),(1.+7.*zdum 95 & /(xksi2*xksi2*25.+zdum))*1E-6) 96 END DO 97 END DO 98 C 99 IF (nday_year.EQ.365) THEN 100 xksi=xksimax 101 xksimax=0. 102 ENDIF 103 C 104 #endif 105 C 106 RETURN 107 END 59 xtvit = zt - FLOAT( INT( zt ) ) 60 ivit1t = INT( zt ) 61 ivit2t = ivit1t + 1 62 ivit1t = MOD ( ivit1t, iman ) 63 IF( ivit1t == 0 ) ivit1t = iman 64 ivit2t = MOD ( ivit2t, iman ) 65 IF( ivit2t == 0 ) ivit2t = iman 66 67 ! Interpolation of dust deposition 68 ! -------------------------------- 69 70 dust(:,:) = ( 1.- xtvit ) * dustmo(:,:,ivit1t) + xtvit * dustmo(:,:,ivit2t) 71 72 ! Computation of phyto and zoo metabolic rate 73 ! ------------------------------------------- 74 75 Tgfunc (:,:,:) = EXP( 0.063913 * tn(:,:,:) ) 76 Tgfunc2(:,:,:) = EXP( 0.07608 * tn(:,:,:) ) 77 78 ! Computation of the silicon dependant half saturation 79 ! constant for silica uptake 80 ! --------------------------------------------------- 81 82 DO ji = 1, jpi 83 DO jj = 1, jpj 84 zdum = trn(ji,jj,1,jpsil) * trn(ji,jj,1,jpsil) 85 xksimax(ji,jj) = MAX( xksimax(ji,jj), ( 1.+ 7.* zdum / ( xksi2 * xksi2 * 25. + zdum ) ) * 1e-6 ) 86 END DO 87 END DO 88 89 IF( nday_year == 365 ) THEN 90 xksi = xksimax 91 xksimax = 0.e0 92 ENDIF 93 ! 94 END SUBROUTINE p4z_int 95 96 #else 97 !!====================================================================== 98 !! Dummy module : No PISCES bio-model 99 !!====================================================================== 100 CONTAINS 101 SUBROUTINE p4z_int( kt ) ! Empty routine 102 INTEGER, INTENT( in ) :: kt 103 WRITE(*,*) 'p4z_int: You should not have seen this print! error?', kt 104 END SUBROUTINE p4z_int 105 #endif 106 107 !!====================================================================== 108 END MODULE p4zint -
branches/dev_001_GM/NEMO/TOP_SRC/PISCES_SMS/p4zlim.F90
r774 r775 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 : 14 !!---------------------------------------------------------------------- 15 USE oce_trc ! 16 USE trp_trc ! 17 USE sms ! 1 18 2 CCC $Header$ 3 CCC TOP 1.0 , LOCEAN-IPSL (2005) 4 C This software is governed by CeCILL licence see modipsl/doc/NEMO_CeCILL.txt 5 C --------------------------------------------------------------------------- 6 CDIR$ LIST 7 SUBROUTINE p4zlim 8 #if defined key_top && defined key_pisces 9 CCC--------------------------------------------------------------------- 10 CCC 11 CCC ROUTINE p4zlim : PISCES MODEL 12 CCC ***************************** 13 CCC 14 CCC PURPOSE : 15 CCC --------- 16 CCC Compute the co-limitations by the various nutrients 17 CCC for the various phytoplankton species 18 CCC 19 CC INPUT : 20 CC ----- 21 CC argument 22 CC None 23 CC common 24 CC all the common defined in opa 25 CC 26 CC 27 CC OUTPUT : : no 28 CC ------ 29 CC 30 CC MODIFICATIONS: 31 CC -------------- 32 CC original : O. Aumont (2004) 33 CC---------------------------------------------------------------------- 34 CC parameters and commons 35 CC ====================== 36 CDIR$ NOLIST 37 USE oce_trc 38 USE trp_trc 39 USE sms 40 IMPLICIT NONE 41 #include "domzgr_substitute.h90" 42 CDIR$ LIST 43 CC---------------------------------------------------------------------- 44 CC local declarations 45 CC ================== 46 INTEGER ji, jj, jk 47 REAL xlim1,xlim2,xlim3,xlim4,zno3,zferlim 48 REAL xconctemp,xconctemp2,xconctempn,xconctempn2 49 C 50 C Tuning of the iron concentration to a minimum 51 C level that is set to the detection limit 52 C ------------------------------------- 53 C 54 do jk=1,jpk 55 do jj=1,jpj 56 do ji=1,jpi 57 zno3=trn(ji,jj,jk,jpno3)*1E6 58 zferlim=max(1.5E-11*(zno3/40)**2,3E-12) 59 zferlim=min(zferlim,1.5E-11) 60 trn(ji,jj,jk,jpfer)=max(trn(ji,jj,jk,jpfer),zferlim) 61 end do 62 end do 63 end do 64 C 65 C Computation of a variable Ks for iron on diatoms 66 C taking into account that increasing biomass is 67 C made of generally bigger cells 68 C ------------------------------------------------ 69 C 70 DO jk=1,jpkm1 71 DO jj=1,jpj 72 DO ji=1,jpi 73 xconctemp=max(0.,trn(ji,jj,jk,jpdia)-5E-7) 74 xconctemp2=min(5.E-7,trn(ji,jj,jk,jpdia)) 75 xconctempn=max(0.,trn(ji,jj,jk,jpphy)-1E-6) 76 xconctempn2=min(1.E-6,trn(ji,jj,jk,jpphy)) 77 concdfe(ji,jj,jk)=(xconctemp2*conc3+0.4E-9* 78 . xconctemp)/(xconctemp2+xconctemp+rtrn) 79 concdfe(ji,jj,jk)=max(conc3,concdfe(ji,jj,jk)) 80 concnfe(ji,jj,jk)=(xconctempn2*conc2+0.08E-9* 81 . xconctempn)/(xconctempn2+xconctempn+rtrn) 82 concnfe(ji,jj,jk)=max(conc2,concnfe(ji,jj,jk)) 19 IMPLICIT NONE 20 PRIVATE 21 22 PUBLIC p4z_lim ! called in p4zprg.F90 23 24 !!* Substitution 25 # include "domzgr_substitute.h90" 26 !!---------------------------------------------------------------------- 27 !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007) 28 !! $Header:$ 29 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 30 !!---------------------------------------------------------------------- 31 32 CONTAINS 33 34 SUBROUTINE p4z_lim 35 !!--------------------------------------------------------------------- 36 !! *** ROUTINE p4z_lim *** 37 !! 38 !! ** Purpose : Compute the co-limitations by the various nutrients 39 !! for the various phytoplankton species 40 !! 41 !! ** Method : - ??? 42 !!--------------------------------------------------------------------- 43 INTEGER :: ji, jj, jk 44 REAL(wp) :: zlim1, zlim2, zlim3, zlim4, zno3, zferlim 45 REAL(wp) :: zconctemp, zconctemp2, zconctempn, zconctempn2 46 !!--------------------------------------------------------------------- 47 48 ! Tuning of the iron concentration to a minimum 49 ! level that is set to the detection limit 50 ! ------------------------------------- 51 52 DO jk = 1, jpk 53 DO jj = 1, jpj 54 DO ji = 1, jpi 55 zno3 = trn(ji,jj,jk,jpno3) * 1.e6 56 zferlim = MAX( 1.5e-11*(zno3/40)**2, 3e-12 ) 57 zferlim = MIN( zferlim, 1.5e-11 ) 58 trn(ji,jj,jk,jpfer) = MAX( trn(ji,jj,jk,jpfer), zferlim ) 83 59 END DO 84 END DO 85 END DO 86 C 87 DO jk = 1,jpkm1 88 DO jj = 1,jpj 89 DO ji = 1,jpi 90 C 91 C Michaelis-Menten Limitation term for nutrients 92 C Small flagellates 93 C ----------------------------------------------- 94 C 95 xnanono3(ji,jj,jk)=trn(ji,jj,jk,jpno3)*concnnh4 96 & /(conc0*concnnh4+concnnh4*trn(ji,jj,jk,jpno3)+ 97 & conc0*trn(ji,jj,jk,jpnh4)) 98 xnanonh4(ji,jj,jk)=trn(ji,jj,jk,jpnh4)*conc0 99 & /(conc0*concnnh4+concnnh4*trn(ji,jj,jk,jpno3)+ 100 & conc0*trn(ji,jj,jk,jpnh4)) 101 xlim1=xnanono3(ji,jj,jk)+xnanonh4(ji,jj,jk) 102 xlim2=trn(ji,jj,jk,jppo4)/(trn(ji,jj,jk,jppo4)+concnnh4) 103 xlim3=trn(ji,jj,jk,jpfer)/(trn(ji,jj,jk,jpfer) 104 & +concnfe(ji,jj,jk)) 105 xlimphy(ji,jj,jk)=min(xlim1,xlim2,xlim3) 106 xlim1=trn(ji,jj,jk,jpnh4)/(concnnh4+trn(ji,jj,jk,jpnh4)) 107 xlim3=trn(ji,jj,jk,jpfer)/(trn(ji,jj,jk,jpfer)+conc2) 108 xlim4=trn(ji,jj,jk,jpdoc)/(trn(ji,jj,jk,jpdoc)+xkdoc2) 109 xlimbac(ji,jj,jk)=min(xlim1,xlim2,xlim3)*xlim4 110 C 60 END DO 61 END DO 62 63 ! Computation of a variable Ks for iron on diatoms 64 ! taking into account that increasing biomass is 65 ! made of generally bigger cells 66 ! ------------------------------------------------ 67 68 DO jk = 1, jpkm1 69 DO jj = 1, jpj 70 DO ji = 1, jpi 71 zconctemp = MAX( 0.e0 , trn(ji,jj,jk,jpdia)-5e-7 ) 72 zconctemp2 = MIN( 5.e-7, trn(ji,jj,jk,jpdia) ) 73 zconctempn = MAX( 0.e0 , trn(ji,jj,jk,jpphy)-1e-6 ) 74 zconctempn2 = MIN( 1.e-6, trn(ji,jj,jk,jpphy) ) 75 concdfe(ji,jj,jk) = ( zconctemp2 * conc3 + 0.4e-9 * zconctemp) & 76 & / ( zconctemp2 + zconctemp + rtrn ) 77 concdfe(ji,jj,jk) = MAX( conc3, concdfe(ji,jj,jk) ) 78 concnfe(ji,jj,jk) = ( zconctempn2 * conc2 + 0.08e-9 * zconctempn) & 79 & / ( zconctempn2 + zconctempn + rtrn ) 80 concnfe(ji,jj,jk) = MAX( conc2, concnfe(ji,jj,jk) ) 111 81 END DO 112 END DO 113 END DO 114 C 115 DO jk = 1,jpkm1 116 DO jj = 1,jpj 117 DO ji = 1,jpi 118 C 119 C Michaelis-Menten Limitation term for nutrients 120 C Diatoms 121 C ---------------------------------------------- 122 C 123 xdiatno3(ji,jj,jk)=trn(ji,jj,jk,jpno3)*concdnh4 124 & /(conc1*concdnh4+concdnh4*trn(ji,jj,jk,jpno3)+ 125 & conc1*trn(ji,jj,jk,jpnh4)) 126 xdiatnh4(ji,jj,jk)=trn(ji,jj,jk,jpnh4)*conc1 127 & /(conc1*concdnh4+concdnh4*trn(ji,jj,jk,jpno3)+ 128 & conc1*trn(ji,jj,jk,jpnh4)) 82 END DO 83 END DO 129 84 130 xlim1=xdiatno3(ji,jj,jk)+xdiatnh4(ji,jj,jk) 131 xlim2=trn(ji,jj,jk,jppo4)/(trn(ji,jj,jk,jppo4)+concdnh4) 132 xlim3=trn(ji,jj,jk,jpsil)/(trn(ji,jj,jk,jpsil)+xksi(ji,jj)) 133 xlim4=trn(ji,jj,jk,jpfer)/(trn(ji,jj,jk,jpfer) 134 & +concdfe(ji,jj,jk)) 135 xlimdia(ji,jj,jk)=min(xlim1,xlim2,xlim3,xlim4) 136 C 85 DO jk = 1, jpkm1 86 DO jj = 1, jpj 87 DO ji = 1, jpi 88 89 ! Michaelis-Menten Limitation term for nutrients 90 ! Small flagellates 91 ! ----------------------------------------------- 92 93 xnanono3(ji,jj,jk) = trn(ji,jj,jk,jpno3) * concnnh4 & 94 & / ( conc0 * concnnh4 + concnnh4 * trn(ji,jj,jk,jpno3) & 95 & + conc0 * trn(ji,jj,jk,jpnh4) ) 96 xnanonh4(ji,jj,jk) = trn(ji,jj,jk,jpnh4) * conc0 & 97 & / ( conc0 * concnnh4 + concnnh4 * trn(ji,jj,jk,jpno3) & 98 & + conc0 * trn(ji,jj,jk,jpnh4) ) 99 zlim1 = xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) 100 zlim2 = trn(ji,jj,jk,jppo4) / ( trn(ji,jj,jk,jppo4) + concnnh4 ) 101 zlim3 = trn(ji,jj,jk,jpfer) / ( trn(ji,jj,jk,jpfer) + concnfe(ji,jj,jk) ) 102 xlimphy(ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) 103 zlim1 = trn(ji,jj,jk,jpnh4) / ( concnnh4 + trn(ji,jj,jk,jpnh4) ) 104 zlim3 = trn(ji,jj,jk,jpfer) / ( conc2 + trn(ji,jj,jk,jpfer) ) 105 zlim4 = trn(ji,jj,jk,jpdoc) / ( xkdoc2 + trn(ji,jj,jk,jpdoc) ) 106 xlimbac(ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) * zlim4 107 137 108 END DO 138 END DO 139 END DO 140 C 141 #endif 142 RETURN 143 END 109 END DO 110 END DO 111 112 DO jk = 1, jpkm1 113 DO jj = 1, jpj 114 DO ji = 1, jpi 115 116 ! Michaelis-Menten Limitation term for nutrients Diatoms 117 ! ---------------------------------------------- 118 119 xdiatno3(ji,jj,jk) = trn(ji,jj,jk,jpno3) * concdnh4 & 120 & / ( conc1 * concdnh4 + concdnh4 * trn(ji,jj,jk,jpno3) & 121 & + conc1 * trn(ji,jj,jk,jpnh4) ) 122 xdiatnh4(ji,jj,jk) = trn(ji,jj,jk,jpnh4) * conc1 & 123 & / ( conc1 * concdnh4 + concdnh4 * trn(ji,jj,jk,jpno3) & 124 & + conc1 * trn(ji,jj,jk,jpnh4) ) 125 126 zlim1 = xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) 127 zlim2 = trn(ji,jj,jk,jppo4) / ( trn(ji,jj,jk,jppo4) + concdnh4 ) 128 zlim3 = trn(ji,jj,jk,jpsil) / ( trn(ji,jj,jk,jpsil) + xksi (ji,jj) ) 129 zlim4 = trn(ji,jj,jk,jpfer) / ( trn(ji,jj,jk,jpfer) + concdfe(ji,jj,jk) ) 130 xlimdia(ji,jj,jk) = MIN( zlim1, zlim2, zlim3, zlim4 ) 131 132 END DO 133 END DO 134 END DO 135 ! 136 END SUBROUTINE p4z_lim 137 138 #else 139 !!====================================================================== 140 !! Dummy module : No PISCES bio-model 141 !!====================================================================== 142 CONTAINS 143 SUBROUTINE p4z_lim ! Empty routine 144 END SUBROUTINE p4z_lim 145 #endif 146 147 !!====================================================================== 148 END MODULE p4zlim -
branches/dev_001_GM/NEMO/TOP_SRC/PISCES_SMS/p4zlys.F90
r774 r775 1 MODULE p4zlys 2 !!====================================================================== 3 !! *** MODULE p4zlys *** 4 !! TOP : PISCES 5 !!====================================================================== 6 !! History : - ! 1988-07 (E. MAIER-REIMER) Original code 7 !! - ! 1998 (O. Aumont) additions 8 !! - ! 1999 (C. Le Quere) modifications 9 !! 1.0 ! 2004 (O. Aumont) modifications 10 !! 2.0 ! 2007-12 (C. Ethe, G. Madec) F90 11 !!---------------------------------------------------------------------- 12 #if defined key_pisces 13 !!---------------------------------------------------------------------- 14 !! 'key_pisces' PISCES bio-model 15 !!---------------------------------------------------------------------- 16 !! p4z_lys : 17 !!---------------------------------------------------------------------- 18 USE oce_trc ! 19 USE trp_trc 20 USE sms 1 21 2 CCC $Header$ 3 CCC TOP 1.0 , LOCEAN-IPSL (2005) 4 C This software is governed by CeCILL licence see modipsl/doc/NEMO_CeCILL.txt 5 C --------------------------------------------------------------------------- 6 CDIR$ LIST 7 SUBROUTINE p4zlys 8 #if defined key_top && defined key_pisces 9 CCC--------------------------------------------------------------------- 10 CCC 11 CCC ROUTINE p4zlys : PISCES MODEL 12 CCC ***************************** 13 CCC 14 CCC 15 CCC PURPOSE. 16 CCC -------- 17 CCC *P4ZLYS* CALCULATES DEGREE OF CACO3 SATURATION IN THE WATER 18 CCC COLUMN, DISSOLUTION/PRECIPITATION OF CACO3 AND LOSS 19 CCC OF CACO3 TO THE CACO3 SEDIMENT POOL. 20 CC 21 CC EXTERNALS. 22 CC ---------- 23 CC NONE. 24 CC 25 CC MODIFICATIONS: 26 CC -------------- 27 CC original : 1988-07 E. MAIER-REIMER MPI HAMBURG 28 CC additions : 1998 O. Aumont 29 CC modifications : 1999 C. Le Quere 30 CC modifications : 2004 O. Aumont 31 CC --------------------------------------------------------------------------- 32 CC parameters and commons 33 CC ====================== 34 CDIR$ NOLIST 35 USE oce_trc 36 USE trp_trc 37 USE sms 38 IMPLICIT NONE 39 CDIR$ LIST 40 CC---------------------------------------------------------------------- 41 CC local declarations 42 CC ================== 43 C 44 INTEGER ji, jj, jk, jn 45 REAL zbot, zalk, zdic, zph, remco3, ah2 46 REAL dispot, zfact, zalka 47 REAL omegaca, excess, excess0 48 REAL co3(jpi,jpj,jpk) 49 C 50 C 51 C* 1.1 BEGIN OF ITERATION 52 C ------------------------ 53 C 54 DO jn = 1,5 55 C 56 C* 1.2 COMPUTE [CO3--] and [H+] CONCENTRATIONS 57 C ------------------------------------------- 58 C 59 DO jk = 1,jpkm1 60 DO jj=1,jpj 61 DO ji = 1, jpi 62 C 63 C* 1.3 SET DUMMY VARIABLE FOR TOTAL BORATE 64 C ----------------------------------------- 65 C 66 zbot = borat(ji,jj,jk) 67 zfact=rhop(ji,jj,jk)/1000.+rtrn 68 C 69 C* 1.4 SET DUMMY VARIABLE FOR [H+] 70 C --------------------------------- 71 C 72 zph = hi(ji,jj,jk)*tmask(ji,jj,jk)/zfact 73 & +(1.-tmask(ji,jj,jk))*1.e-9 74 C 75 C* 1.5 SET DUMMY VARIABLE FOR [SUM(CO2)]GIVEN 76 C ------------------------------------------- 77 C 78 zdic=trn(ji,jj,jk,jpdic)/zfact 79 zalka=trn(ji,jj,jk,jptal)/zfact 80 C 81 C* 1.6 CALCULATE [ALK]([CO3--], [HCO3-]) 82 C ------------------------------------ 83 C 84 zalk=zalka-(akw3(ji,jj,jk)/zph-zph 85 & +zbot/(1.+zph/akb3(ji,jj,jk))) 86 C 87 C* 2.10 CALCULATE [H+] and [CO3--] 88 C ----------------------------------------- 89 C 90 ah2=sqrt((zdic-zalk)*(zdic-zalk)+ 91 & 4.*(zalk*ak23(ji,jj,jk)/ak13(ji,jj,jk)) 92 & *(2*zdic-zalk)) 93 C 94 ah2=0.5*ak13(ji,jj,jk)/zalk*((zdic-zalk)+ah2) 95 co3(ji,jj,jk) = zalk/(2.+ah2/ak23(ji,jj,jk))*zfact 22 IMPLICIT NONE 23 PRIVATE 96 24 97 hi(ji,jj,jk) = ah2*zfact 98 C 99 ENDDO 100 ENDDO 101 END DO 102 C 25 PUBLIC p4z_lys ! called in p4zprg.F90 26 27 !!---------------------------------------------------------------------- 28 !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007) 29 !! $Header:$ 30 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 31 !!---------------------------------------------------------------------- 32 33 CONTAINS 34 35 SUBROUTINE p4z_lys 36 !!--------------------------------------------------------------------- 37 !! *** ROUTINE p4z_lys *** 38 !! 39 !! ** Purpose : CALCULATES DEGREE OF CACO3 SATURATION IN THE WATER 40 !! COLUMN, DISSOLUTION/PRECIPITATION OF CACO3 AND LOSS 41 !! OF CACO3 TO THE CACO3 SEDIMENT POOL. 42 !! 43 !! ** Method : - ??? 44 !!--------------------------------------------------------------------- 45 INTEGER :: ji, jj, jk, jn 46 REAL(wp) :: zbot, zalk, zdic, zph, zremco3, zah2 47 REAL(wp) :: zdispot, zfact, zalka 48 REAL(wp) :: zomegaca, zexcess, zexcess0 49 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zco3 50 !!--------------------------------------------------------------------- 51 52 53 ! ------------------------------------------- 54 ! COMPUTE [CO3--] and [H+] CONCENTRATIONS 55 ! ------------------------------------------- 56 57 DO jn = 1, 5 ! BEGIN OF ITERATION 58 ! 59 DO jk = 1, jpkm1 60 DO jj = 1, jpj 61 DO ji = 1, jpi 62 63 ! SET DUMMY VARIABLE FOR TOTAL BORATE 64 zbot = borat(ji,jj,jk) 65 zfact = rhop (ji,jj,jk) / 1000. + rtrn 66 67 ! SET DUMMY VARIABLE FOR [H+] 68 zph = hi(ji,jj,jk) * tmask(ji,jj,jk) / zfact + ( 1.-tmask(ji,jj,jk) ) * 1.e-9 69 70 ! SET DUMMY VARIABLE FOR [SUM(CO2)]GIVEN 71 zdic = trn(ji,jj,jk,jpdic) / zfact 72 zalka = trn(ji,jj,jk,jptal) / zfact 73 74 ! CALCULATE [ALK]([CO3--], [HCO3-]) 75 zalk = zalka - ( akw3(ji,jj,jk) / zph - zph & 76 & + zbot / (1.+ zph / akb3(ji,jj,jk) ) ) 77 78 ! CALCULATE [H+] and [CO3--] 79 zah2 = SQRT( (zdic-zalk)*(zdic-zalk)+ & 80 & 4.*(zalk*ak23(ji,jj,jk)/ak13(ji,jj,jk)) & 81 & *(2*zdic-zalk)) 82 83 zah2=0.5*ak13(ji,jj,jk)/zalk*((zdic-zalk)+zah2) 84 zco3(ji,jj,jk) = zalk/(2.+zah2/ak23(ji,jj,jk))*zfact 85 86 hi(ji,jj,jk) = zah2*zfact 87 88 END DO 89 END DO 90 END DO 91 ! 103 92 END DO 104 C105 C ---------------------------------------------------------106 C* 2. CALCULATE DEGREE OF CACO3 SATURATION AND CORRESPONDING107 C DISSOLOUTION AND PRECIPITATION OF CACO3 (BE AWARE OF108 C MGCO3)109 C ---------------------------------------------------------110 C111 DO jk = 1,jpkm1112 DO jj = 1,jpj113 DO ji = 1, jpi114 C115 C* 2.1 DEVIATION OF [CO3--] FROM SATURATION VALUE116 C ------------------------------------------------117 C118 omegaca = ( calcon * co3(ji,jj,jk) )/aksp(ji,jj,jk)119 93 120 C 121 C* 2.2 SET DEGREE OF UNDER-/SUPERSATURATION 122 C ------------------------------------------ 123 C 124 excess0 = max(0.,(1.-omegaca)) 125 excess = excess0**nca 94 ! --------------------------------------------------------- 95 ! CALCULATE DEGREE OF CACO3 SATURATION AND CORRESPONDING 96 ! DISSOLOUTION AND PRECIPITATION OF CACO3 (BE AWARE OF 97 ! MGCO3) 98 ! --------------------------------------------------------- 126 99 127 C 128 C* 2.3 AMOUNT CACO3 (12C) THAT RE-ENTERS SOLUTION 129 C (ACCORDING TO THIS FORMULATION ALSO SOME PARTICULATE 130 C CACO3 GETS DISSOLVED EVEN IN THE CASE OF OVERSATURATION) 131 C -------------------------------------------------------------- 132 C 133 dispot = kdca * excess * trn(ji,jj,jk,jpcal) 134 # if defined key_off_degrad 135 & *facvol(ji,jj,jk) 136 # endif 100 DO jk = 1, jpkm1 101 DO jj = 1, jpj 102 DO ji = 1, jpi 137 103 138 C 139 C* 2.4 CHANGE OF [CO3--] , [ALK], PARTICULATE [CACO3], 140 C AND [SUM(CO2)] DUE TO CACO3 DISSOLUTION/PRECIPITATION 141 C ----------------------------------------------------------- 142 C 143 remco3=dispot/rmoss 144 co3(ji,jj,jk) = co3(ji,jj,jk)+ 145 & remco3*rfact 146 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal)+ 147 & 2.*remco3 148 tra(ji,jj,jk,jpcal) = tra(ji,jj,jk,jpcal)- 149 & remco3 150 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic)+ 151 & remco3 152 C 153 ENDDO 154 ENDDO 104 ! DEVIATION OF [CO3--] FROM SATURATION VALUE 105 zomegaca = ( calcon * zco3(ji,jj,jk) ) / aksp(ji,jj,jk) 106 107 ! SET DEGREE OF UNDER-/SUPERSATURATION 108 zexcess0 = MAX( 0., ( 1.- zomegaca ) ) 109 zexcess = zexcess0**nca 110 111 ! AMOUNT CACO3 (12C) THAT RE-ENTERS SOLUTION 112 ! (ACCORDING TO THIS FORMULATION ALSO SOME PARTICULATE 113 ! CACO3 GETS DISSOLVED EVEN IN THE CASE OF OVERSATURATION) 114 # if defined key_off_degrad 115 zdispot = kdca * zexcess * trn(ji,jj,jk,jpcal) * facvol(ji,jj,jk) 116 # else 117 zdispot = kdca * zexcess * trn(ji,jj,jk,jpcal) 118 # endif 119 120 ! CHANGE OF [CO3--] , [ALK], PARTICULATE [CACO3], 121 ! AND [SUM(CO2)] DUE TO CACO3 DISSOLUTION/PRECIPITATION 122 zremco3 = zdispot / rmoss 123 zco3(ji,jj,jk) = zco3(ji,jj,jk) + zremco3 * rfact 124 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + 2.*zremco3 125 tra(ji,jj,jk,jpcal) = tra(ji,jj,jk,jpcal) - zremco3 126 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zremco3 127 128 END DO 129 END DO 155 130 END DO 156 131 157 # 132 # if defined key_trc_dia3d 158 133 trc3d(:,:,:,1) = rhop(:,:,:) 159 trc3d(:,:,:,2) = co3(:,:,:) 160 trc3d(:,:,:,3) = aksp(:,:,:)/calcon 161 # endif 134 trc3d(:,:,:,2) = zco3(:,:,:) 135 trc3d(:,:,:,3) = aksp(:,:,:) / calcon 136 # endif 137 ! 138 END SUBROUTINE p4z_lys 162 139 163 C 164 #endif 165 RETURN 166 END 140 #else 141 !!====================================================================== 142 !! Dummy module : No PISCES bio-model 143 !!====================================================================== 144 CONTAINS 145 SUBROUTINE p4z_lys( kt ) ! Empty routine 146 INTEGER, INTENT( in ) :: kt 147 WRITE(*,*) 'p4z_lys: You should not have seen this print! error?', kt 148 END SUBROUTINE p4z_lys 149 #endif 150 151 !!====================================================================== 152 END MODULE p4zlys -
branches/dev_001_GM/NEMO/TOP_SRC/PISCES_SMS/p4zmeso.F90
r774 r775 1 2 CCC $Header: /home/opalod/NEMOCVSROOT/NEMO/TOP_SRC/SMS/p4zmeso.F,v 1.8 2007/10/12 09:32:52 opalod Exp $ 3 CCC TOP 1.0 , LOCEAN-IPSL (2005) 4 C This software is governed by CeCILL licence see modipsl/doc/NEMO_CeCILL.txt 5 C --------------------------------------------------------------------------- 6 CDIR$ LIST 7 SUBROUTINE p4zmeso 8 #if defined key_top && defined key_pisces 9 CCC--------------------------------------------------------------------- 10 CCC 11 CCC ROUTINE p4zmeso : PISCES MODEL 12 CCC ****************************** 13 CCC 14 CCC PURPOSE : 15 CCC --------- 16 CCC Compute the sources/sinks for mesozooplankton 17 CCC 18 CC METHOD : 19 CC ------- 20 CC 21 CC 22 CC INPUT : 23 CC ----- 24 CC argument 25 CC None 26 CC common 27 CC all the common defined in opa 28 CC 29 CC 30 CC OUTPUT : : no 31 CC ------ 32 CC 33 CC EXTERNAL : 34 CC -------- 35 CC None 36 CC 37 CC MODIFICATIONS: 38 CC -------------- 39 CC original : O. Aumont (2002) 40 CC---------------------------------------------------------------------- 41 CC parameters and commons 42 CC ====================== 43 CDIR$ NOLIST 44 USE oce_trc 45 USE trp_trc 46 USE sms 47 IMPLICIT NONE 48 CDIR$ LIST 49 CC---------------------------------------------------------------------- 50 CC local declarations 51 CC ================== 52 INTEGER ji, jj, jk 53 REAL compadi,compaph,compapoc,compaz 54 REAL zfact,zstep,compam,zdenom,graze2 55 C 56 C 57 C 58 C Time step duration for biology 59 C ------------------------------ 60 C 61 zstep=rfact2/rjjss 62 C 63 DO jk = 1,jpkm1 64 DO jj = 1,jpj 65 DO ji = 1,jpi 66 C 67 compam=max((trn(ji,jj,jk,jpmes)-1.E-9),0.) 68 zfact=zstep*tgfunc(ji,jj,jk)*compam 69 # if defined key_off_degrad 70 & *facvol(ji,jj,jk) 71 # endif 72 C 73 C Respiration rates of both zooplankton 74 C ------------------------------------- 75 C 76 respz2(ji,jj,jk) = resrat2*zfact 77 & *(1.+3.*nitrfac(ji,jj,jk)) 78 & *trn(ji,jj,jk,jpmes)/(xkmort+trn(ji,jj,jk,jpmes)) 79 C 80 C Zooplankton mortality. A square function has been selected with 81 C no real reason except that it seems to be more stable and may 82 C mimic predation. 83 C --------------------------------------------------------------- 84 C 85 tortz2(ji,jj,jk) = mzrat2*1E6*zfact*trn(ji,jj,jk,jpmes) 86 C 87 END DO 88 END DO 89 END DO 90 91 DO jk = 1,jpkm1 92 DO jj = 1,jpj 93 DO ji = 1,jpi 94 C 95 compadi = max((trn(ji,jj,jk,jpdia)-1E-8),0.) 96 compaz = max((trn(ji,jj,jk,jpzoo)-1.E-8),0.) 97 compaph = max((trn(ji,jj,jk,jpphy)-2E-7),0.) 98 compapoc=max((trn(ji,jj,jk,jppoc)-1E-8),0.) 99 C 100 C Microzooplankton grazing 101 C ------------------------ 102 C 103 zdenom=1./(xkgraz2+xprefc*trn(ji,jj,jk,jpdia) 104 & +xprefz*trn(ji,jj,jk,jpzoo) 105 & +xprefp*trn(ji,jj,jk,jpphy) 106 & +xprefpoc*trn(ji,jj,jk,jppoc)) 107 108 graze2 = grazrat2*zstep*Tgfunc2(ji,jj,jk)*zdenom 109 & *trn(ji,jj,jk,jpmes) 110 # if defined key_off_degrad 111 & *facvol(ji,jj,jk) 112 # endif 113 114 grazd(ji,jj,jk) = graze2*xprefc*compadi 115 grazz(ji,jj,jk) = graze2*xprefz*compaz 116 grazn(ji,jj,jk) = graze2*xprefp*compaph 117 grazpoc(ji,jj,jk) = graze2*xprefpoc*compapoc 118 119 graznf(ji,jj,jk) = grazn(ji,jj,jk) 120 & *trn(ji,jj,jk,jpnfe)/(trn(ji,jj,jk,jpphy)+rtrn) 121 122 graznch(ji,jj,jk) = grazn(ji,jj,jk) 123 & *trn(ji,jj,jk,jpnch)/(trn(ji,jj,jk,jpphy)+rtrn) 124 125 grazs(ji,jj,jk) = grazd(ji,jj,jk) 126 & *trn(ji,jj,jk,jpbsi)/(trn(ji,jj,jk,jpdia)+rtrn) 127 128 grazf(ji,jj,jk) = grazd(ji,jj,jk) 129 & *trn(ji,jj,jk,jpdfe)/(trn(ji,jj,jk,jpdia)+rtrn) 130 131 grazdch(ji,jj,jk) = grazd(ji,jj,jk) 132 & *trn(ji,jj,jk,jpdch)/(trn(ji,jj,jk,jpdia)+rtrn) 133 134 grazpof(ji,jj,jk) = grazpoc(ji,jj,jk) 135 & *trn(ji,jj,jk,jpsfe)/(trn(ji,jj,jk,jppoc)+rtrn) 136 C 137 END DO 138 END DO 139 END DO 140 141 DO jk = 1,jpkm1 142 DO jj = 1,jpj 143 DO ji = 1,jpi 144 C 145 C Mesozooplankton flux feeding on GOC 146 C ---------------------------------- 147 C 1 MODULE p4zmeso 2 !!====================================================================== 3 !! *** MODULE p4zmeso *** 4 !! TOP : PISCES Compute the sources/sinks for mesozooplankton 5 !!====================================================================== 6 !! History : 1.0 ! 2002 (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_meso : Compute the sources/sinks for mesozooplankton 14 !!---------------------------------------------------------------------- 15 USE oce_trc ! 16 USE trp_trc ! 17 USE sms ! 18 19 IMPLICIT NONE 20 PRIVATE 21 22 PUBLIC p4z_meso ! called in p4zbio.F90 23 24 !!* Substitution 25 # include "domzgr_substitute.h90" 26 !!---------------------------------------------------------------------- 27 !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007) 28 !! $Header:$ 29 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 30 !!---------------------------------------------------------------------- 31 32 CONTAINS 33 34 SUBROUTINE p4z_meso 35 !!--------------------------------------------------------------------- 36 !! *** ROUTINE p4z_meso *** 37 !! 38 !! ** Purpose : Compute the sources/sinks for mesozooplankton 39 !! 40 !! ** Method : - ??? 41 !!--------------------------------------------------------------------- 42 INTEGER :: ji, jj, jk 43 REAL(wp) :: zcompadi, zcompaph, zcompapoc, zcompaz 44 REAL(wp) :: zfact, zstep, zcompam, zdenom, zgraze2 45 !!--------------------------------------------------------------------- 46 47 zstep = rfact2 / rjjss ! Time step duration for biology 48 49 DO jk = 1, jpkm1 50 DO jj = 1, jpj 51 DO ji = 1, jpi 52 53 zcompam = MAX( ( trn(ji,jj,jk,jpmes) - 1.e-9 ), 0.e0 ) 54 # if defined key_off_degrad 55 zfact = zstep * tgfunc(ji,jj,jk) * zcompam * facvol(ji,jj,jk) 56 # else 57 zfact = zstep * tgfunc(ji,jj,jk) * zcompam 58 # endif 59 60 ! Respiration rates of both zooplankton 61 ! ------------------------------------- 62 respz2(ji,jj,jk) = resrat2 * zfact * ( 1. + 3. * nitrfac(ji,jj,jk) ) & 63 & * trn(ji,jj,jk,jpmes) / ( xkmort + trn(ji,jj,jk,jpmes) ) 64 65 ! Zooplankton mortality. A square function has been selected with 66 ! no real reason except that it seems to be more stable and may 67 ! mimic predation. 68 ! --------------------------------------------------------------- 69 tortz2(ji,jj,jk) = mzrat2 * 1.e6 * zfact * trn(ji,jj,jk,jpmes) 70 ! 71 END DO 72 END DO 73 END DO 74 75 DO jk = 1, jpkm1 76 DO jj = 1, jpj 77 DO ji = 1, jpi 78 79 zcompadi = MAX( ( trn(ji,jj,jk,jpdia) - 1.e-8 ), 0.e0 ) 80 zcompaz = MAX( ( trn(ji,jj,jk,jpzoo) - 1.e-8 ), 0.e0 ) 81 zcompaph = MAX( ( trn(ji,jj,jk,jpphy) - 2.e-7 ), 0.e0 ) 82 zcompapoc = MAX( ( trn(ji,jj,jk,jppoc) - 1.e-8 ), 0.e0 ) 83 84 ! Microzooplankton grazing 85 ! ------------------------ 86 zdenom = 1. / ( xkgraz2 + xprefc * trn(ji,jj,jk,jpdia) & 87 & + xprefz * trn(ji,jj,jk,jpzoo) & 88 & + xprefp * trn(ji,jj,jk,jpphy) & 89 & + xprefpoc * trn(ji,jj,jk,jppoc) ) 90 91 zgraze2 = grazrat2 * zstep * Tgfunc2(ji,jj,jk) * zdenom & 92 # if defined key_off_degrad 93 & * facvol(ji,jj,jk) & 94 # endif 95 & * trn(ji,jj,jk,jpmes) 96 97 grazd (ji,jj,jk) = zgraze2 * xprefc * zcompadi 98 grazz (ji,jj,jk) = zgraze2 * xprefz * zcompaz 99 grazn (ji,jj,jk) = zgraze2 * xprefp * zcompaph 100 grazpoc(ji,jj,jk) = zgraze2 * xprefpoc * zcompapoc 101 102 graznf (ji,jj,jk) = grazn (ji,jj,jk) * trn(ji,jj,jk,jpnfe) / (trn(ji,jj,jk,jpphy) + rtrn) 103 104 graznch(ji,jj,jk) = grazn (ji,jj,jk) * trn(ji,jj,jk,jpnch) / (trn(ji,jj,jk,jpphy) + rtrn) 105 106 grazs (ji,jj,jk) = grazd (ji,jj,jk) * trn(ji,jj,jk,jpbsi) / (trn(ji,jj,jk,jpdia) + rtrn) 107 108 grazf (ji,jj,jk) = grazd (ji,jj,jk) * trn(ji,jj,jk,jpdfe) / (trn(ji,jj,jk,jpdia) + rtrn) 109 110 grazdch(ji,jj,jk) = grazd (ji,jj,jk) * trn(ji,jj,jk,jpdch) / (trn(ji,jj,jk,jpdia) + rtrn) 111 112 grazpof(ji,jj,jk) = grazpoc(ji,jj,jk) * trn(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc) + rtrn) 113 END DO 114 END DO 115 END DO 116 117 DO jk = 1, jpkm1 118 DO jj = 1, jpj 119 DO ji = 1, jpi 120 121 ! Mesozooplankton flux feeding on GOC 122 ! ---------------------------------- 123 # if ! defined key_kriest 124 grazffe(ji,jj,jk) = 5.e3 * zstep * wsbio4(ji,jj,jk) & 125 # if defined key_off_degrad 126 & * facvol(ji,jj,jk) & 127 # endif 128 & * tgfunc2(ji,jj,jk) * trn(ji,jj,jk,jpgoc) * trn(ji,jj,jk,jpmes) 129 130 grazfff(ji,jj,jk) = grazffe(ji,jj,jk) & 131 & * trn(ji,jj,jk,jpbfe) / (trn(ji,jj,jk,jpgoc) + rtrn) 132 # else 133 ! KRIEST3 134 grazffe(ji,jj,jk) = 0.5 * 1.3e-2 / 5.5e-7 * 0.3 * zstep * wsbio3(ji,jj,jk) & 135 & * tgfunc(ji,jj,jk) * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jpmes) & 136 # if defined key_off_degrad 137 & * facvol(ji,jj,jk) & 138 # endif 139 & / (trn(ji,jj,jk,jppoc) * 1.e7 + 0.1) 140 141 !!C grazffe(ji,jj,jk) = 5.e3 * zstep * wsbio3(ji,jj,jk) 142 !!C & * tgfunc2(ji,jj,jk) * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jpmes) 143 !!C# if defined key_off_degrad 144 !!C & * facvol(ji,jj,jk) 145 !!C# endif 146 147 grazfff(ji,jj,jk) = grazffe(ji,jj,jk) & 148 & * trn(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc) + rtrn) 149 # endif 150 END DO 151 END DO 152 END DO 153 154 DO jk = 1, jpkm1 155 DO jj = 1, jpj 156 DO ji = 1, jpi 157 158 ! Mesozooplankton efficiency 159 ! -------------------------- 160 grarem2(ji,jj,jk) = (grazd(ji,jj,jk) + grazz(ji,jj,jk) & 161 & + grazn(ji,jj,jk) + grazpoc(ji,jj,jk) + grazffe(ji,jj,jk)) & 162 & * (1.-epsher2-unass2) 148 163 #if ! defined key_kriest 149 grazffe(ji,jj,jk) = 5E3*zstep*wsbio4(ji,jj,jk) 150 & *tgfunc2(ji,jj,jk)*trn(ji,jj,jk,jpgoc)*trn(ji,jj,jk,jpmes) 151 # if defined key_off_degrad 152 & *facvol(ji,jj,jk) 153 # endif 154 155 grazfff(ji,jj,jk) = grazffe(ji,jj,jk) 156 & *trn(ji,jj,jk,jpbfe)/(trn(ji,jj,jk,jpgoc)+rtrn) 164 grafer2(ji,jj,jk) = (grazf(ji,jj,jk) + graznf(ji,jj,jk) & 165 & + grazz(ji,jj,jk) * ferat3 + grazpof(ji,jj,jk) & 166 & + grazfff(ji,jj,jk)) * (1.-epsher2-unass2) & 167 & + epsher2 * (grazd(ji,jj,jk) * MAX( & 168 & (trn(ji,jj,jk,jpdfe) / (trn(ji,jj,jk,jpdia) + rtrn) & 169 & -ferat3),0.) + grazn(ji,jj,jk) * MAX( & 170 & (trn(ji,jj,jk,jpnfe) / (trn(ji,jj,jk,jpphy) + rtrn) & 171 & -ferat3),0.) + grazpoc(ji,jj,jk) * MAX( & 172 & (trn(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc) + rtrn) & 173 & -ferat3),0.) + grazffe(ji,jj,jk) * MAX( & 174 & (trn(ji,jj,jk,jpbfe) / (trn(ji,jj,jk,jpgoc) + rtrn) & 175 & -ferat3),0.) ) 157 176 #else 158 C KRIEST3 159 grazffe(ji,jj,jk) = 0.5*1.3E-2/5.5E-7*0.3*zstep*wsbio3(ji,jj,jk) 160 & *tgfunc(ji,jj,jk)*trn(ji,jj,jk,jppoc)*trn(ji,jj,jk,jpmes) 161 & /(trn(ji,jj,jk,jppoc)*1E7+0.1) 162 # if defined key_off_degrad 163 & *facvol(ji,jj,jk) 164 # endif 165 166 167 C grazffe(ji,jj,jk) = 5E3*zstep*wsbio3(ji,jj,jk) 168 C & *tgfunc2(ji,jj,jk)*trn(ji,jj,jk,jppoc)*trn(ji,jj,jk,jpmes) 169 C# if defined key_off_degrad 170 C & *facvol(ji,jj,jk) 171 C# endif 172 grazfff(ji,jj,jk) = grazffe(ji,jj,jk) 173 & *trn(ji,jj,jk,jpsfe)/(trn(ji,jj,jk,jppoc)+rtrn) 177 grafer2(ji,jj,jk) = (grazf(ji,jj,jk) + graznf(ji,jj,jk) & 178 & + grazz(ji,jj,jk) * ferat3 + grazpof(ji,jj,jk) & 179 & + grazfff(ji,jj,jk)) * (1.-epsher2-unass2) & 180 & + epsher2 * (grazd(ji,jj,jk) * MAX( & 181 & (trn(ji,jj,jk,jpdfe) / (trn(ji,jj,jk,jpdia) + rtrn) & 182 & -ferat3),0.) + grazn(ji,jj,jk) * MAX( & 183 & (trn(ji,jj,jk,jpnfe) / (trn(ji,jj,jk,jpphy) + rtrn) & 184 & -ferat3),0.) + grazpoc(ji,jj,jk) * MAX( & 185 & (trn(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc) + rtrn) & 186 & -ferat3),0.) + grazffe(ji,jj,jk) * MAX( & 187 & (trn(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc) + rtrn) & 188 & -ferat3),0.) ) 174 189 #endif 175 176 177 C 178 END DO 179 END DO 180 END DO 181 182 DO jk = 1,jpkm1 183 DO jj = 1,jpj 184 DO ji = 1,jpi 185 C 186 C Mesozooplankton efficiency 187 C -------------------------- 188 C 189 grarem2(ji,jj,jk)=(grazd(ji,jj,jk)+grazz(ji,jj,jk) 190 & +grazn(ji,jj,jk)+grazpoc(ji,jj,jk)+grazffe(ji,jj,jk)) 191 & *(1.-epsher2-unass2) 192 #if ! defined key_kriest 193 grafer2(ji,jj,jk)=(grazf(ji,jj,jk)+graznf(ji,jj,jk) 194 & +grazz(ji,jj,jk)*ferat3+grazpof(ji,jj,jk) 195 & +grazfff(ji,jj,jk))*(1.-epsher2-unass2) 196 & +epsher2*(grazd(ji,jj,jk)*max( 197 & (trn(ji,jj,jk,jpdfe)/(trn(ji,jj,jk,jpdia)+rtrn) 198 & -ferat3),0.)+grazn(ji,jj,jk)*max( 199 & (trn(ji,jj,jk,jpnfe)/(trn(ji,jj,jk,jpphy)+rtrn) 200 & -ferat3),0.)+grazpoc(ji,jj,jk)*max( 201 & (trn(ji,jj,jk,jpsfe)/(trn(ji,jj,jk,jppoc)+rtrn) 202 & -ferat3),0.)+grazffe(ji,jj,jk)*max( 203 & (trn(ji,jj,jk,jpbfe)/(trn(ji,jj,jk,jpgoc)+rtrn) 204 & -ferat3),0.)) 190 grapoc2(ji,jj,jk) = (grazd(ji,jj,jk) + grazz(ji,jj,jk) & 191 & + grazn(ji,jj,jk) + grazpoc(ji,jj,jk) + grazffe(ji,jj,jk)) * unass2 192 ! 193 END DO 194 END DO 195 END DO 196 ! 197 END SUBROUTINE p4z_meso 198 205 199 #else 206 grafer2(ji,jj,jk)=(grazf(ji,jj,jk)+graznf(ji,jj,jk) 207 & +grazz(ji,jj,jk)*ferat3+grazpof(ji,jj,jk) 208 & +grazfff(ji,jj,jk))*(1.-epsher2-unass2) 209 & +epsher2*(grazd(ji,jj,jk)*max( 210 & (trn(ji,jj,jk,jpdfe)/(trn(ji,jj,jk,jpdia)+rtrn) 211 & -ferat3),0.)+grazn(ji,jj,jk)*max( 212 & (trn(ji,jj,jk,jpnfe)/(trn(ji,jj,jk,jpphy)+rtrn) 213 & -ferat3),0.)+grazpoc(ji,jj,jk)*max( 214 & (trn(ji,jj,jk,jpsfe)/(trn(ji,jj,jk,jppoc)+rtrn) 215 & -ferat3),0.)+grazffe(ji,jj,jk)*max( 216 & (trn(ji,jj,jk,jpsfe)/(trn(ji,jj,jk,jppoc)+rtrn) 217 & -ferat3),0.)) 218 #endif 219 grapoc2(ji,jj,jk)=(grazd(ji,jj,jk)+grazz(ji,jj,jk) 220 & +grazn(ji,jj,jk)+grazpoc(ji,jj,jk)+grazffe(ji,jj,jk))*unass2 221 222 END DO 223 END DO 224 END DO 225 C 226 #endif 227 RETURN 228 END 200 !!====================================================================== 201 !! Dummy module : No PISCES bio-model 202 !!====================================================================== 203 CONTAINS 204 SUBROUTINE p4z_meso ! Empty routine 205 END SUBROUTINE p4z_meso 206 #endif 207 208 !!====================================================================== 209 END MODULE p4zmeso -
branches/dev_001_GM/NEMO/TOP_SRC/PISCES_SMS/p4zmicro.F90
r774 r775 1 MODULE p4zmicro 2 !!====================================================================== 3 !! *** MODULE p4zmicro *** 4 !! TOP : PISCES Compute the sources/sinks for microzooplankton 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_micro : Compute the sources/sinks for microzooplankton 14 !!---------------------------------------------------------------------- 15 USE oce_trc ! 16 USE trp_trc ! 17 USE sms ! 1 18 2 CCC $Header$ 3 CCC TOP 1.0 , LOCEAN-IPSL (2005) 4 C This software is governed by CeCILL licence see modipsl/doc/NEMO_CeCILL.txt 5 C --------------------------------------------------------------------------- 6 CDIR$ LIST 7 SUBROUTINE p4zmicro 8 #if defined key_top && defined key_pisces 9 CCC--------------------------------------------------------------------- 10 CCC 11 CCC ROUTINE p4zmicro : PISCES MODEL 12 CCC ******************************* 13 CCC 14 CCC PURPOSE : 15 CCC --------- 16 CCC Compute the sources/sinks for microzooplankton 17 CCC 18 CC INPUT : 19 CC ----- 20 CC argument 21 CC None 22 CC common 23 CC all the common defined in opa 24 CC 25 CC 26 CC OUTPUT : : no 27 CC ------ 28 CC 29 CC EXTERNAL : 30 CC -------- 31 CC None 32 CC 33 CC MODIFICATIONS: 34 CC -------------- 35 CC original : O. Aumont (2004) 36 CC---------------------------------------------------------------------- 37 CC parameters and commons 38 CC ====================== 39 CDIR$ NOLIST 40 USE oce_trc 41 USE trp_trc 42 USE sms 43 IMPLICIT NONE 44 CDIR$ LIST 45 CC---------------------------------------------------------------------- 46 CC local declarations 47 CC ================== 48 INTEGER ji, jj, jk 49 REAL compadi,compadi2,compaz,compaph,compapoc 50 REAL graze,zdenom,zdenom2 51 REAL zfact,zstep,zinano,zidiat,zipoc 52 C 53 C Time step duration for biology 54 C ------------------------------ 55 C 56 zstep=rfact2/rjjss 57 C 19 IMPLICIT NONE 20 PRIVATE 58 21 59 DO jk = 1,jpkm1 60 DO jj = 1,jpj 61 DO ji = 1,jpi 62 C 63 compaz = max((trn(ji,jj,jk,jpzoo)-1.E-9),0.) 64 zfact=zstep*tgfunc(ji,jj,jk)*compaz 65 # if defined key_off_degrad 66 & *facvol(ji,jj,jk) 67 # endif 68 C 69 C Respiration rates of both zooplankton 70 C ------------------------------------- 71 C 72 respz(ji,jj,jk) = resrat*zfact 73 & *(1.+3.*nitrfac(ji,jj,jk)) 74 & *trn(ji,jj,jk,jpzoo)/(xkmort+trn(ji,jj,jk,jpzoo)) 75 C 76 C Zooplankton mortality. A square function has been selected with 77 C no real reason except that it seems to be more stable and may 78 C mimic predation. 79 C --------------------------------------------------------------- 80 C 81 tortz(ji,jj,jk) = mzrat*1E6*zfact*trn(ji,jj,jk,jpzoo) 82 C 22 PUBLIC p4z_micro ! called in p4zbio.F90 23 24 !!* Substitution 25 # include "domzgr_substitute.h90" 26 !!---------------------------------------------------------------------- 27 !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007) 28 !! $Header:$ 29 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 30 !!---------------------------------------------------------------------- 31 32 CONTAINS 33 34 SUBROUTINE p4z_micro 35 !!--------------------------------------------------------------------- 36 !! *** ROUTINE p4z_micro *** 37 !! 38 !! ** Purpose : Compute the sources/sinks for microzooplankton 39 !! 40 !! ** Method : - ??? 41 !!--------------------------------------------------------------------- 42 INTEGER :: ji, jj, jk 43 REAL(wp) :: zcompadi, zcompadi2, zcompaz , zcompaph, zcompapoc 44 REAL(wp) :: zgraze , zdenom , zdenom2 45 REAL(wp) :: zfact , zstep , zinano , zidiat, zipoc 46 !!--------------------------------------------------------------------- 47 48 zstep = rfact2 / rjjss ! Time step duration for biology 49 50 DO jk = 1, jpkm1 51 DO jj = 1, jpj 52 DO ji = 1, jpi 53 54 zcompaz = MAX( ( trn(ji,jj,jk,jpzoo) - 1.e-9 ), 0.e0 ) 55 # if defined key_off_degrad 56 zfact = zstep * tgfunc(ji,jj,jk) * zcompaz *facvol(ji,jj,jk) 57 # else 58 zfact = zstep * tgfunc(ji,jj,jk) * zcompaz 59 # endif 60 61 ! Respiration rates of both zooplankton 62 ! ------------------------------------- 63 64 respz(ji,jj,jk) = resrat * zfact * ( 1.+ 3.* nitrfac(ji,jj,jk) ) & 65 & * trn(ji,jj,jk,jpzoo) / ( xkmort + trn(ji,jj,jk,jpzoo) ) 66 67 ! Zooplankton mortality. A square function has been selected with 68 ! no real reason except that it seems to be more stable and may 69 ! mimic predation. 70 ! --------------------------------------------------------------- 71 72 tortz(ji,jj,jk) = mzrat * 1.e6 * zfact * trn(ji,jj,jk,jpzoo) 73 83 74 END DO 84 END DO 85 END DO 86 C 87 DO jk = 1,jpkm1 88 DO jj = 1,jpj 89 DO ji = 1,jpi 90 C 91 compadi = max((trn(ji,jj,jk,jpdia)-1E-8),0.) 92 compadi2=min(compadi,5.E-7) 93 compaph = max((trn(ji,jj,jk,jpphy)-2E-7),0.) 94 compapoc=max((trn(ji,jj,jk,jppoc)-1E-8),0.) 95 C 96 C Microzooplankton grazing 97 C ------------------------ 98 C 99 zdenom2 = 1./(zprefp*compaph 100 & +zprefc*compapoc+zprefd*compadi2+rtrn) 75 END DO 76 END DO 101 77 102 graze = grazrat*zstep*tgfunc(ji,jj,jk) 103 & *trn(ji,jj,jk,jpzoo) 104 # if defined key_off_degrad 105 & *facvol(ji,jj,jk) 106 # endif 78 DO jk = 1, jpkm1 79 DO jj = 1, jpj 80 DO ji = 1, jpi 107 81 108 zinano=zprefp*compaph*zdenom2 109 zipoc=zprefc*compapoc*zdenom2 110 zidiat=zprefd*compadi2*zdenom2 82 zcompadi = MAX( ( trn(ji,jj,jk,jpdia) - 1.e-8 ), 0.e0 ) 83 zcompadi2 = MIN( zcompadi, 5.e-7 ) 84 zcompaph = MAX( ( trn(ji,jj,jk,jpphy) - 2.e-7 ), 0.e0 ) 85 zcompapoc = MAX( ( trn(ji,jj,jk,jppoc) - 1.e-8 ), 0.e0 ) 111 86 112 zdenom = 1./(xkgraz+zinano*compaph 113 & +zipoc*compapoc+zidiat*compadi2) 87 ! Microzooplankton grazing 88 ! ------------------------ 89 zdenom2 = 1./ ( zprefp * zcompaph + zprefc * zcompapoc + zprefd * zcompadi2 + rtrn ) 114 90 115 grazp(ji,jj,jk) = graze*zinano*compaph*zdenom 116 grazm(ji,jj,jk) = graze*zipoc*compapoc*zdenom 117 grazsd(ji,jj,jk) = graze*zidiat*compadi2*zdenom 91 zgraze = grazrat * zstep * tgfunc(ji,jj,jk) & 92 # if defined key_off_degrad 93 & * facvol(ji,jj,jk) & 94 # endif 95 & * trn(ji,jj,jk,jpzoo) 118 96 119 grazpf(ji,jj,jk) = grazp(ji,jj,jk)* 120 & trn(ji,jj,jk,jpnfe)/(trn(ji,jj,jk,jpphy)+rtrn) 97 zinano = zprefp * zcompaph * zdenom2 98 zipoc = zprefc * zcompapoc * zdenom2 99 zidiat = zprefd * zcompadi2 * zdenom2 121 100 122 grazpch(ji,jj,jk) = grazp(ji,jj,jk)* 123 & trn(ji,jj,jk,jpnch)/(trn(ji,jj,jk,jpphy)+rtrn) 101 zdenom = 1./ ( xkgraz + zinano * zcompaph + zipoc * zcompapoc + zidiat * zcompadi2 ) 124 102 125 grazmf(ji,jj,jk) = grazm(ji,jj,jk) 126 & *trn(ji,jj,jk,jpsfe)/(trn(ji,jj,jk,jppoc)+rtrn) 103 grazp (ji,jj,jk) = zgraze * zinano * zcompaph * zdenom 104 grazm (ji,jj,jk) = zgraze * zipoc * zcompapoc * zdenom 105 grazsd(ji,jj,jk) = zgraze * zidiat * zcompadi2 * zdenom 127 106 128 grazsf(ji,jj,jk) = grazsd(ji,jj,jk) 129 & *trn(ji,jj,jk,jpdfe)/(trn(ji,jj,jk,jpdia)+rtrn) 107 grazpf (ji,jj,jk) = grazp (ji,jj,jk) * trn(ji,jj,jk,jpnfe) / (trn(ji,jj,jk,jpphy) + rtrn) 130 108 131 grazss(ji,jj,jk) = grazsd(ji,jj,jk) 132 & *trn(ji,jj,jk,jpbsi)/(trn(ji,jj,jk,jpdia)+rtrn) 109 grazpch(ji,jj,jk) = grazp (ji,jj,jk) * trn(ji,jj,jk,jpnch) / (trn(ji,jj,jk,jpphy) + rtrn) 133 110 134 grazsch(ji,jj,jk) = grazsd(ji,jj,jk) 135 & *trn(ji,jj,jk,jpdch)/(trn(ji,jj,jk,jpdia)+rtrn) 136 C 111 grazmf (ji,jj,jk) = grazm (ji,jj,jk) * trn(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc) + rtrn) 112 113 grazsf (ji,jj,jk) = grazsd(ji,jj,jk) * trn(ji,jj,jk,jpdfe) / (trn(ji,jj,jk,jpdia) + rtrn) 114 115 grazss (ji,jj,jk) = grazsd(ji,jj,jk) * trn(ji,jj,jk,jpbsi) / (trn(ji,jj,jk,jpdia) + rtrn) 116 117 grazsch(ji,jj,jk) = grazsd(ji,jj,jk) * trn(ji,jj,jk,jpdch) / (trn(ji,jj,jk,jpdia) + rtrn) 118 137 119 END DO 138 END DO 139 END DO 140 C 141 DO jk = 1,jpkm1 142 DO jj = 1,jpj 143 DO ji = 1,jpi 144 C 145 C Various remineralization and excretion terms 146 C -------------------------------------------- 147 C 148 grarem(ji,jj,jk)=(grazp(ji,jj,jk)+grazm(ji,jj,jk) 149 & +grazsd(ji,jj,jk))*(1.-epsher-unass) 120 END DO 121 END DO 150 122 151 grafer(ji,jj,jk)=(grazpf(ji,jj,jk)+grazsf(ji,jj,jk) 152 & +grazmf(ji,jj,jk))*(1.-epsher-unass) 153 & +(grazm(ji,jj,jk)*max((trn(ji,jj,jk,jpsfe)/ 154 & (trn(ji,jj,jk,jppoc)+rtrn)-ferat3),0.) 155 & +grazp(ji,jj,jk)*max((trn(ji,jj,jk,jpnfe)/ 156 & (trn(ji,jj,jk,jpphy)+rtrn)-ferat3),0.) 157 & +grazsd(ji,jj,jk)*max((trn(ji,jj,jk,jpdfe)/ 158 & (trn(ji,jj,jk,jpdia)+rtrn)-ferat3),0.))*epsher 123 DO jk = 1, jpkm1 124 DO jj = 1, jpj 125 DO ji = 1, jpi 159 126 160 grapoc(ji,jj,jk)=(grazp(ji,jj,jk)+grazm(ji,jj,jk) 161 & +grazsd(ji,jj,jk))*unass 162 C 163 END DO 127 ! Various remineralization and excretion terms 128 ! -------------------------------------------- 129 130 grarem(ji,jj,jk) = ( grazp(ji,jj,jk) + grazm (ji,jj,jk) & 131 & + grazsd(ji,jj,jk) ) * ( 1.- epsher - unass ) 132 133 grafer(ji,jj,jk) = ( grazpf(ji,jj,jk) + grazsf(ji,jj,jk) & 134 & + grazmf(ji,jj,jk) ) * ( 1.- epsher - unass ) & 135 & + ( grazm (ji,jj,jk) * MAX( (trn(ji,jj,jk,jpsfe) / & 136 & (trn(ji,jj,jk,jppoc) + rtrn) - ferat3), 0.e0 ) & 137 & + grazp (ji,jj,jk) * MAX( (trn(ji,jj,jk,jpnfe) / & 138 & (trn(ji,jj,jk,jpphy) + rtrn) - ferat3), 0.e0 ) & 139 & + grazsd(ji,jj,jk) * MAX( (trn(ji,jj,jk,jpdfe) / & 140 & (trn(ji,jj,jk,jpdia) + rtrn) - ferat3), 0.e0 ) ) * epsher 141 142 grapoc(ji,jj,jk) = ( grazp(ji,jj,jk) + grazm(ji,jj,jk) + grazsd(ji,jj,jk) ) * unass 143 164 144 END DO 165 END DO 166 C 167 #endif 168 RETURN 169 END 145 END DO 146 END DO 147 ! 148 END SUBROUTINE p4z_micro 149 150 #else 151 !!====================================================================== 152 !! Dummy module : No PISCES bio-model 153 !!====================================================================== 154 CONTAINS 155 SUBROUTINE p4z_micro ! Empty routine 156 END SUBROUTINE p4z_micro 157 #endif 158 159 !!====================================================================== 160 END MODULE p4zmicro -
branches/dev_001_GM/NEMO/TOP_SRC/PISCES_SMS/p4znano.F90
r774 r775 1 MODULE p4znano 2 !!====================================================================== 3 !! *** MODULE p4znano *** 4 !! TOP : PISCES Compute the mortality terms for nanophytoplankton 5 !!====================================================================== 6 !! History : 1.0 ! 2002 (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_nano : Compute the mortality terms for nanophytoplankton 14 !!---------------------------------------------------------------------- 15 USE oce_trc ! 16 USE trp_trc ! 17 USE sms ! 1 18 2 CCC $Header$ 3 CCC TOP 1.0 , LOCEAN-IPSL (2005) 4 C This software is governed by CeCILL licence see modipsl/doc/NEMO_CeCILL.txt 5 C --------------------------------------------------------------------------- 6 CDIR$ LIST 7 SUBROUTINE p4znano 8 #if defined key_top && defined key_pisces 9 CCC--------------------------------------------------------------------- 10 CCC 11 CCC ROUTINE p4znano : PISCES MODEL 12 CCC ****************************** 13 CCC 14 CCC PURPOSE : 15 CCC --------- 16 CCC Compute the mortality terms for nanophytoplankton 17 CCC 18 CC INPUT : 19 CC ----- 20 CC argument 21 CC None 22 CC common 23 CC all the common defined in opa 24 CC 25 CC 26 CC OUTPUT : : no 27 CC ------ 28 CC 29 CC EXTERNAL : 30 CC -------- 31 CC None 32 CC 33 CC MODIFICATIONS: 34 CC -------------- 35 CC original : O. Aumont (2002) 36 CC---------------------------------------------------------------------- 37 CC parameters and commons 38 CC ====================== 39 CDIR$ NOLIST 40 USE oce_trc 41 USE trp_trc 42 USE sms 43 IMPLICIT NONE 44 CDIR$ LIST 45 CC---------------------------------------------------------------------- 46 CC local declarations 47 CC ================== 48 INTEGER ji, jj, jk 49 REAL zfact,zstep,compaph 50 C 51 C Time step duration for biology 52 C ------------------------------ 53 C 54 zstep=rfact2/rjjss 55 C 56 DO jk = 1,jpkm1 57 DO jj = 1,jpj 58 DO ji = 1,jpi 59 C 60 compaph = max((trn(ji,jj,jk,jpphy)-1E-8),0.) 61 zfact=1./(trn(ji,jj,jk,jpphy)+rtrn) 62 C 63 C Squared mortality of Phyto similar to a sedimentation term during 64 C blooms (Doney et al. 1996) 65 C ----------------------------------------------------------------- 66 C 67 respp(ji,jj,jk) = wchl*1e6*zstep*zdiss(ji,jj,jk) 68 & *compaph*trn(ji,jj,jk,jpphy) 69 # if defined key_off_degrad 70 & *facvol(ji,jj,jk) 71 # endif 19 IMPLICIT NONE 20 PRIVATE 21 22 PUBLIC p4z_nano ! called in p4zbio.F90 23 24 !!* Substitution 25 # include "domzgr_substitute.h90" 26 !!---------------------------------------------------------------------- 27 !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007) 28 !! $Header:$ 29 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 30 !!---------------------------------------------------------------------- 31 32 CONTAINS 33 34 SUBROUTINE p4z_nano 35 !!--------------------------------------------------------------------- 36 !! *** ROUTINE p4z_nano *** 37 !! 38 !! ** Purpose : Compute the mortality terms for nanophytoplankton 39 !! 40 !! ** Method : - ??? 41 !!--------------------------------------------------------------------- 42 INTEGER :: ji, jj, jk 43 REAL(wp) :: zfact, zstep, zcompaph 44 !!--------------------------------------------------------------------- 45 46 47 zstep = rfact2 / rjjss ! Time step duration for biology 48 49 50 DO jk = 1, jpkm1 51 DO jj = 1, jpj 52 DO ji = 1, jpi 53 54 zcompaph = MAX( ( trn(ji,jj,jk,jpphy) - 1e-8 ), 0.e0 ) 55 zfact = 1./ ( trn(ji,jj,jk,jpphy) + rtrn ) 56 57 ! Squared mortality of Phyto similar to a sedimentation term during 58 ! blooms (Doney et al. 1996) 59 ! ----------------------------------------------------------------- 60 respp(ji,jj,jk) = wchl * 1.e6 * zstep * zdiss(ji,jj,jk) & 61 # if defined key_off_degrad 62 & * facvol(ji,jj,jk) & 63 # endif 64 & * zcompaph * trn(ji,jj,jk,jpphy) 72 65 73 respnf(ji,jj,jk) = respp(ji,jj,jk) 74 & *trn(ji,jj,jk,jpnfe)*zfact 66 respnf (ji,jj,jk) = respp(ji,jj,jk) * trn(ji,jj,jk,jpnfe) * zfact 75 67 76 respnch(ji,jj,jk) = respp(ji,jj,jk) 77 & *trn(ji,jj,jk,jpnch)*zfact 78 C 79 C Phytoplankton mortality. This mortality loss is slightly 80 C increased when nutrients are limiting phytoplankton growth 81 C as observed for instance in case of iron limitation. 82 C ---------------------------------------------------------- 83 C 84 tortp(ji,jj,jk) = mprat*zstep*trn(ji,jj,jk,jpphy) 85 $ /(xkmort+trn(ji,jj,jk,jpphy))*compaph 86 # if defined key_off_degrad 87 & *facvol(ji,jj,jk) 88 # endif 68 respnch(ji,jj,jk) = respp(ji,jj,jk) * trn(ji,jj,jk,jpnch) * zfact 69 70 ! Phytoplankton mortality. This mortality loss is slightly 71 ! increased when nutrients are limiting phytoplankton growth 72 ! as observed for instance in case of iron limitation. 73 ! ---------------------------------------------------------- 74 tortp (ji,jj,jk) = mprat * zstep * trn(ji,jj,jk,jpphy) & 75 # if defined key_off_degrad 76 & * facvol(ji,jj,jk) & 77 # endif 78 & / ( xkmort + trn(ji,jj,jk,jpphy) ) * zcompaph 89 79 90 tortnf(ji,jj,jk)=tortp(ji,jj,jk) 91 & *trn(ji,jj,jk,jpnfe)*zfact 80 tortnf (ji,jj,jk) = tortp(ji,jj,jk) * trn(ji,jj,jk,jpnfe) * zfact 92 81 93 tortnch(ji,jj,jk)=tortp(ji,jj,jk) 94 & *trn(ji,jj,jk,jpnch)*zfact 95 C 82 tortnch(ji,jj,jk) = tortp(ji,jj,jk) * trn(ji,jj,jk,jpnch) * zfact 83 96 84 END DO 97 END DO 98 END DO 99 C 100 #endif 101 RETURN 102 END 85 END DO 86 END DO 87 ! 88 END SUBROUTINE p4z_nano 89 90 #else 91 !!====================================================================== 92 !! Dummy module : No PISCES bio-model 93 !!====================================================================== 94 CONTAINS 95 SUBROUTINE p4z_nano ! Empty routine 96 END SUBROUTINE p4z_nano 97 #endif 98 99 !!====================================================================== 100 END MODULE p4znano -
branches/dev_001_GM/NEMO/TOP_SRC/PISCES_SMS/p4zopt.F90
r774 r775 1 2 CCC $Header$ 3 CCC TOP 1.0 , LOCEAN-IPSL (2005) 4 C This software is governed by CeCILL licence see modipsl/doc/NEMO_CeCILL.txt 5 C --------------------------------------------------------------------------- 6 CDIR$ LIST 7 SUBROUTINE p4zopt 8 #if defined key_top && defined key_pisces 9 CCC--------------------------------------------------------------------- 10 CCC 11 CCC ROUTINE p4zopt : PISCES MODEL 12 CCC ***************************** 13 CCC 14 CCC PURPOSE : 15 CCC --------- 16 CCC Compute the light availability in the water column 17 CCC depending on the depth and the chlorophyll concentration 18 CCC 19 CC INPUT : 20 CC ----- 21 CC argument 22 CC None 23 CC common 24 CC all the common defined in opa 25 CC 26 CC 27 CC OUTPUT : : no 28 CC ------ 29 CC 30 CC MODIFICATIONS: 31 CC -------------- 32 CC original : O. Aumont (2004) 33 CC---------------------------------------------------------------------- 34 CC parameters and commons 35 CC ====================== 36 CDIR$ NOLIST 37 USE oce_trc 38 USE trp_trc 39 USE sms 40 IMPLICIT NONE 41 #include "domzgr_substitute.h90" 42 CDIR$ LIST 43 CC---------------------------------------------------------------------- 44 CC local declarations 45 CC ================== 46 INTEGER ji, jj, jk, mrgb 47 REAL xchl,ekg(jpi,jpj,jpk),ekr(jpi,jpj,jpk),ekb(jpi,jpj,jpk) 48 REAL parlux,e1(jpi,jpj,jpk),e2(jpi,jpj,jpk),e3(jpi,jpj,jpk) 49 REAL zdepmoy(jpi,jpj),etmp(jpi,jpj) 50 REAL zrlight,zblight,zglight 51 REAL zrlight1,zblight1,zglight1 52 REAL e3lum(jpi,jpj,jpk),e4lum(jpi,jpj,jpk) 53 REAL e5lum(jpi,jpj,jpk),e6lum(jpi,jpj,jpk) 54 C 55 C Initialisation of variables used to compute PAR 56 C ----------------------------------------------- 57 C 58 e1 = 0. 59 e2 = 0. 60 e3 = 0. 61 etot = 0. 62 parlux = 0.43/3. 63 64 IF (ln_qsr_sms) THEN 65 C 66 C IF activated, computation of the qsr for the dynamics 67 C ----------------------------------------------------- 68 C 69 e3lum=0. 70 e4lum=0. 71 e5lum=0. 72 e6lum=0. 73 ENDIF 74 75 DO jk=1,jpkm1 76 DO jj=1,jpj 77 DO ji=1,jpi 78 C 79 C Separation in three light bands: red, green, blue 80 C ------------------------------------------------- 81 C 82 xchl=(trn(ji,jj,jk,jpnch)+trn(ji,jj,jk,jpdch)+rtrn)*1.E6 83 xchl=max(0.03,xchl) 84 xchl=min(10.,xchl) 1 MODULE p4zopt 2 !!====================================================================== 3 !! *** MODULE p4zopt *** 4 !! TOP : PISCES Compute the light availability in the water column 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_opt : Compute the light availability in the water column 14 !!---------------------------------------------------------------------- 15 USE oce_trc ! 16 USE trp_trc 17 USE sms 18 19 IMPLICIT NONE 20 PRIVATE 21 22 PUBLIC p4z_opt ! called in p4zprg.F90 23 24 !!* Substitution 25 # include "domzgr_substitute.h90" 26 !!---------------------------------------------------------------------- 27 !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007) 28 !! $Header:$ 29 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 30 !!---------------------------------------------------------------------- 31 32 CONTAINS 33 34 SUBROUTINE p4z_opt 35 !!--------------------------------------------------------------------- 36 !! *** ROUTINE p4z_opt *** 37 !! 38 !! ** Purpose : Compute the light availability in the water column 39 !! depending on the depth and the chlorophyll concentration 40 !! 41 !! ** Method : - ??? 42 !!--------------------------------------------------------------------- 43 INTEGER :: ji, jj, jk 44 INTEGER :: irgb 45 REAL(wp) :: zchl, zparlux 46 REAL(wp) :: zrlight , zblight , zglight 47 REAL(wp) :: zrlight1, zblight1, zglight1 48 REAL(wp), DIMENSION(jpi,jpj) :: zdepmoy, zetmp 49 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zekg, zekr, zekb 50 REAL(wp), DIMENSION(jpi,jpj,jpk) :: ze1 , ze2 , ze3 51 REAL(wp), DIMENSION(jpi,jpj,jpk) :: ze3lum, ze4lum 52 REAL(wp), DIMENSION(jpi,jpj,jpk) :: ze5lum, ze6lum 53 !!--------------------------------------------------------------------- 54 55 ! Initialisation of variables used to compute PAR 56 ! ----------------------------------------------- 57 ze1 (:,:,:) = 0.e0 58 ze2 (:,:,:) = 0.e0 59 ze3 (:,:,:) = 0.e0 60 etot(:,:,:) = 0.e0 61 62 zparlux = 0.43 / 3. 63 64 ! IF activated, computation of the qsr for the dynamics 65 ! ----------------------------------------------------- 66 IF( ln_qsr_sms ) THEN 67 ze3lum(:,:,:) = 0.e0 68 ze4lum(:,:,:) = 0.e0 69 ze5lum(:,:,:) = 0.e0 70 ze6lum(:,:,:) = 0.e0 71 ENDIF 72 73 DO jk = 1, jpkm1 74 DO jj = 1, jpj 75 DO ji = 1, jpi 76 77 ! Separation in three light bands: red, green, blue 78 ! ------------------------------------------------- 79 zchl = ( trn(ji,jj,jk,jpnch) + trn(ji,jj,jk,jpdch) + rtrn ) * 1.e6 80 zchl = MAX( 0.03, zchl ) 81 zchl = MIN( 10. , zchl ) 85 82 86 mrgb = int(41+20.*log10(xchl)+rtrn)83 irgb = INT( 41 + 20.* LOG10( zchl ) + rtrn ) 87 84 88 ekb(ji,jj,jk)=xkrgb(1,mrgb) 89 ekg(ji,jj,jk)=xkrgb(2,mrgb) 90 ekr(ji,jj,jk)=xkrgb(3,mrgb) 91 C 92 END DO 93 END DO 94 END DO 95 C 96 DO jj = 1,jpj 97 DO ji = 1,jpi 98 C 99 C Separation in three light bands: red, green, blue 100 C ------------------------------------------------- 101 C 102 zblight=0.5*ekb(ji,jj,1)*fse3t(ji,jj,1) 103 zglight=0.5*ekg(ji,jj,1)*fse3t(ji,jj,1) 104 zrlight=0.5*ekr(ji,jj,1)*fse3t(ji,jj,1) 105 C 106 e1(ji,jj,1) = parlux*qsr(ji,jj)*exp(-zblight) 107 e2(ji,jj,1) = parlux*qsr(ji,jj)*exp(-zglight) 108 e3(ji,jj,1) = parlux*qsr(ji,jj)*exp(-zrlight) 109 C 110 END DO 111 END DO 112 113 DO jk = 2,jpkm1 114 DO jj = 1,jpj 115 DO ji = 1,jpi 116 C 117 C Separation in three light bands: red, green, blue 118 C ------------------------------------------------- 119 C 120 zblight=0.5*(ekb(ji,jj,jk-1)*fse3t(ji,jj,jk-1) 121 & +ekb(ji,jj,jk)*fse3t(ji,jj,jk)) 122 zglight=0.5*(ekg(ji,jj,jk-1)*fse3t(ji,jj,jk-1) 123 & +ekg(ji,jj,jk)*fse3t(ji,jj,jk)) 124 zrlight=0.5*(ekr(ji,jj,jk-1)*fse3t(ji,jj,jk-1) 125 & +ekr(ji,jj,jk)*fse3t(ji,jj,jk)) 126 C 127 e1(ji,jj,jk) = e1(ji,jj,jk-1)*exp(-zblight) 128 e2(ji,jj,jk) = e2(ji,jj,jk-1)*exp(-zglight) 129 e3(ji,jj,jk) = e3(ji,jj,jk-1)*exp(-zrlight) 130 C 131 END DO 132 END DO 133 END DO 134 C 135 etot(:,:,:) = e1(:,:,:)+e2(:,:,:)+e3(:,:,:) 136 137 IF (ln_qsr_sms) THEN 138 C 139 C In the following, the vertical attenuation of qsr for the 140 C dynamics is computed 141 C --------------------------------------------------------- 142 C 143 DO jj = 1,jpj 144 DO ji = 1,jpi 145 C 146 C Separation in three light bands: red, green, blue 147 C ------------------------------------------------- 148 C 149 zblight=0.5*ekb(ji,jj,1)*fse3t(ji,jj,1) 150 zglight=0.5*ekg(ji,jj,1)*fse3t(ji,jj,1) 151 zrlight=0.5*ekr(ji,jj,1)*fse3t(ji,jj,1) 152 C 153 e3lum(ji,jj,1) = parlux*qsr(ji,jj) 154 e4lum(ji,jj,1) = parlux*qsr(ji,jj) 155 e5lum(ji,jj,1) = parlux*qsr(ji,jj) 156 e6lum(ji,jj,1) = (1.-3.*parlux)*qsr(ji,jj) 157 C 158 END DO 159 END DO 160 161 DO jk = 2,jpkm1 162 DO jj = 1,jpj 163 DO ji = 1,jpi 164 C 165 C Separation in three light bands: red, green, blue 166 C ------------------------------------------------- 167 C 168 zblight1=ekb(ji,jj,jk-1)*fse3t(ji,jj,jk-1) 169 zglight1=ekg(ji,jj,jk-1)*fse3t(ji,jj,jk-1) 170 zrlight1=ekr(ji,jj,jk-1)*fse3t(ji,jj,jk-1) 171 172 e3lum(ji,jj,jk) = e3lum(ji,jj,jk-1)*exp(-zblight) 173 e4lum(ji,jj,jk) = e4lum(ji,jj,jk-1)*exp(-zglight) 174 e5lum(ji,jj,jk) = e5lum(ji,jj,jk-1)*exp(-zrlight) 175 e6lum(ji,jj,jk) = e6lum(ji,jj,jk-1) 176 & *exp(-fse3t(ji,jj,jk-1)/xsi1) 177 C 178 END DO 179 END DO 180 END DO 181 182 etot3(:,:,:)=e3lum(:,:,:)+e4lum(:,:,:)+e5lum(:,:,:) 183 & +e6lum(:,:,:) 184 185 ENDIF 186 C 187 C Computation of the euphotic depth 188 C --------------------------------- 189 C 190 zmeu(:,:) = 300. 191 192 DO jk = 2,jpkm1 193 DO jj = 1,jpj 194 DO ji = 1,jpi 195 IF (etot(ji,jj,jk).GE.0.0043*qsr(ji,jj)) THEN 196 zmeu(ji,jj) = fsdepw(ji,jj,jk+1) 197 ENDIF 198 END DO 199 END DO 200 END DO 201 C 202 zmeu(:,:)=min(300.,zmeu(:,:)) 203 C 204 C Computation of the mean light over the mixed layer depth 205 C -------------------------------------------------------- 206 C 207 zdepmoy = 0 208 etmp = 0. 209 emoy = 0. 210 211 DO jk = 1,jpkm1 212 DO jj = 1,jpj 213 DO ji = 1,jpi 214 if (fsdepw(ji,jj,jk+1).le.hmld(ji,jj)) then 215 etmp(ji,jj) = etmp(ji,jj)+etot(ji,jj,jk)*fse3t(ji,jj,jk) 216 zdepmoy(ji,jj)=zdepmoy(ji,jj)+fse3t(ji,jj,jk) 217 endif 218 END DO 219 END DO 220 END DO 221 222 emoy(:,:,:) = etot(:,:,:) 223 224 DO jk = 1,jpkm1 225 DO jj = 1,jpj 226 DO ji = 1,jpi 227 IF (fsdepw(ji,jj,jk+1).LE.hmld(ji,jj)) THEN 228 emoy(ji,jj,jk) = etmp(ji,jj)/(zdepmoy(ji,jj)+rtrn) 229 ENDIF 230 END DO 231 END DO 232 END DO 233 234 # if defined key_trc_diaadd 235 trc2d(:,:,11) = zmeu(:,:) 236 # endif 237 C 238 #endif 239 RETURN 240 END 85 zekb(ji,jj,jk) = xkrgb(1,irgb) 86 zekg(ji,jj,jk) = xkrgb(2,irgb) 87 zekr(ji,jj,jk) = xkrgb(3,irgb) 88 89 END DO 90 END DO 91 END DO 92 93 DO jj = 1,jpj 94 DO ji = 1,jpi 95 96 ! Separation in three light bands: red, green, blue 97 ! ------------------------------------------------- 98 99 zblight = 0.5 * zekb(ji,jj,1) * fse3t(ji,jj,1) 100 zglight = 0.5 * zekg(ji,jj,1) * fse3t(ji,jj,1) 101 zrlight = 0.5 * zekr(ji,jj,1) * fse3t(ji,jj,1) 102 103 ze1(ji,jj,1) = zparlux * qsr(ji,jj) * EXP(-zblight) 104 ze2(ji,jj,1) = zparlux * qsr(ji,jj) * EXP(-zglight) 105 ze3(ji,jj,1) = zparlux * qsr(ji,jj) * EXP(-zrlight) 106 107 END DO 108 END DO 109 110 DO jk = 2, jpkm1 111 DO jj = 1, jpj 112 DO ji = 1, jpi 113 114 ! Separation in three light bands: red, green, blue 115 ! ------------------------------------------------- 116 117 zblight = 0.5 * ( zekb(ji,jj,jk-1) * fse3t(ji,jj,jk-1) & 118 & + zekb(ji,jj,jk ) * fse3t(ji,jj,jk ) ) 119 zglight = 0.5 * ( zekg(ji,jj,jk-1) * fse3t(ji,jj,jk-1) & 120 & + zekg(ji,jj,jk ) * fse3t(ji,jj,jk ) ) 121 zrlight = 0.5 * ( zekr(ji,jj,jk-1) * fse3t(ji,jj,jk-1) & 122 & + zekr(ji,jj,jk ) * fse3t(ji,jj,jk ) ) 123 124 ze1(ji,jj,jk) = ze1(ji,jj,jk-1) * EXP(-zblight) 125 ze2(ji,jj,jk) = ze2(ji,jj,jk-1) * EXP(-zglight) 126 ze3(ji,jj,jk) = ze3(ji,jj,jk-1) * EXP(-zrlight) 127 128 END DO 129 END DO 130 END DO 131 132 etot(:,:,:) = ze1(:,:,:) + ze2(:,:,:) + ze3(:,:,:) 133 134 IF( ln_qsr_sms ) THEN 135 136 ! In the following, the vertical attenuation of qsr for the dynamics is computed 137 ! ------------------------------------------------------------------------------ 138 139 DO jj = 1, jpj 140 DO ji = 1, jpi 141 142 ! Separation in three light bands: red, green, blue 143 ! ------------------------------------------------- 144 145 zblight = 0.5 * zekb(ji,jj,1) * fse3t(ji,jj,1) 146 zglight = 0.5 * zekg(ji,jj,1) * fse3t(ji,jj,1) 147 zrlight = 0.5 * zekr(ji,jj,1) * fse3t(ji,jj,1) 148 149 ze3lum(ji,jj,1) = zparlux * qsr(ji,jj) 150 ze4lum(ji,jj,1) = zparlux * qsr(ji,jj) 151 ze5lum(ji,jj,1) = zparlux * qsr(ji,jj) 152 ze6lum(ji,jj,1) = (1.-3. * zparlux) * qsr(ji,jj) 153 154 END DO 155 END DO 156 157 DO jk = 2, jpkm1 158 DO jj = 1, jpj 159 DO ji = 1, jpi 160 161 ! Separation in three light bands: red, green, blue 162 ! ------------------------------------------------- 163 164 zblight1 = zekb(ji,jj,jk-1) * fse3t(ji,jj,jk-1) 165 zglight1 = zekg(ji,jj,jk-1) * fse3t(ji,jj,jk-1) 166 zrlight1 = zekr(ji,jj,jk-1) * fse3t(ji,jj,jk-1) 167 168 ze3lum(ji,jj,jk) = ze3lum(ji,jj,jk-1) * EXP( -zblight ) 169 ze4lum(ji,jj,jk) = ze4lum(ji,jj,jk-1) * EXP( -zglight ) 170 ze5lum(ji,jj,jk) = ze5lum(ji,jj,jk-1) * EXP( -zrlight ) 171 ze6lum(ji,jj,jk) = ze6lum(ji,jj,jk-1) * EXP( -fse3t(ji,jj,jk-1) / xsi1 ) 172 173 END DO 174 END DO 175 END DO 176 177 etot3(:,:,:) = ze3lum(:,:,:) + ze4lum(:,:,:) + ze5lum(:,:,:) + ze6lum(:,:,:) 178 179 ENDIF 180 181 ! Computation of the euphotic depth 182 ! --------------------------------- 183 184 zmeu(:,:) = 300.e0 185 186 DO jk = 2, jpkm1 187 DO jj = 1, jpj 188 DO ji = 1, jpi 189 IF( etot(ji,jj,jk) >= 0.0043 * qsr(ji,jj) ) zmeu(ji,jj) = fsdepw(ji,jj,jk+1) 190 END DO 191 END DO 192 END DO 193 194 zmeu(:,:) = MIN( 300., zmeu(:,:) ) 195 196 ! Computation of the mean light over the mixed layer depth 197 ! -------------------------------------------------------- 198 199 zdepmoy(:,:) = 0.e0 200 zetmp (:,:) = 0.e0 201 emoy (:,:,:) = 0.e0 202 203 DO jk = 1, jpkm1 204 DO jj = 1, jpj 205 DO ji = 1, jpi 206 IF( fsdepw(ji,jj,jk+1) <= hmld(ji,jj) ) THEN 207 zetmp (ji,jj) = zetmp (ji,jj) + etot(ji,jj,jk) * fse3t(ji,jj,jk) 208 zdepmoy(ji,jj) = zdepmoy(ji,jj) + fse3t(ji,jj,jk) 209 ENDIF 210 END DO 211 END DO 212 END DO 213 214 emoy(:,:,:) = etot(:,:,:) 215 216 DO jk = 1, jpkm1 217 DO jj = 1, jpj 218 DO ji = 1, jpi 219 IF( fsdepw(ji,jj,jk+1) <= hmld(ji,jj) ) THEN 220 emoy(ji,jj,jk) = zetmp(ji,jj) / ( zdepmoy(ji,jj) + rtrn ) 221 ENDIF 222 END DO 223 END DO 224 END DO 225 226 # if defined key_trc_diaadd 227 trc2d(:,:,11) = zmeu(:,:) 228 # endif 229 ! 230 END SUBROUTINE p4z_opt 231 232 #else 233 !!====================================================================== 234 !! Dummy module : No PISCES bio-model 235 !!====================================================================== 236 CONTAINS 237 SUBROUTINE p4z_opt ! Empty routine 238 END SUBROUTINE p4z_opt 239 #endif 240 241 !!====================================================================== 242 END MODULE p4zopt -
branches/dev_001_GM/NEMO/TOP_SRC/PISCES_SMS/p4zprg.F90
r774 r775 1 MODULE p4zprg 2 !!====================================================================== 3 !! *** MODULE p4zprg *** 4 !! TOP : PISCES Source Minus Sink manager 5 !!====================================================================== 6 !! History : 1.0 ! 2004-03 (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_prg : Time loop of passive tracers sms 14 !!---------------------------------------------------------------------- 15 USE oce_trc ! 16 USE trp_trc 17 USE sms 18 USE lbclnk 19 USE lib_mpp 20 21 USE p4zint ! 22 USE p4zche ! 23 USE p4zbio ! 24 USE p4zsed ! 25 USE p4zlys ! 26 USE p4zflx ! 27 28 IMPLICIT NONE 29 PRIVATE 1 30 2 CCC $Header$ 3 CCC TOP 1.0 , LOCEAN-IPSL (2005) 4 C This software is governed by CeCILL licence see modipsl/doc/NEMO_CeCILL.txt 5 C --------------------------------------------------------------------------- 6 CDIR$ LIST 7 SUBROUTINE p4zprg(kt) 8 CCC--------------------------------------------------------------------- 9 CCC 10 CCC ROUTINE p4zprg : PISCES MODEL 11 CCC ***************************** 12 CCC 13 CCC PURPOSE : 14 CCC --------- 15 CCC Call Biological sources and sinks subroutines 16 CCC 17 CC INPUT : 18 CC ----- 19 CC argument 20 CC ktask : task identificator 21 CC kt : time step 22 CC common 23 CC all the common defined in opa 24 CC 25 CC 26 CC OUTPUT : : no 27 CC ------ 28 CC 29 CC WORKSPACE : 30 CC --------- 31 CC 32 CC EXTERNAL : 33 CC -------- 34 CC p4zche, p4zint, p4zlys, p4zbio, p4zsed, p4zflx 35 CC 36 CC MODIFICATIONS: 37 CC -------------- 38 CC original : O. AUMONT (2004) 39 CC---------------------------------------------------------------------- 40 CC parameters and commons 41 CC ====================== 42 CDIR$ NOLIST 43 USE trp_trc 44 USE sms 45 CC 46 USE oce_trc 47 USE lbclnk 48 USE lib_mpp 49 CC 50 IMPLICIT NONE 51 CDIR$ LIST 52 CC---------------------------------------------------------------------- 53 CC local declarations 54 CC ================== 31 PUBLIC p4z_prg ! called in trcsms.F90 55 32 56 INTEGER kt 57 #if defined key_top && defined key_pisces 58 INTEGER jnt, jn 33 !!---------------------------------------------------------------------- 34 !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007) 35 !! $Header:$ 36 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 37 !!---------------------------------------------------------------------- 59 38 60 C 61 C this part is without macrotasking coding 62 C 63 C Call an intermediate routine that in turns, calls chemistry 64 C and another routine on a daily basis 65 C ----------------------------------------------------------- 66 C 67 CALL p4zslow(kt) 39 CONTAINS 68 40 69 C...................................................................... 70 C 71 C Compute soft tissue production (POC) 72 C ------------------------------------ 73 74 do jnt=1,nrdttrc 75 C 76 CALL p4zbio 77 78 C 79 C...................................................................... 80 C 81 C Compute soft tissue remineralisation 82 C ------------------------------------ 83 C 84 CALL p4zsed 85 86 C 87 trb=trn 88 END DO 89 C 90 C...................................................................... 91 C 92 C Compute CaCO3 saturation 93 C ------------------------ 94 C 95 CALL p4zlys 96 97 C 98 C...................................................................... 99 C 100 C Compute surface fluxes 101 C ---------------------- 102 C 103 CALL p4zflx 41 SUBROUTINE p4z_prg( kt ) 42 !!--------------------------------------------------------------------- 43 !! *** ROUTINE p4z_prg *** 44 !! 45 !! ** Purpose : Managment of the call to Biological sources and sinks 46 !! routines of PISCES bio-model 47 !! 48 !! ** Method : - at each new day ... 49 !! - several calls of bio and sed ??? 50 !! - ... 51 !!--------------------------------------------------------------------- 52 INTEGER, INTENT( in ) :: kt ! ocean time-step index 53 !! 54 INTEGER :: jnt, jn 55 INTEGER :: iyy, imm, idd 56 !!--------------------------------------------------------------------- 104 57 105 58 106 DO jn=1 , jptra 107 CALL lbc_lnk(trn(:,:,:,jn), 'T', 1. ) 108 CALL lbc_lnk(trb(:,:,:,jn), 'T', 1. ) 109 CALL lbc_lnk(tra(:,:,:,jn), 'T', 1. ) 59 iyy = ndastp/10000 60 imm = (ndastp - iyy*10000)/100 61 idd = (ndastp - iyy*10000 - imm*100) 62 63 IF( ndayflxtr /= idd) THEN ! New days 64 ! 65 ndayflxtr = idd 66 67 CALL p4z_che ! computation of chemical constants 68 69 CALL p4z_int( kt ) ! computation of various rates for biogeochemistry 70 ! 71 ENDIF 72 73 74 DO jnt = 1, nrdttrc ! ??? 75 ! 76 CALL p4z_bio ! Compute soft tissue production (POC) 77 78 CALL p4z_sed ! compute soft tissue remineralisation 79 ! 80 trb(:,:,:,:) = trn(:,:,:,:) 81 ! 110 82 END DO 111 83 112 C 113 C...................................................................... 114 C 115 #endif 116 C 117 RETURN 118 END 84 CALL p4z_lys ! Compute CaCO3 saturation 85 86 CALL p4z_flx ! Compute surface fluxes 87 88 DO jn = 1, jptra 89 CALL lbc_lnk( trn(:,:,:,jn), 'T', 1. ) 90 CALL lbc_lnk( trb(:,:,:,jn), 'T', 1. ) 91 CALL lbc_lnk( tra(:,:,:,jn), 'T', 1. ) 92 END DO 93 ! 94 END SUBROUTINE p4z_prg 95 96 #else 97 !!====================================================================== 98 !! Dummy module : No PISCES bio-model 99 !!====================================================================== 100 CONTAINS 101 SUBROUTINE p4z_prg( kt ) ! Empty routine 102 INTEGER, INTENT( in ) :: kt 103 WRITE(*,*) 'p4z_prg: You should not have seen this print! error?', kt 104 END SUBROUTINE p4z_prg 105 #endif 106 107 !!====================================================================== 108 END MODULE p4zprg -
branches/dev_001_GM/NEMO/TOP_SRC/PISCES_SMS/p4zprod.F90
r774 r775 1 2 CCC $Header$ 3 CCC TOP 1.0 , LOCEAN-IPSL (2005) 4 C This software is governed by CeCILL licence see modipsl/doc/NEMO_CeCILL.txt 5 C --------------------------------------------------------------------------- 6 CDIR$ LIST 7 SUBROUTINE p4zprod 8 #if defined key_top && defined key_pisces 9 CCC--------------------------------------------------------------------- 10 CCC 11 CCC ROUTINE p4zprod : PISCES MODEL 12 CCC ****************************** 13 CCC 14 CCC PURPOSE : 15 CCC --------- 16 CCC Compute the phytoplankton production depending on 17 CCC light, temperature and nutrient availability 18 CCC 19 CC INPUT : 20 CC ----- 21 CC argument 22 CC None 23 CC common 24 CC all the common defined in opa 25 CC 26 CC 27 CC OUTPUT : : no 28 CC ------ 29 CC 30 CC EXTERNAL : 31 CC -------- 32 CC p4zday 33 CC 34 CC MODIFICATIONS: 35 CC -------------- 36 CC original : O. Aumont (2004) 37 CC---------------------------------------------------------------------- 38 CC parameters and commons 39 CC ====================== 40 CDIR$ NOLIST 41 USE oce_trc 42 USE trp_trc 43 USE sms 44 IMPLICIT NONE 45 #include "domzgr_substitute.h90" 46 CDIR$ LIST 47 CC---------------------------------------------------------------------- 48 CC local declarations 49 CC ================== 50 INTEGER ji, jj, jk 51 REAL silfac,pislopen(jpi,jpj,jpk),pislope2n(jpi,jpj,jpk) 52 REAL zmixnano(jpi,jpj),zmixdiat(jpi,jpj),zfact 53 REAL prdiachl,prbiochl,silim,ztn,zadap,zadap2 54 REAL ysopt(jpi,jpj,jpk),pislopead(jpi,jpj,jpk) 55 REAL prdia(jpi,jpj,jpk),prbio(jpi,jpj,jpk) 56 REAL etot2(jpi,jpj,jpk),pislopead2(jpi,jpj,jpk) 57 REAL xlim,silfac2,siborn,zprod 58 REAL zmxltst,zmxlday,xlim1 59 C 60 C Computation of the optimal production 61 C ------------------------------------- 62 C 63 C 64 prmax(:,:,:)=0.6/rjjss*tgfunc(:,:,:) 65 # if defined key_off_degrad 66 & *facvol(:,:,:) 67 # endif 68 C 69 C Computation of the day length 70 C ----------------------------- 71 C 72 call p4zday 73 74 DO jk = 1,jpkm1 75 DO jj = 1,jpj 76 DO ji = 1,jpi 77 C 78 C Computation of the P-I slope for nanos and diatoms 79 C -------------------------------------------------- 80 C 81 ztn=max(0.,tn(ji,jj,jk)-15.) 82 zadap=1.+2.*ztn/(2.+ztn) 83 zadap2=1. 84 85 zfact=exp(-0.21*emoy(ji,jj,jk)) 86 87 pislopead(ji,jj,jk)=pislope*(1.+zadap*zfact) 88 pislopead2(ji,jj,jk)=pislope2*(1.+zadap2*zfact) 89 90 pislopen(ji,jj,jk)=pislopead(ji,jj,jk) 91 & *trn(ji,jj,jk,jpnch)/(rtrn+trn(ji,jj,jk,jpphy)*12.) 92 & /(prmax(ji,jj,jk)*rjjss*xlimphy(ji,jj,jk)+rtrn) 93 94 pislope2n(ji,jj,jk)=pislopead2(ji,jj,jk) 95 & *trn(ji,jj,jk,jpdch)/(rtrn+trn(ji,jj,jk,jpdia)*12.) 96 & /(prmax(ji,jj,jk)*rjjss*xlimdia(ji,jj,jk)+rtrn) 97 C 98 END DO 99 END DO 100 END DO 101 102 DO jk = 1,jpkm1 103 DO jj = 1,jpj 104 DO ji = 1,jpi 105 C 106 C Computation of production function 107 C ---------------------------------- 108 C 109 prbio(ji,jj,jk) = prmax(ji,jj,jk) 110 & *(1.-exp(-pislopen(ji,jj,jk)*etot(ji,jj,jk))) 111 prdia(ji,jj,jk) = prmax(ji,jj,jk) 112 & *(1.-exp(-pislope2n(ji,jj,jk)*etot(ji,jj,jk))) 113 114 END DO 115 END DO 116 END DO 117 118 DO jk = 1,jpkm1 119 DO jj = 1,jpj 120 DO ji = 1,jpi 121 C 122 C Si/C of diatoms 123 C ------------------------ 124 C Si/C increases with iron stress and silicate availability 125 C Si/C is arbitrariliy increased for very high Si concentrations 126 C to mimic the very high ratios observed in the Southern Ocean 127 c (silpot2) 128 C 129 C 130 xlim1=trn(ji,jj,jk,jpsil)/(trn(ji,jj,jk,jpsil)+xksi1) 131 xlim=xdiatno3(ji,jj,jk)+xdiatnh4(ji,jj,jk) 132 C 133 silim=min(prdia(ji,jj,jk)/(rtrn+prmax(ji,jj,jk)), 134 & trn(ji,jj,jk,jpfer)/(concdfe(ji,jj,jk)+trn(ji,jj,jk,jpfer)), 135 & trn(ji,jj,jk,jppo4)/(concdnh4+trn(ji,jj,jk,jppo4)), 136 & xlim) 137 silfac=5.4*exp(-4.23*silim)*max(0.,min(1.,2.2*(xlim1-0.5)))+1. 138 siborn=max(0.,(trn(ji,jj,jk,jpsil)-15.E-6)) 139 silfac2=1.+3.*siborn/(siborn+xksi2) 140 silfac=min(6.4,silfac*silfac2) 141 C 142 ysopt(ji,jj,jk)=grosip*trn(ji,jj,jk,jpsil)/(trn(ji,jj,jk,jpsil) 143 $ +xksi1)*silfac 144 C 145 END DO 146 END DO 147 END DO 148 C 149 C Computation of the limitation term due to 150 C A mixed layer deeper than the euphotic depth 151 C -------------------------------------------- 152 C 153 DO jj=1,jpj 154 DO ji=1,jpi 155 zmxltst=max(0.,hmld(ji,jj)-zmeu(ji,jj)) 156 zmxlday=zmxltst**2/rjjss 157 zmixnano(ji,jj)=1.-zmxlday/(1.+zmxlday) 158 zmixdiat(ji,jj)=1.-zmxlday/(3.+zmxlday) 159 END DO 160 END DO 1 MODULE p4zprod 2 !!====================================================================== 3 !! *** MODULE p4zprod *** 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_prod : 14 !!---------------------------------------------------------------------- 15 USE oce_trc ! 16 USE trp_trc ! 17 USE sms ! 18 USE p4zday ! 19 20 IMPLICIT NONE 21 PRIVATE 22 23 PUBLIC p4z_prod ! called in p4zbio.F90 24 25 !!* Substitution 26 # include "domzgr_substitute.h90" 27 !!---------------------------------------------------------------------- 28 !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007) 29 !! $Header:$ 30 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 31 !!---------------------------------------------------------------------- 32 33 CONTAINS 34 35 SUBROUTINE p4z_prod 36 !!--------------------------------------------------------------------- 37 !! *** ROUTINE p4z_prod *** 38 !! 39 !! ** Purpose : Compute the phytoplankton production depending on 40 !! light, temperature and nutrient availability 41 !! 42 !! ** Method : - ??? 43 !!--------------------------------------------------------------------- 44 INTEGER :: ji, jj, jk 45 REAL(wp) :: zsilfac, zfact 46 REAL(wp) :: zprdiachl, zprbiochl, zsilim, ztn, zadap, zadap2 47 REAL(wp) :: zlim, zsilfac2, zsiborn, zprod 48 REAL(wp) :: zmxltst, zmxlday, zlim1 49 REAL(wp), DIMENSION(jpi,jpj) :: zmixnano , zmixdiat 50 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zpislopen, zpislope2n 51 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zsopt , zpislopead 52 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zprdia , zprbio 53 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zetot2 , zpislopead2 54 !!--------------------------------------------------------------------- 55 56 ! Computation of the optimal production 57 ! ------------------------------------- 58 59 # if defined key_off_degrad 60 prmax(:,:,:) = 0.6 / rjjss * tgfunc(:,:,:) * facvol(:,:,:) 61 # else 62 prmax(:,:,:) = 0.6 / rjjss * tgfunc(:,:,:) 63 # endif 64 65 CALL p4z_day ! Computation of the day length 66 67 68 DO jk = 1, jpkm1 69 DO jj = 1, jpj 70 DO ji = 1, jpi 71 72 ! Computation of the P-I slope for nanos and diatoms 73 ! -------------------------------------------------- 74 75 ztn = MAX( 0., tn(ji,jj,jk) - 15. ) 76 zadap = 1.+ 2.* ztn / ( 2.+ ztn ) 77 zadap2 = 1.e0 78 79 zfact = EXP( -0.21 * emoy(ji,jj,jk) ) 80 81 zpislopead (ji,jj,jk) = pislope * ( 1.+ zadap * zfact ) 82 zpislopead2(ji,jj,jk) = pislope2 * ( 1.+ zadap2 * zfact ) 83 84 zpislopen(ji,jj,jk) = zpislopead(ji,jj,jk) * trn(ji,jj,jk,jpnch) & 85 & / ( trn(ji,jj,jk,jpphy) * 12. + rtrn ) & 86 & / ( prmax(ji,jj,jk) * rjjss * xlimphy(ji,jj,jk) + rtrn ) 87 88 zpislope2n(ji,jj,jk) = zpislopead2(ji,jj,jk) * trn(ji,jj,jk,jpdch) & 89 & / ( trn(ji,jj,jk,jpdia) * 12. + rtrn ) & 90 & / ( prmax(ji,jj,jk) * rjjss * xlimdia(ji,jj,jk) + rtrn ) 91 92 END DO 93 END DO 94 END DO 95 96 DO jk = 1, jpkm1 97 DO jj = 1, jpj 98 DO ji = 1, jpi 99 100 ! Computation of production function 101 ! ---------------------------------- 102 103 zprbio(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislopen (ji,jj,jk) * etot(ji,jj,jk) ) ) 104 zprdia(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislope2n(ji,jj,jk) * etot(ji,jj,jk) ) ) 105 106 END DO 107 END DO 108 END DO 109 110 DO jk = 1, jpkm1 111 DO jj = 1, jpj 112 DO ji = 1, jpi 113 114 ! Si/C of diatoms 115 ! ------------------------ 116 ! Si/C increases with iron stress and silicate availability 117 ! Si/C is arbitrariliy increased for very high Si concentrations 118 ! to mimic the very high ratios observed in the Southern Ocean (silpot2) 119 120 zlim1 = trn(ji,jj,jk,jpsil) / ( trn(ji,jj,jk,jpsil) + xksi1 ) 121 zlim = xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) 122 123 zsilim = MIN( zprdia(ji,jj,jk) / ( rtrn + prmax(ji,jj,jk) ), & 124 & trn(ji,jj,jk,jpfer) / ( concdfe(ji,jj,jk) + trn(ji,jj,jk,jpfer) ), & 125 & trn(ji,jj,jk,jppo4) / ( concdnh4 + trn(ji,jj,jk,jppo4) ), & 126 & zlim ) 127 zsilfac = 5.4 * EXP( -4.23 * zsilim ) * MAX( 0.e0, MIN( 1., 2.2 * ( zlim1 - 0.5 ) ) ) + 1.e0 128 zsiborn = MAX( 0.e0, ( trn(ji,jj,jk,jpsil) - 15.e-6 ) ) 129 zsilfac2 = 1.+ 3.* zsiborn / ( zsiborn + xksi2 ) 130 zsilfac = MIN( 6.4,zsilfac * zsilfac2) 131 132 zsopt(ji,jj,jk) = grosip * trn(ji,jj,jk,jpsil) / ( trn(ji,jj,jk,jpsil) + xksi1 ) * zsilfac 133 134 END DO 135 END DO 136 END DO 137 138 ! Computation of the limitation term due to 139 ! A mixed layer deeper than the euphotic depth 140 ! -------------------------------------------- 141 142 DO jj = 1, jpj 143 DO ji = 1, jpi 144 zmxltst = MAX( 0.e0, hmld(ji,jj) - zmeu(ji,jj) ) 145 zmxlday = zmxltst**2 / rjjss 146 zmixnano(ji,jj) = 1.- zmxlday / ( 1.+ zmxlday ) 147 zmixdiat(ji,jj) = 1.- zmxlday / ( 3.+ zmxlday ) 148 END DO 149 END DO 161 150 162 DO jk = 1,jpkm1 163 DO jj = 1,jpj 164 DO ji = 1,jpi 165 if (fsdepw(ji,jj,jk+1).le.hmld(ji,jj)) then 166 C 167 C Mixed-layer effect on production 168 C -------------------------------- 169 C 170 prbio(ji,jj,jk)=prbio(ji,jj,jk)*zmixnano(ji,jj) 171 prdia(ji,jj,jk)=prdia(ji,jj,jk)*zmixdiat(ji,jj) 172 endif 173 END DO 174 END DO 175 END DO 176 C 177 DO jk = 1,jpkm1 178 DO jj = 1,jpj 179 DO ji = 1,jpi 180 C 181 C Computation of the maximum light intensity 182 C ------------------------------------------ 183 C 184 etot2(ji,jj,jk)=etot(ji,jj,jk)*24./(strn(ji,jj)+rtrn) 185 IF (strn(ji,jj).lt.1.) etot2(ji,jj,jk)=etot(ji,jj,jk) 186 C 187 END DO 188 END DO 189 END DO 190 191 DO jk = 1,jpkm1 192 DO jj = 1,jpj 193 DO ji = 1,jpi 194 C 195 C Computation of the various production terms for nanophyto. 196 C ---------------------------------------------------------- 197 C 198 pislopen(ji,jj,jk)=pislopead(ji,jj,jk) 199 & *trn(ji,jj,jk,jpnch)/(rtrn+trn(ji,jj,jk,jpphy)*12.) 200 & /(prmax(ji,jj,jk)*rjjss*max(0.1,xlimphy(ji,jj,jk))+rtrn) 201 202 prbiochl = prmax(ji,jj,jk) 203 & *(1.-exp(-pislopen(ji,jj,jk)*etot2(ji,jj,jk))) 204 205 prorca(ji,jj,jk) = prbio(ji,jj,jk) 206 & *xlimphy(ji,jj,jk)*trn(ji,jj,jk,jpphy)*rfact2 207 208 pronew(ji,jj,jk)=prorca(ji,jj,jk)*xnanono3(ji,jj,jk) 209 & /(xnanono3(ji,jj,jk)+xnanonh4(ji,jj,jk)+rtrn) 210 proreg(ji,jj,jk)=prorca(ji,jj,jk)-pronew(ji,jj,jk) 211 C 212 zprod=rjjss*prorca(ji,jj,jk)*prbiochl*trn(ji,jj,jk,jpphy) 213 & *max(0.1,xlimphy(ji,jj,jk)) 214 215 prorca5(ji,jj,jk) = (fecnm)**2*zprod/chlcnm 216 & /(pislopead(ji,jj,jk)*etot2(ji,jj,jk)*trn(ji,jj,jk,jpnfe) 217 & +rtrn) 218 219 prorca6(ji,jj,jk) = chlcnm*144.*zprod/(pislopead(ji,jj,jk) 220 & *etot2(ji,jj,jk)*trn(ji,jj,jk,jpnch)+rtrn) 221 222 END DO 223 END DO 224 END DO 225 226 DO jk = 1,jpkm1 227 DO jj = 1,jpj 228 DO ji = 1,jpi 229 C 230 C Computation of the various production terms for diatoms 231 C ------------------------------------------------------- 232 C 233 pislope2n(ji,jj,jk)=pislopead2(ji,jj,jk) 234 & *trn(ji,jj,jk,jpdch)/(rtrn+trn(ji,jj,jk,jpdia)*12.) 235 & /(prmax(ji,jj,jk)*rjjss*max(0.1,xlimdia(ji,jj,jk))+rtrn) 236 237 prdiachl = prmax(ji,jj,jk) 238 & *(1.-exp(-etot2(ji,jj,jk)*pislope2n(ji,jj,jk))) 239 C 240 prorca2(ji,jj,jk) = prdia(ji,jj,jk) 241 & *xlimdia(ji,jj,jk)*trn(ji,jj,jk,jpdia)*rfact2 242 243 C 244 pronew2(ji,jj,jk)=prorca2(ji,jj,jk)*xdiatno3(ji,jj,jk) 245 & /(xdiatno3(ji,jj,jk)+xdiatnh4(ji,jj,jk)+rtrn) 246 proreg2(ji,jj,jk)=prorca2(ji,jj,jk)-pronew2(ji,jj,jk) 247 prorca3(ji,jj,jk) = prorca2(ji,jj,jk)*ysopt(ji,jj,jk) 248 C 249 zprod=rjjss*prorca2(ji,jj,jk)*prdiachl*trn(ji,jj,jk,jpdia) 250 & *max(0.1,xlimdia(ji,jj,jk)) 251 252 C 253 prorca4(ji,jj,jk) = (fecdm)**2*zprod/chlcdm 254 & /(pislopead2(ji,jj,jk)*etot2(ji,jj,jk)*trn(ji,jj,jk,jpdfe) 255 & +rtrn) 256 C 257 prorca7(ji,jj,jk) = chlcdm*144.*zprod/(pislopead2(ji,jj,jk) 258 & *etot2(ji,jj,jk)*trn(ji,jj,jk,jpdch)+rtrn) 259 C 260 END DO 261 END DO 262 END DO 263 C 264 #endif 265 RETURN 266 END 151 DO jk = 1, jpkm1 152 DO jj = 1, jpj 153 DO ji = 1, jpi 154 IF( fsdepw(ji,jj,jk+1) <= hmld(ji,jj) ) THEN 155 156 ! Mixed-layer effect on production 157 ! -------------------------------- 158 zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * zmixnano(ji,jj) 159 zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * zmixdiat(ji,jj) 160 ENDIF 161 END DO 162 END DO 163 END DO 164 165 DO jk = 1, jpkm1 166 DO jj = 1, jpj 167 DO ji = 1, jpi 168 169 ! Computation of the maximum light intensity 170 ! ------------------------------------------ 171 zetot2(ji,jj,jk) = etot(ji,jj,jk) * 24. / ( strn(ji,jj) + rtrn ) 172 IF( strn(ji,jj) < 1.e0 ) zetot2(ji,jj,jk) = etot(ji,jj,jk) 173 174 END DO 175 END DO 176 END DO 177 178 DO jk = 1, jpkm1 179 DO jj = 1, jpj 180 DO ji = 1, jpi 181 182 ! Computation of the various production terms for nanophyto. 183 ! ---------------------------------------------------------- 184 zpislopen(ji,jj,jk) = zpislopead(ji,jj,jk) & 185 & * trn(ji,jj,jk,jpnch) / ( rtrn + trn(ji,jj,jk,jpphy) * 12.) & 186 & / ( prmax(ji,jj,jk) * rjjss * MAX( 0.1, xlimphy(ji,jj,jk) ) + rtrn ) 187 188 zprbiochl = prmax(ji,jj,jk) * ( 1.- EXP( -zpislopen(ji,jj,jk) * zetot2(ji,jj,jk) ) ) 189 190 prorca(ji,jj,jk) = zprbio(ji,jj,jk) * xlimphy(ji,jj,jk) * trn(ji,jj,jk,jpphy) * rfact2 191 192 pronew(ji,jj,jk) = prorca(ji,jj,jk) * xnanono3(ji,jj,jk) & 193 & / ( xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) + rtrn ) 194 proreg(ji,jj,jk) = prorca(ji,jj,jk) - pronew(ji,jj,jk) 195 196 zprod = rjjss * prorca(ji,jj,jk) * zprbiochl * trn(ji,jj,jk,jpphy) & 197 & * MAX( 0.1, xlimphy(ji,jj,jk) ) 198 199 prorca5(ji,jj,jk) = (fecnm)**2 * zprod / chlcnm & 200 & / ( zpislopead(ji,jj,jk) * zetot2(ji,jj,jk) * trn(ji,jj,jk,jpnfe) + rtrn ) 201 202 prorca6(ji,jj,jk) = chlcnm * 144. * zprod & 203 & / ( zpislopead(ji,jj,jk) * zetot2(ji,jj,jk) * trn(ji,jj,jk,jpnch) + rtrn ) 204 205 END DO 206 END DO 207 END DO 208 209 DO jk = 1, jpkm1 210 DO jj = 1, jpj 211 DO ji = 1, jpi 212 213 ! Computation of the various production terms for diatoms 214 ! ------------------------------------------------------- 215 zpislope2n(ji,jj,jk) = zpislopead2(ji,jj,jk) * trn(ji,jj,jk,jpdch) & 216 & / ( rtrn + trn(ji,jj,jk,jpdia) * 12.) & 217 & / ( prmax(ji,jj,jk) * rjjss * MAX( 0.1, xlimdia(ji,jj,jk) ) + rtrn ) 218 219 zprdiachl = prmax(ji,jj,jk) * ( 1.- EXP( -zetot2(ji,jj,jk) * zpislope2n(ji,jj,jk) ) ) 220 221 prorca2(ji,jj,jk) = zprdia(ji,jj,jk) * xlimdia(ji,jj,jk) * trn(ji,jj,jk,jpdia) * rfact2 222 223 pronew2(ji,jj,jk) = prorca2(ji,jj,jk) * xdiatno3(ji,jj,jk) & 224 & / ( xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) + rtrn ) 225 proreg2(ji,jj,jk) = prorca2(ji,jj,jk) - pronew2(ji,jj,jk) 226 prorca3(ji,jj,jk) = prorca2(ji,jj,jk) * zsopt(ji,jj,jk) 227 228 zprod=rjjss * prorca2(ji,jj,jk) * zprdiachl * trn(ji,jj,jk,jpdia) * MAX( 0.1, xlimdia(ji,jj,jk) ) 229 230 prorca4(ji,jj,jk) = (fecdm)**2 * zprod / chlcdm & 231 & / ( zpislopead2(ji,jj,jk) * zetot2(ji,jj,jk) * trn(ji,jj,jk,jpdfe) + rtrn ) 232 233 prorca7(ji,jj,jk) = chlcdm * 144. * zprod & 234 & / ( zpislopead2(ji,jj,jk) * zetot2(ji,jj,jk) * trn(ji,jj,jk,jpdch) + rtrn ) 235 236 END DO 237 END DO 238 END DO 239 ! 240 END SUBROUTINE p4z_prod 241 242 #else 243 !!====================================================================== 244 !! Dummy module : No PISCES bio-model 245 !!====================================================================== 246 CONTAINS 247 SUBROUTINE p4z_prod ! Empty routine 248 END SUBROUTINE p4z_prod 249 #endif 250 251 !!====================================================================== 252 END MODULE p4zprod -
branches/dev_001_GM/NEMO/TOP_SRC/PISCES_SMS/p4zrem.F90
r774 r775 1 2 CCC $Header: /home/opalod/NEMOCVSROOT/NEMO/TOP_SRC/SMS/p4zrem.F,v 1.8 2007/10/12 09:28:41 opalod Exp $ 3 CCC TOP 1.0 , LOCEAN-IPSL (2005) 4 C This software is governed by CeCILL licence see modipsl/doc/NEMO_CeCILL.txt 5 C --------------------------------------------------------------------------- 6 CDIR$ LIST 7 SUBROUTINE p4zrem 8 #if defined key_top && defined key_pisces 9 CCC--------------------------------------------------------------------- 10 CCC 11 CCC ROUTINE p4zrem : PISCES MODEL 12 CCC ***************************** 13 CCC 14 CCC PURPOSE : 15 CCC --------- 16 CCC Compute remineralization/scavenging of organic compounds 17 CCC 18 CC INPUT : 19 CC ----- 20 CC common 21 CC all the common defined in opa 22 CC 23 CC 24 CC OUTPUT : : no 25 CC ------ 26 CC 27 CC EXTERNAL : 28 CC -------- 29 CC None 30 CC 31 CC MODIFICATIONS: 32 CC -------------- 33 CC original : 2004 - O. Aumont 34 CC---------------------------------------------------------------------- 35 CC parameters and commons 36 CC ====================== 37 CDIR$ NOLIST 38 USE oce_trc 39 USE trp_trc 40 USE sms 41 IMPLICIT NONE 42 #include "domzgr_substitute.h90" 43 CDIR$ LIST 44 CC---------------------------------------------------------------------- 45 CC local declarations 46 CC ================== 47 INTEGER ji, jj, jk 48 REAL remip,remik,xlam1b 49 REAL xkeq,xfeequi,siremin 50 REAL zsatur,zsatur2,znusil,zdepbac(jpi,jpj,jpk) 51 REAL zlamfac,zstep,fesatur(jpi,jpj,jpk) 52 REAL ztempbac(jpi,jpj) 53 C 54 C Time step duration for the biology 55 C 56 zstep=rfact2/rjjss 57 C 58 C Computation of the mean phytoplankton concentration as 59 C a crude estimate of the bacterial biomass 60 C -------------------------------------------------- 61 C 62 DO jk=1,jpkm1 63 DO jj = 1, jpj 64 DO ji = 1, jpi 65 IF (fsdept(ji,jj,jk).lt.120.) THEN 66 zdepbac(ji,jj,jk)=min(0.7*(trn(ji,jj,jk,jpzoo) 67 & +2*trn(ji,jj,jk,jpmes)),4E-6) 68 ztempbac(ji,jj)=zdepbac(ji,jj,jk) 69 ELSE 70 zdepbac(ji,jj,jk)=min(1.,120./fsdept(ji,jj,jk)) 71 & *ztempbac(ji,jj) 72 ENDIF 73 END DO 74 END DO 75 END DO 76 77 DO jk = 1,jpkm1 78 DO jj = 1,jpj 79 DO ji = 1,jpi 80 C 81 C DENITRIFICATION FACTOR COMPUTED FROM O2 LEVELS 82 C ---------------------------------------------- 83 C 84 nitrfac(ji,jj,jk)= 85 & max(0.,0.4*(6.E-6-trn(ji,jj,jk,jpoxy))/(oxymin+ 86 & trn(ji,jj,jk,jpoxy))) 87 END DO 88 END DO 89 END DO 90 91 nitrfac(:,:,:)=min(1.,nitrfac(:,:,:)) 92 93 DO jk = 1,jpkm1 94 DO jj = 1,jpj 95 DO ji = 1,jpi 96 C 97 C DOC ammonification. Depends on depth, phytoplankton biomass 98 C and a limitation term which is supposed to be a parameterization 99 C of the bacterial activity. 100 C ---------------------------------------------------------------- 101 C 102 remik = xremik*zstep/1E-6*xlimbac(ji,jj,jk) 103 & *zdepbac(ji,jj,jk) 1 MODULE p4zrem 2 !!====================================================================== 3 !! *** MODULE p4zrem *** 4 !! TOP : PISCES Compute remineralization/scavenging of organic compounds 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_top' and TOP models 12 !! 'key_pisces' PISCES bio-model 13 !!---------------------------------------------------------------------- 14 !! p4z_rem : Compute remineralization/scavenging of organic compounds 15 !!---------------------------------------------------------------------- 16 USE oce_trc ! 17 USE trp_trc ! 18 USE sms ! 19 20 IMPLICIT NONE 21 PRIVATE 22 23 PUBLIC p4z_rem ! called in p4zbio.F90 24 25 !!* Substitution 26 # include "domzgr_substitute.h90" 27 !!---------------------------------------------------------------------- 28 !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007) 29 !! $Header:$ 30 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 31 !!---------------------------------------------------------------------- 32 33 CONTAINS 34 35 SUBROUTINE p4z_rem 36 !!--------------------------------------------------------------------- 37 !! *** ROUTINE p4z_rem *** 38 !! 39 !! ** Purpose : Compute remineralization/scavenging of organic compounds 40 !! 41 !! ** Method : - ??? 42 !!--------------------------------------------------------------------- 43 INTEGER :: ji, jj, jk 44 REAL(wp) :: zremip, zremik , zlam1b 45 REAL(wp) :: zkeq , zfeequi, zsiremin 46 REAL(wp) :: zsatur, zsatur2, znusil 47 REAL(wp) :: zlamfac, zstep 48 REAL(wp), DIMENSION(jpi,jpj) :: ztempbac 49 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zdepbac, zfesatur 50 !!--------------------------------------------------------------------- 51 52 zstep = rfact2 / rjjss ! Time step duration for the biology 53 54 55 ! Computation of the mean phytoplankton concentration as 56 ! a crude estimate of the bacterial biomass 57 ! -------------------------------------------------- 58 59 DO jk = 1, jpkm1 60 DO jj = 1, jpj 61 DO ji = 1, jpi 62 IF( fsdept(ji,jj,jk) < 120. ) THEN 63 zdepbac(ji,jj,jk) = MIN( 0.7 * ( trn(ji,jj,jk,jpzoo) + 2.* trn(ji,jj,jk,jpmes) ), 4.e-6 ) 64 ztempbac(ji,jj) = zdepbac(ji,jj,jk) 65 ELSE 66 zdepbac(ji,jj,jk) = MIN( 1., 120./ fsdept(ji,jj,jk) ) * ztempbac(ji,jj) 67 ENDIF 68 END DO 69 END DO 70 END DO 71 72 DO jk = 1, jpkm1 73 DO jj = 1, jpj 74 DO ji = 1, jpi 75 76 ! DENITRIFICATION FACTOR COMPUTED FROM O2 LEVELS 77 ! ---------------------------------------------- 78 79 nitrfac(ji,jj,jk) = MAX( 0.e0, 0.4 * ( 6.e-6 - trn(ji,jj,jk,jpoxy) ) & 80 & / ( oxymin + trn(ji,jj,jk,jpoxy) ) ) 81 END DO 82 END DO 83 END DO 84 85 nitrfac(:,:,:) = MIN( 1., nitrfac(:,:,:) ) 86 87 DO jk = 1, jpkm1 88 DO jj = 1, jpj 89 DO ji = 1, jpi 90 91 ! DOC ammonification. Depends on depth, phytoplankton biomass 92 ! and a limitation term which is supposed to be a parameterization 93 ! of the bacterial activity. 94 ! ---------------------------------------------------------------- 95 zremik = xremik * zstep / 1.e-6 * xlimbac(ji,jj,jk) & 96 # if defined key_off_degrad 97 & * facvol(ji,jj,jk) & 98 # endif 99 & * zdepbac(ji,jj,jk) 100 zremik = MAX( zremik, 5.5e-4 * zstep ) 101 102 ! Ammonification in oxic waters with oxygen consumption 103 ! ----------------------------------------------------- 104 olimi(ji,jj,jk) = MIN( ( trn(ji,jj,jk,jpoxy) - rtrn ) / o2ut, & 105 & zremik * ( 1.- nitrfac(ji,jj,jk) ) * trn(ji,jj,jk,jpdoc) ) 106 107 ! Ammonification in suboxic waters with denitrification 108 ! ------------------------------------------------------- 109 denitr(ji,jj,jk) = MIN( ( trn(ji,jj,jk,jpno3) - rtrn ) / rdenit, & 110 & zremik * nitrfac(ji,jj,jk) * trn(ji,jj,jk,jpdoc) ) 111 END DO 112 END DO 113 END DO 114 115 olimi (:,:,:) = MAX( 0.e0, olimi (:,:,:) ) 116 denitr(:,:,:) = MAX( 0.e0, denitr(:,:,:) ) 117 118 DO jk = 1, jpkm1 119 DO jj = 1, jpj 120 DO ji = 1, jpi 121 122 ! NH4 nitrification to NO3. Ceased for oxygen concentrations 123 ! below 2 umol/L. Inhibited at strong light 124 ! ---------------------------------------------------------- 125 onitr(ji,jj,jk) = nitrif * zstep * trn(ji,jj,jk,jpnh4) / ( 1.+ emoy(ji,jj,jk) ) & 126 # if defined key_off_degrad 127 & * facvol(ji,jj,jk) & 128 # endif 129 & * ( 1.- nitrfac(ji,jj,jk) ) 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 ! Bacterial uptake of iron. No iron is available in DOC. So 139 ! Bacteries are obliged to take up iron from the water. Some 140 ! studies (especially at Papa) have shown this uptake to be 141 ! significant 142 ! ---------------------------------------------------------- 143 xbactfer(ji,jj,jk) = 15.e-6 * rfact2 * 4.* 0.4 * prmax(ji,jj,jk) & 144 & * ( xlimphy(ji,jj,jk) * zdepbac(ji,jj,jk))**2 & 145 & / ( xkgraz2 + zdepbac(ji,jj,jk) ) & 146 & * ( 0.5 + SIGN( 0.5, trn(ji,jj,jk,jpfer) -2.e-11 ) ) 147 148 END DO 149 END DO 150 END DO 151 152 DO jk = 1, jpkm1 153 DO jj = 1, jpj 154 DO ji = 1, jpi 155 156 ! POC disaggregation by turbulence and bacterial activity. 157 ! ------------------------------------------------------------- 158 zremip = xremip * zstep * tgfunc(ji,jj,jk) & 159 # if defined key_off_degrad 160 & * facvol(ji,jj,jk) & 161 # endif 162 & * ( 1.- 0.5 * nitrfac(ji,jj,jk) ) 163 164 ! POC disaggregation rate is reduced in anoxic zone as shown by 165 ! sediment traps data. In oxic area, the exponent of the martin s 166 ! law is around -0.87. In anoxic zone, it is around -0.35. This 167 ! means a disaggregation constant about 0.5 the value in oxic zones 168 ! ----------------------------------------------------------------- 169 orem (ji,jj,jk) = zremip * trn(ji,jj,jk,jppoc) 170 ofer (ji,jj,jk) = zremip * trn(ji,jj,jk,jpsfe) 171 #if ! defined key_kriest 172 orem2(ji,jj,jk) = zremip * trn(ji,jj,jk,jpgoc) 173 ofer2(ji,jj,jk) = zremip * trn(ji,jj,jk,jpbfe) 174 #else 175 orem2(ji,jj,jk) = zremip * trn(ji,jj,jk,jpnum) 176 #endif 177 END DO 178 END DO 179 END DO 180 181 DO jk = 1, jpkm1 182 DO jj = 1, jpj 183 DO ji = 1, jpi 184 185 ! Remineralization rate of BSi depedant on T and saturation 186 ! --------------------------------------------------------- 187 zsatur = ( sio3eq(ji,jj,jk) - trn(ji,jj,jk,jpsil) ) / ( sio3eq(ji,jj,jk) + rtrn ) 188 zsatur = MAX( rtrn, zsatur ) 189 zsatur2 = zsatur * ( 1. + tn(ji,jj,jk) / 400.)**4 190 znusil = 0.225 * ( 1. + tn(ji,jj,jk) / 15.) * zsatur + 0.775 * zsatur2**9 104 191 # if defined key_off_degrad 105 & *facvol(ji,jj,jk) 192 zsiremin = xsirem * zstep * znusil * facvol(ji,jj,jk) 193 # else 194 zsiremin = xsirem * zstep * znusil 106 195 # endif 107 remik=max(remik,5.5E-4*zstep) 108 C 109 C Ammonification in oxic waters with oxygen consumption 110 C ----------------------------------------------------- 111 C 112 olimi(ji,jj,jk)=min((trn(ji,jj,jk,jpoxy)-rtrn)/o2ut, 113 & remik*(1.-nitrfac(ji,jj,jk))*trn(ji,jj,jk,jpdoc)) 114 C 115 C Ammonification in suboxic waters with denitrification 116 C ------------------------------------------------------- 117 C 118 denitr(ji,jj,jk)=min((trn(ji,jj,jk,jpno3)-rtrn)/rdenit, 119 & remik*nitrfac(ji,jj,jk)*trn(ji,jj,jk,jpdoc)) 120 END DO 121 END DO 122 END DO 123 C 124 olimi(:,:,:)=max(0.,olimi(:,:,:)) 125 denitr(:,:,:)=max(0.,denitr(:,:,:)) 126 C 127 DO jk = 1,jpkm1 128 DO jj = 1,jpj 129 DO ji = 1,jpi 130 C 131 C NH4 nitrification to NO3. Ceased for oxygen concentrations 132 C below 2 umol/L. Inhibited at strong light 133 C ---------------------------------------------------------- 134 C 135 onitr(ji,jj,jk)=nitrif*zstep*trn(ji,jj,jk,jpnh4)/(1. 136 & +emoy(ji,jj,jk))*(1.-nitrfac(ji,jj,jk)) 137 # if defined key_off_degrad 138 & *facvol(ji,jj,jk) 139 # endif 140 END DO 141 END DO 142 END DO 143 144 DO jk = 1,jpkm1 145 DO jj = 1,jpj 146 DO ji = 1,jpi 147 C 148 C Bacterial uptake of iron. No iron is available in DOC. So 149 C Bacteries are obliged to take up iron from the water. Some 150 C studies (especially at Papa) have shown this uptake to be 151 C significant 152 C ---------------------------------------------------------- 153 C 154 xbactfer(ji,jj,jk)=15E-6*rfact2*4.*0.4*prmax(ji,jj,jk) 155 & *(xlimphy(ji,jj,jk)*zdepbac(ji,jj,jk))**2 156 & /(xkgraz2+zdepbac(ji,jj,jk)) 157 & *(0.5+sign(0.5,trn(ji,jj,jk,jpfer)-2E-11)) 158 C 159 END DO 160 END DO 161 END DO 162 C 163 DO jk = 1,jpkm1 164 DO jj = 1,jpj 165 DO ji = 1,jpi 166 C 167 C POC disaggregation by turbulence and bacterial activity. 168 C ------------------------------------------------------------- 169 C 170 remip=xremip*zstep*tgfunc(ji,jj,jk)*(1.-0.5*nitrfac(ji,jj,jk)) 171 # if defined key_off_degrad 172 & *facvol(ji,jj,jk) 173 # endif 174 C 175 C POC disaggregation rate is reduced in anoxic zone as shown by 176 C sediment traps data. In oxic area, the exponent of the martin's 177 C law is around -0.87. In anoxic zone, it is around -0.35. This 178 C means a disaggregation constant about 0.5 the value in oxic zones 179 C ----------------------------------------------------------------- 180 C 181 orem(ji,jj,jk)=remip*trn(ji,jj,jk,jppoc) 182 ofer(ji,jj,jk)=remip*trn(ji,jj,jk,jpsfe) 196 osil(ji,jj,jk) = zsiremin * trn(ji,jj,jk,jpdsi) 197 ! 198 END DO 199 END DO 200 END DO 201 202 zfesatur(:,:,:) = 0.6e-9 203 204 DO jk = 1, jpkm1 205 DO jj = 1, jpj 206 DO ji = 1, jpi 207 208 ! scavenging rate of iron. this scavenging rate depends on the 209 ! load in particles on which they are adsorbed. The 210 ! parameterization has been taken from studies on Th 211 ! ------------------------------------------------------------ 212 zkeq = fekeq(ji,jj,jk) 213 zfeequi = ( -( 1. + zfesatur(ji,jj,jk) * zkeq - zkeq * trn(ji,jj,jk,jpfer) ) & 214 & + SQRT( ( 1. + zfesatur(ji,jj,jk) * zkeq - zkeq * trn(ji,jj,jk,jpfer) )**2 & 215 & + 4. * trn(ji,jj,jk,jpfer) * zkeq) ) / ( 2. * zkeq ) 183 216 #if ! defined key_kriest 184 orem2(ji,jj,jk)=remip*trn(ji,jj,jk,jpgoc) 185 ofer2(ji,jj,jk)=remip*trn(ji,jj,jk,jpbfe) 186 #else 187 orem2(ji,jj,jk)=remip*trn(ji,jj,jk,jpnum) 217 zlam1b = 3.e-5 + xlam1 * ( trn(ji,jj,jk,jppoc) + trn(ji,jj,jk,jpgoc) & 218 & + trn(ji,jj,jk,jpcal) + trn(ji,jj,jk,jpdsi) ) * 1.e6 219 #else 220 zlam1b = 3.e-5 + xlam1 * ( trn(ji,jj,jk,jppoc) & 221 & + trn(ji,jj,jk,jpcal) + trn(ji,jj,jk,jpdsi) ) * 1.e6 188 222 #endif 189 C 190 END DO 191 END DO 192 END DO 193 194 DO jk = 1,jpkm1 195 DO jj = 1,jpj 196 DO ji = 1,jpi 197 C 198 C Remineralization rate of BSi depedant on T and saturation 199 C --------------------------------------------------------- 200 C 201 zsatur=(sio3eq(ji,jj,jk)-trn(ji,jj,jk,jpsil))/ 202 & (sio3eq(ji,jj,jk)+rtrn) 203 zsatur=max(rtrn,zsatur) 204 zsatur2=zsatur*(1.+tn(ji,jj,jk)/400.)**4 205 znusil=0.225*(1.+tn(ji,jj,jk)/15.)*zsatur+0.775*zsatur2**9 206 207 siremin=xsirem*zstep*znusil 208 # if defined key_off_degrad 209 & *facvol(ji,jj,jk) 210 # endif 211 C 212 osil(ji,jj,jk)=siremin*trn(ji,jj,jk,jpdsi) 213 END DO 214 END DO 215 END DO 216 C 217 fesatur(:,:,:)=0.6E-9 218 C 219 DO jk = 1,jpkm1 220 DO jj = 1,jpj 221 DO ji = 1,jpi 222 C 223 C scavenging rate of iron. this scavenging rate depends on the 224 C load in particles on which they are adsorbed. The 225 C parameterization has been taken from studies on Th 226 C ------------------------------------------------------------ 227 C 228 xkeq=fekeq(ji,jj,jk) 229 xfeequi=(-(1.+fesatur(ji,jj,jk)*xkeq-xkeq*trn(ji,jj,jk,jpfer))+ 230 & sqrt((1.+fesatur(ji,jj,jk)*xkeq-xkeq*trn(ji,jj,jk,jpfer))**2 231 & +4.*trn(ji,jj,jk,jpfer)*xkeq))/(2.*xkeq) 232 223 # if defined key_off_degrad 224 xscave(ji,jj,jk) = zfeequi * zlam1b * zstep * facvol(ji,jj,jk) 225 # else 226 xscave(ji,jj,jk) = zfeequi * zlam1b * zstep 227 # endif 228 229 ! Increased scavenging for very high iron concentrations 230 ! found near the coasts due to increased lithogenic particles 231 ! and let s say it unknown processes (precipitation, ...) 232 ! ----------------------------------------------------------- 233 zlamfac = MAX( 0.e0, ( gphit(ji,jj) + 55.) / 30. ) 234 zlamfac = MIN( 1. , zlamfac ) 233 235 #if ! defined key_kriest 234 xlam1b=3E-5+xlam1*(trn(ji,jj,jk,jppoc) 235 & +trn(ji,jj,jk,jpgoc)+trn(ji,jj,jk,jpcal)+ 236 & trn(ji,jj,jk,jpdsi))*1E6 237 #else 238 xlam1b=3E-5+xlam1*(trn(ji,jj,jk,jppoc) 239 & +trn(ji,jj,jk,jpcal)+trn(ji,jj,jk,jpdsi))*1E6 236 zlam1b = ( 80.* ( trn(ji,jj,jk,jpdoc) + 35.e-6 ) & 237 & + 698.* trn(ji,jj,jk,jppoc) + 1.05e4 * trn(ji,jj,jk,jpgoc) ) & 238 & * zdiss(ji,jj,jk) + 1E-4 * (1.-zlamfac) & 239 & + xlam1 * MAX( 0.e0, ( trn(ji,jj,jk,jpfer) * 1.e9 - 1.) ) 240 #else 241 zlam1b = ( 80.* (trn(ji,jj,jk,jpdoc) + 35E-6) & 242 & + 698.* trn(ji,jj,jk,jppoc) ) & 243 & * zdiss(ji,jj,jk) + 1E-4 * (1.-zlamfac) & 244 & + xlam1 * MAX( 0.e0, ( trn(ji,jj,jk,jpfer) * 1.e9 - 1.) ) 240 245 #endif 241 xscave(ji,jj,jk)=xfeequi*xlam1b*zstep 242 # if defined key_off_degrad 243 & *facvol(ji,jj,jk) 244 # endif 245 C 246 C Increased scavenging for very high iron concentrations 247 C found near the coasts due to increased lithogenic particles 248 C and let's say it unknown processes (precipitation, ...) 249 C ----------------------------------------------------------- 250 C 251 zlamfac=max(0.,(gphit(ji,jj)+55.)/30.) 252 zlamfac=min(1.,zlamfac) 253 #if ! defined key_kriest 254 xlam1b=(80.*(trn(ji,jj,jk,jpdoc)+35E-6)+698. 255 & *trn(ji,jj,jk,jppoc)+1.05E4*trn(ji,jj,jk,jpgoc)) 256 & *zdiss(ji,jj,jk)+1E-4*(1.-zlamfac)+xlam1*max(0., 257 & (trn(ji,jj,jk,jpfer)*1E9-1.)) 258 #else 259 xlam1b=(80.*(trn(ji,jj,jk,jpdoc)+35E-6)+698. 260 & *trn(ji,jj,jk,jppoc)) 261 & *zdiss(ji,jj,jk)+1E-4*(1.-zlamfac)+xlam1*max(0., 262 & (trn(ji,jj,jk,jpfer)*1E9-1.)) 263 #endif 264 265 266 xaggdfe(ji,jj,jk)=xlam1b*zstep*0.5*(trn(ji,jj,jk,jpfer) 267 & -xfeequi) 268 # if defined key_off_degrad 269 & *facvol(ji,jj,jk) 270 # endif 271 272 C 273 END DO 274 END DO 275 END DO 276 C 277 #endif 278 RETURN 279 END 246 247 # if defined key_off_degrad 248 xaggdfe(ji,jj,jk) = zlam1b * zstep * 0.5 * ( trn(ji,jj,jk,jpfer) - zfeequi ) * facvol(ji,jj,jk) 249 # else 250 xaggdfe(ji,jj,jk) = zlam1b * zstep * 0.5 * ( trn(ji,jj,jk,jpfer) - zfeequi ) 251 # endif 252 END DO 253 END DO 254 END DO 255 ! 256 END SUBROUTINE p4z_rem 257 258 #else 259 !!====================================================================== 260 !! Dummy module : No PISCES bio-model 261 !!====================================================================== 262 CONTAINS 263 SUBROUTINE p4z_rem ! Empty routine 264 END SUBROUTINE p4z_rem 265 #endif 266 267 !!====================================================================== 268 END MODULE p4zrem -
branches/dev_001_GM/NEMO/TOP_SRC/PISCES_SMS/p4zsed.F90
r774 r775 1 2 CCC $Header: /home/opalod/NEMOCVSROOT/NEMO/TOP_SRC/SMS/p4zsed.F,v 1.9 2007/10/12 09:35:04 opalod Exp $ 3 CCC TOP 1.0 , LOCEAN-IPSL (2005) 4 C This software is governed by CeCILL licence see modipsl/doc/NEMO_CeCILL.txt 5 C --------------------------------------------------------------------------- 6 CDIR$ LIST 7 SUBROUTINE p4zsed 8 #if defined key_top && defined key_pisces 9 CCC--------------------------------------------------------------------- 10 CCC 11 CCC ROUTINE p4zsed : PISCES MODEL 12 CCC ***************************** 13 CCC 14 CCC PURPOSE : 15 CCC --------- 16 CCC Compute loss of organic matter in the sediments. This 17 CCC is by no way a sediment model. The loss is simply 18 CCC computed to balance the inout from rivers and dust 19 CCC 20 CC INPUT : 21 CC ----- 22 CC common 23 CC all the common defined in opa 24 CC 25 CC 26 CC OUTPUT : : no 27 CC ------ 28 CC 29 CC EXTERNAL : 30 CC -------- 31 CC None 32 CC 33 CC MODIFICATIONS: 34 CC -------------- 35 CC original : 2004 - O. Aumont 36 CC---------------------------------------------------------------------- 37 CC parameters and commons 38 CC ====================== 39 CDIR$ NOLIST 40 USE oce_trc 41 USE trp_trc 42 USE sms 43 USE lib_mpp 44 IMPLICIT NONE 45 #include "domzgr_substitute.h90" 46 CDIR$ LIST 47 CC---------------------------------------------------------------------- 48 CC local declarations 49 CC ================== 50 INTEGER ji, jj, jk, ikt 51 REAL sumsedsi,sumsedpo4,sumsedcal 52 REAL xconctmp,denitot,nitrpottot,nitrpot(jpi,jpj,jpk) 53 REAL xlim,xconctmp2,zstep,zfact 54 REAL irondep(jpi,jpj,jpk),sidep(jpi,jpj) 55 REAL zvol 56 CC 57 C 58 C Time step duration for the biology 59 C ---------------------------------- 60 C 61 zstep=rfact2/rjjss 62 C 63 C 64 C Initialisation of variables used to compute deposition 65 C ------------------------------------------------------ 66 C 67 irondep = 0. 68 sidep = 0. 69 C 70 C Iron and Si deposition at the surface 71 C ------------------------------------- 72 C 73 do jj=1,jpj 74 do ji=1,jpi 75 irondep(ji,jj,1)=(0.014*dust(ji,jj)/(55.85*rmoss) 76 & +3E-10/raass)*rfact2/fse3t(ji,jj,1) 77 sidep(ji,jj)=8.8*0.075*dust(ji,jj)*rfact2 78 & /(fse3t(ji,jj,1)*28.1*rmoss) 79 end do 80 end do 81 C 82 C Iron solubilization of particles in the water column 83 C ---------------------------------------------------- 84 C 85 do jk=2,jpk-1 86 do jj=1,jpj 87 do ji=1,jpi 88 irondep(ji,jj,jk)=dust(ji,jj)/(10.*55.85*rmoss)*rfact2 89 & *0.0001 90 end do 91 end do 92 end do 93 C 94 C Add the external input of nutrients, carbon and alkalinity 95 C ---------------------------------------------------------- 96 C 97 DO jj = 1,jpj 98 DO ji = 1,jpi 99 trn(ji,jj,1,jppo4) = trn(ji,jj,1,jppo4) 100 & +rivinp(ji,jj)*rfact2 101 trn(ji,jj,1,jpno3) = trn(ji,jj,1,jpno3) 102 & +(rivinp(ji,jj)+nitdep(ji,jj))*rfact2 103 trn(ji,jj,1,jpfer) = trn(ji,jj,1,jpfer) 104 & +rivinp(ji,jj)*3E-5*rfact2 105 trn(ji,jj,1,jpsil) = trn(ji,jj,1,jpsil) 106 & +sidep(ji,jj)+cotdep(ji,jj)*rfact2/6. 107 trn(ji,jj,1,jpdic) = trn(ji,jj,1,jpdic) 108 & +rivinp(ji,jj)*rfact2*2.631 109 trn(ji,jj,1,jptal) = trn(ji,jj,1,jptal) 110 & +(cotdep(ji,jj)-rno3*(rivinp(ji,jj) 111 & +nitdep(ji,jj)))*rfact2 112 END DO 113 END DO 114 C 115 116 C 117 C Add the external input of iron which is 3D distributed 118 C (dust, river and sediment mobilization) 119 C ------------------------------------------------------ 120 C 121 DO jk=1,jpkm1 122 DO jj=1,jpj 123 DO ji=1,jpi 124 trn(ji,jj,jk,jpfer) = trn(ji,jj,jk,jpfer) 125 & +irondep(ji,jj,jk)+ironsed(ji,jj,jk)*rfact2 126 END DO 127 END DO 128 END DO 129 C 130 C Initialisation of variables used to compute Sinking Speed 131 C --------------------------------------------------------- 132 C 133 sumsedsi = 0. 134 sumsedpo4 = 0. 135 sumsedcal = 0. 136 C 137 C Loss of biogenic silicon, Caco3 organic carbon in the sediments. 138 C First, the total loss is computed. 139 C The factor for calcite comes from the alkalinity effect 140 C ------------------------------------------------------------- 141 C 142 DO jj=1,jpj 143 DO ji=1,jpi 144 ikt=max(mbathy(ji,jj)-1,1) 145 zfact=e1t(ji,jj)*e2t(ji,jj)/rjjss*tmask_i(ji,jj) 146 sumsedsi=sumsedsi+zfact*trn(ji,jj,ikt,jpdsi) 147 #if ! defined key_kriest 148 & *wsbio4(ji,jj,ikt) 1 MODULE p4zsed 2 !!====================================================================== 3 !! *** MODULE p4sed *** 4 !! TOP : PISCES Compute loss of organic matter in the sediments 5 !!====================================================================== 6 !! History : 1.0 ! 2004-03 (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_sed : Compute loss of organic matter in the sediments 14 !!---------------------------------------------------------------------- 15 USE oce_trc ! 16 USE trp_trc 17 USE sms 18 USE lib_mpp 19 20 IMPLICIT NONE 21 PRIVATE 22 23 PUBLIC p4z_sed ! called in p4zprg.F90 24 25 !!* Substitution 26 # include "domzgr_substitute.h90" 27 !!---------------------------------------------------------------------- 28 !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007) 29 !! $Header:$ 30 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 31 !!---------------------------------------------------------------------- 32 33 CONTAINS 34 35 SUBROUTINE p4z_sed 36 !!--------------------------------------------------------------------- 37 !! *** ROUTINE p4z_sed *** 38 !! 39 !! ** Purpose : Compute loss of organic matter in the sediments. This 40 !! is by no way a sediment model. The loss is simply 41 !! computed to balance the inout from rivers and dust 42 !! 43 !! ** Method : - ??? 44 !!--------------------------------------------------------------------- 45 INTEGER :: ji, jj, jk 46 INTEGER :: ikt 47 REAL(wp) :: zsumsedsi, zsumsedpo4, zsumsedcal 48 REAL(wp) :: zconctmp , zdenitot , znitrpottot 49 REAL(wp) :: zlim, zconctmp2, zstep, zfact 50 REAL(wp), DIMENSION(jpi,jpj) :: zsidep 51 REAL(wp), DIMENSION(jpi,jpj,jpk) :: znitrpot, zirondep 52 !!--------------------------------------------------------------------- 53 54 55 zstep = rfact2 / rjjss ! Time step duration for the biology 56 57 zirondep(:,:,:) = 0.e0 ! Initialisation of variables used to compute deposition 58 zsidep (:,:) = 0.e0 59 60 ! Iron and Si deposition at the surface 61 ! ------------------------------------- 62 63 DO jj = 1, jpj 64 DO ji = 1, jpi 65 zirondep(ji,jj,1) = ( 0.014 * dust(ji,jj) / ( 55.85 * rmoss ) + 3.e-10 / raass ) & 66 & * rfact2 / fse3t(ji,jj,1) 67 zsidep (ji,jj) = 8.8 * 0.075 * dust(ji,jj) * rfact2 / ( fse3t(ji,jj,1) * 28.1 * rmoss ) 68 END DO 69 END DO 70 71 ! Iron solubilization of particles in the water column 72 ! ---------------------------------------------------- 73 74 DO jk = 2, jpkm1 75 DO jj = 1, jpj 76 DO ji = 1, jpi 77 zirondep(ji,jj,jk) = dust(ji,jj) / ( 10. * 55.85 * rmoss ) * rfact2 * 0.0001 78 END DO 79 END DO 80 END DO 81 82 ! Add the external input of nutrients, carbon and alkalinity 83 ! ---------------------------------------------------------- 84 85 DO jj = 1, jpj 86 DO ji = 1, jpi 87 trn(ji,jj,1,jppo4) = trn(ji,jj,1,jppo4) + rivinp(ji,jj) * rfact2 88 trn(ji,jj,1,jpno3) = trn(ji,jj,1,jpno3) + ( rivinp(ji,jj) + nitdep(ji,jj) ) * rfact2 89 trn(ji,jj,1,jpfer) = trn(ji,jj,1,jpfer) + rivinp(ji,jj) * 3.e-5 * rfact2 90 trn(ji,jj,1,jpsil) = trn(ji,jj,1,jpsil) + zsidep (ji,jj) + cotdep(ji,jj) * rfact2 / 6. 91 trn(ji,jj,1,jpdic) = trn(ji,jj,1,jpdic) + rivinp(ji,jj) * 2.631 * rfact2 92 trn(ji,jj,1,jptal) = trn(ji,jj,1,jptal) + ( cotdep(ji,jj) - rno3*(rivinp(ji,jj) & 93 & + nitdep(ji,jj) ) ) * rfact2 94 END DO 95 END DO 96 97 98 ! Add the external input of iron which is 3D distributed 99 ! (dust, river and sediment mobilization) 100 ! ------------------------------------------------------ 101 102 DO jk = 1, jpkm1 103 DO jj = 1, jpj 104 DO ji = 1, jpi 105 trn(ji,jj,jk,jpfer) = trn(ji,jj,jk,jpfer) & 106 & + zirondep(ji,jj,jk) + ironsed(ji,jj,jk) * rfact2 107 END DO 108 END DO 109 END DO 110 111 ! Initialisation of variables used to compute Sinking Speed 112 ! --------------------------------------------------------- 113 114 zsumsedsi = 0.e0 115 zsumsedpo4 = 0.e0 116 zsumsedcal = 0.e0 117 118 ! Loss of biogenic silicon, Caco3 organic carbon in the sediments. 119 ! First, the total loss is computed. 120 ! The factor for calcite comes from the alkalinity effect 121 ! ------------------------------------------------------------- 122 123 DO jj = 1, jpj 124 DO ji = 1, jpi 125 ikt = MAX( mbathy(ji,jj)-1, 1 ) 126 zfact = e1t(ji,jj) * e2t(ji,jj) / rjjss * tmask_i(ji,jj) 127 # if ! defined key_kriest 128 zsumsedsi = zsumsedsi + zfact * trn(ji,jj,ikt,jpdsi) * wsbio4(ji,jj,ikt) 129 # else 130 zsumsedsi = zsumsedsi + zfact * trn(ji,jj,ikt,jpdsi) * wscal (ji,jj,ikt) 131 # endif 132 zsumsedcal = zsumsedcal + zfact * trn(ji,jj,ikt,jpcal) * wscal (ji,jj,ikt) * 2.e0 133 # if defined key_kriest 134 zsumsedpo4 = zsumsedpo4 + zfact * trn(ji,jj,ikt,jppoc) * wsbio3(ji,jj,ikt) 135 # else 136 zsumsedpo4 = zsumsedpo4 + zfact *( trn(ji,jj,ikt,jpgoc) * wsbio4(ji,jj,ikt) & 137 & + trn(ji,jj,ikt,jppoc) * wsbio3(ji,jj,ikt) ) 138 # endif 139 END DO 140 END DO 141 142 IF( lk_mpp ) THEN 143 CALL mpp_sum( zsumsedsi ) ! sums over the global domain 144 CALL mpp_sum( zsumsedcal ) ! sums over the global domain 145 CALL mpp_sum( zsumsedpo4 ) ! sums over the global domain 146 ENDIF 147 148 ! Then this loss is scaled at each bottom grid cell for 149 ! equilibrating the total budget of silica in the ocean. 150 ! Thus, the amount of silica lost in the sediments equal 151 ! the supply at the surface (dust+rivers) 152 ! ------------------------------------------------------ 153 154 DO jj = 1, jpj 155 DO ji = 1, jpi 156 ikt = MAX( mbathy(ji,jj) - 1, 1 ) 157 zconctmp = trn(ji,jj,ikt,jpdsi) * zstep / fse3t(ji,jj,ikt) & 158 # if ! defined key_kriest 159 & * wsbio4(ji,jj,ikt) 160 # else 161 & * wscal (ji,jj,ikt) 162 # endif 163 trn(ji,jj,ikt,jpdsi) = trn(ji,jj,ikt,jpdsi) - zconctmp 164 trn(ji,jj,ikt,jpsil) = trn(ji,jj,ikt,jpsil) + zconctmp & 165 & * ( 1.- ( sumdepsi + rivalkinput / raass / 6. ) / zsumsedsi ) 166 END DO 167 END DO 168 169 DO jj = 1, jpj 170 DO ji = 1, jpi 171 ikt = MAX( mbathy(ji,jj) - 1, 1 ) 172 zconctmp = trn(ji,jj,ikt,jpcal) * wscal(ji,jj,ikt) * zstep / fse3t(ji,jj,ikt) 173 trn(ji,jj,ikt,jpcal) = trn(ji,jj,ikt,jpcal) - zconctmp 174 trn(ji,jj,ikt,jptal) = trn(ji,jj,ikt,jptal) + zconctmp & 175 & * ( 1.- ( rivalkinput / raass ) / zsumsedcal ) * 2.e0 176 trn(ji,jj,ikt,jpdic) = trn(ji,jj,ikt,jpdic) + zconctmp & 177 & * ( 1.- ( rivalkinput / raass ) / zsumsedcal ) 178 END DO 179 END DO 180 181 DO jj = 1, jpj 182 DO ji = 1, jpi 183 ikt = MAX( mbathy(ji,jj) - 1, 1 ) 184 # if ! defined key_kriest 185 zconctmp = trn(ji,jj,ikt,jpgoc) 186 zconctmp2 = trn(ji,jj,ikt,jppoc) 187 trn(ji,jj,ikt,jpgoc) = trn(ji,jj,ikt,jpgoc) - zconctmp * wsbio4(ji,jj,ikt) * zstep / fse3t(ji,jj,ikt) 188 trn(ji,jj,ikt,jppoc) = trn(ji,jj,ikt,jppoc) - zconctmp2 * wsbio3(ji,jj,ikt) * zstep / fse3t(ji,jj,ikt) 189 trn(ji,jj,ikt,jpdoc) = trn(ji,jj,ikt,jpdoc) & 190 & + ( zconctmp * wsbio4(ji,jj,ikt) + zconctmp2 * wsbio3(ji,jj,ikt) ) * zstep / fse3t(ji,jj,ikt) & 191 & * ( 1.- rivpo4input / (raass * zsumsedpo4 ) ) 192 trn(ji,jj,ikt,jpbfe) = trn(ji,jj,ikt,jpbfe) - trn(ji,jj,ikt,jpbfe) * wsbio4(ji,jj,ikt) * zstep & 193 & /fse3t(ji,jj,ikt) 194 trn(ji,jj,ikt,jpsfe) = trn(ji,jj,ikt,jpsfe) - trn(ji,jj,ikt,jpsfe) * wsbio3(ji,jj,ikt) * zstep & 195 & /fse3t(ji,jj,ikt) 196 # else 197 zconctmp = trn(ji,jj,ikt,jpnum) 198 zconctmp2 = trn(ji,jj,ikt,jppoc) 199 trn(ji,jj,ikt,jpnum) = trn(ji,jj,ikt,jpnum) & 200 & - zconctmp * wsbio4(ji,jj,ikt) * zstep / fse3t(ji,jj,ikt) 201 trn(ji,jj,ikt,jppoc) = trn(ji,jj,ikt,jppoc) & 202 & - zconctmp2 * wsbio3(ji,jj,ikt) * zstep / fse3t(ji,jj,ikt) 203 trn(ji,jj,ikt,jpdoc) = trn(ji,jj,ikt,jpdoc) & 204 & + ( zconctmp2 * wsbio3(ji,jj,ikt) ) & 205 & * zstep / fse3t(ji,jj,ikt) * ( 1.- rivpo4input / ( raass * zsumsedpo4 ) ) 206 trn(ji,jj,ikt,jpsfe) = trn(ji,jj,ikt,jpsfe) & 207 & - trn(ji,jj,ikt,jpsfe) * wsbio3(ji,jj,ikt) * zstep / fse3t(ji,jj,ikt) 208 # endif 209 END DO 210 END DO 211 212 ! Nitrogen fixation (simple parameterization). The total gain 213 ! from nitrogen fixation is scaled to balance the loss by 214 ! denitrification 215 ! ------------------------------------------------------------- 216 217 !!gm optimisation : use fs do loop index... or 1 to jpi/j 218 zdenitot = 0.e0 219 DO jk = 1, jpkm1 220 DO jj= 2, jpjm1 221 DO ji = 2, jpim1 222 zdenitot = zdenitot + denitr(ji,jj,jk) * rdenit * e1t(ji,jj) * e2t(ji,jj) & 223 & *fse3t(ji,jj,jk) * tmask(ji,jj,jk) * tmask_i(ji,jj) * znegtr(ji,jj,jk) 224 END DO 225 END DO 226 END DO 227 228 IF( lk_mpp ) CALL mpp_sum( zdenitot ) ! sum over the global domain 229 230 ! Potential nitrogen fication dependant on temperature and iron 231 ! ------------------------------------------------------------- 232 233 DO jk = 1, jpk 234 DO jj = 1, jpj 235 DO ji = 1, jpi 236 zlim = ( 1.- xnanono3(ji,jj,jk) - xnanonh4(ji,jj,jk) ) 237 IF( zlim <= 0.2 ) zlim = 0.01 238 znitrpot(ji,jj,jk) = MAX( 0.e0, ( 0.6 * tgfunc(ji,jj,jk) - 2.15 ) / rjjss ) & 239 # if defined key_off_degrad 240 & * facvol(ji,jj,jk) & 241 # endif 242 & * zlim * rfact2 * trn(ji,jj,jk,jpfer) & 243 & / ( conc3 + trn(ji,jj,jk,jpfer) ) * ( 1.- EXP( -etot(ji,jj,jk) / 50.) ) 244 END DO 245 END DO 246 END DO 247 248 znitrpottot = 0.e0 249 DO jk = 1, jpkm1 250 DO jj = 1, jpj 251 DO ji = 1, jpi 252 znitrpottot = znitrpottot + znitrpot(ji,jj,jk) * e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) & 253 & * tmask(ji,jj,jk) * tmask_i(ji,jj) 254 END DO 255 END DO 256 END DO 257 258 IF( lk_mpp ) CALL mpp_sum( znitrpottot ) ! sum over the global domain 259 260 ! Nitrogen change due to nitrogen fixation 261 ! ---------------------------------------- 262 263 DO jk = 1, jpk 264 DO jj = 1, jpj 265 DO ji = 1, jpi 266 # if ! defined key_cfg_1d && ( defined key_orca_r4 || defined key_orca_r2 || defined key_orca_r05 || defined key_orca_r025 ) 267 zfact = znitrpot(ji,jj,jk) * zdenitot / znitrpottot 268 # else 269 zfact = znitrpot(ji,jj,jk) * 1.e-7 270 # endif 271 trn(ji,jj,jk,jpnh4) = trn(ji,jj,jk,jpnh4) + zfact 272 trn(ji,jj,jk,jpoxy) = trn(ji,jj,jk,jpoxy) + zfact * o2nit 273 trn(ji,jj,jk,jppo4) = trn(ji,jj,jk,jppo4) + 30./ 46.* zfact 274 END DO 275 END DO 276 END DO 277 278 # if defined key_trc_diaadd 279 DO jj = 1,jpj 280 DO ji = 1,jpi 281 trc2d(ji,jj,13) = znitrpot(ji,jj,1) * 1.e-7 * fse3t(ji,jj,1) * 1.e+3 / rfact2 282 trc2d(ji,jj,12) = zirondep(ji,jj,1) * 1.e+3 * rfact2r * fse3t(ji,jj,1) 283 END DO 284 END DO 285 # endif 286 ! 287 END SUBROUTINE p4z_sed 288 149 289 #else 150 & *wscal(ji,jj,ikt) 151 #endif 152 sumsedcal=sumsedcal+trn(ji,jj,ikt,jpcal)*wscal(ji,jj,ikt) 153 & *2.*zfact 154 #if defined key_kriest 155 sumsedpo4=sumsedpo4+ 156 & (trn(ji,jj,ikt,jppoc)*wsbio3(ji,jj,ikt))*zfact 157 #else 158 sumsedpo4=sumsedpo4+(trn(ji,jj,ikt,jpgoc)*wsbio4(ji,jj,ikt) 159 & +trn(ji,jj,ikt,jppoc)*wsbio3(ji,jj,ikt))*zfact 160 #endif 161 END DO 162 END DO 163 164 IF( lk_mpp ) THEN 165 CALL mpp_sum( sumsedsi ) ! sums over the global domain 166 CALL mpp_sum( sumsedcal ) ! sums over the global domain 167 CALL mpp_sum( sumsedpo4 ) ! sums over the global domain 168 ENDIF 169 C 170 C Then this loss is scaled at each bottom grid cell for 171 C equilibrating the total budget of silica in the ocean. 172 C Thus, the amount of silica lost in the sediments equal 173 C the supply at the surface (dust+rivers) 174 C ------------------------------------------------------ 175 C 176 DO jj=1,jpj 177 DO ji=1,jpi 178 ikt=max(mbathy(ji,jj)-1,1) 179 xconctmp=trn(ji,jj,ikt,jpdsi)*zstep/fse3t(ji,jj,ikt) 180 #if ! defined key_kriest 181 & *wsbio4(ji,jj,ikt) 182 #else 183 & *wscal(ji,jj,ikt) 184 #endif 185 trn(ji,jj,ikt,jpdsi)=trn(ji,jj,ikt,jpdsi)-xconctmp 186 trn(ji,jj,ikt,jpsil)=trn(ji,jj,ikt,jpsil)+xconctmp 187 & *(1.-(sumdepsi+rivalkinput/raass/6.)/sumsedsi) 188 END DO 189 END DO 190 191 DO jj=1,jpj 192 DO ji=1,jpi 193 ikt=max(mbathy(ji,jj)-1,1) 194 xconctmp=trn(ji,jj,ikt,jpcal)*wscal(ji,jj,ikt)*zstep 195 & /fse3t(ji,jj,ikt) 196 trn(ji,jj,ikt,jpcal)=trn(ji,jj,ikt,jpcal)-xconctmp 197 trn(ji,jj,ikt,jptal)=trn(ji,jj,ikt,jptal)+xconctmp 198 & *(1.-(rivalkinput/raass)/sumsedcal)*2. 199 trn(ji,jj,ikt,jpdic)=trn(ji,jj,ikt,jpdic)+xconctmp 200 & *(1.-(rivalkinput/raass)/sumsedcal) 201 END DO 202 END DO 203 204 DO jj=1,jpj 205 DO ji=1,jpi 206 ikt=max(mbathy(ji,jj)-1,1) 207 #if ! defined key_kriest 208 xconctmp=trn(ji,jj,ikt,jpgoc) 209 xconctmp2=trn(ji,jj,ikt,jppoc) 210 trn(ji,jj,ikt,jpgoc)=trn(ji,jj,ikt,jpgoc) 211 & -xconctmp*wsbio4(ji,jj,ikt)*zstep/fse3t(ji,jj,ikt) 212 trn(ji,jj,ikt,jppoc)=trn(ji,jj,ikt,jppoc) 213 & -xconctmp2*wsbio3(ji,jj,ikt)*zstep/fse3t(ji,jj,ikt) 214 trn(ji,jj,ikt,jpdoc)=trn(ji,jj,ikt,jpdoc) 215 & +(xconctmp*wsbio4(ji,jj,ikt)+xconctmp2*wsbio3(ji,jj,ikt) 216 $ )*zstep/fse3t(ji,jj,ikt)*(1.-rivpo4input/(raass 217 $ *sumsedpo4)) 218 trn(ji,jj,ikt,jpbfe)=trn(ji,jj,ikt,jpbfe) 219 & -trn(ji,jj,ikt,jpbfe)*wsbio4(ji,jj,ikt)*zstep 220 & /fse3t(ji,jj,ikt) 221 trn(ji,jj,ikt,jpsfe)=trn(ji,jj,ikt,jpsfe) 222 & -trn(ji,jj,ikt,jpsfe)*wsbio3(ji,jj,ikt)*zstep 223 & /fse3t(ji,jj,ikt) 224 #else 225 xconctmp=trn(ji,jj,ikt,jpnum) 226 xconctmp2=trn(ji,jj,ikt,jppoc) 227 trn(ji,jj,ikt,jpnum)=trn(ji,jj,ikt,jpnum) 228 & -xconctmp*wsbio4(ji,jj,ikt)*zstep/fse3t(ji,jj,ikt) 229 trn(ji,jj,ikt,jppoc)=trn(ji,jj,ikt,jppoc) 230 & -xconctmp2*wsbio3(ji,jj,ikt)*zstep/fse3t(ji,jj,ikt) 231 trn(ji,jj,ikt,jpdoc)=trn(ji,jj,ikt,jpdoc) 232 & +(xconctmp2*wsbio3(ji,jj,ikt)) 233 $ *zstep/fse3t(ji,jj,ikt)*(1.-rivpo4input/(raass 234 $ *sumsedpo4)) 235 trn(ji,jj,ikt,jpsfe)=trn(ji,jj,ikt,jpsfe) 236 & -trn(ji,jj,ikt,jpsfe)*wsbio3(ji,jj,ikt)*zstep 237 & /fse3t(ji,jj,ikt) 238 239 #endif 240 END DO 241 END DO 242 C 243 C Nitrogen fixation (simple parameterization). The total gain 244 C from nitrogen fixation is scaled to balance the loss by 245 C denitrification 246 C ------------------------------------------------------------- 247 C 248 denitot=0. 249 DO jk=1,jpk-1 250 DO jj=2,jpj-1 251 DO ji=2,jpi-1 252 denitot=denitot+denitr(ji,jj,jk)*rdenit*e1t(ji,jj)*e2t(ji,jj) 253 & *fse3t(ji,jj,jk)*tmask(ji,jj,jk)*tmask_i(ji,jj) 254 & *znegtr(ji,jj,jk) 255 END DO 256 END DO 257 END DO 258 259 IF( lk_mpp ) CALL mpp_sum( denitot ) ! sum over the global domain 260 C 261 C Potential nitrogen fication dependant on temperature 262 C and iron 263 C ---------------------------------------------------- 264 C 265 DO jk=1,jpk 266 DO jj=1,jpj 267 DO ji=1,jpi 268 xlim=(1.-xnanono3(ji,jj,jk)-xnanonh4(ji,jj,jk)) 269 if (xlim.le.0.2) xlim=0.01 270 nitrpot(ji,jj,jk)=max(0.,(0.6*tgfunc(ji,jj,jk)-2.15)/rjjss) 271 #if defined key_off_degrad 272 & *facvol(ji,jj,jk) 273 #endif 274 & *xlim*rfact2*trn(ji,jj,jk,jpfer)/(conc3 275 & +trn(ji,jj,jk,jpfer))*(1.-exp(-etot(ji,jj,jk)/50.)) 276 END DO 277 END DO 278 END DO 279 C 280 nitrpottot=0. 281 DO jk=1,jpkm1 282 DO jj=1,jpj 283 DO ji=1,jpi 284 nitrpottot=nitrpottot+nitrpot(ji,jj,jk)*e1t(ji,jj) 285 & *e2t(ji,jj)*tmask(ji,jj,jk)*tmask_i(ji,jj)*fse3t(ji,jj,jk) 286 END DO 287 END DO 288 END DO 289 290 IF( lk_mpp ) CALL mpp_sum( nitrpottot ) ! sum over the global domain 291 C 292 C Nitrogen change due to nitrogen fixation 293 C ---------------------------------------- 294 C 295 DO jk=1,jpk 296 DO jj=1,jpj 297 DO ji=1,jpi 298 #if ! defined key_cfg_1d && ( defined key_orca_r4 || defined key_orca_r2 || defined key_orca_r05 || defined key_orca_r025 ) 299 zfact=nitrpot(ji,jj,jk)*denitot/nitrpottot 300 #else 301 zfact=nitrpot(ji,jj,jk)*1.E-7 302 #endif 303 trn(ji,jj,jk,jpnh4)=trn(ji,jj,jk,jpnh4)+zfact 304 trn(ji,jj,jk,jpoxy)=trn(ji,jj,jk,jpoxy)+zfact*o2nit 305 trn(ji,jj,jk,jppo4)=trn(ji,jj,jk,jppo4)+30./46.*zfact 306 END DO 307 END DO 308 END DO 309 C 310 # if defined key_trc_diaadd 311 DO jj = 1,jpj 312 DO ji = 1,jpi 313 trc2d(ji,jj,13) = nitrpot(ji,jj,1)*1E-7*fse3t(ji,jj,1)*1E3 314 & /rfact2 315 trc2d(ji,jj,12) = irondep(ji,jj,1)*1e3*rfact2r 316 & *fse3t(ji,jj,1) 317 END DO 318 END DO 319 # endif 320 C 321 #endif 322 RETURN 323 END 290 !!====================================================================== 291 !! Dummy module : No PISCES bio-model 292 !!====================================================================== 293 CONTAINS 294 SUBROUTINE p4z_sed ! Empty routine 295 END SUBROUTINE p4z_sed 296 #endif 297 298 !!====================================================================== 299 END MODULE p4zsed -
branches/dev_001_GM/NEMO/TOP_SRC/PISCES_SMS/p4zsink.F90
r774 r775 1 SUBROUTINE p4zsink 2 #if defined key_top && defined key_pisces 3 CCC--------------------------------------------------------------------- 4 CCC 5 CCC ROUTINE p4zsink : PISCES MODEL 6 CCC ****************************** 7 CCC 8 CCC PURPOSE : 9 CCC --------- 10 CCC Compute vertical flux of particulate matter due to 11 CCC gravitational sinking 12 CCC 13 CC INPUT : 14 CC ----- 15 CC common 16 CC all the common defined in opa 17 CC 18 CC 19 CC OUTPUT : : no 20 CC ------ 21 CC 22 CC EXTERNAL : 23 CC -------- 24 CC p4zsink2 25 CC 26 CC MODIFICATIONS: 27 CC -------------- 28 CC original : 2004 - O. Aumont 29 CC---------------------------------------------------------------------- 30 CC parameters and commons 31 CC ====================== 32 CDIR$ NOLIST 33 USE oce_trc 34 USE trp_trc 35 USE sms 36 IMPLICIT NONE 37 #include "domzgr_substitute.h90" 38 39 #if defined key_kriest 40 41 # include "p4zsink.kriest.h" 1 MODULE p4zsink 2 !!====================================================================== 3 !! *** MODULE p4zsink *** 4 !! TOP : PISCES Compute vertical flux of particulate matter due to gravitational sinking 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 && ! defined key_kriest 10 !!---------------------------------------------------------------------- 11 !! 'key_pisces' and PISCES bio-model 12 !! NOT 'key_kriest' No Kriest option 13 !!---------------------------------------------------------------------- 14 !! p4z_sink : Compute vertical flux of particulate matter due to gravitational sinking 15 !!---------------------------------------------------------------------- 16 USE oce_trc ! 17 USE trp_trc 18 USE sms 19 USE p4zsink2 ! 20 21 IMPLICIT NONE 22 PRIVATE 23 24 PUBLIC p4z_sink ! called in p4zbio.F90 25 26 !!* Substitution 27 # include "domzgr_substitute.h90" 28 !!---------------------------------------------------------------------- 29 !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007) 30 !! $Header:$ 31 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 32 !!---------------------------------------------------------------------- 33 34 CONTAINS 35 36 SUBROUTINE p4z_sink 37 !!--------------------------------------------------------------------- 38 !! *** ROUTINE p4z_sink *** 39 !! 40 !! ** Purpose : Compute vertical flux of particulate matter due to 41 !! gravitational sinking 42 !! 43 !! ** Method : - ??? 44 !!--------------------------------------------------------------------- 45 INTEGER :: ji, jj, jk 46 INTEGER :: iksed 47 REAL(wp) :: zagg1, zagg2, zagg3, zagg4 48 REAL(wp) :: zfact, zstep, zwsmax 49 #if defined key_trc_dia3d 50 REAL(wp) :: zrfact2 51 #endif 52 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zsinking, zsinking2 53 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zsinkfer, zsinkfer2 54 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zsinkcal, zsinksil 55 !!--------------------------------------------------------------------- 56 57 zstep = rfact2 / rjjss ! Timestep duration for biology 58 59 60 ! Sinking speeds of detritus is increased with depth as shown 61 ! by data and from the coagulation theory 62 ! ----------------------------------------------------------- 63 64 iksed = 10 65 66 DO jk = 1, jpkm1 67 DO jj = 1, jpj 68 DO ji=1,jpi 69 zfact = MAX( 0., fsdepw(ji,jj,jk+1)-hmld(ji,jj) ) / 4000. 70 wsbio4(ji,jj,jk) = wsbio2 + ( 200.- wsbio2 ) * zfact 71 END DO 72 END DO 73 END DO 74 75 ! LIMIT THE VALUES OF THE SINKING SPEEDS 76 ! TO AVOID NUMERICAL INSTABILITIES 77 78 wsbio3(:,:,:) = wsbio 79 80 DO jk = 1,jpkm1 81 DO jj = 1, jpj 82 DO ji = 1, jpi 83 zwsmax = 0.8 * fse3t(ji,jj,jk) / zstep 84 wsbio4(ji,jj,jk) = MIN( wsbio4(ji,jj,jk), zwsmax ) 85 wsbio3(ji,jj,jk) = MIN( wsbio3(ji,jj,jk), zwsmax ) 86 END DO 87 END DO 88 END DO 89 90 wscal(:,:,:) = wsbio4(:,:,:) 91 92 93 ! INITIALIZE TO ZERO ALL THE SINKING ARRAYS 94 ! ----------------------------------------- 95 96 zsinking (:,:,:) = 0.e0 97 zsinking2(:,:,:) = 0.e0 98 zsinkcal (:,:,:) = 0.e0 99 zsinkfer (:,:,:) = 0.e0 100 zsinksil (:,:,:) = 0.e0 101 zsinkfer2(:,:,:) = 0.e0 102 103 ! Compute the sedimentation term using p4zsink2 for all 104 ! the sinking particles 105 ! ----------------------------------------------------- 106 107 CALL p4z_sink2( wsbio3, zsinking , jppoc ) 108 CALL p4z_sink2( wsbio3, zsinkfer , jpsfe ) 109 CALL p4z_sink2( wsbio4, zsinking2, jpgoc ) 110 CALL p4z_sink2( wsbio4, zsinkfer2, jpbfe ) 111 CALL p4z_sink2( wsbio4, zsinksil , jpdsi ) 112 CALL p4z_sink2( wscal , zsinkcal , jpcal ) 113 114 ! Exchange between organic matter compartments due to 115 ! coagulation/disaggregation 116 ! --------------------------------------------------- 117 118 DO jk = 1, jpkm1 119 DO jj = 1, jpj 120 DO ji = 1, jpi 121 122 zfact = zstep * zdiss(ji,jj,jk) 123 124 ! Part I : Coagulation dependent on turbulence 125 ! ---------------------------------------------- 126 127 # if defined key_off_degrad 128 zagg1 = 940.* zfact * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jppoc) * facvol(ji,jj,jk) 129 # else 130 zagg1 = 940.* zfact * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jppoc) 131 # endif 132 133 # if defined key_off_degrad 134 zagg2 = 1.054e4 * zfact * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jpgoc) * facvol(ji,jj,jk) 135 # else 136 zagg2 = 1.054e4 * zfact * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jpgoc) 137 # endif 138 139 ! Aggregation of small into large particles 140 ! Part II : Differential settling 141 ! ---------------------------------------------- 142 143 # if defined key_off_degrad 144 zagg3 = 0.66 * zstep * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jpgoc) * facvol(ji,jj,jk) 145 # else 146 zagg3 = 0.66 * zstep * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jpgoc) 147 # endif 148 149 # if defined key_off_degrad 150 !!gm zagg4 set to zero ???? 151 zagg4 = 0.e0 * zstep * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jppoc) * facvol(ji,jj,jk) 152 # else 153 !!gm zagg4 set to zero ???? 154 zagg4 = 0.e0 * zstep * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jppoc) 155 # endif 156 157 xagg (ji,jj,jk) = zagg1 + zagg2 + zagg3 + zagg4 158 xaggfe(ji,jj,jk) = xagg(ji,jj,jk) * trn(ji,jj,jk,jpsfe) / ( trn(ji,jj,jk,jppoc) + rtrn ) 159 160 ! Aggregation of DOC to small particles 161 ! -------------------------------------- 162 163 xaggdoc(ji,jj,jk) = ( 80.* trn(ji,jj,jk,jpdoc) + 698. * trn(ji,jj,jk,jppoc) ) & 164 # if defined key_off_degrad 165 & * facvol(ji,jj,jk) & 166 # endif 167 & * zfact * trn(ji,jj,jk,jpdoc) 168 169 xaggdoc2(ji,jj,jk) = 1.05e4 * zfact * trn(ji,jj,jk,jpgoc) & 170 # if defined key_off_degrad 171 & * facvol(ji,jj,jk) & 172 # endif 173 & * trn(ji,jj,jk,jpdoc) 174 175 END DO 176 END DO 177 END DO 178 179 # if defined key_trc_dia3d 180 zrfact2 = 1.e3 * rfact2r 181 trc2d(:,:, 5) = zsinking (:,:,iksed+1) * zrfact2 182 trc2d(:,:, 6) = zsinking2(:,:,iksed+1) * zrfact2 183 trc2d(:,:, 7) = zsinkfer (:,:,iksed+1) * zrfact2 184 trc2d(:,:, 8) = zsinkfer2(:,:,iksed+1) * zrfact2 185 trc2d(:,:, 9) = zsinksil (:,:,iksed+1) * zrfact2 186 trc2d(:,:,10) = zsinkcal (:,:,iksed+1) * zrfact2 187 # endif 188 ! 189 END SUBROUTINE p4z_sink 42 190 43 191 #else 44 45 # include "p4zsink.std.h" 46 47 #endif 48 49 #endif 50 RETURN 51 END 192 !!====================================================================== 193 !! Dummy module : No PISCES bio-model 194 !!====================================================================== 195 CONTAINS 196 SUBROUTINE p4z_sink ! Empty routine 197 END SUBROUTINE p4z_sink 198 #endif 199 200 !!====================================================================== 201 END MODULE p4zsink -
branches/dev_001_GM/NEMO/TOP_SRC/PISCES_SMS/p4zsink2.F90
r774 r775 1 MODULE p4zsink2 2 !!====================================================================== 3 !! *** MODULE p4zsink2 *** 4 !! TOP : PISCES Compute vertical flux of particulate matter due to gravitational sinking 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_sink2 : Compute vertical flux of particulate matter due to gravitational sinking 14 !!---------------------------------------------------------------------- 15 USE oce_trc ! 16 USE trp_trc 17 USE sms 1 18 2 CCC $Header$ 3 CCC TOP 1.0 , LOCEAN-IPSL (2005) 4 C This software is governed by CeCILL licence see modipsl/doc/NEMO_CeCILL.txt 5 C --------------------------------------------------------------------------- 6 SUBROUTINE p4zsink2(wstmp,sinktemp,jn) 7 CDIR$ LIST 8 #if defined key_top && defined key_pisces 9 !!! 10 !!! p4zsink2 : PISCES model 11 !!! *********************** 12 !!! 13 !! 14 !! PURPOSE : 15 !! --------- 16 !! Compute the sedimentation terms for the various sinking 17 !! particles. The scheme used to compute the trends is based 18 !! on MUSCL. 19 !! 20 !! METHOD : 21 !! ------- 22 !! this ROUTINE compute not exactly the advection but the 23 !! transport term, i.e. div(u*tra). 24 !! 25 !! 26 !! REFERENCES : 27 !! ---------- 28 !! 29 !! References : 30 !! Estubier, A., and M. Levy, Notes Techn. Pole de Modelisation 31 !! IPSL, Sept. 2000 (http://www.lodyc.jussieu.fr/opa) 32 !! 33 !! 34 !! MODIFICATIONS: 35 !! -------------- 36 !! original : 06-00 (A.Estublier) 37 !! modifications : 2004 (O. Aumont) 38 !! 39 !!---------------------------------------------------------------------- 40 CC ---------------------------------------------------------------- 41 CC parameters and commons 42 CC ====================== 43 CDIR$ NOLIST 44 USE oce_trc 45 USE trp_trc 46 USE sms 47 IMPLICIT NONE 48 #include "domzgr_substitute.h90" 49 CDIR$ LIST 50 CC----------------------------------------------------------------- 51 CC local declarations 52 CC ================== 53 C 54 INTEGER ji,jj,jk,jn 55 REAL ztraz(jpi,jpj,jpk),zakz(jpi,jpj,jpk) 56 REAL zkz(jpi,jpj,jpk) 57 REAL zigma,zew,zstep,zign 58 REAL wstmp(jpi,jpj,jpk),sinktemp(jpi,jpj,jpk) 59 REAL wstmp2(jpi,jpj,jpk) 19 IMPLICIT NONE 20 PRIVATE 60 21 61 !!!--------------------------------------------------------------------- 62 !!! OPA8, LODYC (01/00) 63 !!!--------------------------------------------------------------------- 64 ! 1. Initialization 65 ! -------------- 22 PUBLIC p4z_sink2 ! called in p4zbio.F90 66 23 67 zstep = rfact2 24 !!* Substitution 25 # include "domzgr_substitute.h90" 26 !!---------------------------------------------------------------------- 27 !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007) 28 !! $Header:$ 29 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 30 !!---------------------------------------------------------------------- 68 31 69 ztraz = 0 70 zkz = 0 71 zakz = 0. 32 CONTAINS 72 33 73 do jk=1,jpk-1 34 SUBROUTINE p4z_sink2( wstmp, sinktemp, jn ) 35 !!--------------------------------------------------------------------- 36 !! *** ROUTINE p4z_sink2 *** 37 !! 38 !! ** Purpose : Compute the sedimentation terms for the various sinking 39 !! particles. The scheme used to compute the trends is based 40 !! on MUSCL. 41 !! 42 !! ** Method : - this ROUTINE compute not exactly the advection but the 43 !! transport term, i.e. div(u*tra). 44 !!--------------------------------------------------------------------- 45 INTEGER , INTENT(in ) :: jn ! tracer index index 46 REAL(wp), INTENT(in ), DIMENSION(jpi,jpj,jpk) :: wstmp ! ??? 47 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: sinktemp ! ??? 48 !! 49 INTEGER :: ji, jj, jk 50 REAL(wp) :: zigma,zew,zstep,zign 51 REAL(wp), DIMENSION(jpi,jpj,jpk) :: ztraz, zakz 52 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zkz , wstmp2 53 !!--------------------------------------------------------------------- 54 55 zstep = rfact2 56 57 ztraz(:,:,:) = 0.e0 58 zkz (:,:,:) = 0.e0 59 zakz (:,:,:) = 0.e0 60 61 DO jk = 1, jpkm1 62 # if defined key_off_degrad 63 wstmp2(:,:,jk+1)=-wstmp(:,:,jk)/rjjss*tmask(:,:,jk+1)*facvol(:,:,jk) 64 # else 74 65 wstmp2(:,:,jk+1)=-wstmp(:,:,jk)/rjjss*tmask(:,:,jk+1) 75 # if defined key_off_degrad 76 & *facvol(:,:,jk) 77 # endif 78 end do 66 67 # endif 68 END DO 79 69 80 wstmp2(:,:,1)=0.70 wstmp2(:,:,1) = 0.e0 81 71 ! 82 ! 3.Vertical advective flux72 ! Vertical advective flux 83 73 !------------------------------- 84 74 ! ... first guess of the slopes 85 75 ! ... interior values 86 ! 87 DO jk=2,jpkm1 88 ztraz(:,:,jk) = (trn(:,:,jk-1,jn) - trn(:,:,jk,jn)) 89 $ *tmask(:,:,jk) 90 ENDDO 76 DO jk = 2, jpkm1 77 ztraz(:,:,jk) = (trn(:,:,jk-1,jn) - trn(:,:,jk,jn)) *tmask(:,:,jk) 78 END DO 91 79 ! 92 80 ! slopes 93 ! 94 DO jk=2,jpkm1 95 DO jj = 1,jpj 81 DO jk=2,jpkm1 82 DO jj = 1,jpj 96 83 DO ji = 1, jpi 97 zign = 0.5*(sign(1.,ztraz(ji,jj,jk)*ztraz(ji,jj,jk+1))+1) 98 zakz(ji,jj,jk) = 0.5*(ztraz(ji,jj,jk) 99 $ +ztraz(ji,jj,jk+1))*zign 100 ENDDO 101 ENDDO 102 ENDDO 84 zign = 0.5*(sign(1.,ztraz(ji,jj,jk)*ztraz(ji,jj,jk+1))+1) 85 zakz(ji,jj,jk) = 0.5*(ztraz(ji,jj,jk) + ztraz(ji,jj,jk+1) ) * zign 86 END DO 87 END DO 88 END DO 103 89 ! 104 90 ! Slopes limitation 105 ! 106 DO jk=2,jpkm1 107 DO jj = 1,jpj 108 DO ji = 1,jpi 109 zakz(ji,jj,jk) = sign(1.,zakz(ji,jj,jk)) * 110 $ min(abs(zakz(ji,jj,jk)), 111 $ 2.*abs(ztraz(ji,jj,jk+1)), 112 $ 2.*abs(ztraz(ji,jj,jk))) 113 ENDDO 114 ENDDO 115 ENDDO 91 DO jk = 2, jpkm1 92 DO jj = 1, jpj 93 DO ji = 1, jpi 94 zakz(ji,jj,jk) = sign(1.,zakz(ji,jj,jk)) * & 95 & min(abs(zakz(ji,jj,jk)), & 96 & 2.*abs(ztraz(ji,jj,jk+1)), & 97 & 2.*abs(ztraz(ji,jj,jk))) 98 END DO 99 END DO 100 END DO 116 101 117 102 ! vertical advective flux 118 DO jk=1,jpkm1119 DO jj = 1,jpj103 DO jk = 1, jpkm1 104 DO jj = 1, jpj 120 105 DO ji = 1, jpi 121 zigma = wstmp2(ji,jj,jk+1)*zstep/fse3w(ji,jj,jk+1)122 zew = wstmp2(ji,jj,jk+1)123 sinktemp(ji,jj,jk+1) = -zew*(trn(ji,jj,jk,jn)124 $-0.5*(1+zigma)*zakz(ji,jj,jk))*zstep125 END DO126 ENDDO127 ENDDO106 zigma = wstmp2(ji,jj,jk+1)*zstep/fse3w(ji,jj,jk+1) 107 zew = wstmp2(ji,jj,jk+1) 108 sinktemp(ji,jj,jk+1) = -zew*(trn(ji,jj,jk,jn) & 109 & -0.5*(1+zigma)*zakz(ji,jj,jk))*zstep 110 END DO 111 END DO 112 END DO 128 113 ! 129 114 ! Boundary conditions 130 ! 131 sinktemp(:,:,1)=0. 132 sinktemp(:,:,jpk)=0. 133 C 134 DO jk=1,jpkm1 135 DO jj = 1,jpj 115 sinktemp(:,:,1 ) = 0.e0 116 sinktemp(:,:,jpk) = 0.e0 117 118 DO jk=1,jpkm1 119 DO jj = 1,jpj 136 120 DO ji = 1, jpi 137 ! 138 trn(ji,jj,jk,jn) = trn(ji,jj,jk,jn) 139 & + (sinktemp(ji,jj,jk)-sinktemp(ji,jj,jk+1)) 140 & /fse3t(ji,jj,jk) 141 ! 142 ENDDO 143 ENDDO 144 ENDDO 145 ! 146 trb(:,:,:,jn)=trn(:,:,:,jn) 147 ! 148 #endif 149 C 150 RETURN 151 END 121 trn(ji,jj,jk,jn) = trn(ji,jj,jk,jn) & 122 & + (sinktemp(ji,jj,jk)-sinktemp(ji,jj,jk+1)) & 123 & /fse3t(ji,jj,jk) 124 END DO 125 END DO 126 END DO 127 128 trb(:,:,:,jn) = trn(:,:,:,jn) 129 ! 130 END SUBROUTINE p4z_sink2 131 132 #else 133 !!====================================================================== 134 !! Dummy module : No PISCES bio-model 135 !!====================================================================== 136 CONTAINS 137 SUBROUTINE p4z_sink2( wstmp, sinktemp, jn ) ! Empty routine 138 INTEGER, INTENT( in ) :: jn 139 REAL , INTENT( in ) :: wstmp,sinktemp 140 WRITE(*,*) 'p4z_sink2: You should not have seen this print! error?', jn, wstmp, sinktemp 141 END SUBROUTINE p4z_sink2 142 #endif 143 144 !!====================================================================== 145 END MODULE p4zsink2 -
branches/dev_001_GM/NEMO/TOP_SRC/PISCES_SMS/p4zsink_kriest.F90
r774 r775 1 CCCCCC PISCES MODEL: Kriest parameterization 2 CDIR$ LIST 3 CC---------------------------------------------------------------------- 4 CC local declarations 5 CC ================== 6 INTEGER jksed, ji, jj, jk 7 REAL xagg1,xagg2,xagg3,xagg4,xagg5,xaggsi,xaggsh 8 REAL znum(jpi,jpj,jpk) 9 REAL xnum,xeps,xfm,xgm,xsm 10 REAL xdiv,xdiv1,xdiv2,xdiv3,xdiv4,xdiv5 11 REAL zval1, zval2, zval3, zval4 12 REAL zstep 1 MODULE p4zsink_kriest 2 !!====================================================================== 3 !! *** MODULE p4zsink_kriest *** 4 !! TOP : PISCES Compute vertical flux of particulate matter due to gravitational sinking 5 !! Kriest parameterization 6 !!====================================================================== 7 !! History : 1.0 ! 2004 (O. Aumont) Original code 8 !! 2.0 ! 2007-12 (C. Ethe, G. Madec) F90 9 !!---------------------------------------------------------------------- 10 #if defined key_pisces && defined key_kriest 11 !!---------------------------------------------------------------------- 12 !! 'key_pisces' and PISCES bio-model 13 !! 'key_kriest' kriest option 14 !!---------------------------------------------------------------------- 15 !! p4z_sink_kriest : Compute vertical flux of particulate matter due 16 !! to gravitational sinking (Kriest parameterization) 17 !!---------------------------------------------------------------------- 18 USE oce_trc ! 19 USE trp_trc 20 USE sms 21 USE p4zsink2 22 23 IMPLICIT NONE 24 PRIVATE 25 26 PUBLIC p4z_sink_kriest ! called in p4zbio.F90 27 28 !!* Substitution 29 # include "domzgr_substitute.h90" 30 !!---------------------------------------------------------------------- 31 !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007) 32 !! $Header:$ 33 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 34 !!---------------------------------------------------------------------- 35 36 CONTAINS 37 38 SUBROUTINE p4z_sink_kriest 39 !!--------------------------------------------------------------------- 40 !! *** ROUTINE p4z_sink_kriest *** 41 !! 42 !! ** Purpose : Compute vertical flux of particulate matter due to 43 !! gravitational sinking - Kriest parameterization 44 !! 45 !! ** Method : - ??? 46 !!--------------------------------------------------------------------- 47 INTEGER :: ji, jj, jk 48 INTEGER :: iksed 49 REAL(wp) :: zagg1, zagg2, zagg3, zagg4, zagg5, zaggsi, zaggsh 50 REAL(wp) :: znum , zeps, zfm, zgm, zsm 51 REAL(wp) :: zdiv , zdiv1, zdiv2, zdiv3, zdiv4, zdiv5 52 REAL(wp) :: zval1, zval2, zval3, zval4 53 REAL(wp) :: zstep 13 54 #if defined key_trc_dia3d 14 REAL zrfact255 REAL(wp) :: zrfact2 15 56 #endif 16 REAL sinking(jpi,jpj,jpk),sinking2(jpi,jpj,jpk) 17 REAL sinkfer(jpi,jpj,jpk) 18 REAL sinkcal(jpi,jpj,jpk),sinksil(jpi,jpj,jpk) 19 C 20 C 21 C Time step duration for biology 22 C ------------------------------ 23 C 24 zstep=rfact2/rjjss 25 26 C 27 C 28 C Initialisation of variables used to compute Sinking Speed 29 C --------------------------------------------------------- 30 C 31 znum(:,:,:) = 0. 32 jksed = 10 57 REAL(wp), DIMENSION(jpi,jpj,jpk) :: znum3d 58 REAL(wp), DIMENSION(jpi,jpj,jpk) :: sinking, sinking2 59 REAL(wp), DIMENSION(jpi,jpj,jpk) :: sinkfer 60 REAL(wp), DIMENSION(jpi,jpj,jpk) :: sinkcal, sinksil 61 !!--------------------------------------------------------------------- 62 63 zstep=rfact2/rjjss ! Time step duration for biology 64 65 66 ! Initialisation of variables used to compute Sinking Speed 67 ! --------------------------------------------------------- 68 69 znum3d(:,:,:) = 0.e0 70 iksed = 10 33 71 zval1 = 1. + xkr_zeta 34 72 zval2 = 1. + xkr_zeta + xkr_eta 35 73 zval3 = 1. + xkr_eta 36 C 37 C Computation of the vertical sinking speed : Kriest et Evans, 2000 38 C ----------------------------------------------------------------- 39 C 40 do jk=1,jpk-1 41 do jj=1,jpj 42 do ji=1,jpi 43 IF (tmask(ji,jj,jk).NE.0) THEN 44 xnum = trn(ji,jj,jk,jppoc) / (trn(ji,jj,jk,jpnum)+rtrn) 45 & / xkr_massp 46 C -------------- To avoid sinking speed over 50 m/day ------- 47 xnum = min( xnumm(jk), xnum ) 48 xnum = max( 1.1, xnum ) 49 znum(ji,jj,jk) = xnum 50 C------------------------------------------------------------ 51 xeps = ( zval1 * xnum - 1. )/ ( xnum - 1. ) 52 xfm = xkr_frac**( 1. - xeps ) 53 xgm = xkr_frac**( zval1 - xeps ) 54 xdiv = max(1E-4,abs(xeps-zval2))*sign(1.,(xeps-zval2)) 55 xdiv1=(xeps-zval3) 56 wsbio3(ji,jj,jk)= xkr_wsbio_min * ( xeps-zval1 ) / xdiv 57 & - xkr_wsbio_max * xgm * xkr_eta / xdiv 58 wsbio4(ji,jj,jk)= xkr_wsbio_min * ( xeps-1. ) / xdiv1 59 & - xkr_wsbio_max * xfm * xkr_eta / xdiv1 60 IF( xnum == 1.1) THEN 61 wsbio3(ji,jj,jk) = wsbio4(ji,jj,jk) 62 ENDIF 63 ENDIF 64 end do 65 end do 66 end do 67 C 68 wscal(:,:,:)=max(wsbio3(:,:,:),50.) 69 C 70 C 71 C INITIALIZE TO ZERO ALL THE SINKING ARRAYS 72 C ----------------------------------------- 73 C 74 sinking=0. 75 sinking2=0. 76 sinkcal=0. 77 sinkfer=0. 78 sinksil=0. 79 C 80 C Compute the sedimentation term using p4zsink2 for all 81 C the sinking particles 82 C ----------------------------------------------------- 83 C 84 CALL p4zsink2(wsbio3,sinking,jppoc) 85 CALL p4zsink2(wsbio4,sinking2,jpnum) 86 CALL p4zsink2(wsbio3,sinkfer,jpsfe) 87 CALL p4zsink2(wscal,sinksil,jpdsi) 88 CALL p4zsink2(wscal,sinkcal,jpcal) 89 90 C 91 C Exchange between organic matter compartments due to 92 C coagulation/disaggregation 93 C --------------------------------------------------- 94 C 95 zval1 = 1. + xkr_zeta 96 zval2 = 1. + xkr_eta 97 zval3 = 3. + xkr_eta 98 zval4 = 4. + xkr_eta 99 100 DO jk = 1,jpkm1 101 DO jj = 1,jpj 102 DO ji = 1,jpi 103 IF (tmask(ji,jj,jk).NE.0.) THEN 104 C 105 xnum=trn(ji,jj,jk,jppoc)/(trn(ji,jj,jk,jpnum)+rtrn) 106 & /xkr_massp 107 C -------------- To avoid sinking speed over 50 m/day ------- 108 xnum=min(xnumm(jk),xnum) 109 xnum=max(1.1,xnum) 110 C------------------------------------------------------------ 111 xeps =(zval1*xnum-1.)/(xnum-1.) 112 xdiv =max(1E-4,abs(xeps-zval3))*sign(1.,(xeps-zval3)) 113 xdiv1=max(1E-4,abs(xeps-4.))*sign(1.,(xeps-4.)) 114 xdiv2=(xeps-2.) 115 xdiv3=(xeps-3.) 116 xdiv4=(xeps-zval2) 117 xdiv5=(2*xeps-zval4) 118 xfm=xkr_frac**(1.-xeps) 119 xsm=xkr_frac**xkr_eta 120 C 121 C Part I : Coagulation dependant on turbulence 122 C ---------------------------------------------- 123 C 124 xagg1=(0.163*trn(ji,jj,jk,jpnum)**2 125 & *2.*( (xfm-1.)*(xfm*xkr_mass_max**3-xkr_mass_min**3) 126 & *(xeps-1)/xdiv1 + 3.*(xfm*xkr_mass_max-xkr_mass_min) 127 & *(xfm*xkr_mass_max**2-xkr_mass_min**2) 128 & *(xeps-1.)**2/(xdiv2*xdiv3))) 74 75 ! Computation of the vertical sinking speed : Kriest et Evans, 2000 76 ! ----------------------------------------------------------------- 77 78 DO jk = 1, jpkm1 79 DO jj = 1, jpj 80 DO ji = 1, jpi 81 IF( tmask(ji,jj,jk) /= 0.e0 ) THEN 82 znum = trn(ji,jj,jk,jppoc) / ( trn(ji,jj,jk,jpnum) + rtrn ) / xkr_massp 83 ! -------------- To avoid sinking speed over 50 m/day ------- 84 znum = MIN( xnumm(jk), znum ) 85 znum = MAX( 1.1 , znum ) 86 znum3d(ji,jj,jk) = znum 87 !------------------------------------------------------------ 88 zeps = ( zval1 * znum - 1. )/ ( znum - 1. ) 89 zfm = xkr_frac**( 1. - zeps ) 90 zgm = xkr_frac**( zval1 - zeps ) 91 zdiv = MAX( 1.e-4, ABS( zeps - zval2 ) ) * SIGN( 1., ( zeps - zval2 ) ) 92 zdiv1 = zeps - zval3 93 !!gmoptimisation possible below 94 wsbio3(ji,jj,jk) = xkr_wsbio_min * ( zeps - zval1 ) / zdiv & 95 & - xkr_wsbio_max * zgm * xkr_eta / zdiv 96 wsbio4(ji,jj,jk) = xkr_wsbio_min * ( zeps-1. ) / zdiv1 & 97 & - xkr_wsbio_max * zfm * xkr_eta / zdiv1 98 IF( znum == 1.1) wsbio3(ji,jj,jk) = wsbio4(ji,jj,jk) 99 ENDIF 100 END DO 101 END DO 102 END DO 103 104 wscal(:,:,:) = MAX( wsbio3(:,:,:), 50. ) 105 106 107 ! INITIALIZE TO ZERO ALL THE SINKING ARRAYS 108 ! ----------------------------------------- 109 110 sinking (:,:,:) = 0.e0 111 sinking2(:,:,:) = 0.e0 112 sinkcal (:,:,:) = 0.e0 113 sinkfer (:,:,:) = 0.e0 114 sinksil (:,:,:) = 0.e0 115 116 ! Compute the sedimentation term using p4zsink2 for all 117 ! the sinking particles 118 ! ----------------------------------------------------- 119 120 CALL p4z_sink2( wsbio3, sinking , jppoc ) 121 CALL p4z_sink2( wsbio4, sinking2, jpnum ) 122 CALL p4z_sink2( wsbio3, sinkfer , jpsfe ) 123 CALL p4z_sink2( wscal , sinksil , jpdsi ) 124 CALL p4z_sink2( wscal , sinkcal , jpcal ) 125 126 ! Exchange between organic matter compartments due to 127 ! coagulation/disaggregation 128 ! --------------------------------------------------- 129 130 zval1 = 1. + xkr_zeta 131 zval2 = 1. + xkr_eta 132 zval3 = 3. + xkr_eta 133 zval4 = 4. + xkr_eta 134 135 DO jk = 1,jpkm1 136 DO jj = 1,jpj 137 DO ji = 1,jpi 138 IF( tmask(ji,jj,jk) /= 0.e0 ) THEN 139 140 znum = trn(ji,jj,jk,jppoc)/(trn(ji,jj,jk,jpnum)+rtrn) / xkr_massp 141 ! -------------- To avoid sinking speed over 50 m/day ------- 142 znum = min(xnumm(jk),znum) 143 znum = MAX( 1.1,znum) 144 !------------------------------------------------------------ 145 zeps = ( zval1 * znum - 1.) / ( znum - 1.) 146 zdiv = MAX( 1.e-4, ABS( zeps - zval3) ) * SIGN( 1., zeps - zval3 ) 147 zdiv1 = MAX( 1.e-4, ABS( zeps - 4. ) ) * SIGN( 1., zeps - 4. ) 148 zdiv2 = zeps - 2. 149 zdiv3 = zeps - 3. 150 zdiv4 = zeps - zval2 151 zdiv5 = 2.* zeps - zval4 152 zfm = xkr_frac**( 1.- zeps ) 153 zsm = xkr_frac**xkr_eta 154 155 ! Part I : Coagulation dependant on turbulence 156 ! ---------------------------------------------- 157 158 zagg1 = ( 0.163 * trn(ji,jj,jk,jpnum)**2 & 159 & * 2.*( (zfm-1.)*(zfm*xkr_mass_max**3-xkr_mass_min**3) & 160 & * (zeps-1)/zdiv1 + 3.*(zfm*xkr_mass_max-xkr_mass_min) & 161 & * (zfm*xkr_mass_max**2-xkr_mass_min**2) & 162 & * (zeps-1.)**2/(zdiv2*zdiv3)) & 163 # if defined key_off_degrad 164 & *facvol(ji,jj,jk) & 165 # endif 166 & ) 167 168 zagg2 = ( 2*0.163*trn(ji,jj,jk,jpnum)**2*zfm* & 169 & ((xkr_mass_max**3+3.*(xkr_mass_max**2 & 170 & *xkr_mass_min*(zeps-1.)/zdiv2 & 171 & +xkr_mass_max*xkr_mass_min**2*(zeps-1.)/zdiv3) & 172 & +xkr_mass_min**3*(zeps-1)/zdiv1) & 173 & -zfm*xkr_mass_max**3*(1.+3.*((zeps-1.)/ & 174 & (zeps-2.)+(zeps-1.)/zdiv3)+(zeps-1.)/zdiv1)) & 129 175 # if defined key_off_degrad 130 & *facvol(ji,jj,jk)176 & *facvol(ji,jj,jk) & 131 177 # endif 132 133 C 134 xagg2=(2*0.163*trn(ji,jj,jk,jpnum)**2*xfm* 135 & ((xkr_mass_max**3+3.*(xkr_mass_max**2 136 & *xkr_mass_min*(xeps-1.)/xdiv2 137 & +xkr_mass_max*xkr_mass_min**2*(xeps-1.)/xdiv3) 138 & +xkr_mass_min**3*(xeps-1)/xdiv1) 139 & -xfm*xkr_mass_max**3*(1.+3.*((xeps-1.)/ 140 & (xeps-2.)+(xeps-1.)/xdiv3)+(xeps-1.)/xdiv1))) 178 & ) 179 180 zagg3 = ( 0.163*trn(ji,jj,jk,jpnum)**2*zfm**2*8. * xkr_mass_max**3 & 141 181 # if defined key_off_degrad 142 & *facvol(ji,jj,jk)182 & *facvol(ji,jj,jk) & 143 183 # endif 144 C 145 xagg3=(0.163*trn(ji,jj,jk,jpnum)**2*xfm**2*8. 146 & *xkr_mass_max**3) 147 # if defined key_off_degrad 148 & *facvol(ji,jj,jk) 184 & ) 185 186 zaggsh = ( zagg1 + zagg2 + zagg3 ) * rfact2 * zdiss(ji,jj,jk) / 1000. 187 188 ! Aggregation of small into large particles 189 ! Part II : Differential settling 190 ! ---------------------------------------------- 191 192 zagg4 = ( 2.*3.141*0.125*trn(ji,jj,jk,jpnum)**2* & 193 & xkr_wsbio_min*(zeps-1.)**2 & 194 & *(xkr_mass_min**2*((1.-zsm*zfm)/(zdiv3*zdiv4) & 195 & -(1.-zfm)/(zdiv*(zeps-1.)))- & 196 & ((zfm*zfm*xkr_mass_max**2*zsm-xkr_mass_min**2) & 197 & *xkr_eta)/(zdiv*zdiv3*zdiv5) ) & 198 # if defined key_off_degrad 199 & *facvol(ji,jj,jk) & 200 # endif 201 & ) 202 203 zagg5 = ( 2.*3.141*0.125*trn(ji,jj,jk,jpnum)**2 & 204 & *(zeps-1.)*zfm*xkr_wsbio_min & 205 & *(zsm*(xkr_mass_min**2-zfm*xkr_mass_max**2) & 206 & /zdiv3-(xkr_mass_min**2-zfm*zsm*xkr_mass_max**2) & 207 & /zdiv) & 208 # if defined key_off_degrad 209 & *facvol(ji,jj,jk) & 210 # endif 211 & ) 212 213 zaggsi = ( zagg4 + zagg5 ) * zstep / 10. 214 215 xagg(ji,jj,jk) = 0.5 * xkr_stick * ( zaggsh + zaggsi ) 216 217 ! Aggregation of DOC to small particles 218 ! -------------------------------------- 219 220 xaggdoc(ji,jj,jk) = ( 0.4 * trn(ji,jj,jk,jpdoc) & 221 & + 1018. * trn(ji,jj,jk,jppoc) ) * zstep & 222 # if defined key_off_degrad 223 & * facvol(ji,jj,jk) & 224 # endif 225 & * zdiss(ji,jj,jk) * trn(ji,jj,jk,jpdoc) 226 227 ENDIF 228 END DO 229 END DO 230 END DO 231 232 # if defined key_trc_dia3d 233 zrfact2 = 1.e3 * rfact2r 234 trc2d(:,:, 5) = sinking (:,:,iksed+1) * zrfact2 235 trc2d(:,:, 6) = sinking2(:,:,iksed+1) * zrfact2 236 trc2d(:,:, 7) = sinkfer (:,:,iksed+1) * zrfact2 237 trc2d(:,:, 9) = sinksil (:,:,iksed+1) * zrfact2 238 trc2d(:,:,10) = sinkcal (:,:,iksed+1) * zrfact2 239 trc3d(:,:,:,12) = sinking (:,:,:) * zrfact2 240 trc3d(:,:,:,13) = sinking2(:,:,:) * zrfact2 241 trc3d(:,:,:,14) = sinksil (:,:,:) * zrfact2 242 trc3d(:,:,:,15) = sinkcal (:,:,:) * zrfact2 243 trc3d(:,:,:,16) = znum3d (:,:,:) 244 trc3d(:,:,:,17) = wsbio3 (:,:,:) 245 trc3d(:,:,:,18) = wsbio4 (:,:,:) 149 246 # endif 150 C 151 xaggsh=(xagg1+xagg2+xagg3)*rfact2*zdiss(ji,jj,jk) 152 & /1000. 153 C 154 C Aggregation of small into large particles 155 C Part II : Differential settling 156 C ---------------------------------------------- 157 C 158 xagg4=(2.*3.141*0.125*trn(ji,jj,jk,jpnum)**2* 159 & xkr_wsbio_min*(xeps-1.)**2 160 & *(xkr_mass_min**2*((1.-xsm*xfm)/(xdiv3*xdiv4) 161 & -(1.-xfm)/(xdiv*(xeps-1.)))- 162 & ((xfm*xfm*xkr_mass_max**2*xsm-xkr_mass_min**2) 163 & *xkr_eta)/(xdiv*xdiv3*xdiv5))) 164 # if defined key_off_degrad 165 & *facvol(ji,jj,jk) 166 # endif 167 C 168 xagg5=(2.*3.141*0.125*trn(ji,jj,jk,jpnum)**2 169 & *(xeps-1.)*xfm*xkr_wsbio_min 170 & *(xsm*(xkr_mass_min**2-xfm*xkr_mass_max**2) 171 & /xdiv3-(xkr_mass_min**2-xfm*xsm*xkr_mass_max**2) 172 & /xdiv)) 173 # if defined key_off_degrad 174 & *facvol(ji,jj,jk) 175 # endif 176 C 177 xaggsi=(xagg4+xagg5)*zstep/10. 178 C 179 xagg(ji,jj,jk)=0.5 * xkr_stick*(xaggsh+xaggsi) 180 C 181 C Aggregation of DOC to small particles 182 C -------------------------------------- 183 C 184 xaggdoc(ji,jj,jk)=(0.4*trn(ji,jj,jk,jpdoc) 185 & +1018.*trn(ji,jj,jk,jppoc))*zstep 186 & *zdiss(ji,jj,jk)*trn(ji,jj,jk,jpdoc) 187 # if defined key_off_degrad 188 & *facvol(ji,jj,jk) 189 # endif 190 C 191 192 ENDIF 193 END DO 194 END DO 195 END DO 196 C 197 # if defined key_trc_dia3d 198 zrfact2 = 1.e3*rfact2r 199 trc2d(:,:,5) = sinking(:,:,jksed+1)*zrfact2 200 trc2d(:,:,6) = sinking2(:,:,jksed+1)*zrfact2 201 trc2d(:,:,7) = sinkfer(:,:,jksed+1)*zrfact2 202 trc2d(:,:,9) = sinksil(:,:,jksed+1)*zrfact2 203 trc2d(:,:,10) = sinkcal(:,:,jksed+1)*zrfact2 204 trc3d(:,:,:,12) = sinking(:,:,:)*zrfact2 205 trc3d(:,:,:,13) = sinking2(:,:,:)*zrfact2 206 trc3d(:,:,:,14) = sinksil(:,:,:)*zrfact2 207 trc3d(:,:,:,15) = sinkcal(:,:,:)*zrfact2 208 trc3d(:,:,:,16) = znum(:,:,:) 209 trc3d(:,:,:,17) = wsbio3(:,:,:) 210 trc3d(:,:,:,18) = wsbio4(:,:,:) 211 # endif 247 ! 248 END SUBROUTINE p4z_sink_kriest 249 250 #else 251 !!====================================================================== 252 !! Dummy module : No PISCES bio-model 253 !!====================================================================== 254 CONTAINS 255 SUBROUTINE p4z_sink_kriest ! Empty routine 256 END SUBROUTINE p4z_sink_kriest 257 #endif 258 259 !!====================================================================== 260 END MODULE p4zsink_kriest
Note: See TracChangeset
for help on using the changeset viewer.