Changeset 2104 for branches/DEV_r2006_merge_TRA_TRC/NEMO/TOP_SRC
- Timestamp:
- 2010-09-17T14:35:46+02:00 (14 years ago)
- Location:
- branches/DEV_r2006_merge_TRA_TRC/NEMO/TOP_SRC
- Files:
-
- 42 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/DEV_r2006_merge_TRA_TRC/NEMO/TOP_SRC/C14b/trcini_c14b.F90
r2038 r2104 179 179 ! Check number of tracers 180 180 ! ----------------------- 181 IF( jp_c14b > 1) THEN 182 IF(lwp) THEN 183 WRITE (numout,*) ' ===>>>> : w a r n i n g ' 184 WRITE (numout,*) ' ======= ============= ' 185 WRITE (numout,*) & 186 & ' STOP, change jp_c14b to 1 in par_C14b module ' 187 END IF 188 STOP 'TRC_CTL' 189 END IF 181 IF( jp_c14b > 1) CALL ctl_stop( ' Change jp_c14b to be equal 1 in par_c14b.F90' ) 190 182 191 183 ! Check tracer names … … 197 189 198 190 IF(lwp) THEN 199 WRITE (numout,*) ' ===>>>> : w a r n i n g ' 200 WRITE (numout,*) ' ======= ============= ' 201 WRITE (numout,*) ' we force tracer names' 191 CALL ctl_warn( ' we force tracer names' ) 202 192 WRITE(numout,*) ' tracer nb: ',jpc14,' name = ',ctrcnm(jpc14), ctrcnl(jpc14) 203 193 WRITE(numout,*) ' ' … … 209 199 ctrcun(jpc14) = 'ration' 210 200 IF(lwp) THEN 211 WRITE (numout,*) ' ===>>>> : w a r n i n g ' 212 WRITE (numout,*) ' ======= ============= ' 213 WRITE (numout,*) ' we force tracer unit' 201 CALL ctl_warn( ' we force tracer unit' ) 214 202 WRITE(numout,*) ' tracer ',ctrcnm(jpc14), 'UNIT= ',ctrcun(jpc14) 215 203 WRITE(numout,*) ' ' -
branches/DEV_r2006_merge_TRA_TRC/NEMO/TOP_SRC/C14b/trcrst_c14b.F90
r1953 r2104 43 43 IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~' 44 44 45 DO jn = jp_c14b0, jp_c14b1 46 CALL iom_get( knum, jpdom_autoglo, 'qint_'//ctrcnm(jn), qint_c14(:,:,jn) ) 47 END DO 45 CALL iom_get( knum, jpdom_autoglo, 'qint_c14', qint_c14 ) 48 46 49 47 END SUBROUTINE trc_rst_read_c14b … … 59 57 INTEGER, INTENT(in) :: kitrst ! time step of restart write 60 58 INTEGER, INTENT(in) :: knum ! unit of the restart file 61 INTEGER :: jn ! dummy loop indices62 59 !!---------------------------------------------------------------------- 63 60 … … 66 63 IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~' 67 64 68 DO jn = jp_c14b0, jp_c14b1 69 CALL iom_rstput( kt, kitrst, kum, 'qint_'//ctrcnm(jn), qint_c14(:,:,jn) ) 70 END DO 65 CALL iom_rstput( kt, kitrst, knum, 'qint_c14', qint_c14 ) 71 66 72 67 END SUBROUTINE trc_rst_wri_c14b -
branches/DEV_r2006_merge_TRA_TRC/NEMO/TOP_SRC/C14b/trcsms_c14b.F90
r2082 r2104 131 131 !!---------------------------------------------------------------------- 132 132 133 IF( kt == nit trc000 ) THEN133 IF( kt == nit000 ) THEN 134 134 ! Computation of decay coeffcient 135 135 zdemi = 5730. -
branches/DEV_r2006_merge_TRA_TRC/NEMO/TOP_SRC/CFC/trcsms_cfc.F90
r2082 r2104 93 93 !!---------------------------------------------------------------------- 94 94 95 IF( kt == nit trc000 ) CALL trc_cfc_cst95 IF( kt == nit000 ) CALL trc_cfc_cst 96 96 97 97 ! Temporal interpolation -
branches/DEV_r2006_merge_TRA_TRC/NEMO/TOP_SRC/LOBSTER/trcbio.F90
r2082 r2104 20 20 USE lbclnk ! 21 21 USE prtctl_trc ! Print control for debbuging 22 USE trdmod_oce 22 23 USE trdmod_trc 23 24 USE iom … … 81 82 !!--------------------------------------------------------------------- 82 83 83 IF( kt == nit trc000 ) THEN84 IF( kt == nit000 ) THEN 84 85 IF(lwp) WRITE(numout,*) 85 86 IF(lwp) WRITE(numout,*) ' trc_bio: LOBSTER bio-model' -
branches/DEV_r2006_merge_TRA_TRC/NEMO/TOP_SRC/LOBSTER/trcexp.F90
r2082 r2104 19 19 USE lbclnk 20 20 USE trc 21 USE trc trp_lec21 USE trcnam_trp 22 22 USE prtctl_trc ! Print control for debbuging 23 USE trdmod_oce 23 24 USE trdmod_trc 24 25 USE iom … … 60 61 !!--------------------------------------------------------------------- 61 62 62 IF( kt == nit trc000 ) THEN63 IF( kt == nit000 ) THEN 63 64 IF(lwp) WRITE(numout,*) 64 65 IF(lwp) WRITE(numout,*) ' trc_exp: LOBSTER export' … … 125 126 IF( ln_trczdf_exp .AND. (ln_trcadv_cen2 .OR. ln_trcadv_tvd) ) THEN 126 127 zfact = 2. * rdttra(jk) * FLOAT( nn_dttrc ) 127 IF( neuler == 0 .AND. kt == nit trc000 ) zfact = rdttra(jk) * FLOAT(nn_dttrc)128 IF( neuler == 0 .AND. kt == nit000 ) zfact = rdttra(jk) * FLOAT(nn_dttrc) 128 129 sedpoca(:,:) = sedpocb(:,:) + zfact * sedpoca(:,:) 129 130 ENDIF … … 133 134 ! ------------------------------ 134 135 IF( ln_trcadv_cen2 .OR. ln_trcadv_tvd ) THEN ! centred or tvd scheme 135 IF( neuler == 0 .AND. kt == nit trc000 ) THEN136 IF( neuler == 0 .AND. kt == nit000 ) THEN 136 137 DO jj = 1, jpj 137 138 DO ji = 1, jpi -
branches/DEV_r2006_merge_TRA_TRC/NEMO/TOP_SRC/LOBSTER/trcini_lobster.F90
r2038 r2104 275 275 ! Check number of tracers 276 276 ! ----------------------- 277 IF (jp_lobster /= 6) THEN 278 IF (lwp) THEN 279 WRITE (numout,*) ' ===>>>> : w a r n i n g ' 280 WRITE (numout,*) ' ======= ============= ' 281 WRITE (numout,*) & 282 & ' STOP, change jp_lobster to 6 in ' & 283 & ,'par_lobster.F90 ' 284 END IF 285 STOP 'TRC_CTL' 286 END IF 277 IF( jp_lobster /= 6 ) CALL ctl_stop( ' LOBSTER has 6 passive tracers. Change jp_lobster in par_lobster.F90' ) 278 287 279 ! Check tracer names 288 280 ! ------------------ … … 309 301 ctrcnl(jp_lob_dom)='Dissolved organic matter' 310 302 IF(lwp) THEN 311 WRITE (numout,*) ' ===>>>> : w a r n i n g ' 312 WRITE (numout,*) ' ======= ============= ' 313 WRITE (numout,*) ' we force tracer names' 303 CALL ctl_warn( ' We force tracer names ' ) 314 304 DO jl = 1, jp_lobster 315 305 jn = jp_lob0 + jl - 1 … … 326 316 ctrcun(jn) = 'mmole-N/m3' 327 317 IF(lwp) THEN 328 WRITE (numout,*) ' ===>>>> : w a r n i n g ' 329 WRITE (numout,*) ' ======= ============= ' 330 WRITE (numout,*) ' we force tracer unit' 318 CALL ctl_warn( ' We force tracer units ' ) 331 319 WRITE(numout,*) ' tracer ',ctrcnm(jn), 'UNIT= ',ctrcun(jn) 332 320 ENDIF -
branches/DEV_r2006_merge_TRA_TRC/NEMO/TOP_SRC/LOBSTER/trcopt.F90
r2082 r2104 65 65 !!--------------------------------------------------------------------- 66 66 67 IF( kt == nit trc000 ) THEN67 IF( kt == nit000 ) THEN 68 68 IF(lwp) WRITE(numout,*) 69 69 IF(lwp) WRITE(numout,*) ' trc_opt : LOBSTER optic-model' -
branches/DEV_r2006_merge_TRA_TRC/NEMO/TOP_SRC/LOBSTER/trcsed.F90
r2082 r2104 18 18 USE sms_lobster 19 19 USE lbclnk 20 USE trdmod_oce 20 21 USE trdmod_trc 21 22 USE iom … … 67 68 !!--------------------------------------------------------------------- 68 69 69 IF( kt == nit trc000 ) THEN70 IF( kt == nit000 ) THEN 70 71 IF(lwp) WRITE(numout,*) 71 72 IF(lwp) WRITE(numout,*) ' trc_sed: LOBSTER sedimentation' -
branches/DEV_r2006_merge_TRA_TRC/NEMO/TOP_SRC/LOBSTER/trcsms_lobster.F90
r2038 r2104 20 20 USE trcexp 21 21 USE trdmod_oce 22 USE trdmod_trc_oce 22 23 USE trdmod_trc 23 24 USE trdmld_trc -
branches/DEV_r2006_merge_TRA_TRC/NEMO/TOP_SRC/PISCES/p4zbio.F90
r1953 r2104 84 84 CALL p4z_sink ( kt, jnt ) ! vertical flux of particulate organic matter 85 85 CALL p4z_opt ( kt, jnt ) ! Optic: PAR in the water column 86 CALL p4z_lim ( kt , jnt) ! co-limitations by the various nutrients86 CALL p4z_lim ( kt ) ! co-limitations by the various nutrients 87 87 CALL p4z_prod ( kt, jnt ) ! phytoplankton growth rate over the global ocean. 88 88 ! ! (for each element : C, Si, Fe, Chl ) 89 CALL p4z_rem ( kt , jnt) ! remineralization terms of organic matter+scavenging of Fe90 CALL p4z_mort ( kt , jnt) ! phytoplankton mortality89 CALL p4z_rem ( kt ) ! remineralization terms of organic matter+scavenging of Fe 90 CALL p4z_mort ( kt ) ! phytoplankton mortality 91 91 ! ! zooplankton sources/sinks routines 92 CALL p4z_micro( kt , jnt) ! microzooplankton92 CALL p4z_micro( kt ) ! microzooplankton 93 93 CALL p4z_meso ( kt, jnt ) ! mesozooplankton 94 94 -
branches/DEV_r2006_merge_TRA_TRC/NEMO/TOP_SRC/PISCES/p4zche.F90
r2082 r2104 249 249 & + ( cb8 + cb9 * zsqrt + cb10 * zsal ) * zlogt + cb11 * zsqrt * ztkel & 250 250 & + LOG( ( 1.+ zst / zcks + zft / zckf ) / ( 1.+ zst / zcks ) ) 251 !!gm zsal**2 to be replaced by a *... 252 zck1 = c10 * ztr + c11 + c12 * zlogt + c13 * zsal + c14 * zsal **2251 252 zck1 = c10 * ztr + c11 + c12 * zlogt + c13 * zsal + c14 * zsal * zsal 253 253 zck2 = c20 * ztr + c21 + c22 * zsal + c23 * zsal**2 254 254 -
branches/DEV_r2006_merge_TRA_TRC/NEMO/TOP_SRC/PISCES/p4zflx.F90
r2082 r2104 33 33 34 34 PUBLIC p4z_flx 35 PUBLIC p4z_flx_init 35 36 36 37 REAL(wp) :: & ! pre-industrial atmospheric [co2] (ppm) … … 81 82 82 83 !!--------------------------------------------------------------------- 83 84 85 IF( kt == nittrc000 ) CALL p4z_flx_init ! Initialization (first time-step only)86 84 87 85 ! SURFACE CHEMISTRY (PCO2 AND [H+] IN … … 246 244 !! 247 245 !! ** Method : Read the nampisext namelist and check the parameters 248 !! called at the first timestep (nit trc000)246 !! called at the first timestep (nit000) 249 247 !! ** input : Namelist nampisext 250 248 !! -
branches/DEV_r2006_merge_TRA_TRC/NEMO/TOP_SRC/PISCES/p4zlim.F90
r2082 r2104 23 23 24 24 PUBLIC p4z_lim 25 PUBLIC p4z_lim_init 25 26 26 27 !! * Shared module variables … … 50 51 CONTAINS 51 52 52 SUBROUTINE p4z_lim( kt , jnt)53 SUBROUTINE p4z_lim( kt ) 53 54 !!--------------------------------------------------------------------- 54 55 !! *** ROUTINE p4z_lim *** … … 59 60 !! ** Method : - ??? 60 61 !!--------------------------------------------------------------------- 61 INTEGER, INTENT(in) :: kt, jnt ! ocean time step62 INTEGER, INTENT(in) :: kt 62 63 INTEGER :: ji, jj, jk 63 64 REAL(wp) :: zlim1, zlim2, zlim3, zlim4, zno3, zferlim … … 67 68 68 69 69 IF( ( kt * jnt ) == nittrc000 ) CALL p4z_lim_init ! Initialization (first time-step only) 70 71 72 ! Tuning of the iron concentration to a minimum 73 ! level that is set to the detection limit 74 ! ------------------------------------- 70 ! Tuning of the iron concentration to a minimum 71 ! level that is set to the detection limit 72 ! ------------------------------------- 75 73 76 74 DO jk = 1, jpkm1 … … 85 83 END DO 86 84 87 ! Computation of a variable Ks for iron on diatoms 88 ! taking into account that increasing biomass is 89 ! made of generally bigger cells 90 ! ------------------------------------------------ 85 ! Computation of a variable Ks for iron on diatoms taking into account 86 ! that increasing biomass is made of generally bigger cells 87 ! ------------------------------------------------ 91 88 92 89 DO jk = 1, jpkm1 … … 107 104 END DO 108 105 109 DO jk = 1, jpkm1 110 DO jj = 1, jpj 111 DO ji = 1, jpi 112 113 ! Michaelis-Menten Limitation term for nutrients 114 ! Small flagellates 115 ! ----------------------------------------------- 106 ! Michaelis-Menten Limitation term for nutrients Small flagellates 107 ! ----------------------------------------------- 108 DO jk = 1, jpkm1 109 DO jj = 1, jpj 110 DO ji = 1, jpi 116 111 zdenom = 1. / & 117 112 & ( conc0 * concnnh4 + concnnh4 * trn(ji,jj,jk,jpno3) + conc0 * trn(ji,jj,jk,jpnh4) ) … … 132 127 END DO 133 128 134 DO jk = 1, jpkm1 135 DO jj = 1, jpj 136 DO ji = 1, jpi 137 138 ! Michaelis-Menten Limitation term for nutrients Diatoms 139 ! ---------------------------------------------- 129 ! Michaelis-Menten Limitation term for nutrients Diatoms 130 ! ---------------------------------------------- 131 DO jk = 1, jpkm1 132 DO jj = 1, jpj 133 DO ji = 1, jpi 140 134 zdenom = 1. / & 141 135 & ( conc1 * concdnh4 + concdnh4 * trn(ji,jj,jk,jpno3) + conc1 * trn(ji,jj,jk,jpnh4) ) … … 181 175 !! 182 176 !! ** Method : Read the nampislim namelist and check the parameters 183 !! called at the first timestep (nit trc000)177 !! called at the first timestep (nit000) 184 178 !! 185 179 !! ** input : Namelist nampislim -
branches/DEV_r2006_merge_TRA_TRC/NEMO/TOP_SRC/PISCES/p4zlys.F90
r2038 r2104 27 27 PRIVATE 28 28 29 PUBLIC p4z_lys ! called in p4zprg.F90 29 PUBLIC p4z_lys ! called in trcsms_pisces.F90 30 PUBLIC p4z_lys_init ! called in trcsms_pisces.F90 30 31 31 32 !! * Shared module variables … … 72 73 !!--------------------------------------------------------------------- 73 74 74 IF( kt == nittrc000 ) CALL p4z_lys_init ! Initialization (first time-step only)75 76 75 zco3(:,:,:) = 0. 77 76 … … 197 196 !! 198 197 !! ** Method : Read the nampiscal namelist and check the parameters 199 !! called at the first timestep (nit trc000)198 !! called at the first timestep (nit000) 200 199 !! 201 200 !! ** input : Namelist nampiscal -
branches/DEV_r2006_merge_TRA_TRC/NEMO/TOP_SRC/PISCES/p4zmeso.F90
r2038 r2104 26 26 PRIVATE 27 27 28 PUBLIC p4z_meso ! called in p4zbio.F90 28 PUBLIC p4z_meso ! called in p4zbio.F90 29 PUBLIC p4z_meso_init ! called in trcsms_pisces.F90 29 30 30 31 !! * Shared module variables … … 54 55 CONTAINS 55 56 56 SUBROUTINE p4z_meso( kt, jnt )57 SUBROUTINE p4z_meso( kt, jnt ) 57 58 !!--------------------------------------------------------------------- 58 59 !! *** ROUTINE p4z_meso *** … … 65 66 INTEGER :: ji, jj, jk 66 67 REAL(wp) :: zcompadi, zcompaph, zcompapoc, zcompaz 67 REAL(wp) :: zfact, z step, zcompam, zdenom, zgraze268 REAL(wp) :: zfact, zcompam, zdenom, zgraze2, zstep 68 69 REAL(wp) :: zgrarem2, zgrafer2, zgrapoc2, zprcaca, zmortz2 69 70 #if defined key_kriest 70 71 REAL znumpoc 71 72 #endif 72 REAL(wp) ,DIMENSION(jpi,jpj,jpk):: zrespz2,ztortz2,zgrazd,zgrazz,zgrazpof73 REAL(wp) ,DIMENSION(jpi,jpj,jpk):: zgrazn,zgrazpoc,zgraznf,zgrazf74 REAL(wp) ,DIMENSION(jpi,jpj,jpk):: zgrazfff,zgrazffe73 REAL(wp) :: zrespz2,ztortz2,zgrazd,zgrazz,zgrazpof 74 REAL(wp) :: zgrazn,zgrazpoc,zgraznf,zgrazf 75 REAL(wp) :: zgrazfff,zgrazffe 75 76 CHARACTER (len=25) :: charout 76 77 #if defined key_diatrc && defined key_iomput … … 80 81 !!--------------------------------------------------------------------- 81 82 82 83 IF( ( kt * jnt ) == nittrc000 ) CALL p4z_meso_init ! Initialization (first time-step only)84 85 zrespz2 (:,:,:) = 0.86 ztortz2 (:,:,:) = 0.87 zgrazd (:,:,:) = 0.88 zgrazz (:,:,:) = 0.89 zgrazpof(:,:,:) = 0.90 zgrazn (:,:,:) = 0.91 zgrazpoc(:,:,:) = 0.92 zgraznf (:,:,:) = 0.93 zgrazf (:,:,:) = 0.94 zgrazfff(:,:,:) = 0.95 zgrazffe(:,:,:) = 0.96 97 zstep = rfact2 / rday ! Time step duration for biology98 99 83 DO jk = 1, jpkm1 100 84 DO jj = 1, jpj … … 103 87 zcompam = MAX( ( trn(ji,jj,jk,jpmes) - 1.e-9 ), 0.e0 ) 104 88 # if defined key_degrad 105 z fact = zstep * tgfunc(ji,jj,jk) * zcompam* facvol(ji,jj,jk)89 zstep = xstep * facvol(ji,jj,jk) 106 90 # else 91 zstep = xstep 92 # endif 107 93 zfact = zstep * tgfunc(ji,jj,jk) * zcompam 108 # endif 109 110 ! Respiration rates of both zooplankton 111 ! ------------------------------------- 112 zrespz2(ji,jj,jk) = resrat2 * zfact * ( 1. + 3. * nitrfac(ji,jj,jk) ) & 94 95 ! Respiration rates of both zooplankton 96 ! ------------------------------------- 97 zrespz2 = resrat2 * zfact * ( 1. + 3. * nitrfac(ji,jj,jk) ) & 113 98 & * trn(ji,jj,jk,jpmes) / ( xkmort + trn(ji,jj,jk,jpmes) ) 114 99 115 ! Zooplankton mortality. A square function has been selected with 116 ! no real reason except that it seems to be more stable and may 117 ! mimic predation. 118 ! --------------------------------------------------------------- 119 ztortz2(ji,jj,jk) = mzrat2 * 1.e6 * zfact * trn(ji,jj,jk,jpmes) 100 ! Zooplankton mortality. A square function has been selected with 101 ! no real reason except that it seems to be more stable and may mimic predation 102 ! --------------------------------------------------------------- 103 ztortz2 = mzrat2 * 1.e6 * zfact * trn(ji,jj,jk,jpmes) 120 104 ! 121 END DO 122 END DO 123 END DO 124 125 126 DO jk = 1,jpkm1 127 DO jj = 1,jpj 128 DO ji = 1,jpi 105 129 106 zcompadi = MAX( ( trn(ji,jj,jk,jpdia) - 1.e-8 ), 0.e0 ) 130 107 zcompaz = MAX( ( trn(ji,jj,jk,jpzoo) - 1.e-8 ), 0.e0 ) … … 132 109 zcompapoc = MAX( ( trn(ji,jj,jk,jppoc) - 1.e-8 ), 0.e0 ) 133 110 134 !Microzooplankton grazing135 ! ------------------------111 ! Microzooplankton grazing 112 ! ------------------------ 136 113 zdenom = 1. / ( xkgraz2 + xprefc * trn(ji,jj,jk,jpdia) & 137 114 & + xprefz * trn(ji,jj,jk,jpzoo) & … … 139 116 & + xprefpoc * trn(ji,jj,jk,jppoc) ) 140 117 141 zgraze2 = grazrat2 * zstep * Tgfunc2(ji,jj,jk) * zdenom & 142 # if defined key_degrad 143 & * facvol(ji,jj,jk) & 118 zgraze2 = grazrat2 * zstep * Tgfunc2(ji,jj,jk) * zdenom * trn(ji,jj,jk,jpmes) 119 120 zgrazd = zgraze2 * xprefc * zcompadi 121 zgrazz = zgraze2 * xprefz * zcompaz 122 zgrazn = zgraze2 * xprefp * zcompaph 123 zgrazpoc = zgraze2 * xprefpoc * zcompapoc 124 125 zgraznf = zgrazn * trn(ji,jj,jk,jpnfe) / (trn(ji,jj,jk,jpphy) + rtrn) 126 zgrazf = zgrazd * trn(ji,jj,jk,jpdfe) / (trn(ji,jj,jk,jpdia) + rtrn) 127 zgrazpof = zgrazpoc * trn(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc) + rtrn) 128 129 ! Mesozooplankton flux feeding on GOC 130 ! ---------------------------------- 131 # if ! defined key_kriest 132 zgrazffe = grazflux * zstep * wsbio4(ji,jj,jk) & 133 & * tgfunc2(ji,jj,jk) * trn(ji,jj,jk,jpgoc) * trn(ji,jj,jk,jpmes) 134 zgrazfff = zgrazffe * trn(ji,jj,jk,jpbfe) / (trn(ji,jj,jk,jpgoc) + rtrn) 135 # else 136 !!--------------------------- KRIEST3 ------------------------------------------- 137 !! zgrazffe = 0.5 * 1.3e-2 / 5.5e-7 * 0.3 * zstep * wsbio3(ji,jj,jk) & 138 !! & * tgfunc(ji,jj,jk) * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jpmes) & 139 !! # if defined key_degrad 140 !! & * facvol(ji,jj,jk) & 141 !! # endif 142 !! & / (trn(ji,jj,jk,jppoc) * 1.e7 + 0.1) 143 !!--------------------------- KRIEST3 ------------------------------------------- 144 145 zgrazffe = grazflux * zstep * wsbio3(ji,jj,jk) & 146 & * tgfunc2(ji,jj,jk) * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jpmes) 147 zgrazfff = zgrazffe * trn(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc) + rtrn) 144 148 # endif 145 & * trn(ji,jj,jk,jpmes)146 147 zgrazd(ji,jj,jk) = zgraze2 * xprefc * zcompadi148 zgrazz(ji,jj,jk) = zgraze2 * xprefz * zcompaz149 zgrazn(ji,jj,jk) = zgraze2 * xprefp * zcompaph150 zgrazpoc(ji,jj,jk) = zgraze2 * xprefpoc * zcompapoc151 152 zgraznf(ji,jj,jk) = zgrazn(ji,jj,jk) * trn(ji,jj,jk,jpnfe) &153 & / (trn(ji,jj,jk,jpphy) + rtrn)154 zgrazf(ji,jj,jk) = zgrazd(ji,jj,jk) * trn(ji,jj,jk,jpdfe) &155 & / (trn(ji,jj,jk,jpdia) + rtrn)156 zgrazpof(ji,jj,jk) = zgrazpoc(ji,jj,jk) * trn(ji,jj,jk,jpsfe) &157 & / (trn(ji,jj,jk,jppoc) + rtrn)158 END DO159 END DO160 END DO161 162 163 DO jk = 1,jpkm1164 DO jj = 1,jpj165 DO ji = 1,jpi166 167 ! Mesozooplankton flux feeding on GOC168 ! ----------------------------------169 # if ! defined key_kriest170 # if ! defined key_degrad171 zgrazffe(ji,jj,jk) = grazflux * zstep * wsbio4(ji,jj,jk) &172 & * tgfunc2(ji,jj,jk) * trn(ji,jj,jk,jpgoc) * trn(ji,jj,jk,jpmes)173 # else174 zgrazffe(ji,jj,jk) = grazflux * zstep * wsbio4(ji,jj,jk) * facvol(ji,jj,jk) &175 & * tgfunc2(ji,jj,jk) * trn(ji,jj,jk,jpgoc) * trn(ji,jj,jk,jpmes)176 # endif177 zgrazfff(ji,jj,jk) = zgrazffe(ji,jj,jk) &178 & * trn(ji,jj,jk,jpbfe) / (trn(ji,jj,jk,jpgoc) + rtrn)179 # else180 !!--------------------------- KRIEST3 -------------------------------------------181 !! zgrazffe(ji,jj,jk) = 0.5 * 1.3e-2 / 5.5e-7 * 0.3 * zstep * wsbio3(ji,jj,jk) &182 !! & * tgfunc(ji,jj,jk) * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jpmes) &183 # if defined key_degrad184 !! & * facvol(ji,jj,jk) &185 # endif186 !! & / (trn(ji,jj,jk,jppoc) * 1.e7 + 0.1)187 !!--------------------------- KRIEST3 -------------------------------------------188 189 # if ! defined key_degrad190 zgrazffe(ji,jj,jk) = grazflux * zstep * wsbio3(ji,jj,jk) &191 & * tgfunc2(ji,jj,jk) * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jpmes)192 # else193 zgrazffe(ji,jj,jk) = grazflux * zstep * wsbio3(ji,jj,jk) * facvol(ji,jj,jk) &194 & * tgfunc2(ji,jj,jk) * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jpmes)195 # endif196 197 zgrazfff(ji,jj,jk) = zgrazffe(ji,jj,jk) &198 & * trn(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc) + rtrn)199 # endif200 END DO201 END DO202 END DO203 149 204 150 #if defined key_diatrc 205 ! Total grazing ( grazing by microzoo is already computed in p4zmicro ) 206 grazing(:,:,:) = grazing(:,:,:) + ( zgrazd (:,:,:) + zgrazz (:,:,:) + zgrazn(:,:,:) & 207 & + zgrazpoc(:,:,:) + zgrazffe(:,:,:) ) 208 #endif 209 210 211 DO jk = 1,jpkm1 212 DO jj = 1,jpj 213 DO ji = 1,jpi 214 215 ! Mesozooplankton efficiency 216 ! -------------------------- 217 zgrarem2 = ( zgrazd(ji,jj,jk) + zgrazz(ji,jj,jk) + zgrazn(ji,jj,jk) & 218 & + zgrazpoc(ji,jj,jk) + zgrazffe(ji,jj,jk) ) & 219 & * ( 1. - epsher2 - unass2 ) 151 ! Total grazing ( grazing by microzoo is already computed in p4zmicro ) 152 grazing(ji,jj,jk) = grazing(ji,jj,jk) + ( zgrazd + zgrazz + zgrazn + zgrazpoc + zgrazffe ) 153 #endif 154 155 ! Mesozooplankton efficiency 156 ! -------------------------- 157 zgrarem2 = ( zgrazd + zgrazz + zgrazn + zgrazpoc + zgrazffe ) * ( 1. - epsher2 - unass2 ) 220 158 #if ! defined key_kriest 221 zgrafer2 = (zgrazf(ji,jj,jk) + zgraznf(ji,jj,jk) + zgrazz(ji,jj,jk) & 222 & * ferat3 + zgrazpof(ji,jj,jk) + zgrazfff (ji,jj,jk))*(1.-epsher2-unass2) & 223 & + epsher2 * ( & 224 & zgrazd(ji,jj,jk) * MAX((trn(ji,jj,jk,jpdfe) / (trn(ji,jj,jk,jpdia) + rtrn)-ferat3),0.) & 225 & + zgrazn(ji,jj,jk) * MAX((trn(ji,jj,jk,jpnfe) / (trn(ji,jj,jk,jpphy) + rtrn)-ferat3),0.) & 226 & + zgrazpoc(ji,jj,jk) * MAX((trn(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc) + rtrn)-ferat3),0.) & 227 & + zgrazffe(ji,jj,jk) * MAX((trn(ji,jj,jk,jpbfe) / (trn(ji,jj,jk,jpgoc) + rtrn)-ferat3),0.) ) 159 zgrafer2 = ( zgrazf + zgraznf + zgrazz * ferat3 + zgrazpof + zgrazfff ) * ( 1.- epsher2 - unass2 ) & 160 & + epsher2 * ( zgrazd * MAX((trn(ji,jj,jk,jpdfe) / (trn(ji,jj,jk,jpdia) + rtrn)-ferat3),0.) & 161 & + zgrazn * MAX((trn(ji,jj,jk,jpnfe) / (trn(ji,jj,jk,jpphy) + rtrn)-ferat3),0.) & 162 & + zgrazpoc * MAX((trn(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc) + rtrn)-ferat3),0.) & 163 & + zgrazffe * MAX((trn(ji,jj,jk,jpbfe) / (trn(ji,jj,jk,jpgoc) + rtrn)-ferat3),0.) ) 228 164 #else 229 zgrafer2 = (zgrazf(ji,jj,jk) + zgraznf(ji,jj,jk) + zgrazz(ji,jj,jk) & 230 & * ferat3 + zgrazpof(ji,jj,jk) + zgrazfff(ji,jj,jk) )*(1.-epsher2-unass2) & 231 & + epsher2 * ( & 232 & zgrazd(ji,jj,jk) * MAX((trn(ji,jj,jk,jpdfe) / (trn(ji,jj,jk,jpdia) + rtrn)-ferat3),0.) & 233 & + zgrazn(ji,jj,jk) * MAX((trn(ji,jj,jk,jpnfe) / (trn(ji,jj,jk,jpphy) + rtrn)-ferat3),0.) & 234 & + zgrazpoc(ji,jj,jk) * MAX((trn(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc) + rtrn)-ferat3),0.) & 235 & + zgrazffe(ji,jj,jk) * MAX((trn(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc) + rtrn)-ferat3),0.) ) 236 237 #endif 238 zgrapoc2 = (zgrazd(ji,jj,jk) + zgrazz(ji,jj,jk) + zgrazn(ji,jj,jk) & 239 & + zgrazpoc(ji,jj,jk) + zgrazffe(ji,jj,jk)) * unass2 165 zgrafer2 = ( zgrazf + zgraznf + zgrazz * ferat3 + zgrazpof + zgrazfff ) * ( 1. - epsher2 - unass2 ) & 166 & + epsher2 * ( zgrazd * MAX((trn(ji,jj,jk,jpdfe) / (trn(ji,jj,jk,jpdia) + rtrn)-ferat3),0.) & 167 & + zgrazn * MAX((trn(ji,jj,jk,jpnfe) / (trn(ji,jj,jk,jpphy) + rtrn)-ferat3),0.) & 168 & + zgrazpoc * MAX((trn(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc) + rtrn)-ferat3),0.) & 169 & + zgrazffe * MAX((trn(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc) + rtrn)-ferat3),0.) ) 170 171 #endif 172 ! Update the arrays TRA which contain the biological sources and sinks 173 174 zgrapoc2 = zgrazd + zgrazz + zgrazn + zgrazpoc + zgrazffe 240 175 241 176 tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zgrarem2 * sigma2 242 177 tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zgrarem2 * sigma2 243 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zgrarem2 * ( 1.-sigma2)178 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zgrarem2 * ( 1. - sigma2 ) 244 179 tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2ut * zgrarem2 * sigma2 245 180 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zgrafer2 … … 247 182 248 183 #if defined key_kriest 249 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zgrapoc2 250 tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + zgrapoc2 * xkr_dmeso184 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zgrapoc2 * unass2 185 tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + zgrapoc2 * unass2 * xkr_dmeso 251 186 #else 252 tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zgrapoc2 253 #endif 254 END DO 255 END DO 256 END DO 257 258 DO jk = 1, jpkm1 259 DO jj = 1, jpj 260 DO ji = 1, jpi 261 ! 262 ! Update the arrays TRA which contain the biological sources and sinks 263 ! -------------------------------------------------------------------- 264 zmortz2 = ztortz2(ji,jj,jk) + zrespz2(ji,jj,jk) 265 tra(ji,jj,jk,jpmes) = tra(ji,jj,jk,jpmes) - zmortz2 & 266 & + epsher2 * ( zgrazd(ji,jj,jk) + zgrazz(ji,jj,jk) + zgrazn(ji,jj,jk) & 267 & + zgrazpoc(ji,jj,jk) + zgrazffe(ji,jj,jk) ) 268 tra(ji,jj,jk,jpdia) = tra(ji,jj,jk,jpdia) - zgrazd(ji,jj,jk) 269 tra(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) - zgrazz(ji,jj,jk) 270 tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) - zgrazn(ji,jj,jk) 271 tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zgrazn(ji,jj,jk) * trn(ji,jj,jk,jpnch) & 272 & / ( trn(ji,jj,jk,jpphy) + rtrn ) 273 tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) - zgrazd(ji,jj,jk) * trn(ji,jj,jk,jpdch) & 274 & / ( trn(ji,jj,jk,jpdia) + rtrn ) 275 tra(ji,jj,jk,jpbsi) = tra(ji,jj,jk,jpbsi) - zgrazd(ji,jj,jk) * trn(ji,jj,jk,jpbsi) & 276 & / ( trn(ji,jj,jk,jpdia) + rtrn ) 277 tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) + zgrazd(ji,jj,jk) * trn(ji,jj,jk,jpbsi) & 278 & / ( trn(ji,jj,jk,jpdia) + rtrn ) 279 tra(ji,jj,jk,jpnfe) = tra(ji,jj,jk,jpnfe) - zgraznf(ji,jj,jk) 280 tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) - zgrazf(ji,jj,jk) 281 282 zprcaca = xfracal(ji,jj,jk) * unass2 * zgrazn(ji,jj,jk) 187 tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zgrapoc2 * unass2 188 #endif 189 zmortz2 = ztortz2 + zrespz2 190 tra(ji,jj,jk,jpmes) = tra(ji,jj,jk,jpmes) - zmortz2 + epsher2 * zgrapoc2 191 tra(ji,jj,jk,jpdia) = tra(ji,jj,jk,jpdia) - zgrazd 192 tra(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) - zgrazz 193 tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) - zgrazn 194 tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zgrazn * trn(ji,jj,jk,jpnch) / ( trn(ji,jj,jk,jpphy) + rtrn ) 195 tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) - zgrazd * trn(ji,jj,jk,jpdch) / ( trn(ji,jj,jk,jpdia) + rtrn ) 196 tra(ji,jj,jk,jpbsi) = tra(ji,jj,jk,jpbsi) - zgrazd * trn(ji,jj,jk,jpbsi) / ( trn(ji,jj,jk,jpdia) + rtrn ) 197 tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) + zgrazd * trn(ji,jj,jk,jpbsi) / ( trn(ji,jj,jk,jpdia) + rtrn ) 198 tra(ji,jj,jk,jpnfe) = tra(ji,jj,jk,jpnfe) - zgraznf 199 tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) - zgrazf 200 201 zprcaca = xfracal(ji,jj,jk) * unass2 * zgrazn 283 202 #if defined key_diatrc 284 203 prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo) … … 290 209 #if defined key_kriest 291 210 znumpoc = trn(ji,jj,jk,jpnum) / ( trn(ji,jj,jk,jppoc) + rtrn ) 292 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zmortz2 & 293 & - zgrazpoc(ji,jj,jk) - zgrazffe(ji,jj,jk) 294 tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) - zgrazpoc(ji,jj,jk) * znumpoc & 295 & + zmortz2 * xkr_dmeso & 296 & - zgrazffe(ji,jj,jk) * znumpoc * wsbio4(ji,jj,jk) & 297 & / ( wsbio3(ji,jj,jk) + rtrn ) 211 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zmortz2 - zgrazpoc - zgrazffe 212 tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) - zgrazpoc * znumpoc & 213 & + zmortz2 * xkr_dmeso - zgrazffe * znumpoc * wsbio4(ji,jj,jk) / ( wsbio3(ji,jj,jk) + rtrn ) 298 214 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + ferat3 * zmortz2 & 299 & + unass2 * ( ferat3 * zgrazz(ji,jj,jk) + zgraznf(ji,jj,jk) & 300 & + zgrazf(ji,jj,jk) + zgrazpof(ji,jj,jk) + zgrazfff(ji,jj,jk) ) & 301 & - zgrazfff(ji,jj,jk) - zgrazpof(ji,jj,jk) 215 & + unass2 * ( ferat3 * zgrazz + zgraznf + zgrazf + zgrazpof + zgrazfff ) - zgrazfff - zgrazpof 302 216 #else 303 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zgrazpoc (ji,jj,jk)304 tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zmortz2 - zgrazffe (ji,jj,jk)305 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zgrazpof (ji,jj,jk)217 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zgrazpoc 218 tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zmortz2 - zgrazffe 219 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zgrazpof 306 220 tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + ferat3 * zmortz2 & 307 & + unass2 * ( ferat3 * zgrazz(ji,jj,jk) + zgraznf(ji,jj,jk) & 308 & + zgrazf(ji,jj,jk) + zgrazpof(ji,jj,jk) + zgrazfff(ji,jj,jk) ) & 309 & - zgrazfff(ji,jj,jk) 221 & + unass2 * ( ferat3 * zgrazz + zgraznf + zgrazf + zgrazpof + zgrazfff ) - zgrazfff 310 222 #endif 311 223 … … 342 254 !! 343 255 !! ** Method : Read the nampismes namelist and check the parameters 344 !! called at the first timestep (nit trc000)256 !! called at the first timestep (nit000) 345 257 !! 346 258 !! ** input : Namelist nampismes … … 373 285 ENDIF 374 286 287 375 288 END SUBROUTINE p4z_meso_init 376 289 -
branches/DEV_r2006_merge_TRA_TRC/NEMO/TOP_SRC/PISCES/p4zmicro.F90
r2038 r2104 26 26 PRIVATE 27 27 28 PUBLIC p4z_micro ! called in p4zbio.F90 28 PUBLIC p4z_micro ! called in p4zbio.F90 29 PUBLIC p4z_micro_init ! called in trcsms_pisces.F90 29 30 30 31 !! * Shared module variables … … 52 53 CONTAINS 53 54 54 SUBROUTINE p4z_micro( kt ,jnt)55 SUBROUTINE p4z_micro( kt ) 55 56 !!--------------------------------------------------------------------- 56 57 !! *** ROUTINE p4z_micro *** … … 60 61 !! ** Method : - ??? 61 62 !!--------------------------------------------------------------------- 62 INTEGER, INTENT(in) :: kt , jnt! ocean time step63 INTEGER, INTENT(in) :: kt ! ocean time step 63 64 INTEGER :: ji, jj, jk 64 65 REAL(wp) :: zcompadi, zcompadi2, zcompaz , zcompaph, zcompapoc 65 REAL(wp) :: zgraze , zdenom , zdenom2 66 REAL(wp) :: zfact , z step , zinano , zidiat, zipoc66 REAL(wp) :: zgraze , zdenom , zdenom2, zstep 67 REAL(wp) :: zfact , zinano , zidiat, zipoc 67 68 REAL(wp) :: zgrarem, zgrafer, zgrapoc, zprcaca, zmortz 68 REAL(wp) , DIMENSION(jpi,jpj,jpk) :: zrespz,ztortz69 REAL(wp) , DIMENSION(jpi,jpj,jpk):: zgrazp, zgrazm, zgrazsd70 REAL(wp) , DIMENSION(jpi,jpj,jpk):: zgrazmf, zgrazsf, zgrazpf69 REAL(wp) :: zrespz, ztortz 70 REAL(wp) :: zgrazp, zgrazm, zgrazsd 71 REAL(wp) :: zgrazmf, zgrazsf, zgrazpf 71 72 CHARACTER (len=25) :: charout 72 73 73 74 !!--------------------------------------------------------------------- 74 75 75 IF( ( kt * jnt ) == nittrc000 ) CALL p4z_micro_init ! Initialization (first time-step only)76 77 zrespz (:,:,:) = 0.78 ztortz (:,:,:) = 0.79 zgrazp (:,:,:) = 0.80 zgrazm (:,:,:) = 0.81 zgrazsd(:,:,:) = 0.82 zgrazmf(:,:,:) = 0.83 zgrazsf(:,:,:) = 0.84 zgrazpf(:,:,:) = 0.85 76 86 77 #if defined key_diatrc … … 93 84 DO jj = 1, jpj 94 85 DO ji = 1, jpi 95 96 86 zcompaz = MAX( ( trn(ji,jj,jk,jpzoo) - 1.e-9 ), 0.e0 ) 97 87 # if defined key_degrad 98 z fact = zstep * tgfunc(ji,jj,jk) * zcompaz *facvol(ji,jj,jk)88 zstep = xstep * facvol(ji,jj,jk) 99 89 # else 90 zstep = xstep 91 # endif 100 92 zfact = zstep * tgfunc(ji,jj,jk) * zcompaz 101 # endif 102 103 ! Respiration rates of both zooplankton 104 ! ------------------------------------- 105 106 zrespz(ji,jj,jk) = resrat * zfact * ( 1.+ 3.* nitrfac(ji,jj,jk) ) & 93 94 ! Respiration rates of both zooplankton 95 ! ------------------------------------- 96 zrespz = resrat * zfact * ( 1.+ 3.* nitrfac(ji,jj,jk) ) & 107 97 & * trn(ji,jj,jk,jpzoo) / ( xkmort + trn(ji,jj,jk,jpzoo) ) 108 98 109 ! Zooplankton mortality. A square function has been selected with 110 ! no real reason except that it seems to be more stable and may 111 ! mimic predation. 112 ! --------------------------------------------------------------- 113 ztortz(ji,jj,jk) = mzrat * 1.e6 * zfact * trn(ji,jj,jk,jpzoo) 114 115 END DO 116 END DO 117 END DO 118 119 120 121 DO jk = 1,jpkm1 122 DO jj = 1,jpj 123 DO ji = 1,jpi 99 ! Zooplankton mortality. A square function has been selected with 100 ! no real reason except that it seems to be more stable and may mimic predation. 101 ! --------------------------------------------------------------- 102 ztortz = mzrat * 1.e6 * zfact * trn(ji,jj,jk,jpzoo) 103 124 104 zcompadi = MAX( ( trn(ji,jj,jk,jpdia) - 1.e-8 ), 0.e0 ) 125 105 zcompadi2 = MIN( zcompadi, 5.e-7 ) … … 131 111 zdenom2 = 1./ ( xpref2p * zcompaph + xpref2c * zcompapoc + xpref2d * zcompadi2 + rtrn ) 132 112 133 zgraze = grazrat * zstep * tgfunc(ji,jj,jk) & 134 # if defined key_degrad 135 & * facvol(ji,jj,jk) & 136 # endif 137 & * trn(ji,jj,jk,jpzoo) 113 zgraze = grazrat * zstep * tgfunc(ji,jj,jk) * trn(ji,jj,jk,jpzoo) 138 114 139 115 zinano = xpref2p * zcompaph * zdenom2 … … 143 119 zdenom = 1./ ( xkgraz + zinano * zcompaph + zipoc * zcompapoc + zidiat * zcompadi2 ) 144 120 145 zgrazp(ji,jj,jk) = zgraze * zinano * zcompaph * zdenom 146 zgrazm(ji,jj,jk) = zgraze * zipoc * zcompapoc * zdenom 147 zgrazsd(ji,jj,jk) = zgraze * zidiat * zcompadi2 * zdenom 148 149 zgrazpf (ji,jj,jk) = zgrazp(ji,jj,jk) * trn(ji,jj,jk,jpnfe) / (trn(ji,jj,jk,jpphy) + rtrn) 150 zgrazmf(ji,jj,jk) = zgrazm(ji,jj,jk) * trn(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc) + rtrn) 151 zgrazsf(ji,jj,jk) = zgrazsd(ji,jj,jk) * trn(ji,jj,jk,jpdfe) / (trn(ji,jj,jk,jpdia) + rtrn) 152 153 END DO 154 END DO 155 END DO 156 121 zgrazp = zgraze * zinano * zcompaph * zdenom 122 zgrazm = zgraze * zipoc * zcompapoc * zdenom 123 zgrazsd = zgraze * zidiat * zcompadi2 * zdenom 124 125 zgrazpf = zgrazp * trn(ji,jj,jk,jpnfe) / (trn(ji,jj,jk,jpphy) + rtrn) 126 zgrazmf = zgrazm * trn(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc) + rtrn) 127 zgrazsf = zgrazsd * trn(ji,jj,jk,jpdfe) / (trn(ji,jj,jk,jpdia) + rtrn) 157 128 #if defined key_diatrc 158 ! Grazing by microzooplankton 159 grazing(:,:,:) = grazing(:,:,:) + zgrazp(:,:,:) + zgrazm(:,:,:) + zgrazsd(:,:,:) 160 #endif 161 162 DO jk = 1,jpkm1 163 DO jj = 1,jpj 164 DO ji = 1,jpi 165 ! Various remineralization and excretion terms 166 ! -------------------------------------------- 167 168 zgrarem = ( zgrazp(ji,jj,jk) + zgrazm(ji,jj,jk) + zgrazsd(ji,jj,jk) ) & 169 & * ( 1.- epsher - unass ) 170 zgrafer = ( zgrazpf(ji,jj,jk) + zgrazsf(ji,jj,jk) + zgrazmf(ji,jj,jk) ) & 171 & * ( 1.- epsher - unass ) + epsher * & 172 & ( zgrazm(ji,jj,jk) * MAX((trn(ji,jj,jk,jpsfe) /(trn(ji,jj,jk,jppoc)+ rtrn)-ferat3),0.e0) & 173 & + zgrazp(ji,jj,jk) * MAX((trn(ji,jj,jk,jpnfe)/(trn(ji,jj,jk,jpphy)+ rtrn)-ferat3),0.e0) & 174 & + zgrazsd(ji,jj,jk) * MAX((trn(ji,jj,jk,jpdfe)/(trn(ji,jj,jk,jpdia)+ rtrn)-ferat3),0.e0 ) ) 175 zgrapoc = ( zgrazp(ji,jj,jk) + zgrazm(ji,jj,jk) + zgrazsd(ji,jj,jk) ) * unass 129 ! Grazing by microzooplankton 130 grazing(ji,jj,jk) = grazing(ji,jj,jk) + zgrazp + zgrazm + zgrazsd 131 #endif 132 133 ! Various remineralization and excretion terms 134 ! -------------------------------------------- 135 zgrarem = ( zgrazp + zgrazm + zgrazsd ) * ( 1.- epsher - unass ) 136 zgrafer = ( zgrazpf + zgrazsf + zgrazmf ) * ( 1.- epsher - unass ) & 137 & + epsher * ( zgrazm * MAX((trn(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc)+ rtrn)-ferat3),0.e0) & 138 & + zgrazp * MAX((trn(ji,jj,jk,jpnfe) / (trn(ji,jj,jk,jpphy)+ rtrn)-ferat3),0.e0) & 139 & + zgrazsd * MAX((trn(ji,jj,jk,jpdfe) / (trn(ji,jj,jk,jpdia)+ rtrn)-ferat3),0.e0 ) ) 140 141 zgrapoc = ( zgrazp + zgrazm + zgrazsd ) 176 142 177 143 ! Update of the TRA arrays … … 183 149 tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2ut * zgrarem * sigma1 184 150 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zgrafer 185 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zgrapoc 151 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zgrapoc * unass 186 152 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zgrarem * sigma1 187 153 #if defined key_kriest 188 tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + zgrapoc * xkr_ddiat 189 #endif 190 END DO 191 END DO 192 END DO 193 194 ! 195 ! Update the arrays TRA which contain the biological sources and sinks 196 ! -------------------------------------------------------------------- 197 198 DO jk = 1, jpkm1 199 DO jj = 1, jpj 200 DO ji = 1, jpi 201 202 zmortz = ztortz(ji,jj,jk) + zrespz(ji,jj,jk) 203 tra(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) - zmortz & 204 & + epsher * ( zgrazp(ji,jj,jk) + zgrazm(ji,jj,jk) + zgrazsd(ji,jj,jk)) 205 tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) - zgrazp(ji,jj,jk) 206 tra(ji,jj,jk,jpdia) = tra(ji,jj,jk,jpdia) - zgrazsd(ji,jj,jk) 207 tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zgrazp(ji,jj,jk) & 208 & * trn(ji,jj,jk,jpnch)/(trn(ji,jj,jk,jpphy)+rtrn) 209 tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) - zgrazsd(ji,jj,jk) & 210 & * trn(ji,jj,jk,jpdch)/(trn(ji,jj,jk,jpdia)+rtrn) 211 tra(ji,jj,jk,jpbsi) = tra(ji,jj,jk,jpbsi) - zgrazsd(ji,jj,jk) & 212 & * trn(ji,jj,jk,jpbsi)/(trn(ji,jj,jk,jpdia)+rtrn) 213 tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) + zgrazsd(ji,jj,jk) & 214 & * trn(ji,jj,jk,jpbsi)/(trn(ji,jj,jk,jpdia)+rtrn) 215 tra(ji,jj,jk,jpnfe) = tra(ji,jj,jk,jpnfe) - zgrazpf(ji,jj,jk) 216 tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) - zgrazsf(ji,jj,jk) 217 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zmortz - zgrazm(ji,jj,jk) 218 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + ferat3 * zmortz & 219 & + unass * ( zgrazpf(ji,jj,jk) + zgrazsf (ji,jj,jk)) & 220 & - (1.-unass) * zgrazmf(ji,jj,jk) 221 zprcaca = xfracal(ji,jj,jk) * unass * zgrazp(ji,jj,jk) 154 tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + zgrapoc * unass * xkr_ddiat 155 #endif 156 157 ! 158 ! Update the arrays TRA which contain the biological sources and sinks 159 ! -------------------------------------------------------------------- 160 161 zmortz = ztortz + zrespz 162 tra(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) - zmortz + epsher * zgrapoc 163 tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) - zgrazp 164 tra(ji,jj,jk,jpdia) = tra(ji,jj,jk,jpdia) - zgrazsd 165 tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zgrazp * trn(ji,jj,jk,jpnch)/(trn(ji,jj,jk,jpphy)+rtrn) 166 tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) - zgrazsd * trn(ji,jj,jk,jpdch)/(trn(ji,jj,jk,jpdia)+rtrn) 167 tra(ji,jj,jk,jpbsi) = tra(ji,jj,jk,jpbsi) - zgrazsd * trn(ji,jj,jk,jpbsi)/(trn(ji,jj,jk,jpdia)+rtrn) 168 tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) + zgrazsd * trn(ji,jj,jk,jpbsi)/(trn(ji,jj,jk,jpdia)+rtrn) 169 tra(ji,jj,jk,jpnfe) = tra(ji,jj,jk,jpnfe) - zgrazpf 170 tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) - zgrazsf 171 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zmortz - zgrazm 172 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + ferat3 * zmortz + unass * ( zgrazpf + zgrazsf ) - (1.-unass) * zgrazmf 173 zprcaca = xfracal(ji,jj,jk) * unass * zgrazp 222 174 #if defined key_diatrc 223 175 prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo) … … 228 180 tra(ji,jj,jk,jpcal) = tra(ji,jj,jk,jpcal) + zprcaca 229 181 #if defined key_kriest 230 tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + ( zmortz - zgrazm (ji,jj,jk)) * xkr_ddiat182 tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + ( zmortz - zgrazm ) * xkr_ddiat 231 183 #endif 232 184 END DO … … 251 203 !! 252 204 !! ** Method : Read the nampiszoo namelist and check the parameters 253 !! called at the first timestep (nit trc000)205 !! called at the first timestep (nit000) 254 206 !! 255 207 !! ** input : Namelist nampiszoo -
branches/DEV_r2006_merge_TRA_TRC/NEMO/TOP_SRC/PISCES/p4zmort.F90
r2038 r2104 25 25 26 26 PUBLIC p4z_mort 27 PUBLIC p4z_mort_init 27 28 28 29 … … 35 36 mpratm = 0.01_wp !: 36 37 37 !! * Module variables38 REAL(wp) :: zstep39 40 41 38 42 39 !!* Substitution … … 50 47 CONTAINS 51 48 52 SUBROUTINE p4z_mort( kt , jnt)49 SUBROUTINE p4z_mort( kt ) 53 50 !!--------------------------------------------------------------------- 54 51 !! *** ROUTINE p4z_mort *** … … 59 56 !! ** Method : - ??? 60 57 !!--------------------------------------------------------------------- 61 INTEGER, INTENT(in) :: kt, jnt ! ocean time step 62 !!--------------------------------------------------------------------- 63 64 IF( ( kt * jnt ) == nittrc000 ) CALL p4z_mort_init ! Initialization (first time-step only) 65 66 zstep = rfact2 / rday ! Time step duration for biology 58 INTEGER, INTENT(in) :: kt ! ocean time step 59 !!--------------------------------------------------------------------- 67 60 68 61 CALL p4z_nano ! nanophytoplankton … … 83 76 INTEGER :: ji, jj, jk 84 77 REAL(wp) :: zcompaph 85 REAL(wp) :: zfactfe, zfactch,zprcaca,zfracal86 REAL(wp) :: ztortp ,zrespp,zmortp78 REAL(wp) :: zfactfe, zfactch, zprcaca, zfracal 79 REAL(wp) :: ztortp , zrespp , zmortp , zstep 87 80 CHARACTER (len=25) :: charout 88 81 !!--------------------------------------------------------------------- … … 99 92 zcompaph = MAX( ( trn(ji,jj,jk,jpphy) - 1e-8 ), 0.e0 ) 100 93 101 ! Squared mortality of Phyto similar to a sedimentation term during102 ! blooms (Doney et al. 1996)103 ! -----------------------------------------------------------------104 zrespp = wchl * 1.e6 * zstep * xdiss(ji,jj,jk) &105 94 # if defined key_degrad 106 & * facvol(ji,jj,jk) & 95 zstep = xstep * facvol(ji,jj,jk) 96 # else 97 zstep = xstep 107 98 # endif 108 & * zcompaph * trn(ji,jj,jk,jpphy) 109 110 ! Phytoplankton mortality. This mortality loss is slightly 111 ! increased when nutrients are limiting phytoplankton growth 112 ! as observed for instance in case of iron limitation. 113 ! ---------------------------------------------------------- 114 ztortp = mprat * zstep * trn(ji,jj,jk,jpphy) & 115 # if defined key_degrad 116 & * facvol(ji,jj,jk) & 117 # endif 118 & / ( xkmort + trn(ji,jj,jk,jpphy) ) * zcompaph 119 99 ! Squared mortality of Phyto similar to a sedimentation term during 100 ! blooms (Doney et al. 1996) 101 zrespp = wchl * 1.e6 * zstep * xdiss(ji,jj,jk) * zcompaph * trn(ji,jj,jk,jpphy) 102 103 ! Phytoplankton mortality. This mortality loss is slightly 104 ! increased when nutrients are limiting phytoplankton growth 105 ! as observed for instance in case of iron limitation. 106 ztortp = mprat * xstep * trn(ji,jj,jk,jpphy) / ( xkmort + trn(ji,jj,jk,jpphy) ) * zcompaph 120 107 121 108 zmortp = zrespp + ztortp … … 169 156 INTEGER :: ji, jj, jk 170 157 REAL(wp) :: zfactfe,zfactsi,zfactch, zcompadi 171 REAL(wp) :: zrespp2, ztortp2, zmortp2 158 REAL(wp) :: zrespp2, ztortp2, zmortp2, zstep 172 159 CHARACTER (len=25) :: charout 173 160 … … 175 162 176 163 177 ! Aggregation term for diatoms is increased in case of nutrient178 ! stress as observed in reality. The stressed cells become more179 ! sticky and coagulate to sink quickly out of the euphotic zone180 ! ------------------------------------------------------------164 ! Aggregation term for diatoms is increased in case of nutrient 165 ! stress as observed in reality. The stressed cells become more 166 ! sticky and coagulate to sink quickly out of the euphotic zone 167 ! ------------------------------------------------------------ 181 168 182 169 DO jk = 1, jpkm1 … … 186 173 zcompadi = MAX( ( trn(ji,jj,jk,jpdia) - 1e-8), 0. ) 187 174 188 ! Aggregation term for diatoms is increased in case of nutrient 189 ! stress as observed in reality. The stressed cells become more 190 ! sticky and coagulate to sink quickly out of the euphotic zone 191 ! ------------------------------------------------------------ 192 175 ! Aggregation term for diatoms is increased in case of nutrient 176 ! stress as observed in reality. The stressed cells become more 177 ! sticky and coagulate to sink quickly out of the euphotic zone 178 ! ------------------------------------------------------------ 179 180 # if defined key_degrad 181 zstep = xstep * facvol(ji,jj,jk) 182 # else 183 zstep = xstep 184 # endif 185 ! Phytoplankton respiration 186 ! ------------------------ 193 187 zrespp2 = 1.e6 * zstep * ( wchl + wchld * ( 1.- xlimdia(ji,jj,jk) ) ) & 194 # if defined key_degrad195 & * facvol(ji,jj,jk) &196 # endif197 188 & * xdiss(ji,jj,jk) * zcompadi * trn(ji,jj,jk,jpdia) 198 199 200 ! Phytoplankton mortality. 201 ! ------------------------ 202 ztortp2 = mprat2 * zstep * trn(ji,jj,jk,jpdia) & 203 # if defined key_degrad 204 & * facvol(ji,jj,jk) & 205 # endif 206 & / ( xkmort + trn(ji,jj,jk,jpdia) ) * zcompadi 207 208 zmortp2 = zrespp2 + ztortp2 209 210 ! Update the arrays tra which contains the biological sources and sinks 211 ! --------------------------------------------------------------------- 189 190 ! Phytoplankton mortality. 191 ! ------------------------ 192 ztortp2 = mprat2 * zstep * trn(ji,jj,jk,jpdia) / ( xkmort + trn(ji,jj,jk,jpdia) ) * zcompadi 193 194 zmortp2 = zrespp2 + ztortp2 195 196 ! Update the arrays tra which contains the biological sources and sinks 197 ! --------------------------------------------------------------------- 212 198 zfactch = trn(ji,jj,jk,jpdch) / ( trn(ji,jj,jk,jpdia) + rtrn ) 213 199 zfactfe = trn(ji,jj,jk,jpdfe) / ( trn(ji,jj,jk,jpdia) + rtrn ) -
branches/DEV_r2006_merge_TRA_TRC/NEMO/TOP_SRC/PISCES/p4zopt.F90
r2038 r2104 22 22 PRIVATE 23 23 24 PUBLIC p4z_opt ! called in p4zbio.F90 module 24 PUBLIC p4z_opt ! called in p4zbio.F90 module 25 PUBLIC p4z_opt_init ! called in trcsms_pisces.F90 module 25 26 26 27 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: etot, enano, ediat !: PAR for phyto, nano and diat … … 43 44 CONTAINS 44 45 45 SUBROUTINE p4z_opt( kt, jnt)46 SUBROUTINE p4z_opt( kt, jnt ) 46 47 !!--------------------------------------------------------------------- 47 48 !! *** ROUTINE p4z_opt *** … … 63 64 64 65 65 ! !* tabulated attenuation coef. 66 IF( kt * jnt == nittrc000 ) THEN 67 ! ! level of light extinction 68 nksrp = trc_oce_ext_lev( rn_si2, 0.33e2 ) 69 IF(lwp) THEN 70 WRITE(numout,*) 71 WRITE(numout,*) ' level max of computation of qsr = ', nksrp, ' ref depth = ', gdepw_0(nksrp+1), ' m' 72 ENDIF 73 !! CALL trc_oce_rgb( xkrgb ) ! tabulated attenuation coefficients 74 CALL trc_oce_rgb_read( xkrgb ) ! tabulated attenuation coefficients 75 etot (:,:,:) = 0.e0 76 enano(:,:,:) = 0.e0 77 ediat(:,:,:) = 0.e0 78 IF( ln_qsr_bio ) etot3(:,:,:) = 0.e0 79 ENDIF 80 81 82 ! Initialisation of variables used to compute PAR 83 ! ----------------------------------------------- 66 ! Initialisation of variables used to compute PAR 67 ! ----------------------------------------------- 84 68 ze1 (:,:,jpk) = 0.e0 85 69 ze2 (:,:,jpk) = 0.e0 … … 242 226 END SUBROUTINE p4z_opt 243 227 228 SUBROUTINE p4z_opt_init 229 !!---------------------------------------------------------------------- 230 !! *** ROUTINE p4z_opt_init *** 231 !! 232 !! ** Purpose : Initialization of tabulated attenuation coef 233 !! 234 !! 235 !!---------------------------------------------------------------------- 236 237 ! ! level of light extinction 238 nksrp = trc_oce_ext_lev( rn_si2, 0.33e2 ) 239 IF(lwp) THEN 240 WRITE(numout,*) 241 WRITE(numout,*) ' level max of computation of qsr = ', nksrp, ' ref depth = ', gdepw_0(nksrp+1), ' m' 242 ENDIF 243 !! CALL trc_oce_rgb( xkrgb ) ! tabulated attenuation coefficients 244 CALL trc_oce_rgb_read( xkrgb ) ! tabulated attenuation coefficients 245 etot (:,:,:) = 0.e0 246 enano(:,:,:) = 0.e0 247 ediat(:,:,:) = 0.e0 248 IF( ln_qsr_bio ) etot3(:,:,:) = 0.e0 249 ! 250 END SUBROUTINE p4z_opt_init 244 251 #else 245 252 !!---------------------------------------------------------------------- -
branches/DEV_r2006_merge_TRA_TRC/NEMO/TOP_SRC/PISCES/p4zprod.F90
r2082 r2104 27 27 PRIVATE 28 28 29 PUBLIC p4z_prod ! called in p4zbio.F90 29 PUBLIC p4z_prod ! called in p4zbio.F90 30 PUBLIC p4z_prod_init ! called in trcsms_pisces.F90 30 31 31 32 !! * Shared module variables … … 47 48 texcret , & !: 1 - excret 48 49 texcret2 , & !: 1 - excret2 49 rpis180 , & !: rpi / 18050 50 tpp !: Total primary production 51 51 … … 78 78 REAL(wp) :: zmxltst, zmxlday, zlim1 79 79 REAL(wp) :: zpislopen , zpislope2n 80 REAL(wp) :: zrum, zcodel, zargu, zv ol80 REAL(wp) :: zrum, zcodel, zargu, zval, zvol 81 81 #if defined key_diatrc 82 82 REAL(wp) :: zrfact2 … … 91 91 !!--------------------------------------------------------------------- 92 92 93 94 IF( ( kt * jnt ) == nittrc000 ) CALL p4z_prod_init ! Initialization (first time-step only)95 96 97 93 zprorca (:,:,:) = 0.0 98 94 zprorcad(:,:,:) = 0.0 … … 125 121 zrum = FLOAT( nday_year - 80 ) / 365. 126 122 ENDIF 127 zcodel = ASIN( SIN( zrum * rpi * 2. ) * SIN( r pis180* 23.5 ) )123 zcodel = ASIN( SIN( zrum * rpi * 2. ) * SIN( rad * 23.5 ) ) 128 124 129 125 ! day length in hours … … 131 127 DO jj = 1, jpj 132 128 DO ji = 1, jpi 133 zargu = TAN( zcodel ) * TAN( gphit(ji,jj) * r pis180)129 zargu = TAN( zcodel ) * TAN( gphit(ji,jj) * rad ) 134 130 zargu = MAX( -1., MIN( 1., zargu ) ) 135 zstrn(ji,jj) = MAX( 0.0, 24. - 2. * ACOS( zargu ) / rpis180 / 15. ) 131 zval = MAX( 0.0, 24. - 2. * ACOS( zargu ) / rad / 15. ) 132 IF( zval < 1.e0 ) zval = 24. 133 zstrn(ji,jj) = 24. / zval 136 134 END DO 137 135 END DO … … 227 225 END DO 228 226 229 230 WHERE( zstrn(:,:) < 1.e0 ) zstrn(:,:) = 24.231 zstrn(:,:) = 24. / zstrn(:,:)232 227 233 228 !CDIR NOVERRCHK … … 396 391 !! 397 392 !! ** Method : Read the nampisprod namelist and check the parameters 398 !! called at the first timestep (nit trc000)393 !! called at the first timestep (nit000) 399 394 !! 400 395 !! ** input : Namelist nampisprod … … 426 421 nspyr = INT( nyear_len(1) * rday / rdt ) 427 422 428 rpis180 = rpi / 180.429 423 texcret = 1.0 - excret 430 424 texcret2 = 1.0 - excret2 -
branches/DEV_r2006_merge_TRA_TRC/NEMO/TOP_SRC/PISCES/p4zrem.F90
r2082 r2104 27 27 PRIVATE 28 28 29 PUBLIC p4z_rem ! called in p4zbio.F90 29 PUBLIC p4z_rem ! called in p4zbio.F90 30 PUBLIC p4z_rem_init ! called in trcsms_pisces.F90 30 31 31 32 !! * Shared module variables … … 41 42 & denitr !: denitrification array 42 43 43 REAL(wp) :: &44 xstep !: Time step duration for biology45 44 46 45 !!* Substitution … … 54 53 CONTAINS 55 54 56 SUBROUTINE p4z_rem( kt, jnt)55 SUBROUTINE p4z_rem( kt ) 57 56 !!--------------------------------------------------------------------- 58 57 !! *** ROUTINE p4z_rem *** … … 62 61 !! ** Method : - ??? 63 62 !!--------------------------------------------------------------------- 64 INTEGER, INTENT(in) :: kt , jnt! ocean time step63 INTEGER, INTENT(in) :: kt ! ocean time step 65 64 INTEGER :: ji, jj, jk 66 65 REAL(wp) :: zremip, zremik , zlam1b 67 66 REAL(wp) :: zkeq , zfeequi, zsiremin 68 REAL(wp) :: zsatur, zsatur2, znusil 67 REAL(wp) :: zsatur, zsatur1, zsatur2, zsatur22, znusil 68 REAL(wp) :: ztem1, ztem2 69 69 REAL(wp) :: zbactfer, zorem, zorem2, zofer 70 70 REAL(wp) :: zosil, zdenom1, zscave, zaggdfe … … 72 72 REAL(wp) :: zofer2, zdenom, zdenom2 73 73 #endif 74 REAL(wp) :: zlamfac, zonitr 74 REAL(wp) :: zlamfac, zonitr, zstep 75 75 REAL(wp), DIMENSION(jpi,jpj) :: ztempbac 76 76 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zdepbac, zfesatur, zolimi … … 78 78 79 79 !!--------------------------------------------------------------------- 80 81 82 IF( ( kt * jnt ) == nittrc000 ) THEN83 CALL p4z_rem_init ! Initialization (first time-step only)84 xstep = rfact2 / rday ! Time step duration for the biology85 nitrfac(:,:,:) = 0.086 denitr (:,:,:) = 0.087 ENDIF88 80 89 81 … … 94 86 ztempbac(:,:) = 0.0 95 87 96 !Computation of the mean phytoplankton concentration as97 !a crude estimate of the bacterial biomass98 !--------------------------------------------------88 ! Computation of the mean phytoplankton concentration as 89 ! a crude estimate of the bacterial biomass 90 ! -------------------------------------------------- 99 91 100 92 DO jk = 1, jpkm1 … … 114 106 DO jj = 1, jpj 115 107 DO ji = 1, jpi 116 117 ! DENITRIFICATION FACTOR COMPUTED FROM O2 LEVELS 118 ! ---------------------------------------------- 119 108 ! denitrification factor computed from O2 levels 120 109 nitrfac(ji,jj,jk) = MAX( 0.e0, 0.4 * ( 6.e-6 - trn(ji,jj,jk,jpoxy) ) & 121 110 & / ( oxymin + trn(ji,jj,jk,jpoxy) ) ) 122 END DO 123 END DO 124 END DO 125 126 nitrfac(:,:,:) = MIN( 1., nitrfac(:,:,:) ) 127 128 129 DO jk = 1, jpkm1 130 DO jj = 1, jpj 131 DO ji = 1, jpi 132 133 ! DOC ammonification. Depends on depth, phytoplankton biomass 134 ! and a limitation term which is supposed to be a parameterization 135 ! of the bacterial activity. 136 ! ---------------------------------------------------------------- 137 zremik = xremik * xstep / 1.e-6 * xlimbac(ji,jj,jk) & 111 nitrfac(ji,jj,jk) = MIN( 1., nitrfac(ji,jj,jk) ) 112 END DO 113 END DO 114 END DO 115 116 DO jk = 1, jpkm1 117 DO jj = 1, jpj 118 DO ji = 1, jpi 138 119 # if defined key_degrad 139 & * facvol(ji,jj,jk) & 120 zstep = xstep * facvol(ji,jj,jk) 121 # else 122 zstep = xstep 140 123 # endif 141 & * zdepbac(ji,jj,jk) 124 ! DOC ammonification. Depends on depth, phytoplankton biomass 125 ! and a limitation term which is supposed to be a parameterization 126 ! of the bacterial activity. 127 zremik = xremik * zstep / 1.e-6 * xlimbac(ji,jj,jk) * zdepbac(ji,jj,jk) 142 128 zremik = MAX( zremik, 5.5e-4 * xstep ) 143 129 144 ! Ammonification in oxic waters with oxygen consumption145 ! -----------------------------------------------------130 ! Ammonification in oxic waters with oxygen consumption 131 ! ----------------------------------------------------- 146 132 zolimi(ji,jj,jk) = MIN( ( trn(ji,jj,jk,jpoxy) - rtrn ) / o2ut, & 147 133 & zremik * ( 1.- nitrfac(ji,jj,jk) ) * trn(ji,jj,jk,jpdoc) ) 148 134 149 ! Ammonification in suboxic waters with denitrification150 ! -------------------------------------------------------135 ! Ammonification in suboxic waters with denitrification 136 ! ------------------------------------------------------- 151 137 denitr(ji,jj,jk) = MIN( ( trn(ji,jj,jk,jpno3) - rtrn ) / rdenit, & 152 138 & zremik * nitrfac(ji,jj,jk) * trn(ji,jj,jk,jpdoc) ) … … 167 153 DO jj = 1, jpj 168 154 DO ji = 1, jpi 169 170 ! NH4 nitrification to NO3. Ceased for oxygen concentrations171 ! below 2 umol/L. Inhibited at strong light172 ! ----------------------------------------------------------173 zonitr = nitrif * xstep * trn(ji,jj,jk,jpnh4) / ( 1.+ emoy(ji,jj,jk) ) &174 155 # if defined key_degrad 175 & * facvol(ji,jj,jk) & 156 zstep = xstep * facvol(ji,jj,jk) 157 # else 158 zstep = xstep 176 159 # endif 177 & * ( 1.- nitrfac(ji,jj,jk) ) 178 179 ! 180 ! Update of the tracers trends 181 ! ---------------------------- 182 183 tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) - zonitr 184 tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3) + zonitr 185 tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2nit * zonitr 186 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) - rno3 * zonitr 160 ! NH4 nitrification to NO3. Ceased for oxygen concentrations 161 ! below 2 umol/L. Inhibited at strong light 162 ! ---------------------------------------------------------- 163 zonitr = nitrif * zstep * trn(ji,jj,jk,jpnh4) / ( 1.+ emoy(ji,jj,jk) ) * ( 1.- nitrfac(ji,jj,jk) ) 164 165 ! Update of the tracers trends 166 ! ---------------------------- 167 168 tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) - zonitr 169 tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3) + zonitr 170 tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2nit * zonitr 171 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) - rno3 * zonitr 187 172 188 173 END DO … … 200 185 DO ji = 1, jpi 201 186 202 ! Bacterial uptake of iron. No iron is available in DOC. So 203 ! Bacteries are obliged to take up iron from the water. Some 204 ! studies (especially at Papa) have shown this uptake to be 205 ! significant 206 ! ---------------------------------------------------------- 187 ! Bacterial uptake of iron. No iron is available in DOC. So 188 ! Bacteries are obliged to take up iron from the water. Some 189 ! studies (especially at Papa) have shown this uptake to be significant 190 ! ---------------------------------------------------------- 207 191 zbactfer = 15.e-6 * rfact2 * 4.* 0.4 * prmax(ji,jj,jk) & 208 & * ( xlimphy(ji,jj,jk) * zdepbac(ji,jj,jk))**2 & 192 & * ( xlimphy(ji,jj,jk) * zdepbac(ji,jj,jk)) & 193 & * ( xlimphy(ji,jj,jk) * zdepbac(ji,jj,jk)) & 209 194 & / ( xkgraz2 + zdepbac(ji,jj,jk) ) & 210 195 & * ( 0.5 + SIGN( 0.5, trn(ji,jj,jk,jpfer) -2.e-11 ) ) … … 216 201 tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zbactfer 217 202 #endif 218 219 203 END DO 220 204 END DO … … 230 214 DO jj = 1, jpj 231 215 DO ji = 1, jpi 232 233 ! POC disaggregation by turbulence and bacterial activity.234 ! -------------------------------------------------------------235 zremip = xremip * xstep * tgfunc(ji,jj,jk) &236 216 # if defined key_degrad 237 & * facvol(ji,jj,jk) & 217 zstep = xstep * facvol(ji,jj,jk) 218 # else 219 zstep = xstep 238 220 # endif 239 & * ( 1.- 0.5 * nitrfac(ji,jj,jk) ) 240 241 ! POC disaggregation rate is reduced in anoxic zone as shown by 242 ! sediment traps data. In oxic area, the exponent of the martin s 243 ! law is around -0.87. In anoxic zone, it is around -0.35. This 244 ! means a disaggregation constant about 0.5 the value in oxic zones 245 ! ----------------------------------------------------------------- 221 ! POC disaggregation by turbulence and bacterial activity. 222 ! ------------------------------------------------------------- 223 zremip = xremip * zstep * tgfunc(ji,jj,jk) * ( 1.- 0.5 * nitrfac(ji,jj,jk) ) 224 225 ! POC disaggregation rate is reduced in anoxic zone as shown by 226 ! sediment traps data. In oxic area, the exponent of the martin s 227 ! law is around -0.87. In anoxic zone, it is around -0.35. This 228 ! means a disaggregation constant about 0.5 the value in oxic zones 229 ! ----------------------------------------------------------------- 246 230 zorem = zremip * trn(ji,jj,jk,jppoc) 247 231 zofer = zremip * trn(ji,jj,jk,jpsfe) … … 253 237 #endif 254 238 255 ! Update the appropriate tracers trends256 ! -------------------------------------239 ! Update the appropriate tracers trends 240 ! ------------------------------------- 257 241 258 242 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zorem … … 282 266 DO jj = 1, jpj 283 267 DO ji = 1, jpi 284 285 ! Remineralization rate of BSi depedant on T and saturation 286 ! --------------------------------------------------------- 287 zsatur = ( sio3eq(ji,jj,jk) - trn(ji,jj,jk,jpsil) ) / ( sio3eq(ji,jj,jk) + rtrn ) 288 zsatur = MAX( rtrn, zsatur ) 289 zsatur2 = zsatur * ( 1. + tsn(ji,jj,jk,jp_tem) / 400.)**4 290 znusil = 0.225 * ( 1. + tsn(ji,jj,jk,jp_tem) / 15.) * zsatur + 0.775 * zsatur2**9 291 # if defined key_degrad 292 zsiremin = xsirem * xstep * znusil * facvol(ji,jj,jk) 268 # if defined key_degrad 269 zstep = xstep * facvol(ji,jj,jk) 293 270 # else 294 zsiremin = xsirem * xstep * znusil 295 # endif 296 zosil = zsiremin * trn(ji,jj,jk,jpdsi) 271 zstep = xstep 272 # endif 273 ! Remineralization rate of BSi depedant on T and saturation 274 ! --------------------------------------------------------- 275 zsatur = ( sio3eq(ji,jj,jk) - trn(ji,jj,jk,jpsil) ) / ( sio3eq(ji,jj,jk) + rtrn ) 276 zsatur = MAX( rtrn, zsatur ) 277 ztem1 = ( 1. + tsn(ji,jj,jk,jp_tem) / 15.) 278 ztem2 = ( 1. + tsn(ji,jj,jk,jp_tem) / 400.) 279 zsatur1 = zsatur * ztem1 280 zsatur2 = zsatur * ztem2 * ztem2 * ztem2 * ztem2 281 zsatur22 = zsatur2 * zsatur2 282 znusil = 0.225 * zsatur1 + 0.775 * zsatur22 * zsatur22 * zsatur22 * zsatur22 * zsatur2 283 zsiremin = xsirem * zstep * znusil 284 zosil = zsiremin * trn(ji,jj,jk,jpdsi) 297 285 298 286 tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) - zosil 299 287 tra(ji,jj,jk,jpsil) = tra(ji,jj,jk,jpsil) + zosil 300 301 288 ! 302 289 END DO … … 317 304 !CDIR NOVERRCHK 318 305 DO ji = 1, jpi 319 ! 320 ! Compute de different ratios for scavenging of iron 321 ! -------------------------------------------------- 306 # if defined key_degrad 307 zstep = xstep * facvol(ji,jj,jk) 308 # else 309 zstep = xstep 310 # endif 311 ! Compute de different ratios for scavenging of iron 312 ! -------------------------------------------------- 322 313 323 314 #if defined key_kriest 324 315 zdenom1 = trn(ji,jj,jk,jppoc) / & 325 316 & ( trn(ji,jj,jk,jppoc) + trn(ji,jj,jk,jpdsi) + trn(ji,jj,jk,jpcal) + rtrn ) 326 317 #else 327 318 zdenom = 1. / ( trn(ji,jj,jk,jppoc) + trn(ji,jj,jk,jpgoc) & 328 319 & + trn(ji,jj,jk,jpdsi) + trn(ji,jj,jk,jpcal) + rtrn ) 329 320 330 zdenom1 = trn(ji,jj,jk,jppoc) * zdenom 331 zdenom2 = trn(ji,jj,jk,jpgoc) * zdenom 332 #endif 333 334 335 ! scavenging rate of iron. this scavenging rate depends on the 336 ! load in particles on which they are adsorbed. The 337 ! parameterization has been taken from studies on Th 338 ! ------------------------------------------------------------ 321 zdenom1 = trn(ji,jj,jk,jppoc) * zdenom 322 zdenom2 = trn(ji,jj,jk,jpgoc) * zdenom 323 #endif 324 ! scavenging rate of iron. this scavenging rate depends on the load in particles 325 ! on which they are adsorbed. The parameterization has been taken from studies on Th 326 ! ------------------------------------------------------------ 339 327 zkeq = fekeq(ji,jj,jk) 340 328 zfeequi = ( -( 1. + zfesatur(ji,jj,jk) * zkeq - zkeq * trn(ji,jj,jk,jpfer) ) & … … 349 337 & + trn(ji,jj,jk,jpcal) + trn(ji,jj,jk,jpdsi) ) * 1.e6 350 338 #endif 351 352 # if defined key_degrad 353 zscave = zfeequi * zlam1b * xstep * facvol(ji,jj,jk) 354 # else 355 zscave = zfeequi * zlam1b * xstep 356 # endif 357 358 ! Increased scavenging for very high iron concentrations 359 ! found near the coasts due to increased lithogenic particles 360 ! and let s say it unknown processes (precipitation, ...) 361 ! ----------------------------------------------------------- 339 zscave = zfeequi * zlam1b * zstep 340 341 ! Increased scavenging for very high iron concentrations 342 ! found near the coasts due to increased lithogenic particles 343 ! and let s say it unknown processes (precipitation, ...) 344 ! ----------------------------------------------------------- 362 345 zlamfac = MAX( 0.e0, ( gphit(ji,jj) + 55.) / 30. ) 363 346 zlamfac = MIN( 1. , zlamfac ) … … 374 357 #endif 375 358 376 # if defined key_degrad 377 zaggdfe = zlam1b * xstep * 0.5 * ( trn(ji,jj,jk,jpfer) - zfeequi ) * facvol(ji,jj,jk) 378 # else 379 zaggdfe = zlam1b * xstep * 0.5 * ( trn(ji,jj,jk,jpfer) - zfeequi ) 380 # endif 359 zaggdfe = zlam1b * zstep * 0.5 * ( trn(ji,jj,jk,jpfer) - zfeequi ) 381 360 382 361 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zscave - zaggdfe … … 400 379 ENDIF 401 380 402 ! Update the arrays TRA which contain the biological sources and sinks403 ! --------------------------------------------------------------------381 ! Update the arrays TRA which contain the biological sources and sinks 382 ! -------------------------------------------------------------------- 404 383 405 384 DO jk = 1, jpkm1 … … 452 431 ENDIF 453 432 433 nitrfac(:,:,:) = 0.0 434 denitr (:,:,:) = 0.0 435 454 436 END SUBROUTINE p4z_rem_init 455 456 457 458 459 437 460 438 #else -
branches/DEV_r2006_merge_TRA_TRC/NEMO/TOP_SRC/PISCES/p4zsed.F90
r2082 r2104 34 34 35 35 PUBLIC p4z_sed 36 PUBLIC p4z_sed_init 36 37 37 38 !! * Shared module variables … … 90 91 #endif 91 92 REAL(wp) :: zconctmp , zdenitot , znitrpottot 92 REAL(wp) :: zlim, zconctmp2, z step, zfact93 REAL(wp) :: zlim, zconctmp2, zfact, zrivalk 93 94 REAL(wp), DIMENSION(jpi,jpj) :: zsidep 94 95 REAL(wp), DIMENSION(jpi,jpj,jpk) :: znitrpot, zirondep … … 102 103 !!--------------------------------------------------------------------- 103 104 104 105 IF( ( kt * jnt ) == nittrc000 ) CALL p4z_sed_init ! Initialization (first time-step only) 106 IF( (jnt == 1) .and. ( ln_dustfer ) ) CALL p4z_sbc( kt ) 107 108 zstep = rfact2 / rday ! Time step duration for the biology 105 IF( ( jnt == 1 ) .AND. ( ln_dustfer ) ) CALL p4z_sbc( kt ) 109 106 110 107 zirondep(:,:,:) = 0.e0 ! Initialisation of variables used to compute deposition … … 192 189 DO ji = 1, jpi 193 190 ikt = MAX( mbathy(ji,jj) - 1, 1 ) 194 zconctmp = trn(ji,jj,ikt,jpdsi) * zstep / fse3t(ji,jj,ikt) &195 191 # if ! defined key_kriest 196 & * wscal (ji,jj,ikt)192 zconctmp = trn(ji,jj,ikt,jpdsi) * xstep / fse3t(ji,jj,ikt) * wscal (ji,jj,ikt) 197 193 # else 198 &* wsbio4(ji,jj,ikt)194 zconctmp = trn(ji,jj,ikt,jpdsi) * xstep / fse3t(ji,jj,ikt) * wsbio4(ji,jj,ikt) 199 195 # endif 200 196 trn(ji,jj,ikt,jpdsi) = trn(ji,jj,ikt,jpdsi) - zconctmp 201 197 202 198 #if ! defined key_sed 203 trn(ji,jj,ikt,jpsil) = trn(ji,jj,ikt,jpsil) + zconctmp &204 & * ( 1.- ( sumdepsi + rivalkinput / ryyss / 6. ) / zsumsedsi )199 zrivalk = ( 1.- ( sumdepsi + rivalkinput / ryyss / 6. ) / zsumsedsi ) 200 trn(ji,jj,ikt,jpsil) = trn(ji,jj,ikt,jpsil) + zconctmp * zrivalk 205 201 #endif 206 202 END DO … … 210 206 DO ji = 1, jpi 211 207 ikt = MAX( mbathy(ji,jj) - 1, 1 ) 212 zconctmp = trn(ji,jj,ikt,jpcal) * wscal(ji,jj,ikt) * zstep / fse3t(ji,jj,ikt)208 zconctmp = trn(ji,jj,ikt,jpcal) * wscal(ji,jj,ikt) * xstep / fse3t(ji,jj,ikt) 213 209 trn(ji,jj,ikt,jpcal) = trn(ji,jj,ikt,jpcal) - zconctmp 214 215 210 #if ! defined key_sed 216 trn(ji,jj,ikt,jptal) = trn(ji,jj,ikt,jptal) + zconctmp & 217 & * ( 1.- ( rivalkinput / ryyss ) / zsumsedcal ) * 2.e0 218 trn(ji,jj,ikt,jpdic) = trn(ji,jj,ikt,jpdic) + zconctmp & 219 & * ( 1.- ( rivalkinput / ryyss ) / zsumsedcal ) 211 zrivalk = ( 1.- ( rivalkinput / ryyss ) / zsumsedcal ) 212 trn(ji,jj,ikt,jptal) = trn(ji,jj,ikt,jptal) + zconctmp * zrivalk * 2.0 213 trn(ji,jj,ikt,jpdic) = trn(ji,jj,ikt,jpdic) + zconctmp * zrivalk 220 214 #endif 221 215 END DO … … 225 219 DO ji = 1, jpi 226 220 ikt = MAX( mbathy(ji,jj) - 1, 1 ) 227 zfact = zstep / fse3t(ji,jj,ikt)221 zfact = xstep / fse3t(ji,jj,ikt) 228 222 # if ! defined key_kriest 229 223 zconctmp = trn(ji,jj,ikt,jpgoc) … … 242 236 zconctmp = trn(ji,jj,ikt,jpnum) 243 237 zconctmp2 = trn(ji,jj,ikt,jppoc) 244 trn(ji,jj,ikt,jpnum) = trn(ji,jj,ikt,jpnum) & 245 & - zconctmp * wsbio4(ji,jj,ikt) * zfact 246 trn(ji,jj,ikt,jppoc) = trn(ji,jj,ikt,jppoc) & 247 & - zconctmp2 * wsbio3(ji,jj,ikt) * zfact 238 trn(ji,jj,ikt,jpnum) = trn(ji,jj,ikt,jpnum) - zconctmp * wsbio4(ji,jj,ikt) * zfact 239 trn(ji,jj,ikt,jppoc) = trn(ji,jj,ikt,jppoc) - zconctmp2 * wsbio3(ji,jj,ikt) * zfact 248 240 #if ! defined key_sed 249 trn(ji,jj,ikt,jpdoc) = trn(ji,jj,ikt,jpdoc) & 250 & + ( zconctmp2 * wsbio3(ji,jj,ikt) ) & 251 & * zfact * ( 1.- rivpo4input / ( ryyss * zsumsedpo4 ) ) 241 trn(ji,jj,ikt,jpdoc) = trn(ji,jj,ikt,jpdoc) + ( zconctmp2 * wsbio3(ji,jj,ikt) ) 242 & * zfact * ( 1.- rivpo4input / ( ryyss * zsumsedpo4 ) ) 252 243 #endif 253 trn(ji,jj,ikt,jpsfe) = trn(ji,jj,ikt,jpsfe) & 254 & - trn(ji,jj,ikt,jpsfe) * wsbio3(ji,jj,ikt) * zfact 255 244 trn(ji,jj,ikt,jpsfe) = trn(ji,jj,ikt,jpsfe) - trn(ji,jj,ikt,jpsfe) * wsbio3(ji,jj,ikt) * zfact 256 245 # endif 257 246 END DO … … 383 372 imois2 = nmonth 384 373 385 ! 1. first call kt=nit trc000374 ! 1. first call kt=nit000 386 375 ! ----------------------- 387 376 388 IF( kt == nit trc000 ) THEN377 IF( kt == nit000 ) THEN 389 378 ! initializations 390 379 nflx1 = 0 … … 402 391 ! ---------------- 403 392 404 IF( kt == nit trc000 .OR. imois /= nflx1 ) THEN393 IF( kt == nit000 .OR. imois /= nflx1 ) THEN 405 394 406 395 ! Calendar computation … … 445 434 !! 446 435 !! ** Method : Read the files and compute the budget 447 !! called at the first timestep (nit trc000)436 !! called at the first timestep (nit000) 448 437 !! 449 438 !! ** input : external netcdf files -
branches/DEV_r2006_merge_TRA_TRC/NEMO/TOP_SRC/PISCES/p4zsink.F90
r2038 r2104 19 19 PRIVATE 20 20 21 PUBLIC p4z_sink ! called in p4zbio.F90 21 PUBLIC p4z_sink ! called in p4zbio.F90 22 PUBLIC p4z_sink_init ! called in trcsms_pisces.F90 22 23 23 24 !! * Shared module variables … … 31 32 sinkcal, sinksil, & !: CaCO3 and BSi sinking fluxes 32 33 sinkfer !: Small BFe sinking flux 33 34 REAL(wp) :: &35 xstep , xstep2 !: Time step duration for biology36 34 37 35 INTEGER :: & … … 106 104 !!--------------------------------------------------------------------- 107 105 108 IF( ( kt * jnt ) == nittrc000 ) THEN 109 CALL p4z_sink_init ! Initialization (first time-step only) 110 xstep = rfact2 / rday ! Time step duration for biology 111 xstep2 = rfact2 / 2. 112 ENDIF 113 114 ! Initialisation of variables used to compute Sinking Speed 115 ! --------------------------------------------------------- 106 ! Initialisation of variables used to compute Sinking Speed 107 ! --------------------------------------------------------- 116 108 117 109 znum3d(:,:,:) = 0.e0 … … 120 112 zval3 = 1. + xkr_eta 121 113 122 ! Computation of the vertical sinking speed : Kriest et Evans, 2000123 ! -----------------------------------------------------------------114 ! Computation of the vertical sinking speed : Kriest et Evans, 2000 115 ! ----------------------------------------------------------------- 124 116 125 117 DO jk = 1, jpkm1 … … 128 120 IF( tmask(ji,jj,jk) /= 0.e0 ) THEN 129 121 znum = trn(ji,jj,jk,jppoc) / ( trn(ji,jj,jk,jpnum) + rtrn ) / xkr_massp 130 ! -------------- To avoid sinking speed over 50 m/day -------122 ! -------------- To avoid sinking speed over 50 m/day ------- 131 123 znum = MIN( xnumm(jk), znum ) 132 124 znum = MAX( 1.1 , znum ) 133 125 znum3d(ji,jj,jk) = znum 134 !------------------------------------------------------------126 !------------------------------------------------------------ 135 127 zeps = ( zval1 * znum - 1. )/ ( znum - 1. ) 136 128 zfm = xkr_frac**( 1. - zeps ) … … 150 142 wscal(:,:,:) = MAX( wsbio3(:,:,:), 50. ) 151 143 152 153 ! INITIALIZE TO ZERO ALL THE SINKING ARRAYS 154 ! ----------------------------------------- 144 ! INITIALIZE TO ZERO ALL THE SINKING ARRAYS 145 ! ----------------------------------------- 155 146 156 147 sinking (:,:,:) = 0.e0 … … 160 151 sinksil (:,:,:) = 0.e0 161 152 162 ! Compute the sedimentation term using p4zsink2 for all 163 ! the sinking particles 164 ! ----------------------------------------------------- 153 ! Compute the sedimentation term using p4zsink2 for all the sinking particles 154 ! ----------------------------------------------------- 165 155 166 156 CALL p4z_sink2( wsbio3, sinking , jppoc ) … … 170 160 CALL p4z_sink2( wscal , sinkcal , jpcal ) 171 161 172 ! Exchange between organic matter compartments due to 173 ! coagulation/disaggregation 174 ! --------------------------------------------------- 162 ! Exchange between organic matter compartments due to coagulation/disaggregation 163 ! --------------------------------------------------- 175 164 176 165 zval1 = 1. + xkr_zeta … … 185 174 186 175 znum = trn(ji,jj,jk,jppoc)/(trn(ji,jj,jk,jpnum)+rtrn) / xkr_massp 187 !-------------- To avoid sinking speed over 50 m/day -------176 !-------------- To avoid sinking speed over 50 m/day ------- 188 177 znum = min(xnumm(jk),znum) 189 178 znum = MAX( 1.1,znum) 190 !------------------------------------------------------------179 !------------------------------------------------------------ 191 180 zeps = ( zval1 * znum - 1.) / ( znum - 1.) 192 181 zdiv = MAX( 1.e-4, ABS( zeps - zval3) ) * SIGN( 1., zeps - zval3 ) … … 199 188 zsm = xkr_frac**xkr_eta 200 189 201 ! Part I : Coagulation dependant on turbulence202 ! ----------------------------------------------190 ! Part I : Coagulation dependant on turbulence 191 ! ---------------------------------------------- 203 192 204 193 zagg1 = ( 0.163 * trn(ji,jj,jk,jpnum)**2 & … … 232 221 zaggsh = ( zagg1 + zagg2 + zagg3 ) * rfact2 * xdiss(ji,jj,jk) / 1000. 233 222 234 ! Aggregation of small into large particles235 ! Part II : Differential settling236 ! ----------------------------------------------223 ! Aggregation of small into large particles 224 ! Part II : Differential settling 225 ! ---------------------------------------------- 237 226 238 227 zagg4 = ( 2.*3.141*0.125*trn(ji,jj,jk,jpnum)**2* & … … 261 250 zagg = 0.5 * xkr_stick * ( zaggsh + zaggsi ) 262 251 263 ! Aggregation of DOC to small particles264 ! --------------------------------------252 ! Aggregation of DOC to small particles 253 ! -------------------------------------- 265 254 266 255 zaggdoc = ( 0.4 * trn(ji,jj,jk,jpdoc) & … … 473 462 REAL(wp) :: zagg1, zagg2, zagg3, zagg4 474 463 REAL(wp) :: zagg , zaggfe, zaggdoc, zaggdoc2 475 REAL(wp) :: zfact, zwsmax 464 REAL(wp) :: zfact, zwsmax, zstep 476 465 #if defined key_diatrc 477 466 REAL(wp) :: zrfact2 … … 481 470 !!--------------------------------------------------------------------- 482 471 483 IF( ( kt * jnt ) == nittrc000 ) THEN 484 xstep = rfact2 / rday ! Timestep duration for biology 485 xstep2 = rfact2 / 2. 486 ENDIF 487 488 ! Sinking speeds of detritus is increased with depth as shown 489 ! by data and from the coagulation theory 490 ! ----------------------------------------------------------- 472 ! Sinking speeds of detritus is increased with depth as shown 473 ! by data and from the coagulation theory 474 ! ----------------------------------------------------------- 491 475 DO jk = 1, jpkm1 492 476 DO jj = 1, jpj 493 477 DO ji=1,jpi 494 zfact = MAX( 0., fsdepw(ji,jj,jk+1) -hmld(ji,jj) ) / 4000.478 zfact = MAX( 0., fsdepw(ji,jj,jk+1) - hmld(ji,jj) ) / 4000. 495 479 wsbio4(ji,jj,jk) = wsbio2 + ( 200.- wsbio2 ) * zfact 496 480 END DO … … 498 482 END DO 499 483 500 ! LIMIT THE VALUES OF THE SINKING SPEEDS 501 ! TO AVOID NUMERICAL INSTABILITIES 502 484 ! limit the values of the sinking speeds to avoid numerical instabilities 503 485 wsbio3(:,:,:) = wsbio 504 !505 ! OA Below, this is garbage. the ideal would be to find a time-splitting 506 ! OA algorithm that does not increase the computing cost by too much507 ! OA In ROMS, I have included a time-splitting procedure. But it is508 ! OA too expensive as the loop is computed globally. Thus, a small e3t509 ! OA at one place determines the number of subtimesteps globally510 ! OA AWFULLY EXPENSIVE !! Not able to find a better approach. Damned !!486 ! 487 ! OA Below, this is garbage. the ideal would be to find a time-splitting 488 ! OA algorithm that does not increase the computing cost by too much 489 ! OA In ROMS, I have included a time-splitting procedure. But it is 490 ! OA too expensive as the loop is computed globally. Thus, a small e3t 491 ! OA at one place determines the number of subtimesteps globally 492 ! OA AWFULLY EXPENSIVE !! Not able to find a better approach. Damned !! 511 493 512 494 DO jk = 1,jpkm1 … … 522 504 wscal(:,:,:) = wsbio4(:,:,:) 523 505 524 ! INITIALIZE TO ZERO ALL THE SINKING ARRAYS 525 ! -----------------------------------------506 ! Initializa to zero all the sinking arrays 507 ! ----------------------------------------- 526 508 527 509 sinking (:,:,:) = 0.e0 … … 532 514 sinkfer2(:,:,:) = 0.e0 533 515 534 ! Compute the sedimentation term using p4zsink2 for all 535 ! the sinking particles 536 ! ----------------------------------------------------- 516 ! Compute the sedimentation term using p4zsink2 for all the sinking particles 517 ! ----------------------------------------------------- 537 518 538 519 CALL p4z_sink2( wsbio3, sinking , jppoc ) … … 543 524 CALL p4z_sink2( wscal , sinkcal , jpcal ) 544 525 545 ! Exchange between organic matter compartments due to 546 ! coagulation/disaggregation 547 ! --------------------------------------------------- 526 ! Exchange between organic matter compartments due to coagulation/disaggregation 527 ! --------------------------------------------------- 548 528 549 529 DO jk = 1, jpkm1 550 530 DO jj = 1, jpj 551 531 DO ji = 1, jpi 552 zfact = xstep * xdiss(ji,jj,jk) 532 # if defined key_degrad 533 zstep = xstep * facvol(ji,jj,jk) 534 # else 535 zstep = xstep 536 # endif 537 zfact = zstep * xdiss(ji,jj,jk) 553 538 ! Part I : Coagulation dependent on turbulence 554 # if defined key_degrad555 zagg1 = 940.* zfact * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jppoc) * facvol(ji,jj,jk)556 zagg2 = 1.054e4 * zfact * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jpgoc) * facvol(ji,jj,jk)557 # else558 539 zagg1 = 940.* zfact * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jppoc) 559 540 zagg2 = 1.054e4 * zfact * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jpgoc) 560 # endif561 541 562 542 ! Part II : Differential settling 563 543 564 544 ! Aggregation of small into large particles 565 # if defined key_degrad 566 zagg3 = 0.66 * xstep * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jpgoc) * facvol(ji,jj,jk) 567 zagg4 = 0.e0 * xstep * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jppoc) * facvol(ji,jj,jk) 568 # else 569 zagg3 = 0.66 * xstep * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jpgoc) 570 zagg4 = 0.e0 * xstep * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jppoc) 571 # endif 545 zagg3 = 0.66 * zstep * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jpgoc) 546 zagg4 = 0.e0 * zstep * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jppoc) 547 572 548 zagg = zagg1 + zagg2 + zagg3 + zagg4 573 549 zaggfe = zagg * trn(ji,jj,jk,jpsfe) / ( trn(ji,jj,jk,jppoc) + rtrn ) 574 550 575 551 ! Aggregation of DOC to small particles 576 #if defined key_degrad 577 zaggdoc = ( 80.* trn(ji,jj,jk,jpdoc) + 698. * trn(ji,jj,jk,jppoc) ) & 578 & * facvol(ji,jj,jk) * zfact * trn(ji,jj,jk,jpdoc) 579 zaggdoc2 = 1.05e4 * zfact * trn(ji,jj,jk,jpgoc) & 580 & * facvol(ji,jj,jk) * trn(ji,jj,jk,jpdoc) 581 #else 582 zaggdoc = ( 80.* trn(ji,jj,jk,jpdoc) + 698. * trn(ji,jj,jk,jppoc) ) & 583 & * zfact * trn(ji,jj,jk,jpdoc) 552 zaggdoc = ( 80.* trn(ji,jj,jk,jpdoc) + 698. * trn(ji,jj,jk,jppoc) ) * zfact * trn(ji,jj,jk,jpdoc) 584 553 zaggdoc2 = 1.05e4 * zfact * trn(ji,jj,jk,jpgoc) * trn(ji,jj,jk,jpdoc) 585 #endif 554 586 555 ! Update the trends 587 556 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zagg + zaggdoc … … 623 592 END SUBROUTINE p4z_sink 624 593 594 SUBROUTINE p4z_sink_init 595 !!---------------------------------------------------------------------- 596 !! *** ROUTINE p4z_sink_init *** 597 !!---------------------------------------------------------------------- 598 END SUBROUTINE p4z_sink_init 599 625 600 #endif 626 601 … … 641 616 !! 642 617 INTEGER :: ji, jj, jk, jn 643 REAL(wp) :: zigma,zew,zign, zflx 618 REAL(wp) :: zigma,zew,zign, zflx, zstep 644 619 REAL(wp), DIMENSION(jpi,jpj,jpk) :: ztraz, zakz 645 620 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zwsink2 646 621 !!--------------------------------------------------------------------- 647 622 623 624 zstep = rfact2 / 2. 648 625 649 626 ztraz(:,:,:) = 0.e0 … … 693 670 DO jj = 1, jpj 694 671 DO ji = 1, jpi 695 zigma = zwsink2(ji,jj,jk+1) * xstep2/ fse3w(ji,jj,jk+1)672 zigma = zwsink2(ji,jj,jk+1) * zstep / fse3w(ji,jj,jk+1) 696 673 zew = zwsink2(ji,jj,jk+1) 697 psinkflx(ji,jj,jk+1) = -zew * ( trn(ji,jj,jk,jp_tra) - 0.5 * ( 1 + zigma ) * zakz(ji,jj,jk) ) * xstep2674 psinkflx(ji,jj,jk+1) = -zew * ( trn(ji,jj,jk,jp_tra) - 0.5 * ( 1 + zigma ) * zakz(ji,jj,jk) ) * zstep 698 675 END DO 699 676 END DO -
branches/DEV_r2006_merge_TRA_TRC/NEMO/TOP_SRC/PISCES/sms_pisces.F90
r2038 r2104 23 23 REAL(wp) :: rfact , rfactr !: ??? 24 24 REAL(wp) :: rfact2, rfact2r !: ??? 25 REAL(wp) :: xstep !: Time step duration for biology 25 26 26 27 !!* Biological parameters -
branches/DEV_r2006_merge_TRA_TRC/NEMO/TOP_SRC/PISCES/trcini_pisces.F90
r2038 r2104 145 145 ! ----------------------- 146 146 #if defined key_kriest 147 IF( jp_pisces /= 23) THEN147 IF( jp_pisces /= 23) CALL ctl_stop( ' PISCES must have 23 passive tracers. Change jp_pisces in par_pisces.F90' ) 148 148 #else 149 IF( jp_pisces /= 24) THEN149 IF( jp_pisces /= 24) CALL ctl_stop( ' PISCES must have 24 passive tracers. Change jp_pisces in par_pisces.F90' ) 150 150 #endif 151 IF (lwp) THEN152 WRITE (numout,*) ' ===>>>> : w a r n i n g '153 WRITE (numout,*) ' ======= ============= '154 WRITE (numout,*) &155 & ' STOP, change jp_pisces', &156 & ' in par_pisces.F90'157 END IF158 STOP 'TRC_CTL'159 END IF160 151 161 152 END SUBROUTINE trc_ctl_pisces -
branches/DEV_r2006_merge_TRA_TRC/NEMO/TOP_SRC/PISCES/trcrst_pisces.F90
r2038 r2104 263 263 #if defined key_dtatrc 264 264 ! Restore close seas values to initial data 265 CALL trc_dta( nit trc000 )265 CALL trc_dta( nit000 ) 266 266 DO jn = 1, jptra 267 267 IF( lutini(jn) ) THEN -
branches/DEV_r2006_merge_TRA_TRC/NEMO/TOP_SRC/PISCES/trcsms_pisces.F90
r2038 r2104 22 22 USE p4zche ! 23 23 USE p4zbio ! 24 USE p4zsink ! 25 USE p4zopt ! 26 USE p4zlim ! 27 USE p4zprod ! 28 USE p4zmort ! 29 USE p4zmicro ! 30 USE p4zmeso ! 31 USE p4zrem ! 24 32 USE p4zsed ! 25 33 USE p4zlys ! … … 61 69 !!--------------------------------------------------------------------- 62 70 63 IF( kt == nit trc000 .AND. .NOT. ln_rsttr) CALL trc_sms_pisces_init ! Initialization (first time-step only)71 IF( kt == nit000 ) CALL trc_sms_pisces_init ! Initialization (first time-step only) 64 72 65 73 IF( ndayflxtr /= nday ) THEN ! New days … … 121 129 REAL(wp) :: ztmas, ztmas1 122 130 123 ! Initialization of chemical variables of the carbon cycle 124 ! -------------------------------------------------------- 125 DO jk = 1, jpk 126 DO jj = 1, jpj 127 DO ji = 1, jpi 128 ztmas = tmask(ji,jj,jk) 129 ztmas1 = 1. - tmask(ji,jj,jk) 130 zcaralk = trn(ji,jj,jk,jptal) - borat(ji,jj,jk) / ( 1. + 1.E-8 / ( rtrn + akb3(ji,jj,jk) ) ) 131 zco3 = ( zcaralk - trn(ji,jj,jk,jpdic) ) * ztmas + 0.5e-3 * ztmas1 132 zbicarb = ( 2. * trn(ji,jj,jk,jpdic) - zcaralk ) 133 hi(ji,jj,jk) = ( ak23(ji,jj,jk) * zbicarb / zco3 ) * ztmas + 1.e-9 * ztmas1 131 IF( .NOT. ln_rsttr ) THEN 132 ! Initialization of chemical variables of the carbon cycle 133 ! -------------------------------------------------------- 134 DO jk = 1, jpk 135 DO jj = 1, jpj 136 DO ji = 1, jpi 137 ztmas = tmask(ji,jj,jk) 138 ztmas1 = 1. - tmask(ji,jj,jk) 139 zcaralk = trn(ji,jj,jk,jptal) - borat(ji,jj,jk) / ( 1. + 1.E-8 / ( rtrn + akb3(ji,jj,jk) ) ) 140 zco3 = ( zcaralk - trn(ji,jj,jk,jpdic) ) * ztmas + 0.5e-3 * ztmas1 141 zbicarb = ( 2. * trn(ji,jj,jk,jpdic) - zcaralk ) 142 hi(ji,jj,jk) = ( ak23(ji,jj,jk) * zbicarb / zco3 ) * ztmas + 1.e-9 * ztmas1 143 END DO 134 144 END DO 135 145 END DO 136 END DO 146 ! 147 END IF 148 149 ! Time step duration for biology 150 xstep = rfact2 / rday 151 152 CALL p4z_sink_init ! vertical flux of particulate organic matter 153 CALL p4z_opt_init ! Optic: PAR in the water column 154 CALL p4z_lim_init ! co-limitations by the various nutrients 155 CALL p4z_prod_init ! phytoplankton growth rate over the global ocean. 156 CALL p4z_rem_init ! remineralisation 157 CALL p4z_mort_init ! phytoplankton mortality 158 CALL p4z_micro_init ! microzooplankton 159 CALL p4z_meso_init ! mesozooplankton 160 CALL p4z_sed_init ! sedimentation 161 CALL p4z_lys_init ! calcite saturation 162 CALL p4z_flx_init ! gas exchange 137 163 138 164 END SUBROUTINE trc_sms_pisces_init -
branches/DEV_r2006_merge_TRA_TRC/NEMO/TOP_SRC/SED/sed.F90
r2082 r2104 38 38 USE trc, ONLY : & 39 39 trn , & !: tracer 40 nittrc000 , & !: 1st time step of tracer model41 40 nwritetrc !: outputs frequency of tracer model 42 41 -
branches/DEV_r2006_merge_TRA_TRC/NEMO/TOP_SRC/SED/sedini.F90
r1581 r2104 443 443 444 444 dtsed = rdt 445 nitsed000 = nit000 446 nitsedend = nitend 445 447 #if ! defined key_sed_off 446 nitsed000 = nittrc000447 nitsedend = nitend448 448 nwrised = nwritetrc 449 449 #else 450 nitsed000 = nit000451 nitsedend = nitend452 450 nwrised = nwrite 453 451 #endif -
branches/DEV_r2006_merge_TRA_TRC/NEMO/TOP_SRC/oce_trc.F90
r2085 r2104 6 6 !! History : 1.0 ! 2004-03 (C. Ethe) original code 7 7 !! 2.0 ! 2007-12 (C. Ethe, G. Madec) rewritting 8 !!----------------------------------------------------------------------9 !! NEMO/TOP 2.0, LOCEAN-IPSL (2007)10 !! $Id$11 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt)12 8 !!---------------------------------------------------------------------- 13 9 #if defined key_top … … 254 250 #endif 255 251 252 !!---------------------------------------------------------------------- 253 !! NEMO/TOP 3.3, LOCEAN-IPSL (2010) 254 !! $Id$ 255 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 256 256 !!====================================================================== 257 257 END MODULE oce_trc -
branches/DEV_r2006_merge_TRA_TRC/NEMO/TOP_SRC/par_trc.F90
r2052 r2104 9 9 !! 1.0 ! 2004-03 (C. Ethe) Free form and module 10 10 !! 2.0 ! 2007-12 (C. Ethe, G. Madec) revised architecture 11 !!----------------------------------------------------------------------12 !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007)13 !! $Id$14 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt)15 11 !!---------------------------------------------------------------------- 16 12 USE par_kind ! kind parameters … … 41 37 42 38 REAL(wp), PUBLIC :: rtrn = 1.e-15 !: truncation value 39 40 !!---------------------------------------------------------------------- 41 !! NEMO/TOP 3.3 , LOCEAN-IPSL (2010) 42 !! $Id$ 43 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 43 44 !!====================================================================== 44 45 END MODULE par_trc -
branches/DEV_r2006_merge_TRA_TRC/NEMO/TOP_SRC/prtctl_trc.F90
r1581 r2104 35 35 PUBLIC prt_ctl_trc_info ! 36 36 PUBLIC prt_ctl_trc_init ! called by opa.F90 37 38 !!----------------------------------------------------------------------39 !! NEMO/TOP 1.0 , LOCEAN-IPSL (2005)40 !! $Id$41 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt)42 !!----------------------------------------------------------------------43 37 44 38 CONTAINS … … 466 460 !!---------------------------------------------------------------------- 467 461 #endif 468 469 !!====================================================================== 462 463 !!---------------------------------------------------------------------- 464 !! NEMO/TOP 3.3 , LOCEAN-IPSL (2010) 465 !! $Id$ 466 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 467 !!====================================================================== 470 468 END MODULE prtctl_trc -
branches/DEV_r2006_merge_TRA_TRC/NEMO/TOP_SRC/top_substitute.h90
r2052 r2104 2 2 !! *** top_substitute.h90 *** 3 3 !!---------------------------------------------------------------------- 4 !! ** purpose : Statement function file: to be include in all routines 5 !! concerning passive tracer model 4 !! ** purpose : Statement function file: to be include in all passive tracer modules 6 5 !!---------------------------------------------------------------------- 7 6 !! History : 1.0 ! 2004-03 (C. Ethe) Original code 8 7 !! 2.0 ! 2007-12 (C. Ethe, G. Madec) new architecture 9 8 !!---------------------------------------------------------------------- 10 !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007) 9 # include "domzgr_substitute.h90" 10 # include "ldfeiv_substitute.h90" 11 # include "ldftra_substitute.h90" 12 # include "vectopt_loop_substitute.h90" 13 !!---------------------------------------------------------------------- 14 !! NEMO/TOP 3.3 , LOCEAN-IPSL (2010) 11 15 !! $Id$ 12 16 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 13 17 !!---------------------------------------------------------------------- 14 ! ========================================================15 #include "domzgr_substitute.h90"16 #include "ldfeiv_substitute.h90"17 #include "ldftra_substitute.h90"18 #include "vectopt_loop_substitute.h90" -
branches/DEV_r2006_merge_TRA_TRC/NEMO/TOP_SRC/trc.F90
r2082 r2104 4 4 !! Passive tracers : module for tracers defined 5 5 !!====================================================================== 6 !! History : -! 1996-01 (M. Levy) Original code6 !! History : OPA ! 1996-01 (M. Levy) Original code 7 7 !! - ! 1999-07 (M. Levy) for LOBSTER1 or NPZD model 8 8 !! - ! 2000-04 (O. Aumont, M.A. Foujols) HAMOCC3 and P3ZD 9 !! 1.0 ! 2004-03 (C. Ethe) Free form and module 10 !!---------------------------------------------------------------------- 11 !! NEMO/TOP 1.0 , LOCEAN-IPSL (2005) 12 !! $Id$ 13 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 9 !! NEMO 1.0 ! 2004-03 (C. Ethe) Free form and module 14 10 !!---------------------------------------------------------------------- 15 11 #if defined key_top … … 38 34 !! passive tracers fields (before,now,after) 39 35 !! -------------------------------------------------- 40 REAL(wp), PUBLIC :: trai !: initial total tracer41 REAL(wp), PUBLIC , DIMENSION (jpi,jpj,jpk) :: cvol !: masked grid volume42 REAL(wp), PUBLIC :: areatot !: total volume36 REAL(wp), PUBLIC, DIMENSION (jpi,jpj,jpk) :: cvol !: volume correction -degrad option- 37 REAL(wp), PUBLIC :: trai !: initial total tracer 38 REAL(wp), PUBLIC :: areatot !: total volume 43 39 44 40 REAL(wp), PUBLIC, DIMENSION (jpi,jpj,jpk,jptra) :: trn !: traceur concentration for actual time step … … 46 42 REAL(wp), PUBLIC, DIMENSION (jpi,jpj,jpk,jptra) :: trb !: traceur concentration for before time step 47 43 48 #if ! defined key_zco49 44 !! interpolated gradient 50 45 !!-------------------------------------------------- 51 46 REAL(wp), PUBLIC, DIMENSION (jpi,jpj,jptra) :: gtru !: horizontal gradient at u-points at bottom ocean level 52 47 REAL(wp), PUBLIC, DIMENSION (jpi,jpj,jptra) :: gtrv !: horizontal gradient at v-points at bottom ocean level 53 #endif54 48 55 49 !! passive tracers restart (input and output) 56 50 !! ------------------------------------------ 57 LOGICAL , PUBLIC :: ln_rsttr !: boolean term for restart i/o for passive tracers (namelist) 58 LOGICAL , PUBLIC :: lrst_trc !: logical to control the trc restart write 59 INTEGER , PUBLIC :: nutwrs !: output FILE for passive tracers restart 60 INTEGER , PUBLIC :: nutrst !: logical unit for restart FILE for passive tracers 61 INTEGER , PUBLIC :: nn_rsttr !: control of the time step ( 0 or 1 ) for pass. tr. 62 CHARACTER(len=50) :: cn_trcrst_in !: suffix of pass. tracer restart name (input) 63 CHARACTER(len=50) :: cn_trcrst_out !: suffix of pass. tracer restart name (output) 51 LOGICAL , PUBLIC :: ln_rsttr !: boolean term for restart i/o for passive tracers (namelist) 52 LOGICAL , PUBLIC :: lrst_trc !: logical to control the trc restart write 53 INTEGER , PUBLIC :: nn_dttrc !: frequency of step on passive tracers 54 INTEGER , PUBLIC :: nutwrs !: output FILE for passive tracers restart 55 INTEGER , PUBLIC :: nutrst !: logical unit for restart FILE for passive tracers 56 INTEGER , PUBLIC :: nn_rsttr !: control of the time step ( 0 or 1 ) for pass. tr. 57 CHARACTER(len=50), PUBLIC :: cn_trcrst_in !: suffix of pass. tracer restart name (input) 58 CHARACTER(len=50), PUBLIC :: cn_trcrst_out !: suffix of pass. tracer restart name (output) 64 59 65 60 !! information for outputs … … 70 65 !! additional 2D/3D outputs namelist 71 66 !! -------------------------------------------------- 72 CHARACTER(len= 8), PUBLIC, DIMENSION (jpdia2d) :: ctrc2d !: 2d output field name 73 CHARACTER(len= 8), PUBLIC, DIMENSION (jpdia2d) :: ctrc2u !: 2d output field unit 74 CHARACTER(len= 8), PUBLIC, DIMENSION (jpdia3d) :: ctrc3d !: 3d output field name 75 CHARACTER(len= 8), PUBLIC, DIMENSION (jpdia3d) :: ctrc3u !: 3d output field unit 76 CHARACTER(len=80), PUBLIC, DIMENSION (jpdia2d) :: ctrc2l !: 2d output field long name 77 CHARACTER(len=80), PUBLIC, DIMENSION (jpdia3d) :: ctrc3l !: 3d output field long name 67 INTEGER , PUBLIC :: nwritedia !: frequency of additional arrays outputs(namelist) 68 CHARACTER(len= 8), PUBLIC, DIMENSION (jpdia2d) :: ctrc2d !: 2d output field name 69 CHARACTER(len= 8), PUBLIC, DIMENSION (jpdia2d) :: ctrc2u !: 2d output field unit 70 CHARACTER(len= 8), PUBLIC, DIMENSION (jpdia3d) :: ctrc3d !: 3d output field name 71 CHARACTER(len= 8), PUBLIC, DIMENSION (jpdia3d) :: ctrc3u !: 3d output field unit 72 CHARACTER(len=80), PUBLIC, DIMENSION (jpdia2d) :: ctrc2l !: 2d output field long name 73 CHARACTER(len=80), PUBLIC, DIMENSION (jpdia3d) :: ctrc3l !: 3d output field long name 78 74 79 REAL(wp), PUBLIC, DIMENSION (jpi,jpj, jpdia2d) :: trc2d !: additional 2d outputs80 REAL(wp), PUBLIC, DIMENSION (jpi,jpj,jpk,jpdia3d) :: trc3d !: additional 3d outputs75 REAL(wp), PUBLIC, DIMENSION (jpi,jpj, jpdia2d) :: trc2d !: additional 2d outputs 76 REAL(wp), PUBLIC, DIMENSION (jpi,jpj,jpk,jpdia3d) :: trc3d !: additional 3d outputs 81 77 82 INTEGER , PUBLIC :: nwritedia !: frequency of additional arrays outputs(namelist)83 78 # endif 84 79 85 80 #if defined key_diabio || defined key_trdmld_trc 86 CHARACTER(len=8), DIMENSION(jpdiabio) :: ctrbio !: biological trends name (NAMELIST) 87 CHARACTER(len=20), DIMENSION(jpdiabio) :: ctrbiu !: biological trends unit (NAMELIST) 88 CHARACTER(len=80), DIMENSION(jpdiabio) :: ctrbil !: biological trends long name (NAMELIST) 89 INTEGER :: nwritebio !: time step frequency for biological outputs (NAMELIST) 81 ! !!* namtop_XXX namelist * 82 INTEGER , PUBLIC :: nwritebio !: time step frequency for biological outputs 83 CHARACTER(len=8 ), PUBLIC, DIMENSION(jpdiabio) :: ctrbio !: biological trends name 84 CHARACTER(len=20), PUBLIC, DIMENSION(jpdiabio) :: ctrbiu !: biological trends unit 85 CHARACTER(len=80), PUBLIC, DIMENSION(jpdiabio) :: ctrbil !: biological trends long name 90 86 #endif 91 87 # if defined key_diabio 92 88 !! Biological trends 93 89 !! ----------------- 94 REAL(wp), DIMENSION(jpi,jpj,jpk,jpdiabio) :: trbio !: biological trends90 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk,jpdiabio) :: trbio !: biological trends 95 91 # endif 96 92 … … 108 104 #endif 109 105 106 !!---------------------------------------------------------------------- 107 !! NEMO/TOP 3.3 , LOCEAN-IPSL (2010) 108 !! $Id$ 109 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 110 110 !!====================================================================== 111 111 END MODULE trc -
branches/DEV_r2006_merge_TRA_TRC/NEMO/TOP_SRC/trcdia.F90
r2038 r2104 4 4 !! TOP : Output of passive tracers 5 5 !!====================================================================== 6 !! History : -! 1995-01 (M. Levy) Original code6 !! History : OPA ! 1995-01 (M. Levy) Original code 7 7 !! - ! 1998-01 (C. Levy) NETCDF format using ioipsl interface 8 8 !! - ! 1999-01 (M.A. Foujols) adapted for passive tracer 9 9 !! - ! 1999-09 (M.A. Foujols) split into three parts 10 !! 10 !! NEMO 1.0 ! 2005-03 (O. Aumont, A. El Moussaoui) F90 11 11 !! ! 2008-05 (C. Ethe re-organization) 12 12 !!---------------------------------------------------------------------- … … 32 32 PRIVATE 33 33 34 PUBLIC trc_dia34 PUBLIC trc_dia ! called by XXX module 35 35 36 36 INTEGER :: nit5 !: id for tracer output file … … 56 56 # include "top_substitute.h90" 57 57 !!---------------------------------------------------------------------- 58 !! NEMO/TOP 1.0 , LOCEAN-IPSL (2005)58 !! NEMO/TOP 3.3 , LOCEAN-IPSL (2010) 59 59 !! $Id$ 60 60 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 61 61 !!---------------------------------------------------------------------- 62 63 62 CONTAINS 64 63 … … 72 71 INTEGER :: kindic 73 72 !!--------------------------------------------------------------------- 74 73 ! 75 74 CALL trcdit_wr( kt, kindic ) ! outputs for tracer concentration 76 75 CALL trcdii_wr( kt, kindic ) ! outputs for additional arrays 77 76 CALL trcdib_wr( kt, kindic ) ! outputs for biological trends 78 79 77 ! 80 78 END SUBROUTINE trc_dia 79 81 80 82 81 SUBROUTINE trcdit_wr( kt, kindic ) … … 108 107 CHARACTER (len=80) :: cltral 109 108 REAL(wp) :: zsto, zout, zdt 110 INTEGER :: iimi, iima, ijmi, ijma, ipk, it, itmod 109 INTEGER :: iimi, iima, ijmi, ijma, ipk, it, itmod, iiter 111 110 !!---------------------------------------------------------------------- 112 111 … … 138 137 139 138 ! define time axis 140 itmod = kt - nit trc000 + 1139 itmod = kt - nit000 + 1 141 140 it = kt 141 iiter = ( nit000 - 1 ) / nn_dttrc 142 142 143 143 ! Define NETCDF files and fields at beginning of first time step … … 146 146 IF(ll_print)WRITE(numout,*)'trcdit_wr kt=',kt,' kindic ',kindic 147 147 148 IF( kt == nit trc000 ) THEN148 IF( kt == nit000 ) THEN 149 149 150 150 ! Compute julian date from starting date of the run … … 152 152 zjulian = zjulian - adatrj ! set calendar origin to the beginning of the experiment 153 153 IF(lwp)WRITE(numout,*)' ' 154 IF(lwp)WRITE(numout,*)' Date 0 used :', nit trc000 &154 IF(lwp)WRITE(numout,*)' Date 0 used :', nit000 & 155 155 & ,' YEAR ', nyear, ' MONTH ', nmonth, ' DAY ', nday & 156 156 & ,'Julian day : ', zjulian … … 176 176 CALL histbeg( clhstnam, jpi, glamt, jpj, gphit, & 177 177 & iimi, iima-iimi+1, ijmi, ijma-ijmi+1, & 178 & nittrc000-ndttrc, zjulian, zdt, nhorit5, nit5 , domain_id=nidom)178 & iiter, zjulian, zdt, nhorit5, nit5 , domain_id=nidom) 179 179 180 180 ! Vertical grid for tracer : gdept … … 250 250 CHARACTER (len=80) :: cltral 251 251 INTEGER :: jl 252 INTEGER :: iimi, iima, ijmi, ijma, ipk, it, itmod 252 INTEGER :: iimi, iima, ijmi, ijma, ipk, it, itmod, iiter 253 253 REAL(wp) :: zsto, zout, zdt 254 254 !!---------------------------------------------------------------------- … … 281 281 282 282 ! define time axis 283 itmod = kt - nit trc000 + 1283 itmod = kt - nit000 + 1 284 284 it = kt 285 iiter = ( nit000 - 1 ) / nn_dttrc 285 286 286 287 ! 1. Define NETCDF files and fields at beginning of first time step … … 289 290 IF( ll_print ) WRITE(numout,*) 'trcdii_wr kt=', kt, ' kindic ', kindic 290 291 291 IF( kt == nit trc000 ) THEN292 IF( kt == nit000 ) THEN 292 293 293 294 ! Define the NETCDF files for additional arrays : 2D or 3D … … 302 303 CALL histbeg( clhstnam, jpi, glamt, jpj, gphit, & 303 304 & iimi, iima-iimi+1, ijmi, ijma-ijmi+1, & 304 & nittrc000-ndttrc, zjulian, zdt, nhoritd, nitd , domain_id=nidom )305 & iiter, zjulian, zdt, nhoritd, nitd , domain_id=nidom ) 305 306 306 307 ! Vertical grid for 2d and 3d arrays … … 367 368 368 369 # else 369 370 370 SUBROUTINE trcdii_wr( kt, kindic ) ! Dummy routine 371 371 INTEGER, INTENT ( in ) :: kt, kindic 372 372 END SUBROUTINE trcdii_wr 373 374 373 # endif 375 374 … … 392 391 !! IF kindic >0, output of fields before the time step loop 393 392 !!---------------------------------------------------------------------- 394 !!395 393 INTEGER, INTENT( in ) :: kt ! ocean time-step 396 394 INTEGER, INTENT( in ) :: kindic ! indicator of abnormal termination … … 401 399 CHARACTER (len=80) :: cltral 402 400 INTEGER :: ji, jj, jk, jl 403 INTEGER :: iimi, iima, ijmi, ijma, ipk, it, itmod 401 INTEGER :: iimi, iima, ijmi, ijma, ipk, it, itmod, iiter 404 402 REAL(wp) :: zsto, zout, zdt 405 403 !!---------------------------------------------------------------------- … … 433 431 434 432 ! define time axis 435 itmod = kt - nit trc000 + 1433 itmod = kt - nit000 + 1 436 434 it = kt 435 iiter = ( nit000 - 1 ) / nn_dttrc 437 436 438 437 ! Define NETCDF files and fields at beginning of first time step … … 441 440 IF(ll_print) WRITE(numout,*)'trcdib_wr kt=',kt,' kindic ',kindic 442 441 443 IF( kt == nit trc000 ) THEN442 IF( kt == nit000 ) THEN 444 443 445 444 ! Define the NETCDF files for biological trends … … 450 449 CALL histbeg( clhstnam, jpi, glamt, jpj, gphit, & 451 450 & iimi, iima-iimi+1, ijmi, ijma-ijmi+1, & 452 & nittrc000-ndttrc, zjulian, zdt, nhoritb, nitb , domain_id=nidom )451 & iiter, zjulian, zdt, nhoritb, nitb , domain_id=nidom ) 453 452 ! Vertical grid for biological trends 454 453 CALL histvert(nitb, 'deptht', 'Vertical T levels', 'm', ipk, gdept_0, ndepitb) … … 510 509 INTEGER, INTENT(in) :: kt 511 510 END SUBROUTINE trc_dia 512 513 511 #endif 514 512 -
branches/DEV_r2006_merge_TRA_TRC/NEMO/TOP_SRC/trcdta.F90
r1953 r2104 36 36 # include "top_substitute.h90" 37 37 !!---------------------------------------------------------------------- 38 !! NEMO/TOP 1.0 , LOCEAN-IPSL (2005)38 !! NEMO/TOP 3.3 , LOCEAN-IPSL (2010) 39 39 !! $Id$ 40 40 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 41 41 !!---------------------------------------------------------------------- 42 43 42 CONTAINS 44 43 45 !!----------------------------------------------------------------------46 !! Default case NetCDF file47 !!----------------------------------------------------------------------48 49 44 SUBROUTINE trc_dta( kt ) 50 45 !!---------------------------------------------------------------------- … … 63 58 !! 64 59 CHARACTER (len=39) :: clname(jptra) 65 INTEGER, PARAMETER :: & 66 jpmonth = 12 ! number of months 60 INTEGER, PARAMETER :: jpmonth = 12 ! number of months 67 61 INTEGER :: ji, jj, jn, jl 68 62 INTEGER :: imois, iman, i15, ik ! temporary integers 69 63 REAL(wp) :: zxy, zl 64 !!gm HERE the daymod should be used instead of computation of month and co !! 65 !!gm better in case of real calandar and leap-years ! 70 66 !!---------------------------------------------------------------------- 71 67 … … 74 70 IF( lutini(jn) ) THEN 75 71 76 IF ( kt == nit trc000 ) THEN72 IF ( kt == nit000 ) THEN 77 73 !! 3D tracer data 78 74 IF(lwp)WRITE(numout,*) … … 92 88 ! -------------------- 93 89 94 IF ( kt == nit trc000 .AND. nlectr(jn) == 0 ) THEN90 IF ( kt == nit000 .AND. nlectr(jn) == 0 ) THEN 95 91 ntrc1(jn) = 0 96 92 IF(lwp) WRITE(numout,*) ' trc_dta : Levitus tracer data monthly fields' … … 107 103 # if defined key_pisces 108 104 ! Read montly file 109 IF( ( kt == nit trc000 .AND. nlectr(jn) == 0) .OR. imois /= ntrc1(jn) ) THEN105 IF( ( kt == nit000 .AND. nlectr(jn) == 0) .OR. imois /= ntrc1(jn) ) THEN 110 106 nlectr(jn) = 1 111 107 … … 189 185 # else 190 186 ! Read init file only 191 IF( kt == nit trc000 ) THEN187 IF( kt == nit000 ) THEN 192 188 ntrc1(jn) = 1 193 189 CALL iom_get ( numtr(jn), jpdom_data, ctrcnm(jn), trdta(:,:,:,jn), ntrc1(jn) ) … … 196 192 ENDIF 197 193 # endif 198 199 194 ENDIF 200 195 -
branches/DEV_r2006_merge_TRA_TRC/NEMO/TOP_SRC/trcini.F90
r2087 r2104 41 41 !! * Substitutions 42 42 # include "domzgr_substitute.h90" 43 !!----------------------------------------------------------------------44 !! NEMO/TOP 1.0 , LOCEAN-IPSL (2005)45 !! $Id$46 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt)47 !!----------------------------------------------------------------------48 43 49 44 CONTAINS … … 123 118 # if defined key_dtatrc 124 119 ! Initialization of tracer from a file that may also be used for damping 125 CALL trc_dta( nit trc000 )120 CALL trc_dta( nit000 ) 126 121 DO jn = 1, jptra 127 122 IF( lutini(jn) ) trn(:,:,:,jn) = trdta(:,:,:,jn) * tmask(:,:,:) ! initialisation from file if required … … 138 133 139 134 IF( ln_zps .AND. .NOT. lk_trc_c1d ) & ! Partial steps: before horizontal gradient of passive 140 & CALL zps_hde( nit trc000, jptra, trb, gtru, gtrv ) ! tracers at the bottom ocean level135 & CALL zps_hde( nit000, jptra, trb, gtru, gtrv ) ! tracers at the bottom ocean level 141 136 142 137 … … 181 176 #endif 182 177 178 !!---------------------------------------------------------------------- 179 !! NEMO/TOP 3.3 , LOCEAN-IPSL (2010) 180 !! $Id$ 181 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 183 182 !!====================================================================== 184 183 END MODULE trcini -
branches/DEV_r2006_merge_TRA_TRC/NEMO/TOP_SRC/trcnam.F90
r2038 r2104 102 102 READ ( numnat, namtrc ) 103 103 104 !!Chris computes the first time step of tracer model105 nittrc000 = nit000 + nn_dttrc - 1106 107 104 DO jn = 1, jptra 108 105 ctrcnm(jn) = sn_tracer(jn)%clsname … … 118 115 WRITE(numout,*) ' Namelist : namtrc' 119 116 WRITE(numout,*) ' time step freq. for pass. trac. nn_dttrc = ', nn_dttrc 120 WRITE(numout,*) ' 1st time step for pass. trac. nittrc000 = ', nittrc000121 117 WRITE(numout,*) ' frequency of outputs for passive tracers nn_writetrc = ', nn_writetrc 122 118 WRITE(numout,*) ' restart LOGICAL for passive tr. ln_rsttr = ', ln_rsttr … … 200 196 #endif 201 197 198 !!---------------------------------------------------------------------- 199 !! NEMO/TOP 3.3 , LOCEAN-IPSL (2010) 200 !! $Id: $ 201 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 202 202 !!====================================================================== 203 203 END MODULE trcnam -
branches/DEV_r2006_merge_TRA_TRC/NEMO/TOP_SRC/trcrst.F90
r2038 r2104 47 47 !! * Substitutions 48 48 # include "top_substitute.h90" 49 !!----------------------------------------------------------------------50 !! NEMO/TOP 1.0 , LOCEAN-IPSL (2005)51 !! $Id$52 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt)53 !!----------------------------------------------------------------------54 49 55 50 CONTAINS … … 128 123 ! Time domain : restart 129 124 ! --------------------- 130 CALL trc_rst_cal( nit trc000, 'READ' ) ! calendar125 CALL trc_rst_cal( nit000, 'READ' ) ! calendar 131 126 132 127 IF( ln_trcadv_cen2 .OR. ln_trcadv_tvd ) THEN ; iarak0 = 1 … … 222 217 !! 223 218 !! According to namelist parameter nrstdt, 224 !! nn_rsttr = 0 no control on the date (nit trc000 is arbitrary).219 !! nn_rsttr = 0 no control on the date (nit000 is arbitrary). 225 220 !! nn_rsttr = 1 we verify that nit000 is equal to the last 226 221 !! time step of previous run + 1. … … 251 246 WRITE(numout,*) ' *** restart option' 252 247 SELECT CASE ( nn_rsttr ) 253 CASE ( 0 ) ; WRITE(numout,*) ' nn_rsttr = 0 : no control of nit trc000'248 CASE ( 0 ) ; WRITE(numout,*) ' nn_rsttr = 0 : no control of nit000' 254 249 CASE ( 1 ) ; WRITE(numout,*) ' nn_rsttr = 1 : no control the date at nit000 (use ndate0 read in the namelist)' 255 250 CASE ( 2 ) ; WRITE(numout,*) ' nn_rsttr = 2 : calendar parameters read in restart' … … 258 253 ENDIF 259 254 ! Control of date 260 IF( nit trc000 - NINT( zkt ) /= 1 .AND. nn_rsttr /= 0 ) &255 IF( nit000 - NINT( zkt ) /= 1 .AND. nn_rsttr /= 0 ) & 261 256 & CALL ctl_stop( ' ===>>>> : problem with nit000 for the restart', & 262 257 & ' verify the restart file or rerun with nn_rsttr = 0 (namelist)' ) … … 269 264 ELSE 270 265 ndastp = ndate0 - 1 ! ndate0 read in the namelist in dom_nam 271 adatrj = ( REAL( nit trc000-1, wp ) * rdttra(1) ) / rday266 adatrj = ( REAL( nit000-1, wp ) * rdttra(1) ) / rday 272 267 ! note this is wrong if time step has changed during run 273 268 ENDIF … … 369 364 #endif 370 365 366 !!---------------------------------------------------------------------- 367 !! NEMO/TOP 3.3 , LOCEAN-IPSL (2010) 368 !! $Id$ 369 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 371 370 !!====================================================================== 372 371 END MODULE trcrst -
branches/DEV_r2006_merge_TRA_TRC/NEMO/TOP_SRC/trcsms.F90
r2038 r2104 28 28 29 29 !!---------------------------------------------------------------------- 30 !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007)30 !! NEMO/TOP 3.3 , LOCEAN-IPSL (2010) 31 31 !! $Id$ 32 32 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) -
branches/DEV_r2006_merge_TRA_TRC/NEMO/TOP_SRC/trcstp.F90
r2038 r2104 4 4 !! Time-stepping : time loop of opa for passive tracer 5 5 !!====================================================================== 6 !! History : 1.0 ! 2004-03 (C. Ethe) Original 7 !!---------------------------------------------------------------------- 6 8 #if defined key_top 7 9 !!---------------------------------------------------------------------- 8 10 !! trc_stp : passive tracer system time-stepping 9 11 !!---------------------------------------------------------------------- 10 !! * Modules used11 12 USE oce_trc ! ocean dynamics and active tracers variables 12 13 USE trc … … 25 26 PRIVATE 26 27 27 !! * Routine accessibility28 PUBLIC trc_stp ! called by step28 PUBLIC trc_stp ! called by step 29 29 30 !!---------------------------------------------------------------------- 30 !! TOP 1.0 , LOCEAN-IPSL (2005)31 !! $Id: trcstp.F90 1285 2009-02-03 13:38:51Z cetlod$32 !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt31 !! NEMO/TOP 3.3 , LOCEAN-IPSL (2010) 32 !! $Id: $ 33 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 33 34 !!---------------------------------------------------------------------- 34 35 35 CONTAINS 36 36 … … 44 44 !! Compute the passive tracers trends 45 45 !! Update the passive tracers 46 !!47 !! History :48 !! 9.0 ! 04-03 (C. Ethe) Original49 46 !!------------------------------------------------------------------- 50 !! * Arguments51 47 INTEGER, INTENT( in ) :: kt ! ocean time-step index 52 48 CHARACTER (len=25) :: charout 49 !!------------------------------------------------------------------- 53 50 54 ! this ROUTINE is called only every nn_dttrc time step 55 IF( MOD( kt , nn_dttrc ) /= 0 ) RETURN 56 57 IF(ln_ctl) THEN 58 WRITE(charout,FMT="('kt =', I4,' d/m/y =',I2,I2,I4)") kt, nday, nmonth, nyear 59 CALL prt_ctl_trc_info(charout) 51 IF( MOD( kt - 1 , nn_dttrc ) == 0 ) THEN ! only every nn_dttrc time step 52 ! 53 IF(ln_ctl) THEN 54 WRITE(charout,FMT="('kt =', I4,' d/m/y =',I2,I2,I4)") kt, nday, nmonth, nyear 55 CALL prt_ctl_trc_info(charout) 56 ENDIF 57 ! 58 tra(:,:,:,:) = 0.e0 59 ! 60 IF( kt == nit000 .AND. lk_trdmld_trc ) & 61 & CALL trd_mld_trc_init ! trends: Mixed-layer 62 CALL trc_rst_opn( kt ) ! Open tracer restart file 63 IF( lk_iomput ) THEN ; CALL trc_wri( kt ) ! output of passive tracers 64 ELSE ; CALL trc_dia( kt ) 65 ENDIF 66 CALL trc_sms( kt ) ! tracers: sink and source 67 CALL trc_trp( kt ) ! transport of passive tracers 68 IF( kt == nit000 ) CALL iom_close( numrtr ) ! close input passive tracers restart file 69 IF( lrst_trc ) CALL trc_rst_wri( kt ) ! write tracer restart file 70 IF( lk_trdmld_trc ) CALL trd_mld_trc( kt ) ! trends: Mixed-layer 71 ! 60 72 ENDIF 61 62 tra(:,:,:,:) = 0.63 64 IF( kt == nittrc000 .AND. lk_trdmld_trc ) &65 & CALL trd_mld_trc_init ! trends: Mixed-layer66 CALL trc_rst_opn( kt ) ! Open tracer restart file67 CALL trc_sms( kt ) ! tracers: sink and source68 CALL trc_trp( kt ) ! transport of passive tracers69 IF( kt == nittrc000 ) CALL iom_close( numrtr ) ! close input passive tracers restart file70 IF( lrst_trc ) CALL trc_rst_wri( kt ) ! write tracer restart file71 IF( lk_iomput ) THEN72 CALL trc_wri( kt ) ! output of passive tracers73 ELSE74 CALL trc_dia( kt ) ! diagnostics75 ENDIF76 IF( lk_trdmld_trc ) CALL trd_mld_trc( kt ) ! trends: Mixed-layer77 73 78 74 END SUBROUTINE trc_stp … … 84 80 CONTAINS 85 81 SUBROUTINE trc_stp( kt ) ! Empty routine 86 INTEGER, INTENT(in) :: kt87 82 WRITE(*,*) 'trc_stp: You should not have seen this print! error?', kt 88 83 END SUBROUTINE trc_stp -
branches/DEV_r2006_merge_TRA_TRC/NEMO/TOP_SRC/trcwri.F90
r2038 r2104 28 28 !! * Substitutions 29 29 # include "top_substitute.h90" 30 !!----------------------------------------------------------------------31 !! NEMO/TOP 1.0 , LOCEAN-IPSL (2005)32 !! $Id: trcdia.F90 1450 2009-05-15 14:12:12Z cetlod $33 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt)34 !!----------------------------------------------------------------------35 30 36 31 CONTAINS … … 68 63 69 64 #if defined key_offline 70 IF( kt == nit trc000 ) THEN65 IF( kt == nit000 ) THEN 71 66 ! WRITE root name in date.file for use by postpro 72 67 IF(lwp) THEN … … 98 93 #endif 99 94 95 !!---------------------------------------------------------------------- 96 !! NEMO/TOP 3.3 , LOCEAN-IPSL (2010) 97 !! $Id: $ 98 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 100 99 !!====================================================================== 101 100 END MODULE trcwri
Note: See TracChangeset
for help on using the changeset viewer.