100% Elements failure indication when imported into ABAQUS from iso2mesh

31 views
Skip to first unread message

Kamran Ali Ahmed

unread,
Feb 14, 2024, 4:51:30 PM2/14/24
to iso2mesh-users
Dear Dr. Fang,

I would like to use this opportunity to thank you for furthering research openness by developing and sharing such sophisticated tools to handle the not-so-easy meshing of diverse volumetric images. My current research is focused on topology optimization of TPMS structures manufactured by additive manufacturing. I came across iso2mesh in a bid to be able to achieve a workable tet mesh for complex TPMS structures to apply numerical homogenization in commercially available FE software (specifically ABAQUS).

I have been facing a problem for a while now. I have written a MATLAB code to generate TPMS structures and then call upon the 'v2m' function with 'cgalsurf' method to tet-mesh a gray-scale volumetric image. The output mesh in MATLAB generated through iso2mesh looks amazing. I then extract the node and element data of the output mesh and write it to a .inp within the same code with certain manipulation (adding label columns at the start of node and element data & excluding the 5th label column from the element output) to make it ABAQUS-ready. I am using the following setting for now, but I play around with opt and volume settings to decide between a coarse and fine mesh.

opt.radbound=1; % set surface triangle maximum size
opt.distbound=0.2; % set max distance that deviates from the level-set
[node,element,face]= v2m(tpms,0.05,opt,4,'cgalsurf');
% v2m converts a 3D volumetric image into a tetrahedral mesh 

where tpms is an algebraic equation used to plot the surface of the structure. 

When I import the .inp file into ABAQUS an orphan mesh (a mesh without geometry) is generated and it resembles the mesh figure generated in MATLAB. However, the "Mesh verify" command within ABAQUS shows a 100% error of elements (with my understanding the ABAQUS is deeming all the elements as degenerate as it returns a shape factor of 0 for all tet elements in the mesh).

To further investigate the issue, I tried solving the same problem with a simpler geometry like a cube but the same problem persists. I have time and again compared the node and element data produced in iso2mesh with the ABAQUS .inp file to check any misalignments of data points while writing the file resulting in degenerate elements but it all seems fine to me. Visually, the elements in ABAQUS look fine but I cannot think of any idea to trace back the node and element connectivity except for the comparison between the iso2mesh node and element data variables and the output file that I write using those variables. 

Can you think of any possibilities of what I might to doing wrong?

I would be glad if you would like to examine my code or may have any questions regarding the process. Your help in this regard is highly appreciated. 

Qianqian Fang

unread,
Feb 14, 2024, 5:36:10 PM2/14/24
to iso2mesh-users
I do not have a copy of abaqus, but I think there has been a number of discussions in this mailing list in the past, you can search for previous posts on exporting mesh between the two tools


there is also a function in the toolbox, but I am not sure whether this format is still valid for the newer abaqus


if you want, you could also request in abaqus forums to see if they are willing to adopt the JMesh format that I developed for iso2mesh (as well as for my NIH funded NeuroJSON project)


we really need a simple tetrahedral mesh exchange format to smoothly share data between mesh generators

Kamran Ali Ahmed

unread,
Feb 14, 2024, 9:08:15 PM2/14/24
to iso2mesh-users
Dear Dr. Fang,

Thank you for your prompt response and guidance. I revisited the conversations and found a trick in the book. The mesh works and returns only minor warnings if the flip the 3rd and 4th element column before writing an Abaqus input file. 

Also, I have tried the saveabaqus.m file to write an input file, in addition to my own developed code (as I didn't know it already existed in the tool) and it works fine to date. The input syntax has not changed over the years so the function writes acceptable files for Abaqus.

I will surely raise this with the use of the JMesh format at various ABAQUS forums and have a feel of the pulse.  Also, I cannot agree more with your statement regarding the mesh exchange strategies between various available tools. That is something to work on, for sure. 

Cheers,
Kamran
Message has been deleted

Qianqian Fang

unread,
Feb 22, 2024, 11:05:53 PM2/22/24
to iso2mes...@googlegroups.com, Kamran Ali Ahmed

I am not sure I understood the request -

are you trying to export a sub-setction of the nodes to abaqus or a sub-section of the surface (including both nodes and triangles)?

with your below code, does it work? what was the issue/error? what do you mean by "not integrated with the original .inp"?


On 2/21/24 21:52, Kamran Ali Ahmed wrote:
Hello Dr. Fang,

Since I have been using saveabaqus.m to write my Abaqus input files for a simple cube geometry, I was wondering how I can create a node set of all nodes at a specific surface say, z = L location (where L ranges from 0 to 10) to be integrated into the generated .inp file? I have tried adding the following lines to my code where iso2mesh and saveabaqus are called and it returns the desired results. However, that resulting node set file is not integrated with the original .inp with node and element data file generated by saveabaqus. I am trying to modify the saveabaqus.m to add node sets at desired x, y, and z locations to apply boundary conditions at the outermost surfaces. Your help in this regard is highly appreciated.  

% Define column range
col = 3; % for nodes on Z face
% Read specific columns within the defined range
specified_column = node(:,col);
indices = find(node(:, col) >= 10); %for L=10 greater or equal to 10 is used because there are certain nodes beyond L=10 as the elements are not smooth
selected_rows = node(indices, :);
% Extracting the original node numbers of the selected rows
selected_node_numbers = indices;
% Writing the selected coordinates and their indices to an Abaqus input file
fileID = fopen('selected_nodes_ZL.inp', 'w');
fprintf(fileID, '*NSET, NSET=SelectedNodes\n');
for i = 1:length(indices)
fprintf(fileID, '%d,\n', indices(i));
end
fclose(fileID);
Cheers

--
You received this message because you are subscribed to the Google Groups "iso2mesh-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to iso2mesh-user...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/iso2mesh-users/56ff0117-4d3f-4d2b-abae-a8cb9ea00542n%40googlegroups.com.
Reply all
Reply to author
Forward
0 new messages