55using System . IO ;
66using System . Linq ;
77using System . Text ;
8+ using System . Text . RegularExpressions ;
89using System . Threading . Tasks ;
910using System . Windows . Controls ;
1011
@@ -34,6 +35,8 @@ public static Model AbaqusInputToBFE(string pathToInputFile)
3435 {
3536 string [ ] split ;
3637 selectedInputVariable selectedVar = selectedInputVariable . Nodes ;
38+ string selectedVarInfo = "" ; //selectedVar + info
39+
3740 string input = sr . ReadLine ( ) ;
3841 while ( input != null )
3942 {
@@ -47,6 +50,7 @@ public static Model AbaqusInputToBFE(string pathToInputFile)
4750 break ;
4851 case "*Element" :
4952 selectedVar = selectedInputVariable . Elements ;
53+ selectedVarInfo = input ;
5054 break ;
5155 case "*Nset" :
5256 selectedVar = selectedInputVariable . NodeSet ;
@@ -84,12 +88,17 @@ public static Model AbaqusInputToBFE(string pathToInputFile)
8488 }
8589 case selectedInputVariable . Elements :
8690 {
87- element = ReadTetraElement ( input , delimiter , buf . Nodes ) ;
88- if ( element != null )
91+ var elm = ReadElement ( input , delimiter , buf . Nodes , selectedVarInfo ) ;
92+
93+ //if (elm is TetrahedronElement tet)
94+ // tet.Material = UniformIsotropicMaterial.CreateFromYoungPoisson(210e9, 0.25);
95+
96+ //element = ReadTetraElement(input, delimiter, buf.Nodes);
97+ if ( elm != null )
8998 {
90- element . Material = UniformIsotropicMaterial . CreateFromYoungPoisson ( 210e9 , 0.25 ) ;
91- element . FixNodeOrder ( ) ;
92- buf . Elements . Add ( element ) ;
99+ //elm .Material = UniformIsotropicMaterial.CreateFromYoungPoisson(210e9, 0.25);
100+ // element.FixNodeOrder();
101+ buf . Elements . Add ( elm ) ;
93102 }
94103 break ;
95104 }
@@ -192,6 +201,70 @@ private static Node ReadNode(string nodeline, char delimiter)
192201 }
193202 return node ;
194203 }
204+
205+
206+ /// <summary>
207+ /// Reads an element from an Abaqus input file
208+ /// </summary>
209+ /// <param name="elementline">A line with the element props</param>
210+ /// <param name="delimiter">The separator char</param>
211+ /// <param name="nodes">A list of nodes - starts at 0 -> = node-1</param>
212+ /// <returns>An element</returns>
213+ private static HexahedralElement ReadHexaElement ( string elementline , char delimiter , NodeCollection nodes )
214+ {
215+ var elm = new HexahedralElement ( ) ;
216+ string [ ] split ;
217+ int elementNr ; //, nodeNr1, nodeNr2, nodeNr3, nodeNr4;
218+ try
219+ {
220+ var spl = elementline . Split ( delimiter ) . Select ( int . Parse ) . ToArray ( ) ;
221+
222+ var elmNum = spl [ 0 ] ; //element number
223+
224+ var nodeIdxs = spl . Skip ( 1 ) . ToArray ( ) ; //index of connected nodes
225+
226+
227+ //subtract 1. The nodes are numbered from 1-> end and are stored as 0-> end-1
228+
229+ for ( var i = 0 ; i < 8 ; i ++ )
230+ {
231+ elm . Nodes [ i ] = nodes [ nodeIdxs [ i ] - 1 ] ;
232+ }
233+
234+ elm . label = elmNum . ToString ( ) ;
235+ }
236+ catch ( Exception ex )
237+ {
238+ throw new Exception ( "Something went wrong with reading the nodes! Error with line: " + elementline , ex ) ;
239+ }
240+
241+ return elm ;
242+ }
243+
244+
245+ private static Element ReadElement ( string elementline , char delimiter , NodeCollection nodes , string elementInfo )
246+ {
247+ var patt = @"^\*Element, type=(\S+)$" ;
248+
249+ var mtch = Regex . Match ( elementInfo , patt ) ;
250+
251+ if ( ! mtch . Success )
252+ throw new Exception ( ) ;
253+
254+ var elmType = mtch . Groups [ 1 ] . Value ;
255+
256+ switch ( elmType )
257+ {
258+ case "C3D8" :
259+ return ReadHexaElement ( elementline , delimiter , nodes ) ;
260+ case "C3D4" :
261+ return ReadTetraElement ( elementline , delimiter , nodes ) ;
262+
263+ default :
264+ throw new NotImplementedException ( "undefined ABAQUS element: " + elmType ) ;
265+ }
266+ }
267+
195268 /// <summary>
196269 /// Reads an element from an Abaqus input file
197270 /// </summary>
@@ -201,7 +274,7 @@ private static Node ReadNode(string nodeline, char delimiter)
201274 /// <returns>An element</returns>
202275 private static TetrahedronElement ReadTetraElement ( string elementline , char delimiter , NodeCollection nodes )
203276 {
204- TetrahedronElement elm = new TetrahedronElement ( ) ;
277+ var elm = new TetrahedronElement ( ) ;
205278 string [ ] split ;
206279 int elementNr ; //, nodeNr1, nodeNr2, nodeNr3, nodeNr4;
207280 try
0 commit comments