5.13.2-dev0
mHM
The mesoscale Hydrological Model
Loading...
Searching...
No Matches
mo_neutrons Module Reference

Models to predict neutron intensities above soils. More...

Functions/Subroutines

subroutine, public desiletsn0 (soilmoisture, horizon_depth, bd, latwater, n0, neutrons)
 Calculate neutrons from soil moisture for effective soil layer.
 
subroutine, public cosmic (soilmoisture, horizons, neutron_integral_afast, interc, snowpack, l1_n0, l1_bulkdens, l1_latticewater, l1_cosmicl3, neutrons)
 Calculate neutrons from soil moisture in all layers.
 
subroutine loopconstants (ll, soilmoisture, l1_bulkdens, l1_latticewater, l1_cosmicl3, sm, bd, lw, l3)
 
subroutine layerthickness (ll, horizons, interc, snowpack, zthick)
 
subroutine layerwaterheight (ll, sm, h2oeffheight)
 
subroutine approx_mon_int (res, f, c, xmin, xmax, eps, steps, fxmin, fxmax)
 
recursive subroutine approx_mon_int_steps (res, f, c, xmin, xmax, eps, steps, fxmin, fxmax)
 
recursive subroutine approx_mon_int_eps (res, f, c, xmin, xmax, eps, fxmin, fxmax)
 
subroutine, public tabularintegralafast (integral, maxc)
 Save approximation data for A_fast.
 
subroutine tabularintegralhermafast (integral, intsize, maxc)
 
subroutine lookupintegral (res, integral, c)
 
subroutine lookuphermiteintegral (res, integral, intsize, c, maxc)
 
subroutine cosmiceffintegration (res, x)
 
subroutine oldintegration (res, c)
 
real(dp) function intgrandfast (c, phi)
 
real(dp) function intgrandderivfast (c, phi)
 
real(dp) function exppolynomdeg3 (x, a, b, c, d)
 
real(dp) function h00 (t)
 
real(dp) function h01 (t)
 
real(dp) function h10 (t)
 
real(dp) function h11 (t)
 

Detailed Description

Models to predict neutron intensities above soils.

The number of neutrons above the ground is directly related to the number soil water content in the ground, air, vegetation and/or snow. This module forward-models neutron abundance as a state variable for each cell.

Authors
Martin Schroen
Date
Mar 2015
Warning
THIS MODULE IS WORK IN PROGRESS, DO NOT USE FOR RESEARCH.

Function/Subroutine Documentation

◆ approx_mon_int()

subroutine mo_neutrons::approx_mon_int ( real(dp)  res,
real(dp), external  f,
real(dp), intent(in)  c,
real(dp), intent(in)  xmin,
real(dp), intent(in)  xmax,
real(dp), optional  eps,
integer(i4), optional  steps,
real(dp), optional  fxmin,
real(dp), optional  fxmax 
)
private

Definition at line 462 of file mo_neutrons.f90.

References approx_mon_int_eps(), and approx_mon_int_steps().

Referenced by tabularintegralafast(), and tabularintegralhermafast().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ approx_mon_int_eps()

recursive subroutine mo_neutrons::approx_mon_int_eps ( real(dp)  res,
real(dp), external  f,
real(dp), intent(in)  c,
real(dp), intent(in)  xmin,
real(dp), intent(in)  xmax,
real(dp), intent(in)  eps,
real(dp), intent(in)  fxmin,
real(dp), intent(in)  fxmax 
)
private

Definition at line 550 of file mo_neutrons.f90.

References approx_mon_int_eps().

Referenced by approx_mon_int(), and approx_mon_int_eps().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ approx_mon_int_steps()

recursive subroutine mo_neutrons::approx_mon_int_steps ( real(dp)  res,
real(dp), external  f,
real(dp), intent(in)  c,
real(dp), intent(in)  xmin,
real(dp), intent(in)  xmax,
real(dp), intent(in)  eps,
integer(i4), intent(in)  steps,
real(dp), intent(in)  fxmin,
real(dp), intent(in)  fxmax 
)
private

Definition at line 515 of file mo_neutrons.f90.

References approx_mon_int_steps().

Referenced by approx_mon_int(), and approx_mon_int_steps().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ cosmic()

subroutine, public mo_neutrons::cosmic ( real(dp), dimension(:), intent(in)  soilmoisture,
real(dp), dimension(:), intent(in)  horizons,
real(dp), dimension(:), intent(in)  neutron_integral_afast,
real(dp), intent(in)  interc,
real(dp), intent(in)  snowpack,
real(dp), intent(in)  l1_n0,
real(dp), dimension(:), intent(in)  l1_bulkdens,
real(dp), dimension(:), intent(in)  l1_latticewater,
real(dp), dimension(:), intent(in)  l1_cosmicl3,
real(dp), intent(inout)  neutrons 
)

Calculate neutrons from soil moisture in all layers.

Neutron counts above the ground (one value per cell in mHM) can be derived by a simplified physical neutron transport simulation. Fast cosmic-Ray neutrons are generated in the soil and attenuated differently in water and soil. The remaining neutrons that reached the surface relate to the profile of soil water content below. Variables like N, alpha and L3 are site-specific and need to be calibrated.

Parameters
[in]real(dp), dimension(:) :: SoilMoistureSoil Moisture
[in]real(dp), dimension(:) :: HorizonsHorizon depths
[in]real(dp), dimension(:) :: neutron_integral_AFastTabular for Int Approx
[in]real(dp) :: intercinterception
[in]real(dp) :: snowpacksnowpack
[in]real(dp) :: L1_No_countL1_No_count
[in]real(dp), dimension(:) :: L1_bulkDensBulk Density
[in]real(dp), dimension(:) :: L1_latticeWaterLattice Water
[in]real(dp), dimension(:) :: L1_COSMICL3L3 from the COSMIC module
[in,out]real(dp) :: neutronsNeutron counts
Author
Martin Schroen, originally written by Rafael Rosolem
Date
Mar 2015 Rohini Kumar Oct 2021 - Neutron count module to mHM (5.11.2) - develop branch

Definition at line 253 of file mo_neutrons.f90.

References mo_mhm_constants::cosmic_alpha, mo_mhm_constants::cosmic_l1, mo_mhm_constants::cosmic_l2, mo_mhm_constants::cosmic_l4, mo_mhm_constants::h2odens, layerthickness(), layerwaterheight(), lookupintegral(), and loopconstants().

Referenced by mo_mhm::mhm().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ cosmiceffintegration()

subroutine mo_neutrons::cosmiceffintegration ( real(dp)  res,
real(dp), intent(in)  x 
)
private

Definition at line 754 of file mo_neutrons.f90.

References exppolynomdeg3().

Here is the call graph for this function:

◆ desiletsn0()

subroutine, public mo_neutrons::desiletsn0 ( real(dp), dimension(:), intent(in)  soilmoisture,
real(dp), dimension(:), intent(in)  horizon_depth,
real(dp), dimension(:), intent(in)  bd,
real(dp), dimension(:), intent(in)  latwater,
real(dp), intent(in)  n0,
real(dp), intent(inout)  neutrons 
)

Calculate neutrons from soil moisture for effective soil layer.

Using the N0-relation derived by Desilets, neutron counts above the ground (one value per cell in mHM) can be derived by a semi-empirical, semi-physical relation. The result depends on N0, the neutron counts for 0% soil mositure. This variable is site-specific and is a global parameter in mHM.

Parameters
[in]real(dp), dimension(:) :: SoilMoistureSoil Moisture
[in]real(dp), dimension(:) :: Horizon_depthHorizon depths
[in]real(dp), dimension(:) :: BdBulk density
[in]real(dp), dimension(:) :: LatWaterLattice water
[in]real(dp) :: N0dry neutron counts
[out]real(dp), dimension(size(SoilMoisture,1)) :: neutronsNeutron counts
Author
Martin Schroen
Date
Mar 2015 Modified Rohini Kumar Oct 2021 - Vertical weighting approach for the Neutron count module to mHM - develop branch

Definition at line 99 of file mo_neutrons.f90.

References mo_mhm_constants::desilets_a0, mo_mhm_constants::desilets_a1, and mo_mhm_constants::desilets_a2.

Referenced by mo_mhm::mhm().

Here is the caller graph for this function:

◆ exppolynomdeg3()

real(dp) function mo_neutrons::exppolynomdeg3 ( real(dp), intent(in)  x,
real(dp), intent(in)  a,
real(dp), intent(in)  b,
real(dp), intent(in)  c,
real(dp), intent(in)  d 
)
private

Definition at line 858 of file mo_neutrons.f90.

References exppolynomdeg3().

Referenced by cosmiceffintegration(), and exppolynomdeg3().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ h00()

real(dp) function mo_neutrons::h00 ( real(dp), intent(in)  t)
private

Definition at line 869 of file mo_neutrons.f90.

References h00().

Referenced by h00(), and lookuphermiteintegral().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ h01()

real(dp) function mo_neutrons::h01 ( real(dp), intent(in)  t)
private

Definition at line 877 of file mo_neutrons.f90.

References h01().

Referenced by h01(), and lookuphermiteintegral().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ h10()

real(dp) function mo_neutrons::h10 ( real(dp), intent(in)  t)
private

Definition at line 885 of file mo_neutrons.f90.

References h10().

Referenced by h10(), and lookuphermiteintegral().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ h11()

real(dp) function mo_neutrons::h11 ( real(dp), intent(in)  t)
private

Definition at line 893 of file mo_neutrons.f90.

References h11().

Referenced by h11(), and lookuphermiteintegral().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ intgrandderivfast()

real(dp) function mo_neutrons::intgrandderivfast ( real(dp), intent(in)  c,
real(dp), intent(in)  phi 
)
private

Definition at line 849 of file mo_neutrons.f90.

References intgrandderivfast().

Referenced by intgrandderivfast(), and tabularintegralhermafast().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ intgrandfast()

real(dp) function mo_neutrons::intgrandfast ( real(dp), intent(in)  c,
real(dp), intent(in)  phi 
)
private

Definition at line 840 of file mo_neutrons.f90.

References intgrandfast().

Referenced by intgrandfast(), tabularintegralafast(), and tabularintegralhermafast().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ layerthickness()

subroutine mo_neutrons::layerthickness ( integer(i4), intent(in)  ll,
real(dp), dimension(:), intent(in)  horizons,
real(dp), intent(in)  interc,
real(dp), intent(in)  snowpack,
real(dp), dimension(:), intent(out)  zthick 
)
private

Definition at line 420 of file mo_neutrons.f90.

Referenced by cosmic().

Here is the caller graph for this function:

◆ layerwaterheight()

subroutine mo_neutrons::layerwaterheight ( integer(i4), intent(in)  ll,
real(dp), intent(in)  sm,
real(dp), dimension(:), intent(out)  h2oeffheight 
)
private

Definition at line 439 of file mo_neutrons.f90.

Referenced by cosmic().

Here is the caller graph for this function:

◆ lookuphermiteintegral()

subroutine mo_neutrons::lookuphermiteintegral ( real(dp)  res,
real(dp), dimension(:), intent(in)  integral,
integer(i4), intent(in)  intsize,
real(dp), intent(in)  c,
real(dp), intent(in)  maxc 
)
private

Definition at line 722 of file mo_neutrons.f90.

References h00(), h01(), h10(), and h11().

Here is the call graph for this function:

◆ lookupintegral()

subroutine mo_neutrons::lookupintegral ( real(dp), intent(out)  res,
real(dp), dimension(:), intent(in)  integral,
real(dp), intent(in)  c 
)
private

Definition at line 694 of file mo_neutrons.f90.

Referenced by cosmic().

Here is the caller graph for this function:

◆ loopconstants()

subroutine mo_neutrons::loopconstants ( integer(i4), intent(in)  ll,
real(dp), dimension(:), intent(in)  soilmoisture,
real(dp), dimension(:), intent(in)  l1_bulkdens,
real(dp), dimension(:), intent(in)  l1_latticewater,
real(dp), dimension(:), intent(in)  l1_cosmicl3,
real(dp), intent(out)  sm,
real(dp), intent(out)  bd,
real(dp), intent(out)  lw,
real(dp), intent(out)  l3 
)
private

Definition at line 390 of file mo_neutrons.f90.

Referenced by cosmic().

Here is the caller graph for this function:

◆ oldintegration()

subroutine mo_neutrons::oldintegration ( real(dp)  res,
real(dp), intent(in)  c 
)
private

Definition at line 808 of file mo_neutrons.f90.

◆ tabularintegralafast()

subroutine, public mo_neutrons::tabularintegralafast ( real(dp), dimension(:)  integral,
real(dp), intent(in)  maxc 
)

Save approximation data for A_fast.

The COSMIC subroutine needs A_fast to be calculated. A_fast=int_{0}^{pi/2} exp(-Lambda_fast(z)/cos(phi) dphi) This subroutine stores data for intsize values for c:=Lambda_fast(z) between 0 and maxC, and will be written into the global array variable neutron_integral_AFast. The calculation of the values is done with a very precise recursive approximation subroutine. That recursive subroutine should not be used inside the time, cells and layer loops, because it is slow. Inside the loops in the module COSMIC the tabular is used to estimate A_fast, if 0<c<maxC, otherwise the recursive approximation is used.

Parameters
[in]real(dp), dimension(:,:) :: SoilMoistureSoil Moisture
[in]real(dp), dimension(:) :: HorizonsHorizon depths
[in]real(dp), dimension(:) :: params! N0, N1, N2, alpha0, alpha1, L30, L31
[in]integer(i4) :: intsize! number of values for the approximation
[in]real(dp) :: maxC! maximum value for A_fast
[out]real(dp), dimension(intsize) :: neutron_integral_AFastapproximation values
Author
Maren Kaluza
Date
Nov 2017

Definition at line 648 of file mo_neutrons.f90.

References approx_mon_int(), and intgrandfast().

Referenced by mo_startup::constants_init().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ tabularintegralhermafast()

subroutine mo_neutrons::tabularintegralhermafast ( real(dp), dimension(:)  integral,
integer(i4), intent(in)  intsize,
real(dp), intent(in)  maxc 
)
private

Definition at line 671 of file mo_neutrons.f90.

References approx_mon_int(), intgrandderivfast(), and intgrandfast().

Here is the call graph for this function: