module carbon_model_inmcm

    !< @brief модель углеродного цикла inmcm

    ! интерфейс
    ! ---------------------------------------------------------------------------------

    use carbon_model_to_core, only : set_tiles, set_pool, set_flux, set_mult
    use carbon_model_inmcm_aux

    implicit none

    private
    public :: carbon_model_assembly


contains


    ! внешние процедуры
    ! ---------------------------------------------------------------------------------

    subroutine carbon_model_assembly()

        use environment_model_inmcm, only : nv2, vegg_nv2
        !use environment_core,        only : Tsoil
        use const,                   only : yrs, umol2kg
        use grid,                    only : ms

        integer :: n_Catm, n_Cveg, n_Csoil, n_Csoilb   !< id пулов
        integer :: n_F                                 !< id потока

        call set_tiles(nv2, vegg_nv2)

        call set_pool(pid = n_Catm,   name = 'catm'                                             )
        call set_pool(pid = n_Cveg,   name = 'cveg'   ,                          alias = Cveg   )
        call set_pool(pid = n_Csoil,  name = 'csoil'  ,initial_value = 8.730624, alias = Csoil  )
        call set_pool(pid = n_Csoilb, name = 'csoilb' ,initial_value = 0.178176, alias = Csoilb )

!        station: opt: С1:        С2:
!        ROST     1    8.730624   0.178176
!        VLDR     1    1.61406    0.03294
!        TRGK     1    3.10072    0.06328
!                 2    2.7901482  0.0569418
!                 3    2.93608    0.05992
!        DAO3     1    2.78124    0.05676
!                 2    2.806524   0.057276
!                 3    2.983512   0.060888
!                 4    2.941372   0.060028
!        DAO4     1    3.037706   0.061994   
!                 2    3.173926   0.064774   
!                 3    3.160304   0.064496   
!                 4    2.983218   0.060882   

        call set_flux(fid = n_F, pid_out = n_Csoil, pid_in = n_Catm, name = 'fmicr', alias = Fmicr)
        call set_mult(n_F, 'lin',   x_ijn = Csoil)
        call set_mult(n_F, 'const', c_n = amrp(:) * umol2kg)
        call set_mult(n_F, 'exp',   x_ij = Tsoil(:,:,ms+1), a = 2., k = 0.1, x0 = t_ref_soil)
        call set_mult(n_F, 'step',  x_ij = Tsoil(:,:,ms+1), x0 = tmin_soil, k = 0.5, y0 = 0.5)
        call set_mult(n_F, 'mm',    x_n = rsw, k = 1.,   x0 = -0.20)
        call set_mult(n_F, 'hyp',   x_n = rsw, k = 0.23, x0 = -0.23)
        call set_mult(n_F, 'const', c = 1.5)

        call set_flux(fid = n_F, pid_out = n_Csoilb, pid_in = n_Catm, name = 'fmicrb', alias = Fmicrb)
        call set_mult(n_F, 'lin',   x_ijn = Csoilb)
        call set_mult(n_F, 'const', c_n = amrp(:) * umol2kg)
        call set_mult(n_F, 'exp',   x_ij = Tsoil(:,:,ms+1), a = 2., k = 0.1, x0 = t_ref_soil)
        call set_mult(n_F, 'step',  x_ij = Tsoil(:,:,ms+1), x0 = tmin_soil, k = 0.5, y0 = 0.5)
        call set_mult(n_F, 'mm',    x_n = rsw, k = 1.,   x0 = -0.20)
        call set_mult(n_F, 'hyp',   x_n = rsw, k = 0.23, x0 = -0.23)
        call set_mult(n_F, 'const', c = 1.5)
        call set_mult(n_F, 'const', c = cv81b)

        call set_flux(fid = n_F, pid_out = n_Cveg, pid_in = n_Csoil, name = 'dv68', alias = Flit)
        call set_mult(n_F, 'lin', x_ij = lambd)

        call set_flux(fid = n_F, pid_out = n_Csoil, pid_in = n_Csoilb, name = 'ddc8', alias = Fers)
        call set_mult(n_F, 'lin', x_ijn = ers_weight, k = landuseErs)

    end subroutine carbon_model_assembly

end module