+ +

Terms & Conditions


Go to -> Company Details

Go to -> Licensing of Oasys software – Licensing Documentation PDF

Go to -> Help with ordering

Privacy and Cookies

Data Security

Website Terms and Conditions

Software Licensing Terms

Privacy and Cookies

We may change this privacy notice from time to time by updating this page.

What information do we collect?

When you use this website, we may collect the following information:

  • the areas of the website that you visit
  • information about your computer, such as which browser you are using, your network location, the type of connection you are using (e.g. broadband, ADSL etc) and your IP address

We do this by using cookies, which are small files that help us track how our visitors use the website and enable us to understand where we can improve your experience. If you would like to find out which cookies we use and the information they track see our Cookies Policy.

Once you submit or register information through our website we will know who you are and your activities on this website and information about you and/or your company may be recorded on our systems. For example, we may ask for personal information when you download our software including:

  • your name
  • company name
  • email address
  • postal address
  • telephone number
  • country where you are based
  • Social media ID
  • your comments/questions
  • services/markets you are interested in

We may also collect personal information from telephone calls and/or other correspondence with you.

What do we do with the information we collect?

The information we capture is used for various purposes. The main purpose is to provide you with our services (whether available via the website or offline). We also use the information for:

  • website development
  • understanding how our visitors interact on the website
  • understanding what our clients are interested in
  • understanding what potential clients are interested in
  • dealing with enquiries/concerns
  • marketing our services and people to you
  • market research
  • service development
  • internal record keeping


We would like to provide you with information about our services and other information which we think you may find interesting. We may send you such information by post, email and/or telephone, unless you have asked us not to do so.

We will not provide your personal information to other organisations for marketing purposes without your explicit consent.

If at any time you do not want your information used for direct marketing purposes, please contact us or follow the unsubscribe link in our marketing email messages.

Who do we share this information with?

We may share your personal information with companies acting on our behalf who will only use the information to provide that service. However, we will retain control of your data and any third party service provider that we use must act in accordance with our instructions. We may also share your personal information with a purchaser or potential purchaser of our business.

In some circumstances, we may have to disclose your personal information by law, because a court or the police or other law enforcement agency has asked us for it.

How to get copies of or amend the information we have collected

You may request details of the personal information that we hold about you under data protection laws. If you would like a copy of the information held about you please write to us at oasys@arup.com or at: Data Protection Officer, 13 Fitzroy Street, London, UK, W1T 4BQ. Please note that we may charge a small £10 administration fee for information requests.

If you think any information we have about you is incorrect or incomplete, please email us as soon as possible. We will correct or update any information as soon as we can.

top ]

Data Security

We are committed to ensuring that your information is secure. In order to prevent unauthorised access or disclosure we have put in place suitable physical, electronic and managerial procedures to safeguard and secure the information we collect, including locked cabinets, electronic password protection and pass card access to buildings.

If at any point you suspect or receive a suspicious communication from someone suggesting they work for Oasys or a website claiming to be affiliated with Oasys, please forward the communication to us or report the incident by email to oasys@arup.com or in writing to Oasys, 13 Fitzroy Street, London, UK, W1T 4BQ as soon as possible.

top ]

Website Terms and Conditions

The contents of this web site are protected by copyright and other intellectual property rights under international conventions. No copying of any words, images, graphic representations or other information contained in this web site is permitted without the prior written permission of the webmaster for this site.

Oasys accepts no responsibility for the content of any external site that links to or from this site.

top ]

Software Licensing Terms

Terms and Conditions of Purchase

The full conditions of purchase and maintenance for all Oasys software are set out in the Oasys Software Licence and Support Agreement. All prices are subject to TAX at the current rate.

Prices and specifications are subject to change without notice – please ask for a written quotation.

Although every care has been taken to ensure the accuracy of all information contained herein, the contents do not form or constitute a representation, warranty, or part of any contract.

Superseded Versions of Terms and Conditions

Oasys keeps copies of all superseded versions of its terms and conditions.

Maintenance & Support Services

Support and maintenance is included with all subscription licences for their full duration.

Annual maintenance contracts are available for software under a perpetual licence, prices are based on a percentage of the most recent list price.

This service includes:

  • telephone/fax/email/web based support
  • free software updates available via internet download
  • personalised output header for many products

Evolutionary Topology Optimisation with GSA

Inspired by a recent Arup Thoughts article about a radical minimum weight joint, and making use of some online references (Huang and Xie, 2010), I have developed a Python routine for running an Evolutionary Topology Optimisation (ETO) on a GSA mesh.

The basic idea of this method is quite simple: remove the bits of the structure that are doing the least work, then repeat until everything is working hard. Hard work in this case is defined by the ratio of the highest stress, or strain energy, to the lowest (I chose strain energy in this case), and switch off any element that falls beneath the Rejection Ratio (RR). The trick is to ramp up the RR slowly so that the remaining structure is stable. You do this by starting the RR low, say at 1% of peak stress or 0.1% strain energy, and then increasing it by an small amount, the Evolutionary Rate (ER), whenever all elements pass the RR test. You then stop when RR reaches a set amount, say 25%.

In this Python script (see Using Python Scripts with MassMotion for notes on getting started) I make use of Analysis stages, so nothing is actually deleted from the model and you can see how the structure optimises at each step. On the other hand, I delete the analysis results after each loop to keep the file size down, so you will need to analyse all if you want to see how the stresses develop over time.

As an example, here is a solid mesh with two fixed support points that evolves into a cross between an arch and a truss.

The routine will end when either the RR reaches the max value or when the analysis fails. If the analysis fails because of bits of the mesh coming loose, try halving the evolutionary rate, as this can allow the mesh time to remove the weak areas.

Note that when you run the script you will need to change the directory to something suitable on your machine, as well as possibly the file names.

Do please share any other interesting meshes and their required ETO settings.This routine should work on either 2d mesh or 1d elements, as both give a strain energy output. If you want to change the script to work on stresses you will need to be more careful as 1D and 2D elements will have different output formats.

Reference: Huang, X. and Xie, Y. (2010). Evolutionary topology optimization of continuum structures. Chichester, West Sussex: Wiley.



The Python 3.5 Script
## GSA Evolutionary Topology Optimisation ##
import win32com.client
import pythoncom
# variables - edit the directory to suit !
dir = "C:\\Users\\peter.debney\\Documents\\Visual Studio 2013\\Projects\\PythonTopologyOptimisation\\"
input = "two simple supports.gwb"
output = "two simple supports out.gwb"
initial_rejection_ratio = 0.0001  # initial Rejection Ratio
ER = 0.00005  # Evolutionary Rate
max_rejection_ratio = 0.025
RR = initial_rejection_ratio # Rejection Ratio
# open GSA model
gsa_obj = win32com.client.Dispatch("Gsa_8_7.ComAuto")  # early binding
gsa_obj.Open(dir + input)
stage = 1
element_list = []
nElem = int(gsa_obj.GwaCommand("HIGHEST,EL"))
for iElem in range(nElem + 1):  # add existing elements to the list
    if int(gsa_obj.GwaCommand("EXIST,EL," + str(iElem))) == 1:
while RR <= max_rejection_ratio:
    print("RR = " + str('% 0.5f' % RR) + " Stage = " + str(stage) +
         " No. elements = " + str(len(element_list)))
     # clear existing results to keep file size down
     # create analysis stage from element list
    gsa_obj.GwaCommand("ANAL_STAGE," + str(stage) + ",RR " + str('% 0.5f' % RR) +
             ",NO_RGB," + " ".join(map(str, element_list)) + " ,0")
     # create analysis task with stage
    gsa_obj.GwaCommand("TASK," + str(stage) + ",Static," + str(stage) +
             ",GSS,SOL_STATIC,1,0,128,SELF,none,none,DRCMEFNSU,MIN," +
             "AUTO,0.000000,0.000000,0.000000,NONE,ERROR,NONE,NONE," +
    gsa_obj.GwaCommand("GSS_PARAM," + str(stage) + ",SOLVER_PARALLEL_DIRECT," +
             "PRE_LINE_JACOBI,1.00000e-016,1.00000e-010,0.00100000," +
             "1.00000e-010,1.50000,RESIDUAL,AUTO_GEOM,1.00000e-012," +
             "32,1.00000e-012,10000,1.00000e-010,4096,0.000500000," +
             "DISP,1.00000,0,NODE,INT_NORM,STURM,MITC,ALLMAN_COOK," +
    gsa_obj.GwaCommand("ANAL," + str(stage) + ",Analysis Case " + str(stage) +
             "," + str(stage) + ",L1")
    gsa_obj.SaveAs(dir + output)
     # read the strain energy results
    results = {}
    max_strain = 0
     for iElem in element_list:
         if int(gsa_obj.GwaCommand("EXIST,EL," + str(iElem))) == 1:
             # extract strain energy for each element
            strain = gsa_obj.GwaCommand("GET,STRAIN_ENERGY," + str(iElem) + ","
                + str(stage))

     # convert strain string to list
    strain = strain.split(',')
    strain = float(strain[3])
         if strain is not []:  ####
             if strain > max_strain:
                max_strain = strain
        results.update({str(iElem): strain})
     # loop through results and list any that have strain energy >= RR
    new_list = []
     for iElem in results:
         if results[iElem] >= RR * max_strain:
     if len(new_list) == len(element_list):  # increase RR if no elements removed
        RR = RR + ER
    element_list = new_list  # update element list
    stage += 1
    gsa_obj.SaveAs(dir + output)
gsa_obj = None

Require more information?

  • This field is for validation purposes and should be left unchanged.

Newsletter Sign up

Please fill out your details below to receive the latest oasys news.
  • This field is for validation purposes and should be left unchanged.