@@ -120,7 +120,7 @@ def read_dump(file):
120
120
121
121
def export2abaqus (nodes , file , grain_dict , voxel_dict , units = 'mm' ,
122
122
gb_area = None , dual_phase = False , thermal = False ,
123
- ialloy = None , grain_phase_dict = None ):
123
+ ialloy = None , grain_phase_dict = None , periodic = False ):
124
124
r"""
125
125
Creates an ABAQUS input file with microstructure morphology information
126
126
in the form of nodes, elements and element sets. If "dual_phase" is true,
@@ -134,19 +134,27 @@ def export2abaqus(nodes, file, grain_dict, voxel_dict, units='mm',
134
134
.. note:: The nodal coordinates are written out in units of 1 mm or 1 :math:`\mu` m scale, as requested by the
135
135
user in the input file.
136
136
"""
137
+ from kanapy .initializations import NodeSets
138
+
139
+ def write_node_set (name , nset ):
140
+ f .write (name )
141
+ for i , val in enumerate (nset [:- 1 ], start = 1 ):
142
+ if i % 16 == 0 :
143
+ f .write (f'{ val + 1 } \n ' )
144
+ else :
145
+ f .write (f'{ val + 1 } , ' )
146
+ f .write (f'{ nset [- 1 ]+ 1 } \n ' )
137
147
138
148
def write_grain_sets ():
139
149
# Create element sets for grains
140
150
for k , v in grain_dict .items ():
141
151
f .write ('*ELSET, ELSET=GRAIN{0}_SET\n ' .format (k ))
142
- for enum , el in enumerate (v , 1 ):
152
+ for enum , el in enumerate (v [: - 2 ], start = 1 ):
143
153
if enum % 16 != 0 :
144
- if enum == len (v ):
145
- f .write ('%d\n ' % el )
146
- else :
147
- f .write ('%d, ' % el )
154
+ f .write ('%d, ' % el )
148
155
else :
149
156
f .write ('%d\n ' % el )
157
+ f .write ('%d\n ' % v [- 1 ])
150
158
# Create sections
151
159
for k in grain_dict .keys ():
152
160
if grain_phase_dict is None or grain_phase_dict [k ] < nall :
@@ -207,6 +215,9 @@ def write_phase_sets():
207
215
else :
208
216
raise ValueError (f'Units must be either "mm" or "um", not "{ 0 } "'
209
217
.format (units ))
218
+ nsets = NodeSets (nodes )
219
+ if periodic :
220
+ p_eqs = None
210
221
211
222
with open (file , 'w' ) as f :
212
223
f .write ('** Input file generated by kanapy\n ' )
@@ -275,6 +286,49 @@ def write_phase_sets():
275
286
f .write ('**\n ' )
276
287
f .write ('*Instance, name=PART-1-1, part=PART-1\n ' )
277
288
f .write ('*End Instance\n ' )
289
+ f .write ('**\n ' )
290
+ f .write ('** DEFINE NODE SETS\n ' )
291
+ f .write ('** 1. VERTICES\n ' )
292
+ f .write (f'*Nset, nset=V000, instance=PART-1-1\n ' )
293
+ f .write (f'{ nsets .V000 + 1 } \n ' )
294
+ f .write (f'*Nset, nset=V001, instance=PART-1-1\n ' )
295
+ f .write (f'{ nsets .V001 + 1 } \n ' )
296
+ f .write (f'*Nset, nset=V010, instance=PART-1-1\n ' )
297
+ f .write (f'{ nsets .V010 + 1 } \n ' )
298
+ f .write (f'*Nset, nset=V100, instance=PART-1-1\n ' )
299
+ f .write (f'{ nsets .V100 + 1 } \n ' )
300
+ f .write (f'*Nset, nset=V011, instance=PART-1-1\n ' )
301
+ f .write (f'{ nsets .V011 + 1 } \n ' )
302
+ f .write (f'*Nset, nset=V101, instance=PART-1-1\n ' )
303
+ f .write (f'{ nsets .V101 + 1 } \n ' )
304
+ f .write (f'*Nset, nset=V110, instance=PART-1-1\n ' )
305
+ f .write (f'{ nsets .V110 + 1 } \n ' )
306
+ f .write (f'*Nset, nset=V111, instance=PART-1-1\n ' )
307
+ f .write (f'{ nsets .V111 + 1 } \n ' )
308
+ f .write ('*Nset, nset=Vertices, instance=PART-1-1\n ' )
309
+ f .write (f'{ nsets .V000 + 1 } , { nsets .V100 + 1 } , { nsets .V010 + 1 } , { nsets .V001 + 1 } , { nsets .V011 + 1 } , '
310
+ f'{ nsets .V101 + 1 } , { nsets .V110 + 1 } , { nsets .V111 + 1 } \n ' )
311
+ f .write ('** 2. EDGES\n ' )
312
+ write_node_set ('*Nset, nset=Ex00, instance=PART-1-1\n ' , nsets .Ex00 )
313
+ write_node_set ('*Nset, nset=Ex01, instance=PART-1-1\n ' , nsets .Ex01 )
314
+ write_node_set ('*Nset, nset=Ex10, instance=PART-1-1\n ' , nsets .Ex10 )
315
+ write_node_set ('*Nset, nset=Ex11, instance=PART-1-1\n ' , nsets .Ex11 )
316
+ write_node_set ('*Nset, nset=E0y0, instance=PART-1-1\n ' , nsets .E0y0 )
317
+ write_node_set ('*Nset, nset=E0y1, instance=PART-1-1\n ' , nsets .E0y1 )
318
+ write_node_set ('*Nset, nset=E1y0, instance=PART-1-1\n ' , nsets .E1y0 )
319
+ write_node_set ('*Nset, nset=E1y1, instance=PART-1-1\n ' , nsets .E1y1 )
320
+ write_node_set ('*Nset, nset=E00z, instance=PART-1-1\n ' , nsets .E00z )
321
+ write_node_set ('*Nset, nset=E01z, instance=PART-1-1\n ' , nsets .E01z )
322
+ write_node_set ('*Nset, nset=E10z, instance=PART-1-1\n ' , nsets .E10z )
323
+ write_node_set ('*Nset, nset=E11z, instance=PART-1-1\n ' , nsets .E11z )
324
+ f .write ('** 3. FACES\n ' )
325
+ write_node_set (f'*Nset, nset=Fxy0, instance=PART-1-1\n ' , nsets .Fxy0 )
326
+ write_node_set (f'*Nset, nset=Fxy1, instance=PART-1-1\n ' , nsets .Fxy1 )
327
+ write_node_set (f'*Nset, nset=Fx0z, instance=PART-1-1\n ' , nsets .Fx0z )
328
+ write_node_set (f'*Nset, nset=Fx1z, instance=PART-1-1\n ' , nsets .Fx1z )
329
+ write_node_set (f'*Nset, nset=F0yz, instance=PART-1-1\n ' , nsets .F0yz )
330
+ write_node_set (f'*Nset, nset=F1yz, instance=PART-1-1\n ' , nsets .F1yz )
331
+ f .write ('**\n ' )
278
332
f .write ('*End Assembly\n ' )
279
333
f .write ('**\n ' )
280
334
f .write ('**\n ' )
@@ -296,6 +350,7 @@ def write_phase_sets():
296
350
f .write ('**\n ' )
297
351
f .write ('*Include, input={}mat.inp\n ' .format (file [0 :- 8 ]))
298
352
f .write ('**\n ' )
353
+ f .write ('**Include, input=REM_PART.inp\n ' ) # prepare include for BC and step definitions
299
354
print ('---->DONE!\n ' )
300
355
return
301
356
0 commit comments