Skip to content

Commit 4dd59ba

Browse files
committed
feat(data_partition): add pure generic constructor
1 parent 0b9b504 commit 4dd59ba

File tree

3 files changed

+26
-24
lines changed

3 files changed

+26
-24
lines changed

src/sourcery/sourcery_data_partition_m.f90

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,22 @@ module sourcery_data_partition_m
2020
generic :: gather => gather_real32_2D_array, gather_real64_2D_array, gather_real32_1D_array, gather_real64_1D_array
2121
end type
2222

23+
interface data_partition_t
24+
25+
pure module function construct(cardinality) result(data_partition)
26+
implicit none
27+
type(data_partition_t) data_partition
28+
integer, intent(in) :: cardinality
29+
end function
30+
31+
end interface
32+
2333
interface
2434

25-
module subroutine define_partitions(self, cardinality)
35+
pure module subroutine define_partitions(self, cardinality)
2636
!! define the range of data identification numbers owned by the executing image
2737
implicit none
28-
class(data_partition_t), intent(out) :: self
38+
class(data_partition_t), intent(inout) :: self
2939
integer, intent(in) :: cardinality
3040
end subroutine
3141

src/sourcery/sourcery_data_partition_s.f90

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,13 @@
88

99
module procedure define_partitions
1010
integer image
11-
self%bin = [( bin_t(num_items=cardinality, num_bins=num_images(), bin_number=image), image=1,num_images() )]
11+
associate(ni => num_images())
12+
self%bin = [( bin_t(num_items=cardinality, num_bins=ni, bin_number=image), image=1,ni )]
13+
end associate
14+
end procedure
15+
16+
module procedure construct
17+
call data_partition%define_partitions(cardinality)
1218
end procedure
1319

1420
module procedure first

test/data_partition_test.f90

Lines changed: 7 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,7 @@ function verify_block_partitioning() result(test_passes)
4747
logical test_passes
4848
integer my_particles
4949

50-
call partition%define_partitions(cardinality=num_particles)
51-
52-
associate( me=>this_image() )
50+
associate( me=>this_image(), partition => data_partition_t(cardinality=num_particles))
5351
associate( my_first=>partition%first(me), my_last=>partition%last(me) )
5452
my_particles = my_last - my_first + 1
5553
associate( ni=>num_images() )
@@ -67,9 +65,7 @@ function verify_default_image_number() result(test_passes)
6765
type(data_partition_t) partition
6866
logical test_passes
6967

70-
call partition%define_partitions(cardinality=num_particles)
71-
72-
associate( me=>this_image() )
68+
associate( me=>this_image(), partition => data_partition_t(cardinality=num_particles))
7369
test_passes = partition%first() == partition%first(me) .and.partition%last() == partition%last(me)
7470
end associate
7571
end function
@@ -81,9 +77,7 @@ function verify_all_particles_partitioned() result(test_passes)
8177
logical test_passes
8278
integer particles
8379

84-
call partition%define_partitions(cardinality=num_particles)
85-
86-
associate(me => this_image())
80+
associate( me=>this_image(), partition => data_partition_t(cardinality=num_particles))
8781
associate( my_first=>partition%first(me), my_last=>partition%last(me) )
8882
particles = my_last - my_first + 1
8983
call co_sum(particles)
@@ -98,9 +92,7 @@ function verify_all_gather_1D_real_array() result(test_passes)
9892
real(real64) :: particle_scalar(num_particles)
9993
real(real64), parameter :: junk=-12345._real64, expected=1._real64
10094

101-
call partition%define_partitions(cardinality=num_particles)
102-
103-
associate(me => this_image())
95+
associate( me=>this_image(), partition => data_partition_t(cardinality=num_particles))
10496
associate( first=>partition%first(me), last=>partition%last(me) )
10597
particle_scalar(first:last) = expected !! values to be gathered
10698
particle_scalar(1:first-1) = junk !! values to be overwritten by the gather
@@ -118,9 +110,7 @@ function verify_all_gather_2D_real_array() result(test_passes)
118110
real(real64) particle_vector(vec_space_dim, num_particles)
119111
real(real64), parameter :: junk=-12345._real64, expected=1._real64
120112

121-
call partition%define_partitions(cardinality=num_particles)
122-
123-
associate(me => this_image())
113+
associate( me=>this_image(), partition => data_partition_t(cardinality=num_particles))
124114
associate( first=>partition%first(me), last=>partition%last(me) )
125115

126116
particle_vector(:, first:last) = expected !! values to be gathered
@@ -139,9 +129,7 @@ function verify_all_gather_2D_real_array_dim1() result(test_passes)
139129
real(real64) :: vector_transpose(num_particles, vec_space_dim)
140130
real(real64), parameter :: junk=-12345._real64, expected=1._real64
141131

142-
call partition%define_partitions(cardinality=num_particles)
143-
144-
associate(me => this_image())
132+
associate( me=>this_image(), partition => data_partition_t(cardinality=num_particles))
145133
associate( first=>partition%first(me), last=>partition%last(me) )
146134

147135
vector_transpose(first:last, :) = expected !! values to be gathered
@@ -163,9 +151,7 @@ function verify_gather_2D_real_array_dim1() result(test_passes)
163151
real(real64) :: vector_transpose(num_particles, vec_space_dim)
164152
real(real64), parameter :: junk=-12345._real64, expected=1._real64
165153

166-
call partition%define_partitions(cardinality=num_particles)
167-
168-
associate(me => this_image())
154+
associate( me=>this_image(), partition => data_partition_t(cardinality=num_particles))
169155
associate( first=>partition%first(me), last=>partition%last(me) )
170156

171157
vector_transpose(first:last, :) = expected !! values to be gathered

0 commit comments

Comments
 (0)