{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
A journal on everything technological and everything to do with structure: from building structures, to organisation structures, politics, education, and business. If it has structure I will essay it, if it ought to have structure I will essay it. If it don't have structure and it is chaos, I essay that too!
Showing posts with label TechnicalDesign. Show all posts
Showing posts with label TechnicalDesign. Show all posts
Monday, September 14, 2015
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:
- Systems
- Installation
I am adding components to this to bring to three situations:
- Components
- systems
- 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.
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.
-o0o-
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:
- Repetitive Manufactured Structural Products
- Pre-Engineered Manufactured Structural Products
- Technical Praxis: The Art of getting things done
- Technical Praxis South Australia
- Technical Praxis Bridge to The People
- Technical Praxis: Technology, Evidence for Suitability of Purpose
Previous names:
Previous names:
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.
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.
Tuesday, December 31, 2013
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:
- South Australian Minsters Specification SA A2.2 Structural Engineering Software (2010)
- 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
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 |
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 |
| Main Menu for Loads |
| Joint Loads |
| Member Loads |
| Gravity Loads |
| Job Details |
| Control Data |
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.
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.}
| 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.}
Subscribe to:
Posts (Atom)





