The current state of computational mechanics for the design analysis of engineering
products has reached a stage where there are about six large general-purpose FEA codes
that do 98% of all the analysis in the world. Over the years such codes have added
capabilities and features at a fast rate and, either, because of changing hardware or user
requirements, these codes will continue to grow in capability. Clearly, if there are 20 or 100
users who want/demand a certain feature, then the developer will respond. Then if a
competitor is seen to be offering more then this may also trigger the inclusion of features.
If lots of users wanted to be able to calculate the torsion-bending constant of an arbitrary
cross section; or they wanted to stress-strain curves and failure criterion for carbon nano-
tubes then these would be in the codes.
All this increasing generality means, for any single user, there is that a lot of the
functionality that is not used. Because they work on a need-to-know basis there are many
areas of a large FEA system that to a specific user are un-necessary. Other bits can not be
avoided. How many of us know how to use foot-notes in Microsoft Word.
As opposed to this ever increasing capability and competency in FEA codes is the product
performance specification within most engineering companies. Most often a design team is
focused on a single product, be they 3rd tier in the automotive industry making vacuum cans
for braking systems, or bicycle frames, or artificial hips. This means that the team know a
lot about a single product and what they expect from it and what all the performance issues
are. In other words they only want to achieve one very specific goal. This goal will mean
improvements in the performance in some way. Sporting equipment is an obvious
example, the tennis racquet that has a 5% increase in coefficient or restitution will win over
one that does not.
Thus in this situation, what an organization needs from its product design improvement
software is a very specific outcome and, to my mind, this then needs a very specific code to
do this. Having researched structural optimization techniques for the last 14 years and
undertaken many commercial analysis and design FEA projects the author considers, that
the current software being developed for general purpose structural and design optimization
is following the same route as FEA and trying to be as general purpose as possible. Thus
the user of such software is faced not only with a large choice of settings but, even harder
to resolve, a large choice of different methods to attack the optimization problem, each with
its own constraints and special tuning features.
This situation is analogous to a period in FEA history when the analyst would spend a lot of
time exploring a problem with different element types and densities. Modern software with
parallel and sparse solvers and good mesh generators has eliminated most of this
computational exploration.
This paper puts the argument that what is needed for product optimization within any
organization is a specific code that targets only the products and processes of the
organization. Thus there is a need for a pre-pre-processor which only targets the specific
task in hand and a post-post processor for the FEA that extracts the specific performance
parameter, like max stress or stiffness etc. Thus the GUIs in the pre-pre processor should
only have the variable data for the single product and the steering parameters that fit the
product. This GUI then launches the FEA, the model can be built from the GUI or may
Such iterations can be handles automatically and the special code need only report the
results. Often this involves a change in the design and the ability of the FEA code to do
CAD to FEA to CAD transfer becomes and issue.
A survey of the members of the FENET EU funded network revealed as expected, that all
commercial companies who used FEA did so for the main purpose on improving their
products in some way. This desire led them to use some form of product improvement
process. From the responses to the survey it was clear that there were as many processes
for product improvement as there were products. Indeed it appears to this author that
whilst FEA is a very definite process based on the unchanging laws of mechanics and that
the users only choice is which FEA package to use, the range of processes for Product and
System Optimization (PSO) is very wide, from simple Design of Experiment (DOE) and
Response Surface Analysis (RSA) through complex probabilistic methods to even more
complex mathematical programming techniques for topology optimization.
One of the questions in the survey related to whither organizations used a variety of
methods for PSO and they all responded that this was the case. Also, most the
respondents used in-house expertise and software to optimize their own products and
processes. Some also used commercially available products like Optistruct fro Altair and
BossQuatro from Samcef.
From all the comments in the survey it is clear to this author that companies want to have
internal optimization processes that suit their product and indeed it could be said that these
internal processes contribute to the success of their products. Such a competitive edge
means that they place significant value of the optimization processes and would not share
them. I conclude, partially from this that, because each product is unique to its producers,
then the tools to optimize that product or process must also be unique to that production
company. Therefore it is more important to give the company the tools to develop
algorithms and processes that best suit them than to try to develop a very general purpose
programme that suits nobody.
It is this authors opinion that the major Computational Mechanics software houses have
begun to recognise this and are making available what are generically called Application
Programming Interfaces (API) that allow the user to, in this instance, write the code they
want for their product and process in the computer language of their choice for the
hardware of their choice.
Any computer program written, generally in a Windows supported computer language, can
utilise the FEA APIs, provided the program is configured to dynamically load Windows DLL
files and uses standard Windows calling conventions. It is possible to achieve this in
languages such as C, C++, Pascal, Delphi, Visual Basic, FORTRAN, and so on. The choice
of language used will largely depend upon the programmers experience and preference
rather than any specific performance or compatibility issues. For example, the Strand7 API
itself is written using Delphi.
In simple terms, the API allows you to incorporate the commercial FEA code within your
own programs. A list of the important activities that it is desirable of an API to do is:
Although these functions can be performed by using the commercial FEA codes GUI
directly, and data can be transferred between the FEA code and other applications via text-
based import/export functions, copy-paste, etc, such an approach can require a significant
amount of additional data processing or repetitive, manual procedures when the same
operation is to be performed many times. The API approach provides a totally transparent
way of interacting with the FEA codes data and repetitive tasks can be easily automated.
Importantly, if the format of the FEA codes data files changes, such changes are fully
absorbed by the API so that no changes to the external programs are required to use a
more up-to-date version of FEA code or the API.
In structural optimization there can still be many goals for the design-
These goals may not be the same for each part of a complex structure such as an aircraft.
Alternatively they may all apply but to varying degrees in various locations on the structure.
It may also be the case that manufacturing constraints will be present such as machine tool
access, or radius of milling cutter.
With access to all the data for an FEA model to change or to generate and access to all the
load and constraint specification it is a simple matter to generate any perturbation to this
and study its effect. Such perturbations can be random or structured. Thus sensitivity
information for a mathematical programming optimization can be generated or single design
point data for a genetic algorithm (GA) data string or a fitness result for a Monte Carlo
reliability study generated.
Figure 1 below, charts the progress of the optimization in two ways, firstly the specific strain
energy (strain energy times volume divided by initial value) is charted relative to the initial
design value. A descending chart, as is the case in Figure 1 shows that either the strain
energy is descending (ie. Stiffness increasing) for a constant volume, or the volume is
descending for the same strain energy or it is a combination of both these desirable
outcomes. The API code could be instructed to control either extreme of tale the mid path.
Regardless the design is better as can be clearly seen in Figure 1. Secondly the mean
sensitivity and the standard deviation of all sensitivities is also shown in Figure 1. As the
optimum beam shape is approached the mean value becomes constant and the standard
deviation becomes zero. This indicates two things; the design is less sensitive to thickness
changes in any component and that there is no point in changing one thickness because it
will only increase the standard deviation which will take the design away from the optimum.
This could be called a robust design situation. Also the mean sensitivity going to its lowest
value also indicated that the design achieved is least sensitive to any design change. In
other words the effect of a thickness change in any element has the lowest effect on the
stiffness.
Figure 1 ::: Stiffness based structural optimization of cantilever plate with variable plate thickness.
Figure 2 simply shows the in-plane loaded cantilever after the optimization run and the
linear variation is thickness can be seen.
Example 2 ----- Thin plate cantilever, out-of-plane bending due to tip load
This is the same model as Example 1 but now with out-of-plane tip loading. Figure 3 below
charts the progress of the optimization
Figure 4 ::: Plate thickness optimization for cantilever, quadratic variation in thickness discernable.
Figure 5 shows that despite the stiffening the predominant distortions are bulging of the
sides and the base. Figure 6 shows the path of the evolving improved design and it can be
seen that the strain energy is decreasing as are the sensitivities. At a specific strain energy
of about 0.25 the iterations are stopped and the structural shape is reproduced in Figure 7.
Figure 5 ::: Plate thickness optimization for polythene storage container, initial design with all
thickness of 10mm.
From Figure 7 it is seen that this optimization process has not gone in the desired direction
and that to achieve reduced strain energy the side wall of the container has been gradually
increased to over 30mm. As is well known, for bending, the benefits of simple increasing
thickness are cubed and therefore this outcome is understandable. The contained is
heavier but a lot stiffer.
In the authors opinion a better sensitivity on which to base the increase or decrease of plate
thickness would be the change in energy for the change in the volume of the material of
plate type j, ie (dU/dV j). This has yet to be explored. Also to have a buckling constraint
might also add to the fidelity of the optimized design It would also be simple to have a lot
more stiffeners in the original design and have any un-needed ones diminish to zero
thickness. Mush can be done to tune the API code to suit a particular design
Since 1992 the author has published a series of papers which demonstrate the simplicity of
evolutionary structural topology optimization. The following example is the result of a few
hours of coding and then model construction and then a few minutes of processor time on
the current breed of laptop computers with processor speeds in the range of 1 to 2 GHz.
The example is the standard benchmarking situation of the 2D Michell truss on fixed
supports. Figure 8 below shows the final topology and can be seen to be quite fine in
detail. This has been achieved using two levels on mesh refinement that with the API
software in a simple matter of stopping the evolution at a certain volume ratio, say 40% of
original, deleting the eliminated elements and then doing a global refinement. Then the API
is run again and the stopping, elimination, refinement undertaken again. The resulting
topology after 10 minutes of effort is shown in Figure 8 below. This is followed by Figure 9
that shows the refinement stages fro one symmetric half of the solution domain.
Figure 9 :::: Underlying meshes that have been eliminated during the adaptive ESO process using the API
code.
The topology in Figure 8 has all the correct characteristics for the Michell truss and passes
the benchmark tests applied to it.
The following few lines of Pascal coding are the core of the API code. The rest of the code
is basic book-keeping of opening the STRAND7 files, examining the stress results, deciding
to eliminate an element then resolving and going round again. A few illustrative lines of the
code are shown below to demonstrate the simplicity of the ESO algorithm and the use of
APIs do generate problem and product specific code.
St7GetPlateResult(1,rtPlateStress,stCOMBINED,i,1,AtCent
roid,ipPlateMidPlane,NumPoints,NumColumns,PlateRes);
reject:=RR*maxval;
if PlateRes[3]<Reject then begin (PlateRes[3]=Von Mises)
St7CloseResultFile(1);
St7SetElementProperty(1,tyPLATE,i,1);
//ModelDetails.Lines.Add(Format('Following Plate
removed %4d',[i]));
NumRemoved:=NumRemoved+1;
end;
end;
This code may be simple to read or otherwise. It simply looks at an elements Von Mises
stress, determines that it is less than the current Rejection Ratio and then switches its
property to 1, which means its material modulus is 0.000001 times that of the desired
material.
This is just one simple illustration of APIs applied in the area of topology optimization,
because the user has control of the source code then a large variety of adaptations can be
applied, such as non-design regions, nibbling from edge only to give shape optimization
and so on.
Concluding Remarks
This brief manuscript has endeavoured to show how an engineer can develop code in
whatever language (Visual Basic / C / Pascal / Fortan) to achieve the local goals of the
organization in terms of its product and system optimization. These gaols fro improved
products are very localized and so are difficult for a general purpose code to encompass.
Even more importantly if the company need to change to capabilities of the PSO code then
the API environment makes this a very easy task and there is not danger of legacy code
since updating API is easy as is adding new capabilities. The FEA code developer totally
is responsible for the DLL models that link to the FEA executable and therefore any API
code will remain fixed through whatever version changes occur with the FEA code.
In the work of this paper the STRAND7 FEA code from G+D Computing (STRAND7.com)
has been used and the API environment and all DLL linking code are supplied as part of the
STRAND7 environment.
Thus to this author the use of API environments overcomes many of the difficulties with
large general purpose optimization codes as it give the power and control to the local
company not a remote developer.