Changeset 12377 for NEMO/trunk/src/TOP/PISCES/P4Z/p4zmicro.F90
- Timestamp:
- 2020-02-12T15:39:06+01:00 (4 years ago)
- Location:
- NEMO/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/trunk
- Property svn:externals
-
old new 3 3 ^/utils/build/mk@HEAD mk 4 4 ^/utils/tools@HEAD tools 5 ^/vendors/AGRIF/dev @HEAD ext/AGRIF5 ^/vendors/AGRIF/dev_r11615_ENHANCE-04_namelists_as_internalfiles_agrif@HEAD ext/AGRIF 6 6 ^/vendors/FCM@HEAD ext/FCM 7 7 ^/vendors/IOIPSL@HEAD ext/IOIPSL
-
- Property svn:externals
-
NEMO/trunk/src/TOP/PISCES/P4Z/p4zmicro.F90
r12276 r12377 42 42 REAL(wp), PUBLIC :: epshermin !: minimum growth efficiency for grazing 1 43 43 44 !! * Substitutions 45 # include "do_loop_substitute.h90" 44 46 !!---------------------------------------------------------------------- 45 47 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 49 51 CONTAINS 50 52 51 SUBROUTINE p4z_micro( kt, knt )53 SUBROUTINE p4z_micro( kt, knt, Kbb, Krhs ) 52 54 !!--------------------------------------------------------------------- 53 55 !! *** ROUTINE p4z_micro *** … … 59 61 INTEGER, INTENT(in) :: kt ! ocean time step 60 62 INTEGER, INTENT(in) :: knt ! ??? 63 INTEGER, INTENT(in) :: Kbb, Krhs ! time level indices 61 64 ! 62 65 INTEGER :: ji, jj, jk … … 75 78 IF( ln_timing ) CALL timing_start('p4z_micro') 76 79 ! 77 DO jk = 1, jpkm1 78 DO jj = 1, jpj 79 DO ji = 1, jpi 80 zcompaz = MAX( ( trb(ji,jj,jk,jpzoo) - 1.e-9 ), 0.e0 ) 81 zfact = xstep * tgfunc2(ji,jj,jk) * zcompaz 82 83 ! Respiration rates of both zooplankton 84 ! ------------------------------------- 85 zrespz = resrat * zfact * trb(ji,jj,jk,jpzoo) / ( xkmort + trb(ji,jj,jk,jpzoo) ) & 86 & + resrat * zfact * 3. * nitrfac(ji,jj,jk) 87 88 ! Zooplankton mortality. A square function has been selected with 89 ! no real reason except that it seems to be more stable and may mimic predation. 90 ! --------------------------------------------------------------- 91 ztortz = mzrat * 1.e6 * zfact * trb(ji,jj,jk,jpzoo) * (1. - nitrfac(ji,jj,jk)) 92 93 zcompadi = MIN( MAX( ( trb(ji,jj,jk,jpdia) - xthreshdia ), 0.e0 ), xsizedia ) 94 zcompaph = MAX( ( trb(ji,jj,jk,jpphy) - xthreshphy ), 0.e0 ) 95 zcompapoc = MAX( ( trb(ji,jj,jk,jppoc) - xthreshpoc ), 0.e0 ) 96 97 ! Microzooplankton grazing 98 ! ------------------------ 99 zfood = xprefn * zcompaph + xprefc * zcompapoc + xprefd * zcompadi 100 zfoodlim = MAX( 0. , zfood - min(xthresh,0.5*zfood) ) 101 zdenom = zfoodlim / ( xkgraz + zfoodlim ) 102 zdenom2 = zdenom / ( zfood + rtrn ) 103 zgraze = grazrat * xstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpzoo) * (1. - nitrfac(ji,jj,jk)) 104 105 zgrazp = zgraze * xprefn * zcompaph * zdenom2 106 zgrazm = zgraze * xprefc * zcompapoc * zdenom2 107 zgrazsd = zgraze * xprefd * zcompadi * zdenom2 108 109 zgrazpf = zgrazp * trb(ji,jj,jk,jpnfe) / (trb(ji,jj,jk,jpphy) + rtrn) 110 zgrazmf = zgrazm * trb(ji,jj,jk,jpsfe) / (trb(ji,jj,jk,jppoc) + rtrn) 111 zgrazsf = zgrazsd * trb(ji,jj,jk,jpdfe) / (trb(ji,jj,jk,jpdia) + rtrn) 112 ! 113 zgraztotc = zgrazp + zgrazm + zgrazsd 114 zgraztotf = zgrazpf + zgrazsf + zgrazmf 115 zgraztotn = zgrazp * quotan(ji,jj,jk) + zgrazm + zgrazsd * quotad(ji,jj,jk) 116 117 ! Grazing by microzooplankton 118 zgrazing(ji,jj,jk) = zgraztotc 119 120 ! Various remineralization and excretion terms 121 ! -------------------------------------------- 122 zgrasrat = ( zgraztotf + rtrn ) / ( zgraztotc + rtrn ) 123 zgrasratn = ( zgraztotn + rtrn ) / ( zgraztotc + rtrn ) 124 zepshert = MIN( 1., zgrasratn, zgrasrat / ferat3) 125 zbeta = MAX(0., (epsher - epshermin) ) 126 zepsherf = epshermin + zbeta / ( 1.0 + 0.04E6 * 12. * zfood * zbeta ) 127 zepsherv = zepsherf * zepshert 128 129 zgrafer = zgraztotc * MAX( 0. , ( 1. - unass ) * zgrasrat - ferat3 * zepsherv ) 130 zgrarem = zgraztotc * ( 1. - zepsherv - unass ) 131 zgrapoc = zgraztotc * unass 132 133 ! Update of the TRA arrays 134 ! ------------------------ 135 zgrarsig = zgrarem * sigma1 136 tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zgrarsig 137 tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zgrarsig 138 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zgrarem - zgrarsig 139 ! 140 IF( ln_ligand ) THEN 141 tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + (zgrarem - zgrarsig) * ldocz 142 zzligprod(ji,jj,jk) = (zgrarem - zgrarsig) * ldocz 143 ENDIF 144 ! 145 tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2ut * zgrarsig 146 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zgrafer 147 zfezoo(ji,jj,jk) = zgrafer 148 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zgrapoc 149 prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + zgrapoc 150 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zgraztotf * unass 151 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zgrarsig 152 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * zgrarsig 153 ! Update the arrays TRA which contain the biological sources and sinks 154 ! -------------------------------------------------------------------- 155 zmortz = ztortz + zrespz 156 tra(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) - zmortz + zepsherv * zgraztotc 157 tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) - zgrazp 158 tra(ji,jj,jk,jpdia) = tra(ji,jj,jk,jpdia) - zgrazsd 159 tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zgrazp * trb(ji,jj,jk,jpnch)/(trb(ji,jj,jk,jpphy)+rtrn) 160 tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) - zgrazsd * trb(ji,jj,jk,jpdch)/(trb(ji,jj,jk,jpdia)+rtrn) 161 tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) - zgrazsd * trb(ji,jj,jk,jpdsi)/(trb(ji,jj,jk,jpdia)+rtrn) 162 tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) + zgrazsd * trb(ji,jj,jk,jpdsi)/(trb(ji,jj,jk,jpdia)+rtrn) 163 tra(ji,jj,jk,jpnfe) = tra(ji,jj,jk,jpnfe) - zgrazpf 164 tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) - zgrazsf 165 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zmortz - zgrazm 166 prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + zmortz 167 conspoc(ji,jj,jk) = conspoc(ji,jj,jk) - zgrazm 168 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + ferat3 * zmortz - zgrazmf 169 ! 170 ! calcite production 171 zprcaca = xfracal(ji,jj,jk) * zgrazp 172 prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo) 173 ! 174 zprcaca = part * zprcaca 175 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) - zprcaca 176 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) - 2. * zprcaca 177 tra(ji,jj,jk,jpcal) = tra(ji,jj,jk,jpcal) + zprcaca 178 END DO 179 END DO 180 END DO 80 DO_3D_11_11( 1, jpkm1 ) 81 zcompaz = MAX( ( tr(ji,jj,jk,jpzoo,Kbb) - 1.e-9 ), 0.e0 ) 82 zfact = xstep * tgfunc2(ji,jj,jk) * zcompaz 83 84 ! Respiration rates of both zooplankton 85 ! ------------------------------------- 86 zrespz = resrat * zfact * tr(ji,jj,jk,jpzoo,Kbb) / ( xkmort + tr(ji,jj,jk,jpzoo,Kbb) ) & 87 & + resrat * zfact * 3. * nitrfac(ji,jj,jk) 88 89 ! Zooplankton mortality. A square function has been selected with 90 ! no real reason except that it seems to be more stable and may mimic predation. 91 ! --------------------------------------------------------------- 92 ztortz = mzrat * 1.e6 * zfact * tr(ji,jj,jk,jpzoo,Kbb) * (1. - nitrfac(ji,jj,jk)) 93 94 zcompadi = MIN( MAX( ( tr(ji,jj,jk,jpdia,Kbb) - xthreshdia ), 0.e0 ), xsizedia ) 95 zcompaph = MAX( ( tr(ji,jj,jk,jpphy,Kbb) - xthreshphy ), 0.e0 ) 96 zcompapoc = MAX( ( tr(ji,jj,jk,jppoc,Kbb) - xthreshpoc ), 0.e0 ) 97 98 ! Microzooplankton grazing 99 ! ------------------------ 100 zfood = xprefn * zcompaph + xprefc * zcompapoc + xprefd * zcompadi 101 zfoodlim = MAX( 0. , zfood - min(xthresh,0.5*zfood) ) 102 zdenom = zfoodlim / ( xkgraz + zfoodlim ) 103 zdenom2 = zdenom / ( zfood + rtrn ) 104 zgraze = grazrat * xstep * tgfunc2(ji,jj,jk) * tr(ji,jj,jk,jpzoo,Kbb) * (1. - nitrfac(ji,jj,jk)) 105 106 zgrazp = zgraze * xprefn * zcompaph * zdenom2 107 zgrazm = zgraze * xprefc * zcompapoc * zdenom2 108 zgrazsd = zgraze * xprefd * zcompadi * zdenom2 109 110 zgrazpf = zgrazp * tr(ji,jj,jk,jpnfe,Kbb) / (tr(ji,jj,jk,jpphy,Kbb) + rtrn) 111 zgrazmf = zgrazm * tr(ji,jj,jk,jpsfe,Kbb) / (tr(ji,jj,jk,jppoc,Kbb) + rtrn) 112 zgrazsf = zgrazsd * tr(ji,jj,jk,jpdfe,Kbb) / (tr(ji,jj,jk,jpdia,Kbb) + rtrn) 113 ! 114 zgraztotc = zgrazp + zgrazm + zgrazsd 115 zgraztotf = zgrazpf + zgrazsf + zgrazmf 116 zgraztotn = zgrazp * quotan(ji,jj,jk) + zgrazm + zgrazsd * quotad(ji,jj,jk) 117 118 ! Grazing by microzooplankton 119 zgrazing(ji,jj,jk) = zgraztotc 120 121 ! Various remineralization and excretion terms 122 ! -------------------------------------------- 123 zgrasrat = ( zgraztotf + rtrn ) / ( zgraztotc + rtrn ) 124 zgrasratn = ( zgraztotn + rtrn ) / ( zgraztotc + rtrn ) 125 zepshert = MIN( 1., zgrasratn, zgrasrat / ferat3) 126 zbeta = MAX(0., (epsher - epshermin) ) 127 zepsherf = epshermin + zbeta / ( 1.0 + 0.04E6 * 12. * zfood * zbeta ) 128 zepsherv = zepsherf * zepshert 129 130 zgrafer = zgraztotc * MAX( 0. , ( 1. - unass ) * zgrasrat - ferat3 * zepsherv ) 131 zgrarem = zgraztotc * ( 1. - zepsherv - unass ) 132 zgrapoc = zgraztotc * unass 133 134 ! Update of the TRA arrays 135 ! ------------------------ 136 zgrarsig = zgrarem * sigma1 137 tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) + zgrarsig 138 tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) + zgrarsig 139 tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zgrarem - zgrarsig 140 ! 141 IF( ln_ligand ) THEN 142 tr(ji,jj,jk,jplgw,Krhs) = tr(ji,jj,jk,jplgw,Krhs) + (zgrarem - zgrarsig) * ldocz 143 zzligprod(ji,jj,jk) = (zgrarem - zgrarsig) * ldocz 144 ENDIF 145 ! 146 tr(ji,jj,jk,jpoxy,Krhs) = tr(ji,jj,jk,jpoxy,Krhs) - o2ut * zgrarsig 147 tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) + zgrafer 148 zfezoo(ji,jj,jk) = zgrafer 149 tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) + zgrapoc 150 prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + zgrapoc 151 tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + zgraztotf * unass 152 tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) + zgrarsig 153 tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + rno3 * zgrarsig 154 ! Update the arrays TRA which contain the biological sources and sinks 155 ! -------------------------------------------------------------------- 156 zmortz = ztortz + zrespz 157 tr(ji,jj,jk,jpzoo,Krhs) = tr(ji,jj,jk,jpzoo,Krhs) - zmortz + zepsherv * zgraztotc 158 tr(ji,jj,jk,jpphy,Krhs) = tr(ji,jj,jk,jpphy,Krhs) - zgrazp 159 tr(ji,jj,jk,jpdia,Krhs) = tr(ji,jj,jk,jpdia,Krhs) - zgrazsd 160 tr(ji,jj,jk,jpnch,Krhs) = tr(ji,jj,jk,jpnch,Krhs) - zgrazp * tr(ji,jj,jk,jpnch,Kbb)/(tr(ji,jj,jk,jpphy,Kbb)+rtrn) 161 tr(ji,jj,jk,jpdch,Krhs) = tr(ji,jj,jk,jpdch,Krhs) - zgrazsd * tr(ji,jj,jk,jpdch,Kbb)/(tr(ji,jj,jk,jpdia,Kbb)+rtrn) 162 tr(ji,jj,jk,jpdsi,Krhs) = tr(ji,jj,jk,jpdsi,Krhs) - zgrazsd * tr(ji,jj,jk,jpdsi,Kbb)/(tr(ji,jj,jk,jpdia,Kbb)+rtrn) 163 tr(ji,jj,jk,jpgsi,Krhs) = tr(ji,jj,jk,jpgsi,Krhs) + zgrazsd * tr(ji,jj,jk,jpdsi,Kbb)/(tr(ji,jj,jk,jpdia,Kbb)+rtrn) 164 tr(ji,jj,jk,jpnfe,Krhs) = tr(ji,jj,jk,jpnfe,Krhs) - zgrazpf 165 tr(ji,jj,jk,jpdfe,Krhs) = tr(ji,jj,jk,jpdfe,Krhs) - zgrazsf 166 tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) + zmortz - zgrazm 167 prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + zmortz 168 conspoc(ji,jj,jk) = conspoc(ji,jj,jk) - zgrazm 169 tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + ferat3 * zmortz - zgrazmf 170 ! 171 ! calcite production 172 zprcaca = xfracal(ji,jj,jk) * zgrazp 173 prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo) 174 ! 175 zprcaca = part * zprcaca 176 tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) - zprcaca 177 tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) - 2. * zprcaca 178 tr(ji,jj,jk,jpcal,Krhs) = tr(ji,jj,jk,jpcal,Krhs) + zprcaca 179 END_3D 181 180 ! 182 181 IF( lk_iomput .AND. knt == nrdttrc ) THEN 183 IF( iom_use("GRAZ1") ) THEN ! Total grazing of phyto by zooplankton182 IF( iom_use("GRAZ1") ) THEN ! Total grazing of phyto by zooplankton 184 183 zgrazing(:,:,jpk) = 0._wp ; CALL iom_put( "GRAZ1" , zgrazing(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:) ) 185 184 ENDIF 186 185 IF( iom_use("FEZOO") ) THEN 187 zfezoo (:,:,jpk) = 0._wp ; CALL iom_put( "FEZOO" 186 zfezoo (:,:,jpk) = 0._wp ; CALL iom_put( "FEZOO", zfezoo(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) ) 188 187 ENDIF 189 188 IF( ln_ligand ) THEN … … 192 191 ENDIF 193 192 ! 194 IF( ln_ctl) THEN ! print mean trends (used for debugging)193 IF(sn_cfctl%l_prttrc) THEN ! print mean trends (used for debugging) 195 194 WRITE(charout, FMT="('micro')") 196 195 CALL prt_ctl_trc_info(charout) 197 CALL prt_ctl_trc(tab4d=tr a, mask=tmask, clinfo=ctrcnm)196 CALL prt_ctl_trc(tab4d=tr(:,:,:,:,Krhs), mask=tmask, clinfo=ctrcnm) 198 197 ENDIF 199 198 ! … … 228 227 ENDIF 229 228 ! 230 REWIND( numnatp_ref )231 229 READ ( numnatp_ref, namp4zzoo, IOSTAT = ios, ERR = 901) 232 230 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp4zzoo in reference namelist' ) 233 234 REWIND( numnatp_cfg )235 231 READ ( numnatp_cfg, namp4zzoo, IOSTAT = ios, ERR = 902 ) 236 232 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namp4zzoo in configuration namelist' )
Note: See TracChangeset
for help on using the changeset viewer.