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.
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
|