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

Cosmetic changes

parent 1a8d6e71
No related branches found
No related tags found
No related merge requests found
...@@ -11,9 +11,21 @@ module carbon_model_inmcm_aux ...@@ -11,9 +11,21 @@ module carbon_model_inmcm_aux
implicit none implicit none
public public
! Интерфейс
! -------------------------------------------------------------------------------------------------------------------
! ------- Station of observation ------
character(len=10) :: station = 'Rostov' !< Станция наблюдения за климатом ! Нужно указать название
integer, parameter :: opt = 3 !< Номер вариант подачи удобрения ! Нужно указать номер
! переменные ! ------- Serve value -------
character(len=2) :: opt_suffix !< Имя варианта подачи удобрения !Как часть параметров для вывода данных
integer, parameter :: mnc = (year_max - year_min + 1)*nmonth !Как часть параметров для задания климатических данных
!< Колличество месяцев в расчете
integer :: k !< Номер месяца с начала работы программы !Как часть параметров для шага по времени
! ------------------------------------------------------------------------------------------------------------------- ! -------------------------------------------------------------------------------------------------------------------
! Main part of INMCM
! ---- Pools ---- ! ---- Pools ----
real, dimension(:,:,:), pointer :: Catm !< атмосфера real, dimension(:,:,:), pointer :: Catm !< атмосфера
real, dimension(:,:,:), pointer :: Cveg !< растительность real, dimension(:,:,:), pointer :: Cveg !< растительность
...@@ -67,16 +79,6 @@ module carbon_model_inmcm_aux ...@@ -67,16 +79,6 @@ module carbon_model_inmcm_aux
!real, allocatable :: admForestArea(:) !real, allocatable :: admForestArea(:)
!real, allocatable :: landuseCutFrac(:,:) !real, allocatable :: landuseCutFrac(:,:)
! ------- Station of observation ------
character(len=10) :: station = 'Rostov' !< Станция наблюдения за климатом
integer, parameter :: opt = 3 !< Номер вариант подачи удобрения
! ----- Serve variables -----
character(len=2) :: opt_suffix !< Имя варианта подачи удобрения
integer, parameter :: mnc = (year_max - year_min + 1)*nmonth
!< Колличество месяцев в расчете
integer :: k = 1 !< Номер месяца с начала работы программы
! ------ Climate variables -------- ! ------ Climate variables --------
real :: Tempy(0:mnc) !< Средняя температура в месяц, [Celsius] real :: Tempy(0:mnc) !< Средняя температура в месяц, [Celsius]
real :: MOI(0:mnc) !< Средняя влажность почвы в месяц, [dim] real :: MOI(0:mnc) !< Средняя влажность почвы в месяц, [dim]
...@@ -86,11 +88,9 @@ module carbon_model_inmcm_aux ...@@ -86,11 +88,9 @@ module carbon_model_inmcm_aux
contains contains
! внешние процедуры
! -------------------------------------------------------------------------------------------------------------------
subroutine carbon_model_init() subroutine carbon_model_init()
! ---------------------------------------
! ---- Part of INMCM carbon_model_init() ----
use grid, only : i0, i1, j0, j1, mask, area, date_c use grid, only : i0, i1, j0, j1, mask, area, date_c
!use environment_model_inmcm, only : vegg_nv2 !use environment_model_inmcm, only : vegg_nv2
!use netcdf !use netcdf
...@@ -104,8 +104,9 @@ contains ...@@ -104,8 +104,9 @@ contains
!allocate(dfr_weight(i0:i1,j0:j1,nv2)) !allocate(dfr_weight(i0:i1,j0:j1,nv2))
allocate(ers_weight(i0:i1,j0:j1,nv2)) allocate(ers_weight(i0:i1,j0:j1,nv2))
! ---- Part of general carbon_model_init() ----
write(opt_suffix, '(i0.0)') opt write(opt_suffix, '(i0.0)') opt
! ---- Initialization of climate variables ---- ! ---- Part of enviromental carbon_model_init() ----
open (unit = 1, file = 'initial_value/'//trim(station)//'_Temp.txt', status='unknown') open (unit = 1, file = 'initial_value/'//trim(station)//'_Temp.txt', status='unknown')
read(1,*) Tempy read(1,*) Tempy
close (1) close (1)
...@@ -120,6 +121,8 @@ contains ...@@ -120,6 +121,8 @@ contains
lambdac = lambdac/dt lambdac = lambdac/dt
! ---- Part of timesteps init ----
! @todo учесть шаг по времени 1 час
if (dt == 86400) then ! Для шага по времени день: if (dt == 86400) then ! Для шага по времени день:
k = 0 k = 0
Tempy(0) = Tempy(1) Tempy(0) = Tempy(1)
...@@ -128,6 +131,8 @@ contains ...@@ -128,6 +131,8 @@ contains
else ! Для шага по времени месяц: else ! Для шага по времени месяц:
k = 1 k = 1
end if end if
! ---- Part of rothc carbon_model_init() ----
! ---- Variables from INMCM ---- ! ---- Variables from INMCM ----
!landuseTot = landuseDfrA + landuseDfrB + landuseErs: !landuseTot = landuseDfrA + landuseDfrB + landuseErs:
!landuseTot = defor0 !landuseTot = defor0
...@@ -183,13 +188,12 @@ contains ...@@ -183,13 +188,12 @@ contains
! enddo ! enddo
!enddo !enddo
end subroutine end subroutine
subroutine carbon_model_calc_at_timestep() subroutine carbon_model_calc_at_timestep()
! ---------------------------------------
use grid, only : i0, i1, j0, j1, area use grid, only : i0, i1, j0, j1, area
integer :: ii, jj, n integer :: ii, jj, n
...@@ -206,12 +210,12 @@ contains ...@@ -206,12 +210,12 @@ contains
!if (sum(dfr_weight) /= 0.) dfr_weight(:,:,:) = dfr_weight(:,:,:) / sum(dfr_weight) !if (sum(dfr_weight) /= 0.) dfr_weight(:,:,:) = dfr_weight(:,:,:) / sum(dfr_weight)
if (sum(ers_weight) /= 0.) ers_weight(:,:,:) = ers_weight(:,:,:) / sum(ers_weight) if (sum(ers_weight) /= 0.) ers_weight(:,:,:) = ers_weight(:,:,:) / sum(ers_weight)
end subroutine end subroutine
subroutine carbon_model_calc_at_cell(ii,jj) subroutine carbon_model_calc_at_cell(ii,jj)
! ---------------------------------------
! ---- Part of environmental_calc_at_cell(ii,jj) ----
use grid, only: date_c use grid, only: date_c
use environment_core, only : Tsoil, Wsoil use environment_core, only : Tsoil, Wsoil
integer, intent(in) :: ii, jj integer, intent(in) :: ii, jj
...@@ -224,7 +228,7 @@ contains ...@@ -224,7 +228,7 @@ contains
!k ! номер месяца с начала работы программы !k ! номер месяца с начала работы программы
if (dt == 86400) then ! Для шага по времени день: if (dt == 86400) then ! Для шага по времени день:
Tsoil(ii,jj,:) = Tempy(k)*sin(pi*(j-1)/(N(i)-1)) + Tempy(k+1)*(1-sin(pi*(j-1)/(N(i)-1)))!!! Tsoil(ii,jj,:) = Tempy(k)*sin(pi*(j-1)/(N(i)-1)) + Tempy(k+1)*(1-sin(pi*(j-1)/(N(i)-1)))
Wsoil(ii,jj,:) = MOI(k)*sin(pi*(j-1)/(N(i)-1)) + MOI(k+1)*(1-sin(pi*(j-1)/(N(i)-1))) Wsoil(ii,jj,:) = MOI(k)*sin(pi*(j-1)/(N(i)-1)) + MOI(k+1)*(1-sin(pi*(j-1)/(N(i)-1)))
worky = lambdac(k)/(N(i)) worky = lambdac(k)/(N(i))
if (j == (N(i)/2)) k = k+1 if (j == (N(i)/2)) k = k+1
...@@ -244,7 +248,7 @@ contains ...@@ -244,7 +248,7 @@ contains
subroutine carbon_model_calc_at_tile(ii,jj,nn) subroutine carbon_model_calc_at_tile(ii,jj,nn)
! ---------------------------------------
use const, only : Kelvin0, Tf, rho_w use const, only : Kelvin0, Tf, rho_w
use grid, only : ms, ml, z, dz, date_c use grid, only : ms, ml, z, dz, date_c
use environment_core, only : Tsoil, Wsoil, Isoil, Temp, Rswd use environment_core, only : Tsoil, Wsoil, Isoil, Temp, Rswd
......
...@@ -5,14 +5,28 @@ module carbon_model_rothc_aux ...@@ -5,14 +5,28 @@ module carbon_model_rothc_aux
use grid, only : dt use grid, only : dt
implicit none implicit none
! пулы ! Интерфейс
! -------------------------------------------------------------------------------------------------------------------
! ------- Station of observation ------
character(len=10) :: station = 'Rostov' !< Станция наблюдения за климатом ! Нужно указать название
integer, parameter :: opt = 2 !< Номер вариант подачи удобрения ! Нужно указать номер
! ------- Serve value -------
character(len=2) :: opt_suffix !< Имя варианта подачи удобрения !Как часть параметров для вывода данных
integer, parameter :: mnc = (year_max - year_min + 1)*nmonth !Как часть параметров для задания климатических данных
!< Колличество месяцев в расчете
integer :: k !< Номер месяца с начала работы программы !Как часть параметров для шага по времени
! -------------------------------------------------------------------------------------------------------------------
! Main part of rothc
! ------- Pools -------
real, dimension(:,:,:), pointer :: Catm !< атмосфера real, dimension(:,:,:), pointer :: Catm !< атмосфера
real, dimension(:,:,:), pointer :: Cveg !< растительность real, dimension(:,:,:), pointer :: Cveg !< растительность
real, dimension(:,:,:), pointer :: CDPM !< разлагаемый растительный материал / decomposable plant material real, dimension(:,:,:), pointer :: CDPM !< разлагаемый растительный материал / decomposable plant material
real, dimension(:,:,:), pointer :: CRPM !< устойчивый растительный материал / resistant plant material real, dimension(:,:,:), pointer :: CRPM !< устойчивый растительный материал / resistant plant material
real, dimension(:,:,:), pointer :: CBIO !< пул микробной биомассы / microbial biomass pool real, dimension(:,:,:), pointer :: CBIO !< пул микробной биомассы / microbial biomass pool
real, dimension(:,:,:), pointer :: CHUM !< долгоживущий гумусовый пул / long lived humified pool real, dimension(:,:,:), pointer :: CHUM !< долгоживущий гумусовый пул / long lived humified pool
! потоки n_Catm, n_Cveg, n_CDPM, n_CRPM, n_CBIO, n_CHUM ! ------- Flows n_Catm, n_Cveg, n_CDPM, n_CRPM, n_CBIO, n_CHUM -------
real, dimension(:,:,:), pointer :: litterfall1 !< Между растениями и почвой DPM real, dimension(:,:,:), pointer :: litterfall1 !< Между растениями и почвой DPM
real, dimension(:,:,:), pointer :: litterfall2 !< Между растением и почвой RPM real, dimension(:,:,:), pointer :: litterfall2 !< Между растением и почвой RPM
real, dimension(:,:,:), pointer :: atmosphere1 !< Между атмосферой и почвой BIO real, dimension(:,:,:), pointer :: atmosphere1 !< Между атмосферой и почвой BIO
...@@ -23,13 +37,6 @@ implicit none ...@@ -23,13 +37,6 @@ implicit none
real, dimension(:,:,:), pointer :: respiration4 !< Между почвой HUM и атмосферой ! 4 - HUM real, dimension(:,:,:), pointer :: respiration4 !< Между почвой HUM и атмосферой ! 4 - HUM
! ------- Serve value ------- ! ------- Serve value -------
integer, parameter :: ntiles = 4 !< В данном случае, номер пула integer, parameter :: ntiles = 4 !< В данном случае, номер пула
integer, parameter :: mnc = (year_max - year_min + 1)*nmonth
!< Колличество месяцев в расчете
character(len=2) :: opt_suffix !< Имя варианта подачи удобрения
integer :: k !< Номер месяца с начала работы программы
! ------- Station of observation ------
character(len=10) :: station = 'Rostov' !< Станция наблюдения за климатом
integer, parameter :: opt = 3 !< Номер вариант подачи удобрения
! ------- Initial value ------ ! ------- Initial value ------
real :: Rs = 0.0 !< Функции дыхания real :: Rs = 0.0 !< Функции дыхания
real :: RDPM = 0.0 !< Дыхание пула DPM real :: RDPM = 0.0 !< Дыхание пула DPM
...@@ -47,16 +54,17 @@ implicit none ...@@ -47,16 +54,17 @@ implicit none
! Для деревьев, для кустарников, для натуральной травы, для СХ (/ 0.25, 0.33, 0.67, 1.44 /) ! Для деревьев, для кустарников, для натуральной травы, для СХ (/ 0.25, 0.33, 0.67, 1.44 /)
real :: bettar !< Fraction of soil respiration, [%] from 0 to 1 real :: bettar !< Fraction of soil respiration, [%] from 0 to 1
! ------ Climate variables -------- ! ------ Climate variables --------
real :: MOI(0:mnc) !< Средняя влажность почвы в месяц, [dim] ! ------ Determined within
real :: s0 !< Оптимальная влажность почвы, [dim] real :: s0 !< Оптимальная влажность почвы, [dim]
real :: s !< Влажность почвы в день, [dim]
real :: smin !< Переменные для функций, [dim] real :: smin !< Переменные для функций, [dim]
real :: sw !< Влажность увядания DAO: 0.120 Rostov: 0.146 ! ------ Determined externally
real :: Temp(0:mnc) !< Средняя температура почвы в месяц, [Celsius] real :: Temp(0:mnc) !< Средняя температура почвы в месяц, [Celsius]
real :: Tsoil !< Средняя температура почвы в день, [Celsius] real :: Tsoil !< Средняя температура почвы в день, [Celsius]
real :: veg !< Концентрация растения в день, [%]
real :: vegy(0:mnc) !< Средняя концентрация растений в месяц, [%] real :: vegy(0:mnc) !< Средняя концентрация растений в месяц, [%]
real :: veg !< Концентрация растения в день, [%]
real :: MOI(0:mnc) !< Средняя влажность почвы в месяц, [dim]
real :: s !< Влажность почвы в день, [dim]
real :: sw !< Влажность увядания DAO: 0.120 Rostov: 0.146
! ------ Litterfall -------- ! ------ Litterfall --------
real :: lambdac(0:mnc) !< Поступление углерода в почву, [kg/m**3 / year] real :: lambdac(0:mnc) !< Поступление углерода в почву, [kg/m**3 / year]
real :: work !< Переменная для вывода значений опада (lambdac) real :: work !< Переменная для вывода значений опада (lambdac)
...@@ -64,13 +72,16 @@ contains ...@@ -64,13 +72,16 @@ contains
subroutine carbon_model_init() subroutine carbon_model_init()
write(opt_suffix, '(i0.0)') opt ! ---- Part of rothc carbon_model_init() ----
s0 = 0.5*(1 + sw) s0 = 0.5*(1 + sw)
smin = 1.7*sw smin = 1.7*sw
fdpm = alphadr/(1 + alphadr) fdpm = alphadr/(1 + alphadr)
! ---- Part of general carbon_model_init() ----
write(opt_suffix, '(i0.0)') opt
! ---- Part of enviromental carbon_model_init() ----
open (unit = 1, file = 'initial_value/'//trim(station)//'_Temp.txt', status='unknown') open (unit = 1, file = 'initial_value/'//trim(station)//'_Temp.txt', status='unknown')
read(1,*) Temp(1:mnc) read(1,*) Temp(1:mnc)
close (1) close (1)
...@@ -87,39 +98,27 @@ contains ...@@ -87,39 +98,27 @@ contains
read(1,*) lambdac(1:mnc) read(1,*) lambdac(1:mnc)
close (1) close (1)
select case (mnc) select case (station)
case('Rostov')
case(528)
sw = 0.146 sw = 0.146
bettar = 0.41 bettar = 0.41
case('DAO3', 'DAO4')
case(876)
sw = 0.120
bettar = 0.25
case(900)
sw = 0.120 sw = 0.120
bettar = 0.25 bettar = 0.25
case('VLDMR')
case(600)
sw = 0.120 sw = 0.120
bettar = 0.08 bettar = 0.08
case('TRGK')
case(744)
sw = 0.120 sw = 0.120
bettar = 0.07 bettar = 0.07
case default case default
print*, 'Wrong number, try again(m2)' stop "check failed : unknown station name"
end select end select
lambdac = lambdac/dt lambdac = lambdac/dt
! ---- Part of timesteps init ----
! @todo учесть шаг по времени 1 час
if (dt == 86400) then ! Для шага по времени день: if (dt == 86400) then ! Для шага по времени день:
k = 0 k = 0
Temp(0) = Temp(1) Temp(0) = Temp(1)
...@@ -143,6 +142,7 @@ contains ...@@ -143,6 +142,7 @@ contains
subroutine carbon_model_calc_at_cell(ii,jj) subroutine carbon_model_calc_at_cell(ii,jj)
! ---- Part of environmental_calc_at_cell(ii,jj) ----
use grid, only: date_c use grid, only: date_c
integer, intent(in) :: ii, jj integer, intent(in) :: ii, jj
...@@ -168,6 +168,7 @@ contains ...@@ -168,6 +168,7 @@ contains
k = k+1 k = k+1
end if end if
! ---- Part of rothc_calc_at_cell(ii,jj) ----
if (s >= s0) then if (s >= s0) then
Fs = 1 - 0.8*(s-s0) Fs = 1 - 0.8*(s-s0)
else if (smin < s .and. s < s0) then else if (smin < s .and. s < s0) then
......
...@@ -4,9 +4,6 @@ ...@@ -4,9 +4,6 @@
!" !"
!" (используется только при выборе опции carbon_model_type = 'other' в окне настроек 1) !" (используется только при выборе опции carbon_model_type = 'other' в окне настроек 1)
!" (технически представляет собой fortran-модуль, по структуре аналогичный модулям source/carbon/carbon_model_*.f90) !" (технически представляет собой fortran-модуль, по структуре аналогичный модулям source/carbon/carbon_model_*.f90)
!"
!"
!" В качестве примера реализована модель Rothc
......
...@@ -11,8 +11,6 @@ ...@@ -11,8 +11,6 @@
!" - процедуры вызываются последовательно на разных этапах основного цикла программы (см. source/main.f90) !" - процедуры вызываются последовательно на разных этапах основного цикла программы (см. source/main.f90)
!" - для выполнения расчётов требуется предворительное создание файла формата .txt, с заданием там месячных значений: !" - для выполнения расчётов требуется предворительное создание файла формата .txt, с заданием там месячных значений:
!" Поступление углерода, температура, распределение растительности !" Поступление углерода, температура, распределение растительности
!"
!" Реализована модель Rothc
...@@ -23,19 +21,19 @@ module carbon_model_user_aux ...@@ -23,19 +21,19 @@ module carbon_model_user_aux
use grid, only : dt use grid, only : dt
implicit none implicit none
! пулы ! ------- Pools -------
! потоки n_Catm, n_Cveg, n_CDPM, n_CRPM, n_CBIO, n_CHUM
! ------- Serve value ------- ! ------- Flows -------
! ------- Station of observation ------
! ------- Functions ------------ ! ------- Functions ------------
! ------- Coefficients ------------ ! ------- Coefficients ------------
! ------ Climate variables -------- ! ------- Climate variables --------
! ------- Serve value -------
! ------- Station of observation ------
contains contains
...@@ -56,10 +54,11 @@ contains ...@@ -56,10 +54,11 @@ contains
subroutine carbon_model_calc_at_cell(ii, jj) subroutine carbon_model_calc_at_cell(ii, jj)
integer, intent(in) :: ii, jj integer, intent(in) :: ii, jj
!print*, 'important thing 1, ',
!print*, 'important thing 2, ', !print*, 'Variable to check,', 'name',
!print*, 'important thing 3, ', !print*, 'Variable to check,', 'name',
!print*, 'important thing 4, ', !print*, 'Variable to check,', 'name',
!print*, 'Variable to check,', 'name',
end subroutine end subroutine
...@@ -75,11 +74,11 @@ contains ...@@ -75,11 +74,11 @@ contains
subroutine carbon_model_postprocessing() !Вывод переменных subroutine carbon_model_postprocessing()
use grid, only : date_c use grid, only : date_c
!write(500,*) date_c%timestamp,';' !write(500,*) date_c%timestamp,';' ! Вывод переменных
end subroutine end subroutine
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment