Skip to content

Commit 4d36e09

Browse files
authored
Merge pull request computationalgeography#943 from kordejong/gh936
Add `accu_trigger`
2 parents 7c10609 + f7b277d commit 4d36e09

File tree

15 files changed

+1109
-8
lines changed

15 files changed

+1109
-8
lines changed

document/doc/pcraster/status.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ these differences as much as possible.
3434
- LUE supports this PCRaster operation, or an operation like it. It may be that the LUE operation is named
3535
differently, that it supports different parameters, or that it accepts parameters in a different order.
3636
* - ❌
37-
- This PCRaster operations is not considered yet. It may be in the future.
37+
- This PCRaster operation is not considered yet. It may be in the future.
3838
* - 🗑
3939
- This PCRaster operation is considered, but skipped. See notes for reason.
4040
* - 1, 2, 3
@@ -85,8 +85,8 @@ these differences as much as possible.
8585
- accu_threshold
8686
* - accutriggerflux \
8787
accutriggerstate
88-
-
89-
- 1
88+
-
89+
- accu_trigger
9090
* - accutraveltimestate \
9191
accutraveltimeflux \
9292
accutraveltimeremoved

source/framework/algorithm/CMakeLists.txt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1754,6 +1754,19 @@ block()
17541754
)
17551755
list(APPEND generated_source_files "${output_pathname}")
17561756

1757+
# Instantiate accu_trigger
1758+
set(output_pathname "${CMAKE_CURRENT_BINARY_DIR}/${offset}/accu_trigger-${Policies}_${element}.cpp")
1759+
1760+
generate_template_instantiation(
1761+
INPUT_PATHNAME
1762+
"${CMAKE_CURRENT_SOURCE_DIR}/${offset}/accu_trigger.cpp.in"
1763+
OUTPUT_PATHNAME
1764+
"${output_pathname}"
1765+
DICTIONARY
1766+
'{"name":"${element}","Policies":"${Policies}","FlowDirectionElement":"${LUE_FRAMEWORK_FLOW_DIRECTION_ELEMENT}","Element":"${Element}"}'
1767+
)
1768+
list(APPEND generated_source_files "${output_pathname}")
1769+
17571770
# Instantiate d8_flow_direction
17581771
set(output_pathname "${CMAKE_CURRENT_BINARY_DIR}/${offset}/d8_flow_direction-${Policies}_${element}.cpp")
17591772

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
#pragma once
2+
#include "lue/framework/algorithm/policy.hpp"
3+
#include "lue/framework/algorithm/scalar.hpp"
4+
#include "lue/framework/partitioned_array.hpp"
5+
6+
7+
namespace lue {
8+
9+
template<typename Policies>
10+
auto accu_trigger(
11+
Policies const& policies,
12+
PartitionedArray<policy::InputElementT<Policies, 0>, 2> const& flow_direction,
13+
PartitionedArray<policy::InputElementT<Policies, 1>, 2> const& inflow,
14+
PartitionedArray<policy::InputElementT<Policies, 2>, 2> const& trigger)
15+
-> std::tuple<
16+
PartitionedArray<policy::OutputElementT<Policies, 0>, 2>,
17+
PartitionedArray<policy::OutputElementT<Policies, 1>, 2>>;
18+
19+
20+
template<typename Policies>
21+
auto accu_trigger(
22+
Policies const& policies,
23+
PartitionedArray<policy::InputElementT<Policies, 0>, 2> const& flow_direction,
24+
PartitionedArray<policy::InputElementT<Policies, 1>, 2> const& inflow,
25+
Scalar<policy::InputElementT<Policies, 2>> const& trigger)
26+
-> std::tuple<
27+
PartitionedArray<policy::OutputElementT<Policies, 0>, 2>,
28+
PartitionedArray<policy::OutputElementT<Policies, 1>, 2>>;
29+
30+
31+
template<typename Policies>
32+
auto accu_trigger(
33+
Policies const& policies,
34+
PartitionedArray<policy::InputElementT<Policies, 0>, 2> const& flow_direction,
35+
Scalar<policy::InputElementT<Policies, 1>> const& inflow,
36+
Scalar<policy::InputElementT<Policies, 2>> const& trigger)
37+
-> std::tuple<
38+
PartitionedArray<policy::OutputElementT<Policies, 0>, 2>,
39+
PartitionedArray<policy::OutputElementT<Policies, 1>, 2>>;
40+
41+
42+
template<typename Policies>
43+
auto accu_trigger(
44+
Policies const& policies,
45+
PartitionedArray<policy::InputElementT<Policies, 0>, 2> const& flow_direction,
46+
Scalar<policy::InputElementT<Policies, 1>> const& inflow,
47+
PartitionedArray<policy::InputElementT<Policies, 2>, 2> const& trigger)
48+
-> std::tuple<
49+
PartitionedArray<policy::OutputElementT<Policies, 0>, 2>,
50+
PartitionedArray<policy::OutputElementT<Policies, 1>, 2>>;
51+
52+
} // namespace lue
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
#pragma once
2+
#include "lue/framework/algorithm/accu_trigger.hpp"
3+
#include <concepts>
4+
5+
6+
namespace lue {
7+
namespace policy::accu_trigger {
8+
9+
template<std::integral FlowDirectionElement, std::floating_point FloatingPointElement>
10+
using DefaultPolicies = policy::DefaultPolicies<
11+
AllValuesWithinDomain<FloatingPointElement, FloatingPointElement>,
12+
OutputElements<FloatingPointElement, FloatingPointElement>,
13+
InputElements<FlowDirectionElement, FloatingPointElement, FloatingPointElement>>;
14+
15+
} // namespace policy::accu_trigger
16+
17+
18+
namespace default_policies {
19+
20+
template<std::integral FlowDirectionElement, std::floating_point FloatingPointElement>
21+
auto accu_trigger(
22+
PartitionedArray<FlowDirectionElement, 2> const& flow_direction,
23+
PartitionedArray<FloatingPointElement, 2> const& inflow,
24+
Scalar<FloatingPointElement> const& trigger) -> std::
25+
tuple<PartitionedArray<FloatingPointElement, 2>, PartitionedArray<FloatingPointElement, 2>>
26+
{
27+
using Policies =
28+
policy::accu_trigger::DefaultPolicies<FlowDirectionElement, FloatingPointElement>;
29+
30+
return accu_trigger(Policies{}, flow_direction, inflow, trigger);
31+
}
32+
33+
34+
template<std::integral FlowDirectionElement, std::floating_point FloatingPointElement>
35+
auto accu_trigger(
36+
PartitionedArray<FlowDirectionElement, 2> const& flow_direction,
37+
Scalar<FloatingPointElement> const& inflow,
38+
Scalar<FloatingPointElement> const& trigger) -> std::
39+
tuple<PartitionedArray<FloatingPointElement, 2>, PartitionedArray<FloatingPointElement, 2>>
40+
{
41+
using Policies =
42+
policy::accu_trigger::DefaultPolicies<FlowDirectionElement, FloatingPointElement>;
43+
44+
return accu_trigger(Policies{}, flow_direction, inflow, trigger);
45+
}
46+
47+
48+
template<std::integral FlowDirectionElement, std::floating_point FloatingPointElement>
49+
auto accu_trigger(
50+
PartitionedArray<FlowDirectionElement, 2> const& flow_direction,
51+
Scalar<FloatingPointElement> const& inflow,
52+
PartitionedArray<FloatingPointElement, 2> const& trigger) -> std::
53+
tuple<PartitionedArray<FloatingPointElement, 2>, PartitionedArray<FloatingPointElement, 2>>
54+
{
55+
using Policies =
56+
policy::accu_trigger::DefaultPolicies<FlowDirectionElement, FloatingPointElement>;
57+
58+
return accu_trigger(Policies{}, flow_direction, inflow, trigger);
59+
}
60+
61+
} // namespace default_policies
62+
} // namespace lue

0 commit comments

Comments
 (0)