Soil Water Balance (SWB2)
Toggle main menu visibility
Loading...
Searching...
No Matches
storm_drain_capture.F90
Go to the documentation of this file.
1
module
storm_drain_capture
2
3
use
iso_c_binding
4
5
use
constants_and_conversions
6
use
data_catalog
7
use
data_catalog_entry
8
use
datetime
,
only
:
datetime_t
9
use
grid
,
only
:
grid_writearcgrid
10
use
logfiles
,
only
:
logs
,
log_all
11
use
exceptions
,
only
:
warn
,
assert
12
use
parameters
,
only
:
params
13
use
simulation_datetime
,
only
:
sim_dt
14
use
fstring_list
,
only
:
fstring_list_t
15
use
fstring
,
only
:
ascharacter
16
implicit none
17
18
private
19
20
public
::
storm_drain_capture_fraction
21
public
::
storm_drain_capture_initialize
,
storm_drain_capture_calculate
22
23
type
(
data_catalog_entry_t
),
pointer
::
pstorm_drain_capture_fraction
24
real
(c_float),
allocatable
::
storm_drain_capture_fraction
(:)
25
real
(c_float),
allocatable
::
storm_drain_capture_fraction_table
(:)
26
type
(
datetime_t
) ::
date_of_last_retrieval
27
28
contains
29
30
subroutine
storm_drain_capture_initialize
( is_cell_active, landuse_index )
31
32
logical (c_bool)
,
intent(in)
:: is_cell_active(:,:)
33
integer (c_int)
,
intent(in)
:: landuse_index(:)
34
35
! [ LOCALS ]
36
integer (c_int)
:: number_of_landuse_codes
37
integer (c_int)
,
allocatable
:: lu_codes(:)
38
integer (c_int)
:: indx
39
integer (c_int)
:: num_records
40
logical
:: are_lengths_unequal
41
type
(
fstring_list_t
) :: string_list
42
integer (c_int)
:: status
43
character (len=256)
:: sbuf
44
45
call
string_list%append(
"LU_Code"
)
46
call
string_list%append(
"Landuse_Code"
)
47
call
string_list%append(
"Landuse_Lookup_Code"
)
48
49
!> Determine how many UNIQUE landuse codes are present
50
call
params
%get_parameters( slkeys=string_list, ivalues=lu_codes )
51
number_of_landuse_codes = count( lu_codes >= 0 )
52
53
call
string_list%clear()
54
call
string_list%append(
"Storm_drain_capture"
)
55
call
string_list%append(
"Storm_drain_capture_fraction"
)
56
57
allocate
(
storm_drain_capture_fraction
( count( is_cell_active ) ), stat=status )
58
call
assert
( status==0,
"Problem allocating STORM_DRAIN_CAPTURE_FRACTION"
, &
59
__file__, __line__ )
60
61
! set default value for STORM_DRAIN_CAPTURE_FRACTION
62
storm_drain_capture_fraction
= 0.0_c_float
63
64
!> Determine how many storm_drain_capture codes are present
65
call
params
%get_parameters( slkeys=string_list, fvalues=
storm_drain_capture_fraction_table
)
66
67
call
string_list%clear()
68
69
! attempt to locate storm drain capture information in gridded format
70
pstorm_drain_capture_fraction
=>
dat
%find(
"STORM_DRAIN_CAPTURE_FRACTION"
)
71
72
if
(
associated
(
pstorm_drain_capture_fraction
) )
then
73
74
! nothing to do...
75
76
elseif
(
storm_drain_capture_fraction_table
(1) >
ftinyval
)
then
77
78
!> check: number of STORM_DRAIN_CAPTURE_FRACTION_TABLE values == number of landuse codes?
79
num_records = ubound(
storm_drain_capture_fraction_table
, 1)
80
are_lengths_unequal = ( num_records /= number_of_landuse_codes )
81
82
if
( are_lengths_unequal )
then
83
84
sbuf =
"The number of values specifying storm drain capture"
&
85
//
" fraction ("
&
86
//
ascharacter
( num_records )//
") does not match the number of landuse values ("
&
87
//
ascharacter
( number_of_landuse_codes )//
"). Setting default storm drain"
&
88
//
" capture to 0.0 (ZERO)."
89
90
call
warn
( smessage=trim(sbuf), &
91
smodule=__file__, &
92
iline=__line__, &
93
lfatal=.
false
._c_bool, &
94
iloglevel=
log_all
)
95
96
storm_drain_capture_fraction
= 0.0_c_float
97
98
else
99
100
do
indx=lbound( landuse_index, 1 ), ubound( landuse_index, 1 )
101
storm_drain_capture_fraction
( indx ) =
storm_drain_capture_fraction_table
( landuse_index( indx ) )
102
enddo
103
104
endif
105
106
deallocate
(
storm_drain_capture_fraction_table
, stat=status )
107
call
assert
( status==0,
"Problem allocating STORM_DRAIN_CAPTURE_FRACTION_TABLE"
, &
108
__file__, __line__ )
109
110
endif
111
112
end subroutine
storm_drain_capture_initialize
113
114
!--------------------------------------------------------------------------------------------------
115
116
subroutine
storm_drain_capture_calculate
( capture_fraction, indx, is_cell_active )
117
118
real
(c_float),
intent(inout)
:: capture_fraction
119
integer (c_int)
,
intent(in)
:: indx
120
logical (c_bool)
,
intent(in)
:: is_cell_active(:,:)
121
122
! attempt to update values from gridded source, if active
123
if
( .not.
date_of_last_retrieval
==
sim_dt
%curr )
then
124
125
associate( dt =>
sim_dt
%curr )
126
127
if
(
associated
(
pstorm_drain_capture_fraction
) )
then
128
call
pstorm_drain_capture_fraction
%getvalues( dt )
129
if
(
pstorm_drain_capture_fraction
%lGridHasChanged )
then
130
storm_drain_capture_fraction
= pack(
pstorm_drain_capture_fraction
%pGrdBase%rData, is_cell_active )
131
call
grid_writearcgrid
(
"Storm_drain_capture_fraction__as_read_into_SWB.asc"
, &
132
pstorm_drain_capture_fraction
%pGrdBase )
133
endif
134
endif
135
136
date_of_last_retrieval
=
sim_dt
%curr
137
138
end
associate
139
140
endif
141
142
if
(
allocated
(
storm_drain_capture_fraction
) ) &
143
capture_fraction =
storm_drain_capture_fraction
( indx )
144
145
end subroutine
storm_drain_capture_calculate
146
147
end module
storm_drain_capture
constants_and_conversions
This module contains physical constants and convenience functions aimed at performing unit conversion...
Definition
constants_and_conversions.F90:8
constants_and_conversions::false
logical(c_bool), parameter, public false
Definition
constants_and_conversions.F90:39
constants_and_conversions::ftinyval
real(c_float), parameter ftinyval
Definition
constants_and_conversions.F90:47
data_catalog
Defines the DATA_CATALOG_T data type, which contains type-bound procedures to add,...
Definition
data_catalog.F90:10
data_catalog::dat
type(data_catalog_t), public dat
DAT is a global to hold data catalog entries.
Definition
data_catalog.F90:65
data_catalog_entry
Definition
data_catalog_entry.F90:8
datetime
This module contains the DATETIME_T class and associated time and date-related routines,...
Definition
datetime.F90:9
exceptions
Definition
exceptions.F90:1
exceptions::warn
subroutine, public warn(smessage, smodule, iline, shints, lfatal, iloglevel, lecho)
Definition
exceptions.F90:245
fstring
Definition
fstring.F90:1
fstring_list
Definition
fstring_list.F90:1
grid
Provides support for input and output of gridded ASCII data, as well as for creation and destruction ...
Definition
grid.F90:8
grid::grid_writearcgrid
subroutine, public grid_writearcgrid(sfilename, pgrd)
Definition
grid.F90:1054
logfiles
Definition
logfiles.F90:1
logfiles::logs
type(logfile_t), public logs
Definition
logfiles.F90:62
logfiles::log_all
@ log_all
Definition
logfiles.F90:22
parameters
Definition
parameters.F90:1
parameters::params
type(parameters_t), public params
Definition
parameters.F90:68
simulation_datetime
Definition
simulation_datetime.F90:1
simulation_datetime::sim_dt
type(date_range_t), public sim_dt
Definition
simulation_datetime.F90:45
storm_drain_capture
Definition
storm_drain_capture.F90:1
storm_drain_capture::storm_drain_capture_initialize
subroutine, public storm_drain_capture_initialize(is_cell_active, landuse_index)
Definition
storm_drain_capture.F90:31
storm_drain_capture::date_of_last_retrieval
type(datetime_t) date_of_last_retrieval
Definition
storm_drain_capture.F90:26
storm_drain_capture::pstorm_drain_capture_fraction
type(data_catalog_entry_t), pointer pstorm_drain_capture_fraction
Definition
storm_drain_capture.F90:23
storm_drain_capture::storm_drain_capture_fraction_table
real(c_float), dimension(:), allocatable storm_drain_capture_fraction_table
Definition
storm_drain_capture.F90:25
storm_drain_capture::storm_drain_capture_fraction
real(c_float), dimension(:), allocatable, public storm_drain_capture_fraction
Definition
storm_drain_capture.F90:24
storm_drain_capture::storm_drain_capture_calculate
subroutine, public storm_drain_capture_calculate(capture_fraction, indx, is_cell_active)
Definition
storm_drain_capture.F90:117
data_catalog_entry::data_catalog_entry_t
Definition
data_catalog_entry.F90:46
datetime::datetime_t
Definition
datetime.F90:38
exceptions::assert
Definition
exceptions.F90:15
fstring::ascharacter
Definition
fstring.F90:44
fstring_list::fstring_list_t
Definition
fstring_list.F90:21
src
storm_drain_capture.F90
Generated on
for Soil Water Balance (SWB2) by
1.17.0