Line load based on section height

Hi all,

I’m trying to define a line load on beam elements (or structural lines) and would like to calculate the load intensity based on the cross-section height or width. Since the height of the cross section varies along a GAX and is interpolated within AQUA, I’d like to access the height of each beam element, multiply it with a certain area load (eg. wind pressure, live load) to obtain the line load to be applied on the respective element. Is this possible in TEDDY or Sofiplus?

In other words, can I access the interpolated section variables (height, width etc.) along a GAX within SOFILOAD?

Below is the SOFILOAD code I’d like to use with #HEIGHT defined as a TVAR in AQUA and interpolated along a GAX.

LC 10+#i TYPE Q_A DLZ 1.0 TITL ‘LL’
BEAM SLN 10000+#i*1000 TYPE PG PA 10.0 *#HEIGHT

Many thanks,

Hello Marcel,

As far as I know it is not possible to access a TVAR (defined in SOFiMSHC and AQUA) in SOFiLOAD.
I would suggest to use a #LET variable to create the cross-section. This has the consequence that you can use this variable in SOFiLOAD as well.

Another possible solution could be to read the cross-section values with an @key command. (see container 9 - cross-sections). But this procedure is only suitable for advanced SOFiSTiK user.

Best regards
Frederik Höller
Your SOFiSTiK Support Team

If use #LET variable to create the cross-section in AQUA, is it still possible to create axis variable in SofimshC?

1 Like

Thanks for the quick reply.

I’m happy to define my section variables with #LET, but:

  • Will I then be able to interpolate these section variables along a GAX?
  • Can I access these interpolated values of the variable? (Ie. not the ones I manually defined, but the ones interpolated by AQUA’s INTE ALL command)

Regarding the @key command, could you please refer me to a manual where I can read more about this? I’m happy to write a script to access the CDB if that’s what it takes.



  • Use STO if you want to use it in several modules
  • Use the STO variable as input to the axis

I.e. you “save” the variable to make it accesible outside gax use and then you use it as input to the gax

  • Calling a variable with a decimal will interpolate it
    STO#Test 10, 20, 1
    Let#1 #Test(1.5) $ #1 is now 10.5, halfway between 20 and 1
  • If you still want to use @key, have a look at the interface manual
    The pdf points to:
    CDB Interfaces Manual — CDB Interfaces 2020

I recommend learning to interface with the cdb, but it’s somewhat of a learning curve.


I had a go at defining my section variables with LET (and STO) but as expected the interpolated section variables are still not available in SOFILOAD, only the value that I initially defined.

Perhaps I didn’t clarify the problem at hand well enough.

  1. I have a parametric cross-section defined in AQUA.
  2. I then define the variation of the cross-section variables along an axis in SOFIMSHC.
  3. Then I have AQUA interpolate all the cross-section variables along the axis with the command INTE ALL.
  4. Now, can I access these interpolated values easily within Teddy to define loads based on the variable cross-section width for example? Or I have to dive into CDB interfaces?

Many thanks,

  1. I do not think you can access the variables via teddy easily/directly
  2. I suggest you save the variables locally via let/sto and interpolate them yourself (probably easiest)
  3. You can access the variable or the section height of each beam via cadinp and @key
    (Although accessing the variable might be a pain, since the record is defined as literal. I would probably go for the beam properties)

Either way you will probably end up scripting your own interpolation scheme.

A word to the sofistik developers: Extending the interface examples with access schemes/examples for records with a literal would be nice (e.g. gaxv, secondary groups etc)



As for 2., if I do this, I’ll lose the great functionality provided by GAXV and would end up doing a lot of manual labour. Would like to avoid this :slight_smile:

As for 3., I came up with the code below. This is supposed to print the cros-section variables of section no. 125 (a cross-section created by the sofistik interpolation INTE ALL). It works alright except that it gives me the initial values of the cross-section variables, not the interpolated ones.

I’m sure I’m missing something here. Any suggestion would be much appreciated. Many thanks.

@KEY SECT_VAR 125 98

 LET#varName LIT(@NAME)
 TXB #varName
 LET#varVal @(RVAL)
 TXB #varVal

The relevant clause in cdbase.chm:

  • Check the cdb for what is actually stored (->database tools->database information, check record 9/sectionnr and scroll until you hit the variables)
  • When I check a small example file the variables are actually stored under SECT_VAD (in my case, read the “There are two sources of variables:” bit in the picture you posted)
  • Then this code should work:
    @key Sect_VAD 180$ checking section 180
    Loop 7$ checking a total of 7 variables
    Let#temp1 @(id); prt#temp1
    Let#temp2 @(NAME); prt#temp2
    Let#temp3 @(rval); prt#temp3

Since you are using the @name format, you only need @SECT_VAD/@SECT_VAR.
If you would be using the @key format, you would use the 97/98 (i.e. the id)

1 Like


Thanks a lot. I was under the impression that SECT_VAR contains the variables and SECT_VAD the default stored values, but the opposite seems to be the case. The code works now after changing to SECT_VAD, and I was able to extract the variable I needed, plus the corresponding beam number. So in the end I could apply to loading based on the section variable.

I’m surprised though that this is such a painful process, and there’s no easier way to do it.