In the most recent update to the load combination generator, we have simplified the inner workings of the module and added the following functionality:
- Load combination generation is defined by a single .json file (Schema) for each standard.
- Load groups and combinations can be created without having to assign loads first in the S3D modelling space.
- Patterns, which are based on old the “Expand Wind Loads” Το σχήμα λυγισμού της κατασκευής σχεδιάζεται και θα εμφανιστεί ένα αναδυόμενο παράθυρο που θα σας ενημερώσει για τον συντελεστή φορτίου λυγισμού, τώρα δουλεύετε με οποιεσδήποτε θήκες φορτίου.
Ονοματολογία
Στην τελευταία έκδοση της γεννήτριας συνδυασμού φορτίου, το όνομα φόρτωσης που χρησιμοποιήθηκε για πολλά πράγματα:
- Λειτουργήστε ως μοναδικό αναγνωριστικό.
- Διαφοροποίηση μεταξύ φορτίου σούπερ θήκη και θήκη φόρτωσης, και απαιτούν πάντα μία τιμή σε καθένα (που οδηγεί σε παράξενα όπως Νεκρός: νεκρός).
- Παραμείνετε αναγνώσιμος από τον άνθρωπο, όλο αυτό το διάστημα παραμένει αρκετά μικρό για αναπτυσσόμενα μενού με σύναψη λέξεων (Ζω: Q-dist-roof-δάπεδο).
Στην πιο πρόσφατη ενημέρωση, we have divided load case names into σύμβολα, το οποίο θα είναι μικρό για να χρησιμοποιείται για κωδικοποίηση και όταν ο χώρος είναι περιορισμένος (when naming the load combinations for example: 1.25Δ1 + 1.5ο + 1.5Ld + 0.5Σλ + 0.5Τ), και labels, which will aim to be very descriptive. Και τα δυο σύμβολα και labels will have to be unique within a given standard. We will also allow φορτία to be named the same as the load σούπερ θήκη, usually for the default load case (most commonly used). The two examples used above would be split like this:
{“D”: “Dead”}
{“Ldr”: “Live - Concentrated, Roofs, Floor”}
ο symbol must be composed minimally of one uppercase letter, which defines the super case. ο σούπερ θήκη is a new concept, used to group similar load cases that usually act together. ο σούπερ θήκη Η ετικέτα δίνεται στην αρχή της ετικέτας της θήκης φόρτωσης (πριν την παύλα). Στο παραπάνω παράδειγμα (Ευρωκώδικας) η θήκη φορτίου Ldr θα ήταν μέρος της υπερθήκης L (ονομάζεται Live στην ετικέτα), παράλληλα με άλλες θήκες όπως το Ldd και το Ldo. Στα παρασκήνια, ο σούπερ θήκη χρησιμοποιείται κυρίως για την επιβολή των κανόνων φιλτραρίσματος, δηλαδή για τον προσδιορισμό ποιες σειρές σχήματος πρέπει να διατηρηθούν και ποιες πρέπει να αφαιρεθούν.

Το πρώτο μέρος της ετικέτας (πριν την παύλα) είναι το όνομα του σούπερ θήκη. Το δεύτερο μέρος είναι μια περιγραφή, χρησιμοποιώντας κόμματα για τον διαχωρισμό των κατηγοριών από τις υποκατηγορίες. Το δεύτερο μέρος είναι προαιρετικό, but only one load case can take the default σούπερ θήκη spot.
Standard Schemas rows
Each standard has a schema which completely defines all of the possible load combinations for this standard. ο Schema.json file is quite straightforward, but it can become quite long, especially in standards (like Eurocode) that require a multitude of permutations. To take a simple example, take the following example requirement.
1.2*ρε + 1.5*μεγάλο + (0.5*S or 0.5*W or 0.5*T)
To convert this into our schema, we need to break it down into each possible permutation:
1.2*ρε + 1.5*L 1.2*D + 1.5*μεγάλο + 0.5*S 1.2*D + 1.5*μεγάλο + 0.5*W 1.2*D + 1.5*μεγάλο + 0.5*T 1.2*D + 1.5*μεγάλο + 0.5*μικρό + 0.5*W 1.2*D + 1.5*μεγάλο + 0.5*Δ + 0.5*T 1.2*D + 1.5*μεγάλο + 0.5*Τ + 0.5*S 1.2*D + 1.5*μεγάλο + 0.5*μικρό + 0.5*Δ + 0.5*Τ
Once every load combination is listed out in this manner, you can build the schema by following these steps:
- Use each load case key and coefficient to create a schema row object.
- Name each row with a unique identifier (since this is going to be an object). The convention is to use dashes to separate different elements of the name.
- One level up, group the rows into criteria (δύναμη, λειτουργικότητα, accidental, και τα λοιπά.)
The end result should look something like this:
"σειρές": {
"δύναμη":{
"A-1-u": {"ρε": 1.40},
"A-2a-u":{"ρε": 1.25, "μεγάλο": 1.50, "Ls": 1.50},
"A-2b-u":{"ρε": 1.25, "μεγάλο": 1.50, "Ls": 1.50, "μικρό": 1.00},
"A-2c-u":{"ρε": 1.25, "μικρό": 1.50, "Δ": 0.40},
"A-3a-u":{"ρε": 1.25, "μικρό": 1.50}
}
}
Load Combination generation algorithm
The algorithm goes through several steps to generate the final load combination object:
- ο schema as defined above is needed. It will be passed to the main load combination generation function.
- An object is created to group the number of φορτία με pattern. Για παράδειγμα, let’s look into a request for the load cases below:
2 Dead load case, with a merge pattern 4 Wind load cases, with an individual pattern 1 Snow load cases, with an individual pattern 2 Dead load cases, with a merge pattern
Grouping the μοτίβα με θήκη φόρτωσης will give the following object, which will be passed to the main load combination generation function.
input_by_case =
{
"ρε": {"συγχώνευση": [2, 2], "άτομο": []},
"Δ": {"συγχώνευση": [], "άτομο": [4]},
"μικρό": {"συγχώνευση": [], "άτομο": [1]}
}
- The last two arguments are filtering objects, which allow for filtering by criteria or by schema key.
- Once it has all of the required arguments, the main load combination generation function is called. This function goes through multiple nested loops to generate every required combination, which are explained in the following bullet points, and illustrated in the subsequent figure.
- At the highest level, it loops through the schema rows. Each row is checked to see if it should be kept or skipped at this step, using the filtering objects and specific logic that is described in the section below.
- Nested into the first loop is a second one, which loops through each requested θήκη φόρτωσης in the schema row. If the requested θήκη φόρτωσης also exists the schema row (requests are summarized in the input_by_case object), then we proceed to the next level.
- Nested into the second loop is a third one, which loops through each possible pattern to see if there are load groups to generate within them, and runs the function to name and generate them when they do.
- Once all load cases in the schema row have been generated and named, they are recombined (alongside their coefficients) into one or multiple load combinations.

- This process is repeated for each row of the schema, pushing all of the generated load combinations into the final load combination object.
It is worth nothing that all of the logic related to patterns is happening while inside a single schema row. Knowing this is important to understanding the behavior of patterns. The merge pattern, για παράδειγμα, does not allow merging anything other than the load case it is assigned to. This means that you cannot:
- Merge different load cases together, like trying to merge D1 and L1 load groups.
- Merge identical load cases on different rows of the input table. Για παράδειγμα, in the example given in point #2 πάνω από, we are asked to generate 2 dead loads using the merge pattern on two separate rows. The end result combinations would then look like to something like this:
1.2*Δ1 + 1.2*D2 + 1.5*μεγάλο 1.2*D3 + 1.2*D4 + 1.5*μεγάλο 1.2*Δ1 + 1.2*D2 + 1.5*μεγάλο + 0.5*μικρό 1.2*D3 + 1.2*D4 + 1.5*μεγάλο + 0.5*μικρό 1.2*Δ1 + 1.2*D2 + 1.5*μεγάλο + 0.5*Δ 1.2*D3 + 1.2*D4 + 1.5*μεγάλο + 0.5*Τ
Auto filtering unnecessary load combinations
While the above algorithm is functional without any filtering, it can lead to redundant load combinations, which leads to extra computing time and redundant results. Take the following load combinations:
1.2*ρε + 1.5*L 1.2*D + 1.5*μεγάλο + 0.5*S 1.2*D + 1.5*μεγάλο + 0.5*W 1.2*D + 1.5*μεγάλο + 0.5*Τ
If we have a single dead load case, these four load combinations will result in identical load combinations:
1.2*D
1.2*D
1.2*D
1.2*D
To avoid this situation, four rules are used which each contain some slight exceptions. Πρώτα, let’s have a look at the rules. The default state is for the combination to be kept and the rules are used to determine which to exclude.
Filtering by criteria
This case is pretty self-explanatory. Εάν το criteria is not requested, all schema rows associated with that criteria are discarded.
Φιλτράρισμα κατά χαρακτήρες στο κλειδί σχήματος
Τα κλειδιά σχήματος είναι συνήθως δείκτες διαχωρισμένοι με κόμματα στην αρχική αναφορά. Για παράδειγμα, στο παράδειγμα NBCC παρακάτω, το κλειδί έχει τρία στοιχεία:
- ΕΝΑ: Ο πρώτος όρος είναι συνήθως η κύρια αναφορά, ανατρέξτε στον πίνακα στον οποίο λαμβάνεται αυτό το μέρος των φορτίων.
- 2σι: Ο δεύτερος όρος είναι συνήθως ένα μοναδικό αναγνωριστικό για τον συνδυασμό φορτίου μέσα στον πίνακα.
- εσύ: Ο τρίτος όρος συνήθως δεσμεύεται για να υποδεικνύει πότε ένας μεγάλος αριθμός συνδυασμών φορτίου μετατίθεται με μια μικρή τροποποίηση. Για παράδειγμα, it can indicate if the dead loads in the load combination are favorable ( φά ) or unfavorable ( εσύ ).
{
"δύναμη":{
"A-2b-u":{"ρε": 1.25, "μεγάλο": 1.50, "Ls": 1.50, "μικρό": 1.00},
}
}
Filtering in the schema key can be done for any of these terms. Για παράδειγμα, if we want to filter by the third term, we can add the following filter, which will create a filtering dropdown for this term:
"name_filters": { "Δύναμη": { "Νεκρό φορτίο": { "θέση": 2, "tooltip": "", "items": { "Favorable": "φά", "Unfavorable": "εσύ" }, "defaults": ["Favorable", "Unfavorable"] } } }
All of the possible dropdown names and associated terms must be listed under “items”. Only the schema rows with matching symbols will be kept. If it is required to keep a schema row independently of what is entered in the filter, the term can be left blank. Any schema key that does not contain all of the matching dropdown terms will be discarded.
Redundant combinations
If a schema row is not filtered out by the first two steps, it moves on to step number three. Σε αυτό το βήμα, the redundancy issue from the above example is addressed. Για να το κάνω αυτό, we need to look at two objects simultaneously, schema row and the sorted input_by_case object (see description above), which describes which load cases have been requested. If the schema row contains any super case which the input_by_case object does not, the load combination is removed. Take, για παράδειγμα, the following schema row:
"A-2a-u":{"ρε": 1.25, "μεγάλο": 1.50, "μικρό": 1.50}
and the following input_by_case object:
input_by_case =
{
"ρε": {"συγχώνευση": [], "άτομο": [1]},
"μεγάλο": {"συγχώνευση": [], "άτομο": [4]}
}
Σε αυτό το παράδειγμα, the schema row contains a σούπερ θήκη S which has not been requested. Keeping this row would lead to a load combination that would be identical to the load combination associated with the schema row below, so it is removed.
"A-1a-u":{"ρε": 1.25, "μεγάλο": 1.50}
Exceptions
While this behavior is usually desirable, there are cases where NOT deleting a row when the load case is absent leads to a much simpler schema. Για παράδειγμα, if we have horizontal earth loads that should be added to every combination of schema, but are not always present, we could copy and paste all of the load combinations and modify the schema key for the new rows with a suffix like “h” for horizontal earth loads. Εναλλακτικά, we can simply add the horizontal earth load to all of the cases and add a keep exception to the load case in the meta data. That way, εάν δεν ζητηθεί η θήκη φόρτωσης, δεν θα εμφανιστεί, αλλά η σειρά θα παραμείνει. Το αποτέλεσμα μοιάζει κάπως έτσι στη μετα-ιδιότητα του σχήματος:
"Η": {
"επιγραφή": "Πλευρική γη - Unfavorable",
"τάξη": 1,
"εξαιρέσεις": ["διατήρηση"],
"παλιές_ετικέτες": []
},
Περιττοί συνδυασμοί
Εάν μια σειρά σχήματος δεν φιλτράρεται από τα τρία πρώτα βήματα, προχωρά στο βήμα νούμερο τέσσερα. Σε αυτό το βήμα, το θέμα της αντιστοίχισης συγκεκριμένων περιπτώσεων φορτίου μεταξύ του σχήματος και αυτού που ζητείται. Εάν μια σειρά σχήματος και ένα αίτημα έχουν αντίστοιχες σούπερ περιπτώσεις, αλλά η συγκεκριμένη περίπτωση φορτίου που ζητήθηκε δεν περιλαμβάνεται στο σχήμα, the row will not be kept. Take, για παράδειγμα, the following schema row:
"A-2a-u":{"ρε": 1.25, "Σλ": 1.50}
and the following input_by_case:
input_by_case = { "ρε": {"συγχώνευση": [], "άτομο": [1]}, "Sh": {"συγχώνευση": [], "άτομο": [1]} }
Σε αυτό το παράδειγμα, both the schema row and the request have matching super cases. Ωστόσο, the request requires a combination with Sh, which the schema row does not provide. Ετσι, the schema row is not kept.
Exceptions
Αλλη μια φορά, this behavior is usually desirable, but can lead to problems. One such problem is when standards have load cases that share a super case, but do not act simultaneously. Για παράδειγμα, στην ASCE, the wind loads W and tornado loads Wt do not act simultaneously, though they share the same super case W. When we run into this problem, we can add an exception to switch to another σούπερ θήκη before the code runs in the meta data. Στα παρασκήνια, the symbol following the “->” characters will be attributed to the load case, which will simulate the load cases acting in that σούπερ θήκη. Το αποτέλεσμα μοιάζει κάπως έτσι στη μετα-ιδιότητα του σχήματος:
"Β" : {
"επιγραφή": "Ανεμος - Tornado",
"τάξη": 8,
"εξαιρέσεις": ["supercase->Χ"],
"παλιές_ετικέτες": []
},
In the case above, ο σούπερ θήκη “Δ” will be swapped to “Χ” before the code runs. This feature can also be used to send group load cases that have unique σούπερ θήκη symbols together.

