Showing posts with label TechnicalDesign. Show all posts
Showing posts with label TechnicalDesign. Show all posts

Monday, September 14, 2015

Suppliers and technical information,including software

{Previously posted in LinkedIn group I created: Pre-Engineered manufactured structural Building products, and have since shut down. It having a membership of 30 people. Most of these people also in my group Pre-Engineered Manufactured Building Systems Group which has over 2000 members.}

Ramset potentially represents a good example of technical information which manufacturers and suppliers should make available.

First off, the technical information is available to designers, in the form of printed manuals, with possibly an option for software. These design aids are available to people who typically do not ever buy the manufacturers product, but these people do otherwise specify and recommend the use of the product.

Secondly software is available for download free of charge with or without a registration requirement.

Thirdly can speak to technical people for support and advise. Not just to salespeople who for many companies typically know zip about their product.

Smaller manufacturers of structural products tend to focus on glossy brochures and no technical specifications nor design manuals. Further software is limited and restricted to agents of the company, and only used by salespeople whilst talking to the customer. They have poor information for customers and poor information for certifying authorities.

This latter approach tends to result in a relatively cumbersome and hassled approach to product supply for all persons involved.

It largely stems from paying no attention to the design and development of the structural product and hoping that the majority of the time they can get city council approval with the barest minimum of information.

Australia's timber framing code AS1684 should be used as an example for documenting a building system, and I suggest Ramset information resources should be used as an example for documenting structural components.

And given these examples do have deficiencies, the aim should be to surpass not equal them.

There are far too many suppliers who have inadequate information resources to assist customers to make informed decisions before buying.


For that matter consultants also need to be clearer about what they do. Of course with everyone under pressure fighting "bushfires" as it were, being able to tackle these issues suffers

Refining some definitions and changed the name of the group

{Previously posted in LinkedIn group I created: Pre-Engineered manufactured structural Building products, and have since shut down. It having a membership of 30 people. Most of these people also in my group Pre-Engineered Manufactured Building Systems Group which has over 2000 members.}


Pre-Engineered manufactured structural Building products, is the term I have adopted to refer to objects which are designed once and then made and installed many times. But this raises issues of suitability. The Australian standard for scaffolding identifies 2 issues (from memory) as follows:

  1. Systems
  2. Installation
I am adding components to this to bring to three situations:

  1. Components
  2. systems
  3. Installations
Components may be assembles or single part objects. A bolt is a component but typically used as part of an assembly comprising: bolts, nut and washers long with the items being clamped. Similarly a balustrade comprises of posts and rails, these are components, the balustrade is a system, and a specific application on a specific building project is an installation.

Whilst components and systems may be suitable in their own right they may not be suitable for a specific application. A balustrade for example may be suitable for a residential application but unsuitable for a public installation subject to crowd loading. Similarly a kit for a sail-shade may be suitable for one wind environment and unsuitable for another. Now several such sail-shade kits used to construct a larger area sail-shade represents a building system.

In-order to use a sail-shade kit as a component of a larger structure, need adequate information about the structure to make assessment of its suitability.

The emphasis of this group is the design, or rather selection of structural building products that are supposed to be complete in their own right, no custom variations are permitted, but the products may be used as components in larger assemblies. (eg. structural sections are components, as are bolts)

What information and quality assurance is missing from the existing industry and what improvements are required?

A fixed size carport or garden shed is here considered a component, on condition that custom variations do not impose any structural changes. If want to install doors wider than the spacing of the frames, and have to remove columns to achieve, then no longer a finished product, it is now considered a building system and the specific building needs to be designed.

The garden shed as selection issues and installation issues to be resolved. Likewise the carport. Further more a carport attached to an existing building introduces requirements for assessing and strengthening of the existing structure. Which may be complicated by lack of information about the otherwise pre-engineered or proprietary building system: timber framing (AS1684) and cold-formed steel framing. The carport kit a component but the existing house a building system.

The issue for me is that the existence of these products doesn't remove the need for design or engineering assessment. Educated in mechanical and manufacturing I find the lack of quality in both design and manufacture in this sector of the building industry appalling. Production supposed to be moved off-site into a factory to improve quality not reduce it.

So more education and information required on manufactured buildings, and developing the industry that supplies.

-o0o-

A few weeks back was going to collapse back to one group to simplify where to put things, but discovered actually acquired some members, so change the name slightly instead. But not really any help to my thoughts. My perception been slightly distorted by concepts of PEMB/PMBS, and also the scaffolding code referring to systems and installations.

A product, is the end result of a production process, and usable in its own right. Thus a brick is a product, as is a structural steel section, and SIP's, and likewise a water tank and a garden shed.

The public typically doesn't want to waste time on design and engineering, and wants development approval and building permits to be issued as quickly as possible. They therefore go to manufacturers of sheds. But then start to introduce variations, imposing a need for custom design and engineering.

So have an industry that emerges based on selling a product, but otherwise is really selling a building system. However, given that I have a generic sense of product and process, the building system is also a product.

When I originally created the two groups, the idea was one be focused on cold-formed steel sheds and similar buildings, and this group here be for everything else. But there are too many generic issues across all the products and systems, that I don't want to repeat topics.

A SIP is a product in its own right, it may be used to construct a larger building assembly, which is also a product in its own right, or it may be included as a component in a building system.

The issue for this group is that the SIP is useless, and cannot become a part of larger assembly or building system, unless it has a proper technical specification. A stock standard building built from SIP's is also useless unless it has a proper technical specification. The technical specification is required in order to assess the suitability of the SIP for installation in some larger assembly. For the building a technical specification is required to assess the site specific and environmental parameters, along with actual building purpose and select an appropriate building fit-for-function.

So decided to return to original focus of structural products that are manufactured, also not overly concerned whether classed as building: since also relates to water tanks, scaffolding, industrial racking, bridges and multitude of other structures.

The issue is expect to buy off-the-shelf and put to use with no formal design input, no custom features are permitted which influence structural performance.

Apologies for any inconvenience, but this should be the last change for the name of this group.

Rationalising Some Social Networking

Recently deleted the following Linkedin Groups:
  1. Repetitive Manufactured Structural Products

  2. Previous names:
    • Pre-Engineered Manufactured Structural Products 

  3. Technical Praxis: The Art of getting things done

  4. Previous names:
    • Technical Praxis South Australia
    • Technical Praxis Bridge to The People
    • Technical Praxis: Technology, Evidence for Suitability of Purpose
Some of the posts I placed on these groups I will now post on my other blog: Metamorphs: Technical Praxis.

Whilst will otherwise put more focus on the remaining Linkedin group:

Also proposed to rename this group by removing the prefix, so that just called: engineered manufactured building systems. Whether I will keep this group, I'm not certain about at the moment, unlike the other two groups, it has developed a large membership, over 2500 members at present, whilst the other groups only had 30 and 1 member. However, my primary interest is informing buyers of such products and improving the information resources available to them from suppliers. So objective is to be able cover technical issues in a manner that the public will understand, rather than engineers. Though I do have an issue with the engineering supplied to manufacturers by consulting civil engineers: first their assessments are incomplete and not adequate for structures placed into the built environment at the rate of some 1000 units per year. Secondly the information resources they provide are not adequate to inform the suppliers and buyers. Unfortunately the consultants are partly handicapped by what the suppliers request and are willing to pay for.

I do not believe that professional associations or industry associations can solve the problems, as these organisations typically have agendas beyond the welfare of the community: such as legal reform so that they can grab monopolies. Monopolies are dangerous, they do not result in openness and sharing of knowledge, and thus a vast increase in the communities understanding. Rather such organisations create closed shops, and prevent sharing and in the long term result in loss of knowledge to the community: loss of knowledge both inside and outside the organisation. They seek monopoly because of desire to exercise power and authority over others, and use arguments about asymmetry of knowledge between suppliers and buyers, the contention is that through legislated monopoly for the profession they can protect the buyers. Its nonsense, licensing and registration schemes do not work when it comes to protecting the community. First the public need to be able to readily check the validity of license. But even if the license is valid, it does not mean the licensed individual or business is actually capable of performing the task required. Buyers need a more reliable system.

Consultants emerged to help protect buyers from builders, who whilst skilled in construction, may not be skilled in design and thus what they build may not be fit for purpose. Unfortunately there is no guarantee that the consultant is competent at design or as adequate knowledge of the established technologies. The controlling factor in all cases is knowledge and part of that knowledge is proper procedure and suitable bench marks.

Any case the point is that a blog or public forum may be far better for my needs than a Linkedin group. The problem with Linkedin is that even though the group can be publicly visible on the internet, the groups typically do not attract the public: that is the groups are better for business to business, rather than business to consumer. However, the suppliers are one of the stakeholders, so will see what I can do to more effectively use a blog and my Linked group, along with the other groups I belong to. Though a lot of the groups take objection to posting own blog posts in the group discussions.

Friday, December 06, 2013

Specifications Governing Structural Engineering Software Used by Non-Engineers

There are two documents controlling software for "structural engineering" software to be used by persons who are not structural engineer's these are:

  1. South Australian Minsters Specification SA A2.2 Structural Engineering Software (2010)
  2. Australian Building Codes Board (ABCB) : Protocol for Structural Software version 2011.1
Both documents seem to impose a lot of paper shuffling nonsense into the exercise, and seriously miss the point and purpose of much of the software. The software will ultimately be used by customers the end-users of the structures, currently the software is used largely by sales people. To consider training and certifying the customer, the ultimate end-user of the structure being checked is silly. The whole point of the software is to be based on input parameters which are within the comprehension and interests of the end-user, and the outputs of the software are equally to match the end-users interests.

The software has to translate the end-users needs into technical requirements compliant with codes of practice behind the scenes. Code requirements and constraints are not something the end-user needs to deal with nor are they interested in.

The regulatory wants and whims have to be dealt with separately. It is not software that needs to be dealt with, it is repetitively manufactured structural products which need to be properly specified which needs to be dealt with. These structural products can be parametrically varied with in limitations, however I contend it is not acceptable for the specification to be buried within software simply because the software can deal with the variations. A written specification is still required and it will form the basis of the software.

It is really annoying when a manufacturer wants engineering input for a variation beyond the limits of their software, and they have no information what so ever about their product other than a black box computer program they push numbers through. It then becomes necessary to experiment with the black box to see if can gleam any idea of how it makes its assessment, and whether or not agree with it. At least when the suppliers held standard calculations, could look at the calc's and quickly conclude the assessment was inadequate or  otherwise acceptable.

As one major problem with structural products is most consultants have no idea how the product can work. So they do calculations and conclude product not acceptable in the first place, so no way they can prove for the variation the manufacturer wants. One part of the problem is that standard products are based on testing, the other part of the problem however is that the original assessment by calculation is just plain incomplete. Now that incomplete assessment is getting hidden away and buried in proprietary software only available to manufacturers and their agents: not available to people who are responsible for granting regulatory approval to go ahead and build.

I don't however believe the solution to the problem involves generating large quantities of paperwork and signatures. The building industry just has not grasped QA versus QC. Quality cannot be inspected in, it has to be designed in. Similarly safety cannot be inspected in, it also has to be designed in. Design of the process doesn't involve creating a system which collects lots of signatures. Also a QA system accredited by a third party, is actually a QC system. If understand QA, then you do not have an accept or reject mentality, therefore getting accreditation or not by some supposed QA authority is contrary to QA philosophy.

Unfortunately the building regulator thought the idea was to get rid of inspections, and opened the door for non-compliance with approved documents. They have now put much of the inspection back, but they still missed the point. QC inspects at the end, and rejects the construction: and thus wastes time and materials. QA makes sure they get it right in the first place, and that requires an entirely different approach. 

Quality considered in terms of signal to noise ratio (S/N), the building industry is still focused on boosting the signal rather than filtering out the noise. Hence lots of paperwork generated.

Training people to do the work, is somewhat Procrustean, as it takes the approach of make the person fit the job, rather than design the job to fit the people. The software is meant to be for untrained people, therefore it has to be designed accordingly. So training users, getting them certified, maintaining registers, and keeping certifications up to date, is just plain nonsense. As an interim measure whilst the software is not appropriately designed for the skills of the actual end-users, then training may be necessary. But it shouldn't be a requirement.

Also the requirement that the software be authored by a structural engineer is unacceptable. For certain a structural engineer needs to contribute to the software, but they have far inadequate training to design and develop appropriate user interfaces and error checking systems for software. The structural engineers are partly responsible for the software being rubbish and giving rise to the two controlling documents. The structural engineers may have got the structural calculations behind the scenes right, but the software itself is poor in terms of its user interface's: both the input and the output.

No one seems to be paying all that much attention to the point and purpose of calculations or engineering. Its all reduced to : will you sign off on this, will you provide a certificate. The fundamental basis of our system is adequate evidence-of-suitability, and a mere signature cannot be defended during a coroners inquest.

The two controlling documents provide a good starting point and guidance, but some of the requirements are highly obstructive are going to cause a lot of problems, and are unnecessary.

Wednesday, December 04, 2013

On Developing Structural Analysis 2D Plane Frame Application

Back when we started, we didn't have any frame analysis software. First problem was knowing what was available and where to get it from: it wasn't like could just go down the street and buy from local computer store. Second problem was such software was too expensive.

Our business doesn't work on debt: taking out loans and hoping will get the business to repay the loan is risky: possibly crazy. Since we had time we invested time: a kind of sweat equity. Whilst hoping for a return on the investment of time,  there is no requirement financially, as there is no real debt. Sure economists may throw opportunity costs in the mix and say there is debt. That is it would be considered better to buy the tools and put them to use and start to make money from using the tools rather than expend time creating the tools. The answer to that however is that the only tools required are pencil/paper and a calculator. If can do the work starting with blank piece of paper, then possibly also able to start with a blank computer screen, if can program. Sure the tools develop oneself may not be as good as a bought one. Then again the bought ones may lack certain features. If buy software then constrained to what it does and the way it does it, and also have to wait for authors of the software to update the software to new codes of practice. Then there is a problem of whether the software remains in the market. One consultant had advantage in the cold-formed steel market because he had frame analysis software which designed to AS1538 permissible stress version of cold-formed steel code. Problem was, the company ceased to operate and the software was never updated to AS4600. The consultant had advantage because of what others could do, not because of what he could do.

My philosophy has always been we build those tools ourselves which are practical to build and directly related to what we do: the core activity of engineering design. Not going to waste time building massive complex integrated tools. However with the passage of time the tools which become practical to build in-house increases. It is all dependent on heritage, and building foundations for future development.

So we were only dealing with plane frames. My dad could analyse using moment distribution, I could have learnt such, but speed wise better to use Kleinlogel formula available in steel designers manual {I'm assuming current version has same as earlier versions. Also being mechanical my formal studies didn't go in depth into the analysis of rigid frames.}. So all up we didn't really need frame analysis software, but it would have made things easier and faster.

We had the book: Microcomputer Applications in Structural Engineering by W.H Mosley and W.J Spencer. This book contained several programs written in Basic. I had typed them all into the computer, whilst I was still studying. My dad took the plane frame program and translated into Turbo Pascal, and turned from a cumbersome command line program to one with a graphical interface. Whilst I was experimenting with Turbo C and menu systems, my dad experimented with Turbo Pascal. I opted for C as a programming language, as it was apparently to be the future for AutoCAD. My dad opted for Pascal because it was the language being used on the graduate diploma in computer science he studied. I did learn Pascal as, Turbo Pascal was the first compiler we got for the CPM/80 machine. It wasn't until a few years later when got an MS DOS machine that I got Turbo C.

At this point not releasing the program, as it has our business details hard coded into the reports. It is also proving difficult to recompile a MS DOS program in the windows command prompt as having memory problems. Something to do with the command prompt environment I'm guessing. Also the program doesn't run on my Windows 7 computer: though very little does as its 64 bit: its good at collecting dust. A few years back my dad did convert into vba to run in Excel, and about 2 years back I wrapped it into a vba class. But still looking to get it back into a stand alone application, possibly even a COM automation object, or what ever the equivalent for .net is. Unfortunately the benefits of adopting vb.net to take advantage of all the Excel/vba code I have written are not that apparent: as vb.net has some major differences compared to vba. Therefore looking at going back to Pascal, at the moment managed to rip out all the Turbo gadget graphics and create a console application using Borland Delphi. Given its no longer Borland product, considering adopting Lazarus and free Pascal. The problem I have with that approach is having to revise all my Delphi wind loading procedures from AS1170.2:1989 to AS1170.2:2011, or otherwise translate Excel/vba into Pascal. So may look at parallel developments to integrate everything together.

My current Excel/vba workbooks are using Kleinlogel formula in the worksheets and therefore restricted in the frame they can quickly assess. To change the frame more work required in the worksheet, and that makes it cumbersome to change from one frame to another. Having the frame analysis in vba behind the scenes still doesn't really improve the situation. It is currently being used for carport/canopy design in that manner for one carport supplier: that however has limited capabilities and a small amount of my code in it. Another workbook I have set up using more code and dialogue boxes keeps hitting Excel/vba memory limits. Therefore need to get the code out of Excel/vba. Also having worksheet formula creating a 20Mbyte Excel workbook and needing MS Excel to use that workbook, so as to do what a stand alone 250Kbyte program can do, is really inefficient use of computing resources. The industry keeps running around seeking spreadsheets, because they think that is the simple approach: but then they want greater flexibility in design options than is practical to implement by spreadsheet, and which is also kept within the capabilities of any salesperson.

Spreadsheets and in worksheet formulae are practical for all the dimension and load calculation's prior to using frame analysis software. Spreadsheets and worksheet formulae also practical for design members and connections after frame analysis. But frame analysis in the worksheet formulae is only practical for simple structures: like beams and very simple frames.

That's where the bottleneck emerges. Very simple structural analysis and design, can be completed quickly from a few parameters input to a spreadsheet. Increase the complexity and the integration is loss. Very little frame analysis software has facility to automatically generate the model: a full model that is. Most frame analysis software can generate dimension and geometry for some common structural forms. But the software doesn't calculate and assign the loads to the structural elements. The commercial frame analysis software can also check/design the members once the analysis is complete: depending on materials. Cold-formed steel is not a material commonly available as a design module with commercial software. Therefore have to check members independently, this posing another delay. Then there is the design of connections which also has to be external to the analysis software. The use of BIM can maybe streamline this process for custom buildings, but BIM is typically does not provide parametric modelling of common structural forms.

Just as Toyota aimed for single minute exchange of dies, to improve manufacturing productivity: design and engineering suppliers need also to be looking at single minute design, assessment and documentation, and for that matter even approval. That is, concept to approval in one minute. Not for all structures and buildings, just those which have common structural forms, and are extremely routine. Unfortunately the nail plated timber roof industry use of software through a spanner in the works. It is therefore necessary to avoid those problems, and that requires software which is not proprietary and locked to manufacturers of structures: at least some version of the software needs to available to the whole supply chain: which includes the certifying authorities. Any case I will ramble on more, about that at a later date.

For now here are some screen shots of the application I am breaking apart and converting over to windows.

Sample Data File viewed in UEStudio
Opening Screen
Main Menu
Open Data File
Analysis
Screen Plot Menu
Geometry

Design Actions

Action-Effect: Bending Moment

Action-Effect: Shear

Action-Effect: Axial Force

Action-Effect: Exaggerated Deflections
Which is typically the way I used the program, as I generated the data file using Quattro Pro, rather than using the user interface. For me the application would have been better if it provided a command line option to read data file and produce results file without need to use user interface. When moved from Quattro Pro to MS Excel, lost some of the benefits of the original QPro application, though gained other benefits and moved in other direction. So part of current task is resurrecting the QPro application and finally converting over to Excel/vba.

Any case the plane frame application did allow creating and editing data files, even had facility to print the screen plots to the printer: though locked to a specific printer. The data input screens are as follows.

Main Input Menu
Main Menu to define structure
Node Data
Member Connectivity
Supports
Materials
Sections
If I recollect, there is an error in the unit description for the section properties. Not a problem if know what is required in the data file. But a good reason not to release the program.

Main Menu for Loads
Joint Loads
Member Loads
Gravity Loads
Job Details
Control Data
Whilst the control data is the last menu item, it needs to be input first. That is a cumbersome aspect of the program. Part of the conversion from the original Basic source. The original program asked questions on the DOS command line, if got an input wrong then couldn't back track, had to cancel and start again. Part of the requirement being to set up the application environment.

Our Pascal version of the program however has dynamically allocated variables, and makes use of record structures and pointers. I think it also makes use of sparse matrices as well. It therefore should not be necessary to input the control data, as it should be able to work it out. Such data should thus also not be required in the data file. So rewriting the file input routines is another part of the current exercise, otherwise creating a new file format, possibly using XML, and a file translator for the older files.

So at the moment looks like parallel developments in Pascal, vb.net and Excel/vba, with possible experimenting with Java. When reach the point of having either a DLL or COM automation library, then should all converge and move over to a single programming environment. Each programming language has its own unique library of built-in functions which become an obstacle when move over to an another language and such functions are not available. It represents more programming before can move forward. Basically each programming language has a different heritage, and therefore different foundations on which to build.

So attempting to bring a collection of tools, developed on as needs basis, together as an integrated whole. Which they were a lot closer to being at the very beginning when we started, but for various reasons they diverged.

Sample Output:

Results File: Showing Definition of Structure

Results File: More definition of Structure

Results File: Applied Loads and Calculated Member Forces

Results File: Support Reactions

Results File: Moments in Span of Each Member part 1

Results File: Moments in Span of Each Member part 2



Related Posts:

Download Page for The Plane Frame Analysis Application

Tuesday, December 03, 2013

schTechLIB contents

A rough listing of Functions and Subroutines contained in the schTechLIB. The modules were all extracted using Excel vba CodeCleaner by AppsPro. Then FileLocator Pro regular expressions were used to find the functions and subroutines and report. Not all the parameters are listed as some function/subroutine headers span multiple lines, also some data was lost when the reports were imported into MS Excel and sorted. But its a start at documenting the content.

Buildings
Building000.bas
Function
IsCanopyStructure(StructuralForm As Integer) As Boolean
IsEnclosedBuildingStructure(StructuralForm As Integer) As Boolean
IsRoof(BuildingSurface As Integer) As Boolean
IsWall(BuildingSurface As Integer) As Boolean
IsWindWard(BuildingSurface As Integer, theta As Double) As Boolean
SurfaceStr(Surface As Integer) As String
Building001.bas
Function
IsAttachedCanopy(StructType As String) As Boolean
IsCanopy(StructType As String) As Boolean
IsDomestic(StructClass As String) As Boolean
IsGable(RoofType As String) As Boolean
IsHipped(RoofType As String) As Boolean
IsIndustrial(StructClass As String) As Boolean
IsRural(StructClass As String) As Boolean
IsShed(StructType As String) As Boolean
IsSkillion(RoofType As String) As Boolean
IsTroughed(RoofType As String) As Boolean
Design Actions
LimitStateConstants.bas
Sub
SetLimitStateTables()
LoadActions001.bas
Function
CalcLiveLoad(a As Double) As Double
MagnifyLoad(a As Double, k1 As Double, k2 As Double, k3 As Double, k4 As Double) As Double
StructuralLoading001.bas
Function
DistributedLoad(AreaLoad As Double, loadwidth As Double) As Double
TotalLoad(AreaLoad As Double, _
StructureLoads.bas
Sub
TStructureLoads_Init(xLoad As TStructureLoads)
Files
fmFileMngt.bas
Function
FileExists(SearchSpec As String) As Boolean
FirstFileFound(SearchSpec As String, fattr As Integer, foundname As String) As Boolean
NextFileFound(foundname As String) As Boolean
fmOpenFilesTEXT.bas
Function
fopen(fname As String, fmode As String) As Integer
Sub
fopenTXT(fp As Integer, fname As String, fmode As String)
Geometry
Geom3D03.bas
Sub
SetCoord(pt As TCoord, x1 As Double, y1 As Double, z1 As Double)
WriteCoord(fp As Integer, pt As TCoord)
Geom3D05.bas
Sub
SetDescr(node As TNode, descr1 As String)
SetNode(node As TNode, descr1 As String, x1 As Double, y1 As Double,
WriteNODE(fp As Integer, node As TNode)
Geom3D06.bas
Sub
SetEdge(n1x As Integer, n2x As Integer)
WriteEdge(fp As Integer)
Mathematics
xMathsAreaProperty.bas
Function
CircleArea(d As Double) As Double
RectangleArea(b As Double, h As Double) As Double
TriangleArea(b As Double, h As Double) As Double
xMathsExponentials.bas
Function
Log10(x As Double) As Double
LogN(x As Double, n As Double) As Double
Power(a As Double, x As Double) As Double
xMathsInterpolation.bas
Function
Calc_X(x1 As Double, y1 As Double, x2 As Double, y2 As Double, y As Double) As Double
Calc_Y(x1 As Double, y1 As Double, x2 As Double, y2 As Double, x As Double) As Double
Slope_M(x1 As Double, y1 As Double, x2 As Double, y2 As Double) As Double
YIntercept_C(x1 As Double, y1 As Double, x2 As Double, y2 As Double) As Double
xMathsNumbers.bas
Function
Ceil(x As Double) As Double
Floor(x As Double) As Double
Frac(x As Double) As Double
MaxValue(Recrds() As Double)
MinValue(Recrds() As Double)
Sub
dec(ByRef i As Integer)
inc(ByRef i As Integer)
MathTest1()
xMathsRightTriangle.bas
Function
Polar_Angle(x As Double, y As Double) As Double
Polar_Radius(x As Double, y As Double) As Double
RectCoord_x(r As Double, theta As Double) As Double
RectCoord_y(r As Double, theta As Double) As Double
RightTrig_Adj(Hyp_r As Double, Opp_y As Double) As Double
RightTrig_Cos(Hyp_r As Double, Adj_x As Double) As Double
RightTrig_Hyp(Adj_x As Double, Opp_y As Double) As Double
RightTrig_Opp(Hyp_r As Double, Adj_x As Double) As Double
RightTrig_Rise(Adj_x_Run As Double, theta As Double) As Double
RightTrig_Run(Opp_y_Rise As Double, theta As Double) As Double
RightTrig_Sin(Hyp_r As Double, Opp_y As Double) As Double
RightTrig_Tan(Adj_x As Double, Opp_y As Double) As Double
xMathsSortingSubs.bas
Sub
Sort(Recrds() As Double, Index() As Integer, n As Integer)
SwapDouble(Arg1 As Double, Arg2 As Double)
SwapInt(Arg1 As Integer, Arg2 As Integer)
xMathsTrigonometry.bas
Function
ArcCos(x As Double) As Double
ArcSin(x As Double) As Double
From_HMS(h As Double, m As Double, s As Double) As Double
From_HMS2(theta As Double) As Double
get1stQuadAngle(theta As Double) As Double
getRationalAngle(theta As Double) As Double
pi() As Double
To_HMS(theta As Double) As String
To_HMS2(theta As Double) As String
ToDegrees(x As Double) As Double
ToRadians(x As Double) As Double
Mechanics
BeamBM.bas
Function
BeamBM1(BM1 As Double, r1 As Double, w As Double, x As Double)
BeamCantilevers.bas
Function
BM_Cant1(w As Double, x As Double, L As Double) As Double
BeamFF1.bas
Function
BM_FF1(w As Double, x As Double, L As Double) As Double
def_FF1(w As Double, x As Double, L As Double, EI As Double) As Double
defMax_FF1(w As Double, L As Double, EI As Double) As Double
FEM_FF1(w As Double, L As Double) As Double
Ra_FF1(w As Double, L As Double) As Double
Rb_FF1(w As Double, L As Double) As Double
BeamFF2.bas
Function
BM_FF2(w As Double, x As Double, a As Double, b As Double, L As Double) As Double
FF2_Ra(w As Double, a As Double, b As Double, L As Double) As Double
FF2_Rb(w As Double, a As Double, b As Double, L As Double) As Double
Sub
TestFF2()
BeamOverHang.bas
Function
BM_Ohang(P As Double, x As Double, a As Double, b As Double) As Double
def_Ohang(P As Double, x1 As Double, a As Double, b As Double, EI As Double) As Double
BeamSS.bas
Function
eq_udl1(n As Integer, w() As Double, a() As Double, _
SS_Beam_BM(w As Double, L As Double, _
SS_Beam_BM2(w As Double, L As Double, _
SS_Beam_RA(w As Double, L As Double, _
SS_Beam_RA2(w As Double, L As Double, _
SS_Beam_RB(w As Double, L As Double, _
Sub
Beam3()
BeamSS1.bas
Function
BM_ss1(w As Double, x As Double, L As Double) As Double
def_ss1(w As Double, x As Double, L As Double, EI As Double) As Double
defMax_SS1(w As Double, L As Double, EI As Double) As Double
Ra_SS1(w As Double, L As Double) As Double
udl_ss1(BM As Double, L As Double) As Double
BeamSS2.bas
Function
BM_ss2(w As Double, x As Double, a As Double, b As Double, L As Double) As Double
BM_ss2c(w As Double, x As Double, a As Double, b As Double, c As Double) As Double
defMax_ss2(w As Double, _
R_ss2(w As Double, a As Double, b As Double, L As Double, ReactionNode As String) As Double
Sub
ss2(w As Double, a As Double, b As Double, L As Double, _
ss2c(w As Double, a As Double, b As Double, c As Double, _
BeamSS3.bas
Function
BM_ss3(w As Double, x As Double, L As Double, a As Double) As Double
def_ss3(w As Double, x As Double, a As Double, L As Double, EI As Double) As Double
Ra_SS3(w As Double, L As Double, a As Double) As Double
Rb_SS3(w As Double, L As Double, a As Double) As Double
Sub
ss3(w As Double, L As Double, a As Double, _
BeamSS9.bas
Function
BM_ss9(P As Double, x As Double, a As Double, L As Double) As Double
def_ss9(P As Double, x As Double, a As Double, L As Double, EI As Double) As Double
R_ss9(P As Double, a As Double, b As Double, L As Double, ReactionNode As String) As Double
BoltProp.bas
Function
AS4100_BoltShear(fuf As Double, kr As Double, _
AS4100_BoltTension(fuf As Double, A_s As Double) As Double
AS4100_BoltTension2(d As Double, P As Double, fuf As Double) As Double
MeanDiam(d As Double, P As Double) As Double
MeanDiam2(d As Double, P As Double) As Double
MinorDiam(d As Double, P As Double) As Double
PitchDiam(d As Double, P As Double) As Double
TensileArea(d As Double, P As Double) As Double
ENVMySystem.bas
Sub
SetMachine(ByRef fpathMtrl As String)
Mechanics1.bas
Function
getMomentCapacity(f As Double, z As Double) As Double
getRequiredSectionModulus(f As Double, BM As Double) As Double
RadiusGyration(i As Double, Area As Double)
SimpleStress(Force As Double, Area As Double) As Double
MechDesign010.bas
Function
DesignResistance(phi As Double, Kmod As Double, fo As Double, GeomSectProp As Double) As Double
FlexuralResistance(phi As Double, Kmod As Double, fy As Double, Ze As Double) As Double
KResultant(k() As Double) As Double
TensileResistance(phi As Double, Kmod As Double, fy As Double, Area As Double) As Double
Sub
TestMechDesign1()
MechDesign090.bas
Function
getFx(f As Double, theta As Double) As Double
getFy(f As Double, theta As Double) As Double
Resolve_Fx(Axial As Double, Shear As Double, beta As Double) As Double
Resolve_Fy(Axial As Double, Shear As Double, beta As Double) As Double
ProppedCantilevers.bas
Function
BM_PC1(w As Double, x As Double, L As Double) As Double
SectionProperties.bas
Function
Ixx_plate(b As Double, h As Double) As Double
Steel
SteelSection5.bas
Function
AS4100_get_bfo(Tf As Double, fy As Double) As Double
AS4100_get_Zc(z As Double, s As Double) As Double
AS4100_get_Ze(z As Double, s As Double, _
AS4100_get_Zn(z As Double, s As Double, lambda_s As Double, _
AS4100_get_Zs(z As Double, s As Double, _
AS4100_getAlpha_d(dp As Double, fy As Double, s As Double, _
AS4100_getAlpha_f(bfo As Double, Tf As Double, tw As Double, d1 As Double) As Double
AS4100_getAlpha_m(Mmax As Double, m2 As Double, M3 As Double, M4 As Double) As Double
AS4100_getAlpha_s(Ms As Double, Moa As Double) As Double
AS4100_getAlpha_v(tw As Double, dp As Double, fy As Double, s As Double, _
AS4100_getLambda_e(b As Double, t As Double, fy As Double, isCHS As Boolean) As Double
AS4100_getLambda_s(lambda_e1 As Double, lambda_e2 As Double, ByRef elem As Integer) As Double
AS4100_getLe(kt As Double, kl As Double, kr As Double, L As Double) As Double
AS4100_getMo(E As Double, G As Double, Iy As Double, J As Double, _
AS4100_getMs(fy As Double, Ze As Double) As Double
AS4100_getphiMb(phi As Double, alpha_m As Double, alpha_s As Double, Ms As Double) As Double
AS4100_getphiMs(phi As Double, fy As Double, Ze As Double) As Double
AS4100_getphiVv(phi As Double, Vv As Double) As Double
AS4100_getUnSymMo(E As Double, G As Double, Iy As Double, J As Double, _
AS4100_getVvm(Vv As Double, m As Double, phiMb As Double) As Double
SteelCFAllSections.bas
Function
get_Ae_AS4600(d As Double, Bf As Double, t As Double, _
get_Zex_AS4600(d As Double, Bf As Double, t As Double, _
SteelCFBoxSectionProp.bas
Function
get_BOX_Ae(d As Double, Bf As Double, t As Double, _
get_BOX_J(a As Double, b As Double, t1 As Double, t2 As Double) As Double
get_BOX_Zex(d As Double, Bf As Double, t As Double, _
Sub
BOX_checkWeb(d As Double, d1 As Double, ri As Double, t As Double, _
BOX_CompressionFlange(Bf As Double, ri As Double, t As Double, _
BOX_CornerFillet(d As Double, ri As Double, t As Double)
BOX_FullyEffective_Web(d As Double, ri As Double, t As Double, d1 As
BOX_TensionFlange(Bf As Double, d As Double, ri As Double, t As Doub
BOX_test()
BOXSection_Prop(d As Double, Bf As Double, t As Double, _
Calc_BOX_Zex(ns As Integer, t As Double, ycg As Double, Ixx As Doubl
SteelCFCSectionProp.bas
Function
get_Ae(d As Double, Bf As Double, t As Double, _
get_Zex(d As Double, Bf As Double, t As Double, _
Sub
AS4100_getVw(fy As Double, Ae As Double, isCHS As Boolean) As Double
AS4100_HasFullLateralRestraint(L As Double, Beta_m As Double, _
GetSlenderElement(lambda_e1 As Double, lambda_e2 As Double) As Integer
IsCompact(lambda_s As Double, lambda_sp As Double) As Boolean
IsNonCompact(lambda_s As Double, lambda_sp As Double, lambda_sy) As Boolean
IsSlender(lambda_s As Double, lambda_sy) As Boolean
IsTransverseStiffenedWebOk(t As Double, s As Double, d1 As Double, fy As Double) As Boolean
IsUnstiffenedWebOk(t As Double, d1 As Double, fy As Double) As Boolean
SteelSection6.bas
Function
AS4100_get_be(b As Double, lambda_ey As Double, lambda_e As Double, ElementType As Integer) As Double
AS4100_get_kf(Ae As Double, Ag As Double) As Double
AS4100_get_lambda_e(b As Double, t As Double, fy As Double, ElementType As Integer) As Double
AS4100_get_Le(ke As Double, L As Double) As Double
AS4100_get_Nc(alpha_c As Double, ns As Double)
AS4100_get_Ns(kf As Double, An As Double, fy As Double)
SteelSection633.bas
Function
AS4100_get_Alpha_a(lambda_n As Double) As Double
AS4100_get_Alpha_c(xi As Double, lambda As Double) As Double
AS4100_get_eta(lambda As Double) As Double
AS4100_get_lambda(lambda_n As Double, alpha_a As Double, alpha_b As Double) As Double
AS4100_get_lambda_n(le As Double, r As Double, kf As Double, fy As Double) As Double
AS4100_get_xi(lambda As Double, eta As Double) As Double
SteelSection7AxialTension.bas
Function
AS4100_getNt(Ag As Double, An As Double, _
SteelStructSections.bas
Function
ElementEffectiveWidth(SectionType As Integer, b As Double, _
getElasticityLimit(PlateElementType As Integer, _
getNumberOfEdgesSupported(SectElement As Integer, _
getPlasticityLimit(PlateElementType As Integer, _
getPlateElementType(SectionType As Integer) As Integer
getSectionDescrCode(code As Integer) As String
getSectionType(section As String)
getStressGradientState(SectElement As Integer, SectionType As Integer, axis As String) As Integer
isSectionCHS(section As String) As Boolean
isSectionRHS(section As String) As Boolean
isSectionSHS(section As String) As Boolean
isSectionUB(section As String) As Boolean
isSectionUC(section As String) As Boolean
Sub
LoadSectionCodes()
Strings
xstring.bas
Function
FmtAcadPath(fPath As String) As String
fnDir(fPath As String) As String
fnDrv(fPath As String) As String
fnExt(fPath As String) As String
fnmerge(fPath As String, drv As String, fdir As String, fname As String, fext As String) As String
fnName(fPath As String) As String
fnName2(fPath As String) As String
strchr(s As String, c As String) As Integer
StrLen(s As String) As Integer
StrLPad(s As String, lStr As Integer) As String
StrLPadc(s As String, lStr As Integer, c As String) As String
strlwr(s As String) As String
StrNset(s As String, ch As String, n As Integer) As String
StrRChr(s As String, c As String) As Integer
StrRPad(s As String, lStr As Integer) As String
StrRPadc(s As String, lStr As Integer, c As String) As String
strupr(s As String) As String
substr(s As String, sp As Integer, L As Integer) As String
Sub
fnsplit(fPath As String, drv As String, fdir As String, fname As Str
fnsplit2(fPath As String, drv As String, fdir As String, fname As St
xStrLib.bas
Function
isAlnum(ch As String) As Boolean
isAlpha(ch As String) As Boolean
isCntrl(ch As String) As Boolean
isDigit(ch As String) As Boolean
isLower(ch As String) As Boolean
isPrint(ch As String) As Boolean
isPunct(ch As String) As Boolean
isSpace(ch As String) As Boolean
isUpper(ch As String) As Boolean
xStrLib2.bas
Function
isNumber(s As String) As Boolean
Structure
Structure11.bas
Sub
ConnectMtrlDB(ByRef dbs As Database, ByRef tbl As Recordset)
DisplayMaterial(m As TStructMATERIAL)
DisplaySectProp(s As String)
DisplaySectProp2(m As TStructMEMBER)
getSectProp(tbl As Recordset, ByRef m As TStructMEMBER, s As String)
MyTest()
Timber
TimberDesign001.bas
Function
Get_G_41(lb As Double, Sc As Double, Eb As Double, Ec As Double, Ib As Double, Ic As Double) As Double
Get_G_42(lb As Double, Sc As Double, Eb As Double, Ec As Double, Ib As Double, Ic As Double) As Double
Get_G_43(lb As Double, Sc As Double, Eb As Double, Ec As Double, Ib As Double, Ic As Double) As Double
Flex_Capacity(fb As Double, Zx As Double) As Double
Get_Axial_FLR(db As Double) As Double
Get_Axial_k12(beff As Double, bact As Double, length As Double, Leff As Double, g13 As Double, rhoc As Double) As Double
Get_Flex_FLR(db As Double, bb As Double, rhob As Double) As Double
Get_Flex_k12(db As Double, bb As Double, Lay As Double, rhob As Double, resflng As String) As Double
Get_Iy_comp(Iy As Double, Aspar As Double, hz As Double) As Double
Get_k11(db As Double) As Double
Get_SpacedColumn_k12(g13 As Double, g28 As Double, Ac As Double, Ic As Double, Lc As Double, rhoc As Double) As Double
S1_Compression(db As Double, bb As Double, Lay As Double) As Double
S1_Continuous(db As Double, bb As Double, Lay As Double, resflng As String) As Double
S1_Tension(db As Double, bb As Double, Lay As Double) As Double
S1_TorsRest(db As Double, bb As Double, Lar As Double) As Double
5_SpacedColumn(g13 As Double, g28 As Double, Ac As Double, Ic As Double, Lc As Double) As Double
Strut_Capacity(fc As Double, ax As Double) As Double
Tie_Capacity(ft As Double, At As Double) As Double
TimberDesign002.bas
Function
Slenderness_S1(d As Double, b As Double, La As Double, _
Slenderness_S2(d As Double, b As Double, Lay As Double, DesignCase As Integer) As Double
Slenderness_S3(d As Double, _
Slenderness_S4(d As Double, b As Double, _
Stability_k12(rho_b As Double, s1 As Double) As Double
Stability_k12C(rho_c As Double, s As Double) As Double
Timber_Bearing(phi As Double, k1 As Double, k4 As Double, k6 As Double, _
Timber_k11(d As Double, DesignCase As Integer, V As Double) As Double
Timber_phiM(phi As Double, k1 As Double, _
Timber_phiNc(phi As Double, k1 As Double, k4 As Double, k6 As Double, _
Timber_phiNt(phi As Double, k1 As Double, k4 As Double, k6 As Double, _
Timber_phiV(phi As Double, k1 As Double, k4 As Double, k6 As Double, _
Timber_rho_b(E As Double, fb As Double, r As Double, _
Timber_rho_c(E As Double, fc As Double, r As Double, _
TimberDesign003.bas
Function
NailedJoint_phiMj(phi As Double, k1 As Double, k13 As Double, _
NailedJoint_phiNj(phi As Double, k1 As Double, k13 As Double, _
NailedJoint_phiNjaxial(phi As Double, k13 As Double, _
TimberDesign004.bas
Function
ScrewedJoint_phiNj(phi As Double, k1 As Double, k13 As Double, _
ScrewedJoint_phiNjaxial(phi As Double, k13 As Double, _
TimberDesign005.bas
Function
BoltedJoint_phiNj(phi As Double, k1 As Double, _
BoltedJoint_phiNjaxial(phi As Double, _
get_Qkl(fcj As Double, t As Double, d As Double, JointGroup As String) As Double
get_Qkp(fpj As Double, t As Double, d As Double, JointGroup As String) As Double
Hankinson_Qsk(Qskl As Double, Qskp As Double, theta As Double) As Double
Timber_beff(t1 As Double, t2 As Double, DesignCase As Integer) As Double
TimberDesign006.bas
Function
Timber_k17(Nrows As Double, isSeasoned As Boolean) As Double
Timber_k17Bolts(Nrows As Double, isSeasoned As Boolean, _
Wind Actions
Fabric1.bas
Function
eqLCp(k As Double, Cpe As Double, Cpi As Double, L As Double, b As Double, _
LoadActionsWind001.bas
Function
FindHght(HghtTbl As Variant, MinHght As Double, MaxHght As Double, hght As Double) As Integer
FindTC(TCat As Double) As Integer
get_b(theta As Double, BldSpan As Double, BldLen As Double) As Double
get_d(theta As Double, BldSpan As Double, BldLen As Double) As Double
Get_Dist_a(ht As Double, BldSpan As Double, BldLen As Double) As Double
get_h(theta As Double, alpha As Double, He As Double, ht As Double) As Double
Get_Ka(Trib_Area As Double) As Double
get_Qz(V As Double) As Double
get_Vp(Rgn As String) As Double
get_Vs(Rgn As String) As Double
get_Vu(Rgn As String) As Double
get_Vz(V As Double, Mzcat As Double, Ms As Double, Mt As Double, Mi As Double, Md As Double, state As Integer) As Double
getDistToLoad(dwe As Double, h As Double) As Double
getMzcat(ByVal WindRegion As String, ByVal hght As Double, ByVal TCat As Double, ByVal Interpolate As Boolean) As Double
getPressureLimit(Limit As Integer) As String
getRgnMzCat(MzcatTbl As Variant, HghtTbl As Variant, MinHght As Double, MaxHght As Double, hght As Double, TCat As Double, Interpolate As Boolean) As Double
LmtState_ndx(LmtState As String) As Integer
Region_ndx(Rgn As String) As Integer
TCatStr(TCat As Double) As String
TCatVal(TCatStr As String) As Double
LoadActionsWind002.bas
Function
getMaxInSector(dataList As Range, sectorStart As Double, sectorEnd As Double, row_index_num As Integer, alternateValue As Double) As Double
LoadActionsWindBuilding.bas
Function
getBuildingCpe(theta As Double, alpha As Double, He As Double, ht As Double, _
getBuildingKa(theta As Double, TAreaRafter As Double, TAreaColumn As Double, IsWall As Boolean) As Double
getRoofCpe(theta1 As Double, alpha As Double, He As Double, ht As Double, _
getWallCpe(theta1 As Double, alpha As Double, He As Double, ht As Double, _
LoadActionsWindBuilding000.bas
Function
Find_HDRatio(h As Double, d As Double, Limit As Integer) As Integer
FindAlpha(alpha As Double, Limit As Integer) As Integer
FindAlpha2(alpha As Double) As Integer
Get_Cpe_D(theta As Double, alpha As Double, He As Double, _
Get_Cpe_L(theta As Double, alpha As Double, He As Double, ht As Double, BldSpan As Double, BldLen As Double) As Double
Get_Cpe_S(theta As Double, alpha As Double, He As Double, ht As Double, dwe As Double) As Double
Get_Cpe_U(theta1 As Double, alpha As Double, He As Double, ht As Double, _
Get_Cpe_UD(theta As Double, alpha As Double, He As Double, ht As Double, _
Get_Cpe_W(h As Double) As Double
LoadActionsWindBuilding1.bas
Function
BuildingCpeRoof(theta As Double, alpha As Double, _
LoadActionsWindCanopies000.bas
Function
CanopyCp(theta As Double, alpha As Double, h As Double, d As Double, _
LoadActionsWindCanopies001.bas
Function
get_Cpl(theta As Double, alpha As Double, h As Double, d As Double, _
get_Cpn3(theta As Double, alpha As Double, h As Double, d As Double, _
get_Cpw(theta As Double, alpha As Double, h As Double, d As Double, _
getCanopy_Cpn(theta As Double, alpha As Double, h As Double, d As Double, _
LoadActionsWindCanopies002.bas
Function
get_Cpn(theta As Double, h As Double, hc As Double, wc As Double, Limit As Integer) As Double
get_Cpn1(theta As Double, h As Double, hc As Double, wc As Double, Limit As Integer) As Double
get_Cpn2(theta As Double, h As Double, hc As Double, wc As Double, Limit As Integer) As Double
LoadActionsWindCanopies003.bas
Function
get_Cpl2(theta As Double, alpha As Double, h As Double, d As Double, state As Integer, Limit As Integer) As Double
get_Cpw2(theta As Double, alpha As Double, h As Double, d As Double, state As Integer, Limit As Integer) As Double
getPitchedCanopy_Cp(theta As Double, alpha As Double, h As Double, d As Double, _
LoadActionsWindDistributedLoads.bas
Sub
DisplayUDLtable(ndx() As Integer, dwe() As Double, Cp() As Double, a
InitialiseUDL(ndx() As Integer, w() As Double, a() As Double, b() As
SetDwe(He As Double, halfwdth As Double, BldSpan As Double, dwe() As
LoadActionsWindDistribution2.bas
Sub
SteppedLoadst0(alpha As Double, He As Double, _
Calc_Zex(ns As Integer, t As Double, ycg As Double, Ixx As Double, Z
checkWeb(d As Double, d1 As Double, ri As Double, t As Double, _
CompressionFlange(Bf As Double, ri As Double, t As Double, _
CompressionLip(dL As Double, ri As Double, t As Double, _
CornerFillet(d As Double, ri As Double, t As Double)
CSection_Prop(d As Double, Bf As Double, t As Double, _
FullyEffective_Web(d As Double, ri As Double, t As Double, d1 As Dou
ReducedCompressionLip(ri As Double, t As Double, ds As Double)
TensionFlange(Bf As Double, d As Double, ri As Double, t As Double)
TensionLip(d As Double, dL As Double, ri As Double, t As Double)
test()
SteelCFDesign.bas
Function
AS4600_Msxf(SectionName As String, _
AS4600_Ne(E As Double, SectionName As String, _
AS4600_phiMb(E As Double, G As Double, SectionName As String, _
AS4600_phiMs(E As Double, SectionName As String, _
AS4600_phiNc(E As Double, G As Double, SectionName As String, _
AS4600_phiNs(E As Double, G As Double, SectionName As String, _
AS4600_phiNt(SectionName As String, phi As Double, _
Sub
getBuiltUpSectProp(tbl As Recordset, ByRef m As TStructMEMBER, s As
LoadActionsWindDrag.bas
Function
Drag_Cfig(L As Double, b As Double, Kar As Double, _
getWind_Kar(L As Double, b As Double) As Double
LoadActionsWindEquivUDL.bas
Function
equivUDL0(alpha As Double, He As Double, _
equivUDL0m(alpha As Double, He As Double, _
LoadActionsWindEquivWind1.bas
Function
EquivUDL90(alpha As Double, He As Double, ht As Double, _
getDistToLoad(dwe As Double, h As Double) As Double
Sub
EquivUDL90test()
LoadActionsWindSkillion.bas
Function
equivUDL0m2(theta As Double, alpha As Double, He As Double, _
LoadActionsWindTable00.bas
Sub
SetWindTables00()
LoadActionsWindTable01.bas
Sub
SetWindSpeedTables()
LoadActionsWindTable02.bas
Sub
SetWindDirectionTables()
LoadActionsWindTable03.bas
Function
CalcV_SiteBeta(Vr As Double, Mzcat As Double, Ms As Double, _
get_Md(Rgn As String, directn As String) As Double
get_Vregional(Rgn As String, ReturnPeriod As Double) As Double
getDirectnIndex(directn As String) As Integer
getReturnPeriod(LimitState As Integer, ImportanceLevel As Integer) As Double
getRgnIndex(Rgn As String) As Integer
getV_theta(theta As Double)
HlookupG(WrkBk As String, Sht As String, DtaLst As String, _
Sub
set_Md()
LoadActionsWindTable04.bas
Sub
LoadTable2()
LoadTables1()
WriteTable2()
Function
IsMemberStableEnough() As Boolean
IsMemberStrongEnough() As Boolean
IsSectionStableEnough() As Boolean
IsSectionStrongEnough(N_star As Double, phiNc As Double) As Boolean
Cold-Formed Steel
SteelCFDesign3.bas
Function
getDesignSection(BM As Double, Lex As Double, Ley As Double, Lez As Double, _
SteelCFLippedIBeam.bas
Function
get_LippedIBeam_Iw(Iy As Double, a As Double, _
SteelCFSect2.bas
Function
AS4600_ka(dL As Double, b As Double) As Double
effectiveWidth(b As Double, rho As Double, chi As Double, _
get_be(b As Double, lambda As Double, rho As Double) As Double
get_C2(I_s As Double, Ia As Double) As Double
get_ds(dse As Double, C2 As Double) As Double
get_Ia(b As Double, t As Double, ku As Double, s As Double) As Double
get_k_EdgeStiffened(b As Double, t As Double, s As Double, ka As Double, C2 As Double) As Double
get_k_unStiffened(chi As Double) As Double
get_lambda(k As Double, b As Double, t As Double, f As Double, E As Double) As Double
get_Rho(lambda As Double) As Double
get_S(E As Double, f As Double) As Double
PlateBucklingCoeff_k(b As Double, chi As Double, _
Sub
EdgeStiffenedElement(b As Double, t As Double, dL As Double, _
SteelCFSect3.bas
Function
get_Fo(E As Double, le As Double, r As Double) As Double
get_Foz(E As Double, G As Double, J As Double, Iw As Double, Lez As Double, a As Double, r01 As Double) As Double
get_Le(L As Double, ke As Double) As Double
get_ro1(rx As Double, ry As Double, xo As Double, yo As Double) As Double
get_SR(le As Double, k As Double) As Double
SteelCFSect3AxialCompression.bas
Function
Euler_Pcr(c As Double, E As Double, i As Double, L As Double) As Double
get_Beta(xo As Double, r01 As Double) As Double
get_fc(Mc As Double, Zx As Double) As Double
get_fn(lambda_c As Double, fy As Double) As Double
get_foc(E As Double, le As Double, r As Double) As Double
get_foc2(foz As Double, fox As Double) As Double
get_foc3(beta As Double, foz As Double, fox As Double) As Double
get_lambda_c(fy As Double, foc As Double) As Double
get_MINfoc(fox As Double, foy As Double, foc3 As Double) As Double
get_Nc(Ae As Double, fn As Double) As Double
get_Ns(Ae As Double, fy As Double) As Double
get_phiNc(E As Double, G As Double, fy As Double, _
get_phiNd(phi As Double, ns As Double, nc As Double) As Double
get_phiNs(E As Double, G As Double, fy As Double, _
SteelCFSect3AxialTension.bas
Function
get_Nt(Ag As Double, fy As Double, fu As Double, An As Double, kt As Double) As Double
SteelCFSect3Bending.bas
Function
get_Cb(Mmax As Double, M3 As Double, M4 As Double, M5 As Double) As Double
get_Cm(m1 As Double, m2 As Double) As Double
get_lambda_b(My As Double, Mo As Double) As Double
get_Mb(Zc As Double, Mc As Double, Zf As Double) As Double
get_Mc(lambda_b As Double, My As Double) As Double
get_Mc_CZ(lambda_b As Double, My As Double) As Double
get_Mo(cb As Double, a As Double, r01 As Double, foy As Double, foz As Double) As Double
get_Mo_for_CZ(E As Double, Cm As Double, Iy As Double, Iw As Double, L As Double) As Double
get_Mo_for_psZs(E As Double, cb As Double, d As Double, Iyc As Double, L As Double) As Double
get_Mo1(Cs As Double, Cm As Double, a As Double, r01 As Double, Beta_y As Double, fox As Double, foz As Double) As Double
get_Ms(Ze As Double, fy As Double) As Double
get_My(Zf As Double, fy As Double) As Double
get_phiMb(E As Double, G As Double, fy As Double, _
get_phiMs(d As Double, Bf As Double, t As Double, _
getMb( _
SteelCFSect3Combined.bas
Function
get_alpha_nx(n As Double, Ne As Double) As Double
SteelCFSect3Webs.bas
Function
getBearing(fy As Double, d1 As Double, tw As Double, ri As Double, _
getC2(ri As Double, tw As Double) As Double
getC4(ri As Double, t As Double) As Double
getC5(k As Double) As Double
getC7(d1 As Double, tw As Double) As Double
getC8(d1 As Double, tw As Double, k As Double) As Double
getShear(E As Double, fy As Double, d1 As Double, tw As Double, a As Double) As Double
IsBendingShearOk(m As Double, Mcap As Double, V As Double, Vcap As Double, AsTransverseStiffeners As Boolean) As Boolean
SteelCFSect5Connections1.bas
Function
AS4600_BoltBearing(fy As Double, fu As Double, df As Double, _
AS4600_BoltTearOut(fy As Double, fu As Double, _
AS4600_NetSectionTension(fy As Double, fu As Double, df As Double, _
getEdgeDist(edgeDist As Double, df As Double, isForHoles As Boolean)
SteelCFSect5Connections2.bas
Function
AS4600_NetSectionTensionScrews(fy As Double, fu As Double, df As Double, _
AS4600_ScrewTension(fu1 As Double, fu2 As Double, df As Double, dw As Double, _
AS4600_ScrewTiltingBearing(fu1 As Double, fu2 As Double, df As Double, _
SteelCFUnLippedChannel.bas
Function
get_CHANNEL_Zex(d As Double, Bf As Double, t As Double, _
Database
xdbUtility2013.bas
Function
MtrlDB()
Debugging
DBGCleaner.bas
Sub
CleanUP()
DBGGeneral.bas
Sub
DisplayAbout()
SayNotYet()
DBGLogger.bas
Sub
CloseLogFile()
SetLogFile(fn As String)
DBGScreenTracer.bas
Sub
TraceFunction(s As String, state As Integer, FuncLevel As Integer, i
DBGScreenTracer1.bas
Sub
TraceFunction(s As String, state As Integer, FuncLevel As Integer, i
DBGTracer.bas
Sub
CloseTraceFile()
SetMytracer(state As Boolean)
SetMyTracerOFF()
SetMyTracerON()
SetTraceFile()
DBGTracerWorkBook.bas
Sub
IncTracerCol()
IncTracerCounters()
IncTracerRow()
SetTraceWrkBk(TracerNewBook As Boolean)
WriteCellTracer(r As Integer, c As Integer, V As Variant)
WritelnTracer(V As Variant)
WriteVarTracer(s As String, V As Variant)
WriteVarUnitsTracer(s As String, V As Variant, u As String)


NB: Some of the functions replicate those which are available in MS Excel but not available in vba. Since I want my vba code portal between MS Excel and MS Access and any other applications I may use, without having to use the Excel Application object to call worksheet functions, I have written the code in vba. I also recently read a few blogs and forum discussions indicating that calling the Excel worksheet functions in vba may be slower than writing a vba routine: depending on what you intend on doing.

Revised: Slightly improved by bringing data into MS Access, sorting, creating a grouped report then exporting to html. Unfortunately it exported to multiple pages, when I combined all the html file's it got slightly scrambled. I otherwise formatted some of the cells using Visual Studio 2005. {Yeh! I know, I ain't up to date with any software.}