EP2158553A2 - Computer device for simulating a set of objects in interaction and corresponding method - Google Patents

Computer device for simulating a set of objects in interaction and corresponding method

Info

Publication number
EP2158553A2
EP2158553A2 EP08826113A EP08826113A EP2158553A2 EP 2158553 A2 EP2158553 A2 EP 2158553A2 EP 08826113 A EP08826113 A EP 08826113A EP 08826113 A EP08826113 A EP 08826113A EP 2158553 A2 EP2158553 A2 EP 2158553A2
Authority
EP
European Patent Office
Prior art keywords
data
interaction
nodes
function
updating
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Ceased
Application number
EP08826113A
Other languages
German (de)
French (fr)
Inventor
Stéphane REDON
Romain Rossi
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Institut National de Recherche en Informatique et en Automatique INRIA
Original Assignee
Institut National de Recherche en Informatique et en Automatique INRIA
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Institut National de Recherche en Informatique et en Automatique INRIA filed Critical Institut National de Recherche en Informatique et en Automatique INRIA
Publication of EP2158553A2 publication Critical patent/EP2158553A2/en
Ceased legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/20Design optimisation, verification or simulation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/20Design optimisation, verification or simulation
    • G06F30/23Design optimisation, verification or simulation using finite element methods [FEM] or finite difference methods [FDM]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/32Circuit design at the digital level
    • G06F30/33Design verification, e.g. functional simulation or model checking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/36Circuit design at the analogue level
    • G06F30/367Design verification, e.g. using simulation, simulation program with integrated circuit emphasis [SPICE], direct methods or relaxation methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2111/00Details relating to CAD techniques
    • G06F2111/08Probabilistic or stochastic CAD
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2111/00Details relating to CAD techniques
    • G06F2111/10Numerical modelling

Definitions

  • the invention relates to the simulation of a set of interacting objects.
  • the simulation of interacting objects is a vast field that extends from the simulation of a multitude of more or less complex mechanical bodies to the simulation of the behavior of molecules, for example proteins.
  • the first approaches developed were based on the collection of objects, that is their grouping together in order to define a global behavior. This type of approach is interesting because of its relatively low calculation costs.
  • An articulated body is generally composed of two bodies connected to each other by a joint.
  • the two bodies can be articulated bodies themselves and so on. This approach allowed to model with fidelity the mechanical behavior of such sets of objects while maintaining a high level of performance.
  • the invention improves the situation.
  • the invention proposes a computing device for the simulation of a set of interacting objects which comprises a memory containing a tree representation of the set of objects.
  • each of the intermediates is associated with dynamic data, geometric data and interaction data.
  • the device further comprises a simulation controller that operates in a repetitive cycle:
  • the memory further includes local interaction data associated with at least some of the nodes, and the interaction data distributor includes an interaction update mechanism, with traversal of the tree representation for interacting subjects, for updating an interaction datum of a node according to the local interaction data of concerned child nodes.
  • the invention also relates to a method for simulating the behavior of a set of interacting objects in which a tree representation of the set of objects is maintained.
  • each intermediate node is associated with dynamic data, geometric data and data dependent interaction data of its child nodes.
  • step b vs. re-browsing the tree representation for interacting subject nodes, while updating geometric data, based on the dynamic data as updated in step b.
  • step a. includes:
  • FIG. 1 represents a schematic diagram of a computing device according to the invention
  • FIG. 2 represents a block diagram of an implementation by functions of a simulation loop performed by the device of FIG. 1;
  • FIG. 3 represents a block diagram of a first function of the simulation loop of FIG. 2;
  • FIG. 4 represents a block diagram of a function of FIG. 3
  • FIG. 7 represents a block diagram of another function of FIG. 3;
  • FIG. 8 represents a block diagram of a second function of the simulation loop of FIG. 2;
  • FIG. 9 represents a block diagram of a third function of the simulation loop of FIG. 2;
  • FIG. 10 represents a block diagram of a fourth function of the simulation loop of FIG. 2.
  • FIG. 11 represents a block diagram of a fifth function of the simulation loop of FIG. 2.
  • the invention also covers, as products, the software elements described, made available under any “medium” (support) readable by computer.
  • computer readable medium includes data storage media, magnetic, optical and / or electronic, as well as a medium or transmission vehicle, such as an analog or digital signal.
  • Articulated body means the assembly which comprises a joint, or joint, which connects two bodies that can themselves be articulated bodies.
  • an articulated body must not therefore be restricted to its mere mechanical connotation.
  • the notion of articulation must also be understood in a broad sense.
  • an articulation may comprise a variable number of degrees of freedom, ranging from zero (rigid coupling of the two subsets) to six (relative movement of the two non-constrained subsets).
  • the binary tree has leaf nodes which represent the most basic objects of the articulated object, and which are each connected to a joint, or node.
  • each node of the binary tree is itself an articulated body which designates a subset of objects.
  • This metric is used to evaluate the acceleration of the articulated body associated with a given joint, from the data of this joint alone, without knowing the data of the sheets. It is then possible to "stiffen" the shaft, by canceling the acceleration of an articulated body for which the acceleration metric is less than a chosen threshold.
  • the rigidification of the tree thus makes it possible to restrict the path of the tree to a reduced number of nodes, while controlling the fidelity of the simulation.
  • interaction data can be defined as follows: it represents forces that apply to a given node, or to a given object in the subset of objects represented by that node. These forces can be classified into two classes of forces:
  • the objects are molecules and atoms
  • the local forces include on the one hand the external forces that apply individually to joints, and on the other hand all the inter-atomic forces. and inter-molecular, such as electrostatic forces, van der Waals forces etc.
  • Dynamic data represent composite data characteristic of the dynamics of articulated bodies. These data make it possible to compute metrics of acceleration and speed of joint without necessarily knowing all the data of position and force of all the objects. Their application will appear better later.
  • Geometric data represent a set of characteristic data of articulated bodies that depend exclusively on the relative positions of objects between them. This data makes it possible to perform most of the calculations in local references, which simplifies the simulation. Here again, these data will be explained later.
  • FIG. 1 shows a schematic representation of a device according to the invention.
  • the device 2 comprises a simulation controller 4, a simulation block 6 and a memory 8.
  • the simulation block 6 comprises an interaction data distributor 10, a dynamic data update mechanism 12 and a setting mechanism.
  • the controller 4 repetitively actuates the simulation block 6 according to a simulation loop which will be described below on the basis of data contained in the memory 8.
  • the device 2 can be realized in several forms.
  • the presently preferred embodiment is a computer program that implements the controller 4 and the block 6 in executable form on a commercially available computer, for example a computer having a 1.7 GHz microprocessor, having 1 GB of RAM, and a hard disk of sufficient size to contain an operating system and program code.
  • FIG. 2 shows a schematic diagram of an implementation of the simulation loop carried out by block 6.
  • functions Upd lnt () 20, Sprd_Int () 22, Get_Dyn_Coeff () 24, Upd_Dyn () 26, and Upd_Geo () 28 are called successively.
  • the loop shown in FIG. 2 represents the main steps of the simulation in a given operating loop. These steps are respectively the update of inter-object interactions of non-articular nature, the diffusion of these interactions, obtaining and updating dynamic simulation parameters, and then updating geometric simulation parameters.
  • the function Upd_Geo () 28 constitutes a kernel of the mechanism for updating geometric data 14.
  • FIG. 3 represents a possible implementation of the function Upd_Int () of FIG. 2.
  • the function Upd_Int () 20 comprises three subfunctions, Upd_BB () 30, Upd_Int_L () 32 and Upd_Int_Val () 34.
  • the function Upd_Int () 20 allows to take into account these local forces. For that, this function starts from a given molecular situation, and makes it possible to determine at first what are the objects likely to interact with each other. In a second step, this function calculates the corresponding local forces, and integrates these data in an orderly way.
  • the function Upd_BB () 30 is an adaptation of interaction detection to molecular simulation. Since interatomic forces are mainly short-range, this function defines potential interaction spaces around each object.
  • these spaces are defined as "oriented boxes" surrounding an object or group of objects.
  • the boxes themselves are defined for each node of the binary tree at the beginning of the simulation, and the function Upd_BB () operates by updating the position of a reference point and an orientation direction for each box. .
  • OBB Oriented Bounding Box
  • OBBs depend exclusively on the positions of the objects they surround, and as they are expressed in a repository linked to the node to which they are attached, they are unchanged when a node is stiffened.
  • the function Upd_OBB () 30 therefore operates only on the nodes whose position has changed during the preceding simulation step. This function traverses the binary tree from bottom to top selectively, crossing only the so-called active nodes, as will be explained below.
  • the updated OBBs form the workbase used by the Upd_Int_L () function 32.
  • This function an implementation of which is shown in Figure 4 recursively traverses the binary tree from top to bottom, from the root RN.
  • the function Upd_Int_L maintains for each node two main lists Int_L and Int L Old.
  • the list Int L (respectively Int L Old) contains pairs of nodes belonging to the subset of objects designated by the given node which interact by local forces in the current loop (respectively the previous loop).
  • the function Upd_Int () starts from a 3200 activity test of the current node. This test is related to the acceleration metric of the current node (or other appropriate metric where appropriate), and can be realized as a calculation of this metric, or as a reading of a data (commonly called "flag") which indicates the active character or not of the node, decided according to the value of this metric.
  • a node is considered active if the value of its acceleration metric is greater than a threshold chosen by the user, that is to say if it is considered non-rigidified. If the node is rigid, it means that the global accelerations within the articulated body associated with the node are considered as zero within the framework of the simulation. As we have seen above, this means that the positions of the objects within this body have not changed, since the accelerations of this body have been considered as null. Thus, the IntJL and Int Old L interaction lists of the preceding loop remain valid for this node and all these child nodes, and the function stops (3202).
  • the list Int L (C) of the preceding loop becomes the list Int Old L (C) for the current loop by overwrite (3204), and the list ML (C) is reset (3206). ).
  • the pair (OBBA, OBBB) is then stacked in a Q list (3212), which serves as a storage stack for potential interactions between OBBs.
  • the mentioned loop has the condition of stopping the emptying of the stack Q (3214), and the function Upd_Int_L (C) stops when this condition is fulfilled (3216).
  • the loop starts with an unstacking of the list Q, which makes it possible to recover the last potential interaction torque (OBBE, OBBF) introduced in Q (3218).
  • OBBE last potential interaction torque
  • OBBB last potential interaction torque
  • an Upd_Pos () function updates the OBB OBBE and OBBF OBBF real-world positions, in order to establish their eventual collision. This "real" position update is distinct from that performed in the Upd_OBB () function 30, which updates the relative position of each OBB in the repository of its node.
  • the Coll () function determines whether OBBE and OBBF collide, that is, if their oriented boxes have an intersection. If this is not the case, then there is no local interaction, and the loop is reset to 3214 to test the next potential interaction.
  • E and F are both leaves of the tree, which means that these objects interact with each other, and that the function stops;
  • F is an articulated object and E is a leaf, which means that it is necessary to explore F to determine the interactions of its child nodes with the object associated with E, then to determine the interactions of the child nodes of F between them;
  • E is an articulated object and F is a leaf, which means that it is necessary to explore E to determine the interactions of its child nodes with the object associated with F, then to determine the interactions of the child nodes of E between them;
  • E and F are both articulated objects, which means that E and F must be explored to determine the interactions between their respective child nodes, and then determine the interactions of the child nodes of E and F between them.
  • a test 3224 determines if E is a leaf node, by calling a function CH_OBB () with OBBE.
  • CH_0BB () function is similar to the CH () function, except that it takes an OBB input instead of a node.
  • E is a leaf node
  • the function DPl () is called at 3230, which handles cases a) and b).
  • An exemplary implementation of the function DP1 () is shown in Figure 5.
  • a test 3232 determines if F is a leaf node, calling the function CH_OBB () with OBBF. If F is a leaf node, then the case a) applies, and the list Int L (C) receives the pair (E, F) at 3234, the function DP1 () stops at 3236, and the loop of Upd ⁇ nt L (C) resumes in 3214 with the Q battery test.
  • F is an articulated object
  • FA and FB are his sons, and case b) applies.
  • the OBBs of FA and FB are recovered at 3238, and two potential interactions (OBBE, OBBFA) at 3240 and (OBBE, OBBFB) are then stacked at 3242 in the Q stack.
  • E is an articulated object
  • EA and EB are his sons.
  • a function DP2 () is called in 3250, which handles cases c) and d).
  • An example of implementation of the function DP2 () is shown in FIG.
  • a test 3252 determines if F is a leaf node, calling the function CH_OBB () with OBBF.
  • the Max_Vol () function determines which of OBBE and OBBF has the largest volume, in order to explore the thread interactions of the node associated with the other node. This optimizes the performance of Upd_Int_L ().
  • OBBMA contains OBBEA
  • OBBMB contains OBBEB
  • OBBMin contains OBBF
  • OBBMA contains OBBFA
  • OBBMB contains OBBFB
  • OBBMin contains OBBE.
  • the first recursion relates to the stacking and unstacking of the stack Q, so as to analyze all the potential interaction pairs between the wires of the node C, whatever their level of depth with respect to this node.
  • the second recursion concerns the selective calling of the function Upd_Int () with child nodes of C, which makes it possible to update the lists Upd_01d_L () and Upd_L () of all the active nodes.
  • the determination of local interactions in the binary tree is mainly based on OBB properties, as discussed above.
  • OBBs are an interesting tool, other tools can be used, such as interaction prediction tables, or other suitable tools that the skilled person will consider in view of the application concerned.
  • FIG. 7 An implementation of the function Upd_Int_Val () is shown in Figure 7. As seen in this figure, this function starts with a recursive block 700. By calling the function Upd_Int_Val () with the node RN, the block 700 performs a descent in the binary tree.
  • Block 700 begins at 702 with an activity test of the current node C, as previously described. If the current node is inactive, then the function ends in 704. If the current node is active, the descent into the tree is started by getting children A and B of this node by the CH () function at 706.
  • data processing begins at node C by resetting a list Upd (C) and a stack Q at 720.
  • the list Upd (C) is used to progressively bring up updated interaction data from data updated in the C wires during recursive calls made using block 700.
  • the list Q serves as an object storage stack whose interaction data must be updated at the current node.
  • the list Q receives lists Upd (A), Upd (B), Int Old L (C), and Int L (C) in 722. Note that, although Int Old L (C), and IntJL ( C) contain pairs of nodes and not nodes, one skilled in the art will recognize that the operation 722 is to stack in Q only nodes distinct from each other.
  • An interaction data feedback loop then begins at 724, with the Q list being unstacked in a work node R.
  • the work node R is added to the list Upd (C) in 726, to ensure the recovery of the data.
  • C list Upd
  • a test 728 is performed to determine if R belongs to the subset of objects designated by A, or that designated by B.
  • an interaction data update loop begins at 736 with unstacking of a list Int_L_t (C).
  • the list Int_L_t (C) is a working copy Int L (C), and is used only for the update loop.
  • the unstacking result of the list Int L t (C) is stored in a pair of working nodes (P, T).
  • the interaction data F (C, P) is updated by adding to the value of F (C, P) reset in the above loop the value F (P, T) of the interaction of T on P.
  • the value of F (P, T) is calculated, by means of a function F_Int (), and gives the intensity of the inter-atomic interaction of P with T, in the frame of P.
  • This same operation is carried out in 740 with T, by adding to the value of F (C, T) reset in the above loop the value F (T, P) of the interaction of P on T, in the reference frame of T .
  • F_Int () is based on the well-known formulas of electrostatic interaction and van der Waals between two atoms / molecules. Other formulas can of course be used. It is important to note that F_Int () calculates the interactions in the coordinate system associated with the first invoked node.
  • a test checks if Int L t (C) has been completely unstacked. If this is the case, the relevant instance of Upd_Int_Val () terminates at 744. Otherwise, the update loop resumes at 736.
  • the data of interactions F (C, X), where X is a leaf node descending from C represent the set of interactions undergone by node X by all the other leaf nodes that are descendants of C.
  • this function also keeps track of the nodes whose interaction data were updated using the list Upd ().
  • the root node RN contains firstly all the interaction data on its leaf nodes, but also the list of interaction data. that have been updated in the current loop, which ensures access only to nodes that have actually evolved.
  • the function Upd_Int_Val () is finished, the function Upd_Int () ends.
  • the function Upd_Int () is followed by the Sprd_Int () function in the simulation loop.
  • the Sprd_Int () function is called with the root node RN, as its list Upd (RN) includes all the interaction data that has been modified by the function Upd lntQ.
  • the Sprd_Int () function is a loop that starts with a test 802 on the list Upd (C) of the input node. If this list is empty, the function ends in 804.
  • a Set_Flg () function stores Flg bph data associated with R at 810.
  • the value of the Flg_bph data signals the need to update the dynamic coefficients b, p and ⁇ .
  • the Set FlgO function also records Flg bph data for all ancestors of the R node, up to the root node RN. The loop then resumes in 802, until the list Upd (C) is empty.
  • the Sprd_Int () function can be implemented in many ways.
  • the updated interaction data is here stored in the concerned node.
  • the simulation loop is extended with the Get_Dyn_Coeff () function, which is used to determine the dynamic parameters of the objects and nodes of the tree.
  • the Get_Dyn_Coeff () function is a bottom-up function, like the function Upd_Int_Val (). To obtain this propagation, a test 902 checks whether node C has child nodes A and B.
  • a test 904 checks if the data Flg bph (C) is activated. If this is the case, then the node C is a leaf node for which a function Coeff_bphl () is called in 906, a function which puts p (C) and ⁇ (C) to 0, and which calculates b (C) to from the updated interaction data F (C, C). After step 906, or if the data Flg bph (C) is not activated, the function ends at 908.
  • a first test 922 checks whether the current node C is active. If this is the case, then the coefficients ⁇ (C) and ⁇ (C) are calculated at 924 by calling a function Coeff_phipsi () with the values of these coefficients for the children of C, namely A and B. Then, the coefficients b (C), p (C) and ⁇ (C) are computed at 926 by calling a function Coeff_bph (), with the values of these coefficients for the children of C, namely A and B. Finally, the function ends in 928. In the case where the current node C is inactive, a test is performed on the data Flg bph (C) at 930.
  • the calculation of the coefficients b (C), p (C) and ⁇ (C) can directly and indirectly involve a quantity Q which represents an active force data on the articulation of a node C.
  • This Q size can be used, for example, to represent a torque dependent dihedral angle. Since the calculation of the quantity Q associated with the node C depends only on the relative position of the wires A and B of C, this quantity is updated only for the active nodes. Thus, this update can be done, for example, immediately before the calculation of b (C), p (C) and ⁇ (C) by the function Coeff_bph ().
  • the Upd_Dyn () function updates the dynamic data based on these coefficients.
  • An example implementation of the Upd_Dyn () function is shown in Figure 10.
  • the function Upd_Dyn () shown in Figure 10 is a recursive function that traverses the binary tree from top to bottom. This function uses a priority queue to optimize the determination of the active nodes, as will appear below. For this, a test 1002 on the current node calls an acceleration metric calculation 1003 if the current node is the root node RN. The result serves as a basis at 1004 for a terminal ⁇ which serves as a stop condition at 1006.
  • the acceleration metric calculation is performed by a function Tot_Acc () which performs the calculation described with the formula 21 of Annex A, and which corresponds to the sum of the squares of the accelerations of the child nodes of the current node. This allows you to define active and inactive nodes.
  • ⁇ max defines the simulation accuracy sought in terms of acceleration metrics. So, if ⁇ ⁇ max, it means that the desired precision is reached. The acceleration of the node C qdd (C) is then not calculated, and the function ends in 1010.
  • the Active_Flg () function records data that contains a time marker that is associated with the current simulation loop. It is this time marker that is used in the activity tests of a node. For this, for the given node, the possible time marker associated with the time marker of the current loop is compared. When there is concomitance, then the node is considered active.
  • a similar method can be used to enable Flg bph (C) data.
  • the acceleration of the node C qdd (C) is calculated in 1016 by means of the function Q_Dot.
  • the Q_Dot () function uses the dynamic coefficients ⁇ (C) and b (C), as well as a force F (C).
  • the calculation performed by the Q_Dot () function is explained by Equation 22 of Appendix A.
  • the force F (C) is a composite vector that represents the set of articulation forces that apply on the node C. For the root node RN, particular conditions make it possible to determine the vector F (C), as described in FIG. SPM '05 section 3.1.2.
  • a vector F (C) has two components: F (I, C) and F (2, C).
  • the vector F (C) of a node is used to calculate the vector of its child nodes F (A) and F (B).
  • the force F (I, C) is equal to F (I, A)
  • the force F (2, C) is equal to F (2, B).
  • the F (2, A) and F (I, B) components can also be obtained from F (C) as described below. Therefore the components of F (A) and F (B) can be obtained totally from F (C).
  • the acceleration metrics of the nodes A and B are calculated at 1022 and 1024, and the nodes A and B are entered at 1026 in a queue of priority Q_prio according to the values of Acc (A) and Acc (B).
  • the square value of the acceleration qdd (C) is removed at ⁇ to update the accuracy of the simulation.
  • a node R is pared from the queue Q_prio at 1030, and the function Upd_Dyn () is called with R at 1032 to ensure the recursion of the function and the descent into the tree.
  • the queue Q_prio classifies the nodes according to the value of their acceleration metric, in order to quickly determine the most important nodes.
  • the acceleration metric of a node represents the sum of the squares of the accelerations of its threads
  • the function progressively descends into the nodes that will bring down ⁇ the fastest, which speeds up the simulation. Note that this function performs two tasks simultaneously. Indeed, the activity of a node is based on the value of the acceleration metric.
  • the non-computation of the accelerations of some nodes, and the use of the Active_Flg () data thus also makes it possible to separate them from the following loops which take into account the activity, without additional computation cost.
  • ⁇ max which represents the maximum error of acceleration.
  • Other means may be employed, such as specifying the number of nodes to be simulated, or other metrics.
  • the function Upd_Geo () completes the simulation loop. Indeed, as mentioned above, the interaction data in the nodes are calculated with respect to a particular local coordinate system at each node.
  • the accelerations of the nodes and the positions that can be derived are also relative, or intrinsic.
  • matrices of passage that we have not discussed so far are necessary. It is these passing matrices that are used to calculate the actual position of the OBBs in the Upd_Pos () function of FIG. 4, or else to update the force F (C, R) in the steps 732 and 734 of FIG. 7.
  • the function Upd_Geo () starts in 1102 with a subfunction Upd_Hyb_qdd ().
  • the function Upd_Hyb_qdd () calculates dynamic coefficients corrected to take into account the stiffening performed with the function Upd_Dyn (). Then, the accelerations qdd (C) of the nodes are recalculated with the corrected dynamic coefficients.
  • the operations performed by this function, as well as their integration in the calculation of qdd (C) are described in the article SIGGRAPH '05, sections 4 and 5.
  • the function Upd_Hyb_qdd () _ is not necessarily necessary in all cases.
  • the function Upd_Geo () may not contain this function and proceed directly to 1104.
  • the function Upd_Geo () continues in 1104 with a function Upd_qpos (), which updates the intrinsic positions of the nodes based on their accelerations.
  • This calculation is simple and represents a basic temporal integration corresponding to equation 14 of Appendix A. Other methods can be used for updating the intrinsic positions of the nodes, for example involving additional accelerations calculations. .
  • the function Upd_Geo () ends in 1106 with the function Upd_CT_Mat (), which updates the internal matrices mentioned above based on the updated intrinsic positions of the nodes.
  • These matrices and their update are described further in section 5 of SPM '05.
  • the interaction and geometry data are mainly calculated intrinsically, that is to say with respect to a local coordinate system associated in each case with the node concerned.
  • S is the subspace of movement of the node, of dimension 6 x number of degrees of freedom of the node.
  • S (0, 0, 1, 0, 0, 1) ⁇ .
  • the matrices ⁇ (C) and ⁇ (C) are matrix matrices.

Abstract

Computer device for simulating a set of objects in interaction and corresponding method. A computer device for simulating a set of objects in interaction comprises: a memory (8) with a tree representation of the objects, each node being associated with dynamic, geometric and interaction data dependent on the data of the child nodes and local interaction data for certain nodes, a simulation controller (4), for actuating repeatedly: + a distributor (10) of interaction data, with a mechanism for interaction updating which scans the tree representation and updates an item of interaction data of a node as a function of the local interaction data of its child nodes, + a mechanism for updating the dynamic data (12) which scans the tree representation and operates as a function of the geometric interaction data concerned, + a mechanism for updating the geometric data (14) which scans the tree representation for nodes subject to interaction and operates as a function of the dynamic data updated. The invention also relates to a method for simulating a set of objects in interaction, and a computer program product.

Description

Dispositif informatique pour la simulation d'un ensemble d'objets en interaction et procédé correspondant Computer device for simulating a set of interacting objects and corresponding method
L'invention concerne la simulation d'un ensemble d'objets en interaction.The invention relates to the simulation of a set of interacting objects.
La simulation d'objets en interaction est un domaine vaste qui s'étend de la simulation d'une multitude de corps mécaniques plus ou moins complexes à la simulation du comportement de molécules, par exemple des protéines.The simulation of interacting objects is a vast field that extends from the simulation of a multitude of more or less complex mechanical bodies to the simulation of the behavior of molecules, for example proteins.
Les premières approches développées ont eu pour principe le rassemblement des objets, c'est-à-dire leur rassemblement par groupe afin de définir un comportement global. Ce type d'approche est intéressant grâce à ses coûts de calcul relativement faibles.The first approaches developed were based on the collection of objects, that is their grouping together in order to define a global behavior. This type of approach is interesting because of its relatively low calculation costs.
Cependant, la réduction du coût de calcul se fait au détriment du réalisme de la simulation dans la mesure où de nombreux aspects relatifs aux relations des objets groupés sont volontairement ignorés ou réduits à leur plus simple expression.However, the reduction of the cost of calculation is to the detriment of the realism of the simulation insofar as many aspects relating to the relations of the grouped objects are voluntarily ignored or reduced to their simplest expression.
D'autres approches ont consisté à considérer des objets en interaction comme des corps articulés. Un corps articulé est généralement composé de deux corps reliés entre eux par un joint. Les deux corps peuvent être eux-mêmes des corps articulés et ainsi de suite. Cette approche a permis de modéliser avec fidélité le comportement mécanique de tels ensembles d'objets tout en conservant un niveau de performance élevé.Other approaches have been to consider interacting objects as articulated bodies. An articulated body is generally composed of two bodies connected to each other by a joint. The two bodies can be articulated bodies themselves and so on. This approach allowed to model with fidelity the mechanical behavior of such sets of objects while maintaining a high level of performance.
On parle de comportement "mécanique" car les objets interagissent essentiellement par le biais de l'articulation ou joint qui les rejoint. Il suffit alors de modéliser les articulations pour modéliser l'ensemble d'objets.We speak of "mechanical" behavior because objects interact essentially through the joint or joint that joins them. It is then enough to model the articulations to model the set of objects.
Lorsque les interactions entre les objets deviennent plus complexes, ces approches deviennent assez rapidement inefficaces, car les besoins/coûts de calcul qui leur sont associés deviennent prohibitifs.When the interactions between objects become more complex, these approaches become rather ineffective quickly, because the needs / computational costs associated with them become prohibitive.
L'invention vient améliorer la situation. A cet effet, l'invention propose un dispositif informatique pour la simulation d'un ensemble d'objets en interaction qui comporte une mémoire contenant une représentation arborescente de l'ensemble d'objets. Dans cette représentation arborescente, chacun des intermédiaires est associé à des données dynamiques, des données géométriques et des données d'interaction.The invention improves the situation. For this purpose, the invention proposes a computing device for the simulation of a set of interacting objects which comprises a memory containing a tree representation of the set of objects. In this tree representation, each of the intermediates is associated with dynamic data, geometric data and interaction data.
Le dispositif comporte en outre un contrôleur de simulation qui actionne selon un cycle répétitif :The device further comprises a simulation controller that operates in a repetitive cycle:
- un distributeur de données d'interaction sur les objets et sous-ensembles d'objets,a distributor of interaction data on objects and subsets of objects,
- un mécanisme de mise à jour des données dynamiques avec parcours de la représentation arborescente pour noeuds des sujets à interactions en fonction des données d'interaction et des données géométriques concernées, eta mechanism for updating the dynamic data with traversing of the tree representation for nodes of the interaction subjects according to the interaction data and the geometric data concerned, and
- un mécanisme de mise à jour des données géométriques, avec parcours de la représentation arborescente pour des nœuds sujets à interactions, en fonction des données dynamiques mises à jour.a mechanism for updating the geometric data, with traversing of the tree representation for nodes subject to interactions, as a function of the dynamic data updated.
Afin de tenir compte des interactions entre noeuds indépendantes des articulations, la mémoire comporte en outre des données d'interaction locale associées à certains au moins des noeuds, et le distributeur de données d'interactions comprend un mécanisme de mise à jour d'interaction, avec parcours de la représentation arborescente pour des sujets à interaction, pour mettre à jour une donnée d'interaction d'un noeud en fonction des données d'interaction locale de nœuds fils concernés.In order to take into account interactions between independent nodes of the joints, the memory further includes local interaction data associated with at least some of the nodes, and the interaction data distributor includes an interaction update mechanism, with traversal of the tree representation for interacting subjects, for updating an interaction datum of a node according to the local interaction data of concerned child nodes.
Un tel dispositif est particulièrement avantageux car il offre la possibilité de prolonger l'approche de modélisation par corps articulés, tout en tenant compte de forces non exclusivement articulaires, sans augmenter de manière significative les temps de calcul, et d'accroître par conséquent l'exploitabilité de la simulation. L'invention concerne également un procédé de simulation du comportement d'un ensemble d'objets en interaction dans lequel on maintient une représentation arborescente de l'ensemble d'objets. Dans la représentation, chaque nœud intermédiaire est associé à des données dynamiques, des données géométriques et des données d'interaction dépendantes de données de ses nœuds fils.Such a device is particularly advantageous because it offers the possibility of extending the articulated body modeling approach, while taking into account non-exclusively articular forces, without significantly increasing the calculation time, and consequently increasing the exploitability of the simulation. The invention also relates to a method for simulating the behavior of a set of interacting objects in which a tree representation of the set of objects is maintained. In the representation, each intermediate node is associated with dynamic data, geometric data and data dependent interaction data of its child nodes.
Le procédé met en oeuvre répétitivement un cycle comprenant les étapes suivantes :The process repetitively uses a cycle comprising the following steps:
a. distribuer les données d'interaction sur certains des objets et sous-ensembles d'objets,at. distribute interaction data on some of the objects and subsets of objects,
b. parcourir la représentation arborescente pour des nœuds sujets à interaction, tout en mettant à jour des données dynamiques de ces noeuds, en fonction des données d'interaction et des données géométriques concernées, etb. traversing the tree representation for interacting subject nodes, while updating dynamic data of these nodes, based on the interaction data and geometric data concerned, and
c. parcourir à nouveau la représentation arborescente pour des nœuds sujets à interaction, tout en mettant à jour des données géométriques, en fonction des données dynamiques telles que mises à jour à l'étape b.vs. re-browsing the tree representation for interacting subject nodes, while updating geometric data, based on the dynamic data as updated in step b.
Plus spécifiquement, l'étape a. comprend :More specifically, step a. includes:
al. un parcours préalable de la représentation arborescente pour des nœuds sujets à interaction, avec la mise à jour des données d'interaction de ces noeuds, en fonction de données d'interaction locale de nœuds fils concernés.al. a preliminary path of the tree representation for interacting nodes, with the update of the interaction data of these nodes, as a function of local interaction data of concerned child nodes.
D'autres caractéristiques et avantages de l'invention apparaîtront mieux à la lecture de la description qui suit tirée d'exemples donnés à titre illustratif et non limitatif à partir des dessins sur lesquels :Other characteristics and advantages of the invention will appear better on reading the description which follows, taken from examples given by way of non-limiting illustration from the drawings in which:
- la figure 1 représente un diagramme schématique d'un dispositif informatique selon l'invention ; - la figure 2 représente un diagramme bloc d'une implémentation par des fonctions d'une boucle de simulation effectuée par le dispositif de la figure 1 ;FIG. 1 represents a schematic diagram of a computing device according to the invention; FIG. 2 represents a block diagram of an implementation by functions of a simulation loop performed by the device of FIG. 1;
- la figure 3 représente un diagramme bloc d'une première fonction de la boucle de simulation de la figure 2 ;FIG. 3 represents a block diagram of a first function of the simulation loop of FIG. 2;
- la figure 4 représente un diagramme bloc d'une fonction de la figure 3 ;FIG. 4 represents a block diagram of a function of FIG. 3;
- les figures 5 et 6 représentent schématiquement deux fonctions de la figure 4 ;- Figures 5 and 6 schematically show two functions of Figure 4;
- la figure 7 représente un diagramme bloc d'une autre fonction de la figure 3 ;FIG. 7 represents a block diagram of another function of FIG. 3;
- la figure 8 représente un diagramme bloc d'une deuxième fonction de la boucle de simulation de la figure 2 ;FIG. 8 represents a block diagram of a second function of the simulation loop of FIG. 2;
- la figure 9 représente un diagramme bloc d'une troisième fonction de la boucle de simulation de la figure 2 ;FIG. 9 represents a block diagram of a third function of the simulation loop of FIG. 2;
- la figure 10 représente un diagramme bloc d'une quatrième fonction de la boucle de simulation de la figure 2 ; etFIG. 10 represents a block diagram of a fourth function of the simulation loop of FIG. 2; and
- la figure 11 représente un diagramme bloc d'une cinquième fonction de la boucle de simulation de la figure 2.FIG. 11 represents a block diagram of a fifth function of the simulation loop of FIG. 2.
Les dessins et la description ci-après contiennent, pour l'essentiel, des éléments de caractère certain. Ils pourront donc non seulement servir à mieux faire comprendre la présente invention, mais aussi contribuer à sa définition, le cas échéant.The drawings and the description below contain, for the most part, elements of a certain character. They can therefore not only serve to better understand the present invention, but also contribute to its definition, if any.
La présente description est de nature à faire intervenir des éléments susceptibles de protection par le droit d'auteur et/ou le copyright. Le titulaire des droits n'a pas d'objection à la reproduction à l'identique par quiconque du présent document de brevet ou de sa description, telle qu'elle apparaît dans les dossiers officiels. Pour le reste, il réserve intégralement ses droits.This description is likely to involve elements likely to be protected by copyright and / or copyright. The rights holder has no objection to the identical reproduction by anyone of this patent document or its description, as it appears in the official records. For the rest, he reserves his rights in full.
L'invention couvre également, en tant que produits, les éléments logiciels décrits, mis à disposition sous tout "médium" (support) lisible par ordinateur. L'expression "médium lisible par ordinateur" comprend les supports de stockage de données, magnétiques, optiques et/ou électroniques, aussi bien qu'un support ou véhicule de transmission, comme un signal analogique ou numérique.The invention also covers, as products, the software elements described, made available under any "medium" (support) readable by computer. The term "computer readable medium" includes data storage media, magnetic, optical and / or electronic, as well as a medium or transmission vehicle, such as an analog or digital signal.
En outre, la description détaillée est augmentée de l'annexe A, qui donne la formulation de certaines formules mathématiques mises en œuvres dans le cadre de l'invention. Cette Annexe est mise à part dans un but de clarification, et pour faciliter les renvois. Elle est partie intégrante de la description, et pourra donc non seulement servir à mieux faire comprendre la présente invention, mais aussi contribuer à sa définition, le cas échéant.In addition, the detailed description is augmented by Appendix A, which gives the formulation of certain mathematical formulas implemented in the context of the invention. This Annex is set aside for the purpose of clarification and to facilitate referrals. It is an integral part of the description, and can therefore not only serve to better understand the present invention, but also contribute to its definition, if any.
Une première approche de la simulation mécanique de corps articulés a été proposée dans l'article "A divide-and-conquer articulated body algorithm for parallel o(log(n)) calculation ofrigid body dynamics. part 1: Basic Algorithm", International Journal of Robotics Research 18(9):867-875 par Featherstone, noté ci-après Featherstone '99.A first approach to the mechanical simulation of articulated bodies has been proposed in the article "A divide-and-conquer articulated body algorithm for parallel o (log (n)) calculation ofrigid body dynamics. Part 1: Basic Algorithm", International Journal of Robotics Research 18 (9): 867-875 by Featherstone, hereinafter referred to as Featherstone '99.
Featherstone '99 décrit un algorithme de découpage d'un corps articulé en un arbre binaire, pour calculer l'ensemble des composantes de force et de position de manière récursive. Par corps articulé, on entend l'ensemble qui comprend une articulation, ou joint, qui relie entre eux deux corps pouvant être eux-mêmes des corps articulés.Featherstone '99 describes an algorithm for splitting an articulated body into a binary tree, to compute the set of force and position components recursively. Articulated body means the assembly which comprises a joint, or joint, which connects two bodies that can themselves be articulated bodies.
La notion de corps articulé ne doit donc pas être restreinte à sa simple connotation mécanique. La notion d'articulation doit également être comprise au sens large. Par exemple une articulation peut comporter un nombre variable de degrés de liberté, compris entre zéro (couplage rigide des deux sous-ensembles) et six (mouvement relatif des deux sous-ensembles non contraint). L'arbre binaire comporte des nœuds feuilles qui représentent les objets les plus élémentaires de l'objet articulé, et qui sont chacun reliés à un joint, ou noeud. Ainsi, chaque nœud de l'arbre binaire est lui-même un corps articulé qui désigne un sous- ensemble d'objets.The concept of an articulated body must not therefore be restricted to its mere mechanical connotation. The notion of articulation must also be understood in a broad sense. For example, an articulation may comprise a variable number of degrees of freedom, ranging from zero (rigid coupling of the two subsets) to six (relative movement of the two non-constrained subsets). The binary tree has leaf nodes which represent the most basic objects of the articulated object, and which are each connected to a joint, or node. Thus, each node of the binary tree is itself an articulated body which designates a subset of objects.
L'article "An Efficient, Error-Bounded Approximation Algorithm for Simulating Quasi- Statics o/Complex Linkages", Proceedings of ACM Symposium on Solid and Physical Modeling, 2005, par Redon et Lin, noté ci-après SPM '05, vient compléter cette approche en définissant une métrique d'accélération des joints.The article "An Efficient, Error-Bounded Approximation Algorithm for Simulating Quasi- Statics o / Complex Linkages", Proceedings of ACM Symposium on Solid and Physical Modeling, 2005, by Redon and Lin, noted below SPM '05, completes this approach by defining an acceleration metric of the joints.
Cette métrique permet d'évaluer l'accélération du corps articulé associé à un joint donné, à partir des seules données de ce joint, sans connaître les données des feuilles. Il est alors possible de "rigidifier" l'arbre, en annulant l'accélération d'un corps articulé pour lequel la métrique d'accélération est inférieure à un seuil choisi. La rigidification de l'arbre permet ainsi de restreindre le parcours de l'arbre à un nombre de noeuds réduit, tout en maîtrisant la fidélité de la simulation.This metric is used to evaluate the acceleration of the articulated body associated with a given joint, from the data of this joint alone, without knowing the data of the sheets. It is then possible to "stiffen" the shaft, by canceling the acceleration of an articulated body for which the acceleration metric is less than a chosen threshold. The rigidification of the tree thus makes it possible to restrict the path of the tree to a reduced number of nodes, while controlling the fidelity of the simulation.
Dans l'article "Adaptative Dynamics cf Articulated Bodies", ACM Transactions on Graphics (SIGGRAPH 2005), 24(3). par Redon, Gallopo et Lin, noté ci-après SIGGRAPH '05, la qualité de la simulation est améliorée en traitant également le cas dynamique, et plus seulement quasi-statique, et en en ajoutant une méthode de prise en compte de la rigidification, afin d'éviter de créer des forces n'ayant aucune réalité concrète.In the article "Adaptive Dynamics cf Articulated Bodies", ACM Transactions on Graphics (SIGGRAPH 2005), 24 (3). by Redon, Gallopo and Lin, noted below SIGGRAPH '05, the quality of the simulation is improved by also treating the dynamic case, and not only quasi-static, and by adding a method of taking it into account of the stiffening, to avoid creating forces with no concrete reality.
Les modes de réalisation décrits ici tirent avantage de l'ensemble de ces méthodes, et pourront parfois être implémentés comme des extensions de celles-ci, bien que de nombreuses autres implémentations de l'invention peuvent être envisagées.The embodiments described herein take advantage of all of these methods, and may sometimes be implemented as extensions thereof, although many other implementations of the invention may be contemplated.
Pour la simulation, chaque nœud de l'arbre est associé à diverses données. On distingue trois types principaux de données qui seront décrites plus avant par la suite : les données d'interaction, les données dynamiques, eι les données géométriques. Les données d'interaction peuvent être définies comme suit : elles représentent des forces qui s'appliquent à un nœud donné, ou à un objet donné dans le sous-ensemble d'objets que représente ce nœud. Ces forces peuvent être classées en deux classes de forces :For simulation, each node of the tree is associated with various data. There are three main types of data that will be described later: interaction data, dynamic data and geometric data. The interaction data can be defined as follows: it represents forces that apply to a given node, or to a given object in the subset of objects represented by that node. These forces can be classified into two classes of forces:
- les forces de contrainte, liées aux interactions des objets par le biais des articulations, et- forces of constraint, related to the interactions of objects through the joints, and
- les forces locales, qui englobent toutes les autres forces pouvant s'appliquer à un nœud donné.- local forces, which include all the other forces that can be applied to a given node.
Dans l'exemple décrit ici, les objets sont des molécules et des atomes, et les forces locales comprennent d'une part les forces externes qui s'appliquent individuellement à des joints, et d'autre part l'ensemble des forces inter-atomiques et inter-moléculaires, telles que les forces électrostatiques, les forces de van der Waals etc.In the example described here, the objects are molecules and atoms, and the local forces include on the one hand the external forces that apply individually to joints, and on the other hand all the inter-atomic forces. and inter-molecular, such as electrostatic forces, van der Waals forces etc.
Les données dynamiques représentent des données composites caractéristiques de la dynamique des corps articulés. Ces données permettent de calculer des métriques d'accélération et de vitesse de joint sans connaître nécessairement l'ensemble des données de position et de force de l'ensemble des objets. Leur application apparaîtra mieux par la suite.Dynamic data represent composite data characteristic of the dynamics of articulated bodies. These data make it possible to compute metrics of acceleration and speed of joint without necessarily knowing all the data of position and force of all the objects. Their application will appear better later.
Les données géométriques représentent un ensemble de données caractéristiques des corps articulés qui dépendent exclusivement des positions relatives des objets entre eux. Ces données permettent notamment de réaliser la plupart des calculs dans des repères locaux, ce qui simplifie la simulation. Ici encore, ces données seront explicitées par la suite.Geometric data represent a set of characteristic data of articulated bodies that depend exclusively on the relative positions of objects between them. This data makes it possible to perform most of the calculations in local references, which simplifies the simulation. Here again, these data will be explained later.
L'exemple décrit ici s'applique à une simulation quasi-statique des objets. Cela signifie que l'on considère que leur vitesse est nulle à chaque instant. On a représenté sur la figure 1 une représentation schématique d'un dispositif selon l'invention.The example described here applies to a quasi-static simulation of objects. This means that we consider that their speed is zero at every moment. FIG. 1 shows a schematic representation of a device according to the invention.
Le dispositif 2 comporte un contrôleur de simulation 4, un bloc de simulation 6 et une mémoire 8. Le bloc de simulation 6 comporte un distributeur de données d'interaction 10, un mécanisme de mise à jour de données dynamiques 12 et un mécanisme de mise à jour de données géométriques 14.The device 2 comprises a simulation controller 4, a simulation block 6 and a memory 8. The simulation block 6 comprises an interaction data distributor 10, a dynamic data update mechanism 12 and a setting mechanism. Geometric Data Update 14.
Lors d'une simulation, le contrôleur 4 actionne répétitivement le bloc de simulation 6 selon une boucle de simulation qui sera décrite plus bas sur la base de données contenues dans la mémoire 8.During a simulation, the controller 4 repetitively actuates the simulation block 6 according to a simulation loop which will be described below on the basis of data contained in the memory 8.
Le dispositif 2 peut être réalisé sous plusieurs formes. Le mode de réalisation préféré actuel est un programme informatique qui implémente le contrôleur 4 et le bloc 6 sous une forme exécutable sur un ordinateur disponible dans le commerce, par exemple un ordinateur muni d'un microprocesseur cadencé à 1.7 GHz, doté de 1 GB de mémoire RAM, et d'un disque dur de taille suffisante pour contenir un système d'exploitation et le code du programme.The device 2 can be realized in several forms. The presently preferred embodiment is a computer program that implements the controller 4 and the block 6 in executable form on a commercially available computer, for example a computer having a 1.7 GHz microprocessor, having 1 GB of RAM, and a hard disk of sufficient size to contain an operating system and program code.
Néanmoins, d'autres formes de réalisation sont possibles, comme la réalisation sous la forme d'un circuit imprimé spécialisé (carte fille, ASIC, etc.) ou d'un processeur dédié (FPGA, microchip, etc.).Nevertheless, other embodiments are possible, such as the embodiment in the form of a specialized printed circuit (daughter card, ASIC, etc.) or a dedicated processor (FPGA, microchip, etc.).
On a représenté sur la figure 2 un diagramme schématique d'une implémentation de la boucle de simulation réalisée par le bloc 6. Dans cette boucle, des fonctions Upd lnt () 20, Sprd_Int() 22, Get_Dyn_Coeff() 24, Upd_Dyn() 26, et Upd_Geo() 28, sont appelés successivement.FIG. 2 shows a schematic diagram of an implementation of the simulation loop carried out by block 6. In this loop, functions Upd lnt () 20, Sprd_Int () 22, Get_Dyn_Coeff () 24, Upd_Dyn () 26, and Upd_Geo () 28, are called successively.
La boucle représentée sur la figure 2 représente les principales étapes de la simulation dans une boucle de fonctionnement donnée. Ces étapes sont respectivement la mise à jour des interactions inter-objets de nature non articulaire, la diffusion de ces interactions, l'obtention et la mise à jour des paramètres dynamiques de simulation, puis la mise à jour des paramètres géométriques de simulation.The loop shown in FIG. 2 represents the main steps of the simulation in a given operating loop. These steps are respectively the update of inter-object interactions of non-articular nature, the diffusion of these interactions, obtaining and updating dynamic simulation parameters, and then updating geometric simulation parameters.
Bien que les différentes étapes représentées sur la figure 2 correspondent à des fonctions dans le programme implémentant l'invention, il apparaîtra par la suite que ces fonctions comportent elles-mêmes plusieurs sous fonctions, et doivent être considérées comme des composants fonctionnels que l'homme du métier sera libre d'implémenter comme il l'entend.Although the different steps represented in FIG. 2 correspond to functions in the program implementing the invention, it will subsequently appear that these functions themselves comprise several subfunctions, and must be considered as functional components that the human being the profession will be free to implement as he sees fit.
D'un point de vue fonctionnel, on peut considérer que :From a functional point of view, we can consider that:
* les fonctions Upd_Int() 20 et Sprd_Int() 22 constituent un noyau du distributeur de données 10,* The functions Upd_Int () 20 and Sprd_Int () 22 constitute a kernel of the data distributor 10,
* les fonctions Get_Dyn_Coeff() 24 et Upd_Dyn() 26 constituent un noyau du mécanisme de mise à jour de données dynamiques 12, etthe functions Get_Dyn_Coeff () 24 and Upd_Dyn () 26 constitute a core of the dynamic data update mechanism 12, and
* la fonction Upd_Geo() 28 constitue un noyau du mécanisme de mise à jour de données géométriques 14.* The function Upd_Geo () 28 constitutes a kernel of the mechanism for updating geometric data 14.
La figure 3 représente une implémentation possible de la fonction Upd_Int() 20 de la figure 2. Comme on peut le voir sur cette figure, la fonction Upd_Int() 20 comporte trois sous fonctions, Upd_BB() 30, Upd_Int_L() 32 et Upd_Int_Val() 34.FIG. 3 represents a possible implementation of the function Upd_Int () of FIG. 2. As can be seen in this figure, the function Upd_Int () 20 comprises three subfunctions, Upd_BB () 30, Upd_Int_L () 32 and Upd_Int_Val () 34.
Dans l'approche classique, dès lors qu'un sous-ensemble d'objets est rigidifié, celui-ci cesse temporairement d'être traité dans la simulation. Comme les forces considérées dans ce type de simulation sont de type mécanique, ce sous-ensemble peut être très proche dans l'espace d'un autre sous-ensemble d'objets sans que cela n'ait de conséquence. Lorsque l'on souhaite simuler le comportement d'une protéine ou d'une chaîne moléculaire, des forces locales de type interatomiques du type électrostatique ou de van der Waals viennent s'ajouter aux forces de contrainte et extérieures.In the classical approach, when a subset of objects is rigidified, it temporarily stops being processed in the simulation. Since the forces considered in this type of simulation are of mechanical type, this subset can be very close in the space of another subset of objects without this having any consequence. When it is desired to simulate the behavior of a protein or a molecular chain, local electrostatic or van der Waals type interatomic forces are added to the forces of stress and external forces.
Dès lors, la simulation "mécanique" n'est plus suffisante, car il devient possible qu'un sous-ensemble rigidifié vienne interagir avec un autre sous-ensemble. Il est alors nécessaire de le "dé-rigidifïer" pour tenir compte de ces nouvelles forces locales, qui ne dépendent que de la position relative des objets entre eux. Cela n'est pas possible à réaliser dans l'approche existante, à moins d'en abandonner tous les avantages.Therefore, the "mechanical" simulation is no longer sufficient, because it becomes possible for a rigidized sub-assembly to interact with another subset. It is then necessary to "de-rigidify" it to take account of these new local forces, which depend only on the relative position of the objects between them. This is not possible in the existing approach unless you give up all the benefits.
La fonction Upd_Int() 20 permet de tenir compte de ces forces locales. Pour cela, cette fonction part d'une situation moléculaire donnée, et permet de déterminer dans un premier temps quels sont les objets susceptibles d'interagir entre eux. Dans un deuxième temps, cette fonction calcule les forces locales correspondantes, et intègre ces données de manière ordonnée.The function Upd_Int () 20 allows to take into account these local forces. For that, this function starts from a given molecular situation, and makes it possible to determine at first what are the objects likely to interact with each other. In a second step, this function calculates the corresponding local forces, and integrates these data in an orderly way.
La fonction Upd_BB() 30 est une adaptation de la détection d'interaction à la simulation moléculaire. Comme les forces interatomiques sont principalement à courte distance, cette fonction définit des espaces d'interaction potentielle autour de chaque objet.The function Upd_BB () 30 is an adaptation of interaction detection to molecular simulation. Since interatomic forces are mainly short-range, this function defines potential interaction spaces around each object.
Plus précisément, ces espaces sont définis comme des "boîtes orientées" entourant un objet ou groupe d'objets. Les boîtes elles-mêmes sont définies pour chaque nœud de l'arbre binaire au début de la simulation, et la fonction Upd_BB() 30 opère en mettant à jour la position d'un point de référence et une direction d'orientation pour chaque boîte.More precisely, these spaces are defined as "oriented boxes" surrounding an object or group of objects. The boxes themselves are defined for each node of the binary tree at the beginning of the simulation, and the function Upd_BB () operates by updating the position of a reference point and an orientation direction for each box. .
Les principes des boîtes orientées, appelées "Oriented Bounding Box" ou OBB dans la littérature, sont décrits dans l'article "Obbtree: a hierarchical structure for rapid interférence détection" par Gottschalk et al. dans ACM Translations on Graphics (SIGGRAPH 1996).The principles of oriented boxes, called "Oriented Bounding Box" or OBB in the literature, are described in the article "Obbtree: a hierarchical structure for rapid interference detection" by Gottschalk et al. in ACM Translations on Graphics (SIGGRAPH 1996).
Comme les OBB dépendent exclusivement des positions des objets qu'elles entourent, et comme elles sont exprimées dans un référentiel lié au nœud auquel elles sont rattachées, elles sont inchangées lorsqu'un nœud est rigidifié. La fonction Upd_OBB() 30 opère donc uniquement sur les nœuds dont la position a changé lors de l'étape de simulation précédente. Cette fonction traverse l'arbre binaire de bas en haut de manière sélective, en ne traversant que les noeuds dits actifs, comme cela sera expliqué plus bas.Since OBBs depend exclusively on the positions of the objects they surround, and as they are expressed in a repository linked to the node to which they are attached, they are unchanged when a node is stiffened. The function Upd_OBB () 30 therefore operates only on the nodes whose position has changed during the preceding simulation step. This function traverses the binary tree from bottom to top selectively, crossing only the so-called active nodes, as will be explained below.
Les OBB mises à jour forment la base de travail utilisée par la fonction Upd_Int_L() 32. Cette fonction, dont une implémentation est montrée sur la Figure 4 parcourt récursivement l'arbre binaire de haut en bas, depuis la racine RN.The updated OBBs form the workbase used by the Upd_Int_L () function 32. This function, an implementation of which is shown in Figure 4 recursively traverses the binary tree from top to bottom, from the root RN.
La fonction Upd_Int_L() maintient pour chaque nœud deux listes principales Int_L et Int L Old. A chaque nœud, la liste Int L (respectivement Int L Old) contient des paires de nœuds appartenant au sous-ensemble d'objets désignés par le nœud donné qui interagissent par des forces locales dans la boucle en cours (respectivement la boucle précédente).The function Upd_Int_L () maintains for each node two main lists Int_L and Int L Old. At each node, the list Int L (respectively Int L Old) contains pairs of nodes belonging to the subset of objects designated by the given node which interact by local forces in the current loop (respectively the previous loop).
Ces listes permettent de détecter les interactions locales qui ont changé, c'est-à-dire les interactions locales qui ont été modifiées par les positions des objets à la suite de la boucle précédente.These lists make it possible to detect the local interactions that have changed, that is to say the local interactions that have been modified by the positions of the objects following the previous loop.
La fonction Upd_Int() part d'un test d'activité 3200 du nœud courant. Ce test est lié à la métrique d'accélération du nœud courant (ou à une autre métrique appropriée le cas échéant), et peut être réalisé sous la forme d'un calcul de cette métrique, ou sous la forme de la lecture d'une donnée (communément appelée "flag") qui désigne le caractère actif ou non du noeud, décidé en fonction de la valeur de cette métrique.The function Upd_Int () starts from a 3200 activity test of the current node. This test is related to the acceleration metric of the current node (or other appropriate metric where appropriate), and can be realized as a calculation of this metric, or as a reading of a data (commonly called "flag") which indicates the active character or not of the node, decided according to the value of this metric.
Dans l'exemple décrit ici, un nœud est considéré comme actif si la valeur de sa métrique d'accélération est supérieure à un seuil choisi par l'utilisateur, c'est-à-dire s'il est considéré comme non-rigidifïé. Si le nœud est rigide, cela signifie que les accélérations globales au sein du corps articulé associé au nœud sont considérées comme nulle dans le cadre de la simulation. Comme on l'a vu plus haut, cela signifie que les positions des objets au sein de ce corps n'ont pas changé, puisque les accélérations de ce corps ont été considérées comme nulles. Ainsi, les listes interactions IntJL et Int Old L de la boucle précédente restent valables pour ce nœud et tous ces nœuds enfants, et la fonction s'arrête (3202).In the example described here, a node is considered active if the value of its acceleration metric is greater than a threshold chosen by the user, that is to say if it is considered non-rigidified. If the node is rigid, it means that the global accelerations within the articulated body associated with the node are considered as zero within the framework of the simulation. As we have seen above, this means that the positions of the objects within this body have not changed, since the accelerations of this body have been considered as null. Thus, the IntJL and Int Old L interaction lists of the preceding loop remain valid for this node and all these child nodes, and the function stops (3202).
Si le nœud C est actif, la liste Int L(C) de la boucle précédente devient la liste Int Old L(C) pour la boucle courante par écrasement (3204), et la liste M L(C) est remise à zéro (3206).If node C is active, the list Int L (C) of the preceding loop becomes the list Int Old L (C) for the current loop by overwrite (3204), and the list ML (C) is reset (3206). ).
Ensuite, une boucle est entamée pour mettre en queue toutes les interactions possibles entre les enfants du nœud C. Ainsi, les deux nœuds-fils immédiats A et B sont récupérés par une fonction CH() en 3208, et leurs OBB respectives OBBA et OBBB sont récupérées en 3210.Then, a loop is started to queue all the possible interactions between the children of the node C. Thus, the two immediate-son nodes A and B are recovered by a function CH () in 3208, and their OBB respective OBBA and OBBB are recovered in 3210.
Le couple (OBBA, OBBB) est alors empilé dans une liste Q (3212), qui sert de pile de stockage des interactions potentielles entre OBB. La boucle mentionnée a pour condition d'arrêt le vidage de la pile Q (3214), et la fonction Upd_Int_L(C) s'arrête lorsque cette condition est remplie (3216).The pair (OBBA, OBBB) is then stacked in a Q list (3212), which serves as a storage stack for potential interactions between OBBs. The mentioned loop has the condition of stopping the emptying of the stack Q (3214), and the function Upd_Int_L (C) stops when this condition is fulfilled (3216).
La boucle commence par un dépilage de la liste Q, qui permet de récupérer le dernier couple d'interaction potentielle (OBBE, OBBF) introduit dans Q (3218). Lors de la première itération de cette boucle, il s'agit évidemment du couple (OBBA, OBBB) de l'étape 3212.The loop starts with an unstacking of the list Q, which makes it possible to recover the last potential interaction torque (OBBE, OBBF) introduced in Q (3218). During the first iteration of this loop, it is obviously the pair (OBBA, OBBB) of step 3212.
En 3220, une fonction Upd_Pos() met à jour les positions dans le monde réel des OBB OBBE et OBBF, afin de permettre d'établir leur collision éventuelle. Cette mise à jour de position "réelle" est distincte de celle réalisée dans la fonction Upd_OBB() 30, qui met à jour la position relative de chaque OBB dans le référentiel de son nœud.In 3220, an Upd_Pos () function updates the OBB OBBE and OBBF OBBF real-world positions, in order to establish their eventual collision. This "real" position update is distinct from that performed in the Upd_OBB () function 30, which updates the relative position of each OBB in the repository of its node.
La distinction entre position réelle et position relative permet d'implémenter l'algorithme de manière plus efficace et plus intégrée. Il serait néanmoins possible de mettre à jour la position réelle des OBB directement dans la fonction Upd OBBQ 30. En 3222, la fonction Coll() détermine si OBBE et OBBF sont en collision, c'est-à-dire si leurs boîtes orientées présentent une intersection. Si ce n'est pas le cas, alors il n'y a pas interaction locale, et la boucle est réinitialisée en 3214 pour tester l'interaction potentielle suivante.The distinction between real position and relative position makes it possible to implement the algorithm in a more efficient and integrated way. It would nevertheless be possible to update the actual position of the OBBs directly in the Upd OBBQ function 30. In 3222, the Coll () function determines whether OBBE and OBBF collide, that is, if their oriented boxes have an intersection. If this is not the case, then there is no local interaction, and the loop is reset to 3214 to test the next potential interaction.
Dans le cas où OBBE et OBBF, qui sont associées à des nœuds respectifs E et F, sont en collision, quatre possibilités existent :In the case where OBBE and OBBF, which are associated with respective nodes E and F, are in collision, four possibilities exist:
a) E et F sont tous les deux des feuilles de l'arbre, ce qui signifie que ces objets interagissent entre eux, et que la fonction s'arrête ;a) E and F are both leaves of the tree, which means that these objects interact with each other, and that the function stops;
b) F est un objet articulé et E est une feuille, ce qui signifie qu'il faut explorer F pour déterminer les interactions de ses nœuds fils avec l'objet associé à E, puis déterminer les interactions des nœuds fils de F entre eux ;b) F is an articulated object and E is a leaf, which means that it is necessary to explore F to determine the interactions of its child nodes with the object associated with E, then to determine the interactions of the child nodes of F between them;
c) E est un objet articulé et F est une feuille, ce qui signifie qu'il faut explorer E pour déterminer les interactions de ses nœuds fils avec l'objet associé à F, puis déterminer les interactions des nœuds fils de E entre eux ; etc) E is an articulated object and F is a leaf, which means that it is necessary to explore E to determine the interactions of its child nodes with the object associated with F, then to determine the interactions of the child nodes of E between them; and
d) E et F sont tous deux des objets articulés, ce qui signifie qu'il faut explorer E et F pour déterminer les interactions entre leurs nœuds fils respectifs, puis déterminer les interactions des nœuds fils de E et de F entre eux.d) E and F are both articulated objects, which means that E and F must be explored to determine the interactions between their respective child nodes, and then determine the interactions of the child nodes of E and F between them.
Pour cela, un test 3224 détermine si E est un nœud feuille, en appelant une fonction CH_OBB() avec OBBE. La fonction CH_0BB() est similaire à la fonction CH(), sauf qu'elle prend en entrée une OBB et pas un nœud.For this, a test 3224 determines if E is a leaf node, by calling a function CH_OBB () with OBBE. The CH_0BB () function is similar to the CH () function, except that it takes an OBB input instead of a node.
Si E est un nœud feuille, la fonction DPl () est appelée en 3230, qui gère les cas a) et b). Un exemple d'implémentation de la fonction DP1() est représenté sur la figure 5. Dans cette fonction, un test 3232 détermine si F est un nœud feuille, en appelant la fonction CH_OBB() avec OBBF. Si F est un nœud feuille, alors le cas a) s'applique, et la liste Int L(C) reçoit la paire (E, F) en 3234, la fonction DP1() s'arrête en 3236, et la boucle de Upd Ιnt L(C) reprend en 3214 avec le test de la pile Q.If E is a leaf node, the function DPl () is called at 3230, which handles cases a) and b). An exemplary implementation of the function DP1 () is shown in Figure 5. In this function, a test 3232 determines if F is a leaf node, calling the function CH_OBB () with OBBF. If F is a leaf node, then the case a) applies, and the list Int L (C) receives the pair (E, F) at 3234, the function DP1 () stops at 3236, and the loop of Upd Ιnt L (C) resumes in 3214 with the Q battery test.
Si F est un objet articulé, alors FA et FB sont ses fils, et le cas b) s'applique. Pour déterminer les interactions des fils de F avec E, on récupère les OBB de FA et FB en 3238, et on empile alors deux interactions potentielles (OBBE, OBBFA) en 3240 et (OBBE, OBBFB) en 3242 dans la pile Q.If F is an articulated object, then FA and FB are his sons, and case b) applies. To determine the interactions of the son of F with E, the OBBs of FA and FB are recovered at 3238, and two potential interactions (OBBE, OBBFA) at 3240 and (OBBE, OBBFB) are then stacked at 3242 in the Q stack.
Ensuite, les interactions des fils de F entre eux sont déterminées en appelant Upd_Int_L() avec F en 3244. Cet appel de fonction permet de mettre à jour les listes Upd Old L(F) et Upd L(F). Enfin la fonction DP1() s'arrête en 3236, et la boucle de Upd Ιnt L(C) reprend en 3214 avec le test de la pile Q.Then, the interactions of the F wires between them are determined by calling Upd_Int_L () with F at 3244. This function call is used to update the Upd Old L (F) and Upd L (F) lists. Finally the function DP1 () stops at 3236, and the loop of Upd Ιnt L (C) resumes at 3214 with the test of the stack Q.
Si E est un objet articulé, alors EA et EB sont ses fils. Ensuite une fonction DP2() est appelée en 3250, qui gère les cas c) et d). Un exemple d'implémentation de la fonction DP2() est représenté sur la figure 6.If E is an articulated object, then EA and EB are his sons. Then a function DP2 () is called in 3250, which handles cases c) and d). An example of implementation of the function DP2 () is shown in FIG.
Dans cette fonction, un test 3252 détermine si F est un nœud feuille, en appelant la fonction CH_OBB() avec OBBF.In this function, a test 3252 determines if F is a leaf node, calling the function CH_OBB () with OBBF.
Si F est un nœud feuille, alors on est dans le cas c). Pour déterminer les interactions des fils de E avec F, on récupère les OBB de EA et EB en 3254, et on empile alors deux interactions potentielles (OBBEA, OBBF) en 3256 et (OBBEB, OBBF) en 3258 dans la pile Q.If F is a leaf node, then we are in case c). To determine the interactions of the son of E with F, the OBBs of EA and EB are retrieved at 3254, and two potential interactions (OBBEA, OBBF) at 3256 and (OBBEB, OBBF) are stacked at 3258 in the Q stack.
Ensuite, les interactions des fils de E entre eux sont déterminées en appelant Upd_Int_L() avec E en 3260. Cet appel de fonction permet de mettre à jour les listes Upd_01d_L(E) et Upd_L(E). Enfin, la fonction DP2() s'arrête en 3262, et la boucle de Upd_Int_L(C) reprend en 3214 avec le test de la pile Q. Si F est un objet articulé, alors FA et FB sont ses fils, et le cas d) s'applique. Pour déterminer les interactions des fils de E avec ceux de F, on appelle une fonction Max_Vol() avec OBBE et OBBF en 3264.Then, the interactions of the E wires between them are determined by calling Upd_Int_L () with E at 3260. This function call is used to update the Upd_01d_L (E) and Upd_L (E) lists. Finally, the DP2 () function stops at 3262, and the Loop of Upd_Int_L (C) resumes at 3214 with the Q battery test. If F is an articulated object, then FA and FB are his sons, and case d) applies. To determine the interactions of the threads of E with those of F, we call a function Max_Vol () with OBBE and OBBF at 3264.
La fonction Max_Vol() détermine laquelle de OBBE et OBBF a le volume le plus important, afin d'explorer les interactions des fils du nœud associé avec l'autre nœud. Cela permet d'optimiser les performances de Upd_Int_L().The Max_Vol () function determines which of OBBE and OBBF has the largest volume, in order to explore the thread interactions of the node associated with the other node. This optimizes the performance of Upd_Int_L ().
En résultat, on obtient trois OBB, OBBMA, OBBMB et OBBMin. Ainsi, si OBBE est plus volumineuse que OBBF, alors OBBMA contient OBBEA, OBBMB contient OBBEB et OBBMin contient OBBF. Dans le cas inverse, OBBMA contient OBBFA, OBBMB contient OBBFB et OBBMin contient OBBE.As a result, three OBBs, OBBMAs, OBBMBs and OBBMin are obtained. Thus, if OBBE is larger than OBBF, then OBBMA contains OBBEA, OBBMB contains OBBEB, and OBBMin contains OBBF. In the opposite case, OBBMA contains OBBFA, OBBMB contains OBBFB and OBBMin contains OBBE.
On empile alors deux interactions potentielles (OBBMA, OBBMin) en 3266 et (OBBMB, OBBMin) en 3268 dans la pile Q. Ensuite, les interactions des fils de E entre eux sont déterminées en appelant Upd_Int_L() avec E en 3270, et celles des fils de F entre eux sont déterminées en appelant Upd_Int_L() avec F en 3272.Two potential interactions (OBBMA, OBBMin) are then stacked at 3266 and (OBBMB, OBBMin) at 3268 in the Q stack. Then the interactions of the E wires between them are determined by calling Upd_Int_L () with E at 3270, and those wires of F between them are determined by calling Upd_Int_L () with F in 3272.
Ces appels de fonction permettent de mettre à jour les listes Upd Old L(E), Upd L(E), Upd_01d_L(F) et Upd_L(F). Enfin, la fonction DP2() s'arrête en 3262, et la boucle de Upd Ιnt L(C) reprend en 3214 avec le test de la pile Q.These function calls are used to update the Old Upd (L), Upd L (E), Upd_01d_L (F), and Upd_L (F) lists. Finally, the DP2 () function stops at 3262, and the Upd Ιnt L (C) loop resumes at 3214 with the Q battery test.
Comme cela apparaît implicitement, la fonction Upd_Int() appliquée à un nœud C présente donc deux récursions imbriquées.As it appears implicitly, the function Upd_Int () applied to a node C thus presents two nested recursions.
La première récursion concerne l'empilage et le dépilage de la pile Q, de manière à analyser tous les couples d'interaction potentielle entre les fils du nœud C, quelque soit leur niveau de profondeur par rapport à ce nœud.The first recursion relates to the stacking and unstacking of the stack Q, so as to analyze all the potential interaction pairs between the wires of the node C, whatever their level of depth with respect to this node.
La deuxième récursion concerne l'appel sélectif de la fonction Upd_Int() avec des nœuds fils de C, qui permet de mettre à jour les listes Upd_01d_L() et Upd_L() de tous les nœuds actifs. La détermination des interactions locales dans l'arbre binaire est principalement basée sur les propriétés des OBB, comme on l'a vu plus haut. Cependant, bien que les OBB constituent un outil intéressant, d'autres outils peuvent être employés, comme des tables de prédiction d'interaction, ou d'autres outils adaptés que l'homme du métier saura envisager au vu de l'application concernée.The second recursion concerns the selective calling of the function Upd_Int () with child nodes of C, which makes it possible to update the lists Upd_01d_L () and Upd_L () of all the active nodes. The determination of local interactions in the binary tree is mainly based on OBB properties, as discussed above. However, although OBBs are an interesting tool, other tools can be used, such as interaction prediction tables, or other suitable tools that the skilled person will consider in view of the application concerned.
Lorsque les listes Upd_Old_L() et Upd_L() ont été mises à jour pour tous les nœuds actifs, les données d'interaction sont prêtes à être mises à jour avec la fonction Upd_Int_Val() 34.When the Upd_Old_L () and Upd_L () lists have been updated for all active nodes, the interaction data is ready to be updated with the Upd_Int_Val () 34 function.
Une implémentation de la fonction Upd_Int_Val() est montrée sur la Figure 7. Comme on le voit sur cette figure, cette fonction commence par un bloc récursif 700. En appelant la fonction Upd_Int_Val() avec le nœud RN, le bloc 700 réalise une descente dans l'arbre binaire.An implementation of the function Upd_Int_Val () is shown in Figure 7. As seen in this figure, this function starts with a recursive block 700. By calling the function Upd_Int_Val () with the node RN, the block 700 performs a descent in the binary tree.
Le bloc 700 commence en 702 avec un test d'activité du nœud courant C, comme décrit précédemment. Si le nœud courant est inactif, alors la fonction se termine en 704. Si le nœud courant est actif, la descente dans l'arbre est commencée en obtenant les enfants A et B de ce nœud par la fonction CH() en 706.Block 700 begins at 702 with an activity test of the current node C, as previously described. If the current node is inactive, then the function ends in 704. If the current node is active, the descent into the tree is started by getting children A and B of this node by the CH () function at 706.
Ensuite un test d'activité est réalisé sur le fils gauche A de C, comme décrit précédemment en 708. Si le nœud A est actif, alors la descente à gauche est réalisée en 710, en appelant Upd_Int_Val() avec A.Then an activity test is performed on the left son A of C, as previously described in 708. If node A is active, then the descent to the left is done at 710, calling Upd_Int_Val () with A.
Ensuite, un test d'activité est réalisé sur le fils droit B de C, comme décrit précédemment, en 712. Si A est inactif, alors le test 712 est réalisé directement, et il n'y a pas de descente à gauche pour le nœud C.Then, an activity test is carried out on the right wire B of C, as previously described, in 712. If A is inactive, then the test 712 is carried out directly, and there is no descent to the left for the node C.
Si le nœud B est actif, alors la descente à droite est réalisée en 714, en appelant Upd_Int_Val() avec B. C'est alors la fin du bloc 700 de descente récursive, et la fonction se poursuit avec sa partie effective de traitement. Si B est inactif, alors il n'y a pas de descente à droite pour le nœud C, le bloc 700 se termine, et la fonction se poursuit avec sa partie effective de traitement.If node B is active, then the descent to the right is done at 714, calling Upd_Int_Val () with B. This is then the end of the recursive descent block 700, and the function continues with its effective part of processing. If B is inactive, then there is no descent to the right for the node C, the block 700 ends, and the function continues with its effective part of treatment.
Une fois que le bloc 700 a été répété et que les récursions ont été réalisées, le traitement des données commence au niveau du nœud C en réinitialisant une liste Upd(C) et une pile Q en 720.Once block 700 has been repeated and recursions have been completed, data processing begins at node C by resetting a list Upd (C) and a stack Q at 720.
La liste Upd(C) sert à faire remonter de proche en proche des données d'interaction mises à jour, à partir des données mises à jour dans les fils de C lors des appels récursifs effectués grâce au bloc 700.The list Upd (C) is used to progressively bring up updated interaction data from data updated in the C wires during recursive calls made using block 700.
La liste Q sert de pile de stockage d'objets dont les données d'interactions doivent à mettre à jour au niveau du nœud courant. Ainsi, la liste Q reçoit des listes Upd(A), Upd(B), Int Old L(C), et Int L(C) en 722. On notera que, bien que Int Old L(C), et IntJL(C) contiennent des paires de nœuds et pas des nœuds, l'homme du métier saura reconnaître que l'opération 722 consiste à empiler dans Q uniquement les nœuds distincts les uns des autres.The list Q serves as an object storage stack whose interaction data must be updated at the current node. Thus, the list Q receives lists Upd (A), Upd (B), Int Old L (C), and Int L (C) in 722. Note that, although Int Old L (C), and IntJL ( C) contain pairs of nodes and not nodes, one skilled in the art will recognize that the operation 722 is to stack in Q only nodes distinct from each other.
Une boucle de remontée de données d'interaction commence alors en 724, avec le dépilage de la liste Q dans un nœud de travail R. Le nœud de travail R est ajouté à la liste Upd(C) en 726, pour assurer la remontée des données qui lui sont associées lors du dépilage des récursions du bloc 700, puis un test 728 est réalisé pour déterminer si R appartient au sous-ensemble d'objets désigné par A, ou celui désigné par B.An interaction data feedback loop then begins at 724, with the Q list being unstacked in a work node R. The work node R is added to the list Upd (C) in 726, to ensure the recovery of the data. data associated with it when unstacking the recursions of the block 700, then a test 728 is performed to determine if R belongs to the subset of objects designated by A, or that designated by B.
Si R appartient au sous-ensemble d'objets désigné par A, alors la donnée d'interaction F(C, R) est réinitialisée avec la valeur de F(A, R) en 730. Sinon, F(C, R) est réinitialisée avec la valeur de F(B, R) en 732. Enfin, un test sur Q en 734 indique si toutes les données d'interaction des objets de Q ont été réinitialisées ou pas.If R belongs to the subset of objects designated A, then the interaction data F (C, R) is reset with the value of F (A, R) in 730. Otherwise, F (C, R) is reset with the value of F (B, R) in 732. Finally, a test on Q at 734 indicates whether all the object interaction data of Q has been reset or not.
Lorsque Q est vide, une boucle de mise à jour de données d'interaction commence en 736 avec le dépilage d'une liste Int_L_t(C). La liste Int_L_t(C) est une copie de travail de la liste Int L(C), et sert uniquement pour la boucle de mise à jour. Le résultat du dépilage de la liste Int L t(C) est stocké dans une paire de nœuds de travail (P, T).When Q is empty, an interaction data update loop begins at 736 with unstacking of a list Int_L_t (C). The list Int_L_t (C) is a working copy Int L (C), and is used only for the update loop. The unstacking result of the list Int L t (C) is stored in a pair of working nodes (P, T).
En 738, les données d'interaction F(C, P) sont mises à jour en ajoutant à la valeur de F(C, P) réinitialisée dans la boucle ci-dessus la valeur F(P, T) de l'interaction de T sur P. La valeur de F(P, T) est calculée, au moyen d'une fonction F_Int(), et donne l'intensité de l'interaction inter-atomique de P avec T, dans le repère de P. Cette même opération est réalisée en 740 avec T, en ajoutant à la valeur de F(C, T) réinitialisée dans la boucle ci-dessus la valeur F(T, P) de l'interaction de P sur T, dans le repère de T.In 738, the interaction data F (C, P) is updated by adding to the value of F (C, P) reset in the above loop the value F (P, T) of the interaction of T on P. The value of F (P, T) is calculated, by means of a function F_Int (), and gives the intensity of the inter-atomic interaction of P with T, in the frame of P. This same operation is carried out in 740 with T, by adding to the value of F (C, T) reset in the above loop the value F (T, P) of the interaction of P on T, in the reference frame of T .
La fonction F_Int() est basée sur les formules bien connues d'interaction électrostatique et de van der Waals entre deux atomes / molécules. D'autres formules peuvent bien sûr être utilisées. Il est important de noter que F_Int() calcule les interactions dans le repère associé au premier nœud invoqué.The function F_Int () is based on the well-known formulas of electrostatic interaction and van der Waals between two atoms / molecules. Other formulas can of course be used. It is important to note that F_Int () calculates the interactions in the coordinate system associated with the first invoked node.
Ensuite, en 742 un test vérifie si Int L t(C) a été entièrement dépilée. Si c'est le cas, l'instance concernée de Upd_Int_Val() se termine en 744. Sinon, la boucle de mise à jour reprend en 736. Une fois que la liste Int L t(C) a été entièrement dépilée, les données d'interactions F(C, X), où X est un nœud feuille descendant de C, représentent l'ensemble des interactions subies par le nœud X par tous les autres nœuds feuilles qui sont des descendants de C.Then, in 742 a test checks if Int L t (C) has been completely unstacked. If this is the case, the relevant instance of Upd_Int_Val () terminates at 744. Otherwise, the update loop resumes at 736. After the list Int L t (C) has been completely unpacked, the data of interactions F (C, X), where X is a leaf node descending from C, represent the set of interactions undergone by node X by all the other leaf nodes that are descendants of C.
Il apparaît clairement au vu de ce qui précède que la fonction Upd_Int_Val() a une approche du bas vers le haut, bien qu'elle soit invoquée avec le nœud racine. Il apparaît également que cette fonction fait remonter de proche en proche toutes les interactions subies par chaque nœud feuille d'un nœud C par les autres nœuds feuilles de C.It is clear from the above that the function Upd_Int_Val () has a bottom-up approach, although it is invoked with the root node. It also appears that this function brings up, step by step, all the interactions experienced by each leaf node of a node C by the other leaf nodes of C.
Enfin, cette fonction garde par ailleurs la trace des nœuds dont les données d'interaction ont été mises à jour au moyen de la liste Upd(). Ainsi, lorsque la fonction Upd_Int_Val() se termine, le nœud racine RN contient d'une part toutes les données d'interaction sur ses nœuds feuilles, mais également la liste des données d'interaction qui ont été mises à jour dans la boucle courante, ce qui assure de n'accéder qu'aux nœuds qui ont effectivement évolué.Finally, this function also keeps track of the nodes whose interaction data were updated using the list Upd (). Thus, when the function Upd_Int_Val () ends, the root node RN contains firstly all the interaction data on its leaf nodes, but also the list of interaction data. that have been updated in the current loop, which ensures access only to nodes that have actually evolved.
Une fois que la fonction Upd_Int_Val() est terminée, la fonction Upd_Int() prend fin. Comme représenté sur la Figure 2, la fonction Upd_Int() est suivie de la fonction Sprd_Int() dans la boucle de simulation. La fonction Sprd_Int() eεt appelée avec le nœud racine RN, comme sa liste Upd(RN) comprend toutes les données d'interaction qui ont été modifiées par la fonction Upd lntQ.Once the function Upd_Int_Val () is finished, the function Upd_Int () ends. As shown in Figure 2, the function Upd_Int () is followed by the Sprd_Int () function in the simulation loop. The Sprd_Int () function is called with the root node RN, as its list Upd (RN) includes all the interaction data that has been modified by the function Upd lntQ.
Un exemple d'implémentation de cette fonction est représenté sur la figure 8. La fonction Sprd_Int() est une boucle qui commence par un test 802 sur la liste Upd(C) du nœud en entrée. Si cette liste est vide, la fonction se termine en 804.An example of implementation of this function is shown in Figure 8. The Sprd_Int () function is a loop that starts with a test 802 on the list Upd (C) of the input node. If this list is empty, the function ends in 804.
Lorsque la liste Upd(C) est non vide, un élément R est dépilé en 806, les données d'interaction F(R, R) du nœud correspondant sont mises à jour à la valeur F(C, R) en 808.When the list Upd (C) is not empty, an element R is depilated at 806, the interaction data F (R, R) of the corresponding node is updated to the value F (C, R) at 808.
Ensuite, une fonction Set_Flg() enregistre des données Flg bph associées à R en 810. La valeur des données Flg_bph signale la nécessité de mettre à jour les coefficients dynamiques b, p et η. La fonction Set FlgO enregistre également des données Flg bph pour tous les ascendants du nœud R, jusqu'au noeud racine RN. La boucle reprend alors en 802, jusqu'à ce que la liste Upd(C) soit vide.Then, a Set_Flg () function stores Flg bph data associated with R at 810. The value of the Flg_bph data signals the need to update the dynamic coefficients b, p and η. The Set FlgO function also records Flg bph data for all ancestors of the R node, up to the root node RN. The loop then resumes in 802, until the list Upd (C) is empty.
On notera que la fonction Sprd_Int() peut être implémentée de nombreuses manières. Notamment, les données d'interaction mises à jour sont ici stockées dans le nœud concerné. Cependant, il serait possible de stocker ces interactions à un autre endroit, dans une table séparée par exemple. Il en va de même pour les données enregistrées par la fonction Set_Flg().Note that the Sprd_Int () function can be implemented in many ways. In particular, the updated interaction data is here stored in the concerned node. However, it would be possible to store these interactions at another place, in a separate table for example. The same goes for the data recorded by the Set_Flg () function.
II serait également possible de ne pas exécuter cette fonction, et de se contenter d'un appel à la liste Upd(RN) de manière adéquate lorsque cela est nécessaire, bien que cela aurait pour conséquence un certain manque de clarté et introduirait une relative complexité de gestion.It would also be possible not to perform this function, and to be satisfied with a call to the list Upd (RN) adequately where necessary, although this would result in a certain lack of clarity and introduce a relative complexity of management.
Lorsque les données d'interaction ont été mises à jour, la boucle de simulation se prolonge avec la fonction Get_Dyn_Coeff(), qui permet de déterminer les paramètres dynamiques des objets et des nœuds de l'arbre.When the interaction data has been updated, the simulation loop is extended with the Get_Dyn_Coeff () function, which is used to determine the dynamic parameters of the objects and nodes of the tree.
Un exemple d'implémentation de la fonction Get_Dyn_Coeff() est représenté sur la figure 9. La fonction Get_Dyn_Coeff() est une fonction à propagation de bas en haut, comme la fonction Upd_Int_Val(). Pour obtenir cette propagation, un test 902 vérifie si le nœud C a des nœuds fils A et B.An example implementation of the Get_Dyn_Coeff () function is shown in Figure 9. The Get_Dyn_Coeff () function is a bottom-up function, like the function Upd_Int_Val (). To obtain this propagation, a test 902 checks whether node C has child nodes A and B.
Si le nœud C n'a pas de nœuds fils, un test 904 vérifie si la donnée Flg bph(C) est activée. Si c'est le cas, alors le nœud C est un nœud feuille pour lequel une fonction Coeff_bphl() est appelée en 906, fonction qui met p(C) et η(C) à 0, et qui calcule b(C) à partir des données d'interaction mises à jour F(C, C). Après l'étape 906, ou si la donnée Flg bph(C) n'est pas activée, la fonction se termine en 908.If node C does not have child nodes, a test 904 checks if the data Flg bph (C) is activated. If this is the case, then the node C is a leaf node for which a function Coeff_bphl () is called in 906, a function which puts p (C) and η (C) to 0, and which calculates b (C) to from the updated interaction data F (C, C). After step 906, or if the data Flg bph (C) is not activated, the function ends at 908.
Si le nœud C a des fils, la fonction Get_Coeff_Dyn() s'appelle récursivement avec A et B en 910 et 912. Cela assure un parcours des nœuds nécessaires de l'arbre binaire de bas en haut. Une fois que tous les appels récursifs ont été lancés et que tous les nœuds feuilles nécessaires ont été traités, une remontée de l'arbre est opérée, boucle de récursion par boucle de récursion, dans un bloc 920.If node C has some wires, the function Get_Coeff_Dyn () is called recursively with A and B at 910 and 912. This ensures a path of the necessary nodes of the binary tree from bottom to top. Once all the recursive calls have been started and all the necessary leaf nodes have been processed, a recovery of the tree is made, recursion loop recursion loop, in a block 920.
Dans le bloc 920, un premier test 922 vérifie si le nœud courant C est actif. Si c'est le cas, alors les coefficients Φ(C) et Ψ(C) sont calculés en 924 en appelant une fonction Coeff_phipsi() avec les valeurs de ces coefficients pour les fils de C, nommément A et B. Ensuite, les coefficients b(C), p(C) et η(C) sont calculés en 926 en appelant une fonction Coeff_bph(), avec les valeurs de ces coefficients pour les fils de C, nommément A et B. Enfin, la fonction se termine en 928. Dans le cas où le nœud courant C est inactif, un test est réalisé sur la donnée Flg bph(C) en 930. Dans le cas où le test est négatif, la fonction se termine directement en 928. Si ce test est positif, c'est-à-dire si la donnée indique qu'il est nécessaire de mettre à jour les coefficients b(C), p(C) et η(C), alors ceux-ci sont calculés en 932 en appelant la fonction Coeff_bph() avec les valeurs de ces coefficients pour les fils de C, nommément A et B. Enfin, la fonction se termine en 928.In block 920, a first test 922 checks whether the current node C is active. If this is the case, then the coefficients Φ (C) and Ψ (C) are calculated at 924 by calling a function Coeff_phipsi () with the values of these coefficients for the children of C, namely A and B. Then, the coefficients b (C), p (C) and η (C) are computed at 926 by calling a function Coeff_bph (), with the values of these coefficients for the children of C, namely A and B. Finally, the function ends in 928. In the case where the current node C is inactive, a test is performed on the data Flg bph (C) at 930. In the case where the test is negative, the function ends directly in 928. If this test is positive, that is, if the data indicates that it is necessary to update the coefficients b (C), p (C) and η (C), then these are calculated as 932 by calling the function Coeff_bph ( ) with the values of these coefficients for the children of C, namely A and B. Finally, the function ends in 928.
Les formules (l) à (13) de l'Annexe A donnent la formule du calcul sur la base duquel ces coefficients sont établis dans les fonctions Coeff_phipsi() et Coeff_bph(). Pour les besoins de la présente description, il suffit de savoir que ces coefficients déterminés récursivement permettent de décrire localement le comportement des corps articulés, et servent de base aux calculs de métrique, d'accélération et de position de la simulation. Pour plus d'informations, les documents SPM '05 et SIGGRAPH '05 explicitent la définition précise et l'obtention de ces équations. La demanderesse recommande la consultation de ces documents à cet effet.The formulas (l) to (13) of Annex A give the formula of the calculation on the basis of which these coefficients are established in the functions Coeff_phipsi () and Coeff_bph (). For the purposes of the present description, it is sufficient to know that these recursively determined coefficients make it possible to locally describe the behavior of the articulated bodies, and serve as a basis for calculations of metric, acceleration and position of the simulation. For more information, SPM '05 and SIGGRAPH '05 explain the precise definition and obtaining of these equations. The applicant recommends that these documents be consulted for this purpose.
On notera en particulier que le calcul des coefficients b(C), p(C) et η(C) peut faire intervenir directement et indirectement une grandeur Q qui représente une donnée de force active sur l'articulation d'un nœud C. Cette grandeur Q peut être utilisée, par exemple, pour représenter un couple dépendant d'un angle dièdre. Dans la mesure où le calcul de la grandeur Q associée au nœud C ne dépend que de la position relative des fils A et B de C, cette grandeur est mise à jour uniquement pour les nœuds actifs. Ainsi, cette mise à jour peut se faire, par exemple, immédiatement avant le calcul des b(C), p(C) et η(C) par la fonction Coeff_bph().It will be noted in particular that the calculation of the coefficients b (C), p (C) and η (C) can directly and indirectly involve a quantity Q which represents an active force data on the articulation of a node C. This Q size can be used, for example, to represent a torque dependent dihedral angle. Since the calculation of the quantity Q associated with the node C depends only on the relative position of the wires A and B of C, this quantity is updated only for the active nodes. Thus, this update can be done, for example, immediately before the calculation of b (C), p (C) and η (C) by the function Coeff_bph ().
Lorsque les coefficients dynamiques ont été mis à jour, la fonction Upd_Dyn() met à jour les données dynamiques sur la base de ces coefficients. Un exemple d'implémentation de la fonction Upd_Dyn() est représenté sur la Figure 10.When the dynamic coefficients have been updated, the Upd_Dyn () function updates the dynamic data based on these coefficients. An example implementation of the Upd_Dyn () function is shown in Figure 10.
La fonction Upd_Dyn() représentée sur la Figure 10 est une fonction récursive qui traverse l'arbre binaire de haut en bas. Cette fonction utilise une queue de priorité visant à optimiser la détermination des nœuds actifs, comme cela apparaîtra plus bas. Pour cela, un test 1002 sur le nœud courant appelle un calcul de métrique d'accélération 1003 si le nœud courant est le nœud racine RN. Le résultat sert de base en 1004 à une borne ε qui sert de condition d'arrêt en 1006.The function Upd_Dyn () shown in Figure 10 is a recursive function that traverses the binary tree from top to bottom. This function uses a priority queue to optimize the determination of the active nodes, as will appear below. For this, a test 1002 on the current node calls an acceleration metric calculation 1003 if the current node is the root node RN. The result serves as a basis at 1004 for a terminal ε which serves as a stop condition at 1006.
Le calcul de métrique d'accélération est réalisé par une fonction Tot_Acc() qui réalise le calcul décrit avec la formule 21 de l'Annexe A, et qui correspond à la somme des carrés des accélérations des nœuds fils du nœud courant. Cela permet de définir les nœuds actifs et inactifs.The acceleration metric calculation is performed by a function Tot_Acc () which performs the calculation described with the formula 21 of Annex A, and which corresponds to the sum of the squares of the accelerations of the child nodes of the current node. This allows you to define active and inactive nodes.
En effet, εmax définit la précision de simulation recherchée en termes de métrique d'accélération. Donc, si ε < εmax, cela signifie que la précision voulue est atteinte. L'accélération du nœud C qdd(C) n'est alors pas calculée, et la fonction se termine en 1010.Indeed, εmax defines the simulation accuracy sought in terms of acceleration metrics. So, if ε <εmax, it means that the desired precision is reached. The acceleration of the node C qdd (C) is then not calculated, and the function ends in 1010.
En revanche, si ε > εmax, la simulation n'est pas considérée comme encore assez précise. En 1012, un test détermine si le nœud C a des fils ou pas. Si ce n'est pas le cas, la fonction se termine en 1010.On the other hand, if ε> εmax, the simulation is not considered as yet precise enough. In 1012, a test determines whether node C has threads or not. If this is not the case, the function ends in 1010.
Une fonction Active Flg(C) est alors appelée en 1014. La fonction Active_Flg() enregistre une donnée qui contient un marqueur de temps qui est associé à la boucle de simulation en cours. C'est ce marqueur de temps qui est utilisé dans les tests d'activité d'un nœud. Pour cela, pour le nœud donné, on compare l'éventuel marqueur de temps qui lui est associé au marqueur de temps de la boucle courante. Lorsqu'il y a concomitance, alors le nœud est considéré actif. Une méthode semblable peut être utilisée pour activer les données Flg bph(C).An Active Flg function (C) is then called at 1014. The Active_Flg () function records data that contains a time marker that is associated with the current simulation loop. It is this time marker that is used in the activity tests of a node. For this, for the given node, the possible time marker associated with the time marker of the current loop is compared. When there is concomitance, then the node is considered active. A similar method can be used to enable Flg bph (C) data.
Si le nœud C a des enfants A et B, l'accélération du nœud C qdd(C) est calculée en 1016 au moyen de la fonction Q_Dot. La fonction Q_Dot() utilise les coefficients dynamiques Φ(C) et b(C), ainsi qu'une force F(C). Le calcul réalisé par la fonction Q_Dot() est explicité par l'équation 22 de l'Annexe A. La force F(C) est un vecteur composite qui représente l'ensemble des forces d'articulation qui s'appliquent sur le nœud C. Pour le nœud racine RN des conditions particulières permettent de déterminer le vecteur F(C), comme décrit dans SPM' 05 section 3.1.2.If the node C has children A and B, the acceleration of the node C qdd (C) is calculated in 1016 by means of the function Q_Dot. The Q_Dot () function uses the dynamic coefficients Φ (C) and b (C), as well as a force F (C). The calculation performed by the Q_Dot () function is explained by Equation 22 of Appendix A. The force F (C) is a composite vector that represents the set of articulation forces that apply on the node C. For the root node RN, particular conditions make it possible to determine the vector F (C), as described in FIG. SPM '05 section 3.1.2.
Comme décrit dans l'article SPM '05 section 3.1.1, un vecteur F(C) a deux composantes : F(I, C) et F(2, C). Dans le cadre de l'invention, le vecteur F(C) d'un nœud sert à calculer le vecteur de ses nœuds fils F(A) et F(B).As described in SPM '05 section 3.1.1, a vector F (C) has two components: F (I, C) and F (2, C). In the context of the invention, the vector F (C) of a node is used to calculate the vector of its child nodes F (A) and F (B).
En effet, si on considère les deux fils A et B de C, alors la force F(I, C) est égale à F(I, A), et la force F(2, C) est égale à F(2, B). En outre, les composantes F(2, A) et F(I, B) peuvent être obtenues également à partir de F(C), comme décrit plus bas. Par conséquent les composantes de F(A) et de F(B) peuvent être obtenues totalement à partir de F(C).Indeed, if we consider the two son A and B of C, then the force F (I, C) is equal to F (I, A), and the force F (2, C) is equal to F (2, B). In addition, the F (2, A) and F (I, B) components can also be obtained from F (C) as described below. Therefore the components of F (A) and F (B) can be obtained totally from F (C).
Une fois l'accélération du nœud C calculée, la fonction Upd_Dyn() se poursuit en 1018 et en 1020 avec le calcul des vecteurs F(2, A) et F(I, B) au moyen de la fonction Ch_F() selon la formule 23 de l'Annexe A.Once the acceleration of the node C has been calculated, the function Upd_Dyn () continues in 1018 and in 1020 with the computation of the vectors F (2, A) and F (I, B) by means of the function Ch_F () according to the formula 23 of Annex A.
Ensuite, les métriques d'accélération des nœuds A et B sont calculées en 1022 et 1024, et les nœuds A et B sont rentrés en 1026 dans une queue de priorité Q_prio en fonction des valeurs de Acc(A) et Acc(B). En 1028, la valeur du carré de l'accélération qdd(C) est retirée à ε pour mettre à jour la précision de la simulation. Enfin, un nœud R est dépilé de la queue Q_prio en 1030, et la fonction Upd_Dyn() est appelée avec R en 1032 pour assurer la récursion de la fonction et la descente dans l'arbre.Then, the acceleration metrics of the nodes A and B are calculated at 1022 and 1024, and the nodes A and B are entered at 1026 in a queue of priority Q_prio according to the values of Acc (A) and Acc (B). In 1028, the square value of the acceleration qdd (C) is removed at ε to update the accuracy of the simulation. Finally, a node R is pared from the queue Q_prio at 1030, and the function Upd_Dyn () is called with R at 1032 to ensure the recursion of the function and the descent into the tree.
La queue Q_prio classe les nœuds en fonction de la valeur de leur métrique d'accélération, afin de déterminer rapidement les noeuds les plus importants. Ainsi, comme la métrique d'accélération d'un nœud représente la somme des carrés des accélérations de ses fils, la fonction descend progressivement dans les nœuds qui feront baisser ε le plus rapidement, ce qui accélère la simulation. On notera que cette fonction réalise deux tâches simultanément. En effet, l'activité d'un nœud est basée sur la valeur de la métrique d'accélération. Le non calcul des accélérations de certains nœuds, et l'utilisation des données Active_Flg() permet donc également de les écarter des boucles suivantes qui prennent en compte l'activité, sans coût de calcul supplémentaire.The queue Q_prio classifies the nodes according to the value of their acceleration metric, in order to quickly determine the most important nodes. Thus, since the acceleration metric of a node represents the sum of the squares of the accelerations of its threads, the function progressively descends into the nodes that will bring down ε the fastest, which speeds up the simulation. Note that this function performs two tasks simultaneously. Indeed, the activity of a node is based on the value of the acceleration metric. The non-computation of the accelerations of some nodes, and the use of the Active_Flg () data thus also makes it possible to separate them from the following loops which take into account the activity, without additional computation cost.
Cela est notamment rendu possible par le fait que les fonctions qui parcourent l'arbre de bas en haut commencent par descendre récursivement dans les nœuds actifs uniquement.This is made possible by the fact that the functions that traverse the tree from bottom to top begin to descend recursively in the active nodes only.
Par conséquent, l'ensemble des fonctions ci-dessus, par sa sélection des nœuds actifs, assure un parcours minimal de l'arbre, et constitue une mise à jour sélective des données de certains des nœuds.Therefore, all of the above functions, through its selection of active nodes, provide a minimal path of the tree, and is a selective update of the data of some of the nodes.
On notera par ailleurs que la précision de la simulation est ici assurée au moyen du paramètre εmax qui représente l'erreur maximale d'accélération. D'autres moyens peuvent être employés, comme la spécification du nombre de nœuds à simuler, ou d'autres métriques.Note also that the accuracy of the simulation is here ensured by means of the parameter εmax which represents the maximum error of acceleration. Other means may be employed, such as specifying the number of nodes to be simulated, or other metrics.
Lorsque la mise à jour des données dynamiques a été réalisée, la fonction Upd_Geo() termine la boucle de simulation. En effet, comme on l'a mentionné plus haut, les données d'interaction dans les nœuds sont calculées par rapport à un repère local particulier à chaque nœud.When dynamic data update has been performed, the function Upd_Geo () completes the simulation loop. Indeed, as mentioned above, the interaction data in the nodes are calculated with respect to a particular local coordinate system at each node.
De fait, les accélérations des nœuds et les positions que l'on peut dériver sont également relatives, ou intrinsèques. Pour pouvoir afficher le résultat de la simulation et pour pouvoir faire remonter (ou redescendre) les données dans les diverses traversées de l'arbre, des matrices de passage que l'on n'a pas discuté jusqu'à maintenant sont donc nécessaires. Ce sont ces matrices de passage qui sont utilisées pour calculer la position réelle des OBB dans la fonction Upd_Pos() de la figure 4, ou encore pour mettre à jour la force F(C, R) dans les étapes 732 et 734 de la figure 7. Pour mettre à jour ces matrices, la fonction Upd_Geo() commence en 1102 avec une sous-fonction Upd_Hyb_qdd(). La fonction Upd_Hyb_qdd() vient calculer des coefficients dynamiques corrigés pour tenir compte de la rigidification réalisée avec la fonction Upd_Dyn(). Ensuite, les accélérations qdd(C) des nœuds sont recalculées avec les coefficients dynamiques corrigés. Les opérations réalisées par cette fonction, ainsi que leur intégration dans le calcul des qdd(C) sont décrites dans l'article SIGGRAPH '05, sections 4 et 5.In fact, the accelerations of the nodes and the positions that can be derived are also relative, or intrinsic. To be able to display the result of the simulation and to be able to trace (or go back down) the data in the various traverses of the tree, matrices of passage that we have not discussed so far are necessary. It is these passing matrices that are used to calculate the actual position of the OBBs in the Upd_Pos () function of FIG. 4, or else to update the force F (C, R) in the steps 732 and 734 of FIG. 7. To update these matrices, the function Upd_Geo () starts in 1102 with a subfunction Upd_Hyb_qdd (). The function Upd_Hyb_qdd () calculates dynamic coefficients corrected to take into account the stiffening performed with the function Upd_Dyn (). Then, the accelerations qdd (C) of the nodes are recalculated with the corrected dynamic coefficients. The operations performed by this function, as well as their integration in the calculation of qdd (C) are described in the article SIGGRAPH '05, sections 4 and 5.
Bien qu'elle soit décrite dans le mode de réalisation préféré de l'invention, la fonction Upd_Hyb_qdd()_n'est pas forcément nécessaire dans tous les cas. En option, la fonction Upd_Geo() peut ne pas contenir cette fonction et procéder directement en 1104.Although it is described in the preferred embodiment of the invention, the function Upd_Hyb_qdd () _ is not necessarily necessary in all cases. Optionally, the function Upd_Geo () may not contain this function and proceed directly to 1104.
La fonction Upd_Geo() se poursuit en 1104 avec une fonction Upd_qpos(), qui vient mettre à jour les positions intrinsèques des nœuds sur la base de leurs accélérations. Ce calcul est simple et représente une intégration temporelle basique correspondant à l'équation 14 de l'Annexe A. D'autres méthodes peuvent être utilisées pour la mise à jour des positions intrinsèques des nœuds, faisant intervenir par exemple des calculs d'accélérations supplémentaires.The function Upd_Geo () continues in 1104 with a function Upd_qpos (), which updates the intrinsic positions of the nodes based on their accelerations. This calculation is simple and represents a basic temporal integration corresponding to equation 14 of Appendix A. Other methods can be used for updating the intrinsic positions of the nodes, for example involving additional accelerations calculations. .
Enfin, la fonction Upd_Geo() se termine en 1106 avec la fonction Upd_CT_Mat(), qui met à jour les matrices internes mentionnées plus haut sur la base des positions intrinsèques mises à jour des nœuds. Ces matrices ainsi que leur mise à jour sont décrites plus avant dans la section 5 de SPM '05. Dans ce qui précède, les données d'interaction et de géométrie sont principalement calculées de manière intrinsèque, c'est-à-dire par rapport à un repère local associé à chaque fois au nœud concerné.Finally, the function Upd_Geo () ends in 1106 with the function Upd_CT_Mat (), which updates the internal matrices mentioned above based on the updated intrinsic positions of the nodes. These matrices and their update are described further in section 5 of SPM '05. In the above, the interaction and geometry data are mainly calculated intrinsically, that is to say with respect to a local coordinate system associated in each case with the node concerned.
Cela permet de ne pas avoir à recalculer des données qui dépendent seulement des positions relatives des objets, comme les coefficients Φ(C) et Ψ(C) et les forces d'interaction locale. Ainsi, le passage aux coordonnées du monde réel n'est nécessaire que pour le calcul des positions réelles des nœuds. Dans d'autres modes de réalisation, il serait possible d'opérer à chaque fois sur des données de coordonnées du monde réel, en ne conservant des données intrinsèques que pour les nœuds qui ne sont pas actifs.This makes it unnecessary to recalculate data that depends only on the relative positions of the objects, such as the coefficients Φ (C) and Ψ (C) and the local interaction forces. Thus, the transition to the coordinates of the real world is only necessary for the calculation of the real positions of the nodes. In other embodiments, it would be possible to operate on real-world coordinate data each time, retaining intrinsic data only for nodes that are not active.
Bien que la présente invention ait été décrite en rapport à la représentation au moyen d'un arbre binaire, il serait possible d'utiliser d'autres types d'arbre, par exemple ternaire ou même n-aire. Il serait également possible d'utiliser d'autres types de représentations, dès lors qu'elles permettent de différencier des nœuds actifs et des nœuds inactifs avec un coût de parcours comparable.Although the present invention has been described with respect to the representation by means of a binary tree, it would be possible to use other types of tree, for example ternary or even n-ary. It would also be possible to use other types of representations, since they make it possible to differentiate between active nodes and inactive nodes with a comparable path cost.
Les fonctions ci-dessus présentent les étapes principales de mise en œuvre de l'invention. Elles peuvent être utilisées par l'homme du métier comme base pour rédiger un programme informatique implémentant l'invention. Un tel programme peut être rédigé en langage C++ ou en tout autre langage informatique approprié tel que saura le reconnaître l'homme du métier. The above functions present the main steps of implementation of the invention. They can be used by those skilled in the art as a basis for writing a computer program implementing the invention. Such a program can be written in C ++ or any other appropriate computer language as will be recognized by the skilled person.
ANNEXE AANNEX A
SECTION 1SECTION 1
avec où S est le sous-espac de mouvement du noeud, de dimension 6 x nombre de degrés de liberté du noeud. Typiquement, S = (0, 0, 1, 0, 0, l)τ. with where S is the subspace of movement of the node, of dimension 6 x number of degrees of freedom of the node. Typically, S = (0, 0, 1, 0, 0, 1) τ .
avec with
Nota : Les matrices Φ(C) et Φ(C) sont des matrices de matrices. ANNEXE A (suite)Note: The matrices Φ (C) and Φ (C) are matrix matrices. APPENDIX A (continued)
SECTION 2SECTION 2
avec où Q est le vecteur de dimension nombre de degrés de liberté x 1 des forces actives du noeud. with where Q is the number vector of degrees of freedom x 1 of the active forces of the node.
avec ANNEXE A (suite) with APPENDIX A (continued)
SECTION 3 SECTION 3

Claims

Revendications claims
1. Dispositif informatique pour la simulation d'un ensemble d'objets en interaction, comportant : - une mémoire (8), propre à contenir une représentation arborescente de l'ensemble d'objets, où chaque nœud intermédiaire est associé à des données dynamiques, des données géométriques, et des données d'interaction dépendantes de données de ses nœuds fils, etA computer device for the simulation of a set of interacting objects, comprising: a memory (8) capable of containing a tree representation of the set of objects, where each intermediate node is associated with dynamic data; , geometric data, and data dependent interaction data of its child nodes, and
- un contrôleur de simulation (4), pour actionner selon un cycle répétitif : + un distributeur (10) des données d'interaction sur les objets et sous ensembles d'objets,a simulation controller (4), for operating according to a repetitive cycle: + a distributor (10) of the interaction data on the objects and subsets of objects,
+ un mécanisme de mise à jour des données dynamiques (12), avec parcours de la représentation arborescente pour des nœuds sujets à interaction, en fonction des données d'interaction et des données géométriques concernées, + un mécanisme de mise à jour des données géométriques (14), avec parcours de la représentation arborescente pour des nœuds sujets à interaction, en fonction des données dynamiques mises à jour, caractérisé en ce que+ a dynamic data update mechanism (12), with a tree representation path for interacting subject nodes, as a function of the interaction data and the geometric data concerned, + a mechanism for updating the geometric data (14), with traversal of the tree representation for interacting nodes, based on the updated dynamic data, characterized in that
- la mémoire (8) comporte en outre des données d'interaction locale, associées à certains ou moins des noeuds,the memory (8) furthermore comprises local interaction data, associated with some or fewer nodes,
- le distributeur (10) des données d'interaction comprend un mécanisme de mise à jour d'interaction (20), avec parcours de la représentation arborescente pour des nœuds sujets à interaction, pour mettre à jour une donnée d'interaction d'un nœud en fonction des données d'interaction locale des nœuds fils concernés.the distributor (10) of the interaction data comprises an interaction updating mechanism (20), with traversing of the tree representation for interacting subject nodes, for updating an interaction data item of a node based on the local interaction data of the relevant child nodes.
2. Dispositif selon la revendication 1, caractérisé en ce que :2. Device according to claim 1, characterized in that:
- les données d'interaction locale comportent une liste d'interaction comprenant des couples désignant des nœuds en interaction locale, etthe local interaction data comprise an interaction list comprising pairs designating nodes in local interaction, and
- le mécanisme de mise à jour des données d'interaction comporte : + une fonction de mise à jour des données de liste d'interaction (32),the mechanism for updating the interaction data comprises: a function for updating the interaction list data (32),
+ une fonction de mise à jour des données d'interaction (34), sur la base de certaines au moins des données de liste d'interaction mises à jour. + an interaction data update function (34), based on at least some of the updated interaction list data.
3. Dispositif selon la revendication 2, caractérisé en ce que :3. Device according to claim 2, characterized in that:
- la mémoire comporte, pour certains au moins des nœuds, des données de boîte orientée représentant un espace d'interaction autour d'un nœud associé, etthe memory comprises, for at least some of the nodes, oriented box data representing an interaction space around an associated node, and
- le mécanisme de mise à jour des données d'interaction comporte en outre une fonction de mise à jour des données de boîte orientée (30), la fonction de mise à jour des listes d'interaction opérant sur la base de certaines au moins des données de boîte orientée mises à jour.the mechanism for updating the interaction data further comprises a function for updating the boxed data (30), the function of updating the interaction lists operating on the basis of at least some of the Oriented box data updated.
4. Dispositif selon l'une des revendications précédentes, caractérisé en ce que : - la mémoire comporte, pour certains au moins des nœuds, des données de coefficients dynamiques, et4. Device according to one of the preceding claims, characterized in that: - the memory comprises, for some at least nodes, dynamic coefficient data, and
- le mécanisme de mise à jour des données dynamiques comporte :the mechanism for updating the dynamic data comprises:
+ une fonction de mise à jour des données de coefficients dynamiques (26), et + une fonction de mise à jour des données dynamiques (28), sur la base des données de coefficients dynamiques mis à jour.+ a dynamic coefficient data update function (26), and + a dynamic data update function (28), based on the updated dynamic coefficient data.
5. Dispositif selon l'une des revendications précédentes, caractérisé en ce que :5. Device according to one of the preceding claims, characterized in that:
- la mémoire de stockage comporte, pour certains au moins des noeuds, des données représentant un marqueur d'activité (Active_Flg()), - le mécanisme de mise à jour des données dynamiques (12) est en outre capable de mettre à jour le marqueur d'activité (Active_Flg()) d'un nœud qu'il traite, etthe storage memory comprises, for at least some nodes, data representing an activity marker (Active_Flg ()), the dynamic data updating mechanism (12) is furthermore capable of updating the activity marker (Active_Flg ()) of a node it processes, and
- en ce que au moins un parmi le mécanisme de mise à jour des données d'interaction, le mécanisme de données dynamiques, et le mécanisme de mise à jour des données géométriques est agencé pour parcourir la représentation arborescente en ignorant les noeuds non marqués actifs.in that at least one of the interaction data update mechanism, the dynamic data mechanism, and the geometric data update mechanism is arranged to traverse the tree representation by ignoring the unmarked active nodes. .
6. Procédé de simulation du comportement d'un ensemble d'objets en interaction, dans lequel on maintient une représentation arborescente de l'ensemble d'objets, où chaque nœud intermédiaire est associé à des données dynamiques, des données géométriques et des données d'interaction dépendantes de données de ses nœuds fils, et on met en oeuvre répétitivement un cycle comprenant les étapes suivantes : a. distribuer les données d'interaction sur certains des objets et sous ensembles d'objets, b. parcourir la représentation arborescente pour des nœuds sujets à interaction, tout en mettant à jour des données dynamiques de ces noeuds, en fonction des données d'interaction et des données géométriques concernées, et c. parcourir à nouveau la représentation arborescente pour des nœuds sujets à interaction, tout en mettant à jour des données géométriques, en fonction des données dynamiques telles que mises à jour à l'étape b., caractérisé en ce que l'étape a. comprend : al. un parcours préalable de la représentation arborescente pour des nœuds sujets à interaction, avec la mise à jour des données d'interaction de ces noeuds, en fonction de données d'interaction locale de nœuds fils concernés.A method of simulating the behavior of a set of interacting objects, in which a tree representation of the set of objects is maintained, wherein each intermediate node is associated with dynamic data, geometric data and data of a plurality of objects. dependent interaction of data of its child nodes, and a cycle comprising the following steps is repeated: a. distribute the interaction data on some of the objects and subsets of objects, b. traversing the tree representation for interacting nodes while updating dynamic data of those nodes, based on the interaction data and geometric data concerned, and c. again browsing the tree representation for interacting subject nodes, while updating geometric data, based on the dynamic data as updated in step b., characterized in that step a. includes: al. a preliminary path of the tree representation for interacting nodes, with the update of the interaction data of these nodes, as a function of local interaction data of concerned child nodes.
7. Procédé de simulation selon la revendication 6, caractérisé en ce que l'étape al comprend : a la. la mise à jour de listes d'interaction formant données d'interaction locales, associées à certains au moins des nœuds, chaque liste d'interaction comprenant des couples de nœuds en interaction locale, alb. la mise à jour des données d'interaction, en fonction des listes d'interaction mises à jour.7. Simulation method according to claim 6, characterized in that step a1 comprises: a. updating interaction lists forming local interaction data, associated with at least some of the nodes, each interaction list comprising pairs of nodes in local interaction, alb. updating the interaction data, based on the updated interaction lists.
8. Procédé de simulation selon la revendication 7, caractérisé en ce que l'étape ai l. comprend : a IaI. la mise à jour de données de boîte orientée associées à certains au moins des nœuds, les données de boîte orientée représentant un espace d'interaction autour d'un nœud associé, et ala2. la mise à jour de listes d'interaction en fonction des données de boîte orientée mises à jour.8. Simulation method according to claim 7, characterized in that step ai l. includes: a IaI. updating oriented box data associated with at least some of the nodes, the oriented box data representing an interaction space around an associated node, and ala2. updating interaction lists based on updated oriented box data.
9. Procédé selon l'une des revendications 6 à 8, caractérisé en ce qu'au moins une des étapes a, b et c comprend le parcours de la représentation arborescente en ignorant certains au moins des nœuds, en fonction d'un marqueur d'activité associé à certains au moins des nœuds. 9. Method according to one of claims 6 to 8, characterized in that at least one of the steps a, b and c comprises the path of the tree representation ignoring at least some of the nodes, according to a marker d activity associated with at least some nodes.
10. Produit de programme d'ordinateur comprenant des portions/moyens/instructions de code de programme pour l'exécution des étapes du procédé selon l'une des revendications 6 à 9 lorsque ledit programme est exécuté sur un ordinateur. A computer program product comprising portions / means / program code instructions for performing the steps of the method according to one of claims 6 to 9 when said program is executed on a computer.
EP08826113A 2007-06-20 2008-06-13 Computer device for simulating a set of objects in interaction and corresponding method Ceased EP2158553A2 (en)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
FR0704414A FR2917866B1 (en) 2007-06-20 2007-06-20 COMPUTER DEVICE FOR SIMULATING A SET OF INTERACTION OBJECTS AND METHOD THEREOF
PCT/FR2008/000825 WO2009007550A2 (en) 2007-06-20 2008-06-13 Computer device for simulating a set of objects in interaction and corresponding method

Publications (1)

Publication Number Publication Date
EP2158553A2 true EP2158553A2 (en) 2010-03-03

Family

ID=39145372

Family Applications (1)

Application Number Title Priority Date Filing Date
EP08826113A Ceased EP2158553A2 (en) 2007-06-20 2008-06-13 Computer device for simulating a set of objects in interaction and corresponding method

Country Status (8)

Country Link
US (1) US8489370B2 (en)
EP (1) EP2158553A2 (en)
JP (1) JP5421248B2 (en)
KR (1) KR101496368B1 (en)
CN (1) CN101779203B (en)
BR (1) BRPI0813385A2 (en)
FR (1) FR2917866B1 (en)
WO (1) WO2009007550A2 (en)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101009424B1 (en) * 2010-07-01 2011-01-19 주식회사 큐에이엔씨 Method and apparatus for automatizing test of graphical user interface software
JP2012081568A (en) * 2010-10-14 2012-04-26 Sony Corp Device and method for controlling robot, and computer program
US9631885B2 (en) 2011-01-13 2017-04-25 J. Allen Enterprises, Inc. Rifle stock assembly for different barreled receivers
FR2991081A1 (en) 2012-05-25 2013-11-29 Inst Nat Rech Inf Automat METHOD FOR SIMULATING A SET OF ELEMENTS, ASSOCIATED COMPUTER PROGRAM
FR2995109A1 (en) 2012-09-06 2014-03-07 Inst Nat Rech Inf Automat METHOD FOR SIMULATING A SET OF ELEMENTS, ASSOCIATED COMPUTER PROGRAM
CN105005668B (en) * 2015-07-30 2017-11-03 浪潮软件集团有限公司 Method and device for simulating interaction between microscopic elements
CN113508385B (en) 2019-02-19 2022-04-26 洛林·G·克雷默三世 Method and system for formal language processing using subroutine graph

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003058907A (en) * 2001-08-09 2003-02-28 Univ Tokyo Method for generating pose and motion in tree structure link system
JP4101677B2 (en) 2003-02-26 2008-06-18 三菱電機株式会社 Motion simulation device
JP2006285474A (en) 2005-03-31 2006-10-19 Fujitsu Ltd Parallel computer and its controlling method
JP4682791B2 (en) * 2005-10-12 2011-05-11 ソニー株式会社 Operation space physical quantity calculation device, operation space physical quantity calculation method, and computer program
GB0602689D0 (en) * 2006-02-10 2006-03-22 Univ Edinburgh Controlling the motion of virtual objects in a virtual space

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
None *

Also Published As

Publication number Publication date
BRPI0813385A2 (en) 2014-12-30
WO2009007550A2 (en) 2009-01-15
US8489370B2 (en) 2013-07-16
CN101779203A (en) 2010-07-14
CN101779203B (en) 2016-08-24
FR2917866A1 (en) 2008-12-26
FR2917866B1 (en) 2009-09-04
US20100179795A1 (en) 2010-07-15
JP5421248B2 (en) 2014-02-19
JP2010530581A (en) 2010-09-09
WO2009007550A3 (en) 2009-02-26
KR101496368B1 (en) 2015-02-26
KR20100050460A (en) 2010-05-13

Similar Documents

Publication Publication Date Title
EP0953168B1 (en) Electronic device for processing image-data, for simulating the behaviour of a deformable object
EP2158553A2 (en) Computer device for simulating a set of objects in interaction and corresponding method
CN107977414B (en) Image style migration method and system based on deep learning
JP6604655B2 (en) Method and system for incremental search for design changes in large-scale computer-aided design models
KR102170620B1 (en) Method and system for generating training data to train classifiers with localizable features
WO2012007489A1 (en) Processor for situational analysis
FR2936070A1 (en) METHOD AND DEVICE FOR PERFORMING A MODEL WITH FINISHED ELEMENTS
WO2009118781A1 (en) Map data creating device and map drawing device
EP2359339B1 (en) Computer-assisted design method for generating a surface in a complex system
FR3025334A1 (en) METHOD FOR OPTIMIZATION DETERMINATION OF A MULTI-HEART ARCHITECTURE
WO1995008154A1 (en) Automatic proving method
EP3631589B1 (en) Data processing device for generating microstructures with orthotropic elastic properties
EP4073765A1 (en) Method and system for generating 3d digital models
Huber et al. Autopolyploidy, allopolyploidy, and phylogenetic networks with horizontal arcs
WO2004053740A2 (en) Method for simulating a die-stamping process
WO2007036654A1 (en) Data structure and method for creating a computer software documentation
WO2023118261A1 (en) Method for determining a physical quantity and associated determination system
EP0595719A1 (en) Procedure for automatically determining the probabilities associated to a booleen function
EP1639514A2 (en) Efficient methods for multibody simulations
FR2866133A1 (en) METHOD FOR GENERATING AN ENVELOPE
DiPrete et al. Reinforcement learning for block decomposition of planar CAD models
FR3090943A1 (en) Method for modifying the shape of a three-dimensional virtual object represented in an immersive space and immersive system implementing said method
WO2005020119A2 (en) Method for modeling and simulating a biological system, and model for carrying out this method
WO2001027756A1 (en) Automatic application task placement procedure in a signal processing machine.

Legal Events

Date Code Title Description
PUAI Public reference made under article 153(3) epc to a published international application that has entered the european phase

Free format text: ORIGINAL CODE: 0009012

17P Request for examination filed

Effective date: 20091217

AK Designated contracting states

Kind code of ref document: A2

Designated state(s): AT BE BG CH CY CZ DE DK EE ES FI FR GB GR HR HU IE IS IT LI LT LU LV MC MT NL NO PL PT RO SE SI SK TR

AX Request for extension of the european patent

Extension state: AL BA MK RS

17Q First examination report despatched

Effective date: 20100331

DAX Request for extension of the european patent (deleted)
REG Reference to a national code

Ref country code: DE

Ref legal event code: R003

STAA Information on the status of an ep patent application or granted ep patent

Free format text: STATUS: THE APPLICATION HAS BEEN REFUSED

18R Application refused

Effective date: 20170918