29
30
31
32#include "implicit_f.inc"
33
34
35
36
37
38
39 INTEGER, INTENT(IN) :: SADSKY,NUMNOD,
40 INTEGER, DIMENSION(*), INTENT(IN) :: ADDCNE
41 INTEGER, DIMENSION(NTHREADS) :: FIRST,
42
43
44
45
46
47
48
49
50
51
52
53
54
55 INTEGER :: NC,SUM_NC,ITHREAD,N
56 INTEGER, DIMENSION(NTHREADS) :: SUM_NC_THREAD
58
59
60
61
62
63
64
65
66! a fixed
split(ie.
use numnod/nthreads bounds
67
68
69
70
71
72
73
74
75
76 DO ithread=1,nthreads
77 first(ithread)= 1+(ithread-1)*numnod/nthreads
78 last(ithread)= ithread*numnod/nthreads
79 ENDDO
80
81 IF(sadsky>0) THEN
82
83
84 sum_nc = 0
85 DO n = 1,numnod
86 nc = addcne(n+1)-addcne(n)
87 sum_nc = sum_nc + nc
88 ENDDO
89
90 mean_nc = sum_nc / nthreads
91
92 sum_nc = 0
93 IF(numnod>0) THEN
94
95 IF(numnod>nthreads) THEN
96 ithread = 1
97 first(ithread) = 1
98
99 DO n = 1,numnod
100 nc = addcne(n+1)-addcne(n)
101 sum_nc = sum_nc + nc
102 IF(sum_nc> 0.95*mean_nc.AND.(ithread<nthreads+1) ) THEN
103 sum_nc_thread(ithread) = sum_nc
104 sum_nc = 0
105 last(ithread) = n
106 ithread = ithread + 1
107 IF(ithread<nthreads+1) first(ithread) = n+1
108 ENDIF
109 ENDDO
110
111 IF(ithread<nthreads) THEN
112
113
114 DO ithread=1,nthreads
115 first(ithread)= 1+(ithread-1)*numnod/nthreads
116 last(ithread)= ithread*numnod/nthreads
117 ENDDO
118 ELSE
119
120 ithread = nthreads
121 last(ithread) = numnod
122 sum_nc_thread(ithread) = sum_nc
123 ENDIF
124
125 ELSE
126
127
128 DO ithread=1,nthreads
129 first(ithread)= 1+(ithread-1)*numnod/nthreads
130 last(ithread)= ithread*numnod/nthreads
131 ENDDO
132
133
134 ENDIF
135 ENDIF
136 ENDIF
137
138 RETURN
void split(mapping_t *, PORD_INT, PORD_INT, PORD_INT, PORD_INT *, PORD_INT *, FLOAT *, PORD_INT)