1
2
3
4 from unittest import TestCase
5 from ..testing import get_blk_from_oblique_neu, get_blk_from_sample_neu
6
10
12 from ..block import Block
13 blk = Block()
14 self.assertEqual(str(blk),
15 '[Block (0D): 0 nodes, 0 faces (0 BC), 0 cells]')
16
26
35
37 from ..block import Block
38
39 blk = Block(ndim=2, nnode=4, nface=6, ncell=3, nbound=3)
40 blk.ndcrd[0,:] = (0,0)
41 blk.ndcrd[1,:] = (-1,-1)
42 blk.ndcrd[2,:] = (1,-1)
43 blk.ndcrd[3,:] = (0,1)
44 blk.cltpn[:] = 3
45 blk.clnds[0,:4] = (3, 0,1,2)
46 blk.clnds[1,:4] = (3, 0,2,3)
47 blk.clnds[2,:4] = (3, 0,3,1)
48 blk.build_interior()
49
50 self.assertEqual(blk.clvol[0], 1)
51 self.assertEqual(blk.clvol[1], .5)
52 self.assertEqual(blk.clvol[2], .5)
53 self.assertEqual(blk.clvol.sum(), 2)
54
55 blk.build_boundary()
56 blk.build_ghost()
57 self.assertEqual(blk.clvol[0], 1)
58 self.assertEqual(blk.clvol[1], .5)
59 self.assertEqual(blk.clvol[2], .5)
60 self.assertEqual(blk.clvol.sum(), 2)
61
77
81
85
87 __test__ = False
88 testblock = None
89
91 blk = self.testblock
92 ndim = blk.ndim
93 bfcs = blk.bndfcs[:,0]
94 bcls = blk.fccls[bfcs,0]
95 igcl = 0
96 while igcl < blk.ngstcell:
97 ibfc = bfcs[igcl]
98 iicl = bcls[igcl]
99 dvec = blk.fccnd[ibfc,:] - blk.clcnd[iicl,:]
100 leng = (dvec[:]*blk.fcnml[ibfc,:]).sum()
101 self.assertTrue(leng > 0)
102
103 clnnd = blk.clnds[iicl,0]
104 for ind in blk.clnds[iicl,1:clnnd+1]:
105 fcnnd = blk.fcnds[ibfc,0]
106 if ind not in blk.fcnds[ibfc,1:fcnnd+1]:
107 dvec = blk.fccnd[ibfc,:] - blk.ndcrd[ind,:]
108 leng = (dvec[:]*blk.fcnml[ibfc,:]).sum()
109 self.assertTrue(leng > 0)
110 igcl += 1
111
115
119
121 __test__ = False
122 testblock = None
123 rounding_to = 100
124
134
144
146 blk = self.testblock
147 bfcs = blk.bndfcs[:,0]
148 bcls = blk.fccls[bfcs,0]
149 igcl = 0
150 while igcl < blk.ngstcell:
151 iicl = bcls[igcl]
152 for it in range(1,blk.gstclfcs[igcl,0]+1):
153 igfc = blk.gstclfcs[igcl,it]
154 iifc = blk.clfcs[iicl,it]
155 if igfc >= 0:
156 self.assertEqual(igfc, iifc)
157 else:
158 igfc = -igfc - 1
159 self.assertEqual(blk.gstfctpn[igfc], blk.fctpn[iifc])
160 igcl += 1
161
163 blk = self.testblock
164 ndim = blk.ndim
165 bfcs = blk.bndfcs[:,0]
166 bcls = blk.fccls[bfcs,0]
167 igcl = 0
168 while igcl < blk.ngstcell:
169 ibfc = bfcs[igcl]
170 iicl = bcls[igcl]
171 for i in range(1,blk.gstclnds[igcl,0]+1):
172 ignd = blk.gstclnds[igcl,i]
173 iind = blk.clnds[iicl,i]
174 if ignd >= 0:
175 self.assertEqual(ignd, iind)
176 else:
177 ignd = -ignd - 1
178 v1 = blk.gstndcrd[ignd,:] - blk.fccnd[ibfc,:]
179 v2 = blk.ndcrd[iind,:] - blk.fccnd[ibfc,:]
180
181 v1n = (v1[:]*blk.fcnml[ibfc,:]).sum()*blk.fcnml[ibfc,:]
182 v2n = (v2[:]*blk.fcnml[ibfc,:]).sum()*blk.fcnml[ibfc,:]
183 for idim in range(ndim):
184
185 self.assertAlmostEqual(v1n[idim], -v2n[idim],
186 self.rounding_to)
187
188 v1t = v1-v1n
189 v2t = v2-v2n
190 for idim in range(ndim):
191
192 self.assertAlmostEqual(v1t[idim], v2t[idim],
193 self.rounding_to)
194 igcl += 1
195
197 blk = self.testblock
198 ndim = blk.ndim
199 bfcs = blk.bndfcs[:,0]
200 bcls = blk.fccls[bfcs,0]
201 igcl = 0
202 while igcl < blk.ngstcell:
203 ibfc = bfcs[igcl]
204 iicl = bcls[igcl]
205 for it in range(1,blk.gstclfcs[igcl,0]+1):
206 igfc = blk.gstclfcs[igcl,it]
207 iifc = blk.clfcs[iicl,it]
208 if igfc >= 0:
209 self.assertEqual(igfc, iifc)
210 else:
211 igfc = -igfc - 1
212 v1 = blk.gstfccnd[igfc,:] - blk.fccnd[ibfc,:]
213 v2 = blk.fccnd[iifc,:] - blk.fccnd[ibfc,:]
214
215 v1n = (v1*blk.fcnml[ibfc,:]).sum()*blk.fcnml[ibfc,:]
216 v2n = (v2*blk.fcnml[ibfc,:]).sum()*blk.fcnml[ibfc,:]
217 for idim in range(ndim):
218
219 self.assertAlmostEqual(v1n[idim], -v2n[idim],
220 self.rounding_to)
221
222 v1t = v1-v1n
223 v2t = v2-v2n
224 for idim in range(ndim):
225
226 self.assertAlmostEqual(v1t[idim], v2t[idim],
227 self.rounding_to)
228 igcl += 1
229
231 blk = self.testblock
232 ndim = blk.ndim
233 bfcs = blk.bndfcs[:,0]
234 bcls = blk.fccls[bfcs,0]
235 igcl = 0
236 while igcl < blk.ngstcell:
237 ibfc = bfcs[igcl]
238 iicl = bcls[igcl]
239 for it in range(1,blk.gstclfcs[igcl,0]+1):
240 igfc = blk.gstclfcs[igcl,it]
241 iifc = blk.clfcs[iicl,it]
242 if igfc >= 0:
243 self.assertEqual(igfc, iifc)
244 else:
245 igfc = -igfc - 1
246 v1 = blk.gstfcnml[igfc,:]
247 v2 = blk.fcnml[iifc,:]
248
249 if blk.fccls[iifc,0] != iicl:
250 v2 = -v2
251
252 v1n = (v1*blk.fcnml[ibfc,:]).sum()*blk.fcnml[ibfc,:]
253 v2n = (v2*blk.fcnml[ibfc,:]).sum()*blk.fcnml[ibfc,:]
254 for idim in range(ndim):
255
256 self.assertAlmostEqual(v1n[idim], -v2n[idim],
257 self.rounding_to)
258
259 v1t = v1-v1n
260 v2t = v2-v2n
261 for idim in range(ndim):
262
263 self.assertAlmostEqual(v1t[idim], v2t[idim],
264 self.rounding_to)
265 igcl += 1
266
268 blk = self.testblock
269 bfcs = blk.bndfcs[:,0]
270 bcls = blk.fccls[bfcs,0]
271 igcl = 0
272 while igcl < blk.ngstcell:
273 ibfc = bfcs[igcl]
274 iicl = bcls[igcl]
275 for it in range(1,blk.gstclfcs[igcl,0]+1):
276 igfc = blk.gstclfcs[igcl,it]
277 iifc = blk.clfcs[iicl,it]
278 if igfc >= 0:
279 self.assertEqual(igfc, iifc)
280 else:
281 igfc = -igfc - 1
282 self.assertAlmostEqual(
283 blk.gstfcara[igfc], blk.fcara[iifc], self.rounding_to)
284 igcl += 1
285
296
301
306
311
316
318 oblique = get_blk_from_oblique_neu()
319
321 """
322 For every ghost entity, assert it located in the reversed order than
323 interior entity, in the shared array.
324
325 @param nint: number of interior entity.
326 @type nint: int
327 @param ngst: number of ghost entity.
328 @type ngst: int
329 @param shared: shared array.
330 @type shared: numpy.ndarray
331 @param ghost: ghost array.
332 @type ghost: numpy.ndarray
333 @return: nothing.
334 """
335 from random import randint
336
337 self.assertEqual(len(shared.shape), 1)
338 self.assertEqual(len(ghost.shape), 1)
339 self.assertEqual(shared.shape[0], nint+ngst)
340 self.assertEqual(ghost.shape[0], ngst)
341
342 for igst in range(ngst):
343 oval = ghost[igst]
344 tval = oval
345 while tval == oval:
346 tval = randint(0,10000000)
347 self.assertNotEqual(oval, tval)
348 ghost[igst] = tval
349 self.assertEqual(shared[ngst-1-igst], tval)
350 ghost[igst] = oval
351 self.assertEqual(shared[ngst-1-igst], oval)
352
354 blk = self.oblique
355 for idim in range(blk.ndim):
356 self.assertSharedGhost(blk.nnode, blk.ngstnode,
357 blk.shndcrd[:,idim], blk.gstndcrd[:,idim])
358 self.assertSharedGhost(blk.nface, blk.ngstface,
359 blk.shfccnd[:,idim], blk.gstfccnd[:,idim])
360 self.assertSharedGhost(blk.nface, blk.ngstface,
361 blk.shfcnml[:,idim], blk.gstfcnml[:,idim])
362 self.assertSharedGhost(blk.ncell, blk.ngstcell,
363 blk.shclcnd[:,idim], blk.gstclcnd[:,idim])
364 self.assertSharedGhost(blk.nface, blk.ngstface,
365 blk.shfcara, blk.gstfcara)
366 self.assertSharedGhost(blk.ncell, blk.ngstcell,
367 blk.shclvol, blk.gstclvol)
368
377
379 blk = self.oblique
380 for it in range(blk.FCMND+1):
381 self.assertSharedGhost(blk.nface, blk.ngstface,
382 blk.shfcnds[:,it], blk.gstfcnds[:,it])
383 for it in range(4):
384 self.assertSharedGhost(blk.nface, blk.ngstface,
385 blk.shfccls[:,it], blk.gstfccls[:,it])
386 for it in range(blk.CLMND+1):
387 self.assertSharedGhost(blk.ncell, blk.ngstcell,
388 blk.shclnds[:,it], blk.gstclnds[:,it])
389 for it in range(blk.CLMFC+1):
390 self.assertSharedGhost(blk.ncell, blk.ngstcell,
391 blk.shclfcs[:,it], blk.gstclfcs[:,it])
392
394 oblique = get_blk_from_oblique_neu()
395
397 shape_text = """type block
398 integer*4 :: ndim = 2
399 integer*4 :: fcmnd = 4
400 integer*4 :: clmnd = 8
401 integer*4 :: clmfc = 6
402 integer*4 :: nnode = 72
403 integer*4 :: nface = 184
404 integer*4 :: ncell = 113
405 integer*4 :: nbound = 29
406 integer*4 :: ngstnode = 29
407 integer*4 :: ngstface = 58
408 integer*4 :: ngstcell = 29
409 end type block"""
410 obft = self.oblique.create_shape()
411 self.assertEqual(str(obft), shape_text)
412
418