| 1 | module comsoil_h_PEM |
|---|
| 2 | |
|---|
| 3 | implicit none |
|---|
| 4 | integer, parameter :: nsoilmx_PEM = 27 ! number of layers in the PEM |
|---|
| 5 | integer, parameter :: n_1km = 23 ! index at which we have overcome 1km |
|---|
| 6 | |
|---|
| 7 | real,save,allocatable,dimension(:) :: layer_PEM ! soil layer depths [m] |
|---|
| 8 | real,save,allocatable,dimension(:) :: mlayer_PEM ! soil mid-layer depths [m] |
|---|
| 9 | real,save,allocatable,dimension(:,:,:) :: TI_PEM ! soil thermal inertia [SI] |
|---|
| 10 | real,save,allocatable,dimension(:,:) :: inertiedat_PEM ! soil thermal inertia saved as reference for current climate [SI] |
|---|
| 11 | ! variables (FC: built in firstcall in soil.F) |
|---|
| 12 | REAL,SAVE,ALLOCATABLE :: tsoil_PEM(:,:,:) ! sub-surface temperatures [K] |
|---|
| 13 | real,save,allocatable :: mthermdiff_PEM(:,:) ! (FC) mid-layer thermal diffusivity [SI] |
|---|
| 14 | real,save,allocatable :: thermdiff_PEM(:,:) ! (FC) inter-layer thermal diffusivity [SI] |
|---|
| 15 | real,save,allocatable :: coefq_PEM(:) ! (FC) q_{k+1/2} coefficients [SI] |
|---|
| 16 | real,save,allocatable :: coefd_PEM(:,:) ! (FC) d_k coefficients [SI] |
|---|
| 17 | real,save,allocatable :: alph_PEM(:,:) ! (FC) alpha_k coefficients [SI] |
|---|
| 18 | real,save,allocatable :: beta_PEM(:,:) ! beta_k coefficients [SI] |
|---|
| 19 | real,save :: mu_PEM ! mu coefficient [SI] |
|---|
| 20 | real,save :: fluxgeo ! Geothermal flux [W/m^2] |
|---|
| 21 | LOGICAL soil_pem ! True by default, to run with the subsurface physic. Read in pem.def |
|---|
| 22 | real,save,allocatable,dimension(:) :: water_reservoir ! Large reserve of water [kg/m^2] |
|---|
| 23 | real,save :: water_reservoir_nom |
|---|
| 24 | contains |
|---|
| 25 | |
|---|
| 26 | subroutine ini_comsoil_h_PEM(ngrid,nslope) |
|---|
| 27 | |
|---|
| 28 | implicit none |
|---|
| 29 | integer,intent(in) :: ngrid ! number of atmospheric columns |
|---|
| 30 | integer,intent(in) :: nslope ! number of slope within a mesh |
|---|
| 31 | |
|---|
| 32 | allocate(layer_PEM(nsoilmx_PEM)) |
|---|
| 33 | allocate(mlayer_PEM(0:nsoilmx_PEM-1)) |
|---|
| 34 | allocate(TI_PEM(ngrid,nsoilmx_PEM,nslope)) |
|---|
| 35 | allocate(tsoil_PEM(ngrid,nsoilmx_PEM,nslope)) |
|---|
| 36 | allocate(mthermdiff_PEM(ngrid,0:nsoilmx_PEM-1)) |
|---|
| 37 | allocate(thermdiff_PEM(ngrid,nsoilmx_PEM-1)) |
|---|
| 38 | allocate(coefq_PEM(0:nsoilmx_PEM-1)) |
|---|
| 39 | allocate(coefd_PEM(ngrid,nsoilmx_PEM-1)) |
|---|
| 40 | allocate(alph_PEM(ngrid,nsoilmx_PEM-1)) |
|---|
| 41 | allocate(beta_PEM(ngrid,nsoilmx_PEM-1)) |
|---|
| 42 | allocate(inertiedat_PEM(ngrid,nsoilmx_PEM)) |
|---|
| 43 | allocate(water_reservoir(ngrid)) |
|---|
| 44 | end subroutine ini_comsoil_h_PEM |
|---|
| 45 | |
|---|
| 46 | |
|---|
| 47 | subroutine end_comsoil_h_PEM |
|---|
| 48 | |
|---|
| 49 | implicit none |
|---|
| 50 | |
|---|
| 51 | if (allocated(layer_PEM)) deallocate(layer_PEM) |
|---|
| 52 | if (allocated(mlayer_PEM)) deallocate(mlayer_PEM) |
|---|
| 53 | if (allocated(TI_PEM)) deallocate(TI_PEM) |
|---|
| 54 | if (allocated(tsoil_PEM)) deallocate(tsoil_PEM) |
|---|
| 55 | if (allocated(mthermdiff_PEM)) deallocate(mthermdiff_PEM) |
|---|
| 56 | if (allocated(thermdiff_PEM)) deallocate(thermdiff_PEM) |
|---|
| 57 | if (allocated(coefq_PEM)) deallocate(coefq_PEM) |
|---|
| 58 | if (allocated(coefd_PEM)) deallocate(coefd_PEM) |
|---|
| 59 | if (allocated(alph_PEM)) deallocate(alph_PEM) |
|---|
| 60 | if (allocated(beta_PEM)) deallocate(beta_PEM) |
|---|
| 61 | if (allocated(inertiedat_PEM)) deallocate(inertiedat_PEM) |
|---|
| 62 | if (allocated(water_reservoir)) deallocate(water_reservoir) |
|---|
| 63 | if (allocated(water_reservoir)) deallocate(water_reservoir) |
|---|
| 64 | end subroutine end_comsoil_h_PEM |
|---|
| 65 | |
|---|
| 66 | end module comsoil_h_PEM |
|---|