AirTemperatureDailyMean Module

History

current version 1.0 - 19th May 2021

version date comment
1.0 19/May/2021 Original code

License

license: GNU GPL http://www.gnu.org/licenses/

Module Description

Module to manage mean daily air temperature

Description: set properties and initialize variables for each interpolation method



Contents


Variables

Type Visibility Attributes Name Initial
integer(kind=short), public :: dtTemperatureDailyMean = 0

cumulation deltat

type(grid_real), public :: temperatureAirDailyMean

[°C]

type(ObservationalNetwork), public :: thermometersDailyMean

temperature stations network

real(kind=float), private, parameter :: MISSING_DEF_REAL = -9999.9
real(kind=float), private :: cellsizeInterpolation

spatial resolution of interpolated grid

integer(kind=short), private :: dtGrid

dt of imported field

integer(kind=short), private :: elevationDrift

1 = use elevation to modify interpolated data

integer(kind=short), private :: export

activates grid exporting

type(CRS), private :: exportGridMapping
integer(kind=short), private :: export_dt

time between two exportations

integer(kind=short), private :: export_epsg

coordinate reference system of exported grid

character(len=1000), private :: export_file

name of exported grid

character(len=1000), private :: export_file_var

name of exported variance grid

integer(kind=short), private :: export_format

1 = esri_ascii, 2 = esri_binary, 3 = netcdf

character(len=1000), private :: export_path

folder where to put exported grids

type(DateTime), private :: export_start

time and date to start exporting

type(DateTime), private :: export_stop

time and date to stop exporting

type(grid_real), private :: exportedGrid
type(grid_real), private :: exportedGridVar
character(len=300), private :: fileGrid

file containing grids

integer(kind=short), private :: fileunit

unit of file containing data

type(grid_real), private :: gridTemp
type(grid_real), private :: grid_devst

standard deviation of kriging interpolation

integer(kind=short), private :: i

loop index

real(kind=float), private :: idw_power

power to be used with IDW

type(grid_real), private :: interpolatedMap(3)

1 = map for thiessen, 2 = map for idw, 3 = map for kriging

integer(kind=short), private :: interpolationMethod

method to spatial interpolate site data

integer(kind=short), private :: interpolationMethod_assignment

method to assign spatial interpolation ! 1 = one method for the entire domain, 2 = a map with interpolation method codes

type(grid_integer), private :: interpolationMethod_map
integer(kind=short), private :: interpolationMethod_vector(3)

defines active interpolation methods

integer(kind=short), private :: j

loop index

integer(kind=short), private :: krige_anisotropy

considers anisotropy, default = 0 excludes anisotropy

integer(kind=short), private :: krige_lags

number of lags for semivariogram. if undefined or set to 0 default to 15

real(kind=float), private :: krige_maxlag

maximum distance to be considered for semivariogram assessment. If undefined or set to 0, it is computed automatically

integer(kind=short), private :: krige_var

when set to 1 a grid of kriging variance is generated and exported if export option is active, default to 0

integer(kind=short), private :: krige_varmodel

1 = spherical, 2 = exponential, 3 = gaussian, 0 = automatic fitting. default to 2

real(kind=float), private :: lapse

lapse rate [°C/m]

real(kind=float), private :: lapse_computed

lapse rate computed from data [°C/m]

type(grid_real), private :: lapse_map

lapse rate map

integer(kind=short), private :: lapse_rate_assignment

1 = scalar, 2 = map that may change with time

integer(kind=short), private :: lapse_rate_computation

1 = compute lapse rate from data at each time step, 0 = use assigned lapse rate

logical, private :: needConversion
integer(kind=short), private :: neighbors

number of closest data to use for interpolation

real(kind=float), private :: offset_value

offset to apply to final map

real(kind=float), private :: r2min

value of linear regression R2 below which lapse-rate-scalar is used instead of computed lapse rate

real(kind=float), private, parameter :: refElevation = 1000.

reference elevation for applying lapse rate

real(kind=float), private :: scale_factor

scale factor to apply to final map

type(ObservationalNetwork), private :: stationsRefElev

stations network at reference elevation

type(DateTime), private :: timeNew

time when new data must be read

type(DateTime), private :: timeNewExport

time when new exporting must occur

real(kind=float), private :: valid_prcn

when data from several time steps are read, this is the minimum percentage (0-1) of valid data that must be prresent to consider valid the aggregated value.

real, private, ALLOCATABLE :: vectorT(:)

vector of temperatures and elevation to compute lapse rate

real, private, ALLOCATABLE :: vectorZ(:)

vector of temperatures and elevation to compute lapse rate


Subroutines

public subroutine AirTemperatureDailyMeanInit(ini, mask, dtMeteo, tstart, dem_loaded)

Initialize air temperature

Arguments

Type IntentOptional Attributes Name
type(IniList), intent(in) :: ini
type(grid_integer), intent(in) :: mask

defines interpolation extent

integer(kind=short), intent(in) :: dtMeteo

deltat of meteo data reading

type(DateTime), intent(in) :: tstart

initial time

logical, intent(in) :: dem_loaded

true if dem has been loaded

public subroutine AirTemperatureDailyMeanRead(time, dem)

Read air temperature data

Arguments

Type IntentOptional Attributes Name
type(DateTime), intent(in) :: time

current time

type(grid_real), intent(in) :: dem

private subroutine SetSpecificProperties(method, ini, mask)

Arguments

Type IntentOptional Attributes Name
integer(kind=short), intent(in) :: method
type(IniList), intent(in) :: ini
type(grid_integer), intent(in) :: mask