Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
No results found
Show changes
Showing
with 80 additions and 103 deletions
......@@ -24,7 +24,7 @@ MODULE dtadyn
USE dom_oce ! ocean domain: variables
#if defined key_qco
USE domqco ! variable volume
#else
#elif ! defined key_linssh
USE domvvl
#endif
USE zdf_oce ! ocean vertical physics: variables
......@@ -53,7 +53,7 @@ MODULE dtadyn
PUBLIC dta_dyn_init ! called by nemo_init
PUBLIC dta_dyn ! called by nemo_gcm
PUBLIC dta_dyn_atf ! called by nemo_gcm
#if ! defined key_qco
#if ! defined key_qco && ! defined key_linssh
PUBLIC dta_dyn_sf_interp ! called by nemo_gcm
#endif
#if defined key_sed_off
......@@ -191,9 +191,6 @@ CONTAINS
ahv_bbl(:,:) = sf_dyn(jf_vbl)%fnow(:,:,1) * vmask(:,:,1)
ENDIF
!
!
CALL eos( ts(:,:,:,:,Kmm), rhd, rhop, gdept_0(:,:,:) ) ! In any case, we need rhop
!
IF(sn_cfctl%l_prtctl) THEN ! print control
CALL prt_ctl(tab3d_1=ts(:,:,:,jp_tem,Kmm), clinfo1=' tn - : ', mask1=tmask )
CALL prt_ctl(tab3d_1=ts(:,:,:,jp_sal,Kmm), clinfo1=' sn - : ', mask1=tmask )
......@@ -345,6 +342,7 @@ CONTAINS
CALL iom_close( inum ) ! close file
ENDIF
!
#if ! defined key_linssh
#if defined key_qco
CALL dom_qco_r3c( ssh(:,:,Kbb), r3t(:,:,Kbb), r3u(:,:,Kbb), r3v(:,:,Kbb) )
CALL dom_qco_r3c( ssh(:,:,Kmm), r3t(:,:,Kmm), r3u(:,:,Kmm), r3v(:,:,Kmm) )
......@@ -356,6 +354,7 @@ CONTAINS
CALL dta_dyn_sf_interp( nit000, Kmm )
CALL dta_dyn_sf_interp( nit000, Kbb )
#endif
#endif
ENDIF
!
......@@ -390,7 +389,7 @@ CONTAINS
END SUBROUTINE dta_dyn_atf
#if ! defined key_qco
#if ! defined key_qco && ! defined key_linssh
SUBROUTINE dta_dyn_sf_interp( kt, Kmm )
!!---------------------------------------------------------------------
......
......@@ -62,7 +62,7 @@ MODULE nemogcm
USE prtctl ! Print control (prt_ctl_init routine)
USE timing ! Timing
USE lib_fortran ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined)
#if defined key_qco
#if defined key_qco || defined key_linssh
USE stpmlf , ONLY : Nbb, Nnn, Naa, Nrhs ! time level indices
#else
USE step , ONLY : Nbb, Nnn, Naa, Nrhs ! time level indices
......@@ -150,7 +150,7 @@ CONTAINS
Nnn = Naa
Naa = Nrhs
!
# if ! defined key_qco
# if ! defined key_qco && ! defined key_linssh
IF( .NOT.ln_linssh ) CALL dta_dyn_sf_interp( istp, Nnn ) ! calculate now grid parameters
# endif
......@@ -327,6 +327,7 @@ CONTAINS
IF( nn_hls == 1 ) THEN
CALL ctl_stop( 'STOP', 'nemogcm : Loop fusion can be used only with extra-halo' )
ENDIF
CALL ctl_warn( 'nemo_init', 'you use key_loop_fusion, this may significantly slow down NEMO performances' )
#endif
CALL halo_mng_init()
......
*******
Sources
*******
.. todo::
:file:`ICE`: |NEMO-ICE|
:file:`NST`: AGRIF for embedded zooms
:file:`OCE`: |NEMO-OCE|
:file:`TOP`: |NEMO-MBG|
../../doc/rst/source/cplg.rst
\ No newline at end of file
......@@ -354,6 +354,7 @@ CONTAINS
IF( nn_hls == 1 ) THEN
CALL ctl_stop( 'STOP', 'nemogcm : Loop fusion can be used only with extra-halo' )
ENDIF
CALL ctl_warn( 'nemo_init', 'you use key_loop_fusion, this may significantly slow down NEMO performances' )
#endif
CALL halo_mng_init()
......@@ -390,6 +391,7 @@ CONTAINS
#if defined key_agrif
uu(:,:,:,:) = 0.0_wp ; vv(:,:,:,:) = 0.0_wp ; ts(:,:,:,:,:) = 0.0_wp ! needed for interp done at initialization phase
uu_b(:,:,:) = 0.0_wp ; vv_b(:,:,:) = 0.0_wp
#endif
! ! external forcing
CALL sbc_init( Nbb, Nnn, Naa ) ! Forcings : surface module
......
......@@ -79,9 +79,19 @@ CONTAINS
INTEGER :: ji, jj ! dummy loop indices
REAL(wp) :: ztinta ! ratio applied to after records when doing time interpolation
REAL(wp) :: ztintb ! ratio applied to before records when doing time interpolation
CHARACTER(len=4),SAVE :: stype
!!----------------------------------------------------------------------
!
IF( ln_timing ) CALL timing_start( 'sbc_ssm')
IF( kt == nit000 ) THEN
IF( ln_TEOS10 ) THEN
stype='abs' ! teos-10: using absolute salinity (sst is converted to potential temperature for the surface module)
ELSE IF( ln_EOS80 ) THEN
stype='pra' ! eos-80: using practical salinity
ELSE IF ( ln_SEOS) THEN
stype='seos' ! seos using Simplified Equation of state (sst is converted to potential temperature for the surface module)
ENDIF
ENDIF
IF ( l_sasread ) THEN
IF( nfld_3d > 0 ) CALL fld_read( kt, 1, sf_ssm_3d ) !== read data at kt time step ==!
......@@ -156,8 +166,8 @@ CONTAINS
IF( l_initdone ) THEN ! Mean value at each nn_fsbc time-step !
CALL iom_put( 'ssu_m', ssu_m )
CALL iom_put( 'ssv_m', ssv_m )
CALL iom_put( 'sst_m', sst_m )
CALL iom_put( 'sss_m', sss_m )
CALL iom_put( 'sst_m_pot', sst_m )
CALL iom_put( 'sss_m_'//stype, sss_m )
CALL iom_put( 'ssh_m', ssh_m )
CALL iom_put( 'e3t_m', e3t_m )
IF( ln_read_frq ) CALL iom_put( 'frq_m', frq_m )
......
......@@ -21,7 +21,7 @@ MODULE nemogcm
USE usrdef_nam ! user defined configuration
USE bdyini ! open boundary cond. setting (bdy_init routine)
USE istate ! initial state setting (istate_init routine)
USE wet_dry , ONLY : ln_wd_il, ln_wd_dl, ln_wd_dl_bc ! switch off wetting and drying
USE wet_dry , ONLY : ln_wd_dl, ln_wd_dl_bc ! switch off wetting and drying
USE isf_oce , ONLY : ln_isf ! ice shelf
USE trd_oce , ONLY : l_trddyn ! dynamical trend logical
USE dia25h , ONLY : ln_dia25h ! 25h mean output
......@@ -278,6 +278,7 @@ CONTAINS
IF( nn_hls == 1 ) THEN
CALL ctl_stop( 'STOP', 'nemogcm : Loop fusion can be used only with extra-halo' )
ENDIF
CALL ctl_warn( 'nemo_init', 'you use key_loop_fusion, this may significantly slow down NEMO performances' )
#endif
CALL halo_mng_init()
......@@ -298,7 +299,7 @@ CONTAINS
IF( ln_timing ) CALL timing_start( 'nemo_init')
!
CALL phy_cst ! Physical constants
ln_wd_il = .FALSE. ; ln_wd_dl = .FALSE. ; ln_wd_dl_bc = .FALSE. ! No wetting and drying
ln_wd_dl = .FALSE. ; ln_wd_dl_bc = .FALSE. ! No wetting and drying
!
! ! SWE: Set rho0 and associated variables (eosbn2 not used)
rho0 = 1026._wp !: volumic mass of reference [kg/m3]
......
......@@ -196,9 +196,9 @@ CONTAINS
ENDIF
ENDIF
CALL lbc_lnk( 'stp_MLF', uu(:,:,:,Nnn), 'U', -1., vv(:,:,:,Nnn), 'V', -1., & !* local domain boundaries
& uu(:,:,:,Naa), 'U', -1., vv(:,:,:,Naa), 'V', -1. )
IF (nn_hls==2) CALL lbc_lnk( 'stp_MLF', r3u(:,:,Naa), 'U', 1., r3v(:,:,Naa), 'V', 1.)
CALL lbc_lnk( 'stp_MLF', uu(:,:,:,Nnn), 'U', -1._wp, vv(:,:,:,Nnn), 'V', -1._wp, & !* local domain boundaries
& uu(:,:,:,Naa), 'U', -1._wp, vv(:,:,:,Naa), 'V', -1._wp )
IF (nn_hls==2) CALL lbc_lnk( 'stp_MLF', r3u(:,:,Naa), 'U', 1._wp, r3v(:,:,Naa), 'V', 1._wp)
!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
! Set boundary conditions, time filter and swap time levels
......
......@@ -170,8 +170,8 @@ CONTAINS
END_3D
ENDIF
!
CALL lbc_lnk( 'stp_RK3', uu(:,:,:,Naa), 'U', -1., vv(:,:,:,Naa), 'V', -1. )
IF (nn_hls==2) CALL lbc_lnk( 'stp_RK3', r3u(:,:,Naa), 'U', 1., r3v(:,:,Naa), 'V', 1.)
CALL lbc_lnk( 'stp_RK3', uu(:,:,:,Naa), 'U', -1._wp, vv(:,:,:,Naa), 'V', -1._wp )
IF (nn_hls==2) CALL lbc_lnk( 'stp_RK3', r3u(:,:,Naa), 'U', 1._wp, r3v(:,:,Naa), 'V', 1._wp)
!
! !== Swap time levels ==!
Nrhs= Nnn
......@@ -236,8 +236,8 @@ CONTAINS
END_3D
ENDIF
!
CALL lbc_lnk( 'stp_RK3', uu(:,:,:,Naa), 'U', -1., vv(:,:,:,Naa), 'V', -1. )
IF (nn_hls==2) CALL lbc_lnk( 'stp_RK3', r3u(:,:,Naa), 'U', 1., r3v(:,:,Naa), 'V', 1.)
CALL lbc_lnk( 'stp_RK3', uu(:,:,:,Naa), 'U', -1._wp, vv(:,:,:,Naa), 'V', -1._wp )
IF (nn_hls==2) CALL lbc_lnk( 'stp_RK3', r3u(:,:,Naa), 'U', 1._wp, r3v(:,:,Naa), 'V', 1._wp)
!
! !== Swap time levels ==!
Nrhs= Nnn
......@@ -300,8 +300,8 @@ CONTAINS
END_3D
ENDIF
!
CALL lbc_lnk( 'stp_RK3', uu(:,:,:,Naa), 'U', -1., vv(:,:,:,Naa), 'V', -1. )
IF (nn_hls==2) CALL lbc_lnk( 'stp_RK3', r3u(:,:,Naa), 'U', 1., r3v(:,:,Naa), 'V', 1.)
CALL lbc_lnk( 'stp_RK3', uu(:,:,:,Naa), 'U', -1._wp, vv(:,:,:,Naa), 'V', -1._wp )
IF (nn_hls==2) CALL lbc_lnk( 'stp_RK3', r3u(:,:,Naa), 'U', 1._wp, r3v(:,:,Naa), 'V', 1._wp)
!
! !== Swap time levels ==!
!
......
......@@ -54,12 +54,7 @@ CONTAINS
IF(lwp) WRITE(numout,*)
IF(lwp) WRITE(numout,*) ' trc_sms_age: AGE model'
IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~'
IF( l_1st_euler .OR. ln_top_euler ) THEN
tr(:,:,:,jp_age,Kbb) = tr(:,:,:,jp_age,Kmm)
ENDIF
!
DO jk = 1, nla_age
tr(:,:,jk,jp_age,Krhs) = rn_age_kill_rate * tr(:,:,jk,jp_age,Kbb)
END DO
......
......@@ -55,8 +55,6 @@ CONTAINS
!! add this trend now to the general trend of tracer (ta,sa,tr(:,:,:,:,Krhs)):
!! tr(:,:,:,:,Krhs) = tr(:,:,:,:,Krhs) + dz(tr(:,:,:,:,Kmm) ww)
!!
!! IF 'key_diabio' is defined, the now vertical advection
!! trend of passive tracers is saved for futher diagnostics.
!!---------------------------------------------------------------------
INTEGER, INTENT( in ) :: kt ! ocean time-step index
INTEGER, INTENT( in ) :: Kmm, Krhs ! time level indices
......
......@@ -291,7 +291,7 @@ CONTAINS
ENDIF
END IF
ll_bc = ( ln_trcbc .AND. lltrcbc ) .OR. ln_hydrofe .OR. ln_ironsed .OR. ln_ironice
ll_bc = ( ln_trcbc .AND. lltrcbc ) .OR. ln_hydrofe .OR. ln_ironsed .OR. ln_ironice .OR. ln_sediment
ll_dust = ln_trc_sbc(jpfer) .OR. ln_trc_sbc(jppo4) .OR. ln_trc_sbc(jpsil) .OR. ln_sediment
ll_ndepo = ln_trc_sbc(jpno3) .OR. ln_trc_sbc(jpnh4)
ll_river = ln_trc_cbc(jpno3)
......
......@@ -82,13 +82,16 @@ CONTAINS
! Parameterization from Pham and Ito (2018)
! -------------------------------------------------
xfecolagg(:,:,:) = ligand * 1E9 + MAX(0., chemo2(:,:,:) - tr(:,:,:,jpoxy,Kbb) ) / 400.E-6
IF( ln_ligvar ) THEN
ztotlig(:,:,:) = 0.09 * 0.667 * tr(:,:,:,jpdoc,Kbb) * 1E6 + xfecolagg(:,:,:)
ztotlig(:,:,:) = MIN( ztotlig(:,:,:), 10. )
ELSE
IF( ln_ligand ) THEN ; ztotlig(:,:,:) = tr(:,:,:,jplgw,Kbb) * 1E9
ELSE ; ztotlig(:,:,:) = ligand * 1E9
ENDIF
!
IF( ln_ligand ) THEN
ztotlig(:,:,:) = tr(:,:,:,jplgw,Kbb) * 1E9
ELSE
IF( ln_ligvar ) THEN
ztotlig(:,:,:) = 0.09 * 0.667 * tr(:,:,:,jpdoc,Kbb) * 1E6 + xfecolagg(:,:,:)
ztotlig(:,:,:) = MIN( ztotlig(:,:,:), 10. )
ELSE
ztotlig(:,:,:) = ligand * 1E9
ENDIF
ENDIF
! ------------------------------------------------------------
......@@ -124,13 +127,22 @@ CONTAINS
! prognostic or non variable, all the colloidal fraction is supposed
! to coagulate
! ----------------------------------------------------------------------
IF (ln_ligand) THEN
zfecoll(:,:,:) = 0.5 * zFeL1(:,:,:) * MAX(0., tr(:,:,:,jplgw,Kbb) - xfecolagg(:,:,:) * 1.0E-9 ) / ( tr(:,:,:,jplgw,Kbb) + rtrn )
IF( ln_ligand ) THEN
DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1)
zfecoll(ji,jj,jk) = 0.5 * zFeL1(ji,jj,jk) * MAX(0., ztotlig(ji,jj,jk) - xfecolagg(ji,jj,jk) ) &
& / ( ztotlig(ji,jj,jk) + rtrn )
END_3D
ELSE
IF (ln_ligvar) THEN
zfecoll(:,:,:) = 0.5 * zFeL1(:,:,:) * MAX(0., tr(:,:,:,jplgw,Kbb) - xfecolagg(:,:,:) * 1.0E-9 ) / ( tr(:,:,:,jplgw,Kbb) + rtrn )
IF( ln_ligvar ) THEN
DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1)
zfecoll(ji,jj,jk) = 0.5 * zFeL1(ji,jj,jk) * MAX(0., ztotlig(ji,jj,jk) - xfecolagg(ji,jj,jk) ) &
& / ( ztotlig(ji,jj,jk) + rtrn )
END_3D
ELSE
zfecoll(:,:,:) = 0.5 * zFeL1(:,:,:)
DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1)
zfecoll(ji,jj,jk) = 0.5 * zFeL1(ji,jj,jk) * MAX(0., 0.09 * 0.667 * tr(ji,jj,jk,jpdoc,Kbb) * 1E6 ) &
& / ( ztotlig(ji,jj,jk) + rtrn )
END_3D
ENDIF
ENDIF
......
......@@ -242,7 +242,7 @@ CONTAINS
xfracal(ji,jj,jk) = caco3r * MIN( zlim1, zlim2, zlim3 ) &
& * ztem1 / ( 0.1 + ztem1 ) &
& * MAX( 1., tr(ji,jj,jk,jpphy,Kbb) * 1.e6 / 2. ) &
& * MAX( 1., tr(ji,jj,jk,jpphy,Kbb) * xsizephy ) &
& * zetot1 * zetot2 &
& * ( 1. + EXP(-ztem2 * ztem2 / 25. ) ) &
& * MIN( 1., 50. / ( hmld(ji,jj) + rtrn ) )
......@@ -250,18 +250,6 @@ CONTAINS
xfracal(ji,jj,jk) = MAX( 0.02, xfracal(ji,jj,jk) )
END_3D
!
DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1)
! denitrification factor computed from O2 levels
nitrfac(ji,jj,jk) = MAX( 0.e0, 0.4 * ( 6.e-6 - tr(ji,jj,jk,jpoxy,Kbb) ) &
& / ( oxymin + tr(ji,jj,jk,jpoxy,Kbb) ) )
nitrfac(ji,jj,jk) = MIN( 1., nitrfac(ji,jj,jk) )
!
! denitrification factor computed from NO3 levels
nitrfac2(ji,jj,jk) = MAX( 0.e0, ( 1.E-6 - tr(ji,jj,jk,jpno3,Kbb) ) &
& / ( 1.E-6 + tr(ji,jj,jk,jpno3,Kbb) ) )
nitrfac2(ji,jj,jk) = MIN( 1., nitrfac2(ji,jj,jk) )
END_3D
!
IF( lk_iomput .AND. knt == nrdttrc ) THEN ! save output diagnostics
CALL iom_put( "xfracal", xfracal(:,:,:) * tmask(:,:,:) ) ! euphotic layer deptht
CALL iom_put( "LNnut" , xlimphy(:,:,:) * tmask(:,:,:) ) ! Nutrient limitation term
......
......@@ -177,7 +177,7 @@ CONTAINS
zdiffdn = exp( -ABS(log(1.67 * sizen(ji,jj,jk) / (5.0 * sized(ji,jj,jk) + rtrn )) )**2 / zsigma**2 )
ztmp1 = xpref2n * zcompaph * ( zcompaph + zdiffdn * zcompadi ) / ( 1.0 + zdiffdn )
ztmp2 = xpref2c * zcompapoc**2
ztmp3 = xpref2d * zcompadi * ( zdiffdn * zcompadi + zcompaph ) / ( 1.0 + zdiffdn )
ztmp3 = xpref2d * zcompadi * ( zcompadi + zdiffdn * zcompaph ) / ( 1.0 + zdiffdn )
ztmp4 = xpref2z * zcompaz**2
ztmptot = ztmp1 + ztmp2 + ztmp3 + ztmp4 + rtrn
ztmp1 = ztmp1 / ztmptot
......
......@@ -118,7 +118,7 @@ CONTAINS
! a standard parameterisation with a constant lability
! -----------------------------------------------------------------------
ztremint(:,:,:) = zremigoc(:,:,:)
DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1)
DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 2, jpkm1)
IF (tmask(ji,jj,jk) == 1.) THEN
zdep = hmld(ji,jj)
!
......
......@@ -27,7 +27,6 @@ MODULE p4zprod
REAL(wp), PUBLIC :: pislopen !: P-I slope of nanophytoplankton
REAL(wp), PUBLIC :: pisloped !: P-I slope of diatoms
REAL(wp), PUBLIC :: xadap !: Adaptation factor to low light
REAL(wp), PUBLIC :: excretn !: Excretion ratio of nanophyto
REAL(wp), PUBLIC :: excretd !: Excretion ratio of diatoms
REAL(wp), PUBLIC :: bresp !: Basal respiration rate
......@@ -69,8 +68,8 @@ CONTAINS
INTEGER, INTENT(in) :: Kbb, Kmm, Krhs ! time level indices
!
INTEGER :: ji, jj, jk
REAL(wp) :: zsilfac, znanotot, zdiattot, zconctemp, zconctemp2
REAL(wp) :: zratio, zmax, zsilim, ztn, zadap, zlim, zsiborn
REAL(wp) :: zsilfac, znanotot, zdiattot
REAL(wp) :: zratio, zmax, zsilim, ztn, zlim, zsiborn
REAL(wp) :: zpptot, zpnewtot, zpregtot, zprochln, zprochld
REAL(wp) :: zproddoc, zprodsil, zprodfer, zprodlig
REAL(wp) :: zpislopen, zpisloped, zfact
......@@ -112,8 +111,9 @@ CONTAINS
DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1)
IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN
zval = 24.0
IF( gdepw(ji,jj,jk+1,Kmm) <= hmld(ji,jj) ) THEN
zval = MIN(1., heup_01(ji,jj) / ( hmld(ji,jj) + rtrn ))
zval = zval * MIN(1., heup_01(ji,jj) / ( hmld(ji,jj) + rtrn ))
ENDIF
zmxl_chl(ji,jj,jk) = zval / 24.
zmxl_fac(ji,jj,jk) = 1.0 - exp( -0.26 * zval )
......@@ -143,23 +143,19 @@ CONTAINS
! -----------------------------------------------------------------------
DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1)
IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN
ztn = MAX( 0., ts(ji,jj,jk,jp_tem,Kmm) - 15. )
zadap = xadap * ztn / ( 2.+ ztn )
zconctemp = MAX( 0.e0 , tr(ji,jj,jk,jpdia,Kbb) - xsizedia )
zconctemp2 = tr(ji,jj,jk,jpdia,Kbb) - zconctemp
!
! The initial slope of the PI curve can be increased for nano
! to account for photadaptation, for instance in the DCM
! This parameterization is adhoc and should be either
! improved or removed in future versions of the model
! Nanophytoplankton
zpislopeadn(ji,jj,jk) = pislopen * ( 1.+ zadap * EXP( -0.25 * enano(ji,jj,jk) ) ) &
& * tr(ji,jj,jk,jpnch,Kbb) /( tr(ji,jj,jk,jpphy,Kbb) * 12. + rtrn)
zpislopeadn(ji,jj,jk) = pislopen * tr(ji,jj,jk,jpnch,Kbb) &
& /( tr(ji,jj,jk,jpphy,Kbb) * 12. + rtrn)
! Diatoms
zpislopeadd(ji,jj,jk) = (pislopen * zconctemp2 + pisloped * zconctemp) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn ) &
& * tr(ji,jj,jk,jpdch,Kbb) /( tr(ji,jj,jk,jpdia,Kbb) * 12. + rtrn)
zpislopeadd(ji,jj,jk) = pisloped * tr(ji,jj,jk,jpdch,Kbb) &
& /( tr(ji,jj,jk,jpdia,Kbb) * 12. + rtrn)
ENDIF
END_3D
......@@ -435,7 +431,7 @@ CONTAINS
INTEGER :: ios ! Local integer
!
! Namelist block
NAMELIST/namp4zprod/ pislopen, pisloped, xadap, bresp, excretn, excretd, &
NAMELIST/namp4zprod/ pislopen, pisloped, bresp, excretn, excretd, &
& chlcnm, chlcdm, chlcmin, fecnm, fecdm, grosip
!!----------------------------------------------------------------------
!
......@@ -456,7 +452,6 @@ CONTAINS
WRITE(numout,*) ' Namelist : namp4zprod'
WRITE(numout,*) ' mean Si/C ratio grosip =', grosip
WRITE(numout,*) ' P-I slope pislopen =', pislopen
WRITE(numout,*) ' Acclimation factor to low light xadap =', xadap
WRITE(numout,*) ' excretion ratio of nanophytoplankton excretn =', excretn
WRITE(numout,*) ' excretion ratio of diatoms excretd =', excretd
WRITE(numout,*) ' basal respiration in phytoplankton bresp =', bresp
......
......@@ -95,15 +95,13 @@ CONTAINS
! recent version of PISCES with bacteria.
! ----------------------------------------------------------------
DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1)
zdep = MAX( hmld(ji,jj), heup_01(ji,jj) )
zdep = MAX( hmld(ji,jj), heup_01(ji,jj), gdept(ji,jj,1,Kmm) )
IF ( gdept(ji,jj,jk,Kmm) < zdep ) THEN
zdepbac(ji,jj,jk) = 0.6 * ( MAX(0.0, tr(ji,jj,jk,jpzoo,Kbb) + tr(ji,jj,jk,jpmes,Kbb) ) * 1.0E6 )**0.6 * 1.E-6
ztempbac(ji,jj) = zdepbac(ji,jj,jk)
! IF( gdept(ji,jj,jk,Kmm) >= zdep ) THEN
ELSE
zdepmin = MIN( 1., zdep / gdept(ji,jj,jk,Kmm) )
zdepbac (ji,jj,jk) = zdepmin**0.683 * ztempbac(ji,jj)
! zdepeff(ji,jj,jk) = zdepeff(ji,jj,jk) * zdepmin**0.3
zdepeff(ji,jj,jk) = zdepeff(ji,jj,jk) * zdepmin**0.6
ENDIF
END_3D
......@@ -180,8 +178,8 @@ CONTAINS
! Bacteries are obliged to take up iron from the water. Some
! studies (especially at Papa) have shown this uptake to be significant
! ----------------------------------------------------------
zbactfer = feratb * 0.6_wp * xstep * tgfunc(ji,jj,jk) * xlimbacl(ji,jj,jk) * tr(ji,jj,jk,jpfer,Kbb) &
& / ( xkferb + tr(ji,jj,jk,jpfer,Kbb) ) * zdepeff(ji,jj,jk) * zdepbac(ji,jj,jk)
zbactfer = feratb * 0.6_wp * xstep * tgfunc(ji,jj,jk) * xlimbacl(ji,jj,jk) * biron(ji,jj,jk) &
& / ( xkferb + biron(ji,jj,jk) ) * zdepeff(ji,jj,jk) * zdepbac(ji,jj,jk)
! Only the transfer of iron from its dissolved form to particles
! is treated here. The GGE of bacteria supposed to be equal to
......
......@@ -118,7 +118,7 @@ CONTAINS
!
zflx = ( tr(ji,jj,ikt,jpgoc,Kbb) * zwsbio4(ji,jj) &
& + tr(ji,jj,ikt,jppoc,Kbb) * zwsbio3(ji,jj) ) * 1E6
zbureff(ji,jj) = 0.013 + 0.53 * zflx**2 / ( 7.0 + zflx )**2
zbureff(ji,jj) = 0.013 + 0.53 * zflx**2 / ( 7.0 + zflx )**2 * MIN(gdepw(ji,jj,ikt+1,Kmm) / 1000.00, 1.0)
ENDIF
END_2D
!
......@@ -251,7 +251,7 @@ CONTAINS
zfact = zlim * rfact2
ztrfer = biron(ji,jj,jk) / ( concfediaz + biron(ji,jj,jk) )
ztrpo4(ji,jj,jk) = tr(ji,jj,jk,jppo4,Kbb) / ( 1E-6 + tr(ji,jj,jk,jppo4,Kbb) )
ztrdop(ji,jj,jk) = tr(ji,jj,jk,jpdop,Kbb) / ( 1E-6 + tr(ji,jj,jk,jpdop,Kbb) ) * (1. - ztrpo4(ji,jj,jk))
ztrdop(ji,jj,jk) = tr(ji,jj,jk,jpdop,Kbb) / ( 10E-6 + tr(ji,jj,jk,jpdop,Kbb) ) * (1. - ztrpo4(ji,jj,jk))
ztrdp = ztrpo4(ji,jj,jk) + ztrdop(ji,jj,jk)
nitrpot(ji,jj,jk) = zmudia * r1_rday * zfact * MIN( ztrfer, ztrdp ) * zlight(ji,jj,jk)
END_3D
......@@ -288,7 +288,7 @@ CONTAINS
tr(ji,jj,jk,jpdon,Krhs) = tr(ji,jj,jk,jpdon,Krhs) + zfact * 1.0 / 3.0
tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zfact * 1.0 / 3.0
tr(ji,jj,jk,jpdop,Krhs) = tr(ji,jj,jk,jpdop,Krhs) + 16.0 / 46.0 * zfact / 3.0 &
& - 16.0 / 46.0 * zfact * ztrdop(ji,jj,jk) &
& - 16.0 / 46.0 * zfact * 2.0 / 3.0 * ztrdop(ji,jj,jk) &
& / (ztrpo4(ji,jj,jk) + ztrdop(ji,jj,jk) + rtrn)
tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) + zfact * 1.0 / 3.0 * 2.0 / 3.0
tr(ji,jj,jk,jppon,Krhs) = tr(ji,jj,jk,jppon,Krhs) + zfact * 1.0 / 3.0 * 2.0 /3.0
......
......@@ -104,13 +104,7 @@ CONTAINS
IF(lwp) write(numout,*) ' PISCES Biology time step rfact2 = ', rfact2
IF(lwp) WRITE(numout,*)
ENDIF
IF( l_1st_euler .OR. ln_top_euler ) THEN
DO jn = jp_pcs0, jp_pcs1 ! SMS on tracer without Asselin time-filter
tr(:,:,:,jn,Kbb) = tr(:,:,:,jn,Kmm)
END DO
ENDIF
!
DO jn = jp_pcs0, jp_pcs1 ! Store the tracer concentrations before entering PISCES
ztrbbio(:,:,:,jn) = tr(:,:,:,jn,Kbb)
END DO
......