• No results found

Section property dependency

In document Verifying Engineering Calculation (Page 86-91)

Logic to check logic

5.12 Section property dependency

IF hf>h/2 **

STOP Depth of top flange exceeds half of beam depth.

ENDIF

Obviously if values were provided for all prompts e.g. type=1, h=400, hf=100, then the above would work; but if type=1 then hf would not be input and in consequence the Boolean could not be evaluated. The second run would pick up the bug, the first run would not. The juxtaposition of the three prompts with the line which contains the bug, make this seem so obvious that it should have been avoided; when the ellipses represent 1000 missing lines, and the engineer who is writing the proforma calculation is juggling with 50 variables in his head, such a bug is less obvious.

Another consideration: if the calculation has terminated before the end, because, say, a stress combination has exceeded unity, the engineer must not reason "the stress combination check has reported correctly, so the calculation would have worked if the loads had been reduced, thus the test data provided a successful test". Values given in response to prompts which follow the stress combination exceeds unity message, would not have been input; the logic which follows the message would not have been tested for the set of test data. Thus modifying the data slightly to reduce the stress combination below unity, will not guarantee a successful second run free from errors.

For this reason it is recommended that time be spent on choosing ranges of values for the parameters so that at least 70% of every set of test data automatically generated, runs through to the end of the calculation.

5.12 Section property dependency

Section property dependency is common to both the structural analysis of a framework and the structural design of a component. Even experienced engineers forget that the theory of structures is predicated on section properties such as: cross-sectional area, shear area, moment of inertia etc. being compatible. Assigning arbitrary numbers to the AX, AY & IZ triad for the members of a plane frame, will generally result in an impossible structure as AY and AZ are functions of AX. As an example, the section

all 7 members of a plane frame by: 1 THRU 7 AX 28.0E-4 AY 14.5E-4 IZ 2840E-8 where the shear area AY has been taken as the product: depth of section times thickness of web. Were the section properties to be specified as:

1 THRU 7 AX 28.0E-8 AY 14.5E-4 IZ 2840E-8 i.e. the engineer assuming a small cross sectional area to avoid the members taking axial load, then axial strain energy would be predominant rather than bending strain energy, and results could be grossly in error. Were the section properties to be specified as: 1 THRU 7 AX 28.0E-4 AY 14.5E-8 IZ 214.5E-840E-14.5E-8 i.e. the engineer assuming a very small shear area, then shear strain energy would be predominant rather than bending strain energy, plotted results frequently appearing as if all members had pinned ends rather than fixed. Even if the engineer had correctly specified the section properties as: 1 THRU 7 AX 28.0E-4 AY 14.5E-4 IZ 2840E-8, but had inadvertently given Young's modulus as 205E3 instead of 205E6, then deflections would be 1000 times larger than expected; had the engineer inadvertently given Young's modulus as 205E-6 instead of 205E6 then deflections would be so large that they could not be printed in the field width provided, thus resulting in a set of asterisks being displayed.

It will be clear from the foregoing, that creating hundreds of sets of test data for testing a model, using section properties ranging from say a 203 x 133 x 25 UB up to a 914 x 419 x 388 UB, the system must avoid testing some properties of one beam with those of another beam.

The following lines are taken from the parameter table for proforma calculation sc385.pro which is described in detail in section 10.6, where sd12,sb12,st12 is the serial depth, breadth & thickness respectively and L is the length of the member in metres, tri is the name of a procedure which is called to choose a suitable section designation.

PARAMETER Start End Type Dependency conditions No. name zst() zen() zty() and notes.

...

9 sd12 40 400 1 >L*1000/24 <L*1000/8 10 sb12 20 200 1 =sd12/2 say for RHS

11 st12 2 15 1 >sd12/66.667+1 <sd12/12+1 12 tri 3 72 1E40 Calls procedure tri.

...

Those engaged in using structural engineering design models, will know that for hot-finished rectangular hollow sections a 200x100x5 RHS is available but a 200x100x16 RHS is not available. We are trying to select a valid section designation, this we can do in two stages, firstly we choose a serial depth dependent on typical span/depth limits, then a serial breadth which for a stainless rectangular hollow section is taken as half of the depth, then a serial thickness which varies from serial depth/66.67+1 to serial depth/12+1. The addition of 1 mm to both these limits is to compensate for subsequent rounding down. It will be apparent that any section designation formed from the limits given in the above table, is unlikely to exist as the designation has been compiled from

practical size considerations; in consequence we need to use this estimate of the section to provide us with the best section match available in the required steel section tables.

Rather than trying to match the three components of the section designation, it is computationally more efficient to form a compound number from the estimated section designation and compare it with a list of compound numbers formed from available section designations. To form a compound number for a section designation, assuming the serial depth is parameter sd12, breadth is sb12 and thickness st12 we can form a variable thus: triad=sd12*1E6+sb12*1E3+st12 and compare the value of triad with the set of equivalent compound section designations which are available, colloquially rolled, selecting the nearest match, which then can be separated into its three components, thus providing an authentic section designation which will not be rejected by the model.

When the procedure tri is called, zp'=12 i.e. the current parameter is the twelfth in the above table and zva(12-3) i.e. zva(9) holds the estimated serial depth within the ranges 40 to 400 and also in the range >L*1000/24 and <L*1000/8 where L is the member length in metres, zva(10) holds an interpolated value for the serial breadth in the range 20 to 200 and of value =half the serial depth, zva(11) holds an interpolated value for the serial thickness in the range 2 to 15 and in the range >serial depth/66.667+1 to <serial depth/12+1. When tri is called, zen=zen(12)=72, thus rectangular hollow section designations tri(0) to tri(72) are assigned in the procedure tri below; the loop which follows, finds the nearest compound number holding the section designation which matches the trial value and separates out the authentic components into zva(9), zva(10)

& zva(11) which become the values describing the steel section which are included in the current set of data.

DEFINE tri ! Procedure for fixing triad preceding parameter zp'.

! +triad=zva(zp'-3)*10^6+zva(zp'-2)*10^3+zva(zp'-1) IF zen=58 ! Compound section designations for SHS.

! +tri(0)=VEC(0,40040002,40040003,50050002,50050003,50050004)

! +tri(6)=VEC(60060002,60060003,60060004,60060005,80080002)

! +tri(11)=VEC(80080003,80080004,80080005,100100003,100100004)

! +tri(16)=VEC(100100005,100100006,100100008,125125003,125125004)

! +tri(21)=VEC(125125005,125125006,125125008,150150003,150150004)

! +tri(26)=VEC(150150005,150150006,150150008,175175004,175175005)

! +tri(31)=VEC(175175006,175175008,175175010,200200004,200200005)

! +tri(36)=VEC(200200006,200200008,200200010,250250005,250250006)

! +tri(41)=VEC(250250008,250250010,250250012,300300005,300300006)

! +tri(46)=VEC(300300008,300300010,300300012,350350006,350350008)

! +tri(51)=VEC(350350010,350350012,350350015,400400006,400400008)

! +tri(56)=VEC(400400010,400400012,400400015) ENDIF

IF zen=72 ! Compound section designations for RHS.

! +tri(0)=VEC(0,50025001.5,50025002,60030002,60030003,80040002)

! +tri(6)=VEC(80040003,80040004,100050002,100050003,100050004)

UNTIL triad>trista AND triad<=triend OR i>=zen ENDREPEAT

Occasionally there is a requirement that a parameter p has to be the lesser (or greater) of two previously assigned parameters. In a program, this is straightforward; e.g. to assign the lessor of a & b to p, we would simply write: p=a ;IF b<a THEN p=b. When building the PARAMETER table, such programming logic can be included as described above for procedure tri. Although a procedure could be provided containing:

p=a

IF b<a THEN p=b

for such simple logic it is easy to avoid using a procedure. This may be achieved by devising one expression which replaces the above so that it can be used directly in the parameter table, and another similar expression which finds the larger of two values. A little bit of thought and the usage of SGN (Signum) will suffice where: SGN (signum) returns 1 if the argument is positive, -1 if negative, 0 if zero. For example: SGN(0.01) returns 1, SGN(-270) returns -1. The reader may confirm by substituting values for a and b that the:

minimum of a,b =b-SGN(SGN(b-a)+1)*(b-a) maximum of a,b =b-SGN(SGN(a-b)+1)*(b-a)

where SGN(SGN(b-a)+1) is a switch which evaluates to 1 when b>=a or 0 when b<a.

In the parameter table below, L takes the lesser of values a and b. Although, so far, it has not been found necessary to set a parameter to be the least (or greatest) of three parameters; by the use of L as a dummy parameter it can be done. Because L already holds the lesser of a and b, then p will hold the least of a, b & c.

PARAMETER

No. Name Start End Type Dependency conditions

2 b 2 19 0 'b' varies from two to nineteen 3 L 0 19 0 =b-SGN(SGN(b-a)+1)*(b-a)

4 c 2 16 0

5 p 0 19 0 =c-SGN(SGN(c-L)+1)*(c-L)

If the least of four values is required, then a second dummy parameter will be required.

The above is one example of the use of functions in the parameter table. Engineers enjoy devising such tools.

Summarising, it is possible to achieve considerable flexibility in the specification of dependency conditions, yet maintain the form of the parameter table. For procedures, such as the selection of serial sizes for structural steel components, a procedure may be called from the parameter table. To do this, the type of parameter is set to 1E40 to declare that the name given is the name of a procedure which has to be called. The current limit is 500 procedures which may be included in each parameter table. One program is used for generating sets of data for any model, working from the parameter table prepared by the engineer. This is preferable to writing a separate program for each of several hundred models and having to provide maintenance for each.

Praxis (1990) permits the assignment of a string of characters to a numerical variable, thus the engineer may write:

+a(i)= +$(j)

where $(j) contains any numerical expression. Assuming i=3 & j=20 and the string

$(20) contains: L-0.1, then for L=5; +a(3)=+$(20) would assign +a(3)=L-0.1=4.9. This may seem trivial but it is profound, for it is the assignment of a string which contains any numerical expression to a subscripted numerical variable which permits the same procedure to be used for checking the logic of hundreds of different calculations. The word any is apposite, note that the assignment +a(3)=$(20) would be faulted, the +$(20) first causes the substitution of the data held in the string $(20) and then carries out the assignment.

The probability of picking numbers at random, to provide say twenty numbers for the data, which results in a sensible output calculation, is on par with winning the national lottery. Just as Praxis (1990) has to be engineered, so does each set of test data.

Each calculation written in Praxis (1990) is both a model and a computer program, engineers like writing programs but experience has shown they do not like the considerable chore of testing their programs. Modern structural calculations which include stability calculations, are not simple, thus a system which can check proforma calculations and identify any bugs, is desirable. Experience has shown that thorough checking of a proforma calculation, does not always shake out the bugs - unless the logic is simple. As stated in section 3.11, the only way of extensively testing the pathways through a program is to provide many sets of data to do the switching between paths. This chapter has described how sets of engineered data may be produced for testing models.

Chapter

6

In document Verifying Engineering Calculation (Page 86-91)