Commit 4e171ca6 authored by dumoda01's avatar dumoda01

Modification du modele bio_ismer par l'ajout de diagnostics (lumlim2, etc.) et...

Modification du modele bio_ismer par l'ajout de diagnostics (lumlim2, etc.) et l'ajout de coefficients au module de dependence en temperature.
parent 5f398854
......@@ -589,6 +589,10 @@
do i=1,nlev
cc(6,i) = amm(i)
end do
else if (j==1 .and. bio_model==1) then
do i=1,nlev
cc(1,i) = nit(i)
end do
else
! do advection step due to settling or rising
call adv_center(nlev,dt,h,h,ws(j,:),flux, &
......@@ -754,9 +758,12 @@
if (allocated(var_long)) deallocate(var_long)
!DD
if (allocated(lumlim)) deallocate(lumlim)
if (allocated(nitlim)) deallocate(nitlim)
if (allocated(ammlim)) deallocate(ammlim)
if (allocated(lumlim1)) deallocate(lumlim1)
if (allocated(nitlim1)) deallocate(nitlim1)
if (allocated(ammlim1)) deallocate(ammlim1)
if (allocated(lumlim2)) deallocate(lumlim2)
if (allocated(nitlim2)) deallocate(nitlim2)
if (allocated(ammlim2)) deallocate(ammlim2)
! The external provide arrays
if (allocated(h)) deallocate(h)
......@@ -842,14 +849,23 @@
!DD
allocate(lumlim(0:nlev),stat=rc)
if (rc /= 0) stop 'init_bio(): Error allocating (lumlim)'
allocate(lumlim1(0:nlev),stat=rc)
if (rc /= 0) stop 'init_bio(): Error allocating (lumlim1)'
allocate(nitlim1(0:nlev),stat=rc)
if (rc /= 0) stop 'init_bio(): Error allocating (nitlim1)'
allocate(ammlim1(0:nlev),stat=rc)
if (rc /= 0) stop 'init_bio(): Error allocating (ammlim1)'
allocate(lumlim2(0:nlev),stat=rc)
if (rc /= 0) stop 'init_bio(): Error allocating (lumlim2)'
allocate(nitlim(0:nlev),stat=rc)
if (rc /= 0) stop 'init_bio(): Error allocating (nitlim)'
allocate(nitlim2(0:nlev),stat=rc)
if (rc /= 0) stop 'init_bio(): Error allocating (nitlim2)'
allocate(ammlim(0:nlev),stat=rc)
if (rc /= 0) stop 'init_bio(): Error allocating (ammlim)'
allocate(ammlim2(0:nlev),stat=rc)
if (rc /= 0) stop 'init_bio(): Error allocating (ammlim2)'
! The external provide arrays
allocate(h(0:nlev),stat=rc)
......
......@@ -271,7 +271,7 @@
!
! !USES:
use observations, only: nprof,aprof !CHG3-5
use meanflow, only: nit,amm !CHG3-5
use meanflow, only: nit,amm,T,S !CHG3-5
IMPLICIT NONE
......@@ -540,7 +540,7 @@
! Original author(s): Hans Burchard, Karsten Bolding
!
! !LOCAL VARIABLES:
REALTYPE :: ff,fac,fac2,min67,q1,q2
REALTYPE :: ff,fac,min67,q1,q2
REALTYPE :: Ps !CHG1
integer :: i,j,ci
!EOP
......@@ -576,11 +576,11 @@
fac=(cc(z,ci)+z0)/(k3*(r1*cc(p,ci)+r2*cc(b,ci)+r3*cc(d,ci))+ &
r1*cc(p,ci)**2+r2*cc(b,ci)**2+r3*cc(d,ci)**2)
min67=min(cc(a,ci),eta*cc(l,ci))
! Light and nutrient limitation factors
lumlim(ci)=ff
nitlim(ci)=q1
ammlim(ci)=q2
lumlim1(ci)=ff
nitlim1(ci)=q1
ammlim1(ci)=q2
dd(p,d,ci)=mu1*(cc(p,ci)+p0)/(k5+cc(p,ci)+p0)*cc(p,ci) &
+(1.-beta)*gmax*r1*cc(p,ci)**2*fac
......@@ -599,11 +599,6 @@
dd(a,b,ci)=vb*min67/(k4+min67+cc(l,ci))*(cc(b,ci)+b0)
dd(l,b,ci)=vb*cc(l,ci)/(k4+min67+cc(l,ci))*(cc(b,ci)+b0)
! Taux de chute du phytoplancton en fonction de la croissance
! ws(p,ci)=w_pmin+(w_pmax-w_pmin)*exp(-ff/theta)
! ws(p,ci)=w_pmax-(w_pmax-w_pmin)*(ff/theta/(1.+ff/theta))
ws(p,ci)=w_p
do i=1,numc
do j=1,numc
pp(i,j,ci)=dd(j,i,ci)
......
......@@ -544,9 +544,11 @@
! !LOCAL VARIABLES:
REALTYPE :: amr1(1:nlev),amr2(1:nlev)
REALTYPE :: hmr1(1:nlev),hmr2(1:nlev)
REALTYPE :: fac1,fac2,minal,qn1,qa1,qn2,qa2
REALTYPE :: fac1,fac2,fac3,fac4
REALTYPE :: minal,qn1,qa1,qn2,qa2
REALTYPE :: ps1,ps2,ff1,ff2
REALTYPE :: Ea,Eh,kBeV,T0,ca,ch
REALTYPE :: Ea,Eh,kBeV,T0
REALTYPE :: amratio,hmratio,ca1,ca2,ch1,ch2
integer :: i,j,ci
!EOP
!-----------------------------------------------------------------------
......@@ -603,31 +605,45 @@
Ea = 0.32 ! Activation energy for autotrophs (eV)
kBeV = 8.62e-5 ! Boltzmann constant (eV K-1)
T0 = 273.15-1.9 ! Temperature at which metabolism stops
ca = 1.0
ch = 1.0
! The mass ratio between pico-phytoplankton (p1, 1 um) and
! nano- and micro-phytoplankton (p2, 10 um) is approximately 1:1e3,
! which translates into a ratio of (1e3)**0.25 = 5.62 between
! their respective metabolic rates, according to the MTE. The same
! ratio is applied to micro-zooplankton (100 um) versus
! meso-zooplankton (1000 um).
! Autotrophs
! metabolic rate coefficient (a(T0) in Gillooly et al. 2002 in kg^1/4 s^-1)
! they are tuned to
ca1 = 3.61 ! pico-phytoplankton
ca2 = 14.58 ! micro-phytoplankton
ch1 = 3.265 ! micro-zooplankton
ch2 = 24.923 ! meso-zooplankton
! The mass ratio between pico-phytoplankton (p1) and
! nano- and micro-phytoplankton (p2) is amratio,
! which translates into a ratio of fac3=amratio**0.25 between
! their respective metabolic rates, according to the MTE.
! The same applies to micro-zooplankton (z1) versus
! meso-zooplankton (z2) through fac4=hmratio**0.25.
amratio = 200.0
hmratio = 1000.0
fac3 = amratio**0.25
fac4 = hmratio**0.25
! Autotroph metabolic rate
!amr1(ci) = 1.0
!amr2(ci) = 1.0
amr1(ci) = max(0.0,ca*0.25*exp(Ea/(kBeV*T0**2)*(T(ci)/(1+T(ci)/T0))))
amr2(ci) = max(0.0,ca*0.25*exp(Ea/(kBeV*T0**2)*(T(ci)/(1+T(ci)/T0))))/5.62
! Heterotrophs
amr1(ci) = max(0.0,ca1*0.25*exp(Ea/(kBeV*T0**2)*(T(ci)/(1+T(ci)/T0))) )
amr2(ci) = max(0.0,ca2*0.25*exp(Ea/(kBeV*T0**2)*(T(ci)/(1+T(ci)/T0)))/fac3)
! Heterotroph metabolic rate
!hmr1(ci) = 1.0
!hmr2(ci) = 1.0
hmr1(ci) = max(0.0,ch*0.25*exp(Eh/(kBeV*T0**2)*(T(ci)/(1+T(ci)/T0))))
hmr2(ci) = max(0.0,ch*0.25*exp(Eh/(kBeV*T0**2)*(T(ci)/(1+T(ci)/T0))))/5.62
hmr1(ci) = max(0.0,ch1*0.25*exp(Eh/(kBeV*T0**2)*(T(ci)/(1+T(ci)/T0))) )
hmr2(ci) = max(0.0,ch2*0.25*exp(Eh/(kBeV*T0**2)*(T(ci)/(1+T(ci)/T0)))/fac4)
! Light and nutrient limitation factors
lumlim(ci) =ff1
nitlim(ci) =qn1
ammlim(ci) =qa1
lumlim1(ci) =ff1
nitlim1(ci) =qn1
ammlim1(ci) =qa1
lumlim2(ci) =ff2
nitlim2(ci) =qn2
ammlim2(ci) =qa2
! Nutrient uptake by pico- and nano-phytoplankton
dd(n,p1,ci) =amr1(ci)*ff1*qn1*(cc(p1,ci)+p0)
......
......@@ -13,7 +13,7 @@
!
! !USES:
use bio_var
use output, only: out_fmt,ts
use output, only: out_fmt,ts
#ifdef NETCDF_FMT
use ncdfout, only: ncid
use ncdfout, only: lon_dim,lat_dim,z_dim,time_dim,dims
......@@ -93,13 +93,25 @@
iret = set_attributes(ncid,par_id,units='W/m2',long_name='PAR')
!DD Diagnostic des fonctions de croissance
iret = new_nc_variable(ncid,'lumlim',NF_REAL,4,dims,lumlim_id)
iret = set_attributes(ncid,lumlim_id,units='1/day', &
long_name='light limited growth rate')
iret = new_nc_variable(ncid,'nitlim',NF_REAL,4,dims,nitlim_id)
iret = set_attributes(ncid,nitlim_id,units='',long_name='nitrate limitation')
iret = new_nc_variable(ncid,'ammlim',NF_REAL,4,dims,ammlim_id)
iret = set_attributes(ncid,ammlim_id,units='',long_name='ammonium limitation')
iret = new_nc_variable(ncid,'lumlim1',NF_REAL,4,dims,lumlim1_id)
iret = set_attributes(ncid,lumlim1_id,units='1/day', &
long_name='light limited growth rate for picophyto')
iret = new_nc_variable(ncid,'nitlim1',NF_REAL,4,dims,nitlim1_id)
iret = set_attributes(ncid,nitlim1_id,units='',long_name='nitrate limitation for picophyto')
iret = new_nc_variable(ncid,'ammlim1',NF_REAL,4,dims,ammlim1_id)
iret = set_attributes(ncid,ammlim1_id,units='',long_name='ammonium limitation for picophyto')
iret = new_nc_variable(ncid,'lumlim2',NF_REAL,4,dims,lumlim2_id)
iret = set_attributes(ncid,lumlim2_id,units='1/day', &
long_name='light limited growth rate for microphyto')
iret = new_nc_variable(ncid,'nitlim2',NF_REAL,4,dims,nitlim2_id)
iret = set_attributes(ncid,nitlim2_id,units='',long_name='nitrate limitation for microphyto')
iret = new_nc_variable(ncid,'ammlim2',NF_REAL,4,dims,ammlim2_id)
iret = set_attributes(ncid,ammlim2_id,units='',long_name='ammonium limitation for microphyto')
!DD Diagnostic de npar (nb de particules lagrangiennes) pour bebogage
!iret = new_nc_variable(ncid,'npar',NF_REAL,4,dims,npar_id)
!iret = set_attributes(ncid,npar_id,units='', &
! long_name='nb of particles per level')
dims(1) = time_dim
iret = new_nc_variable(ncid,'totn',NF_REAL,1,dims,totn_id)
......@@ -120,9 +132,15 @@
iret = store_data(ncid,par_id,XYZT_SHAPE,nlev,array=par(:))
!DD
iret = store_data(ncid,lumlim_id,XYZT_SHAPE,nlev,array=lumlim(:))
iret = store_data(ncid,nitlim_id,XYZT_SHAPE,nlev,array=nitlim(:))
iret = store_data(ncid,ammlim_id,XYZT_SHAPE,nlev,array=ammlim(:))
iret = store_data(ncid,lumlim1_id,XYZT_SHAPE,nlev,array=lumlim1(:))
iret = store_data(ncid,nitlim1_id,XYZT_SHAPE,nlev,array=nitlim1(:))
iret = store_data(ncid,ammlim1_id,XYZT_SHAPE,nlev,array=ammlim1(:))
iret = store_data(ncid,lumlim2_id,XYZT_SHAPE,nlev,array=lumlim2(:))
iret = store_data(ncid,nitlim2_id,XYZT_SHAPE,nlev,array=nitlim2(:))
iret = store_data(ncid,ammlim2_id,XYZT_SHAPE,nlev,array=ammlim2(:))
!DD
!iret = store_data(ncid,npar_id,XYZT_SHAPE,nlev,array=npar(:))
iret = store_data(ncid,totn_id,T_SHAPE,1,scalar=totn)
#endif
......
......@@ -21,7 +21,7 @@
integer :: numc,numcc
REALTYPE, dimension(:), allocatable :: zlev
REALTYPE, dimension(:), allocatable :: par
REALTYPE, dimension(:), allocatable :: lumlim,nitlim,ammlim !DD
REALTYPE, dimension(:), allocatable :: lumlim1,nitlim1,ammlim1,lumlim2,nitlim2,ammlim2 !DD
REALTYPE, dimension(:,:), allocatable :: cc,ws
integer :: surface_flux_method=-1
integer :: n_surface_fluxes=-1
......@@ -36,7 +36,7 @@
integer, dimension(:), allocatable :: var_ids
integer :: wp_id !CHG2
integer :: par_id !CHG4
integer :: lumlim_id,nitlim_id,ammlim_id !DD
integer :: lumlim1_id,nitlim1_id,ammlim1_id,lumlim2_id,nitlim2_id,ammlim2_id !DD
character(len=64), dimension(:), allocatable :: var_names
character(len=64), dimension(:), allocatable :: var_units
character(len=64), dimension(:), allocatable :: var_long
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment