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

Little code optimization: fix arg_kit

parent c607d60a
No related branches found
No related tags found
No related merge requests found
......@@ -38,6 +38,8 @@ module carbon
& carbon_model_calc_at_tile_user => carbon_model_calc_at_tile, &
& carbon_model_postprocessing_user => carbon_model_postprocessing
use carbon_model_to_core_arg_kit, only : dummy_init
implicit none
private
......@@ -109,6 +111,8 @@ contains
call carbon_model_init()
call dummy_init()
call carbon_model_assembly()
if (if_standard_output) call carbon_standard_output()
......
module carbon_model_to_core_arg_kit
!< @brief обработка аргументов мультипликативных функций
......@@ -6,27 +5,58 @@ module carbon_model_to_core_arg_kit
! интерфейс
! ---------------------------------------------------------------------------------
use carbon_core, only: arg_kit_type, narg_default
use grid, only: year_min, year_max
use carbon_core, only: arg_kit_type, narg_default, ntile
use grid, only: year_min, year_max, i0, i1, j0, j1
implicit none
private
public :: set_args
public :: get_args
public :: nmonth
public :: dummy_init, dummy, dummy_n, dummy_ij, dummy_ijn, dummy_ijn_month, dummy_year
! параметры
! ---------------------------------------------------------------------------------
integer, parameter :: nmonth = 12
integer :: fix1, fix2
integer, parameter :: nmonth = 12
real, target :: dummy
real, allocatable, dimension(:), target :: dummy_n
real, allocatable, dimension(:,:), target :: dummy_ij
real, allocatable, dimension(:,:,:), target :: dummy_ijn
real, allocatable, dimension(:,:,:,:), target :: dummy_ijn_month
real, allocatable, dimension(:), target :: dummy_year
contains
! внешние процедуры
! ---------------------------------------------------------------------------------
subroutine dummy_init()
! ---------------------------------------
!< @brief заглушки для элементов программы
use carbon_core, only: ntile
use grid, only: i0, i1, j0, j1, ml
!allocate(dummy)
allocate(dummy_n(ntile))
allocate(dummy_ij(i0:i1,j0:j1))
allocate(dummy_ijn(i0:i1,j0:j1,ntile))
allocate(dummy_ijn_month(i0:i1,j0:j1,ntile,nmonth))
allocate(dummy_year(year_min:year_max))
dummy = 0.
dummy_n = 0.
dummy_ij = 0.
dummy_ijn = 0.
dummy_ijn_month = 0.
dummy_year = 0.
end subroutine
subroutine set_args(arg_kit, x, x_n, x_ij, x_ijn, x_ijn_month, x_year)
! ---------------------------------------
......@@ -37,6 +67,7 @@ contains
use carbon_core, only : ntile
type(arg_kit_type), intent(inout) :: arg_kit(narg_default)
!> перечень возможных аргументов:
real, optional, intent(in), target :: x
real, optional, intent(in), target :: x_n(ntile)
......@@ -46,7 +77,6 @@ contains
real, optional, intent(in), target :: x_year(year_min:year_max)
integer :: n
integer :: mnc !< Количество месяцев в расчете
do n = 1, narg_default
allocate(arg_kit(n)%arg1)
......@@ -63,29 +93,63 @@ contains
arg_kit(n)%arg6 = miss_v
enddo
! arg_kit(1) - x
if (present(x)) then
arg_kit(1)%arg1 => x
arg_kit(1)%arg2 => dummy_n
arg_kit(1)%arg3 => dummy_ij
arg_kit(1)%arg4 => dummy_ijn
arg_kit(1)%arg5 => dummy_ijn_month
arg_kit(1)%arg6 => dummy_year
arg_kit(1)%num = 1
elseif (present(x_n)) then
arg_kit(1)%arg1 => dummy
arg_kit(1)%arg2 => x_n
arg_kit(1)%arg3 => dummy_ij
arg_kit(1)%arg4 => dummy_ijn
arg_kit(1)%arg5 => dummy_ijn_month
arg_kit(1)%arg6 => dummy_year
arg_kit(1)%num = 2
elseif (present(x_ij)) then
arg_kit(1)%arg1 => dummy
arg_kit(1)%arg2 => dummy_n
arg_kit(1)%arg3 => x_ij
arg_kit(1)%arg4 => dummy_ijn
arg_kit(1)%arg5 => dummy_ijn_month
arg_kit(1)%arg6 => dummy_year
arg_kit(1)%num = 3
elseif (present(x_ijn)) then
arg_kit(1)%arg1 => dummy
arg_kit(1)%arg2 => dummy_n
arg_kit(1)%arg3 => dummy_ij
arg_kit(1)%arg4 => x_ijn
arg_kit(1)%arg5 => dummy_ijn_month
arg_kit(1)%arg6 => dummy_year
arg_kit(1)%num = 4
elseif (present(x_ijn_month)) then
arg_kit(1)%arg1 => dummy
arg_kit(1)%arg2 => dummy_n
arg_kit(1)%arg3 => dummy_ij
arg_kit(1)%arg4 => dummy_ijn
arg_kit(1)%arg5 => x_ijn_month
arg_kit(1)%arg6 => dummy_year
arg_kit(1)%num = 5
elseif (present(x_year)) then
arg_kit(1)%arg1 => dummy
arg_kit(1)%arg2 => dummy_n
arg_kit(1)%arg3 => dummy_ij
arg_kit(1)%arg4 => dummy_ijn
arg_kit(1)%arg5 => dummy_ijn_month
arg_kit(1)%arg6 => x_year
arg_kit(1)%num = 6
else
else! для const
arg_kit(1)%arg1 = miss_v
arg_kit(1)%num = 1 ! для const
arg_kit(1)%arg2 => dummy_n
arg_kit(1)%arg3 => dummy_ij
arg_kit(1)%arg4 => dummy_ijn
arg_kit(1)%arg5 => dummy_ijn_month
arg_kit(1)%arg6 => dummy_year
arg_kit(1)%num = 1
end if
end subroutine
......@@ -104,20 +168,8 @@ contains
integer :: n
do n = 1, narg_default
select case(arg_kit(n)%num)
case(1)
args(n) = arg_kit(n)%arg1
case(2)
args(n) = arg_kit(n)%arg2(nn)
case(3)
args(n) = arg_kit(n)%arg3(ii,jj)
case(4)
args(n) = arg_kit(n)%arg4(ii,jj,nn)
case(5)
args(n) = arg_kit(n)%arg5(ii,jj,nn,month)
case(6)
args(n) = arg_kit(n)%arg6(year)
end select
args(n) = arg_kit(n)%arg1 + arg_kit(n)%arg2(nn) + arg_kit(n)%arg3(ii,jj) + arg_kit(n)%arg4(ii,jj,nn) + &
& arg_kit(n)%arg5(ii,jj,nn,month) + arg_kit(n)%arg6(year)
enddo
end function
......
......@@ -21,8 +21,6 @@ module environment
& environment_data_calc_at_cell_station => environment_data_calc_at_cell, &
& environment_data_calc_at_tile_station => environment_data_calc_at_tile
use config, only : environment_data_type, &
& environment_model_type
......
......@@ -33,7 +33,7 @@
! дополнительно для environment_data_type = 'station':
!> Имя станции:
station_name = 'Rostov'
station_name = 'DAO4'
! 'DAO4' - Станция в Долгопрудном 2
! 'DAO3' - Станция в Долгопрудном 1
! 'TRGK' - Данные Торжок
......@@ -41,7 +41,7 @@
! 'Rostov' - Станция ФАНЦ
!
!> Тип подачи удобрения:
station_opt = '3'
station_opt = '1'
! '1' - контрольный случай, без дополнительных удобрений
! '2' - 2 способ подачи удобрений
! '3' - 3 способ подачи удобрений
......@@ -103,12 +103,14 @@
datetime_init_mode = 'auto'
!
! 'auto' - получить из входного файла (для lsm_offline)
! 'auto' - указать автоматически дату начала наблюдения станции
! 'manual' - задать вручную [yyyy-mm-dd hh:mm:ss]
datetime_init = '1937-01-01 00:00:00'
!> Продолжительность расчета:
ntime_mode = 'auto'
!
! 'auto' - до конца входного файла (для lsm_offline)
! 'auto' - указать автоматически дату конца наблюдения станции
! 'ntime' - указанное число шагов
ntime = 1000
! 'datetime_last' - до достижения указанной даты
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment