Examples/Tests

Preparing tests in Python

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
# This program is reading and writing data from or to ds-file

# import medinatools- and caemodel-Object:
import medinatools as mt
import caemodel as cm
m = cm.CaeModel()

# 3rd party:
from numpy import where
from numpy import logical_and, logical_or, array, in1d, ones

# max number of nodes, elements, stress points:
nlimit=200000
elimit=200000
sizelmt=10000000

# Tests to perform for following keys:
test_keys=[1,34,44,100,599,620]
# test_keys=[34,44]
# test_keys=[100]
# test_keys=[599]
# test_keys=[620]

# User input ending here.

default_path   ='bbb.bif'
default_pathtxt='None'
default_scratch='scratch.bif'

if 1 in test_keys:
    mt.qrnt('Testing key 1')
    path_r  ='BIFSBOFS/many_QUAD4V_TRIA3V.bif'
    path_w  ='BIFSBOFS/scratch.bif'
    path_a  = path_w
    pathtxt='./DATA/test_write_1.txt'
    for flag in ['r','w','a']:
        if flag=='r': path=path_r
        if flag=='w': path=path_w
        if flag=='a': path=path_a
        nodeid,nodecoords,nnds = mt.k_1(flag,path,pathtxt,nlimit)
        # Output:
        if flag=='r': 
            mt.prnt(str(nnds)+' nodes found.')
            # Copy to caemodel:
            mt.prnt('Adding data to CaeModel-object.')
            nds=nodeid[:nnds]
            cds=nodecoords[:nnds]
            m.ndCds.update(dict(zip(nds,cds)))

if 34 in test_keys:
    mt.qrnt('Testing key 34')
    path_r  ='BIFSBOFS/many_QUAD4V_TRIA3V.bif'
    path_w  ='BIFSBOFS/scratch.bif'
    path_a  = path_w
    pathtxt = 'None'
    for flag in ['r','w','a']:
        if flag=='r': path=path_r
        if flag=='w': path=path_w
        if flag=='a': path=path_a
        elemid,elemnds,elemangle,nelems=mt.k_34(flag,path,pathtxt,elimit)
        if flag=='r': 
            eids=elemid[:nelems]
            ends=elemnds[:nelems]
            ngl=elemangle[:nelems]
            mt.prnt(str(nelems)+ ' TRIA3V elements found.')
            mt.prnt('Adding data to CaeModel-object.')
            m.elNds.update(dict(zip(eids,ends)))
            m.elNgl.update(dict(zip(eids,ngl)))

if 44 in test_keys:
    mt.qrnt('Testing key 44')
    path_r  ='BIFSBOFS/many_QUAD4V_TRIA3V.bif'
    path_w  ='BIFSBOFS/scratch.bif'
    path_a  = path_w
    pathtxt = 'None'
    for flag in ['r','w','a']:
        if flag=='r': path=path_r
        if flag=='w': path=path_w
        if flag=='a': path=path_a
        elemid,elemnds,elemangle,nelems=mt.k_44(flag,path,pathtxt,elimit)
        if flag=='r': 
            eids=elemid[:nelems]
            ends=elemnds[:nelems]
            ngl=elemangle[:nelems]
            mt.prnt(str(nelems)+ ' QUAD4V elements found.')
            mt.prnt('Adding data to CaeModel-object.')
            m.elNds.update(dict(zip(eids,ends)))
            m.elNgl.update(dict(zip(eids,ngl)))

if 100 in test_keys:
    mt.qrnt('Testing key 100')
    path_r  ='BIFSBOFS/many_QUAD4V_TRIA3V.bif'
    path_w  ='BIFSBOFS/scratch.bif'
    path_a  = path_w
    pathtxt = 'None'
    for flag in ['r','w','a']:
        if flag=='r': path=path_r
        if flag=='w': path=path_w
        if flag=='a': path=path_a
        mt.k_100(flag,path,pathtxt)
        if flag=='r': 
            m.readSetsFromASCIIFile(path+'_sets.txt')
            mt.prnt(str(len(m.esetEls))+' element sets found.')
            mt.prnt(str(len(m.nsetNds))+' node sets found.')

if 599 in test_keys:
    mt.qrnt('Testing key 599')
    path_r  ='BIFSBOFS/many_QUAD4V_TRIA3V.bof'
    path_w  ='BIFSBOFS/scratch.bof'
    path_a  =path_w
    pathtxt='./DATA/test_write_599.txt'
    for flag in ['r','w','a']:
        if flag=='r': path=path_r
        if flag=='w': path=path_w
        if flag=='a': path=path_a
        # Read stress for ds-file:
        nstress,ist,ics,ilr,iel,ipt,stress = mt.k_599(flag,path,pathtxt,sizelmt)
        if flag=='r':
            print 'Found ', nstress, 'stress data points.'
            print 'Filtering data points now...'
            # Use criteria to filter results:
            # Element filter:
            el_f=array([1760057,1760058])
            # Step filter:
            st_f=array([5,])
            # Layer filter:
            lr_f=array([2,6])
            # Do filtering (2 args only):
            f=ones(len(iel),dtype=bool)
            for (a1,a2) in [ (iel,el_f), (ist,st_f), (ilr,lr_f)]:
                f=logical_and(f,in1d(a1,a2))
            
            ipts = ipt[f]
            ists = ist[f]
            icss = ics[f]
            ilrs = ilr[f]
            iels = iel[f]
            s = stress[f,0:5]
            print "step, c.s., layer, element, int.pt., stress"
            for i in range(len(ipts)):
                print ists[i],icss[i],ilrs[i],iels[i],ipts[i],s[i,0:3]
        
if 620 in test_keys:
    mt.qrnt('Testing key 620')
    path_r  ='BIFSBOFS/scratch.bif'
    path_w  ='BIFSBOFS/scratch.bif'
    path_a  =path_w
    pathtxt ='./DATA/test_write_620.txt'
    for flag in ['r','w','a']:
        if flag=='r': path=path_r
        if flag=='w': path=path_w
        if flag=='a': path=path_a
        mt.k_620(flag,path,pathtxt)

mt.qrnt('CaeModel Data:')
print 'Printing first 3 nodes and elems:'

mt.qrnt('Nodes:')
print 'ID, coords:'
for n in m.ndCds.keys()[0:3]:
    print n, m.ndCds[n]

mt.qrnt('Elements:')
print 'ID, nodes, angle:'
for e in m.elNds.keys()[0:3]:
    print e, m.elNds[e], m.elNgl[e]

mt.qrnt('Node sets:')
print 'label, set:'
for i in m.nsetNds:
    nset=m.nsetNds[i]
    lbl =m.nsetLbl[i]
    print lbl, ': ',len(nset), 'nodes'

mt.qrnt('Element sets:')
print 'label, set:'
for i in m.esetEls:
    eset=m.esetEls[i]
    lbl =m.esetLbl[i]
    print lbl, ': ',len(eset),' elements'

You can also use Fortran in a similar way, if you prefer. But this is not shown here.

Running tests

When using the Python-program, you get something like the following output.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
Testing key 1

   READING all data elements from ds-file.
   157314 nodes found.
   Adding data to CaeModel-object.
   WRITING one data element to new ds-file.
   APPENDING one data element to existing ds-file.

Testing key 34
   READING all data elements from ds-file.
   250 TRIA3V elements found.
   Adding data to CaeModel-object.
   WRITING one data element to new ds-file.
   WRITING/APPENDING not implemented yet.
   APPENDING one data element to existing ds-file.
   WRITING/APPENDING not implemented yet.

Testing key 44
   READING all data elements from ds-file.
   123777 QUAD4V elements found.
   Adding data to CaeModel-object.
   WRITING one data element to new ds-file.
   WRITING/APPENDING not implemented yet.
   APPENDING one data element to existing ds-file.
   WRITING/APPENDING not implemented yet.

Testing key 100
   READING all data elements from ds-file.
   New file: BIFSBOFS/many_QUAD4V_TRIA3V.bif_sets.txt
Reading sets from file BIFSBOFS/many_QUAD4V_TRIA3V.bif_sets.txt
   3 element sets found.
   1 node sets found.
   WRITING one data element to new ds-file.
   APPENDING one data element to existing ds-file.

Testing key 599
   READING all data elements from ds-file.
Found  5209134 stress data points.
Filtering data points now...
step, c.s., layer, element, int.pt., stress
5 -2 2 1760057 0 [-0.0003212  -0.00030949  0.        ]
5 -2 2 1760058 0 [-0.00032839 -0.00030037  0.        ]
5 -2 6 1760057 0 [ 0.00026905  0.00033795  0.        ]
5 -2 6 1760058 0 [ 0.00027018  0.00033971  0.        ]
   WRITING one data element to new ds-file.
   APPENDING one data element to existing ds-file.

Testing key 620
   READING all data elements from ds-file.
   READING not implemented yet.
   WRITING one data element to new ds-file.
   APPENDING one data element to existing ds-file.

CaeModel Data:
Printing first 3 nodes and elems:

Nodes:
ID, coords:
22276512 [ -351.80807495  3249.56860352  1684.57922363]
22276513 [ -359.89776611  3255.77441406  1684.57971191]
22544435 [ -266.22369385  3193.90893555  1694.12719727]

Elements:
ID, nodes, angle:
4762283 [21027177 21027176 21026901 21027830] 205.656
4762284 [21027178 21027177 21027830 21027829] 205.674
4762285 [21027179 21027178 21027829 21027828] 205.685

Node sets:
label, set:
Testit :  3261 nodes

Element sets:
label, set:
Access_Hole :  958  elements
Access_hole_cover :  498  elements
Belly_fairing :  12876  elements