SPEED
SETUP_ABC.f90 File Reference

Go to the source code of this file.

Functions/Subroutines

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.
 

Function/Subroutine Documentation

◆ setup_abc()

subroutine setup_abc (   nm,
dimension(nm)  sd,
dimension(nm)  tag_mat,
  cs_nnz_loc,
dimension(nm)  cs_loc,
  nn_loc,
dimension(nm)  local_n_num,
  ne_loc,
dimension(nm)  local_el_num,
  nel_abc,
dimension(nm)  ielem_abc,
dimension(nm)  i4count 
)

Setup for ABC faces.

Stores data on array ielem_abc.

Author
Ilario Mazzieri
Date
September, 2013
Version
1.0
Parameters
[in]nmnumber of materials
[in]sdpolynomial degree vector
[in]tag_matlabel for materials
[in]cs_nnz_loclength of cs_loc
[in]cs_loclocal spectral connectivity vector
[in]nn_locnumber of local elements
[in]local_n_numlocal node numeration
[in]ne_locnumber of local elements
[in]local_el_numlocal element numeration
[in]nel_abcnumber of elements where ABC conditions are applied
[in]i4countvector identifying nodes where ABC conditions are applied
[in]ielem_abcmatrix where abc elements are stored: ielem_abc(nel_abc,1) = global id, ielem_abc(nel_abc,2),...,ielem_abc(nel_abc,7) indices for selecting the ABC face

Definition at line 39 of file SETUP_ABC.f90.

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