Skip to main content

FE optimization help

Submitted by David A Bennett on

Hey guys (and gals). I have been working on a FEA. The problem I have been having is that I cannot find a FE package that allows for optimization to be performed. What I am trying to do is create a FE geometry parametrically and have the software change the specified parameters accordingly. I am currently trying Abaqus and I am unsure of how to assemble multiple objects into one geometry (say an extruded rectangle and cylinder). I am very new to using abaqus so I'm not sure what all it can do. I'm more familar with Comsol and Ansys. Thanks for any help.

Hi David,

I have been working on a problem which is probably similar to what you want to do. I want to find a fluid interface and I use Comsol. If you knew the parameters of the geometry, then you can do the forward analysis. So do that and save it as an m-file if you want to use matlab or as a comsol script if u prefer to use the comsol script programming. Now add lines to your forward model which return the quantity you want to optimize. Now you can call this function from one of the matlab optimization commands such as fminsearch, lsqnonlin etc with a trial value for the optimal parameters you want to find.

I am not familiar with Ansys or Abaqus.

 

Good luck,

Temesgen 

Tue, 11/27/2007 - 14:21 Permalink

Thanks for the information. The problem is that I have usually done analyses by creating the geometry in that particular FE package and then doing the analysis from there. I understand roughly what your referring to, but i'm not sure how to implement this idea. If you or someone could give me a tutorial to work off of that would help. I understand how the program needs to be written and the FE side, but there is a gap of information that I need to complete this.

Tue, 11/27/2007 - 20:43 Permalink

I really need help with this. I would think someone has done this before. Whenever I try to parametrize for example the block command it says "error in built-in function block3".

g1=cylinder3('x','100','pos',{'0','0','0'},'axis',{'0','0','1'},'rot','0');

g2=block3('2*x','20','50','base','corner','pos',{'-x','0','50'},'axis',{'0','0','1'},'rot','0');

I can get the code to work if I change the value of 'x' to what I want it to be for that particular case, but I would think there is a way to say I was 'x' to vary from say 5-15 by 5's in the program then it would run accordingly.

Thu, 11/29/2007 - 16:34 Permalink

Hi David,

From the code, I am guessing you are using Comsol. The thing is comsol takes those variables as strings. So if you put 'x', it means the string x. If you want to pass a variable, convert the number to a string. If you are using matlab for the scripting, here is what you lines should be

g1=cylinder3(num2str(x),'100','pos',{'0','0','0'},'axis',{'0','0','1'},'rot','0');  
g2=block3(num2str(2*x),'20','50','base','corner','pos',{num2str(-x),'0','50'},'axis',{'0','0','1'},'rot','0');

 

It is also possible to do the string conversion outside the solid creation lines above and then pass the string so converted as an argument. For the first line, you can make

y = num2str(x); g1 = cylinder3(y, '100', ...);

Note that there are no apostrophes next to y above.

 Btw, you can email comsol help desk when you encounter problems. A colleague of mine who does that says they reply in a reasonably short time unless you question is very difficult. The documentation that comes with the software is not so clear.

 

 

 

Thu, 11/29/2007 - 17:33 Permalink

Thanks for the help thus far, I do really appreciate it. This "optimization" has really caused me many headaches the last 6 or so months. I'm getting what I want now thanks. One last thing, do you know where i could find some of the output parameters (von Mises stress, volume, total displacement)?? I looked around for awhile and could not find anything worth while. I will look to see if I can locate it and see if it has the information I need. Thanks.

 

David

Thu, 11/29/2007 - 21:19 Permalink

i'm try to do this model by abaqus and i faced some problems.any help is appreciated.

it is a 3 layers plates,a viscoelastic material sandwich between 2 steels.any kind of help,e.i,papers,thesis or notes etc are

welcome.

i modeled the 2 steel as sheel 'S8R"and the rubber as contiuum  "c3d20r",rubber is not thin.

Thu, 11/29/2007 - 21:40 Permalink

Hi David,

If you are working with the GUI then total displacement, von Mises stress and several other quantities are predefined. You have to go to Postprocessing>>Plot Parameters and if you chose the surface or boundary or any appropriate tab, then you can find a list of predefinied quantities.



If you are scripting, then use the postinterp command to find values at given points. Check the help on postinterp for details. The name of the von mises stress parameter is 'mises_smps'. In the documentation you can find a list of the names of all other predefined quantities.

If the quantitiy you want to know is not predefined, you can always express your quantity interms of predefined quantities. For example, normal stresses on a boundary are not predefined (at least in my version, 3.3). But the components in global coordinates of the traction and the normal to the boundary are predifined. So after obtaining the traction and normal by postinterp, you can dot multiply them in your script to find the normal stress on a boundary. Ditto for other non-predefined quantities. 

 Good luck

Fri, 11/30/2007 - 12:37 Permalink

The 'postinterp' command seems to be the command I need to get the quantities I want (von Mises, displacement). I already knew about the postprocessing quantities. I just wanted to have my code get the quantities I wanted from the FE solutions like you have described. Again, thanks for all the help. I really appreciate it!



David

Fri, 11/30/2007 - 15:17 Permalink

Hi David, I am reading this paper and I thought it might help you.

An inverse method for determining elastic material properties and a material interface 

Here is the abstract

A numerical procedure which integrates optimization, finite element
analysis and automatic finite element mesh generation is developed for
solving a two-dimensional inverse/parameter estimation problem in solid
mechanics. The problem consists of determining the location and size of
a circular inclusion in a finite matrix and the elastic material
properties of the inclusion and the matrix. Traction and displacement
boundary conditions sufficient for solving a direct problem are applied
to the boundary of the domain. In addition, displacements are measured
at discrete points on the part of the boundary where the tractions are
prescribed. The inverse problem is solved using a modified
Levenberg-Marquardt method to match the measured displacements to a
finite element model solution which depends on the unknown parameters.
Numerical experiments are presented to show how different factors in
the problem and the solution procedure influence the accuracy of the
estimated parameters.

Good luck

Fri, 11/30/2007 - 17:05 Permalink