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