Implementations of the present disclosure relate to generating shapes or geometries.
In product, device, or system design and development, system-level design may refer to the architecture and the composition of sub-systems or assemblies of parts. In other words, the system-level design may be represented with a collection of functional, interactive components without concerning or defining how each component is implemented (e.g., what shape or materials it may be). Therefore, the system-level design may focus on functional aspects and seek to identify requirements for each component. In a computer aided environment for system-level designs, such as Dymola, a user may provide system-level elements for simulations in the abstract. Dymola is a modeling and simulation computational environment based on the open Modelica modeling language, which is an object-oriented, declarative, and multi-domain modeling computer language.
Conventionally, once a system-level design is completed, such as when the components and functional requirements have been fully defined, users (e.g., engineers) may separately design corresponding geometry-level parts to realize those system-level elements. The parts design may focus on ascertaining shapes and dimensions of the parts to carry out the desired performance specifications of the system-level design. Computer aided design (CAD) software is a design tool that aids a user to draw, input parameters, visualize, and produce production instructions efficiently. Creating CAD models or drawings needs not depend on system-level modeling (e.g., one may draw any decorative shapes). As such, there are many CAD programs, including Fusion 360, CorelCAD, Solidworks, Tinkercad, FreeCAD, Sketchup, Solidedge, Bentley, AutoCAD, etc.
Therefore, the process of system-level designs and the process of geometry-level designs are separated and independent from each other. Such separation may lead to inefficient or sub-optimal designs, such as the geometry-level design phase may not be authorized to or capable in correcting issues of the system-level design phase, or the system-level design phase may not consider the limitations or advantages available in the geometry-level design phase.
The described embodiments and the advantages thereof may best be understood by reference to the following description taken in conjunction with the accompanying drawings. These drawings in no way limit any changes in form and detail that may be made to the described embodiments by one skilled in the art without departing from the spirit and scope of the described embodiments.
Like numerals indicate like elements.
The present disclosure provides various techniques for providing or facilitating automatic generation or conversion to geometric designs based on system-level designs. In current practice, system-level designs are created in a computational environment separate from a geometry-level computer aided design (CAD) environment. The system-level design often focuses on functional aspects and seeks to identify requirements for each system component, such as properties that may be realized by selection of different materials, shapes, positions, and/or movement constraints. In other words, unlike designing in a CAD environment, geometric properties may not be an essential concern in system-level designs. Because the process of system-level designs and the process of geometry-level CAD workflows are separated and independent from each other, the separation often leads to inefficient or sub-optimal designs. The present disclosure provides methods, processes, and systems for overcoming such separation, and allow users to automatically generate or realize geometry-level designs based on system-level designs.
For example, a system of the present disclosure may provide a computer design environment that allows users to input a system-level design, such as by defining functionalities and behaviors of two or more interactive system components (e.g., a spring and a damper). The computer design environment then, without further user intervention, generates (e.g., by selecting from a library and performing optimization) geometric parts that satisfy the defined functionalities and behaviors of the system-level design. In another example, a facilitating add-on software program may interface between a system-level design environment, such as Dymola, and a geometry-level CAD environment, such as Solidworks®. The add-on software program receives system-level design input from the system-level design environment, and generates (e.g., by selecting from a library) geometric designs in the geometry-level CAD environment. The add-on software program then evaluates the performance the geometric designs against the intended functionalities and behaviors of the system-level design and iteratively optimizes the geometric designs. As such, either form of implementations enables users to focus on the system-level designs and to efficiently update both the system-level designs and geometry-level designs as desired.
According to aspects of the present disclosure, an example method may include receiving user input that specifies a system model (i.e., system-level model, used interchangeably herein). The system model describes, represents, or reflects a topology of two or more system components. The topology describes connectivity and performance by the two or more system components. A processing device extracts the topology of the two or more system components from the system model. The topology is represented by two or more connected nodes. The topology describes connectivity and performance by two or more system components. The processing device generates design spaces for the two or more connected nodes. The processing device further generates geometric representations in the design spaces for each of the two or more connected nodes to form the geometric assembly based on the system model.
According to aspects of the present disclosure, an example method may include receiving a system model from a system modeling environment. The system model describes, represents, or reflects a topology of two or more system components. The topology describes connectivity and performance by the two or more system components. A processing device extracts the topology of the two or more system components from the system model. The topology is represented by two or more connected nodes (e.g., computed by the processing device). The processing device may receive (initial or reference) geometric representations for the two or more connected nodes (e.g., from a geometry-level CAD environment).
The processing device then determines, such as by performing simulations (e.g., finite element analysis, computational fluid or thermal dynamics, etc.), whether the received geometric representations match the connectivity and the performance of the topology of the system model. Upon determining that the received geometric representations do not match the connectivity and the performance of the topology of the system model, the processing device modifies at least one of the geometric representations to reduce differences between a connectivity or performance of the received and modified geometric representations and the connectivity and the performance of the topology of the system model. Details of various aspects of the present disclosure are discussed below in view of the example figures.
In the system level modeling tool 110, a user may define one or more design goals 112, such as stiffness, deformation, kinematics, or other functional or behavioral objectives in the system level modeling tool 110. The user may design and create system level models 114 in the system level modeling tool 110. For example, the system level models 114 may include a block diagram including multiple system components functionally connected to each other, such as a movement of one system component causing another movement of another system component. In some cases, the system level modeling tool 110 may include information about adjacency matrices, constitutive matrix sets, initial conditions sets, output of interest sets, state-space equations, and other system level modeling information. An example of a system level design 510 is illustrated in
The geometric design tool 130 may receive input from the user or the automation module 120. For example, the user input, review, or edit shapes 132, dimensions 134, part relationships 136, and/or geometry 138 for production. The shapes 132 may be selected from a library of shapes 132, or may be created by using drawing tools or parametric tools in the geometric design tool 130. Drawing tools enable specification of one or more points of a geometry in the geometric design tool 130. Parametric tools enable specification of relationships between one or more points and a parameter of a geometry in the geometric design tool 130, such as specifying a sphere by providing a center point and a radius. The dimensions 134 may be changed or revised by editing one or more properties (e.g., length, location, boundary, etc.) or relationships (e.g., mating conditions, such as the part relationships 136) of the shapes 132.
The part relationships 136 specify one or more joint types between parts. For example, the part relationships 136 may indicate a pin joint, a prismatic joint, a ball joint, a turnbuckle, a knuckle joint, or other joint types (e.g., fixation by adhesives). The part relationships 136 may include relative or absolute constraints of various degrees of freedoms.
The geometric design tool 130 may receive iterative updates from the automation module 120 (e.g., associated with the engineering analyses tool 140) or the user. The updates are to reduce the differences between the performance of (e.g., by simulations) of the parts designed in the geometric design tool 130 and the desired performance represented in the system level models 114 in the system level modeling tool 110. Upon convergence or optimization, a final geometry may be settled as the geometry 138 and used for production.
The engineering analyses tool 140 may include a performance evaluation module 142, an auxiliary analysis module 144, and a module 146 for recording and/or initiating iteration changes. In some cases, the engineering analyses tool 140 includes computer software to perform engineering analyses such as finite element analysis (FEA), computational fluid dynamics (CFD), multibody dynamics (MBD), durability simulations, and/or topology optimizations. For example, the performance evaluation module 142 may perform FEA based on the geometry-level designs in the geometric design tool 130. The automation module 120 may compare the FEA results in the performance evaluation module 142 with the desired performance specified in the system level modeling tool 110. When the difference exceeds a threshold, the automation module 120 may notify or provide feedback to the engineering analyses tool 140. The auxiliary analysis module 144 may identify aspects, such as parameters or changes that may be made to the geometric-level design, to update the performance simulation. The iteration changes module 146 coordinates the operations of the performance evaluation module 142, the auxiliary analysis module 144 with the automation module 120, the system level modeling tool 110, and the geometric design tool 130.
An example of workflow 300 for the system-level model to geometric assembly generation automation system 105 is illustrated in
In addition to outputting the system level design to the CAD modeling tool 310, the system modeling tool 320 also provides the system level design to the automation module 120 for performing the solution similarity check 340, which is based on the design goals represented by the system equations 322 and the simulation output 335 of the CAE modeling tool 330. At 345, the automation module 120 determines that the difference between the simulation output 335 and the system equations 322 exceeds a threshold value and tunes one or more dimensions of the geometric design (e.g., updating to a new geometric design) in the CAD modeling tool 310. As such, the automation module 120 may iteratively update the geometric design in the loop formed by operations 315 and 345 until the difference between the simulation output 335 and the system equations 322 is within the threshold.
The module 220 of geometric designs generation based on system design information includes the memory 222 to receive user input that specifies the system model or system-level design from the system-level input 210. For example, the system model may include two or more system components 214 functionally interacting with each other. The system model is to be functionally realized by a geometric assembly to be automatically generated by the module 220. The system model may describe a topology of the two or more system components 214 implicitly or explicitly. The topology may describe connectivity (e.g., how system components are related to each other) and performance by the two or more system components 214. In some cases, the system model may be represented by the topology 212 in the system-level input 210. In some cases, implicit topology may be extracted from the system components 214, as discussed below.
The module 220 may include a processor 224 to process or extract the topology 212 of the two or more system components 214 from the system model. The processed or extracted topology may be represented by two or more connected nodes. The connected nodes may represent parts of the geometric level designs (e.g., representing centers of gravity, position in space, etc.). The module 220 further includes a processor 226 to generate, based on the extracted topology 212 and one or more performance requirements 216, design spaces for the two or more connected nodes. The design spaces allow the module 220 to automatically generate geometric models that may satisfy the performance requirements 216.
The module 220 may include a processor 228 to generate, iteratively, geometric representations in the design spaces for each of the two or more connected nodes to form the geometric assembly based on the received system model.
In some cases, the module 220 of geometric designs generation based on system design information may obtain material properties and manufacturing parameters associated with an additive manufacturing process of the geometric representation. The module 220 of geometric designs generation based on system design information may perform topology optimization in the design spaces for the two or more connected nodes specific to particular materials and/or additive manufacturing parameters.
The geometric level output 240 may include part geometries of the geometric assembly 242 as well as part relationships 244, which include assembly and mating information about the part geometries. The part geometries of the geometric assembly 242 may include CAD models selected from a model library, when dimensions and parameters generated by the module 220 automatically. In some cases, the selected library models or shapes may then be used for performance simulation analyses (e.g., by the engineering analyses tool 140 and/or the CAE modeling tool 330). The module 220 may then iteratively update the dimension and parameters for optimization or meeting the performance requirements 216. Herein, shapes, geometries, and geometric representations may be interchangeable. The geometry may be defined by a density model (each coordinate having a value between 0 and 1), a point cloud model (vertices each having a coordinate), a parametric model (a shape defined by one or more parameters), or a combination thereof. The geometric assembly of the part geometries are capable of performing functions of the system model.
Unlike the module 220 that operates in an environment including both system-level design tools and geometry-level design tools, the module 420 may be an individual, separate, or standalone add-on or interface and operate as an extension for other third-party system-level tools and/or geometric-level tools. For example, the module 420 may be deployed to different system-level design tools that provide the system-level input 410 as well as different CAD software for the geometric level output 440 while providing automatic generation of geometric assemblies in the different CAD software.
The module 420 may include a memory 422 to receive a system model from a system modeling environment, such as Dymola. The system model may describe a topology 412 of two or more system components 414. The topology 412 may describe connectivity and performance by the two or more system components 414. The expected performance of the two or more system components 414 of the system model may be specified by the performance requirements 416 of the system-level input 410.
The module 420 includes a processor 424 to extract or process the topology of the two or more system components from the system model. The topology may be represented by two or more connected nodes generated by the module 420 or provided in the system-level input 410. Extracting the topology may include processing or converting the topology 412 (e.g., explicit topology of the system model) to a desired topology format. In some cases, extracting the topology may include processing the system components 414 to identify implicit topology for the automatic geometric assembly generation.
The module 420 may include a memory 426 to receive geometric representations for the two or more connected nodes. For example, an associated CAD software or geometric modeling tool may provide a set of initial geometric models for the module 420 to evaluate and update. In some cases, the module 420 may be a plug-in function of the associated CAD software and make use of an existing geometry library therein to obtain the initial geometric representations.
The module 420 may further include a processor 428 to determine whether the received geometric representations match the connectivity and the performance of the topology of the system model. For example, the processor 428 may perform the solution similarity check 340 of
In some cases, the system-level computational environment and/or the geometric design computational environment in the block diagram 400 may be remote to the module 420 and connected via local or global networks. For example, the module 420 may include client interfaces in either or both of the system-level computational environment and the geometric design computational environment. The module 420 may serve different clients with different system-level model inputs, such as by providing an online service. In some cases, the module 420 is installed locally to avoid potential data transmission interruption.
The operation 501 may include one or more of: determining positional information of each of the two or more system components; determining connectivity relationships among the two or more system components; identifying centers of gravity of the two or more system components; constraining the design spaces for the geometric representations; and determining spatial interface positions of the geometric representations.
As shown, the extracted topology 520 may include multiple connected nodes representing the first grip, the second grip, the pivot, the first blade, the second blade, and multiple connection rods without geometric information. The topology 520 is further processed at operation 502 for obtaining or designating centers of gravities for each node, as shown in
The processing device may, in operation 505, determine connection types 740 and/or occupied spaces of the nodes. For example, the processing device may select applicable connection types 740 from a database or library. The connection types 740 may be one of kinematic joints (e.g., moveable joints, such as revolute joints) or none-kinematic joints (e.g., fixed joints, such as by adhesion).
The processing device may, in operation 506, select parametric geometric parts that satisfy the connection types 740 and/or perform topology optimization to generate a geometric assembly 830 as shown in
The processing device may, in operation 507, perform engineering analysis to compare the performance of the geometric assembly 830 and the intended performance of the system model 510. As shown in
Turning first to
At 920, a processing device extracts or processes the topology of the two or more system components from the system model. The topology is represented by two or more connected nodes and describing connectivity and performance by the two or more system components. In some cases, the two or more connected nodes are generated by the processing device based on implicit description of the topology in the system model. In some cases, the two or more nodes are indicated in an explicit topology, depending on specific format of the system model. Example operations for extracting the topology of the two or more system components are illustrated in
At 930, the processing device generates design spaces for the two or more connected nodes. For example, the processing device may identify boundary limits and/or movements of each of the two or more nodes to determine design spaces for the two or more connected nodes. Example operations for generating the design spaces are illustrated in
At 940, the processing device generates geometric representations in the design spaces for each of the two or more connected nodes to form the geometric assembly based on the system model. Example operations for generating geometric representations in the design spaces are illustrated in
Turning now to
At 1020, the processing device may determine connectivity relationships among the two or more system components. The connectivity relationships may correspond to or represent mating conditions of the two or more system components.
At 1030, the processing device may identify centers of gravity of the two or more system components. The center of gravity of each system component may be represented by a coordinate according to the requirements of the system model, as shown in the updated topology 630 of
At 1040, the processing device may constrain the design spaces for the geometric representations, as illustrated in the example design space constraints 640 of
At 1050, the processing device may determine spatial interface positions of the geometric representations, as shown in the example spatial interface positions 730 of
Turning now to
At 1110, the processing device may select, from a library of geometries, a part based on a corresponding connectivity or performance indicated by the extracted topology.
At 1120, the processing device may generate each of the geometric representations based on a user design input.
At 1130, the processing device may perform a topology optimization based on the connectivity and the performance of the system model.
At 1140, the processing device may determine whether the geometric representations match the connectivity and the performance of the topology of the system model. For example, CAE analyses may simulate the performance of the geometric representations and the simulation results are compared against the design goals of the system model. A user may define an acceptable threshold for the similarity check.
At 1150, upon determining that the geometric representations do not match the connectivity and the performance of the topology of the system model (e.g., differences exceed the threshold), the processing device may modify at least one of the geometric representations to reduce differences between a connectivity or performance of the received and modified geometric representations and the connectivity and the performance of the topology of the system model.
Turning now to
At 1210, the processing device may change one or more parameters associated with dimensions, shapes, mating or boundary conditions, or centers of gravity of the at least one of the geometric representations.
At 1220, the processing device may iterate changes of the one or more parameters until the modified geometric representations match the connectivity and performance of the system model.
At 1230, the processing device may determine whether the geometric representations match the connectivity and the performance of the topology of the system model by performing a simulation of movements (e.g., in a CAE environment) of the geometric representations based on inputs for the system model.
At 1240, the processing device may further analyze stresses and deformations of the geometric representations for comparison with corresponding expected values of the system model.
At 1250, the processing device may determine that the geometric representations do not match the connectivity and the performance of the topology of the system model when the stresses and deformations exceed the expected values of the system model. In response, the processing device may repeat operations 1210 and 1220 until the simulated performance of the updated geometric representations match the requirements in the system model.
In some cases, the geometric representations that form the geometric assembly corresponding to the system model include shapes to be produced by additive manufacturing without assembly. For example, the generated geometric parts are manufactured connected. Various additive manufacturing techniques may be used, including selective laser sintering (SLS), selective laser melting (SLM), and laser powder bed fusion (LPBF). In some cases, the processing device may update the geometric representations specific to the manufacturing techniques and/or limitations of the production parameters.
The operations 1300 begins, at 1310, by receiving the system model from a system modeling environment, the system model describing a topology of two or more system components. For example, the system model is provided from an external system-level modeling environment, such as Dymola. The topology describes or reflects connectivity and performance by the two or more system components.
At 1320, a processing device may extract or process the topology of the two or more system components from the system model. The topology is represented by two or more connected nodes.
At 1330, the processing device receives geometric representations for the two or more connected nodes. For example, the processing device may receive initial shapes in a library of a CAD software.
At 1340, the processing device determines whether the received geometric representations match the connectivity and the performance of the topology of the system model.
At 1350, upon determining that the received geometric representations do not match the connectivity and the performance of the topology of the system model, the processing device modifies at least one of the geometric representations to reduce differences between a connectivity or performance of the received and modified geometric representations and the connectivity and the performance of the topology of the system model.
In some cases, receiving the geometric representations may include providing, via a plug-in client interface, a geometric modeling environment (e.g., an external CAD environment) the extracted topology including positions and constraints of each of the two or more connected nodes. The processing device then receives the geometric representations from the geometric modeling environment. The geometric representations may be selected or generated by the client interface and the processing device according to the positions and constraints of the two or more connected nodes. The selection may be based on a library of models, including parametric models, in the geometric modeling environment. During operations, the processing device may communicate with the client interface to participate in the selection or generation of the geometric representations.
In some cases, each of the geometric representations is generated in the geometric modeling environment based on at least one of: a part selection from a library of geometries based on a corresponding connectivity or performance indicated by the extracted topology; a user design input; or an output of a topology optimization. In some cases, the processing device may determine whether the received geometric representations match the connectivity and the performance of the topology of the system model by performing a simulation of movements of the geometric representations based on inputs for the system model. The processing device may analyze stresses and deformations of the geometric representations for comparison with corresponding expected values of the system model. In some cases, the processing device may determine that the received geometric representations do not match the connectivity and the performance of the topology of the system model when the stresses and deformations exceed the expected values of the system model.
In some cases, the processing device may extracting the topology of the two or more system components from the system model by performing one or more of: obtaining positional information of each of the two or more system components; identifying connectivity relationships among the two or more system components; identifying centers of gravity of the two or more system components; constraining design spaces for the geometric representations; and determining spatial interface positions of the geometric representations.
In some cases, the processing device may modify the at least one of the geometric representations by changing one or more parameters associated with dimensions, shapes, mating or boundary conditions, or centers of gravity of the at least one of the geometric representations; and iterating changes of the one or more parameters until the modified geometric representations match the connectivity and performance of the system model.
The exemplary computer system 1400 includes a processing device 1402, a main memory 1404 (e.g., read-only memory (ROM), flash memory, dynamic random access memory (DRAM), a static memory 1406 (e.g., flash memory, static random access memory (SRAM), etc.), and a data storage device 1418, which communicate with each other via a bus 1430. The processing device 1402 may be implemented as the automation module 120, or a related processing device unit. In some cases, the processing device 1402 may be used to perform tasks associated with the automation module 120. Any of the signals provided over various buses described herein may be time multiplexed with other signals and provided over one or more common buses. Additionally, the inter 1429 connection between circuit components or blocks may be shown as buses or as single signal lines. Each of the buses may alternatively be one or more single signal lines and each of the single signal lines may alternatively be buses.
Processing device 1402 represents one or more general-purpose processing devices such as a microprocessor, central processing unit, or the like. More particularly, the processing device may be complex instruction set computing (CISC) microprocessor, reduced instruction set computer (RISC) microprocessor, very long instruction word (VLIW) microprocessor, or processor implementing other instruction sets, or processors implementing a combination of instruction sets. Processing device 1402 may also be one or more special-purpose processing devices such as an application specific integrated circuit (ASIC), a field programmable gate array (FPGA), a digital signal processor (DSP), network processor, or the like. The processing device 1402 may execute processing logic 1426, which may be one example of system 100 shown in
The data storage device 1418 may include a machine-readable storage medium 1428, on which is stored one or more set of instructions 1422 (e.g., software) embodying any one or more of the methodologies of functions described herein, including instructions to cause the processing device 1402 to execute the system 100. For example, the instructions 1422 may include the module 220 of geometric designs generation. The instructions 1422 may also reside, completely or at least partially, within the main memory 1404 or within the processing device 1402 during execution thereof by the computer system 1400; the main memory 1404 and the processing device 1402 also constituting machine-readable storage media. The instructions 1422 may further be transmitted or received over a network 1420 via the network interface device 1408.
The non-transitory machine-readable storage medium 1428 may also be used to store instructions to perform the methods and operations described herein. While the machine-readable storage medium 1428 is shown in an exemplary embodiment to be a single medium, the term “machine-readable storage medium” should be taken to include a single medium or multiple media (e.g., a centralized or distributed database, or associated caches and servers) that store the one or more sets of instructions. A machine-readable medium includes any mechanism for storing information in a form (e.g., software, processing application) readable by a machine (e.g., a computer). The machine-readable medium may include, but is not limited to, magnetic storage medium (e.g., floppy diskette); optical storage medium (e.g., CD-ROM); magneto-optical storage medium; read-only memory (ROM); random-access memory (RAM); erasable programmable memory (e.g., EPROM and EEPROM); flash memory; or another type of medium suitable for storing electronic instructions.
The preceding description sets forth numerous specific details such as examples of specific systems, components, methods, and so forth, in order to provide a good understanding of several embodiments of the present disclosure. It will be apparent to one skilled in the art, however, that at least some embodiments of the present disclosure may be practiced without these specific details. In other instances, well-known components or methods are not described in detail or are presented in simple block diagram format in order to avoid unnecessarily obscuring the present disclosure. Thus, the specific details set forth are merely exemplary. Particular embodiments may vary from these exemplary details and still be contemplated to be within the scope of the present disclosure.
Additionally, some embodiments may be practiced in distributed computing environments where the machine-readable medium is stored on and or executed by more than one computer system. In addition, the information transferred between computer systems may either be pulled or pushed across the communication medium connecting the computer systems.
Embodiments of the claimed subject matter include, but are not limited to, various operations described herein. These operations may be performed by hardware components, software, firmware, or a combination thereof.
Although the operations of the methods herein are shown and described in a particular order, the order of the operations of each method may be altered so that certain operations may be performed in an inverse order or so that certain operation may be performed, at least in part, concurrently with other operations. In another embodiment, instructions or sub-operations of distinct operations may be in an intermittent or alternating manner.
The above description of illustrated implementations of the invention, including what is described in the Abstract, is not intended to be exhaustive or to limit the invention to the precise forms disclosed. While specific implementations of, and examples for, the invention are described herein for illustrative purposes, various equivalent modifications are possible within the scope of the invention, as those skilled in the relevant art will recognize. The words “example” or “exemplary” are used herein to mean serving as an example, instance, or illustration. Any aspect or design described herein as “example” or “exemplary” is not necessarily to be construed as preferred or advantageous over other aspects or designs. Rather, use of the words “example” or “exemplary” is intended to present concepts in a concrete fashion. As used in this application, the term “or” is intended to mean an inclusive “or” rather than an exclusive “or”. That is, unless specified otherwise, or clear from context, “X includes A or B” is intended to mean any of the natural inclusive permutations. That is, if X includes A; X includes B; or X includes both A and B, then “X includes A or B” is satisfied under any of the foregoing instances. In addition, the articles “a” and “an” as used in this application and the appended claims should generally be construed to mean “one or more” unless specified otherwise or clear from context to be directed to a singular form. Moreover, use of the term “an embodiment” or “one embodiment” or “an implementation” or “one implementation” throughout is not intended to mean the same embodiment or implementation unless described as such. Furthermore, the terms “first,” “second,” “third,” “fourth,” etc. as used herein are meant as labels to distinguish among different elements and may not necessarily have an ordinal meaning according to their numerical designation.
It will be appreciated that variants of the above-disclosed and other features and functions, or alternatives thereof, may be combined into may other different systems or applications. Various presently unforeseen or unanticipated alternatives, modifications, variations, or improvements therein may be subsequently made by those skilled in the art which are also intended to be encompassed by the following claims. The claims may encompass embodiments in hardware, software, or a combination thereof.