SPEED
SETUP_ABC.f90
Go to the documentation of this file.
1! Copyright (C) 2012 The SPEED FOUNDATION
2! Author: Ilario Mazzieri
3!
4! This file is part of SPEED.
5!
6! SPEED is free software; you can redistribute it and/or modify it
7! under the terms of the GNU Affero General Public License as
8! published by the Free Software Foundation, either version 3 of the
9! License, or (at your option) any later version.
10!
11! SPEED is distributed in the hope that it will be useful, but
12! WITHOUT ANY WARRANTY; without even the implied warranty of
13! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14! Affero General Public License for more details.
15!
16! You should have received a copy of the GNU Affero General Public License
17! along with SPEED. If not, see <http://www.gnu.org/licenses/>.
18
37
38
39 subroutine setup_abc(nm, sd, tag_mat, cs_nnz_loc, cs_loc, &
40 nn_loc, local_n_num, ne_loc, local_el_num, &
41 nel_abc, ielem_abc, i4count)
42
43 implicit none
44
45 integer*4 :: nm, cs_nnz_loc, nn_loc, ne_loc, nel_abc
46 integer*4 :: im, nn, ie, ned
47 integer*4 :: ne1, ne2, ne3, ne4, ic1, ic2, ic3, ic4
48
49 integer*4, dimension(nm) :: tag_mat, sd
50 integer*4, dimension(0:cs_nnz_loc) :: cs_loc
51 integer*4, dimension(nn_loc) :: local_n_num, i4count
52 integer*4, dimension(ne_loc) :: local_el_num
53 integer*4, dimension(nel_abc,7):: ielem_abc
54
55! write(*,*) 'dentrodopo', nel_abc
56
57 ned = cs_loc(0) - 1
58
59 nel_abc = 0
60
61 do im = 1, nm
62
63 nn = sd(im) +1
64
65 do ie = 1, ned
66
67 if (cs_loc(cs_loc(ie -1) +0) .eq. tag_mat(im)) then
68
69 ne1 = cs_loc(cs_loc(ie -1) +nn*nn*(1 -1) +nn*(1 -1) +(1 -1) +1)
70 ne2 = cs_loc(cs_loc(ie -1) +nn*nn*(1 -1) +nn*(nn -1) +(1 -1) +1)
71 ne3 = cs_loc(cs_loc(ie -1) +nn*nn*(nn -1) +nn*(nn -1) +(1 -1) +1)
72 ne4 = cs_loc(cs_loc(ie -1) +nn*nn*(nn -1) +nn*(1 -1) +(1 -1) +1)
73
74
75 if ((i4count(ne1).ne.0) .and. (i4count(ne2).ne.0) .and. (i4count(ne3).ne.0) .and. (i4count(ne4).ne.0)) then
76 nel_abc = nel_abc +1
77 ielem_abc(nel_abc,1) = local_el_num(ie)
78 ielem_abc(nel_abc,2) = 1
79 ielem_abc(nel_abc,3) = 1
80 ielem_abc(nel_abc,4) = 1
81 ielem_abc(nel_abc,5) = nn
82 ielem_abc(nel_abc,6) = 1
83 ielem_abc(nel_abc,7) = nn
84 endif
85
86 ne1 = cs_loc(cs_loc(ie -1) +nn*nn*(1 -1) +nn*(1 -1) +(1 -1) +1)
87 ne2 = cs_loc(cs_loc(ie -1) +nn*nn*(1 -1) +nn*(1 -1) +(nn -1) +1)
88 ne3 = cs_loc(cs_loc(ie -1) +nn*nn*(nn -1) +nn*(1 -1) +(nn -1) +1)
89 ne4 = cs_loc(cs_loc(ie -1) +nn*nn*(nn -1) +nn*(1 -1) +(1 -1) +1)
90
91 if ((i4count(ne1).ne.0) .and. (i4count(ne2).ne.0) .and. (i4count(ne3).ne.0) .and. (i4count(ne4).ne.0)) then
92 nel_abc = nel_abc +1
93 ielem_abc(nel_abc,1) = local_el_num(ie)
94 ielem_abc(nel_abc,2) = 1
95 ielem_abc(nel_abc,3) = nn
96 ielem_abc(nel_abc,4) = 1
97 ielem_abc(nel_abc,5) = 1
98 ielem_abc(nel_abc,6) = 1
99 ielem_abc(nel_abc,7) = nn
100 endif
101
102 ne1 = cs_loc(cs_loc(ie -1) +nn*nn*(1 -1) +nn*(1 -1) +(1 -1) +1)
103 ne2 = cs_loc(cs_loc(ie -1) +nn*nn*(1 -1) +nn*(1 -1) +(nn -1) +1)
104 ne3 = cs_loc(cs_loc(ie -1) +nn*nn*(1 -1) +nn*(nn -1) +(nn -1) +1)
105 ne4 = cs_loc(cs_loc(ie -1) +nn*nn*(1 -1) +nn*(nn -1) +(1 -1) +1)
106
107
108 if ((i4count(ne1).ne.0) .and. (i4count(ne2).ne.0) .and. (i4count(ne3).ne.0) .and. (i4count(ne4).ne.0)) then
109 nel_abc = nel_abc +1
110 ielem_abc(nel_abc,1) = local_el_num(ie)
111 ielem_abc(nel_abc,2) = 1
112 ielem_abc(nel_abc,3) = nn
113 ielem_abc(nel_abc,4) = 1
114 ielem_abc(nel_abc,5) = nn
115 ielem_abc(nel_abc,6) = 1
116 ielem_abc(nel_abc,7) = 1
117 endif
118
119 ne1 = cs_loc(cs_loc(ie -1) +nn*nn*(1 -1) +nn*(1 -1) +(nn -1) +1)
120 ne2 = cs_loc(cs_loc(ie -1) +nn*nn*(1 -1) +nn*(nn -1) +(nn -1) +1)
121 ne3 = cs_loc(cs_loc(ie -1) +nn*nn*(nn -1) +nn*(nn -1) +(nn -1) +1)
122 ne4 = cs_loc(cs_loc(ie -1) +nn*nn*(nn -1) +nn*(1 -1) +(nn -1) +1)
123
124 if ((i4count(ne1).ne.0) .and. (i4count(ne2).ne.0) .and. (i4count(ne3).ne.0) .and. (i4count(ne4).ne.0)) then
125
126 nel_abc = nel_abc +1
127 ielem_abc(nel_abc,1) = local_el_num(ie)
128 ielem_abc(nel_abc,2) = nn
129 ielem_abc(nel_abc,3) = nn
130 ielem_abc(nel_abc,4) = 1
131 ielem_abc(nel_abc,5) = nn
132 ielem_abc(nel_abc,6) = 1
133 ielem_abc(nel_abc,7) = nn
134 endif
135
136 ne1 = cs_loc(cs_loc(ie -1) +nn*nn*(1 -1) +nn*(nn -1) +(1 -1) +1)
137 ne2 = cs_loc(cs_loc(ie -1) +nn*nn*(1 -1) +nn*(nn -1) +(nn -1) +1)
138 ne3 = cs_loc(cs_loc(ie -1) +nn*nn*(nn -1) +nn*(nn -1) +(nn -1) +1)
139 ne4 = cs_loc(cs_loc(ie -1) +nn*nn*(nn -1) +nn*(nn -1) +(1 -1) +1)
140
141 if ((i4count(ne1).ne.0) .and. (i4count(ne2).ne.0) .and. (i4count(ne3).ne.0) .and. (i4count(ne4).ne.0)) then
142 nel_abc = nel_abc +1
143 ielem_abc(nel_abc,1) = local_el_num(ie)
144 ielem_abc(nel_abc,2) = 1
145 ielem_abc(nel_abc,3) = nn
146 ielem_abc(nel_abc,4) = nn
147 ielem_abc(nel_abc,5) = nn
148 ielem_abc(nel_abc,6) = 1
149 ielem_abc(nel_abc,7) = nn
150 endif
151
152 ne1 = cs_loc(cs_loc(ie -1) +nn*nn*(nn -1) +nn*(1 -1) +(1 -1) +1)
153 ne2 = cs_loc(cs_loc(ie -1) +nn*nn*(nn -1) +nn*(1 -1) +(nn -1) +1)
154 ne3 = cs_loc(cs_loc(ie -1) +nn*nn*(nn -1) +nn*(nn -1) +(nn -1) +1)
155 ne4 = cs_loc(cs_loc(ie -1) +nn*nn*(nn -1) +nn*(nn -1) +(1 -1) +1)
156
157
158 if ((i4count(ne1).ne.0) .and. (i4count(ne2).ne.0) .and. (i4count(ne3).ne.0) .and. (i4count(ne4).ne.0)) then
159 nel_abc = nel_abc +1
160 ielem_abc(nel_abc,1) = local_el_num(ie)
161 ielem_abc(nel_abc,2) = 1
162 ielem_abc(nel_abc,3) = nn
163 ielem_abc(nel_abc,4) = 1
164 ielem_abc(nel_abc,5) = nn
165 ielem_abc(nel_abc,6) = nn
166 ielem_abc(nel_abc,7) = nn
167 endif
168 endif
169 enddo
170 enddo
171
172
173
174 return
175
176 end subroutine setup_abc
subroutine setup_abc(nm, sd, tag_mat, cs_nnz_loc, cs_loc, nn_loc, local_n_num, ne_loc, local_el_num, nel_abc, ielem_abc, i4count)
Setup for ABC faces.
Definition SETUP_ABC.f90:54