Skip to content
Snippets Groups Projects
Commit b85b1027 authored by Georgiy Faikin's avatar Georgiy Faikin
Browse files

Fix mistakes with new basic function piecewise1 and piecewise 2. Delete basic...

Fix mistakes with new basic function piecewise1 and piecewise 2. Delete basic function spline. Equations of model RothC and equations of model SOCS were writen in new basic functions.
parent 4766faeb
No related branches found
No related tags found
No related merge requests found
......@@ -149,10 +149,10 @@ contains
real, intent(in) :: pars(npar_default)
real :: y, theta1, theta2, theta3
theta1 = 0.5*(1. + sign(1.,pars(2) - args(1)))
theta2 = 0.5*(1. + sign(1.,(args(1) - pars(2))*(pars(5) - args(1)) ))
theta3 = 0.5*(1. + sign(1.,args(1) - pars(5)))
theta2 = 0.5*(1. + sign(1.,(args(1) - pars(2))*(pars(1) - args(1)) ))
theta3 = 0.5*(1. + sign(1.,args(1) - pars(1)))
y = theta1*(pars(3)*args(1) + pars(7)) + theta2*(pars(4)*args(1) + pars(8)) + &
& theta3*(pars(6)*args(1) + pars(1))
& theta3*(pars(5)*args(1) + pars(6))
end function fun_PieWise2
! args(1) - x
......@@ -165,29 +165,4 @@ contains
! pars(7) - c1
! pars(8) - c2
! !> Inerpolation function: y = (k+amp)*x + b + (a-k)/2*|x-x0| + (amp-a)*|x-y0|
! function fun_inter(args, pars) result(y)
! implicit none
! real, intent(in) :: args(narg_default)
! real, intent(in) :: pars(npar_default)
! real :: y
! y = (pars(3)+pars(5))*args(1) + ___ + (pars(4)-pars(3))/2*abs(args(1)-pars(2)) + &
! & + (pars(5)-pars(4))/2*abs(args(1)-pars(1))
! end function fun_inter
! args(1) - x
! pars(1) - y0
! pars(2) - x0
! pars(3) - k
! pars(4) - a
! pars(5) - amp
! pars(6) - c
! pars(7) - c1
! pars(8) - c2
end module
......@@ -20,11 +20,11 @@ module carbon_model_rothc
call set_pool(pid = n_Catm, name = 'catm')
call set_pool(pid = n_Cveg, name = 'cveg')
call set_pool(pid = n_CDPM, name = 'CDPM', initial_value = 0.02037, alias = CDPM)
call set_pool(pid = n_CRPM, name = 'CRPM', initial_value = 1.75515, alias = CRPM)
call set_pool(pid = n_CBIO, name = 'CBIO', initial_value = 0.06464, alias = CBIO)
call set_pool(pid = n_CHUM, name = 'CHUM', initial_value = 1.14567, alias = CHUM)
call set_pool(pid = n_CIOM, name = 'CIOM', initial_value = 0.257, alias = CIOM)
call set_pool(pid = n_CDPM, name = 'CDPM', initial_value = 0.04936, alias = CDPM)
call set_pool(pid = n_CRPM, name = 'CRPM', initial_value = 0.799, alias = CRPM)
call set_pool(pid = n_CBIO, name = 'CBIO', initial_value = 0.11873, alias = CBIO)
call set_pool(pid = n_CHUM, name = 'CHUM', initial_value = 7.07025, alias = CHUM)
call set_pool(pid = n_CIOM, name = 'CIOM', initial_value = 0.814, alias = CIOM)
! station: opt: CDPM: CRPM: CBIO: CHUM: CIOM:
! DAO4 1 0.01944 1.73544 0.06188 1.0416 0.245
......@@ -43,7 +43,7 @@ module carbon_model_rothc
! VLDR 1 0.00777 1.38303 0.03275 0.14961 0.119
! ROST 1 0.04936 0.799 0.11873 7.07025 0.814
! litterfall
! litterfall ---------------------
call set_flux(fid = n_F, pid_out = n_Cveg, pid_in = n_CDPM, name = 'fdpm*organic')
call set_mult(n_F, 'lin', x_ij = organic, k = fdpm)
......@@ -58,33 +58,39 @@ module carbon_model_rothc
call set_flux(fid = n_F, pid_out = n_Cveg, pid_in = n_CHUM, name = '0.02*FYM')
call set_mult(n_F, 'lin', x_ij = FYM, k = 1. - 2*fdpm2)
! --------------------
! to atmosphere
! to atmosphere -----------------------
call set_flux(fid = n_F, pid_out = n_CDPM, pid_in = n_Catm, name = 'RDPM')
! piecewise of Ft
call set_mult(n_F, 'lin', x = Ft)
call set_mult(n_F, 'step', x_ij = Tsoil(:,:,1), x0 = -5., k = 1.0)
! piecewise of Fs
call set_mult(n_F, 'PieWise2', x_ij = Wsoil(:,:,1), x0_ij = smin(:,:,1), y0_ij = s0(:,:,1), k = 0., &
& a_ij = 0.8/(s0(:,:,1) - smin(:,:,1)), amp = -0.8, c01 = 0.2, &
& c02_ij = 0.2 - 0.8*smin(:,:,1)/(s0(:,:,1) - smin(:,:,1)), c_ij = 1 + 0.8*s0(:,:,1))
!call set_mult(n_F, 'lin', x = Fs)
call set_mult(n_F, 'lin', y0 = 0.6, k = -0.4, x_ij = veg, x0 = 1.)
call set_mult(n_F, 'lin', x = Fs)
call set_mult(n_F, 'lin', x = ks(1))
call set_mult(n_F, 'lin', x_ijn = CDPM)
!call set_mult(n_F, 'const', c_n = 47.91)
!call set_mult(n_F, 'exp', x_ij = Tsoil, a = exp, k = 106.06, x0 = -18.27, y0 = 1.)
!call set_mult(n_F, 'step', x_ij = Tsoil, x0 = -4.99)
call set_flux(fid = n_F, pid_out = n_CRPM, pid_in = n_Catm, name = 'RRPM')
! piecewise of Ft
call set_mult(n_F, 'lin', x = Ft)
call set_mult(n_F, 'step', x_ij = Tsoil(:,:,1), x0 = -5., k = 1.0)
! piecewise of Fs
call set_mult(n_F, 'PieWise2', x_ij = Wsoil(:,:,1), x0_ij = smin(:,:,1), y0_ij = s0(:,:,1), k = 0., &
& a_ij = 0.8/(s0(:,:,1) - smin(:,:,1)), amp = -0.8, c01 = 0.2, &
& c02_ij = 0.2 - 0.8*smin(:,:,1)/(s0(:,:,1) - smin(:,:,1)), c_ij = 1 + 0.8*s0(:,:,1))
!call set_mult(n_F, 'lin', x = Fs)
call set_mult(n_F, 'lin', y0 = 0.6, k = -0.4, x_ij = veg, x0 = 1.)
call set_mult(n_F, 'lin', x = Fs)
call set_mult(n_F, 'lin', x = ks(2))
call set_mult(n_F, 'lin', x_ijn = CRPM)
......@@ -94,8 +100,13 @@ module carbon_model_rothc
call set_mult(n_F, 'lin', x = Ft)
call set_mult(n_F, 'step', x_ij = Tsoil(:,:,1), x0 = -5., k = 1.0)
! piecewise of Fs
call set_mult(n_F, 'PieWise2', x_ij = Wsoil(:,:,1), x0_ij = smin(:,:,1), y0_ij = s0(:,:,1), k = 0., &
& a_ij = 0.8/(s0(:,:,1) - smin(:,:,1)), amp = -0.8, c01 = 0.2, &
& c02_ij = 0.2 - 0.8*smin(:,:,1)/(s0(:,:,1) - smin(:,:,1)), c_ij = 1 + 0.8*s0(:,:,1))
!call set_mult(n_F, 'lin', x = Fs)
call set_mult(n_F, 'lin', y0 = 0.6, k = -0.4, x_ij = veg, x0 = 1.)
call set_mult(n_F, 'lin', x = Fs)
call set_mult(n_F, 'lin', x = ks(3))
call set_mult(n_F, 'lin', x_ijn = CBIO)
......@@ -105,11 +116,18 @@ module carbon_model_rothc
call set_mult(n_F, 'lin', x = Ft)
call set_mult(n_F, 'step', x_ij = Tsoil(:,:,1), x0 = -5., k = 1.0)
! piecewise of Fs
call set_mult(n_F, 'PieWise2', x_ij = Wsoil(:,:,1), x0_ij = smin(:,:,1), y0_ij = s0(:,:,1), k = 0., &
& a_ij = 0.8/(s0(:,:,1) - smin(:,:,1)), amp = -0.8, c01 = 0.2, &
& c02_ij = 0.2 - 0.8*smin(:,:,1)/(s0(:,:,1) - smin(:,:,1)), c_ij = 1 + 0.8*s0(:,:,1))
!call set_mult(n_F, 'lin', x = Fs)
call set_mult(n_F, 'lin', y0 = 0.6, k = -0.4, x_ij = veg, x0 = 1.)
call set_mult(n_F, 'lin', x = Fs)
call set_mult(n_F, 'lin', x = ks(4))
call set_mult(n_F, 'lin', x_ijn = CHUM)
! atmosphere fall
call set_flux(fid = n_F, pid_out = n_Catm, pid_in = n_CBIO, name = 'BIO_prop*RDPM')
call set_mult(n_F, 'lin', x_ij = BIO_prop)
......@@ -118,11 +136,18 @@ module carbon_model_rothc
call set_mult(n_F, 'lin', x = Ft)
call set_mult(n_F, 'step', x_ij = Tsoil(:,:,1), x0 = -5., k = 1.0)
! piecewise of Fs
call set_mult(n_F, 'PieWise2', x_ij = Wsoil(:,:,1), x0_ij = smin(:,:,1), y0_ij = s0(:,:,1), k = 0., &
& a_ij = 0.8/(s0(:,:,1) - smin(:,:,1)), amp = -0.8, c01 = 0.2, &
& c02_ij = 0.2 - 0.8*smin(:,:,1)/(s0(:,:,1) - smin(:,:,1)), c_ij = 1 + 0.8*s0(:,:,1))
!call set_mult(n_F, 'lin', x = Fs)
call set_mult(n_F, 'lin', y0 = 0.6, k = -0.4, x_ij = veg, x0 = 1.)
call set_mult(n_F, 'lin', x = Fs)
call set_mult(n_F, 'lin', x = ks(1))
call set_mult(n_F, 'lin', x_ijn = CDPM)
call set_flux(fid = n_F, pid_out = n_Catm, pid_in = n_CBIO, name = 'BIO_prop*RRPM')
call set_mult(n_F, 'lin', x_ij = BIO_prop)
......@@ -130,11 +155,18 @@ module carbon_model_rothc
call set_mult(n_F, 'lin', x = Ft)
call set_mult(n_F, 'step', x_ij = Tsoil(:,:,1), x0 = -5., k = 1.0)
! piecewise of Fs
call set_mult(n_F, 'PieWise2', x_ij = Wsoil(:,:,1), x0_ij = smin(:,:,1), y0_ij = s0(:,:,1), k = 0., &
& a_ij = 0.8/(s0(:,:,1) - smin(:,:,1)), amp = -0.8, c01 = 0.2, &
& c02_ij = 0.2 - 0.8*smin(:,:,1)/(s0(:,:,1) - smin(:,:,1)), c_ij = 1 + 0.8*s0(:,:,1))
!call set_mult(n_F, 'lin', x = Fs)
call set_mult(n_F, 'lin', y0 = 0.6, k = -0.4, x_ij = veg, x0 = 1.)
call set_mult(n_F, 'lin', x = Fs)
call set_mult(n_F, 'lin', x = ks(2))
call set_mult(n_F, 'lin', x_ijn = CRPM)
call set_flux(fid = n_F, pid_out = n_Catm, pid_in = n_CBIO, name = 'BIO_prop*RBIO')
call set_mult(n_F, 'lin', x_ij = BIO_prop)
......@@ -142,11 +174,18 @@ module carbon_model_rothc
call set_mult(n_F, 'lin', x = Ft)
call set_mult(n_F, 'step', x_ij = Tsoil(:,:,1), x0 = -5., k = 1.0)
! piecewise of Fs
call set_mult(n_F, 'PieWise2', x_ij = Wsoil(:,:,1), x0_ij = smin(:,:,1), y0_ij = s0(:,:,1), k = 0., &
& a_ij = 0.8/(s0(:,:,1) - smin(:,:,1)), amp = -0.8, c01 = 0.2, &
& c02_ij = 0.2 - 0.8*smin(:,:,1)/(s0(:,:,1) - smin(:,:,1)), c_ij = 1 + 0.8*s0(:,:,1))
!call set_mult(n_F, 'lin', x = Fs)
call set_mult(n_F, 'lin', y0 = 0.6, k = -0.4, x_ij = veg, x0 = 1.)
call set_mult(n_F, 'lin', x = Fs)
call set_mult(n_F, 'lin', x = ks(3))
call set_mult(n_F, 'lin', x_ijn = CBIO)
call set_flux(fid = n_F, pid_out = n_Catm, pid_in = n_CBIO, name = 'BIO_prop*RHUM')
call set_mult(n_F, 'lin', x_ij = BIO_prop)
......@@ -154,8 +193,13 @@ module carbon_model_rothc
call set_mult(n_F, 'lin', x = Ft)
call set_mult(n_F, 'step', x_ij = Tsoil(:,:,1), x0 = -5., k = 1.0)
! piecewise of Fs
call set_mult(n_F, 'PieWise2', x_ij = Wsoil(:,:,1), x0_ij = smin(:,:,1), y0_ij = s0(:,:,1), k = 0., &
& a_ij = 0.8/(s0(:,:,1) - smin(:,:,1)), amp = -0.8, c01 = 0.2, &
& c02_ij = 0.2 - 0.8*smin(:,:,1)/(s0(:,:,1) - smin(:,:,1)), c_ij = 1 + 0.8*s0(:,:,1))
!call set_mult(n_F, 'lin', x = Fs)
call set_mult(n_F, 'lin', y0 = 0.6, k = -0.4, x_ij = veg, x0 = 1.)
call set_mult(n_F, 'lin', x = Fs)
call set_mult(n_F, 'lin', x = ks(4))
call set_mult(n_F, 'lin', x_ijn = CHUM)
......@@ -167,11 +211,18 @@ module carbon_model_rothc
call set_mult(n_F, 'lin', x = Ft)
call set_mult(n_F, 'step', x_ij = Tsoil(:,:,1), x0 = -5., k = 1.0)
! piecewise of Fs
call set_mult(n_F, 'PieWise2', x_ij = Wsoil(:,:,1), x0_ij = smin(:,:,1), y0_ij = s0(:,:,1), k = 0., &
& a_ij = 0.8/(s0(:,:,1) - smin(:,:,1)), amp = -0.8, c01 = 0.2, &
& c02_ij = 0.2 - 0.8*smin(:,:,1)/(s0(:,:,1) - smin(:,:,1)), c_ij = 1 + 0.8*s0(:,:,1))
!call set_mult(n_F, 'lin', x = Fs)
call set_mult(n_F, 'lin', y0 = 0.6, k = -0.4, x_ij = veg, x0 = 1.)
call set_mult(n_F, 'lin', x = Fs)
call set_mult(n_F, 'lin', x = ks(1))
call set_mult(n_F, 'lin', x_ijn = CDPM)
call set_flux(fid = n_F, pid_out = n_Catm, pid_in = n_CHUM, name = 'HUM_prop*RRPM')
call set_mult(n_F, 'lin', x_ij = HUM_prop)
......@@ -179,11 +230,18 @@ module carbon_model_rothc
call set_mult(n_F, 'lin', x = Ft)
call set_mult(n_F, 'step', x_ij = Tsoil(:,:,1), x0 = -5., k = 1.0)
! piecewise of Fs
call set_mult(n_F, 'PieWise2', x_ij = Wsoil(:,:,1), x0_ij = smin(:,:,1), y0_ij = s0(:,:,1), k = 0., &
& a_ij = 0.8/(s0(:,:,1) - smin(:,:,1)), amp = -0.8, c01 = 0.2, &
& c02_ij = 0.2 - 0.8*smin(:,:,1)/(s0(:,:,1) - smin(:,:,1)), c_ij = 1 + 0.8*s0(:,:,1))
!call set_mult(n_F, 'lin', x = Fs)
call set_mult(n_F, 'lin', y0 = 0.6, k = -0.4, x_ij = veg, x0 = 1.)
call set_mult(n_F, 'lin', x = Fs)
call set_mult(n_F, 'lin', x = ks(2))
call set_mult(n_F, 'lin', x_ijn = CRPM)
call set_flux(fid = n_F, pid_out = n_Catm, pid_in = n_CHUM, name = 'HUM_prop*RBIO')
call set_mult(n_F, 'lin', x_ij = HUM_prop)
......@@ -191,11 +249,18 @@ module carbon_model_rothc
call set_mult(n_F, 'lin', x = Ft)
call set_mult(n_F, 'step', x_ij = Tsoil(:,:,1), x0 = -5., k = 1.0)
! piecewise of Fs
call set_mult(n_F, 'PieWise2', x_ij = Wsoil(:,:,1), x0_ij = smin(:,:,1), y0_ij = s0(:,:,1), k = 0., &
& a_ij = 0.8/(s0(:,:,1) - smin(:,:,1)), amp = -0.8, c01 = 0.2, &
& c02_ij = 0.2 - 0.8*smin(:,:,1)/(s0(:,:,1) - smin(:,:,1)), c_ij = 1 + 0.8*s0(:,:,1))
!call set_mult(n_F, 'lin', x = Fs)
call set_mult(n_F, 'lin', y0 = 0.6, k = -0.4, x_ij = veg, x0 = 1.)
call set_mult(n_F, 'lin', x = Fs)
call set_mult(n_F, 'lin', x = ks(3))
call set_mult(n_F, 'lin', x_ijn = CBIO)
call set_flux(fid = n_F, pid_out = n_Catm, pid_in = n_CHUM, name = 'HUM_prop*RHUM')
call set_mult(n_F, 'lin', x_ij = HUM_prop)
......@@ -203,8 +268,13 @@ module carbon_model_rothc
call set_mult(n_F, 'lin', x = Ft)
call set_mult(n_F, 'step', x_ij = Tsoil(:,:,1), x0 = -5., k = 1.0)
! piecewise of Fs
call set_mult(n_F, 'PieWise2', x_ij = Wsoil(:,:,1), x0_ij = smin(:,:,1), y0_ij = s0(:,:,1), k = 0., &
& a_ij = 0.8/(s0(:,:,1) - smin(:,:,1)), amp = -0.8, c01 = 0.2, &
& c02_ij = 0.2 - 0.8*smin(:,:,1)/(s0(:,:,1) - smin(:,:,1)), c_ij = 1 + 0.8*s0(:,:,1))
!call set_mult(n_F, 'lin', x = Fs)
call set_mult(n_F, 'lin', y0 = 0.6, k = -0.4, x_ij = veg, x0 = 1.)
call set_mult(n_F, 'lin', x = Fs)
call set_mult(n_F, 'lin', x = ks(4))
call set_mult(n_F, 'lin', x_ijn = CHUM)
......
......@@ -61,16 +61,13 @@ module carbon_model_rothc_aux
! ------ Initialization ------
real :: cs = 0. !< Сумма пулов
! ----- The topsoil moisture deficit -------
real :: deep = 20. ! глубина слоя, см (@todo сопоставить с переменной Ml)
real, allocatable :: TSMD (:,:) !< the topsoil moisture deficit
real, allocatable :: SMD (:,:) !< TSMD на актуальной глубине
real, allocatable :: bSMD (:,:) !< Случай TSMD для голой почвы (bare soil)
real, allocatable :: moi_bal (:,:) !< pr minus evaporation
real, allocatable :: aTSMD (:,:) !< accumulated topsoil mositure deficit
real, allocatable :: evpar_part(:,:) !< 75% from evaporation
real :: a,b
real :: deep = 20. ! глубина слоя, см (@todo сопоставить с переменной Ml, внедрить в environment_data_station)
! real, allocatable :: TSMD (:,:) !< the topsoil moisture deficit
! real, allocatable :: SMD (:,:) !< TSMD на актуальной глубине
! real, allocatable :: bSMD (:,:) !< Случай TSMD для голой почвы (bare soil)
! real, allocatable :: moi_bal (:,:) !< pr minus evaporation
! real, allocatable :: aTSMD (:,:) !< accumulated topsoil mositure deficit
! real, allocatable :: evpar_part(:,:) !< 75% from evaporation
contains
......@@ -87,31 +84,32 @@ contains
allocate(HUM_prop(i0:i1,j0:j1))
! init of TPMD
allocate(TSMD(i0:i1,j0:j1))
allocate(SMD(i0:i1,j0:j1))
allocate(bSMD(i0:i1,j0:j1))
allocate(moi_bal(i0:i1,j0:j1))
allocate(aTSMD(i0:i1,j0:j1))
allocate(evpar_part(i0:i1,j0:j1))
TSMD = 0.
SMD = 0.
bSMD = 0.
moi_bal = 0.
aTSMD = 0.
evpar_part = 0.
SA = 0.
CO2_prop = 0.
BIO_prop = 0.
HUM_prop = 0.
s0 = 0.
smin = 0.
TSMD(:,:) = -(20. + 1.3*bettar(:,:) - 0.01*bettar(:,:)**2)
SMD(:,:) = (deep/23.)*TSMD(:,:)
bSMD(:,:) = SMD(:,:)/1.8
!! расчёт через осадки и эвотранспирацию
! allocate(TSMD(i0:i1,j0:j1))
! allocate(SMD(i0:i1,j0:j1))
! allocate(bSMD(i0:i1,j0:j1))
! allocate(moi_bal(i0:i1,j0:j1))
! allocate(aTSMD(i0:i1,j0:j1))
! allocate(evpar_part(i0:i1,j0:j1))
! TSMD = 0.
! SMD = 0.
! bSMD = 0.
! moi_bal = 0.
! aTSMD = 0.
! evpar_part = 0.
! SA = 0.
! CO2_prop = 0.
! BIO_prop = 0.
! HUM_prop = 0.
! s0 = 0.
! smin = 0.
! TSMD(:,:) = -(20. + 1.3*bettar(:,:) - 0.01*bettar(:,:)**2)
! SMD(:,:) = (deep/23.)*TSMD(:,:)
! bSMD(:,:) = SMD(:,:)/1.8
! main init part of Rothc
do i = 1, ml
......@@ -143,34 +141,36 @@ contains
! ---- TPMD_calc_at_cell ----
evpar_part(ii,jj) = 0.75*Evpar(ii,jj)
moi_bal(ii,jj) = pr(ii,jj) - evpar_part(ii,jj)
! evpar_part(ii,jj) = 0.75*Evpar(ii,jj)
! moi_bal(ii,jj) = pr(ii,jj) - evpar_part(ii,jj)
! if (veg(ii,jj) == 1) then
! aTSMD(ii,jj) = max(SMD(ii,jj), min(0.,aTSMD(ii,jj) + moi_bal(ii,jj)))
! else
! aTSMD(ii,jj) = max(min(bSMD(ii,jj),aTSMD(ii,jj)),min(0.,aTSMD(ii,jj) + moi_bal(ii,jj)))
! end if
if (veg(ii,jj) == 1) then
aTSMD(ii,jj) = max(SMD(ii,jj), min(0.,aTSMD(ii,jj) + moi_bal(ii,jj)))
else
aTSMD(ii,jj) = max(min(bSMD(ii,jj),aTSMD(ii,jj)),min(0.,aTSMD(ii,jj) + moi_bal(ii,jj)))
end if
! if (aTSMD(ii,jj) > 0.444*SMD(ii,jj)) then
! Fs = 1.
! else
! Fs = 0.2 + (1. - 0.2)*(SMD(ii,jj) - aTSMD(ii,jj))/(SMD(ii,jj) - 0.444*SMD(ii,jj))
! end if
! main part of rothc_calc_at_cell
! if (Wsoil(ii,jj,1) >= s0(ii,jj,1)) then
! Fs = 1. - 0.8*(Wsoil(ii,jj,1) - s0(ii,jj,1))
! cas = 3.
! else if (smin(ii,jj,1) < Wsoil(ii,jj,1) .and. Wsoil(ii,jj,1) < s0(ii,jj,1)) then
! Fs = 0.2 + 0.8*(Wsoil(ii,jj,1) - smin(ii,jj,1))/(s0(ii,jj,1) - smin(ii,jj,1))
! cas = 2.
! else if (Wsoil(ii,jj,1) <= smin(ii,jj,1)) then
! Fs = 0.2
! cas = 1.
! end if
if (aTSMD(ii,jj) > 0.444*SMD(ii,jj)) then
Fs = 1.
else
Fs = 0.2 + (1. - 0.2)*(SMD(ii,jj) - aTSMD(ii,jj))/(SMD(ii,jj) - 0.444*SMD(ii,jj))
end if
Ft = 47.91/(1. + exp(106.06/(Tsoil(ii,jj,1) + 18.27)))
! ---- Initialization ------
Cs = CDPM(ii,jj,1) + CRPM(ii,jj,1) + CBIO(ii,jj,1) + CHUM(ii,jj,1)
......@@ -195,8 +195,6 @@ contains
open(unit=500, file='results/'//trim(carbon_model_type)//'/'//trim(station_name)//'_'//trim(station_opt)//'.txt', status='unknown')
write(500,*) date_c%timestamp,';',CDPM(:,:,1),';',CRPM(:,:,1),';',CBIO(:,:,1),';',CHUM(:,:,1),';', CIOM(:,:,1)
write(513,*) date_c%timestamp,';',a,';',b
! ---- Initialization ------
!print*, 'finish thing 1, ', CDPM(:,:,1)/cs*100,'%'
!print*, 'finish thing 2, ', CRPM(:,:,1)/cs*100,'%'
......
......@@ -42,6 +42,8 @@ module carbon_model_socs
! 3 0.0619416 3.0351384
! VLDR 1 0.0338432 1.6583168
! ROST 1 0.178176 8.730624
call set_flux(fid = n_F, pid_out = n_Cveg, pid_in = n_Csoil1, name = 'litterfall')
call set_mult(n_F, 'lin', x_ij = lambd)
......@@ -59,12 +61,10 @@ module carbon_model_socs
call set_mult(n_F, 'step', x_ij = Tsoil(:,:,1), x0 = -5., k = 1.0)
! piecewise of Fs
!call set_mult(n_F, 'lin', x = Fs)
call set_mult(n_F, 'PieWise2', x_ij = Wsoil(:,:,1), x0_ij = smin(:,:,1), y0_ij = s0(:,:,1), k = 0., &
& a_ij = 0.8/(s0(:,:,1) - smin(:,:,1)), amp = -0.8, c01 = 0.2, &
& c02_ij = 0.2 - 0.8*smin(:,:,1)/(s0(:,:,1) - smin(:,:,1)), c_ij = 1 + 0.8*s0(:,:,1))
call set_mult(n_F, 'lin', x = 7.5/yrs)
call set_flux(fid = n_F, pid_out = n_Csoil1, pid_in = n_Catm, name = 'microbal_respiration')
......@@ -75,14 +75,11 @@ module carbon_model_socs
call set_mult(n_F, 'step', x_ij = Tsoil(:,:,1), x0 = -5., k = 1.0)
! piecewise of Fs
!call set_mult(n_F, 'lin', x = Fs)
call set_mult(n_F, 'PieWise2', x_ij = Wsoil(:,:,1), x0_ij = smin(:,:,1), y0_ij = s0(:,:,1), k = 0., &
& a_ij = 0.8/(s0(:,:,1) - smin(:,:,1)), amp = -0.8, c01 = 0.2, &
& c02_ij = 0.2 - 0.8*smin(:,:,1)/(s0(:,:,1) - smin(:,:,1)), c_ij = 1 + 0.8*s0(:,:,1))
call set_mult(n_F, 'lin', x = 7.5/yrs)
end subroutine carbon_model_assembly
......
......@@ -31,9 +31,6 @@ module carbon_model_socs_aux
real :: rare = 0.45 !< Доля углерода переходящего в пул защищенного C1
real :: Cm = 12. !< Max кол-во органического углерода которое может быть защищено в почве
real :: kirk = 0. !< Коэф. скорости разложения C1
!real :: kd !< Коэф. перехода углерода из C2 в C1, десорбация, разрушение агрегатов
real, allocatable :: C_atm1(:,:,:) , C_atm2(:,:,:)
real, allocatable :: thet1(:,:,:) , thet2(:,:,:)
contains
......@@ -41,12 +38,6 @@ contains
integer :: i !< count
allocate(C_atm1(i0:i1,j0:j1,ml))
allocate(C_atm2(i0:i1,j0:j1,ml))
allocate(thet1(i0:i1,j0:j1,ml))
allocate(thet2(i0:i1,j0:j1,ml))
allocate(s0(i0:i1,j0:j1,ml))
allocate(smin(i0:i1,j0:j1,ml))
......@@ -79,14 +70,6 @@ contains
integer, intent(in) :: ii, jj, nn
! if (Wsoil(ii,jj,1) >= s0(ii,jj,1)) then
! Fs = 1. - 0.8*(Wsoil(ii,jj,1) - s0(ii,jj,1))
! else if (smin(ii,jj,1) < Wsoil(ii,jj,1) .and. Wsoil(ii,jj,1) < s0(ii,jj,1)) then
! Fs = 0.2 + 0.8*(Wsoil(ii,jj,1) - smin(ii,jj,1))/(s0(ii,jj,1) - smin(ii,jj,1))
! else if (Wsoil(ii,jj,1) <= smin(ii,jj,1)) then
! Fs = 0.2
! end if
Ft = 47.91/(1. + exp(106.06/(Tsoil(ii,jj,1) + 18.27)))
end subroutine
......
......@@ -47,7 +47,7 @@ module environment_data_station
real(kind = 16) :: bettar_in(station_max) = (/20., 26., 7., 8., 44./)
! ---- For SOCs ----
real :: kd_in (station_max,opt_max)
real :: kd_in (station_max,opt_max) !< Коэф. перехода углерода из C2 в C1, десорбация, разрушение агрегатов
! opt = 1 2 3 4
data kd_in(01,:) /0.03, 0.03, 0.035, 0.03/
data kd_in(02,:) /0.03, 0.03, 0.035, 0.03/ !0.08581933
......
......@@ -12,7 +12,7 @@
! -----------------------------------------------------------------
!> Углеродная модель:
carbon_model_type = 'socs'
carbon_model_type = 'rothc'
!
! 'inmcm' - модель inmc [1,2]
! 'socs' - модель SOCS [3]
......@@ -137,6 +137,8 @@
environment_model_type = 'inmcm' ! inmcm
! Построить график от расчётов: python3 plot.py
! -----------------------------------------------------------------
/
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment