diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..5da2c9a --- /dev/null +++ b/LICENSE @@ -0,0 +1,481 @@ + GNU LIBRARY GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1991 Free Software Foundation, Inc. + 51 Franklin Street - Fifth Floor + Boston, MA 02110-1301, USA. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the library GPL. It is + numbered 2 because it goes with version 2 of the ordinary GPL.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Library General Public License, applies to some +specially designated Free Software Foundation software, and to any +other libraries whose authors decide to use it. You can use it for +your libraries, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if +you distribute copies of the library, or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link a program with the library, you must provide +complete object files to the recipients so that they can relink them +with the library, after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + Our method of protecting your rights has two steps: (1) copyright +the library, and (2) offer you this license which gives you legal +permission to copy, distribute and/or modify the library. + + Also, for each distributor's protection, we want to make certain +that everyone understands that there is no warranty for this free +library. If the library is modified by someone else and passed on, we +want its recipients to know that what they have is not the original +version, so that any problems introduced by others will not reflect on +the original authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that companies distributing free +software will individually obtain patent licenses, thus in effect +transforming the program into proprietary software. To prevent this, +we have made it clear that any patent must be licensed for everyone's +free use or not licensed at all. + + Most GNU software, including some libraries, is covered by the ordinary +GNU General Public License, which was designed for utility programs. This +license, the GNU Library General Public License, applies to certain +designated libraries. This license is quite different from the ordinary +one; be sure to read it in full, and don't assume that anything in it is +the same as in the ordinary license. + + The reason we have a separate public license for some libraries is that +they blur the distinction we usually make between modifying or adding to a +program and simply using it. Linking a program with a library, without +changing the library, is in some sense simply using the library, and is +analogous to running a utility program or application program. However, in +a textual and legal sense, the linked executable is a combined work, a +derivative of the original library, and the ordinary General Public License +treats it as such. + + Because of this blurred distinction, using the ordinary General +Public License for libraries did not effectively promote software +sharing, because most developers did not use the libraries. We +concluded that weaker conditions might promote sharing better. + + However, unrestricted linking of non-free programs would deprive the +users of those programs of all benefit from the free status of the +libraries themselves. This Library General Public License is intended to +permit developers of non-free programs to use free libraries, while +preserving your freedom as a user of such programs to change the free +libraries that are incorporated in them. (We have not seen how to achieve +this as regards changes in header files, but we have achieved it as regards +changes in the actual functions of the Library.) The hope is that this +will lead to faster development of free libraries. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, while the latter only +works together with the library. + + Note that it is possible for a library to be covered by the ordinary +General Public License rather than by this special one. + + GNU LIBRARY GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library which +contains a notice placed by the copyright holder or other authorized +party saying it may be distributed under the terms of this Library +General Public License (also called "this License"). Each licensee is +addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also compile or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + c) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + d) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the source code distributed need not include anything that is normally +distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Library General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/MbDCode/00backhoe.asmt b/MbDCode/00backhoe.asmt new file mode 100644 index 0000000..c906213 --- /dev/null +++ b/MbDCode/00backhoe.asmt @@ -0,0 +1,1494 @@ +freeCAD: 3D CAD with Motion Simulation by askoh.com +Assembly + Notes + (Text string: '' runs: (Core.RunArray runs: #() values: #())) + Name + backhoe + Position3D + 0.0 0.0 0.0 + RotationMatrix + 1.0 0.0 0.0 + 0.0 1.0 0.0 + 0.0 0.0 1.0 + Velocity3D + 0.0 0.0 0.0 + Omega3D + 0.0 0.0 0.0 + RefPoints + RefPoint + Position3D + 0.0 0.0 0.0 + RotationMatrix + 1.0 0.0 0.0 + 0.0 1.0 0.0 + 0.0 0.0 1.0 + Markers + Marker + Name + Marker1 + Position3D + 0.0 0.0 0.0 + RotationMatrix + 1.0 0.0 0.0 + 0.0 0.0 1.0 + 0.0 -1.0 0.0 + RefCurves + RefSurfaces + Parts + Part + Name + arm + Position3D + 0.22024995739281 0.45082147117861 -0.4 + RotationMatrix + 0.99671411528554 -0.08099982957125 3.6570748323292e-16 + 0.08099982957125 0.99671411528554 2.9952551442286e-16 + -3.816391647149e-16 -2.8460307027745e-16 1.0 + Velocity3D + -7.816706095454e-17 3.4698302581614e-18 -6.6550618428535e-17 + Omega3D + 2.7933687913392e-30 3.0215950648218e-16 1.7135000290871e-16 + FeatureOrder + Extrusion + zStart + 0.0 + zEnd + 0.8 + Sketch + Name + Sketch1 + Position3D + 0.0 0.0 0.0 + RotationMatrix + 1.0 0.0 0.0 + 0.0 1.0 0.0 + 0.0 0.0 1.0 + Graphics + Rectangle + Position2D + 0.0 0.0 + Angle + 0.0 + xLength + 3.5 + yLength + 0.5 + PrincipalMassMarker + Name + MassMarker + Position3D + 1.75 0.25 0.4 + RotationMatrix + 1.0 -3.0814879110196e-33 0.0 + -3.421138828918e-49 -1.1102230246252e-16 -1.0 + 3.0814879110196e-33 1.0 -1.1102230246252e-16 + Mass + 140.0 + MomentOfInertias + 10.383333333333 145.83333333333 150.38333333333 + Density + 100.0 + RefPoints + RefPoint + Position3D + 0.0 0.0 0.8 + RotationMatrix + 1.0 0.0 0.0 + 0.0 1.0 0.0 + 0.0 0.0 1.0 + Markers + Marker + Name + Marker1 + Position3D + -6.9388939039072e-18 0.25 -0.4 + RotationMatrix + 1.0 -1.3877787807814e-17 7.128161509394e-18 + -1.3877787807814e-17 1.0 -1.5684005978812e-17 + 7.128161509394e-18 -1.5684005978812e-17 1.0 + RefPoint + Position3D + 0.0 0.0 0.8 + RotationMatrix + 1.0 0.0 0.0 + 0.0 1.0 0.0 + 0.0 0.0 1.0 + Markers + Marker + Name + Marker2 + Position3D + 3.5 0.25 -0.4 + RotationMatrix + 1.0 -1.3877787807814e-17 7.128161509394e-18 + -1.3877787807814e-17 1.0 -1.5684005978812e-17 + 7.128161509394e-18 -1.5684005978812e-17 1.0 + RefPoint + Position3D + 0.0 -3.4694469519536e-17 0.8 + RotationMatrix + 1.0 8.673617379884e-19 1.3877787807814e-17 + 8.673617379884e-19 1.0 0.0 + 1.3877787807814e-17 0.0 1.0 + Markers + Marker + Name + Marker3 + Position3D + 1.75 1.25 -0.4 + RotationMatrix + 1.0 -2.3592239273285e-16 -2.0103865560782e-16 + 2.0816681711722e-16 1.0 4.2840520387125e-16 + 2.4305055424224e-16 -4.5977321582888e-16 1.0 + RefPoint + Position3D + 2.0816681711722e-17 1.3877787807814e-17 0.8 + RotationMatrix + 1.0 4.336808689942e-19 2.0816681711722e-17 + 4.336808689942e-19 1.0 0.0 + 2.0816681711722e-17 0.0 1.0 + Markers + Marker + Name + Marker4 + Position3D + 1.75 0.25 -0.4 + RotationMatrix + 1.0 -9.7144514654701e-17 2.7944843221116e-17 + 6.9388939039072e-17 1.0 -1.5684005978812e-17 + 2.7944843221116e-17 -1.5684005978812e-17 1.0 + RefCurves + RefSurfaces + Part + Name + base + Position3D + -0.2 -5.5511151231258e-17 -0.5 + RotationMatrix + 1.0 6.1629758220392e-33 5.5511151231258e-17 + -9.2444637330587e-33 1.0 5.5511151231258e-17 + -5.5511151231258e-17 -5.5511151231258e-17 1.0 + Velocity3D + -1.5107975324109e-16 2.7369110631344e-48 6.0431901296437e-17 + Omega3D + -8.3866110301473e-33 3.0215950648218e-16 -8.3866110301474e-33 + FeatureOrder + Extrusion + zStart + 0.0 + zEnd + 1.0 + Sketch + Name + Sketch1 + Position3D + 0.0 0.0 0.0 + RotationMatrix + 1.0 0.0 0.0 + 0.0 1.0 0.0 + 0.0 0.0 1.0 + Graphics + Rectangle + Position2D + 0.0 0.0 + Angle + 0.0 + xLength + 1.0 + yLength + 1.0 + PrincipalMassMarker + Name + MassMarker + Position3D + 0.5 0.5 0.5 + RotationMatrix + 1.0 -5.5511151231258e-17 -5.5511151231258e-17 + 5.5511151231258e-17 1.0 0.0 + 5.5511151231258e-17 -3.0814879110196e-33 1.0 + Mass + 100.0 + MomentOfInertias + 16.666666666667 16.666666666667 16.666666666667 + Density + 100.0 + RefPoints + RefPoint + Position3D + 0.0 0.0 1.0 + RotationMatrix + 1.0 0.0 0.0 + 0.0 1.0 0.0 + 0.0 0.0 1.0 + Markers + Marker + Name + Marker1 + Position3D + 0.2 -2.7755575615629e-17 -0.5 + RotationMatrix + 1.0 5.5511151231258e-17 0.0 + -3.0814879110196e-33 5.5511151231258e-17 1.0 + 5.5511151231258e-17 -1.0 5.5511151231258e-17 + RefPoint + Position3D + -3.0814879110196e-32 0.0 1.0 + RotationMatrix + 1.0 0.0 0.0 + 0.0 1.0 0.0 + 0.0 0.0 1.0 + Markers + Marker + Name + Marker2 + Position3D + 0.4 0.7 -0.5 + RotationMatrix + 1.0 2.0526832973508e-48 -1.1102230246252e-16 + -1.2325951644078e-32 1.0 -1.1102230246252e-16 + 1.1102230246252e-16 1.1102230246252e-16 1.0 + RefPoint + Position3D + -3.0814879110196e-32 0.0 1.0 + RotationMatrix + 1.0 0.0 0.0 + 0.0 1.0 0.0 + 0.0 0.0 1.0 + Markers + Marker + Name + Marker3 + Position3D + 0.9 0.2 -0.5 + RotationMatrix + 1.0 2.0526832973508e-48 -1.1102230246252e-16 + 1.0263416486754e-48 1.0 -1.2325951644078e-32 + 1.1102230246252e-16 -1.2325951644078e-32 1.0 + RefCurves + RefSurfaces + Part + Name + bucket + Position3D + 7.1767255092827 0.69665687713391 -3.7918355777536e-15 + RotationMatrix + 0.66354562416068 -0.74813581965925 1.2546094356006e-16 + 0.74813581965925 0.66354562416068 5.3402553015872e-16 + -4.8119251049032e-16 -2.3955974515647e-16 1.0 + Velocity3D + -6.6019128150398e-17 3.8565225073869e-16 -2.1685158380429e-15 + Omega3D + -5.5466782398352e-32 3.0215950648218e-16 -4.455265883769e-16 + FeatureOrder + Extrusion + zStart + -0.8 + zEnd + 0.8 + Sketch + Name + Sketch1 + Position3D + 0.0 0.0 0.0 + RotationMatrix + 1.0 0.0 0.0 + 0.0 1.0 0.0 + 0.0 0.0 1.0 + Graphics + Polyline + Position2D + 5.5548765594114e-19 4.1583210939635e-19 + Angle + 0.0 + Vertices + Number 1 2 3 4 5 6 7 8 9 + x 0.0 -0.11449202884817 -0.31803341346713 -0.26714806731239 0.66150950001163 0.80144420193717 0.73783751924374 0.29259074038976 0.0 + y 0.0 -1.1449202884817 -1.3102976634846 -1.373904346178 -0.82688687501454 -0.33075475000581 0.038164009616056 0.13993470192554 0.0 + PrincipalMassMarker + Name + MassMarker + Position3D + 0.30412896083836 -0.50956461801998 1.7347234759768e-16 + RotationMatrix + 1.9961586257978e-17 0.39610045484141 -0.91820718232566 + -3.2557778051675e-17 0.91820718232566 0.39610045484141 + 1.0 2.1987992251471e-17 3.1225022567583e-17 + Mass + 145.05361975318 + MomentOfInertias + 26.759174000788 37.264688437001 51.384029991812 + Density + 100.0 + RefPoints + RefPoint + Position3D + 0.0 0.0 0.0 + RotationMatrix + 1.0 0.0 0.0 + 0.0 1.0 0.0 + 0.0 0.0 1.0 + Markers + Marker + Name + Marker1 + Position3D + 0.0 0.0 0.0 + RotationMatrix + 1.0 -1.1102230246252e-16 1.580177336282e-18 + -1.1102230246252e-16 1.0 2.0928732724904e-17 + 1.580177336282e-18 2.0928732724904e-17 1.0 + RefPoint + Position3D + 0.0 0.0 0.0 + RotationMatrix + 1.0 0.0 0.0 + 0.0 1.0 0.0 + 0.0 0.0 1.0 + Markers + Marker + Name + Marker2 + Position3D + 1.942890293094e-16 0.5 3.8219941978081e-17 + RotationMatrix + 1.0 -2.7755575615629e-16 1.1021723501933e-16 + 5.5511151231258e-17 1.0 1.3195103518742e-16 + -1.0705688034677e-16 -9.0093569737612e-17 1.0 + RefCurves + RefSurfaces + Part + Name + forearm + Position3D + 3.6721084019928 0.78417219745461 -1.0779874879617e-15 + RotationMatrix + 0.99663603022381 0.08195500753299 5.8532853417185e-16 + -0.08195500753299 0.99663603022381 6.3296804728968e-16 + -5.3429483060086e-16 -6.5366548979151e-16 1.0 + Velocity3D + -6.0697745454121e-17 5.9875104033873e-16 -1.1095624624952e-15 + Omega3D + 2.6184943523889e-30 3.0215950648218e-16 -6.0805155906127e-17 + FeatureOrder + Extrusion + zStart + -0.2 + zEnd + 0.2 + Sketch + Name + Sketch1 + Position3D + 0.0 0.0 0.0 + RotationMatrix + 1.0 0.0 0.0 + 0.0 1.0 0.0 + 0.0 0.0 1.0 + Graphics + Rectangle + Position2D + 0.0 0.0 + Angle + 0.0 + xLength + 3.5 + yLength + 0.4 + PrincipalMassMarker + Name + MassMarker + Position3D + 1.75 0.2 -1.1102230246252e-16 + RotationMatrix + 1.0 5.5511151231258e-17 2.2204460492503e-16 + 2.2204460492503e-16 -2.7755575615629e-17 -1.0 + -5.5511151231258e-17 1.0 -2.7755575615629e-17 + Mass + 56.0 + MomentOfInertias + 1.4933333333333 57.913333333333 57.913333333333 + Density + 100.0 + RefPoints + RefPoint + Position3D + 0.0 0.0 0.0 + RotationMatrix + 1.0 0.0 -1.3877787807814e-17 + 0.0 1.0 5.5511151231258e-17 + -1.3877787807814e-17 5.5511151231258e-17 1.0 + Markers + Marker + Name + Marker1 + Position3D + -7.9797279894933e-17 0.2 -1.1624570060354e-17 + RotationMatrix + 1.0 -1.1102230246252e-16 -2.248548299359e-16 + 5.5511151231258e-17 1.0 2.5143876545117e-17 + 1.9147880429853e-16 1.3616617900763e-16 1.0 + RefPoint + Position3D + 0.0 0.0 0.0 + RotationMatrix + 1.0 0.0 -1.1102230246252e-16 + 0.0 1.0 -5.5511151231258e-17 + -1.1102230246252e-16 -5.5511151231258e-17 1.0 + Markers + Marker + Name + Marker2 + Position3D + 3.5 0.2 -1.0706211158692e-15 + RotationMatrix + 1.0 4.1633363423443e-16 -1.1383252747339e-16 + -4.7184478546569e-16 1.0 -4.744564845362e-16 + -1.1383252747339e-16 4.1372193516392e-16 1.0 + RefPoint + Position3D + 0.0 0.0 0.0 + RotationMatrix + 1.0 0.0 -1.1102230246252e-16 + 0.0 1.0 -5.5511151231258e-17 + -1.1102230246252e-16 -5.5511151231258e-17 1.0 + Markers + Marker + Name + Marker3 + Position3D + 1.942890293094e-16 0.7 -7.6768243511557e-17 + RotationMatrix + 1.0 8.3266726846887e-17 -6.6894403978596e-16 + -1.3877787807814e-16 1.0 -3.6343418207369e-16 + 4.4127898483919e-16 3.0269963270141e-16 1.0 + RefPoint + Position3D + 0.0 0.0 0.0 + RotationMatrix + 1.0 0.0 -1.1102230246252e-16 + 0.0 1.0 -5.5511151231258e-17 + -1.1102230246252e-16 -5.5511151231258e-17 1.0 + Markers + Marker + Name + Marker4 + Position3D + 2.0 0.5 -2.6662846708631e-15 + RotationMatrix + 1.0 1.942890293094e-16 -1.4461001570236e-15 + -2.4980018054066e-16 1.0 -2.5241187961117e-16 + 1.2184351020768e-15 1.9167733023889e-16 1.0 + RefCurves + RefSurfaces + Part + Name + jack1 + Position3D + 0.7 0.2 -1.1652782806586e-16 + RotationMatrix + 8.3266726846887e-17 -0.45839264410692 0.88874978696406 + -1.3530843112619e-16 0.88874978696406 0.45839264410692 + -1.0 -1.422473250301e-16 0.0 + Velocity3D + 0.0 -2.4651903288157e-32 -2.1151165453753e-16 + Omega3D + 1.0785207688569e-32 3.0215950648218e-16 1.9768632350884e-16 + FeatureOrder + Extrusion + zStart + 0.0 + zEnd + 1.0 + Sketch + Name + Sketch1 + Position3D + 0.0 0.0 0.0 + RotationMatrix + 1.0 0.0 0.0 + 0.0 1.0 0.0 + 0.0 0.0 1.0 + Graphics + Circle + Position2D + 0.0 0.0 + Angle + 0.0 + Radius + 0.05 + PrincipalMassMarker + Name + MassMarker + Position3D + -2.1027335699339e-18 7.2281466466476e-19 0.5 + RotationMatrix + 0.0 1.0 0.0 + 0.0 0.0 1.0 + 1.0 0.0 0.0 + Mass + 0.0 + MomentOfInertias + 0.0 0.0 0.0 + Density + 0.0 + RefPoints + RefPoint + Position3D + -1.3877787807814e-17 0.0 1.0 + RotationMatrix + 1.0 3.4694469519536e-18 0.0 + 3.4694469519536e-18 1.0 0.0 + 0.0 0.0 1.0 + Markers + Marker + Name + Marker1 + Position3D + -3.5900988533834e-18 5.5511151231258e-17 -1.0 + RotationMatrix + -2.3046024803592e-17 -2.2770571560596e-17 -1.0 + -5.5511151231258e-17 1.0 2.6442733219338e-18 + 1.0 -5.5511151231258e-17 -4.7003817268536e-17 + RefPoint + Position3D + 5.5511151231258e-17 -2.7755575615629e-17 1.0 + RotationMatrix + 1.0 5.5511151231258e-17 1.6653345369377e-16 + 5.5511151231258e-17 1.0 -2.7755575615629e-17 + 1.6653345369377e-16 -2.7755575615629e-17 1.0 + Markers + Marker + Name + Marker2 + Position3D + -5.313879385598e-16 5.5511151231258e-17 -0.8 + RotationMatrix + 1.0 -2.5209926212606e-16 1.0666907696264e-15 + 3.3076782580214e-16 1.0 -2.7755575615629e-16 + -7.0966606977388e-16 1.6653345369377e-16 1.0 + RefCurves + RefSurfaces + Part + Name + jack2 + Position3D + 1.8632498721784 1.8384638170352 -9.6482612253065e-16 + RotationMatrix + 1.3877787807814e-16 0.18770863074944 0.98222475530918 + -7.9884016068732e-16 0.98222475530918 -0.18770863074944 + -1.0 -7.2251232774434e-16 2.7755575615629e-16 + Velocity3D + -1.9507577836045e-16 2.849978704357e-16 -5.6299866183042e-16 + Omega3D + 2.9366579792017e-30 3.0215950648218e-16 1.7786127986993e-16 + FeatureOrder + Extrusion + zStart + 0.0 + zEnd + 1.0 + Sketch + Name + Sketch1 + Position3D + 0.0 0.0 0.0 + RotationMatrix + 1.0 0.0 0.0 + 0.0 1.0 0.0 + 0.0 0.0 1.0 + Graphics + Circle + Position2D + 0.0 0.0 + Angle + 0.0 + Radius + 0.05 + PrincipalMassMarker + Name + MassMarker + Position3D + -2.1027335699339e-18 7.2281466466476e-19 0.5 + RotationMatrix + 0.0 1.0 0.0 + 0.0 0.0 1.0 + 1.0 0.0 0.0 + Mass + 0.0 + MomentOfInertias + 0.0 0.0 0.0 + Density + 0.0 + RefPoints + RefPoint + Position3D + -1.3877787807814e-17 0.0 1.0 + RotationMatrix + 1.0 3.4694469519536e-18 0.0 + 3.4694469519536e-18 1.0 0.0 + 0.0 0.0 1.0 + Markers + Marker + Name + Marker1 + Position3D + -3.1570655253763e-19 -2.7755575615629e-17 -1.0 + RotationMatrix + -2.6320417104438e-17 -4.267215031292e-17 -1.0 + -2.2692787476387e-31 1.0 2.2545852074258e-17 + 1.0 -5.5511151231258e-17 -4.372942496769e-17 + RefPoint + Position3D + 5.5511151231258e-17 -2.7755575615629e-17 1.0 + RotationMatrix + 1.0 5.5511151231258e-17 1.6653345369377e-16 + 5.5511151231258e-17 1.0 -2.7755575615629e-17 + 1.6653345369377e-16 -2.7755575615629e-17 1.0 + Markers + Marker + Name + Marker2 + Position3D + -5.2876842471912e-16 -8.3266726846887e-17 -0.8 + RotationMatrix + 1.0 -2.7200084087839e-16 1.0634163773255e-15 + 3.1086624704982e-16 1.0 -2.4980018054066e-16 + -7.1294046207472e-16 1.3877787807814e-16 1.0 + RefCurves + RefSurfaces + Part + Name + jack3 + Position3D + 5.7063579662069 1.1185801975005 -4.9309056105033e-15 + RotationMatrix + 1.4085954624932e-15 0.081955007532989 0.99663603022381 + -6.654832934716e-16 0.99663603022381 -0.081955007532989 + -1.0 -6.0661111550564e-16 1.4641066137244e-15 + Velocity3D + -4.0364014875073e-17 4.7505817843472e-16 -1.7242303068797e-15 + Omega3D + 2.1123599630039e-30 3.0215950648218e-16 7.9093546810518e-17 + FeatureOrder + Extrusion + zStart + 0.0 + zEnd + 1.0 + Sketch + Name + Sketch1 + Position3D + 0.0 0.0 0.0 + RotationMatrix + 1.0 0.0 0.0 + 0.0 1.0 0.0 + 0.0 0.0 1.0 + Graphics + Circle + Position2D + 0.0 0.0 + Angle + 0.0 + Radius + 0.05 + PrincipalMassMarker + Name + MassMarker + Position3D + -2.1027335699339e-18 7.2281466466476e-19 0.5 + RotationMatrix + 0.0 1.0 0.0 + 0.0 0.0 1.0 + 1.0 0.0 0.0 + Mass + 0.0 + MomentOfInertias + 0.0 0.0 0.0 + Density + 0.0 + RefPoints + RefPoint + Position3D + -1.3877787807814e-17 0.0 1.0 + RotationMatrix + 1.0 3.4694469519536e-18 0.0 + 3.4694469519536e-18 1.0 0.0 + 0.0 0.0 1.0 + Markers + Marker + Name + Marker1 + Position3D + 1.4098732843514e-17 1.1102230246252e-16 -1.0 + RotationMatrix + -4.0734856500489e-17 5.2214237292021e-17 -1.0 + -2.775557561563e-17 1.0 -7.2340535530683e-17 + 1.0 2.7755575615628e-17 -2.9314985571639e-17 + RefPoint + Position3D + 5.5511151231258e-17 -2.7755575615629e-17 1.0 + RotationMatrix + 1.0 5.5511151231258e-17 1.6653345369377e-16 + 5.5511151231258e-17 1.0 -2.7755575615629e-17 + 1.6653345369377e-16 -2.7755575615629e-17 1.0 + Markers + Marker + Name + Marker2 + Position3D + -5.1723687320228e-16 9.7144514654702e-17 -0.8 + RotationMatrix + 1.0 -1.7711445327345e-16 1.0490019379295e-15 + 4.0575263465476e-16 1.0 -2.0816681711722e-16 + -7.2735490147078e-16 1.5265566588596e-16 1.0 + RefCurves + RefSurfaces + Part + Name + rod1 + Position3D + 1.0554999147856 0.38335705764277 3.1996212358144e-17 + RotationMatrix + -9.1593399531575e-16 -0.45839264410692 0.88874978696406 + -2.1857515797308e-16 0.88874978696406 0.45839264410692 + -1.0 2.2551405187698e-16 -9.1593399531575e-16 + Velocity3D + 6.6329144729876e-17 1.2318351356414e-16 -3.1892933334361e-16 + Omega3D + 3.2355623065706e-32 3.0215950648218e-16 1.9768632350884e-16 + FeatureOrder + Extrusion + zStart + 0.0 + zEnd + 1.0 + Sketch + Name + Sketch1 + Position3D + 0.0 0.0 0.0 + RotationMatrix + 1.0 0.0 0.0 + 0.0 1.0 0.0 + 0.0 0.0 1.0 + Graphics + Circle + Position2D + 0.0 0.0 + Angle + 0.0 + Radius + 0.03 + PrincipalMassMarker + Name + MassMarker + Position3D + 1.5370859429341e-19 -1.3473518968532e-18 0.5 + RotationMatrix + 0.0 1.0 0.0 + 0.0 0.0 1.0 + 1.0 0.0 0.0 + Mass + 0.0 + MomentOfInertias + 0.0 0.0 0.0 + Density + 0.0 + RefPoints + RefPoint + Position3D + 0.0 -1.3877787807814e-17 1.0 + RotationMatrix + 1.0 -1.7347234759768e-18 0.0 + -1.7347234759768e-18 1.0 0.0 + 0.0 0.0 1.0 + Markers + Marker + Name + Marker1 + Position3D + -1.9112360940789e-18 2.0819183483316e-31 -1.0 + RotationMatrix + 1.0 -1.4433659092568e-18 -2.584433952155e-17 + -1.8566230846792e-18 1.0 5.5511151231258e-17 + 2.9253554534285e-17 5.5511151231258e-17 1.0 + RefPoint + Position3D + 0.0 -1.3877787807814e-17 1.0 + RotationMatrix + 1.0 -1.7347234759768e-18 0.0 + -1.7347234759768e-18 1.0 0.0 + 0.0 0.0 1.0 + Markers + Marker + Name + Marker2 + Position3D + 0.0 0.0 0.0 + RotationMatrix + 3.3477151489391e-16 -1.649994496968e-18 -1.0 + 5.5511151231258e-17 1.0 1.649994496968e-18 + 1.0 5.5511151231258e-17 3.3136229988118e-16 + RefCurves + RefSurfaces + Part + Name + rod2 + Position3D + 2.7472521519567 1.6695260493607 -9.9682184078334e-16 + RotationMatrix + -7.3552275381417e-16 0.18770863074944 0.98222475530917 + -3.5648567431323e-16 0.98222475530917 -0.18770863074944 + -1.0 -5.3256010712488e-16 -6.3837823915946e-16 + Velocity3D + -5.1663416322255e-17 4.2056298733228e-16 -8.3010835441735e-16 + Omega3D + 2.919709795691e-30 3.0215950648218e-16 1.7786127986993e-16 + FeatureOrder + Extrusion + zStart + 0.0 + zEnd + 1.0 + Sketch + Name + Sketch1 + Position3D + 0.0 0.0 0.0 + RotationMatrix + 1.0 0.0 0.0 + 0.0 1.0 0.0 + 0.0 0.0 1.0 + Graphics + Circle + Position2D + 0.0 0.0 + Angle + 0.0 + Radius + 0.03 + PrincipalMassMarker + Name + MassMarker + Position3D + 1.5370859429341e-19 -1.3473518968532e-18 0.5 + RotationMatrix + 0.0 1.0 0.0 + 0.0 0.0 1.0 + 1.0 0.0 0.0 + Mass + 0.0 + MomentOfInertias + 0.0 0.0 0.0 + Density + 0.0 + RefPoints + RefPoint + Position3D + 0.0 -1.3877787807814e-17 1.0 + RotationMatrix + 1.0 -1.7347234759768e-18 0.0 + -1.7347234759768e-18 1.0 0.0 + 0.0 0.0 1.0 + Markers + Marker + Name + Marker1 + Position3D + 1.6948351335144e-17 2.7755575615629e-17 -1.0 + RotationMatrix + 1.0 4.2818989009554e-17 -4.4703926950773e-17 + 4.2405731834131e-17 1.0 2.7755575615629e-17 + 1.0393967105062e-17 -2.7755575615629e-17 1.0 + RefPoint + Position3D + 0.0 -1.3877787807814e-17 1.0 + RotationMatrix + 1.0 -1.7347234759768e-18 0.0 + -1.7347234759768e-18 1.0 0.0 + 0.0 0.0 1.0 + Markers + Marker + Name + Marker2 + Position3D + 0.0 0.0 0.0 + RotationMatrix + 3.1591192746469e-16 4.2612360421843e-17 -1.0 + -2.7755575615628e-17 1.0 -4.2612360421843e-17 + 1.0 3.3997478343296e-31 3.502218873104e-16 + RefCurves + RefSurfaces + Part + Name + rod3 + Position3D + 5.8060215692293 1.1103846967472 -4.359663230616e-15 + RotationMatrix + 5.2041704279304e-16 0.081955007532989 0.99663603022381 + -3.0953972024461e-16 0.99663603022381 -0.081955007532989 + -1.0 -2.3212768512915e-16 5.4817261840867e-16 + Velocity3D + 7.5312368707301e-17 4.7348197191681e-16 -1.7543446119832e-15 + Omega3D + 2.1131303349817e-30 3.0215950648218e-16 7.9093546810518e-17 + FeatureOrder + Extrusion + zStart + 0.0 + zEnd + 1.0 + Sketch + Name + Sketch1 + Position3D + 0.0 0.0 0.0 + RotationMatrix + 1.0 0.0 0.0 + 0.0 1.0 0.0 + 0.0 0.0 1.0 + Graphics + Circle + Position2D + 0.0 0.0 + Angle + 0.0 + Radius + 0.03 + PrincipalMassMarker + Name + MassMarker + Position3D + 1.5370859429341e-19 -1.3473518968532e-18 0.5 + RotationMatrix + 0.0 1.0 0.0 + 0.0 0.0 1.0 + 1.0 0.0 0.0 + Mass + 0.0 + MomentOfInertias + 0.0 0.0 0.0 + Density + 0.0 + RefPoints + RefPoint + Position3D + 0.0 -1.3877787807814e-17 1.0 + RotationMatrix + 1.0 -1.7347234759768e-18 0.0 + -1.7347234759768e-18 1.0 0.0 + 0.0 0.0 1.0 + Markers + Marker + Name + Marker1 + Position3D + 3.9312841264828e-18 -8.3266726846887e-17 -1.0 + RotationMatrix + 1.0 -3.5248065077897e-17 -3.1686859742112e-17 + -3.5661322253319e-17 1.0 2.7755575615629e-17 + 2.3411034313723e-17 -2.7755575615629e-17 1.0 + RefPoint + Position3D + 0.0 -1.3877787807814e-17 1.0 + RotationMatrix + 1.0 -1.7347234759768e-18 0.0 + -1.7347234759768e-18 1.0 0.0 + 0.0 0.0 1.0 + Markers + Marker + Name + Marker2 + Position3D + 0.0 0.0 0.0 + RotationMatrix + 3.2892899467335e-16 -3.5454693665608e-17 -1.0 + -4.9558841830668e-32 1.0 3.5454693665608e-17 + 1.0 -1.2724604096239e-31 3.3720482010174e-16 + RefCurves + RefSurfaces + KinematicIJs + ConstraintSets + Joints + RevoluteJoint + Name + rev1 + MarkerI + /backhoe/Marker1 + MarkerJ + /backhoe/base/Marker1 + RevoluteJoint + Name + rev10 + MarkerI + /backhoe/forearm/Marker2 + MarkerJ + /backhoe/bucket/Marker1 + RevoluteJoint + Name + rev2 + MarkerI + /backhoe/base/Marker2 + MarkerJ + /backhoe/arm/Marker1 + RevoluteJoint + Name + rev3 + MarkerI + /backhoe/base/Marker3 + MarkerJ + /backhoe/jack1/Marker1 + RevoluteJoint + Name + rev4 + MarkerI + /backhoe/rod1/Marker2 + MarkerJ + /backhoe/arm/Marker4 + RevoluteJoint + Name + rev5 + MarkerI + /backhoe/arm/Marker2 + MarkerJ + /backhoe/forearm/Marker1 + RevoluteJoint + Name + rev6 + MarkerI + /backhoe/arm/Marker3 + MarkerJ + /backhoe/jack2/Marker1 + RevoluteJoint + Name + rev7 + MarkerI + /backhoe/rod2/Marker2 + MarkerJ + /backhoe/forearm/Marker3 + RevoluteJoint + Name + rev8 + MarkerI + /backhoe/forearm/Marker4 + MarkerJ + /backhoe/jack3/Marker1 + RevoluteJoint + Name + rev9 + MarkerI + /backhoe/rod3/Marker2 + MarkerJ + /backhoe/bucket/Marker2 + TranslationalJoint + Name + trn1 + MarkerI + /backhoe/jack1/Marker2 + MarkerJ + /backhoe/rod1/Marker1 + TranslationalJoint + Name + trn2 + MarkerI + /backhoe/jack2/Marker2 + MarkerJ + /backhoe/rod2/Marker1 + TranslationalJoint + Name + trn3 + MarkerI + /backhoe/jack3/Marker2 + MarkerJ + /backhoe/rod3/Marker1 + Motions + RotationalMotion + Name + rmo1 + MotionJoint + /backhoe/rev1 + RotationZ + (45.0d + 45.0d*sin((360.0d*time - 90.0d)*pi/180.0d))*pi/180.0d + TranslationalMotion + Name + tmo1 + MotionJoint + /backhoe/trn1 + TranslationZ + 0.5d + 0.3d*sin(2.0d*pi*time - pi/2.0d) + TranslationalMotion + Name + tmo2 + MotionJoint + /backhoe/trn2 + TranslationZ + 1.0d + 0.3d*sin(2.0d*pi*time - pi/2.0d) + TranslationalMotion + Name + tmo3 + MotionJoint + /backhoe/trn3 + TranslationZ + 0.2d + 0.3d*sin(2.0d*pi*time - pi/2.0d) + GeneralConstraintSets + ForceTorques + ConstantGravity + 0.0 -9.81 0.0 + SimulationParameters + tstart + 0.0 + tend + 1.0 + hmin + 1.0e-9 + hmax + 1.0 + hout + 0.02 + errorTol + 1.0e-6 + AnimationParameters + nframe + 51 + icurrent + 1 + istart + 1 + iend + 51 + isForward + true + framesPerSecond + 30 +TimeSeries +Number Input 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 +Time Input 0.0 0.02 0.04 0.06 0.08 0.1 0.12 0.14 0.16 0.18 0.2 0.22 0.24 0.26 0.28 0.3 0.32 0.34 0.36 0.38 0.4 0.42 0.44 0.46 0.48 0.5 0.52 0.54 0.56 0.58 0.6 0.62 0.64 0.66 0.68 0.7 0.72 0.74 0.76 0.78 0.8 0.82 0.84 0.86 0.88 0.9 0.92 0.94 0.96 0.98 1.0 +AssemblySeries /backhoe +X 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +Y 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +Z 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +Bryantx 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +Bryanty 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +Bryantz 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +VX 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +VY 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +VZ 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +OmegaX 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +OmegaY 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +OmegaZ 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +AX 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +AY 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +AZ 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +AlphaX 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +AlphaY 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +AlphaZ 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +PartSeries /backhoe/arm +X 0.22024995739281 0.22024995739281 0.2186429213985 0.21378877590947 0.20559299103329 0.19391322370061 0.17858181856548 0.15943643790399 0.13635736942899 0.10930891620926 0.078380863291831 0.043824668355396 0.00607822655482 -0.034226673147626 -0.076278405204485 -0.11912220889151 -0.16171667097257 -0.20300309760161 -0.24197787482717 -0.27775681780232 -0.3096217288469 -0.33704270465202 -0.35967437956459 -0.37732919553044 -0.38993490541009 -0.39748607770269 -0.4 -0.39748607770269 -0.38993490541009 -0.37732919553044 -0.35967437956459 -0.33704270465202 -0.3096217288469 -0.27775681780232 -0.24197787482717 -0.20300309760161 -0.16171667097257 -0.11912220889151 -0.076278405204485 -0.034226673147625 0.0060782265548207 0.043824668355396 0.078380863291831 0.10930891620926 0.13635736942899 0.15943643790399 0.17858181856548 0.19391322370079 0.20559299103312 0.21378877590946 0.2186429213985 0.22024995739281 +Y 0.45082147117861 0.45082147117861 0.45089407809763 0.45112837065212 0.45157180441219 0.45229733020354 0.45339539022292 0.45496465628999 0.45710263137031 0.45989688440677 0.46341731988909 0.46770962214541 0.47278989078876 0.47864046835704 0.48520700581858 0.49239687565953 0.50007910049611 0.5080860049285 0.51621681303533 0.5242433961158 0.53191831185524 0.53898514644199 0.54519095194834 0.55030025029513 0.55410967417484 0.55646191285498 0.55725736366156 0.55646191285498 0.55410967417484 0.55030025029513 0.54519095194834 0.53898514644199 0.53191831185524 0.5242433961158 0.51621681303533 0.5080860049285 0.50007910049611 0.49239687565953 0.48520700581858 0.47864046835704 0.47278989078876 0.46770962214541 0.46341731988909 0.45989688440677 0.45710263137031 0.45496465628999 0.45339539022292 0.45229733020352 0.45157180441221 0.45112837065212 0.45089407809763 0.45082147117861 +Z -0.4 -0.4 -0.40136176561073 -0.40539804997776 -0.41195981988917 -0.42079288689495 -0.43153201887021 -0.44369775909178 -0.45669989106467 -0.46985130582505 -0.48239513319694 -0.49354633159079 -0.5025465298619 -0.50872804132057 -0.5115801672832 -0.51080891626468 -0.50638080141824 -0.49854285263043 -0.48781427475555 -0.47494961830834 -0.46087783849312 -0.4466250992224 -0.43323085854926 -0.42166645292902 -0.41276348103032 -0.4071565841368 -0.40524263633844 -0.4071565841368 -0.41276348103032 -0.42166645292902 -0.43323085854926 -0.4466250992224 -0.46087783849312 -0.47494961830834 -0.48781427475555 -0.49854285263043 -0.50638080141824 -0.51080891626468 -0.5115801672832 -0.50872804132057 -0.5025465298619 -0.49354633159079 -0.48239513319694 -0.46985130582505 -0.45669989106467 -0.44369775909178 -0.43153201887021 -0.42079288689492 -0.41195981988918 -0.40539804997776 -0.40136176561073 -0.4 +Bryantx -3.0180233898508e-16 -2.9952551442286e-16 -2.9668003431063e-16 -4.8146490885725e-16 -2.2965321194978e-15 -2.8973639522428e-14 -3.9672907651859e-16 -4.9468325597938e-16 -4.305175503734e-16 -6.7857904981386e-16 -6.7183772234471e-16 -7.6871951192363e-16 -8.1679815331201e-16 -9.191289707503e-16 -1.0515647377267e-15 -1.2262574974663e-15 -1.0318033499184e-15 -9.5970108669757e-16 -1.6301625607355e-15 -3.0441654400819e-15 -3.2436538041621e-15 -4.9361563763211e-15 -7.0041375586904e-15 -1.3289936078503e-14 -3.412519454807e-14 -1.2681755755693e-13 0.96310876424256 -1.4474444848434e-13 -3.6375139737622e-14 -1.3289936078502e-14 -7.5764424459907e-15 -4.1932135354206e-15 -3.5064115885589e-15 -1.8585929355107e-15 -2.4086349697695e-15 -1.4691430801912e-15 -1.2467765515571e-15 -9.0014562812279e-16 -1.1755861600411e-15 -8.4422568334123e-16 -8.5135646310401e-16 -7.3630685498878e-16 -7.3351573611486e-16 -4.9290423694867e-16 -4.0882734481803e-16 -4.2369198190198e-16 -2.4409426209215e-16 -3.1357594300988e-16 -1.9340953919962e-14 -1.7961349753334e-15 -4.981286611744e-16 -4.7007051615483e-16 +Bryanty 3.6570748323292e-16 3.6570748323292e-16 0.0061930991054498 0.024674727549327 0.055153419010694 0.097148506318218 0.14999770185804 0.21286754224631 0.28476653254335 0.3645607827218 0.45099188978957 0.54269678355677 0.63822922306682 0.73608260468035 0.83471372211454 0.93256710372808 1.0280995432381 1.1198044370053 1.2062355440731 1.2860297942515 1.3579287845486 1.4207986249369 1.4736478204768 1.5156429077842 1.5461215992456 1.5646032276894 1.5707963267949 1.5646032276894 1.5461215992456 1.5156429077842 1.4736478204768 1.4207986249369 1.3579287845486 1.2860297942515 1.2062355440731 1.1198044370053 1.0280995432381 0.93256710372808 0.83471372211454 0.73608260468035 0.63822922306682 0.54269678355676 0.45099188978957 0.3645607827218 0.28476653254335 0.21286754224631 0.14999770185804 0.097148506318082 0.055153419010822 0.024674727549338 0.0061930991054496 3.7264637713683e-16 +Bryantz 0.081088665044092 0.081088665044092 0.084598417174398 0.095046114651315 0.11219462465854 0.13567187873997 0.16499949004002 0.19962315980445 0.23893965932908 0.28231728991993 0.32910890675227 0.37865817050985 0.43030050507199 0.48336046087058 0.53714708194099 0.59094867878234 0.64402826019936 0.69562083471829 0.74493385110569 0.79115214945742 0.83344882873033 0.87100324427199 0.90302674695765 0.92879562583154 0.94768904238401 0.95922785638575 0.0 0.95922785638575 0.94768904238401 0.92879562583154 0.90302674695765 0.87100324427198 0.83344882873033 0.79115214945742 0.74493385110569 0.69562083471829 0.64402826019936 0.59094867878234 0.53714708194099 0.48336046087058 0.43030050507199 0.37865817050985 0.32910890675227 0.28231728991993 0.23893965932908 0.19962315980445 0.16499949004002 0.13567187874025 0.11219462465829 0.095046114651292 0.084598417174397 0.081088665044092 +VX -7.8167060954541e-17 -7.816706095454e-17 -0.16098273768852 -0.32523098818382 -0.4955525178432 -0.67384703265707 -0.8606776880434 -1.0548929495254 -1.2533465759151 -1.450781450055 -1.6399497280723 -1.8120273829973 -1.9573403291259 -2.0663551709683 -2.1308137851136 -2.1448291116542 -2.1057329893424 -2.014491391548 -1.8755785291204 -1.6963119775973 -1.4857667812113 -1.2534759175319 -1.0081652064446 -0.75675602056005 -0.50380756788844 -0.25147998298554 1.6537244084917e-15 0.25147998298555 0.50380756788844 0.75675602056005 1.0081652064446 1.2534759175318 1.4857667812114 1.6963119775973 1.8755785291204 2.014491391548 2.1057329893424 2.1448291116542 2.1308137851136 2.0663551709683 1.9573403291259 1.8120273829973 1.6399497280723 1.450781450055 1.2533465759151 1.0548929495254 0.86067768804339 0.67384703265706 0.4955525178432 0.32523098818381 0.16098273768851 -3.1670635626322e-15 +VY 3.4698302581632e-18 3.4698302581614e-18 0.0073996402106988 0.016429781147747 0.028528346237528 0.044785773797216 0.06585041705593 0.091896063956582 0.12263764100061 0.15737566290825 0.19505305749286 0.2343148136628 0.27356736379079 0.31103882724818 0.34484310766879 0.37305104878087 0.39377116719889 0.40524137168063 0.40593167037287 0.39465597737027 0.3706883891925 0.33387538971805 0.28473048165475 0.22449280759816 0.15512875224555 0.079258462712917 -5.2534916873924e-16 -0.079258462712918 -0.15512875224555 -0.22449280759816 -0.28473048165476 -0.33387538971802 -0.37068838919251 -0.39465597737027 -0.40593167037287 -0.40524137168062 -0.39377116719888 -0.37305104878088 -0.34484310766879 -0.31103882724818 -0.27356736379079 -0.23431481366279 -0.19505305749286 -0.15737566290826 -0.12263764100059 -0.091896063956582 -0.065850417055932 -0.044785773797492 -0.028528346237341 -0.016429781147734 -0.0073996402106983 1.4058572555938e-16 +VZ -6.6550618428535e-17 -6.6550618428535e-17 -0.13576989234632 -0.26662117318956 -0.38744291221979 -0.49282331992315 -0.57709197885043 -0.63455237271059 -0.65991246481134 -0.64888696846062 -0.59890756764757 -0.50983833169378 -0.38456109882759 -0.22928330661892 -0.053441888246716 0.13086329189522 0.3098826764446 0.46955426148533 0.59696384761511 0.68169499648378 0.71686055971355 0.69968248537635 0.63158688729382 0.51787578087684 0.36709871813771 0.19026362645918 -1.2669590374068e-15 -0.19026362645918 -0.36709871813772 -0.51787578087684 -0.63158688729382 -0.69968248537638 -0.71686055971356 -0.68169499648378 -0.5969638476151 -0.46955426148531 -0.30988267644459 -0.13086329189522 0.053441888246715 0.22928330661892 0.38456109882759 0.50983833169378 0.59890756764758 0.64888696846061 0.65991246481134 0.63455237271059 0.57709197885042 0.49282331992363 0.38744291221946 0.26662117318954 0.13576989234632 -2.6964048042977e-15 +OmegaX 4.010556516192e-30 2.7933687913392e-30 0.0021693606988846 0.017085188703509 0.056186021563952 0.12846835564802 0.23964211139807 0.39161458340081 0.58228991237377 0.80565963575138 1.0521727175381 1.3093830210689 1.5628597929242 1.7973108110124 1.9978209956964 2.1510702460418 2.2463797496749 2.2764546332215 2.2377403960266 2.1303791729863 1.9578219345062 1.7262066889583 1.4436382860335 1.1194987413263 0.76388342952903 0.38721020813904 -2.5596492917435e-15 -0.38721020813905 -0.76388342952903 -1.1194987413263 -1.4436382860335 -1.7262066889583 -1.9578219345062 -2.1303791729863 -2.2377403960266 -2.2764546332215 -2.2463797496749 -2.1510702460418 -1.9978209956964 -1.7973108110124 -1.5628597929242 -1.3093830210689 -1.0521727175381 -0.80565963575136 -0.58228991237377 -0.39161458340081 -0.23964211139806 -0.12846835564804 -0.056186021563938 -0.017085188703507 -0.0021693606988842 -2.6131017485446e-30 +OmegaY 3.0215950648218e-16 3.0215950648218e-16 0.61849471679451 1.2272354024343 1.8166218526629 2.3773590910777 2.9006039564606 3.3781045647134 3.8023304459988 4.1665913047487 4.4651425296217 4.6932757894557 4.8473932864629 4.9250644956502 4.9250644956502 4.8473932864629 4.6932757894557 4.4651425296217 4.1665913047487 3.8023304459988 3.3781045647134 2.9006039564606 2.3773590910776 1.8166218526629 1.2272354024343 0.6184947167945 -4.0808253135303e-15 -0.61849471679451 -1.2272354024343 -1.8166218526629 -2.3773590910776 -2.9006039564606 -3.3781045647134 -3.8023304459988 -4.1665913047487 -4.4651425296217 -4.6932757894557 -4.8473932864629 -4.9250644956502 -4.9250644956502 -4.8473932864629 -4.6932757894557 -4.4651425296217 -4.1665913047487 -3.8023304459988 -3.3781045647134 -2.9006039564606 -2.3773590910776 -1.8166218526629 -1.2272354024343 -0.61849471679449 1.2242475940591e-14 +OmegaZ 1.7135000290871e-16 1.7135000290871e-16 0.35028229436968 0.69227597889797 1.0176892070899 1.318228676064 1.585638620399 1.8118385253886 1.9892242031697 2.1111634227156 2.1726581887013 2.1710828949969 2.1068620032959 1.9839364495479 1.8098892607427 1.5956532483073 1.3547946556419 1.1024391550613 0.85396378744093 0.62360909342671 0.42316774398545 0.26088656666758 0.140690185341 0.061806865969271 0.018852441712282 0.0023980618525278 5.9164567891576e-31 -0.0023980618525276 -0.018852441712282 -0.061806865969273 -0.140690185341 -0.26088656666763 -0.42316774398543 -0.62360909342671 -0.85396378744093 -1.1024391550614 -1.3547946556419 -1.5956532483073 -1.8098892607427 -1.9839364495479 -2.1068620032959 -2.1710828949969 -2.1726581887013 -2.1111634227155 -1.9892242031697 -1.8118385253886 -1.5856386203989 -1.3182286760642 -1.0176892070898 -0.69227597889796 -0.35028229436967 6.9425195733625e-15 +AX 0 -8.0211592461852 -8.1047093346129 -8.3438905915806 -8.7044536094256 -9.13001164786 -9.5436991634861 -9.8517141797356 -9.9497464972497 -9.7329993122417 -9.109684462819 -8.0166234144038 -6.4342582821252 -4.3974690744239 -1.9986039045181 0.61966561359106 3.2817917772914 5.8045142496545 8.0248615661627 9.82505457859 11.148940592814 12.006578506134 12.46633989717 12.636556887273 12.640688768317 12.590918008097 12.565065304964 12.590918008097 12.640688768317 12.636556887273 12.46633989717 12.006578506135 11.148940592814 9.82505457859 8.0248615661627 5.8045142496544 3.2817917772914 0.61966561359103 -1.9986039045181 -4.3974690744239 -6.4342582821253 -8.0166234144038 -9.109684462819 -9.7329993122417 -9.9497464972496 -9.8517141797356 -9.5436991634861 -9.1300116478618 -8.7044536094249 -8.3438905915806 -8.1047093346129 -8.0211592461852 +AY 0 0.35605868658816 0.39765814441117 0.51747054962687 0.70155186728477 0.92961900831929 1.1782779687837 1.4238720487989 1.6444081368451 1.8205350959859 1.9358633014357 1.9769827713481 1.9334535533387 1.7979163330052 1.5663683020522 1.2385870239029 0.81865492691959 0.31552189062098 -0.25647396019562 -0.87723964263118 -1.5208795735772 -2.1561926482698 -2.7479756229635 -3.2593450341413 -3.6550948705465 -3.9057567398631 -3.9916243475766 -3.9057567398631 -3.6550948705465 -3.2593450341413 -2.7479756229635 -2.1561926482698 -1.5208795735773 -0.87723964263118 -0.2564739601956 0.31552189062103 0.8186549269196 1.2385870239029 1.5663683020522 1.7979163330052 1.9334535533388 1.9769827713481 1.9358633014357 1.8205350959858 1.6444081368451 1.4238720487989 1.1782779687837 0.92961900832237 0.70155186728192 0.51747054962659 0.39765814441115 0.35605868658818 +AZ 0 -6.8291311177458 -6.7070402874392 -6.3355953483274 -5.7014498854944 -4.7891445871968 -3.5898884591114 -2.1115412008289 -0.38815309676783 1.5127180424876 3.4868608700669 5.3963197984949 7.0796033336629 8.3690600080625 9.1133902368611 9.2014088632148 8.5821003606559 7.2762890236159 5.3769899285983 3.0382450876769 0.455089588154 -2.1607235432426 -4.6041116918075 -6.6950810575781 -8.2901877536179 -9.2873895275003 -9.626406287521 -9.2873895275003 -8.2901877536179 -6.6950810575781 -4.6041116918075 -2.1607235432427 0.45508958815411 3.0382450876769 5.3769899285983 7.2762890236159 8.5821003606559 9.2014088632148 9.1133902368611 8.3690600080624 7.0796033336629 5.3963197984948 3.4868608700668 1.5127180424876 -0.38815309676787 -2.1115412008289 -3.5898884591114 -4.7891445872022 -5.7014498854893 -6.3355953483269 -6.7070402874392 -6.8291311177458 +AlphaX 0 -2.8865798640254e-15 0.32426858968433 1.2635946161031 2.7221672587288 4.5540763852744 6.5793569856964 8.6003479889937 10.416806291976 11.840033321207 12.706792560787 12.893033821345 12.326159267139 10.993616702215 8.9455126183502 6.2897932104727 3.1800678234859 -0.202156840509 -3.6677455550521 -7.0390836810293 -10.164874025539 -12.928523733724 -15.249657661803 -17.079843377905 -18.394694449631 -19.184888412445 -19.448319407643 -19.184888412445 -18.394694449631 -17.079843377905 -15.249657661803 -12.928523733723 -10.164874025539 -7.0390836810292 -3.6677455550522 -0.20215684050881 3.1800678234859 6.2897932104727 8.9455126183502 10.993616702215 12.326159267139 12.893033821345 12.706792560787 11.840033321207 10.416806291976 8.6003479889937 6.5793569856964 4.5540763852749 2.7221672587285 1.263594616103 0.32426858968431 -2.6645352591004e-15 +AlphaY 0 31.0062766803 30.76178292755 30.032157481834 28.828906972288 27.171007378236 25.084604766654 22.602602953087 19.764144588808 16.613993857837 13.201830519009 9.5814664265043 5.8099968847633 1.9469002214257 -1.9469002214257 -5.8099968847632 -9.5814664265043 -13.201830519009 -16.613993857837 -19.764144588808 -22.602602953087 -25.084604766654 -27.171007378235 -28.828906972288 -30.032157481834 -30.76178292755 -31.0062766803 -30.76178292755 -30.032157481834 -28.828906972288 -27.171007378235 -25.084604766654 -22.602602953087 -19.764144588808 -16.613993857837 -13.201830519009 -9.5814664265042 -5.8099968847632 -1.9469002214256 1.9469002214257 5.8099968847633 9.5814664265043 13.201830519009 16.613993857837 19.764144588809 22.602602953087 25.084604766654 27.171007378235 28.828906972289 30.032157481834 30.76178292755 31.0062766803 +AlphaZ 0 17.583182012746 17.375978320923 16.754293708406 15.717893680709 14.267148920062 12.406261254984 10.14994473183 7.5327913765068 4.618848605119 1.508164515183 -1.6625614424779 -4.7268008457148 -7.5023198067367 -9.8106871218693 -11.498951814939 -12.459751165423 -12.64648127336 -12.081275034514 -10.8549943026 -9.1197606181718 -7.0753333793968 -4.9508023637791 -2.9828728643042 -1.3920119988338 -0.35831208797798 -5.3290705182008e-15 -0.358312087978 -1.3920119988338 -2.9828728643042 -4.9508023637791 -7.0753333793966 -9.1197606181719 -10.8549943026 -12.081275034514 -12.64648127336 -12.459751165423 -11.498951814939 -9.8106871218692 -7.5023198067368 -4.7268008457148 -1.6625614424778 1.5081645151831 4.6188486051192 7.532791376507 10.14994473183 12.406261254984 14.267148920065 15.717893680707 16.754293708406 17.375978320923 17.583182012746 +PartSeries /backhoe/base +X -0.2 -0.2 -0.20309269432295 -0.21227523076591 -0.22725861784015 -0.24755484207472 -0.27247221434115 -0.30111761733394 -0.3324121504583 -0.36512557825327 -0.39793227646133 -0.42948739710863 -0.45851748650981 -0.48391580358099 -0.50483014340327 -0.52073083447707 -0.53144896011821 -0.53717930365696 -0.5384480200306 -0.53605031258276 -0.53096728023202 -0.52427288270912 -0.51704155033269 -0.51026481012783 -0.50478224193556 -0.50122902331485 -0.5 -0.50122902331485 -0.50478224193556 -0.51026481012783 -0.51704155033269 -0.52427288270912 -0.53096728023202 -0.53605031258276 -0.5384480200306 -0.53717930365696 -0.53144896011821 -0.52073083447707 -0.50483014340327 -0.48391580358099 -0.45851748650981 -0.42948739710863 -0.39793227646133 -0.36512557825327 -0.3324121504583 -0.30111761733394 -0.27247221434115 -0.24755484207472 -0.22725861784015 -0.21227523076591 -0.20309269432295 -0.2 +Y -5.5511151231258e-17 -5.5511151231258e-17 1.1102230246252e-16 -1.1102230246252e-16 0.0 -3.3306690738755e-16 0.0 0.0 0.0 0.0 -1.1102230246252e-16 0.0 1.1102230246252e-16 -1.1102230246252e-16 1.1102230246252e-16 -1.1102230246252e-16 0.0 0.0 0.0 0.0 0.0 1.1102230246252e-16 0.0 -1.1102230246252e-16 -5.5511151231258e-17 -5.5511151231258e-17 -1.1102230246252e-16 0.0 -5.5511151231258e-17 5.5511151231258e-17 1.1102230246252e-16 -1.1102230246252e-16 1.1102230246252e-16 1.1102230246252e-16 -1.1102230246252e-16 0.0 1.1102230246252e-16 0.0 0.0 0.0 -1.1102230246252e-16 0.0 -1.1102230246252e-16 1.1102230246252e-16 -1.1102230246252e-16 -1.1102230246252e-16 -1.1102230246252e-16 -1.1102230246252e-16 -3.3306690738755e-16 -1.1102230246252e-16 1.1102230246252e-16 -1.1102230246252e-16 +Z -0.5 -0.5 -0.49875179950818 -0.49491335241967 -0.48821462556685 -0.4782432437216 -0.46449853865436 -0.44646184666904 -0.42367695503495 -0.39583242932485 -0.36283591794405 -0.32487009053598 -0.2824211652209 -0.23627419462262 -0.18747406837064 -0.13725668663062 -0.086959776846956 -0.037926187820929 0.0085866014889118 0.051478756588787 0.08985403342649 0.12303635420424 0.150559075547 0.17213315643772 0.18760300697618 0.19689963480627 0.2 0.19689963480627 0.18760300697618 0.17213315643772 0.150559075547 0.12303635420424 0.08985403342649 0.051478756588787 0.0085866014889113 -0.037926187820929 -0.086959776846956 -0.13725668663062 -0.18747406837064 -0.23627419462262 -0.2824211652209 -0.32487009053598 -0.36283591794405 -0.39583242932486 -0.42367695503495 -0.44646184666904 -0.46449853865436 -0.4782432437216 -0.48821462556685 -0.49491335241967 -0.49875179950818 -0.5 +Bryantx -5.5511151231258e-17 -5.5511151231258e-17 -5.5512215799474e-17 -5.5528054333203e-17 -5.5595688402712e-17 -5.5774139023562e-17 -5.6141540938461e-17 -5.6793019261924e-17 -5.7840548147654e-17 -5.9415940116864e-17 -6.1678013770161e-17 -6.4825313869703e-17 -6.9116619584016e-17 -7.4903287409078e-17 -8.2680948209579e-17 -9.3174819812445e-17 -1.0748660081939e-16 -1.2736049837342e-16 -1.5569448180682e-16 -1.9759541742853e-16 -2.6275778439685e-16 -3.7147142045024e-16 -5.7230488730037e-16 -1.0069965823235e-15 -2.2499451895521e-15 -8.9634454637086e-15 6.4592608846837e-28 -8.9634454638125e-15 -2.2499451895521e-15 -1.0069965823235e-15 -5.7230488730037e-16 -3.7147142045023e-16 -2.6275778439685e-16 -1.9759541742853e-16 -1.5569448180682e-16 -1.2736049837343e-16 -1.074866008194e-16 -9.3174819812457e-17 -8.2680948209595e-17 -7.4903287409096e-17 -6.9116619584032e-17 -6.4825313869716e-17 -6.1678013770171e-17 -5.9415940116869e-17 -5.7840548147657e-17 -5.6793019261926e-17 -5.6141540938462e-17 -5.5774137777322e-17 -5.5595689519531e-17 -5.5528054682345e-17 -5.551221585135e-17 -5.5511151231904e-17 +Bryanty 5.5511151231258e-17 5.5511151231258e-17 0.0061930991054495 0.024674727549327 0.055153419010682 0.097148506318083 0.14999770185804 0.21286754224631 0.28476653254335 0.3645607827218 0.45099188978957 0.54269678355677 0.63822922306682 0.73608260468035 0.83471372211454 0.93256710372808 1.0280995432381 1.1198044370053 1.2062355440731 1.2860297942515 1.3579287845486 1.4207986249369 1.4736478204768 1.5156429077842 1.5461215992456 1.5646032276894 1.5707963267949 1.5646032276894 1.5461215992456 1.5156429077842 1.4736478204768 1.4207986249369 1.3579287845486 1.2860297942515 1.2062355440731 1.1198044370053 1.0280995432381 0.93256710372807 0.83471372211454 0.73608260468035 0.63822922306682 0.54269678355676 0.45099188978957 0.3645607827218 0.28476653254335 0.21286754224631 0.14999770185804 0.097148506318082 0.055153419010681 0.024674727549326 0.0061930991054491 5.5511147958886e-17 +Bryantz -6.1629758220392e-33 -6.1629758220392e-33 3.4379045699484e-19 1.3700006356216e-18 3.0647383729843e-18 5.4098568342742e-18 8.3895594595502e-18 1.1998296790199e-17 1.6249341494395e-17 2.1184098492763e-17 2.688288436185e-17 3.3478850148804e-17 4.1177896882946e-17 5.0289308542358e-17 6.1275209390235e-17 7.4833542853884e-17 9.2042823971722e-17 1.1462638716678e-16 1.4546231042465e-16 1.8963771006247e-16 2.5682711178947e-16 3.6730032439449e-16 5.6960635189302e-16 1.0054653792649e-15 2.249260293536e-15 8.9632735701287e-15 0.0 8.9632735702332e-15 2.249260293536e-15 1.0054653792649e-15 5.6960635189301e-16 3.6730032439449e-16 2.5682711178947e-16 1.8963771006246e-16 1.4546231042465e-16 1.1462638716678e-16 9.2042823971718e-17 7.4833542853881e-17 6.1275209390234e-17 5.0289308542359e-17 4.1177896882948e-17 3.3478850148807e-17 2.6882884361852e-17 2.1184098492765e-17 1.6249341494396e-17 1.19982967902e-17 8.3895594595504e-18 5.4098552461338e-18 3.0647392771137e-18 1.3700009438706e-18 3.4379050543312e-19 6.3012729994857e-28 +VX -1.5107975324109e-16 -1.5107975324109e-16 -0.30847535298756 -0.60737518722688 -0.88690135759437 -1.136955923208 -1.347326298991 -1.5081948022031 -1.6109597853975 -1.6492719581625 -1.6201140884863 -1.5247049306308 -1.3690064602468 -1.1636656471742 -0.92332187798733 -0.66533714129541 -0.40812621533229 -0.16934583422565 0.035776859101042 0.1957392434997 0.30353632047594 0.35687973579332 0.3579329869959 0.3127008535526 0.23023305176431 0.12178138386644 -8.1616506270606e-16 -0.12178138386644 -0.23023305176431 -0.3127008535526 -0.35793298699591 -0.35687973579332 -0.30353632047593 -0.1957392434997 -0.03577685910104 0.16934583422565 0.40812621533229 0.66533714129542 0.92332187798733 1.1636656471742 1.3690064602468 1.5247049306308 1.6201140884863 1.6492719581625 1.6109597853975 1.5081948022031 1.347326298991 1.136955923208 0.88690135759436 0.60737518722687 0.30847535298755 -6.1212379702954e-15 +VY 2.7369110631344e-48 2.7369110631344e-48 -4.9873299934358e-18 -1.1275702594997e-17 -1.3877787828551e-17 -2.0816681846576e-17 -2.7755575615629e-17 -8.3266726846887e-17 -1.6653345369377e-16 -1.1102230246252e-16 -4.1291938007662e-30 -7.4756896721335e-30 -1.1185801117001e-29 -1.1102230246253e-16 -1.1102230246253e-16 -1.3894428990787e-29 -1.0840674470967e-29 -7.087422195345e-30 -3.8333709613084e-30 -2.2204460492503e-16 -2.2204460492503e-16 -1.3558546808486e-31 -1.1102230246252e-16 1.2325951644078e-32 -5.5511151231258e-17 -2.7755575615629e-17 -1.9721522630524e-31 -2.445160657394e-30 -5.5511151231258e-17 -5.5511151231258e-17 -1.2325951644078e-32 -5.5466782398352e-32 -1.9105225048321e-31 1.1102230246251e-16 1.1102230246251e-16 -2.2204460492504e-16 -4.4408920985007e-16 -3.3306690738756e-16 2.2204460492502e-16 1.110223024625e-16 -1.3897510478698e-29 2.2204460492502e-16 -5.5511151231265e-17 5.5511151231254e-17 5.5511151231256e-17 5.5511151231257e-17 1.3877787807814e-17 -6.9388939039073e-18 1.3877787704768e-17 1.127570257984e-17 4.9873299928548e-18 4.8454273461732e-44 +VZ 6.0431901296437e-17 6.0431901296437e-17 0.1256117584583 0.26051167825585 0.41284297137438 0.58852675434662 0.79033398294351 1.0172067976314 1.2639408403075 1.5213290594914 1.7768243315367 2.0157028027263 2.2226145858335 2.3833165431008 2.4863210156094 2.5241871510984 2.4942365378542 2.3985821547912 2.2434928383186 2.0382404241206 1.7936629930652 1.5207079978511 1.2291934301483 0.92695820472308 0.61948663782349 0.3100075028243 -2.0404126567651e-15 -0.31000750282431 -0.6194866378235 -0.92695820472309 -1.2291934301483 -1.5207079978511 -1.7936629930652 -2.0382404241206 -2.2434928383186 -2.3985821547912 -2.4942365378542 -2.5241871510984 -2.4863210156094 -2.3833165431008 -2.2226145858335 -2.0157028027263 -1.7768243315367 -1.5213290594914 -1.2639408403075 -1.0172067976314 -0.79033398294351 -0.58852675434661 -0.41284297137438 -0.26051167825584 -0.1256117584583 2.4484951881182e-15 +OmegaX -8.3866110301473e-33 -8.3866110301473e-33 -1.7272661923278e-17 -3.4892656895184e-17 -5.3124218739953e-17 -7.2074101920036e-17 -9.163471492691e-17 -1.1145329860195e-16 -1.3093420254479e-16 -1.492782840915e-16 -1.6555830065325e-16 -1.7882280341343e-16 -1.8821459220263e-16 -1.9308513354504e-16 -1.9308513354504e-16 -1.8821459220264e-16 -1.7882280341344e-16 -1.6555830065325e-16 -1.492782840915e-16 -1.3093420254479e-16 -1.1145329860196e-16 -9.163471492691e-17 -7.2074100041148e-17 -5.3124218361545e-17 -3.4892656862237e-17 -1.7272661923077e-17 1.1326565556515e-31 1.7272661923278e-17 3.4892656862238e-17 5.3124218361546e-17 7.2074100041148e-17 9.163471492691e-17 1.1145329860195e-16 1.3093420254479e-16 1.492782840915e-16 1.6555830065325e-16 1.7882280341343e-16 1.8821459220263e-16 1.9308513354504e-16 1.9308513354504e-16 1.8821459220264e-16 1.7882280341344e-16 1.6555830065325e-16 1.492782840915e-16 1.3093420254479e-16 1.1145329860196e-16 9.163471492691e-17 7.2074100041147e-17 5.3124219559935e-17 3.4892657084273e-17 1.7272661938257e-17 -3.3979696669544e-31 +OmegaY 3.0215950648218e-16 3.0215950648218e-16 0.61849471679451 1.2272354024343 1.8166218526629 2.3773590910776 2.9006039564606 3.3781045647134 3.8023304459988 4.1665913047487 4.4651425296217 4.6932757894557 4.8473932864629 4.9250644956502 4.9250644956502 4.8473932864629 4.6932757894557 4.4651425296217 4.1665913047487 3.8023304459988 3.3781045647134 2.9006039564606 2.3773590910776 1.8166218526629 1.2272354024343 0.6184947167945 -4.0808253135303e-15 -0.61849471679451 -1.2272354024343 -1.8166218526629 -2.3773590910776 -2.9006039564606 -3.3781045647134 -3.8023304459988 -4.1665913047487 -4.4651425296217 -4.6932757894557 -4.8473932864629 -4.9250644956502 -4.9250644956502 -4.8473932864629 -4.6932757894557 -4.4651425296217 -4.1665913047487 -3.8023304459988 -3.3781045647134 -2.9006039564606 -2.3773590910776 -1.8166218526629 -1.2272354024343 -0.61849471679449 1.2242475940591e-14 +OmegaZ -8.3866110301474e-33 -8.3866110301474e-33 -1.706003342003e-17 -3.3211855477109e-17 -4.7565214413969e-17 -5.9273575847029e-17 -6.7573170661525e-17 -7.1836628815294e-17 -7.1637102158913e-17 -6.6813571233692e-17 -5.7524154259837e-17 -4.4273264233238e-17 -2.7901067129353e-17 -9.5298280848564e-18 9.5298280848977e-18 2.790106712939e-17 4.4273264233266e-17 5.7524154259855e-17 6.6813571233703e-17 7.1637102158918e-17 7.1836628815296e-17 6.7573170661525e-17 5.9273574548757e-17 4.7565214114522e-17 3.3211855447991e-17 1.7060033419836e-17 -1.1326565556518e-31 -1.706003342003e-17 -3.3211855447991e-17 -4.7565214114522e-17 -5.9273574548757e-17 -6.7573170661525e-17 -7.1836628815294e-17 -7.1637102158913e-17 -6.6813571233692e-17 -5.7524154259837e-17 -4.4273264233238e-17 -2.7901067129353e-17 -9.529828084856e-18 9.5298280848982e-18 2.790106712939e-17 4.4273264233267e-17 5.7524154259856e-17 6.6813571233703e-17 7.1637102158918e-17 7.1836628815296e-17 6.7573170661525e-17 5.9273574548757e-17 4.7565215383118e-17 3.3211855686682e-17 1.7060033435979e-17 -3.3979696669554e-31 +AX 0 -15.50313834015 -15.264804382222 -14.543606585427 -13.32471445946 -11.595211273962 -9.3593163789818 -6.6549689276262 -3.5676918592144 -0.23760111859752 3.1436755955046 6.3475172973273 9.1330209316391 11.277985406494 12.610284663989 13.033188771747 12.539342138602 11.210706293994 9.2050600080078 6.7326300324263 4.0282461031588 1.3246533180446 -1.1686075766919 -3.2784782225842 -4.8738671163023 -5.8652458217607 -6.20125533606 -5.8652458217607 -4.8738671163022 -3.2784782225842 -1.1686075766918 1.3246533180446 4.0282461031589 6.7326300324263 9.2050600080078 11.210706293994 12.539342138602 13.033188771747 12.610284663989 11.277985406494 9.1330209316391 6.3475172973272 3.1436755955045 -0.2376011185976 -3.5676918592144 -6.6549689276262 -9.3593163789818 -11.595211273962 -13.32471445946 -14.543606585427 -15.264804382222 -15.50313834015 +AY 0 3.7360623231804e-32 2.6399841241022e-17 7.7264063025617e-17 2.2630938524186e-16 -4.9894735618458e-16 -2.7024616064048e-16 5.8478339720245e-16 6.8850088234968e-17 -8.5764379787216e-16 -8.9678474411738e-16 -9.0010181854406e-16 -8.4976031360425e-17 -8.4775769089513e-17 -1.1719817088129e-16 5.2881081964466e-16 1.127302259153e-16 2.3339181066539e-16 -2.1061681908751e-16 1.0719785920141e-15 -1.1238931855663e-15 1.1238952289174e-15 2.2984176643419e-16 -4.2254226053575e-16 -4.2287182795299e-16 6.0268692157825e-16 -2.5817911701107e-16 -1.1736699176897e-15 -1.3110502476697e-15 -4.2254226048612e-16 1.9431462964773e-16 -2.4389953743729e-16 -6.7980397571621e-16 1.8380017231399e-16 1.1038872421018e-15 2.0228989953905e-17 -6.6886678345389e-16 -1.7093987979666e-15 -1.0053765905235e-15 -9.7295418881445e-16 8.3872952522697e-16 -4.7450535648484e-17 -8.2573047050829e-16 6.6061758632517e-17 -3.397119848519e-16 -3.3892215928568e-16 5.8240512226337e-16 -4.2789308829958e-16 -1.0675751705025e-16 -1.3774223339283e-17 2.4734507142491e-17 -4.9303805872268e-32 +AZ 0 6.20125533606 6.4382837530178 7.1204754921795 8.1627819397268 9.4292669407231 10.742917800139 11.900881692578 12.695243244031 12.938036314485 12.487474791225 11.270979812996 9.3000978927562 6.6732641488487 3.5645658813583 0.19970626583787 -3.176611483312 -6.335596838583 -9.0948396475945 -11.338841169797 -13.026620045921 -14.186344826255 -14.899475019575 -15.278435946317 -15.442249935778 -15.494019554725 -15.50313834015 -15.494019554724 -15.442249935778 -15.278435946317 -14.899475019575 -14.186344826255 -13.026620045921 -11.338841169797 -9.0948396475945 -6.335596838583 -3.176611483312 0.19970626583792 3.5645658813584 6.6732641488488 9.3000978927563 11.270979812996 12.487474791225 12.938036314485 12.695243244031 11.900881692578 10.742917800139 9.429266940723 8.1627819397268 7.1204754921795 6.4382837530178 6.20125533606 +AlphaX 0 -1.2670471249637e-48 -1.0551540538626e-17 -4.075876482204e-17 -8.6408007931012e-17 -1.4091457440061e-16 -1.9600300617141e-16 -2.4267164371456e-16 -2.7238793460196e-16 -2.7838484494151e-16 -2.5685354766612e-16 -2.0778663914603e-16 -1.3524744548798e-16 -4.6935017950377e-17 4.693501795058e-17 1.3524744548815e-16 2.0778663914616e-16 2.568535476662e-16 2.7838484494155e-16 2.7238793460198e-16 2.4267164371457e-16 1.9600300617141e-16 1.4091457131416e-16 8.6408007387029e-17 4.0758764786306e-17 1.0551540538506e-17 -4.0940317663024e-33 1.0551540538626e-17 4.0758764786306e-17 8.6408007387029e-17 1.4091457131416e-16 1.9600300617141e-16 2.4267164371456e-16 2.7238793460196e-16 2.7838484494151e-16 2.5685354766611e-16 2.0778663914603e-16 1.3524744548798e-16 4.6935017950375e-17 -4.6935017950583e-17 -1.3524744548816e-16 -2.0778663914616e-16 -2.568535476662e-16 -2.7838484494155e-16 -2.7238793460198e-16 -2.4267164371457e-16 -1.9600300617141e-16 -1.4091457131415e-16 -8.6408009691587e-17 -4.0758765079235e-17 -1.055154054849e-17 -2.0799780948785e-45 +AlphaY 0 31.0062766803 30.76178292755 30.032157481834 28.828906972288 27.171007378235 25.084604766654 22.602602953087 19.764144588808 16.613993857837 13.201830519009 9.5814664265043 5.8099968847633 1.9469002214257 -1.9469002214256 -5.8099968847633 -9.5814664265043 -13.201830519009 -16.613993857837 -19.764144588808 -22.602602953087 -25.084604766654 -27.171007378235 -28.828906972288 -30.032157481834 -30.76178292755 -31.0062766803 -30.76178292755 -30.032157481834 -28.828906972288 -27.171007378235 -25.084604766654 -22.602602953087 -19.764144588808 -16.613993857837 -13.201830519009 -9.5814664265042 -5.8099968847632 -1.9469002214256 1.9469002214257 5.8099968847633 9.5814664265043 13.201830519009 16.613993857837 19.764144588809 22.602602953087 25.084604766654 27.171007378235 28.828906972288 30.032157481834 30.76178292755 31.0062766803 +AlphaZ 0 9.8607613152626e-32 1.0683050144525e-17 4.2821503826764e-17 9.6506616668641e-17 1.7134602143085e-16 2.6579601666614e-16 3.7650089675963e-16 4.9785510475861e-16 6.2198160048343e-16 7.3924140937871e-16 8.3926473386286e-16 9.1235015065739e-16 9.5095673586055e-16 9.5095673586056e-16 9.1235015065741e-16 8.3926473386288e-16 7.3924140937873e-16 6.2198160048345e-16 4.9785510475862e-16 3.7650089675963e-16 2.6579601666614e-16 1.7134601696406e-16 9.6506615981217e-17 4.2821503786331e-17 1.06830501444e-17 -1.9721522630525e-31 1.0683050144525e-17 4.2821503786331e-17 9.6506615981218e-17 1.7134601696406e-16 2.6579601666614e-16 3.7650089675963e-16 4.9785510475861e-16 6.2198160048343e-16 7.3924140937871e-16 8.3926473386286e-16 9.123501506574e-16 9.5095673586055e-16 9.5095673586056e-16 9.1235015065741e-16 8.3926473386288e-16 7.3924140937873e-16 6.2198160048345e-16 4.9785510475861e-16 3.7650089675963e-16 2.6579601666613e-16 1.7134601696406e-16 9.6506618158237e-17 4.282150405882e-17 1.0683050153789e-17 9.8607611744532e-32 +PartSeries /backhoe/bucket +X 7.1767255092827 7.1767255092827 7.1752109169777 7.1687736747107 7.1519030364429 7.1159789402969 7.0501105205609 6.9422777262662 6.7807125577004 6.5554075938284 6.2595891893459 5.8909578445825 5.4524960701544 4.9526855947314 4.4050600217492 3.8271309129709 3.23883853974 2.6607636181652 2.1123700840141 1.6105225962653 1.168444501231 0.79517524371014 0.49548098431464 0.270101208336 0.11622341040713 0.028297107247744 -5.7167778114265e-15 0.028297107247769 0.11622341040713 0.270101208336 0.49548098431464 0.79517524371015 1.168444501231 1.6105225962653 2.1123700840141 2.6607636181652 3.2388385397401 3.8271309129709 4.4050600217492 4.9526855947314 5.4524960701544 5.8909578445825 6.2595891893459 6.5554075938284 6.7807125577004 6.9422777262662 7.0501105205609 7.1159789402929 7.1519030364466 7.1687736747113 7.1752109169777 7.1767255092827 +Y 0.69665687713392 0.69665687713391 0.70454822788968 0.72794318953507 0.76601982818535 0.81745528276671 0.88048404670903 0.95296109848244 1.0324215898158 1.1161341155307 1.2011494057209 1.2843492176143 1.3625011937529 1.4323251558164 1.4905755216793 1.5341439170133 1.5601860639332 1.5662780505999 1.550609638631 1.512227460478 1.4513515836856 1.3698120602057 1.2717043781084 1.1644718966146 1.060746161044 0.98063602803171 0.9494479305472 0.98063602803383 1.060746161044 1.1644718966146 1.2717043781084 1.3698120602057 1.4513515836856 1.512227460478 1.550609638631 1.5662780505999 1.5601860639332 1.5341439170133 1.4905755216793 1.4323251558164 1.3625011937529 1.2843492176143 1.2011494057209 1.1161341155307 1.0324215898158 0.95296109848243 0.88048404670904 0.81745528276765 0.76601982818446 0.72794318953503 0.70454822788969 0.69665687713392 +Z -3.7952352359805e-15 -3.7918355777536e-15 -0.044437360436701 -0.17692344489571 -0.39485235318336 -0.69348977903833 -1.0655034186238 -1.5005184852449 -1.9848645088692 -2.501666729074 -3.0313875428161 -3.552844618372 -4.0446345635313 -4.486794607249 -4.8624640134845 -5.1592834742334 -5.3703055867838 -5.4942784267694 -5.5352884254281 -5.501882241412 -5.4059089008493 -5.2614315950403 -5.0841877649424 -4.8923037597991 -4.7092646506115 -4.5690768049141 -4.514620507586 -4.5690768049186 -4.7092646506116 -4.8923037597991 -5.0841877649423 -5.2614315950403 -5.4059089008493 -5.501882241412 -5.5352884254281 -5.4942784267694 -5.3703055867838 -5.1592834742334 -4.8624640134845 -4.486794607249 -4.0446345635313 -3.552844618372 -3.0313875428161 -2.501666729074 -1.9848645088692 -1.5005184852449 -1.0655034186237 -0.6934897790382 -0.39485235318377 -0.17692344489563 -0.044437360436695 -3.8928641909476e-15 +Bryantx -4.8843816848982e-16 -5.3402553015872e-16 -5.6213293199821e-16 -4.9222375312414e-15 -7.4563394211125e-14 1.8167261741887e-13 -6.4569966698714e-16 -8.404403202936e-16 -5.8407247219226e-16 -8.7965129397507e-16 -1.1301920733864e-15 -1.0370507878566e-15 -1.4198665960009e-15 -1.0549467876289e-15 -1.5808301410596e-15 -1.3648785612056e-15 -1.4693450733564e-15 -1.8700732074714e-15 -2.0532933674877e-15 -3.4448546686107e-15 -3.7236223683841e-15 -7.1140539680468e-15 -9.4426825045578e-15 -1.5702927192486e-14 -3.4032131904042e-14 -1.4264504384387e-13 -1.2423993167135 -2.2897403669885e-12 -3.5719590796206e-14 -1.5765864478881e-14 -9.4426825045578e-15 -5.0709611555705e-15 -4.0520695988801e-15 -3.197860396825e-15 -2.676071294715e-15 -2.1884744534049e-15 -1.5230883737661e-15 -1.1785289215808e-15 -1.6221706151644e-15 -1.0923984313334e-15 -1.3680291313129e-15 -7.4533687544294e-16 -1.0530945561737e-15 -9.7759475776146e-16 -5.262319240446e-16 -7.5525079140072e-16 -5.6148735557945e-16 -5.6937776751104e-16 -2.4282374409319e-13 -1.0340124180457e-13 -5.0863785196039e-15 -5.0626995454309e-16 +Bryanty 2.5270002791123e-16 1.2546094356006e-16 0.0061930991054497 0.024674727549345 0.055153419011336 0.097148506323072 0.14999770185804 0.21286754224631 0.28476653254335 0.3645607827218 0.45099188978957 0.54269678355677 0.63822922306682 0.73608260468035 0.83471372211454 0.93256710372808 1.0280995432381 1.1198044370053 1.2062355440731 1.2860297942515 1.3579287845486 1.4207986249369 1.4736478204768 1.5156429077842 1.5461215992456 1.5646032276894 1.5707963267949 1.5646032276894 1.5461215992456 1.5156429077842 1.4736478204768 1.4207986249369 1.3579287845486 1.2860297942515 1.2062355440731 1.1198044370053 1.0280995432381 0.93256710372808 0.83471372211454 0.73608260468035 0.63822922306682 0.54269678355676 0.45099188978957 0.3645607827218 0.28476653254335 0.21286754224631 0.14999770185804 0.097148506318082 0.055153419015051 0.024674727549889 0.0061930991054656 1.8444154174327e-16 +Bryantz 0.57131247106064 0.84524818857705 0.83617112086131 0.80968737872636 0.76771899225022 0.71267813768207 0.64688845299942 0.57230731031499 0.49047980647624 0.40259888425611 0.30959116712715 0.21219514974613 0.11102352650303 0.0066111198646695 -0.1005475257816 -0.2099666537632 -0.32113996260041 -0.43350938822571 -0.54642687936527 -0.65910095572611 -0.77051235094149 -0.87926548736068 -0.98330213912591 -1.0793180951838 -1.1616079024428 -1.2203776681843 0.0 -1.2203776681807 -1.1616079024428 -1.0793180951838 -0.98330213912592 -0.87926548736069 -0.77051235094148 -0.65910095572611 -0.54642687936527 -0.43350938822571 -0.32113996260041 -0.2099666537632 -0.10054752578159 0.0066111198646707 0.11102352650303 0.21219514974613 0.30959116712715 0.40259888425611 0.49047980647624 0.57230731031498 0.64688845299941 0.71267813769539 0.76771899223811 0.80968737872365 0.8361711208612 0.84524818857705 +VX -6.6019128150395e-17 -6.6019128150398e-17 -0.16737949973917 -0.52269156678513 -1.2369077841561 -2.4472176679784 -4.2409557483545 -6.6416671144301 -9.5994967650849 -12.988504992213 -16.613190904163 -20.225279712038 -23.54983939257 -26.317514602025 -28.297792767037 -29.327425553257 -29.328811359251 -28.315225592009 -26.382713641762 -23.691394592074 -20.441027065429 -16.846402290484 -13.117253754715 -9.4447555758752 -5.9906864411974 -2.8583641536282 1.842337764834e-14 2.8583641536307 5.9906864411974 9.4447555758752 13.117253754715 16.846402290484 20.441027065429 23.691394592074 26.382713641762 28.315225592009 29.328811359251 29.327425553257 28.297792767037 26.317514602025 23.54983939257 20.225279712038 16.613190904163 12.988504992213 9.5994967650848 6.64166711443 4.2409557483545 2.4472176679791 1.2369077841567 0.52269156678506 0.16737949973916 -2.6748706251533e-15 +VY 3.856522507387e-16 3.8565225073869e-16 0.7867960032603 1.5458144579747 2.2507755271317 2.8780037392121 3.40694739637 3.8201732488259 4.1030742077921 4.2435610835568 4.2319375238674 4.0610526624679 3.7267419230644 3.2285227222411 2.5705055830813 1.7625022741293 0.82135349875911 -0.22744023732041 -1.3476044603111 -2.4891326271533 -3.583727669829 -4.5369526294868 -5.2132916695462 -5.4070008989294 -4.7980505415242 -2.98667430933 2.1452563198651e-14 2.9866743093137 4.7980505415242 5.4070008989292 5.2132916695462 4.536952629487 3.5837276698291 2.4891326271534 1.3476044603113 0.22744023732031 -0.82135349875917 -1.7625022741294 -2.5705055830813 -3.2285227222412 -3.7267419230644 -4.061052662468 -4.2319375238674 -4.2435610835567 -4.1030742077922 -3.8201732488259 -3.40694739637 -2.8780037391999 -2.2507755271402 -1.5458144579756 -0.7867960032603 1.562531808471e-14 +VZ -2.168515838043e-15 -2.1685158380429e-15 -4.4369636479546 -8.7902315856389 -12.963615961677 -16.839414944736 -20.275722425258 -23.111800693563 -25.181731033233 -26.3348207267 -26.459534361762 -25.506397512613 -23.504823688376 -20.569480248164 -16.89369025395 -12.730122677184 -8.3619680315886 -4.0701304540323 -0.10309781868489 3.3440124288351 6.135598118926 8.1814551395076 9.3942325036904 9.6034344330856 8.4194572435479 5.216368248739 -3.7452346406462e-14 -5.2163682487086 -8.4194572435479 -9.6034344330853 -9.3942325036904 -8.1814551395077 -6.1355981189261 -3.3440124288351 0.1030978186848 4.0701304540323 8.3619680315887 12.730122677184 16.89369025395 20.569480248164 23.504823688376 25.506397512613 26.459534361762 26.3348207267 25.181731033233 23.111800693562 20.275722425258 16.839414944742 12.963615961673 8.7902315856383 4.4369636479544 -8.7860889379618e-14 +OmegaX 3.4589701801195e-30 -5.5466782398352e-32 -0.005580979254517 -0.042696570722941 -0.13481934488426 -0.29475286655212 -0.52658408287292 -0.8284668650665 -1.1943601469113 -1.6147780381934 -2.0771413659511 -2.5661757219239 -3.0645632442014 -3.5538757861821 -4.0156953398093 -4.4327485417628 -4.78983879181 -5.0743431902866 -5.2760278624167 -5.3858677299702 -5.3933146918608 -5.2807858804737 -5.0125554585602 -4.512496287365 -3.6275383484795 -2.1296480140861 1.5003481235563e-14 2.1296480140764 3.6275383484795 4.512496287365 5.0125554585602 5.2807858804738 5.3933146918609 5.3858677299702 5.2760278624167 5.0743431902866 4.7898387918099 4.4327485417628 4.0156953398093 3.553875786182 3.0645632442014 2.5661757219239 2.0771413659511 1.6147780381934 1.1943601469113 0.82846686506649 0.5265840828729 0.2947528665587 0.13481934488122 0.042696570722597 0.0055809792545129 -2.9779499172093e-29 +OmegaY 3.0215950648218e-16 3.0215950648218e-16 0.61849471679451 1.2272354024344 1.816621852665 2.3773590910949 2.9006039564606 3.3781045647134 3.8023304459988 4.1665913047487 4.4651425296217 4.6932757894557 4.8473932864629 4.9250644956502 4.9250644956502 4.8473932864629 4.6932757894557 4.4651425296217 4.1665913047487 3.8023304459988 3.3781045647134 2.9006039564606 2.3773590910776 1.8166218526629 1.2272354024343 0.6184947167945 -4.0808253135307e-15 -0.61849471679458 -1.2272354024343 -1.8166218526629 -2.3773590910776 -2.9006039564606 -3.3781045647134 -3.8023304459988 -4.1665913047487 -4.4651425296217 -4.6932757894557 -4.8473932864629 -4.9250644956502 -4.9250644956502 -4.8473932864629 -4.6932757894557 -4.4651425296217 -4.1665913047487 -3.8023304459988 -3.3781045647134 -2.9006039564606 -2.3773590910776 -1.8166218526763 -1.2272354024357 -0.61849471679452 1.2242475940591e-14 +OmegaZ -2.4387651662716e-16 -4.455265883769e-16 -0.901149458044 -1.7300253925053 -2.4419631142553 -3.0244933009621 -3.4842459608599 -3.8329731495191 -4.080184219321 -4.2313902531048 -4.2891420035896 -4.2549659845726 -4.1312802883134 -3.9228961769838 -3.6379454844011 -3.2881909006032 -2.8887582330947 -2.4573978051451 -2.0134313810634 -1.5765625833145 -1.1657223624548 -0.79810031236462 -0.48850003724583 -0.24913226154197 -0.089526690369418 -0.013189289834153 1.3801621925037e-28 0.013189289834117 0.08952669036942 0.24913226154195 0.48850003724583 0.79810031236459 1.1657223624548 1.5765625833146 2.0134313810634 2.4573978051451 2.8887582330947 3.2881909006032 3.6379454844011 3.9228961769838 4.1312802883134 4.2549659845726 4.2891420035896 4.2313902531048 4.080184219321 3.8329731495191 3.4842459608599 3.0244933010139 2.4419631142126 1.730025392498 0.90114945804382 -1.8051222688965e-14 +AX 0 -6.7745919281348 -11.543603732594 -25.426449358263 -47.151977317306 -74.618678611566 -104.95967249667 -134.69853381335 -160.02963953793 -177.22791501736 -183.14956526226 -175.74072583476 -154.44216191803 -120.38008836545 -76.271618038487 -26.040599925167 25.78429035042 74.757721232707 117.13809150755 150.30806275142 172.92172627624 184.78201697584 186.53263256781 179.35162258467 165.11879448886 148.38273330936 139.98157256476 148.38273330945 165.11879448886 179.35162258467 186.53263256781 184.78201697584 172.92172627624 150.30806275142 117.13809150755 74.757721232706 25.784290350419 -26.040599925167 -76.271618038487 -120.38008836545 -154.44216191803 -175.74072583476 -183.14956526226 -177.22791501736 -160.02963953793 -134.69853381335 -104.95967249667 -74.618678611666 -47.151977317265 -25.426449358256 -11.543603732594 -6.7745919281348 +AY 0 39.5739340721 38.872887592172 36.809012361256 33.489375626144 29.062217392511 23.687149272258 17.513991380007 10.675476189502 3.2922816046226 -4.5146001855797 -12.609175739497 -20.826681544604 -28.961905300504 -36.759140930137 -43.902189795139 -50.001906040355 -54.577564679813 -57.025756230603 -56.564047196806 -52.120049191251 -42.096345720502 -23.864852287523 7.1416547154049 57.436232752213 124.55873538385 162.99744755886 124.55873538335 57.436232752213 7.1416547154067 -23.864852287522 -42.096345720504 -52.12004919125 -56.564047196806 -57.025756230605 -54.577564679812 -50.001906040355 -43.902189795138 -36.759140930136 -28.961905300505 -20.826681544605 -12.609175739498 -4.5146001855796 3.292281604623 10.675476189503 17.513991380007 23.687149272258 29.06221739242 33.489375626251 36.809012361277 38.872887592173 39.5739340721 +AZ 0 -222.52353679938 -220.48619944042 -214.04689819014 -202.31314658887 -184.07975381089 -158.19995669553 -124.00781612759 -81.708943914588 -32.650852035541 20.606345503591 74.467848459094 124.728448375 167.17838514183 198.27033497504 215.69834054568 218.75035773199 208.34454556111 186.72702467 156.86488555069 121.57564697008 82.351178209435 37.6273636708 -19.848394314153 -104.33951649111 -217.96618577701 -284.56445100822 -217.96618577609 -104.33951649111 -19.848394314157 37.6273636708 82.351178209441 121.57564697008 156.86488555069 186.72702467 208.34454556111 218.75035773199 215.69834054568 198.27033497504 167.17838514183 124.728448375 74.467848459093 20.606345503589 -32.650852035542 -81.708943914589 -124.0078161276 -158.19995669553 -184.07975381094 -202.31314658881 -214.04689819013 -220.48619944042 -222.52353679938 +AlphaX 0 -4.4408920985006e-14 -0.82844118851786 -3.0806520100558 -6.2361392843513 -9.7887483421929 -13.377581584283 -16.759810578612 -19.750228752708 -22.186425363433 -23.922079689312 -24.836250739619 -24.847978582537 -23.9288204322 -22.108385596468 -19.469853675384 -16.134100045893 -12.231982460302 -7.8634233127497 -3.0369520737801 2.4301895546529 9.1028246211604 18.321642748359 32.932505082222 57.653003934958 92.94946261505 113.99706054928 92.949462614759 57.653003934958 32.932505082223 18.32164274836 9.1028246211594 2.4301895546533 -3.0369520737804 -7.8634233127506 -12.231982460302 -16.134100045893 -19.469853675384 -22.108385596468 -23.928820432199 -24.847978582537 -24.836250739619 -23.922079689312 -22.186425363433 -19.750228752708 -16.759810578612 -13.377581584283 -9.7887483423153 -6.2361392842553 -3.0806520100403 -0.82844118851752 -4.2632564145606e-14 +AlphaY 0 31.0062766803 30.76178292755 30.032157481835 28.82890697232 27.171007378409 25.084604766654 22.602602953087 19.764144588808 16.613993857837 13.201830519009 9.5814664265043 5.8099968847632 1.9469002214256 -1.9469002214257 -5.8099968847633 -9.5814664265043 -13.201830519009 -16.613993857837 -19.764144588808 -22.602602953087 -25.084604766654 -27.171007378235 -28.828906972288 -30.032157481834 -30.76178292755 -31.006276680303 -30.761782927553 -30.032157481834 -28.828906972288 -27.171007378235 -25.084604766654 -22.602602953087 -19.764144588808 -16.613993857837 -13.201830519009 -9.5814664265042 -5.8099968847632 -1.9469002214256 1.9469002214256 5.8099968847633 9.5814664265043 13.201830519009 16.613993857837 19.764144588809 22.602602953087 25.084604766654 27.171007378235 28.828906972487 30.032157481868 30.761782927551 31.0062766803 +AlphaZ 0 -45.717974683212 -43.768097667882 -38.744757926624 -32.358506356905 -25.962177791177 -20.116880467384 -14.836169808423 -9.9297791306508 -5.210368273781 -0.57588979016917 3.9746093520985 8.3546438843955 12.416255689802 15.98055491286 18.868220368123 20.926227663142 22.047788351974 22.183677351965 21.344621285327 19.595600151507 17.043072900736 13.815363989725 10.040670195544 5.8774159977143 1.8928791596437 9.8667537799833e-13 1.8928791596372 5.8774159977143 10.040670195544 13.815363989725 17.043072900737 19.595600151507 21.344621285327 22.183677351965 22.047788351974 20.926227663142 18.868220368123 15.98055491286 12.416255689802 8.3546438843952 3.9746093520983 -0.57588979016927 -5.2103682737807 -9.9297791306511 -14.836169808423 -20.116880467384 -25.962177791021 -32.358506356771 -38.744757926517 -43.768097667875 -45.717974683212 +PartSeries /backhoe/forearm +X 3.6721084019928 3.6721084019928 3.6707729003608 3.6657027491216 3.653811105139 3.6302991945941 3.5891686184973 3.5239151971343 3.4283609434 3.2975487514835 3.1285921002215 2.9213511677831 2.6788090479221 2.4070543751826 2.1148379989758 1.8127497403998 1.5121375737549 1.2239450952522 0.95765878768992 0.72053030051077 0.51717898044039 0.34960337623345 0.21755709483428 0.11918995066779 0.051828072301996 0.01276897315284 -1.3319609263315e-14 0.012768973152829 0.051828072301996 0.11918995066779 0.21755709483429 0.34960337623345 0.51717898044039 0.72053030051077 0.95765878768992 1.2239450952522 1.5121375737549 1.8127497403998 2.1148379989758 2.4070543751826 2.6788090479221 2.9213511677831 3.1285921002215 3.2975487514835 3.4283609434 3.5239151971343 3.5891686184973 3.6302991945938 3.6538111051393 3.6657027491216 3.6707729003608 3.6721084019928 +Y 0.78417219745461 0.78417219745461 0.79643479398039 0.83291769231501 0.89272646703391 0.97443308542948 1.0761552445254 1.1956445554631 1.3303718292707 1.4776032643099 1.6344668106036 1.7980116232819 1.9652648831368 2.1332897861595 2.299246887302 2.460458832863 2.6144762235433 2.7591401193314 2.8926346054093 3.013520873165 3.1207422689545 3.2135871224978 3.29159113112 3.3543501232511 3.4011998656124 3.4307836261529 3.441041274518 3.4307836261523 3.4011998656124 3.3543501232511 3.29159113112 3.2135871224978 3.1207422689545 3.013520873165 2.8926346054093 2.7591401193314 2.6144762235433 2.460458832863 2.299246887302 2.1332897861595 1.9652648831368 1.7980116232819 1.6344668106036 1.4776032643099 1.3303718292707 1.1956445554631 1.0761552445254 0.97443308543038 0.89272646703312 0.83291769231494 0.79643479398039 0.78417219745461 +Z -1.0449409808067e-15 -1.0779874879617e-15 -0.022733751013316 -0.090468577718692 -0.20172475851545 -0.35379185456124 -0.54244134497932 -0.76166643027394 -1.0035570601529 -1.2584065721333 -1.5151114286072 -1.7618708279126 -1.9871272761906 -2.1806267293472 -2.3344344035262 -2.4437339592613 -2.5072694302858 -2.5273553375748 -2.5094644367128 -2.4614823002002 -2.3927729992733 -2.313218707445 -2.2323785468031 -2.1588701782368 -2.100025355874 -2.0617803277354 -2.0484569671274 -2.0617803277357 -2.100025355874 -2.1588701782368 -2.2323785468031 -2.313218707445 -2.3927729992733 -2.4614823002002 -2.5094644367128 -2.5273553375748 -2.5072694302858 -2.4437339592613 -2.3344344035262 -2.1806267293472 -1.9871272761906 -1.7618708279126 -1.5151114286072 -1.2584065721333 -1.0035570601529 -0.76166643027394 -0.54244134497932 -0.35379185456074 -0.20172475851586 -0.090468577718725 -0.022733751013316 -1.1106329780871e-15 +Bryantx -6.424006061903e-16 -6.3296804728968e-16 -8.2527906290883e-16 -4.5881506130692e-16 1.2822726997184e-14 1.6690688770715e-13 -8.8725172140151e-16 -8.0591556238968e-16 -9.9300075418512e-16 -9.6533198980156e-16 -1.0938192575237e-15 -1.2644071013253e-15 -1.4576491230082e-15 -1.5440506140932e-15 -2.1922813424572e-15 -2.2634706938787e-15 -2.1171800177322e-15 -2.8946554763312e-15 -3.9134015390973e-15 -5.516464764064e-15 -6.8845045977263e-15 -1.011634365968e-14 -1.4029152713238e-14 -2.5467131914031e-14 -5.3574803024566e-14 -2.314868674987e-13 -0.84760819701378 -1.8673156646248e-12 -5.0762371537626e-14 -2.4208386186126e-14 -1.5459914931489e-14 -8.9090615432165e-15 -6.6217468133295e-15 -5.3188693466355e-15 -4.4194086049695e-15 -3.4677777190115e-15 -2.5068189457024e-15 -1.7160686274807e-15 -2.2542920536144e-15 -1.670449911596e-15 -1.7643541224123e-15 -9.8889951737912e-16 -1.3540233781165e-15 -1.1342960695089e-15 -9.649842386761e-16 -9.1783774292734e-16 -8.8407182943429e-16 -6.9605159777146e-16 1.716492650036e-13 1.3272611198522e-14 -2.8913080680476e-16 -6.2830597794799e-16 +Bryanty 5.8532853417185e-16 5.8532853417185e-16 0.00619309910545 0.024674727549328 0.055153419010719 0.097148506318522 0.14999770185804 0.21286754224631 0.28476653254335 0.3645607827218 0.45099188978957 0.54269678355677 0.63822922306682 0.73608260468035 0.83471372211454 0.93256710372808 1.0280995432381 1.1198044370053 1.2062355440731 1.2860297942515 1.3579287845486 1.4207986249369 1.4736478204768 1.5156429077842 1.5461215992456 1.5646032276894 1.5707963267949 1.5646032276894 1.5461215992456 1.5156429077842 1.4736478204768 1.4207986249369 1.3579287845486 1.2860297942515 1.2062355440731 1.1198044370053 1.0280995432381 0.93256710372808 0.83471372211454 0.73608260468035 0.63822922306682 0.54269678355676 0.45099188978957 0.3645607827218 0.28476653254335 0.21286754224631 0.14999770185804 0.097148506318082 0.055153419011161 0.024674727549365 0.0061930991054504 6.2002300369139e-16 +Bryantz -0.082047029424561 -0.082047029424563 -0.083294331154286 -0.087029125977516 -0.093231592057126 -0.10187351331446 -0.11292480757529 -0.12636139326099 -0.14217342820885 -0.16037305650457 -0.18100103285033 -0.20413184535009 -0.22987711935818 -0.25838708728979 -0.28984971228636 -0.32448661569923 -0.36254419103995 -0.40427698871014 -0.4499181803597 -0.49962766086873 -0.55339981443672 -0.61089473255488 -0.67111641062495 -0.73177744539965 -0.78807741401724 -0.83094197845779 0.0 -0.83094197845469 -0.78807741401724 -0.73177744539964 -0.67111641062495 -0.61089473255488 -0.55339981443672 -0.49962766086873 -0.44991818035969 -0.40427698871014 -0.36254419103995 -0.32448661569923 -0.28984971228636 -0.25838708728979 -0.22987711935818 -0.20413184535009 -0.18100103285033 -0.16037305650457 -0.14217342820885 -0.12636139326099 -0.11292480757529 -0.10187351331439 -0.093231592057228 -0.087029125977527 -0.083294331154285 -0.08204702942456 +VX -6.069774545412e-17 -6.0697745454121e-17 -0.14250068686413 -0.39049807375591 -0.83908512209 -1.5626757806476 -2.6052855942924 -3.97229838776 -5.6251600744737 -7.4806925611782 -9.4164630232845 -11.2827608475 -12.920337564123 -14.181504890532 -14.950961808508 -15.162305141851 -14.806817236081 -13.932715625844 -12.635150153633 -11.039219313722 -9.2795836911402 -7.4805799190439 -5.7401319122128 -4.1195386905368 -2.6397734620103 -1.2834044952679 8.3593950451294e-15 1.2834044952678 2.6397734620103 4.1195386905368 5.7401319122128 7.480579919044 9.2795836911402 11.039219313722 12.635150153634 13.932715625844 14.806817236081 15.162305141851 14.950961808507 14.181504890532 12.920337564123 11.2827608475 9.4164630232845 7.4806925611782 5.6251600744737 3.97229838776 2.6052855942924 1.5626757806479 0.83908512208987 0.3904980737559 0.14250068686413 -2.4592662895881e-15 +VY 5.9875104033873e-16 5.9875104033873e-16 1.2237013955795 2.4170867112173 3.5518225295144 4.6030785114874 5.550329020822 6.377461964172 7.0724288275591 7.6267319286155 8.0349854510803 8.2946742686196 8.4061272365292 8.3726468095594 8.200696600563 7.9000334209518 7.4836696574673 6.9675576503022 6.3698951476454 5.7099551027101 5.0063319635666 4.2744345738013 3.5228603674112 2.7479048117262 1.9259882187929 1.0138039417988 -6.8350499774547e-15 -1.0138039417975 -1.9259882187929 -2.7479048117262 -3.5228603674112 -4.2744345738013 -5.0063319635666 -5.7099551027101 -6.3698951476454 -6.9675576503022 -7.4836696574673 -7.9000334209518 -8.2006966005629 -8.3726468095594 -8.4061272365292 -8.2946742686196 -8.0349854510803 -7.6267319286154 -7.072428827559 -6.377461964172 -5.550329020822 -4.6030785114875 -3.5518225295143 -2.4170867112172 -1.2237013955795 2.4259356560019e-14 +VZ -1.1095624624952e-15 -1.1095624624952e-15 -2.2695581937184 -4.4917828973573 -6.6114996122968 -8.5602024707875 -10.254806001718 -11.601704310219 -12.506137755275 -12.885693887449 -12.6856530798 -11.89307072999 -10.546255870505 -8.7368827930962 -6.6033709340491 -4.3161110415386 -2.057078422283 0.0022422692858219 1.7203359706806 2.999025618909 3.7888396131895 4.0864085857386 3.9255078509652 3.3641698709051 2.4707815957089 1.3168270167535 -8.8730459869596e-15 -1.3168270167521 -2.4707815957089 -3.3641698709051 -3.9255078509652 -4.0864085857386 -3.7888396131895 -2.999025618909 -1.7203359706806 -0.0022422692858455 2.057078422283 4.3161110415386 6.6033709340492 8.7368827930962 10.546255870505 11.89307072999 12.6856530798 12.885693887449 12.506137755275 11.601704310219 10.254806001718 8.5602024707875 6.6114996122965 4.4917828973573 2.2695581937184 -4.4955698762638e-14 +OmegaX 3.3565107070781e-30 2.6184943523889e-30 -7.7208647883602e-4 -0.0061345262195176 -0.020471663296966 -0.047777188499018 -0.091507339178962 -0.1544797516412 -0.23881615574489 -0.3459202141678 -0.47647977783096 -0.63048479747014 -0.80725505039243 -1.0054722490148 -1.2232062289664 -1.4579125452328 -1.7063558960349 -1.964373612098 -2.2263194287409 -2.4838792878626 -2.723629390341 -2.9219801187473 -3.0345510850398 -2.9743266869581 -2.575442477135 -1.595473392657 1.147029088381e-14 1.5954733926475 2.575442477135 2.974326686958 3.0345510850398 2.9219801187473 2.723629390341 2.4838792878626 2.226319428741 1.964373612098 1.7063558960348 1.4579125452327 1.2232062289664 1.0054722490148 0.80725505039241 0.63048479747012 0.47647977783096 0.3459202141678 0.23881615574488 0.1544797516412 0.091507339178958 0.047777188498954 0.020471663297031 0.0061345262195226 7.7208647883641e-4 -1.5555350974827e-29 +OmegaY 3.0215950648218e-16 3.0215950648218e-16 0.61849471679451 1.2272354024343 1.8166218526629 2.3773590910779 2.9006039564606 3.3781045647134 3.8023304459988 4.1665913047487 4.4651425296217 4.6932757894557 4.8473932864629 4.9250644956502 4.9250644956502 4.8473932864629 4.6932757894557 4.4651425296217 4.1665913047487 3.8023304459988 3.3781045647134 2.9006039564606 2.3773590910776 1.8166218526629 1.2272354024343 0.6184947167945 -4.080825313531e-15 -0.61849471679462 -1.2272354024343 -1.8166218526629 -2.3773590910776 -2.9006039564606 -3.3781045647134 -3.8023304459988 -4.1665913047487 -4.4651425296217 -4.6932757894557 -4.8473932864629 -4.9250644956502 -4.9250644956502 -4.8473932864629 -4.6932757894557 -4.4651425296217 -4.1665913047487 -3.8023304459988 -3.3781045647134 -2.9006039564606 -2.3773590910776 -1.8166218526631 -1.2272354024343 -0.61849471679449 1.2242475940591e-14 +OmegaZ -6.0805155906124e-17 -6.0805155906127e-17 -0.12466724569939 -0.24856530515342 -0.37080024904016 -0.49024726457548 -0.60547610019628 -0.71471384692924 -0.81584596782561 -0.90645487364884 -0.98389520446529 -1.0454043907072 -1.0882454077715 -1.1098765063933 -1.1081412309956 -1.0814723009763 -1.0291055414409 -0.95130487273602 -0.84960533169832 -0.72708639406854 -0.58869097554254 -0.44160723390023 -0.29573305080042 -0.16421082409781 -0.063561241554168 -0.0098810511686652 1.1813192055685e-28 0.0098810511686246 0.063561241554169 0.16421082409779 0.29573305080042 0.44160723390021 0.58869097554256 0.72708639406855 0.84960533169835 0.95130487273601 1.0291055414409 1.0814723009763 1.1081412309956 1.1098765063933 1.0882454077715 1.0454043907072 0.9838952044653 0.90645487364883 0.8158459678256 0.71471384692924 0.60547610019628 0.49024726457608 0.37080024903974 0.2485653051534 0.12466724569939 -2.4636181959363e-15 +AX 0 -6.2285350917195 -8.9093515741488 -16.691437636921 -28.795593199065 -43.937306684918 -60.373173874189 -76.00757731428 -88.581043073684 -95.941854556404 -96.372526890788 -88.912154329142 -73.596921817831 -51.544784436299 -24.839997589175 3.7776496159817 31.360707437411 55.241938415492 73.454648284159 84.999287578823 89.914477577757 89.161281661666 84.369709661648 77.516746270201 70.609689418259 65.454341476155 63.515023490428 65.45434147615 70.609689418259 77.516746270201 84.369709661648 89.161281661666 89.914477577758 84.999287578822 73.45464828416 55.241938415492 31.36070743741 3.7776496159813 -24.839997589175 -51.5447844363 -73.596921817832 -88.912154329142 -96.372526890788 -95.941854556404 -88.581043073684 -76.007577314279 -60.373173874189 -43.937306684925 -28.795593199061 -16.691437636921 -8.9093515741486 -6.2285350917195 +AY 0 61.441192552566 60.674601116738 58.426519484137 54.839479778644 50.115011898204 44.476101031065 38.137245460941 31.289007189695 24.09662333973 16.707784132441 9.2637178550333 1.9089293139952 -5.2032323093995 -11.910463401688 -18.047166956282 -23.455705722744 -28.002883934293 -31.601314755727 -34.235685071236 -35.995289939884 -37.1183589402 -38.063125514032 -39.623834000961 -42.963306999126 -48.46880995535 -51.932987678245 -48.468809955319 -42.963306999126 -39.623834000962 -38.063125514032 -37.118358940199 -35.995289939885 -34.235685071236 -31.601314755727 -28.002883934293 -23.455705722744 -18.047166956282 -11.910463401687 -5.2032323093996 1.9089293139952 9.2637178550337 16.707784132441 24.09662333973 31.289007189695 38.137245460941 44.476101031065 50.115011898208 54.839479778642 58.426519484137 60.674601116738 61.441192552566 +AZ 0 -113.85840911224 -112.7097880199 -109.05770271893 -102.34425824864 -91.830268293002 -76.842089641936 -57.046548521325 -32.696855679317 -4.7906109908795 24.91080871247 54.030118272975 79.881830383779 99.889355966928 112.02442925207 115.16616907247 109.2913852404 95.450020172792 75.536745699399 51.922335008483 27.038756022868 3.0106469029136 -18.604953795656 -36.950016383514 -51.808316212982 -62.833133507298 -67.417764234237 -62.833133507253 -51.808316212982 -36.950016383513 -18.604953795656 3.0106469029163 27.038756022868 51.922335008483 75.536745699399 95.450020172793 109.2913852404 115.16616907247 112.02442925207 99.889355966928 79.881830383779 54.030118272974 24.910808712469 -4.7906109908802 -32.696855679318 -57.046548521326 -76.842089641936 -91.830268292998 -102.34425824864 -109.05770271893 -112.7097880199 -113.85840911224 +AlphaX 0 -2.5535129566379e-14 -0.11563590949128 -0.45730017995639 -1.0098175708373 -1.7496209406699 -2.6469210398211 -3.6680183906812 -4.7773162666207 -5.9388060983448 -7.1170428790454 -8.2777627256177 -9.3882525120232 -10.417379536117 -11.334868950762 -12.108981194219 -12.701094801826 -13.0545435623 -13.072644109149 -12.57536901573 -11.211236192421 -8.2712353447669 -2.2934345635023 9.6709686092734 32.427415737733 66.513334266235 87.151736578324 66.513334265951 32.427415737733 9.6709686092746 -2.2934345635021 -8.2712353447681 -11.211236192421 -12.57536901573 -13.07264410915 -13.054543562299 -12.701094801826 -12.108981194218 -11.334868950762 -10.417379536117 -9.3882525120234 -8.2777627256177 -7.1170428790454 -5.9388060983448 -4.7773162666206 -3.6680183906812 -2.6469210398212 -1.7496209406706 -1.0098175708376 -0.45730017995647 -0.11563590949128 -2.4757973449141e-14 +AlphaY 0 31.0062766803 30.76178292755 30.032157481834 28.828906972288 27.171007378238 25.084604766654 22.602602953087 19.764144588808 16.613993857837 13.201830519009 9.5814664265043 5.8099968847632 1.9469002214257 -1.9469002214257 -5.8099968847632 -9.5814664265043 -13.201830519009 -16.613993857837 -19.764144588808 -22.602602953087 -25.084604766654 -27.171007378235 -28.828906972288 -30.032157481834 -30.76178292755 -31.006276680305 -30.761782927556 -30.032157481834 -28.828906972288 -27.171007378235 -25.084604766654 -22.602602953087 -19.764144588808 -16.613993857837 -13.201830519009 -9.5814664265042 -5.8099968847632 -1.9469002214256 1.9469002214257 5.8099968847633 9.5814664265043 13.201830519009 16.613993857837 19.764144588809 22.602602953087 25.084604766654 27.171007378235 28.828906972292 30.032157481834 30.76178292755 31.0062766803 +AlphaZ 0 -6.2395570788547 -6.2208639026321 -6.1615826584175 -6.0526010421798 -5.8802127976786 -5.627895552759 -5.2782257476757 -4.8147768865951 -4.2239765391384 -3.4969155325932 -2.6310522790389 -1.6317090206352 -0.51325997586753 0.70002636862781 1.9734214052685 3.2612562173867 4.5062445732979 5.6383110844778 6.5727074565199 7.2073178212144 7.4190418530789 7.0592275541753 5.9536247984397 3.962899391851 1.3987586503954 7.7626793881791e-13 1.3987586503887 3.962899391851 5.9536247984397 7.0592275541753 7.4190418530791 7.2073178212146 6.57270745652 5.6383110844779 4.5062445732979 3.2612562173868 1.9734214052687 0.70002636862802 -0.51325997586772 -1.6317090206355 -2.6310522790391 -3.4969155325932 -4.2239765391384 -4.8147768865951 -5.2782257476755 -5.6278955527589 -5.8802127976863 -6.0526010421729 -6.1615826584169 -6.2208639026321 -6.2395570788547 +PartSeries /backhoe/jack1 +X 0.7 0.7 0.69998657597612 0.69978691604866 0.69893560498628 0.69669935583801 0.69213999495443 0.68420038883075 0.6718090873324 0.65399631454882 0.6300106551207 0.59942333545793 0.56220639978858 0.51877303661812 0.46997291036614 0.4170419211983 0.36151302176891 0.30510092499758 0.24957728373505 0.19665337570866 0.14788450873521 0.10460510209583 0.067897036569401 0.038587822981702 0.017270556652811 0.0043351416616756 -1.0659453138808e-16 0.0043351416616757 0.017270556652811 0.038587822981703 0.067897036569402 0.10460510209583 0.14788450873521 0.19665337570866 0.24957728373505 0.30510092499758 0.36151302176891 0.4170419211983 0.46997291036614 0.51877303661812 0.56220639978858 0.59942333545793 0.6300106551207 0.65399631454882 0.6718090873324 0.68420038883075 0.69213999495443 0.69669935583801 0.69893560498628 0.69978691604867 0.69998657597612 0.7 +Y 0.2 0.2 0.2 0.2 0.2 0.20000000000001 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.20000000000001 0.2 0.2 0.2 +Z -8.8772252450228e-17 -1.1652782806586e-16 -0.0043351416616758 -0.017270556652811 -0.0385878229817 -0.067897036569365 -0.10460510209583 -0.14788450873521 -0.19665337570866 -0.24957728373505 -0.30510092499758 -0.36151302176891 -0.4170419211983 -0.46997291036614 -0.51877303661812 -0.56220639978858 -0.59942333545793 -0.6300106551207 -0.65399631454882 -0.6718090873324 -0.68420038883075 -0.69213999495443 -0.69669935583801 -0.69893560498628 -0.69978691604867 -0.69998657597612 -0.7 -0.69998657597612 -0.69978691604867 -0.69893560498628 -0.69669935583801 -0.69213999495443 -0.68420038883075 -0.6718090873324 -0.65399631454882 -0.6300106551207 -0.59942333545793 -0.56220639978858 -0.51877303661812 -0.46997291036614 -0.4170419211983 -0.36151302176891 -0.30510092499758 -0.24957728373505 -0.19665337570866 -0.14788450873521 -0.10460510209583 -0.067897036569401 -0.038587822981662 -0.017270556652808 -0.0043351416616755 -1.304071152294e-16 +Bryantx -1.5707963267949 -1.5707963267949 -1.582684813115 -1.6167724714636 -1.66862567005 -1.7318504753303 -1.7994343178928 -1.8650993223623 -1.9241691683749 -1.9737626409883 -2.0125026821083 -2.0400581336193 -2.056740540299 -2.0632370407659 -2.0604717702354 -2.0495556005451 -2.0317805387968 -2.0086214751303 -1.9817176592643 -1.9528191242311 -1.9236989887641 -1.8960474778471 -1.8713716458285 -1.8509222914039 -1.8356581063232 -1.8262430280116 -1.823062687657 -1.8262430280116 -1.8356581063232 -1.8509222914039 -1.8713716458285 -1.8960474778471 -1.9236989887641 -1.9528191242311 -1.9817176592643 -2.0086214751303 -2.0317805387968 -2.0495556005451 -2.0604717702354 -2.0632370407659 -2.056740540299 -2.0400581336193 -2.0125026821083 -1.9737626409883 -1.9241691683749 -1.8650993223623 -1.7994343178928 -1.7318504753301 -1.6686256700502 -1.6167724714636 -1.582684813115 -1.5707963267949 +Bryanty 1.0946105319679 1.0946105319679 1.0905283900423 1.0780014464198 1.0563238845185 1.0247104071058 0.98269571876533 0.93041910770592 0.8687102511707 0.79900604699031 0.72318560456832 0.64339710622326 0.56190933528566 0.48098967298878 0.40279812362181 0.32928742209033 0.26210563165722 0.20250579818738 0.15127461877116 0.1086961703741 0.074565188356759 0.04825652789663 0.028845562719014 0.015262930706166 0.0064604695976711 0.0015648763945271 1.7347234759768e-17 0.0015648763945273 0.0064604695976711 0.015262930706167 0.028845562719014 0.04825652789663 0.07456518835676 0.1086961703741 0.15127461877116 0.20250579818738 0.26210563165722 0.32928742209033 0.40279812362181 0.48098967298878 0.56190933528566 0.64339710622326 0.72318560456832 0.79900604699031 0.8687102511707 0.93041910770592 0.98269571876533 1.0247104071056 1.0563238845187 1.0780014464198 1.0905283900423 1.0946105319679 +Bryantz 1.5707963267949 1.5707963267949 1.5842011310282 1.6229712152851 1.6830583756792 1.7586645720454 1.843524455276 1.9321923511636 2.0208436482748 2.1074071045863 2.1912152970367 2.2724853710863 2.3518464869893 2.4299911115025 2.5074440491062 2.5844188107934 2.6607370753088 2.7358007281772 2.8086153519747 2.8778645170472 2.9420264772077 2.9995141159209 3.0488125112435 3.0885911370359 3.1177785316762 3.1356005197705 3.1415926535898 3.1356005197705 3.1177785316762 3.0885911370359 3.0488125112435 2.9995141159209 2.9420264772077 2.8778645170472 2.8086153519747 2.7358007281772 2.6607370753088 2.5844188107934 2.5074440491062 2.4299911115025 2.3518464869893 2.2724853710863 2.1912152970367 2.1074071045863 2.0208436482748 1.9321923511636 1.843524455276 1.7586645720452 1.6830583756794 1.6229712152851 1.5842011310282 1.5707963267949 +VX 1.8488927466117e-32 0.0 -0.0026812622143023 -0.021195038544078 -0.070099482475246 -0.16141563714546 -0.30341797300514 -0.49956933400882 -0.74774111776546 -1.0398865402733 -1.3623191160336 -1.696680312641 -2.0215662089902 -2.3146468947617 -2.5549906639485 -2.7252355279416 -2.8132590279395 -2.8130873702943 -2.7249353575368 -2.5544401466626 -2.3113004566878 -2.0076240077894 -1.6563045473494 -1.2697016936222 -0.85880327753526 -0.4329379990683 2.8565777194712e-15 0.43293799906831 0.85880327753527 1.2697016936222 1.6563045473494 2.0076240077895 2.3113004566878 2.5544401466626 2.7249353575368 2.8130873702943 2.8132590279395 2.7252355279416 2.5549906639485 2.3146468947617 2.0215662089902 1.696680312641 1.3623191160336 1.0398865402732 0.74774111776546 0.49956933400881 0.30341797300513 0.16141563714549 0.070099482475219 0.021195038544076 0.002681262214302 1.1832913578315e-30 +VY -3.6977854932235e-32 -2.4651903288157e-32 -8.3266726846887e-17 -5.5511151231258e-17 -3.1086244689504e-15 -4.7628567756419e-14 0.0 0.0 -3.3306690738755e-16 -1.1102230246252e-16 -2.2204460492503e-16 1.1102230246252e-16 -2.2204460492503e-16 -2.2204460492503e-16 -1.1102230246252e-16 -2.2204460492503e-16 2.2204460492503e-16 -1.1102230246252e-16 0.0 -1.6653345369377e-16 -1.6653345369377e-16 -1.1102230246252e-16 -8.3266726846887e-17 -5.5511151231258e-17 -2.7755575615629e-17 -1.3877787807814e-17 -9.8607613152626e-32 -6.9388939039072e-18 -2.7755575615629e-17 -5.5511151231258e-17 8.3266726846887e-17 -2.7755575615629e-17 -1.1102230246252e-16 3.3306690738755e-16 -1.1102230246252e-16 -1.1102230246252e-16 -3.3306690738755e-16 -1.1102230246252e-16 1.1102230246252e-16 3.3306690738755e-16 3.3306690738755e-16 0.0 2.2204460492503e-16 2.2204460492503e-16 4.4408920985006e-16 3.3306690738755e-16 2.2204460492503e-16 1.1102230246252e-16 4.1855408028368e-14 2.4980018054066e-15 2.7755575615629e-17 -7.8886090522101e-31 +VZ -2.1151165453753e-16 -2.1151165453753e-16 -0.43293799906831 -0.85880327753526 -1.2697016936222 -1.6563045473493 -2.0076240077894 -2.3113004566878 -2.5544401466626 -2.7249353575368 -2.8130873702943 -2.8132590279395 -2.7252355279416 -2.5549906639486 -2.3146468947617 -2.0215662089902 -1.696680312641 -1.3623191160336 -1.0398865402732 -0.74774111776546 -0.49956933400882 -0.30341797300513 -0.1614156371455 -0.070099482475247 -0.021195038544078 -0.002681262214302 3.9443045261051e-31 0.0026812622143023 0.021195038544078 0.070099482475248 0.1614156371455 0.30341797300514 0.49956933400882 0.74774111776547 1.0398865402733 1.3623191160336 1.696680312641 2.0215662089902 2.3146468947617 2.5549906639486 2.7252355279416 2.8132590279395 2.8130873702943 2.7249353575368 2.5544401466626 2.3113004566878 2.0076240077894 1.6563045473494 1.2697016936221 0.85880327753525 0.4329379990683 -8.5697331584136e-15 +OmegaX -1.8488927466117e-32 1.0785207688569e-32 0.0024980089673366 0.019562292162846 0.063740834211386 0.14393287684816 0.26439902639473 0.42447306811026 0.61888193880202 0.83850824153541 1.0714281139 1.3040872712483 1.5225072648517 1.7134300380939 1.8653155677312 1.9691150546108 2.0187594822668 2.0113333667635 1.9469428476382 1.8283281088684 1.6603031986056 1.4491239862598 1.2018834950016 0.92601429527936 0.62894566534133 0.31792729522001 -2.0997123096333e-15 -0.31792729522002 -0.62894566534133 -0.92601429527937 -1.2018834950015 -1.4491239862598 -1.6603031986056 -1.8283281088684 -1.9469428476382 -2.0113333667635 -2.0187594822668 -1.9691150546108 -1.8653155677312 -1.7134300380939 -1.5225072648517 -1.3040872712483 -1.0714281139 -0.8385082415354 -0.61888193880201 -0.42447306811025 -0.26439902639472 -0.14393287684815 -0.063740834211388 -0.019562292162846 -0.0024980089673363 -1.9721522630525e-31 +OmegaY 3.0215950648218e-16 3.0215950648218e-16 0.61849471679451 1.2272354024343 1.8166218526629 2.3773590910778 2.9006039564606 3.3781045647134 3.8023304459988 4.1665913047487 4.4651425296217 4.6932757894557 4.8473932864629 4.9250644956502 4.9250644956502 4.8473932864629 4.6932757894557 4.4651425296217 4.1665913047487 3.8023304459988 3.3781045647134 2.9006039564606 2.3773590910776 1.8166218526629 1.2272354024343 0.6184947167945 -4.0808253135303e-15 -0.61849471679451 -1.2272354024343 -1.8166218526629 -2.3773590910776 -2.9006039564606 -3.3781045647134 -3.8023304459988 -4.1665913047487 -4.4651425296217 -4.6932757894557 -4.8473932864629 -4.9250644956502 -4.9250644956502 -4.8473932864629 -4.6932757894557 -4.4651425296217 -4.1665913047487 -3.8023304459988 -3.3781045647134 -2.9006039564606 -2.3773590910776 -1.816621852663 -1.2272354024343 -0.61849471679449 1.2242475940591e-14 +OmegaZ 1.9768632350884e-16 1.9768632350884e-16 0.40334846707816 0.7926459105331 1.1545284257935 1.4769119191457 1.7494475616223 1.9638611287489 2.1142302234824 2.1972404358128 2.2124191460851 2.1623020328146 2.052463516293 1.891345829278 1.689848400435 1.4606797890316 1.217516565486 0.97404649538898 0.74298997821746 0.53519206764479 0.35886141967397 0.21901026329537 0.11712990248731 0.051124703692077 0.015522213256217 0.0019689804207605 -4.9303806576313e-31 -0.0019689804207606 -0.015522213256217 -0.051124703692078 -0.11712990248731 -0.21901026329537 -0.35886141967397 -0.53519206764479 -0.74298997821747 -0.97404649538898 -1.217516565486 -1.4606797890316 -1.6898484004349 -1.8913458292781 -2.052463516293 -2.1623020328146 -2.212419146085 -2.1972404358127 -2.1142302234824 -1.9638611287489 -1.7494475616223 -1.4769119191457 -1.1545284257936 -0.7926459105331 -0.40334846707815 8.0095777475847e-15 +AX 0 -3.5527136788005e-15 -0.40112655187998 -1.5726258631141 -3.4190126019998 -5.782461554821 -8.4472997827288 -11.150389457016 -13.59951129352 -15.500167425745 -16.588726759653 -16.667225366119 -15.633300665152 -13.498484168987 -10.389785901496 -6.5329090382339 -2.2196340698107 2.2343448701549 6.5327085363344 10.434573120308 13.777112281483 16.481962843666 18.546280405476 20.022205284044 20.990099564843 21.531176755862 21.70439367621 21.531176755862 20.990099564843 20.022205284044 18.546280405476 16.481962843666 13.777112281483 10.434573120308 6.5327085363344 2.2343448701548 -2.2196340698107 -6.532909038234 -10.389785901496 -13.498484168987 -15.633300665152 -16.667225366119 -16.588726759653 -15.500167425745 -13.59951129352 -11.150389457015 -8.4472997827288 -5.7824615548218 -3.419012601999 -1.572625863114 -0.40112655187996 -8.8817841970003e-16 +AY 0 8.9569653358413e-33 -2.6853519408121e-15 -8.604228440845e-16 -4.1855408028368e-14 -4.1033842990146e-13 -8.8817841970013e-16 -2.2204460492503e-16 8.8817841970013e-16 -1.1102230246252e-15 0.0 8.8817841970013e-16 0.0 1.7763568394003e-15 4.4408920985006e-16 0.0 1.7763568394003e-15 0.0 0.0 1.7763568394003e-15 -1.1102230246252e-15 8.8817841970013e-16 3.3306690738755e-16 -8.3266726846887e-16 3.3306690738755e-16 -6.6613381477509e-16 -8.8817841970012e-16 -1.6722734308416e-15 -2.7755575615629e-16 -1.1102230246252e-15 3.3306690738755e-16 -2.6645352591004e-15 -1.3322676295502e-15 1.3322676295502e-15 -2.2204460492503e-16 3.5527136788005e-15 0.0 0.0 4.4408920985006e-16 2.6645352591004e-15 2.6645352591004e-15 -4.4408920985006e-16 -4.4408920985006e-16 4.4408920985006e-16 -4.4408920985006e-16 8.8817841970013e-16 -2.4424906541753e-15 2.2204460492503e-16 -5.7231996919427e-13 -5.4345417055401e-14 -1.1102230246252e-15 -1.7763568394002e-15 +AZ 0 -21.70439367621 -21.531176755862 -20.990099564843 -20.022205284044 -18.546280405476 -16.481962843666 -13.777112281483 -10.434573120308 -6.5327085363344 -2.2343448701549 2.2196340698107 6.5329090382339 10.389785901496 13.498484168987 15.633300665152 16.667225366119 16.588726759653 15.500167425745 13.59951129352 11.150389457016 8.4472997827288 5.7824615548218 3.4190126019998 1.5726258631141 0.40112655187997 -8.8817841970013e-16 0.40112655187999 1.5726258631141 3.4190126019998 5.7824615548219 8.4472997827288 11.150389457016 13.59951129352 15.500167425745 16.588726759653 16.667225366119 15.633300665152 13.498484168987 10.389785901496 6.5329090382338 2.2196340698106 -2.234344870155 -6.5327085363345 -10.434573120308 -13.777112281483 -16.481962843666 -18.546280405476 -20.022205284043 -20.990099564843 -21.531176755862 -21.70439367621 +AlphaX 0 -4.4408920985006e-16 0.37291761567556 1.4394672080974 3.0533785829369 5.0015578704756 7.0392174417579 8.9235886190618 10.440439021964 11.421833166071 11.756185747398 11.392278945255 10.338395796624 8.6570629017476 6.4556724758268 3.8735573373456 1.0667057644997 -1.8080996262857 -4.6076382112609 -7.213179705995 -9.5366654415469 -11.521726836093 -13.140097204668 -14.384767748685 -15.261661832165 -15.781572130995 -15.953699514082 -15.781572130995 -15.261661832165 -14.384767748685 -13.140097204668 -11.521726836093 -9.5366654415471 -7.213179705995 -4.6076382112609 -1.8080996262856 1.0667057644997 3.8735573373455 6.4556724758269 8.6570629017476 10.338395796624 11.392278945255 11.756185747398 11.421833166071 10.440439021964 8.9235886190617 7.0392174417578 5.0015578704757 3.053378582937 1.4394672080973 0.37291761567554 1.1102230246252e-15 +AlphaY 0 31.0062766803 30.76178292755 30.032157481834 28.828906972288 27.171007378237 25.084604766654 22.602602953087 19.764144588808 16.613993857837 13.201830519009 9.5814664265043 5.8099968847633 1.9469002214257 -1.9469002214257 -5.8099968847633 -9.5814664265043 -13.201830519009 -16.613993857837 -19.764144588808 -22.602602953087 -25.084604766654 -27.171007378235 -28.828906972288 -30.032157481834 -30.76178292755 -31.0062766803 -30.76178292755 -30.032157481834 -28.828906972288 -27.171007378235 -25.084604766654 -22.602602953087 -19.764144588808 -16.613993857837 -13.201830519009 -9.5814664265042 -5.8099968847632 -1.9469002214256 1.9469002214257 5.8099968847633 9.5814664265043 13.201830519009 16.613993857837 19.764144588809 22.602602953087 25.084604766654 27.171007378235 28.82890697229 30.032157481834 30.76178292755 31.0062766803 +AlphaZ 0 20.285699146083 19.931470660032 18.88640855287 17.200765909393 14.951067868345 12.233318999242 9.1584707744022 5.8506179805645 2.4463172289882 -0.90734918038664 -4.0577710397003 -6.8553862531325 -9.1650083407563 -10.87811939593 -11.9239614095 -12.277469471246 -11.962768342531 -11.051867343818 -9.6590476350783 -7.9319755936926 -6.0406553554535 -4.1650179982363 -2.4815198903171 -1.1489883127902 -0.29438198431022 -3.663735981263e-15 -0.29438198431023 -1.1489883127903 -2.4815198903171 -4.1650179982363 -6.0406553554534 -7.9319755936927 -9.6590476350783 -11.051867343818 -11.962768342531 -12.277469471246 -11.9239614095 -10.87811939593 -9.1650083407563 -6.8553862531325 -4.0577710397002 -0.90734918038661 2.4463172289883 5.8506179805648 9.1584707744022 12.233318999243 14.951067868346 17.200765909393 18.88640855287 19.931470660032 20.285699146083 +PartSeries /backhoe/jack2 +X 1.8632498721784 1.8632498721784 1.8592082552804 1.8466360325873 1.8242598451057 1.7901815776727 1.742195904551 1.6781944154698 1.5966109550561 1.4968479487921 1.3796143184509 1.2471076297874 1.1029901914062 0.95214079964159 0.80020543794516 0.65301186740687 0.51594346174326 0.39337787429004 0.28828284309247 0.20202833145963 0.13443067504007 0.084002156517243 0.048348370267599 0.024641020832863 0.010094965834311 0.0023906332267802 -1.4859014294004e-15 0.0023906332267805 0.010094965834311 0.024641020832863 0.048348370267599 0.084002156517244 0.13443067504007 0.20202833145963 0.28828284309247 0.39337787429004 0.51594346174326 0.65301186740687 0.80020543794516 0.95214079964159 1.1029901914062 1.2471076297875 1.379614318451 1.4968479487921 1.5966109550561 1.6781944154698 1.742195904551 1.7901815776723 1.824259845106 1.8466360325874 1.8592082552804 1.8632498721784 +Y 1.8384638170352 1.8384638170352 1.844294387836 1.8615668990774 1.8896417240938 1.9275087598902 1.9738591380323 2.0271663542191 2.0857664262265 2.1479308725266 2.211930524285 2.2760910573911 2.3388423185813 2.3987633565935 2.4546241043564 2.5054233667576 2.5504214640584 2.5891647436442 2.6214983193696 2.6475629531135 2.667772142941 2.6827664881474 2.6933445479871 2.7003728505935 2.7046822090299 2.7069621961868 2.7076689997228 2.7069621961868 2.7046822090299 2.7003728505935 2.6933445479871 2.6827664881474 2.667772142941 2.6475629531135 2.6214983193696 2.5891647436442 2.5504214640584 2.5054233667576 2.4546241043564 2.3987633565935 2.3388423185813 2.2760910573911 2.211930524285 2.1479308725266 2.0857664262265 2.0271663542191 1.9738591380323 1.9275087598905 1.8896417240935 1.8615668990774 1.844294387836 1.8384638170352 +Z -9.6745065333576e-16 -9.6482612253065e-16 -0.011514408192698 -0.045574490586368 -0.10071631130734 -0.17446266173028 -0.26330306266798 -0.36272846485523 -0.46736333271694 -0.57122530649371 -0.66811823145856 -0.75213229289964 -0.8181926578209 -0.862574480746 -0.88329560237362 -0.88031306286705 -0.85548384739388 -0.81229597154916 -0.75542098266555 -0.69017106105647 -0.62195507102021 -0.55581659998517 -0.49610822685647 -0.44631921348514 -0.40903864020273 -0.38601072293054 -0.37822790901531 -0.38601072293055 -0.40903864020273 -0.44631921348515 -0.49610822685647 -0.55581659998517 -0.62195507102021 -0.69017106105647 -0.75542098266555 -0.81229597154916 -0.85548384739388 -0.88031306286705 -0.88329560237362 -0.862574480746 -0.81819265782089 -0.75213229289964 -0.66811823145856 -0.57122530649371 -0.46736333271694 -0.36272846485523 -0.26330306266798 -0.17446266173002 -0.10071631130754 -0.045574490586384 -0.011514408192698 -9.9050628050936e-16 +Bryantx 1.5707963267949 1.5707963267949 1.6038429995891 1.7099320790026 1.9063316571112 2.1984187341903 2.5343021534329 2.8243509033087 3.0313134215098 -3.1131425180097 -3.0190266780425 -2.9523943040143 -2.9025660457495 -2.8630413187505 -2.8298419905613 -2.8005419879775 -2.7737245378165 -2.7486778340767 -2.725216759906 -2.7035635082445 -2.684243667601 -2.6679664375259 -2.6554618207919 -2.6472417936365 -2.6432395215452 -2.6423518329872 -2.6424798091116 -2.642351832987 -2.6432395215452 -2.6472417936365 -2.6554618207919 -2.6679664375259 -2.684243667601 -2.7035635082445 -2.725216759906 -2.7486778340767 -2.7737245378165 -2.8005419879775 -2.8298419905613 -2.8630413187505 -2.9025660457495 -2.9523943040143 -3.0190266780425 -3.1131425180097 3.0313134215098 2.8243509033087 2.5343021534329 2.1984187341903 1.9063316571115 1.7099320790026 1.6038429995891 1.5707963267949 +Bryanty 1.3819675386049 1.3819675386049 1.38550524862 1.3946874076428 1.4046718200778 1.4063354016032 1.3887932616141 1.3471091574451 1.2843827515201 1.2061006952692 1.1168436491176 1.020103384768 0.91870962848783 0.81512247640971 0.71157098793871 0.61010182625661 0.51258052457199 0.42066921137555 0.33579575447186 0.25912611763325 0.19155069392458 0.1336938991288 0.085952523193084 0.048561359698373 0.021674568071877 0.0054372242480198 0.0 0.0054372242480191 0.021674568071877 0.048561359698374 0.085952523193084 0.1336938991288 0.19155069392458 0.25912611763325 0.33579575447186 0.42066921137555 0.51258052457199 0.61010182625661 0.71157098793871 0.81512247640971 0.91870962848783 1.020103384768 1.1168436491176 1.2061006952692 1.2843827515201 1.3471091574451 1.3887932616141 1.4063354016033 1.4046718200777 1.3946874076428 1.38550524862 1.3819675386049 +Bryantz -1.5707963267949 -1.5707963267949 -1.6044180920097 -1.712089163393 -1.9106651432586 -2.2048893572752 -2.5420838578618 -2.8317526950087 -3.0357716739612 3.115012704082 3.0313341275035 2.9798389115089 2.9502758118543 2.9363789799744 2.9341763051368 2.9409766547071 2.954779599646 2.9739254900562 2.9968864519933 3.0221494005867 3.0481689190203 3.0733796319182 3.0962598835543 3.1154348261739 3.1297995599212 3.1386276652864 3.1415926535898 3.1386276652864 3.1297995599212 3.1154348261739 3.0962598835543 3.0733796319182 3.0481689190203 3.0221494005867 2.9968864519933 2.9739254900562 2.954779599646 2.9409766547071 2.9341763051368 2.9363789799744 2.9502758118543 2.9798389115089 3.0313341275035 3.115012704082 -3.0357716739612 -2.8317526950087 -2.5420838578618 -2.2048893572752 -1.9106651432588 -1.712089163393 -1.6044180920097 -1.5707963267949 +VX -1.9507577836045e-16 -1.9507577836045e-16 -0.40794766423975 -0.8600554904098 -1.3936489949545 -2.032897642325 -2.7836181515351 -3.6299458130526 -4.5336699443229 -5.4368810917878 -6.2681513644364 -6.951788616393 -7.4189162069665 -7.6184734922781 -7.5259631335293 -7.1480532906639 -6.5219627394355 -5.7097064729592 -4.7884204801692 -3.8387764059849 -2.9337269628657 -2.1294809705798 -1.4598714171804 -0.93443001314562 -0.53977985471778 -0.24355841224071 1.5434820253933e-15 0.24355841224071 0.53977985471778 0.93443001314563 1.4598714171804 2.1294809705798 2.9337269628657 3.8387764059849 4.7884204801692 5.7097064729593 6.5219627394355 7.1480532906639 7.5259631335293 7.6184734922781 7.4189162069665 6.9517886163931 6.2681513644364 5.4368810917878 4.5336699443229 3.6299458130526 2.7836181515351 2.0328976423251 1.3936489949545 0.86005549040978 0.40794766423974 -7.9038073333321e-15 +VY 2.8499787043569e-16 2.849978704357e-16 0.58121490989047 1.1406630607431 1.6583405990163 2.1173868537234 2.5048625569318 2.8119315220209 3.0336186308006 3.1683702565406 3.2176013562639 3.1853299362937 3.0779201456762 2.9039012401807 2.6738027032479 2.3999386713005 2.0960795063734 1.7769598476778 1.4575894619166 1.1523576385518 0.87395758214775 0.63220743695561 0.4329074541653 0.27693606129737 0.15982494789052 0.072029498480154 -4.5620094107996e-16 -0.072029498480156 -0.15982494789052 -0.27693606129737 -0.43290745416531 -0.63220743695562 -0.87395758214775 -1.1523576385518 -1.4575894619166 -1.7769598476778 -2.0960795063734 -2.3999386713005 -2.6738027032479 -2.9039012401807 -3.0779201456762 -3.1853299362937 -3.2176013562639 -3.1683702565406 -3.0336186308006 -2.8119315220209 -2.5048625569318 -2.1173868537232 -1.6583405990165 -1.1406630607431 -0.58121490989046 1.1547144792992e-14 +VZ -5.6299866183043e-16 -5.6299866183042e-16 -1.1474280960388 -2.2464115249396 -3.2471490639911 -4.0982084164333 -4.7481500402084 -5.149378516464 -5.2639246339268 -5.070214188615 -4.5693625193246 -3.7893131755204 -2.7853464822037 -1.6361491010177 -0.43563851641169 0.71818714369215 1.7352843474969 2.5441095568828 3.0986576228132 3.3808690777296 3.3984265865697 3.1790077869373 2.7627270691358 2.1946514715058 1.5189546214914 0.77563765569211 -5.1389285331958e-15 -0.77563765569212 -1.5189546214914 -2.1946514715058 -2.7627270691358 -3.1790077869372 -3.3984265865697 -3.3808690777296 -3.0986576228132 -2.5441095568829 -1.7352843474969 -0.71818714369214 0.43563851641173 1.6361491010177 2.7853464822037 3.7893131755204 4.5693625193246 5.070214188615 5.2639246339269 5.149378516464 4.7481500402084 4.0982084164323 3.2471490639916 2.2464115249396 1.1474280960387 -2.2810791731454e-14 +OmegaX 3.3857848422328e-30 2.9366579792017e-30 0.0022479992770973 0.017615689636829 0.057453105467817 0.12988006756578 0.23884240336452 0.38374873273844 0.55963482326032 0.75774597721319 0.9664209679849 1.1721736496428 1.3608771308788 1.5189539378837 1.6344708848368 1.6980411546636 1.7034575847904 1.6480236643338 1.5326104579987 1.3615465802649 1.1425524622224 0.88709584348001 0.61185943434339 0.3425155426142 0.12043801469535 0.001732944996977 1.7618904248903e-16 -0.0017329449989207 -0.12043801469535 -0.34251554261422 -0.6118594343434 -0.88709584348 -1.1425524622224 -1.3615465802649 -1.5326104579987 -1.6480236643338 -1.7034575847904 -1.6980411546636 -1.6344708848367 -1.5189539378837 -1.3608771308788 -1.1721736496428 -0.9664209679849 -0.75774597721318 -0.55963482326032 -0.38374873273844 -0.23884240336451 -0.12988006756578 -0.057453105467816 -0.017615689636828 -0.0022479992770968 -1.1339875512552e-30 +OmegaY 3.0215950648218e-16 3.0215950648218e-16 0.61849471679451 1.2272354024343 1.8166218526629 2.3773590910778 2.9006039564606 3.3781045647134 3.8023304459988 4.1665913047487 4.4651425296217 4.6932757894557 4.8473932864629 4.9250644956503 4.9250644956502 4.8473932864629 4.6932757894557 4.4651425296217 4.1665913047487 3.8023304459988 3.3781045647134 2.9006039564606 2.3773590910776 1.8166218526629 1.2272354024343 0.6184947167945 -4.0808253135302e-15 -0.61849471679449 -1.2272354024343 -1.8166218526629 -2.3773590910776 -2.9006039564606 -3.3781045647134 -3.8023304459988 -4.1665913047487 -4.4651425296217 -4.6932757894557 -4.8473932864629 -4.9250644956502 -4.9250644956502 -4.8473932864629 -4.6932757894557 -4.4651425296217 -4.1665913047487 -3.8023304459988 -3.3781045647134 -2.9006039564606 -2.3773590910776 -1.816621852663 -1.2272354024343 -0.61849471679449 1.2242475940591e-14 +OmegaZ 1.7786127986994e-16 1.7786127986993e-16 0.36297990690432 0.7137713840289 1.0406397128838 1.3327144155516 1.5803471967187 1.7754464913094 1.9118296774673 1.9856097039172 1.9955872214002 1.9435765698473 1.8345729611729 1.6766761008099 1.480718897156 1.2595985134303 1.0273575660219 0.79810323892033 0.5848729520672 0.39855479219083 0.24695368833205 0.13406933850444 0.059628937562282 0.018910081318777 0.0029723784601364 1.0732437323552e-5 7.5336216448607e-29 -1.0732437321581e-5 -0.0029723784601362 -0.018910081318779 -0.059628937562284 -0.13406933850448 -0.24695368833203 -0.39855479219084 -0.5848729520672 -0.79810323892034 -1.0273575660219 -1.2595985134303 -1.480718897156 -1.6766761008099 -1.8345729611729 -1.9435765698473 -1.9955872214002 -1.9856097039172 -1.9118296774673 -1.7754464913094 -1.5803471967187 -1.3327144155517 -1.0406397128837 -0.71377138402889 -0.36297990690431 7.2063343792189e-15 +AX 0 -20.017816509856 -21.150705708615 -24.37646265636 -29.188720584511 -34.78748965197 -40.152992130913 -44.15917755043 -45.725454373255 -43.992564971131 -38.494226477483 -29.286089215799 -16.993638378024 -2.7539758337248 11.948921920106 25.526958054943 36.556991458439 44.015901969856 47.430820530922 46.91798612764 43.113824126215 37.027281787272 29.855503676335 22.803488252128 16.935956343213 13.073051942504 11.72743919514 13.073051942504 16.935956343213 22.803488252128 29.855503676335 37.027281787272 43.113824126216 46.91798612764 47.430820530922 44.015901969856 36.556991458439 25.526958054942 11.948921920106 -2.7539758337249 -16.993638378024 -29.286089215799 -38.494226477483 -43.992564971131 -45.725454373255 -44.15917755043 -40.152992130913 -34.78748965197 -29.18872058451 -24.37646265636 -21.150705708615 -20.017816509856 +AY 0 29.24522523519 28.693357777666 27.083580892514 24.543020915358 21.253649078359 17.420516960255 13.245309251623 8.9108439641294 4.5764164818015 0.38038649999423 -3.554350559504 -7.1154221525387 -10.198550576268 -12.708417752994 -14.562826617221 -15.699728250376 -16.086407047618 -15.729815610804 -14.686590996634 -13.070619805627 -11.055276188188 -8.8670201485879 -6.7675661217131 -5.0239857455314 -3.8700002147447 -3.4662333018861 -3.8700002147447 -5.0239857455314 -6.7675661217132 -8.8670201485879 -11.055276188188 -13.070619805628 -14.686590996634 -15.729815610804 -16.086407047618 -15.699728250376 -14.562826617221 -12.708417752994 -10.198550576268 -7.1154221525387 -3.5543505595039 0.3803864999943 4.5764164818017 8.9108439641296 13.245309251623 17.420516960255 21.253649078358 24.54302091536 27.083580892514 28.693357777666 29.24522523519 +AZ 0 -57.772441061298 -56.567927698874 -52.915735472845 -46.728104837055 -37.945923300612 -26.646677297616 -13.1539396531 1.884567448235 17.480816658976 32.372014727049 45.168953565233 54.565024112554 59.562516477467 59.66156521372 54.961598750211 46.145921095957 34.35122213289 20.955060420457 7.3351136698256 -5.3421830022768 -16.258981069711 -24.988547672977 -31.448145734543 -35.787818523458 -38.251275493156 -39.045787971432 -38.251275493156 -35.787818523458 -31.448145734543 -24.988547672977 -16.258981069709 -5.3421830022773 7.3351136698258 20.955060420457 34.35122213289 46.145921095957 54.961598750211 59.661565213719 59.562516477467 54.565024112554 45.168953565233 32.372014727049 17.480816658976 1.8845674482348 -13.153939653101 -26.646677297616 -37.9459233006 -46.728104837064 -52.915735472846 -56.567927698874 -57.772441061298 +AlphaX 0 1.8873791418628e-15 0.33564446626677 1.2969509209374 2.7552492068549 4.5206238892469 6.3705304677731 8.0782343268086 9.4366700791064 10.276356018202 10.477760280567 9.978779750848 8.7774983832024 6.9299778815518 4.5429612278615 1.7620666173684 -1.2429296188874 -4.2930877391976 -7.2120641963382 -9.8302061604303 -11.974720058007 -13.434870705402 -13.880941886419 -12.713654512075 -8.988227359489 -2.6378863106618 1.3386915096167 -2.6378863107198 -8.9882273594891 -12.713654512075 -13.880941886419 -13.434870705401 -11.974720058007 -9.8302061604303 -7.2120641963384 -4.2930877391974 -1.2429296188874 1.7620666173684 4.5429612278616 6.9299778815519 8.7774983832024 9.9787797508481 10.477760280567 10.276356018202 9.4366700791064 8.0782343268086 6.370530467773 4.5206238892473 2.7552492068548 1.2969509209374 0.33564446626675 1.5543122344752e-15 +AlphaY 0 31.0062766803 30.76178292755 30.032157481834 28.828906972288 27.171007378236 25.084604766654 22.602602953087 19.764144588808 16.613993857837 13.201830519009 9.5814664265042 5.8099968847632 1.9469002214257 -1.9469002214256 -5.8099968847632 -9.5814664265043 -13.201830519009 -16.613993857837 -19.764144588808 -22.602602953087 -25.084604766654 -27.171007378235 -28.828906972288 -30.032157481834 -30.76178292755 -31.006276680299 -30.761782927549 -30.032157481834 -28.828906972288 -27.171007378235 -25.084604766654 -22.602602953087 -19.764144588808 -16.613993857837 -13.201830519009 -9.5814664265042 -5.8099968847632 -1.9469002214256 1.9469002214257 5.8099968847633 9.5814664265044 13.201830519009 16.613993857837 19.764144588809 22.602602953087 25.084604766654 27.171007378235 28.82890697229 30.032157481834 30.76178292755 31.0062766803 +AlphaZ 0 18.25134055375 17.944695856758 17.036319205476 15.559632185181 13.567162537762 11.128394808919 8.3296870847025 5.275903653186 2.0918211143268 -1.0790998064265 -4.0802813594074 -6.7522729165935 -8.9465755101902 -10.540891975189 -11.453210474438 -11.652365890076 -11.163511026668 -10.067997605985 -8.498170663356 -6.6282162132437 -4.6623371063931 -2.8211959847534 -1.3260311745656 -0.36972290467723 -0.017408758650958 5.9685589803848e-13 -0.017408758651854 -0.36972290467725 -1.3260311745656 -2.8211959847534 -4.6623371063929 -6.6282162132438 -8.498170663356 -10.067997605985 -11.163511026668 -11.652365890076 -11.453210474438 -10.540891975188 -8.9465755101903 -6.7522729165935 -4.0802813594073 -1.0790998064265 2.0918211143269 5.2759036531862 8.3296870847026 11.12839480892 13.567162537763 15.55963218518 17.036319205476 17.944695856758 18.25134055375 +PartSeries /backhoe/jack3 +X 5.7063579662069 5.7063579662069 5.7053989706077 5.7009733765759 5.6885748623522 5.6611573704656 5.6098258621076 5.5247778410823 5.3964431459997 5.2167278470865 4.9802250444058 4.6852256124622 4.3343605143329 3.9347427691671 3.4975505249256 3.0370896024326 2.5694713282435 2.1111137040677 1.6773010891794 1.2810124780733 0.93215905915594 0.63727794993023 0.39963620318137 0.21963252949474 0.095372544821449 0.023406445116919 -7.639143225387e-15 0.023406445116932 0.095372544821449 0.21963252949474 0.39963620318137 0.63727794993024 0.93215905915595 1.2810124780733 1.6773010891794 2.1111137040677 2.5694713282435 3.0370896024326 3.4975505249256 3.9347427691671 4.3343605143329 4.6852256124622 4.9802250444058 5.2167278470865 5.3964431459997 5.5247778410823 5.6098258621076 5.6611573704649 5.688574862353 5.700973376576 5.7053989706077 5.7063579662069 +Y 1.1185801975005 1.1185801975005 1.1283052115546 1.157186756336 1.2043618337048 1.2684459875813 1.3476007128954 1.4396072864001 1.5419371211473 1.6518141801453 1.766270116466 1.8821960810375 1.9963963298507 2.1056484398822 2.2067738880107 2.2967216280966 2.3726666130977 2.4321253657273 2.4730922326457 2.4942038840359 2.4949482929275 2.4759534929015 2.4394337488207 2.3899578986031 2.3358072157052 2.2907402747003 2.2725309439588 2.2907402747019 2.3358072157052 2.3899578986031 2.4394337488207 2.4759534929015 2.4949482929275 2.4942038840359 2.4730922326457 2.4321253657273 2.3726666130977 2.2967216280966 2.2067738880107 2.1056484398822 1.9963963298507 1.8821960810375 1.766270116466 1.6518141801453 1.5419371211473 1.4396072864001 1.3476007128954 1.2684459875824 1.2043618337039 1.1571867563359 1.1283052115546 1.1185801975005 +Z -4.8941405307832e-15 -4.9309056105033e-15 -0.035334553008357 -0.14069852039 -0.31406286679442 -0.5517097235524 -0.84782906828588 -1.1941370835756 -1.5796582414427 -1.990801380829 -2.411818364331 -2.8256658835885 -3.2152071494441 -3.5646079889245 -3.8607223236067 -4.0942435866227 -4.2604304165945 -4.3592923480797 -4.3952266580342 -4.3762067172996 -4.3127139967619 -4.2166734529373 -4.1007133653236 -3.9781719468824 -3.8644069417099 -3.779391459802 -3.7468631633534 -3.7793914598045 -3.8644069417099 -3.9781719468824 -4.1007133653236 -4.2166734529373 -4.3127139967619 -4.3762067172996 -4.3952266580342 -4.3592923480797 -4.2604304165945 -4.0942435866227 -3.8607223236067 -3.5646079889245 -3.2152071494441 -2.8256658835885 -2.411818364331 -1.990801380829 -1.5796582414427 -1.1941370835756 -0.84782906828587 -0.55170972355106 -0.31406286679566 -0.1406985203901 -0.035334553008357 -4.9960215516613e-15 +Bryantx -6.4753672903284e-16 1.5707963267949 1.6474487863264 1.8836215065684 2.2359399545735 2.5579769106107 2.7656955892238 2.8814663427857 2.9423425756065 2.9716950849239 2.9822606989627 2.9808886291222 2.9712729771193 2.9553624278376 2.9340963348277 2.9078087558171 2.8764692904672 2.8398477289532 2.7976517684464 2.7496699551018 2.6959461086653 2.6370169546936 2.5742733149031 2.5105829245581 2.4514318348727 2.406545880267 2.38915066313 2.4065458802686 2.4514318348727 2.5105829245581 2.5742733149031 2.6370169546936 2.6959461086653 2.7496699551018 2.7976517684464 2.8398477289532 2.8764692904672 2.9078087558171 2.9340963348277 2.9553624278376 2.9712729771193 2.9808886291222 2.9822606989627 2.9716950849239 2.9423425756065 2.8814663427857 2.7656955892239 2.5579769105602 2.2359399546189 1.8836215065735 1.6474487863264 1.5707963267949 +Bryanty 1.5707963267949 1.4887492973703 1.4900972311848 1.4907729351803 1.4815783558063 1.4545367195826 1.4097265934488 1.3507511947854 1.2805964916753 1.2013784901918 1.1147841624832 1.0223468889659 0.92557843574596 0.82602807643486 0.72530582537403 0.62508640582612 0.52710078768964 0.43311693327333 0.34490791549061 0.264202829024 0.19261407535377 0.13153477519914 0.082004070747621 0.044548364175427 0.01902932447359 0.0045940635347744 1.0769163338862e-14 0.0045940635347918 0.01902932447359 0.044548364175427 0.082004070747621 0.13153477519914 0.19261407535377 0.264202829024 0.34490791549061 0.43311693327333 0.52710078768964 0.62508640582612 0.72530582537404 0.82602807643486 0.92557843574596 1.0223468889659 1.1147841624833 1.2013784901918 1.2805964916753 1.3507511947854 1.4097265934488 1.4545367195788 1.4815783558111 1.4907729351815 1.4900972311848 1.4887492973703 +Bryantz 0.0 -1.5707963267949 -1.6476980750234 -1.8845612760037 -2.2378761222029 -2.5610874004482 -2.770123239716 -2.8874689750823 -2.9504682480684 -2.9829587201301 -2.9983076614081 -3.0041378705162 -3.0050364589817 -3.0039387013263 -3.002834399059 -3.0031335529047 -3.0058524054825 -3.0116963114301 -3.0210762665708 -3.0340786288789 -3.0504029796264 -3.0692869830497 -3.0894460920462 -3.1090650816661 -3.1258841598455 -3.1374394406023 3.1415926535898 -3.1374394406024 -3.1258841598455 -3.1090650816661 -3.0894460920462 -3.0692869830497 -3.0504029796264 -3.0340786288789 -3.0210762665708 -3.0116963114301 -3.0058524054825 -3.0031335529047 -3.002834399059 -3.0039387013263 -3.0050364589817 -3.0041378705162 -2.9983076614081 -2.9829587201301 -2.9504682480684 -2.8874689750823 -2.7701232397161 -2.561087400398 -2.2378761222481 -1.8845612760088 -1.6476980750235 -1.5707963267949 +VX -4.0364014875074e-17 -4.0364014875073e-17 -0.10892084543736 -0.3715399988142 -0.92760651290508 -1.8890586047507 -3.3267406891652 -5.2588659338477 -7.6430824457582 -10.374368069031 -13.290706658021 -16.187437625479 -18.839445043049 -21.028380335559 -22.570501397104 -23.34005168036 -23.283732858225 -22.423666211597 -20.848796064588 -18.697222577561 -16.133744404973 -13.32749263156 -10.433845780629 -7.5828856820096 -4.8728026871221 -2.3570027326487 1.5290294043345e-14 2.3570027326499 4.8728026871221 7.5828856820096 10.433845780629 13.32749263156 16.133744404973 18.697222577561 20.848796064588 22.423666211597 23.283732858225 23.34005168036 22.570501397104 21.028380335559 18.839445043049 16.187437625479 13.290706658021 10.374368069031 7.6430824457581 5.2588659338476 3.3267406891652 1.8890586047486 0.92760651290674 0.37153999881428 0.10892084543736 -1.6354126558083e-15 +VY 4.7505817843473e-16 4.7505817843472e-16 0.97004043846485 1.910880909734 2.7950318736737 3.5979998866916 4.2989241351498 4.8806097676248 5.329194628783 5.6337325149218 5.7859099553543 5.7800055692683 5.613107275909 5.2855466023248 4.8014909489053 4.1696450814245 3.4040450458843 2.524981107336 1.560174140071 0.54649181568846 -0.46717079228373 -1.4144615222159 -2.2005438935465 -2.6797867490303 -2.6208428039799 -1.7267040277497 1.264616313212e-14 1.7267040277376 2.6208428039799 2.6797867490301 2.2005438935465 1.414461522216 0.46717079228374 -0.54649181568844 -1.5601741400708 -2.5249811073361 -3.4040450458843 -4.1696450814245 -4.8014909489053 -5.2855466023248 -5.613107275909 -5.7800055692683 -5.7859099553543 -5.6337325149218 -5.329194628783 -4.8806097676247 -4.2989241351498 -3.5979998866907 -2.7950318736743 -1.910880909734 -0.97004043846483 1.9247742318546e-14 +VZ -1.7242303068797e-15 -1.7242303068797e-15 -3.5282199014806 -6.9915283019794 -10.314275612955 -13.402328727732 -16.140771649728 -18.398514843189 -20.039961844143 -20.942391896759 -21.01625969802 -20.22449697764 -18.596495951765 -16.233054056119 -13.300205754551 -10.012253344155 -6.606824079097 -3.3167128641348 -0.34408404957103 2.1578078838561 4.0914243804207 5.4073293797003 6.0785555365222 6.0501212177357 5.161199762851 3.1291566302618 -2.2276199379209e-14 -3.1291566302458 -5.161199762851 -6.0501212177356 -6.0785555365222 -5.4073293797003 -4.0914243804208 -2.157807883856 0.344084049571 3.3167128641348 6.606824079097 10.012253344155 13.300205754551 16.233054056119 18.596495951765 20.22449697764 21.01625969802 20.942391896759 20.039961844143 18.398514843189 16.140771649727 13.402328727731 10.314275612955 6.9915283019793 3.5282199014805 -6.9859950109687e-14 +OmegaX 3.3287773158789e-30 2.1123599630039e-30 9.587963294791e-4 0.0066265324481479 0.017432591570346 0.02833796586295 0.030418567036728 0.013235117566059 -0.033183994142559 -0.11695314576528 -0.24343110978864 -0.41472967958442 -0.62959635709438 -0.88364412853663 -1.1698691680577 -1.4793484042888 -1.8019591318169 -2.1269165627575 -2.4428686020188 -2.7371747962345 -2.9937195182948 -3.1879235763627 -3.2760459551353 -3.1731765638012 -2.71680763049 -1.6688689181042 1.1959313769865e-14 1.6688689180945 2.71680763049 3.1731765638011 3.2760459551353 3.1879235763627 2.9937195182948 2.7371747962345 2.4428686020189 2.1269165627575 1.8019591318168 1.4793484042888 1.1698691680577 0.8836441285366 0.62959635709436 0.4147296795844 0.24343110978864 0.11695314576528 0.033183994142552 -0.013235117566052 -0.030418567036728 -0.028337965865696 -0.017432591569305 -0.0066265324480821 -9.5879632947874e-4 -2.112668111795e-29 +OmegaY 3.0215950648218e-16 3.0215950648218e-16 0.61849471679451 1.2272354024344 1.8166218526636 2.3773590910824 2.9006039564606 3.3781045647134 3.8023304459988 4.1665913047487 4.4651425296217 4.6932757894557 4.8473932864629 4.9250644956502 4.9250644956502 4.8473932864629 4.6932757894557 4.4651425296217 4.1665913047487 3.8023304459988 3.3781045647134 2.9006039564606 2.3773590910776 1.8166218526629 1.2272354024343 0.6184947167945 -4.0808253135309e-15 -0.61849471679461 -1.2272354024343 -1.8166218526629 -2.3773590910776 -2.9006039564606 -3.3781045647134 -3.8023304459988 -4.1665913047487 -4.4651425296217 -4.6932757894557 -4.8473932864629 -4.9250644956502 -4.9250644956502 -4.8473932864629 -4.6932757894557 -4.4651425296217 -4.1665913047487 -3.8023304459988 -3.3781045647134 -2.9006039564606 -2.3773590910776 -1.8166218526665 -1.2272354024348 -0.6184947167945 1.2242475940591e-14 +OmegaZ -1.9486966854502e-17 7.9093546810518e-17 0.15481490851013 0.26850094060116 0.31575398646969 0.29077914971963 0.20127036266393 0.061233408842928 -0.11336346878672 -0.30646589769996 -0.50266708616472 -0.68766166882032 -0.84874705215479 -0.97539823623787 -1.0598214996753 -1.097373314993 -1.0867639818352 -1.0300210090346 -0.93224456568094 -0.80123159054238 -0.64706882293742 -0.48180003122212 -0.31926800298431 -0.17518920864828 -0.067050096280885 -0.010335602743033 3.155443620884e-29 0.010335602742976 0.067050096280886 0.17518920864826 0.31926800298431 0.4818000312221 0.64706882293744 0.80123159054238 0.93224456568097 1.0300210090346 1.0867639818352 1.0973733149929 1.0598214996753 0.97539823623785 0.84874705215478 0.68766166882031 0.50266708616473 0.30646589769995 0.11336346878671 -0.061233408842914 -0.20127036266391 -0.2907791497529 -0.31575398644346 -0.26850094059677 -0.15481490851003 3.2046016197106e-15 +AX 0 -4.1419772878074 -8.0425528381421 -19.395541801137 -37.155135488957 -59.590286057229 -84.336588465817 -108.52500709041 -129.01684974109 -142.74952649054 -147.15999535721 -140.61390402955 -122.74343546352 -94.598871987461 -58.552877104644 -17.955525703577 23.39558822939 61.854616375525 94.462241539548 119.30262474487 135.62039901959 143.70043682599 144.57578936003 139.69492938479 130.83269314366 120.97960496597 116.17627592615 120.97960496601 130.83269314366 139.69492938479 144.57578936003 143.70043682599 135.62039901959 119.30262474487 94.462241539548 61.854616375525 23.395588229389 -17.955525703577 -58.552877104645 -94.598871987461 -122.74343546352 -140.61390402955 -147.15999535721 -142.74952649054 -129.01684974109 -108.52500709041 -84.336588465817 -59.590286057207 -37.155135488982 -19.395541801139 -8.0425528381419 -4.1419772878074 +AY 0 48.748376284017 48.010854033759 45.843014045595 42.367447315741 37.755517521862 32.193930688339 25.859488463465 18.90802786814 11.476516675205 3.6933625602788 -4.308438033836 -12.379128333332 -20.342797649713 -27.990885816004 -35.077489460434 -41.314377817923 -46.362371929684 -49.813347025731 -51.151619121789 -49.670197299214 -44.286268157731 -33.141071792098 -12.873810443115 21.49454190733 68.692244623322 96.086061738212 68.692244622949 21.494541907329 -12.873810443114 -33.141071792098 -44.286268157732 -49.670197299214 -51.151619121789 -49.813347025732 -46.362371929684 -41.314377817922 -35.077489460433 -27.990885816003 -20.342797649714 -12.379128333333 -4.3084380338359 3.6933625602788 11.476516675206 18.90802786814 25.859488463465 32.193930688339 37.755517521852 42.367447315751 45.843014045596 48.010854033759 48.748376284017 +AZ 0 -176.93291393704 -175.35746277546 -170.34971971009 -161.14266552841 -146.70119289922 -126.04080445425 -98.588719154046 -64.515911044581 -24.964263552874 17.898503636618 61.037216697038 100.91773296281 134.02834623822 157.4492553311 169.34160421803 169.23923426516 158.07148284269 137.90828756288 111.47406705764 81.496174617173 49.910410671304 16.823292140981 -20.945653868254 -70.597957867147 -133.29756803145 -169.25546875216 -133.29756803097 -70.597957867146 -20.945653868256 16.823292140981 49.910410671309 81.496174617172 111.47406705764 137.90828756289 158.07148284269 169.23923426516 169.34160421803 157.4492553311 134.02834623822 100.91773296281 61.037216697038 17.898503636617 -24.964263552875 -64.515911044582 -98.588719154047 -126.04080445425 -146.70119289921 -161.14266552841 -170.34971971009 -175.35746277546 -176.93291393704 +AlphaX 0 -3.9690473130349e-14 0.1391542854703 0.43208190665207 0.60491704787655 0.40914629083905 -0.28974051614062 -1.5128415994836 -3.1974281834088 -5.2245501055048 -7.4409399003825 -9.678281378703 -11.771383615823 -13.574428089597 -14.973093061655 -15.889996589582 -16.281082363896 -16.120590628745 -15.37095616195 -13.929208139619 -11.528680206237 -7.5445927243789 -0.5929450538548 12.206796036535 35.603526121878 70.091745571697 90.867352352845 70.091745571408 35.603526121878 12.206796036536 -0.59294505385451 -7.54459272438 -11.528680206237 -13.92920813962 -15.370956161951 -16.120590628745 -16.281082363896 -15.889996589582 -14.973093061654 -13.574428089597 -11.771383615824 -9.678281378703 -7.4409399003826 -5.2245501055048 -3.1974281834087 -1.5128415994836 -0.28974051614071 0.40914629091547 0.60491704782498 0.43208190664579 0.13915428547024 -3.6082248300318e-14 +AlphaY 0 31.0062766803 30.76178292755 30.032157481834 28.828906972299 27.171007378287 25.084604766654 22.602602953087 19.764144588808 16.613993857837 13.201830519009 9.5814664265043 5.8099968847633 1.9469002214256 -1.9469002214257 -5.8099968847632 -9.5814664265043 -13.201830519009 -16.613993857837 -19.764144588808 -22.602602953087 -25.084604766654 -27.171007378235 -28.828906972288 -30.032157481834 -30.76178292755 -31.006276680304 -30.761782927554 -30.032157481834 -28.828906972288 -27.171007378235 -25.084604766654 -22.602602953087 -19.764144588809 -16.613993857837 -13.201830519009 -9.5814664265042 -5.8099968847632 -1.9469002214256 1.9469002214257 5.8099968847633 9.5814664265044 13.201830519009 16.613993857837 19.764144588809 22.602602953087 25.084604766654 27.171007378235 28.828906972345 30.032157481845 30.76178292755 31.0062766803 +AlphaZ 0 8.1162311409115 7.0074536633141 4.1478296824089 0.53547140500034 -2.9624424225726 -5.8682199928441 -8.0010238084898 -9.3243661360662 -9.8571421032918 -9.6433471498725 -8.7497640047638 -7.2705900953475 -5.3292215354113 -3.0742360630612 -0.67023261187785 1.7140566678197 3.9174136159281 5.7949043930873 7.2220475770824 8.0937221207396 8.3178776628053 7.8045219984345 6.4559624413501 4.2148789498021 1.4663168754465 -1.0658141036402e-14 1.4663168754387 4.2148789498021 6.4559624413501 7.8045219984345 8.3178776628055 8.0937221207397 7.2220475770824 5.7949043930874 3.917413615928 1.7140566678198 -0.67023261187772 -3.074236063061 -5.3292215354115 -7.2705900953479 -8.7497640047641 -9.6433471498725 -9.8571421032918 -9.3243661360662 -8.0010238084895 -5.8682199928439 -2.9624424225911 0.53547140486705 4.1478296823379 7.00745366331 8.1162311409115 +PartSeries /backhoe/rod1 +X 1.0554999147856 1.0554999147856 1.0568330145134 1.0604961476469 1.065496557186 1.0702360373891 1.0726074907045 1.0701481725143 1.0602554116095 1.0404583740381 1.0087228592433 0.96374974631545 0.90521725211003 0.83391764758393 0.75175280341096 0.66157807553817 0.56691467792238 0.47157851346461 0.3792905644249 0.29333571485608 0.21632338467358 0.15007912300627 0.095668346626168 0.05352862858881 0.023670091473607 0.0058963155636922 -5.0443054337367e-16 0.0058963155636924 0.023670091473607 0.053528628588811 0.095668346626168 0.15007912300627 0.21632338467358 0.29333571485608 0.3792905644249 0.47157851346461 0.56691467792238 0.66157807553817 0.75175280341096 0.83391764758393 0.90521725211003 0.96374974631545 1.0087228592433 1.0404583740381 1.0602554116095 1.0701481725143 1.0726074907045 1.0702360373892 1.0654965571859 1.0604961476468 1.0568330145134 1.0554999147856 +Y 0.38335705764277 0.38335705764277 0.38588653216897 0.39349024225228 0.40620613825533 0.42407266719203 0.44709660109441 0.47521670445226 0.50826932277626 0.5459610596681 0.58785210733241 0.63335200350151 0.68172797209273 0.73212474453712 0.78359387632738 0.83513000170699 0.88571111540627 0.93433975960345 0.98008189600797 1.0221002800961 1.0596794042362 1.0922396581905 1.1193393965362 1.140665168212 1.1560123538846 1.1652605114771 1.1683492271845 1.1652605114771 1.1560123538846 1.140665168212 1.1193393965362 1.0922396581905 1.0596794042362 1.0221002800961 0.98008189600797 0.93433975960345 0.88571111540627 0.83513000170699 0.78359387632738 0.73212474453712 0.68172797209273 0.63335200350151 0.58785210733241 0.5459610596681 0.50826932277626 0.47521670445226 0.44709660109441 0.4240726671923 0.40620613825509 0.39349024225226 0.38588653216897 0.38335705764277 +Z 3.7469579501182e-17 3.1996212358144e-17 -0.0065451552756743 -0.026172765420424 -0.058825437197646 -0.10430016155427 -0.16210624568992 -0.23130407311902 -0.31036020461454 -0.39705846815201 -0.48850328946002 -0.58123877134905 -0.67148567156792 -0.75547238614332 -0.82981183810756 -0.89186100754248 -0.9399990227116 -0.97377445909429 -0.99389907432584 -1.0020961916841 -1.0008387299839 -0.99302769519942 -0.98166398470734 -0.96955623603194 -0.95909012360697 -0.95206617555114 -0.94959922718453 -0.95206617555114 -0.95909012360697 -0.96955623603194 -0.98166398470734 -0.99302769519943 -1.0008387299839 -1.0020961916841 -0.99389907432584 -0.97377445909428 -0.9399990227116 -0.89186100754248 -0.82981183810756 -0.75547238614331 -0.67148567156792 -0.58123877134905 -0.48850328946002 -0.39705846815201 -0.31036020461454 -0.23130407311902 -0.16210624568992 -0.10430016155405 -0.058825437197823 -0.026172765420439 -0.0065451552756743 3.4562273862599e-17 +Bryantx -1.5707963267949 -1.5707963267949 -1.582684813115 -1.6167724714636 -1.66862567005 -1.7318504753303 -1.7994343178928 -1.8650993223623 -1.9241691683749 -1.9737626409883 -2.0125026821083 -2.0400581336193 -2.056740540299 -2.0632370407659 -2.0604717702354 -2.0495556005451 -2.0317805387968 -2.0086214751303 -1.9817176592643 -1.9528191242311 -1.9236989887641 -1.8960474778471 -1.8713716458285 -1.8509222914039 -1.8356581063232 -1.8262430280116 -1.823062687657 -1.8262430280116 -1.8356581063232 -1.8509222914039 -1.8713716458285 -1.8960474778471 -1.9236989887641 -1.9528191242311 -1.9817176592643 -2.0086214751303 -2.0317805387968 -2.0495556005451 -2.0604717702354 -2.0632370407659 -2.056740540299 -2.0400581336193 -2.0125026821083 -1.9737626409883 -1.9241691683749 -1.8650993223623 -1.7994343178928 -1.7318504753301 -1.6686256700502 -1.6167724714636 -1.582684813115 -1.5707963267949 +Bryanty 1.0946105319679 1.0946105319679 1.0905283900423 1.0780014464198 1.0563238845185 1.0247104071058 0.98269571876533 0.93041910770592 0.8687102511707 0.79900604699031 0.72318560456832 0.64339710622326 0.56190933528566 0.48098967298878 0.40279812362181 0.32928742209032 0.26210563165722 0.20250579818738 0.15127461877116 0.1086961703741 0.074565188356758 0.048256527896629 0.028845562719013 0.015262930706166 0.0064604695976702 0.0015648763945262 -9.7838404045092e-16 0.0015648763945263 0.0064604695976703 0.015262930706166 0.028845562719014 0.048256527896629 0.074565188356759 0.1086961703741 0.15127461877116 0.20250579818738 0.26210563165722 0.32928742209033 0.40279812362181 0.48098967298878 0.56190933528566 0.64339710622326 0.72318560456832 0.79900604699031 0.8687102511707 0.93041910770592 0.98269571876533 1.0247104071056 1.0563238845187 1.0780014464198 1.0905283900423 1.0946105319679 +Bryantz 1.5707963267949 1.5707963267949 1.5842011310282 1.6229712152851 1.6830583756792 1.7586645720454 1.843524455276 1.9321923511636 2.0208436482748 2.1074071045863 2.1912152970367 2.2724853710863 2.3518464869893 2.4299911115025 2.5074440491062 2.5844188107934 2.6607370753088 2.7358007281772 2.8086153519747 2.8778645170472 2.9420264772077 2.9995141159209 3.0488125112435 3.0885911370359 3.1177785316762 3.1356005197705 -3.1415926535898 3.1356005197705 3.1177785316762 3.0885911370359 3.0488125112435 2.9995141159209 2.9420264772077 2.8778645170472 2.8086153519747 2.7358007281772 2.6607370753088 2.5844188107934 2.5074440491062 2.4299911115025 2.3518464869893 2.2724853710863 2.1912152970367 2.1074071045863 2.0208436482748 1.9321923511636 1.843524455276 1.7586645720452 1.6830583756794 1.6229712152851 1.5842011310282 1.5707963267949 +VX 6.6329144729876e-17 6.6329144729876e-17 0.13049597389639 0.22750303826942 0.25914055331169 0.19712144844783 0.019320573481443 -0.28717052792561 -0.72295465023884 -1.2739556439161 -1.9106298790004 -2.5894813543386 -3.2571634635418 -3.8568155155643 -4.335628643897 -4.6521833126784 -4.7820243023112 -4.7202930661067 -4.4809247893 -4.0927245934828 -3.5933182753328 -3.0223446759394 -2.4152593625867 -1.7988177612416 -1.1888403320998 -0.59037878055564 3.8751485640034e-15 0.59037878055565 1.1888403320998 1.7988177612416 2.4152593625867 3.0223446759394 3.5933182753328 4.0927245934828 4.4809247893 4.7202930661067 4.7820243023112 4.6521833126784 4.335628643897 3.8568155155643 3.2571634635418 2.5894813543386 1.9106298790003 1.2739556439161 0.72295465023883 0.2871705279256 -0.019320573481447 -0.19712144844778 -0.25914055331173 -0.22750303826942 -0.13049597389639 2.6874314429798e-15 +VY 1.2318351356414e-16 1.2318351356414e-16 0.25308162606633 0.50762463797414 0.76431288804103 1.0224274643102 1.2794849350583 1.531184810011 1.7716461504776 1.9938660207347 2.190311137115 2.353555252058 2.4768896298842 2.5548533488513 2.5836478404136 2.5614132786693 2.4883531663662 2.3666994333358 2.2005160942306 1.9953477835582 1.7577328432325 1.4946205807056 1.2127578198043 0.91813544813072 0.61560031387969 0.30872724789142 -2.0335110462426e-15 -0.30872724789142 -0.6156003138797 -0.91813544813072 -1.2127578198043 -1.4946205807056 -1.7577328432325 -1.9953477835582 -2.2005160942306 -2.3666994333358 -2.4883531663662 -2.5614132786693 -2.5836478404136 -2.5548533488513 -2.4768896298842 -2.353555252058 -2.190311137115 -1.9938660207347 -1.7716461504775 -1.531184810011 -1.2794849350583 -1.0224274643106 -0.76431288804073 -0.50762463797412 -0.25308162606632 4.990977178391e-15 +VZ -3.1892933334361e-16 -3.1892933334361e-16 -0.65447889171953 -1.3078858482573 -1.955811202002 -2.5877108103851 -3.1851930886593 -3.7218895965902 -4.1652556593089 -4.4803420352733 -4.6351405929326 -4.6066321783372 -4.3863059044752 -3.9838323472274 -3.4278498153103 -2.7634343117558 -2.046611623347 -1.3369940751915 -0.69005312383257 -0.15054073801327 0.25183312707456 0.50401637323412 0.60875636432762 0.58200370906284 0.44952109674208 0.24354141586316 -1.6441893888314e-15 -0.24354141586316 -0.44952109674208 -0.58200370906284 -0.60875636432762 -0.50401637323411 -0.25183312707457 0.15054073801327 0.69005312383257 1.3369940751915 2.046611623347 2.7634343117558 3.4278498153103 3.9838323472275 4.3863059044753 4.6066321783372 4.6351405929326 4.4803420352733 4.1652556593089 3.7218895965902 3.1851930886592 2.5877108103853 1.9558112020017 1.3078858482573 0.65447889171951 -1.2921932312059e-14 +OmegaX 1.2325951644078e-32 3.2355623065706e-32 0.0024980089673368 0.019562292162846 0.063740834211386 0.14393287684816 0.26439902639473 0.42447306811026 0.61888193880202 0.83850824153541 1.0714281139 1.3040872712483 1.5225072648517 1.7134300380939 1.8653155677312 1.9691150546108 2.0187594822668 2.0113333667635 1.9469428476382 1.8283281088684 1.6603031986056 1.4491239862598 1.2018834950016 0.92601429527936 0.62894566534133 0.31792729522001 -2.0997123096333e-15 -0.31792729522002 -0.62894566534133 -0.92601429527937 -1.2018834950016 -1.4491239862598 -1.6603031986056 -1.8283281088684 -1.9469428476382 -2.0113333667635 -2.0187594822668 -1.9691150546108 -1.8653155677312 -1.7134300380939 -1.5225072648517 -1.3040872712483 -1.0714281139 -0.8385082415354 -0.61888193880201 -0.42447306811025 -0.26439902639472 -0.14393287684815 -0.063740834211387 -0.019562292162845 -0.0024980089673363 -1.9721522630525e-31 +OmegaY 3.0215950648218e-16 3.0215950648218e-16 0.61849471679451 1.2272354024343 1.8166218526629 2.3773590910778 2.9006039564606 3.3781045647134 3.8023304459988 4.1665913047487 4.4651425296217 4.6932757894557 4.8473932864629 4.9250644956502 4.9250644956502 4.8473932864629 4.6932757894557 4.4651425296217 4.1665913047487 3.8023304459988 3.3781045647134 2.9006039564606 2.3773590910776 1.8166218526629 1.2272354024343 0.6184947167945 -4.0808253135303e-15 -0.61849471679451 -1.2272354024343 -1.8166218526629 -2.3773590910776 -2.9006039564606 -3.3781045647134 -3.8023304459988 -4.1665913047487 -4.4651425296217 -4.6932757894557 -4.8473932864629 -4.9250644956502 -4.9250644956502 -4.8473932864629 -4.6932757894557 -4.4651425296217 -4.1665913047487 -3.8023304459988 -3.3781045647134 -2.9006039564606 -2.3773590910776 -1.816621852663 -1.2272354024343 -0.61849471679449 1.2242475940591e-14 +OmegaZ 1.9768632350884e-16 1.9768632350884e-16 0.40334846707816 0.7926459105331 1.1545284257935 1.4769119191457 1.7494475616223 1.9638611287489 2.1142302234824 2.1972404358128 2.2124191460851 2.1623020328146 2.052463516293 1.891345829278 1.689848400435 1.4606797890316 1.217516565486 0.97404649538898 0.74298997821746 0.53519206764479 0.35886141967397 0.21901026329537 0.11712990248731 0.051124703692077 0.015522213256217 0.0019689804207605 -3.4512664603419e-31 -0.0019689804207606 -0.015522213256217 -0.051124703692078 -0.11712990248731 -0.21901026329537 -0.35886141967397 -0.53519206764479 -0.74298997821747 -0.97404649538898 -1.217516565486 -1.4606797890316 -1.6898484004349 -1.8913458292781 -2.052463516293 -2.1623020328146 -2.212419146085 -2.1972404358127 -2.1142302234824 -1.9638611287489 -1.7494475616223 -1.4769119191457 -1.1545284257936 -0.7926459105331 -0.40334846707815 8.0095777475847e-15 +AX 0 6.8064044630131 5.9628268742143 3.4705804333576 -0.54470513491202 -5.844182185703 -12.046142834474 -18.610077411863 -24.851782339862 -30.000895534673 -33.300601798599 -34.134586407654 -32.153299016479 -27.365525943144 -20.165830704369 -11.283587897783 -1.660732484432 7.7143346071068 15.977238779185 22.523390094376 27.081624026335 29.716436898726 30.76725789491 30.745239834833 30.212378551742 29.665671280917 29.443536373483 29.665671280917 30.212378551742 30.745239834833 30.76725789491 29.716436898725 27.081624026335 22.523390094375 15.977238779184 7.7143346071067 -1.6607324844322 -11.283587897783 -20.165830704369 -27.365525943144 -32.153299016479 -34.134586407654 -33.300601798599 -30.000895534673 -24.851782339862 -18.610077411863 -12.046142834474 -5.8441821857051 -0.54470513491034 3.4705804333578 5.9628268742143 6.8064044630131 +AY 0 12.640549187045 12.680458595663 12.780076134229 12.88306483257 12.907738506889 12.761965405266 12.358621205714 11.628651320688 10.530018461256 9.0520927567769 7.2159665506652 5.0716155308527 2.6928697355414 0.17097614062027 -2.392707657701 -4.8945398908101 -7.2366715329851 -9.3350467399832 -11.126804797575 -12.576256132925 -13.67827232311 -14.457744243677 -14.963989365257 -15.259887763671 -15.407119511193 -15.450699622743 -15.407119511193 -15.259887763671 -14.963989365257 -14.457744243677 -13.67827232311 -12.576256132925 -11.126804797575 -9.3350467399832 -7.2366715329851 -4.8945398908101 -2.3927076577009 0.17097614062033 2.6928697355414 5.0716155308527 7.2159665506654 9.0520927567769 10.530018461256 11.628651320689 12.358621205714 12.761965405266 12.907738506894 12.883064832565 12.780076134228 12.680458595663 12.640549187045 +AZ 0 -32.727122393876 -32.714679607178 -32.591664862188 -32.114491904652 -30.922358077425 -28.604640044505 -24.790615760386 -19.250186042535 -11.986525068894 -3.2967404821765 6.2216980603994 15.731051362428 24.275499460931 30.942411983434 35.025931812552 36.152939414283 34.340934016209 29.976571865022 23.725768793114 16.403659563728 8.8398419153284 1.7700099621398 -4.2277372857012 -8.7495971510662 -11.547211807002 -12.492617837841 -11.547211807002 -8.7495971510662 -4.2277372857011 1.7700099621399 8.839841915329 16.403659563728 23.725768793114 29.976571865022 34.340934016209 36.152939414283 35.025931812552 30.942411983434 24.275499460931 15.731051362428 6.2216980603993 -3.2967404821768 -11.986525068894 -19.250186042535 -24.790615760386 -28.604640044506 -30.922358077426 -32.11449190465 -32.591664862187 -32.714679607178 -32.727122393876 +AlphaX 0 -8.8817841970013e-16 0.37291761567556 1.4394672080974 3.0533785829369 5.0015578704756 7.0392174417579 8.9235886190618 10.440439021964 11.421833166071 11.756185747398 11.392278945255 10.338395796624 8.6570629017476 6.4556724758268 3.8735573373456 1.0667057644997 -1.8080996262857 -4.6076382112609 -7.213179705995 -9.5366654415469 -11.521726836093 -13.140097204668 -14.384767748685 -15.261661832165 -15.781572130995 -15.953699514082 -15.781572130995 -15.261661832165 -14.384767748685 -13.140097204668 -11.521726836093 -9.5366654415471 -7.213179705995 -4.6076382112609 -1.8080996262856 1.0667057644997 3.8735573373455 6.4556724758269 8.6570629017476 10.338395796624 11.392278945255 11.756185747398 11.421833166071 10.440439021964 8.9235886190617 7.0392174417578 5.0015578704757 3.053378582937 1.4394672080973 0.37291761567554 1.1102230246252e-15 +AlphaY 0 31.0062766803 30.76178292755 30.032157481834 28.828906972288 27.171007378237 25.084604766654 22.602602953087 19.764144588808 16.613993857837 13.201830519009 9.5814664265043 5.8099968847633 1.9469002214257 -1.9469002214257 -5.8099968847633 -9.5814664265043 -13.201830519009 -16.613993857837 -19.764144588808 -22.602602953087 -25.084604766654 -27.171007378235 -28.828906972288 -30.032157481834 -30.76178292755 -31.0062766803 -30.76178292755 -30.032157481834 -28.828906972288 -27.171007378235 -25.084604766654 -22.602602953087 -19.764144588808 -16.613993857837 -13.201830519009 -9.5814664265042 -5.8099968847632 -1.9469002214256 1.9469002214257 5.8099968847633 9.5814664265043 13.201830519009 16.613993857837 19.764144588809 22.602602953087 25.084604766654 27.171007378235 28.82890697229 30.032157481834 30.76178292755 31.0062766803 +AlphaZ 0 20.285699146083 19.931470660032 18.88640855287 17.200765909393 14.951067868345 12.233318999242 9.1584707744022 5.8506179805645 2.4463172289882 -0.90734918038664 -4.0577710397003 -6.8553862531325 -9.1650083407563 -10.87811939593 -11.9239614095 -12.277469471246 -11.962768342531 -11.051867343818 -9.6590476350783 -7.9319755936926 -6.0406553554535 -4.1650179982362 -2.4815198903171 -1.1489883127902 -0.29438198431023 -4.7739590058882e-15 -0.29438198431023 -1.1489883127903 -2.4815198903171 -4.1650179982363 -6.0406553554534 -7.9319755936927 -9.6590476350783 -11.051867343818 -11.962768342531 -12.277469471246 -11.9239614095 -10.87811939593 -9.1650083407563 -6.8553862531325 -4.0577710397002 -0.90734918038661 2.4463172289883 5.8506179805648 9.1584707744022 12.233318999243 14.951067868346 17.200765909393 18.88640855287 19.931470660032 20.285699146083 +PartSeries /backhoe/rod2 +X 2.7472521519567 2.7472521519567 2.7461277518515 2.7419948811433 2.7326465957904 2.7146449471042 2.6836792729904 2.6350556492366 2.564289639478 2.46775076351 2.3432822605075 2.1907024067237 2.0120929798289 1.8118024518567 1.5961357715175 1.3727610588991 1.1499219243714 0.93558639479442 0.73667733199793 0.55851074374002 0.40452305384367 0.27630894570423 0.17393286284297 0.096431791583507 0.042400004465671 0.01053356723536 -2.1624482957689e-15 0.010533567235359 0.042400004465671 0.096431791583508 0.17393286284297 0.27630894570423 0.40452305384367 0.55851074374002 0.73667733199793 0.93558639479442 1.1499219243714 1.3727610588991 1.5961357715175 1.8118024518567 2.0120929798289 2.1907024067237 2.3432822605076 2.46775076351 2.564289639478 2.6350556492366 2.6836792729904 2.7146449471041 2.7326465957905 2.7419948811433 2.7461277518515 2.7472521519567 +Y 1.6695260493607 1.6695260493607 1.6781399641841 1.7037753601648 1.745826367162 1.8033235193691 1.8749833920294 1.9592615873944 2.0544013742533 2.1584749126432 2.2694182782002 2.3850640550879 2.5031758482357 2.6214881458455 2.7377532188306 2.8497947553794 2.9555661021987 3.0532096090979 3.1411129438131 3.2179588174889 3.2827672087141 3.3349356480593 3.3742969496914 3.4012406535785 3.416979319447 3.4239577868148 3.4256391964618 3.4239577868152 3.416979319447 3.4012406535785 3.3742969496914 3.3349356480592 3.2827672087141 3.2179588174889 3.1411129438131 3.0532096090979 2.9555661021987 2.8497947553794 2.7377532188306 2.6214881458455 2.5031758482357 2.3850640550879 2.2694182782002 2.1584749126432 2.0544013742533 1.9592615873944 1.8749833920294 1.8033235193697 1.7458263671615 1.7037753601648 1.6781399641841 1.6695260493607 +Z -9.814752419667e-16 -9.9682184078334e-16 -0.017007258758834 -0.06767171098868 -0.15086780864742 -0.26455650590503 -0.40559214377159 -0.56954646115189 -0.75062428211631 -0.94174006609932 -1.1348023710397 -1.3212155750428 -1.4925606009697 -1.6413691753499 -1.7618721904628 -1.850593461866 -1.9066810707126 -1.9319161274622 -1.9304010883048 -1.907989586577 -1.8715606732441 -1.8282518582161 -1.7847452499329 -1.7466549647615 -1.7180088031878 -1.7008338451956 -1.6952392212654 -1.7008338451954 -1.7180088031878 -1.7466549647616 -1.7847452499329 -1.8282518582161 -1.8715606732441 -1.907989586577 -1.9304010883048 -1.9319161274622 -1.9066810707126 -1.850593461866 -1.7618721904628 -1.6413691753498 -1.4925606009697 -1.3212155750428 -1.1348023710397 -0.94174006609931 -0.7506242821163 -0.56954646115189 -0.40559214377159 -0.26455650590457 -0.15086780864779 -0.067671710988711 -0.017007258758834 -1.027747847929e-15 +Bryantx 1.5707963267949 1.5707963267949 1.6038429995891 1.7099320790026 1.9063316571112 2.1984187341903 2.5343021534329 2.8243509033087 3.0313134215098 -3.1131425180097 -3.0190266780425 -2.9523943040143 -2.9025660457495 -2.8630413187505 -2.8298419905613 -2.8005419879775 -2.7737245378165 -2.7486778340767 -2.725216759906 -2.7035635082445 -2.684243667601 -2.6679664375259 -2.6554618207919 -2.6472417936365 -2.6432395215452 -2.6423518329872 -2.6424798091116 -2.642351832987 -2.6432395215452 -2.6472417936365 -2.6554618207919 -2.6679664375259 -2.684243667601 -2.7035635082445 -2.725216759906 -2.7486778340767 -2.7737245378165 -2.8005419879775 -2.8298419905613 -2.8630413187505 -2.9025660457495 -2.9523943040143 -3.0190266780425 -3.1131425180097 3.0313134215098 2.8243509033087 2.5343021534329 2.1984187341903 1.9063316571115 1.7099320790026 1.6038429995891 1.5707963267949 +Bryanty 1.3819675386049 1.3819675386049 1.38550524862 1.3946874076428 1.4046718200778 1.4063354016032 1.3887932616141 1.3471091574451 1.2843827515201 1.2061006952692 1.1168436491176 1.020103384768 0.91870962848783 0.81512247640971 0.71157098793871 0.61010182625661 0.51258052457199 0.42066921137555 0.33579575447185 0.25912611763325 0.19155069392458 0.1336938991288 0.085952523193083 0.048561359698373 0.021674568071876 0.0054372242480188 -6.9388939039072e-16 0.0054372242480183 0.021674568071876 0.048561359698373 0.085952523193083 0.1336938991288 0.19155069392458 0.25912611763325 0.33579575447185 0.42066921137555 0.51258052457199 0.61010182625661 0.71157098793871 0.81512247640971 0.91870962848783 1.020103384768 1.1168436491176 1.2061006952692 1.2843827515201 1.3471091574451 1.3887932616141 1.4063354016033 1.4046718200777 1.3946874076428 1.38550524862 1.3819675386049 +Bryantz -1.5707963267949 -1.5707963267949 -1.6044180920097 -1.712089163393 -1.9106651432586 -2.2048893572752 -2.5420838578618 -2.8317526950087 -3.0357716739612 3.115012704082 3.0313341275035 2.9798389115089 2.9502758118543 2.9363789799744 2.9341763051368 2.9409766547071 2.954779599646 2.9739254900562 2.9968864519933 3.0221494005867 3.0481689190203 3.0733796319182 3.0962598835544 3.1154348261739 3.1297995599212 3.1386276652864 3.1415926535898 3.1386276652864 3.1297995599212 3.1154348261739 3.0962598835544 3.0733796319182 3.0481689190203 3.0221494005867 2.9968864519933 2.9739254900562 2.954779599646 2.9409766547071 2.9341763051368 2.9363789799744 2.9502758118543 2.9798389115089 3.0313341275035 3.115012704082 -3.0357716739612 -2.8317526950087 -2.5420838578618 -2.2048893572752 -1.9106651432588 -1.712089163393 -1.6044180920097 -1.5707963267949 +VX -5.1663416322256e-17 -5.1663416322255e-17 -0.11883059526117 -0.31302802401202 -0.65074977474238 -1.185748322054 -1.9504351886625 -2.9498437915223 -4.1575391567416 -5.5147509246545 -6.9338632206752 -8.3067803269094 -9.5176629769623 -10.458343264673 -11.043751179397 -11.224296173104 -10.992560129689 -10.382824299112 -9.4635520979126 -8.3245060783514 -7.0612436741294 -5.7600624425306 -4.4860727625924 -3.2762184127818 -2.138152017438 -1.0554927372526 6.9179751266288e-15 1.0554927372524 2.138152017438 3.2762184127819 4.4860727625925 5.7600624425307 7.0612436741294 8.3245060783514 9.4635520979126 10.382824299112 10.992560129689 11.224296173104 11.043751179397 10.458343264673 9.5176629769623 8.3067803269094 6.9338632206751 5.5147509246544 4.1575391567416 2.9498437915223 1.9504351886624 1.1857483220541 0.65074977474236 0.31302802401201 0.11883059526117 -2.0932259874843e-15 +VY 4.2056298733228e-16 4.2056298733228e-16 0.8596604635716 1.6987991097933 2.4981800240528 3.2407948797989 3.9122815177211 4.5008644215319 4.9970202347865 5.393107622024 5.6831387991329 5.8627692502125 5.9294916771215 5.8829620503075 5.7253603507707 5.4616878916258 5.0999189809819 4.6509539903537 4.1283674146513 3.5480215852209 2.9277539836669 2.2876059376492 1.6515590873398 1.0525179983956 0.54158032936761 0.18741212234902 -9.702536766641e-16 -0.18741212235164 -0.54158032936762 -1.0525179983956 -1.6515590873398 -2.2876059376492 -2.9277539836669 -3.5480215852209 -4.1283674146513 -4.6509539903537 -5.0999189809819 -5.4616878916258 -5.7253603507706 -5.8829620503075 -5.9294916771215 -5.8627692502125 -5.6831387991328 -5.393107622024 -4.9970202347865 -4.5008644215319 -3.912281517721 -3.2407948797991 -2.4981800240526 -1.6987991097933 -0.85966046357158 1.703978244425e-14 +VZ -8.3010835441735e-16 -8.3010835441735e-16 -1.697794712522 -3.3593973726817 -4.9433892397128 -6.3994224951482 -7.6673179565364 -8.6797627840538 -9.3687374156596 -9.6749896463315 -9.5590329523357 -9.011468525655 -8.060158864104 -6.7721144789834 -5.2489352374623 -3.6160855814387 -2.0077854015518 -0.55039541514161 0.65249998044744 1.5306738708702 2.0521372973794 2.2225509290003 2.0808985764154 1.6941902325068 1.1534396942492 0.56443419053199 -3.6438266218168e-15 -0.56443419053342 -1.1534396942492 -1.6941902325068 -2.0808985764154 -2.2225509290003 -2.0521372973794 -1.5306738708702 -0.65249998044741 0.55039541514157 2.0077854015519 3.6160855814388 5.2489352374624 6.7721144789834 8.060158864104 9.011468525655 9.5590329523357 9.6749896463315 9.3687374156596 8.6797627840537 7.6673179565363 6.3994224951476 4.9433892397131 3.3593973726817 1.697794712522 -3.3633168373066e-14 +OmegaX 3.391177446077e-30 2.919709795691e-30 0.0022479992770973 0.017615689636829 0.057453105467816 0.12988006756578 0.23884240336452 0.38374873273844 0.55963482326032 0.75774597721319 0.9664209679849 1.1721736496428 1.3608771308788 1.5189539378837 1.6344708848368 1.6980411546636 1.7034575847904 1.6480236643338 1.5326104579987 1.3615465802649 1.1425524622224 0.88709584348001 0.61185943434339 0.3425155426142 0.12043801469535 0.0017329449969769 1.7618904248903e-16 -0.0017329449989208 -0.12043801469535 -0.34251554261422 -0.6118594343434 -0.88709584348 -1.1425524622224 -1.3615465802649 -1.5326104579987 -1.6480236643338 -1.7034575847904 -1.6980411546636 -1.6344708848367 -1.5189539378837 -1.3608771308788 -1.1721736496428 -0.9664209679849 -0.75774597721318 -0.55963482326032 -0.38374873273844 -0.23884240336451 -0.12988006756578 -0.057453105467816 -0.017615689636828 -0.0022479992770968 -1.1832913578315e-30 +OmegaY 3.0215950648218e-16 3.0215950648218e-16 0.61849471679451 1.2272354024343 1.8166218526629 2.3773590910778 2.9006039564606 3.3781045647134 3.8023304459988 4.1665913047487 4.4651425296217 4.6932757894557 4.8473932864629 4.9250644956503 4.9250644956502 4.8473932864629 4.6932757894557 4.4651425296217 4.1665913047487 3.8023304459988 3.3781045647134 2.9006039564606 2.3773590910776 1.8166218526629 1.2272354024343 0.6184947167945 -4.0808253135302e-15 -0.61849471679449 -1.2272354024343 -1.8166218526629 -2.3773590910776 -2.9006039564606 -3.3781045647134 -3.8023304459988 -4.1665913047487 -4.4651425296217 -4.6932757894557 -4.8473932864629 -4.9250644956502 -4.9250644956502 -4.8473932864629 -4.6932757894557 -4.4651425296217 -4.1665913047487 -3.8023304459988 -3.3781045647134 -2.9006039564606 -2.3773590910776 -1.816621852663 -1.2272354024343 -0.61849471679449 1.2242475940591e-14 +OmegaZ 1.7786127986994e-16 1.7786127986993e-16 0.36297990690432 0.7137713840289 1.0406397128838 1.3327144155516 1.5803471967187 1.7754464913094 1.9118296774673 1.9856097039172 1.9955872214002 1.9435765698473 1.8345729611729 1.6766761008099 1.480718897156 1.2595985134303 1.0273575660219 0.79810323892033 0.5848729520672 0.39855479219083 0.24695368833205 0.13406933850444 0.059628937562282 0.018910081318777 0.0029723784601366 1.0732437323663e-5 7.5927862127522e-29 -1.0732437321609e-5 -0.0029723784601364 -0.018910081318779 -0.059628937562285 -0.13406933850448 -0.24695368833203 -0.39855479219084 -0.5848729520672 -0.79810323892034 -1.0273575660219 -1.2595985134303 -1.480718897156 -1.6766761008099 -1.8345729611729 -1.9435765698473 -1.9955872214002 -1.9856097039172 -1.9118296774673 -1.7754464913094 -1.5803471967187 -1.3327144155517 -1.0406397128837 -0.71377138402889 -0.36297990690431 7.2063343792189e-15 +AX 0 -5.3014720582085 -7.2156489648216 -12.778095197834 -21.447872652318 -32.327237421688 -44.186962601897 -55.534473666791 -64.742472258881 -70.241544457085 -70.758068302533 -65.555139634173 -54.618489860049 -38.729973451315 -19.391800882511 1.3987094429251 21.482743176051 38.909233055711 52.256664873629 60.83875100829 64.758185334148 64.811436581949 62.278693272268 58.647220500952 55.306314866972 53.20903718164 52.563056333848 53.209037181634 55.306314866972 58.647220500952 62.278693272268 64.811436581948 64.758185334148 60.83875100829 52.256664873629 38.909233055711 21.482743176051 1.3987094429248 -19.391800882511 -38.729973451315 -54.618489860049 -65.555139634173 -70.758068302533 -70.241544457085 -64.742472258881 -55.534473666791 -44.186962601897 -32.327237421688 -21.447872652318 -12.778095197834 -7.2156489648215 -5.3014720582085 +AY 0 43.156319979914 42.637594923606 41.115163159146 38.680850371628 35.46102708324 31.589816700794 27.189442643941 22.362660066429 17.196186643648 11.770555874887 6.1713112936359 0.49775187645792 -5.1328058495344 -10.585819492251 -15.71493606236 -20.37090129861 -24.412132524656 -27.714027232696 -30.171993439967 -31.688992734641 -32.129830644528 -31.209046296289 -28.276561346328 -22.194197158289 -12.963181000814 -7.372026890977 -12.963181000893 -22.194197158289 -28.276561346328 -31.209046296289 -32.129830644528 -31.688992734641 -30.171993439967 -27.714027232697 -24.412132524656 -20.37090129861 -15.71493606236 -10.58581949225 -5.1328058495344 0.49775187645788 6.1713112936361 11.770555874887 17.196186643648 22.36266006643 27.189442643941 31.589816700794 35.461027083244 38.680850371625 41.115163159146 42.637594923606 43.156319979914 +AZ 0 -85.182060334118 -84.300352538855 -81.517999046195 -76.462473547897 -68.637129108621 -57.586040643085 -43.083533055648 -25.310726296614 -4.9765337920857 16.656772882664 37.869202374741 56.699512335678 71.249102743786 80.010334407875 82.141886486217 77.622365569046 67.244443145954 52.455835136757 35.095684174837 17.101783763409 0.26922637800592 -13.872938302141 -24.035818787692 -29.124037198851 -29.074523311584 -27.685942849966 -29.074523311628 -29.124037198851 -24.035818787691 -13.872938302141 0.26922637800789 17.101783763408 35.095684174837 52.455835136757 67.244443145955 77.622365569046 82.141886486217 80.010334407875 71.249102743786 56.699512335677 37.869202374741 16.656772882663 -4.9765337920863 -25.310726296614 -43.083533055649 -57.586040643085 -68.637129108611 -76.462473547903 -81.517999046195 -84.300352538855 -85.182060334118 +AlphaX 0 5.5511151231258e-16 0.33564446626677 1.2969509209374 2.7552492068549 4.5206238892469 6.3705304677731 8.0782343268086 9.4366700791064 10.276356018202 10.477760280567 9.978779750848 8.7774983832024 6.9299778815518 4.5429612278615 1.7620666173684 -1.2429296188874 -4.2930877391976 -7.2120641963382 -9.8302061604303 -11.974720058007 -13.434870705402 -13.880941886419 -12.713654512075 -8.988227359489 -2.6378863106618 1.3386915096167 -2.6378863107198 -8.9882273594891 -12.713654512075 -13.880941886419 -13.434870705401 -11.974720058007 -9.8302061604303 -7.2120641963384 -4.2930877391974 -1.2429296188874 1.7620666173684 4.5429612278616 6.9299778815519 8.7774983832024 9.9787797508481 10.477760280567 10.276356018202 9.4366700791064 8.0782343268086 6.370530467773 4.5206238892473 2.7552492068548 1.2969509209374 0.33564446626674 2.6645352591004e-15 +AlphaY 0 31.0062766803 30.76178292755 30.032157481834 28.828906972288 27.171007378236 25.084604766654 22.602602953087 19.764144588808 16.613993857837 13.201830519009 9.5814664265042 5.8099968847632 1.9469002214257 -1.9469002214256 -5.8099968847632 -9.5814664265043 -13.201830519009 -16.613993857837 -19.764144588808 -22.602602953087 -25.084604766654 -27.171007378235 -28.828906972288 -30.032157481834 -30.76178292755 -31.006276680299 -30.761782927549 -30.032157481834 -28.828906972288 -27.171007378235 -25.084604766654 -22.602602953087 -19.764144588808 -16.613993857837 -13.201830519009 -9.5814664265042 -5.8099968847632 -1.9469002214256 1.9469002214257 5.8099968847633 9.5814664265044 13.201830519009 16.613993857837 19.764144588809 22.602602953087 25.084604766654 27.171007378235 28.82890697229 30.032157481834 30.76178292755 31.0062766803 +AlphaZ 0 18.25134055375 17.944695856758 17.036319205476 15.559632185181 13.567162537762 11.128394808919 8.3296870847025 5.275903653186 2.0918211143268 -1.0790998064265 -4.0802813594074 -6.7522729165935 -8.9465755101902 -10.540891975189 -11.453210474438 -11.652365890076 -11.163511026668 -10.067997605985 -8.498170663356 -6.6282162132437 -4.6623371063931 -2.8211959847534 -1.3260311745656 -0.36972290467723 -0.017408758650956 5.9863225487788e-13 -0.01740875865186 -0.36972290467725 -1.3260311745656 -2.8211959847534 -4.6623371063929 -6.6282162132438 -8.498170663356 -10.067997605985 -11.163511026668 -11.652365890076 -11.453210474438 -10.540891975188 -8.9465755101903 -6.7522729165935 -4.0802813594073 -1.0790998064265 2.0918211143269 5.2759036531862 8.3296870847026 11.12839480892 13.567162537763 15.55963218518 17.036319205476 17.944695856758 18.25134055375 +PartSeries /backhoe/rod3 +X 5.9063578438609 5.8060215692293 5.807431421097 5.8100482502025 5.809160398539 5.7973398135138 5.7650847842902 5.7017154476496 5.5964864719596 5.4398393226344 5.2246699409476 4.9474507865598 4.6090344706885 4.2149908454083 3.7753921507515 3.3040513672884 2.8173166552128 2.3326046081962 1.8668956181994 1.4354054544392 1.0505920781467 0.72157246022683 0.4539351411459 0.24986787866977 0.10851292649791 0.026611410648597 -7.5026697606665e-15 0.026611410648614 0.10851292649791 0.24986787866977 0.45393514114591 0.72157246022684 1.0505920781467 1.4354054544392 1.8668956181994 2.3326046081962 2.8173166552128 3.3040513672884 3.7753921507515 4.2149908454083 4.6090344706885 4.9474507865598 5.2246699409476 5.4398393226344 5.5964864719596 5.7017154476496 5.7650847842902 5.7973398135132 5.8091603985396 5.8100482502025 5.807431421097 5.8060215692293 +Y 1.1183589773392 1.1103846967472 1.1200775947468 1.148864056164 1.1958742923964 1.2596820405249 1.3383400537122 1.4294284748471 1.5301127190697 1.6372076902317 1.7472472258036 1.8565599316399 1.9613538892587 2.0578129793225 2.1422072057671 2.2110189644931 2.2610871480406 2.2897717573006 2.2951439251071 2.2762112119534 2.233198740723 2.1679306308884 2.0844103717902 1.9898117677439 1.8962245388944 1.8228963308939 1.7941344918084 1.8228963308959 1.8962245388944 1.9898117677439 2.0844103717902 2.1679306308884 2.233198740723 2.2762112119534 2.2951439251071 2.2897717573006 2.2610871480406 2.2110189644931 2.1422072057671 2.0578129793225 1.9613538892587 1.8565599316399 1.7472472258036 1.6372076902317 1.5301127190697 1.4294284748471 1.3383400537122 1.2596820405251 1.1958742923962 1.148864056164 1.1200775947468 1.1103846967472 +Z -4.2820915641041e-15 -4.359663230616e-15 -0.035966458165026 -0.14339045952342 -0.32072032320575 -0.56498142279859 -0.87129379438839 -1.2323807493951 -1.6382153465485 -2.0759449126787 -2.5301978924226 -2.9838142396239 -3.4189589290481 -3.8184935895992 -4.167413923802 -4.4541297397211 -4.6713817893629 -4.816654545898 -4.8920432007181 -4.9036454361576 -4.8606545372345 -4.7744244685419 -4.6578810564924 -4.5258204130227 -4.3968430034958 -4.2968907767154 -4.2578786568271 -4.2968907767187 -4.3968430034958 -4.5258204130227 -4.6578810564924 -4.7744244685419 -4.8606545372345 -4.9036454361576 -4.8920432007181 -4.816654545898 -4.6713817893629 -4.4541297397211 -4.167413923802 -3.8184935895992 -3.4189589290481 -2.9838142396239 -2.5301978924226 -2.0759449126787 -1.6382153465485 -1.2323807493951 -0.87129379438839 -0.56498142279735 -0.32072032320692 -0.14339045952351 -0.035966458165026 -4.4343793508865e-15 +Bryantx -3.1415695667033e-16 1.5707963267949 1.6474487863264 1.8836215065684 2.2359399545735 2.5579769106107 2.7656955892239 2.8814663427857 2.9423425756065 2.9716950849239 2.9822606989627 2.9808886291222 2.9712729771193 2.9553624278376 2.9340963348277 2.9078087558171 2.8764692904672 2.8398477289532 2.7976517684464 2.7496699551018 2.6959461086653 2.6370169546936 2.5742733149031 2.5105829245581 2.4514318348727 2.406545880267 2.38915066313 2.4065458802686 2.4514318348727 2.5105829245581 2.5742733149031 2.6370169546936 2.6959461086653 2.7496699551018 2.7976517684464 2.8398477289532 2.8764692904672 2.9078087558171 2.9340963348277 2.9553624278376 2.9712729771193 2.9808886291222 2.9822606989627 2.9716950849239 2.9423425756065 2.8814663427857 2.7656955892239 2.5579769105602 2.2359399546189 1.8836215065735 1.6474487863264 1.5707963267949 +Bryanty 1.5707963267949 1.4887492973703 1.4900972311848 1.4907729351803 1.4815783558063 1.4545367195826 1.4097265934488 1.3507511947854 1.2805964916753 1.2013784901918 1.1147841624832 1.0223468889659 0.92557843574596 0.82602807643486 0.72530582537403 0.62508640582612 0.52710078768964 0.43311693327333 0.34490791549061 0.264202829024 0.19261407535377 0.13153477519913 0.08200407074762 0.044548364175426 0.019029324473589 0.0045940635347737 9.8254737679307e-15 0.0045940635347909 0.019029324473589 0.044548364175426 0.08200407074762 0.13153477519914 0.19261407535377 0.264202829024 0.34490791549061 0.43311693327333 0.52710078768964 0.62508640582612 0.72530582537403 0.82602807643486 0.92557843574596 1.0223468889659 1.1147841624832 1.2013784901918 1.2805964916753 1.3507511947854 1.4097265934488 1.4545367195788 1.4815783558111 1.4907729351815 1.4900972311848 1.4887492973703 +Bryantz 0.0 -1.5707963267949 -1.6476980750234 -1.8845612760037 -2.2378761222029 -2.5610874004482 -2.770123239716 -2.8874689750823 -2.9504682480684 -2.9829587201301 -2.9983076614081 -3.0041378705162 -3.0050364589817 -3.0039387013263 -3.002834399059 -3.0031335529047 -3.0058524054825 -3.0116963114301 -3.0210762665708 -3.0340786288789 -3.0504029796264 -3.0692869830497 -3.0894460920462 -3.1090650816661 -3.1258841598455 -3.1374394406023 3.1415926535898 -3.1374394406024 -3.1258841598455 -3.1090650816661 -3.0894460920462 -3.0692869830497 -3.0504029796264 -3.0340786288789 -3.0210762665708 -3.0116963114301 -3.0058524054825 -3.0031335529047 -3.002834399059 -3.0039387013263 -3.0050364589817 -3.0041378705162 -2.9983076614081 -2.9829587201301 -2.9504682480684 -2.8874689750823 -2.7701232397161 -2.561087400398 -2.2378761222481 -1.8845612760088 -1.6476980750235 -1.5707963267949 +VX 3.6575913640026e-17 7.5312368707301e-17 0.12744081642232 0.094660265917004 -0.2458820155864 -1.0161076032825 -2.2993305432189 -4.1282060740262 -6.4754220361392 -9.2494497470048 -12.297572723006 -15.417529288782 -18.377507367906 -20.942272503768 -22.901461581421 -24.095132182367 -24.431920433772 -23.896654446101 -22.546609821255 -20.498106361766 -17.90711095358 -14.94839889288 -11.797397885845 -8.6169553204743 -5.5467813059462 -2.6808234426809 1.7375659004719e-14 2.6808234426826 5.5467813059462 8.6169553204743 11.797397885845 14.94839889288 17.90711095358 20.498106361766 22.546609821255 23.896654446101 24.431920433772 24.095132182367 22.90146158142 20.942272503768 18.377507367906 15.417529288782 12.297572723006 9.2494497470047 6.4754220361392 4.1282060740262 2.2993305432189 1.0161076032808 0.24588201558795 -0.094660265916935 -0.12744081642232 3.0514011379695e-15 +VY 4.7107567931062e-16 4.7348197191681e-16 0.96684882990737 1.9045315791362 2.7845767679678 3.5799302211597 4.2656569654022 4.8195099619235 5.2223142830268 5.4582352682356 5.5150530874002 5.3845381910675 5.0629648631012 4.551755827986 3.858233652824 2.9964630164915 1.9881980662707 0.86400343997536 -0.3352865138621 -1.5564160833279 -2.7300901807701 -3.7641379457526 -4.5295271469747 -4.8318353500556 -4.3666434755739 -2.7488067957203 1.9822851286547e-14 2.7488067957041 4.3666434755739 4.8318353500554 4.5295271469747 3.7641379457528 2.7300901807701 1.5564160833279 0.33528651386228 -0.86400343997546 -1.9881980662708 -2.9964630164915 -3.858233652824 -4.5517558279861 -5.0629648631013 -5.3845381910676 -5.5150530874002 -5.4582352682356 -5.2223142830268 -4.8195099619234 -4.2656569654022 -3.5799302211571 -2.7845767679696 -1.9045315791363 -0.96684882990734 1.9183879789123e-14 +VZ -1.7846621712082e-15 -1.7543446119832e-15 -3.5927926834412 -7.1369760811108 -10.571639248049 -13.814231858035 -16.756678121752 -19.26853541196 -21.207568287927 -22.436678636072 -22.844675801966 -22.36716703043 -21.003256730642 -18.824081324396 -15.970585651275 -12.640153003809 -9.064208645 -5.4810551467915 -2.1094122716023 0.87175559663516 3.3321653835332 5.1832796273909 6.3492859851185 6.7052092508869 5.9779119046444 3.73269813205 -2.6859563027997e-14 -3.7326981320282 -5.9779119046444 -6.7052092508867 -6.3492859851185 -5.1832796273909 -3.3321653835333 -0.87175559663512 2.1094122716023 5.4810551467915 9.0642086450001 12.640153003809 15.970585651275 18.824081324396 21.003256730642 22.36716703043 22.844675801966 22.436678636072 21.207568287927 19.26853541196 16.756678121752 13.814231858035 10.57163924805 7.1369760811108 3.5927926834411 -7.1080079371841e-14 +OmegaX 3.3288013900032e-30 2.1131303349817e-30 9.587963294791e-4 0.0066265324481479 0.017432591570346 0.02833796586295 0.030418567036728 0.013235117566059 -0.033183994142559 -0.11695314576528 -0.24343110978864 -0.41472967958442 -0.62959635709438 -0.88364412853663 -1.1698691680577 -1.4793484042888 -1.8019591318169 -2.1269165627575 -2.4428686020188 -2.7371747962345 -2.9937195182948 -3.1879235763627 -3.2760459551353 -3.1731765638012 -2.71680763049 -1.6688689181042 1.1959313769865e-14 1.6688689180945 2.71680763049 3.1731765638011 3.2760459551352 3.1879235763627 2.9937195182948 2.7371747962345 2.4428686020189 2.1269165627575 1.8019591318168 1.4793484042888 1.1698691680577 0.8836441285366 0.62959635709436 0.4147296795844 0.24343110978864 0.11695314576528 0.033183994142552 -0.013235117566052 -0.030418567036728 -0.028337965865696 -0.017432591569305 -0.0066265324480821 -9.5879632947875e-4 -2.1447155860696e-29 +OmegaY 3.0215950648218e-16 3.0215950648218e-16 0.61849471679451 1.2272354024344 1.8166218526636 2.3773590910824 2.9006039564606 3.3781045647134 3.8023304459988 4.1665913047487 4.4651425296217 4.6932757894557 4.8473932864629 4.9250644956502 4.9250644956502 4.8473932864629 4.6932757894557 4.4651425296217 4.1665913047487 3.8023304459988 3.3781045647134 2.9006039564606 2.3773590910776 1.8166218526629 1.2272354024343 0.6184947167945 -4.0808253135309e-15 -0.61849471679461 -1.2272354024343 -1.8166218526629 -2.3773590910776 -2.9006039564606 -3.3781045647134 -3.8023304459988 -4.1665913047487 -4.4651425296217 -4.6932757894557 -4.8473932864629 -4.9250644956502 -4.9250644956502 -4.8473932864629 -4.6932757894557 -4.4651425296217 -4.1665913047487 -3.8023304459988 -3.3781045647134 -2.9006039564606 -2.3773590910776 -1.8166218526665 -1.2272354024348 -0.6184947167945 1.2242475940591e-14 +OmegaZ -1.9486966854502e-17 7.9093546810518e-17 0.15481490851013 0.26850094060116 0.31575398646969 0.29077914971963 0.20127036266393 0.061233408842929 -0.11336346878672 -0.30646589769996 -0.50266708616472 -0.68766166882032 -0.84874705215479 -0.97539823623787 -1.0598214996753 -1.097373314993 -1.0867639818352 -1.0300210090346 -0.93224456568094 -0.80123159054238 -0.64706882293742 -0.48180003122212 -0.31926800298431 -0.17518920864828 -0.067050096280886 -0.010335602743033 2.9582283945788e-29 0.010335602742975 0.067050096280887 0.17518920864826 0.31926800298431 0.48180003122209 0.64706882293744 0.80123159054238 0.93224456568097 1.0300210090346 1.0867639818352 1.0973733149929 1.0598214996753 0.97539823623785 0.84874705215478 0.68766166882031 0.50266708616473 0.30646589769995 0.11336346878671 -0.061233408842915 -0.20127036266391 -0.2907791497529 -0.31575398644346 -0.26850094059677 -0.15481490851003 3.2046016197106e-15 +AX 0 7.7282233108392 3.670152995912 -8.1885100639792 -26.892672020602 -50.834434265921 -77.768032226223 -104.89574104146 -129.06076658961 -147.05964178426 -156.0502113692 -153.99141548552 -140.02191728507 -114.67969993971 -79.890829564906 -38.708419932245 5.1526928972909 47.884980830263 86.133416883192 117.39932156582 140.22832354283 154.17010007841 159.56550493471 157.30055291542 148.87908745459 137.78353009965 132.02096370471 137.78353009971 148.87908745459 157.30055291542 159.56550493471 154.17010007841 140.22832354283 117.39932156582 86.133416883192 47.884980830263 5.1526928972904 -38.708419932246 -79.890829564907 -114.67969993971 -140.02191728508 -153.99141548552 -156.0502113692 -147.05964178426 -129.06076658961 -104.89574104146 -77.768032226223 -50.834434265904 -26.892672020624 -8.1885100639805 3.6701529959122 7.7282233108392 +AY 0 48.586632918836 47.854625732382 45.675778940102 42.102686568223 37.2243859091 31.162586471432 24.062715082738 16.085544454935 7.4044133261018 -1.7916403773193 -11.291437461556 -20.854667772874 -30.205914977007 -39.029878899881 -46.966816368488 -53.606151115838 -58.474735948846 -61.013291104444 -60.527476711233 -56.082586724243 -46.269532340422 -28.691185957952 0.97488294652136 49.090151266908 113.56729303711 150.61483017792 113.56729303661 49.090151266907 0.97488294652314 -28.691185957952 -46.269532340424 -56.082586724243 -60.527476711233 -61.013291104446 -58.474735948846 -53.606151115837 -46.966816368487 -39.02987889988 -30.205914977007 -20.854667772875 -11.291437461556 -1.7916403773193 7.4044133261022 16.085544454936 24.062715082738 31.162586471433 37.224385909076 42.102686568249 45.675778940106 47.854625732382 48.586632918836 +AZ 0 -180.02311118731 -178.86169369428 -175.05714084754 -167.72469109837 -155.63135458519 -137.51731304 -112.46870799262 -80.274331819233 -41.692172998066 1.4434736886894 46.322305553472 89.474120682477 127.25747786047 156.42803824109 174.66336995333 180.92247953035 175.55280771572 160.11215935042 136.92405376088 108.4020126816 76.127379530442 39.520394359967 -6.1270883724103 -70.639626113753 -155.10505845365 -204.08005213964 -155.105058453 -70.639626113752 -6.127088372413 39.520394359967 76.127379530448 108.4020126816 136.92405376088 160.11215935042 175.55280771572 180.92247953035 174.66336995333 156.42803824108 127.25747786047 89.474120682476 46.322305553471 1.4434736886881 -41.692172998067 -80.274331819234 -112.46870799262 -137.51731304 -155.63135458517 -167.72469109838 -175.05714084754 -178.86169369428 -180.02311118731 +AlphaX 0 -4.0079051188968e-14 0.1391542854703 0.43208190665207 0.60491704787655 0.40914629083905 -0.28974051614062 -1.5128415994836 -3.1974281834088 -5.2245501055048 -7.4409399003825 -9.6782813787029 -11.771383615823 -13.574428089597 -14.973093061655 -15.889996589582 -16.281082363896 -16.120590628745 -15.37095616195 -13.929208139619 -11.528680206237 -7.5445927243789 -0.59294505385479 12.206796036535 35.603526121878 70.091745571697 90.867352352845 70.091745571408 35.603526121877 12.206796036536 -0.59294505385451 -7.54459272438 -11.528680206237 -13.92920813962 -15.370956161951 -16.120590628745 -16.281082363896 -15.889996589582 -14.973093061654 -13.574428089597 -11.771383615824 -9.678281378703 -7.4409399003826 -5.2245501055048 -3.1974281834087 -1.5128415994836 -0.28974051614071 0.40914629091547 0.60491704782498 0.43208190664579 0.13915428547024 -3.7192471324943e-14 +AlphaY 0 31.0062766803 30.76178292755 30.032157481834 28.828906972299 27.171007378287 25.084604766654 22.602602953087 19.764144588808 16.613993857837 13.201830519009 9.5814664265043 5.8099968847633 1.9469002214256 -1.9469002214257 -5.8099968847632 -9.5814664265043 -13.201830519009 -16.613993857837 -19.764144588808 -22.602602953087 -25.084604766654 -27.171007378235 -28.828906972288 -30.032157481834 -30.76178292755 -31.006276680304 -30.761782927554 -30.032157481834 -28.828906972288 -27.171007378235 -25.084604766654 -22.602602953087 -19.764144588809 -16.613993857837 -13.201830519009 -9.5814664265042 -5.8099968847632 -1.9469002214256 1.9469002214257 5.8099968847633 9.5814664265044 13.201830519009 16.613993857837 19.764144588809 22.602602953087 25.084604766654 27.171007378235 28.828906972345 30.032157481845 30.76178292755 31.0062766803 +AlphaZ 0 8.1162311409115 7.0074536633141 4.1478296824089 0.53547140500034 -2.9624424225726 -5.8682199928441 -8.0010238084898 -9.3243661360662 -9.8571421032918 -9.6433471498725 -8.7497640047638 -7.2705900953475 -5.3292215354113 -3.0742360630612 -0.67023261187785 1.7140566678198 3.9174136159281 5.7949043930873 7.2220475770824 8.0937221207396 8.3178776628053 7.8045219984345 6.4559624413501 4.2148789498021 1.4663168754465 -1.7763568394003e-14 1.4663168754386 4.2148789498021 6.4559624413501 7.8045219984345 8.3178776628055 8.0937221207397 7.2220475770824 5.7949043930874 3.917413615928 1.7140566678198 -0.67023261187771 -3.074236063061 -5.3292215354115 -7.2705900953479 -8.7497640047641 -9.6433471498725 -9.8571421032918 -9.3243661360662 -8.0010238084896 -5.868219992844 -2.9624424225911 0.53547140486705 4.1478296823379 7.00745366331 8.1162311409115 +RevoluteJointSeries /backhoe/rev1 +FXonI 0 2394.2615093164 3628.0027713008 7195.0684207471 12714.313973856 19596.854411339 27077.952497284 34255.718366089 40160.337452436 43860.609846572 44596.027305305 41909.366873793 35748.067101734 26504.67707128 14978.450381575 2259.3211432263 -10443.664981638 -21991.907398098 -31482.531306182 -38354.718235978 -42419.408877394 -43815.474350904 -42915.108563715 -40222.238485148 -36360.535568078 -32406.046945153 -30540.509686658 -32406.046945171 -36360.535568078 -40222.238485148 -42915.108563715 -43815.474350904 -42419.408877394 -38354.718235978 -31482.531306182 -21991.907398098 -10443.664981638 2259.3211432264 14978.450381575 26504.677071281 35748.067101735 41909.366873793 44596.027305305 43860.609846572 40160.337452436 34255.718366089 27077.952497284 19596.85441132 12714.313973881 7195.0684207534 3628.002771301 2394.2615093164 +FYonI 0 -13319.985608974 -13307.82965841 -13209.890260823 -12904.870512746 -12311.770083111 -11420.54917332 -10266.801983568 -8901.0203753723 -7372.4200436395 -5725.0116344548 -3999.5287545394 -2237.0003989736 -482.07447396234 1214.4460426649 2793.7351874988 4187.3092090816 5314.9693054692 6081.3325290993 6369.1813788615 6025.8806259575 4834.307563238 2450.6654614597 -1704.9434195761 -8432.0491479383 -17318.799098498 -22371.476892896 -17318.799098433 -8432.0491479382 -1704.9434195763 2450.6654614596 4834.3075632382 6025.8806259575 6369.1813788615 6081.3325290996 5314.9693054692 4187.3092090815 2793.7351874986 1214.4460426646 -482.07447396226 -2237.0003989733 -3999.5287545394 -5725.0116344549 -7372.4200436396 -8901.0203753724 -10266.801983568 -11420.54917332 -12311.77008311 -12904.87051277 -13209.890260834 -13307.829658411 -13319.985608974 +FZonI 0 53702.915964373 53181.780357702 51526.521784042 48492.517933643 43762.257677037 37050.337162766 28214.198990296 17352.172344898 4867.5168185663 -8521.7909387033 -21839.743490254 -33973.389078996 -43839.076171389 -50559.892358317 -53613.620968023 -52915.129728289 -48812.106780258 -41993.132521027 -33323.949709904 -23632.402837765 -13446.120371646 -2644.0381500284 10041.560906743 27259.797523639 49414.824005614 62199.257352632 49414.824005443 27259.797523639 10041.560906744 -2644.0381500284 -13446.120371648 -23632.402837765 -33323.949709904 -41993.132521028 -48812.106780258 -52915.129728288 -53613.620968023 -50559.892358316 -43839.076171389 -33973.389078996 -21839.743490254 -8521.7909387029 4867.5168185666 17352.172344899 28214.198990296 37050.337162766 43762.257677042 48492.517933644 51526.521784043 53181.780357702 53702.915964373 +TXonI 0 35986.845945023 35557.655178427 34172.796974027 31613.600662726 27653.06259213 22097.649495553 14803.431925198 5738.3852016273 -4904.9106603277 -16592.712157356 -28391.940988449 -39022.800430331 -47043.662063631 -51144.115005958 -50476.236885804 -44927.260801883 -35243.659911975 -22958.860939525 -10140.503053123 964.09658429251 8262.277159404 9990.6913498296 4631.5347272489 -9061.9450237822 -29037.437837106 -40583.006834971 -29037.437836928 -9061.945023783 4631.5347272485 9990.6913498291 8262.2771594036 964.09658429245 -10140.503053123 -22958.860939524 -35243.659911975 -44927.260801883 -50476.236885805 -51144.115005959 -47043.662063631 -39022.800430329 -28391.940988448 -16592.712157355 -4904.9106603277 5738.3852016274 14803.431925198 22097.649495553 27653.062592462 31613.60066239 34172.796973959 35557.655178425 35986.845945024 +TYonI 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +TZonI 0 -57786.222629402 -58950.133648217 -61879.966782522 -65408.604973595 -68580.683932988 -70883.41805781 -72004.996348619 -71560.813550345 -68987.423236262 -63611.985190083 -54844.579288104 -42422.875792221 -26627.193571387 -8384.9322915506 10791.698341788 29041.670437557 44513.149995345 55746.313550608 61971.261280557 63238.298735824 60354.269081765 54663.840804825 47768.170011418 41294.803649249 36742.535808158 35136.819646789 36742.535808229 41294.803649249 47768.170011419 54663.840804825 60354.269081765 63238.298735824 61971.261280557 55746.313550608 44513.149995345 29041.670437556 10791.698341787 -8384.932291552 -26627.193571387 -42422.87579222 -54844.579288104 -63611.985190083 -68987.423236262 -71560.813550346 -72004.99634862 -70883.418057811 -68580.683933106 -65408.604973725 -61879.966782609 -58950.133648223 -57786.222629402 +RevoluteJointSeries /backhoe/rev10 +FXonI 0 24.928327211343 865.55264401478 3566.3143244453 8373.2098844233 15163.483341646 23347.188653224 32009.991327633 40084.876190183 46498.350829288 50308.361711375 50840.404313629 47804.977689898 41368.127310775 32149.627647266 21137.650322735 9529.7472710637 -1468.9744240416 -10845.538782178 -17929.726350662 -22460.133682557 -24552.149469035 -24581.815908663 -23031.072697287 -20400.244500898 -17470.361859638 -16015.514472293 -17470.361859651 -20400.244500898 -23031.072697287 -24581.815908663 -24552.149469035 -22460.133682557 -17929.726350662 -10845.538782178 -1468.9744240415 9529.7472710637 21137.650322735 32149.627647266 41368.127310775 47804.977689898 50840.40431363 50308.361711375 46498.350829288 40084.876190183 32009.991327633 23347.188653224 15163.483341397 8373.209884587 3566.3143244571 865.55264401425 24.92832721133 +FYonI 0 -3157.8767464371 -3241.0723498065 -3444.7913708874 -3663.6824104179 -3797.5557400323 -3794.7125316678 -3658.3783023745 -3433.1316281805 -3186.9497320261 -2993.5268231831 -2914.8209880905 -2984.3449822799 -3193.6152800946 -3485.4410416653 -3757.7524761964 -3880.3224902694 -3724.0882119998 -3198.9511792481 -2291.0074907098 -1084.0456194834 257.49966790397 1575.9189827168 2908.8641895143 4702.8560239083 7352.6155528383 9029.226942366 7352.6155528164 4702.8560239082 2908.8641895145 1575.9189827168 257.49966790369 -1084.0456194834 -2291.0074907098 -3198.951179248 -3724.0882119998 -3880.3224902695 -3757.7524761965 -3485.4410416654 -3193.6152800945 -2984.3449822798 -2914.8209880904 -2993.5268231831 -3186.9497320262 -3433.1316281805 -3658.3783023746 -3794.7125316678 -3797.5557400233 -3663.682410458 -3444.7913709016 -3241.0723498072 -3157.8767464371 +FZonI 0 44936.712878942 44419.152558968 42809.015533769 39922.621782449 35467.448817275 29131.906564252 20710.775840467 10219.956253284 -2023.3354428398 -15370.285820902 -28872.940257821 -41384.189895744 -51715.668177498 -58827.410627728 -62010.303361875 -61018.291674063 -56114.301960676 -48009.800895884 -37696.356883381 -26178.57065286 -14109.494031189 -1294.5889527284 13969.972871307 35116.298634384 62566.6723613 78388.326952856 62566.672361144 35116.298634384 13969.972871308 -1294.5889527282 -14109.494031191 -26178.570652859 -37696.356883381 -48009.800895885 -56114.301960676 -61018.291674062 -62010.303361875 -58827.410627728 -51715.668177497 -41384.189895744 -28872.940257821 -15370.285820902 -2023.3354428395 10219.956253284 20710.775840467 29131.906564252 35467.448817377 39922.621782375 42809.015533753 44419.152558967 44936.712878942 +TXonI 0 8459.3648700307 8327.1650041865 7931.262948431 7277.7747915517 6387.4286801458 5304.5299102675 4101.7057958279 2877.9694155773 1748.7164021225 828.07762523021 206.68766300313 -69.572064360244 -13.198111557581 304.38378717169 767.22093563894 1241.2331826456 1605.3961260384 1778.636278903 1734.7858067471 1502.0853598884 1148.8333112857 760.76191587787 417.13037437983 171.20117799213 38.47001724254 -1.6598278307356e-11 38.470017242553 171.20117799213 417.13037437983 760.76191587787 1148.8333112857 1502.0853598884 1734.7858067471 1778.636278903 1605.3961260384 1241.2331826456 767.22093563893 304.38378717169 -13.198111557583 -69.572064360242 206.68766300314 828.07762523023 1748.7164021225 2877.9694155774 4101.7057958279 5304.5299102675 6387.4286801919 7277.7747915093 7931.2629484201 8327.1650041861 8459.3648700308 +TYonI 0 -7502.881689643 -7521.9194956122 -7557.3393370056 -7551.2460448095 -7426.1954232191 -7102.7729564434 -6513.8718621473 -5615.5633129633 -4395.1654798603 -2876.3284611356 -1120.3554722091 777.02067282079 2693.711503395 4493.74408519 6042.8229249269 7224.9254392261 7957.4260169375 8202.2676853245 7971.2855593913 7324.8971857896 6364.8310953809 5223.0744782435 4050.488854837 3009.2237928938 2270.4298380773 1998.123777301 2270.4298380892 3009.2237928938 4050.4888548371 5223.0744782435 6364.831095381 7324.8971857896 7971.2855593914 8202.2676853246 7957.4260169375 7224.9254392261 6042.8229249268 4493.74408519 2693.7115033949 777.02067282076 -1120.3554722091 -2876.3284611357 -4395.1654798603 -5615.5633129633 -6513.8718621473 -7102.7729564434 -7426.1954230726 -7551.2460449489 -7557.3393370363 -7521.9194956133 -7502.881689643 +TZonI 0 -4.433786671143e-12 -51.571617474177 -195.74147921008 -401.80165862757 -622.48870341138 -801.68881567154 -886.55130352817 -842.44528904314 -667.34304147533 -401.02059762645 -124.65360821753 51.608212559371 11.956586912242 -335.98979448702 -1034.2761677978 -2058.0839129444 -3315.0232668149 -4660.7670133963 -5926.3913744078 -6949.5270064612 -7601.4789560483 -7806.2661276305 -7555.4215824398 -6936.9127341659 -6211.6760532674 -5864.1613086033 -6211.6760532714 -6936.9127341659 -7555.4215824398 -7806.2661276305 -7601.4789560484 -6949.5270064611 -5926.3913744078 -4660.7670133963 -3315.0232668148 -2058.0839129444 -1034.2761677977 -335.98979448701 11.956586912243 51.608212559369 -124.65360821753 -401.02059762646 -667.34304147533 -842.44528904315 -886.55130352816 -801.68881567153 -622.48870341179 -401.80165862966 -195.74147921021 -51.57161747418 -3.0127011996228e-12 +RevoluteJointSeries /backhoe/rev2 +FXonI 0 72784.962811238 73004.411150769 73066.471577902 71905.796907329 69114.71102521 65222.017551207 61274.617887685 58323.869089408 57082.283151399 57765.945702725 60084.430291065 63344.440034992 66631.185945464 69020.439098597 69768.364721799 68435.437906315 64924.441435315 59441.441627905 52410.616730011 44380.890104301 35954.552044871 27752.405676187 20414.394959637 14613.987010014 10986.707899429 9803.3672262149 10986.7078995 14613.987010014 20414.394959637 27752.405676186 35954.552044872 44380.890104301 52410.616730011 59441.441627906 64924.441435315 68435.437906315 69768.364721799 69020.439098597 66631.185945464 63344.44003499 60084.430291065 57765.945702725 57082.2831514 58323.869089408 61274.617887686 65222.017551208 69114.711025304 71905.796907526 73066.471578015 73004.411150776 72784.962811238 +FYonI 0 23966.597991277 24431.560750092 25569.208694205 26842.389477721 27822.945947294 28342.53993776 28421.982021719 28144.079928865 27552.236376681 26590.08861193 25082.213997775 22756.122182496 19303.687585151 14474.0549006 8182.5215894782 613.9899839396 -7702.1344992405 -15864.128018719 -22622.55065606 -26436.493615132 -25492.277646702 -17534.816221103 663.29434466724 33402.491117429 78781.160916199 105104.64603307 78781.160915811 33402.49111743 663.2943446683 -17534.816221103 -25492.277646703 -26436.493615132 -22622.550656061 -15864.12801872 -7702.1344992402 613.98998394016 8182.5215894797 14474.054900602 19303.687585151 22756.122182494 25082.213997775 26590.08861193 27552.236376682 28144.079928866 28421.98202172 28342.53993776 27822.945947385 26842.389477774 25569.208694249 24431.560750095 23966.597991277 +FZonI 0 -138284.69493056 -137336.93291371 -134474.54676405 -129592.96682104 -122490.98235643 -113012.44591006 -101239.58676156 -87601.898568581 -72854.729216393 -57949.289771336 -43844.497157658 -31320.025356875 -20844.715969415 -12534.65494474 -6204.7357432843 -1486.5718071237 2033.9305353672 4707.1182504078 6770.6719563108 8372.421334328 9663.9525557048 10973.878636181 13088.116041822 17475.407353977 24853.591136165 29594.197072126 24853.591136113 17475.407353976 13088.116041823 10973.878636181 9663.9525557039 8372.4213343282 6770.6719563107 4707.1182504083 2033.930535367 -1486.571807124 -6204.7357432851 -12534.654944741 -20844.715969415 -31320.025356874 -43844.497157658 -57949.289771336 -72854.729216393 -87601.898568581 -101239.58676156 -113012.44591006 -122490.98235638 -129592.96682112 -134474.54676407 -137336.93291371 -138284.69493056 +TXonI 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +TYonI 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +TZonI 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +RevoluteJointSeries /backhoe/rev3 +FXonI 0 -70390.701301922 -69393.599517406 -65938.801408431 -59338.012044988 -49765.676394792 -38506.092187469 -27496.773355468 -18746.367835265 -13885.966194502 -13880.863829977 -18889.37307582 -28266.371533192 -40705.015338569 -54487.265255657 -67789.025394497 -78974.230062373 -86820.591196121 -90643.999711102 -90318.138975118 -86209.851312489 -79063.656559618 -69872.673651096 -59778.538932611 -50074.946882456 -42469.990126474 -39413.688612464 -42469.990126563 -50074.946882456 -59778.538932611 -69872.673651095 -79063.656559619 -86209.851312489 -90318.138975119 -90643.999711102 -86820.591196121 -78974.230062373 -67789.025394497 -54487.265255658 -40705.015338568 -28266.371533191 -18889.373075819 -13880.863829976 -13885.966194502 -18746.367835266 -27496.773355469 -38506.09218747 -49765.676394904 -59338.012045159 -65938.801408538 -69393.599517413 -70390.701301922 +FYonI 0 -36305.58360025 -36758.390408502 -37798.098955028 -38766.259990467 -39153.716030405 -38782.08911108 -37707.784005287 -36064.100304238 -33943.656420321 -31334.100246385 -28100.742752315 -24012.122581469 -18804.762059114 -12278.608857935 -4407.7864019794 4554.319225142 13998.10380471 22926.460547818 29972.732034922 33443.37424109 31307.58520994 20966.481682563 -1387.2377642433 -40853.540265367 -95118.960014697 -126495.12292596 -95118.960014244 -40853.540265368 -1387.2377642446 20966.481682562 31307.585209941 33443.37424109 29972.732034922 22926.46054782 13998.103804709 4554.3192251414 -4407.7864019811 -12278.608857937 -18804.762059113 -24012.122581468 -28100.742752314 -31334.100246385 -33943.656420321 -36064.100304238 -37707.784005287 -38782.08911108 -39153.716030495 -38766.259990543 -37798.098955084 -36758.390408505 -36305.58360025 +FZonI 0 191057.42259452 189595.94855331 185101.49285246 177227.39024251 165458.39944466 149356.41323667 128863.33808265 104506.87492261 77442.272811973 49331.74119534 22099.880841824 -2373.3819061962 -22549.083663339 -37446.730949191 -46738.886624804 -50714.248262617 -50135.091883069 -46035.95788176 -39511.785467921 -31526.950338221 -22748.045793806 -13370.097005289 -2900.0260235649 9851.7884209386 24578.424007387 32605.060280506 24578.424007268 9851.7884209389 -2900.0260235646 -13370.097005288 -22748.045793806 -31526.950338221 -39511.785467921 -46035.957881761 -50135.091883069 -50714.248262617 -46738.886624803 -37446.73094919 -22549.083663339 -2373.3819061968 22099.880841824 49331.741195341 77442.272811974 104506.87492261 128863.33808265 149356.41323667 165458.39944462 177227.39024259 185101.49285247 189595.94855331 191057.42259452 +TXonI 0 94109.553727306 93443.85037344 91368.778687581 87670.34131331 82054.875607683 74235.599064962 64040.917236285 51528.224605866 37076.764374478 21427.996702537 5646.8415632525 -9006.2192941681 -21276.647157273 -30148.695888383 -35050.053598404 -35969.760843198 -33452.592604949 -28469.058730505 -22197.408502652 -15778.623858163 -10108.896223487 -5717.0891812396 -2745.891530213 -1026.8700068424 -221.6814008629 -3.6379788070914e-12 -221.68140086354 -1026.8700068424 -2745.891530213 -5717.0891812396 -10108.896223487 -15778.623858163 -22197.408502652 -28469.058730506 -33452.592604949 -35969.760843198 -35050.053598404 -30148.695888383 -21276.647157273 -9006.219294168 5646.8415632527 21427.996702538 37076.764374479 51528.224605867 64040.917236285 74235.599064962 82054.875607998 87670.341313014 91368.77868752 93443.850373438 94109.553727306 +TYonI 0 -240039.36778618 -237737.62697818 -230757.97374565 -218923.48196171 -202064.68164226 -180140.76001263 -153340.10957533 -122148.39314497 -87378.634272371 -50160.00538489 -11885.236012636 25879.118892099 61510.744282503 93464.938679495 120407.06352508 141326.48654539 155615.79902152 163103.74317244 164038.34870783 159027.93061502 148961.78633354 134952.46266358 118381.29520519 101226.98210983 86950.354162926 81044.29134908 86950.354163072 101226.98210983 118381.29520519 134952.46266358 148961.78633354 159027.93061502 164038.34870784 163103.74317244 155615.79902152 141326.48654539 120407.06352508 93464.938679494 61510.744282502 25879.118892098 -11885.236012636 -50160.005384891 -87378.634272372 -122148.39314497 -153340.10957533 -180140.76001263 -202064.68164219 -218923.4819618 -230757.97374566 -237737.62697818 -240039.36778618 +TZonI 0 1.8548991315897e-11 -578.71442493934 -2254.9573769286 -4840.2278939701 -7996.6815573287 -11219.438951576 -13841.938325445 -15083.450795901 -14149.19004345 -10377.128643224 -3405.6177599795 6680.7688396744 19275.187956035 33279.217101913 47250.320517743 59641.320566418 69077.108772111 74600.777802317 75830.992951801 73001.159291802 66887.477196948 58663.714222148 49735.932467767 41607.819001836 35794.448453531 33651.344832443 35794.448453632 41607.819001835 49735.932467767 58663.714222147 66887.477196948 73001.159291802 75830.992951802 74600.777802318 69077.108772111 59641.320566417 47250.320517743 33279.217101913 19275.187956035 6680.7688396743 -3405.6177599796 -10377.128643224 -14149.19004345 -15083.450795901 -13841.938325444 -11219.438951576 -7996.6815573593 -4840.2278939537 -2254.957376927 -578.7144249393 1.8548991624013e-11 +RevoluteJointSeries /backhoe/rev4 +FXonI 0 -70390.701301922 -69393.599517406 -65938.801408431 -59338.012044988 -49765.676394792 -38506.092187469 -27496.773355468 -18746.367835265 -13885.966194502 -13880.863829977 -18889.37307582 -28266.371533192 -40705.015338569 -54487.265255657 -67789.025394497 -78974.230062373 -86820.591196121 -90643.999711102 -90318.138975118 -86209.851312489 -79063.656559618 -69872.673651096 -59778.538932611 -50074.946882456 -42469.990126474 -39413.688612464 -42469.990126563 -50074.946882456 -59778.538932611 -69872.673651095 -79063.656559619 -86209.851312489 -90318.138975119 -90643.999711102 -86820.591196121 -78974.230062373 -67789.025394497 -54487.265255658 -40705.015338568 -28266.371533191 -18889.373075819 -13880.863829976 -13885.966194502 -18746.367835266 -27496.773355469 -38506.09218747 -49765.676394904 -59338.012045159 -65938.801408538 -69393.599517413 -70390.701301922 +FYonI 0 -36305.58360025 -36758.390408502 -37798.098955028 -38766.259990467 -39153.716030405 -38782.08911108 -37707.784005287 -36064.100304238 -33943.656420321 -31334.100246385 -28100.742752315 -24012.122581469 -18804.762059114 -12278.608857935 -4407.7864019794 4554.319225142 13998.10380471 22926.460547818 29972.732034922 33443.37424109 31307.58520994 20966.481682563 -1387.2377642433 -40853.540265367 -95118.960014697 -126495.12292596 -95118.960014244 -40853.540265368 -1387.2377642446 20966.481682562 31307.585209941 33443.37424109 29972.732034922 22926.46054782 13998.103804709 4554.3192251414 -4407.7864019811 -12278.608857937 -18804.762059113 -24012.122581468 -28100.742752314 -31334.100246385 -33943.656420321 -36064.100304238 -37707.784005287 -38782.08911108 -39153.716030495 -38766.259990543 -37798.098955084 -36758.390408505 -36305.58360025 +FZonI 0 191057.42259452 189595.94855331 185101.49285246 177227.39024251 165458.39944466 149356.41323667 128863.33808265 104506.87492261 77442.272811973 49331.74119534 22099.880841824 -2373.3819061962 -22549.083663339 -37446.730949191 -46738.886624804 -50714.248262617 -50135.091883069 -46035.95788176 -39511.785467921 -31526.950338221 -22748.045793806 -13370.097005289 -2900.0260235649 9851.7884209386 24578.424007387 32605.060280506 24578.424007268 9851.7884209389 -2900.0260235646 -13370.097005288 -22748.045793806 -31526.950338221 -39511.785467921 -46035.957881761 -50135.091883069 -50714.248262617 -46738.886624803 -37446.73094919 -22549.083663339 -2373.3819061969 22099.880841824 49331.741195341 77442.272811974 104506.87492261 128863.33808265 149356.41323667 165458.39944462 177227.39024259 185101.49285247 189595.94855331 191057.42259452 +TXonI 0 -28501.490239794 -29106.675690237 -30765.356315186 -33019.581574806 -35151.901541305 -36267.170147282 -35428.546008211 -31848.766766104 -25109.531143656 -15351.060252216 -3358.560597578 9513.1042793676 21588.12491317 31238.467548645 37264.834352194 39166.948417846 37216.343486634 32318.146086755 25724.900544098 18710.156956743 12305.437297672 7160.2563873476 3527.6315382369 1334.3551993651 284.85288238967 -9.1858964879066e-11 284.85288239011 1334.3551993651 3527.6315382369 7160.2563873477 12305.437297672 18710.156956743 25724.900544098 32318.146086756 37216.343486634 39166.948417846 37264.834352194 31238.467548645 21588.124913169 9513.1042793674 -3358.5605975782 -15351.060252216 -25109.531143656 -31848.766766104 -35428.546008211 -36267.170147282 -35151.901541044 -33019.581575068 -30765.356315246 -29106.675690239 -28501.490239794 +TYonI 0 -2316.226705878 -2468.3172198605 -2933.8578940153 -3725.9078414476 -4821.336715028 -6107.5466656652 -7333.3433353605 -8083.6939698998 -7795.7253035363 -5825.279723275 -1560.4336549484 5436.5426757481 15289.861249109 27710.167809854 41965.756320794 56941.902984611 71283.038283089 83589.964844063 92629.281999955 97510.965467187 97805.617872867 93605.721324511 85590.950925871 75260.942130377 65590.165702814 61369.038912754 65590.165702915 75260.942130377 85590.950925871 93605.721324511 97805.617872868 97510.965467187 92629.281999955 83589.964844063 71283.038283089 56941.902984611 41965.756320794 27710.167809854 15289.861249109 5436.5426757479 -1560.4336549485 -5825.2797232751 -7795.7253035363 -8083.6939698998 -7333.3433353605 -6107.5466656652 -4821.3367150023 -3725.9078414691 -2933.8578940203 -2468.3172198606 -2316.226705878 +TZonI 0 3.4106051316485e-11 180.26283181459 759.28088536658 1822.9916456519 3425.7386983875 5481.1614176885 7657.6003275602 9322.8383104815 9582.268950579 7434.1959847447 2025.5524244762 -7056.7736096907 -19557.365511768 -34482.146336652 -50236.02495324 -64942.564849965 -76848.973635191 -84686.988004189 -87881.644004175 -86564.149107797 -81421.31825769 -73472.220066646 -63895.475122177 -54066.833435 -45994.620098268 -42681.0849843 -45994.620098339 -54066.833435 -63895.475122177 -73472.220066646 -81421.318257691 -86564.149107797 -87881.644004175 -84686.98800419 -76848.97363519 -64942.564849965 -50236.02495324 -34482.146336651 -19557.365511767 -7056.7736096905 2025.5524244763 7434.1959847448 9582.268950579 9322.8383104815 7657.6003275602 5481.1614176884 3425.7386983593 1822.9916456691 759.28088536826 180.2628318146 3.6834535421804e-11 +RevoluteJointSeries /backhoe/rev5 +FXonI 0 -31531.652523352 -30571.396814683 -27134.124406912 -20122.67558772 -8857.1917937169 6514.0001446496 25097.163417747 45455.914863042 65794.642799005 84147.253980897 98606.120307169 107583.42354237 110059.23956594 105755.61460127 95186.355124897 79562.801529745 60574.596174657 40097.095939569 19893.036937387 1374.5611251064 -14511.687521144 -27172.541731389 -35744.221822039 -37541.37189783 -28669.806990011 -19702.2390055 -28669.806989958 -37541.37189783 -35744.22182204 -27172.541731389 -14511.687521142 1374.5611251059 19893.036937387 40097.095939571 60574.596174657 79562.801529745 95186.355124896 105755.61460127 110059.23956594 107583.42354238 98606.120307169 84147.253980897 65794.642799004 45455.914863042 25097.163417746 6514.0001446486 -8857.1917939243 -20122.675587772 -27134.124406984 -30571.396814688 -31531.652523352 +FYonI 0 -255.11366658629 -412.08325886925 -932.25926518513 -1862.8723729369 -3091.06642701 -4301.8994437625 -5037.0888365094 -4779.863210075 -3035.09452884 597.30289327477 6355.9366179782 14263.484470712 24091.040304424 35345.720958611 47280.48520598 58916.944129246 69059.650390652 76257.552409876 78615.432248551 73218.714055537 54549.824050802 10253.231638692 -89288.127461535 -306236.35486582 -682170.56718427 -933467.68416818 -682170.56717866 -306236.35486581 -89288.127461541 10253.23163869 54549.824050808 73218.714055536 78615.432248551 76257.552409878 69059.650390653 58916.944129245 47280.485205979 35345.72095861 24091.040304424 14263.484470712 6355.9366179782 597.3028932747 -3035.0945288401 -4779.863210075 -5037.0888365095 -4301.8994437626 -3091.0664269888 -1862.8723729438 -932.25926518217 -412.08325886889 -255.11366658629 +FZonI 0 44455.288131627 44231.242324698 43463.316424773 41803.986040697 38590.626169208 32915.798065037 23808.916879629 10456.558839687 -7582.2861929939 -30197.314057814 -56620.953294628 -85430.18819918 -114671.78378619 -142093.40158471 -165426.83049906 -182641.4963226 -192070.54118501 -192295.42732303 -181613.87581218 -156694.20925896 -109332.68105991 -18344.114645077 169978.25857678 570823.21704193 1.2642480275013e6 1.7288884886962e6 1.2642480274902e6 570823.21704192 169978.25857679 -18344.114645075 -109332.68105992 -156694.20925895 -181613.87581218 -192295.42732304 -192070.54118501 -182641.4963226 -165426.83049905 -142093.4015847 -114671.78378619 -85430.18819918 -56620.953294627 -30197.314057814 -7582.2861929933 10456.558839688 23808.91687963 32915.798065037 38590.626169225 41803.986040714 43463.316424779 44231.242324698 44455.288131627 +TXonI 0 -13300.214296236 -13372.695914068 -13558.464457724 -13764.189776863 -13840.721074063 -13595.489142495 -12814.824274714 -11297.964511362 -8900.5581765094 -5580.5501038736 -1435.3275280029 3282.2753574531 8178.7733629166 12768.50889407 16549.518408603 19091.864611025 20118.622778936 19560.605100829 17572.479617669 14507.815616329 10859.996499093 7181.1836871427 3990.3768289452 1674.5727185426 384.87337930263 -4.3655745685101e-11 384.87337930252 1674.5727185426 3990.3768289452 7181.1836871428 10859.996499093 14507.815616329 17572.479617669 19560.605100829 20118.622778936 19091.864611025 16549.518408603 12768.50889407 8178.7733629164 3282.275357453 -1435.327528003 -5580.5501038737 -8900.5581765094 -11297.964511362 -12814.824274714 -13595.489142495 -13840.721074041 -13764.189776891 -13558.464457728 -13372.695914068 -13300.214296236 +TYonI 0 -161740.85240601 -160179.10140905 -155446.05551398 -147430.57309809 -136032.9181843 -121243.37504494 -103203.12141297 -82242.041811811 -58892.879245737 -33881.826746845 -8096.7918677066 17463.685168922 41756.058676366 63765.566509233 82580.678738332 97460.315721577 107886.57807261 113597.65391856 114599.02771416 111156.41760054 103781.70787115 93235.835263467 80598.241606358 67510.066729449 56728.192686627 52319.184833133 56728.192686776 67510.06672945 80598.241606358 93235.835263467 103781.70787115 111156.41760054 114599.02771416 113597.65391856 107886.57807261 97460.315721576 82580.678738332 63765.566509233 41756.058676366 17463.685168922 -8096.7918677071 -33881.826746845 -58892.879245738 -82242.041811812 -103203.12141297 -121243.37504494 -136032.91818416 -147430.57309823 -155446.05551401 -160179.10140905 -161740.85240601 +TZonI 0 4.8657966544852e-11 82.819489938378 334.61932935888 759.9128085726 1348.8514623158 2054.7252581281 2769.8230274799 3307.1640465869 3396.6202622281 2702.5431789895 865.64796727513 -2434.7755939613 -7409.4096055044 -14094.340303363 -22310.095675757 -31656.146462595 -41543.455553878 -51256.923125533 -60031.267968688 -67121.655747933 -71857.278196635 -73686.95751357 -72277.113025645 -67852.131345023 -62144.727897615 -59270.129037172 -62144.727897594 -67852.131345023 -72277.113025645 -73686.95751357 -71857.278196636 -67121.655747933 -60031.267968688 -51256.923125533 -41543.455553878 -31656.146462594 -22310.095675757 -14094.340303363 -7409.4096055043 -2434.7755939613 865.64796727518 2702.5431789896 3396.6202622281 3307.1640465869 2769.82302748 2054.725258128 1348.8514623079 759.91280857837 334.61932935932 82.819489938369 5.6900262279669e-11 +RevoluteJointSeries /backhoe/rev6 +FXonI 0 33576.976519812 33636.629231634 33144.963072055 30683.693254166 25083.17492858 15861.830864418 3174.174559955 -12336.850054153 -29637.271033175 -47383.600474181 -64043.951537962 -78076.851837299 -88146.182278883 -93325.959065887 -93243.619693024 -88124.182152328 -78723.87942219 -66170.703613437 -51751.38587379 -36696.642814931 -22030.16356541 -8604.5979488371 2351.4011831488 7668.5754171241 2494.3173419115 -4702.5073108438 2494.3173418404 7668.5754171239 2351.4011831495 -8604.5979488369 -22030.163565412 -36696.64281493 -51751.38587379 -66170.703613439 -78723.87942219 -88124.182152327 -93243.619693022 -93325.959065885 -88146.182278883 -78076.851837301 -64043.951537962 -47383.600474181 -29637.271033174 -12336.850054153 3174.1745599557 15861.830864419 25083.174928769 30683.693254244 33144.963072134 33636.629231639 33576.976519812 +FYonI 0 -6416.7475449713 -6301.5877497973 -5841.7461628947 -4858.706165979 -3370.2061404709 -1665.5416926029 -223.6015045037 401.62954631402 -322.72755359524 -2830.5769689264 -7391.5640988933 -14059.509981171 -22639.678712581 -32678.887152216 -43477.537011507 -54114.750116142 -63465.685813102 -70167.619483999 -72439.227809091 -67520.012763571 -50116.323036941 -8228.4153468937 87164.8915658 297408.494586 664477.14428139 910730.02497838 664477.14427584 297408.49458599 87164.891565806 -8228.4153468925 -50116.323036947 -67520.01276357 -72439.227809092 -70167.619484 -63465.685813102 -54114.750116141 -43477.537011506 -32678.887152215 -22639.678712581 -14059.509981171 -7391.5640988932 -2830.5769689263 -322.7275535952 401.62954631402 -223.60150450374 -1665.541692603 -3370.2061404906 -4858.7061659966 -5841.7461629091 -6301.5877497983 -6416.7475449712 +FZonI 0 -122.31265398842 -331.05133957645 -937.3310434503 -1794.8404194845 -2500.5421445622 -2378.7249726838 -572.96684364581 3812.5793082267 11549.446014199 23113.592246979 38533.275996756 57292.540519751 78321.529386486 100083.64439782 120738.76192074 138330.04244734 150914.06686605 156521.85045407 152764.23705498 135671.23842106 96684.985432566 14880.812935322 -162082.09067903 -546683.60927967 -1.2185463327487e6 -1.6706010232042e6 -1.2185463327376e6 -546683.60927967 -162082.09067904 14880.81293532 96684.985432578 135671.23842106 152764.23705498 156521.85045407 150914.06686605 138330.04244734 120738.76192074 100083.64439782 78321.529386486 57292.540519752 38533.275996756 23113.592246979 11549.446014199 3812.5793082265 -572.96684364594 -2378.7249726839 -2500.5421445726 -1794.8404195011 -937.3310434552 -331.0513395766 -122.31265398842 +TXonI 0 -2129.5298521321 -2244.368347496 -2560.3553205737 -2996.9035956488 -3433.9002907234 -3728.4104694488 -3735.9149616243 -3337.8811700674 -2473.6969990022 -1168.9755309535 451.60601872929 2177.1718845517 3751.6582248041 4934.0171484934 5559.0220404675 5577.6375331439 5062.8439136733 4180.2306213718 3136.0451991524 2122.2961221725 1276.4076572029 664.21552155775 285.1233616145 91.89217858614 16.835309640661 -4.5474735088646e-13 16.835309640757 91.892178586139 285.1233616145 664.21552155775 1276.4076572029 2122.2961221725 3136.0451991524 4180.2306213718 5062.8439136733 5577.6375331439 5559.0220404675 4934.0171484934 3751.658224804 2177.1718845517 451.60601872927 -1168.9755309535 -2473.6969990022 -3337.8811700674 -3735.9149616244 -3728.4104694489 -3433.9002904599 -2996.9035959016 -2560.3553206301 -2244.3683474982 -2129.529852132 +TYonI 0 406.96503577529 420.45724632568 451.21842136017 474.4683472908 461.28353770279 391.56227176176 265.12353661468 108.18964813939 -26.864439981525 -69.735408560943 52.15465668286 393.55543180493 971.99553488506 1755.1333918679 2659.771156514 3564.3954380974 4332.9948421841 4844.1919295522 5017.8834928997 4832.426775709 4328.6756178623 3601.5525912372 2783.5581363032 2026.1400713292 1482.3702078996 1282.4297506268 1482.370207909 2026.1400713291 2783.5581363033 3601.5525912372 4328.6756178623 4832.426775709 5017.8834928998 4844.1919295522 4332.9948421841 3564.3954380974 2659.771156514 1755.1333918679 971.99553488504 393.55543180492 52.154656682857 -69.735408560944 -26.864439981524 108.18964813939 265.12353661469 391.56227176177 461.28353766709 474.46834733095 451.21842137012 420.4572463261 406.96503577529 +TZonI 0 -7.8159700933611e-14 13.899773311807 63.188894506596 165.45728192573 334.65174276615 563.48536517895 807.48850453082 977.07162970145 944.00926130667 566.1102917777 -272.36419875968 -1615.0153144002 -3398.7459065035 -5446.3459539736 -7494.0134525002 -9248.2591020736 -10454.395085339 -10953.943321394 -10713.386716519 -9818.9853989668 -8445.5994183424 -6815.5923938429 -5164.3978293423 -3723.3857341432 -2718.3634747265 -2352.4298033716 -2718.3634747419 -3723.3857341431 -5164.3978293423 -6815.5923938429 -8445.5994183426 -9818.9853989668 -10713.386716519 -10953.943321394 -10454.395085339 -9248.2591020735 -7494.0134525002 -5446.3459539735 -3398.7459065035 -1615.0153144002 -272.36419875967 566.11029177772 944.00926130668 977.07162970145 807.48850453083 563.48536517896 334.65174274001 165.45728194007 63.188894508014 13.899773311821 -1.3500311979442e-13 +RevoluteJointSeries /backhoe/rev7 +FXonI 0 33576.976519812 33636.629231634 33144.963072055 30683.693254166 25083.17492858 15861.830864418 3174.174559955 -12336.850054153 -29637.271033175 -47383.600474181 -64043.951537962 -78076.851837299 -88146.182278883 -93325.959065887 -93243.619693024 -88124.182152328 -78723.87942219 -66170.703613437 -51751.38587379 -36696.642814931 -22030.16356541 -8604.5979488371 2351.4011831488 7668.5754171241 2494.3173419115 -4702.5073108438 2494.3173418404 7668.5754171239 2351.4011831495 -8604.5979488369 -22030.163565412 -36696.64281493 -51751.38587379 -66170.703613439 -78723.87942219 -88124.182152327 -93243.619693022 -93325.959065885 -88146.182278883 -78076.851837301 -64043.951537962 -47383.600474181 -29637.271033174 -12336.850054153 3174.1745599557 15861.830864419 25083.174928769 30683.693254244 33144.963072134 33636.629231639 33576.976519812 +FYonI 0 -6416.7475449713 -6301.5877497973 -5841.7461628947 -4858.706165979 -3370.2061404709 -1665.5416926029 -223.6015045037 401.62954631402 -322.72755359524 -2830.5769689264 -7391.5640988933 -14059.509981171 -22639.678712581 -32678.887152216 -43477.537011507 -54114.750116142 -63465.685813102 -70167.619483999 -72439.227809091 -67520.012763571 -50116.323036941 -8228.4153468937 87164.8915658 297408.494586 664477.14428139 910730.02497838 664477.14427584 297408.49458599 87164.891565806 -8228.4153468925 -50116.323036947 -67520.01276357 -72439.227809092 -70167.619484 -63465.685813102 -54114.750116141 -43477.537011506 -32678.887152215 -22639.678712581 -14059.509981171 -7391.5640988932 -2830.5769689263 -322.7275535952 401.62954631402 -223.60150450374 -1665.541692603 -3370.2061404906 -4858.7061659966 -5841.7461629091 -6301.5877497983 -6416.7475449712 +FZonI 0 -122.31265398842 -331.05133957645 -937.3310434503 -1794.8404194845 -2500.5421445622 -2378.7249726838 -572.96684364581 3812.5793082267 11549.446014199 23113.592246979 38533.275996756 57292.540519751 78321.529386486 100083.64439782 120738.76192074 138330.04244734 150914.06686605 156521.85045407 152764.23705498 135671.23842106 96684.985432566 14880.812935322 -162082.09067903 -546683.60927967 -1.2185463327487e6 -1.6706010232042e6 -1.2185463327376e6 -546683.60927967 -162082.09067904 14880.81293532 96684.985432578 135671.23842106 152764.23705498 156521.85045407 150914.06686605 138330.04244734 120738.76192074 100083.64439782 78321.529386486 57292.540519752 38533.275996756 23113.592246979 11549.446014199 3812.5793082265 -572.96684364594 -2378.7249726839 -2500.5421445726 -1794.8404195011 -937.3310434552 -331.0513395766 -122.31265398842 +TXonI 0 -2173.1522196587 -2287.3586525041 -2599.8624817737 -3027.0507359987 -3448.1542758589 -3724.750227175 -3721.0999343394 -3326.300183954 -2478.0188121315 -1183.978580924 465.55377771325 2301.2450307838 4097.928796891 5615.4341896321 6648.1904240789 7070.275550097 6862.5765466942 6113.7904279016 4995.3367778089 3718.4754490111 2486.6839574427 1456.0278431842 711.69689748437 262.83940574033 54.248998380634 4.5474735088646e-12 54.248998380774 262.83940574033 711.69689748438 1456.0278431842 2486.6839574427 3718.4754490111 4995.3367778089 6113.7904279016 6862.5765466942 7070.275550097 6648.1904240789 5615.434189632 4097.928796891 2301.2450307837 465.55377771322 -1183.978580924 -2478.0188121315 -3326.300183954 -3721.0999343395 -3724.7502271751 -3448.1542755943 -3027.0507362541 -2599.8624818309 -2287.3586525063 -2173.1522196587 +TYonI 0 178.70185416884 190.96951262562 226.90581260252 283.46833243206 354.16582554505 427.21074224786 483.63820731628 496.1032748786 429.04666749823 240.74336742104 -112.54771489252 -670.51190387701 -1461.4177302019 -2494.5242586183 -3753.5915912266 -5192.841433424 -6736.3875167498 -8281.5083361394 -9705.3266443539 -10873.844501882 -11652.518715431 -11920.028417924 -11595.218595525 -10710.490482083 -9596.2188142016 -9039.6624565709 -9596.2188141981 -10710.490482083 -11595.218595525 -11920.028417924 -11652.518715432 -10873.844501882 -9705.3266443539 -8281.5083361394 -6736.3875167498 -5192.8414334239 -3753.5915912265 -2494.5242586183 -1461.4177302019 -670.511903877 -112.54771489251 240.74336742105 429.04666749823 496.1032748786 483.63820731629 427.21074224787 354.16582551764 283.46833245626 226.90581260755 190.9695126258 178.70185416883 +TZonI 0 2.2311041902867e-12 14.166019935223 64.163920832539 167.12168778361 336.04086899646 562.93218226866 804.28635342466 973.68161897345 945.65854641369 573.37595369402 -280.77611100755 -1707.0521593974 -3712.4433754367 -6198.5186427344 -8962.3009425307 -11723.196393061 -14170.708745092 -16020.674429714 -17065.115864523 -17203.846229941 -16453.627856324 -14940.47033101 -12890.862017429 -10650.008616204 -8759.4762963091 -7979.5299685925 -8759.4762963317 -10650.008616204 -12890.862017429 -14940.47033101 -16453.627856325 -17203.846229941 -17065.115864523 -16020.674429714 -14170.708745092 -11723.196393061 -8962.3009425306 -6198.5186427343 -3712.4433754366 -1707.0521593973 -280.77611100753 573.37595369404 945.65854641369 973.68161897344 804.28635342467 562.93218226867 336.04086897046 167.12168779788 64.163920833964 14.166019935237 2.2168933355715e-12 +RevoluteJointSeries /backhoe/rev8 +FXonI 0 1691.1320901183 1661.4361942731 1298.4321638405 92.19763959519 -2229.7841136943 -5578.6878176692 -9623.6118028544 -13921.21977611 -17994.937420965 -21388.757564337 -23718.793443282 -24726.318831895 -24322.969952536 -22613.866452764 -19886.429974631 -16560.446077885 -13106.220782628 -9948.8838340381 -7383.8040901825 -5527.6047624388 -4320.7594736666 -3583.5289850354 -3111.5508178713 -2781.8811739443 -2599.5436382681 -2561.1529336842 -2599.5436382708 -2781.8811739443 -3111.5508178712 -3583.5289850354 -4320.7594736668 -5527.6047624388 -7383.8040901826 -9948.8838340383 -13106.220782628 -16560.446077885 -19886.429974631 -22613.866452764 -24322.969952536 -24726.318831895 -23718.793443282 -21388.757564337 -17994.937420965 -13921.219776109 -9623.6118028544 -5578.6878176691 -2229.7841134626 92.19763945586 1298.432163835 1661.4361942738 1691.1320901183 +FYonI 0 -139.06455213525 -138.89434638185 -116.60777798003 -39.276821434511 97.824265791799 279.35478970736 498.12437702341 770.52598237014 1134.7507190021 1638.1389658565 2319.2970959193 3189.1623439775 4215.0179498457 5311.5740075085 6342.7245591959 7136.0170558522 7509.079087348 7303.2030893795 6413.8278328977 4800.1138004984 2444.5810460317 -782.05822283436 -5391.8507436816 -12473.226239417 -22100.643386731 -27741.830519284 -22100.643386658 -12473.226239417 -5391.850743682 -782.05822283441 2444.5810460322 4800.1138004983 6413.8278328977 7303.2030893796 7509.079087348 7136.0170558522 6342.7245591959 5311.5740075084 4215.0179498457 3189.1623439775 2319.2970959193 1638.1389658565 1134.7507190021 770.52598237013 498.12437702341 279.35478970734 97.824265783913 -39.276821418512 -116.60777797725 -138.89434638181 -139.06455213525 +FZonI 0 -10036.662156807 -9863.8556059196 -9348.8067880849 -8468.1777435559 -7134.1608815251 -5215.3342503263 -2591.9482718463 790.47276753834 4880.3795655908 9494.9471491923 14315.38125143 18908.979331966 22780.708367767 25449.886429611 26538.943429424 25854.256490165 23436.639914837 19562.684483227 14686.728733016 9323.1380808727 3874.6120397562 -1588.2396029426 -7573.6809633698 -15185.813545847 -24463.367979133 -29633.38283333 -24463.367979122 -15185.813545847 -7573.6809633703 -1588.2396029427 3874.612039757 9323.1380808725 14686.728733016 19562.684483228 23436.639914837 25854.256490165 26538.943429424 25449.886429611 22780.708367767 18908.979331966 14315.38125143 9494.9471491923 4880.3795655907 790.47276753824 -2591.9482718463 -5215.3342503262 -7134.1608816212 -8468.1777434816 -9348.8067880684 -9863.855605919 -10036.662156807 +TXonI 0 -8252.3917811428 -8301.8404883633 -8414.369287979 -8493.7091248274 -8409.8338234097 -8029.3155127736 -7243.4743782658 -5993.3668678367 -4289.9271890865 -2224.8636745207 33.065211794417 2259.6243167141 4212.900191985 5679.8711394197 6519.9795566657 6693.3662058688 6265.4164345604 5386.5940858625 4254.3360639076 3068.8786611996 1995.3596556667 1140.6095643479 546.85654157625 199.05716895341 40.679445296232 6.4801497501321e-11 40.679445296411 199.05716895342 546.85654157625 1140.6095643479 1995.3596556668 3068.8786611996 4254.3360639076 5386.5940858625 6265.4164345604 6693.3662058688 6519.9795566657 5679.8711394197 4212.900191985 2259.624316714 33.06521179437 -2224.8636745207 -4289.9271890865 -5993.3668678368 -7243.4743782659 -8029.3155127737 -8409.833823149 -8493.7091250784 -8414.3692880349 -8301.8404883655 -8252.3917811428 +TYonI 0 678.60764620045 669.437634892 642.03854097622 597.83875693597 541.21028181954 478.92097531814 416.70033926644 354.2631542624 280.84964282388 173.14060967473 -3.2325832649018 -288.27906339993 -719.09867742316 -1319.9261771999 -2093.1072842914 -3013.339931862 -4026.822867805 -5055.7118179062 -6006.8411681554 -6782.5478247882 -7291.2979709048 -7457.6607681085 -7237.3078273377 -6659.0214288588 -5938.1706078075 -5579.2473501186 -5938.1706078047 -6659.0214288588 -7237.3078273377 -7457.6607681085 -7291.2979709049 -6782.5478247882 -6006.8411681554 -5055.7118179061 -4026.822867805 -3013.339931862 -2093.1072842914 -1319.9261771999 -719.09867742314 -288.27906339992 -3.2325832648973 173.14060967474 280.84964282388 354.2631542624 416.70033926645 478.92097531812 541.21028186194 597.8387568997 642.03854096919 669.43763489174 678.60764620042 +TZonI 0 -6.6506800067145e-12 51.414778232709 207.664416343 468.93267681443 819.58277967183 1213.4934768921 1565.6197620649 1754.391014716 1637.1168330084 1077.4547375865 -19.941673812376 -1676.1781199631 -3816.5996005046 -6269.6464702632 -8789.4622744777 -11098.24447521 -12937.617650857 -14115.117479459 -14533.702348102 -14198.430864903 -13202.685092169 -11703.926841219 -9905.1327126831 -8065.611617481 -6568.4279425604 -5959.6634235441 -6568.4279425776 -8065.611617481 -9905.1327126831 -11703.926841219 -13202.685092169 -14198.430864903 -14533.702348102 -14115.117479459 -12937.617650857 -11098.24447521 -8789.4622744777 -6269.6464702631 -3816.5996005045 -1676.178119963 -19.941673812348 1077.4547375865 1637.1168330084 1754.391014716 1565.6197620649 1213.4934768921 819.58277964261 468.93267683215 207.6644163447 51.414778232726 -6.3380412029801e-12 +RevoluteJointSeries /backhoe/rev9 +FXonI 0 1691.1320901183 1661.4361942731 1298.4321638405 92.19763959519 -2229.7841136943 -5578.6878176692 -9623.6118028544 -13921.21977611 -17994.937420965 -21388.757564337 -23718.793443282 -24726.318831895 -24322.969952536 -22613.866452764 -19886.429974631 -16560.446077885 -13106.220782628 -9948.8838340381 -7383.8040901825 -5527.6047624388 -4320.7594736666 -3583.5289850354 -3111.5508178713 -2781.8811739443 -2599.5436382681 -2561.1529336842 -2599.5436382708 -2781.8811739443 -3111.5508178712 -3583.5289850354 -4320.7594736668 -5527.6047624388 -7383.8040901826 -9948.8838340383 -13106.220782628 -16560.446077885 -19886.429974631 -22613.866452764 -24322.969952536 -24726.318831895 -23718.793443282 -21388.757564337 -17994.937420965 -13921.219776109 -9623.6118028544 -5578.6878176691 -2229.7841134626 92.19763945586 1298.432163835 1661.4361942738 1691.1320901183 +FYonI 0 -139.06455213525 -138.89434638185 -116.60777798003 -39.276821434511 97.824265791799 279.35478970736 498.12437702341 770.52598237014 1134.7507190021 1638.1389658565 2319.2970959193 3189.1623439775 4215.0179498457 5311.5740075085 6342.7245591959 7136.0170558522 7509.079087348 7303.2030893795 6413.8278328977 4800.1138004984 2444.5810460317 -782.05822283436 -5391.8507436816 -12473.226239417 -22100.643386731 -27741.830519284 -22100.643386658 -12473.226239417 -5391.850743682 -782.05822283441 2444.5810460322 4800.1138004983 6413.8278328977 7303.2030893796 7509.079087348 7136.0170558522 6342.7245591959 5311.5740075084 4215.0179498457 3189.1623439775 2319.2970959193 1638.1389658565 1134.7507190021 770.52598237013 498.12437702341 279.35478970734 97.824265783913 -39.276821418512 -116.60777797725 -138.89434638181 -139.06455213525 +FZonI 0 -10036.662156807 -9863.8556059196 -9348.8067880849 -8468.1777435559 -7134.1608815251 -5215.3342503263 -2591.9482718463 790.47276753834 4880.3795655908 9494.9471491923 14315.38125143 18908.979331966 22780.708367767 25449.886429611 26538.943429424 25854.256490165 23436.639914837 19562.684483227 14686.728733016 9323.1380808727 3874.6120397562 -1588.2396029426 -7573.6809633698 -15185.813545847 -24463.367979133 -29633.38283333 -24463.367979122 -15185.813545847 -7573.6809633703 -1588.2396029427 3874.612039757 9323.1380808725 14686.728733016 19562.684483228 23436.639914837 25854.256490165 26538.943429424 25449.886429611 22780.708367767 18908.979331966 14315.38125143 9494.9471491923 4880.3795655907 790.47276753824 -2591.9482718463 -5215.3342503262 -7134.1608816212 -8468.1777434816 -9348.8067880684 -9863.855605919 -10036.662156807 +TXonI 0 -9157.2019760767 -9174.8570586733 -9200.0498468404 -9156.8329002906 -8939.1404309392 -8432.8913531049 -7539.4904273984 -6200.4882539532 -4421.1364487902 -2287.0165508604 33.908520621336 2309.7321925537 4283.8975511651 5727.9731700283 6493.803634008 6548.6965044113 5981.4890517487 4976.8722455286 3766.3806605046 2572.1716144054 1560.8565584738 819.20367443643 354.61248231394 115.27174349013 21.283424576026 1.0732037480921e-10 21.283424576266 115.27174349013 354.61248231394 819.20367443643 1560.8565584738 2572.1716144054 3766.3806605046 4976.8722455286 5981.4890517487 6548.6965044113 6493.803634008 5727.9731700282 4283.897551165 2309.7321925537 33.908520621284 -2287.0165508605 -4421.1364487903 -6200.4882539532 -7539.4904273985 -8432.891353105 -8939.1404307407 -9156.8329004778 -9200.0498468813 -9174.8570586749 -9157.2019760767 +TYonI 0 -10324.581395323 -10157.44439168 -9661.1327428333 -8852.1146592204 -7761.7689798522 -6441.7470060718 -4969.3173919879 -3450.0315544479 -2015.2250326109 -812.83457744809 8.5309293577081 320.60364385083 38.215634919071 -860.72533055775 -2322.8244231679 -4218.1601161132 -6352.255305892 -8489.7650779985 -10385.680845635 -11817.99318961 -12616.052128713 -12682.616998666 -12017.494090424 -10773.542575095 -9402.5423156794 -8757.7345093422 -9402.5423156857 -10773.542575095 -12017.494090424 -12682.616998666 -12616.052128713 -11817.99318961 -10385.680845635 -8489.7650779985 -6352.255305892 -4218.1601161132 -2322.8244231678 -860.72533055773 38.215634919077 320.60364385083 8.5309293576953 -812.83457744812 -2015.225032611 -3450.0315544479 -4969.3173919879 -6441.7470060718 -7761.7689798886 -8852.1146591867 -9661.1327428238 -10157.44439168 -10324.581395323 +TZonI 0 1.1368683772162e-13 56.821525497843 227.05480546238 505.54334978591 871.16650769486 1274.4870508641 1629.601292503 1815.0200245482 1687.1887522368 1107.5540698889 -20.450274502856 -1713.3478939379 -3880.9183548864 -6322.7432252801 -8754.1750036052 -10858.368205849 -12351.328781187 -13041.475801986 -12866.744570043 -11900.373025998 -10327.710875105 -8405.9437807215 -6423.0441292139 -4670.7039909666 -3436.5916172277 -2984.0648368136 -3436.5916172457 -4670.7039909667 -6423.0441292139 -8405.9437807214 -10327.710875106 -11900.373025999 -12866.744570043 -13041.475801986 -12351.328781187 -10858.368205849 -8754.1750036051 -6322.7432252801 -3880.9183548864 -1713.3478939378 -20.450274502825 1107.5540698889 1687.1887522368 1815.0200245482 1629.601292503 1274.4870508641 871.16650767527 505.54334979737 227.05480546339 56.821525497848 9.0949470177293e-13 +TranslationalJointSeries /backhoe/trn1 +FXonI 0 1.7038045909888e-10 1171.4949549171 4525.3370992041 9574.5688100548 15504.886675969 21208.708658424 25382.413950491 26697.554626366 24031.40918693 16714.834747305 4735.4000108605 -11168.716612021 -29568.116548833 -48558.715914973 -66091.950570453 -80338.455740619 -89994.014034859 -94456.248690962 -93843.054260923 -88872.270499651 -80659.283666554 -70506.026976102 -59756.505109667 -49801.473791425 -42316.148509422 -39413.688612464 -42316.148509511 -49801.473791425 -59756.505109667 -70506.026976102 -80659.283666555 -88872.270499651 -93843.054260923 -94456.248690963 -89994.014034859 -80338.455740619 -66091.950570453 -48558.715914973 -29568.116548833 -11168.716612021 4735.4000108607 16714.834747305 24031.40918693 26697.554626366 25382.413950491 21208.708658424 15504.886675955 9574.5688100702 4525.3370992054 1171.494954917 1.6135546499462e-10 +FYonI 0 3.4858382024083e-11 6.6628802180585e-11 9.2046110969097e-11 8.9099526903937e-10 9.3705756116636e-9 3.260520073474e-11 3.0229581777617e-11 3.5555944740917e-11 2.1117069214131e-11 1.668154940007e-11 3.947213249806e-12 -9.5109416717722e-12 -2.4331452703362e-11 -3.0812224805789e-11 -3.8067555645298e-11 -5.336700328889e-11 -5.1479578840913e-11 -5.3131584384733e-11 -5.5362069594107e-11 -6.0301371954684e-11 -4.0013972047439e-11 -4.3807471268463e-11 -4.0801735790351e-11 -2.9096720962329e-11 -3.235086198911e-11 -2.3265833773305e-11 -2.1462306947555e-11 -3.0391499402297e-11 -4.0403733883935e-11 -5.0203692863378e-11 -5.2544692896448e-11 -5.0248074263004e-11 -4.9200656052014e-11 -3.7645756853653e-11 -3.9619854220289e-11 -4.2281969453334e-11 -3.8395003699446e-11 -2.6049647919004e-11 -1.9506775648465e-11 -1.0340318298199e-11 7.0611157686426e-12 1.4209784779782e-11 2.2990606571629e-11 2.8193233232381e-11 4.3833329554466e-11 2.7861312110145e-12 5.2465396947818e-11 9.8357747840987e-9 9.0902268248283e-10 8.6867159730165e-11 4.2427650630911e-11 +FZonI 0 191057.42259452 189158.92634259 183362.45648556 173422.76725253 159097.43790423 140331.54415722 117433.9195019 91204.433907695 62972.289811245 34514.887129456 7851.7483418674 -15056.337594698 -32638.352702428 -43990.877380548 -49026.681396744 -48452.23097104 -43582.210400902 -36046.279551829 -27469.937152086 -19209.039161004 -12190.268824838 -6871.1851846073 -3299.1214422711 -1229.0872475364 -262.07145202606 4.7170694569129e-11 -262.07145202661 -1229.0872475364 -3299.1214422712 -6871.1851846073 -12190.268824838 -19209.039161004 -27469.937152086 -36046.279551829 -43582.210400902 -48452.23097104 -49026.681396744 -43990.877380548 -32638.352702427 -15056.337594698 7851.7483418678 34514.887129456 62972.289811246 91204.433907696 117433.9195019 140331.54415722 159097.43790419 173422.76725259 183362.45648557 189158.92634259 191057.42259452 +TXonI 0 59077.826879563 58281.753526811 55889.932562216 51909.502192611 46405.488353042 39560.151477383 31721.140920059 23412.695530949 15290.804261653 8041.3249950376 2244.2706883146 -1753.1603175306 -3908.9720633816 -4475.8892348261 -3911.7373592019 -2745.5275001239 -1448.4426961631 -350.00863368107 385.63452429979 734.99148371812 767.74506603613 599.86205986585 357.47709623276 148.15258580449 31.285822963322 -5.7527680345947e-11 31.285822963235 148.15258580449 357.47709623275 599.86205986589 767.74506603621 734.99148371806 385.63452429974 -350.00863368117 -1448.4426961631 -2745.5275001239 -3911.7373592019 -4475.8892348262 -3908.9720633817 -1753.1603175306 2244.2706883147 8041.3249950378 15290.804261653 23412.69553095 31721.140920059 39560.151477383 46405.488353345 51909.502192321 55889.932562155 58281.753526808 59077.826879564 +TYonI 0 -172118.47033466 -170234.34877549 -164577.15746718 -155159.70083465 -142071.52631667 -125529.64383038 -105899.35869953 -83684.671759643 -59498.052771065 -34023.256190797 -7984.1474033383 17872.821559324 42783.261543121 65965.549156197 86630.751355282 104012.99328285 117423.65313444 126322.12238687 130387.34027238 129572.91726145 124138.05942826 114669.91703907 102160.66055119 88305.434627949 76282.907252002 71206.665130917 76282.907252126 88305.434627949 102160.66055119 114669.91703907 124138.05942826 129572.91726145 130387.34027238 126322.12238687 117423.65313444 104012.99328285 86630.751355281 65965.549156196 42783.26154312 17872.821559323 -7984.1474033388 -34023.256190798 -59498.052771066 -83684.671759644 -105899.35869953 -125529.64383038 -142071.52631661 -155159.70083472 -164577.1574672 -170234.34877549 -172118.47033466 +TZonI 0 2.3798632741249e-11 -360.94929031639 -1379.3488053303 -2865.8930341884 -4522.460245329 -5978.8391284782 -6856.2740069472 -6853.4137114494 -5835.2582558214 -3894.2447627685 -1353.522677892 1300.4856352872 3541.2614910434 4940.6478516136 5273.3398391133 4552.3484705005 2990.9261400032 917.16823367084 -1317.4082411765 -3400.5012644541 -5079.9344915871 -6155.2540702285 -6474.930462978 -6003.0051844288 -5051.6587004144 -4514.8700759288 -5051.6587003994 -6003.0051844289 -6474.9304629778 -6155.2540702286 -5079.9344915876 -3400.5012644539 -1317.4082411763 917.16823367098 2990.9261400033 4552.3484705005 5273.3398391132 4940.6478516137 3541.2614910435 1300.4856352872 -1353.5226778921 -3894.2447627685 -5835.2582558214 -6853.4137114494 -6856.2740069471 -5978.8391284782 -4522.4602453637 -2865.8930341678 -1379.3488053284 -360.94929031636 -1.0151684895578e-12 +TranslationalJointSeries /backhoe/trn2 +FXonI 0 -9.2724157732965e-13 -0.76008251903401 -2.9430451673091 -5.5488463140765 -5.4113738558858 2.7363299421264 23.355825475326 54.277221323898 79.714743296392 65.396863573891 -40.561482466491 -298.81253748189 -762.71826017201 -1459.32924175 -2373.927418829 -3444.3348720818 -4568.041982051 -5620.4950623717 -6478.7738407581 -7043.3303265812 -7252.2351359293 -7087.0743106905 -6577.00831327 -5819.8871448952 -5052.1635665035 -4702.5073108421 -5052.1635665067 -5819.8871448953 -6577.00831327 -7087.0743106905 -7252.2351359294 -7043.3303265812 -6478.7738407581 -5620.4950623717 -4568.041982051 -3444.3348720818 -2373.927418829 -1459.32924175 -762.71826017197 -298.8125374819 -40.561482466485 65.396863573891 79.714743296391 54.277221323897 23.355825475326 2.7363299421263 -5.4113738548234 -5.5488463152771 -2.943045167445 -0.76008251903603 -1.7053907863415e-12 +FYonI 0 -4.4597705522478e-12 -1.832630714962e-12 -9.534458271605e-12 -3.3510793597135e-10 -3.2720595465913e-9 -3.8672938790219e-12 -1.2180160012271e-12 -1.6327564284525e-12 -7.3778214025038e-12 1.0578178884179e-11 -2.9855926912414e-11 -5.9397462590785e-12 5.5333292169205e-12 -1.0574372835992e-11 -4.4218245192627e-11 5.1374356633115e-11 5.1006067725301e-11 1.5461897651783e-11 -5.339959730732e-13 5.6976740420435e-12 -1.517312629775e-11 -4.693238298259e-12 9.1632703986223e-12 5.3675935203777e-11 1.5201979664209e-10 -4.8359087597603e-10 -4.5663882148784e-10 -9.6769576598396e-11 -1.3555671915545e-11 -5.4853971107576e-12 1.0363324112827e-11 -2.1344333362776e-12 1.2368149009944e-11 -1.5306399104164e-11 -4.4595798256658e-11 2.2428608555257e-11 -1.8800618968681e-11 -2.607040505502e-11 -1.0842966442915e-11 -1.6382461709376e-12 1.2352814475158e-11 1.2936989286539e-11 -8.6224311844529e-13 -2.0177139068442e-12 -2.2525974503838e-12 -4.8189287309928e-13 -4.8934080956476e-12 -4.2215009871283e-9 -3.8291211807273e-10 -8.5770077036137e-12 -8.5156386050797e-12 +FZonI 0 -122.31265398839 -122.7289905336 -119.24945691236 -100.50544331839 -55.526733857259 18.105459049236 108.05773375691 185.42234726023 208.88579100969 135.03964585933 -67.254836332636 -402.8235828827 -841.91590448323 -1322.0525403531 -1760.9675946522 -2077.2830050719 -2212.2067663832 -2144.8865379015 -1896.4803695899 -1522.3602064686 -1096.0510913212 -690.67287002759 -363.11275420949 -143.63328085126 -31.288949688994 -2.5894558851743e-10 -31.288949689346 -143.63328085134 -363.1127542095 -690.6728700276 -1096.0510913212 -1522.3602064686 -1896.4803695899 -2144.8865379016 -2212.2067663832 -2077.283005072 -1760.9675946522 -1322.0525403531 -841.91590448319 -402.82358288271 -67.254836332618 135.03964585933 208.88579100969 185.42234726023 108.05773375691 18.105459049233 -55.526733850895 -100.50544332888 -119.24945691518 -122.72899053373 -122.3126539884 +TXonI 0 -2150.1930788552 -2264.7603121835 -2579.1718758944 -3011.3578218531 -3440.7958915226 -3726.6202786785 -3728.57732641 -3332.0653885086 -2475.8994991624 -1176.7386568834 458.93497985405 2243.3693057549 3939.173767198 5308.328713532 6165.448896356 6419.2376045489 6089.4071049355 5294.7450342375 4217.7897588356 3058.54013748 1991.2183766503 1134.5308711951 539.61739989313 194.20174949635 39.269348603431 -9.7516845986695e-10 39.269348602464 194.20174949621 539.61739989312 1134.5308711951 1991.2183766504 3058.54013748 4217.7897588356 5294.7450342375 6089.4071049354 6419.2376045489 6165.448896356 5308.3287135319 3939.173767198 2243.3693057548 458.93497985405 -1176.7386568835 -2475.8994991624 -3332.0653885086 -3728.57732641 -3726.6202786787 -3440.7958912585 -3011.3578221071 -2579.1718759512 -2264.7603121857 -2150.1930788552 +TYonI 0 298.8403708038 311.60233680723 344.38233181047 382.8922512579 409.46357475866 408.99761020763 373.35019808202 302.99351844157 205.47885141386 90.91764806869 -34.389517174901 -174.16220692488 -345.76821708857 -579.2608336909 -911.0590891169 -1373.2325016136 -1980.9543918273 -2721.5332555007 -3548.1492100267 -4380.136148261 -5110.1021362324 -5617.8515527305 -5794.8290543781 -5596.558631966 -5160.5860506575 -4910.8255736922 -5160.5860506516 -5596.558631966 -5794.829054378 -5617.8515527305 -5110.1021362325 -4380.136148261 -3548.1492100267 -2721.5332555006 -1980.9543918273 -1373.2325016136 -911.05908911688 -579.26083369087 -345.76821708857 -174.16220692486 -34.389517174907 90.917648068701 205.47885141386 302.99351844158 373.35019808204 408.99761020764 409.46357472489 382.89225129251 344.38233181828 311.60233680754 298.8403708038 +TZonI 0 -1.0489971200488e-14 14.026064384687 63.653282132631 166.25529123859 335.32375552636 563.21480851461 805.90253264792 975.36922183367 944.84977675787 569.86981057767 -276.78430509511 -1664.1202333896 -3568.622170259 -5859.5245499165 -8311.5261342099 -10643.712907457 -12574.171512287 -13874.434752415 -14408.852521511 -14150.598796424 -13175.283514425 -11641.552666765 -9774.0111960777 -7868.8745304055 -6340.7424750416 -5728.6899025044 -6340.7424750614 -7868.8745304056 -9774.0111960777 -11641.552666765 -13175.283514425 -14150.598796424 -14408.852521511 -13874.434752415 -12574.171512287 -10643.712907457 -8311.5261342099 -5859.5245499165 -3568.6221702589 -1664.1202333896 -276.78430509505 569.8698105777 944.84977675788 975.36922183366 805.90253264793 563.21480851463 335.32375550372 166.25529124884 63.653282133661 14.026064384693 -4.5868776289739e-12 +TranslationalJointSeries /backhoe/trn3 +FXonI 0 5.2850280906057e-12 -61.02255064582 -229.79526045517 -465.82221566647 -709.69876643676 -895.18498074514 -964.74877310381 -885.58556470047 -661.82667410471 -338.60713574674 4.6634351208282 271.36465371768 371.0678584605 242.75722155388 -128.99337791212 -709.6039936236 -1422.6903501293 -2167.7064279659 -2841.2203438622 -3355.7119584041 -3651.7676955602 -3703.1406322501 -3518.9632039035 -3154.7415302984 -2750.9441238789 -2561.1529336846 -2750.9441238819 -3154.7415302984 -3518.9632039035 -3703.1406322501 -3651.7676955603 -3355.7119584041 -2841.2203438621 -2167.7064279659 -1422.6903501292 -709.6039936236 -128.99337791211 242.75722155388 371.06785846049 271.36465371767 4.6634351208263 -338.60713574676 -661.82667410471 -885.58556470048 -964.7487731038 -895.18498074513 -709.69876644363 -465.82221566418 -229.79526045474 -61.022550645807 4.9021849532639e-12 +FYonI 0 -5.5620591674322e-12 -7.3145327716021e-12 -1.0819958007558e-12 3.170617857817e-10 3.2219607954714e-9 -6.3143945526861e-12 -3.8048884345381e-12 -3.972610589414e-12 -2.6399693385603e-12 1.968496306744e-13 -2.971242933835e-12 9.5930256778289e-13 -5.1190773576968e-12 1.7870743961162e-11 4.2960165480666e-12 2.3951537831106e-11 1.155812826775e-11 1.0405275793937e-11 -2.2339678362767e-12 4.9572463789254e-13 -1.1728142708987e-12 5.4698039337803e-13 -2.8954014804542e-12 7.6525908345739e-13 -3.0912754145195e-12 -2.6434326373845e-9 -2.7184280418674e-9 -7.8000167733531e-12 -4.062018323957e-12 -6.1219043606375e-13 -1.0410537666496e-12 3.2395471041321e-13 3.1699564727797e-12 2.6590743007684e-12 6.4112506830378e-12 -3.553730216571e-12 1.0066637261862e-11 3.1466322919439e-12 -4.943486723204e-12 4.4589049353775e-12 -1.7567314972707e-14 -3.2560714130702e-12 -6.9067067957665e-12 -8.1374504746035e-12 -5.6412275300628e-12 -8.3006500866082e-12 -5.4342428032541e-12 2.8042266338013e-9 2.7393094936056e-10 -1.7965802956951e-12 -5.9592037995211e-12 +FZonI 0 -10036.662156807 -9853.1881118249 -9311.0905380316 -8437.3697960976 -7282.3012372561 -5923.1654636559 -4463.4931090956 -3025.3456256839 -1734.2612246477 -699.19848136168 7.7324236375793 365.8216050754 409.59807571668 219.92144902099 -95.68664847387 -427.96312525634 -688.97904865818 -827.23750912874 -831.68802311266 -725.31062905933 -551.9021229939 -360.89063786645 -194.27988533224 -77.858189506659 -17.037087409483 2.4400834684027e-9 -17.037087407087 -77.858189506653 -194.27988533224 -360.89063786645 -551.90212299391 -725.31062905933 -831.68802311266 -827.23750912873 -688.97904865816 -427.96312525634 -95.686648473866 219.92144902099 409.59807571666 365.82160507539 7.7324236375757 -699.19848136171 -1734.2612246477 -3025.345625684 -4463.4931090956 -5923.1654636558 -7282.3012373289 -8437.369796031 -9311.0905380154 -9853.1881118242 -10036.662156807 +TXonI 0 -8334.6472534095 -8382.9087444826 -8491.8627028014 -8565.3216495059 -8473.6555259015 -8084.1679294185 -7288.9074334915 -6029.1397709384 -4315.2586581719 -2238.1644507829 33.263441361995 2272.4435985772 4232.4935045812 5694.0707377372 6511.7789560202 6645.6143092885 6167.3377808535 5239.3885711806 4073.0341694102 2879.0289288341 1825.361184191 1012.4849513539 469.11619715679 164.83205759843 32.708747131604 -3.4897833489104e-9 32.708747128206 164.83205759843 469.11619715679 1012.4849513539 1825.3611841911 2879.0289288341 4073.0341694102 5239.3885711806 6167.3377808535 6645.6143092885 6511.7789560202 5694.0707377372 4232.4935045812 2272.4435985771 33.263441361949 -2238.164450783 -4315.2586581719 -6029.1397709385 -7288.9074334916 -8084.1679294186 -8473.6555256484 -8565.3216497499 -8491.8627028558 -8382.9087444848 -8334.6472534095 +TYonI 0 -321.68226666534 -335.94585375391 -374.18607763939 -422.68719502891 -459.93020026832 -461.7085808627 -409.95497806455 -302.79437386996 -162.43419849842 -37.85904370208 -0.46743253249137 -132.5063646969 -510.10081853513 -1184.3712435125 -2165.0748913931 -3411.0213278734 -4830.1102455679 -6289.5039369327 -7633.8175756115 -8707.1791764521 -9374.5974310449 -9540.5270626101 -9170.3367485304 -8339.7426715299 -7361.8369160597 -6888.0361803871 -7361.8369160606 -8339.7426715299 -9170.3367485303 -9540.5270626102 -9374.5974310451 -8707.1791764521 -7633.8175756114 -6289.5039369327 -4830.1102455679 -3411.0213278734 -2165.0748913931 -1184.3712435125 -510.10081853511 -132.50636469688 -0.46743253250009 -37.859043702074 -162.43419849843 -302.79437386996 -409.95497806454 -461.7085808627 -459.93020023531 -422.68719505785 -374.18607764483 -335.94585375412 -321.68226666536 +TZonI 0 -5.6895477386806e-12 51.916848396059 209.57693339672 472.88636211222 825.80254208649 1221.7834799047 1575.4397580224 1764.8625345071 1646.7837976483 1083.8960241073 -20.061226331845 -1685.6873997197 -3834.3498024129 -6285.3204986496 -8778.4071984034 -11019.067241199 -12735.092545842 -13729.377789362 -13914.337133368 -13320.074762464 -12077.857155175 -10389.225348339 -8497.0332020053 -6678.841890946 -5281.4153944538 -4734.4169466554 -5281.4153944717 -6678.841890946 -8497.0332020054 -10389.225348339 -12077.857155175 -13320.074762464 -13914.337133368 -13729.377789362 -12735.092545842 -11019.067241199 -8778.4071984034 -6285.3204986495 -3834.3498024129 -1685.6873997197 -20.061226331811 1083.8960241073 1646.7837976483 1764.8625345071 1575.4397580224 1221.7834799047 825.80254205836 472.88636212921 209.57693339834 51.916848396074 -4.6495520651796e-12 +RotationalMotionSeries /backhoe/rmo1 +FXonI 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +FYonI 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +FZonI 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +TXonI 0 -2.1380500342641e-27 2.219077448508e-22 1.7499435095615e-20 1.2557600315773e-19 4.2585904143136e-19 3.3237816928643e-26 1.1173626100863e-25 2.742620763158e-25 4.5215786238704e-25 4.8368270794917e-25 1.8094579545789e-25 -5.0377350914629e-25 -1.3508944059995e-24 -1.9797406919212e-24 -2.1082323312801e-24 -1.7438819037249e-24 -1.1409422666853e-24 -5.9448948815627e-25 -2.4121231059811e-25 -7.3636047376538e-26 -1.6336645464348e-26 -2.3606524866358e-27 -2.130741738457e-28 1.017709553696e-28 1.7577542333176e-29 -4.2504482220342e-39 -4.4929077080791e-25 0.0 1.5980563038428e-28 -6.4381431453703e-28 -2.9369250272985e-27 -1.4782994359684e-26 -5.5871861081031e-26 -1.6061989465837e-25 -3.4734331102718e-25 -5.9603392209455e-25 -8.0043867717994e-25 -8.4668155377763e-25 -6.5689313021131e-25 -2.8129302688496e-25 1.1877981039867e-25 3.7992239106239e-25 4.3987881500593e-25 3.4490533839715e-25 1.9686865034854e-25 8.8634178476381e-26 2.5042470908994e-26 3.9155426029537e-19 1.1736594185589e-19 1.6752915722418e-20 2.1860278770329e-22 +TYonI 0 -346918.45238436 -343564.53146594 -333395.42223197 -316157.81799185 -291615.97363786 -259732.81790478 -220820.35715009 -175640.04294783 -125443.46133442 -71947.817263967 -17246.701473071 36335.739947251 86431.406179626 130833.24101007 167692.08969636 195678.30170363 214084.90817357 222857.8905003 222551.89975794 214225.63296198 199309.31010907 179500.69511405 156793.5237167 133861.31514714 115133.69521698 107469.02770069 115133.69521717 133861.31514714 156793.5237167 179500.69511405 199309.31010907 214225.63296198 222551.89975794 222857.8905003 214084.90817357 195678.30170363 167692.08969636 130833.24101007 86431.406179625 36335.739947251 -17246.701473072 -71947.817263969 -125443.46133442 -175640.04294783 -220820.35715009 -259732.81790478 -291615.97363776 -316157.81799198 -333395.42223199 -343564.53146594 -346918.45238436 +TZonI 0 0.0 -1.3743142265403e-24 -4.3188144602291e-22 -6.9329771527313e-21 -4.1502215650388e-20 -5.0233265793174e-27 -2.4150910079734e-26 -8.0282574548865e-26 -1.7255193737882e-25 -2.3423737424307e-25 -1.0912865319531e-25 3.7369669249974e-25 1.2238179912428e-24 2.1853091269969e-24 2.8420685035241e-24 2.891523802547e-24 2.3559606870907e-24 1.5578097833013e-24 8.2403173427507e-25 3.4068350145583e-25 1.0809459082509e-25 2.4222928567956e-26 3.8593814083374e-27 -4.1236645947844e-27 -2.8382102897922e-27 6.9417379858715e-23 7.2546074112357e-23 0.0 -2.8945360562531e-27 6.6062532458062e-27 1.943273542923e-26 6.8394793852874e-26 1.9086997039918e-25 4.2089094639441e-25 7.1723803175544e-25 9.8828152822768e-25 1.0790563827632e-24 9.3459761406157e-25 5.9510027394155e-25 2.0866177332009e-25 -7.1636263792697e-26 -1.8398843257376e-25 -1.6786602214648e-25 -1.0096141950842e-25 -4.2551603473818e-26 -1.3395537544846e-26 -2.4405212217413e-27 -2.1617480031377e-20 -2.8965605121312e-21 -1.0375379385171e-22 0.0 +TranslationalMotionSeries /backhoe/tmo1 +FXonI 0 -70390.701301922 -70565.094472323 -70464.138507635 -68912.580855043 -65270.563070761 -59714.800845892 -52879.187305959 -45443.922461631 -37917.375381432 -30595.698577282 -23624.77308668 -17097.654921171 -11136.898789736 -5928.5493406843 -1697.0748240434 1364.2256782458 3173.4228387383 3812.2489798602 3524.9152858048 2662.419187162 1595.627106936 633.3533250068 -22.033822944453 -273.47309103136 -153.84161705176 1.1375637496719e-10 -153.84161705105 -273.47309103137 -22.033822944474 633.35332500678 1595.6271069361 2662.419187162 3524.9152858048 3812.2489798605 3173.4228387382 1364.2256782456 -1697.0748240441 -5928.5493406854 -11136.898789736 -17097.65492117 -23624.77308668 -30595.698577282 -37917.375381433 -45443.922461631 -52879.18730596 -59714.800845893 -65270.563070859 -68912.580855229 -70464.138507743 -70565.09447233 -70390.701301922 +FYonI 0 -36305.58360025 -36758.390408502 -37798.098955028 -38766.259990467 -39153.716030415 -38782.08911108 -37707.784005287 -36064.100304238 -33943.656420321 -31334.100246385 -28100.742752315 -24012.122581469 -18804.762059114 -12278.608857935 -4407.7864019794 4554.3192251421 13998.10380471 22926.460547818 29972.732034922 33443.37424109 31307.58520994 20966.481682563 -1387.2377642433 -40853.540265367 -95118.960014697 -126495.12292596 -95118.960014244 -40853.540265368 -1387.2377642446 20966.481682562 31307.585209941 33443.37424109 29972.732034922 22926.46054782 13998.103804709 4554.3192251414 -4407.7864019811 -12278.608857937 -18804.762059113 -24012.122581468 -28100.742752314 -31334.100246385 -33943.656420322 -36064.100304238 -37707.784005287 -38782.08911108 -39153.716030495 -38766.259990553 -37798.098955084 -36758.390408505 -36305.58360025 +FZonI 0 7.0345447910023e-11 437.02221071956 1739.0363668976 3804.622989981 6360.9615404266 9024.8690794528 11429.418580751 13302.441014914 14469.983000728 14816.854065885 14248.132499957 12682.955688502 10089.269039089 6544.1464313572 2287.79477194 -2262.0172915767 -6552.8814821666 -9989.6783299311 -12041.848315835 -12317.911177217 -10557.776968968 -6498.9118206813 399.0954187062 11080.875668475 24840.495459413 32605.060280506 24840.495459295 11080.875668475 399.09541870656 -6498.9118206811 -10557.776968968 -12317.911177217 -12041.848315835 -9989.6783299319 -6552.8814821664 -2262.0172915764 2287.7947719409 6544.1464313584 10089.269039089 12682.955688501 14248.132499957 14816.854065885 14469.983000728 13302.441014914 11429.418580751 9024.8690794529 6360.9615404295 3804.6229899982 1739.0363669008 437.02221071959 6.8147152662835e-11 +TXonI 0 -3.5602080105936e-12 -9.1939198552287e-13 -1.3322631059907e-11 -7.2787871231962e-10 -9.2982056269535e-9 -3.1114950675488e-12 -1.7683805511194e-12 3.8426337238282e-12 7.576153640883e-13 2.3278297504756e-12 1.2976697352687e-13 3.4319221310982e-12 6.3981878753186e-14 1.592177915984e-13 1.7435754960029e-13 -3.1821187808782e-13 1.4248426406395e-12 7.6717214447356e-13 9.0617306309198e-12 -9.562248385554e-12 -1.6065685510977e-12 -1.9593507092452e-12 -2.2971219802549e-13 -4.8611262031937e-12 2.1761281082691e-11 8.3585491980227e-12 -5.8439982702026e-12 9.6497778604198e-12 1.7248980517543e-13 -3.5857254380432e-12 4.9039084302064e-12 -8.0525426915868e-13 -2.880318947024e-12 1.3967142774339e-13 3.1821655660377e-12 5.3114100770499e-14 1.9609443207535e-14 -1.5529016194619e-12 -1.4145112190719e-12 3.1617210415498e-12 -9.9870356442282e-13 -5.7093426776786e-13 6.4163476399424e-13 -1.355048346098e-12 -1.1575208883709e-12 -1.517364622431e-12 -3.2545962499905e-13 -8.2297090297671e-9 -6.5198134823677e-10 -1.2429036603324e-11 -1.0224189231525e-12 +TYonI 0 -1.6912731301646e-12 9.4889122423197e-13 2.3429558570662e-11 1.2461074258484e-9 1.4574163615175e-8 3.5271007386022e-15 3.8207733933818e-12 -1.9150192471404e-12 8.1141301110201e-12 8.2641708790345e-13 -1.1577423196135e-12 1.7154258926281e-12 -1.1174859356e-13 9.0783121882895e-14 -4.9084963851692e-13 1.9089873507035e-13 -5.3001048819092e-14 -2.3143025494014e-14 -2.1546814544855e-12 8.523566874196e-13 -3.7135598633468e-13 -9.5750617997595e-13 4.0216897283219e-14 1.9184623566426e-12 2.6741327731089e-12 -6.4722058861286e-13 5.7735161927799e-13 2.4694548549452e-12 -2.955175241009e-14 -1.1658059880723e-12 -2.8364727260672e-13 4.7865999330574e-13 -2.0514006631143e-12 -9.6098394201681e-13 -1.5812276727898e-13 4.8340258607551e-13 -1.4476238009575e-15 1.6615856249244e-12 -4.8297458988969e-13 1.9957492835533e-12 -1.5317271978406e-14 2.2020185127576e-13 3.2532891794957e-12 3.3062885340403e-12 4.4665093441735e-12 2.9746532919686e-12 1.2405642843033e-13 1.4102621839251e-8 1.1926980480636e-9 2.3485032729963e-11 -1.2408057703798e-12 +TZonI 0 -4.6872558022497e-13 -8.7456499184518e-12 -1.8833018632262e-11 -5.236643466828e-10 -5.6983638669984e-9 1.3352689710499e-12 6.0089687323722e-12 4.8706871364974e-12 1.3606815451215e-11 1.2281962258315e-12 -4.4189697826577e-12 2.9432004336421e-12 -4.6355140569754e-13 1.3291822629977e-13 -6.7392981861475e-13 2.0702124715074e-13 1.1489932539614e-12 3.5817010822939e-13 -8.0901350882224e-13 -1.1954702433103e-12 1.0726151297306e-12 -1.8959582769227e-12 6.8374345321927e-14 7.4416485791969e-12 1.0109535434473e-11 -5.1040067703102e-12 5.0848977677288e-12 7.57820902917e-12 -7.2060829200511e-14 -1.3142664457373e-12 -9.8312171124228e-13 -1.4600494505352e-12 -1.5668800783431e-12 2.5745133259989e-14 1.0443245933218e-12 8.0253030450745e-13 2.1529905971842e-13 1.1171319792495e-12 -1.6328597813037e-12 5.5489768055103e-12 -6.4985341685378e-12 -4.466649580737e-12 3.5461013553473e-12 3.3278110970467e-12 8.7139685074383e-12 1.2574090506023e-11 1.4499167429697e-12 -5.3844404268275e-9 -4.8230500114019e-10 -2.0907044555421e-11 -6.067092198598e-13 +TranslationalMotionSeries /backhoe/tmo2 +FXonI 0 33576.976519812 33637.389314153 33147.906117223 30689.24210048 25088.586302436 15859.094534476 3150.8187344797 -12391.127275477 -29716.985776472 -47448.997337755 -64003.390055496 -77778.039299817 -87383.464018711 -91866.629824137 -90869.692274195 -84679.847280246 -74155.837440139 -60550.208551066 -45272.612033032 -29653.312488349 -14777.92842948 -1517.5236381466 8928.4094964188 13488.462562019 7546.4809084151 -1.6899533393573e-9 7546.480908347 13488.462562019 8928.4094964195 -1517.5236381464 -14777.928429482 -29653.312488349 -45272.612033032 -60550.208551067 -74155.837440139 -84679.847280245 -90869.692274193 -91866.629824135 -87383.464018711 -77778.039299819 -64003.390055496 -47448.997337755 -29716.985776471 -12391.127275477 3150.8187344803 15859.094534477 25088.586302624 30689.242100559 33147.906117301 33637.389314158 33576.976519812 +FYonI 0 -6416.7475449712 -6301.5877497973 -5841.7461628947 -4858.7061659786 -3370.2061404676 -1665.5416926029 -223.60150450369 401.62954631402 -322.72755359523 -2830.5769689264 -7391.5640988932 -14059.509981171 -22639.678712581 -32678.887152216 -43477.537011507 -54114.750116142 -63465.685813102 -70167.619483999 -72439.227809091 -67520.012763571 -50116.323036941 -8228.4153468937 87164.8915658 297408.494586 664477.14428139 910730.02497838 664477.14427584 297408.49458599 87164.891565806 -8228.4153468925 -50116.323036947 -67520.01276357 -72439.227809092 -70167.619484 -63465.685813102 -54114.750116141 -43477.537011506 -32678.887152215 -22639.678712581 -14059.509981171 -7391.5640988932 -2830.5769689263 -322.7275535952 401.62954631402 -223.60150450374 -1665.541692603 -3370.2061404906 -4858.7061659924 -5841.7461629087 -6301.5877497983 -6416.7475449712 +FZonI 0 -2.0873901543871e-11 -208.32234904285 -818.08158653794 -1694.3349761661 -2445.0154107049 -2396.830431733 -681.02457740272 3627.1569609665 11340.56022319 22978.55260112 38600.530833088 57695.364102633 79163.445290969 101405.69693817 122499.72951539 140407.32545241 153126.27363243 158666.73699197 154660.71742457 137193.59862753 97781.036523887 15571.485805349 -161718.97792482 -546539.97599882 -1.218515043799e6 -1.6706010232042e6 -1.218515043788e6 -546539.97599882 -161718.97792483 15571.485805347 97781.036523899 137193.59862753 154660.71742457 158666.73699197 153126.27363243 140407.32545241 122499.72951539 101405.69693817 79163.445290969 57695.364102634 38600.530833088 22978.552601119 11340.560223189 3627.1569609663 -681.02457740285 -2396.8304317332 -2445.0154107217 -1694.3349761722 -818.08158654002 -208.32234904287 -2.0873901543871e-11 +TXonI 0 2.5155110407008e-12 3.8043305897438e-12 7.7269996545932e-13 -2.6976598212087e-11 1.0586203470302e-10 -2.7759686211245e-13 -4.7348780274323e-13 -6.5607784054805e-13 8.5534469539476e-12 -1.0234885046873e-11 3.38462060794e-11 4.001650949524e-12 4.9311912591422e-12 1.9573530842817e-11 4.2775964482173e-11 -6.0319592711191e-11 -1.2866386330087e-10 -1.9293162345209e-11 3.5649310593366e-11 7.7652480886843e-12 1.1675792192782e-11 -1.7850363017503e-12 -1.7261318448144e-11 -1.9328085791492e-10 -3.6517158477393e-10 2.3572553453487e-9 1.8647945895235e-9 8.4764064184234e-11 -1.9330272065527e-11 -2.0901521697758e-12 -1.2368465720919e-11 -2.3175926016964e-11 -2.659759834672e-11 -6.7355509748433e-12 9.2930670245193e-11 -3.6629846840971e-11 5.6391776401516e-11 3.7101687198016e-11 -3.0655543389296e-12 5.4791336146802e-12 -2.0576898305889e-11 -8.6012639159358e-12 -3.5999835437109e-12 6.4398589140022e-14 3.9436467071427e-13 -2.4541284367191e-13 3.4678344286416e-12 -2.333776501759e-10 -4.7540999790713e-11 -7.0361989024407e-13 1.2804912679571e-12 +TYonI 0 -7.2269886662244e-13 -7.5305522051352e-13 -8.0401626893218e-12 -3.9398534785051e-10 -4.05225257291e-9 1.8899401795039e-12 5.1346309687591e-14 1.1349669855236e-12 -2.2757878565295e-12 -1.199282561924e-11 2.9212751962089e-13 2.3860320857905e-11 -1.4776401649804e-11 -1.4026323879774e-11 2.1839999191386e-11 1.5303588544412e-11 1.2589757030434e-11 -4.0026946426231e-12 -4.7811295399914e-11 -2.1061752652518e-11 3.3451113620725e-12 1.7426892858103e-12 -7.3621586211758e-12 -4.0251378086306e-11 4.0620130902914e-11 3.6717862295496e-10 2.0995980506383e-10 -1.2837768305865e-10 -3.7382397516187e-11 2.4478926853517e-12 1.5577819751834e-11 1.2840066090633e-11 2.1727830349601e-11 -3.0526184828095e-11 3.1544029754955e-12 3.2181160393556e-11 6.7586381027949e-12 -7.7748207520157e-12 3.167487101894e-11 7.1456540201129e-13 2.9377551041292e-11 -1.9602050322143e-11 -8.1267677423927e-12 -2.5188055295936e-13 2.9645020232203e-13 7.0585964423529e-13 -3.2676423806588e-13 -4.450258788497e-9 -3.9149150149096e-10 -8.0720683907527e-12 -1.2125732056925e-13 +TZonI 0 4.9473684929544e-12 -2.1075224937266e-13 1.2674382058388e-11 6.6705021343448e-10 6.659147946895e-9 3.5663483505534e-12 -1.4329767427804e-12 -1.5965252809044e-13 1.085478172933e-11 -2.3234092519504e-11 5.5264853598352e-11 -1.2925301170953e-12 -3.140342924745e-12 -1.1473693259997e-11 4.4407120232246e-11 -5.719329361219e-11 -6.4921127666699e-11 -2.0950556542752e-11 7.4151375632909e-12 -2.4238349350853e-12 2.5729050663001e-12 3.4981116569616e-13 1.6279737755888e-11 -2.7252377115283e-11 6.9652379078489e-11 -2.6554291660437e-11 1.340745546973e-10 2.8757297408409e-11 -2.3682108977406e-12 2.1175028975737e-15 2.4618131913449e-12 -7.9835848705248e-12 -7.3075382127459e-13 -1.8607717410751e-11 3.9021038793028e-11 -1.1186950402798e-11 2.2957047320408e-11 4.437347833992e-11 9.6713364406308e-12 -6.8992663944308e-14 -2.9471143194953e-11 -2.7073848849563e-11 1.5847613840014e-12 3.9638156474026e-13 5.5484633301686e-13 -3.7654117203925e-12 5.3952151077254e-12 8.453042512694e-9 7.5702848035835e-10 1.5212960962276e-11 1.4075670200362e-11 +TranslationalMotionSeries /backhoe/tmo3 +FXonI 0 1691.1320901183 1722.4587449189 1528.2274242957 558.01985526166 -1520.0853472576 -4683.502836924 -8658.8630297506 -13035.634211409 -17333.11074686 -21050.150428591 -23723.456878403 -24997.683485613 -24694.037810997 -22856.623674318 -19757.436596719 -15850.842084262 -11683.530432499 -7781.1774060723 -4542.5837463204 -2171.8928040348 -668.99177810639 119.61164721469 407.41238603218 372.86035635408 151.40048561082 4.0109333050288e-10 151.40048561113 372.86035635409 407.41238603221 119.61164721469 -668.99177810653 -2171.8928040347 -4542.5837463205 -7781.1774060725 -11683.530432499 -15850.842084262 -19757.436596719 -22856.623674318 -24694.037810997 -24997.683485613 -23723.456878403 -21050.150428591 -17333.11074686 -13035.634211409 -8658.8630297506 -4683.502836924 -1520.0853470189 558.01985512004 1528.2274242897 1722.4587449196 1691.1320901183 +FYonI 0 -139.06455213524 -138.89434638184 -116.60777798003 -39.276821434829 97.824265788577 279.35478970736 498.12437702342 770.52598237014 1134.7507190021 1638.1389658565 2319.2970959193 3189.1623439775 4215.0179498457 5311.5740075085 6342.7245591959 7136.0170558522 7509.079087348 7303.2030893795 6413.8278328977 4800.1138004984 2444.5810460317 -782.05822283436 -5391.8507436816 -12473.226239417 -22100.643386731 -27741.830519281 -22100.643386656 -12473.226239417 -5391.850743682 -782.05822283441 2444.5810460322 4800.1138004983 6413.8278328977 7303.2030893796 7509.0790873479 7136.0170558522 6342.7245591959 5311.5740075084 4215.0179498457 3189.1623439775 2319.2970959193 1638.1389658565 1134.7507190021 770.52598237014 498.12437702341 279.35478970734 97.824265783918 -39.276821421317 -116.60777797752 -138.89434638181 -139.06455213524 +FZonI 0 9.7725811728845e-13 -10.667494094729 -37.71625005324 -30.807947458236 148.14035573102 707.83121332962 1871.5448372493 3815.8183932223 6614.6407902384 10194.145630554 14307.648827792 18543.157726891 22371.11029205 25229.96498059 26634.630077898 26282.219615421 24125.618963495 20389.921992356 15518.416756128 10048.448709932 4426.5141627501 -1227.3489650762 -7379.4010780375 -15107.95535634 -24446.330891723 -29633.382833332 -24446.330891715 -15107.95535634 -7379.4010780381 -1227.3489650762 4426.5141627509 10048.448709932 15518.416756129 20389.921992357 24125.618963495 26282.219615421 26634.630077898 25229.96498059 22371.11029205 18543.157726891 14307.648827792 10194.145630554 6614.6407902383 3815.8183932222 1871.5448372493 707.83121332961 148.14035570768 -30.80794745052 -37.716250053091 -10.667494094732 9.0661295218326e-13 +TXonI 0 2.0605646770886e-16 -3.8042537203023e-14 -2.8220655534816e-14 3.0387508920719e-13 -1.6899328331223e-11 1.4200311952561e-13 2.8881022845491e-13 6.794613034647e-13 -2.7768794448808e-13 -3.1871546829982e-12 2.9520042845925e-12 -2.3577203337332e-12 7.90180963622e-12 -1.0592755089912e-11 1.2264307074795e-11 -1.7860333130347e-11 -1.0297509247593e-11 -1.1127446545399e-11 -5.3292862682845e-14 -3.7851978951976e-13 -3.5082138438711e-14 -1.2380819922141e-12 3.5328664214543e-13 -2.9254257454745e-13 3.4616695571841e-12 6.0697397892543e-9 6.1166447361269e-9 1.0662400973505e-11 7.9981548881946e-12 -1.2864800681717e-13 -2.173916027442e-12 -4.3622903641425e-12 1.6521035443906e-12 4.9704452333437e-13 -6.7313110035296e-12 3.4930942644533e-13 -1.1299052602104e-11 2.8674693597745e-13 9.8189413443931e-12 -1.2160714104546e-12 6.474865817128e-14 -3.0051167976351e-13 1.3565135807988e-12 7.612840487056e-14 -6.6565452131828e-13 2.647492307841e-13 -1.7243270627285e-14 6.9390376267443e-12 1.4189987419601e-12 1.3691854750226e-13 4.0057521323491e-14 +TYonI 0 5.020068694668e-15 2.4131668724089e-14 3.2267381008901e-13 5.2495472720158e-12 -1.358961397815e-10 -5.23594400789e-13 1.6570921515076e-12 6.3952735569541e-12 -7.669847194265e-12 9.4334828606085e-12 -3.4830571371997e-13 -5.3790388595888e-12 8.7520552859724e-12 -1.1039601145965e-11 3.8853713299697e-13 -2.8422966134833e-12 -2.1163524241592e-11 6.3254974738745e-12 -4.1696319981433e-13 -7.7636592776799e-13 5.7716691548563e-13 -2.2599885654014e-14 -3.5553036742495e-13 2.8916031995276e-13 2.5270560937569e-12 -2.1425661483432e-10 -2.1826390711402e-10 1.8401672963635e-13 7.3862192966437e-13 -1.7873812695543e-13 -1.0195625099312e-13 -2.2363035809983e-13 -7.4382685305076e-12 5.9422959118108e-14 1.1647879572362e-12 -3.5625836827603e-13 4.8138143848117e-13 -1.1380373025916e-11 -3.4969105574e-13 -2.7619084360772e-11 1.2703296213111e-11 5.1307017752108e-15 7.5085455727462e-12 3.4458930940382e-12 -1.6016937946039e-12 -1.2281276117931e-13 -8.8342853535109e-16 5.132662474303e-11 1.3777526635984e-11 3.5909184310511e-13 -4.1584860890041e-15 +TZonI 0 -3.7980205558345e-13 3.9080415042113e-13 -1.3204689931454e-13 -1.2726369179025e-13 -8.4928392630843e-11 -4.5635976672025e-14 -5.2961057478229e-13 -7.5341710609685e-13 -1.5216681337577e-13 -4.0167093248607e-12 5.9037492385467e-12 -2.7369096410165e-12 6.8664097501108e-12 -7.8502687326663e-12 7.9988798052986e-12 -1.0657689292626e-11 1.5525308558363e-12 -6.6099443031234e-12 -1.4577400452374e-13 -2.5123195405078e-14 -2.6817679288277e-13 -1.0029547629796e-13 1.8718753213849e-13 1.3347815793709e-13 -9.6963211862691e-13 2.0149705965809e-10 2.3527962686432e-10 8.5043158418298e-13 -2.7883469242545e-13 7.0441627210019e-14 -3.1113458623214e-13 -1.0208130689911e-12 2.9852082785944e-12 1.3937547367059e-13 -3.9311894114703e-12 -1.73575975712e-13 -8.1479788659563e-12 2.2227274745873e-12 1.1304248490798e-11 2.9471087058424e-12 -1.9801581919766e-12 1.3983081001844e-13 4.2319197822431e-12 2.4270371545539e-12 -1.4954344922985e-12 1.3075187780899e-12 -3.4933185129729e-13 6.0576115123375e-11 1.1578568091433e-11 5.1015011400151e-13 -4.9695182174188e-13 diff --git a/MbDCode/ASMTAnimationParameters.cpp b/MbDCode/ASMTAnimationParameters.cpp index b736926..9ca46f1 100644 --- a/MbDCode/ASMTAnimationParameters.cpp +++ b/MbDCode/ASMTAnimationParameters.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "ASMTAnimationParameters.h" using namespace MbD; diff --git a/MbDCode/ASMTAnimationParameters.h b/MbDCode/ASMTAnimationParameters.h index ac32e2c..b429440 100644 --- a/MbDCode/ASMTAnimationParameters.h +++ b/MbDCode/ASMTAnimationParameters.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "ASMTItem.h" @@ -9,8 +17,9 @@ namespace MbD { public: void parseASMT(std::vector& lines) override; - int nframe, icurrent, istart, iend, framesPerSecond; - bool isForward; + int nframe = 1000000, icurrent = 0, istart = 0, iend = 1000000, framesPerSecond = 30; + bool isForward = true; + }; } diff --git a/MbDCode/ASMTAssembly.cpp b/MbDCode/ASMTAssembly.cpp index 304d873..af20a84 100644 --- a/MbDCode/ASMTAssembly.cpp +++ b/MbDCode/ASMTAssembly.cpp @@ -1,6 +1,16 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include #include #include +#include +#include #include "ASMTAssembly.h" #include "CREATE.h" @@ -8,16 +18,24 @@ #include "ASMTCylindricalJoint.h" #include "ASMTRotationalMotion.h" #include "ASMTTranslationalMotion.h" +#include "ASMTMarker.h" +#include "Part.h" +#include "ASMTTranslationalJoint.h" +#include "ASMTSphericalJoint.h" +#include "ASMTFixedJoint.h" +#include "ASMTGeneralMotion.h" +#include "ASMTUniversalJoint.h" +#include "ExternalSystem.h" +#include "ASMTPointInPlaneJoint.h" using namespace MbD; void MbD::ASMTAssembly::runFile(const char* chars) { - std::string str; - std::ifstream in(chars); + std::ifstream stream(chars); std::string line; std::vector lines; - while (std::getline(in, line)) { + while (std::getline(stream, line)) { lines.push_back(line); } assert(lines[0] == "freeCAD: 3D CAD with Motion Simulation by askoh.com"); @@ -27,265 +45,638 @@ void MbD::ASMTAssembly::runFile(const char* chars) lines.erase(lines.begin()); auto assembly = CREATE::With(); assembly->parseASMT(lines); + assembly->runKINEMATIC(); } } +ASMTAssembly* MbD::ASMTAssembly::root() +{ + return this; +} + void MbD::ASMTAssembly::parseASMT(std::vector& lines) { - size_t pos = lines[0].find_first_not_of("\t"); - auto leadingTabs = lines[0].substr(0, pos); - while (!lines.empty()) { - if (lines[0] == (leadingTabs + "Notes")) { - lines.erase(lines.begin()); - notes = lines[0]; - lines.erase(lines.begin()); + readNotes(lines); + readName(lines); + readPosition3D(lines); + readRotationMatrix(lines); + readVelocity3D(lines); + readOmega3D(lines); + initprincipalMassMarker(); + readRefPoints(lines); + readRefCurves(lines); + readRefSurfaces(lines); + readParts(lines); + readKinematicIJs(lines); + readConstraintSets(lines); + readForcesTorques(lines); + readConstantGravity(lines); + readSimulationParameters(lines); + readAnimationParameters(lines); + readTimeSeries(lines); + readAssemblySeries(lines); + readPartSeriesMany(lines); + readJointSeriesMany(lines); + readMotionSeriesMany(lines); +} + +void MbD::ASMTAssembly::readNotes(std::vector& lines) +{ + assert(lines[0] == "\tNotes"); + lines.erase(lines.begin()); + notes = readString(lines[0]); + lines.erase(lines.begin()); +} + +void MbD::ASMTAssembly::readParts(std::vector& lines) +{ + assert(lines[0] == "\tParts"); + lines.erase(lines.begin()); + parts = std::make_shared>>(); + auto it = std::find(lines.begin(), lines.end(), "\tKinematicIJs"); + std::vector partsLines(lines.begin(), it); + while (!partsLines.empty()) { + readPart(partsLines); + } + lines.erase(lines.begin(), it); + +} + +void MbD::ASMTAssembly::readPart(std::vector& lines) +{ + assert(lines[0] == "\t\tPart"); + lines.erase(lines.begin()); + auto part = CREATE::With(); + part->parseASMT(lines); + parts->push_back(part); + part->owner = this; +} + +void MbD::ASMTAssembly::readKinematicIJs(std::vector& lines) +{ + assert(lines[0] == "\tKinematicIJs"); + lines.erase(lines.begin()); + kinematicIJs = std::make_shared>>(); + auto it = std::find(lines.begin(), lines.end(), "\tConstraintSets"); + std::vector kinematicIJsLines(lines.begin(), it); + while (!kinematicIJsLines.empty()) { + readKinematicIJ(kinematicIJsLines); + } + lines.erase(lines.begin(), it); + +} + +void MbD::ASMTAssembly::readKinematicIJ(std::vector& lines) +{ + assert(false); +} + +void MbD::ASMTAssembly::readConstraintSets(std::vector& lines) +{ + assert(lines[0] == "\tConstraintSets"); + lines.erase(lines.begin()); + readJoints(lines); + readMotions(lines); + readGeneralConstraintSets(lines); +} + +void MbD::ASMTAssembly::readJoints(std::vector& lines) +{ + assert(lines[0] == "\t\tJoints"); + lines.erase(lines.begin()); + joints = std::make_shared>>(); + auto it = std::find(lines.begin(), lines.end(), "\t\tMotions"); + std::vector jointsLines(lines.begin(), it); + std::shared_ptr joint; + while (!jointsLines.empty()) { + if (jointsLines[0] == "\t\t\tRevoluteJoint") { + joint = CREATE::With(); } - else if (lines[0] == (leadingTabs + "Name")) { - lines.erase(lines.begin()); - name = lines[0]; - lines.erase(lines.begin()); + else if (jointsLines[0] == "\t\t\tCylindricalJoint") { + joint = CREATE::With(); } - else if (lines[0] == (leadingTabs + "Position3D")) { - lines.erase(lines.begin()); - std::istringstream iss(lines[0]); - position3D = std::make_shared>(); - double d; - while (iss >> d) { - position3D->push_back(d); - } - lines.erase(lines.begin()); + else if (jointsLines[0] == "\t\t\tTranslationalJoint") { + joint = CREATE::With(); } - else if (lines[0] == (leadingTabs + "RotationMatrix")) { - lines.erase(lines.begin()); - rotationMatrix = std::make_shared>(3, 0); - for (int i = 0; i < 3; i++) - { - auto& row = rotationMatrix->at(i); - std::istringstream iss(lines[0]); - double d; - while (iss >> d) { - row->push_back(d); - } - lines.erase(lines.begin()); - } + else if (jointsLines[0] == "\t\t\tSphericalJoint") { + joint = CREATE::With(); } - else if (lines[0] == (leadingTabs + "Velocity3D")) { - lines.erase(lines.begin()); - std::istringstream iss(lines[0]); - velocity3D = std::make_shared>(); - double d; - while (iss >> d) { - velocity3D->push_back(d); - } - lines.erase(lines.begin()); + else if (jointsLines[0] == "\t\t\tFixedJoint") { + joint = CREATE::With(); } - else if (lines[0] == (leadingTabs + "Omega3D")) { - lines.erase(lines.begin()); - std::istringstream iss(lines[0]); - omega3D = std::make_shared>(); - double d; - while (iss >> d) { - omega3D->push_back(d); - } - lines.erase(lines.begin()); + else if (jointsLines[0] == "\t\t\tUniversalJoint") { + joint = CREATE::With(); } - else if (lines[0] == (leadingTabs + "RefPoints")) { - lines.erase(lines.begin()); - refPoints = std::make_shared>>(); - auto it = std::find(lines.begin(), lines.end(), (leadingTabs + "RefCurves")); - std::vector refPointsLines(lines.begin(), it); - while (!refPointsLines.empty()) { - if (refPointsLines[0] == (leadingTabs + "\tRefPoint")) { - refPointsLines.erase(refPointsLines.begin()); - auto refPoint = CREATE::With(); - refPoint->parseASMT(refPointsLines); - refPoints->push_back(refPoint); - refPoint->owner = this; - } - else { - assert(false); - } - } - lines.erase(lines.begin(), it); + else if (jointsLines[0] == "\t\t\tPointInPlaneJoint") { + joint = CREATE::With(); } - else if (lines[0] == (leadingTabs + "RefCurves")) { - lines.erase(lines.begin()); - refCurves = std::make_shared>>(); - auto it = std::find(lines.begin(), lines.end(), (leadingTabs + "RefSurfaces")); - std::vector refCurvesLines(lines.begin(), it); - while (!refCurvesLines.empty()) { - if (refCurvesLines[0] == (leadingTabs + "\tRefCurve")) { - refCurvesLines.erase(refCurvesLines.begin()); - auto refCurve = CREATE::With(); - refCurve->parseASMT(refCurvesLines); - refCurves->push_back(refCurve); - refCurve->owner = this; - } - else { - assert(false); - } - } - lines.erase(lines.begin(), it); + else { + assert(false); } - else if (lines[0] == (leadingTabs + "RefSurfaces")) { - lines.erase(lines.begin()); - refSurfaces = std::make_shared>>(); - auto it = std::find(lines.begin(), lines.end(), (leadingTabs + "Parts")); - std::vector refSurfacesLines(lines.begin(), it); - while (!refSurfacesLines.empty()) { - if (refSurfacesLines[0] == (leadingTabs + "\tRefSurface")) { - refSurfacesLines.erase(refSurfacesLines.begin()); - auto refSurface = CREATE::With(); - refSurface->parseASMT(refSurfacesLines); - refSurfaces->push_back(refSurface); - refSurface->owner = this; - } - else { - assert(false); - } - } - lines.erase(lines.begin(), it); + jointsLines.erase(jointsLines.begin()); + joint->parseASMT(jointsLines); + joints->push_back(joint); + joint->owner = this; + } + lines.erase(lines.begin(), it); + +} + +void MbD::ASMTAssembly::readMotions(std::vector& lines) +{ + assert(lines[0] == "\t\tMotions"); + lines.erase(lines.begin()); + motions = std::make_shared>>(); + auto it = std::find(lines.begin(), lines.end(), "\t\tGeneralConstraintSets"); + std::vector motionsLines(lines.begin(), it); + std::shared_ptr motion; + while (!motionsLines.empty()) { + if (motionsLines[0] == "\t\t\tRotationalMotion") { + motion = CREATE::With(); } - else if (lines[0] == (leadingTabs + "Parts")) { - lines.erase(lines.begin()); - parts = std::make_shared>>(); - auto it = std::find(lines.begin(), lines.end(), (leadingTabs + "KinematicIJs")); - std::vector partsLines(lines.begin(), it); - while (!partsLines.empty()) { - if (partsLines[0] == (leadingTabs + "\tPart")) { - partsLines.erase(partsLines.begin()); - auto part = CREATE::With(); - part->parseASMT(partsLines); - parts->push_back(part); - part->owner = this; - } - else { - assert(false); - } - } - lines.erase(lines.begin(), it); + else if (motionsLines[0] == "\t\t\tTranslationalMotion") { + motion = CREATE::With(); } - else if (lines[0] == (leadingTabs + "KinematicIJs")) { - lines.erase(lines.begin()); - kinematicIJs = std::make_shared>>(); - auto it = std::find(lines.begin(), lines.end(), (leadingTabs + "ConstraintSets")); - std::vector kinematicIJsLines(lines.begin(), it); - while (!kinematicIJsLines.empty()) { - if (kinematicIJsLines[0] == (leadingTabs + "\tKinematicIJ")) { - kinematicIJsLines.erase(kinematicIJsLines.begin()); - auto kinematicIJ = CREATE::With(); - kinematicIJ->parseASMT(kinematicIJsLines); - kinematicIJs->push_back(kinematicIJ); - kinematicIJ->owner = this; - } - else { - assert(false); - } - } - lines.erase(lines.begin(), it); + else if (motionsLines[0] == "\t\t\tGeneralMotion") { + motion = CREATE::With(); } - else if (lines[0] == (leadingTabs + "ConstraintSets")) { - lines.erase(lines.begin()); - assert(lines[0] == (leadingTabs + "\tJoints")); - lines.erase(lines.begin()); - joints = std::make_shared>>(); - auto it = std::find(lines.begin(), lines.end(), (leadingTabs + "\tMotions")); - std::vector jointsLines(lines.begin(), it); - while (!jointsLines.empty()) { - if (jointsLines[0] == (leadingTabs + "\t\tRevoluteJoint")) { - jointsLines.erase(jointsLines.begin()); - auto joint = CREATE::With(); - joint->parseASMT(jointsLines); - joints->push_back(joint); - joint->owner = this; - } - else if (jointsLines[0] == (leadingTabs + "\t\tCylindricalJoint")) { - jointsLines.erase(jointsLines.begin()); - auto joint = CREATE::With(); - joint->parseASMT(jointsLines); - joints->push_back(joint); - joint->owner = this; - } - else { - assert(false); - } - } - lines.erase(lines.begin(), it); - assert(lines[0] == (leadingTabs + "\tMotions")); - lines.erase(lines.begin()); - motions = std::make_shared>>(); - it = std::find(lines.begin(), lines.end(), (leadingTabs + "\tGeneralConstraintSets")); - std::vector motionsLines(lines.begin(), it); - while (!motionsLines.empty()) { - if (motionsLines[0] == (leadingTabs + "\t\tRotationalMotion")) { - motionsLines.erase(motionsLines.begin()); - auto motion = CREATE::With(); - motion->parseASMT(motionsLines); - motions->push_back(motion); - motion->owner = this; - } - else if (motionsLines[0] == (leadingTabs + "\t\tTranslationalMotion")) { - motionsLines.erase(motionsLines.begin()); - auto motion = CREATE::With(); - motion->parseASMT(motionsLines); - motions->push_back(motion); - motion->owner = this; - } - else { - assert(false); - } - } - lines.erase(lines.begin(), it); - assert(lines[0] == (leadingTabs + "\tGeneralConstraintSets")); - lines.erase(lines.begin()); - constraintSets = std::make_shared>>(); - it = std::find(lines.begin(), lines.end(), (leadingTabs + "ForceTorques")); - std::vector generalConstraintSetsLines(lines.begin(), it); - while (!generalConstraintSetsLines.empty()) { - assert(false); - } - lines.erase(lines.begin(), it); + else { + assert(false); } - else if (lines[0] == (leadingTabs + "ForceTorques")) { - lines.erase(lines.begin()); - forceTorques = std::make_shared>>(); - auto it = std::find(lines.begin(), lines.end(), (leadingTabs + "ConstantGravity")); - std::vector forceTorquesLines(lines.begin(), it); - while (!forceTorquesLines.empty()) { - if (forceTorquesLines[0] == (leadingTabs + "\tForceTorque")) { - forceTorquesLines.erase(forceTorquesLines.begin()); - auto forceTorque = CREATE::With(); - forceTorque->parseASMT(forceTorquesLines); - forceTorques->push_back(forceTorque); - forceTorque->owner = this; - } - else { - assert(false); - } - } - lines.erase(lines.begin(), it); - } - else if (lines[0] == (leadingTabs + "ConstantGravity")) { - lines.erase(lines.begin()); - constantGravity = CREATE::With(); - constantGravity->parseASMT(lines); - constantGravity->owner = this; - } - else if (lines[0] == (leadingTabs + "SimulationParameters")) { - lines.erase(lines.begin()); - simulationParameters = CREATE::With(); - simulationParameters->parseASMT(lines); - simulationParameters->owner = this; - } - else if (lines[0] == (leadingTabs + "AnimationParameters")) { - lines.erase(lines.begin()); - animationParameters = CREATE::With(); - animationParameters->parseASMT(lines); - animationParameters->owner = this; + motionsLines.erase(motionsLines.begin()); + motion->parseASMT(motionsLines); + motions->push_back(motion); + motion->owner = this; + motion->initMarkers(); + } + lines.erase(lines.begin(), it); + +} + +void MbD::ASMTAssembly::readGeneralConstraintSets(std::vector& lines) +{ + assert(lines[0] == "\t\tGeneralConstraintSets"); + lines.erase(lines.begin()); + constraintSets = std::make_shared>>(); + auto it = std::find(lines.begin(), lines.end(), "\tForceTorques"); + std::vector generalConstraintSetsLines(lines.begin(), it); + while (!generalConstraintSetsLines.empty()) { + assert(false); + } + lines.erase(lines.begin(), it); +} + +void MbD::ASMTAssembly::readForcesTorques(std::vector& lines) +{ + assert(lines[0] == "\tForceTorques"); //Spelling is not consistent in asmt file. + lines.erase(lines.begin()); + forcesTorques = std::make_shared>>(); + auto it = std::find(lines.begin(), lines.end(), "\tConstantGravity"); + std::vector forcesTorquesLines(lines.begin(), it); + while (!forcesTorquesLines.empty()) { + if (forcesTorquesLines[0] == "\t\tForceTorque") { + forcesTorquesLines.erase(forcesTorquesLines.begin()); + auto forceTorque = CREATE::With(); + forceTorque->parseASMT(forcesTorquesLines); + forcesTorques->push_back(forceTorque); + forceTorque->owner = this; } else { assert(false); } } + lines.erase(lines.begin(), it); } + +void MbD::ASMTAssembly::readConstantGravity(std::vector& lines) +{ + assert(lines[0] == "\tConstantGravity"); + lines.erase(lines.begin()); + constantGravity = CREATE::With(); + constantGravity->parseASMT(lines); + constantGravity->owner = this; +} + +void MbD::ASMTAssembly::readSimulationParameters(std::vector& lines) +{ + assert(lines[0] == "\tSimulationParameters"); + lines.erase(lines.begin()); + simulationParameters = CREATE::With(); + simulationParameters->parseASMT(lines); + simulationParameters->owner = this; +} + +void MbD::ASMTAssembly::readAnimationParameters(std::vector& lines) +{ + assert(lines[0] == "\tAnimationParameters"); + lines.erase(lines.begin()); + animationParameters = CREATE::With(); + animationParameters->parseASMT(lines); + animationParameters->owner = this; +} + +void MbD::ASMTAssembly::readTimeSeries(std::vector& lines) +{ + assert(lines[0] == "TimeSeries"); + lines.erase(lines.begin()); + assert(lines[0].find("Number\tInput") != std::string::npos); + lines.erase(lines.begin()); + readTimes(lines); +} + +void MbD::ASMTAssembly::readTimes(std::vector& lines) +{ + std::string str = lines[0]; + std::string substr = "Time\tInput"; + auto pos = str.find(substr); + assert(pos != std::string::npos); + str.erase(0, pos + substr.length()); + times = readRowOfDoubles(str); + times->insert(times->begin(), times->at(0)); //The first element is the input state. + lines.erase(lines.begin()); +} + +void MbD::ASMTAssembly::readPartSeriesMany(std::vector& lines) +{ + assert(lines[0].find("PartSeries") != std::string::npos); + auto it = std::find_if(lines.begin(), lines.end(), [](const std::string& s) { + return s.find("JointSeries") != std::string::npos; + }); + std::vector partSeriesLines(lines.begin(), it); + while (!partSeriesLines.empty()) { + readPartSeries(partSeriesLines); + } + lines.erase(lines.begin(), it); +} + +void MbD::ASMTAssembly::readJointSeriesMany(std::vector& lines) +{ + assert(lines[0].find("JointSeries") != std::string::npos); + auto it = std::find_if(lines.begin(), lines.end(), [](const std::string& s) { + return s.find("MotionSeries") != std::string::npos; + }); + std::vector jointSeriesLines(lines.begin(), it); + while (!jointSeriesLines.empty()) { + readJointSeries(jointSeriesLines); + } + lines.erase(lines.begin(), it); +} + +void MbD::ASMTAssembly::readAssemblySeries(std::vector& lines) +{ + std::string str = lines[0]; + std::string substr = "AssemblySeries"; + auto pos = str.find(substr); + assert(pos != std::string::npos); + str.erase(0, pos + substr.length()); + auto seriesName = readString(str); + assert(fullName("") == seriesName); + lines.erase(lines.begin()); + //xs, ys, zs, bryxs, bryys, bryzs + readXs(lines); + readYs(lines); + readZs(lines); + readBryantxs(lines); + readBryantys(lines); + readBryantzs(lines); + readVXs(lines); + readVYs(lines); + readVZs(lines); + readOmegaXs(lines); + readOmegaYs(lines); + readOmegaZs(lines); + readAXs(lines); + readAYs(lines); + readAZs(lines); + readAlphaXs(lines); + readAlphaYs(lines); + readAlphaZs(lines); +} + +void MbD::ASMTAssembly::readPartSeries(std::vector& lines) +{ + std::string str = lines[0]; + std::string substr = "PartSeries"; + auto pos = str.find(substr); + assert(pos != std::string::npos); + str.erase(0, pos + substr.length()); + auto seriesName = readString(str); + auto it = std::find_if(parts->begin(), parts->end(), [&](const std::shared_ptr& prt) { + return prt->fullName("") == seriesName; + }); + auto& part = *it; + part->readPartSeries(lines); +} + +void MbD::ASMTAssembly::readJointSeries(std::vector& lines) +{ + std::string str = lines[0]; + std::string substr = "JointSeries"; + auto pos = str.find(substr); + assert(pos != std::string::npos); + str.erase(0, pos + substr.length()); + auto seriesName = readString(str); + auto it = std::find_if(joints->begin(), joints->end(), [&](const std::shared_ptr& jt) { + return jt->fullName("") == seriesName; + }); + auto& joint = *it; + joint->readJointSeries(lines); +} + +void MbD::ASMTAssembly::readMotionSeriesMany(std::vector& lines) +{ + while (!lines.empty()) { + assert(lines[0].find("MotionSeries") != std::string::npos); + readMotionSeries(lines); + } +} + +void MbD::ASMTAssembly::readMotionSeries(std::vector& lines) +{ + std::string str = lines[0]; + std::string substr = "MotionSeries"; + auto pos = str.find(substr); + assert(pos != std::string::npos); + str.erase(0, pos + substr.length()); + auto seriesName = readString(str); + auto it = std::find_if(motions->begin(), motions->end(), [&](const std::shared_ptr& jt) { + return jt->fullName("") == seriesName; + }); + auto& motion = *it; + motion->readMotionSeries(lines); +} + +void MbD::ASMTAssembly::outputFor(AnalysisType type) +{ + assert(false); +} + +void MbD::ASMTAssembly::logString(std::string& str) +{ + assert(false); +} + +void MbD::ASMTAssembly::logString(double value) +{ + assert(false); +} + +void MbD::ASMTAssembly::preMbDrun(std::shared_ptr mbdSys) +{ + calcCharacteristicDimensions(); + deleteMbD(); + createMbD(mbdSys, mbdUnits); + std::static_pointer_cast(mbdObject)->asFixed(); +} + +void MbD::ASMTAssembly::postMbDrun() +{ + assert(false); +} + +void MbD::ASMTAssembly::calcCharacteristicDimensions() +{ + auto unitTime = this->calcCharacteristicTime(); + auto unitMass = this->calcCharacteristicMass(); + auto unitLength = this->calcCharacteristicLength(); + auto unitAngle = 1.0; + this->mbdUnits = std::make_shared(unitTime, unitMass, unitLength, unitAngle); +} + +double MbD::ASMTAssembly::calcCharacteristicTime() +{ + return std::abs(simulationParameters->hout); +} + +double MbD::ASMTAssembly::calcCharacteristicMass() +{ + auto n = parts->size(); + double sumOfSquares = 0.0; + for (int i = 0; i < n; i++) + { + auto mass = parts->at(i)->principalMassMarker->mass; + sumOfSquares += mass * mass; + } + auto unitMass = std::sqrt(sumOfSquares / n); + if (unitMass <= 0) unitMass = 1.0; + return unitMass; +} + +double MbD::ASMTAssembly::calcCharacteristicLength() +{ + auto markerMap = this->markerMap(); + auto lengths = std::make_shared>(); + auto connectorList = this->connectorList(); + for (auto& connector : *connectorList) { + auto& mkrI = markerMap->at(connector->markerI); + lengths->push_back(mkrI->rpmp()->length()); + auto& mkrJ = markerMap->at(connector->markerJ); + lengths->push_back(mkrJ->rpmp()->length()); + } + auto n = lengths->size(); + double sumOfSquares = std::accumulate(lengths->begin(), lengths->end(), 0.0, [](double sum, double l) { return sum + l * l; }); + auto unitLength = std::sqrt(sumOfSquares / std::max((int)n, 1)); + if (unitLength <= 0) unitLength = 1.0; + return unitLength; +} + +std::shared_ptr>> MbD::ASMTAssembly::connectorList() +{ + auto list = std::make_shared>>(); + list->insert(list->end(), joints->begin(), joints->end()); + list->insert(list->end(), motions->begin(), motions->end()); + list->insert(list->end(), kinematicIJs->begin(), kinematicIJs->end()); + list->insert(list->end(), forcesTorques->begin(), forcesTorques->end()); + return list; +} + +std::shared_ptr>> MbD::ASMTAssembly::markerMap() +{ + auto answer = std::make_shared>>(); + for (auto& refPoint : *refPoints) { + for (auto& marker : *refPoint->markers) { + answer->insert(std::make_pair(marker->fullName(""), marker)); + } + } + for (auto& part : *parts) { + for (auto& refPoint : *part->refPoints) { + for (auto& marker : *refPoint->markers) { + answer->insert(std::make_pair(marker->fullName(""), marker)); + } + } + } + return answer; +} + +void MbD::ASMTAssembly::deleteMbD() +{ + ASMTSpatialContainer::deleteMbD(); + constantGravity->deleteMbD(); + asmtTime->deleteMbD(); + for (auto& part : *parts) { part->deleteMbD(); } + for (auto& joint : *joints) { joint->deleteMbD(); } + for (auto& motion : *motions) { motion->deleteMbD(); } + for (auto& forceTorque : *forcesTorques) { forceTorque->deleteMbD(); } + + +} + +void MbD::ASMTAssembly::createMbD(std::shared_ptr mbdSys, std::shared_ptr mbdUnits) +{ + ASMTSpatialContainer::createMbD(mbdSys, mbdUnits); + constantGravity->createMbD(mbdSys, mbdUnits); + asmtTime->createMbD(mbdSys, mbdUnits); + std::sort(parts->begin(), parts->end(), [](std::shared_ptr a, std::shared_ptr b) { return a->name < b->name; }); + auto jointsMotions = std::make_shared>>(); + jointsMotions->insert(jointsMotions->end(), joints->begin(), joints->end()); + jointsMotions->insert(jointsMotions->end(), motions->begin(), motions->end()); + std::sort(jointsMotions->begin(), jointsMotions->end(), [](std::shared_ptr a, std::shared_ptr b) { return a->name < b->name; }); + std::sort(forcesTorques->begin(), forcesTorques->end(), [](std::shared_ptr a, std::shared_ptr b) { return a->name < b->name; }); + for (auto& part : *parts) { part->createMbD(mbdSys, mbdUnits); } + for (auto& joint : *jointsMotions) { joint->createMbD(mbdSys, mbdUnits); } + for (auto& forceTorque : *forcesTorques) { forceTorque->createMbD(mbdSys, mbdUnits); } + + auto mbdSysSolver = mbdSys->systemSolver; + mbdSysSolver->errorTolPosKine = simulationParameters->errorTolPosKine; + mbdSysSolver->errorTolAccKine = simulationParameters->errorTolAccKine; + mbdSysSolver->iterMaxPosKine = simulationParameters->iterMaxPosKine; + mbdSysSolver->iterMaxAccKine = simulationParameters->iterMaxAccKine; + mbdSysSolver->tstart = simulationParameters->tstart / mbdUnits->time; + mbdSysSolver->tend = simulationParameters->tend / mbdUnits->time; + mbdSysSolver->hmin = simulationParameters->hmin / mbdUnits->time; + mbdSysSolver->hmax = simulationParameters->hmax / mbdUnits->time; + mbdSysSolver->hout = simulationParameters->hout / mbdUnits->time; + mbdSysSolver->corAbsTol = simulationParameters->corAbsTol; + mbdSysSolver->corRelTol = simulationParameters->corRelTol; + mbdSysSolver->intAbsTol = simulationParameters->intAbsTol; + mbdSysSolver->intRelTol = simulationParameters->intRelTol; + mbdSysSolver->iterMaxDyn = simulationParameters->iterMaxDyn; + mbdSysSolver->orderMax = simulationParameters->orderMax; + mbdSysSolver->translationLimit = simulationParameters->translationLimit / mbdUnits->length; + mbdSysSolver->rotationLimit = simulationParameters->rotationLimit; + animationParameters = nullptr; +} + +void MbD::ASMTAssembly::runKINEMATIC() +{ + auto mbdSystem = CREATE::With(); + mbdObject = mbdSystem; + mbdSystem->externalSystem->asmtAssembly = this; + mbdSystem->runKINEMATIC(mbdSystem); +} +// +//void MbD::ASMTAssembly::initprincipalMassMarker() +//{ +// //Choose first refPoint as center of mass +// assert(!refPoints->empty()); +// auto refPoint = refPoints->at(0); +// principalMassMarker = CREATE::With(); +// principalMassMarker->position3D = refPoint->position3D; +// principalMassMarker->rotationMatrix = refPoint->rotationMatrix; +//} + +void MbD::ASMTAssembly::initprincipalMassMarker() +{ + principalMassMarker = CREATE::With(); + principalMassMarker->mass = 0.0; + principalMassMarker->density = 0.0; + principalMassMarker->momentOfInertias = std::make_shared>(3, 0); + principalMassMarker->position3D = std::make_shared>(3, 0); + principalMassMarker->rotationMatrix = std::make_shared>(3, 3); + principalMassMarker->rotationMatrix->identity(); +} + +std::shared_ptr MbD::ASMTAssembly::spatialContainerAt(std::shared_ptr self, std::string& longname) +{ + if ((self->fullName("")) == longname) return self; + auto it = std::find_if(parts->begin(), parts->end(), [&](const std::shared_ptr& prt) { + return prt->fullName("") == longname; + }); + auto& part = *it; + return part; +} + +std::shared_ptr MbD::ASMTAssembly::markerAt(std::string& longname) +{ + for (auto& refPoint : *refPoints) { + for (auto& marker : *refPoint->markers) { + if (marker->fullName("") == longname) return marker; + } + } + for (auto& part : *parts) { + for (auto& refPoint : *part->refPoints) { + for (auto& marker : *refPoint->markers) { + if (marker->fullName("") == longname) return marker; + } + } + } + return nullptr; +} + +std::shared_ptr MbD::ASMTAssembly::jointAt(std::string& longname) +{ + auto it = std::find_if(joints->begin(), joints->end(), [&](const std::shared_ptr& jt) { + return jt->fullName("") == longname; + }); + auto& joint = *it; + return joint; +} + +std::shared_ptr MbD::ASMTAssembly::motionAt(std::string& longname) +{ + auto it = std::find_if(motions->begin(), motions->end(), [&](const std::shared_ptr& mt) { + return mt->fullName("") == longname; + }); + auto& motion = *it; + return motion; +} + +std::shared_ptr MbD::ASMTAssembly::forceTorqueAt(std::string& longname) +{ + auto it = std::find_if(forcesTorques->begin(), forcesTorques->end(), [&](const std::shared_ptr& mt) { + return mt->fullName("") == longname; + }); + auto& forceTorque = *it; + return forceTorque; +} + +FColDsptr MbD::ASMTAssembly::vOcmO() +{ + return std::make_shared>(3, 0.0); +} + +FColDsptr MbD::ASMTAssembly::omeOpO() +{ + return std::make_shared>(3, 0.0); +} + +std::shared_ptr MbD::ASMTAssembly::geoTime() +{ + return asmtTime; +} + +void MbD::ASMTAssembly::updateFromMbD() +{ + ASMTSpatialContainer::updateFromMbD(); + auto geoTime = asmtTime->getValue(); + auto it = std::find_if(times->begin(), times->end(), [&](double t) { + return Numeric::equaltol(t, geoTime, 1.0e-9); + }); + assert(it != times->end()); + for (auto& part : *parts) part->updateFromMbD(); + for (auto& joint : *joints) joint->updateFromMbD(); + for (auto& motion : *motions) motion->updateFromMbD(); + for (auto& forceTorque : *forcesTorques) forceTorque->updateFromMbD(); +} + +void MbD::ASMTAssembly::compareResults(AnalysisType type) +{ + ASMTSpatialContainer::compareResults(type); + for (auto& part : *parts) part->compareResults(type); + for (auto& joint : *joints) joint->compareResults(type); + for (auto& motion : *motions) motion->compareResults(type); + for (auto& forceTorque : *forcesTorques) forceTorque->compareResults(type); +} + + diff --git a/MbDCode/ASMTAssembly.h b/MbDCode/ASMTAssembly.h index 05fe34d..e7bba63 100644 --- a/MbDCode/ASMTAssembly.h +++ b/MbDCode/ASMTAssembly.h @@ -1,7 +1,15 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include -#include "ASMTItem.h" +#include "ASMTSpatialContainer.h" #include "ASMTRefPoint.h" #include "ASMTRefCurve.h" #include "ASMTRefSurface.h" @@ -16,30 +24,80 @@ #include "FullMatrix.h" #include "ASMTJoint.h" #include "ASMTMotion.h" +#include "Units.h" +#include "ASMTTime.h" +#include "SystemSolver.h" namespace MbD { - class ASMTAssembly : public ASMTItem + class ASMTAssembly : public ASMTSpatialContainer { // public: static void runFile(const char* chars); + ASMTAssembly* root() override; void parseASMT(std::vector& lines) override; + void readNotes(std::vector& lines); + void readParts(std::vector& lines); + void readPart(std::vector& lines); + void readKinematicIJs(std::vector& lines); + void readKinematicIJ(std::vector& lines); + void readConstraintSets(std::vector& lines); + void readJoints(std::vector& lines); + void readMotions(std::vector& lines); + void readGeneralConstraintSets(std::vector& lines); + void readForcesTorques(std::vector& lines); + void readConstantGravity(std::vector& lines); + void readSimulationParameters(std::vector& lines); + void readAnimationParameters(std::vector& lines); + void readTimeSeries(std::vector& lines); + void readTimes(std::vector& lines); + void readAssemblySeries(std::vector& lines); + void readPartSeriesMany(std::vector& lines); + void readPartSeries(std::vector& lines); + void readJointSeriesMany(std::vector& lines); + void readJointSeries(std::vector& lines); + void readMotionSeriesMany(std::vector& lines); + void readMotionSeries(std::vector& lines); - std::string notes, name; - FColDsptr position3D, velocity3D, omega3D; - FMatDsptr rotationMatrix; - std::shared_ptr>> refPoints; - std::shared_ptr>> refCurves; - std::shared_ptr>> refSurfaces; + void outputFor(AnalysisType type); + void logString(std::string& str); + void logString(double value); + void preMbDrun(std::shared_ptr mbdSys); + void postMbDrun(); + void calcCharacteristicDimensions(); + double calcCharacteristicTime(); + double calcCharacteristicMass(); + double calcCharacteristicLength(); + std::shared_ptr>> connectorList(); + std::shared_ptr>>markerMap(); + void deleteMbD(); + void createMbD(std::shared_ptr mbdSys, std::shared_ptr mbdUnits) override; + void runKINEMATIC(); + void initprincipalMassMarker(); + std::shared_ptr spatialContainerAt(std::shared_ptr self, std::string& longname); + std::shared_ptr markerAt(std::string& longname); + std::shared_ptr jointAt(std::string& longname); + std::shared_ptr motionAt(std::string& longname); + std::shared_ptr forceTorqueAt(std::string& longname); + FColDsptr vOcmO() override; + FColDsptr omeOpO() override; + std::shared_ptr geoTime(); + void updateFromMbD() override; + void compareResults(AnalysisType type) override; + + std::string notes; std::shared_ptr>> parts; std::shared_ptr>> kinematicIJs; std::shared_ptr>> constraintSets; std::shared_ptr>> joints; std::shared_ptr>> motions; - std::shared_ptr>> forceTorques; + std::shared_ptr>> forcesTorques; std::shared_ptr constantGravity; std::shared_ptr simulationParameters; std::shared_ptr animationParameters; + std::shared_ptr> times; + std::shared_ptr asmtTime = std::make_shared(); + std::shared_ptr mbdUnits; }; } diff --git a/MbDCode/ASMTConstantGravity.cpp b/MbDCode/ASMTConstantGravity.cpp index 655a0c3..6cc073c 100644 --- a/MbDCode/ASMTConstantGravity.cpp +++ b/MbDCode/ASMTConstantGravity.cpp @@ -1,4 +1,17 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "ASMTConstantGravity.h" +#include "ASMTAssembly.h" +#include "Units.h" +#include "ConstantGravity.h" +#include "System.h" +#include "Part.h" using namespace MbD; @@ -7,3 +20,11 @@ void MbD::ASMTConstantGravity::parseASMT(std::vector& lines) g = readColumnOfDoubles(lines[0]); lines.erase(lines.begin()); } + +void MbD::ASMTConstantGravity::createMbD(std::shared_ptr mbdSys, std::shared_ptr mbdUnits) +{ + auto mbdGravity = CREATE::With(); + mbdObject = mbdGravity; + mbdGravity->gXYZ = g->times(1.0 / mbdUnits->acceleration); + mbdSys->addForceTorque(mbdGravity); +} diff --git a/MbDCode/ASMTConstantGravity.h b/MbDCode/ASMTConstantGravity.h index fc3cbfd..2365927 100644 --- a/MbDCode/ASMTConstantGravity.h +++ b/MbDCode/ASMTConstantGravity.h @@ -1,13 +1,26 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "ASMTItem.h" +//#include "Units.h" namespace MbD { + class System; + class Units; + class ASMTConstantGravity : public ASMTItem { // public: void parseASMT(std::vector& lines) override; + void createMbD(std::shared_ptr mbdSys, std::shared_ptr mbdUnits) override; FColDsptr g; }; diff --git a/MbDCode/ASMTConstraintSet.cpp b/MbDCode/ASMTConstraintSet.cpp index 7d115bc..6fde04f 100644 --- a/MbDCode/ASMTConstraintSet.cpp +++ b/MbDCode/ASMTConstraintSet.cpp @@ -1,3 +1,72 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "ASMTConstraintSet.h" +#include "ASMTAssembly.h" +#include "ASMTMarker.h" +#include "Joint.h" using namespace MbD; + +void MbD::ASMTConstraintSet::createMbD(std::shared_ptr mbdSys, std::shared_ptr mbdUnits) +{ + //self dataSeries : OrderedCollection new. + //self discontinuities : OrderedCollection new. + auto mbdJt = this->mbdClassNew(); + mbdObject = mbdJt; + mbdJt->name = fullName(""); + auto mrkI = std::static_pointer_cast(root()->markerAt(markerI)->mbdObject); + auto mrkJ = std::static_pointer_cast(root()->markerAt(markerJ)->mbdObject); + mbdJt->connectsItoJ(mrkI, mrkJ); + mbdSys->addJoint(mbdJt); +} + +std::shared_ptr MbD::ASMTConstraintSet::mbdClassNew() +{ + assert(false); + return std::shared_ptr(); +} + +void MbD::ASMTConstraintSet::updateFromMbD() +{ + //" + //MbD returns aFIeO and aTIeO. + //GEO needs aFImO and aTImO. + //For Motion rImIeO is not zero and is changing. + //aFImO = aFIeO. + //aTImO = aTIeO + (rImIeO cross : aFIeO). + //" + auto mbdUnts = mbdUnits(); + auto mbdJoint = std::static_pointer_cast(mbdObject); + auto aFIeO = mbdJoint->aFX()->times(mbdUnts->force); + auto aTIeO = mbdJoint->aTX()->times(mbdUnts->torque); + auto rImIeO = mbdJoint->frmI->rmeO()->times(mbdUnts->length); + auto aFIO = aFIeO; + auto aTIO = aTIeO->plusFullColumn(rImIeO->cross(aFIeO)); + fxs->push_back(aFIO->at(0)); + fys->push_back(aFIO->at(1)); + fzs->push_back(aFIO->at(2)); + txs->push_back(aTIO->at(0)); + tys->push_back(aTIO->at(1)); + tzs->push_back(aTIO->at(2)); +} + +void MbD::ASMTConstraintSet::compareResults(AnalysisType type) +{ + auto mbdUnts = mbdUnits(); + auto factor = 1.0e-6; + auto forceTol = mbdUnts->force * factor; + auto torqueTol = mbdUnts->torque * factor; + auto i = fxs->size() - 1; + //assert(Numeric::equaltol(fxs->at(i), infxs->at(i), forceTol)); + //assert(Numeric::equaltol(fys->at(i), infys->at(i), forceTol)); + //assert(Numeric::equaltol(fzs->at(i), infzs->at(i), forceTol)); + //assert(Numeric::equaltol(txs->at(i), intxs->at(i), torqueTol)); + //assert(Numeric::equaltol(tys->at(i), intys->at(i), torqueTol)); + //assert(Numeric::equaltol(tzs->at(i), intzs->at(i), torqueTol)); +} diff --git a/MbDCode/ASMTConstraintSet.h b/MbDCode/ASMTConstraintSet.h index 22b74f8..9ff6624 100644 --- a/MbDCode/ASMTConstraintSet.h +++ b/MbDCode/ASMTConstraintSet.h @@ -1,13 +1,26 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once -#include "ASMTItem.h" +#include "ASMTItemIJ.h" namespace MbD { - class ASMTConstraintSet : public ASMTItem + class Joint; + + class ASMTConstraintSet : public ASMTItemIJ { // public: - + void createMbD(std::shared_ptr mbdSys, std::shared_ptr mbdUnits) override; + virtual std::shared_ptr mbdClassNew(); + void updateFromMbD() override; + void compareResults(AnalysisType type) override; }; } diff --git a/MbDCode/ASMTCylindricalJoint.cpp b/MbDCode/ASMTCylindricalJoint.cpp index 98a9b31..1af9b56 100644 --- a/MbDCode/ASMTCylindricalJoint.cpp +++ b/MbDCode/ASMTCylindricalJoint.cpp @@ -1,4 +1,16 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "ASMTCylindricalJoint.h" using namespace MbD; +std::shared_ptr MbD::ASMTCylindricalJoint::mbdClassNew() +{ + return CREATE::With(); +} diff --git a/MbDCode/ASMTCylindricalJoint.h b/MbDCode/ASMTCylindricalJoint.h index 00e37e2..fedca5e 100644 --- a/MbDCode/ASMTCylindricalJoint.h +++ b/MbDCode/ASMTCylindricalJoint.h @@ -1,12 +1,22 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "ASMTJoint.h" +#include "CylindricalJoint.h" namespace MbD { class ASMTCylindricalJoint : public ASMTJoint { // public: + std::shared_ptr mbdClassNew() override; }; diff --git a/MbDCode/ASMTExtrusion.cpp b/MbDCode/ASMTExtrusion.cpp index f81fafd..b45ea26 100644 --- a/MbDCode/ASMTExtrusion.cpp +++ b/MbDCode/ASMTExtrusion.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "ASMTExtrusion.h" using namespace MbD; diff --git a/MbDCode/ASMTExtrusion.h b/MbDCode/ASMTExtrusion.h index 5a89174..48fcc3e 100644 --- a/MbDCode/ASMTExtrusion.h +++ b/MbDCode/ASMTExtrusion.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "ASMTItem.h" diff --git a/MbDCode/ASMTFixedJoint.cpp b/MbDCode/ASMTFixedJoint.cpp new file mode 100644 index 0000000..fcc4720 --- /dev/null +++ b/MbDCode/ASMTFixedJoint.cpp @@ -0,0 +1,16 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#include "ASMTFixedJoint.h" + +using namespace MbD; + +std::shared_ptr MbD::ASMTFixedJoint::mbdClassNew() +{ + return CREATE::With(); +} diff --git a/MbDCode/ASMTFixedJoint.h b/MbDCode/ASMTFixedJoint.h new file mode 100644 index 0000000..9c72716 --- /dev/null +++ b/MbDCode/ASMTFixedJoint.h @@ -0,0 +1,22 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#pragma once + +#include "ASMTJoint.h" +#include "FixedJoint.h" + +namespace MbD { + class ASMTFixedJoint : public ASMTJoint + { + // + public: + virtual std::shared_ptr mbdClassNew() override; + + }; +} diff --git a/MbDCode/ASMTForceTorque.cpp b/MbDCode/ASMTForceTorque.cpp index 385f360..347c969 100644 --- a/MbDCode/ASMTForceTorque.cpp +++ b/MbDCode/ASMTForceTorque.cpp @@ -1,3 +1,21 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "ASMTForceTorque.h" using namespace MbD; + +void MbD::ASMTForceTorque::updateFromMbD() +{ + assert(false); +} + +void MbD::ASMTForceTorque::compareResults(AnalysisType type) +{ + assert(false); +} diff --git a/MbDCode/ASMTForceTorque.h b/MbDCode/ASMTForceTorque.h index d4dead2..0f27d8b 100644 --- a/MbDCode/ASMTForceTorque.h +++ b/MbDCode/ASMTForceTorque.h @@ -1,12 +1,22 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once -#include "ASMTItem.h" +#include "ASMTItemIJ.h" namespace MbD { - class ASMTForceTorque : public ASMTItem + class ASMTForceTorque : public ASMTItemIJ { // public: + void updateFromMbD() override; + void compareResults(AnalysisType type) override; }; diff --git a/MbDCode/ASMTGeneralMotion.cpp b/MbDCode/ASMTGeneralMotion.cpp index 48b279b..46a9def 100644 --- a/MbDCode/ASMTGeneralMotion.cpp +++ b/MbDCode/ASMTGeneralMotion.cpp @@ -1,7 +1,147 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "ASMTGeneralMotion.h" +#include "ASMTAssembly.h" +#include "SymbolicParser.h" +#include "BasicUserFunction.h" +#include "CREATE.h" +#include "Constant.h" +#include "EulerAngles.h" using namespace MbD; void MbD::ASMTGeneralMotion::parseASMT(std::vector& lines) { + readName(lines); + readMarkerI(lines); + readMarkerJ(lines); + readrIJI(lines); + readangIJJ(lines); + readRotationOrder(lines); +} + +void MbD::ASMTGeneralMotion::readrIJI(std::vector& lines) +{ + rIJI = std::make_shared>(3); + + assert(lines[0].find("rIJI1") != std::string::npos); + lines.erase(lines.begin()); + rIJI->at(0) = readString(lines[0]); + lines.erase(lines.begin()); + assert(lines[0].find("rIJI2") != std::string::npos); + lines.erase(lines.begin()); + rIJI->at(1) = readString(lines[0]); + lines.erase(lines.begin()); + assert(lines[0].find("rIJI3") != std::string::npos); + lines.erase(lines.begin()); + rIJI->at(2) = readString(lines[0]); + lines.erase(lines.begin()); +} + +void MbD::ASMTGeneralMotion::readangIJJ(std::vector& lines) +{ + angIJJ = std::make_shared>(3); + + assert(lines[0].find("angIJJ1") != std::string::npos); + lines.erase(lines.begin()); + angIJJ->at(0) = readString(lines[0]); + lines.erase(lines.begin()); + assert(lines[0].find("angIJJ2") != std::string::npos); + lines.erase(lines.begin()); + angIJJ->at(1) = readString(lines[0]); + lines.erase(lines.begin()); + assert(lines[0].find("angIJJ3") != std::string::npos); + lines.erase(lines.begin()); + angIJJ->at(2) = readString(lines[0]); + lines.erase(lines.begin()); +} + +void MbD::ASMTGeneralMotion::readRotationOrder(std::vector& lines) +{ + assert(lines[0].find("RotationOrder") != std::string::npos); + lines.erase(lines.begin()); + rotationOrder = readString(lines[0]); + lines.erase(lines.begin()); +} + +std::shared_ptr MbD::ASMTGeneralMotion::mbdClassNew() +{ + return CREATE::With(); +} + +void MbD::ASMTGeneralMotion::createMbD(std::shared_ptr mbdSys, std::shared_ptr mbdUnits) +{ + ASMTMotion::createMbD(mbdSys, mbdUnits); + auto parser = CREATE::With(); + parser->owner = this; + auto geoTime = owner->root()->geoTime(); + parser->variables->insert(std::make_pair("time", geoTime)); + std::shared_ptr< BasicUserFunction> userFunc; + auto fullMotion = std::static_pointer_cast(mbdObject); + + //rIJI + userFunc = CREATE::With(rIJI->at(0), 1.0); + parser->parseUserFunction(userFunc); + auto geoX = parser->stack->top(); + geoX = Symbolic::times(geoX, std::make_shared(1.0 / mbdUnits->length)); + geoX->createMbD(mbdSys, mbdUnits); + auto xBlk = geoX->simplified(geoX); + + userFunc = CREATE::With(rIJI->at(1), 1.0); + parser->parseUserFunction(userFunc); + auto geoY = parser->stack->top(); + geoY = Symbolic::times(geoY, std::make_shared(1.0 / mbdUnits->length)); + geoY->createMbD(mbdSys, mbdUnits); + auto yBlk = geoY->simplified(geoY); + + userFunc = CREATE::With(rIJI->at(2), 1.0); + parser->parseUserFunction(userFunc); + auto geoZ = parser->stack->top(); + geoZ = Symbolic::times(geoZ, std::make_shared(1.0 / mbdUnits->length)); + geoZ->createMbD(mbdSys, mbdUnits); + auto zBlk = geoZ->simplified(geoZ); + + auto xyzBlkList = std::initializer_list{ xBlk, yBlk, zBlk }; + fullMotion->frIJI = std::make_shared>(xyzBlkList); + + //angIJJ + userFunc = CREATE::With(angIJJ->at(0), 1.0); + parser->parseUserFunction(userFunc); + auto geoPhi = parser->stack->top(); + geoPhi = Symbolic::times(geoPhi, std::make_shared(1.0 / mbdUnits->angle)); + geoPhi->createMbD(mbdSys, mbdUnits); + auto phiBlk = geoPhi->simplified(geoPhi); + + userFunc = CREATE::With(angIJJ->at(1), 1.0); + parser->parseUserFunction(userFunc); + auto geoThe = parser->stack->top(); + geoThe = Symbolic::times(geoThe, std::make_shared(1.0 / mbdUnits->angle)); + geoThe->createMbD(mbdSys, mbdUnits); + auto theBlk = geoThe->simplified(geoThe); + + userFunc = CREATE::With(angIJJ->at(2), 1.0); + parser->parseUserFunction(userFunc); + auto geoPsi = parser->stack->top(); + geoPsi = Symbolic::times(geoPsi, std::make_shared(1.0 / mbdUnits->angle)); + geoPsi->createMbD(mbdSys, mbdUnits); + auto psiBlk = geoPsi->simplified(geoPsi); + + auto xyzRotBlkList = std::initializer_list{ phiBlk, theBlk, psiBlk }; + auto fangIJJ = std::make_shared>(xyzRotBlkList); + std::istringstream iss(rotationOrder); + auto rotOrder = std::make_shared>(); + int order; + for (int i = 0; i < 3; i++) + { + iss >> order; + rotOrder->push_back(order); + } + fangIJJ->rotOrder = rotOrder; + fullMotion->fangIJJ = fangIJJ; } diff --git a/MbDCode/ASMTGeneralMotion.h b/MbDCode/ASMTGeneralMotion.h index 054aa33..5f127f8 100644 --- a/MbDCode/ASMTGeneralMotion.h +++ b/MbDCode/ASMTGeneralMotion.h @@ -1,6 +1,15 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "ASMTMotion.h" +#include "FullMotion.h" namespace MbD { class ASMTGeneralMotion : public ASMTMotion @@ -8,7 +17,14 @@ namespace MbD { // public: void parseASMT(std::vector& lines) override; + void readrIJI(std::vector& lines); + void readangIJJ(std::vector& lines); + void readRotationOrder(std::vector& lines); + std::shared_ptr mbdClassNew() override; + void createMbD(std::shared_ptr mbdSys, std::shared_ptr mbdUnits) override; + std::shared_ptr> rIJI, angIJJ; + std::string rotationOrder; }; } diff --git a/MbDCode/ASMTItem.cpp b/MbDCode/ASMTItem.cpp index dcb5908..70a263f 100644 --- a/MbDCode/ASMTItem.cpp +++ b/MbDCode/ASMTItem.cpp @@ -1,8 +1,29 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "ASMTItem.h" #include "CREATE.h" +#include "ASMTSpatialContainer.h" +#include "ASMTAssembly.h" +#include "Constant.h" using namespace MbD; +ASMTAssembly* MbD::ASMTItem::root() +{ + return owner->root(); +} + +std::shared_ptr MbD::ASMTItem::part() +{ + return owner->part(); +} + void MbD::ASMTItem::initialize() { } @@ -12,7 +33,7 @@ void MbD::ASMTItem::parseASMT(std::vector& lines) assert(false); } -FRowDsptr MbD::ASMTItem::readRowOfDoubles(std::string line) +FRowDsptr MbD::ASMTItem::readRowOfDoubles(std::string& line) { std::istringstream iss(line); auto readRowOfDoubles = std::make_shared>(); @@ -23,7 +44,7 @@ FRowDsptr MbD::ASMTItem::readRowOfDoubles(std::string line) return readRowOfDoubles; } -FColDsptr MbD::ASMTItem::readColumnOfDoubles(std::string line) +FColDsptr MbD::ASMTItem::readColumnOfDoubles(std::string& line) { std::istringstream iss(line); auto readColumnOfDoubles = std::make_shared>(); @@ -34,7 +55,7 @@ FColDsptr MbD::ASMTItem::readColumnOfDoubles(std::string line) return readColumnOfDoubles; } -double MbD::ASMTItem::readDouble(std::string line) +double MbD::ASMTItem::readDouble(std::string& line) { std::istringstream iss(line); double d; @@ -42,7 +63,7 @@ double MbD::ASMTItem::readDouble(std::string line) return d; } -int MbD::ASMTItem::readInt(std::string line) +int MbD::ASMTItem::readInt(std::string& line) { std::istringstream iss(line); int i; @@ -50,7 +71,7 @@ int MbD::ASMTItem::readInt(std::string line) return i; } -bool MbD::ASMTItem::readBool(std::string line) +bool MbD::ASMTItem::readBool(std::string& line) { if (line.find("true") != std::string::npos) { @@ -62,5 +83,73 @@ bool MbD::ASMTItem::readBool(std::string line) } else { assert(false); + return false; } } + +std::string MbD::ASMTItem::readString(std::string& line) +{ + std::string str = line; + str.erase(str.begin(), std::find_if(str.begin(), str.end(), [](unsigned char ch) { return !std::isspace(ch); })); + return str; +} + +void MbD::ASMTItem::readName(std::vector& lines) +{ + assert(lines[0].find("Name") != std::string::npos); + lines.erase(lines.begin()); + name = readString(lines[0]); + lines.erase(lines.begin()); +} + +std::string MbD::ASMTItem::fullName(std::string partialName) +{ + std::string longerName = "/" + name + partialName; + if (owner == nullptr) { + return longerName; + } + else { + return owner->fullName(longerName); + } +} + +void MbD::ASMTItem::readDoublesInto(std::string& str, std::string label, FRowDsptr& row) +{ + auto pos = str.find(label); + assert(pos != std::string::npos); + str.erase(0, pos + label.length()); + row = readRowOfDoubles(str); +} + +void MbD::ASMTItem::deleteMbD() +{ + mbdObject = nullptr; +} + +void MbD::ASMTItem::createMbD(std::shared_ptr mbdSys, std::shared_ptr mbdUnits) +{ + assert(false); +} + +void MbD::ASMTItem::updateFromMbD() +{ + assert(false); +} + +void MbD::ASMTItem::compareResults(AnalysisType type) +{ + assert(false); +} + +std::shared_ptr MbD::ASMTItem::mbdUnits() +{ + if (owner) { + return owner->mbdUnits(); + } + return static_cast(this)->mbdUnits; +} + +std::shared_ptr MbD::ASMTItem::sptrConstant(double value) +{ + return std::make_shared(value); +} diff --git a/MbDCode/ASMTItem.h b/MbDCode/ASMTItem.h index 2fcbad0..4138617 100644 --- a/MbDCode/ASMTItem.h +++ b/MbDCode/ASMTItem.h @@ -1,20 +1,47 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "CREATE.h" namespace MbD { + class ASMTAssembly; + class Units; + class ASMTSpatialContainer; + class ASMTItem { // public: + virtual ASMTAssembly* root(); + virtual std::shared_ptr part(); + virtual void initialize(); virtual void parseASMT(std::vector& lines); - FRowDsptr readRowOfDoubles(std::string line); - FColDsptr readColumnOfDoubles(std::string line); - double readDouble(std::string line); - int readInt(std::string line); - bool readBool(std::string line); + FRowDsptr readRowOfDoubles(std::string& line); + FColDsptr readColumnOfDoubles(std::string& line); + double readDouble(std::string& line); + int readInt(std::string& line); + bool readBool(std::string& line); + std::string readString(std::string& line); + void readName(std::vector& lines); + virtual std::string fullName(std::string partialName); + void readDoublesInto(std::string& str, std::string label, FRowDsptr& row); + virtual void deleteMbD(); + virtual void createMbD(std::shared_ptr mbdSys, std::shared_ptr mbdUnits); + virtual void updateFromMbD(); + virtual void compareResults(AnalysisType type); + std::shared_ptr mbdUnits(); + std::shared_ptr sptrConstant(double value); + std::string name; ASMTItem* owner; + std::shared_ptr mbdObject; }; } diff --git a/MbDCode/ASMTItemIJ.cpp b/MbDCode/ASMTItemIJ.cpp new file mode 100644 index 0000000..e24ed28 --- /dev/null +++ b/MbDCode/ASMTItemIJ.cpp @@ -0,0 +1,77 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#include "ASMTItemIJ.h" + +void MbD::ASMTItemIJ::initialize() +{ + fxs = std::make_shared>(); + fys = std::make_shared>(); + fzs = std::make_shared>(); + txs = std::make_shared>(); + tys = std::make_shared>(); + tzs = std::make_shared>(); +} + +void MbD::ASMTItemIJ::readMarkerI(std::vector& lines) +{ + assert(lines[0].find("MarkerI") != std::string::npos); + lines.erase(lines.begin()); + markerI = readString(lines[0]); + lines.erase(lines.begin()); +} + +void MbD::ASMTItemIJ::readMarkerJ(std::vector& lines) +{ + assert(lines[0].find("MarkerJ") != std::string::npos); + lines.erase(lines.begin()); + markerJ = readString(lines[0]); + lines.erase(lines.begin()); +} + +void MbD::ASMTItemIJ::readFXonIs(std::vector& lines) +{ + std::string str = lines[0]; + readDoublesInto(str, "FXonI", infxs); + lines.erase(lines.begin()); +} + +void MbD::ASMTItemIJ::readFYonIs(std::vector& lines) +{ + std::string str = lines[0]; + readDoublesInto(str, "FYonI", infys); + lines.erase(lines.begin()); +} + +void MbD::ASMTItemIJ::readFZonIs(std::vector& lines) +{ + std::string str = lines[0]; + readDoublesInto(str, "FZonI", infzs); + lines.erase(lines.begin()); +} + +void MbD::ASMTItemIJ::readTXonIs(std::vector& lines) +{ + std::string str = lines[0]; + readDoublesInto(str, "TXonI", intxs); + lines.erase(lines.begin()); +} + +void MbD::ASMTItemIJ::readTYonIs(std::vector& lines) +{ + std::string str = lines[0]; + readDoublesInto(str, "TYonI", intys); + lines.erase(lines.begin()); +} + +void MbD::ASMTItemIJ::readTZonIs(std::vector& lines) +{ + std::string str = lines[0]; + readDoublesInto(str, "TZonI", intzs); + lines.erase(lines.begin()); +} diff --git a/MbDCode/ASMTItemIJ.h b/MbDCode/ASMTItemIJ.h new file mode 100644 index 0000000..335fa3a --- /dev/null +++ b/MbDCode/ASMTItemIJ.h @@ -0,0 +1,34 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#pragma once + +#include "ASMTItem.h" + +namespace MbD { + class ASMTItemIJ : public ASMTItem + { + // + public: + void initialize() override; + void readMarkerI(std::vector& lines); + void readMarkerJ(std::vector& lines); + void readFXonIs(std::vector& lines); + void readFYonIs(std::vector& lines); + void readFZonIs(std::vector& lines); + void readTXonIs(std::vector& lines); + void readTYonIs(std::vector& lines); + void readTZonIs(std::vector& lines); + + std::string markerI, markerJ; + FRowDsptr fxs, fys, fzs, txs, tys, tzs; + FRowDsptr infxs, infys, infzs, intxs, intys, intzs; + + }; +} + diff --git a/MbDCode/ASMTJoint.cpp b/MbDCode/ASMTJoint.cpp index 316700c..1b1de97 100644 --- a/MbDCode/ASMTJoint.cpp +++ b/MbDCode/ASMTJoint.cpp @@ -1,21 +1,36 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "ASMTJoint.h" using namespace MbD; void MbD::ASMTJoint::parseASMT(std::vector& lines) { - size_t pos = lines[0].find_first_not_of("\t"); - auto leadingTabs = lines[0].substr(0, pos); - assert(lines[0] == (leadingTabs + "Name")); - lines.erase(lines.begin()); - name = lines[0]; - lines.erase(lines.begin()); - assert(lines[0] == (leadingTabs + "MarkerI")); - lines.erase(lines.begin()); - markerI = lines[0]; - lines.erase(lines.begin()); - assert(lines[0] == (leadingTabs + "MarkerJ")); - lines.erase(lines.begin()); - markerJ = lines[0]; - lines.erase(lines.begin()); + readName(lines); + readMarkerI(lines); + readMarkerJ(lines); +} + +void MbD::ASMTJoint::readJointSeries(std::vector& lines) +{ + std::string str = lines[0]; + std::string substr = "JointSeries"; + auto pos = str.find(substr); + assert(pos != std::string::npos); + str.erase(0, pos + substr.length()); + auto seriesName = readString(str); + assert(fullName("") == seriesName); + lines.erase(lines.begin()); + readFXonIs(lines); + readFYonIs(lines); + readFZonIs(lines); + readTXonIs(lines); + readTYonIs(lines); + readTZonIs(lines); } diff --git a/MbDCode/ASMTJoint.h b/MbDCode/ASMTJoint.h index efb1784..c8a9f45 100644 --- a/MbDCode/ASMTJoint.h +++ b/MbDCode/ASMTJoint.h @@ -1,6 +1,15 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "ASMTConstraintSet.h" +#include "ForceTorqueData.h" namespace MbD { class ASMTJoint : public ASMTConstraintSet @@ -8,8 +17,9 @@ namespace MbD { // public: void parseASMT(std::vector& lines) override; + void readJointSeries(std::vector& lines); - std::string name, markerI, markerJ; + std::shared_ptr>> jointSeries; }; } diff --git a/MbDCode/ASMTKinematicIJ.cpp b/MbDCode/ASMTKinematicIJ.cpp index 2824700..6ac33c2 100644 --- a/MbDCode/ASMTKinematicIJ.cpp +++ b/MbDCode/ASMTKinematicIJ.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "ASMTKinematicIJ.h" using namespace MbD; diff --git a/MbDCode/ASMTKinematicIJ.h b/MbDCode/ASMTKinematicIJ.h index 0a86631..d6871e7 100644 --- a/MbDCode/ASMTKinematicIJ.h +++ b/MbDCode/ASMTKinematicIJ.h @@ -1,9 +1,17 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once -#include "ASMTItem.h" +#include "ASMTItemIJ.h" namespace MbD { - class ASMTKinematicIJ : public ASMTItem + class ASMTKinematicIJ : public ASMTItemIJ { // public: diff --git a/MbDCode/ASMTMarker.cpp b/MbDCode/ASMTMarker.cpp index 372fc59..dc0fe0b 100644 --- a/MbDCode/ASMTMarker.cpp +++ b/MbDCode/ASMTMarker.cpp @@ -1,43 +1,61 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "ASMTMarker.h" +#include "ASMTRefItem.h" +#include "ASMTPart.h" +#include "Part.h" +#include "PartFrame.h" +#include "MarkerFrame.h" using namespace MbD; void MbD::ASMTMarker::parseASMT(std::vector& lines) { - size_t pos = lines[0].find_first_not_of("\t"); - auto leadingTabs = lines[0].substr(0, pos); - while (!lines.empty()) { - if (lines[0] == (leadingTabs + "Name")) { - lines.erase(lines.begin()); - name = lines[0]; - lines.erase(lines.begin()); - } - else if (lines[0] == (leadingTabs + "Position3D")) { - lines.erase(lines.begin()); - std::istringstream iss(lines[0]); - position3D = std::make_shared>(); - double d; - while (iss >> d) { - position3D->push_back(d); - } - lines.erase(lines.begin()); - } - else if (lines[0] == (leadingTabs + "RotationMatrix")) { - lines.erase(lines.begin()); - rotationMatrix = std::make_shared>(3, 0); - for (int i = 0; i < 3; i++) - { - auto& row = rotationMatrix->at(i); - std::istringstream iss(lines[0]); - double d; - while (iss >> d) { - row->push_back(d); - } - lines.erase(lines.begin()); - } - } - else { - assert(false); - } - } + readName(lines); + readPosition3D(lines); + readRotationMatrix(lines); +} + +FColDsptr MbD::ASMTMarker::rpmp() +{ + //p is cm + auto refItem = static_cast(owner); + auto& rPrefP = refItem->position3D; + auto& aAPref = refItem->rotationMatrix; + auto& rrefmref = position3D; + auto rPmP = rPrefP->plusFullColumn(aAPref->timesFullColumn(rrefmref)); + auto& principalMassMarker = static_cast(refItem->owner)->principalMassMarker; + auto& rPcmP = principalMassMarker->position3D; + auto& aAPcm = principalMassMarker->rotationMatrix; + auto rpmp = aAPcm->transposeTimesFullColumn(rPmP->minusFullColumn(rPcmP)); + return rpmp; +} + +FMatDsptr MbD::ASMTMarker::aApm() +{ + //p is cm + auto refItem = static_cast(owner); + auto& aAPref = refItem->rotationMatrix; + auto& aArefm = rotationMatrix; + auto& principalMassMarker = static_cast(refItem->owner)->principalMassMarker; + auto& aAPcm = principalMassMarker->rotationMatrix; + auto aApm = aAPcm->transposeTimesFullMatrix(aAPref->timesFullMatrix(aArefm)); + return aApm; +} + +void MbD::ASMTMarker::createMbD(std::shared_ptr mbdSys, std::shared_ptr mbdUnits) +{ + auto mkr = CREATE::With(name.c_str()); + auto prt = std::static_pointer_cast(part()->mbdObject); + prt->partFrame->addMarkerFrame(mkr); + + mkr->rpmp = rpmp()->times(1.0 / mbdUnits->length); + mkr->aApm = aApm(); + mbdObject = mkr->endFrames->at(0); } diff --git a/MbDCode/ASMTMarker.h b/MbDCode/ASMTMarker.h index 0969a90..a5f1b88 100644 --- a/MbDCode/ASMTMarker.h +++ b/MbDCode/ASMTMarker.h @@ -1,19 +1,26 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once -#include "ASMTItem.h" +#include "ASMTSpatialItem.h" #include "FullColumn.h" #include "FullMatrix.h" namespace MbD { - class ASMTMarker : public ASMTItem + class ASMTMarker : public ASMTSpatialItem { // public: void parseASMT(std::vector& lines) override; - - std::string name; - FColDsptr position3D; - FMatDsptr rotationMatrix; + FColDsptr rpmp(); + FMatDsptr aApm(); + void createMbD(std::shared_ptr mbdSys, std::shared_ptr mbdUnits) override; }; } diff --git a/MbDCode/ASMTMotion.cpp b/MbDCode/ASMTMotion.cpp index c60fa7e..fa22dfc 100644 --- a/MbDCode/ASMTMotion.cpp +++ b/MbDCode/ASMTMotion.cpp @@ -1,3 +1,33 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "ASMTMotion.h" using namespace MbD; + +void MbD::ASMTMotion::readMotionSeries(std::vector& lines) +{ + std::string str = lines[0]; + std::string substr = "MotionSeries"; + auto pos = str.find(substr); + assert(pos != std::string::npos); + str.erase(0, pos + substr.length()); + auto seriesName = readString(str); + assert(fullName("") == seriesName); + lines.erase(lines.begin()); + readFXonIs(lines); + readFYonIs(lines); + readFZonIs(lines); + readTXonIs(lines); + readTYonIs(lines); + readTZonIs(lines); +} + +void MbD::ASMTMotion::initMarkers() +{ +} diff --git a/MbDCode/ASMTMotion.h b/MbDCode/ASMTMotion.h index a1c9cd2..10bcbe1 100644 --- a/MbDCode/ASMTMotion.h +++ b/MbDCode/ASMTMotion.h @@ -1,13 +1,25 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "ASMTConstraintSet.h" +#include "ForceTorqueData.h" namespace MbD { class ASMTMotion : public ASMTConstraintSet { // public: + void readMotionSeries(std::vector& lines); + virtual void initMarkers(); + std::shared_ptr>> motionSeries; }; } diff --git a/MbDCode/ASMTPart.cpp b/MbDCode/ASMTPart.cpp index ee58a52..6e24758 100644 --- a/MbDCode/ASMTPart.cpp +++ b/MbDCode/ASMTPart.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "ASMTPart.h" #include "CREATE.h" @@ -5,123 +13,92 @@ using namespace MbD; void MbD::ASMTPart::parseASMT(std::vector& lines) { - size_t pos = lines[0].find_first_not_of("\t"); - auto leadingTabs = lines[0].substr(0, pos); - while (!lines.empty()) { - if (lines[0] == (leadingTabs + "Name")) { - lines.erase(lines.begin()); - name = lines[0]; - lines.erase(lines.begin()); - } - else if (lines[0] == (leadingTabs + "Position3D")) { - lines.erase(lines.begin()); - position3D = readColumnOfDoubles(lines[0]); - lines.erase(lines.begin()); - } - else if (lines[0] == (leadingTabs + "RotationMatrix")) { - lines.erase(lines.begin()); - rotationMatrix = std::make_shared>(3); - for (int i = 0; i < 3; i++) - { - auto row = readRowOfDoubles(lines[0]); - rotationMatrix->atiput(i, row); - lines.erase(lines.begin()); - } - } - else if (lines[0] == (leadingTabs + "Velocity3D")) { - lines.erase(lines.begin()); - velocity3D = readColumnOfDoubles(lines[0]); - lines.erase(lines.begin()); - } - else if (lines[0] == (leadingTabs + "Omega3D")) { - lines.erase(lines.begin()); - omega3D = readColumnOfDoubles(lines[0]); - lines.erase(lines.begin()); - } - else if (lines[0] == (leadingTabs + "FeatureOrder")) { - lines.erase(lines.begin()); - //featureOrder = std::make_shared>>(); - auto it = std::find(lines.begin(), lines.end(), (leadingTabs + "PrincipalMassMarker")); - //std::vector featureOrderLines(lines.begin(), it); - //while (!featureOrderLines.empty()) { - // if (featureOrderLines[0] == (leadingTabs + "\tExtrusion")) { - // featureOrderLines.erase(featureOrderLines.begin()); - // auto extrusion = CREATE::With(); - // extrusion->parseASMT(featureOrderLines); - // featureOrder->push_back(extrusion); - // extrusion->owner = this; - // } - // else { - // assert(false); - // } - //} - lines.erase(lines.begin(), it); - } - else if (lines[0] == (leadingTabs + "PrincipalMassMarker")) { - lines.erase(lines.begin()); - principalMassMarker = CREATE::With(); - principalMassMarker->parseASMT(lines); - principalMassMarker->owner = this; - } - else if (lines[0] == (leadingTabs + "RefPoints")) { - lines.erase(lines.begin()); - refPoints = std::make_shared>>(); - auto it = std::find(lines.begin(), lines.end(), (leadingTabs + "RefCurves")); - std::vector refPointsLines(lines.begin(), it); - while (!refPointsLines.empty()) { - if (refPointsLines[0] == (leadingTabs + "\tRefPoint")) { - refPointsLines.erase(refPointsLines.begin()); - auto refPoint = CREATE::With(); - refPoint->parseASMT(refPointsLines); - refPoints->push_back(refPoint); - refPoint->owner = this; - } - else { - assert(false); - } - } - lines.erase(lines.begin(), it); - } - else if (lines[0] == (leadingTabs + "RefCurves")) { - lines.erase(lines.begin()); - refCurves = std::make_shared>>(); - auto it = std::find(lines.begin(), lines.end(), (leadingTabs + "RefSurfaces")); - std::vector refCurvesLines(lines.begin(), it); - while (!refCurvesLines.empty()) { - if (refCurvesLines[0] == (leadingTabs + "\tRefCurve")) { - refCurvesLines.erase(refCurvesLines.begin()); - auto refCurve = CREATE::With(); - refCurve->parseASMT(refCurvesLines); - refCurves->push_back(refCurve); - refCurve->owner = this; - } - else { - assert(false); - } - } - lines.erase(lines.begin(), it); - } - else if (lines[0] == (leadingTabs + "RefSurfaces")) { - lines.erase(lines.begin()); - refSurfaces = std::make_shared>>(); - auto it = std::find(lines.begin(), lines.end(), (leadingTabs.substr(0, leadingTabs.size() - 1) + "Part")); - std::vector refSurfacesLines(lines.begin(), it); - while (!refSurfacesLines.empty()) { - if (refSurfacesLines[0] == (leadingTabs + "\tRefSurface")) { - refSurfacesLines.erase(refSurfacesLines.begin()); - auto refSurface = CREATE::With(); - refSurface->parseASMT(refSurfacesLines); - refSurfaces->push_back(refSurface); - refSurface->owner = this; - } - else { - assert(false); - } - } - lines.erase(lines.begin(), it); - } - else { - return; - } - } + readName(lines); + readPosition3D(lines); + readRotationMatrix(lines); + readVelocity3D(lines); + readOmega3D(lines); + readFeatureOrder(lines); + readPrincipalMassMarker(lines); + readRefPoints(lines); + readRefCurves(lines); + readRefSurfaces(lines); +} + +void MbD::ASMTPart::readFeatureOrder(std::vector& lines) +{ + assert(lines[0].find("FeatureOrder") != std::string::npos); + lines.erase(lines.begin()); + //featureOrder = std::make_shared>>(); + auto it = std::find_if(lines.begin(), lines.end(), [](const std::string& s) { + return s.find("PrincipalMassMarker") != std::string::npos; + }); + //std::vector featureOrderLines(lines.begin(), it); + //while (!featureOrderLines.empty()) { + // if (featureOrderLines[0] == (leadingTabs + "\tExtrusion")) { + // featureOrderLines.erase(featureOrderLines.begin()); + // auto extrusion = CREATE::With(); + // extrusion->parseASMT(featureOrderLines); + // featureOrder->push_back(extrusion); + // extrusion->owner = this; + // } + // else { + // assert(false); + // } + //} + lines.erase(lines.begin(), it); +} + +void MbD::ASMTPart::readPrincipalMassMarker(std::vector& lines) +{ + assert(lines[0].find("PrincipalMassMarker") != std::string::npos); + lines.erase(lines.begin()); + principalMassMarker = CREATE::With(); + principalMassMarker->parseASMT(lines); + principalMassMarker->owner = this; +} + +void MbD::ASMTPart::readPartSeries(std::vector& lines) +{ + std::string str = lines[0]; + std::string substr = "PartSeries"; + auto pos = str.find(substr); + assert(pos != std::string::npos); + str.erase(0, pos + substr.length()); + auto seriesName = readString(str); + assert(fullName("") == seriesName); + lines.erase(lines.begin()); + //xs, ys, zs, bryxs, bryys, bryzs + readXs(lines); + readYs(lines); + readZs(lines); + readBryantxs(lines); + readBryantys(lines); + readBryantzs(lines); + readVXs(lines); + readVYs(lines); + readVZs(lines); + readOmegaXs(lines); + readOmegaYs(lines); + readOmegaZs(lines); + readAXs(lines); + readAYs(lines); + readAZs(lines); + readAlphaXs(lines); + readAlphaYs(lines); + readAlphaZs(lines); +} + +FColDsptr MbD::ASMTPart::vOcmO() +{ + auto& rOPO = position3D; + auto& vOPO = velocity3D; + auto& omeOPO = omega3D; + auto rPcmO = rOcmO()->minusFullColumn(rOPO); + return vOPO->plusFullColumn(omeOPO->cross(rPcmO)); +} + +FColDsptr MbD::ASMTPart::omeOpO() +{ + return omega3D; } diff --git a/MbDCode/ASMTPart.h b/MbDCode/ASMTPart.h index cab2c96..4d3d4f6 100644 --- a/MbDCode/ASMTPart.h +++ b/MbDCode/ASMTPart.h @@ -1,26 +1,34 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once -#include "ASMTItem.h" +#include "ASMTSpatialContainer.h" #include "ASMTRefPoint.h" #include "ASMTRefCurve.h" #include "ASMTRefSurface.h" #include "ASMTPrincipalMassMarker.h" +#include "PosVelAccData.h" namespace MbD { - class ASMTPart : public ASMTItem + class ASMTPart : public ASMTSpatialContainer { // public: void parseASMT(std::vector& lines) override; + void readFeatureOrder(std::vector& lines); + void readPrincipalMassMarker(std::vector& lines); + void readPartSeries(std::vector& lines); + FColDsptr vOcmO() override; + FColDsptr omeOpO() override; - std::string name; - FColDsptr position3D, velocity3D, omega3D; - FMatDsptr rotationMatrix; - std::shared_ptr principalMassMarker; //std::shared_ptr>> featureOrder; - std::shared_ptr>> refPoints; - std::shared_ptr>> refCurves; - std::shared_ptr>> refSurfaces; + std::shared_ptr>> partSeries; }; } diff --git a/MbDCode/ASMTPointInPlaneJoint.cpp b/MbDCode/ASMTPointInPlaneJoint.cpp new file mode 100644 index 0000000..636e173 --- /dev/null +++ b/MbDCode/ASMTPointInPlaneJoint.cpp @@ -0,0 +1,40 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#include "ASMTPointInPlaneJoint.h" +#include "PointInPlaneJoint.h" + +using namespace MbD; + +std::shared_ptr MbD::ASMTPointInPlaneJoint::mbdClassNew() +{ + return CREATE::With(); +} + +void MbD::ASMTPointInPlaneJoint::parseASMT(std::vector& lines) +{ + ASMTJoint::parseASMT(lines); + readOffset(lines); +} + +void MbD::ASMTPointInPlaneJoint::readOffset(std::vector& lines) +{ + assert(lines[0].find("offset") != std::string::npos); + lines.erase(lines.begin()); + offset = readDouble(lines[0]); + lines.erase(lines.begin()); + +} + +void MbD::ASMTPointInPlaneJoint::createMbD(std::shared_ptr mbdSys, std::shared_ptr mbdUnits) +{ + ASMTJoint::createMbD(mbdSys, mbdUnits); + auto pointInPlaneJoint = std::static_pointer_cast(mbdObject); + pointInPlaneJoint->offset = offset; +} + diff --git a/MbDCode/ASMTPointInPlaneJoint.h b/MbDCode/ASMTPointInPlaneJoint.h new file mode 100644 index 0000000..9b711cd --- /dev/null +++ b/MbDCode/ASMTPointInPlaneJoint.h @@ -0,0 +1,26 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#pragma once + +#include "ASMTJoint.h" + +namespace MbD { + class ASMTPointInPlaneJoint : public ASMTJoint + { + // + public: + virtual std::shared_ptr mbdClassNew() override; + void parseASMT(std::vector& lines) override; + void readOffset(std::vector& lines); + void createMbD(std::shared_ptr mbdSys, std::shared_ptr mbdUnits) override; + + double offset; + }; +} + diff --git a/MbDCode/ASMTPrincipalMassMarker.cpp b/MbDCode/ASMTPrincipalMassMarker.cpp index 1a3e7f6..8d3e37a 100644 --- a/MbDCode/ASMTPrincipalMassMarker.cpp +++ b/MbDCode/ASMTPrincipalMassMarker.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "ASMTPrincipalMassMarker.h" #include #include "FullMatrix.h" diff --git a/MbDCode/ASMTPrincipalMassMarker.h b/MbDCode/ASMTPrincipalMassMarker.h index 7cab1bc..770b909 100644 --- a/MbDCode/ASMTPrincipalMassMarker.h +++ b/MbDCode/ASMTPrincipalMassMarker.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "ASMTItem.h" @@ -9,7 +17,6 @@ namespace MbD { public: void parseASMT(std::vector& lines) override; - std::string name; FColDsptr position3D; FMatDsptr rotationMatrix; double mass, density; diff --git a/MbDCode/ASMTRefCurve.cpp b/MbDCode/ASMTRefCurve.cpp index 5f41fa2..227b9d8 100644 --- a/MbDCode/ASMTRefCurve.cpp +++ b/MbDCode/ASMTRefCurve.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "ASMTRefCurve.h" #include "CREATE.h" diff --git a/MbDCode/ASMTRefCurve.h b/MbDCode/ASMTRefCurve.h index 45db368..993dee3 100644 --- a/MbDCode/ASMTRefCurve.h +++ b/MbDCode/ASMTRefCurve.h @@ -1,9 +1,17 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once -#include "ASMTItem.h" +#include "ASMTRefItem.h" namespace MbD { - class ASMTRefCurve : public ASMTItem + class ASMTRefCurve : public ASMTRefItem { // public: diff --git a/MbDCode/ASMTRefItem.cpp b/MbDCode/ASMTRefItem.cpp new file mode 100644 index 0000000..ea78cb2 --- /dev/null +++ b/MbDCode/ASMTRefItem.cpp @@ -0,0 +1,37 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#include "ASMTRefItem.h" +#include "CREATE.h" + +using namespace MbD; + +void MbD::ASMTRefItem::readMarkers(std::vector& lines) +{ + assert(lines[0].find("Markers") != std::string::npos); + lines.erase(lines.begin()); + markers = std::make_shared>>(); + auto it = std::find_if(lines.begin(), lines.end(), [](const std::string& s) { + return s.find("RefPoint") != std::string::npos; + }); + std::vector markersLines(lines.begin(), it); + while (!markersLines.empty()) { + readMarker(markersLines); + } + lines.erase(lines.begin(), it); +} + +void MbD::ASMTRefItem::readMarker(std::vector& lines) +{ + assert(lines[0].find("Marker") != std::string::npos); + lines.erase(lines.begin()); + auto marker = CREATE::With(); + marker->parseASMT(lines); + markers->push_back(marker); + marker->owner = this; +} diff --git a/MbDCode/ASMTRefItem.h b/MbDCode/ASMTRefItem.h new file mode 100644 index 0000000..16b73f8 --- /dev/null +++ b/MbDCode/ASMTRefItem.h @@ -0,0 +1,28 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#pragma once + +#include "ASMTSpatialItem.h" +#include "ASMTMarker.h" + +namespace MbD { + + class ASMTRefItem : public ASMTSpatialItem + { + // + public: + void readMarkers(std::vector& lines); + void readMarker(std::vector& lines); + + std::shared_ptr>> markers; + + + }; +} + diff --git a/MbDCode/ASMTRefPoint.cpp b/MbDCode/ASMTRefPoint.cpp index 50d74eb..b5a62eb 100644 --- a/MbDCode/ASMTRefPoint.cpp +++ b/MbDCode/ASMTRefPoint.cpp @@ -1,58 +1,32 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "ASMTRefPoint.h" +#include "ASMTMarker.h" #include "CREATE.h" using namespace MbD; void MbD::ASMTRefPoint::parseASMT(std::vector& lines) { - size_t pos = lines[0].find_first_not_of("\t"); - auto leadingTabs = lines[0].substr(0, pos); - while (!lines.empty()) { - if (lines[0] == (leadingTabs + "Position3D")) { - lines.erase(lines.begin()); - std::istringstream iss(lines[0]); - position3D = std::make_shared>(); - double d; - while (iss >> d) { - position3D->push_back(d); - } - lines.erase(lines.begin()); - } - else if (lines[0] == (leadingTabs + "RotationMatrix")) { - lines.erase(lines.begin()); - rotationMatrix = std::make_shared>(3, 0); - for (int i = 0; i < 3; i++) - { - auto& row = rotationMatrix->at(i); - std::istringstream iss(lines[0]); - double d; - while (iss >> d) { - row->push_back(d); - } - lines.erase(lines.begin()); - } - } - else if (lines[0] == (leadingTabs + "Markers")) { - lines.erase(lines.begin()); - markers = std::make_shared>>(); - auto it = std::find(lines.begin(), lines.end(), (leadingTabs.substr(0, leadingTabs.size() - 1) + "RefPoint")); - std::vector markersLines(lines.begin(), it); - while (!markersLines.empty()) { - if (markersLines[0] == (leadingTabs + "\tMarker")) { - markersLines.erase(markersLines.begin()); - auto marker = CREATE::With(); - marker->parseASMT(markersLines); - markers->push_back(marker); - marker->owner = this; - } - else { - return; - } - } - lines.erase(lines.begin(), it); - } - else { - return; - } + readPosition3D(lines); + readRotationMatrix(lines); + readMarkers(lines); +} + +std::string MbD::ASMTRefPoint::fullName(std::string partialName) +{ + return owner->fullName(partialName); +} + +void MbD::ASMTRefPoint::createMbD(std::shared_ptr mbdSys, std::shared_ptr mbdUnits) +{ + for (auto& marker : *markers) { + marker->createMbD(mbdSys, mbdUnits); } } diff --git a/MbDCode/ASMTRefPoint.h b/MbDCode/ASMTRefPoint.h index cdb816f..fcb7832 100644 --- a/MbDCode/ASMTRefPoint.h +++ b/MbDCode/ASMTRefPoint.h @@ -1,20 +1,27 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once -#include "ASMTItem.h" +#include "ASMTRefItem.h" #include #include -#include "ASMTMarker.h" namespace MbD { - class ASMTRefPoint : public ASMTItem + class ASMTRefPoint : public ASMTRefItem { // public: void parseASMT(std::vector& lines) override; + std::string fullName(std::string partialName) override; + void createMbD(std::shared_ptr mbdSys, std::shared_ptr mbdUnits) override; - FColDsptr position3D; - FMatDsptr rotationMatrix; - std::shared_ptr>> markers; + }; } diff --git a/MbDCode/ASMTRefSurface.cpp b/MbDCode/ASMTRefSurface.cpp index 2263a78..f9ff13f 100644 --- a/MbDCode/ASMTRefSurface.cpp +++ b/MbDCode/ASMTRefSurface.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "ASMTRefSurface.h" #include "CREATE.h" diff --git a/MbDCode/ASMTRefSurface.h b/MbDCode/ASMTRefSurface.h index 0b5085e..2cd952b 100644 --- a/MbDCode/ASMTRefSurface.h +++ b/MbDCode/ASMTRefSurface.h @@ -1,9 +1,17 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once -#include "ASMTItem.h" +#include "ASMTRefItem.h" namespace MbD { - class ASMTRefSurface : public ASMTItem + class ASMTRefSurface : public ASMTRefItem { // public: diff --git a/MbDCode/ASMTRevoluteJoint.cpp b/MbDCode/ASMTRevoluteJoint.cpp index ce18b81..6fd2467 100644 --- a/MbDCode/ASMTRevoluteJoint.cpp +++ b/MbDCode/ASMTRevoluteJoint.cpp @@ -1,3 +1,16 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "ASMTRevoluteJoint.h" using namespace MbD; + +std::shared_ptr MbD::ASMTRevoluteJoint::mbdClassNew() +{ + return CREATE::With(); +} diff --git a/MbDCode/ASMTRevoluteJoint.h b/MbDCode/ASMTRevoluteJoint.h index af61164..e61b3b0 100644 --- a/MbDCode/ASMTRevoluteJoint.h +++ b/MbDCode/ASMTRevoluteJoint.h @@ -1,13 +1,22 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "ASMTJoint.h" +#include "RevoluteJoint.h" namespace MbD { class ASMTRevoluteJoint : public ASMTJoint { // public: - + virtual std::shared_ptr mbdClassNew() override; }; } diff --git a/MbDCode/ASMTRotationalMotion.cpp b/MbDCode/ASMTRotationalMotion.cpp index dc5aef0..0fdcb47 100644 --- a/MbDCode/ASMTRotationalMotion.cpp +++ b/MbDCode/ASMTRotationalMotion.cpp @@ -1,21 +1,66 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "ASMTRotationalMotion.h" +#include "ASMTAssembly.h" +#include "SymbolicParser.h" +#include "BasicUserFunction.h" +#include "CREATE.h" +#include "Constant.h" using namespace MbD; void MbD::ASMTRotationalMotion::parseASMT(std::vector& lines) { - size_t pos = lines[0].find_first_not_of("\t"); - auto leadingTabs = lines[0].substr(0, pos); - assert(lines[0] == (leadingTabs + "Name")); + readName(lines); + readMotionJoint(lines); + readRotationZ(lines); +} + +void MbD::ASMTRotationalMotion::readMotionJoint(std::vector& lines) +{ + assert(lines[0].find("MotionJoint") != std::string::npos); lines.erase(lines.begin()); - name = lines[0]; - lines.erase(lines.begin()); - assert(lines[0] == (leadingTabs + "MotionJoint")); - lines.erase(lines.begin()); - motionJoint = lines[0]; - lines.erase(lines.begin()); - assert(lines[0] == (leadingTabs + "RotationZ")); - lines.erase(lines.begin()); - rotationZ = lines[0]; + motionJoint = readString(lines[0]); lines.erase(lines.begin()); } + +void MbD::ASMTRotationalMotion::readRotationZ(std::vector& lines) +{ + assert(lines[0].find("RotationZ") != std::string::npos); + lines.erase(lines.begin()); + rotationZ = readString(lines[0]); + lines.erase(lines.begin()); +} + +void MbD::ASMTRotationalMotion::initMarkers() +{ + auto jt = root()->jointAt(motionJoint); + markerI = jt->markerI; + markerJ = jt->markerJ; +} + +void MbD::ASMTRotationalMotion::createMbD(std::shared_ptr mbdSys, std::shared_ptr mbdUnits) +{ + ASMTMotion::createMbD(mbdSys, mbdUnits); + auto parser = CREATE::With(); + parser->owner = this; + auto geoTime = owner->root()->geoTime(); + parser->variables->insert(std::make_pair("time", geoTime)); + auto userFunc = CREATE::With(rotationZ, 1.0); + parser->parseUserFunction(userFunc); + auto geoPhi = parser->stack->top(); + geoPhi = Symbolic::times(geoPhi, std::make_shared(1.0 / mbdUnits->angle)); + geoPhi->createMbD(mbdSys, mbdUnits); + std::static_pointer_cast(mbdObject)->phiBlk = geoPhi->simplified(geoPhi); +} + +std::shared_ptr MbD::ASMTRotationalMotion::mbdClassNew() +{ + return CREATE::With(); +} diff --git a/MbDCode/ASMTRotationalMotion.h b/MbDCode/ASMTRotationalMotion.h index 669c9b9..d9beea9 100644 --- a/MbDCode/ASMTRotationalMotion.h +++ b/MbDCode/ASMTRotationalMotion.h @@ -1,6 +1,15 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "ASMTMotion.h" +#include "ZRotation.h" namespace MbD { class ASMTRotationalMotion : public ASMTMotion @@ -8,8 +17,13 @@ namespace MbD { // public: void parseASMT(std::vector& lines) override; + void readMotionJoint(std::vector& lines); + void readRotationZ(std::vector& lines); + void initMarkers() override; + void createMbD(std::shared_ptr mbdSys, std::shared_ptr mbdUnits) override; + std::shared_ptr mbdClassNew() override; - std::string name, motionJoint, rotationZ; + std::string motionJoint, rotationZ; }; } diff --git a/MbDCode/ASMTSimulationParameters.cpp b/MbDCode/ASMTSimulationParameters.cpp index 4e4e00f..e5ec2d7 100644 --- a/MbDCode/ASMTSimulationParameters.cpp +++ b/MbDCode/ASMTSimulationParameters.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "ASMTSimulationParameters.h" using namespace MbD; diff --git a/MbDCode/ASMTSimulationParameters.h b/MbDCode/ASMTSimulationParameters.h index 3b6f333..135c76a 100644 --- a/MbDCode/ASMTSimulationParameters.h +++ b/MbDCode/ASMTSimulationParameters.h @@ -1,16 +1,26 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "ASMTItem.h" namespace MbD { - class ASMTSimulationParameters : public ASMTItem - { - // - public: - void parseASMT(std::vector& lines) override; + class ASMTSimulationParameters : public ASMTItem + { + // + public: + void parseASMT(std::vector& lines) override; - double tstart, tend, hmin, hmax, hout, errorTol; - - }; + double tstart = 0.0, tend = 1.0, hmin = 1.0e-9, hmax = 1.0e9, hout = 0.1, errorTol = 1.0e-6; + double errorTolPosKine = 1.0e-6, errorTolAccKine = 1.0e-6, corAbsTol = 1.0e-6, corRelTol = 1.0e-6; + double intAbsTol = 1.0e-6, intRelTol = 1.0e-6, translationLimit = 1.0e9, rotationLimit = 1.0e9; + int iterMaxPosKine = 25, iterMaxAccKine = 25, iterMaxDyn = 4, orderMax = 5; + }; } diff --git a/MbDCode/ASMTSpatialContainer.cpp b/MbDCode/ASMTSpatialContainer.cpp new file mode 100644 index 0000000..0d3a382 --- /dev/null +++ b/MbDCode/ASMTSpatialContainer.cpp @@ -0,0 +1,395 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#include "ASMTSpatialContainer.h" +#include "Units.h" +#include "Part.h" +#include "System.h" + +using namespace MbD; + +void MbD::ASMTSpatialContainer::initialize() +{ + xs = std::make_shared>(); + ys = std::make_shared>(); + zs = std::make_shared>(); + bryxs = std::make_shared>(); + bryys = std::make_shared>(); + bryzs = std::make_shared>(); + vxs = std::make_shared>(); + vys = std::make_shared>(); + vzs = std::make_shared>(); + omexs = std::make_shared>(); + omeys = std::make_shared>(); + omezs = std::make_shared>(); + axs = std::make_shared>(); + ays = std::make_shared>(); + azs = std::make_shared>(); + alpxs = std::make_shared>(); + alpys = std::make_shared>(); + alpzs = std::make_shared>(); +} + +void MbD::ASMTSpatialContainer::readRefPoints(std::vector& lines) +{ + assert(lines[0].find("RefPoints") != std::string::npos); + lines.erase(lines.begin()); + refPoints = std::make_shared>>(); + auto it = std::find_if(lines.begin(), lines.end(), [](const std::string& s) { + return s.find("RefCurves") != std::string::npos; + }); + std::vector refPointsLines(lines.begin(), it); + while (!refPointsLines.empty()) { + readRefPoint(refPointsLines); + } + lines.erase(lines.begin(), it); +} + +void MbD::ASMTSpatialContainer::readRefPoint(std::vector& lines) +{ + assert(lines[0].find("RefPoint") != std::string::npos); + lines.erase(lines.begin()); + auto refPoint = CREATE::With(); + refPoint->parseASMT(lines); + refPoints->push_back(refPoint); + refPoint->owner = this; +} + +void MbD::ASMTSpatialContainer::readRefCurves(std::vector& lines) +{ + assert(lines[0].find("RefCurves") != std::string::npos); + lines.erase(lines.begin()); + refCurves = std::make_shared>>(); + auto it = std::find_if(lines.begin(), lines.end(), [](const std::string& s) { + return s.find("RefSurfaces") != std::string::npos; + }); + std::vector refCurvesLines(lines.begin(), it); + while (!refCurvesLines.empty()) { + readRefCurve(refCurvesLines); + } + lines.erase(lines.begin(), it); +} + +void MbD::ASMTSpatialContainer::readRefCurve(std::vector& lines) +{ + assert(false); +} + +void MbD::ASMTSpatialContainer::readRefSurfaces(std::vector& lines) +{ + assert(lines[0].find("RefSurfaces") != std::string::npos); + lines.erase(lines.begin()); + refSurfaces = std::make_shared>>(); + auto it = std::find_if(lines.begin(), lines.end(), [](const std::string& s) { + return s.find("Part") != std::string::npos; + }); + std::vector refSurfacesLines(lines.begin(), it); + while (!refSurfacesLines.empty()) { + readRefSurface(refSurfacesLines); + } + lines.erase(lines.begin(), it); +} + +void MbD::ASMTSpatialContainer::readRefSurface(std::vector& lines) +{ + assert(false); +} + +void MbD::ASMTSpatialContainer::readXs(std::vector& lines) +{ + std::string str = lines[0]; + readDoublesInto(str, "X", inxs); + lines.erase(lines.begin()); +} + +void MbD::ASMTSpatialContainer::readYs(std::vector& lines) +{ + std::string str = lines[0]; + readDoublesInto(str, "Y", inys); + lines.erase(lines.begin()); +} + +void MbD::ASMTSpatialContainer::readZs(std::vector& lines) +{ + std::string str = lines[0]; + readDoublesInto(str, "Z", inzs); + lines.erase(lines.begin()); +} + +void MbD::ASMTSpatialContainer::readBryantxs(std::vector& lines) +{ + std::string str = lines[0]; + readDoublesInto(str, "Bryantx", inbryxs); + lines.erase(lines.begin()); +} + +void MbD::ASMTSpatialContainer::readBryantys(std::vector& lines) +{ + std::string str = lines[0]; + readDoublesInto(str, "Bryanty", inbryys); + lines.erase(lines.begin()); +} + +void MbD::ASMTSpatialContainer::readBryantzs(std::vector& lines) +{ + std::string str = lines[0]; + readDoublesInto(str, "Bryantz", inbryzs); + lines.erase(lines.begin()); +} + +void MbD::ASMTSpatialContainer::readVXs(std::vector& lines) +{ + std::string str = lines[0]; + readDoublesInto(str, "VX", invxs); + lines.erase(lines.begin()); +} + +void MbD::ASMTSpatialContainer::readVYs(std::vector& lines) +{ + std::string str = lines[0]; + readDoublesInto(str, "VY", invys); + lines.erase(lines.begin()); +} + +void MbD::ASMTSpatialContainer::readVZs(std::vector& lines) +{ + std::string str = lines[0]; + readDoublesInto(str, "VZ", invzs); + lines.erase(lines.begin()); +} + +void MbD::ASMTSpatialContainer::readOmegaXs(std::vector& lines) +{ + std::string str = lines[0]; + readDoublesInto(str, "OmegaX", inomexs); + lines.erase(lines.begin()); +} + +void MbD::ASMTSpatialContainer::readOmegaYs(std::vector& lines) +{ + std::string str = lines[0]; + readDoublesInto(str, "OmegaY", inomeys); + lines.erase(lines.begin()); +} + +void MbD::ASMTSpatialContainer::readOmegaZs(std::vector& lines) +{ + std::string str = lines[0]; + readDoublesInto(str, "OmegaZ", inomezs); + lines.erase(lines.begin()); +} + +void MbD::ASMTSpatialContainer::readAXs(std::vector& lines) +{ + std::string str = lines[0]; + readDoublesInto(str, "AX", inaxs); + lines.erase(lines.begin()); +} + +void MbD::ASMTSpatialContainer::readAYs(std::vector& lines) +{ + std::string str = lines[0]; + readDoublesInto(str, "AY", inays); + lines.erase(lines.begin()); +} + +void MbD::ASMTSpatialContainer::readAZs(std::vector& lines) +{ + std::string str = lines[0]; + readDoublesInto(str, "AZ", inazs); + lines.erase(lines.begin()); +} + +void MbD::ASMTSpatialContainer::readAlphaXs(std::vector& lines) +{ + std::string str = lines[0]; + readDoublesInto(str, "AlphaX", inalpxs); + lines.erase(lines.begin()); +} + +void MbD::ASMTSpatialContainer::readAlphaYs(std::vector& lines) +{ + std::string str = lines[0]; + readDoublesInto(str, "AlphaY", inalpys); + lines.erase(lines.begin()); +} + +void MbD::ASMTSpatialContainer::readAlphaZs(std::vector& lines) +{ + std::string str = lines[0]; + readDoublesInto(str, "AlphaZ", inalpzs); + lines.erase(lines.begin()); +} + +void MbD::ASMTSpatialContainer::createMbD(std::shared_ptr mbdSys, std::shared_ptr mbdUnits) +{ + auto mbdPart = CREATE::With(); + mbdObject = mbdPart; + mbdPart->name = fullName(""); + mbdPart->m = principalMassMarker->mass / mbdUnits->mass; + mbdPart->aJ = principalMassMarker->momentOfInertias->times(1.0 / mbdUnits->aJ); + mbdPart->qX(rOcmO()->times(1.0 / mbdUnits->length)); + mbdPart->qE(qEp()); + mbdPart->qXdot(vOcmO()->times(1.0 / mbdUnits->velocity)); + mbdPart->omeOpO(omeOpO()->times(1.0 / mbdUnits->omega)); + mbdPart->qXddot(std::make_shared>(3, 0)); + mbdPart->qEddot(std::make_shared>(4, 0)); + mbdSys->addPart(mbdPart); + for (auto& refPoint : *refPoints) { + refPoint->createMbD(mbdSys, mbdUnits); + } + for (auto& refCurve : *refCurves) { + refCurve->createMbD(mbdSys, mbdUnits); + } + for (auto& refSurface : *refSurfaces) { + refSurface->createMbD(mbdSys, mbdUnits); + } +} + +FColDsptr MbD::ASMTSpatialContainer::rOcmO() +{ + auto& rOPO = position3D; + auto& aAOP = rotationMatrix; + auto& rPcmP = principalMassMarker->position3D; + auto rOcmO = rOPO->plusFullColumn(aAOP->timesFullColumn(rPcmP)); + return rOcmO; +} + +std::shared_ptr> MbD::ASMTSpatialContainer::qEp() +{ + auto& aAOP = rotationMatrix; + auto& aAPcm = principalMassMarker->rotationMatrix; + auto aAOcm = aAOP->timesFullMatrix(aAPcm); + return aAOcm->asEulerParameters(); +} + +FColDsptr MbD::ASMTSpatialContainer::vOcmO() +{ + assert(false); + return FColDsptr(); +} + +FColDsptr MbD::ASMTSpatialContainer::omeOpO() +{ + assert(false); + return FColDsptr(); +} + +std::shared_ptr MbD::ASMTSpatialContainer::part() +{ + return std::make_shared(*this); +} + +void MbD::ASMTSpatialContainer::updateFromMbD() +{ + auto mbdUnts = mbdUnits(); + auto mbdPart = std::static_pointer_cast(mbdObject); + auto rOcmO = mbdPart->qX()->times(mbdUnts->length); + auto aAOp = mbdPart->aAOp(); + auto vOcmO = mbdPart->qXdot()->times(mbdUnts->velocity); + auto omeOPO = mbdPart->omeOpO()->times(mbdUnts->omega); + auto aOcmO = mbdPart->qXddot()->times(mbdUnts->acceleration); + auto alpOPO = mbdPart->alpOpO()->times(mbdUnts->alpha); + auto& rPcmP = principalMassMarker->position3D; + auto& aAPp = principalMassMarker->rotationMatrix; + auto aAOP = aAOp->timesTransposeFullMatrix(aAPp); + auto rPcmO = aAOP->timesFullColumn(rPcmP); + auto rOPO = rOcmO->minusFullColumn(rPcmO); + auto vOPO = vOcmO->minusFullColumn(omeOPO->cross(rPcmO)); + auto aOPO = aOcmO->minusFullColumn(alpOPO->cross(rPcmO))->minusFullColumn(omeOPO->cross(omeOPO->cross(rPcmO))); + xs->push_back(rOPO->at(0)); + ys->push_back(rOPO->at(1)); + zs->push_back(rOPO->at(2)); + auto bryantAngles = aAOP->bryantAngles(); + bryxs->push_back(bryantAngles->at(0)); + bryys->push_back(bryantAngles->at(1)); + bryzs->push_back(bryantAngles->at(2)); + vxs->push_back(vOPO->at(0)); + vys->push_back(vOPO->at(1)); + vzs->push_back(vOPO->at(2)); + omexs->push_back(omeOPO->at(0)); + omeys->push_back(omeOPO->at(1)); + omezs->push_back(omeOPO->at(2)); + axs->push_back(aOPO->at(0)); + ays->push_back(aOPO->at(1)); + azs->push_back(aOPO->at(2)); + alpxs->push_back(alpOPO->at(0)); + alpys->push_back(alpOPO->at(1)); + alpzs->push_back(alpOPO->at(2)); +} + +void MbD::ASMTSpatialContainer::compareResults(AnalysisType type) +{ + auto mbdUnts = mbdUnits(); + auto factor = 1.0e-6; + auto lengthTol = mbdUnts->length * factor; + auto angleTol = mbdUnts->angle * factor; + auto velocityTol = mbdUnts->velocity * factor; + auto omegaTol = mbdUnts->omega * factor; + auto accelerationTol = mbdUnts->acceleration * factor; + auto alphaTol = mbdUnts->alpha * factor; + auto i = xs->size() - 1; + //Pos + if (!Numeric::equaltol(xs->at(i), inxs->at(i), lengthTol)) { + std::cout << i << " xs " << xs->at(i) << ", " << i<< lengthTol << std::endl; + std::cout << i << " xs " << xs->at(i) << ", " << inxs->at(i) << ", " << lengthTol << std::endl; + } + if (!Numeric::equaltol(ys->at(i), inys->at(i), lengthTol)) { + std::cout << i << " ys " << ys->at(i) << ", " << inys->at(i) << ", " << lengthTol << std::endl; + } + if (!Numeric::equaltol(zs->at(i), inzs->at(i), lengthTol)) { + std::cout << i << " zs " << zs->at(i) << ", " << inzs->at(i) << ", " << lengthTol << std::endl; + } + if (!Numeric::equaltol(bryxs->at(i), inbryxs->at(i), angleTol)) { + std::cout << i << " bryxs " << bryxs->at(i) << ", " << inbryxs->at(i) << ", " << angleTol << std::endl; + } + if (!Numeric::equaltol(bryys->at(i), inbryys->at(i), angleTol)) { + std::cout << i << " bryys " << bryys->at(i) << ", " << inbryys->at(i) << ", " << angleTol << std::endl; + } + if (!Numeric::equaltol(bryzs->at(i), inbryzs->at(i), angleTol)) { + std::cout << i << " bryzs " << bryzs->at(i) << ", " << inbryzs->at(i) << ", " << angleTol << std::endl; + } + //Vel + if (!Numeric::equaltol(vxs->at(i), invxs->at(i), velocityTol)) { + std::cout << i << " vxs " << vxs->at(i) << ", " << invxs->at(i) << ", " << velocityTol << std::endl; + } + if (!Numeric::equaltol(vys->at(i), invys->at(i), velocityTol)) { + std::cout << i << " vys " << vys->at(i) << ", " << invys->at(i) << ", " << velocityTol << std::endl; + } + if (!Numeric::equaltol(vzs->at(i), invzs->at(i), velocityTol)) { + std::cout << i << " vzs " << vzs->at(i) << ", " << invzs->at(i) << ", " << velocityTol << std::endl; + } + if (!Numeric::equaltol(omexs->at(i), inomexs->at(i), omegaTol)) { + std::cout << i << " omexs " << omexs->at(i) << ", " << inomexs->at(i) << ", " << omegaTol << std::endl; + } + if (!Numeric::equaltol(omeys->at(i), inomeys->at(i), omegaTol)) { + std::cout << i << " omeys " << omeys->at(i) << ", " << inomeys->at(i) << ", " << omegaTol << std::endl; + } + if (!Numeric::equaltol(omezs->at(i), inomezs->at(i), omegaTol)) { + std::cout << i << " omezs " << omezs->at(i) << ", " << inomezs->at(i) << ", " << omegaTol << std::endl; + } + //Acc + if (!Numeric::equaltol(axs->at(i), inaxs->at(i), accelerationTol)) { + std::cout << i << " axs " << axs->at(i) << ", " << inaxs->at(i) << ", " << accelerationTol << std::endl; + } + if (!Numeric::equaltol(ays->at(i), inays->at(i), accelerationTol)) { + std::cout << i << " ays " << ays->at(i) << ", " << inays->at(i) << ", " << accelerationTol << std::endl; + } + if (!Numeric::equaltol(azs->at(i), inazs->at(i), accelerationTol)) { + std::cout << i << " azs " << azs->at(i) << ", " << inazs->at(i) << ", " << accelerationTol << std::endl; + } + if (!Numeric::equaltol(alpxs->at(i), inalpxs->at(i), alphaTol)) { + std::cout << i << " alpxs " << alpxs->at(i) << ", " << inalpxs->at(i) << ", " << alphaTol << std::endl; + } + if (!Numeric::equaltol(alpys->at(i), inalpys->at(i), alphaTol)) { + std::cout << i << " alpys " << alpys->at(i) << ", " << inalpys->at(i) << ", " << alphaTol << std::endl; + } + if (!Numeric::equaltol(alpzs->at(i), inalpzs->at(i), alphaTol)) { + std::cout << i << " alpzs " << alpzs->at(i) << ", " << inalpzs->at(i) << ", " << alphaTol << std::endl; + } +} diff --git a/MbDCode/ASMTSpatialContainer.h b/MbDCode/ASMTSpatialContainer.h new file mode 100644 index 0000000..b2f0e1c --- /dev/null +++ b/MbDCode/ASMTSpatialContainer.h @@ -0,0 +1,70 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#pragma once + +#include "ASMTSpatialItem.h" +#include "ASMTRefPoint.h" +#include "ASMTRefCurve.h" +#include "ASMTRefSurface.h" +#include "ASMTPrincipalMassMarker.h" +#include "Units.h" + +namespace MbD { + class ASMTSpatialContainer : public ASMTSpatialItem + { + // + public: + void initialize() override; + void readRefPoints(std::vector& lines); + void readRefPoint(std::vector& lines); + void readRefCurves(std::vector& lines); + void readRefCurve(std::vector& lines); + void readRefSurfaces(std::vector& lines); + void readRefSurface(std::vector& lines); + void readXs(std::vector& lines); + void readYs(std::vector& lines); + void readZs(std::vector& lines); + void readBryantxs(std::vector& lines); + void readBryantys(std::vector& lines); + void readBryantzs(std::vector& lines); + void readVXs(std::vector& lines); + void readVYs(std::vector& lines); + void readVZs(std::vector& lines); + void readOmegaXs(std::vector& lines); + void readOmegaYs(std::vector& lines); + void readOmegaZs(std::vector& lines); + void readAXs(std::vector& lines); + void readAYs(std::vector& lines); + void readAZs(std::vector& lines); + void readAlphaXs(std::vector& lines); + void readAlphaYs(std::vector& lines); + void readAlphaZs(std::vector& lines); + void createMbD(std::shared_ptr mbdSys, std::shared_ptr mbdUnits) override; + FColDsptr rOcmO(); + std::shared_ptr> qEp(); + virtual FColDsptr vOcmO(); + virtual FColDsptr omeOpO(); + std::shared_ptr part() override; + void updateFromMbD() override; + void compareResults(AnalysisType type) override; + + std::shared_ptr>> refPoints; + std::shared_ptr>> refCurves; + std::shared_ptr>> refSurfaces; + FRowDsptr xs, ys, zs, bryxs, bryys, bryzs; + FRowDsptr vxs, vys, vzs, omexs, omeys, omezs; + FRowDsptr axs, ays, azs, alpxs, alpys, alpzs; + FRowDsptr inxs, inys, inzs, inbryxs, inbryys, inbryzs; + FRowDsptr invxs, invys, invzs, inomexs, inomeys, inomezs; + FRowDsptr inaxs, inays, inazs, inalpxs, inalpys, inalpzs; + std::shared_ptr principalMassMarker; + + }; +} + diff --git a/MbDCode/ASMTSpatialItem.cpp b/MbDCode/ASMTSpatialItem.cpp new file mode 100644 index 0000000..ac6c25a --- /dev/null +++ b/MbDCode/ASMTSpatialItem.cpp @@ -0,0 +1,67 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#include "ASMTSpatialItem.h" + +using namespace MbD; + +void MbD::ASMTSpatialItem::readPosition3D(std::vector& lines) +{ + assert(lines[0].find("Position3D") != std::string::npos); + lines.erase(lines.begin()); + std::istringstream iss(lines[0]); + position3D = std::make_shared>(); + double d; + while (iss >> d) { + position3D->push_back(d); + } + lines.erase(lines.begin()); +} + +void MbD::ASMTSpatialItem::readRotationMatrix(std::vector& lines) +{ + assert(lines[0].find("RotationMatrix") != std::string::npos); + lines.erase(lines.begin()); + rotationMatrix = std::make_shared>(3, 0); + for (int i = 0; i < 3; i++) + { + auto& row = rotationMatrix->at(i); + std::istringstream iss(lines[0]); + double d; + while (iss >> d) { + row->push_back(d); + } + lines.erase(lines.begin()); + } +} + +void MbD::ASMTSpatialItem::readVelocity3D(std::vector& lines) +{ + assert(lines[0].find("Velocity3D") != std::string::npos); + lines.erase(lines.begin()); + std::istringstream iss(lines[0]); + velocity3D = std::make_shared>(); + double d; + while (iss >> d) { + velocity3D->push_back(d); + } + lines.erase(lines.begin()); +} + +void MbD::ASMTSpatialItem::readOmega3D(std::vector& lines) +{ + assert(lines[0].find("Omega3D") != std::string::npos); + lines.erase(lines.begin()); + std::istringstream iss(lines[0]); + omega3D = std::make_shared>(); + double d; + while (iss >> d) { + omega3D->push_back(d); + } + lines.erase(lines.begin()); +} diff --git a/MbDCode/ASMTSpatialItem.h b/MbDCode/ASMTSpatialItem.h new file mode 100644 index 0000000..744f241 --- /dev/null +++ b/MbDCode/ASMTSpatialItem.h @@ -0,0 +1,28 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#pragma once + +#include "ASMTItem.h" + +namespace MbD { + class ASMTSpatialItem : public ASMTItem + { + // + public: + void readPosition3D(std::vector& lines); + void readRotationMatrix(std::vector& lines); + void readVelocity3D(std::vector& lines); + void readOmega3D(std::vector& lines); + + FColDsptr position3D, velocity3D, omega3D; + FMatDsptr rotationMatrix; + + }; +} + diff --git a/MbDCode/ASMTSphericalJoint.cpp b/MbDCode/ASMTSphericalJoint.cpp new file mode 100644 index 0000000..a5c736d --- /dev/null +++ b/MbDCode/ASMTSphericalJoint.cpp @@ -0,0 +1,16 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#include "ASMTSphericalJoint.h" + +using namespace MbD; + +std::shared_ptr MbD::ASMTSphericalJoint::mbdClassNew() +{ + return CREATE::With(); +} diff --git a/MbDCode/ASMTSphericalJoint.h b/MbDCode/ASMTSphericalJoint.h new file mode 100644 index 0000000..3afabfb --- /dev/null +++ b/MbDCode/ASMTSphericalJoint.h @@ -0,0 +1,23 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#pragma once + +#include "ASMTJoint.h" +#include "SphericalJoint.h" + +namespace MbD { + class ASMTSphericalJoint : public ASMTJoint + { + // + public: + virtual std::shared_ptr mbdClassNew() override; + + }; +} + diff --git a/MbDCode/ASMTTime.cpp b/MbDCode/ASMTTime.cpp new file mode 100644 index 0000000..d3421b2 --- /dev/null +++ b/MbDCode/ASMTTime.cpp @@ -0,0 +1,31 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#include + +#include "ASMTTime.h" +#include "Time.h" +#include "Constant.h" +#include "Product.h" + +using namespace MbD; + +void MbD::ASMTTime::deleteMbD() +{ + xx = nullptr; + expression = nullptr; +} + +void MbD::ASMTTime::createMbD(std::shared_ptr mbdSys, std::shared_ptr mbdUnits) +{ + auto mbdTime = mbdSys->time; + if (xx == mbdTime) return; + auto timeScale = std::make_shared(mbdUnits->time); + auto geoTime = std::make_shared(timeScale, mbdTime); + this->xexpression(mbdTime, geoTime->simplified(geoTime)); +} diff --git a/MbDCode/ASMTTime.h b/MbDCode/ASMTTime.h new file mode 100644 index 0000000..cee5a2c --- /dev/null +++ b/MbDCode/ASMTTime.h @@ -0,0 +1,25 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#pragma once + +#include "ExpressionX.h" +#include "System.h" +#include "Units.h" + +namespace MbD { + class ASMTTime : public ExpressionX + { + // + public: + void deleteMbD(); + void createMbD(std::shared_ptr mbdSys, std::shared_ptr mbdUnits); + + }; +} + diff --git a/MbDCode/ASMTTranslationalJoint.cpp b/MbDCode/ASMTTranslationalJoint.cpp new file mode 100644 index 0000000..8c6a21b --- /dev/null +++ b/MbDCode/ASMTTranslationalJoint.cpp @@ -0,0 +1,16 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#include "ASMTTranslationalJoint.h" + +using namespace MbD; + +std::shared_ptr MbD::ASMTTranslationalJoint::mbdClassNew() +{ + return CREATE::With(); +} diff --git a/MbDCode/ASMTTranslationalJoint.h b/MbDCode/ASMTTranslationalJoint.h new file mode 100644 index 0000000..6eb2fcc --- /dev/null +++ b/MbDCode/ASMTTranslationalJoint.h @@ -0,0 +1,24 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#pragma once + +#include "ASMTJoint.h" +#include "TranslationalJoint.h" + +namespace MbD { + class ASMTTranslationalJoint : public ASMTJoint + { + // + public: + std::shared_ptr mbdClassNew() override; + + + }; +} + diff --git a/MbDCode/ASMTTranslationalMotion.cpp b/MbDCode/ASMTTranslationalMotion.cpp index e3d6a9b..a39d5f0 100644 --- a/MbDCode/ASMTTranslationalMotion.cpp +++ b/MbDCode/ASMTTranslationalMotion.cpp @@ -1,21 +1,80 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "ASMTTranslationalMotion.h" +#include "ASMTAssembly.h" +#include "SymbolicParser.h" +#include "BasicUserFunction.h" +#include "Constant.h" using namespace MbD; void MbD::ASMTTranslationalMotion::parseASMT(std::vector& lines) { - size_t pos = lines[0].find_first_not_of("\t"); - auto leadingTabs = lines[0].substr(0, pos); - assert(lines[0] == (leadingTabs + "Name")); + readName(lines); + readMotionJoint(lines); + readTranslationZ(lines); + + //size_t pos = lines[0].find_first_not_of("\t"); + //auto leadingTabs = lines[0].substr(0, pos); + //assert(lines[0] == (leadingTabs + "Name")); + //lines.erase(lines.begin()); + //name = lines[0]; + //lines.erase(lines.begin()); + //assert(lines[0] == (leadingTabs + "MotionJoint")); + //lines.erase(lines.begin()); + //motionJoint = lines[0]; + //lines.erase(lines.begin()); + //assert(lines[0] == (leadingTabs + "TranslationZ")); + //lines.erase(lines.begin()); + //translationZ = lines[0]; + //lines.erase(lines.begin()); +} + +void MbD::ASMTTranslationalMotion::initMarkers() +{ + auto jt = root()->jointAt(motionJoint); + markerI = jt->markerI; + markerJ = jt->markerJ; +} + +void MbD::ASMTTranslationalMotion::createMbD(std::shared_ptr mbdSys, std::shared_ptr mbdUnits) +{ + ASMTMotion::createMbD(mbdSys, mbdUnits); + auto parser = CREATE::With(); + parser->owner = this; + auto geoTime = owner->root()->geoTime(); + parser->variables->insert(std::make_pair("time", geoTime)); + auto userFunc = CREATE::With(translationZ, 1.0); + parser->parseUserFunction(userFunc); + auto zIJ = parser->stack->top(); + zIJ = Symbolic::times(zIJ, std::make_shared(1.0 / mbdUnits->length)); + zIJ->createMbD(mbdSys, mbdUnits); + std::static_pointer_cast(mbdObject)->zBlk = zIJ->simplified(zIJ); +} + +std::shared_ptr MbD::ASMTTranslationalMotion::mbdClassNew() +{ + return CREATE::With(); +} + +void MbD::ASMTTranslationalMotion::readMotionJoint(std::vector& lines) +{ + assert(lines[0].find("MotionJoint") != std::string::npos); lines.erase(lines.begin()); - name = lines[0]; - lines.erase(lines.begin()); - assert(lines[0] == (leadingTabs + "MotionJoint")); - lines.erase(lines.begin()); - motionJoint = lines[0]; - lines.erase(lines.begin()); - assert(lines[0] == (leadingTabs + "TranslationZ")); - lines.erase(lines.begin()); - translationZ = lines[0]; + motionJoint = readString(lines[0]); + lines.erase(lines.begin()); +} + +void MbD::ASMTTranslationalMotion::readTranslationZ(std::vector& lines) +{ + assert(lines[0].find("TranslationZ") != std::string::npos); + lines.erase(lines.begin()); + translationZ = readString(lines[0]); lines.erase(lines.begin()); } diff --git a/MbDCode/ASMTTranslationalMotion.h b/MbDCode/ASMTTranslationalMotion.h index 38c58c9..6412733 100644 --- a/MbDCode/ASMTTranslationalMotion.h +++ b/MbDCode/ASMTTranslationalMotion.h @@ -1,6 +1,15 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "ASMTMotion.h" +#include "ZTranslation.h" namespace MbD { class ASMTTranslationalMotion : public ASMTMotion @@ -8,8 +17,13 @@ namespace MbD { // public: void parseASMT(std::vector& lines) override; + void initMarkers() override; + void createMbD(std::shared_ptr mbdSys, std::shared_ptr mbdUnits) override; + std::shared_ptr mbdClassNew() override; + void readMotionJoint(std::vector& lines); + void readTranslationZ(std::vector& lines); - std::string name, motionJoint, translationZ; + std::string motionJoint, translationZ; }; } diff --git a/MbDCode/ASMTUniversalJoint.cpp b/MbDCode/ASMTUniversalJoint.cpp new file mode 100644 index 0000000..ffbfb30 --- /dev/null +++ b/MbDCode/ASMTUniversalJoint.cpp @@ -0,0 +1,17 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#include "ASMTUniversalJoint.h" +#include "UniversalJoint.h" + +using namespace MbD; + +std::shared_ptr MbD::ASMTUniversalJoint::mbdClassNew() +{ + return CREATE::With(); +} diff --git a/MbDCode/ASMTUniversalJoint.h b/MbDCode/ASMTUniversalJoint.h new file mode 100644 index 0000000..a171eb6 --- /dev/null +++ b/MbDCode/ASMTUniversalJoint.h @@ -0,0 +1,22 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#pragma once + +#include "ASMTJoint.h" + +namespace MbD { + class ASMTUniversalJoint : public ASMTJoint + { + // + public: + virtual std::shared_ptr mbdClassNew() override; + + }; +} + diff --git a/MbDCode/Abs.cpp b/MbDCode/Abs.cpp new file mode 100644 index 0000000..1ab60b9 --- /dev/null +++ b/MbDCode/Abs.cpp @@ -0,0 +1,26 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#include "Abs.h" + +using namespace MbD; + +MbD::Abs::Abs(Symsptr arg) : FunctionX(arg) +{ +} + +double MbD::Abs::getValue() +{ + return std::abs(xx->getValue()); +} + +std::ostream& MbD::Abs::printOn(std::ostream& s) const +{ + s << "abs(" << xx << ")"; + return s; +} diff --git a/MbDCode/Abs.h b/MbDCode/Abs.h new file mode 100644 index 0000000..94777b2 --- /dev/null +++ b/MbDCode/Abs.h @@ -0,0 +1,26 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#pragma once + +#include "FunctionX.h" + +namespace MbD { + class Abs : public FunctionX + { + // + public: + Abs() = default; + Abs(Symsptr arg); + double getValue() override; + + std::ostream& printOn(std::ostream& s) const override; + + }; +} + diff --git a/MbDCode/AbsConstraint.cpp b/MbDCode/AbsConstraint.cpp index de4f8be..7d32ac2 100644 --- a/MbDCode/AbsConstraint.cpp +++ b/MbDCode/AbsConstraint.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "AbsConstraint.h" #include "PartFrame.h" @@ -15,10 +23,10 @@ AbsConstraint::AbsConstraint(int i) void AbsConstraint::calcPostDynCorrectorIteration() { if (axis < 3) { - aG = static_cast(owner)->qX->at(axis); + aG = static_cast(owner)->qX->at((size_t)axis); } else { - aG = static_cast(owner)->qE->at(axis - 3); + aG = static_cast(owner)->qE->at((size_t)axis - 3); } } @@ -55,10 +63,10 @@ void AbsConstraint::fillAccICIterError(FColDsptr col) auto partFrame = static_cast(owner); double sum; if (axis < 3) { - sum = partFrame->qXddot->at(axis); + sum = partFrame->qXddot->at((size_t)axis); } else { - sum = partFrame->qEddot->at(axis - 3); + sum = partFrame->qEddot->at((size_t)axis - 3); } col->atiplusNumber(iG, sum); } diff --git a/MbDCode/AbsConstraint.h b/MbDCode/AbsConstraint.h index 41eb388..992943d 100644 --- a/MbDCode/AbsConstraint.h +++ b/MbDCode/AbsConstraint.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "Constraint.h" diff --git a/MbDCode/AccICKineNewtonRaphson.cpp b/MbDCode/AccICKineNewtonRaphson.cpp index 911983b..8cb6db8 100644 --- a/MbDCode/AccICKineNewtonRaphson.cpp +++ b/MbDCode/AccICKineNewtonRaphson.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "AccICKineNewtonRaphson.h" #include "SystemSolver.h" diff --git a/MbDCode/AccICKineNewtonRaphson.h b/MbDCode/AccICKineNewtonRaphson.h index d615c6f..09092e5 100644 --- a/MbDCode/AccICKineNewtonRaphson.h +++ b/MbDCode/AccICKineNewtonRaphson.h @@ -1,11 +1,19 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once -#include "AccNewtonRaphson.h" +#include "AccICNewtonRaphson.h" namespace MbD { - class AccICKineNewtonRaphson : public AccNewtonRaphson + class AccICKineNewtonRaphson : public AccICNewtonRaphson { - // + //Kinematics with under constrained system public: void initializeGlobally() override; void preRun() override; diff --git a/MbDCode/AccICNewtonRaphson.cpp b/MbDCode/AccICNewtonRaphson.cpp index 368311a..e0de975 100644 --- a/MbDCode/AccICNewtonRaphson.cpp +++ b/MbDCode/AccICNewtonRaphson.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "AccICNewtonRaphson.h" #include "SystemSolver.h" @@ -10,7 +18,7 @@ bool AccICNewtonRaphson::isConverged() void AccICNewtonRaphson::preRun() { - std::string str("MbD: Solving for quasi kinematic acceleration."); + std::string str("MbD: Solving for acceleration initial conditions."); system->logString(str); AccNewtonRaphson::preRun(); } diff --git a/MbDCode/AccICNewtonRaphson.h b/MbDCode/AccICNewtonRaphson.h index f71ec79..911e2cc 100644 --- a/MbDCode/AccICNewtonRaphson.h +++ b/MbDCode/AccICNewtonRaphson.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "AccNewtonRaphson.h" @@ -5,7 +13,7 @@ namespace MbD { class AccICNewtonRaphson : public AccNewtonRaphson { - // + //IC acceleration with fully or under constrained system public: bool isConverged() override; void preRun() override; diff --git a/MbDCode/AccKineNewtonRaphson.cpp b/MbDCode/AccKineNewtonRaphson.cpp index 42830c3..fc3adc8 100644 --- a/MbDCode/AccKineNewtonRaphson.cpp +++ b/MbDCode/AccKineNewtonRaphson.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "AccKineNewtonRaphson.h" #include "SystemSolver.h" diff --git a/MbDCode/AccKineNewtonRaphson.h b/MbDCode/AccKineNewtonRaphson.h index 46bb080..8036e0c 100644 --- a/MbDCode/AccKineNewtonRaphson.h +++ b/MbDCode/AccKineNewtonRaphson.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "AccNewtonRaphson.h" @@ -5,7 +13,7 @@ namespace MbD { class AccKineNewtonRaphson : public AccNewtonRaphson { - // + //Kinematics with fully constrained system public: void initializeGlobally() override; void preRun() override; diff --git a/MbDCode/AccNewtonRaphson.cpp b/MbDCode/AccNewtonRaphson.cpp index b7e6bec..803768e 100644 --- a/MbDCode/AccNewtonRaphson.cpp +++ b/MbDCode/AccNewtonRaphson.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "AccNewtonRaphson.h" #include "SystemSolver.h" #include "Part.h" @@ -58,7 +66,7 @@ void AccNewtonRaphson::fillY() item->fillAccICIterError(y); //std::cout << item->name << *y << std::endl; }); - std::cout << *y << std::endl; + //std::cout << *y << std::endl; } void AccNewtonRaphson::incrementIterNo() diff --git a/MbDCode/AccNewtonRaphson.h b/MbDCode/AccNewtonRaphson.h index 8c5b067..3427d09 100644 --- a/MbDCode/AccNewtonRaphson.h +++ b/MbDCode/AccNewtonRaphson.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "SystemNewtonRaphson.h" diff --git a/MbDCode/AngleJoint.cpp b/MbDCode/AngleJoint.cpp index 6c9bb55..8387f57 100644 --- a/MbDCode/AngleJoint.cpp +++ b/MbDCode/AngleJoint.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "AngleJoint.h" #include "CREATE.h" #include "System.h" diff --git a/MbDCode/AngleJoint.h b/MbDCode/AngleJoint.h index d39184c..146713c 100644 --- a/MbDCode/AngleJoint.h +++ b/MbDCode/AngleJoint.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "Joint.h" diff --git a/MbDCode/AngleZIecJec.cpp b/MbDCode/AngleZIecJec.cpp index 3bb2bf9..443d225 100644 --- a/MbDCode/AngleZIecJec.cpp +++ b/MbDCode/AngleZIecJec.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include #include "AngleZIecJec.h" @@ -9,7 +17,7 @@ MbD::AngleZIecJec::AngleZIecJec() { } -MbD::AngleZIecJec::AngleZIecJec(EndFrmcptr frmi, EndFrmcptr frmj) : KinematicIeJe(frmi, frmj) +MbD::AngleZIecJec::AngleZIecJec(EndFrmsptr frmi, EndFrmsptr frmj) : KinematicIeJe(frmi, frmj) { } diff --git a/MbDCode/AngleZIecJec.h b/MbDCode/AngleZIecJec.h index 294161a..2a60d92 100644 --- a/MbDCode/AngleZIecJec.h +++ b/MbDCode/AngleZIecJec.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "KinematicIeJe.h" @@ -9,7 +17,7 @@ namespace MbD { //thez aA00IeJe aA10IeJe cosOverSSq sinOverSSq twoCosSinOverSSqSq dSqOverSSqSq public: AngleZIecJec(); - AngleZIecJec(EndFrmcptr frmi, EndFrmcptr frmj); + AngleZIecJec(EndFrmsptr frmi, EndFrmsptr frmj); void calcPostDynCorrectorIteration() override; virtual void init_aAijIeJe() = 0; diff --git a/MbDCode/AngleZIeqcJec.cpp b/MbDCode/AngleZIeqcJec.cpp index 609a2ff..e6aee7c 100644 --- a/MbDCode/AngleZIeqcJec.cpp +++ b/MbDCode/AngleZIeqcJec.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "AngleZIeqcJec.h" #include "CREATE.h" @@ -7,7 +15,7 @@ MbD::AngleZIeqcJec::AngleZIeqcJec() { } -MbD::AngleZIeqcJec::AngleZIeqcJec(EndFrmcptr frmi, EndFrmcptr frmj) : AngleZIecJec(frmi, frmj) +MbD::AngleZIeqcJec::AngleZIeqcJec(EndFrmsptr frmi, EndFrmsptr frmj) : AngleZIecJec(frmi, frmj) { } diff --git a/MbDCode/AngleZIeqcJec.h b/MbDCode/AngleZIeqcJec.h index 73794c7..61774ba 100644 --- a/MbDCode/AngleZIeqcJec.h +++ b/MbDCode/AngleZIeqcJec.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "AngleZIecJec.h" @@ -8,7 +16,7 @@ namespace MbD { //pthezpEI ppthezpEIpEI pcthezpEI psthezpEI public: AngleZIeqcJec(); - AngleZIeqcJec(EndFrmcptr frmi, EndFrmcptr frmj); + AngleZIeqcJec(EndFrmsptr frmi, EndFrmsptr frmj); void calcPostDynCorrectorIteration() override; void init_aAijIeJe() override; diff --git a/MbDCode/AngleZIeqcJeqc.cpp b/MbDCode/AngleZIeqcJeqc.cpp index 67bf140..9729777 100644 --- a/MbDCode/AngleZIeqcJeqc.cpp +++ b/MbDCode/AngleZIeqcJeqc.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "AngleZIeqcJeqc.h" #include "CREATE.h" #include "DirectionCosineIeqcJeqc.h" @@ -8,7 +16,7 @@ MbD::AngleZIeqcJeqc::AngleZIeqcJeqc() { } -MbD::AngleZIeqcJeqc::AngleZIeqcJeqc(EndFrmcptr frmi, EndFrmcptr frmj) : AngleZIeqcJec(frmi, frmj) +MbD::AngleZIeqcJeqc::AngleZIeqcJeqc(EndFrmsptr frmi, EndFrmsptr frmj) : AngleZIeqcJec(frmi, frmj) { } diff --git a/MbDCode/AngleZIeqcJeqc.h b/MbDCode/AngleZIeqcJeqc.h index 3fb5b48..fa73ac5 100644 --- a/MbDCode/AngleZIeqcJeqc.h +++ b/MbDCode/AngleZIeqcJeqc.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "AngleZIeqcJec.h" @@ -8,7 +16,7 @@ namespace MbD { //pthezpEJ ppthezpEIpEJ ppthezpEJpEJ public: AngleZIeqcJeqc(); - AngleZIeqcJeqc(EndFrmcptr frmi, EndFrmcptr frmj); + AngleZIeqcJeqc(EndFrmsptr frmi, EndFrmsptr frmj); void calcPostDynCorrectorIteration() override; void init_aAijIeJe() override; diff --git a/MbDCode/AnyGeneralSpline.cpp b/MbDCode/AnyGeneralSpline.cpp new file mode 100644 index 0000000..c4d8e12 --- /dev/null +++ b/MbDCode/AnyGeneralSpline.cpp @@ -0,0 +1,15 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#include "AnyGeneralSpline.h" + +using namespace MbD; + +MbD::AnyGeneralSpline::AnyGeneralSpline(Symsptr arg) : FunctionFromData(arg) +{ +} diff --git a/MbDCode/AnyGeneralSpline.h b/MbDCode/AnyGeneralSpline.h new file mode 100644 index 0000000..327117d --- /dev/null +++ b/MbDCode/AnyGeneralSpline.h @@ -0,0 +1,21 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#pragma once + +#include "FunctionFromData.h" + +namespace MbD { + class AnyGeneralSpline : public FunctionFromData + { + //derivs degree index delta + public: + AnyGeneralSpline() = default; + AnyGeneralSpline(Symsptr arg); + }; +} diff --git a/MbDCode/AnyPosICNewtonRaphson.cpp b/MbDCode/AnyPosICNewtonRaphson.cpp index 5b509fe..94854dc 100644 --- a/MbDCode/AnyPosICNewtonRaphson.cpp +++ b/MbDCode/AnyPosICNewtonRaphson.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "AnyPosICNewtonRaphson.h" #include "SystemSolver.h" #include "Item.h" diff --git a/MbDCode/AnyPosICNewtonRaphson.h b/MbDCode/AnyPosICNewtonRaphson.h index 46f8b84..e98b9d8 100644 --- a/MbDCode/AnyPosICNewtonRaphson.h +++ b/MbDCode/AnyPosICNewtonRaphson.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "PosNewtonRaphson.h" @@ -7,6 +15,7 @@ namespace MbD { class AnyPosICNewtonRaphson : public PosNewtonRaphson { + //IC with fully or under constrained system //nqsu qsuOld qsuWeights nSingularMatrixError public: void initialize() override; @@ -18,8 +27,8 @@ namespace MbD { void assignEquationNumbers() = 0; int nqsu = -1; - std::shared_ptr> qsuOld; - std::shared_ptr> qsuWeights; + FColDsptr qsuOld; + DiagMatDsptr qsuWeights; int nSingularMatrixError = -1; }; } diff --git a/MbDCode/ArcTan.cpp b/MbDCode/ArcTan.cpp new file mode 100644 index 0000000..eb1bfe9 --- /dev/null +++ b/MbDCode/ArcTan.cpp @@ -0,0 +1,26 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#include "ArcTan.h" + +using namespace MbD; + +MbD::ArcTan::ArcTan(Symsptr arg) : FunctionX(arg) +{ +} + +double MbD::ArcTan::getValue() +{ + return std::atan(xx->getValue()); +} + +std::ostream& MbD::ArcTan::printOn(std::ostream& s) const +{ + s << "arctan(" << xx << ")"; + return s; +} diff --git a/MbDCode/ArcTan.h b/MbDCode/ArcTan.h new file mode 100644 index 0000000..3e378a0 --- /dev/null +++ b/MbDCode/ArcTan.h @@ -0,0 +1,26 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#pragma once + +#include "FunctionX.h" + +namespace MbD { + class ArcTan : public FunctionX + { + // + public: + ArcTan() = default; + ArcTan(Symsptr arg); + double getValue() override; + + std::ostream& printOn(std::ostream& s) const override; + + }; +} + diff --git a/MbDCode/ArcTan2.cpp b/MbDCode/ArcTan2.cpp new file mode 100644 index 0000000..dc0dd06 --- /dev/null +++ b/MbDCode/ArcTan2.cpp @@ -0,0 +1,20 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#include "ArcTan2.h" + +using namespace MbD; + +MbD::ArcTan2::ArcTan2(Symsptr arg, Symsptr arg1) : FunctionXY(arg, arg1) +{ +} + +double MbD::ArcTan2::getValue() +{ + return std::atan2(y->getValue(), x->getValue());; +} diff --git a/MbDCode/ArcTan2.h b/MbDCode/ArcTan2.h new file mode 100644 index 0000000..94253d5 --- /dev/null +++ b/MbDCode/ArcTan2.h @@ -0,0 +1,25 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#pragma once + +#include "FunctionXY.h" + +namespace MbD { + class ArcTan2 : public FunctionXY + { + // + public: + ArcTan2() = default; + ArcTan2(Symsptr arg, Symsptr arg1); + double getValue() override; + + + }; +} + diff --git a/MbDCode/Array.cpp b/MbDCode/Array.cpp index 72f5f95..9de644f 100644 --- a/MbDCode/Array.cpp +++ b/MbDCode/Array.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "Array.h" using namespace MbD; diff --git a/MbDCode/Array.h b/MbDCode/Array.h index 4cf7126..b654812 100644 --- a/MbDCode/Array.h +++ b/MbDCode/Array.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include @@ -6,8 +14,13 @@ #include #include +//#include "Symbolic.h" namespace MbD { + using ListD = std::initializer_list; + using ListListD = std::initializer_list>; + using ListListPairD = std::initializer_list>>; + template class Array : public std::vector { @@ -25,9 +38,16 @@ namespace MbD { double rootMeanSquare(); virtual int numberOfElements(); void swapElems(int i, int ii); - //double maxMagnitude(); + virtual double maxMagnitude() = 0; double maxMagnitudeOfVector(); void equalArrayAt(std::shared_ptr> array, int i); + //virtual void normalizeSelf(); + //virtual void conditionSelf(); + //virtual void conditionSelfWithTol(double tol); + virtual void atiput(int i, T value); + //double length(); + void magnifySelf(T factor); + void atitimes(int i, double factor); virtual std::ostream& printOn(std::ostream& s) const { std::string str = typeid(*this).name(); @@ -76,21 +96,17 @@ namespace MbD { this->at(i) = this->at(ii); this->at(ii) = temp; } - //template - //inline double Array::maxMagnitude() + //template<> + //inline double Array::maxMagnitude() //{ - // if (std::is_arithmetic::value) { - // return this->maxMagnitudeOfVector(); - // } - // else { - // auto answer = 0.0; - // for (int i = 0; i < this->size(); i++) - // { - // auto mag = this->at(i)->maxMagnitude(); - // if (answer < mag) answer = mag; - // } - // return answer; + // auto max = 0.0; + // for (int i = 0; i < this->size(); i++) + // { + // auto element = this->at(i); + // if (element < 0.0) element = -element; + // if (max < element) max = element; // } + // return max; //} template inline double Array::maxMagnitudeOfVector() @@ -111,7 +127,57 @@ namespace MbD { this->at(ii) = array->at(i + ii); } } - using ListD = std::initializer_list; - using ListListD = std::initializer_list>; - using ListListPairD = std::initializer_list>>; + //template<> + //inline void Array::normalizeSelf() + //{ + // auto length = this->length(); + // if (length == 0.0) throw std::runtime_error("Cannot normalize a null vector."); + // this->magnifySelf(1.0 / length); + //} + //template<> + //inline void Array::conditionSelf() + //{ + // constexpr auto epsilon = std::numeric_limits::epsilon(); + // auto tol = maxMagnitude() * epsilon; + // conditionSelfWithTol(tol); + //} + //template<> + //inline void Array::conditionSelfWithTol(double tol) + //{ + // for (int i = 0; i < this->size(); i++) + // { + // auto element = this->at(i); + // if (element < 0.0) element = -element; + // if (element < tol) this->atiput(i, 0.0); + // } + //} + template + inline void Array::atiput(int i, T value) + { + this->at(i) = value; + } + //template<> + //inline double Array::length() + //{ + // auto ssq = 0.0; + // for (int i = 0; i < this->size(); i++) + // { + // auto elem = this->at(i); + // ssq += elem * elem; + // } + // return std::sqrt(ssq); + //} + template + inline void Array::magnifySelf(T factor) + { + for (int i = 0; i < this->size(); i++) + { + this->atitimes(i, factor); + } + } + template + inline void Array::atitimes(int i, double factor) + { + this->at(i) *= factor; + } } \ No newline at end of file diff --git a/MbDCode/AtPointConstraintIJ.cpp b/MbDCode/AtPointConstraintIJ.cpp index 439d976..9af2427 100644 --- a/MbDCode/AtPointConstraintIJ.cpp +++ b/MbDCode/AtPointConstraintIJ.cpp @@ -1,10 +1,18 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "AtPointConstraintIJ.h" #include "DispCompIecJecO.h" #include "CREATE.h" using namespace MbD; -AtPointConstraintIJ::AtPointConstraintIJ(EndFrmcptr frmi, EndFrmcptr frmj, int axisi) : +AtPointConstraintIJ::AtPointConstraintIJ(EndFrmsptr frmi, EndFrmsptr frmj, int axisi) : ConstraintIJ(frmi, frmj), axis(axisi) { } diff --git a/MbDCode/AtPointConstraintIJ.h b/MbDCode/AtPointConstraintIJ.h index aa87708..f8e6919 100644 --- a/MbDCode/AtPointConstraintIJ.h +++ b/MbDCode/AtPointConstraintIJ.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "ConstraintIJ.h" @@ -9,7 +17,7 @@ namespace MbD { { //axis riIeJeO public: - AtPointConstraintIJ(EndFrmcptr frmi, EndFrmcptr frmj, int axisi); + AtPointConstraintIJ(EndFrmsptr frmi, EndFrmsptr frmj, int axisi); void calcPostDynCorrectorIteration() override; void initialize() override; diff --git a/MbDCode/AtPointConstraintIqcJc.cpp b/MbDCode/AtPointConstraintIqcJc.cpp index 8599fdc..6ebc638 100644 --- a/MbDCode/AtPointConstraintIqcJc.cpp +++ b/MbDCode/AtPointConstraintIqcJc.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "AtPointConstraintIqcJc.h" #include "DispCompIeqcJecO.h" #include "CREATE.h" @@ -5,7 +13,7 @@ using namespace MbD; -AtPointConstraintIqcJc::AtPointConstraintIqcJc(EndFrmcptr frmi, EndFrmcptr frmj, int axisi) : +AtPointConstraintIqcJc::AtPointConstraintIqcJc(EndFrmsptr frmi, EndFrmsptr frmj, int axisi) : AtPointConstraintIJ(frmi, frmj, axisi) { } diff --git a/MbDCode/AtPointConstraintIqcJc.h b/MbDCode/AtPointConstraintIqcJc.h index 8a92732..05795ab 100644 --- a/MbDCode/AtPointConstraintIqcJc.h +++ b/MbDCode/AtPointConstraintIqcJc.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "AtPointConstraintIJ.h" @@ -7,7 +15,7 @@ namespace MbD { { //pGpEI ppGpEIpEI iqXIminusOnePlusAxis iqEI public: - AtPointConstraintIqcJc(EndFrmcptr frmi, EndFrmcptr frmj, int axisi); + AtPointConstraintIqcJc(EndFrmsptr frmi, EndFrmsptr frmj, int axisi); void addToJointForceI(FColDsptr col) override; void addToJointTorqueI(FColDsptr col) override; diff --git a/MbDCode/AtPointConstraintIqcJqc.cpp b/MbDCode/AtPointConstraintIqcJqc.cpp index ff0ab74..2359825 100644 --- a/MbDCode/AtPointConstraintIqcJqc.cpp +++ b/MbDCode/AtPointConstraintIqcJqc.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "AtPointConstraintIqcJqc.h" #include "DispCompIeqcJeqcO.h" #include "CREATE.h" @@ -5,7 +13,7 @@ using namespace MbD; -AtPointConstraintIqcJqc::AtPointConstraintIqcJqc(EndFrmcptr frmi, EndFrmcptr frmj, int axisi) : +AtPointConstraintIqcJqc::AtPointConstraintIqcJqc(EndFrmsptr frmi, EndFrmsptr frmj, int axisi) : AtPointConstraintIqcJc(frmi, frmj, axisi) { } diff --git a/MbDCode/AtPointConstraintIqcJqc.h b/MbDCode/AtPointConstraintIqcJqc.h index 6c8c01b..04c3935 100644 --- a/MbDCode/AtPointConstraintIqcJqc.h +++ b/MbDCode/AtPointConstraintIqcJqc.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "AtPointConstraintIqcJc.h" @@ -7,7 +15,7 @@ namespace MbD { { //pGpEJ ppGpEJpEJ iqXJminusOnePlusAxis iqEJ public: - AtPointConstraintIqcJqc(EndFrmcptr frmi, EndFrmcptr frmj, int axisi); + AtPointConstraintIqcJqc(EndFrmsptr frmi, EndFrmsptr frmj, int axisi); void calcPostDynCorrectorIteration() override; void initializeGlobally() override; diff --git a/MbDCode/AtPointConstraintIqctJqc.cpp b/MbDCode/AtPointConstraintIqctJqc.cpp index 41d21ca..21fa93c 100644 --- a/MbDCode/AtPointConstraintIqctJqc.cpp +++ b/MbDCode/AtPointConstraintIqctJqc.cpp @@ -1,10 +1,18 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "AtPointConstraintIqctJqc.h" #include "DispCompIeqctJeqcO.h" #include "CREATE.h" using namespace MbD; -AtPointConstraintIqctJqc::AtPointConstraintIqctJqc(EndFrmcptr frmi, EndFrmcptr frmj, int axisi) : +AtPointConstraintIqctJqc::AtPointConstraintIqctJqc(EndFrmsptr frmi, EndFrmsptr frmj, int axisi) : AtPointConstraintIqcJqc(frmi, frmj, axisi) { } diff --git a/MbDCode/AtPointConstraintIqctJqc.h b/MbDCode/AtPointConstraintIqctJqc.h index 29c0bce..1e6e0f0 100644 --- a/MbDCode/AtPointConstraintIqctJqc.h +++ b/MbDCode/AtPointConstraintIqctJqc.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "AtPointConstraintIqcJqc.h" @@ -7,7 +15,7 @@ namespace MbD { { //pGpt ppGpEIpt ppGptpt public: - AtPointConstraintIqctJqc(EndFrmcptr frmi, EndFrmcptr frmj, int axisi); + AtPointConstraintIqctJqc(EndFrmsptr frmi, EndFrmsptr frmj, int axisi); void calcPostDynCorrectorIteration() override; void fillAccICIterError(FColDsptr col) override; diff --git a/MbDCode/AtPointJoint.cpp b/MbDCode/AtPointJoint.cpp index fce65fb..03205b8 100644 --- a/MbDCode/AtPointJoint.cpp +++ b/MbDCode/AtPointJoint.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "AtPointJoint.h" #include "System.h" #include "CREATE.h" diff --git a/MbDCode/AtPointJoint.h b/MbDCode/AtPointJoint.h index 5b7ace8..e27547e 100644 --- a/MbDCode/AtPointJoint.h +++ b/MbDCode/AtPointJoint.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "Joint.h" diff --git a/MbDCode/BasicIntegrator.cpp b/MbDCode/BasicIntegrator.cpp index 7691746..1ac1826 100644 --- a/MbDCode/BasicIntegrator.cpp +++ b/MbDCode/BasicIntegrator.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "BasicIntegrator.h" #include "CREATE.h" #include "StableBackwardDifference.h" diff --git a/MbDCode/BasicIntegrator.h b/MbDCode/BasicIntegrator.h index 2c06358..10e0514 100644 --- a/MbDCode/BasicIntegrator.h +++ b/MbDCode/BasicIntegrator.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include diff --git a/MbDCode/BasicQuasiIntegrator.cpp b/MbDCode/BasicQuasiIntegrator.cpp index e0629b3..77a07b1 100644 --- a/MbDCode/BasicQuasiIntegrator.cpp +++ b/MbDCode/BasicQuasiIntegrator.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "BasicQuasiIntegrator.h" #include "IntegratorInterface.h" diff --git a/MbDCode/BasicQuasiIntegrator.h b/MbDCode/BasicQuasiIntegrator.h index b458aae..1c53b1e 100644 --- a/MbDCode/BasicQuasiIntegrator.h +++ b/MbDCode/BasicQuasiIntegrator.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "BasicIntegrator.h" diff --git a/MbDCode/BasicUserFunction.cpp b/MbDCode/BasicUserFunction.cpp index 3f4254d..f0430ea 100644 --- a/MbDCode/BasicUserFunction.cpp +++ b/MbDCode/BasicUserFunction.cpp @@ -1,3 +1,22 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "BasicUserFunction.h" +#include "CREATE.h" +#include "Units.h" using namespace MbD; + +MbD::BasicUserFunction::BasicUserFunction(const std::string& expression, double myUnt) : funcText(expression), myUnit(myUnt) +{ +} + +void MbD::BasicUserFunction::initialize() +{ + units = CREATE::With(); +} diff --git a/MbDCode/BasicUserFunction.h b/MbDCode/BasicUserFunction.h index 77ba97f..c3a4d7b 100644 --- a/MbDCode/BasicUserFunction.h +++ b/MbDCode/BasicUserFunction.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include @@ -5,12 +13,18 @@ #include "UserFunction.h" namespace MbD { + class Units; + class BasicUserFunction : public UserFunction { //funcText myUnit units public: + BasicUserFunction(const std::string& expression, double myUnt); + void initialize(); + std::string funcText; double myUnit; + std::shared_ptr units; }; } diff --git a/MbDCode/CADSystem.cpp b/MbDCode/CADSystem.cpp index 3216561..79b1190 100644 --- a/MbDCode/CADSystem.cpp +++ b/MbDCode/CADSystem.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include #include @@ -18,7 +26,6 @@ #include "StateData.h" using namespace MbD; -//using namespace CAD; void CADSystem::outputFor(AnalysisType type) { @@ -277,7 +284,7 @@ void CADSystem::runOndselPiston() std::cout << "rotMotion1->phiBlk " << *(rotMotion1->phiBlk) << std::endl; TheSystem->addJoint(rotMotion1); // - TheSystem->runKINEMATIC(); + TheSystem->runKINEMATIC(TheSystem); } void CADSystem::runPiston() @@ -514,9 +521,17 @@ void CADSystem::runPiston() std::cout << "rotMotion1->phiBlk " << *(rotMotion1->phiBlk) << std::endl; TheSystem->addJoint(rotMotion1); // - TheSystem->runKINEMATIC(); + TheSystem->runKINEMATIC(TheSystem); +} + +void MbD::CADSystem::preMbDrun(std::shared_ptr mbdSys) +{ } void CADSystem::postMbDrun() { } + +void MbD::CADSystem::updateFromMbD() +{ +} diff --git a/MbDCode/CADSystem.h b/MbDCode/CADSystem.h index 519d9c4..9cc0d7c 100644 --- a/MbDCode/CADSystem.h +++ b/MbDCode/CADSystem.h @@ -1,21 +1,27 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include +#include "ExternalSystem.h" #include "System.h" -//using namespace MbD; - -//namespace CAD { namespace MbD { - //class System; class CADSystem { // public: CADSystem() { - mbdSystem->externalSystem = this; + mbdSystem->initialize(); + mbdSystem->externalSystem->cadSystem = this; } void outputFor(AnalysisType type); @@ -23,7 +29,9 @@ namespace MbD { void logString(double value); void runOndselPiston(); void runPiston(); + void preMbDrun(std::shared_ptr mbdSys); void postMbDrun(); + void updateFromMbD(); std::shared_ptr mbdSystem = std::make_shared(); diff --git a/MbDCode/CREATE.cpp b/MbDCode/CREATE.cpp index 125e766..688328d 100644 --- a/MbDCode/CREATE.cpp +++ b/MbDCode/CREATE.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "CREATE.h" using namespace MbD; diff --git a/MbDCode/CREATE.h b/MbDCode/CREATE.h index fdf9811..8afb8a3 100644 --- a/MbDCode/CREATE.h +++ b/MbDCode/CREATE.h @@ -1,4 +1,12 @@ -//This header file causes wierd problems in Visual Studio when included in subclasses of std::vector or std::map. +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +//This header file causes wierd problems in Visual Studio when included in subclasses of std::vector or std::map. Why? #pragma once @@ -20,6 +28,11 @@ namespace MbD { inst->initialize(); return inst; } + static std::shared_ptr With(const std::string& expr, double unit) { + auto inst = std::make_shared(expr, unit); + inst->initialize(); + return inst; + } static std::shared_ptr With() { auto inst = std::make_shared(); inst->initialize(); @@ -40,22 +53,22 @@ namespace MbD { inst->initialize(); return inst; } - static std::shared_ptr With(EndFrmcptr frmi, EndFrmcptr frmj) { + static std::shared_ptr With(std::shared_ptr frmi, std::shared_ptr frmj) { auto inst = std::make_shared(frmi, frmj); inst->initialize(); return inst; } - static std::shared_ptr With(EndFrmcptr frmi, EndFrmcptr frmj, int axis) { + static std::shared_ptr With(std::shared_ptr frmi, std::shared_ptr frmj, int axis) { auto inst = std::make_shared(frmi, frmj, axis); inst->initialize(); return inst; } - static std::shared_ptr With(EndFrmcptr frmi, EndFrmcptr frmj, EndFrmcptr frmk, int axisk) { + static std::shared_ptr With(std::shared_ptr frmi, std::shared_ptr frmj, std::shared_ptr frmk, int axisk) { auto inst = std::make_shared(frmi, frmj, frmk, axisk); inst->initialize(); return inst; } - static std::shared_ptr ConstraintWith(EndFrmcptr frmi, EndFrmcptr frmj, int axis) { + static std::shared_ptr ConstraintWith(std::shared_ptr frmi, std::shared_ptr frmj, int axis) { std::shared_ptr inst; std::string str = typeid(T(frmi, frmj, axis)).name(); if (str == "class MbD::AtPointConstraintIJ") { @@ -77,12 +90,12 @@ namespace MbD { inst->initialize(); return inst; } - static std::shared_ptr With(EndFrmcptr frmi, EndFrmcptr frmj, int axisi, int axisj) { + static std::shared_ptr With(std::shared_ptr frmi, std::shared_ptr frmj, int axisi, int axisj) { auto inst = std::make_shared(frmi, frmj, axisi, axisj); inst->initialize(); return inst; } - static std::shared_ptr ConstraintWith(EndFrmcptr frmi, EndFrmcptr frmj, int axisi, int axisj) { + static std::shared_ptr ConstraintWith(std::shared_ptr frmi, std::shared_ptr frmj, int axisi, int axisj) { std::shared_ptr inst; std::string str = typeid(T(frmi, frmj, axisi, axisj)).name(); if (str == "class MbD::DirectionCosineConstraintIJ") { diff --git a/MbDCode/CartesianFrame.cpp b/MbDCode/CartesianFrame.cpp index 6199931..5762847 100644 --- a/MbDCode/CartesianFrame.cpp +++ b/MbDCode/CartesianFrame.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "CartesianFrame.h" using namespace MbD; diff --git a/MbDCode/CartesianFrame.h b/MbDCode/CartesianFrame.h index 737f742..d255d10 100644 --- a/MbDCode/CartesianFrame.h +++ b/MbDCode/CartesianFrame.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "Item.h" diff --git a/MbDCode/CompoundJoint.cpp b/MbDCode/CompoundJoint.cpp index a3143a6..4df7549 100644 --- a/MbDCode/CompoundJoint.cpp +++ b/MbDCode/CompoundJoint.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "CompoundJoint.h" using namespace MbD; diff --git a/MbDCode/CompoundJoint.h b/MbDCode/CompoundJoint.h index cc1a45b..96e49bc 100644 --- a/MbDCode/CompoundJoint.h +++ b/MbDCode/CompoundJoint.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "Joint.h" diff --git a/MbDCode/ConstVelConstraintIJ.cpp b/MbDCode/ConstVelConstraintIJ.cpp index 9599ee2..b5479aa 100644 --- a/MbDCode/ConstVelConstraintIJ.cpp +++ b/MbDCode/ConstVelConstraintIJ.cpp @@ -1,9 +1,17 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "ConstVelConstraintIJ.h" #include "DirectionCosineIecJec.h" using namespace MbD; -ConstVelConstraintIJ::ConstVelConstraintIJ(EndFrmcptr frmi, EndFrmcptr frmj) : ConstraintIJ(frmi, frmj) +ConstVelConstraintIJ::ConstVelConstraintIJ(EndFrmsptr frmi, EndFrmsptr frmj) : ConstraintIJ(frmi, frmj) { } diff --git a/MbDCode/ConstVelConstraintIJ.h b/MbDCode/ConstVelConstraintIJ.h index 4ec9ede..de7c793 100644 --- a/MbDCode/ConstVelConstraintIJ.h +++ b/MbDCode/ConstVelConstraintIJ.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "ConstraintIJ.h" @@ -9,7 +17,7 @@ namespace MbD { { //aA01IeJe aA10IeJe public: - ConstVelConstraintIJ(EndFrmcptr frmi, EndFrmcptr frmj); + ConstVelConstraintIJ(EndFrmsptr frmi, EndFrmsptr frmj); void calcPostDynCorrectorIteration() override; virtual void initA01IeJe(); diff --git a/MbDCode/ConstVelConstraintIqcJc.cpp b/MbDCode/ConstVelConstraintIqcJc.cpp index 8841c19..315453b 100644 --- a/MbDCode/ConstVelConstraintIqcJc.cpp +++ b/MbDCode/ConstVelConstraintIqcJc.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include #include "ConstVelConstraintIqcJc.h" @@ -8,7 +16,7 @@ using namespace MbD; -MbD::ConstVelConstraintIqcJc::ConstVelConstraintIqcJc(EndFrmcptr frmi, EndFrmcptr frmj) : ConstVelConstraintIJ(frmi, frmj) +MbD::ConstVelConstraintIqcJc::ConstVelConstraintIqcJc(EndFrmsptr frmi, EndFrmsptr frmj) : ConstVelConstraintIJ(frmi, frmj) { } diff --git a/MbDCode/ConstVelConstraintIqcJc.h b/MbDCode/ConstVelConstraintIqcJc.h index a9c0b19..1435182 100644 --- a/MbDCode/ConstVelConstraintIqcJc.h +++ b/MbDCode/ConstVelConstraintIqcJc.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "ConstVelConstraintIJ.h" @@ -7,7 +15,7 @@ namespace MbD { { //pGpEI ppGpEIpEI iqEI public: - ConstVelConstraintIqcJc(EndFrmcptr frmi, EndFrmcptr frmj); + ConstVelConstraintIqcJc(EndFrmsptr frmi, EndFrmsptr frmj); void calcPostDynCorrectorIteration() override; void fillAccICIterError(FColDsptr col) override; diff --git a/MbDCode/ConstVelConstraintIqcJqc.cpp b/MbDCode/ConstVelConstraintIqcJqc.cpp index 0d5fd40..d8fa84e 100644 --- a/MbDCode/ConstVelConstraintIqcJqc.cpp +++ b/MbDCode/ConstVelConstraintIqcJqc.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "ConstVelConstraintIqcJqc.h" #include "DirectionCosineIeqcJeqc.h" #include "EndFrameqc.h" @@ -5,7 +13,7 @@ using namespace MbD; -MbD::ConstVelConstraintIqcJqc::ConstVelConstraintIqcJqc(EndFrmcptr frmi, EndFrmcptr frmj) : ConstVelConstraintIqcJc(frmi, frmj) +MbD::ConstVelConstraintIqcJqc::ConstVelConstraintIqcJqc(EndFrmsptr frmi, EndFrmsptr frmj) : ConstVelConstraintIqcJc(frmi, frmj) { } diff --git a/MbDCode/ConstVelConstraintIqcJqc.h b/MbDCode/ConstVelConstraintIqcJqc.h index f98bf5a..116549c 100644 --- a/MbDCode/ConstVelConstraintIqcJqc.h +++ b/MbDCode/ConstVelConstraintIqcJqc.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "ConstVelConstraintIqcJc.h" @@ -7,7 +15,7 @@ namespace MbD { { //pGpEJ ppGpEIpEJ ppGpEJpEJ iqEJ public: - ConstVelConstraintIqcJqc(EndFrmcptr frmi, EndFrmcptr frmj); + ConstVelConstraintIqcJqc(EndFrmsptr frmi, EndFrmsptr frmj); void calcPostDynCorrectorIteration() override; void fillAccICIterError(FColDsptr col) override; diff --git a/MbDCode/Constant.cpp b/MbDCode/Constant.cpp index d11c445..d770a5a 100644 --- a/MbDCode/Constant.cpp +++ b/MbDCode/Constant.cpp @@ -1,4 +1,14 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "Constant.h" +#include "System.h" +#include "Units.h" using namespace MbD; @@ -10,7 +20,7 @@ Constant::Constant(double val) : Variable(val) { } -Symsptr Constant::differentiateWRT(Symsptr sptr, Symsptr var) +Symsptr MbD::Constant::differentiateWRT(Symsptr var) { return std::make_shared(0.0); } @@ -20,6 +30,36 @@ bool Constant::isConstant() return true; } +Symsptr MbD::Constant::expandUntil(std::shared_ptr> set) +{ + return clonesptr(); +} + +Symsptr MbD::Constant::clonesptr() +{ + return std::make_shared(*this); +} + +bool MbD::Constant::isZero() +{ + return value == 0.0; +} + +bool MbD::Constant::isOne() +{ + return value == 1.0; +} + +void MbD::Constant::createMbD(std::shared_ptr mbdSys, std::shared_ptr mbdUnits) +{ + return; +} + +double MbD::Constant::getValue() +{ + return value; +} + std::ostream& Constant::printOn(std::ostream& s) const { return s << this->value; diff --git a/MbDCode/Constant.h b/MbDCode/Constant.h index bd007ba..a3fec3d 100644 --- a/MbDCode/Constant.h +++ b/MbDCode/Constant.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "Variable.h" @@ -8,8 +16,15 @@ namespace MbD { public: Constant(); Constant(double val); - Symsptr differentiateWRT(Symsptr sptr, Symsptr var) override; + Symsptr differentiateWRT(Symsptr var) override; bool isConstant() override; + Symsptr expandUntil(std::shared_ptr> set) override; + Symsptr clonesptr() override; + bool isZero() override; + bool isOne() override; + void createMbD(std::shared_ptr mbdSys, std::shared_ptr mbdUnits) override; + double getValue() override; + std::ostream& printOn(std::ostream& s) const override; }; } diff --git a/MbDCode/ConstantGravity.cpp b/MbDCode/ConstantGravity.cpp new file mode 100644 index 0000000..83e8065 --- /dev/null +++ b/MbDCode/ConstantGravity.cpp @@ -0,0 +1,20 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#include "ConstantGravity.h" +#include "System.h" +#include "Part.h" + +using namespace MbD; + +void MbD::ConstantGravity::fillAccICIterError(FColDsptr col) +{ + for (auto& part : *(root()->parts)) { + col->atiplusFullColumn(part->iqX(), gXYZ->times(part->m)); + } +} diff --git a/MbDCode/ConstantGravity.h b/MbDCode/ConstantGravity.h new file mode 100644 index 0000000..c2fd6e0 --- /dev/null +++ b/MbDCode/ConstantGravity.h @@ -0,0 +1,23 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#pragma once + +#include "ForceTorqueItem.h" + +namespace MbD { + class ConstantGravity : public ForceTorqueItem + { + // + public: + void fillAccICIterError(FColDsptr col) override; + + FColDsptr gXYZ; + }; +} + diff --git a/MbDCode/ConstantVelocityJoint.cpp b/MbDCode/ConstantVelocityJoint.cpp index 7a421c6..7bef9b0 100644 --- a/MbDCode/ConstantVelocityJoint.cpp +++ b/MbDCode/ConstantVelocityJoint.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "ConstantVelocityJoint.h" #include "System.h" #include "AtPointConstraintIJ.h" @@ -27,7 +35,7 @@ void MbD::ConstantVelocityJoint::initializeGlobally() } } -void MbD::ConstantVelocityJoint::connectsItoJ(EndFrmcptr frmIe, EndFrmcptr frmJe) +void MbD::ConstantVelocityJoint::connectsItoJ(EndFrmsptr frmIe, EndFrmsptr frmJe) { //"Subsequent prescribed motions may make frmIe, frmJe become prescribed end frames." //"Use newCopyEndFrameqc to prevent efrms from becoming EndFrameqct." diff --git a/MbDCode/ConstantVelocityJoint.h b/MbDCode/ConstantVelocityJoint.h index 9291ec6..3574854 100644 --- a/MbDCode/ConstantVelocityJoint.h +++ b/MbDCode/ConstantVelocityJoint.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "AtPointJoint.h" @@ -10,7 +18,7 @@ namespace MbD { ConstantVelocityJoint(); ConstantVelocityJoint(const char* str); void initializeGlobally() override; - void connectsItoJ(EndFrmcptr frmI, EndFrmcptr frmJ) override; + void connectsItoJ(EndFrmsptr frmI, EndFrmsptr frmJ) override; }; diff --git a/MbDCode/Constraint.cpp b/MbDCode/Constraint.cpp index 0041738..93f02c7 100644 --- a/MbDCode/Constraint.cpp +++ b/MbDCode/Constraint.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include #include diff --git a/MbDCode/Constraint.h b/MbDCode/Constraint.h index 1888a72..d470bb4 100644 --- a/MbDCode/Constraint.h +++ b/MbDCode/Constraint.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include diff --git a/MbDCode/Constraint.h.bak b/MbDCode/Constraint.h.bak deleted file mode 100644 index e0911ed..0000000 --- a/MbDCode/Constraint.h.bak +++ /dev/null @@ -1,24 +0,0 @@ -#pragma once -#include - -#include "Item.h" -//#include "PartFrame.h" - -namespace MbD { - class Constraint : public Item - { - //iG aG lam mu lamDeriv owner - public: - Constraint(); - Constraint(const char* str); - void initialize(); - void setOwner(Item* x); - Item* getOwner(); - - int iG; - double aG; //Constraint function - double lam; //Lambda is Lagrange Multiplier - Item* owner; //A Joint or PartFrame owns the constraint - }; -} - diff --git a/MbDCode/ConstraintIJ.cpp b/MbDCode/ConstraintIJ.cpp index 3c95d84..159bc68 100644 --- a/MbDCode/ConstraintIJ.cpp +++ b/MbDCode/ConstraintIJ.cpp @@ -1,9 +1,17 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "ConstraintIJ.h" #include "EndFramec.h" using namespace MbD; -ConstraintIJ::ConstraintIJ(EndFrmcptr frmi, EndFrmcptr frmj) : frmI(frmi), frmJ(frmj) +ConstraintIJ::ConstraintIJ(EndFrmsptr frmi, EndFrmsptr frmj) : frmI(frmi), frmJ(frmj) { } diff --git a/MbDCode/ConstraintIJ.h b/MbDCode/ConstraintIJ.h index 587e8a0..cc8188a 100644 --- a/MbDCode/ConstraintIJ.h +++ b/MbDCode/ConstraintIJ.h @@ -1,19 +1,30 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "Constraint.h" -#include "EndFramec.h" //EndFrmcptr is defined +//#include "EndFramec.h" //EndFrmsptr is defined namespace MbD { + class EndFramec; + using EndFrmsptr = std::shared_ptr; + class ConstraintIJ : public Constraint { //frmI frmJ aConstant public: - ConstraintIJ(EndFrmcptr frmi, EndFrmcptr frmj); + ConstraintIJ(EndFrmsptr frmi, EndFrmsptr frmj); void initialize() override; void setConstant(double value) override; - EndFrmcptr frmI, frmJ; + EndFrmsptr frmI, frmJ; double aConstant; }; } diff --git a/MbDCode/Cosine.cpp b/MbDCode/Cosine.cpp new file mode 100644 index 0000000..fc8bcb9 --- /dev/null +++ b/MbDCode/Cosine.cpp @@ -0,0 +1,33 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#include "Cosine.h" +#include "Sine.h" +#include "Negative.h" + +using namespace MbD; + +MbD::Cosine::Cosine(Symsptr arg) : FunctionX(arg) +{ +} + +double MbD::Cosine::getValue() +{ + return std::cos(xx->getValue()); +} + +Symsptr MbD::Cosine::differentiateWRTx() +{ + return std::make_shared(std::make_shared(xx)); +} + +std::ostream& MbD::Cosine::printOn(std::ostream& s) const +{ + s << "cos(" << xx << ")"; + return s; +} diff --git a/MbDCode/Cosine.h b/MbDCode/Cosine.h new file mode 100644 index 0000000..567cd0d --- /dev/null +++ b/MbDCode/Cosine.h @@ -0,0 +1,27 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#pragma once + +#include "FunctionX.h" + +namespace MbD { + class Cosine : public FunctionX + { + // + public: + Cosine() = default; + Cosine(Symsptr arg); + double getValue() override; + Symsptr differentiateWRTx() override; + + std::ostream& printOn(std::ostream& s) const override; + + }; +} + diff --git a/MbDCode/CylSphJoint.cpp b/MbDCode/CylSphJoint.cpp index 725ed28..065facc 100644 --- a/MbDCode/CylSphJoint.cpp +++ b/MbDCode/CylSphJoint.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "CylSphJoint.h" #include "CREATE.h" #include "DistancexyConstraintIJ.h" diff --git a/MbDCode/CylSphJoint.h b/MbDCode/CylSphJoint.h index 7742d9f..5c17675 100644 --- a/MbDCode/CylSphJoint.h +++ b/MbDCode/CylSphJoint.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "CompoundJoint.h" diff --git a/MbDCode/CylindricalJoint.cpp b/MbDCode/CylindricalJoint.cpp index 3cfe5ed..f795a56 100644 --- a/MbDCode/CylindricalJoint.cpp +++ b/MbDCode/CylindricalJoint.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "CylindricalJoint.h" #include "System.h" #include "DirectionCosineConstraintIJ.h" diff --git a/MbDCode/CylindricalJoint.cpp.bak b/MbDCode/CylindricalJoint.cpp.bak deleted file mode 100644 index ae20cdd..0000000 --- a/MbDCode/CylindricalJoint.cpp.bak +++ /dev/null @@ -1 +0,0 @@ -#include "CylindricalJoint.h" diff --git a/MbDCode/CylindricalJoint.h b/MbDCode/CylindricalJoint.h index 96c10a4..6c234fb 100644 --- a/MbDCode/CylindricalJoint.h +++ b/MbDCode/CylindricalJoint.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "InLineJoint.h" diff --git a/MbDCode/CylindricalJoint.h.bak b/MbDCode/CylindricalJoint.h.bak deleted file mode 100644 index 0280eb7..0000000 --- a/MbDCode/CylindricalJoint.h.bak +++ /dev/null @@ -1,10 +0,0 @@ -#pragma once -#include "Joint.h" - -namespace MbD { - class CylindricalJoint : public Joint - { - public: - }; -} - diff --git a/MbDCode/DataPosVelAcc.cpp b/MbDCode/DataPosVelAcc.cpp deleted file mode 100644 index 7fda007..0000000 --- a/MbDCode/DataPosVelAcc.cpp +++ /dev/null @@ -1,17 +0,0 @@ -#include - -#include "DataPosVelAcc.h" - -using namespace MbD; - -std::ostream& DataPosVelAcc::printOn(std::ostream& s) const -{ - s << "refData = " << *refData << std::endl; - s << "rFfF = " << *rFfF << std::endl; - s << "vFfF = " << *vFfF << std::endl; - s << "omeFfF = " << *omeFfF << std::endl; - s << "aFfF = " << *aFfF << std::endl; - s << "alpFfF = " << *alpFfF << std::endl; - s << "aAFf = " << *aAFf; - return s; -} diff --git a/MbDCode/DataPosVelAcc.h b/MbDCode/DataPosVelAcc.h deleted file mode 100644 index b60dab0..0000000 --- a/MbDCode/DataPosVelAcc.h +++ /dev/null @@ -1,17 +0,0 @@ -#pragma once - -#include "StateData.h" - -namespace MbD { - class DataPosVelAcc : public StateData - { - //refData rFfF aAFf vFfF omeFfF aFfF alpFfF - public: - std::ostream& printOn(std::ostream& s) const override; - - std::shared_ptr refData; - FColDsptr rFfF, vFfF, omeFfF, aFfF, alpFfF; - FMatDsptr aAFf; - }; -} - diff --git a/MbDCode/DiagonalMatrix.cpp b/MbDCode/DiagonalMatrix.cpp index 6eca0de..13bba29 100644 --- a/MbDCode/DiagonalMatrix.cpp +++ b/MbDCode/DiagonalMatrix.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "DiagonalMatrix.h" using namespace MbD; diff --git a/MbDCode/DiagonalMatrix.h b/MbDCode/DiagonalMatrix.h index 82a7820..bac3bad 100644 --- a/MbDCode/DiagonalMatrix.h +++ b/MbDCode/DiagonalMatrix.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "Array.h" @@ -5,6 +13,12 @@ #include "FullMatrix.h" namespace MbD { + template + class DiagonalMatrix; + template + using DiagMatsptr = std::shared_ptr>; + using DiagMatDsptr = std::shared_ptr>; + template class DiagonalMatrix : public Array { @@ -13,41 +27,37 @@ namespace MbD { DiagonalMatrix(int count) : Array(count) {} DiagonalMatrix(int count, const T& value) : Array(count, value) {} DiagonalMatrix(std::initializer_list list) : Array{ list } {} - void atiput(int i, T value); void atiputDiagonalMatrix(int i, std::shared_ptr < DiagonalMatrix> diagMat); - std::shared_ptr> times(T factor); - std::shared_ptr> timesFullColumn(std::shared_ptr> fullCol); - std::shared_ptr> timesFullMatrix(std::shared_ptr> fullMat); + DiagMatsptr times(T factor); + FColsptr timesFullColumn(FColsptr fullCol); + FMatsptr timesFullMatrix(FMatsptr fullMat); int nrow() { - return (int) this->size(); + return (int)this->size(); } int ncol() { - return (int) this->size(); + return (int)this->size(); } double sumOfSquares() override; int numberOfElements() override; void zeroSelf() override; + double maxMagnitude() override; + std::ostream& printOn(std::ostream& s) const override; }; template - inline void DiagonalMatrix::atiput(int i, T value) - { - this->at(i) = value; - } - template - inline void DiagonalMatrix::atiputDiagonalMatrix(int i, std::shared_ptr> diagMat) + inline void DiagonalMatrix::atiputDiagonalMatrix(int i, DiagMatsptr diagMat) { for (int ii = 0; ii < diagMat->size(); ii++) { this->at(i + ii) = diagMat->at(ii); } } - template - inline std::shared_ptr> DiagonalMatrix::times(T factor) + template<> + inline DiagMatDsptr DiagonalMatrix::times(double factor) { auto nrow = (int)this->size(); - auto answer = std::make_shared>(nrow); + auto answer = std::make_shared>(nrow); for (int i = 0; i < nrow; i++) { answer->at(i) = this->at(i) * factor; @@ -55,11 +65,16 @@ namespace MbD { return answer; } template - inline std::shared_ptr> DiagonalMatrix::timesFullColumn(std::shared_ptr> fullCol) + inline DiagMatsptr DiagonalMatrix::times(T factor) + { + assert(false); + } + template + inline FColsptr DiagonalMatrix::timesFullColumn(FColsptr fullCol) { //"a*b = a(i,j)b(j) sum j." - auto nrow = (int) this->size(); + auto nrow = (int)this->size(); auto answer = std::make_shared>(nrow); for (int i = 0; i < nrow; i++) { @@ -68,7 +83,7 @@ namespace MbD { return answer; } template - inline std::shared_ptr> DiagonalMatrix::timesFullMatrix(std::shared_ptr> fullMat) + inline FMatsptr DiagonalMatrix::timesFullMatrix(FMatsptr fullMat) { auto nrow = (int)this->size(); auto answer = std::make_shared>(nrow); @@ -92,7 +107,7 @@ namespace MbD { template inline int DiagonalMatrix::numberOfElements() { - auto n = (int) this->size(); + auto n = (int)this->size(); return n * n; } template<> @@ -102,6 +117,24 @@ namespace MbD { this->at(i) = 0.0; } } + template<> + inline double DiagonalMatrix::maxMagnitude() + { + auto max = 0.0; + for (int i = 0; i < this->size(); i++) + { + auto element = this->at(i); + if (element < 0.0) element = -element; + if (max < element) max = element; + } + return max; + } + template + inline double DiagonalMatrix::maxMagnitude() + { + assert(false); + return 0.0; + } template inline std::ostream& DiagonalMatrix::printOn(std::ostream& s) const { @@ -114,6 +147,5 @@ namespace MbD { s << "]"; return s; } - using DiagMatDsptr = std::shared_ptr>; } diff --git a/MbDCode/DifferenceOperator.cpp b/MbDCode/DifferenceOperator.cpp index 3a4a343..5fd44d7 100644 --- a/MbDCode/DifferenceOperator.cpp +++ b/MbDCode/DifferenceOperator.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include #include "DifferenceOperator.h" @@ -8,7 +16,7 @@ using namespace MbD; -std::shared_ptr> DifferenceOperator::OneOverFactorials = []() { +FRowDsptr DifferenceOperator::OneOverFactorials = []() { auto oneOverFactorials = std::make_shared>(10); for (int i = 0; i < oneOverFactorials->size(); i++) { diff --git a/MbDCode/DifferenceOperator.h b/MbDCode/DifferenceOperator.h index b8f0095..c3611a5 100644 --- a/MbDCode/DifferenceOperator.h +++ b/MbDCode/DifferenceOperator.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include @@ -19,10 +27,10 @@ namespace MbD { void settime(double t); int iStep = 0, order = 0; - std::shared_ptr> taylorMatrix, operatorMatrix; + FMatDsptr taylorMatrix, operatorMatrix; double time = 0; std::shared_ptr> timeNodes; - static std::shared_ptr> OneOverFactorials; + static FRowDsptr OneOverFactorials; }; } diff --git a/MbDCode/DifferentiatedGeneralSpline.cpp b/MbDCode/DifferentiatedGeneralSpline.cpp new file mode 100644 index 0000000..2d35aac --- /dev/null +++ b/MbDCode/DifferentiatedGeneralSpline.cpp @@ -0,0 +1,39 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#include "DifferentiatedGeneralSpline.h" +#include "GeneralSpline.h" + +using namespace MbD; + +MbD::DifferentiatedGeneralSpline::DifferentiatedGeneralSpline(Symsptr arg, Symsptr spline, int derivOrder) : AnyGeneralSpline(arg), generalSpline(spline), derivativeOrder(derivOrder) +{ +} + +double MbD::DifferentiatedGeneralSpline::getValue() +{ + return std::static_pointer_cast(generalSpline)->derivativeAt(derivativeOrder, xx->getValue()); +} + +Symsptr MbD::DifferentiatedGeneralSpline::differentiateWRTx() +{ + auto arg = std::static_pointer_cast(generalSpline)->xx; + auto deriv = std::make_shared(arg, generalSpline, derivativeOrder + 1); + return deriv; +} + +Symsptr MbD::DifferentiatedGeneralSpline::clonesptr() +{ + return std::make_shared(*this); +} + +std::ostream& MbD::DifferentiatedGeneralSpline::printOn(std::ostream& s) const +{ + s << "deriv(" << generalSpline << ", " << derivativeOrder << ")"; + return s; +} diff --git a/MbDCode/DifferentiatedGeneralSpline.h b/MbDCode/DifferentiatedGeneralSpline.h new file mode 100644 index 0000000..17003a1 --- /dev/null +++ b/MbDCode/DifferentiatedGeneralSpline.h @@ -0,0 +1,29 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#pragma once + +#include "AnyGeneralSpline.h" + +namespace MbD { + class DifferentiatedGeneralSpline : public AnyGeneralSpline + { + //derivativeOrder + public: + DifferentiatedGeneralSpline() = default; + DifferentiatedGeneralSpline(Symsptr arg, Symsptr spline, int derivOrder); + double getValue() override; + Symsptr differentiateWRTx() override; + Symsptr clonesptr() override; + + std::ostream& printOn(std::ostream& s) const override; + + Symsptr generalSpline; + int derivativeOrder; + }; +} diff --git a/MbDCode/DirectionCosineConstraintIJ.cpp b/MbDCode/DirectionCosineConstraintIJ.cpp index 1f3994e..7138b60 100644 --- a/MbDCode/DirectionCosineConstraintIJ.cpp +++ b/MbDCode/DirectionCosineConstraintIJ.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "DirectionCosineConstraintIJ.h" #include "DirectionCosineIecJec.h" #include "EndFramec.h" @@ -5,7 +13,7 @@ using namespace MbD; -DirectionCosineConstraintIJ::DirectionCosineConstraintIJ(EndFrmcptr frmi, EndFrmcptr frmj, int axisi, int axisj) : +DirectionCosineConstraintIJ::DirectionCosineConstraintIJ(EndFrmsptr frmi, EndFrmsptr frmj, int axisi, int axisj) : ConstraintIJ(frmi, frmj), axisI(axisi), axisJ(axisj) { } diff --git a/MbDCode/DirectionCosineConstraintIJ.h b/MbDCode/DirectionCosineConstraintIJ.h index 4d8d51c..38348bd 100644 --- a/MbDCode/DirectionCosineConstraintIJ.h +++ b/MbDCode/DirectionCosineConstraintIJ.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "ConstraintIJ.h" @@ -9,7 +17,7 @@ namespace MbD { { //axisI axisJ aAijIeJe public: - DirectionCosineConstraintIJ(EndFrmcptr frmi, EndFrmcptr frmj, int axisi, int axisj); + DirectionCosineConstraintIJ(EndFrmsptr frmi, EndFrmsptr frmj, int axisi, int axisj); void calcPostDynCorrectorIteration() override; virtual void initaAijIeJe(); diff --git a/MbDCode/DirectionCosineConstraintIqcJc.cpp b/MbDCode/DirectionCosineConstraintIqcJc.cpp index 6e0bf9b..4f14081 100644 --- a/MbDCode/DirectionCosineConstraintIqcJc.cpp +++ b/MbDCode/DirectionCosineConstraintIqcJc.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "DirectionCosineConstraintIqcJc.h" #include "DirectionCosineIeqcJec.h" #include "EndFrameqc.h" @@ -5,7 +13,7 @@ using namespace MbD; -DirectionCosineConstraintIqcJc::DirectionCosineConstraintIqcJc(EndFrmcptr frmi, EndFrmcptr frmj, int axisi, int axisj) : +DirectionCosineConstraintIqcJc::DirectionCosineConstraintIqcJc(EndFrmsptr frmi, EndFrmsptr frmj, int axisi, int axisj) : DirectionCosineConstraintIJ(frmi, frmj, axisi, axisj) { } diff --git a/MbDCode/DirectionCosineConstraintIqcJc.h b/MbDCode/DirectionCosineConstraintIqcJc.h index 7d08992..286dfe6 100644 --- a/MbDCode/DirectionCosineConstraintIqcJc.h +++ b/MbDCode/DirectionCosineConstraintIqcJc.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "DirectionCosineConstraintIJ.h" @@ -7,7 +15,7 @@ namespace MbD { { //pGpEI ppGpEIpEI iqEI public: - DirectionCosineConstraintIqcJc(EndFrmcptr frmi, EndFrmcptr frmj, int axisi, int axisj); + DirectionCosineConstraintIqcJc(EndFrmsptr frmi, EndFrmsptr frmj, int axisi, int axisj); void addToJointTorqueI(FColDsptr col) override; void calcPostDynCorrectorIteration() override; diff --git a/MbDCode/DirectionCosineConstraintIqcJqc.cpp b/MbDCode/DirectionCosineConstraintIqcJqc.cpp index 0135e33..5061c0e 100644 --- a/MbDCode/DirectionCosineConstraintIqcJqc.cpp +++ b/MbDCode/DirectionCosineConstraintIqcJqc.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "DirectionCosineConstraintIqcJqc.h" #include "DirectionCosineIeqcJeqc.h" #include "EndFrameqc.h" @@ -5,7 +13,7 @@ using namespace MbD; -DirectionCosineConstraintIqcJqc::DirectionCosineConstraintIqcJqc(EndFrmcptr frmi, EndFrmcptr frmj, int axisi, int axisj) : +DirectionCosineConstraintIqcJqc::DirectionCosineConstraintIqcJqc(EndFrmsptr frmi, EndFrmsptr frmj, int axisi, int axisj) : DirectionCosineConstraintIqcJc(frmi, frmj, axisi, axisj) { } diff --git a/MbDCode/DirectionCosineConstraintIqcJqc.h b/MbDCode/DirectionCosineConstraintIqcJqc.h index e0ba092..0265aae 100644 --- a/MbDCode/DirectionCosineConstraintIqcJqc.h +++ b/MbDCode/DirectionCosineConstraintIqcJqc.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "DirectionCosineConstraintIqcJc.h" @@ -7,7 +15,7 @@ namespace MbD { { //pGpEJ ppGpEIpEJ ppGpEJpEJ iqEJ public: - DirectionCosineConstraintIqcJqc(EndFrmcptr frmi, EndFrmcptr frmj, int axisi, int axisj); + DirectionCosineConstraintIqcJqc(EndFrmsptr frmi, EndFrmsptr frmj, int axisi, int axisj); void calcPostDynCorrectorIteration() override; void fillAccICIterError(FColDsptr col) override; diff --git a/MbDCode/DirectionCosineConstraintIqctJqc.cpp b/MbDCode/DirectionCosineConstraintIqctJqc.cpp index 07f15a7..e41b309 100644 --- a/MbDCode/DirectionCosineConstraintIqctJqc.cpp +++ b/MbDCode/DirectionCosineConstraintIqctJqc.cpp @@ -1,10 +1,18 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "DirectionCosineConstraintIqctJqc.h" #include "DirectionCosineIeqctJeqc.h" #include "CREATE.h" using namespace MbD; -DirectionCosineConstraintIqctJqc::DirectionCosineConstraintIqctJqc(EndFrmcptr frmi, EndFrmcptr frmj, int axisi, int axisj) : +DirectionCosineConstraintIqctJqc::DirectionCosineConstraintIqctJqc(EndFrmsptr frmi, EndFrmsptr frmj, int axisi, int axisj) : DirectionCosineConstraintIqcJqc(frmi, frmj, axisi, axisj) { } diff --git a/MbDCode/DirectionCosineConstraintIqctJqc.h b/MbDCode/DirectionCosineConstraintIqctJqc.h index 41d9be6..ce3781a 100644 --- a/MbDCode/DirectionCosineConstraintIqctJqc.h +++ b/MbDCode/DirectionCosineConstraintIqctJqc.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "DirectionCosineConstraintIqcJqc.h" @@ -7,7 +15,7 @@ namespace MbD { { //pGpt ppGpEIpt ppGpEJpt ppGptpt public: - DirectionCosineConstraintIqctJqc(EndFrmcptr frmi, EndFrmcptr frmj, int axisi, int axisj); + DirectionCosineConstraintIqctJqc(EndFrmsptr frmi, EndFrmsptr frmj, int axisi, int axisj); void fillAccICIterError(FColDsptr col) override; void fillVelICError(FColDsptr col) override; diff --git a/MbDCode/DirectionCosineIecJec.cpp b/MbDCode/DirectionCosineIecJec.cpp index 5522ebe..71ff884 100644 --- a/MbDCode/DirectionCosineIecJec.cpp +++ b/MbDCode/DirectionCosineIecJec.cpp @@ -1,7 +1,16 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include #include "DirectionCosineIecJec.h" #include "FullColumn.h" +#include "EndFramec.h" using namespace MbD; @@ -9,7 +18,7 @@ DirectionCosineIecJec::DirectionCosineIecJec() { } -DirectionCosineIecJec::DirectionCosineIecJec(EndFrmcptr frmi, EndFrmcptr frmj, int axisi, int axisj) : +DirectionCosineIecJec::DirectionCosineIecJec(EndFrmsptr frmi, EndFrmsptr frmj, int axisi, int axisj) : KinematicIeJe(frmi, frmj), axisI(axisi), axisJ(axisj) { diff --git a/MbDCode/DirectionCosineIecJec.h b/MbDCode/DirectionCosineIecJec.h index f77bdb0..aa2b067 100644 --- a/MbDCode/DirectionCosineIecJec.h +++ b/MbDCode/DirectionCosineIecJec.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include @@ -13,14 +21,14 @@ namespace MbD { //aAijIeJe axisI axisJ aAjOIe aAjOJe public: DirectionCosineIecJec(); - DirectionCosineIecJec(EndFrmcptr frmi, EndFrmcptr frmj, int axisi, int axisj); + DirectionCosineIecJec(EndFrmsptr frmi, EndFrmsptr frmj, int axisi, int axisj); void calcPostDynCorrectorIteration() override; double value() override; int axisI, axisJ; //0, 1, 2 = x, y, z double aAijIeJe; - std::shared_ptr> aAjOIe, aAjOJe; + FColDsptr aAjOIe, aAjOJe; }; } diff --git a/MbDCode/DirectionCosineIeqcJec.cpp b/MbDCode/DirectionCosineIeqcJec.cpp index 40844ad..6e4423b 100644 --- a/MbDCode/DirectionCosineIeqcJec.cpp +++ b/MbDCode/DirectionCosineIeqcJec.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "DirectionCosineIeqcJec.h" #include "EndFrameqc.h" @@ -7,7 +15,7 @@ DirectionCosineIeqcJec::DirectionCosineIeqcJec() { } -DirectionCosineIeqcJec::DirectionCosineIeqcJec(EndFrmcptr frmi, EndFrmcptr frmj, int axisi, int axisj) : +DirectionCosineIeqcJec::DirectionCosineIeqcJec(EndFrmsptr frmi, EndFrmsptr frmj, int axisi, int axisj) : DirectionCosineIecJec(frmi, frmj, axisi, axisj) { } diff --git a/MbDCode/DirectionCosineIeqcJec.h b/MbDCode/DirectionCosineIeqcJec.h index 3a3afdc..d829b27 100644 --- a/MbDCode/DirectionCosineIeqcJec.h +++ b/MbDCode/DirectionCosineIeqcJec.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "DirectionCosineIecJec.h" @@ -8,7 +16,7 @@ namespace MbD { //pAijIeJepEI ppAijIeJepEIpEI pAjOIepEIT ppAjOIepEIpEI public: DirectionCosineIeqcJec(); - DirectionCosineIeqcJec(EndFrmcptr frmi, EndFrmcptr frmj, int axisi, int axisj); + DirectionCosineIeqcJec(EndFrmsptr frmi, EndFrmsptr frmj, int axisi, int axisj); void calcPostDynCorrectorIteration() override; void initialize() override; @@ -19,7 +27,7 @@ namespace MbD { FRowDsptr pAijIeJepEI; FMatDsptr ppAijIeJepEIpEI; FMatDsptr pAjOIepEIT; - std::shared_ptr>>> ppAjOIepEIpEI; + FMatFColDsptr ppAjOIepEIpEI; }; } diff --git a/MbDCode/DirectionCosineIeqcJeqc.cpp b/MbDCode/DirectionCosineIeqcJeqc.cpp index 9ffc52a..92598c9 100644 --- a/MbDCode/DirectionCosineIeqcJeqc.cpp +++ b/MbDCode/DirectionCosineIeqcJeqc.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "DirectionCosineIeqcJeqc.h" #include "EndFrameqc.h" @@ -7,7 +15,7 @@ DirectionCosineIeqcJeqc::DirectionCosineIeqcJeqc() { } -DirectionCosineIeqcJeqc::DirectionCosineIeqcJeqc(EndFrmcptr frmi, EndFrmcptr frmj, int axisi, int axisj) : +DirectionCosineIeqcJeqc::DirectionCosineIeqcJeqc(EndFrmsptr frmi, EndFrmsptr frmj, int axisi, int axisj) : DirectionCosineIeqcJec(frmi, frmj, axisi, axisj) { } diff --git a/MbDCode/DirectionCosineIeqcJeqc.h b/MbDCode/DirectionCosineIeqcJeqc.h index 5372cbd..ed43677 100644 --- a/MbDCode/DirectionCosineIeqcJeqc.h +++ b/MbDCode/DirectionCosineIeqcJeqc.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "DirectionCosineIeqcJec.h" @@ -8,7 +16,7 @@ namespace MbD { //pAijIeJepEJ ppAijIeJepEIpEJ ppAijIeJepEJpEJ pAjOJepEJT ppAjOJepEJpEJ public: DirectionCosineIeqcJeqc(); - DirectionCosineIeqcJeqc(EndFrmcptr frmi, EndFrmcptr frmj, int axisi, int axisj); + DirectionCosineIeqcJeqc(EndFrmsptr frmi, EndFrmsptr frmj, int axisi, int axisj); void calcPostDynCorrectorIteration() override; void initialize() override; @@ -21,7 +29,7 @@ namespace MbD { FMatDsptr ppAijIeJepEIpEJ; FMatDsptr ppAijIeJepEJpEJ; FMatDsptr pAjOJepEJT; - std::shared_ptr>>> ppAjOJepEJpEJ; + FMatFColDsptr ppAjOJepEJpEJ; }; } diff --git a/MbDCode/DirectionCosineIeqctJeqc.cpp b/MbDCode/DirectionCosineIeqctJeqc.cpp index 7255466..6fb505c 100644 --- a/MbDCode/DirectionCosineIeqctJeqc.cpp +++ b/MbDCode/DirectionCosineIeqctJeqc.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "DirectionCosineIeqctJeqc.h" #include "EndFrameqc.h" #include "EndFrameqct.h" @@ -8,7 +16,7 @@ DirectionCosineIeqctJeqc::DirectionCosineIeqctJeqc() { } -DirectionCosineIeqctJeqc::DirectionCosineIeqctJeqc(EndFrmcptr frmi, EndFrmcptr frmj, int axisi, int axisj) : +DirectionCosineIeqctJeqc::DirectionCosineIeqctJeqc(EndFrmsptr frmi, EndFrmsptr frmj, int axisi, int axisj) : DirectionCosineIeqcJeqc(frmi, frmj, axisi, axisj) { } diff --git a/MbDCode/DirectionCosineIeqctJeqc.h b/MbDCode/DirectionCosineIeqctJeqc.h index efa85df..3f73528 100644 --- a/MbDCode/DirectionCosineIeqctJeqc.h +++ b/MbDCode/DirectionCosineIeqctJeqc.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "DirectionCosineIeqcJeqc.h" @@ -8,7 +16,7 @@ namespace MbD { //pAijIeJept ppAijIeJepEIpt ppAijIeJepEJpt ppAijIeJeptpt public: DirectionCosineIeqctJeqc(); - DirectionCosineIeqctJeqc(EndFrmcptr frmi, EndFrmcptr frmj, int axisi, int axisj); + DirectionCosineIeqctJeqc(EndFrmsptr frmi, EndFrmsptr frmj, int axisi, int axisj); void calcPostDynCorrectorIteration() override; void initialize() override; diff --git a/MbDCode/DiscontinuityError.cpp b/MbDCode/DiscontinuityError.cpp index ece43f2..ae65178 100644 --- a/MbDCode/DiscontinuityError.cpp +++ b/MbDCode/DiscontinuityError.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "DiscontinuityError.h" using namespace MbD; diff --git a/MbDCode/DiscontinuityError.h b/MbDCode/DiscontinuityError.h index a647f85..9593707 100644 --- a/MbDCode/DiscontinuityError.h +++ b/MbDCode/DiscontinuityError.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include diff --git a/MbDCode/DispCompIecJecIe.cpp b/MbDCode/DispCompIecJecIe.cpp index fc55b61..213a0ff 100644 --- a/MbDCode/DispCompIecJecIe.cpp +++ b/MbDCode/DispCompIecJecIe.cpp @@ -1,4 +1,13 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "DispCompIecJecIe.h" +#include "EndFramec.h" using namespace MbD; @@ -6,7 +15,7 @@ MbD::DispCompIecJecIe::DispCompIecJecIe() { } -MbD::DispCompIecJecIe::DispCompIecJecIe(EndFrmcptr frmi, EndFrmcptr frmj, int axis) : KinematicIeJe(frmi, frmj), axis(axis) +MbD::DispCompIecJecIe::DispCompIecJecIe(EndFrmsptr frmi, EndFrmsptr frmj, int axis) : KinematicIeJe(frmi, frmj), axis(axis) { } diff --git a/MbDCode/DispCompIecJecIe.h b/MbDCode/DispCompIecJecIe.h index 0e5e801..b06862c 100644 --- a/MbDCode/DispCompIecJecIe.h +++ b/MbDCode/DispCompIecJecIe.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "KinematicIeJe.h" @@ -8,7 +16,7 @@ namespace MbD { //axis riIeJeIe aAjOIe rIeJeO public: DispCompIecJecIe(); - DispCompIecJecIe(EndFrmcptr frmi, EndFrmcptr frmj, int axis); + DispCompIecJecIe(EndFrmsptr frmi, EndFrmsptr frmj, int axis); void calc_value() override; void calcPostDynCorrectorIteration() override; diff --git a/MbDCode/DispCompIecJecKec.cpp b/MbDCode/DispCompIecJecKec.cpp index ba0533f..f9f6285 100644 --- a/MbDCode/DispCompIecJecKec.cpp +++ b/MbDCode/DispCompIecJecKec.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "DispCompIecJecKec.h" using namespace MbD; @@ -6,7 +14,7 @@ DispCompIecJecKec::DispCompIecJecKec() { } -DispCompIecJecKec::DispCompIecJecKec(EndFrmcptr frmi, EndFrmcptr frmj, EndFrmcptr frmk, int axisk): KinematicIeJe(frmi, frmj), efrmK(frmk), axisK(axisk) +DispCompIecJecKec::DispCompIecJecKec(EndFrmsptr frmi, EndFrmsptr frmj, EndFrmsptr frmk, int axisk): KinematicIeJe(frmi, frmj), efrmK(frmk), axisK(axisk) { } diff --git a/MbDCode/DispCompIecJecKec.h b/MbDCode/DispCompIecJecKec.h index 5d037ef..5531de7 100644 --- a/MbDCode/DispCompIecJecKec.h +++ b/MbDCode/DispCompIecJecKec.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "KinematicIeJe.h" @@ -8,11 +16,11 @@ namespace MbD { //efrmK axisK riIeJeKe aAjOKe rIeJeO public: DispCompIecJecKec(); - DispCompIecJecKec(EndFrmcptr frmi, EndFrmcptr frmj, EndFrmcptr frmk, int axisk); + DispCompIecJecKec(EndFrmsptr frmi, EndFrmsptr frmj, EndFrmsptr frmk, int axisk); double value() override; - EndFrmcptr efrmK; + EndFrmsptr efrmK; int axisK; double riIeJeKe; FColDsptr aAjOKe; diff --git a/MbDCode/DispCompIecJecKeqc.cpp b/MbDCode/DispCompIecJecKeqc.cpp index 5f8cdef..efe61f5 100644 --- a/MbDCode/DispCompIecJecKeqc.cpp +++ b/MbDCode/DispCompIecJecKeqc.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "DispCompIecJecKeqc.h" #include "EndFrameqc.h" @@ -7,7 +15,7 @@ DispCompIecJecKeqc::DispCompIecJecKeqc() { } -DispCompIecJecKeqc::DispCompIecJecKeqc(EndFrmcptr frmi, EndFrmcptr frmj, EndFrmcptr frmk, int axisk) : DispCompIecJecKec(frmi, frmj, frmk, axisk) +DispCompIecJecKeqc::DispCompIecJecKeqc(EndFrmsptr frmi, EndFrmsptr frmj, EndFrmsptr frmk, int axisk) : DispCompIecJecKec(frmi, frmj, frmk, axisk) { } diff --git a/MbDCode/DispCompIecJecKeqc.h b/MbDCode/DispCompIecJecKeqc.h index 1d8ee3f..cb689bc 100644 --- a/MbDCode/DispCompIecJecKeqc.h +++ b/MbDCode/DispCompIecJecKeqc.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "DispCompIecJecKec.h" @@ -8,7 +16,7 @@ namespace MbD { //priIeJeKepEK ppriIeJeKepEKpEK pAjOKepEKT ppAjOKepEKpEK public: DispCompIecJecKeqc(); - DispCompIecJecKeqc(EndFrmcptr frmi, EndFrmcptr frmj, EndFrmcptr frmk, int axisk); + DispCompIecJecKeqc(EndFrmsptr frmi, EndFrmsptr frmj, EndFrmsptr frmk, int axisk); void calcPostDynCorrectorIteration() override; void initialize() override; diff --git a/MbDCode/DispCompIecJecO.cpp b/MbDCode/DispCompIecJecO.cpp index 6a29266..2b3e111 100644 --- a/MbDCode/DispCompIecJecO.cpp +++ b/MbDCode/DispCompIecJecO.cpp @@ -1,4 +1,13 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "DispCompIecJecO.h" +#include "EndFramec.h" using namespace MbD; @@ -6,7 +15,7 @@ DispCompIecJecO::DispCompIecJecO() { } -DispCompIecJecO::DispCompIecJecO(EndFrmcptr frmi, EndFrmcptr frmj, int axis) : KinematicIeJe(frmi, frmj), axis(axis) +DispCompIecJecO::DispCompIecJecO(EndFrmsptr frmi, EndFrmsptr frmj, int axis) : KinematicIeJe(frmi, frmj), axis(axis) { } diff --git a/MbDCode/DispCompIecJecO.h b/MbDCode/DispCompIecJecO.h index f8c99de..ab8e5f3 100644 --- a/MbDCode/DispCompIecJecO.h +++ b/MbDCode/DispCompIecJecO.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "KinematicIeJe.h" @@ -8,7 +16,7 @@ namespace MbD { //axis riIeJeO public: DispCompIecJecO(); - DispCompIecJecO(EndFrmcptr frmi, EndFrmcptr frmj, int axis); + DispCompIecJecO(EndFrmsptr frmi, EndFrmsptr frmj, int axis); void calcPostDynCorrectorIteration() override; double value() override; diff --git a/MbDCode/DispCompIeqcJecIe.cpp b/MbDCode/DispCompIeqcJecIe.cpp index 6d65120..c724c66 100644 --- a/MbDCode/DispCompIeqcJecIe.cpp +++ b/MbDCode/DispCompIeqcJecIe.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "DispCompIeqcJecIe.h" #include "EndFrameqc.h" @@ -7,7 +15,7 @@ MbD::DispCompIeqcJecIe::DispCompIeqcJecIe() { } -MbD::DispCompIeqcJecIe::DispCompIeqcJecIe(EndFrmcptr frmi, EndFrmcptr frmj, int axis) : DispCompIecJecIe(frmi, frmj, axis) +MbD::DispCompIeqcJecIe::DispCompIeqcJecIe(EndFrmsptr frmi, EndFrmsptr frmj, int axis) : DispCompIecJecIe(frmi, frmj, axis) { } diff --git a/MbDCode/DispCompIeqcJecIe.h b/MbDCode/DispCompIeqcJecIe.h index 62638a6..8f2b4d7 100644 --- a/MbDCode/DispCompIeqcJecIe.h +++ b/MbDCode/DispCompIeqcJecIe.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "DispCompIecJecIe.h" @@ -8,7 +16,7 @@ namespace MbD { //priIeJeIepXI priIeJeIepEI ppriIeJeIepXIpEI ppriIeJeIepEIpEI pAjOIepEIT ppAjOIepEIpEI public: DispCompIeqcJecIe(); - DispCompIeqcJecIe(EndFrmcptr frmi, EndFrmcptr frmj, int axis); + DispCompIeqcJecIe(EndFrmsptr frmi, EndFrmsptr frmj, int axis); void calc_ppvaluepEIpEI() override; void calc_ppvaluepXIpEI() override; diff --git a/MbDCode/DispCompIeqcJecKeqc.cpp b/MbDCode/DispCompIeqcJecKeqc.cpp index a44641d..c25efc1 100644 --- a/MbDCode/DispCompIeqcJecKeqc.cpp +++ b/MbDCode/DispCompIeqcJecKeqc.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "DispCompIeqcJecKeqc.h" #include "EndFrameqc.h" @@ -7,7 +15,7 @@ DispCompIeqcJecKeqc::DispCompIeqcJecKeqc() { } -DispCompIeqcJecKeqc::DispCompIeqcJecKeqc(EndFrmcptr frmi, EndFrmcptr frmj, EndFrmcptr frmk, int axisk) : DispCompIecJecKeqc(frmi, frmj, frmk, axisk) +DispCompIeqcJecKeqc::DispCompIeqcJecKeqc(EndFrmsptr frmi, EndFrmsptr frmj, EndFrmsptr frmk, int axisk) : DispCompIecJecKeqc(frmi, frmj, frmk, axisk) { } diff --git a/MbDCode/DispCompIeqcJecKeqc.h b/MbDCode/DispCompIeqcJecKeqc.h index e3e1945..b53de97 100644 --- a/MbDCode/DispCompIeqcJecKeqc.h +++ b/MbDCode/DispCompIeqcJecKeqc.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "DispCompIecJecKeqc.h" @@ -8,7 +16,7 @@ namespace MbD { //priIeJeKepXI priIeJeKepEI ppriIeJeKepXIpEK ppriIeJeKepEIpEI ppriIeJeKepEIpEK public: DispCompIeqcJecKeqc(); - DispCompIeqcJecKeqc(EndFrmcptr frmi, EndFrmcptr frmj, EndFrmcptr frmk, int axisk); + DispCompIeqcJecKeqc(EndFrmsptr frmi, EndFrmsptr frmj, EndFrmsptr frmk, int axisk); void calcPostDynCorrectorIteration() override; void initialize() override; diff --git a/MbDCode/DispCompIeqcJecO.cpp b/MbDCode/DispCompIeqcJecO.cpp index c305e70..87960a0 100644 --- a/MbDCode/DispCompIeqcJecO.cpp +++ b/MbDCode/DispCompIeqcJecO.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "DispCompIeqcJecO.h" #include "EndFrameqc.h" @@ -7,7 +15,7 @@ DispCompIeqcJecO::DispCompIeqcJecO() { } -DispCompIeqcJecO::DispCompIeqcJecO(EndFrmcptr frmi, EndFrmcptr frmj, int axis) : DispCompIecJecO(frmi, frmj, axis) +DispCompIeqcJecO::DispCompIeqcJecO(EndFrmsptr frmi, EndFrmsptr frmj, int axis) : DispCompIecJecO(frmi, frmj, axis) { } diff --git a/MbDCode/DispCompIeqcJecO.h b/MbDCode/DispCompIeqcJecO.h index 8cf2216..3ca7553 100644 --- a/MbDCode/DispCompIeqcJecO.h +++ b/MbDCode/DispCompIeqcJecO.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "DispCompIecJecO.h" @@ -8,7 +16,7 @@ namespace MbD { //priIeJeOpXI priIeJeOpEI ppriIeJeOpEIpEI public: DispCompIeqcJecO(); - DispCompIeqcJecO(EndFrmcptr frmi, EndFrmcptr frmj, int axis); + DispCompIeqcJecO(EndFrmsptr frmi, EndFrmsptr frmj, int axis); void calcPostDynCorrectorIteration() override; void initializeGlobally() override; diff --git a/MbDCode/DispCompIeqcJeqcIe.cpp b/MbDCode/DispCompIeqcJeqcIe.cpp index 54e82e7..d19e98c 100644 --- a/MbDCode/DispCompIeqcJeqcIe.cpp +++ b/MbDCode/DispCompIeqcJeqcIe.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "DispCompIeqcJeqcIe.h" #include "EndFrameqc.h" @@ -7,7 +15,7 @@ MbD::DispCompIeqcJeqcIe::DispCompIeqcJeqcIe() { } -MbD::DispCompIeqcJeqcIe::DispCompIeqcJeqcIe(EndFrmcptr frmi, EndFrmcptr frmj, int axis) : DispCompIeqcJecIe(frmi, frmj, axis) +MbD::DispCompIeqcJeqcIe::DispCompIeqcJeqcIe(EndFrmsptr frmi, EndFrmsptr frmj, int axis) : DispCompIeqcJecIe(frmi, frmj, axis) { } diff --git a/MbDCode/DispCompIeqcJeqcIe.h b/MbDCode/DispCompIeqcJeqcIe.h index 9d2dfb6..f632b2f 100644 --- a/MbDCode/DispCompIeqcJeqcIe.h +++ b/MbDCode/DispCompIeqcJeqcIe.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "DispCompIeqcJecIe.h" @@ -8,7 +16,7 @@ namespace MbD { //priIeJeIepXJ priIeJeIepEJ ppriIeJeIepEIpXJ ppriIeJeIepEIpEJ ppriIeJeIepEJpEJ public: DispCompIeqcJeqcIe(); - DispCompIeqcJeqcIe(EndFrmcptr frmi, EndFrmcptr frmj, int axis); + DispCompIeqcJeqcIe(EndFrmsptr frmi, EndFrmsptr frmj, int axis); void calc_ppvaluepEIpEJ() override; void calc_ppvaluepEIpXJ() override; diff --git a/MbDCode/DispCompIeqcJeqcKeqc.cpp b/MbDCode/DispCompIeqcJeqcKeqc.cpp index 586bcb4..61a6254 100644 --- a/MbDCode/DispCompIeqcJeqcKeqc.cpp +++ b/MbDCode/DispCompIeqcJeqcKeqc.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "DispCompIeqcJeqcKeqc.h" #include "EndFrameqc.h" @@ -7,7 +15,7 @@ DispCompIeqcJeqcKeqc::DispCompIeqcJeqcKeqc() { } -DispCompIeqcJeqcKeqc::DispCompIeqcJeqcKeqc(EndFrmcptr frmi, EndFrmcptr frmj, EndFrmcptr frmk, int axisk) : DispCompIeqcJecKeqc(frmi, frmj, frmk, axisk) +DispCompIeqcJeqcKeqc::DispCompIeqcJeqcKeqc(EndFrmsptr frmi, EndFrmsptr frmj, EndFrmsptr frmk, int axisk) : DispCompIeqcJecKeqc(frmi, frmj, frmk, axisk) { } diff --git a/MbDCode/DispCompIeqcJeqcKeqc.h b/MbDCode/DispCompIeqcJeqcKeqc.h index ec0efae..4af5ac3 100644 --- a/MbDCode/DispCompIeqcJeqcKeqc.h +++ b/MbDCode/DispCompIeqcJeqcKeqc.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "DispCompIeqcJecKeqc.h" @@ -8,7 +16,7 @@ namespace MbD { //priIeJeKepXJ priIeJeKepEJ ppriIeJeKepXJpEK ppriIeJeKepEJpEJ ppriIeJeKepEJpEK public: DispCompIeqcJeqcKeqc(); - DispCompIeqcJeqcKeqc(EndFrmcptr frmi, EndFrmcptr frmj, EndFrmcptr frmk, int axisk); + DispCompIeqcJeqcKeqc(EndFrmsptr frmi, EndFrmsptr frmj, EndFrmsptr frmk, int axisk); void calcPostDynCorrectorIteration() override; void initialize() override; diff --git a/MbDCode/DispCompIeqcJeqcKeqct.cpp b/MbDCode/DispCompIeqcJeqcKeqct.cpp index 13e0e8f..0820af1 100644 --- a/MbDCode/DispCompIeqcJeqcKeqct.cpp +++ b/MbDCode/DispCompIeqcJeqcKeqct.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "DispCompIeqcJeqcKeqct.h" #include "EndFrameqc.h" #include "EndFrameqct.h" @@ -8,7 +16,7 @@ DispCompIeqcJeqcKeqct::DispCompIeqcJeqcKeqct() { } -DispCompIeqcJeqcKeqct::DispCompIeqcJeqcKeqct(EndFrmcptr frmi, EndFrmcptr frmj, EndFrmcptr frmk, int axisk) : DispCompIeqcJeqcKeqc(frmi, frmj, frmk, axisk) +DispCompIeqcJeqcKeqct::DispCompIeqcJeqcKeqct(EndFrmsptr frmi, EndFrmsptr frmj, EndFrmsptr frmk, int axisk) : DispCompIeqcJeqcKeqc(frmi, frmj, frmk, axisk) { } @@ -22,6 +30,11 @@ void DispCompIeqcJeqcKeqct::initialize() ppriIeJeKepEKpt = std::make_shared>(4); } +void MbD::DispCompIeqcJeqcKeqct::initializeGlobally() +{ + //Do nothing. +} + void DispCompIeqcJeqcKeqct::calcPostDynCorrectorIteration() { //"ppAjOIepEKpEK is not longer constant and must be set before any calculation." diff --git a/MbDCode/DispCompIeqcJeqcKeqct.h b/MbDCode/DispCompIeqcJeqcKeqct.h index e239e53..40f264a 100644 --- a/MbDCode/DispCompIeqcJeqcKeqct.h +++ b/MbDCode/DispCompIeqcJeqcKeqct.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "DispCompIeqcJeqcKeqc.h" @@ -8,10 +16,11 @@ namespace MbD { //priIeJeKept ppriIeJeKepXIpt ppriIeJeKepEIpt ppriIeJeKepXJpt ppriIeJeKepEJpt ppriIeJeKepEKpt ppriIeJeKeptpt public: DispCompIeqcJeqcKeqct(); - DispCompIeqcJeqcKeqct(EndFrmcptr frmi, EndFrmcptr frmj, EndFrmcptr frmk, int axisk); + DispCompIeqcJeqcKeqct(EndFrmsptr frmi, EndFrmsptr frmj, EndFrmsptr frmk, int axisk); void calcPostDynCorrectorIteration() override; void initialize() override; + void initializeGlobally() override; FRowDsptr ppvaluepXIpt(); FRowDsptr ppvaluepEIpt(); FRowDsptr ppvaluepEKpt(); diff --git a/MbDCode/DispCompIeqcJeqcO.cpp b/MbDCode/DispCompIeqcJeqcO.cpp index 997c9b8..c16e333 100644 --- a/MbDCode/DispCompIeqcJeqcO.cpp +++ b/MbDCode/DispCompIeqcJeqcO.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "DispCompIeqcJeqcO.h" #include "EndFrameqc.h" @@ -7,7 +15,7 @@ DispCompIeqcJeqcO::DispCompIeqcJeqcO() { } -DispCompIeqcJeqcO::DispCompIeqcJeqcO(EndFrmcptr frmi, EndFrmcptr frmj, int axis) : DispCompIeqcJecO(frmi, frmj, axis) +DispCompIeqcJeqcO::DispCompIeqcJeqcO(EndFrmsptr frmi, EndFrmsptr frmj, int axis) : DispCompIeqcJecO(frmi, frmj, axis) { } diff --git a/MbDCode/DispCompIeqcJeqcO.h b/MbDCode/DispCompIeqcJeqcO.h index 2f1eded..0b58d70 100644 --- a/MbDCode/DispCompIeqcJeqcO.h +++ b/MbDCode/DispCompIeqcJeqcO.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "DispCompIeqcJecO.h" @@ -8,7 +16,7 @@ namespace MbD { //priIeJeOpXJ priIeJeOpEJ ppriIeJeOpEJpEJ public: DispCompIeqcJeqcO(); - DispCompIeqcJeqcO(EndFrmcptr frmi, EndFrmcptr frmj, int axis); + DispCompIeqcJeqcO(EndFrmsptr frmi, EndFrmsptr frmj, int axis); void calcPostDynCorrectorIteration() override; void initializeGlobally() override; diff --git a/MbDCode/DispCompIeqctJeqcIe.cpp b/MbDCode/DispCompIeqctJeqcIe.cpp index fc3460c..4eca3de 100644 --- a/MbDCode/DispCompIeqctJeqcIe.cpp +++ b/MbDCode/DispCompIeqctJeqcIe.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "DispCompIeqctJeqcIe.h" #include "EndFrameqct.h" @@ -7,7 +15,7 @@ MbD::DispCompIeqctJeqcIe::DispCompIeqctJeqcIe() { } -MbD::DispCompIeqctJeqcIe::DispCompIeqctJeqcIe(EndFrmcptr frmi, EndFrmcptr frmj, int axis) : DispCompIeqcJeqcIe(frmi, frmj, axis) +MbD::DispCompIeqctJeqcIe::DispCompIeqctJeqcIe(EndFrmsptr frmi, EndFrmsptr frmj, int axis) : DispCompIeqcJeqcIe(frmi, frmj, axis) { } diff --git a/MbDCode/DispCompIeqctJeqcIe.h b/MbDCode/DispCompIeqctJeqcIe.h index 21d7013..42b4e34 100644 --- a/MbDCode/DispCompIeqctJeqcIe.h +++ b/MbDCode/DispCompIeqctJeqcIe.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "DispCompIeqcJeqcIe.h" @@ -8,7 +16,7 @@ namespace MbD { //priIeJeIept ppriIeJeIepXIpt ppriIeJeIepEIpt ppriIeJeIepXJpt ppriIeJeIepEJpt ppriIeJeIeptpt public: DispCompIeqctJeqcIe(); - DispCompIeqctJeqcIe(EndFrmcptr frmi, EndFrmcptr frmj, int axis); + DispCompIeqctJeqcIe(EndFrmsptr frmi, EndFrmsptr frmj, int axis); void calc_ppvaluepEIpt() override; void calc_ppvaluepEJpt() override; diff --git a/MbDCode/DispCompIeqctJeqcKeqct.cpp b/MbDCode/DispCompIeqctJeqcKeqct.cpp index 563e1a3..6546987 100644 --- a/MbDCode/DispCompIeqctJeqcKeqct.cpp +++ b/MbDCode/DispCompIeqctJeqcKeqct.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "DispCompIeqctJeqcKeqct.h" #include "EndFrameqct.h" @@ -7,7 +15,7 @@ DispCompIeqctJeqcKeqct::DispCompIeqctJeqcKeqct() { } -DispCompIeqctJeqcKeqct::DispCompIeqctJeqcKeqct(EndFrmcptr frmi, EndFrmcptr frmj, EndFrmcptr frmk, int axisk) : DispCompIeqcJeqcKeqct(frmi, frmj, frmk, axisk) +DispCompIeqctJeqcKeqct::DispCompIeqctJeqcKeqct(EndFrmsptr frmi, EndFrmsptr frmj, EndFrmsptr frmk, int axisk) : DispCompIeqcJeqcKeqct(frmi, frmj, frmk, axisk) { } diff --git a/MbDCode/DispCompIeqctJeqcKeqct.h b/MbDCode/DispCompIeqctJeqcKeqct.h index 88114f7..172ef5d 100644 --- a/MbDCode/DispCompIeqctJeqcKeqct.h +++ b/MbDCode/DispCompIeqctJeqcKeqct.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "DispCompIeqcJeqcKeqct.h" @@ -8,7 +16,7 @@ namespace MbD { // public: DispCompIeqctJeqcKeqct(); - DispCompIeqctJeqcKeqct(EndFrmcptr frmi, EndFrmcptr frmj, EndFrmcptr frmk, int axisk); + DispCompIeqctJeqcKeqct(EndFrmsptr frmi, EndFrmsptr frmj, EndFrmsptr frmk, int axisk); void preAccIC() override; void preVelIC() override; diff --git a/MbDCode/DispCompIeqctJeqcO.cpp b/MbDCode/DispCompIeqctJeqcO.cpp index 6528d63..56b2ec2 100644 --- a/MbDCode/DispCompIeqctJeqcO.cpp +++ b/MbDCode/DispCompIeqctJeqcO.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "DispCompIeqctJeqcO.h" #include "EndFrameqct.h" @@ -7,7 +15,7 @@ DispCompIeqctJeqcO::DispCompIeqctJeqcO() { } -DispCompIeqctJeqcO::DispCompIeqctJeqcO(EndFrmcptr frmi, EndFrmcptr frmj, int axis) : DispCompIeqcJeqcO(frmi, frmj, axis) +DispCompIeqctJeqcO::DispCompIeqctJeqcO(EndFrmsptr frmi, EndFrmsptr frmj, int axis) : DispCompIeqcJeqcO(frmi, frmj, axis) { } diff --git a/MbDCode/DispCompIeqctJeqcO.h b/MbDCode/DispCompIeqctJeqcO.h index 3b23cb3..01b1e33 100644 --- a/MbDCode/DispCompIeqctJeqcO.h +++ b/MbDCode/DispCompIeqctJeqcO.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "DispCompIeqcJeqcO.h" @@ -8,7 +16,7 @@ namespace MbD { //priIeJeOpt ppriIeJeOpEIpt ppriIeJeOptpt public: DispCompIeqctJeqcO(); - DispCompIeqctJeqcO(EndFrmcptr frmi, EndFrmcptr frmj, int axis); + DispCompIeqctJeqcO(EndFrmsptr frmi, EndFrmsptr frmj, int axis); void calcPostDynCorrectorIteration() override; void initializeGlobally() override; diff --git a/MbDCode/DistIecJec.cpp b/MbDCode/DistIecJec.cpp index fc40756..edfd21c 100644 --- a/MbDCode/DistIecJec.cpp +++ b/MbDCode/DistIecJec.cpp @@ -1,4 +1,13 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "DistIecJec.h" +#include "EndFramec.h" using namespace MbD; @@ -6,7 +15,7 @@ MbD::DistIecJec::DistIecJec() { } -MbD::DistIecJec::DistIecJec(EndFrmcptr frmi, EndFrmcptr frmj) : KinematicIeJe(frmi, frmj) +MbD::DistIecJec::DistIecJec(EndFrmsptr frmi, EndFrmsptr frmj) : KinematicIeJe(frmi, frmj) { } diff --git a/MbDCode/DistIecJec.h b/MbDCode/DistIecJec.h index 0d892bc..8320607 100644 --- a/MbDCode/DistIecJec.h +++ b/MbDCode/DistIecJec.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "KinematicIeJe.h" @@ -8,7 +16,7 @@ namespace MbD { //rIeJe rIeJeO uIeJeO muIeJeO public: DistIecJec(); - DistIecJec(EndFrmcptr frmi, EndFrmcptr frmj); + DistIecJec(EndFrmsptr frmi, EndFrmsptr frmj); void calcPostDynCorrectorIteration() override; virtual void calcPrivate(); diff --git a/MbDCode/DistIeqcJec.cpp b/MbDCode/DistIeqcJec.cpp index 1feff10..ce7ed3f 100644 --- a/MbDCode/DistIeqcJec.cpp +++ b/MbDCode/DistIeqcJec.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "DistIeqcJec.h" #include "EndFrameqc.h" @@ -7,7 +15,7 @@ MbD::DistIeqcJec::DistIeqcJec() { } -MbD::DistIeqcJec::DistIeqcJec(EndFrmcptr frmi, EndFrmcptr frmj) : DistIecJec(frmi, frmj) +MbD::DistIeqcJec::DistIeqcJec(EndFrmsptr frmi, EndFrmsptr frmj) : DistIecJec(frmi, frmj) { } diff --git a/MbDCode/DistIeqcJec.h b/MbDCode/DistIeqcJec.h index f85163f..2d3a898 100644 --- a/MbDCode/DistIeqcJec.h +++ b/MbDCode/DistIeqcJec.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "DistIecJec.h" @@ -8,7 +16,7 @@ namespace MbD { //prIeJepXI prIeJepEI pprIeJepXIpXI pprIeJepXIpEI pprIeJepEIpEI mprIeJeOpEIT public: DistIeqcJec(); - DistIeqcJec(EndFrmcptr frmi, EndFrmcptr frmj); + DistIeqcJec(EndFrmsptr frmi, EndFrmsptr frmj); void calcPrivate() override; void initialize() override; diff --git a/MbDCode/DistIeqcJeqc.cpp b/MbDCode/DistIeqcJeqc.cpp index 5810c7d..60b614d 100644 --- a/MbDCode/DistIeqcJeqc.cpp +++ b/MbDCode/DistIeqcJeqc.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "DistIeqcJeqc.h" #include "EndFrameqc.h" @@ -7,7 +15,7 @@ MbD::DistIeqcJeqc::DistIeqcJeqc() { } -MbD::DistIeqcJeqc::DistIeqcJeqc(EndFrmcptr frmi, EndFrmcptr frmj) : DistIeqcJec(frmi, frmj) +MbD::DistIeqcJeqc::DistIeqcJeqc(EndFrmsptr frmi, EndFrmsptr frmj) : DistIeqcJec(frmi, frmj) { } diff --git a/MbDCode/DistIeqcJeqc.h b/MbDCode/DistIeqcJeqc.h index 26e0585..e9fc3ab 100644 --- a/MbDCode/DistIeqcJeqc.h +++ b/MbDCode/DistIeqcJeqc.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "DistIeqcJec.h" @@ -8,7 +16,7 @@ namespace MbD { //prIeJepXJ prIeJepEJ pprIeJepXIpXJ pprIeJepEIpXJ pprIeJepXJpXJ pprIeJepXIpEJ pprIeJepEIpEJ pprIeJepXJpEJ pprIeJepEJpEJ prIeJeOpEJT public: DistIeqcJeqc(); - DistIeqcJeqc(EndFrmcptr frmi, EndFrmcptr frmj); + DistIeqcJeqc(EndFrmsptr frmi, EndFrmsptr frmj); void calcPrivate() override; void initialize() override; diff --git a/MbDCode/DistIeqctJeqc.cpp b/MbDCode/DistIeqctJeqc.cpp index ad5ed2e..001c097 100644 --- a/MbDCode/DistIeqctJeqc.cpp +++ b/MbDCode/DistIeqctJeqc.cpp @@ -1 +1,9 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "DistIeqctJeqc.h" diff --git a/MbDCode/DistIeqctJeqc.h b/MbDCode/DistIeqctJeqc.h index 8be73fb..cf18f55 100644 --- a/MbDCode/DistIeqctJeqc.h +++ b/MbDCode/DistIeqctJeqc.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "DistIeqcJeqc.h" diff --git a/MbDCode/DistanceConstraintIJ.cpp b/MbDCode/DistanceConstraintIJ.cpp index a52013e..62fa461 100644 --- a/MbDCode/DistanceConstraintIJ.cpp +++ b/MbDCode/DistanceConstraintIJ.cpp @@ -1,8 +1,16 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "DistanceConstraintIJ.h" using namespace MbD; -MbD::DistanceConstraintIJ::DistanceConstraintIJ(EndFrmcptr frmi, EndFrmcptr frmj) : ConstraintIJ(frmi, frmj) +MbD::DistanceConstraintIJ::DistanceConstraintIJ(EndFrmsptr frmi, EndFrmsptr frmj) : ConstraintIJ(frmi, frmj) { } diff --git a/MbDCode/DistanceConstraintIJ.h b/MbDCode/DistanceConstraintIJ.h index 3836ffc..cab116f 100644 --- a/MbDCode/DistanceConstraintIJ.h +++ b/MbDCode/DistanceConstraintIJ.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "ConstraintIJ.h" @@ -8,7 +16,7 @@ namespace MbD { { //distIeJe public: - DistanceConstraintIJ(EndFrmcptr frmi, EndFrmcptr frmj); + DistanceConstraintIJ(EndFrmsptr frmi, EndFrmsptr frmj); void calcPostDynCorrectorIteration() override; virtual void init_distIeJe(); diff --git a/MbDCode/DistanceConstraintIqcJc.cpp b/MbDCode/DistanceConstraintIqcJc.cpp index 10115f6..b92c7dc 100644 --- a/MbDCode/DistanceConstraintIqcJc.cpp +++ b/MbDCode/DistanceConstraintIqcJc.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "DistanceConstraintIqcJc.h" #include "EndFrameqc.h" #include "CREATE.h" @@ -5,7 +13,7 @@ using namespace MbD; -MbD::DistanceConstraintIqcJc::DistanceConstraintIqcJc(EndFrmcptr frmi, EndFrmcptr frmj) : DistanceConstraintIJ(frmi, frmj) +MbD::DistanceConstraintIqcJc::DistanceConstraintIqcJc(EndFrmsptr frmi, EndFrmsptr frmj) : DistanceConstraintIJ(frmi, frmj) { } diff --git a/MbDCode/DistanceConstraintIqcJc.h b/MbDCode/DistanceConstraintIqcJc.h index 3a6ecac..4769199 100644 --- a/MbDCode/DistanceConstraintIqcJc.h +++ b/MbDCode/DistanceConstraintIqcJc.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "DistanceConstraintIJ.h" @@ -7,7 +15,7 @@ namespace MbD { { //pGpXI pGpEI ppGpXIpXI ppGpXIpEI ppGpEIpEI iqXI iqEI public: - DistanceConstraintIqcJc(EndFrmcptr frmi, EndFrmcptr frmj); + DistanceConstraintIqcJc(EndFrmsptr frmi, EndFrmsptr frmj); void addToJointForceI(FColDsptr col) override; void addToJointTorqueI(FColDsptr col) override; diff --git a/MbDCode/DistanceConstraintIqcJqc.cpp b/MbDCode/DistanceConstraintIqcJqc.cpp index f5a9fe9..a5cb8fb 100644 --- a/MbDCode/DistanceConstraintIqcJqc.cpp +++ b/MbDCode/DistanceConstraintIqcJqc.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "DistanceConstraintIqcJqc.h" #include "EndFrameqc.h" #include "CREATE.h" @@ -5,7 +13,7 @@ using namespace MbD; -MbD::DistanceConstraintIqcJqc::DistanceConstraintIqcJqc(EndFrmcptr frmi, EndFrmcptr frmj) : DistanceConstraintIqcJc(frmi, frmj) +MbD::DistanceConstraintIqcJqc::DistanceConstraintIqcJqc(EndFrmsptr frmi, EndFrmsptr frmj) : DistanceConstraintIqcJc(frmi, frmj) { } diff --git a/MbDCode/DistanceConstraintIqcJqc.h b/MbDCode/DistanceConstraintIqcJqc.h index 105cdcf..dbd3695 100644 --- a/MbDCode/DistanceConstraintIqcJqc.h +++ b/MbDCode/DistanceConstraintIqcJqc.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "DistanceConstraintIqcJc.h" @@ -7,7 +15,7 @@ namespace MbD { { //pGpXJ pGpEJ ppGpXIpXJ ppGpEIpXJ ppGpXJpXJ ppGpXIpEJ ppGpEIpEJ ppGpXJpEJ ppGpEJpEJ iqXJ iqEJ public: - DistanceConstraintIqcJqc(EndFrmcptr frmi, EndFrmcptr frmj); + DistanceConstraintIqcJqc(EndFrmsptr frmi, EndFrmsptr frmj); void calcPostDynCorrectorIteration() override; void fillAccICIterError(FColDsptr col) override; diff --git a/MbDCode/DistanceConstraintIqctJqc.cpp b/MbDCode/DistanceConstraintIqctJqc.cpp index 7871b2b..5cb790b 100644 --- a/MbDCode/DistanceConstraintIqctJqc.cpp +++ b/MbDCode/DistanceConstraintIqctJqc.cpp @@ -1,8 +1,16 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "DistanceConstraintIqctJqc.h" using namespace MbD; -MbD::DistanceConstraintIqctJqc::DistanceConstraintIqctJqc(EndFrmcptr frmi, EndFrmcptr frmj) : DistanceConstraintIqcJqc(frmi, frmj) +MbD::DistanceConstraintIqctJqc::DistanceConstraintIqctJqc(EndFrmsptr frmi, EndFrmsptr frmj) : DistanceConstraintIqcJqc(frmi, frmj) { assert(false); } diff --git a/MbDCode/DistanceConstraintIqctJqc.h b/MbDCode/DistanceConstraintIqctJqc.h index 1bf5657..eb905c7 100644 --- a/MbDCode/DistanceConstraintIqctJqc.h +++ b/MbDCode/DistanceConstraintIqctJqc.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "DistanceConstraintIqcJqc.h" @@ -7,7 +15,7 @@ namespace MbD { { //pGpt ppGpXIpt ppGpEIpt ppGpXJpt ppGpEJpt ppGptpt public: - DistanceConstraintIqctJqc(EndFrmcptr frmi, EndFrmcptr frmj); + DistanceConstraintIqctJqc(EndFrmsptr frmi, EndFrmsptr frmj); ConstraintType type() override; double pGpt, ppGptpt; diff --git a/MbDCode/DistancexyConstraintIJ.cpp b/MbDCode/DistancexyConstraintIJ.cpp index bc7cf42..56483a0 100644 --- a/MbDCode/DistancexyConstraintIJ.cpp +++ b/MbDCode/DistancexyConstraintIJ.cpp @@ -1,8 +1,16 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "DistancexyConstraintIJ.h" using namespace MbD; -MbD::DistancexyConstraintIJ::DistancexyConstraintIJ(EndFrmcptr frmi, EndFrmcptr frmj) : ConstraintIJ(frmi, frmj) +MbD::DistancexyConstraintIJ::DistancexyConstraintIJ(EndFrmsptr frmi, EndFrmsptr frmj) : ConstraintIJ(frmi, frmj) { } diff --git a/MbDCode/DistancexyConstraintIJ.h b/MbDCode/DistancexyConstraintIJ.h index a4d3500..1b997bc 100644 --- a/MbDCode/DistancexyConstraintIJ.h +++ b/MbDCode/DistancexyConstraintIJ.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "ConstraintIJ.h" @@ -8,7 +16,7 @@ namespace MbD { { //xIeJeIe yIeJeIe public: - DistancexyConstraintIJ(EndFrmcptr frmi, EndFrmcptr frmj); + DistancexyConstraintIJ(EndFrmsptr frmi, EndFrmsptr frmj); void calcPostDynCorrectorIteration() override; virtual void init_xyIeJeIe(); diff --git a/MbDCode/DistancexyConstraintIqcJc.cpp b/MbDCode/DistancexyConstraintIqcJc.cpp index 9fa988a..b60d526 100644 --- a/MbDCode/DistancexyConstraintIqcJc.cpp +++ b/MbDCode/DistancexyConstraintIqcJc.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "DistancexyConstraintIqcJc.h" #include "EndFramec.h" #include "CREATE.h" @@ -5,7 +13,7 @@ using namespace MbD; -MbD::DistancexyConstraintIqcJc::DistancexyConstraintIqcJc(EndFrmcptr frmi, EndFrmcptr frmj) : DistancexyConstraintIJ(frmi, frmj) +MbD::DistancexyConstraintIqcJc::DistancexyConstraintIqcJc(EndFrmsptr frmi, EndFrmsptr frmj) : DistancexyConstraintIJ(frmi, frmj) { } diff --git a/MbDCode/DistancexyConstraintIqcJc.h b/MbDCode/DistancexyConstraintIqcJc.h index 3225c77..c20e7fd 100644 --- a/MbDCode/DistancexyConstraintIqcJc.h +++ b/MbDCode/DistancexyConstraintIqcJc.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "DistancexyConstraintIJ.h" @@ -7,7 +15,7 @@ namespace MbD { { //pGpXI pGpEI ppGpXIpXI ppGpXIpEI ppGpEIpEI iqXI iqEI public: - DistancexyConstraintIqcJc(EndFrmcptr frmi, EndFrmcptr frmj); + DistancexyConstraintIqcJc(EndFrmsptr frmi, EndFrmsptr frmj); void addToJointForceI(FColDsptr col) override; void addToJointTorqueI(FColDsptr col) override; diff --git a/MbDCode/DistancexyConstraintIqcJqc.cpp b/MbDCode/DistancexyConstraintIqcJqc.cpp index 128133a..270c836 100644 --- a/MbDCode/DistancexyConstraintIqcJqc.cpp +++ b/MbDCode/DistancexyConstraintIqcJqc.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "DistancexyConstraintIqcJqc.h" #include "EndFrameqc.h" #include "CREATE.h" diff --git a/MbDCode/DistancexyConstraintIqcJqc.h b/MbDCode/DistancexyConstraintIqcJqc.h index 09b97e7..a1b9bcf 100644 --- a/MbDCode/DistancexyConstraintIqcJqc.h +++ b/MbDCode/DistancexyConstraintIqcJqc.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "DistancexyConstraintIqcJc.h" diff --git a/MbDCode/DistxyIecJec.cpp b/MbDCode/DistxyIecJec.cpp index b9be770..d380d64 100644 --- a/MbDCode/DistxyIecJec.cpp +++ b/MbDCode/DistxyIecJec.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "DistxyIecJec.h" using namespace MbD; @@ -6,7 +14,7 @@ MbD::DistxyIecJec::DistxyIecJec() { } -MbD::DistxyIecJec::DistxyIecJec(EndFrmcptr frmi, EndFrmcptr frmj) : KinematicIeJe(frmi, frmj) +MbD::DistxyIecJec::DistxyIecJec(EndFrmsptr frmi, EndFrmsptr frmj) : KinematicIeJe(frmi, frmj) { } diff --git a/MbDCode/DistxyIecJec.h b/MbDCode/DistxyIecJec.h index 04a6775..d701277 100644 --- a/MbDCode/DistxyIecJec.h +++ b/MbDCode/DistxyIecJec.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "KinematicIeJe.h" @@ -9,7 +17,7 @@ namespace MbD { //distxy xIeJeIe yIeJeIe public: DistxyIecJec(); - DistxyIecJec(EndFrmcptr frmi, EndFrmcptr frmj); + DistxyIecJec(EndFrmsptr frmi, EndFrmsptr frmj); void calcPostDynCorrectorIteration() override; void initialize() override; diff --git a/MbDCode/DistxyIeqcJec.cpp b/MbDCode/DistxyIeqcJec.cpp index f680b33..12436c2 100644 --- a/MbDCode/DistxyIeqcJec.cpp +++ b/MbDCode/DistxyIeqcJec.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "DistxyIeqcJec.h" #include "CREATE.h" #include "DispCompIeqcJecIe.h" @@ -8,7 +16,7 @@ MbD::DistxyIeqcJec::DistxyIeqcJec() { } -MbD::DistxyIeqcJec::DistxyIeqcJec(EndFrmcptr frmi, EndFrmcptr frmj) : DistxyIecJec(frmi, frmj) +MbD::DistxyIeqcJec::DistxyIeqcJec(EndFrmsptr frmi, EndFrmsptr frmj) : DistxyIecJec(frmi, frmj) { } @@ -22,12 +30,12 @@ void MbD::DistxyIeqcJec::calc_ppdistxypEIpEI() auto ppypEIpEI = yIeJeIe->ppvaluepEIpEI(); for (int i = 0; i < 4; i++) { - auto ppdistxypEIpEIi = ppdistxypEIpEI->at(i); - auto pdistxypEIi = pdistxypEI->at(i); - auto ppxpEIpEIi = ppxpEIpEI->at(i); - auto ppypEIpEIi = ppypEIpEI->at(i); - auto pxpEIi = pxpEI->at(i); - auto pypEIi = pypEI->at(i); + auto& ppdistxypEIpEIi = ppdistxypEIpEI->at(i); + auto& pdistxypEIi = pdistxypEI->at(i); + auto& ppxpEIpEIi = ppxpEIpEI->at(i); + auto& ppypEIpEIi = ppypEIpEI->at(i); + auto& pxpEIi = pxpEI->at(i); + auto& pypEIi = pypEI->at(i); for (int j = i; j < 4; j++) { auto pdistxypEIj = pdistxypEI->at(j); @@ -55,17 +63,17 @@ void MbD::DistxyIeqcJec::calc_ppdistxypXIpEI() auto ppypXIpEI = yIeJeIe->ppvaluepXIpEI(); for (int i = 0; i < 3; i++) { - auto ppdistxypXIpEIi = ppdistxypXIpEI->at(i); - auto pdistxypXIi = pdistxypXI->at(i); - auto ppxpXIpEIi = ppxpXIpEI->at(i); - auto ppypXIpEIi = ppypXIpEI->at(i); - auto pxpXIi = pxpXI->at(i); - auto pypXIi = pypXI->at(i); + auto& ppdistxypXIpEIi = ppdistxypXIpEI->at(i); + auto& pdistxypXIi = pdistxypXI->at(i); + auto& ppxpXIpEIi = ppxpXIpEI->at(i); + auto& ppypXIpEIi = ppypXIpEI->at(i); + auto& pxpXIi = pxpXI->at(i); + auto& pypXIi = pypXI->at(i); for (int j = 0; j < 4; j++) { - auto pdistxypEIj = pdistxypEI->at(j); - auto pxpEIj = pxpEI->at(j); - auto pypEIj = pypEI->at(j); + auto& pdistxypEIj = pdistxypEI->at(j); + auto& pxpEIj = pxpEI->at(j); + auto& pypEIj = pypEI->at(j); auto term1 = -pdistxypXIi * pdistxypEIj; auto term2 = ppxpXIpEIi->at(j) * x + ppypXIpEIi->at(j) * y; auto term3 = pxpXIi * pxpEIj + pypXIi * pypEIj; @@ -85,12 +93,12 @@ void MbD::DistxyIeqcJec::calc_ppdistxypXIpXI() auto ppypXIpXI = yIeJeIe->ppvaluepXIpXI(); for (int i = 0; i < 3; i++) { - auto ppdistxypXIpXIi = ppdistxypXIpXI->at(i); - auto pdistxypXIi = pdistxypXI->at(i); - auto ppxpXIpXIi = ppxpXIpXI->at(i); - auto ppypXIpXIi = ppypXIpXI->at(i); - auto pxpXIi = pxpXI->at(i); - auto pypXIi = pypXI->at(i); + auto& ppdistxypXIpXIi = ppdistxypXIpXI->at(i); + auto& pdistxypXIi = pdistxypXI->at(i); + auto& ppxpXIpXIi = ppxpXIpXI->at(i); + auto& ppypXIpXIi = ppypXIpXI->at(i); + auto& pxpXIi = pxpXI->at(i); + auto& pypXIi = pypXI->at(i); for (int j = i; j < 3; j++) { auto pdistxypXIj = pdistxypXI->at(j); @@ -134,7 +142,7 @@ void MbD::DistxyIeqcJec::calc_pdistxypXI() void MbD::DistxyIeqcJec::calcPostDynCorrectorIteration() { - DistxyIeqcJec::calcPostDynCorrectorIteration(); + DistxyIecJec::calcPostDynCorrectorIteration(); this->calc_pdistxypXI(); this->calc_pdistxypEI(); this->calc_ppdistxypXIpXI(); diff --git a/MbDCode/DistxyIeqcJec.h b/MbDCode/DistxyIeqcJec.h index 3ed23a4..4826251 100644 --- a/MbDCode/DistxyIeqcJec.h +++ b/MbDCode/DistxyIeqcJec.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "DistxyIecJec.h" @@ -9,7 +17,7 @@ namespace MbD { public: DistxyIeqcJec(); - DistxyIeqcJec(EndFrmcptr frmi, EndFrmcptr frmj); + DistxyIeqcJec(EndFrmsptr frmi, EndFrmsptr frmj); void calc_ppdistxypEIpEI(); void calc_ppdistxypXIpEI(); diff --git a/MbDCode/DistxyIeqcJeqc.cpp b/MbDCode/DistxyIeqcJeqc.cpp index f2ab3e9..92140ff 100644 --- a/MbDCode/DistxyIeqcJeqc.cpp +++ b/MbDCode/DistxyIeqcJeqc.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "DistxyIeqcJeqc.h" #include "CREATE.h" #include "DispCompIeqcJeqcIe.h" @@ -8,7 +16,7 @@ MbD::DistxyIeqcJeqc::DistxyIeqcJeqc() { } -MbD::DistxyIeqcJeqc::DistxyIeqcJeqc(EndFrmcptr frmi, EndFrmcptr frmj) : DistxyIeqcJec(frmi, frmj) +MbD::DistxyIeqcJeqc::DistxyIeqcJeqc(EndFrmsptr frmi, EndFrmsptr frmj) : DistxyIeqcJec(frmi, frmj) { } diff --git a/MbDCode/DistxyIeqcJeqc.h b/MbDCode/DistxyIeqcJeqc.h index d434753..ca8e13b 100644 --- a/MbDCode/DistxyIeqcJeqc.h +++ b/MbDCode/DistxyIeqcJeqc.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "DistxyIeqcJec.h" @@ -8,7 +16,7 @@ namespace MbD { //pdistxypXJ pdistxypEJ ppdistxypXIpXJ ppdistxypXIpEJ ppdistxypEIpXJ ppdistxypEIpEJ ppdistxypXJpXJ ppdistxypXJpEJ ppdistxypEJpEJ public: DistxyIeqcJeqc(); - DistxyIeqcJeqc(EndFrmcptr frmi, EndFrmcptr frmj); + DistxyIeqcJeqc(EndFrmsptr frmi, EndFrmsptr frmj); void calc_ppdistxypEIpEJ(); void calc_ppdistxypEIpXJ(); diff --git a/MbDCode/DistxyIeqctJeqc.cpp b/MbDCode/DistxyIeqctJeqc.cpp index 4a9012c..1fe5c14 100644 --- a/MbDCode/DistxyIeqctJeqc.cpp +++ b/MbDCode/DistxyIeqctJeqc.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "DistxyIeqctJeqc.h" using namespace MbD; diff --git a/MbDCode/DistxyIeqctJeqc.h b/MbDCode/DistxyIeqctJeqc.h index e2e5430..3fd9d53 100644 --- a/MbDCode/DistxyIeqctJeqc.h +++ b/MbDCode/DistxyIeqctJeqc.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "DistxyIeqcJeqc.h" diff --git a/MbDCode/EndFramec.cpp b/MbDCode/EndFramec.cpp index fd50beb..84bc5bf 100644 --- a/MbDCode/EndFramec.cpp +++ b/MbDCode/EndFramec.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include #include @@ -47,6 +55,11 @@ void EndFramec::initEndFrameqct() assert(false); } +void MbD::EndFramec::initEndFrameqct2() +{ + assert(false); +} + void EndFramec::calcPostDynCorrectorIteration() { rOeO = markerFrame->rOmO; diff --git a/MbDCode/EndFramec.cpp.bak b/MbDCode/EndFramec.cpp.bak deleted file mode 100644 index ac59cbc..0000000 --- a/MbDCode/EndFramec.cpp.bak +++ /dev/null @@ -1,12 +0,0 @@ -#include "EndFramec.h" - -using namespace MbD; - -EndFramec::EndFramec() -{ -} - -void EndFramec::setMarkerFrame(std::shared_ptr markerFrm) -{ - markerFrame = markerFrm; -} diff --git a/MbDCode/EndFramec.h b/MbDCode/EndFramec.h index 014c60f..f2e6a93 100644 --- a/MbDCode/EndFramec.h +++ b/MbDCode/EndFramec.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include @@ -7,36 +15,37 @@ #include "FullMatrix.h" //FMatDsptr is defined namespace MbD { - class MarkerFrame; - class EndFrameqc; + class MarkerFrame; + class EndFrameqc; - class EndFramec : public CartesianFrame - { - //markerFrame rOeO aAOe - public: - EndFramec(); - EndFramec(const char* str); + class EndFramec : public CartesianFrame + { + //markerFrame rOeO aAOe + public: + EndFramec(); + EndFramec(const char* str); - FMatDsptr aAeO(); - System* root() override; - void initialize() override; - void setMarkerFrame(MarkerFrame* markerFrm); - MarkerFrame* getMarkerFrame(); - void initializeLocally() override; - virtual void initEndFrameqct(); - void calcPostDynCorrectorIteration() override; - FColDsptr aAjOe(int j); - double riOeO(int i); - virtual FColDsptr rmeO(); - virtual FColDsptr rpep(); - virtual FColFMatDsptr pAOppE(); - virtual FMatDsptr aBOp(); - std::shared_ptr newCopyEndFrameqc(); + FMatDsptr aAeO(); + System* root() override; + void initialize() override; + void setMarkerFrame(MarkerFrame* markerFrm); + MarkerFrame* getMarkerFrame(); + void initializeLocally() override; + virtual void initEndFrameqct(); + virtual void initEndFrameqct2(); + void calcPostDynCorrectorIteration() override; + FColDsptr aAjOe(int j); + double riOeO(int i); + virtual FColDsptr rmeO(); + virtual FColDsptr rpep(); + virtual FColFMatDsptr pAOppE(); + virtual FMatDsptr aBOp(); + std::shared_ptr newCopyEndFrameqc(); - MarkerFrame* markerFrame; //Use raw pointer when pointing backwards. - FColDsptr rOeO = std::make_shared>(3); - FMatDsptr aAOe = std::make_shared>(3, 3); - }; - using EndFrmcptr = std::shared_ptr; + MarkerFrame* markerFrame; //Use raw pointer when pointing backwards. + FColDsptr rOeO = std::make_shared>(3); + FMatDsptr aAOe = std::make_shared>(3, 3); + }; + //using EndFrmsptr = std::shared_ptr; } diff --git a/MbDCode/EndFramec.h.bak b/MbDCode/EndFramec.h.bak deleted file mode 100644 index efe2e32..0000000 --- a/MbDCode/EndFramec.h.bak +++ /dev/null @@ -1,22 +0,0 @@ -#pragma once -#include "CartesianFrame.h" -#include "MarkerFrame.h" -#include "FullColumn.h" -#include "FullMatrix.h" - -namespace MbD { - class MarkerFrame; - - class EndFramec : public CartesianFrame - { - //markerFrame rOeO aAOe - public: - EndFramec(); - void setMarkerFrame(std::shared_ptr markerFrm); - - std::weak_ptr markerFrame; - FullColDptr rOeO = std::make_shared>(3); - FullMatDptr aAOe = std::make_shared>(3, 3); - }; -} - diff --git a/MbDCode/EndFrameqc.cpp b/MbDCode/EndFrameqc.cpp index ea07454..026bbf8 100644 --- a/MbDCode/EndFrameqc.cpp +++ b/MbDCode/EndFrameqc.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include #include "EndFrameqc.h" @@ -5,6 +13,7 @@ #include "Variable.h" #include "MarkerFrame.h" #include "CREATE.h" +#include "EndFrameqct2.h" using namespace MbD; @@ -17,9 +26,9 @@ EndFrameqc::EndFrameqc(const char* str) : EndFramec(str) { void EndFrameqc::initialize() { prOeOpE = std::make_shared>(3, 4); - pprOeOpEpE = std::make_shared>>>(4, 4); - pAOepE = std::make_shared>>>(4); - ppAOepEpE = std::make_shared>>>(4, 4); + pprOeOpEpE = std::make_shared>(4, 4); + pAOepE = std::make_shared>(4); + ppAOepEpE = std::make_shared>(4, 4); } void EndFrameqc::initializeGlobally() @@ -38,9 +47,19 @@ void EndFrameqc::initEndFrameqct() endFrameqct->setMarkerFrame(markerFrame); } +void MbD::EndFrameqc::initEndFrameqct2() +{ + endFrameqct = CREATE::With(this->name.data()); + endFrameqct->prOeOpE = prOeOpE; + endFrameqct->pprOeOpEpE = pprOeOpEpE; + endFrameqct->pAOepE = pAOepE; + endFrameqct->ppAOepEpE = ppAOepEpE; + endFrameqct->setMarkerFrame(markerFrame); +} + FMatFColDsptr EndFrameqc::ppAjOepEpE(int jj) { - auto answer = std::make_shared>>>(4, 4); + auto answer = std::make_shared>(4, 4); for (int i = 0; i < 4; i++) { auto& answeri = answer->at(i); auto& ppAOepEipE = ppAOepEpE->at(i); diff --git a/MbDCode/EndFrameqc.cpp.bak b/MbDCode/EndFrameqc.cpp.bak deleted file mode 100644 index b84300c..0000000 --- a/MbDCode/EndFrameqc.cpp.bak +++ /dev/null @@ -1,7 +0,0 @@ -#include "EndFrameqc.h" - -using namespace MbD; - -EndFrameqc::EndFrameqc() : EndFramec() -{ -} diff --git a/MbDCode/EndFrameqc.h b/MbDCode/EndFrameqc.h index acd8776..65989d2 100644 --- a/MbDCode/EndFrameqc.h +++ b/MbDCode/EndFrameqc.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "EndFramec.h" @@ -17,6 +25,7 @@ namespace MbD { void initialize() override; void initializeGlobally() override; void initEndFrameqct() override; + void initEndFrameqct2() override; FMatFColDsptr ppAjOepEpE(int j); void calcPostDynCorrectorIteration() override; FMatDsptr pAjOepET(int j); @@ -33,8 +42,8 @@ namespace MbD { FMatDsptr aBOp() override; FMatDsptr prOeOpE; - std::shared_ptr>>> pprOeOpEpE; - std::shared_ptr>>> pAOepE; + FMatFColDsptr pprOeOpEpE; + FColFMatDsptr pAOepE; FMatFMatDsptr ppAOepEpE; std::shared_ptr endFrameqct; }; diff --git a/MbDCode/EndFrameqc.h.bak b/MbDCode/EndFrameqc.h.bak deleted file mode 100644 index d4d41e0..0000000 --- a/MbDCode/EndFrameqc.h.bak +++ /dev/null @@ -1,23 +0,0 @@ -#pragma once -#include "EndFramec.h" -#include "FullColumn.h" -#include "FullMatrix.h" - -namespace MbD { - class EndFramec; - - class EndFrameqc : public EndFramec - { - //prOeOpE pprOeOpEpE pAOepE ppAOepEpE - public: - EndFrameqc(); - FullMatDptr prOeOpE = std::make_shared>(3, 4); - //std::shared_ptr>>> pprOeOpEpE = std::make_shared>>>(3, 4); - std::shared_ptr>>> pAOepE = std::make_shared>>>(4); - //std::shared_ptr>>> ppAOepEpE = std::make_shared>>>(4, 4); - //FullMatrix>* pprOeOpEpE1 = new FullMatrix>(3, 4); - //FullColumn>* pAOepE1 = new FullColumn>(4); - //FullMatrix>* ppAOepEpE1 = new FullMatrix>(4, 4); - }; -} - diff --git a/MbDCode/EndFrameqct.cpp b/MbDCode/EndFrameqct.cpp index 3cfc402..ba9630d 100644 --- a/MbDCode/EndFrameqct.cpp +++ b/MbDCode/EndFrameqct.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "EndFrameqct.h" #include "MarkerFrame.h" #include "System.h" @@ -28,7 +36,7 @@ void EndFrameqct::initialize() ppAmeptpt = std::make_shared>(3, 3); pprOeOpEpt = std::make_shared>(3, 4); pprOeOptpt = std::make_shared>(3); - ppAOepEpt = std::make_shared>>>(4); + ppAOepEpt = std::make_shared>(4); ppAOeptpt = std::make_shared>(3, 3); } @@ -64,7 +72,7 @@ void EndFrameqct::initprmemptBlks() prmemptBlks = std::make_shared< FullColumn>(3); for (int i = 0; i < 3; i++) { auto& disp = rmemBlks->at(i); - auto var = disp->differentiateWRT(disp, mbdTime); + auto var = disp->differentiateWRT(mbdTime); auto vel = var->simplified(var); prmemptBlks->at(i) = vel; } @@ -76,7 +84,7 @@ void EndFrameqct::initpprmemptptBlks() pprmemptptBlks = std::make_shared< FullColumn>(3); for (int i = 0; i < 3; i++) { auto& vel = prmemptBlks->at(i); - auto var = vel->differentiateWRT(vel, mbdTime); + auto var = vel->differentiateWRT(mbdTime); auto acc = var->simplified(var); pprmemptptBlks->at(i) = acc; } @@ -88,7 +96,7 @@ void EndFrameqct::initpPhiThePsiptBlks() pPhiThePsiptBlks = std::make_shared< FullColumn>(3); for (int i = 0; i < 3; i++) { auto& angle = phiThePsiBlks->at(i); - auto var = angle->differentiateWRT(angle, mbdTime); + auto var = angle->differentiateWRT(mbdTime); //std::cout << "var " << *var << std::endl; auto vel = var->simplified(var); //std::cout << "vel " << *vel << std::endl; @@ -102,7 +110,7 @@ void EndFrameqct::initppPhiThePsiptptBlks() ppPhiThePsiptptBlks = std::make_shared< FullColumn>(3); for (int i = 0; i < 3; i++) { auto& angleVel = pPhiThePsiptBlks->at(i); - auto var = angleVel->differentiateWRT(angleVel, mbdTime); + auto var = angleVel->differentiateWRT(mbdTime); auto angleAcc = var->simplified(var); ppPhiThePsiptptBlks->at(i) = angleAcc; } diff --git a/MbDCode/EndFrameqct.h b/MbDCode/EndFrameqct.h index 79f2e8b..aa6125d 100644 --- a/MbDCode/EndFrameqct.h +++ b/MbDCode/EndFrameqct.h @@ -1,10 +1,19 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "EndFrameqc.h" -#include "Symbolic.h" +//#include "Symbolic.h" namespace MbD { class Time; + class Symbolic; class EndFrameqct : public EndFrameqc { @@ -18,13 +27,13 @@ namespace MbD { void initializeGlobally() override; void initprmemptBlks(); void initpprmemptptBlks(); - void initpPhiThePsiptBlks(); - void initppPhiThePsiptptBlks(); + virtual void initpPhiThePsiptBlks(); + virtual void initppPhiThePsiptptBlks(); void postInput() override; void calcPostDynCorrectorIteration() override; void prePosIC() override; void evalrmem(); - void evalAme(); + virtual void evalAme(); void preVelIC() override; void postVelIC() override; FColDsptr pAjOept(int j); @@ -35,9 +44,9 @@ namespace MbD { FRowDsptr ppriOeOpEpt(int i); double ppriOeOptpt(int i); void evalprmempt(); - void evalpAmept(); + virtual void evalpAmept(); void evalpprmemptpt(); - void evalppAmeptpt(); + virtual void evalppAmeptpt(); FColDsptr rmeO() override; FColDsptr rpep() override; @@ -48,9 +57,8 @@ namespace MbD { FColDsptr rmem, prmempt, pprmemptpt, prOeOpt, pprOeOptpt; FMatDsptr aAme, pAmept, ppAmeptpt, pAOept, ppAOeptpt; FMatDsptr pprOeOpEpt; - std::shared_ptr>>> ppAOepEpt; + FColFMatDsptr ppAOepEpt; }; - using EndFrmqctptr = std::shared_ptr; } diff --git a/MbDCode/EndFrameqct2.cpp b/MbDCode/EndFrameqct2.cpp new file mode 100644 index 0000000..fc8512f --- /dev/null +++ b/MbDCode/EndFrameqct2.cpp @@ -0,0 +1,62 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#include "EndFrameqct2.h" +#include "MarkerFrame.h" +#include "System.h" +#include "Symbolic.h" +#include "Time.h" +#include "EulerParameters.h" +#include "CREATE.h" +#include "EulerAngleszxz.h" +#include "EulerAngleszxzDot.h" +#include "EulerAngleszxzDDot.h" + +using namespace MbD; + +EndFrameqct2::EndFrameqct2() { +} + +EndFrameqct2::EndFrameqct2(const char* str) : EndFrameqct(str) { +} + +void EndFrameqct2::initpPhiThePsiptBlks() +{ + auto& mbdTime = this->root()->time; + auto eulerAngles = std::static_pointer_cast>(phiThePsiBlks); + pPhiThePsiptBlks = eulerAngles->differentiateWRT(mbdTime); +} + +void EndFrameqct2::initppPhiThePsiptptBlks() +{ + auto& mbdTime = this->root()->time; + auto eulerAnglesDot = std::static_pointer_cast>(pPhiThePsiptBlks); + ppPhiThePsiptptBlks = eulerAnglesDot->differentiateWRT(mbdTime); +} + +void EndFrameqct2::evalAme() +{ + auto eulerAngles = std::static_pointer_cast>(phiThePsiBlks); + eulerAngles->calc(); + aAme = eulerAngles->aA; +} + +void EndFrameqct2::evalpAmept() +{ + auto eulerAnglesDot = std::static_pointer_cast>(pPhiThePsiptBlks); + eulerAnglesDot->calc(); + pAmept = eulerAnglesDot->aAdot; + +} + +void EndFrameqct2::evalppAmeptpt() +{ + auto eulerAnglesDDot = std::static_pointer_cast>(ppPhiThePsiptptBlks); + eulerAnglesDDot->calc(); + ppAmeptpt = eulerAnglesDDot->aAddot; +} diff --git a/MbDCode/EndFrameqct2.h b/MbDCode/EndFrameqct2.h new file mode 100644 index 0000000..53c9cd1 --- /dev/null +++ b/MbDCode/EndFrameqct2.h @@ -0,0 +1,34 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#pragma once + +#include "EndFrameqct.h" +#include "Symbolic.h" +#include "EulerAngles.h" +#include "EulerAnglesDot.h" +#include "EulerAnglesDDot.h" + +namespace MbD { + class Time; + + class EndFrameqct2 : public EndFrameqct + { + // + public: + EndFrameqct2(); + EndFrameqct2(const char* str); + void initpPhiThePsiptBlks() override; + void initppPhiThePsiptptBlks() override; + void evalAme() override; + void evalpAmept() override; + void evalppAmeptpt() override; + + }; +} + diff --git a/MbDCode/EulerAngles.cpp b/MbDCode/EulerAngles.cpp new file mode 100644 index 0000000..e2a88f9 --- /dev/null +++ b/MbDCode/EulerAngles.cpp @@ -0,0 +1,9 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#include "EulerAngles.h" diff --git a/MbDCode/EulerAngles.h b/MbDCode/EulerAngles.h new file mode 100644 index 0000000..29b5ab7 --- /dev/null +++ b/MbDCode/EulerAngles.h @@ -0,0 +1,83 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#pragma once + +#include + +#include "EulerArray.h" +#include "FullMatrix.h" +#include "EulerAnglesDot.h" +#include "Symbolic.h" + +namespace MbD { + //template + //class EulerAnglesDot; + + template + class EulerAngles : public EulerArray + { + //rotOrder cA aA + //Used for user input. + public: + EulerAngles() : EulerArray(3) {} + EulerAngles(std::initializer_list list) : EulerArray{ list } {} + void initialize() override; + void calc() override; + std::shared_ptr> differentiateWRT(T var); + + std::shared_ptr> rotOrder; + FColFMatDsptr cA; + FMatDsptr aA; + + }; + template + inline void EulerAngles::initialize() + { + assert(false); + } + template<> + inline void EulerAngles::calc() + { + cA = std::make_shared>(3); + for (int i = 0; i < 3; i++) + { + auto axis = rotOrder->at(i); + auto angle = this->at(i)->getValue(); + if (axis == 1) { + cA->atiput(i, FullMatrix::rotatex(angle)); + } + else if (axis == 2) { + cA->atiput(i, FullMatrix::rotatey(angle)); + } + else if (axis == 3) { + cA->atiput(i, FullMatrix::rotatez(angle)); + } + else { + throw std::runtime_error("Euler angle rotation order must be any permutation of 1,2,3 without consecutive repeats."); + } + } + aA = cA->at(0)->timesFullMatrix(cA->at(1)->timesFullMatrix(cA->at(2))); + } + template + inline void EulerAngles::calc() + { + assert(false); + } + template + inline std::shared_ptr> EulerAngles::differentiateWRT(T var) + { + auto derivatives = std::make_shared>(); + std::transform(this->begin(), this->end(), derivatives->begin(), + [var](T term) { return term->differentiateWRT(var); } + ); + derivatives->aEulerAngles = this; + return derivatives; + } +} + diff --git a/MbDCode/EulerAnglesDDot.cpp b/MbDCode/EulerAnglesDDot.cpp new file mode 100644 index 0000000..e1c16b6 --- /dev/null +++ b/MbDCode/EulerAnglesDDot.cpp @@ -0,0 +1,9 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#include "EulerAnglesDDot.h" diff --git a/MbDCode/EulerAnglesDDot.h b/MbDCode/EulerAnglesDDot.h new file mode 100644 index 0000000..3c5b81e --- /dev/null +++ b/MbDCode/EulerAnglesDDot.h @@ -0,0 +1,91 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#pragma once + +#include "EulerArray.h" +#include "FullMatrix.h" + +namespace MbD { + template + class EulerAngles; + template + class EulerAnglesDot; + + template + class EulerAnglesDDot : public EulerArray + { + //aEulerAnglesDot cAddot aAddot alpF alpf + public: + EulerAnglesDDot() : EulerArray(3) {} + void calc() override; + + EulerAnglesDot* aEulerAnglesDot; //Use raw pointer to point backwards + FColFMatDsptr cAddot; + FMatDsptr aAddot; + FColDsptr alpF, alpf; + void aEulerAngles(EulerAngles* eulerAngles); + }; + template + inline void EulerAnglesDDot::calc() + { + aEulerAnglesDot->calc(); + auto aEulerAngles = aEulerAnglesDot->aEulerAngles; + auto rotOrder = aEulerAngles->rotOrder; + auto cA = aEulerAngles->cA; + auto cAdot = aEulerAnglesDot->cAdot; + cAddot = std::make_shared>(3); + for (int i = 0; i < 3; i++) + { + auto axis = rotOrder->at(i); + auto angle = aEulerAngles->at(i)->getValue(); + auto angleDot = aEulerAnglesDot->at(i)->getValue(); + auto angleDDot = this->at(i)->getValue(); + if (axis == 1) { + cAddot->atiput(i, FullMatrix::rotatexrotDotrotDDot(angle, angleDot, angleDDot)); + } + else if (axis == 2) { + cAddot->atiput(i, FullMatrix::rotateyrotDotrotDDot(angle, angleDot, angleDDot)); + } + else if (axis == 3) { + cAddot->atiput(i, FullMatrix::rotatezrotDotrotDDot(angle, angleDot, angleDDot)); + } + else { + throw std::runtime_error("Euler angle rotation order must be any permutation of 1,2,3 without consecutive repeats."); + } + } + auto phiA = cA->at(0); + auto theA = cA->at(1); + auto psiA = cA->at(2); + auto phiAdot = cAdot->at(0); + auto theAdot = cAdot->at(1); + auto psiAdot = cAdot->at(2); + auto phiAddot = cAddot->at(0); + auto theAddot = cAddot->at(1); + auto psiAddot = cAddot->at(2); + + auto term = phiAddot->timesFullMatrix(theA->timesFullMatrix(psiA)); + auto term1 = phiAdot->timesFullMatrix(theAdot->timesFullMatrix(psiA)); + auto term2 = phiAdot->timesFullMatrix(theA->timesFullMatrix(psiAdot)); + auto term3 = phiAdot->timesFullMatrix(theAdot->timesFullMatrix(psiA)); + auto term4 = phiA->timesFullMatrix(theAddot->timesFullMatrix(psiA)); + auto term5 = phiA->timesFullMatrix(theAdot->timesFullMatrix(psiAdot)); + auto term6 = phiAdot->timesFullMatrix(theA->timesFullMatrix(psiAdot)); + auto term7 = phiA->timesFullMatrix(theAdot->timesFullMatrix(psiAdot)); + auto term8 = phiA->timesFullMatrix(theA->timesFullMatrix(psiAddot)); + + aAddot = term->plusFullMatrix(term1)->plusFullMatrix(term2)->plusFullMatrix(term3)->plusFullMatrix(term4) + ->plusFullMatrix(term5)->plusFullMatrix(term6)->plusFullMatrix(term7)->plusFullMatrix(term8); + } + template + inline void EulerAnglesDDot::aEulerAngles(EulerAngles* eulerAngles) + { + aEulerAnglesDot->aEulerAngles = eulerAngles; + } +} + diff --git a/MbDCode/EulerAnglesDot.cpp b/MbDCode/EulerAnglesDot.cpp new file mode 100644 index 0000000..e5e6cdf --- /dev/null +++ b/MbDCode/EulerAnglesDot.cpp @@ -0,0 +1,9 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#include "EulerAnglesDot.h" diff --git a/MbDCode/EulerAnglesDot.h b/MbDCode/EulerAnglesDot.h new file mode 100644 index 0000000..f427843 --- /dev/null +++ b/MbDCode/EulerAnglesDot.h @@ -0,0 +1,90 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#pragma once + +#include + +#include "EulerArray.h" +#include "FullMatrix.h" + +namespace MbD { + template + class EulerAngles; + template + class EulerAnglesDDot; + + template + class EulerAnglesDot : public EulerArray + { + //aEulerAngles cAdot aAdot omeF omef + public: + EulerAnglesDot() : EulerArray(3) {} + std::shared_ptr> differentiateWRT(T var); + void calc() override; + + EulerAngles* aEulerAngles; //Use raw pointer to point backwards + FColFMatDsptr cAdot; + FMatDsptr aAdot; + FColDsptr omeF, omef; + }; + template + inline std::shared_ptr> EulerAnglesDot::differentiateWRT(T var) + { + auto derivatives = std::make_shared>(); + std::transform(this->begin(), this->end(), derivatives->begin(), + [var](T term) { return term->differentiateWRT(var); } + ); + derivatives->aEulerAnglesDot = this; + return derivatives; + } + template + inline void EulerAnglesDot::calc() + { + aEulerAngles->calc(); + auto rotOrder = aEulerAngles->rotOrder; + auto cA = aEulerAngles->cA; + cAdot = std::make_shared>(3); + for (int i = 0; i < 3; i++) + { + auto axis = rotOrder->at(i); + auto angle = aEulerAngles->at(i)->getValue(); + auto angleDot = this->at(i)->getValue(); + if (axis == 1) { + cAdot->atiput(i, FullMatrix::rotatexrotDot(angle, angleDot)); + } + else if (axis == 2) { + cAdot->atiput(i, FullMatrix::rotateyrotDot(angle, angleDot)); + } + else if (axis == 3) { + cAdot->atiput(i, FullMatrix::rotatezrotDot(angle, angleDot)); + } + else { + throw std::runtime_error("Euler angle rotation order must be any permutation of 1,2,3 without consecutive repeats."); + } + } + auto phidot = this->at(0)->getValue(); + auto thedot = this->at(1)->getValue(); + auto psidot = this->at(2)->getValue(); + auto phiA = cA->at(0); + auto theA = cA->at(1); + auto psiA = cA->at(2); + auto phiAdot = cAdot->at(0); + auto theAdot = cAdot->at(1); + auto psiAdot = cAdot->at(2); + + aAdot = phiAdot->timesFullMatrix(theA->timesFullMatrix(psiA)) + ->plusFullMatrix(phiA->timesFullMatrix(theAdot->timesFullMatrix(psiA))) + ->plusFullMatrix(phiA->timesFullMatrix(theA->timesFullMatrix(psiAdot))); + omeF = (phiA->column(0)->times(phidot) + ->plusFullColumn(phiA->timesFullMatrix(theA)->column(1)->times(thedot)) + ->plusFullColumn(aEulerAngles->aA->column(2)->times(psidot))); + omef = aEulerAngles->aA->transposeTimesFullColumn(omeF); + } +} + diff --git a/MbDCode/EulerAngleszxz.cpp b/MbDCode/EulerAngleszxz.cpp index 4c3f89c..041888a 100644 --- a/MbDCode/EulerAngleszxz.cpp +++ b/MbDCode/EulerAngleszxz.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "EulerAngleszxz.h" using namespace MbD; diff --git a/MbDCode/EulerAngleszxz.h b/MbDCode/EulerAngleszxz.h index 17a8830..5e6367d 100644 --- a/MbDCode/EulerAngleszxz.h +++ b/MbDCode/EulerAngleszxz.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "EulerArray.h" @@ -10,6 +18,7 @@ namespace MbD { class EulerAngleszxz : public EulerArray { //phiA theA psiA aA + //Used by EndFrameqct public: EulerAngleszxz() : EulerArray(3) {} void initialize() override; diff --git a/MbDCode/EulerAngleszxzDDot.cpp b/MbDCode/EulerAngleszxzDDot.cpp index d4fbc1e..9d9effe 100644 --- a/MbDCode/EulerAngleszxzDDot.cpp +++ b/MbDCode/EulerAngleszxzDDot.cpp @@ -1 +1,9 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "EulerAngleszxzDDot.h" diff --git a/MbDCode/EulerAngleszxzDDot.h b/MbDCode/EulerAngleszxzDDot.h index 4ded83d..5d7cbe2 100644 --- a/MbDCode/EulerAngleszxzDDot.h +++ b/MbDCode/EulerAngleszxzDDot.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "EulerArray.h" diff --git a/MbDCode/EulerAngleszxzDot.cpp b/MbDCode/EulerAngleszxzDot.cpp index 16ac9e9..52f26ba 100644 --- a/MbDCode/EulerAngleszxzDot.cpp +++ b/MbDCode/EulerAngleszxzDot.cpp @@ -1 +1,9 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "EulerAngleszxzDot.h" diff --git a/MbDCode/EulerAngleszxzDot.h b/MbDCode/EulerAngleszxzDot.h index dd0f744..2037e70 100644 --- a/MbDCode/EulerAngleszxzDot.h +++ b/MbDCode/EulerAngleszxzDot.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "EulerArray.h" diff --git a/MbDCode/EulerArray.cpp b/MbDCode/EulerArray.cpp index 6964b8d..e72b8c5 100644 --- a/MbDCode/EulerArray.cpp +++ b/MbDCode/EulerArray.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "EulerArray.h" using namespace MbD; diff --git a/MbDCode/EulerArray.h b/MbDCode/EulerArray.h index 85defbf..756da9b 100644 --- a/MbDCode/EulerArray.h +++ b/MbDCode/EulerArray.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "FullColumn.h" @@ -13,8 +21,8 @@ namespace MbD { EulerArray(int count, const T& value) : FullColumn(count, value) {} EulerArray(std::initializer_list list) : FullColumn{ list } {} void initialize() override; - void equalFullColumn(std::shared_ptr> fullCol); - void equalFullColumnAt(std::shared_ptr> fullCol, int i); + void equalFullColumn(FColsptr fullCol); + void equalFullColumnAt(FColsptr fullCol, int i); virtual void calc() = 0; }; @@ -23,12 +31,12 @@ namespace MbD { { } template - inline void EulerArray::equalFullColumn(std::shared_ptr> fullCol) + inline void EulerArray::equalFullColumn(FColsptr fullCol) { this->equalArrayAt(fullCol, 0); } template - inline void EulerArray::equalFullColumnAt(std::shared_ptr> fullCol, int i) + inline void EulerArray::equalFullColumnAt(FColsptr fullCol, int i) { this->equalArrayAt(fullCol, i); } diff --git a/MbDCode/EulerConstraint.cpp b/MbDCode/EulerConstraint.cpp index 71c2b89..7e255c1 100644 --- a/MbDCode/EulerConstraint.cpp +++ b/MbDCode/EulerConstraint.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "EulerConstraint.h" #include "Item.h" #include "PartFrame.h" diff --git a/MbDCode/EulerConstraint.cpp.bak b/MbDCode/EulerConstraint.cpp.bak deleted file mode 100644 index f08225b..0000000 --- a/MbDCode/EulerConstraint.cpp.bak +++ /dev/null @@ -1,12 +0,0 @@ -#include "EulerConstraint.h" -#include "Constraint.h" - -using namespace MbD; - -EulerConstraint::EulerConstraint() -{ -} - -EulerConstraint::EulerConstraint(Item* item) : Constraint::Constraint(item) -{ -} diff --git a/MbDCode/EulerConstraint.h b/MbDCode/EulerConstraint.h index 8a21a00..e9685e9 100644 --- a/MbDCode/EulerConstraint.h +++ b/MbDCode/EulerConstraint.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include diff --git a/MbDCode/EulerConstraint.h.bak b/MbDCode/EulerConstraint.h.bak deleted file mode 100644 index c40dbf8..0000000 --- a/MbDCode/EulerConstraint.h.bak +++ /dev/null @@ -1,20 +0,0 @@ -#pragma once -#include -#include - -#include "Constraint.h" -#include "FullRow.h" - -namespace MbD { - class EulerConstraint : public Constraint - { - //pGpE iqE - public: - EulerConstraint(); - EulerConstraint(Item* item); - - FullRowDptr pGpE = std::make_shared>(4); //partial derivative of G wrt pE - int iqE = -1; - }; -} - diff --git a/MbDCode/EulerParameters.cpp b/MbDCode/EulerParameters.cpp index 8e58f9e..a9cf51f 100644 --- a/MbDCode/EulerParameters.cpp +++ b/MbDCode/EulerParameters.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "EulerParameters.h" using namespace MbD; diff --git a/MbDCode/EulerParameters.h b/MbDCode/EulerParameters.h index fb56a27..f5440da 100644 --- a/MbDCode/EulerParameters.h +++ b/MbDCode/EulerParameters.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "EulerArray.h" @@ -16,16 +24,17 @@ namespace MbD { EulerParameters(int count, const T& value) : EulerArray(count, value) {} EulerParameters(std::initializer_list list) : EulerArray{ list } {} - static std::shared_ptr>>> ppApEpEtimesColumn(FColDsptr col); - static std::shared_ptr> pCpEtimesColumn(FColDsptr col); - static std::shared_ptr> pCTpEtimesColumn(FColDsptr col); - static std::shared_ptr>>> ppApEpEtimesMatrix(FMatDsptr mat); + static std::shared_ptr>> ppApEpEtimesColumn(FColDsptr col); + static FMatDsptr pCpEtimesColumn(FColDsptr col); + static FMatDsptr pCTpEtimesColumn(FColDsptr col); + static std::shared_ptr>> ppApEpEtimesMatrix(FMatDsptr mat); void initialize() override; void calc() override; void calcABC(); void calcpApE(); + void conditionSelf() override; FMatDsptr aA; FMatDsptr aB; @@ -34,7 +43,7 @@ namespace MbD { }; template<> - inline std::shared_ptr>>> EulerParameters::ppApEpEtimesColumn(FColDsptr col) + inline FMatFColDsptr EulerParameters::ppApEpEtimesColumn(FColDsptr col) { double a2c0 = 2 * col->at(0); double a2c1 = 2 * col->at(1); @@ -52,7 +61,7 @@ namespace MbD { auto col22 = std::make_shared>(ListD{ m2c0, m2c1, a2c2 }); auto col23 = std::make_shared>(ListD{ m2c1, a2c0, 0 }); auto col33 = std::make_shared>(ListD{ a2c0, a2c1, a2c2 }); - auto answer = std::make_shared>>>(4, 4); + auto answer = std::make_shared>(4, 4); auto& row0 = answer->at(0); row0->at(0) = col00; row0->at(1) = col01; @@ -77,7 +86,7 @@ namespace MbD { } template<> - inline std::shared_ptr> EulerParameters::pCpEtimesColumn(FColDsptr col) + inline FMatDsptr EulerParameters::pCpEtimesColumn(FColDsptr col) { //"col size = 4." auto c0 = col->at(0); @@ -107,7 +116,7 @@ namespace MbD { } template - inline std::shared_ptr> EulerParameters::pCTpEtimesColumn(FColDsptr col) + inline FMatDsptr EulerParameters::pCTpEtimesColumn(FColDsptr col) { //"col size = 3." auto c0 = col->at(0); @@ -141,7 +150,7 @@ namespace MbD { } template<> - inline std::shared_ptr>>> EulerParameters::ppApEpEtimesMatrix(FMatDsptr mat) + inline FMatFMatDsptr EulerParameters::ppApEpEtimesMatrix(FMatDsptr mat) { FRowDsptr a2m0 = mat->at(0)->times(2.0); FRowDsptr a2m1 = mat->at(1)->times(2.0); @@ -160,7 +169,7 @@ namespace MbD { auto mat22 = std::make_shared>(ListFRD{ m2m0, m2m1, a2m2 }); auto mat23 = std::make_shared>(ListFRD{ m2m1, a2m0, zero }); auto mat33 = std::make_shared>(ListFRD{ a2m0, a2m1, a2m2 }); - auto answer = std::make_shared>>>(4, 4); + auto answer = std::make_shared>(4, 4); auto& row0 = answer->at(0); row0->at(0) = mat00; row0->at(1) = mat01; @@ -190,7 +199,7 @@ namespace MbD { aA = std::make_shared>(3, 3); aB = std::make_shared>(3, 4); aC = std::make_shared>(3, 4); - pApE = std::make_shared>>>(4); + pApE = std::make_shared>(4); for (int i = 0; i < 4; i++) { pApE->at(i) = std::make_shared>(3, 3); @@ -316,5 +325,11 @@ namespace MbD { pAipEk->at(1) = a2E0; pAipEk->at(2) = a2E3; } + template + inline void EulerParameters::conditionSelf() + { + EulerArray::conditionSelf(); + this->normalizeSelf(); + } } diff --git a/MbDCode/EulerParametersDDot.cpp b/MbDCode/EulerParametersDDot.cpp index 022dd5e..f32fc3a 100644 --- a/MbDCode/EulerParametersDDot.cpp +++ b/MbDCode/EulerParametersDDot.cpp @@ -1 +1,9 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "EulerParametersDDot.h" diff --git a/MbDCode/EulerParametersDDot.h b/MbDCode/EulerParametersDDot.h index 102f88a..2492cce 100644 --- a/MbDCode/EulerParametersDDot.h +++ b/MbDCode/EulerParametersDDot.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "EulerArray.h" diff --git a/MbDCode/EulerParametersDot.cpp b/MbDCode/EulerParametersDot.cpp index 753b874..b68cbdf 100644 --- a/MbDCode/EulerParametersDot.cpp +++ b/MbDCode/EulerParametersDot.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "EulerParametersDot.h" using namespace MbD; diff --git a/MbDCode/EulerParametersDot.h b/MbDCode/EulerParametersDot.h index 3499c74..46d980f 100644 --- a/MbDCode/EulerParametersDot.h +++ b/MbDCode/EulerParametersDot.h @@ -1,9 +1,18 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "EulerArray.h" #include "FullColumn.h" #include "FullMatrix.h" #include "EulerParameters.h" +//#include "CREATE.h" //Cannot use CREATE.h in subclasses of std::vector. Why? namespace MbD { @@ -32,8 +41,9 @@ namespace MbD { template inline std::shared_ptr> EulerParametersDot::FromqEOpAndOmegaOpO(std::shared_ptr> qEOp, FColDsptr omeOpO) { + //auto answer = CREATE>::With(4); //Cannot use CREATE.h in subclasses of std::vector. Why? auto answer = std::make_shared>(4); - answer->initialize(); //Cannot use CREATE.h in subclasses of std::vector. Why? + answer->initialize(); qEOp->calcABC(); auto aB = qEOp->aB; answer->equalFullColumn(aB->transposeTimesFullColumn(omeOpO->times(0.5))); diff --git a/MbDCode/Exponential.cpp b/MbDCode/Exponential.cpp new file mode 100644 index 0000000..6fb6be3 --- /dev/null +++ b/MbDCode/Exponential.cpp @@ -0,0 +1,26 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#include "Exponential.h" + +using namespace MbD; + +MbD::Exponential::Exponential(Symsptr arg) : FunctionX(arg) +{ +} + +double MbD::Exponential::getValue() +{ + return std::log(xx->getValue()); +} + +std::ostream& MbD::Exponential::printOn(std::ostream& s) const +{ + s << "exp(" << xx << ")"; + return s; +} diff --git a/MbDCode/Exponential.h b/MbDCode/Exponential.h new file mode 100644 index 0000000..824a4af --- /dev/null +++ b/MbDCode/Exponential.h @@ -0,0 +1,27 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#pragma once + +#include "FunctionX.h" + +namespace MbD { + class Exponential : public FunctionX + { + // + public: + Exponential() = default; + Exponential(Symsptr arg); + double getValue() override; + + std::ostream& printOn(std::ostream& s) const override; + + + }; +} + diff --git a/MbDCode/ExpressionX.cpp b/MbDCode/ExpressionX.cpp index b3214a9..67dd642 100644 --- a/MbDCode/ExpressionX.cpp +++ b/MbDCode/ExpressionX.cpp @@ -1,3 +1,34 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "ExpressionX.h" using namespace MbD; + +void MbD::ExpressionX::xexpression(Symsptr arg, Symsptr func) +{ + //" + //Future modification : + //Check that func is a function of arg. + //No need for self to be dependent of arg since self is dependent of func which is indirectly + //dependent of of arg. + //" + + xx = arg; + expression = func; +} + +Symsptr MbD::ExpressionX::differentiateWRT(Symsptr var) +{ + return expression->differentiateWRT(var); +} + +double MbD::ExpressionX::getValue() +{ + return expression->getValue(); +} diff --git a/MbDCode/ExpressionX.h b/MbDCode/ExpressionX.h index 0a7e4d0..06975de 100644 --- a/MbDCode/ExpressionX.h +++ b/MbDCode/ExpressionX.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "FunctionX.h" @@ -5,6 +13,14 @@ namespace MbD { class ExpressionX : public FunctionX { + // + public: + + void xexpression(Symsptr arg, Symsptr func); + Symsptr differentiateWRT(Symsptr var) override; + double getValue() override; + + Symsptr expression = std::make_shared(); }; } diff --git a/MbDCode/ExternalSystem.cpp b/MbDCode/ExternalSystem.cpp new file mode 100644 index 0000000..d63943c --- /dev/null +++ b/MbDCode/ExternalSystem.cpp @@ -0,0 +1,61 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#include "ExternalSystem.h" +#include "CADSystem.h" +#include "ASMTAssembly.h" +#include "System.h" + +using namespace MbD; + +void MbD::ExternalSystem::preMbDrun(std::shared_ptr mbdSys) +{ + if (cadSystem) { + cadSystem->preMbDrun(mbdSys); + } + else if (asmtAssembly) { + asmtAssembly->preMbDrun(mbdSys); + } + else { + assert(false); + } +} + +void MbD::ExternalSystem::outputFor(AnalysisType type) +{ + if (cadSystem) { + cadSystem->updateFromMbD(); + } + else if (asmtAssembly) { + asmtAssembly->updateFromMbD(); + asmtAssembly->compareResults(type); + } + else { + assert(false); + } +} + +void MbD::ExternalSystem::logString(std::string& str) +{ +} + +void MbD::ExternalSystem::logString(double value) +{ +} + +void MbD::ExternalSystem::runOndselPiston() +{ +} + +void MbD::ExternalSystem::runPiston() +{ +} + +void MbD::ExternalSystem::postMbDrun() +{ +} diff --git a/MbDCode/ExternalSystem.h b/MbDCode/ExternalSystem.h new file mode 100644 index 0000000..0b646df --- /dev/null +++ b/MbDCode/ExternalSystem.h @@ -0,0 +1,41 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#pragma once + +#include +#include "enum.h" +#include + +//#include "CADSystem.h" +//#include "ASMTAssembly.h" + +namespace MbD { + class CADSystem; + class ASMTAssembly; + class System; + + class ExternalSystem + { + // + public: + void preMbDrun(std::shared_ptr mbdSys); + void outputFor(AnalysisType type); + void logString(std::string& str); + void logString(double value); + void runOndselPiston(); + void runPiston(); + void postMbDrun(); + + + CADSystem* cadSystem; + ASMTAssembly* asmtAssembly; + + }; +} + diff --git a/MbDCode/FixedJoint.cpp b/MbDCode/FixedJoint.cpp index e895129..a193bc1 100644 --- a/MbDCode/FixedJoint.cpp +++ b/MbDCode/FixedJoint.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "FixedJoint.h" #include "System.h" #include "CREATE.h" diff --git a/MbDCode/FixedJoint.h b/MbDCode/FixedJoint.h index 6295cd0..5bd9159 100644 --- a/MbDCode/FixedJoint.h +++ b/MbDCode/FixedJoint.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "AtPointJoint.h" diff --git a/MbDCode/ForceTorqueData.cpp b/MbDCode/ForceTorqueData.cpp index 89d5498..1b6341c 100644 --- a/MbDCode/ForceTorqueData.cpp +++ b/MbDCode/ForceTorqueData.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "ForceTorqueData.h" using namespace MbD; diff --git a/MbDCode/ForceTorqueData.h b/MbDCode/ForceTorqueData.h index 965c3c7..4ce9242 100644 --- a/MbDCode/ForceTorqueData.h +++ b/MbDCode/ForceTorqueData.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "StateData.h" diff --git a/MbDCode/ForceTorqueItem.cpp b/MbDCode/ForceTorqueItem.cpp index 4f6a789..e875394 100644 --- a/MbDCode/ForceTorqueItem.cpp +++ b/MbDCode/ForceTorqueItem.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "ForceTorqueItem.h" using namespace MbD; diff --git a/MbDCode/ForceTorqueItem.h b/MbDCode/ForceTorqueItem.h index 3518953..206f154 100644 --- a/MbDCode/ForceTorqueItem.h +++ b/MbDCode/ForceTorqueItem.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "Item.h" diff --git a/MbDCode/FullColumn.cpp b/MbDCode/FullColumn.cpp index 4cd7c60..e689f73 100644 --- a/MbDCode/FullColumn.cpp +++ b/MbDCode/FullColumn.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include #include "FullColumn.h" diff --git a/MbDCode/FullColumn.h b/MbDCode/FullColumn.h index 87a3f3e..e9dcb36 100644 --- a/MbDCode/FullColumn.h +++ b/MbDCode/FullColumn.h @@ -1,14 +1,29 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include #include #include "FullVector.h" -//#include "FullRow.h" namespace MbD { + template + class FullColumn; + using FColDsptr = std::shared_ptr>; + template + using FColsptr = std::shared_ptr>; template class FullRow; + template + using FRowsptr = std::shared_ptr>; + class Symbolic; template class FullColumn : public FullVector @@ -20,27 +35,27 @@ namespace MbD { FullColumn(int count, const T& value) : FullVector(count, value) {} FullColumn(std::vector::iterator begin, std::vector::iterator end) : FullVector(begin, end) {} FullColumn(std::initializer_list list) : FullVector{ list } {} - std::shared_ptr> plusFullColumn(std::shared_ptr> fullCol); - std::shared_ptr> minusFullColumn(std::shared_ptr> fullCol); - std::shared_ptr> times(double a); - std::shared_ptr> negated(); - void atiputFullColumn(int i, std::shared_ptr> fullCol); - void atiplusFullColumn(int i, std::shared_ptr> fullCol); - void equalSelfPlusFullColumnAt(std::shared_ptr> fullCol, int i); - void atiminusFullColumn(int i, std::shared_ptr> fullCol); - void equalFullColumnAt(std::shared_ptr> fullCol, int i); - std::shared_ptr> copy(); - std::shared_ptr> transpose(); - void atiplusFullColumntimes(int i, std::shared_ptr> fullCol, T factor); - T transposeTimesFullColumn(const std::shared_ptr> fullCol); - void equalSelfPlusFullColumntimes(std::shared_ptr> fullCol, T factor); - std::shared_ptr> cross(std::shared_ptr> fullCol); + FColsptr plusFullColumn(FColsptr fullCol); + FColsptr minusFullColumn(FColsptr fullCol); + FColsptr times(T a); + FColsptr negated(); + void atiputFullColumn(int i, FColsptr fullCol); + void atiplusFullColumn(int i, FColsptr fullCol); + void equalSelfPlusFullColumnAt(FColsptr fullCol, int i); + void atiminusFullColumn(int i, FColsptr fullCol); + void equalFullColumnAt(FColsptr fullCol, int i); + FColsptr copy(); + FRowsptr transpose(); + void atiplusFullColumntimes(int i, FColsptr fullCol, T factor); + T transposeTimesFullColumn(const FColsptr fullCol); + void equalSelfPlusFullColumntimes(FColsptr fullCol, T factor); + FColsptr cross(FColsptr fullCol); + FColsptr simplified(); std::ostream& printOn(std::ostream& s) const override; }; - using FColDsptr = std::shared_ptr>; template - inline std::shared_ptr> FullColumn::plusFullColumn(std::shared_ptr> fullCol) + inline FColsptr FullColumn::plusFullColumn(FColsptr fullCol) { int n = (int) this->size(); auto answer = std::make_shared>(n); @@ -50,7 +65,7 @@ namespace MbD { return answer; } template - inline std::shared_ptr> FullColumn::minusFullColumn(std::shared_ptr> fullCol) + inline FColsptr FullColumn::minusFullColumn(FColsptr fullCol) { int n = (int) this->size(); auto answer = std::make_shared>(n); @@ -59,23 +74,28 @@ namespace MbD { } return answer; } - template - inline std::shared_ptr> FullColumn::times(double a) + template<> + inline FColDsptr FullColumn::times(double a) { - int n = (int) this->size(); - auto answer = std::make_shared>(n); + int n = (int)this->size(); + auto answer = std::make_shared>(n); for (int i = 0; i < n; i++) { answer->at(i) = this->at(i) * a; } return answer; } template - inline std::shared_ptr> FullColumn::negated() + inline FColsptr FullColumn::times(T a) + { + assert(false); + } + template + inline FColsptr FullColumn::negated() { return this->times(-1.0); } template - inline void FullColumn::atiputFullColumn(int i, std::shared_ptr> fullCol) + inline void FullColumn::atiputFullColumn(int i, FColsptr fullCol) { for (int ii = 0; ii < fullCol->size(); ii++) { @@ -83,7 +103,7 @@ namespace MbD { } } template - inline void FullColumn::atiplusFullColumn(int i, std::shared_ptr> fullCol) + inline void FullColumn::atiplusFullColumn(int i, FColsptr fullCol) { for (int ii = 0; ii < fullCol->size(); ii++) { @@ -91,7 +111,7 @@ namespace MbD { } } template - inline void FullColumn::equalSelfPlusFullColumnAt(std::shared_ptr> fullCol, int ii) + inline void FullColumn::equalSelfPlusFullColumnAt(FColsptr fullCol, int ii) { //self is subcolumn of fullCol for (int i = 0; i < this->size(); i++) @@ -100,7 +120,7 @@ namespace MbD { } } template - inline void FullColumn::atiminusFullColumn(int i1, std::shared_ptr> fullCol) + inline void FullColumn::atiminusFullColumn(int i1, FColsptr fullCol) { for (int ii = 0; ii < fullCol->size(); ii++) { @@ -109,7 +129,7 @@ namespace MbD { } } template - inline void FullColumn::equalFullColumnAt(std::shared_ptr> fullCol, int i) + inline void FullColumn::equalFullColumnAt(FColsptr fullCol, int i) { this->equalArrayAt(fullCol, i); //for (int ii = 0; ii < this->size(); ii++) @@ -118,7 +138,7 @@ namespace MbD { //} } template<> - inline std::shared_ptr> FullColumn::copy() + inline FColDsptr FullColumn::copy() { auto n = (int) this->size(); auto answer = std::make_shared>(n); @@ -129,12 +149,12 @@ namespace MbD { return answer; } template - inline std::shared_ptr> FullColumn::transpose() + inline FRowsptr FullColumn::transpose() { return std::make_shared>(*this); } template - inline void FullColumn::atiplusFullColumntimes(int i1, std::shared_ptr> fullCol, T factor) + inline void FullColumn::atiplusFullColumntimes(int i1, FColsptr fullCol, T factor) { for (int ii = 0; ii < fullCol->size(); ii++) { @@ -143,17 +163,17 @@ namespace MbD { } } template - inline T FullColumn::transposeTimesFullColumn(const std::shared_ptr> fullCol) + inline T FullColumn::transposeTimesFullColumn(const FColsptr fullCol) { return this->dot(fullCol); } template - inline void FullColumn::equalSelfPlusFullColumntimes(std::shared_ptr> fullCol, T factor) + inline void FullColumn::equalSelfPlusFullColumntimes(FColsptr fullCol, T factor) { this->equalSelfPlusFullVectortimes(fullCol, factor); } template - inline std::shared_ptr> FullColumn::cross(std::shared_ptr> fullCol) + inline FColsptr FullColumn::cross(FColsptr fullCol) { auto a0 = this->at(0); auto a1 = this->at(1); @@ -167,6 +187,24 @@ namespace MbD { answer->atiput(2, a0 * b1 - (a1 * b0)); return answer; } + //template<> + //inline std::shared_ptr> FullColumn::simplified() + //{ + // auto n = this->size(); + // auto answer = std::make_shared>(n); + // for (int i = 0; i < n; i++) + // { + // auto func = this->at(i); + // answer->at(i) = func->simplified(func); + // } + // return answer; + //} + template + inline FColsptr FullColumn::simplified() + { + assert(false); + return FColsptr(); + } template inline std::ostream& FullColumn::printOn(std::ostream& s) const { diff --git a/MbDCode/FullMatrix.cpp b/MbDCode/FullMatrix.cpp index e1a598e..e2c7dbe 100644 --- a/MbDCode/FullMatrix.cpp +++ b/MbDCode/FullMatrix.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "FullMatrix.h" using namespace MbD; diff --git a/MbDCode/FullMatrix.cpp.bak b/MbDCode/FullMatrix.cpp.bak deleted file mode 100644 index e74852e..0000000 --- a/MbDCode/FullMatrix.cpp.bak +++ /dev/null @@ -1,5 +0,0 @@ -#include "FullMatrix.h" -#include "FullRow.h" - -using namespace MbD; - diff --git a/MbDCode/FullMatrix.h b/MbDCode/FullMatrix.h index 89e6400..fd792a7 100644 --- a/MbDCode/FullMatrix.h +++ b/MbDCode/FullMatrix.h @@ -1,21 +1,41 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once +#include #include #include "RowTypeMatrix.h" namespace MbD { + template + class FullMatrix; + using FMatDsptr = std::shared_ptr>; + template + using FMatsptr = std::shared_ptr>; template class FullColumn; + using FColDsptr = std::shared_ptr>; template class FullRow; + template + class EulerParameters; + using FMatFColDsptr = std::shared_ptr>; + using FMatFMatDsptr = std::shared_ptr>; + using FColFMatDsptr = std::shared_ptr>; template - class FullMatrix : public RowTypeMatrix>> + class FullMatrix : public RowTypeMatrix> { public: FullMatrix() {} - FullMatrix(int m) : RowTypeMatrix>>(m) + FullMatrix(int m) : RowTypeMatrix>(m) { } FullMatrix(int m, int n) { @@ -24,7 +44,7 @@ namespace MbD { this->push_back(row); } } - FullMatrix(std::initializer_list>> listOfRows) { + FullMatrix(std::initializer_list> listOfRows) { for (auto& row : listOfRows) { this->push_back(row); @@ -37,34 +57,245 @@ namespace MbD { this->push_back(row); } } + static FMatsptr rotatex(T angle); + static FMatsptr rotatey(T angle); + static FMatsptr rotatez(T angle); + static FMatsptr rotatexrotDot(T angle, T angledot); + static FMatsptr rotateyrotDot(T angle, T angledot); + static FMatsptr rotatezrotDot(T angle, T angledot); + static FMatsptr rotatexrotDotrotDDot(T angle, T angleDot, T angleDDot); + static FMatsptr rotateyrotDotrotDDot(T angle, T angleDot, T angleDDot); + static FMatsptr rotatezrotDotrotDDot(T angle, T angleDot, T angleDDot); void identity(); - std::shared_ptr> column(int j); - std::shared_ptr> timesFullColumn(std::shared_ptr> fullCol); - std::shared_ptr> timesFullColumn(FullColumn* fullCol); - std::shared_ptr> timesFullMatrix(std::shared_ptr> fullMat); - std::shared_ptr> timesTransposeFullMatrix(std::shared_ptr> fullMat); - std::shared_ptr> times(double a); - std::shared_ptr> transposeTimesFullMatrix(std::shared_ptr> fullMat); - std::shared_ptr> plusFullMatrix(std::shared_ptr> fullMat); - std::shared_ptr> minusFullMatrix(std::shared_ptr> fullMat); - std::shared_ptr> transpose(); - std::shared_ptr> negated(); + FColsptr column(int j); + FColsptr timesFullColumn(FColsptr fullCol); + FColsptr timesFullColumn(FullColumn* fullCol); + FMatsptr timesFullMatrix(FMatsptr fullMat); + FMatsptr timesTransposeFullMatrix(FMatsptr fullMat); + FMatsptr times(T a); + FMatsptr transposeTimesFullMatrix(FMatsptr fullMat); + FMatsptr plusFullMatrix(FMatsptr fullMat); + FMatsptr minusFullMatrix(FMatsptr fullMat); + FMatsptr transpose(); + FMatsptr negated(); void symLowerWithUpper(); - void atiput(int i, std::shared_ptr> fullRow); + void atiput(int i, FRowsptr fullRow); void atijput(int i, int j, T value); - void atijputFullColumn(int i, int j, std::shared_ptr> fullCol); - void atijplusFullRow(int i, int j, std::shared_ptr> fullRow); - void atijplusNumber(int i, int j, double value); - void atijminusNumber(int i, int j, double value); + void atijputFullColumn(int i, int j, FColsptr fullCol); + void atijplusFullRow(int i, int j, FRowsptr fullRow); + void atijplusNumber(int i, int j, T value); + void atijminusNumber(int i, int j, T value); double sumOfSquares() override; void zeroSelf() override; - std::shared_ptr> copy(); + FMatsptr copy(); FullMatrix operator+(const FullMatrix fullMat); - std::shared_ptr> transposeTimesFullColumn(const std::shared_ptr> fullCol); + FColsptr transposeTimesFullColumn(const FColsptr fullCol); void magnifySelf(T factor); - std::ostream& printOn(std::ostream& s) const override; + std::shared_ptr> asEulerParameters(); + T trace(); + double maxMagnitude() override; + FColsptr bryantAngles(); + std::ostream& printOn(std::ostream& s) const override; }; + template + inline FMatsptr FullMatrix::rotatex(T the) + { + auto sthe = std::sin(the); + auto cthe = std::cos(the); + auto rotMat = std::make_shared>(3, 3); + auto row0 = rotMat->at(0); + row0->atiput(0, 1.0); + row0->atiput(1, 0.0); + row0->atiput(2, 0.0); + auto row1 = rotMat->at(1); + row1->atiput(0, 0.0); + row1->atiput(1, cthe); + row1->atiput(2, -sthe); + auto row2 = rotMat->at(2); + row2->atiput(0, 0.0); + row2->atiput(1, sthe); + row2->atiput(2, cthe); + return rotMat; + } + template + inline FMatsptr FullMatrix::rotatey(T the) + { + auto sthe = std::sin(the); + auto cthe = std::cos(the); + auto rotMat = std::make_shared>(3, 3); + auto row0 = rotMat->at(0); + row0->atiput(0, cthe); + row0->atiput(1, 0.0); + row0->atiput(2, sthe); + auto row1 = rotMat->at(1); + row1->atiput(0, 0.0); + row1->atiput(1, 1.0); + row1->atiput(2, 0.0); + auto row2 = rotMat->at(2); + row2->atiput(0, -sthe); + row2->atiput(1, 0.0); + row2->atiput(2, cthe); + return rotMat; + } + template + inline FMatsptr FullMatrix::rotatez(T the) + { + auto sthe = std::sin(the); + auto cthe = std::cos(the); + auto rotMat = std::make_shared>(3, 3); + auto row0 = rotMat->at(0); + row0->atiput(0, cthe); + row0->atiput(1, -sthe); + row0->atiput(2, 0.0); + auto row1 = rotMat->at(1); + row1->atiput(0, sthe); + row1->atiput(1, cthe); + row1->atiput(2, 0.0); + auto row2 = rotMat->at(2); + row2->atiput(0, 0.0); + row2->atiput(1, 0.0); + row2->atiput(2, 1.0); + return rotMat; + } + template + inline FMatsptr FullMatrix::rotatexrotDot(T the, T thedot) + { + auto sthe = std::sin(the); + auto cthe = std::cos(the); + auto sthedot = cthe * thedot; + auto cthedot = -sthe * thedot; + auto rotMat = std::make_shared>(3, 3); + auto row0 = rotMat->at(0); + row0->atiput(0, 0.0); + row0->atiput(1, 0.0); + row0->atiput(2, 0.0); + auto row1 = rotMat->at(1); + row1->atiput(0, 0.0); + row1->atiput(1, cthedot); + row1->atiput(2, -sthedot); + auto row2 = rotMat->at(2); + row2->atiput(0, 0.0); + row2->atiput(1, sthedot); + row2->atiput(2, cthedot); + return rotMat; + } + template + inline FMatsptr FullMatrix::rotateyrotDot(T the, T thedot) + { + auto sthe = std::sin(the); + auto cthe = std::cos(the); + auto sthedot = cthe * thedot; + auto cthedot = -sthe * thedot; + auto rotMat = std::make_shared>(3, 3); + auto row0 = rotMat->at(0); + row0->atiput(0, cthedot); + row0->atiput(1, 0.0); + row0->atiput(2, sthedot); + auto row1 = rotMat->at(1); + row1->atiput(0, 0.0); + row1->atiput(1, 0.0); + row1->atiput(2, 0.0); + auto row2 = rotMat->at(2); + row2->atiput(0, -sthedot); + row2->atiput(1, 0.0); + row2->atiput(2, cthedot); + return rotMat; + } + template + inline FMatsptr FullMatrix::rotatezrotDot(T the, T thedot) + { + auto sthe = std::sin(the); + auto cthe = std::cos(the); + auto sthedot = cthe * thedot; + auto cthedot = -sthe * thedot; + auto rotMat = std::make_shared>(3, 3); + auto row0 = rotMat->at(0); + row0->atiput(0, cthedot); + row0->atiput(1, -sthedot); + row0->atiput(2, 0.0); + auto row1 = rotMat->at(1); + row1->atiput(0, sthedot); + row1->atiput(1, cthedot); + row1->atiput(2, 0.0); + auto row2 = rotMat->at(2); + row2->atiput(0, 0.0); + row2->atiput(1, 0.0); + row2->atiput(2, 0.0); + return rotMat; + } + template + inline FMatsptr FullMatrix::rotatexrotDotrotDDot(T the, T thedot, T theddot) + { + auto sthe = std::sin(the); + auto cthe = std::cos(the); + auto sthedot = cthe * thedot; + auto cthedot = -sthe * thedot; + auto stheddot = cthedot * thedot + (cthe * theddot); + auto ctheddot = -(sthedot * thedot) - (sthe * theddot); + auto rotMat = std::make_shared>(3, 3); + auto row0 = rotMat->at(0); + row0->atiput(0, 0.0); + row0->atiput(1, 0.0); + row0->atiput(2, 0.0); + auto row1 = rotMat->at(1); + row1->atiput(0, 0.0); + row1->atiput(1, ctheddot); + row1->atiput(2, -stheddot); + auto row2 = rotMat->at(2); + row2->atiput(0, 0.0); + row2->atiput(1, stheddot); + row2->atiput(2, ctheddot); + return rotMat; + } + template + inline FMatsptr FullMatrix::rotateyrotDotrotDDot(T the, T thedot, T theddot) + { + auto sthe = std::sin(the); + auto cthe = std::cos(the); + auto sthedot = cthe * thedot; + auto cthedot = -sthe * thedot; + auto stheddot = cthedot * thedot + (cthe * theddot); + auto ctheddot = -(sthedot * thedot) - (sthe * theddot); + auto rotMat = std::make_shared>(3, 3); + auto row0 = rotMat->at(0); + row0->atiput(0, ctheddot); + row0->atiput(1, 0.0); + row0->atiput(2, stheddot); + auto row1 = rotMat->at(1); + row1->atiput(0, 0.0); + row1->atiput(1, 0.0); + row1->atiput(2, 0.0); + auto row2 = rotMat->at(2); + row2->atiput(0, -stheddot); + row2->atiput(1, 0.0); + row2->atiput(2, ctheddot); + return rotMat; + } + template + inline FMatsptr FullMatrix::rotatezrotDotrotDDot(T the, T thedot, T theddot) + { + auto sthe = std::sin(the); + auto cthe = std::cos(the); + auto sthedot = cthe * thedot; + auto cthedot = -sthe * thedot; + auto stheddot = cthedot * thedot + (cthe * theddot); + auto ctheddot = -(sthedot * thedot) - (sthe * theddot); + auto rotMat = std::make_shared>(3, 3); + auto row0 = rotMat->at(0); + row0->atiput(0, ctheddot); + row0->atiput(1, -stheddot); + row0->atiput(2, 0.0); + auto row1 = rotMat->at(1); + row1->atiput(0, stheddot); + row1->atiput(1, ctheddot); + row1->atiput(2, 0.0); + auto row2 = rotMat->at(2); + row2->atiput(0, 0.0); + row2->atiput(1, 0.0); + row2->atiput(2, 0.0); + return rotMat; + } template<> inline void FullMatrix::identity() { this->zeroSelf(); @@ -73,7 +304,7 @@ namespace MbD { } } template - inline std::shared_ptr> FullMatrix::column(int j) { + inline FColsptr FullMatrix::column(int j) { int n = (int)this->size(); auto answer = std::make_shared>(n); for (int i = 0; i < n; i++) { @@ -82,7 +313,7 @@ namespace MbD { return answer; } template - inline std::shared_ptr> FullMatrix::timesFullMatrix(std::shared_ptr> fullMat) + inline FMatsptr FullMatrix::timesFullMatrix(FMatsptr fullMat) { int m = this->nrow(); auto answer = std::make_shared>(m); @@ -92,7 +323,7 @@ namespace MbD { return answer; } template - inline std::shared_ptr> FullMatrix::timesTransposeFullMatrix(std::shared_ptr> fullMat) + inline FMatsptr FullMatrix::timesTransposeFullMatrix(FMatsptr fullMat) { int nrow = this->nrow(); auto answer = std::make_shared>(nrow); @@ -101,23 +332,28 @@ namespace MbD { } return answer; } - template - inline std::shared_ptr> FullMatrix::times(double a) + template<> + inline FMatDsptr FullMatrix::times(double a) { int m = this->nrow(); - auto answer = std::make_shared>(m); + auto answer = std::make_shared>(m); for (int i = 0; i < m; i++) { answer->at(i) = this->at(i)->times(a); } return answer; } template - inline std::shared_ptr> FullMatrix::transposeTimesFullMatrix(std::shared_ptr> fullMat) + inline FMatsptr FullMatrix::times(T a) + { + assert(false); + } + template + inline FMatsptr FullMatrix::transposeTimesFullMatrix(FMatsptr fullMat) { return this->transpose()->timesFullMatrix(fullMat); } template - inline std::shared_ptr> FullMatrix::plusFullMatrix(std::shared_ptr> fullMat) + inline FMatsptr FullMatrix::plusFullMatrix(FMatsptr fullMat) { int n = (int)this->size(); auto answer = std::make_shared>(n); @@ -127,7 +363,7 @@ namespace MbD { return answer; } template - inline std::shared_ptr> FullMatrix::minusFullMatrix(std::shared_ptr> fullMat) + inline FMatsptr FullMatrix::minusFullMatrix(FMatsptr fullMat) { int n = (int)this->size(); auto answer = std::make_shared>(n); @@ -137,7 +373,7 @@ namespace MbD { return answer; } template - inline std::shared_ptr> FullMatrix::transpose() + inline FMatsptr FullMatrix::transpose() { int nrow = this->nrow(); auto ncol = this->ncol(); @@ -151,7 +387,7 @@ namespace MbD { return answer; } template - inline std::shared_ptr> FullMatrix::negated() + inline FMatsptr FullMatrix::negated() { return this->times(-1.0); } @@ -166,7 +402,7 @@ namespace MbD { } } template - inline void FullMatrix::atiput(int i, std::shared_ptr> fullRow) + inline void FullMatrix::atiput(int i, FRowsptr fullRow) { this->at(i) = fullRow; } @@ -176,7 +412,7 @@ namespace MbD { this->at(i)->atiput(j, value); } template - inline void FullMatrix::atijputFullColumn(int i1, int j1, std::shared_ptr> fullCol) + inline void FullMatrix::atijputFullColumn(int i1, int j1, FColsptr fullCol) { for (int ii = 0; ii < fullCol->size(); ii++) { @@ -184,18 +420,18 @@ namespace MbD { } } template - inline void FullMatrix::atijplusFullRow(int i, int j, std::shared_ptr> fullRow) + inline void FullMatrix::atijplusFullRow(int i, int j, FRowsptr fullRow) { this->at(i)->atiplusFullRow(j, fullRow); } template - inline void FullMatrix::atijplusNumber(int i, int j, double value) + inline void FullMatrix::atijplusNumber(int i, int j, T value) { auto rowi = this->at(i); rowi->at(j) += value; } template - inline void FullMatrix::atijminusNumber(int i, int j, double value) + inline void FullMatrix::atijminusNumber(int i, int j, T value) { auto rowi = this->at(i); rowi->at(j) -= value; @@ -229,7 +465,7 @@ namespace MbD { assert(false); } template - inline std::shared_ptr> FullMatrix::copy() + inline FMatsptr FullMatrix::copy() { auto m = (int)this->size(); auto answer = std::make_shared>(m); @@ -250,7 +486,7 @@ namespace MbD { return answer; } template - inline std::shared_ptr> FullMatrix::transposeTimesFullColumn(std::shared_ptr> fullCol) + inline FColsptr FullMatrix::transposeTimesFullColumn(FColsptr fullCol) { auto sptr = std::make_shared>(*this); return fullCol->transpose()->timesFullMatrix(sptr)->transpose(); @@ -274,12 +510,130 @@ namespace MbD { return s; } template - inline std::shared_ptr> FullMatrix::timesFullColumn(std::shared_ptr> fullCol) + inline std::shared_ptr> FullMatrix::asEulerParameters() + { + //"Given [A], compute Euler parameter." + + auto traceA = this->trace(); + T dum = 0.0; + T dumSq = 0.0; + //auto qE = CREATE>::With(4); //Cannot use CREATE.h in subclasses of std::vector. Why? + auto qE = std::make_shared>(4); + qE->initialize(); + auto OneMinusTraceDivFour = (1.0 - traceA) / 4.0; + for (int i = 0; i < 3; i++) + { + dumSq = this->at(i)->at(i) / 2.0 + OneMinusTraceDivFour; + dum = (dumSq > 0.0) ? std::sqrt(dumSq) : 0.0; + qE->atiput(i, dum); + } + dumSq = (1.0 + traceA) / 4.0; + dum = (dumSq > 0.0) ? std::sqrt(dumSq) : 0.0; + qE->atiput(3, dum); + T max = 0.0; + int maxE = -1; + for (int i = 0; i < 4; i++) + { + auto num = qE->at(i); + if (max < num) { + max = num; + maxE = i; + } + } + + if (maxE == 0) { + auto FourE = 4.0 * qE->at(0); + qE->atiput(1, (this->at(0)->at(1) + this->at(1)->at(0)) / FourE); + qE->atiput(2, (this->at(0)->at(2) + this->at(2)->at(0)) / FourE); + qE->atiput(3, (this->at(2)->at(1) - this->at(1)->at(2)) / FourE); + } + else if (maxE == 1) { + auto FourE = 4.0 * qE->at(1); + qE->atiput(0, (this->at(0)->at(1) + this->at(1)->at(0)) / FourE); + qE->atiput(2, (this->at(1)->at(2) + this->at(2)->at(1)) / FourE); + qE->atiput(3, (this->at(0)->at(2) - this->at(2)->at(0)) / FourE); + } + else if (maxE == 2) { + auto FourE = 4.0 * qE->at(2); + qE->atiput(0, (this->at(0)->at(2) + this->at(2)->at(0)) / FourE); + qE->atiput(1, (this->at(1)->at(2) + this->at(2)->at(1)) / FourE); + qE->atiput(3, (this->at(1)->at(0) - this->at(0)->at(1)) / FourE); + } + else if (maxE == 3) { + auto FourE = 4.0 * qE->at(3); + qE->atiput(0, (this->at(2)->at(1) - this->at(1)->at(2)) / FourE); + qE->atiput(1, (this->at(0)->at(2) - this->at(2)->at(0)) / FourE); + qE->atiput(2, (this->at(1)->at(0) - this->at(0)->at(1)) / FourE); + } + qE->conditionSelf(); + qE->calc(); + return qE; + } + template + inline T FullMatrix::trace() + { + T trace = 0.0; + for (int i = 0; i < this->size(); i++) + { + trace += this->at(i)->at(i); + } + return trace; + } + template + inline double FullMatrix::maxMagnitude() + { + auto max = 0.0; + for (int i = 0; i < this->size(); i++) + { + auto element = this->at(i)->maxMagnitude(); + if (max < element) max = element; + } + return max; + } + template + inline FColsptr FullMatrix::bryantAngles() + { + auto answer = std::make_shared>(3); + auto sthe1y = this->at(0)->at(2); + T the0x, the1y, the2z, cthe0x, sthe0x, y, x; + if (std::abs(sthe1y) > 0.9999) { + if (sthe1y > 0.0) { + the0x = std::atan2(this->at(1)->at(0), this->at(1)->at(1)); + the1y = M_PI / 2.0; + the2z = 0.0; + } + else { + the0x = std::atan2(this->at(2)->at(1), this->at(2)->at(0)); + the1y = M_PI / -2.0; + the2z = 0.0; + } + } + else { + the0x = std::atan2(-this->at(1)->at(2), this->at(2)->at(2)); + cthe0x = std::cos(the0x); + sthe0x = std::sin(the0x); + y = sthe1y; + if (std::abs(cthe0x) > std::abs(sthe0x)) { + x = this->at(2)->at(2) / cthe0x; + } + else { + x = this->at(1)->at(2) / -sthe0x; + } + the1y = std::atan2(y, x); + the2z = std::atan2(-this->at(0)->at(1), this->at(0)->at(0)); + } + answer->atiput(0, the0x); + answer->atiput(1, the1y); + answer->atiput(2, the2z); + return answer; + } + template + inline FColsptr FullMatrix::timesFullColumn(FColsptr fullCol) { return this->timesFullColumn(fullCol.get()); } template - inline std::shared_ptr> FullMatrix::timesFullColumn(FullColumn* fullCol) + inline FColsptr FullMatrix::timesFullColumn(FullColumn* fullCol) { //"a*b = a(i,j)b(j) sum j." auto nrow = this->nrow(); @@ -290,10 +644,5 @@ namespace MbD { } return answer; } - using FMatDsptr = std::shared_ptr>; - using FMatDsptr = std::shared_ptr>; - using FMatFColDsptr = std::shared_ptr>>>; - using FMatFMatDsptr = std::shared_ptr>>>; - using FColFMatDsptr = std::shared_ptr>>>; } diff --git a/MbDCode/FullMatrix.h.bak b/MbDCode/FullMatrix.h.bak deleted file mode 100644 index fbfdec3..0000000 --- a/MbDCode/FullMatrix.h.bak +++ /dev/null @@ -1,29 +0,0 @@ -#pragma once -#include - -#include "RowTypeMatrix.h" -#include "FullColumn.h" -#include "FullRow.h" - -namespace MbD { - //class FullColumn; - - template - class FullMatrix : public RowTypeMatrix>> - { - public: - FullMatrix() {} - FullMatrix(int m, int n) { - for (int i = 0; i < m; i++) { - auto row = std::make_shared>(n); - this->push_back(row); - } - } - FullMatrix(std::initializer_list> list) : RowTypeMatrix>{ list } {} - }; - - typedef std::shared_ptr> FullMatDptr; - //typedef std::shared_ptr>>> FullMatFCptr; - //typedef std::shared_ptr>>> FullMatFMptr; -} - diff --git a/MbDCode/FullMotion.cpp b/MbDCode/FullMotion.cpp index f71cb0c..80c7032 100644 --- a/MbDCode/FullMotion.cpp +++ b/MbDCode/FullMotion.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "FullMotion.h" #include "CREATE.h" #include "System.h" @@ -12,6 +20,12 @@ MbD::FullMotion::FullMotion(const char* str) { } +void MbD::FullMotion::connectsItoJ(EndFrmsptr frmi, EndFrmsptr frmj) +{ + Joint::connectsItoJ(frmi, frmj); + std::static_pointer_cast(frmI)->initEndFrameqct2(); +} + void MbD::FullMotion::initializeGlobally() { if (constraints->empty()) { @@ -31,4 +45,7 @@ void MbD::FullMotion::initializeGlobally() void MbD::FullMotion::initMotions() { + auto efrmI = std::static_pointer_cast(frmI); + efrmI->rmemBlks = frIJI; + efrmI->phiThePsiBlks = fangIJJ; } diff --git a/MbDCode/FullMotion.h b/MbDCode/FullMotion.h index 3a2d941..1fe9cf3 100644 --- a/MbDCode/FullMotion.h +++ b/MbDCode/FullMotion.h @@ -1,17 +1,32 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "PrescribedMotion.h" +#include "Symbolic.h" +#include "EulerAngles.h" namespace MbD { + class FullMotion : public PrescribedMotion { //frIJI fangIJJ public: FullMotion(); FullMotion(const char* str); + void connectsItoJ(EndFrmsptr frmI, EndFrmsptr frmJ) override; void initializeGlobally() override; void initMotions() override; + std::shared_ptr> frIJI; + std::shared_ptr> fangIJJ; + }; } diff --git a/MbDCode/FullRow.cpp b/MbDCode/FullRow.cpp index a8c33cd..3458277 100644 --- a/MbDCode/FullRow.cpp +++ b/MbDCode/FullRow.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "FullRow.h" using namespace MbD; diff --git a/MbDCode/FullRow.h b/MbDCode/FullRow.h index f9cdc5b..8ea5619 100644 --- a/MbDCode/FullRow.h +++ b/MbDCode/FullRow.h @@ -1,13 +1,31 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "FullVector.h" //#include "FullColumn.h" namespace MbD { + template + class FullRow; + template + using FRowsptr = std::shared_ptr>; + using FRowDsptr = std::shared_ptr>; template class FullMatrix; template + using FMatsptr = std::shared_ptr>; + template class FullColumn; + template + using FColsptr = std::shared_ptr>; + using ListFRD = std::initializer_list; template class FullRow : public FullVector @@ -19,41 +37,46 @@ namespace MbD { FullRow(int count, const T& value) : FullVector(count, value) {} FullRow(std::vector::iterator begin, std::vector::iterator end) : FullVector(begin, end) {} FullRow(std::initializer_list list) : FullVector{ list } {} - std::shared_ptr> times(double a); - std::shared_ptr> negated(); - std::shared_ptr> plusFullRow(std::shared_ptr> fullRow); - std::shared_ptr> minusFullRow(std::shared_ptr> fullRow); - T timesFullColumn(std::shared_ptr> fullCol); + FRowsptr times(T a); + FRowsptr negated(); + FRowsptr plusFullRow(FRowsptr fullRow); + FRowsptr minusFullRow(FRowsptr fullRow); + T timesFullColumn(FColsptr fullCol); T timesFullColumn(FullColumn* fullCol); - std::shared_ptr> timesFullMatrix(std::shared_ptr> fullMat); - std::shared_ptr> timesTransposeFullMatrix(std::shared_ptr> fullMat); - void equalSelfPlusFullRowTimes(std::shared_ptr> fullRow, double factor); - void equalFullRow(std::shared_ptr> fullRow); - std::shared_ptr> transpose(); - std::shared_ptr> copy(); - void atiplusFullRow(int j, std::shared_ptr> fullRow); - std::shared_ptr> transposeTimesFullRow(std::shared_ptr> fullRow); + FRowsptr timesFullMatrix(FMatsptr fullMat); + FRowsptr timesTransposeFullMatrix(FMatsptr fullMat); + void equalSelfPlusFullRowTimes(FRowsptr fullRow, double factor); + void equalFullRow(FRowsptr fullRow); + FColsptr transpose(); + FRowsptr copy(); + void atiplusFullRow(int j, FRowsptr fullRow); + FMatsptr transposeTimesFullRow(FRowsptr fullRow); std::ostream& printOn(std::ostream& s) const override; }; - template - inline std::shared_ptr> FullRow::times(double a) + template<> + inline FRowDsptr FullRow::times(double a) { - int n = (int) this->size(); - auto answer = std::make_shared>(n); + int n = (int)this->size(); + auto answer = std::make_shared>(n); for (int i = 0; i < n; i++) { answer->at(i) = this->at(i) * a; } return answer; } template - inline std::shared_ptr> FullRow::negated() + inline FRowsptr FullRow::times(T a) + { + assert(false); + } + template + inline FRowsptr FullRow::negated() { return this->times(-1.0); } template - inline std::shared_ptr> FullRow::plusFullRow(std::shared_ptr> fullRow) + inline FRowsptr FullRow::plusFullRow(FRowsptr fullRow) { int n = (int) this->size(); auto answer = std::make_shared>(n); @@ -63,7 +86,7 @@ namespace MbD { return answer; } template - inline std::shared_ptr> FullRow::minusFullRow(std::shared_ptr> fullRow) + inline FRowsptr FullRow::minusFullRow(FRowsptr fullRow) { int n = (int) this->size(); auto answer = std::make_shared>(n); @@ -73,7 +96,7 @@ namespace MbD { return answer; } template - inline T FullRow::timesFullColumn(std::shared_ptr> fullCol) + inline T FullRow::timesFullColumn(FColsptr fullCol) { return this->timesFullColumn(fullCol.get()); } @@ -88,7 +111,7 @@ namespace MbD { return answer; } template - inline std::shared_ptr> FullRow::timesTransposeFullMatrix(std::shared_ptr> fullMat) + inline FRowsptr FullRow::timesTransposeFullMatrix(FMatsptr fullMat) { //"a*bT = a(1,j)b(k,j)" int ncol = fullMat->nrow(); @@ -99,22 +122,22 @@ namespace MbD { return answer; } template - inline void FullRow::equalSelfPlusFullRowTimes(std::shared_ptr> fullRow, double factor) + inline void FullRow::equalSelfPlusFullRowTimes(FRowsptr fullRow, double factor) { this->equalSelfPlusFullVectortimes(fullRow, factor); } template - inline void FullRow::equalFullRow(std::shared_ptr> fullRow) + inline void FullRow::equalFullRow(FRowsptr fullRow) { this->equalArrayAt(fullRow, 0); } template - inline std::shared_ptr> FullRow::transpose() + inline FColsptr FullRow::transpose() { return std::make_shared>(*this); } template<> - inline std::shared_ptr> FullRow::copy() + inline FRowDsptr FullRow::copy() { auto n = (int)this->size(); auto answer = std::make_shared>(n); @@ -125,7 +148,7 @@ namespace MbD { return answer; } template - inline void FullRow::atiplusFullRow(int j1, std::shared_ptr> fullRow) + inline void FullRow::atiplusFullRow(int j1, FRowsptr fullRow) { for (int jj = 0; jj < fullRow->size(); jj++) { @@ -134,7 +157,7 @@ namespace MbD { } } template - inline std::shared_ptr> FullRow::transposeTimesFullRow(std::shared_ptr> fullRow) + inline FMatsptr FullRow::transposeTimesFullRow(FRowsptr fullRow) { //"a*b = a(i)b(j)" auto nrow = (int)this->size(); @@ -158,17 +181,15 @@ namespace MbD { return s; } template - inline std::shared_ptr> FullRow::timesFullMatrix(std::shared_ptr> fullMat) + inline FRowsptr FullRow::timesFullMatrix(FMatsptr fullMat) { - std::shared_ptr> answer = fullMat->at(0)->times(this->at(0)); + FRowsptr answer = fullMat->at(0)->times(this->at(0)); for (int j = 1; j < (int) this->size(); j++) { answer->equalSelfPlusFullRowTimes(fullMat->at(j), this->at(j)); } return answer; - //return std::shared_ptr>(); + //return FRowsptr(); } - using ListFRD = std::initializer_list>>; - using FRowDsptr = std::shared_ptr>; } diff --git a/MbDCode/FullVector.cpp b/MbDCode/FullVector.cpp index b4ca721..efdaa07 100644 --- a/MbDCode/FullVector.cpp +++ b/MbDCode/FullVector.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "FullVector.h" using namespace MbD; diff --git a/MbDCode/FullVector.h b/MbDCode/FullVector.h index 9b4e7c3..c4193d0 100644 --- a/MbDCode/FullVector.h +++ b/MbDCode/FullVector.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include @@ -16,19 +24,20 @@ namespace MbD { FullVector(std::vector::iterator begin, std::vector::iterator end) : Array(begin, end) {} FullVector(std::initializer_list list) : Array{ list } {} double dot(std::shared_ptr> vec); - void atiput(int i, T value); void atiplusNumber(int i, T value); void atiminusNumber(int i, T value); double sumOfSquares() override; int numberOfElements() override; void zeroSelf() override; - void atitimes(int i, double factor); void atiplusFullVector(int i, std::shared_ptr> fullVec); void atiplusFullVectortimes(int i, std::shared_ptr> fullVec, T factor); - double maxMagnitude(); - double length(); void equalSelfPlusFullVectortimes(std::shared_ptr> fullVec, T factor); - void magnifySelf(T factor); + double maxMagnitude() override; + void normalizeSelf(); + double length(); + virtual void conditionSelf(); + virtual void conditionSelfWithTol(double tol); + std::ostream& printOn(std::ostream& s) const override; }; @@ -43,11 +52,6 @@ namespace MbD { return answer; } template - inline void FullVector::atiput(int i, T value) - { - this->at(i) = value; - } - template inline void FullVector::atiplusNumber(int i, T value) { this->at(i) += value; @@ -92,11 +96,6 @@ namespace MbD { assert(false); } template - inline void FullVector::atitimes(int i, double factor) - { - this->at(i) *= factor; - } - template inline void FullVector::atiplusFullVector(int i1, std::shared_ptr> fullVec) { for (int ii = 0; ii < fullVec->size(); ii++) @@ -114,19 +113,41 @@ namespace MbD { this->at(i) += fullVec->at(ii) * factor; } } + template + inline void FullVector::equalSelfPlusFullVectortimes(std::shared_ptr> fullVec, T factor) + { + for (int i = 0; i < this->size(); i++) + { + this->atiplusNumber(i, fullVec->at(i) * factor); + } + } template<> inline double FullVector::maxMagnitude() { - auto answer = 0.0; + auto max = 0.0; for (int i = 0; i < this->size(); i++) { - auto mag = std::abs(this->at(i)); - if (answer < mag) answer = mag; + auto element = this->at(i); + if (element < 0.0) element = -element; + if (max < element) max = element; } - return answer; + return max; + } + template + inline double FullVector::maxMagnitude() + { + assert(false); + return 0.0; } template<> - inline double FullVector::length() + inline void FullVector::normalizeSelf() + { + auto length = this->length(); + if (length == 0.0) throw std::runtime_error("Cannot normalize a null vector."); + this->magnifySelf(1.0 / length); + } + template + inline double FullVector::length() { auto ssq = 0.0; for (int i = 0; i < this->size(); i++) @@ -137,20 +158,27 @@ namespace MbD { return std::sqrt(ssq); } template - inline void FullVector::equalSelfPlusFullVectortimes(std::shared_ptr> fullVec, T factor) + inline void FullVector::conditionSelf() + { + constexpr auto epsilon = std::numeric_limits::epsilon(); + auto tol = this->maxMagnitude() * epsilon; + this->conditionSelfWithTol(tol); + } + template<> + inline void FullVector::conditionSelfWithTol(double tol) { for (int i = 0; i < this->size(); i++) { - this->atiplusNumber(i, fullVec->at(i) * factor); + auto element = this->at(i); + if (element < 0.0) element = -element; + if (element < tol) this->atiput(i, 0.0); } } template - inline void FullVector::magnifySelf(T factor) + inline void FullVector::conditionSelfWithTol(double tol) { - for (int i = 0; i < this->size(); i++) - { - this->atitimes(i, factor); - } + assert(false); + return; } template inline std::ostream& FullVector::printOn(std::ostream& s) const diff --git a/MbDCode/Function.cpp b/MbDCode/Function.cpp index 19ab110..f08ed6b 100644 --- a/MbDCode/Function.cpp +++ b/MbDCode/Function.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "Function.h" using namespace MbD; diff --git a/MbDCode/Function.h b/MbDCode/Function.h index d7f9ff5..f008050 100644 --- a/MbDCode/Function.h +++ b/MbDCode/Function.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "Symbolic.h" @@ -5,6 +13,10 @@ namespace MbD { class Function : public Symbolic { + // + public: + virtual void arguments(Symsptr args) = 0; + }; } diff --git a/MbDCode/FunctionFromData.cpp b/MbDCode/FunctionFromData.cpp new file mode 100644 index 0000000..17930b9 --- /dev/null +++ b/MbDCode/FunctionFromData.cpp @@ -0,0 +1,15 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#include "FunctionFromData.h" + +using namespace MbD; + +MbD::FunctionFromData::FunctionFromData(Symsptr arg) : FunctionXcParameter(arg) +{ +} diff --git a/MbDCode/FunctionFromData.h b/MbDCode/FunctionFromData.h new file mode 100644 index 0000000..e65ff36 --- /dev/null +++ b/MbDCode/FunctionFromData.h @@ -0,0 +1,25 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#pragma once + +#include "FunctionXcParameter.h" + +namespace MbD { + class FunctionFromData : public FunctionXcParameter + { + //xvalue xs ys + public: + FunctionFromData() = default; + FunctionFromData(Symsptr arg); + + double xvalue; + std::shared_ptr> xs, ys; + }; +} + diff --git a/MbDCode/FunctionWithManyArgs.cpp b/MbDCode/FunctionWithManyArgs.cpp index 1044375..e2e2cdc 100644 --- a/MbDCode/FunctionWithManyArgs.cpp +++ b/MbDCode/FunctionWithManyArgs.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "FunctionWithManyArgs.h" #include "Symbolic.h" @@ -34,3 +42,13 @@ std::shared_ptr> FunctionWithManyArgs::getTerms() return terms; } +void MbD::FunctionWithManyArgs::createMbD(std::shared_ptr mbdSys, std::shared_ptr mbdUnits) +{ + for (auto& term : *terms) term->createMbD(mbdSys, mbdUnits); +} + +void MbD::FunctionWithManyArgs::arguments(Symsptr args) +{ + assert(false); +} + diff --git a/MbDCode/FunctionWithManyArgs.h b/MbDCode/FunctionWithManyArgs.h index cf214c7..3275c8a 100644 --- a/MbDCode/FunctionWithManyArgs.h +++ b/MbDCode/FunctionWithManyArgs.h @@ -1,7 +1,17 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "Function.h" #include "Symbolic.h" +#include "System.h" +#include "Units.h" namespace MbD { @@ -15,6 +25,8 @@ namespace MbD { FunctionWithManyArgs(Symsptr term, Symsptr term1, Symsptr term2); FunctionWithManyArgs(std::shared_ptr> _terms); std::shared_ptr> getTerms() override; + void createMbD(std::shared_ptr mbdSys, std::shared_ptr mbdUnits) override; + void arguments(Symsptr args) override; std::shared_ptr> terms; }; diff --git a/MbDCode/FunctionX.cpp b/MbDCode/FunctionX.cpp index 4ce0b79..4ddfce8 100644 --- a/MbDCode/FunctionX.cpp +++ b/MbDCode/FunctionX.cpp @@ -1,3 +1,44 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "FunctionX.h" +#include "Constant.h" +#include "Sum.h" using namespace MbD; + +MbD::FunctionX::FunctionX(Symsptr arg) : xx(arg) +{ +} + +void MbD::FunctionX::arguments(Symsptr args) +{ + //args is a Sum with "terms" containing the actual arguments + auto sum = std::static_pointer_cast(args); + assert(sum->terms->size() == 1); + xx = sum->terms->front(); +} + +Symsptr MbD::FunctionX::differentiateWRT(Symsptr var) +{ + if (this == var.get()) return std::make_shared(1.0); + auto dfdx = differentiateWRTx(); + auto dxdvar = xx->differentiateWRT(var); + return Symbolic::times(dfdx, dxdvar); +} + +Symsptr MbD::FunctionX::differentiateWRTx() +{ + assert(false); + return Symsptr(); +} + +void MbD::FunctionX::createMbD(std::shared_ptr mbdSys, std::shared_ptr mbdUnits) +{ + xx->createMbD(mbdSys, mbdUnits); +} diff --git a/MbDCode/FunctionX.h b/MbDCode/FunctionX.h index 239d397..8d8bb51 100644 --- a/MbDCode/FunctionX.h +++ b/MbDCode/FunctionX.h @@ -1,10 +1,34 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "Function.h" namespace MbD { + class Symbolic; + //using Symsptr = Symsptr; + class FunctionX : public Function { + // + public: + FunctionX() = default; + FunctionX(Symsptr arg); + void arguments(Symsptr args) override; + Symsptr differentiateWRT(Symsptr var) override; + virtual Symsptr differentiateWRTx(); + void createMbD(std::shared_ptr mbdSys, std::shared_ptr mbdUnits) override; + + Symsptr xx; + + + }; } diff --git a/MbDCode/FunctionXY.cpp b/MbDCode/FunctionXY.cpp new file mode 100644 index 0000000..af06c9b --- /dev/null +++ b/MbDCode/FunctionXY.cpp @@ -0,0 +1,29 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#include "FunctionXY.h" +#include "Sum.h" + +using namespace MbD; + +MbD::FunctionXY::FunctionXY() +{ +} + +MbD::FunctionXY::FunctionXY(Symsptr base, Symsptr exp) : x(base), y(exp) +{ +} + +void MbD::FunctionXY::arguments(Symsptr args) +{ + //args is a Sum with "terms" containing the actual arguments + auto sum = std::static_pointer_cast(args); + assert(sum->terms->size() == 2); + x = sum->terms->at(0); + y = sum->terms->at(1); +} diff --git a/MbDCode/FunctionXY.h b/MbDCode/FunctionXY.h new file mode 100644 index 0000000..24aa3e8 --- /dev/null +++ b/MbDCode/FunctionXY.h @@ -0,0 +1,31 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#pragma once + +#include "Function.h" + +namespace MbD { + class Symbolic; + //using Symsptr = Symsptr; + + class FunctionXY : public Function + { + //x y + public: + FunctionXY(); + FunctionXY(Symsptr base, Symsptr exp); + void arguments(Symsptr args) override; + virtual Symsptr differentiateWRTx() = 0; + virtual Symsptr differentiateWRTy() = 0; + + Symsptr x, y; + + }; +} + diff --git a/MbDCode/FunctionXcParameter.cpp b/MbDCode/FunctionXcParameter.cpp new file mode 100644 index 0000000..b515a64 --- /dev/null +++ b/MbDCode/FunctionXcParameter.cpp @@ -0,0 +1,15 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#include "FunctionXcParameter.h" + +using namespace MbD; + +MbD::FunctionXcParameter::FunctionXcParameter(Symsptr arg) : FunctionX(arg) +{ +} diff --git a/MbDCode/FunctionXcParameter.h b/MbDCode/FunctionXcParameter.h new file mode 100644 index 0000000..466b26f --- /dev/null +++ b/MbDCode/FunctionXcParameter.h @@ -0,0 +1,23 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#pragma once + +#include "FunctionX.h" + +namespace MbD { + class FunctionXcParameter : public FunctionX + { + // + public: + FunctionXcParameter() = default; + FunctionXcParameter(Symsptr arg); + + }; +} + diff --git a/MbDCode/GEFullMat.cpp b/MbDCode/GEFullMat.cpp index bf25f05..4d59d03 100644 --- a/MbDCode/GEFullMat.cpp +++ b/MbDCode/GEFullMat.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include #include "GEFullMat.h" diff --git a/MbDCode/GEFullMat.h b/MbDCode/GEFullMat.h index fd48734..806c947 100644 --- a/MbDCode/GEFullMat.h +++ b/MbDCode/GEFullMat.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "MatrixGaussElimination.h" @@ -16,7 +24,7 @@ namespace MbD { void preSolvewithsaveOriginal(SpMatDsptr spMat, FColDsptr fullCol, bool saveOriginal) override; double getmatrixArowimaxMagnitude(int i) override; - std::shared_ptr> matrixA; + FMatDsptr matrixA; }; } diff --git a/MbDCode/GEFullMatFullPv.cpp b/MbDCode/GEFullMatFullPv.cpp index 06fa6b0..d8a0085 100644 --- a/MbDCode/GEFullMatFullPv.cpp +++ b/MbDCode/GEFullMatFullPv.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include #include "GEFullMatFullPv.h" diff --git a/MbDCode/GEFullMatFullPv.h b/MbDCode/GEFullMatFullPv.h index bdbb145..e0d1594 100644 --- a/MbDCode/GEFullMatFullPv.h +++ b/MbDCode/GEFullMatFullPv.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "GEFullMat.h" diff --git a/MbDCode/GEFullMatParPv.cpp b/MbDCode/GEFullMatParPv.cpp index 8d15e2e..5d57cf3 100644 --- a/MbDCode/GEFullMatParPv.cpp +++ b/MbDCode/GEFullMatParPv.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include #include "GEFullMatParPv.h" diff --git a/MbDCode/GEFullMatParPv.h b/MbDCode/GEFullMatParPv.h index 4f00357..d849369 100644 --- a/MbDCode/GEFullMatParPv.h +++ b/MbDCode/GEFullMatParPv.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "GEFullMat.h" diff --git a/MbDCode/GESpMat.cpp b/MbDCode/GESpMat.cpp index 0e94e35..b4b1121 100644 --- a/MbDCode/GESpMat.cpp +++ b/MbDCode/GESpMat.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "GESpMat.h" #include "FullColumn.h" #include "SparseMatrix.h" diff --git a/MbDCode/GESpMat.h b/MbDCode/GESpMat.h index 4389c1d..fb24492 100644 --- a/MbDCode/GESpMat.h +++ b/MbDCode/GESpMat.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "MatrixGaussElimination.h" @@ -15,7 +23,7 @@ namespace MbD { void preSolvewithsaveOriginal(SpMatDsptr spMat, FColDsptr fullCol, bool saveOriginal) override; double getmatrixArowimaxMagnitude(int i) override; - std::shared_ptr> matrixA; + SpMatDsptr matrixA; int markowitzPivotRowCount, markowitzPivotColCount; std::shared_ptr> rowPositionsOfNonZerosInPivotColumn; }; diff --git a/MbDCode/GESpMatFullPv.cpp b/MbDCode/GESpMatFullPv.cpp index 3ba10b2..dc81fda 100644 --- a/MbDCode/GESpMatFullPv.cpp +++ b/MbDCode/GESpMatFullPv.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include #include "GESpMatFullPv.h" diff --git a/MbDCode/GESpMatFullPv.h b/MbDCode/GESpMatFullPv.h index e0cee8f..a0e351f 100644 --- a/MbDCode/GESpMatFullPv.h +++ b/MbDCode/GESpMatFullPv.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "GESpMat.h" diff --git a/MbDCode/GESpMatFullPvPosIC.cpp b/MbDCode/GESpMatFullPvPosIC.cpp index e7ddad0..7bd0496 100644 --- a/MbDCode/GESpMatFullPvPosIC.cpp +++ b/MbDCode/GESpMatFullPvPosIC.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include #include diff --git a/MbDCode/GESpMatFullPvPosIC.h b/MbDCode/GESpMatFullPvPosIC.h index 6b3a7ed..de6fc6e 100644 --- a/MbDCode/GESpMatFullPvPosIC.h +++ b/MbDCode/GESpMatFullPvPosIC.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "GESpMatFullPv.h" diff --git a/MbDCode/GESpMatParPv.cpp b/MbDCode/GESpMatParPv.cpp index 3445c51..363c87f 100644 --- a/MbDCode/GESpMatParPv.cpp +++ b/MbDCode/GESpMatParPv.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include #include "GESpMatParPv.h" diff --git a/MbDCode/GESpMatParPv.h b/MbDCode/GESpMatParPv.h index 06ed01a..cfb8f8c 100644 --- a/MbDCode/GESpMatParPv.h +++ b/MbDCode/GESpMatParPv.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "GESpMat.h" diff --git a/MbDCode/GESpMatParPvMarko.cpp b/MbDCode/GESpMatParPvMarko.cpp index 5a33c55..295f3bc 100644 --- a/MbDCode/GESpMatParPvMarko.cpp +++ b/MbDCode/GESpMatParPvMarko.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include #include "GESpMatParPvMarko.h" @@ -62,7 +70,7 @@ void GESpMatParPvMarko::doPivoting(int p) matrixA->swapElems(p, rowPivoti); rightHandSideB->swapElems(p, rowPivoti); rowScalings->swapElems(p, rowPivoti); - if (aip != std::numeric_limits::min()) rowPositionsOfNonZerosInPivotColumn->at(markowitzPivotColCount - 1) = rowPivoti; + if (aip != std::numeric_limits::min()) rowPositionsOfNonZerosInPivotColumn->at((size_t)markowitzPivotColCount - 1) = rowPivoti; } if (max < singularPivotTolerance) throwSingularMatrixError(""); } diff --git a/MbDCode/GESpMatParPvMarko.h b/MbDCode/GESpMatParPvMarko.h index 2fadbb6..f85d081 100644 --- a/MbDCode/GESpMatParPvMarko.h +++ b/MbDCode/GESpMatParPvMarko.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "GESpMatParPv.h" diff --git a/MbDCode/GESpMatParPvMarkoFast.cpp b/MbDCode/GESpMatParPvMarkoFast.cpp index efbb05c..913246e 100644 --- a/MbDCode/GESpMatParPvMarkoFast.cpp +++ b/MbDCode/GESpMatParPvMarkoFast.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include #include diff --git a/MbDCode/GESpMatParPvMarkoFast.h b/MbDCode/GESpMatParPvMarkoFast.h index d2d373c..e9a84d5 100644 --- a/MbDCode/GESpMatParPvMarkoFast.h +++ b/MbDCode/GESpMatParPvMarkoFast.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "GESpMatParPvMarko.h" diff --git a/MbDCode/GESpMatParPvPrecise.cpp b/MbDCode/GESpMatParPvPrecise.cpp index 6aea527..ed4ac2a 100644 --- a/MbDCode/GESpMatParPvPrecise.cpp +++ b/MbDCode/GESpMatParPvPrecise.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include #include "GESpMatParPvPrecise.h" diff --git a/MbDCode/GESpMatParPvPrecise.h b/MbDCode/GESpMatParPvPrecise.h index ede3a07..0bdda68 100644 --- a/MbDCode/GESpMatParPvPrecise.h +++ b/MbDCode/GESpMatParPvPrecise.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "GESpMatParPv.h" diff --git a/MbDCode/GearConstraintIJ.cpp b/MbDCode/GearConstraintIJ.cpp index 47438e1..6d52f16 100644 --- a/MbDCode/GearConstraintIJ.cpp +++ b/MbDCode/GearConstraintIJ.cpp @@ -1,8 +1,16 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "GearConstraintIJ.h" using namespace MbD; -MbD::GearConstraintIJ::GearConstraintIJ(EndFrmcptr frmi, EndFrmcptr frmj) : ConstraintIJ(frmi, frmj) +MbD::GearConstraintIJ::GearConstraintIJ(EndFrmsptr frmi, EndFrmsptr frmj) : ConstraintIJ(frmi, frmj) { } diff --git a/MbDCode/GearConstraintIJ.h b/MbDCode/GearConstraintIJ.h index 37e405c..4092d59 100644 --- a/MbDCode/GearConstraintIJ.h +++ b/MbDCode/GearConstraintIJ.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "ConstraintIJ.h" @@ -8,7 +16,7 @@ namespace MbD { { //orbitIeJe orbitJeIe radiusI radiusJ public: - GearConstraintIJ(EndFrmcptr frmi, EndFrmcptr frmj); + GearConstraintIJ(EndFrmsptr frmi, EndFrmsptr frmj); void calcPostDynCorrectorIteration() override; void initialize() override; diff --git a/MbDCode/GearConstraintIqcJc.cpp b/MbDCode/GearConstraintIqcJc.cpp index dbff7d1..dd01774 100644 --- a/MbDCode/GearConstraintIqcJc.cpp +++ b/MbDCode/GearConstraintIqcJc.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "GearConstraintIqcJc.h" #include "EndFrameqc.h" #include "CREATE.h" @@ -5,7 +13,7 @@ using namespace MbD; -MbD::GearConstraintIqcJc::GearConstraintIqcJc(EndFrmcptr frmi, EndFrmcptr frmj) : GearConstraintIJ(frmi, frmj) +MbD::GearConstraintIqcJc::GearConstraintIqcJc(EndFrmsptr frmi, EndFrmsptr frmj) : GearConstraintIJ(frmi, frmj) { } diff --git a/MbDCode/GearConstraintIqcJc.h b/MbDCode/GearConstraintIqcJc.h index bb9746d..5c7d34f 100644 --- a/MbDCode/GearConstraintIqcJc.h +++ b/MbDCode/GearConstraintIqcJc.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "GearConstraintIJ.h" @@ -7,7 +15,7 @@ namespace MbD { { //pGpXI pGpEI ppGpXIpXI ppGpXIpEI ppGpEIpEI iqXI iqEI public: - GearConstraintIqcJc(EndFrmcptr frmi, EndFrmcptr frmj); + GearConstraintIqcJc(EndFrmsptr frmi, EndFrmsptr frmj); void addToJointForceI(FColDsptr col) override; void addToJointTorqueI(FColDsptr col) override; diff --git a/MbDCode/GearConstraintIqcJqc.cpp b/MbDCode/GearConstraintIqcJqc.cpp index 01ea39c..0793ed6 100644 --- a/MbDCode/GearConstraintIqcJqc.cpp +++ b/MbDCode/GearConstraintIqcJqc.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "GearConstraintIqcJqc.h" #include "EndFrameqc.h" #include "OrbitAngleZIeqcJeqc.h" @@ -5,7 +13,7 @@ using namespace MbD; -MbD::GearConstraintIqcJqc::GearConstraintIqcJqc(EndFrmcptr frmi, EndFrmcptr frmj) : GearConstraintIqcJc(frmi, frmj) +MbD::GearConstraintIqcJqc::GearConstraintIqcJqc(EndFrmsptr frmi, EndFrmsptr frmj) : GearConstraintIqcJc(frmi, frmj) { } diff --git a/MbDCode/GearConstraintIqcJqc.h b/MbDCode/GearConstraintIqcJqc.h index 667133a..af0f972 100644 --- a/MbDCode/GearConstraintIqcJqc.h +++ b/MbDCode/GearConstraintIqcJqc.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "GearConstraintIqcJc.h" @@ -7,7 +15,7 @@ namespace MbD { { //pGpXJ pGpEJ ppGpXIpXJ ppGpXIpEJ ppGpEIpXJ ppGpEIpEJ ppGpXJpXJ ppGpXJpEJ ppGpEJpEJ iqXJ iqEJ public: - GearConstraintIqcJqc(EndFrmcptr frmi, EndFrmcptr frmj); + GearConstraintIqcJqc(EndFrmsptr frmi, EndFrmsptr frmj); void calc_pGpEJ(); void calc_pGpXJ(); diff --git a/MbDCode/GearJoint.cpp b/MbDCode/GearJoint.cpp index ab9867f..5fc5896 100644 --- a/MbDCode/GearJoint.cpp +++ b/MbDCode/GearJoint.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "GearJoint.h" #include "CREATE.h" #include "GearConstraintIJ.h" diff --git a/MbDCode/GearJoint.h b/MbDCode/GearJoint.h index ee76a28..5b9cbb7 100644 --- a/MbDCode/GearJoint.h +++ b/MbDCode/GearJoint.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "Joint.h" diff --git a/MbDCode/GeneralSpline.cpp b/MbDCode/GeneralSpline.cpp new file mode 100644 index 0000000..ba7721b --- /dev/null +++ b/MbDCode/GeneralSpline.cpp @@ -0,0 +1,263 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#include + +#include "GeneralSpline.h" +#include "CREATE.h" +#include "GESpMatParPvMarkoFast.h" +#include "DifferentiatedGeneralSpline.h" + +using namespace MbD; + +MbD::GeneralSpline::GeneralSpline(Symsptr arg) : AnyGeneralSpline(arg) +{ +} + +double MbD::GeneralSpline::getValue() +{ + return y(xx->getValue()); +} + +Symsptr MbD::GeneralSpline::differentiateWRTx() +{ + auto self = clonesptr(); + auto arg = std::static_pointer_cast(self)->xx; + auto deriv = std::make_shared(arg, self, 1); + return deriv; +} + +void MbD::GeneralSpline::arguments(Symsptr args) +{ + auto array = args->getTerms(); + auto arg = array->at(0); + int order = (int)array->at(1)->getValue(); + int n = (array->size() - 2) / 2; + auto xarray = std::make_shared>(n); + auto yarray = std::make_shared>(n); + for (int i = 0; i < n; i++) + { + size_t ii = 2 * (i + 1); + xarray->at(i) = array->at(ii)->getValue(); + yarray->at(i) = array->at(ii + 1)->getValue(); + } + initxdegreexsys(arg, order, xarray, yarray); +} + +void MbD::GeneralSpline::initxdegreexsys(Symsptr arg, int order, std::shared_ptr> xarr, std::shared_ptr> yarr) +{ + xx = arg; + degree = order; + xs = xarr; + ys = yarr; + if (!Numeric::isIncreasingVector(xs.get())) throw std::runtime_error("x must be increasing."); + computeDerivatives(); +} + +void MbD::GeneralSpline::computeDerivatives() +{ + //"See derivation in MbDTheory 9spline.fodt." + if (degree == 0) throw std::runtime_error("ToDo: Use ZeroDegreeSpline"); + auto n = xs->size(); + auto p = degree; + auto np = n * p; + auto matrix = std::make_shared>(np, np); + auto bvector = std::make_shared>(np, 0.0); + auto hs = std::make_shared>(n - 1); + auto hmax = 0.0; + for (int i = 0; i < n - 1; i++) + { + auto h = xs->at(i + 1) - xs->at(i); + hmax = std::max(hmax, std::abs(h)); + hs->atiput(i, h); + } + for (int i = 0; i < n - 1; i++) + { + auto offset = i * p; + auto hbar = hs->at(i) / hmax; + for (int j = 1; j < p; j++) + { + matrix->atijput(offset + j, offset + j - 1, 1.0); + matrix->atijput(offset + j, offset + j - 1 + p, -1.0); + } + auto dum = 1.0; + for (int j = 0; j < p; j++) + { + dum = dum * hbar / (j + 1); + for (int k = j; k < p; k++) + { + matrix->atijput(offset + k - j, offset + k, dum); + } + } + bvector->atiput(offset, ys->at(i + 1) - ys->at(i)); + } + if (isCyclic()) { + for (int j = 1; j < p + 1; j++) + { + matrix->atijput(np - j, np - j, 1.0); + matrix->atijput(np - j, p - j, -1.0); + } + } + else { + //"Zero out higher derivatives at node n and node 1 to get the p end equations." + auto count = 0; + auto npass = 0; + while (count < p) { + matrix->atijput(np - count, np - npass, 1.0); + count++; + if (count < p) { + matrix->atijput(np - count, p - npass, 1.0); + count++; + } + } + npass = npass + 1; + } + auto solver = CREATE::With(); + auto derivsVector = solver->solvewithsaveOriginal(matrix, bvector, false); + derivs = std::make_shared>(n, p); + auto hmaxpowers = std::make_shared>(p); + for (int j = 0; j < p; j++) + { + hmaxpowers->atiput(j, std::pow(hmax, j + 1)); + } + for (int i = 0; i < n; i++) + { + auto derivsi = derivs->at(i); + derivsi->equalArrayAt(derivsVector, (i - 1) * p + 1); + for (int j = 0; j < p; j++) + { + derivsi->atiput(j, derivsi->at(j) / hmaxpowers->at(j)); + } + } +} + +bool MbD::GeneralSpline::isCyclic() +{ + return (ys->size() > 3) && (ys->front() == ys->back()); +} + +double MbD::GeneralSpline::derivativeAt(int n, double xxx) +{ + //"dydx(x) := dydxi + d2ydx2i*hi + d3ydx3i*hi^2/2! +" + //"d2ydx2(x) := d2ydx2i + d3ydx3i*hi + d4ydx4i*hi^2/2! +" + if (n > degree) return 0.0; + calcIndexAndDeltaFor(xxx); + auto derivsi = derivs->at(index); + auto sum = 0.0; + for (int j = degree; j >= n + 1; j--) + { + sum = (sum + derivsi->at(j - 1)) * delta / (j - n); + } + return derivsi->at(n - 1) + sum; +} + +void MbD::GeneralSpline::calcIndexAndDeltaFor(double xxx) +{ + xvalue = xxx; + if (isCyclic()) { + calcCyclicIndexAndDelta(); + } + else { + calcNonCyclicIndexAndDelta(); + } +} + +void MbD::GeneralSpline::calcCyclicIndexAndDelta() +{ + auto xFirst = xs->front(); + auto xLast = xs->back(); + xvalue = std::fmod(xvalue - xFirst, xLast - xFirst) + xFirst; + calcIndexAndDelta(); +} + +void MbD::GeneralSpline::calcNonCyclicIndexAndDelta() +{ + auto xFirst = xs->front(); + auto xLast = xs->back(); + if (xvalue <= xFirst) { + index = 0; + delta = xvalue - xFirst; + } + else { + if (xvalue >= xLast) { + index = xs->size() - 1; + delta = xvalue - xLast; + } + else { + calcIndexAndDelta(); + } + } +} + +void MbD::GeneralSpline::calcIndexAndDelta() +{ + if (!(index < xs->size() - 1) || !(xs->at(index) <= xvalue) || !(xvalue < xs->at(index + 1))) { + searchIndexFromto(0, xs->size()); //Using range. + } + delta = xvalue - xs->at(index); +} + +void MbD::GeneralSpline::searchIndexFromto(int first, int last) +{ + //"Assume xs(first) <= xvalue < xs(last)." + if (first + 1 == last) { + index = first; + } + else { + auto middle = std::floor((first + last) / 2); + if (xvalue < xs->at(middle)) { + searchIndexFromto(first, middle); + } + else { + searchIndexFromto(middle, last); + } + } +} + +Symsptr MbD::GeneralSpline::clonesptr() +{ + return std::make_shared(*this); +} + +double MbD::GeneralSpline::y(double xxx) +{ + //"y(x) := yi + dydxi*hi + d2ydx2i*hi^2/2! + d3ydx3i*hi^3/3! +" + + calcIndexAndDeltaFor(xxx); + auto derivsi = derivs->at(index); + auto sum = 0.0; + for (int j = degree; j >= 1; j--) + { + sum = (sum + derivsi->at(j - 1)) * delta / j; + } + return ys->at(index) + sum; +} + +std::ostream& MbD::GeneralSpline::printOn(std::ostream& s) const +{ + s << "Spline("; + s << *xx << ", "; + s << degree << ", " << std::endl; + s << "xs{"; + s << xs->at(0); + for (int i = 1; i < xs->size(); i++) + { + s << ", " << xs->at(i); + } + s << "}" << std::endl;; + s << "ys{"; + s << ys->at(0); + for (int i = 1; i < ys->size(); i++) + { + s << ", " << ys->at(i); + } + s << "}"; + s << ")"; + s << std::endl; + return s; +} diff --git a/MbDCode/GeneralSpline.h b/MbDCode/GeneralSpline.h new file mode 100644 index 0000000..a7319ad --- /dev/null +++ b/MbDCode/GeneralSpline.h @@ -0,0 +1,42 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#pragma once + +#include "AnyGeneralSpline.h" + +namespace MbD { + class GeneralSpline : public AnyGeneralSpline + { + //derivs degree index delta + public: + GeneralSpline() = default; + GeneralSpline(Symsptr arg); + double getValue() override; + Symsptr differentiateWRTx() override; + void arguments(Symsptr args) override; + void initxdegreexsys(Symsptr arg, int order, std::shared_ptr> xarr, std::shared_ptr> yarr); + void computeDerivatives(); + bool isCyclic(); + double derivativeAt(int derivativeOrder, double arg); + void calcIndexAndDeltaFor(double xxx); + void calcCyclicIndexAndDelta(); + void calcNonCyclicIndexAndDelta(); + void calcIndexAndDelta(); + void searchIndexFromto(int start, int end); + Symsptr clonesptr() override; + double y(double xxx); + + std::ostream& printOn(std::ostream& s) const override; + + FMatDsptr derivs; + int degree, index; + double delta; + }; +} + diff --git a/MbDCode/ICKineIntegrator.cpp b/MbDCode/ICKineIntegrator.cpp index 83351fc..c8d2df3 100644 --- a/MbDCode/ICKineIntegrator.cpp +++ b/MbDCode/ICKineIntegrator.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "ICKineIntegrator.h" #include "SystemSolver.h" diff --git a/MbDCode/ICKineIntegrator.h b/MbDCode/ICKineIntegrator.h index ab4a2db..8d6a8b5 100644 --- a/MbDCode/ICKineIntegrator.h +++ b/MbDCode/ICKineIntegrator.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "QuasiIntegrator.h" diff --git a/MbDCode/InLineJoint.cpp b/MbDCode/InLineJoint.cpp index 4bc29db..fc9ea44 100644 --- a/MbDCode/InLineJoint.cpp +++ b/MbDCode/InLineJoint.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "InLineJoint.h" #include "CREATE.h" diff --git a/MbDCode/InLineJoint.h b/MbDCode/InLineJoint.h index adb0f6b..8f6a5c6 100644 --- a/MbDCode/InLineJoint.h +++ b/MbDCode/InLineJoint.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "Joint.h" diff --git a/MbDCode/InPlaneJoint.cpp b/MbDCode/InPlaneJoint.cpp index 171516e..af35567 100644 --- a/MbDCode/InPlaneJoint.cpp +++ b/MbDCode/InPlaneJoint.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "InPlaneJoint.h" #include "CREATE.h" @@ -11,7 +19,7 @@ MbD::InPlaneJoint::InPlaneJoint(const char* str) void MbD::InPlaneJoint::createInPlaneConstraint() { - auto tranCon = CREATE::ConstraintWith(frmI, frmJ, 0); + auto tranCon = CREATE::ConstraintWith(frmI, frmJ, 2); tranCon->setConstant(offset); addConstraint(tranCon); } diff --git a/MbDCode/InPlaneJoint.h b/MbDCode/InPlaneJoint.h index d3d2443..410cf83 100644 --- a/MbDCode/InPlaneJoint.h +++ b/MbDCode/InPlaneJoint.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "Joint.h" diff --git a/MbDCode/IndependentVariable.cpp b/MbDCode/IndependentVariable.cpp index 2b200b9..795b844 100644 --- a/MbDCode/IndependentVariable.cpp +++ b/MbDCode/IndependentVariable.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "IndependentVariable.h" #include "Constant.h" @@ -7,7 +15,7 @@ IndependentVariable::IndependentVariable() { } -Symsptr IndependentVariable::differentiateWRT(Symsptr sptr, Symsptr var) +Symsptr MbD::IndependentVariable::differentiateWRT(Symsptr var) { if (this == var.get()) { return std::make_shared(1.0); diff --git a/MbDCode/IndependentVariable.h b/MbDCode/IndependentVariable.h index 64e6f66..7f5b6e0 100644 --- a/MbDCode/IndependentVariable.h +++ b/MbDCode/IndependentVariable.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "Variable.h" @@ -7,7 +15,7 @@ namespace MbD { { public: IndependentVariable(); - Symsptr differentiateWRT(Symsptr sptr, Symsptr var) override; + Symsptr differentiateWRT(Symsptr var) override; }; } diff --git a/MbDCode/Integrator.cpp b/MbDCode/Integrator.cpp index 7666aad..4994879 100644 --- a/MbDCode/Integrator.cpp +++ b/MbDCode/Integrator.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "Integrator.h" using namespace MbD; diff --git a/MbDCode/Integrator.h b/MbDCode/Integrator.h index 99893c4..8543618 100644 --- a/MbDCode/Integrator.h +++ b/MbDCode/Integrator.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include diff --git a/MbDCode/IntegratorInterface.cpp b/MbDCode/IntegratorInterface.cpp index 5bef921..0907e34 100644 --- a/MbDCode/IntegratorInterface.cpp +++ b/MbDCode/IntegratorInterface.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include #include "IntegratorInterface.h" diff --git a/MbDCode/IntegratorInterface.h b/MbDCode/IntegratorInterface.h index 9f23abd..2436566 100644 --- a/MbDCode/IntegratorInterface.h +++ b/MbDCode/IntegratorInterface.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "Integrator.h" diff --git a/MbDCode/Item.cpp b/MbDCode/Item.cpp index f7e6fab..e20f225 100644 --- a/MbDCode/Item.cpp +++ b/MbDCode/Item.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include #include #include @@ -178,7 +186,7 @@ void Item::fillqsu(FColDsptr col) { } -void Item::fillqsuWeights(std::shared_ptr> diagMat) +void Item::fillqsuWeights(DiagMatDsptr diagMat) { } @@ -298,11 +306,6 @@ void Item::storeDynState() { } -void MbD::Item::submitToSystem() -{ - assert(false); -} - double MbD::Item::suggestSmallerOrAcceptCollisionFirstStepSize(double hnew) { assert(false); @@ -357,7 +360,7 @@ void MbD::Item::fillqsudotPlamDeriv(FColDsptr col) assert(false); } -void Item::fillqsudotWeights(std::shared_ptr> diagMat) +void Item::fillqsudotWeights(DiagMatDsptr diagMat) { } diff --git a/MbDCode/Item.h b/MbDCode/Item.h index bfd0476..8e846b9 100644 --- a/MbDCode/Item.h +++ b/MbDCode/Item.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include @@ -55,9 +63,9 @@ namespace MbD { virtual void fillqsudot(FColDsptr col); virtual void fillqsudotPlam(FColDsptr col); virtual void fillqsudotPlamDeriv(FColDsptr col); - virtual void fillqsudotWeights(std::shared_ptr> diagMat); + virtual void fillqsudotWeights(DiagMatDsptr diagMat); virtual void fillqsulam(FColDsptr col); - virtual void fillqsuWeights(std::shared_ptr> diagMat); + virtual void fillqsuWeights(DiagMatDsptr diagMat); virtual void fillqsuWeightsSmall(FColDsptr col); virtual void fillRedundantConstraints(std::shared_ptr>> redunConstraints); virtual void fillStaticError(FColDsptr col); @@ -133,7 +141,6 @@ namespace MbD { virtual std::shared_ptr stateData(); virtual void storeCollisionState(); virtual void storeDynState(); - virtual void submitToSystem(); virtual double suggestSmallerOrAcceptCollisionFirstStepSize(double hnew); virtual double suggestSmallerOrAcceptCollisionStepSize(double hnew); virtual double suggestSmallerOrAcceptDynFirstStepSize(double hnew); diff --git a/MbDCode/Item.h.bak b/MbDCode/Item.h.bak deleted file mode 100644 index ef363d9..0000000 --- a/MbDCode/Item.h.bak +++ /dev/null @@ -1,16 +0,0 @@ -#pragma once -#include - -namespace MbD { - class Item - { - public: - Item() {} - Item(std::string str) : name(str) {} - void setName(std::string& str); - const std::string& getName() const; - private: - std::string name; - }; -} - diff --git a/MbDCode/Joint.cpp b/MbDCode/Joint.cpp index 1e8064e..2a25d39 100644 --- a/MbDCode/Joint.cpp +++ b/MbDCode/Joint.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include #include #include @@ -10,6 +18,7 @@ #include "RedundantConstraint.h" #include "MarkerFrame.h" #include "ForceTorqueData.h" +#include "System.h" using namespace MbD; @@ -26,7 +35,7 @@ void Joint::initialize() constraints = std::make_shared>>(); } -void Joint::connectsItoJ(EndFrmcptr frmi, EndFrmcptr frmj) +void Joint::connectsItoJ(EndFrmsptr frmi, EndFrmsptr frmj) { frmI = frmi; frmJ = frmj; @@ -125,7 +134,7 @@ void Joint::fillqsudot(FColDsptr col) constraintsDo([&](std::shared_ptr con) { con->fillqsudot(col); }); } -void Joint::fillqsudotWeights(std::shared_ptr> diagMat) +void Joint::fillqsudotWeights(DiagMatDsptr diagMat) { } diff --git a/MbDCode/Joint.cpp.bak b/MbDCode/Joint.cpp.bak deleted file mode 100644 index c438f46..0000000 --- a/MbDCode/Joint.cpp.bak +++ /dev/null @@ -1,22 +0,0 @@ -#include "Joint.h" - -using namespace MbD; - -Joint::Joint() -{ - -} - -void Joint::connectsItoJ(std::shared_ptr frmi, std::shared_ptr frmj) -{ - frmI = frmi; - frmJ = frmj; -} - -void Joint::initializeLocally() -{ -} - -void Joint::initializeGlobally() -{ -} diff --git a/MbDCode/Joint.h b/MbDCode/Joint.h index 6af27bf..e6281f7 100644 --- a/MbDCode/Joint.h +++ b/MbDCode/Joint.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include @@ -5,10 +13,11 @@ #include #include "Item.h" -#include "EndFramec.h" namespace MbD { class Constraint; + class EndFramec; + using EndFrmsptr = std::shared_ptr; class Joint : public Item { @@ -24,7 +33,7 @@ namespace MbD { FColDsptr aTIeJtIe(); FColDsptr aTIeJtO(); FColDsptr aTX(); - virtual void connectsItoJ(EndFrmcptr frmI, EndFrmcptr frmJ); + virtual void connectsItoJ(EndFrmsptr frmI, EndFrmsptr frmJ); void constraintsDo(const std::function )>& f); void constraintsReport() override; void fillAccICIterError(FColDsptr col) override; @@ -40,7 +49,7 @@ namespace MbD { void fillqsuddotlam(FColDsptr col) override; void fillqsulam(FColDsptr col) override; void fillqsudot(FColDsptr col) override; - void fillqsudotWeights(std::shared_ptr> diagMat) override; + void fillqsudotWeights(DiagMatDsptr diagMat) override; void fillRedundantConstraints(std::shared_ptr>> redunConstraints) override; void fillVelICError(FColDsptr col) override; void fillVelICJacob(SpMatDsptr mat) override; @@ -66,8 +75,8 @@ namespace MbD { std::shared_ptr stateData() override; void useEquationNumbers() override; - EndFrmcptr frmI; - EndFrmcptr frmJ; + EndFrmsptr frmI; + EndFrmsptr frmJ; std::shared_ptr>> constraints; }; diff --git a/MbDCode/Joint.h.bak b/MbDCode/Joint.h.bak deleted file mode 100644 index 82d84ab..0000000 --- a/MbDCode/Joint.h.bak +++ /dev/null @@ -1,28 +0,0 @@ -#pragma once -#include -#include - -#include "Item.h" -#include "EndFramec.h" -#include "Constraint.h" - -namespace MbD { - class EndFramec; - class Constraint; - - class Joint : public Item - { - //frmI frmJ constraints friction - public: - Joint(); - virtual void connectsItoJ(std::shared_ptr frmI, std::shared_ptr frmJ); - void initializeLocally(); - void initializeGlobally(); - - std::shared_ptr frmI; - std::shared_ptr frmJ; - std::unique_ptr>> constraints; - - }; -} - diff --git a/MbDCode/KineIntegrator.cpp b/MbDCode/KineIntegrator.cpp index 46ce769..df403eb 100644 --- a/MbDCode/KineIntegrator.cpp +++ b/MbDCode/KineIntegrator.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include #include "KineIntegrator.h" diff --git a/MbDCode/KineIntegrator.h b/MbDCode/KineIntegrator.h index a2f3f50..f16d920 100644 --- a/MbDCode/KineIntegrator.h +++ b/MbDCode/KineIntegrator.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "QuasiIntegrator.h" diff --git a/MbDCode/KinematicIeJe.cpp b/MbDCode/KinematicIeJe.cpp index e4fb071..b278ec3 100644 --- a/MbDCode/KinematicIeJe.cpp +++ b/MbDCode/KinematicIeJe.cpp @@ -1,4 +1,13 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "KinematicIeJe.h" +#include "EndFramec.h" using namespace MbD; @@ -6,7 +15,7 @@ KinematicIeJe::KinematicIeJe() { } -KinematicIeJe::KinematicIeJe(EndFrmcptr frmi, EndFrmcptr frmj) : frmI(frmi), frmJ(frmj) +KinematicIeJe::KinematicIeJe(EndFrmsptr frmi, EndFrmsptr frmj) : frmI(frmi), frmJ(frmj) { } diff --git a/MbDCode/KinematicIeJe.h b/MbDCode/KinematicIeJe.h index 7fcab0e..ddaba65 100644 --- a/MbDCode/KinematicIeJe.h +++ b/MbDCode/KinematicIeJe.h @@ -1,80 +1,90 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "Item.h" -#include "EndFramec.h" namespace MbD { - class KinematicIeJe : public Item - { - //frmI frmJ - public: - KinematicIeJe(); - KinematicIeJe(EndFrmcptr frmi, EndFrmcptr frmj); + class EndFramec; + using EndFrmsptr = std::shared_ptr; - bool isKineIJ() override; - virtual void calc_value(); - virtual void calc_pvaluepXI(); - virtual void calc_pvaluepEI(); - virtual void calc_ppvaluepXIpXI(); - virtual void calc_ppvaluepXIpEI(); - virtual void calc_ppvaluepEIpEI(); - virtual void calc_pvaluepXJ(); - virtual void calc_pvaluepEJ(); - virtual void calc_ppvaluepXIpXJ(); - virtual void calc_ppvaluepXIpEJ(); - virtual void calc_ppvaluepEIpXJ(); - virtual void calc_ppvaluepEIpEJ(); - virtual void calc_ppvaluepXJpXJ(); - virtual void calc_ppvaluepXJpEJ(); - virtual void calc_ppvaluepEJpEJ(); - virtual void calc_pvaluepXK(); - virtual void calc_pvaluepEK(); - virtual void calc_ppvaluepXIpEK(); - virtual void calc_ppvaluepEIpEK(); - virtual void calc_ppvaluepXJpEK(); - virtual void calc_ppvaluepEJpEK(); - virtual void calc_ppvaluepEKpEK(); - virtual void calc_pvaluept(); - virtual void calc_ppvaluepXIpt(); - virtual void calc_ppvaluepEIpt(); - virtual void calc_ppvaluepXJpt(); - virtual void calc_ppvaluepEJpt(); - virtual void calc_ppvaluepXKpt(); - virtual void calc_ppvaluepEKpt(); - virtual void calc_ppvalueptpt(); + class KinematicIeJe : public Item + { + //frmI frmJ + public: + KinematicIeJe(); + KinematicIeJe(EndFrmsptr frmi, EndFrmsptr frmj); - virtual FRowDsptr pvaluepXI(); - virtual FRowDsptr pvaluepEI(); - virtual FMatDsptr ppvaluepXIpXI(); - virtual FMatDsptr ppvaluepXIpEI(); - virtual FMatDsptr ppvaluepEIpEI(); - virtual FRowDsptr pvaluepXJ(); - virtual FRowDsptr pvaluepEJ(); - virtual FMatDsptr ppvaluepXIpXJ(); - virtual FMatDsptr ppvaluepXIpEJ(); - virtual FMatDsptr ppvaluepEIpXJ(); - virtual FMatDsptr ppvaluepEIpEJ(); - virtual FMatDsptr ppvaluepXJpXJ(); - virtual FMatDsptr ppvaluepXJpEJ(); - virtual FMatDsptr ppvaluepEJpEJ(); - virtual FRowDsptr pvaluepXK(); - virtual FRowDsptr pvaluepEK(); - virtual FMatDsptr ppvaluepXIpEK(); - virtual FMatDsptr ppvaluepEIpEK(); - virtual FMatDsptr ppvaluepXJpEK(); - virtual FMatDsptr ppvaluepEJpEK(); - virtual FMatDsptr ppvaluepEKpEK(); - virtual double pvaluept(); - virtual double ppvalueptpt(); - virtual FRowDsptr ppvaluepXIpt(); - virtual FRowDsptr ppvaluepEIpt(); - virtual FRowDsptr ppvaluepXJpt(); - virtual FRowDsptr ppvaluepEJpt(); - virtual FRowDsptr ppvaluepXKpt(); - virtual FRowDsptr ppvaluepEKpt(); - virtual double value(); + bool isKineIJ() override; + virtual void calc_value(); + virtual void calc_pvaluepXI(); + virtual void calc_pvaluepEI(); + virtual void calc_ppvaluepXIpXI(); + virtual void calc_ppvaluepXIpEI(); + virtual void calc_ppvaluepEIpEI(); + virtual void calc_pvaluepXJ(); + virtual void calc_pvaluepEJ(); + virtual void calc_ppvaluepXIpXJ(); + virtual void calc_ppvaluepXIpEJ(); + virtual void calc_ppvaluepEIpXJ(); + virtual void calc_ppvaluepEIpEJ(); + virtual void calc_ppvaluepXJpXJ(); + virtual void calc_ppvaluepXJpEJ(); + virtual void calc_ppvaluepEJpEJ(); + virtual void calc_pvaluepXK(); + virtual void calc_pvaluepEK(); + virtual void calc_ppvaluepXIpEK(); + virtual void calc_ppvaluepEIpEK(); + virtual void calc_ppvaluepXJpEK(); + virtual void calc_ppvaluepEJpEK(); + virtual void calc_ppvaluepEKpEK(); + virtual void calc_pvaluept(); + virtual void calc_ppvaluepXIpt(); + virtual void calc_ppvaluepEIpt(); + virtual void calc_ppvaluepXJpt(); + virtual void calc_ppvaluepEJpt(); + virtual void calc_ppvaluepXKpt(); + virtual void calc_ppvaluepEKpt(); + virtual void calc_ppvalueptpt(); - EndFrmcptr frmI, frmJ; - }; + virtual FRowDsptr pvaluepXI(); + virtual FRowDsptr pvaluepEI(); + virtual FMatDsptr ppvaluepXIpXI(); + virtual FMatDsptr ppvaluepXIpEI(); + virtual FMatDsptr ppvaluepEIpEI(); + virtual FRowDsptr pvaluepXJ(); + virtual FRowDsptr pvaluepEJ(); + virtual FMatDsptr ppvaluepXIpXJ(); + virtual FMatDsptr ppvaluepXIpEJ(); + virtual FMatDsptr ppvaluepEIpXJ(); + virtual FMatDsptr ppvaluepEIpEJ(); + virtual FMatDsptr ppvaluepXJpXJ(); + virtual FMatDsptr ppvaluepXJpEJ(); + virtual FMatDsptr ppvaluepEJpEJ(); + virtual FRowDsptr pvaluepXK(); + virtual FRowDsptr pvaluepEK(); + virtual FMatDsptr ppvaluepXIpEK(); + virtual FMatDsptr ppvaluepEIpEK(); + virtual FMatDsptr ppvaluepXJpEK(); + virtual FMatDsptr ppvaluepEJpEK(); + virtual FMatDsptr ppvaluepEKpEK(); + virtual double pvaluept(); + virtual double ppvalueptpt(); + virtual FRowDsptr ppvaluepXIpt(); + virtual FRowDsptr ppvaluepEIpt(); + virtual FRowDsptr ppvaluepXJpt(); + virtual FRowDsptr ppvaluepEJpt(); + virtual FRowDsptr ppvaluepXKpt(); + virtual FRowDsptr ppvaluepEKpt(); + virtual double value(); + + EndFrmsptr frmI, frmJ; + }; } diff --git a/MbDCode/LDUFullMat.cpp b/MbDCode/LDUFullMat.cpp index 4d9feba..532deeb 100644 --- a/MbDCode/LDUFullMat.cpp +++ b/MbDCode/LDUFullMat.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "LDUFullMat.h" using namespace MbD; diff --git a/MbDCode/LDUFullMat.h b/MbDCode/LDUFullMat.h index 51749b6..e5d7298 100644 --- a/MbDCode/LDUFullMat.h +++ b/MbDCode/LDUFullMat.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "MatrixLDU.h" @@ -22,7 +30,7 @@ namespace MbD { void forwardSubstituteIntoL() override; void backSubstituteIntoDU() override; - std::shared_ptr> matrixA; + FMatDsptr matrixA; }; } diff --git a/MbDCode/LDUFullMatParPv.cpp b/MbDCode/LDUFullMatParPv.cpp index cd3c089..c3d7f27 100644 --- a/MbDCode/LDUFullMatParPv.cpp +++ b/MbDCode/LDUFullMatParPv.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "LDUFullMatParPv.h" #include "FullMatrix.h" #include "SingularMatrixError.h" diff --git a/MbDCode/LDUFullMatParPv.h b/MbDCode/LDUFullMatParPv.h index 7718dca..9e11b8b 100644 --- a/MbDCode/LDUFullMatParPv.h +++ b/MbDCode/LDUFullMatParPv.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "LDUFullMat.h" diff --git a/MbDCode/LDUSpMat.cpp b/MbDCode/LDUSpMat.cpp index 6965922..eb3cbc2 100644 --- a/MbDCode/LDUSpMat.cpp +++ b/MbDCode/LDUSpMat.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "LDUSpMat.h" #include "FullColumn.h" diff --git a/MbDCode/LDUSpMat.h b/MbDCode/LDUSpMat.h index 5fe0205..fe4240c 100644 --- a/MbDCode/LDUSpMat.h +++ b/MbDCode/LDUSpMat.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "MatrixLDU.h" @@ -16,8 +24,8 @@ namespace MbD { void forwardSubstituteIntoL() override; void backSubstituteIntoDU() override; - std::shared_ptr> matrixA, matrixL, matrixU; - std::shared_ptr> matrixD; + SpMatDsptr matrixA, matrixL, matrixU; + DiagMatDsptr matrixD; int markowitzPivotRowCount, markowitzPivotColCount; std::shared_ptr> rowPositionsOfNonZerosInPivotColumn; }; diff --git a/MbDCode/LDUSpMatParPv.cpp b/MbDCode/LDUSpMatParPv.cpp index 2dfbb7f..3c901c1 100644 --- a/MbDCode/LDUSpMatParPv.cpp +++ b/MbDCode/LDUSpMatParPv.cpp @@ -1 +1,9 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "LDUSpMatParPv.h" diff --git a/MbDCode/LDUSpMatParPv.h b/MbDCode/LDUSpMatParPv.h index 21c87a5..c5afbff 100644 --- a/MbDCode/LDUSpMatParPv.h +++ b/MbDCode/LDUSpMatParPv.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "LDUSpMat.h" diff --git a/MbDCode/LDUSpMatParPvMarko.cpp b/MbDCode/LDUSpMatParPvMarko.cpp index fb2734a..43bf432 100644 --- a/MbDCode/LDUSpMatParPvMarko.cpp +++ b/MbDCode/LDUSpMatParPvMarko.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "LDUSpMatParPvMarko.h" #include "SingularMatrixError.h" diff --git a/MbDCode/LDUSpMatParPvMarko.h b/MbDCode/LDUSpMatParPvMarko.h index f8573a1..2505f3a 100644 --- a/MbDCode/LDUSpMatParPvMarko.h +++ b/MbDCode/LDUSpMatParPvMarko.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "LDUSpMatParPv.h" diff --git a/MbDCode/LDUSpMatParPvPrecise.cpp b/MbDCode/LDUSpMatParPvPrecise.cpp index 8c1fa7f..4b1231b 100644 --- a/MbDCode/LDUSpMatParPvPrecise.cpp +++ b/MbDCode/LDUSpMatParPvPrecise.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "LDUSpMatParPvPrecise.h" #include "SingularMatrixError.h" @@ -58,7 +66,7 @@ void LDUSpMatParPvPrecise::doPivoting(int p) rowScalings->swapElems(p, rowPivoti); rowOrder->swapElems(p, rowPivoti); matrixL->swapElems(p, rowPivoti); - if (aip != std::numeric_limits::min()) rowPositionsOfNonZerosInPivotColumn->at(markowitzPivotColCount - 1) = rowPivoti; + if (aip != std::numeric_limits::min()) rowPositionsOfNonZerosInPivotColumn->at((size_t)markowitzPivotColCount - 1) = rowPivoti; } pivotValues->at(p) = max; if (max < singularPivotTolerance) throwSingularMatrixError(""); diff --git a/MbDCode/LDUSpMatParPvPrecise.h b/MbDCode/LDUSpMatParPvPrecise.h index 839a37d..51811d6 100644 --- a/MbDCode/LDUSpMatParPvPrecise.h +++ b/MbDCode/LDUSpMatParPvPrecise.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "LDUSpMatParPv.h" diff --git a/MbDCode/LineInPlaneJoint.cpp b/MbDCode/LineInPlaneJoint.cpp index 1bb052a..8a8bdda 100644 --- a/MbDCode/LineInPlaneJoint.cpp +++ b/MbDCode/LineInPlaneJoint.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "LineInPlaneJoint.h" #include "CREATE.h" #include "System.h" diff --git a/MbDCode/LineInPlaneJoint.h b/MbDCode/LineInPlaneJoint.h index 6c8a5b9..cb03d20 100644 --- a/MbDCode/LineInPlaneJoint.h +++ b/MbDCode/LineInPlaneJoint.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "InPlaneJoint.h" diff --git a/MbDCode/LinearMultiStepMethod.cpp b/MbDCode/LinearMultiStepMethod.cpp index cb543f4..b0caf51 100644 --- a/MbDCode/LinearMultiStepMethod.cpp +++ b/MbDCode/LinearMultiStepMethod.cpp @@ -1 +1,9 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "LinearMultiStepMethod.h" diff --git a/MbDCode/LinearMultiStepMethod.h b/MbDCode/LinearMultiStepMethod.h index 8b07f12..35dc6df 100644 --- a/MbDCode/LinearMultiStepMethod.h +++ b/MbDCode/LinearMultiStepMethod.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "DifferenceOperator.h" diff --git a/MbDCode/Ln.cpp b/MbDCode/Ln.cpp new file mode 100644 index 0000000..089ffcf --- /dev/null +++ b/MbDCode/Ln.cpp @@ -0,0 +1,20 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#include "Ln.h" + +using namespace MbD; + +MbD::Ln::Ln(Symsptr arg) : FunctionX(arg) +{ +} + +double MbD::Ln::getValue() +{ + return std::log(xx->getValue()); +} diff --git a/MbDCode/Ln.h b/MbDCode/Ln.h new file mode 100644 index 0000000..25a89ca --- /dev/null +++ b/MbDCode/Ln.h @@ -0,0 +1,26 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#pragma once + +#include "FunctionX.h" + +namespace MbD { + class Ln : public FunctionX + { + // + public: + Ln() = default; + Ln(Symsptr arg); + double getValue() override; + + + + }; +} + diff --git a/MbDCode/Log10.cpp b/MbDCode/Log10.cpp new file mode 100644 index 0000000..767aab8 --- /dev/null +++ b/MbDCode/Log10.cpp @@ -0,0 +1,26 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#include "Log10.h" + +using namespace MbD; + +MbD::Log10::Log10(Symsptr arg) : FunctionX(arg) +{ +} + +double MbD::Log10::getValue() +{ + return std::log(xx->getValue()); +} + +std::ostream& MbD::Log10::printOn(std::ostream& s) const +{ + s << "lg(" << xx << ")"; + return s; +} diff --git a/MbDCode/Log10.h b/MbDCode/Log10.h new file mode 100644 index 0000000..3230564 --- /dev/null +++ b/MbDCode/Log10.h @@ -0,0 +1,27 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#pragma once + +#include "FunctionX.h" + +namespace MbD { + class Log10 : public FunctionX + { + // + public: + Log10() = default; + Log10(Symsptr arg); + double getValue() override; + + std::ostream& printOn(std::ostream& s) const override; + + + }; +} + diff --git a/MbDCode/LogN.cpp b/MbDCode/LogN.cpp new file mode 100644 index 0000000..c2700ed --- /dev/null +++ b/MbDCode/LogN.cpp @@ -0,0 +1,26 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#include "LogN.h" + +using namespace MbD; + +MbD::LogN::LogN(Symsptr arg) : FunctionX(arg) +{ +} + +double MbD::LogN::getValue() +{ + return std::log(xx->getValue()); +} + +std::ostream& MbD::LogN::printOn(std::ostream& s) const +{ + s << "ln(" << xx << ")"; + return s; +} diff --git a/MbDCode/LogN.h b/MbDCode/LogN.h new file mode 100644 index 0000000..97e545e --- /dev/null +++ b/MbDCode/LogN.h @@ -0,0 +1,27 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#pragma once + +#include "FunctionX.h" + +namespace MbD { + class LogN : public FunctionX + { + // + public: + LogN() = default; + LogN(Symsptr arg); + double getValue() override; + + std::ostream& printOn(std::ostream& s) const override; + + + }; +} + diff --git a/MbDCode/MarkerFrame.cpp b/MbDCode/MarkerFrame.cpp index 8a0e127..08eb95e 100644 --- a/MbDCode/MarkerFrame.cpp +++ b/MbDCode/MarkerFrame.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include #include "PartFrame.h" @@ -24,8 +32,8 @@ System* MarkerFrame::root() void MarkerFrame::initialize() { prOmOpE = std::make_shared>(3, 4); - pAOmpE = std::make_shared>>>(4); - endFrames = std::make_shared>(); + pAOmpE = std::make_shared>(4); + endFrames = std::make_shared>(); auto endFrm = CREATE::With(); this->addEndFrame(endFrm); } @@ -43,18 +51,18 @@ void MarkerFrame::initializeLocally() } } } - endFramesDo([](std::shared_ptr endFrame) { endFrame->initializeLocally(); }); + endFramesDo([](EndFrmsptr endFrame) { endFrame->initializeLocally(); }); } void MarkerFrame::initializeGlobally() { - endFramesDo([](std::shared_ptr endFrame) { endFrame->initializeGlobally(); }); + endFramesDo([](EndFrmsptr endFrame) { endFrame->initializeGlobally(); }); } void MarkerFrame::postInput() { Item::postInput(); - endFramesDo([](std::shared_ptr endFrame) { endFrame->postInput(); }); + endFramesDo([](EndFrmsptr endFrame) { endFrame->postInput(); }); } void MarkerFrame::calcPostDynCorrectorIteration() @@ -75,7 +83,7 @@ void MarkerFrame::calcPostDynCorrectorIteration() void MarkerFrame::prePosIC() { Item::prePosIC(); - endFramesDo([](std::shared_ptr endFrame) { endFrame->prePosIC(); }); + endFramesDo([](EndFrmsptr endFrame) { endFrame->prePosIC(); }); } int MarkerFrame::iqX() @@ -88,97 +96,97 @@ int MarkerFrame::iqE() return partFrame->iqE; } -void MarkerFrame::endFramesDo(const std::function)>& f) +void MarkerFrame::endFramesDo(const std::function& f) { std::for_each(endFrames->begin(), endFrames->end(), f); } void MarkerFrame::fillqsu(FColDsptr col) { - endFramesDo([&](const std::shared_ptr& endFrame) { endFrame->fillqsu(col); }); + endFramesDo([&](const EndFrmsptr& endFrame) { endFrame->fillqsu(col); }); } -void MarkerFrame::fillqsuWeights(std::shared_ptr> diagMat) +void MarkerFrame::fillqsuWeights(DiagMatDsptr diagMat) { - endFramesDo([&](const std::shared_ptr& endFrame) { endFrame->fillqsuWeights(diagMat); }); + endFramesDo([&](const EndFrmsptr& endFrame) { endFrame->fillqsuWeights(diagMat); }); } void MbD::MarkerFrame::fillqsuddotlam(FColDsptr col) { - endFramesDo([&](const std::shared_ptr& endFrame) { endFrame->fillqsuddotlam(col); }); + endFramesDo([&](const EndFrmsptr& endFrame) { endFrame->fillqsuddotlam(col); }); } void MarkerFrame::fillqsulam(FColDsptr col) { - endFramesDo([&](const std::shared_ptr& endFrame) { endFrame->fillqsulam(col); }); + endFramesDo([&](const EndFrmsptr& endFrame) { endFrame->fillqsulam(col); }); } void MarkerFrame::fillqsudot(FColDsptr col) { - endFramesDo([&](const std::shared_ptr& endFrame) { endFrame->fillqsudot(col); }); + endFramesDo([&](const EndFrmsptr& endFrame) { endFrame->fillqsudot(col); }); } -void MarkerFrame::fillqsudotWeights(std::shared_ptr> diagMat) +void MarkerFrame::fillqsudotWeights(DiagMatDsptr diagMat) { - endFramesDo([&](const std::shared_ptr& endFrame) { endFrame->fillqsudotWeights(diagMat); }); + endFramesDo([&](const EndFrmsptr& endFrame) { endFrame->fillqsudotWeights(diagMat); }); } void MarkerFrame::setqsu(FColDsptr col) { - endFramesDo([&](const std::shared_ptr& endFrame) { endFrame->setqsu(col); }); + endFramesDo([&](const EndFrmsptr& endFrame) { endFrame->setqsu(col); }); } void MarkerFrame::setqsulam(FColDsptr col) { - endFramesDo([&](const std::shared_ptr& endFrame) { endFrame->setqsulam(col); }); + endFramesDo([&](const EndFrmsptr& endFrame) { endFrame->setqsulam(col); }); } void MarkerFrame::setqsudot(FColDsptr col) { - endFramesDo([&](const std::shared_ptr& endFrame) { endFrame->setqsudot(col); }); + endFramesDo([&](const EndFrmsptr& endFrame) { endFrame->setqsudot(col); }); } void MarkerFrame::setqsudotlam(FColDsptr col) { - endFramesDo([&](const std::shared_ptr& endFrame) { endFrame->setqsudotlam(col); }); + endFramesDo([&](const EndFrmsptr& endFrame) { endFrame->setqsudotlam(col); }); } void MarkerFrame::postPosICIteration() { Item::postPosICIteration(); - endFramesDo([](std::shared_ptr endFrame) { endFrame->postPosICIteration(); }); + endFramesDo([](EndFrmsptr endFrame) { endFrame->postPosICIteration(); }); } void MarkerFrame::postPosIC() { - endFramesDo([](std::shared_ptr endFrame) { endFrame->postPosIC(); }); + endFramesDo([](EndFrmsptr endFrame) { endFrame->postPosIC(); }); } void MarkerFrame::preDyn() { - endFramesDo([](std::shared_ptr endFrame) { endFrame->preDyn(); }); + endFramesDo([](EndFrmsptr endFrame) { endFrame->preDyn(); }); } void MarkerFrame::storeDynState() { - endFramesDo([](std::shared_ptr endFrame) { endFrame->storeDynState(); }); + endFramesDo([](EndFrmsptr endFrame) { endFrame->storeDynState(); }); } void MarkerFrame::preVelIC() { Item::preVelIC(); - endFramesDo([](std::shared_ptr endFrame) { endFrame->preVelIC(); }); + endFramesDo([](EndFrmsptr endFrame) { endFrame->preVelIC(); }); } void MarkerFrame::postVelIC() { - endFramesDo([](std::shared_ptr endFrame) { endFrame->postVelIC(); }); + endFramesDo([](EndFrmsptr endFrame) { endFrame->postVelIC(); }); } void MarkerFrame::preAccIC() { Item::preAccIC(); - endFramesDo([](std::shared_ptr endFrame) { endFrame->preAccIC(); }); + endFramesDo([](EndFrmsptr endFrame) { endFrame->preAccIC(); }); } FColDsptr MarkerFrame::qXdot() @@ -203,7 +211,7 @@ FColDsptr MarkerFrame::qEddot() void MarkerFrame::setqsuddotlam(FColDsptr col) { - endFramesDo([&](const std::shared_ptr& endFrame) { endFrame->setqsuddotlam(col); }); + endFramesDo([&](const EndFrmsptr& endFrame) { endFrame->setqsuddotlam(col); }); } FColFMatDsptr MarkerFrame::pAOppE() @@ -218,7 +226,7 @@ FMatDsptr MarkerFrame::aBOp() void MarkerFrame::postDynStep() { - endFramesDo([](std::shared_ptr endFrame) { endFrame->postDynStep(); }); + endFramesDo([](EndFrmsptr endFrame) { endFrame->postDynStep(); }); } void MarkerFrame::setPartFrame(PartFrame* partFrm) @@ -239,7 +247,7 @@ void MarkerFrame::setaApm(FMatDsptr x) { aApm->copyFrom(x); } -void MarkerFrame::addEndFrame(EndFrmcptr endFrm) +void MarkerFrame::addEndFrame(EndFrmsptr endFrm) { endFrm->setMarkerFrame(this); endFrames->push_back(endFrm); diff --git a/MbDCode/MarkerFrame.cpp.bak b/MbDCode/MarkerFrame.cpp.bak deleted file mode 100644 index 13d3ccc..0000000 --- a/MbDCode/MarkerFrame.cpp.bak +++ /dev/null @@ -1,37 +0,0 @@ -#include "PartFrame.h" -#include "MarkerFrame.h" -#include "EndFramec.h" -#include "EndFrameqc.h" - -using namespace MbD; - -MarkerFrame::MarkerFrame() -{ - auto endFrm = std::make_shared(); - std::string str = "EndFrame1"; - endFrm->setName(str); - this->addEndFrame(endFrm); -} - -void MarkerFrame::setPartFrame(std::shared_ptr partFrm) -{ - partFrame = partFrm; -} - -std::shared_ptr MarkerFrame::getPartFrame() { - return partFrame.lock(); -} - -void MarkerFrame::setrpmp(FullColDptr x) -{ - rpmp->copy(x); -} - -void MarkerFrame::setaApm(FullMatDptr x) -{ - aApm->copy(x); -} -void MarkerFrame::addEndFrame(std::shared_ptr endFrm) -{ - endFrames->push_back(endFrm); -} diff --git a/MbDCode/MarkerFrame.h b/MbDCode/MarkerFrame.h index a2c61da..8b441fc 100644 --- a/MbDCode/MarkerFrame.h +++ b/MbDCode/MarkerFrame.h @@ -1,20 +1,27 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include #include #include "CartesianFrame.h" -//#include "PartFrame.h" #include "FullColumn.h" #include "FullMatrix.h" -#include "EndFramec.h" #include "EulerParametersDot.h" #include "EulerParametersDDot.h" namespace MbD { + class CartesianFrame; class PartFrame; - //class EndFramec; - //using EndFrmcptr = std::shared_ptr; + class EndFramec; + using EndFrmsptr = std::shared_ptr; class MarkerFrame : public CartesianFrame { @@ -28,7 +35,7 @@ namespace MbD { PartFrame* getPartFrame(); void setrpmp(FColDsptr x); void setaApm(FMatDsptr x); - void addEndFrame(EndFrmcptr x); + void addEndFrame(EndFrmsptr x); void initializeLocally() override; void initializeGlobally() override; void postInput() override; @@ -36,13 +43,13 @@ namespace MbD { void prePosIC() override; int iqX(); int iqE(); - void endFramesDo(const std::function )>& f); + void endFramesDo(const std::function & f); void fillqsu(FColDsptr col) override; - void fillqsuWeights(std::shared_ptr> diagMat) override; + void fillqsuWeights(DiagMatDsptr diagMat) override; void fillqsuddotlam(FColDsptr col) override; void fillqsulam(FColDsptr col) override; void fillqsudot(FColDsptr col) override; - void fillqsudotWeights(std::shared_ptr> diagMat) override; + void fillqsudotWeights(DiagMatDsptr diagMat) override; void setqsu(FColDsptr col) override; void setqsulam(FColDsptr col) override; void setqsudot(FColDsptr col) override; @@ -69,10 +76,10 @@ namespace MbD { FColDsptr rOmO = std::make_shared>(3); FMatDsptr aAOm = std::make_shared>(3, 3); FMatDsptr prOmOpE; - std::shared_ptr>>> pAOmpE; - std::shared_ptr>>> pprOmOpEpE; + FColFMatDsptr pAOmpE; + FMatFColDsptr pprOmOpEpE; FMatFMatDsptr ppAOmpEpE; - std::shared_ptr> endFrames; + std::shared_ptr> endFrames; }; } diff --git a/MbDCode/MarkerFrame.h.bak b/MbDCode/MarkerFrame.h.bak deleted file mode 100644 index 5b4f013..0000000 --- a/MbDCode/MarkerFrame.h.bak +++ /dev/null @@ -1,36 +0,0 @@ -#pragma once -#include - -#include "CartesianFrame.h" -#include "PartFrame.h" -#include "FullColumn.h" -#include "FullMatrix.h" -#include "EndFramec.h" - -namespace MbD { - class PartFrame; - class EndFramec; - - class MarkerFrame : public CartesianFrame - { - //partFrame rpmp aApm rOmO aAOm prOmOpE pAOmpE pprOmOpEpE ppAOmpEpE endFrames - public: - MarkerFrame(); - void setPartFrame(std::shared_ptr partFrm); - std::shared_ptr getPartFrame(); - void setrpmp(FullColDptr x); - void setaApm(FullMatDptr x); - void addEndFrame(std::shared_ptr x); - - std::weak_ptr partFrame; - FullColDptr rpmp = std::make_shared>(3); - FullMatDptr aApm = std::make_shared>(3, 3); - FullColDptr rOmO = std::make_shared>(3); - FullMatDptr aAOm = std::make_shared>(3, 3); - FullMatDptr prOmOpE = std::make_shared>(3, 4); - FullColumn>* pAOmpE = new FullColumn>(4); - std::unique_ptr>> endFrames; - - }; -} - diff --git a/MbDCode/Math.cpp b/MbDCode/Math.cpp index b00989a..057125b 100644 --- a/MbDCode/Math.cpp +++ b/MbDCode/Math.cpp @@ -1 +1,9 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "Math.h" diff --git a/MbDCode/Math.h b/MbDCode/Math.h index 9d1d918..0092758 100644 --- a/MbDCode/Math.h +++ b/MbDCode/Math.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once namespace MbD { diff --git a/MbDCode/MatrixDecomposition.cpp b/MbDCode/MatrixDecomposition.cpp index d1ddbb8..982564b 100644 --- a/MbDCode/MatrixDecomposition.cpp +++ b/MbDCode/MatrixDecomposition.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "MatrixDecomposition.h" using namespace MbD; diff --git a/MbDCode/MatrixDecomposition.h b/MbDCode/MatrixDecomposition.h index eab1649..3efe637 100644 --- a/MbDCode/MatrixDecomposition.h +++ b/MbDCode/MatrixDecomposition.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "MatrixSolver.h" diff --git a/MbDCode/MatrixGaussElimination.cpp b/MbDCode/MatrixGaussElimination.cpp index 5543d9e..9f812ab 100644 --- a/MbDCode/MatrixGaussElimination.cpp +++ b/MbDCode/MatrixGaussElimination.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "MatrixGaussElimination.h" using namespace MbD; diff --git a/MbDCode/MatrixGaussElimination.h b/MbDCode/MatrixGaussElimination.h index f84e33d..1e15d37 100644 --- a/MbDCode/MatrixGaussElimination.h +++ b/MbDCode/MatrixGaussElimination.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "MatrixSolver.h" diff --git a/MbDCode/MatrixLDU.cpp b/MbDCode/MatrixLDU.cpp index 4722327..e676651 100644 --- a/MbDCode/MatrixLDU.cpp +++ b/MbDCode/MatrixLDU.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "MatrixLDU.h" using namespace MbD; diff --git a/MbDCode/MatrixLDU.h b/MbDCode/MatrixLDU.h index 8008814..3b74b5e 100644 --- a/MbDCode/MatrixLDU.h +++ b/MbDCode/MatrixLDU.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "MatrixDecomposition.h" diff --git a/MbDCode/MatrixSolver.cpp b/MbDCode/MatrixSolver.cpp index 075866e..f82a2a9 100644 --- a/MbDCode/MatrixSolver.cpp +++ b/MbDCode/MatrixSolver.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include #include #include diff --git a/MbDCode/MatrixSolver.h b/MbDCode/MatrixSolver.h index 2a5aad5..4f46e88 100644 --- a/MbDCode/MatrixSolver.h +++ b/MbDCode/MatrixSolver.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "Solver.h" diff --git a/MbDCode/MaximumIterationError.cpp b/MbDCode/MaximumIterationError.cpp index f01e63f..29bb815 100644 --- a/MbDCode/MaximumIterationError.cpp +++ b/MbDCode/MaximumIterationError.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "MaximumIterationError.h" using namespace MbD; diff --git a/MbDCode/MaximumIterationError.h b/MbDCode/MaximumIterationError.h index b58aa81..c7e1a06 100644 --- a/MbDCode/MaximumIterationError.h +++ b/MbDCode/MaximumIterationError.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "NewtonRaphsonError.h" diff --git a/MbDCode/MbDCode.cpp b/MbDCode/MbDCode.cpp index c85995d..52212fe 100644 --- a/MbDCode/MbDCode.cpp +++ b/MbDCode/MbDCode.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + /********************************************************************* * @file MbDCode.cpp * @@ -14,16 +22,22 @@ #include "ASMTAssembly.h" using namespace MbD; -//using namespace CAD; void runSpMat(); int main() { - //ASMTAssembly::runFile("C:\\Users\\askoh\\OneDrive\\askoh\\visualworks\\vw8.1\\askoh\\64bit\\CADSM\\current\\asm\\00piston.asmt"); + ASMTAssembly::runFile("piston.asmt"); + ASMTAssembly::runFile("00backhoe.asmt"); + ASMTAssembly::runFile("circular.asmt"); + ASMTAssembly::runFile("cirpendu.asmt"); //Under constrained. Testing ICKine. + ASMTAssembly::runFile("engine1.asmt"); + ASMTAssembly::runFile("fourbar.asmt"); + ASMTAssembly::runFile("fourbot.asmt"); + ASMTAssembly::runFile("wobpump.asmt"); - auto externalSys = std::make_shared(); - externalSys->runOndselPiston(); - externalSys->runPiston(); + auto cadSystem = std::make_shared(); + cadSystem->runOndselPiston(); + cadSystem->runPiston(); runSpMat(); } diff --git a/MbDCode/MbDCode.cpp.bak b/MbDCode/MbDCode.cpp.bak deleted file mode 100644 index 5031e6f..0000000 --- a/MbDCode/MbDCode.cpp.bak +++ /dev/null @@ -1,240 +0,0 @@ -/********************************************************************* - * @file MbDCode.cpp - * - * @brief Program to assemble a piston crank system. - *********************************************************************/ - -#include -#include "System.h" -#include "FullColumn.h" -#include "FullMatrix.h" -#include "Part.h" -#include "Joint.h" -#include "CylindricalJoint.h" -#include "RevoluteJoint.h" -#include "ZRotation.h" -#include "EndFrameqc.h" -#include "MbDCode.h" - -using namespace MbD; - -int main() -{ - std::cout << "Hello World!\n"; - //System& TheSystem = System::getInstance(); - System& TheSystem = System::getInstance("TheSystem"); - std::cout << "TheSystem.getName() " << TheSystem.getName() << std::endl; - std::string str; - FullColDptr qX, qE; - FullColDptr rpmp; - FullMatDptr aApm; - FullRowDptr fullRow; - auto row = std::make_shared>(ListD{ 0.0, 0.0, 0.0, 1.0 }); - fullRow = std::make_shared>(4); - fullRow->copy(row); - // - auto assembly1 = std::make_shared(); - str = "Assembly1"; - assembly1->setName(str); - std::cout << "assembly1->getName() " << assembly1->getName() << std::endl; - qX = std::make_shared>(ListD{ 0, 0, 0 }); - qE = std::make_shared>(ListD{ 0, 0, 0, 1 }); - assembly1->setqX(qX); - assembly1->setqE(qE); - std::cout << "assembly1->getqX() " << assembly1->getqX()->toString() << std::endl; - std::cout << "assembly1->getqE() " << assembly1->getqE()->toString() << std::endl; - TheSystem.addPart(assembly1); - { - auto partFrame = assembly1->partFrame; - auto marker1 = std::make_shared(); - str = "Marker1"; - marker1->setName(str); - rpmp = std::make_shared>(ListD{ 0.38423366582893, 6.8384291794733e-9, -0.048029210642807 }); - marker1->setrpmp(rpmp); - aApm = std::make_shared>(ListListD{ - { 1, 0, 0 }, - { 0, 0, 1 }, - { 0, -1, 0 } - }); - marker1->setaApm(aApm); - auto endFrame1 = std::make_shared(); - endFrame1->setMarkerFrame(marker1); - marker1->addEndFrame(endFrame1); - marker1->setPartFrame(partFrame); - partFrame->addMarkerFrame(marker1); - // - auto marker2 = std::make_shared(); - str = "Marker2"; - marker2->setName(str); - rpmp = std::make_shared>(ListD{ 0.0, 0.0, 0.0 }); - marker2->setrpmp(rpmp); - aApm = std::make_shared>(ListListD{ - { 1, 0, 0 }, - { 0, 1, 0 }, - { 0, 0, 1 } - }); - marker2->setaApm(aApm); - auto endFrame2 = std::make_shared(); - endFrame2->setMarkerFrame(marker2); - marker2->addEndFrame(endFrame2); - marker2->setPartFrame(partFrame); - partFrame->addMarkerFrame(marker2); - } - // - auto part1 = std::make_shared(); - str = "Part1"; - part1->setName(str); - qX = std::make_shared>(ListD{ 0.38423366582893, 6.8384291794733e-9, -0.048029210642807 }); - qE = std::make_shared>(ListD{ 0.0, 0.0, 1.4248456266393e-10, 1.0 }); - part1->setqX(qX); - part1->setqE(qE); - TheSystem.parts->push_back(part1); - { - auto partFrame = part1->partFrame; - auto marker1 = std::make_shared(); - str = "Marker1"; - marker1->setName(str); - rpmp = std::make_shared>(ListD{ -0.38423368514246, -2.6661567755108e-17, 0.048029210642807 }); - marker1->setrpmp(rpmp); - aApm = std::make_shared>(ListListD{ - { 1, 0, 0 }, - { 0, 1, 0 }, - { 0, 0, 1 } - }); - marker1->setaApm(aApm); - auto endFrame1 = std::make_shared(); - endFrame1->setMarkerFrame(marker1); - marker1->addEndFrame(endFrame1); - marker1->setPartFrame(partFrame); - partFrame->addMarkerFrame(marker1); - // - auto marker2 = std::make_shared(); - str = "Marker2"; - marker2->setName(str); - rpmp = std::make_shared>(ListD{ 0.38423368514246, -2.6661567755108e-17, 0.048029210642807 }); - marker2->setrpmp(rpmp); - aApm = std::make_shared>(ListListD{ - { 1, 0, 0 }, - { 0, 1, 0 }, - { 0, 0, 1 } - }); - marker2->setaApm(aApm); - auto endFrame2 = std::make_shared(); - endFrame2->setMarkerFrame(marker2); - marker2->addEndFrame(endFrame2); - marker2->setPartFrame(partFrame); - partFrame->addMarkerFrame(marker2); - } - // - auto part2 = std::make_shared(); - str = "Part2"; - part2->setName(str); - qX = std::make_shared>(ListD{ 0.38423366582893, 0.49215308269277, 0.048029210642807 }); - qE = std::make_shared>(ListD{ 0.0, 0.0, 0.89871701272344, 0.4385290538168 }); - part2->setqX(qX); - part2->setqE(qE); - TheSystem.parts->push_back(part2); - { - auto partFrame = part2->partFrame; - auto marker1 = std::make_shared(); - str = "Marker1"; - marker1->setName(str); - rpmp = std::make_shared>(ListD{ -0.6243797383565, 1.1997705489799e-16, -0.048029210642807 }); - marker1->setrpmp(rpmp); - aApm = std::make_shared>(ListListD{ - {1.0, 2.7755575615629e-16, 0.0}, - {-2.7755575615629e-16, 1.0, 0.0}, - {0.0, 0.0, 1.0} - }); - marker1->setaApm(aApm); - auto endFrame1 = std::make_shared(); - endFrame1->setMarkerFrame(marker1); - marker1->addEndFrame(endFrame1); - marker1->setPartFrame(partFrame); - partFrame->addMarkerFrame(marker1); - // - auto marker2 = std::make_shared(); - str = "Marker2"; - marker2->setName(str); - rpmp = std::make_shared>(ListD{ 0.6243797383565, -2.1329254204087e-16, -0.048029210642807 }); - marker2->setrpmp(rpmp); - aApm = std::make_shared>(ListListD{ - {1.0, 2.4980018054066e-16, 2.2204460492503e-16}, - {-2.4980018054066e-16, 1.0, 4.1633363423443e-17}, - {-2.2204460492503e-16, -4.1633363423443e-17, 1.0} - }); - marker2->setaApm(aApm); - auto endFrame2 = std::make_shared(); - endFrame2->setMarkerFrame(marker2); - marker2->addEndFrame(endFrame2); - marker2->setPartFrame(partFrame); - partFrame->addMarkerFrame(marker2); - } - // - auto part3 = std::make_shared(); - str = "Part3"; - part3->setName(str); - qX = std::make_shared>(ListD{ -1.284772285311e-18, 1.4645982581368, -4.788228906425e-17 }); - qE = std::make_shared>(ListD{ 0.70710678118655, 0.70710678118655, 0.0, 0.0 }); - part3->setqX(qX); - part3->setqE(qE); - TheSystem.parts->push_back(part3); - { - auto partFrame = part3->partFrame; - auto marker1 = std::make_shared(); - str = "Marker1"; - marker1->setName(str); - rpmp = std::make_shared>(ListD{ -0.48029210642807, 7.6201599718927e-18, -2.816737703896e-17 }); - marker1->setrpmp(rpmp); - aApm = std::make_shared>(ListListD{ - {9.2444637330587e-33, 1.0, 2.2204460492503e-16}, - {1.0, -9.2444637330587e-33, -1.0785207688569e-32}, - {-1.0785207688569e-32, 2.2204460492503e-16, -1.0} - }); - marker1->setaApm(aApm); - auto endFrame1 = std::make_shared(); - endFrame1->setMarkerFrame(marker1); - marker1->addEndFrame(endFrame1); - marker1->setPartFrame(partFrame); - partFrame->addMarkerFrame(marker1); - // - auto marker2 = std::make_shared(); - str = "Marker2"; - marker2->setName(str); - rpmp = std::make_shared>(ListD{ 0.48029210642807, 1.7618247880058e-17, 2.5155758471256e-17 }); - marker2->setrpmp(rpmp); - aApm = std::make_shared>(ListListD{ - {6.9388939039072e-18, -6.4146353042213e-50, 1.0}, - {1.0, -6.9388939039072e-18, 6.9388939039072e-18}, - {-6.9388939039072e-18, 1.0, -7.4837411882581e-50} - }); - marker2->setaApm(aApm); - auto endFrame2 = std::make_shared(); - endFrame2->setMarkerFrame(marker2); - marker2->addEndFrame(endFrame2); - marker2->setPartFrame(partFrame); - partFrame->addMarkerFrame(marker2); - } - // - auto cylJoint4 = std::make_shared(); - cylJoint4->connectsItoJ(part3->partFrame->endFrame("Marker2"), assembly1->partFrame->endFrame("Marker1")); - TheSystem.jointsMotions->push_back(cylJoint4); - - auto revJoint3 = std::make_shared(); - revJoint3->connectsItoJ(part2->partFrame->endFrame("Marker2"), part3->partFrame->endFrame("Marker1")); - TheSystem.jointsMotions->push_back(revJoint3); - - auto revJoint2 = std::make_shared(); - revJoint2->connectsItoJ(part1->partFrame->endFrame("Marker2"), part2->partFrame->endFrame("Marker1")); - TheSystem.jointsMotions->push_back(revJoint2); - - auto revJoint1 = std::make_shared(); - revJoint1->connectsItoJ(assembly1->partFrame->endFrame("Marker2"), part1->partFrame->endFrame("Marker1")); - TheSystem.jointsMotions->push_back(revJoint1); - - auto rotMotion1 = std::make_shared(); - rotMotion1->connectsItoJ(assembly1->partFrame->endFrame("Marker2"), part1->partFrame->endFrame("Marker1")); - TheSystem.jointsMotions->push_back(rotMotion1); - // - TheSystem.runKINEMATICS(); -} \ No newline at end of file diff --git a/MbDCode/MbDCode.h b/MbDCode/MbDCode.h index e69de29..231179a 100644 --- a/MbDCode/MbDCode.h +++ b/MbDCode/MbDCode.h @@ -0,0 +1,8 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + diff --git a/MbDCode/MbDCode.vcxproj b/MbDCode/MbDCode.vcxproj index a2ea094..aaace72 100644 --- a/MbDCode/MbDCode.vcxproj +++ b/MbDCode/MbDCode.vcxproj @@ -127,6 +127,7 @@ + @@ -136,7 +137,10 @@ + + + @@ -144,22 +148,32 @@ + + + + + + + + + + @@ -172,16 +186,33 @@ + + - + + + + + + + + + + + + + + + + @@ -303,6 +334,7 @@ + @@ -310,6 +342,7 @@ + @@ -320,6 +353,7 @@ + @@ -333,6 +367,8 @@ + + @@ -345,6 +381,7 @@ + @@ -358,6 +395,7 @@ + @@ -367,7 +405,10 @@ + + + @@ -375,22 +416,32 @@ + + + + + + + + + + @@ -403,16 +454,33 @@ + + - + + + + + + + + + + + + + + + + @@ -535,6 +603,7 @@ + @@ -542,6 +611,7 @@ + @@ -553,6 +623,7 @@ + @@ -566,6 +637,8 @@ + + @@ -578,7 +651,7 @@ - + @@ -595,7 +668,17 @@ + + + + + + + + + + diff --git a/MbDCode/MbDCode.vcxproj.filters b/MbDCode/MbDCode.vcxproj.filters index cb64dd4..5af450d 100644 --- a/MbDCode/MbDCode.vcxproj.filters +++ b/MbDCode/MbDCode.vcxproj.filters @@ -429,7 +429,7 @@ Source Files - + Source Files @@ -702,6 +702,117 @@ Source Files + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + @@ -848,9 +959,6 @@ Header Files - - Header Files - Header Files @@ -1127,7 +1235,7 @@ Header Files - + Header Files @@ -1400,6 +1508,117 @@ Header Files + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + @@ -1408,5 +1627,15 @@ + + + + + + + + + + \ No newline at end of file diff --git a/MbDCode/Negative.cpp b/MbDCode/Negative.cpp new file mode 100644 index 0000000..b6d5c11 --- /dev/null +++ b/MbDCode/Negative.cpp @@ -0,0 +1,32 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#include "Negative.h" +#include "Constant.h" + +using namespace MbD; + +MbD::Negative::Negative(Symsptr arg) : FunctionX(arg) +{ +} + +double MbD::Negative::getValue() +{ + return -xx->getValue(); +} + +Symsptr MbD::Negative::differentiateWRTx() +{ + return std::make_shared(-1); +} + +std::ostream& MbD::Negative::printOn(std::ostream& s) const +{ + s << "-(" << xx << ")"; + return s; +} diff --git a/MbDCode/Negative.h b/MbDCode/Negative.h new file mode 100644 index 0000000..dd31296 --- /dev/null +++ b/MbDCode/Negative.h @@ -0,0 +1,27 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#pragma once + +#include "FunctionX.h" + +namespace MbD { + class Negative : public FunctionX + { + // + public: + Negative() = default; + Negative(Symsptr arg); + double getValue() override; + Symsptr differentiateWRTx() override; + + std::ostream& printOn(std::ostream& s) const override; + + }; +} + diff --git a/MbDCode/NewtonRaphson.cpp b/MbDCode/NewtonRaphson.cpp index b158994..31d0eec 100644 --- a/MbDCode/NewtonRaphson.cpp +++ b/MbDCode/NewtonRaphson.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include #include "NewtonRaphson.h" diff --git a/MbDCode/NewtonRaphson.h b/MbDCode/NewtonRaphson.h index 38f23ae..e3d9292 100644 --- a/MbDCode/NewtonRaphson.h +++ b/MbDCode/NewtonRaphson.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include diff --git a/MbDCode/NewtonRaphsonError.cpp b/MbDCode/NewtonRaphsonError.cpp index 301c295..32ef2f4 100644 --- a/MbDCode/NewtonRaphsonError.cpp +++ b/MbDCode/NewtonRaphsonError.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "NewtonRaphsonError.h" using namespace MbD; diff --git a/MbDCode/NewtonRaphsonError.h b/MbDCode/NewtonRaphsonError.h index 3df04cd..487544f 100644 --- a/MbDCode/NewtonRaphsonError.h +++ b/MbDCode/NewtonRaphsonError.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include diff --git a/MbDCode/NoRotationJoint.cpp b/MbDCode/NoRotationJoint.cpp index 373cd31..74cfe3a 100644 --- a/MbDCode/NoRotationJoint.cpp +++ b/MbDCode/NoRotationJoint.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "NoRotationJoint.h" #include "System.h" #include "DirectionCosineConstraintIJ.h" diff --git a/MbDCode/NoRotationJoint.h b/MbDCode/NoRotationJoint.h index e527979..8146e90 100644 --- a/MbDCode/NoRotationJoint.h +++ b/MbDCode/NoRotationJoint.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "Joint.h" diff --git a/MbDCode/NotKinematicError.cpp b/MbDCode/NotKinematicError.cpp index 1fa90de..ae60058 100644 --- a/MbDCode/NotKinematicError.cpp +++ b/MbDCode/NotKinematicError.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "NotKinematicError.h" using namespace MbD; diff --git a/MbDCode/NotKinematicError.h b/MbDCode/NotKinematicError.h index fd02b29..2b13236 100644 --- a/MbDCode/NotKinematicError.h +++ b/MbDCode/NotKinematicError.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include diff --git a/MbDCode/Numeric.cpp b/MbDCode/Numeric.cpp index 15403df..e78ee3c 100644 --- a/MbDCode/Numeric.cpp +++ b/MbDCode/Numeric.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include #include #include @@ -42,3 +50,8 @@ double MbD::Numeric::arcTan0to2piYoverX(double y, double x) } } } + +bool MbD::Numeric::equaltol(double x, double xx, double tol) +{ + return std::abs(x - xx) < tol; +} diff --git a/MbDCode/Numeric.h b/MbDCode/Numeric.h index b384477..c1c4307 100644 --- a/MbDCode/Numeric.h +++ b/MbDCode/Numeric.h @@ -1,4 +1,13 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once +#include #include "Math.h" @@ -8,8 +17,23 @@ namespace MbD { // public: static double arcTan0to2piYoverX(double y, double x); - + static bool equaltol(double x, double xx, double tol); + template + static bool isIncreasingVector(std::vector* vec); }; + template + inline bool Numeric::isIncreasingVector(std::vector* vec) + { + T previous, next; + next = vec->at(0); + for (int i = 1; i < vec->size(); i++) + { + previous = next; + next = vec->at(i); + if (previous > next) return false; + } + return true; + } } diff --git a/MbDCode/OrbitAnglezIecJec.cpp b/MbDCode/OrbitAnglezIecJec.cpp index 4640d6e..c53166e 100644 --- a/MbDCode/OrbitAnglezIecJec.cpp +++ b/MbDCode/OrbitAnglezIecJec.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include #include "OrbitAngleZIecJec.h" @@ -9,7 +17,7 @@ MbD::OrbitAngleZIecJec::OrbitAngleZIecJec() { } -MbD::OrbitAngleZIecJec::OrbitAngleZIecJec(EndFrmcptr frmi, EndFrmcptr frmj) : KinematicIeJe(frmi, frmj) +MbD::OrbitAngleZIecJec::OrbitAngleZIecJec(EndFrmsptr frmi, EndFrmsptr frmj) : KinematicIeJe(frmi, frmj) { } diff --git a/MbDCode/OrbitAnglezIecJec.h b/MbDCode/OrbitAnglezIecJec.h index 768dc8c..fdf1d87 100644 --- a/MbDCode/OrbitAnglezIecJec.h +++ b/MbDCode/OrbitAnglezIecJec.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "KinematicIeJe.h" @@ -9,7 +17,7 @@ namespace MbD { //thez xIeJeIe yIeJeIe cosOverSSq sinOverSSq twoCosSinOverSSqSq dSqOverSSqSq public: OrbitAngleZIecJec(); - OrbitAngleZIecJec(EndFrmcptr frmi, EndFrmcptr frmj); + OrbitAngleZIecJec(EndFrmsptr frmi, EndFrmsptr frmj); void calcPostDynCorrectorIteration() override; virtual void init_xyIeJeIe() = 0; diff --git a/MbDCode/OrbitAnglezIeqcJec.cpp b/MbDCode/OrbitAnglezIeqcJec.cpp index 08077a5..1dd5298 100644 --- a/MbDCode/OrbitAnglezIeqcJec.cpp +++ b/MbDCode/OrbitAnglezIeqcJec.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "OrbitAngleZIeqcJec.h" #include "CREATE.h" #include "DispCompIeqcJecIe.h" @@ -8,7 +16,7 @@ MbD::OrbitAngleZIeqcJec::OrbitAngleZIeqcJec() { } -MbD::OrbitAngleZIeqcJec::OrbitAngleZIeqcJec(EndFrmcptr frmi, EndFrmcptr frmj) : OrbitAngleZIecJec(frmi, frmj) +MbD::OrbitAngleZIeqcJec::OrbitAngleZIeqcJec(EndFrmsptr frmi, EndFrmsptr frmj) : OrbitAngleZIecJec(frmi, frmj) { } diff --git a/MbDCode/OrbitAnglezIeqcJec.h b/MbDCode/OrbitAnglezIeqcJec.h index 3220772..65610f3 100644 --- a/MbDCode/OrbitAnglezIeqcJec.h +++ b/MbDCode/OrbitAnglezIeqcJec.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "OrbitAngleZIecJec.h" @@ -8,7 +16,7 @@ namespace MbD { //pthezpXI pthezpEI ppthezpXIpXI ppthezpXIpEI ppthezpEIpEI public: OrbitAngleZIeqcJec(); - OrbitAngleZIeqcJec(EndFrmcptr frmi, EndFrmcptr frmj); + OrbitAngleZIeqcJec(EndFrmsptr frmi, EndFrmsptr frmj); void calc_ppthezpEIpEI(); void calc_ppthezpXIpEI(); diff --git a/MbDCode/OrbitAnglezIeqcJeqc.cpp b/MbDCode/OrbitAnglezIeqcJeqc.cpp index 88e59c5..79709c6 100644 --- a/MbDCode/OrbitAnglezIeqcJeqc.cpp +++ b/MbDCode/OrbitAnglezIeqcJeqc.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "OrbitAngleZIeqcJeqc.h" #include "CREATE.h" #include "DispCompIeqcJeqcIe.h" @@ -8,7 +16,7 @@ MbD::OrbitAngleZIeqcJeqc::OrbitAngleZIeqcJeqc() { } -MbD::OrbitAngleZIeqcJeqc::OrbitAngleZIeqcJeqc(EndFrmcptr frmi, EndFrmcptr frmj) : OrbitAngleZIeqcJec(frmi, frmj) +MbD::OrbitAngleZIeqcJeqc::OrbitAngleZIeqcJeqc(EndFrmsptr frmi, EndFrmsptr frmj) : OrbitAngleZIeqcJec(frmi, frmj) { } diff --git a/MbDCode/OrbitAnglezIeqcJeqc.h b/MbDCode/OrbitAnglezIeqcJeqc.h index 8efb42e..ec0f843 100644 --- a/MbDCode/OrbitAnglezIeqcJeqc.h +++ b/MbDCode/OrbitAnglezIeqcJeqc.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "OrbitAngleZIeqcJec.h" @@ -8,7 +16,7 @@ namespace MbD { //pthezpXJ pthezpEJ ppthezpXIpXJ ppthezpXIpEJ ppthezpEIpXJ ppthezpEIpEJ ppthezpXJpXJ ppthezpXJpEJ ppthezpEJpEJ public: OrbitAngleZIeqcJeqc(); - OrbitAngleZIeqcJeqc(EndFrmcptr frmi, EndFrmcptr frmj); + OrbitAngleZIeqcJeqc(EndFrmsptr frmi, EndFrmsptr frmj); void calc_ppthezpEIpEJ(); void calc_ppthezpEIpXJ(); diff --git a/MbDCode/Orientation.cpp b/MbDCode/Orientation.cpp index 7706e2d..6f2bc33 100644 --- a/MbDCode/Orientation.cpp +++ b/MbDCode/Orientation.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "Orientation.h" #include "CREATE.h" #include "System.h" @@ -25,7 +33,3 @@ void MbD::Orientation::initializeGlobally() PrescribedMotion::initializeGlobally(); } } - -void MbD::Orientation::initMotions() -{ -} diff --git a/MbDCode/Orientation.h b/MbDCode/Orientation.h index e916554..bc6566d 100644 --- a/MbDCode/Orientation.h +++ b/MbDCode/Orientation.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "PrescribedMotion.h" @@ -10,7 +18,6 @@ namespace MbD { Orientation(); Orientation(const char* str); void initializeGlobally() override; - void initMotions() override; }; } diff --git a/MbDCode/ParallelAxesJoint.cpp b/MbDCode/ParallelAxesJoint.cpp index 152fc2e..0341856 100644 --- a/MbDCode/ParallelAxesJoint.cpp +++ b/MbDCode/ParallelAxesJoint.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "ParallelAxesJoint.h" #include "CREATE.h" #include "System.h" diff --git a/MbDCode/ParallelAxesJoint.h b/MbDCode/ParallelAxesJoint.h index 640239e..4e927ee 100644 --- a/MbDCode/ParallelAxesJoint.h +++ b/MbDCode/ParallelAxesJoint.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "Joint.h" diff --git a/MbDCode/Part.cpp b/MbDCode/Part.cpp index 5b018ee..1c52f81 100644 --- a/MbDCode/Part.cpp +++ b/MbDCode/Part.cpp @@ -1,10 +1,18 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "Part.h" #include "PartFrame.h" #include "System.h" #include "CREATE.h" #include "DiagonalMatrix.h" #include "EulerParameters.h" -#include "DataPosVelAcc.h" +#include "PosVelAccData.h" using namespace MbD; @@ -204,6 +212,16 @@ void Part::prePosKine() partFrame->prePosKine(); } +int MbD::Part::iqX() +{ + return partFrame->iqX; +} + +int MbD::Part::iqE() +{ + return partFrame->iqE; +} + void Part::iqX(int eqnNo) { partFrame->iqX = eqnNo; @@ -234,7 +252,7 @@ void Part::fillqsu(FColDsptr col) partFrame->fillqsu(col); } -void Part::fillqsuWeights(std::shared_ptr> diagMat) +void Part::fillqsuWeights(DiagMatDsptr diagMat) { //"Map wqX and wqE according to inertias. (0 to maximum inertia) map to (minw to maxw)" //"When the inertias are zero, they are set to a small number for positive definiteness." @@ -281,7 +299,7 @@ void Part::fillqsudot(FColDsptr col) partFrame->fillqsudot(col); } -void Part::fillqsudotWeights(std::shared_ptr> diagMat) +void Part::fillqsudotWeights(DiagMatDsptr diagMat) { //"wqXdot and wqEdot are set to their respective inertias." //"When the inertias are zero, they are set to a small number for positive definiteness." @@ -538,7 +556,7 @@ std::shared_ptr Part::stateData() auto omeOpO = this->omeOpO(); auto aOpO = this->qXddot(); auto alpOpO = this->alpOpO(); - auto answer = std::make_shared(); + auto answer = std::make_shared(); answer->rFfF = rOpO; answer->aAFf = aAOp; answer->vFfF = vOpO; diff --git a/MbDCode/Part.cpp.bak b/MbDCode/Part.cpp.bak deleted file mode 100644 index 21342a0..0000000 --- a/MbDCode/Part.cpp.bak +++ /dev/null @@ -1,38 +0,0 @@ -#include "Part.h" -#include "PartFrame.h" -#include "FullColumn.h" - -using namespace MbD; - -Part::Part() { - partFrame = std::make_shared(this); -} - -void Part::setqX(FullColDptr x) { - partFrame.get()->setqX(x); -} - -FullColDptr Part::getqX() { - return partFrame.get()->getqX(); -} - -void Part::setqE(FullColDptr x) { - partFrame.get()->setqE(x); -} - -FullColDptr Part::getqE() { - return partFrame.get()->getqE(); -} - -void Part::setSystem(System& sys) -{ - //May be needed in the future -} - -void Part::initializeLocally() -{ -} - -void Part::initializeGlobally() -{ -} diff --git a/MbDCode/Part.h b/MbDCode/Part.h index 68ff87e..65e2119 100644 --- a/MbDCode/Part.h +++ b/MbDCode/Part.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include @@ -56,17 +64,19 @@ namespace MbD { void prePosIC() override; void prePosKine() override; + int iqX(); + int iqE(); void iqX(int eqnNo); void iqE(int eqnNo); void fillEssenConstraints(std::shared_ptr>> essenConstraints) override; void fillRedundantConstraints(std::shared_ptr>> redunConstraints) override; void fillConstraints(std::shared_ptr>> allConstraints) override; void fillqsu(FColDsptr col) override; - void fillqsuWeights(std::shared_ptr> diagMat) override; + void fillqsuWeights(DiagMatDsptr diagMat) override; void fillqsuddotlam(FColDsptr col) override; void fillqsulam(FColDsptr col) override; void fillqsudot(FColDsptr col) override; - void fillqsudotWeights(std::shared_ptr> diagMat) override; + void fillqsudotWeights(DiagMatDsptr diagMat) override; void useEquationNumbers() override; void setqsu(FColDsptr col) override; void setqsulam(FColDsptr col) override; @@ -107,13 +117,13 @@ namespace MbD { int ipX = -1; int ipE = -1; double m = 0.0; - std::shared_ptr> aJ; + DiagMatDsptr aJ; std::shared_ptr partFrame; FColDsptr pX; FColDsptr pXdot; FColDsptr pE; FColDsptr pEdot; - std::shared_ptr> mX; + DiagMatDsptr mX; FMatDsptr mE; FMatDsptr mEdot; FColDsptr pTpE; diff --git a/MbDCode/Part.h.bak b/MbDCode/Part.h.bak deleted file mode 100644 index a8d66f3..0000000 --- a/MbDCode/Part.h.bak +++ /dev/null @@ -1,29 +0,0 @@ -#pragma once -#include - -#include "Item.h" -#include "System.h" -#include "PartFrame.h" -#include "FullColumn.h" - -namespace MbD { - class System; - class PartFrame; - - class Part : public Item - { - //ToDo: ipX ipE m aJ partFrame pX pXdot pE pEdot mX mE mEdot pTpE ppTpEpE ppTpEpEdot - public: - Part(); - void setqX(FullColDptr x); - FullColDptr getqX(); - void setqE(FullColDptr x); - FullColDptr getqE(); - void setSystem(System& sys); - void initializeLocally(); - void initializeGlobally(); - - std::shared_ptr partFrame; - }; -} - diff --git a/MbDCode/PartFrame.cpp b/MbDCode/PartFrame.cpp index 14d5277..d432566 100644 --- a/MbDCode/PartFrame.cpp +++ b/MbDCode/PartFrame.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include #include "PartFrame.h" @@ -114,7 +122,7 @@ void PartFrame::addMarkerFrame(std::shared_ptr markerFrame) markerFrames->push_back(markerFrame); } -EndFrmcptr PartFrame::endFrame(std::string name) +EndFrmsptr PartFrame::endFrame(std::string name) { auto match = std::find_if(markerFrames->begin(), markerFrames->end(), [&](auto& mkr) {return mkr->name == name; }); return (*match)->endFrames->at(0); @@ -254,7 +262,7 @@ void PartFrame::fillqsu(FColDsptr col) markerFramesDo([&](std::shared_ptr markerFrame) { markerFrame->fillqsu(col); }); } -void PartFrame::fillqsuWeights(std::shared_ptr> diagMat) +void PartFrame::fillqsuWeights(DiagMatDsptr diagMat) { markerFramesDo([&](std::shared_ptr markerFrame) { markerFrame->fillqsuWeights(diagMat); }); } @@ -284,7 +292,7 @@ void PartFrame::fillqsudot(FColDsptr col) markerFramesDo([&](std::shared_ptr markerFrame) { markerFrame->fillqsudot(col); }); } -void PartFrame::fillqsudotWeights(std::shared_ptr> diagMat) +void PartFrame::fillqsudotWeights(DiagMatDsptr diagMat) { markerFramesDo([&](std::shared_ptr markerFrame) { markerFrame->fillqsudotWeights(diagMat); }); } diff --git a/MbDCode/PartFrame.cpp.bak b/MbDCode/PartFrame.cpp.bak deleted file mode 100644 index 31419b1..0000000 --- a/MbDCode/PartFrame.cpp.bak +++ /dev/null @@ -1,52 +0,0 @@ -#include "Part.h" -#include "PartFrame.h" -#include "EulerConstraint.h" -#include "AbsConstraint.h" -#include "MarkerFrame.h" - -using namespace MbD; - -PartFrame::PartFrame() -{ - aGeu = std::make_shared("EulerCon"); - aGeu->setOwner(this); - aGabs = std::make_unique>>(); - markerFrames = std::make_unique>>(); -} -MbD::PartFrame::PartFrame(const char* str) : CartesianFrame(str) -{ -} -void MbD::PartFrame::initialize() -{ -} -void PartFrame::setqX(FullColDptr x) { - qX->copy(x); -} -FullColDptr PartFrame::getqX() { - return qX; -} -void PartFrame::setqE(FullColDptr x) { - qE->copy(x); -} -FullColDptr PartFrame::getqE() { - return qE; -} -void PartFrame::setPart(Part* x) { - part = x; -} -Part* PartFrame::getPart() { - return part; -} - -void PartFrame::addMarkerFrame(std::shared_ptr markerFrame) -{ - markerFrames->push_back(markerFrame); -} - -std::shared_ptr PartFrame::endFrame(std::string name) -{ - auto match = std::find_if(markerFrames->begin(), markerFrames->end(), [&](std::shared_ptr mkr) {return mkr->endFrames->at(0)->getName() == name; }); - //auto match = std::find_if(markerFrames->begin(), markerFrames->end(), [&](std::shared_ptr mkr) {return mkr->getName() == name; }); - - return (*match)->endFrames->at(0); -} diff --git a/MbDCode/PartFrame.h b/MbDCode/PartFrame.h index 9b622cc..aa17c48 100644 --- a/MbDCode/PartFrame.h +++ b/MbDCode/PartFrame.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include @@ -16,8 +24,6 @@ namespace MbD { class MarkerFrame; class EulerConstraint; class AbsConstraint; - //class EulerParameters; - //class EulerParametersDot; class PartFrame : public CartesianFrame { @@ -50,7 +56,7 @@ namespace MbD { void setPart(Part* x); Part* getPart(); void addMarkerFrame(std::shared_ptr x); - EndFrmcptr endFrame(std::string name); + EndFrmsptr endFrame(std::string name); void aGabsDo(const std::function )>& f); void markerFramesDo(const std::function )>& f); void removeRedundantConstraints(std::shared_ptr> redundantEqnNos) override; @@ -69,11 +75,11 @@ namespace MbD { void fillRedundantConstraints(std::shared_ptr>> redunConstraints) override; void fillConstraints(std::shared_ptr>> allConstraints) override; void fillqsu(FColDsptr col) override; - void fillqsuWeights(std::shared_ptr> diagMat) override; + void fillqsuWeights(DiagMatDsptr diagMat) override; void fillqsuddotlam(FColDsptr col) override; void fillqsulam(FColDsptr col) override; void fillqsudot(FColDsptr col) override; - void fillqsudotWeights(std::shared_ptr> diagMat) override; + void fillqsudotWeights(DiagMatDsptr diagMat) override; void useEquationNumbers() override; void setqsu(FColDsptr col) override; void setqsulam(FColDsptr col) override; diff --git a/MbDCode/PerpendicularJoint.cpp b/MbDCode/PerpendicularJoint.cpp index 55b9b22..228b769 100644 --- a/MbDCode/PerpendicularJoint.cpp +++ b/MbDCode/PerpendicularJoint.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "PerpendicularJoint.h" #include "CREATE.h" #include "System.h" diff --git a/MbDCode/PerpendicularJoint.h b/MbDCode/PerpendicularJoint.h index 5f0f5f5..9783d02 100644 --- a/MbDCode/PerpendicularJoint.h +++ b/MbDCode/PerpendicularJoint.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "Joint.h" diff --git a/MbDCode/PlanarJoint.cpp b/MbDCode/PlanarJoint.cpp index 0592184..9ee86bf 100644 --- a/MbDCode/PlanarJoint.cpp +++ b/MbDCode/PlanarJoint.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "PlanarJoint.h" #include "CREATE.h" #include "System.h" diff --git a/MbDCode/PlanarJoint.h b/MbDCode/PlanarJoint.h index a6ee9ed..2a398ad 100644 --- a/MbDCode/PlanarJoint.h +++ b/MbDCode/PlanarJoint.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "InPlaneJoint.h" diff --git a/MbDCode/PointInLineJoint.cpp b/MbDCode/PointInLineJoint.cpp index c27d185..bc0e242 100644 --- a/MbDCode/PointInLineJoint.cpp +++ b/MbDCode/PointInLineJoint.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "PointInLineJoint.h" #include "CREATE.h" #include "System.h" diff --git a/MbDCode/PointInLineJoint.h b/MbDCode/PointInLineJoint.h index 42ff2d1..76331b4 100644 --- a/MbDCode/PointInLineJoint.h +++ b/MbDCode/PointInLineJoint.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "InLineJoint.h" diff --git a/MbDCode/PointInPlaneJoint.cpp b/MbDCode/PointInPlaneJoint.cpp index a474f8f..944b926 100644 --- a/MbDCode/PointInPlaneJoint.cpp +++ b/MbDCode/PointInPlaneJoint.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "PointInPlaneJoint.h" #include "System.h" diff --git a/MbDCode/PointInPlaneJoint.h b/MbDCode/PointInPlaneJoint.h index 0cf4f36..07925b2 100644 --- a/MbDCode/PointInPlaneJoint.h +++ b/MbDCode/PointInPlaneJoint.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "InPlaneJoint.h" diff --git a/MbDCode/PosICKineNewtonRaphson.cpp b/MbDCode/PosICKineNewtonRaphson.cpp index 253fde0..47de4cc 100644 --- a/MbDCode/PosICKineNewtonRaphson.cpp +++ b/MbDCode/PosICKineNewtonRaphson.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "PosICKineNewtonRaphson.h" #include "SystemSolver.h" #include "Part.h" diff --git a/MbDCode/PosICKineNewtonRaphson.h b/MbDCode/PosICKineNewtonRaphson.h index f69884d..061f3fc 100644 --- a/MbDCode/PosICKineNewtonRaphson.h +++ b/MbDCode/PosICKineNewtonRaphson.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "AnyPosICNewtonRaphson.h" @@ -5,7 +13,7 @@ namespace MbD { class PosICKineNewtonRaphson : public AnyPosICNewtonRaphson { - // + //Kinematics with under constrained system public: void initializeGlobally() override; void assignEquationNumbers() override; diff --git a/MbDCode/PosICNewtonRaphson.cpp b/MbDCode/PosICNewtonRaphson.cpp index 9c32b06..1f84e4a 100644 --- a/MbDCode/PosICNewtonRaphson.cpp +++ b/MbDCode/PosICNewtonRaphson.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include #include @@ -40,7 +48,7 @@ void PosICNewtonRaphson::assignEquationNumbers() auto parts = system->parts(); //auto contactEndFrames = system->contactEndFrames(); //auto uHolders = system->uHolders(); - auto essentialConstraints = system->essentialConstraints2(); + auto essentialConstraints = system->essentialConstraints(); auto displacementConstraints = system->displacementConstraints(); auto perpendicularConstraints = system->perpendicularConstraints(); int eqnNo = 0; diff --git a/MbDCode/PosICNewtonRaphson.h b/MbDCode/PosICNewtonRaphson.h index 3ff3b54..798bae9 100644 --- a/MbDCode/PosICNewtonRaphson.h +++ b/MbDCode/PosICNewtonRaphson.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "AnyPosICNewtonRaphson.h" @@ -5,7 +13,9 @@ namespace MbD { class PosICNewtonRaphson : public AnyPosICNewtonRaphson { - //pivotRowLimits + //IC with over, fully or under constrained system + //Perform redundant constraint removal for over constrained system + //pivotRowLimits public: PosICNewtonRaphson(){} diff --git a/MbDCode/PosKineNewtonRaphson.cpp b/MbDCode/PosKineNewtonRaphson.cpp index 7c7a3da..e2ffa6c 100644 --- a/MbDCode/PosKineNewtonRaphson.cpp +++ b/MbDCode/PosKineNewtonRaphson.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "PosKineNewtonRaphson.h" #include "SystemSolver.h" #include "Part.h" diff --git a/MbDCode/PosKineNewtonRaphson.h b/MbDCode/PosKineNewtonRaphson.h index 901e4ec..9e62491 100644 --- a/MbDCode/PosKineNewtonRaphson.h +++ b/MbDCode/PosKineNewtonRaphson.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "PosNewtonRaphson.h" @@ -5,7 +13,7 @@ namespace MbD { class PosKineNewtonRaphson : public PosNewtonRaphson { - // + //Kinematics with fully constrained system public: void initializeGlobally() override; void fillPyPx() override; diff --git a/MbDCode/PosNewtonRaphson.cpp b/MbDCode/PosNewtonRaphson.cpp index e4a33b6..f940361 100644 --- a/MbDCode/PosNewtonRaphson.cpp +++ b/MbDCode/PosNewtonRaphson.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include #include "PosNewtonRaphson.h" diff --git a/MbDCode/PosNewtonRaphson.h b/MbDCode/PosNewtonRaphson.h index de4c46e..cc96b6d 100644 --- a/MbDCode/PosNewtonRaphson.h +++ b/MbDCode/PosNewtonRaphson.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "SystemNewtonRaphson.h" diff --git a/MbDCode/PosVelAccData.cpp b/MbDCode/PosVelAccData.cpp new file mode 100644 index 0000000..cd06178 --- /dev/null +++ b/MbDCode/PosVelAccData.cpp @@ -0,0 +1,25 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#include + +#include "PosVelAccData.h" + +using namespace MbD; + +std::ostream& PosVelAccData::printOn(std::ostream& s) const +{ + s << "refData = " << *refData << std::endl; + s << "rFfF = " << *rFfF << std::endl; + s << "vFfF = " << *vFfF << std::endl; + s << "omeFfF = " << *omeFfF << std::endl; + s << "aFfF = " << *aFfF << std::endl; + s << "alpFfF = " << *alpFfF << std::endl; + s << "aAFf = " << *aAFf; + return s; +} diff --git a/MbDCode/PosVelAccData.h b/MbDCode/PosVelAccData.h new file mode 100644 index 0000000..df1ae3b --- /dev/null +++ b/MbDCode/PosVelAccData.h @@ -0,0 +1,25 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#pragma once + +#include "StateData.h" + +namespace MbD { + class PosVelAccData : public StateData + { + //refData rFfF aAFf vFfF omeFfF aFfF alpFfF + public: + std::ostream& printOn(std::ostream& s) const override; + + std::shared_ptr refData; + FColDsptr rFfF, vFfF, omeFfF, aFfF, alpFfF; + FMatDsptr aAFf; + }; +} + diff --git a/MbDCode/Power.cpp b/MbDCode/Power.cpp new file mode 100644 index 0000000..9f978aa --- /dev/null +++ b/MbDCode/Power.cpp @@ -0,0 +1,46 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#include "Power.h" +#include "Constant.h" +#include "Ln.h" + +using namespace MbD; + +MbD::Power::Power() +{ +} + +MbD::Power::Power(Symsptr bse, Symsptr ex) : FunctionXY(bse, ex) +{ +} + +Symsptr MbD::Power::differentiateWRTx() +{ + auto yminus1 = Symbolic::sum(y, std::make_shared(-1.0)); + auto power = Symbolic::raisedTo(x, yminus1); + auto deriv = Symbolic::times(y, power); + return deriv->simplified(deriv); +} + +Symsptr MbD::Power::differentiateWRTy() +{ + auto lnterm = std::make_shared(x); + auto deriv = Symbolic::times(clonesptr(), lnterm); + return deriv->simplified(); +} + +Symsptr MbD::Power::simplifyUntil(Symsptr sptr, std::shared_ptr> set) +{ + return Symsptr(); +} + +double MbD::Power::getValue() +{ + return std::pow(x->getValue(), y->getValue()); +} diff --git a/MbDCode/Power.h b/MbDCode/Power.h new file mode 100644 index 0000000..de16653 --- /dev/null +++ b/MbDCode/Power.h @@ -0,0 +1,28 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#pragma once + +#include "FunctionXY.h" + +namespace MbD { + class Power : public FunctionXY + { + // + public: + Power(); + Power(Symsptr base, Symsptr exp); + Symsptr differentiateWRTx() override; + Symsptr differentiateWRTy() override; + + Symsptr simplifyUntil(Symsptr sptr, std::shared_ptr> set) override; + double getValue() override; + + }; +} + diff --git a/MbDCode/PrescribedMotion.cpp b/MbDCode/PrescribedMotion.cpp index 682ebc1..8c0c122 100644 --- a/MbDCode/PrescribedMotion.cpp +++ b/MbDCode/PrescribedMotion.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include #include #include @@ -30,11 +38,14 @@ void PrescribedMotion::initialize() void MbD::PrescribedMotion::initMotions() { - assert(false); + auto xyzBlkList = std::initializer_list{ xBlk, yBlk, zBlk }; + std::static_pointer_cast(frmI)->rmemBlks = (std::make_shared>(xyzBlkList)); + auto xyzRotBlkList = std::initializer_list{ phiBlk, theBlk, psiBlk }; + std::static_pointer_cast(frmI)->phiThePsiBlks = (std::make_shared>(xyzRotBlkList)); } -void PrescribedMotion::connectsItoJ(EndFrmcptr frmi, EndFrmcptr frmj) +void PrescribedMotion::connectsItoJ(EndFrmsptr frmi, EndFrmsptr frmj) { Joint::connectsItoJ(frmi, frmj); - frmI->initEndFrameqct(); + std::static_pointer_cast(frmI)->initEndFrameqct(); } diff --git a/MbDCode/PrescribedMotion.cpp.bak b/MbDCode/PrescribedMotion.cpp.bak deleted file mode 100644 index 77bdb3f..0000000 --- a/MbDCode/PrescribedMotion.cpp.bak +++ /dev/null @@ -1,19 +0,0 @@ -#include -#include -#include - -#include "PrescribedMotion.h" -#include "EndFrameqct.h" - -using namespace MbD; - -void PrescribedMotion::connectsItoJ(std::shared_ptr frmi, std::shared_ptr frmj) -{ - Joint::connectsItoJ(frmi, frmj); - if (typeid(frmI).name() != "EndFrameqct") { - std::shared_ptr newFrmI; - newFrmI = std::make_shared(); - std::swap(frmI, newFrmI); - assert(typeid(frmI).name() != "EndFrameqct"); - } -} diff --git a/MbDCode/PrescribedMotion.h b/MbDCode/PrescribedMotion.h index eefe604..bc0c828 100644 --- a/MbDCode/PrescribedMotion.h +++ b/MbDCode/PrescribedMotion.h @@ -1,9 +1,20 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once +#include #include "Joint.h" -#include "Symbolic.h" namespace MbD { + class Symbolic; + using Symsptr = std::shared_ptr; + class EndFramec; class PrescribedMotion : public Joint { @@ -12,7 +23,7 @@ namespace MbD { PrescribedMotion(); PrescribedMotion(const char* str); - void connectsItoJ(EndFrmcptr frmI, EndFrmcptr frmJ) override; + void connectsItoJ(EndFrmsptr frmI, EndFrmsptr frmJ) override; void initialize() override; virtual void initMotions(); diff --git a/MbDCode/PrescribedMotion.h.bak b/MbDCode/PrescribedMotion.h.bak deleted file mode 100644 index 8ce12b4..0000000 --- a/MbDCode/PrescribedMotion.h.bak +++ /dev/null @@ -1,11 +0,0 @@ -#pragma once -#include "Joint.h" - -namespace MbD { - class PrescribedMotion : public Joint - { - public: - void connectsItoJ(std::shared_ptr frmI, std::shared_ptr frmJ) override; - }; -} - diff --git a/MbDCode/Product.cpp b/MbDCode/Product.cpp index 3de8546..7241b80 100644 --- a/MbDCode/Product.cpp +++ b/MbDCode/Product.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include #include @@ -7,7 +15,7 @@ using namespace MbD; -Symsptr Product::differentiateWRT(Symsptr sptr, Symsptr var) +Symsptr MbD::Product::differentiateWRT(Symsptr var) { //"Apply chain rule of differentiation." // "(xyz)' := x'yz + xy'z + xyz'." @@ -16,7 +24,9 @@ Symsptr Product::differentiateWRT(Symsptr sptr, Symsptr var) std::transform(terms->begin(), terms->end(), std::back_inserter(*derivatives), - [var](Symsptr term) { return term->differentiateWRT(term, var); } + [var](Symsptr term) { + return term->differentiateWRT(var); + } ); auto derivativeTerms = std::make_shared>(); for (int i = 0; i < terms->size(); i++) @@ -59,9 +69,9 @@ Symsptr Product::expandUntil(Symsptr sptr, std::shared_ptrterms = productTerms; auto sumOfProductsOfSums = std::make_shared(std::make_shared(1)); for (const auto& term : *sumTerms) { - sumOfProductsOfSums = std::static_pointer_cast(sumOfProductsOfSums->timesSum(sumOfProductsOfSums, term)); + sumOfProductsOfSums = std::static_pointer_cast(Symbolic::times(sumOfProductsOfSums, term)); } - return factor->timesSum(factor, sumOfProductsOfSums); + return Symbolic::times(factor, sumOfProductsOfSums); } Symsptr Product::simplifyUntil(Symsptr sptr, std::shared_ptr> set) @@ -103,39 +113,6 @@ Symsptr Product::simplifyUntil(Symsptr sptr, std::shared_ptr(); - auto sumTERMs = aSum->getTerms(); - for (const auto& sumTERM : *sumTERMs) { - Symsptr termTERM; - if (sumTERM->isProduct()) { - termTERM = sptr->timesProduct(sptr, sumTERM); - } - else { - termTERM = sptr->timesFunction(sptr, sumTERM); - } - answer->terms->push_back(termTERM); - } - return answer; -} - -Symsptr Product::timesProduct(Symsptr sptr, Symsptr product) -{ - auto answer = std::make_shared(sptr->getTerms()); - auto& answerTerms = answer->terms; - auto productTerms = product->getTerms(); - answerTerms->insert(answerTerms->end(), productTerms->begin(), productTerms->end()); - return answer; -} - -Symsptr Product::timesFunction(Symsptr sptr, Symsptr function) -{ - auto answer = std::make_shared(sptr->getTerms()); - answer->terms->push_back(function); - return answer; -} - std::ostream& Product::printOn(std::ostream& s) const { s << "("; @@ -159,3 +136,8 @@ double Product::getValue() for (int i = 0; i < terms->size(); i++) answer *= terms->at(i)->getValue(); return answer; } + +Symsptr MbD::Product::clonesptr() +{ + return std::make_shared(*this); +} diff --git a/MbDCode/Product.h b/MbDCode/Product.h index 12a3806..b28579e 100644 --- a/MbDCode/Product.h +++ b/MbDCode/Product.h @@ -1,7 +1,17 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "FunctionWithManyArgs.h" #include "Symbolic.h" +#include "System.h" +#include "Units.h" namespace MbD { @@ -13,15 +23,15 @@ namespace MbD { Product(Symsptr term, Symsptr term1) : FunctionWithManyArgs(term, term1) {} Product(Symsptr term, Symsptr term1, Symsptr term2) : FunctionWithManyArgs(term, term1, term2) {} Product(std::shared_ptr> _terms) : FunctionWithManyArgs(_terms) {} - Symsptr differentiateWRT(Symsptr sptr, Symsptr var) override; + Symsptr differentiateWRT(Symsptr var) override; Symsptr expandUntil(Symsptr sptr, std::shared_ptr> set) override; Symsptr simplifyUntil(Symsptr sptr, std::shared_ptr> set) override; - Symsptr timesSum(Symsptr sptr, Symsptr sum) override; - Symsptr timesProduct(Symsptr sptr, Symsptr product) override; - Symsptr timesFunction(Symsptr sptr, Symsptr function) override; - std::ostream& printOn(std::ostream& s) const override; bool isProduct() override; double getValue() override; + Symsptr clonesptr() override; + + std::ostream& printOn(std::ostream& s) const override; + }; } diff --git a/MbDCode/QuasiIntegrator.cpp b/MbDCode/QuasiIntegrator.cpp index 857fdf1..86f7b95 100644 --- a/MbDCode/QuasiIntegrator.cpp +++ b/MbDCode/QuasiIntegrator.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include #include "QuasiIntegrator.h" diff --git a/MbDCode/QuasiIntegrator.h b/MbDCode/QuasiIntegrator.h index d619410..12a1830 100644 --- a/MbDCode/QuasiIntegrator.h +++ b/MbDCode/QuasiIntegrator.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include diff --git a/MbDCode/RackPinConstraintIJ.cpp b/MbDCode/RackPinConstraintIJ.cpp index d9ee8e4..8132e50 100644 --- a/MbDCode/RackPinConstraintIJ.cpp +++ b/MbDCode/RackPinConstraintIJ.cpp @@ -1,8 +1,16 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "RackPinConstraintIJ.h" using namespace MbD; -MbD::RackPinConstraintIJ::RackPinConstraintIJ(EndFrmcptr frmi, EndFrmcptr frmj) : ConstraintIJ(frmi, frmj) +MbD::RackPinConstraintIJ::RackPinConstraintIJ(EndFrmsptr frmi, EndFrmsptr frmj) : ConstraintIJ(frmi, frmj) { } diff --git a/MbDCode/RackPinConstraintIJ.h b/MbDCode/RackPinConstraintIJ.h index 777593c..427ae47 100644 --- a/MbDCode/RackPinConstraintIJ.h +++ b/MbDCode/RackPinConstraintIJ.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "ConstraintIJ.h" @@ -9,7 +17,7 @@ namespace MbD { { //xIeJeIe thezIeJe pitchRadius public: - RackPinConstraintIJ(EndFrmcptr frmi, EndFrmcptr frmj); + RackPinConstraintIJ(EndFrmsptr frmi, EndFrmsptr frmj); void calcPostDynCorrectorIteration() override; virtual void init_xthez(); diff --git a/MbDCode/RackPinConstraintIqcJc.cpp b/MbDCode/RackPinConstraintIqcJc.cpp index 21fb7c0..d79a3d8 100644 --- a/MbDCode/RackPinConstraintIqcJc.cpp +++ b/MbDCode/RackPinConstraintIqcJc.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "RackPinConstraintIqcJc.h" #include "EndFrameqc.h" #include "CREATE.h" @@ -6,7 +14,7 @@ using namespace MbD; -MbD::RackPinConstraintIqcJc::RackPinConstraintIqcJc(EndFrmcptr frmi, EndFrmcptr frmj) : RackPinConstraintIJ(frmi, frmj) +MbD::RackPinConstraintIqcJc::RackPinConstraintIqcJc(EndFrmsptr frmi, EndFrmsptr frmj) : RackPinConstraintIJ(frmi, frmj) { } diff --git a/MbDCode/RackPinConstraintIqcJc.h b/MbDCode/RackPinConstraintIqcJc.h index df200da..be6d0cb 100644 --- a/MbDCode/RackPinConstraintIqcJc.h +++ b/MbDCode/RackPinConstraintIqcJc.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "RackPinConstraintIJ.h" @@ -7,7 +15,7 @@ namespace MbD { { //pGpXI pGpEI ppGpXIpEI ppGpEIpEI iqXI iqEI public: - RackPinConstraintIqcJc(EndFrmcptr frmi, EndFrmcptr frmj); + RackPinConstraintIqcJc(EndFrmsptr frmi, EndFrmsptr frmj); void addToJointForceI(FColDsptr col) override; void addToJointTorqueI(FColDsptr col) override; diff --git a/MbDCode/RackPinConstraintIqcJqc.cpp b/MbDCode/RackPinConstraintIqcJqc.cpp index 3328aef..8c25136 100644 --- a/MbDCode/RackPinConstraintIqcJqc.cpp +++ b/MbDCode/RackPinConstraintIqcJqc.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "RackPinConstraintIqcJqc.h" #include "EndFrameqc.h" #include "CREATE.h" @@ -6,7 +14,7 @@ using namespace MbD; -MbD::RackPinConstraintIqcJqc::RackPinConstraintIqcJqc(EndFrmcptr frmi, EndFrmcptr frmj) : RackPinConstraintIqcJc(frmi, frmj) +MbD::RackPinConstraintIqcJqc::RackPinConstraintIqcJqc(EndFrmsptr frmi, EndFrmsptr frmj) : RackPinConstraintIqcJc(frmi, frmj) { } diff --git a/MbDCode/RackPinConstraintIqcJqc.h b/MbDCode/RackPinConstraintIqcJqc.h index fdd6bd7..3f5a2c2 100644 --- a/MbDCode/RackPinConstraintIqcJqc.h +++ b/MbDCode/RackPinConstraintIqcJqc.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "RackPinConstraintIqcJc.h" @@ -7,7 +15,7 @@ namespace MbD { { //pGpXJ pGpEJ ppGpEIpXJ ppGpEIpEJ ppGpEJpEJ iqXJ iqEJ public: - RackPinConstraintIqcJqc(EndFrmcptr frmi, EndFrmcptr frmj); + RackPinConstraintIqcJqc(EndFrmsptr frmi, EndFrmsptr frmj); void calc_pGpEJ(); void calc_pGpXJ(); diff --git a/MbDCode/RackPinJoint.cpp b/MbDCode/RackPinJoint.cpp index b8d2f70..77464d0 100644 --- a/MbDCode/RackPinJoint.cpp +++ b/MbDCode/RackPinJoint.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "RackPinJoint.h" #include "CREATE.h" #include "System.h" @@ -28,7 +36,7 @@ void MbD::RackPinJoint::initializeGlobally() } } -void MbD::RackPinJoint::connectsItoJ(EndFrmcptr frmIe, EndFrmcptr frmJe) +void MbD::RackPinJoint::connectsItoJ(EndFrmsptr frmIe, EndFrmsptr frmJe) { //"OODS J is on pinion. z axis is axis of pinion." //"OODS I is on rack. x axis is axis of rack. z axis is parallel to axis of pinion." diff --git a/MbDCode/RackPinJoint.h b/MbDCode/RackPinJoint.h index 4f8ee25..13494c9 100644 --- a/MbDCode/RackPinJoint.h +++ b/MbDCode/RackPinJoint.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "Joint.h" @@ -10,7 +18,7 @@ namespace MbD { RackPinJoint(); RackPinJoint(const char* str); void initializeGlobally() override; - void connectsItoJ(EndFrmcptr frmI, EndFrmcptr frmJ) override; + void connectsItoJ(EndFrmsptr frmI, EndFrmsptr frmJ) override; double pitchRadius, aConstant; }; diff --git a/MbDCode/Reciprocal.cpp b/MbDCode/Reciprocal.cpp new file mode 100644 index 0000000..6f9f3dd --- /dev/null +++ b/MbDCode/Reciprocal.cpp @@ -0,0 +1,36 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#include "Reciprocal.h" +#include "Negative.h" +#include "Power.h" +#include "Constant.h" + +using namespace MbD; + +MbD::Reciprocal::Reciprocal(Symsptr arg) : FunctionX(arg) +{ +} + +double MbD::Reciprocal::getValue() +{ + return 1.0 / xx->getValue(); +} + +Symsptr MbD::Reciprocal::differentiateWRTx() +{ + auto two = std::make_shared(2); + auto sq = std::make_shared(xx, two); + return std::make_shared(sq); +} + +std::ostream& MbD::Reciprocal::printOn(std::ostream& s) const +{ + s << "/(" << xx << ")"; + return s; +} diff --git a/MbDCode/Reciprocal.h b/MbDCode/Reciprocal.h new file mode 100644 index 0000000..0232dce --- /dev/null +++ b/MbDCode/Reciprocal.h @@ -0,0 +1,27 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#pragma once + +#include "FunctionX.h" + +namespace MbD { + class Reciprocal : public FunctionX + { + // + public: + Reciprocal() = default; + Reciprocal(Symsptr arg); + double getValue() override; + Symsptr differentiateWRTx() override; + + std::ostream& printOn(std::ostream& s) const override; + + }; +} + diff --git a/MbDCode/RedundantConstraint.cpp b/MbDCode/RedundantConstraint.cpp index 07e33fd..dd7c595 100644 --- a/MbDCode/RedundantConstraint.cpp +++ b/MbDCode/RedundantConstraint.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "RedundantConstraint.h" using namespace MbD; diff --git a/MbDCode/RedundantConstraint.h b/MbDCode/RedundantConstraint.h index 71673e1..55a2863 100644 --- a/MbDCode/RedundantConstraint.h +++ b/MbDCode/RedundantConstraint.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "Constraint.h" diff --git a/MbDCode/RevCylJoint.cpp b/MbDCode/RevCylJoint.cpp index b268672..9b12025 100644 --- a/MbDCode/RevCylJoint.cpp +++ b/MbDCode/RevCylJoint.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "RevCylJoint.h" #include "CREATE.h" #include "DistancexyConstraintIJ.h" diff --git a/MbDCode/RevCylJoint.h b/MbDCode/RevCylJoint.h index c32109e..384e358 100644 --- a/MbDCode/RevCylJoint.h +++ b/MbDCode/RevCylJoint.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "CompoundJoint.h" diff --git a/MbDCode/RevoluteJoint.cpp b/MbDCode/RevoluteJoint.cpp index 80509f7..06a058b 100644 --- a/MbDCode/RevoluteJoint.cpp +++ b/MbDCode/RevoluteJoint.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "RevoluteJoint.h" #include "System.h" #include "AtPointConstraintIJ.h" diff --git a/MbDCode/RevoluteJoint.cpp.bak b/MbDCode/RevoluteJoint.cpp.bak deleted file mode 100644 index 1e728ca..0000000 --- a/MbDCode/RevoluteJoint.cpp.bak +++ /dev/null @@ -1 +0,0 @@ -#include "RevoluteJoint.h" diff --git a/MbDCode/RevoluteJoint.h b/MbDCode/RevoluteJoint.h index 5c6ddb8..f3895f3 100644 --- a/MbDCode/RevoluteJoint.h +++ b/MbDCode/RevoluteJoint.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "AtPointJoint.h" diff --git a/MbDCode/RevoluteJoint.h.bak b/MbDCode/RevoluteJoint.h.bak deleted file mode 100644 index e6b94ac..0000000 --- a/MbDCode/RevoluteJoint.h.bak +++ /dev/null @@ -1,8 +0,0 @@ -#pragma once -#include "Joint.h" -namespace MbD { - class RevoluteJoint : public Joint - { - }; -} - diff --git a/MbDCode/RowTypeMatrix.cpp b/MbDCode/RowTypeMatrix.cpp index 219ec35..c607e8e 100644 --- a/MbDCode/RowTypeMatrix.cpp +++ b/MbDCode/RowTypeMatrix.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "RowTypeMatrix.h" using namespace MbD; diff --git a/MbDCode/RowTypeMatrix.h b/MbDCode/RowTypeMatrix.h index a9192eb..6cbd921 100644 --- a/MbDCode/RowTypeMatrix.h +++ b/MbDCode/RowTypeMatrix.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "Array.h" @@ -14,13 +22,15 @@ namespace MbD { RowTypeMatrix(std::initializer_list list) : Array{ list } {} void copyFrom(std::shared_ptr> x); virtual void zeroSelf() = 0; + //double maxMagnitude() override; + int numberOfElements() override; + int nrow() { return (int) this->size(); } int ncol() { return this->at(0)->numberOfElements(); } - int numberOfElements() override; }; template @@ -30,6 +40,17 @@ namespace MbD { this->at(i)->copyFrom(x->at(i)); } } + //template + //inline double RowTypeMatrix::maxMagnitude() + //{ + // auto max = 0.0; + // for (int i = 0; i < this->size(); i++) + // { + // auto element = this->at(i)->maxMagnitude(); + // if (max < element) max = element; + // } + // return max; + //} template inline int RowTypeMatrix::numberOfElements() { diff --git a/MbDCode/ScalarNewtonRaphson.cpp b/MbDCode/ScalarNewtonRaphson.cpp index 6007cf4..58b976c 100644 --- a/MbDCode/ScalarNewtonRaphson.cpp +++ b/MbDCode/ScalarNewtonRaphson.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "ScalarNewtonRaphson.h" #include "SystemSolver.h" diff --git a/MbDCode/ScalarNewtonRaphson.h b/MbDCode/ScalarNewtonRaphson.h index 604687b..3504410 100644 --- a/MbDCode/ScalarNewtonRaphson.h +++ b/MbDCode/ScalarNewtonRaphson.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "NewtonRaphson.h" diff --git a/MbDCode/ScrewConstraintIJ.cpp b/MbDCode/ScrewConstraintIJ.cpp index 1e57e94..c63e537 100644 --- a/MbDCode/ScrewConstraintIJ.cpp +++ b/MbDCode/ScrewConstraintIJ.cpp @@ -1,10 +1,18 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include #include "ScrewConstraintIJ.h" using namespace MbD; -MbD::ScrewConstraintIJ::ScrewConstraintIJ(EndFrmcptr frmi, EndFrmcptr frmj) : ConstraintIJ(frmi, frmj) +MbD::ScrewConstraintIJ::ScrewConstraintIJ(EndFrmsptr frmi, EndFrmsptr frmj) : ConstraintIJ(frmi, frmj) { } diff --git a/MbDCode/ScrewConstraintIJ.h b/MbDCode/ScrewConstraintIJ.h index dfe33a6..e0dbc1a 100644 --- a/MbDCode/ScrewConstraintIJ.h +++ b/MbDCode/ScrewConstraintIJ.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "ConstraintIJ.h" @@ -9,7 +17,7 @@ namespace MbD { { //zIeJeIe thezIeJe pitch public: - ScrewConstraintIJ(EndFrmcptr frmi, EndFrmcptr frmj); + ScrewConstraintIJ(EndFrmsptr frmi, EndFrmsptr frmj); void calcPostDynCorrectorIteration() override; virtual void init_zthez(); diff --git a/MbDCode/ScrewConstraintIqcJc.cpp b/MbDCode/ScrewConstraintIqcJc.cpp index be49b11..74cb241 100644 --- a/MbDCode/ScrewConstraintIqcJc.cpp +++ b/MbDCode/ScrewConstraintIqcJc.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include #include "ScrewConstraintIqcJc.h" @@ -8,7 +16,7 @@ using namespace MbD; -MbD::ScrewConstraintIqcJc::ScrewConstraintIqcJc(EndFrmcptr frmi, EndFrmcptr frmj) : ScrewConstraintIJ(frmi, frmj) +MbD::ScrewConstraintIqcJc::ScrewConstraintIqcJc(EndFrmsptr frmi, EndFrmsptr frmj) : ScrewConstraintIJ(frmi, frmj) { } diff --git a/MbDCode/ScrewConstraintIqcJc.h b/MbDCode/ScrewConstraintIqcJc.h index 241ea3b..ef613f7 100644 --- a/MbDCode/ScrewConstraintIqcJc.h +++ b/MbDCode/ScrewConstraintIqcJc.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "ScrewConstraintIJ.h" @@ -7,7 +15,7 @@ namespace MbD { { //pGpXI pGpEI ppGpXIpEI ppGpEIpEI iqXI iqEI public: - ScrewConstraintIqcJc(EndFrmcptr frmi, EndFrmcptr frmj); + ScrewConstraintIqcJc(EndFrmsptr frmi, EndFrmsptr frmj); void addToJointForceI(FColDsptr col) override; void addToJointTorqueI(FColDsptr col) override; diff --git a/MbDCode/ScrewConstraintIqcJqc.cpp b/MbDCode/ScrewConstraintIqcJqc.cpp index c76bc10..1ee6649 100644 --- a/MbDCode/ScrewConstraintIqcJqc.cpp +++ b/MbDCode/ScrewConstraintIqcJqc.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include #include "ScrewConstraintIqcJqc.h" @@ -8,7 +16,7 @@ using namespace MbD; -MbD::ScrewConstraintIqcJqc::ScrewConstraintIqcJqc(EndFrmcptr frmi, EndFrmcptr frmj) : ScrewConstraintIqcJc(frmi, frmj) +MbD::ScrewConstraintIqcJqc::ScrewConstraintIqcJqc(EndFrmsptr frmi, EndFrmsptr frmj) : ScrewConstraintIqcJc(frmi, frmj) { } diff --git a/MbDCode/ScrewConstraintIqcJqc.h b/MbDCode/ScrewConstraintIqcJqc.h index 3b877fd..5aae189 100644 --- a/MbDCode/ScrewConstraintIqcJqc.h +++ b/MbDCode/ScrewConstraintIqcJqc.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "ScrewConstraintIqcJc.h" @@ -7,7 +15,7 @@ namespace MbD { { //pGpXJ pGpEJ ppGpEIpXJ ppGpEIpEJ ppGpEJpEJ iqXJ iqEJ public: - ScrewConstraintIqcJqc(EndFrmcptr frmi, EndFrmcptr frmj); + ScrewConstraintIqcJqc(EndFrmsptr frmi, EndFrmsptr frmj); void calc_pGpEJ(); void calc_pGpXJ(); diff --git a/MbDCode/ScrewJoint.cpp b/MbDCode/ScrewJoint.cpp index eecbf3d..9885d61 100644 --- a/MbDCode/ScrewJoint.cpp +++ b/MbDCode/ScrewJoint.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "ScrewJoint.h" #include "CREATE.h" #include "System.h" @@ -28,7 +36,7 @@ void MbD::ScrewJoint::initializeGlobally() } } -void MbD::ScrewJoint::connectsItoJ(EndFrmcptr frmIe, EndFrmcptr frmJe) +void MbD::ScrewJoint::connectsItoJ(EndFrmsptr frmIe, EndFrmsptr frmJe) { //"Subsequent prescribed motions may make frmIe, frmJe become prescribed end frames." //"Use newCopyEndFrameqc to prevent efrms from becoming EndFrameqct." diff --git a/MbDCode/ScrewJoint.h b/MbDCode/ScrewJoint.h index 5971cd4..fb057b3 100644 --- a/MbDCode/ScrewJoint.h +++ b/MbDCode/ScrewJoint.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "Joint.h" @@ -10,7 +18,7 @@ namespace MbD { ScrewJoint(); ScrewJoint(const char* str); void initializeGlobally() override; - void connectsItoJ(EndFrmcptr frmI, EndFrmcptr frmJ) override; + void connectsItoJ(EndFrmsptr frmI, EndFrmsptr frmJ) override; double pitch, aConstant; }; diff --git a/MbDCode/SimulationStoppingError.cpp b/MbDCode/SimulationStoppingError.cpp index f0a2537..fd635e4 100644 --- a/MbDCode/SimulationStoppingError.cpp +++ b/MbDCode/SimulationStoppingError.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "SimulationStoppingError.h" using namespace MbD; diff --git a/MbDCode/SimulationStoppingError.h b/MbDCode/SimulationStoppingError.h index 0fcf478..a9ed544 100644 --- a/MbDCode/SimulationStoppingError.h +++ b/MbDCode/SimulationStoppingError.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include diff --git a/MbDCode/Sine.cpp b/MbDCode/Sine.cpp new file mode 100644 index 0000000..f8c3440 --- /dev/null +++ b/MbDCode/Sine.cpp @@ -0,0 +1,32 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#include "Sine.h" +#include "Cosine.h" + +using namespace MbD; + +MbD::Sine::Sine(Symsptr arg) : FunctionX(arg) +{ +} + +double MbD::Sine::getValue() +{ + return std::sin(xx->getValue()); +} + +Symsptr MbD::Sine::differentiateWRTx() +{ + return std::make_shared(xx); +} + +std::ostream& MbD::Sine::printOn(std::ostream& s) const +{ + s << "sin(" << xx << ")"; + return s; +} diff --git a/MbDCode/Sine.h b/MbDCode/Sine.h new file mode 100644 index 0000000..e278ffd --- /dev/null +++ b/MbDCode/Sine.h @@ -0,0 +1,27 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#pragma once + +#include "FunctionX.h" + +namespace MbD { + class Sine : public FunctionX + { + // + public: + Sine() = default; + Sine(Symsptr arg); + double getValue() override; + Symsptr differentiateWRTx() override; + + std::ostream& printOn(std::ostream& s) const override; + + }; +} + diff --git a/MbDCode/SingularMatrixError.cpp b/MbDCode/SingularMatrixError.cpp index 0c9f8ee..8bde229 100644 --- a/MbDCode/SingularMatrixError.cpp +++ b/MbDCode/SingularMatrixError.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "SingularMatrixError.h" using namespace MbD; diff --git a/MbDCode/SingularMatrixError.h b/MbDCode/SingularMatrixError.h index 1488e13..5127943 100644 --- a/MbDCode/SingularMatrixError.h +++ b/MbDCode/SingularMatrixError.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include diff --git a/MbDCode/Solver.cpp b/MbDCode/Solver.cpp index f9415a3..953abca 100644 --- a/MbDCode/Solver.cpp +++ b/MbDCode/Solver.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include #include "Solver.h" diff --git a/MbDCode/Solver.h b/MbDCode/Solver.h index 971e075..bd90905 100644 --- a/MbDCode/Solver.h +++ b/MbDCode/Solver.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include diff --git a/MbDCode/SparseColumn.cpp b/MbDCode/SparseColumn.cpp index 3febf76..312df8b 100644 --- a/MbDCode/SparseColumn.cpp +++ b/MbDCode/SparseColumn.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "SparseColumn.h" using namespace MbD; diff --git a/MbDCode/SparseColumn.h b/MbDCode/SparseColumn.h index fb32fcd..d8de56c 100644 --- a/MbDCode/SparseColumn.h +++ b/MbDCode/SparseColumn.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "SparseVector.h" diff --git a/MbDCode/SparseMatrix.cpp b/MbDCode/SparseMatrix.cpp index 30010a1..04a9922 100644 --- a/MbDCode/SparseMatrix.cpp +++ b/MbDCode/SparseMatrix.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "SparseMatrix.h" using namespace MbD; diff --git a/MbDCode/SparseMatrix.h b/MbDCode/SparseMatrix.h index 7402750..0b53c52 100644 --- a/MbDCode/SparseMatrix.h +++ b/MbDCode/SparseMatrix.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include @@ -8,10 +16,14 @@ namespace MbD { template - class SparseMatrix : public RowTypeMatrix>> + class SparseMatrix; + using SpMatDsptr = std::shared_ptr>; + + template + class SparseMatrix : public RowTypeMatrix> { public: - SparseMatrix(int m) : RowTypeMatrix>>(m) + SparseMatrix(int m) : RowTypeMatrix>(m) { } SparseMatrix(int m, int n) { @@ -28,35 +40,35 @@ namespace MbD { this->push_back(row); } } - void atiput(int i, std::shared_ptr> spRow); - void atijplusDiagonalMatrix(int i, int j, std::shared_ptr> diagMat); - void atijminusDiagonalMatrix(int i, int j, std::shared_ptr> diagMat); + void atiput(int i, SpRowsptr spRow); + void atijplusDiagonalMatrix(int i, int j, DiagMatDsptr diagMat); + void atijminusDiagonalMatrix(int i, int j, DiagMatDsptr diagMat); double sumOfSquares() override; void zeroSelf() override; - void atijplusFullRow(int i, int j, std::shared_ptr> fullRow); - void atijplusFullColumn(int i, int j, std::shared_ptr> fullCol); - void atijplusFullMatrix(int i, int j, std::shared_ptr> fullMat); - void atijminusFullMatrix(int i, int j, std::shared_ptr> fullMat); - void atijplusTransposeFullMatrix(int i, int j, std::shared_ptr> fullMat); - void atijplusFullMatrixtimes(int i, int j, std::shared_ptr> fullMat, T factor); + void atijplusFullRow(int i, int j, FRowsptr fullRow); + void atijplusFullColumn(int i, int j, FColsptr fullCol); + void atijplusFullMatrix(int i, int j, FMatsptr fullMat); + void atijminusFullMatrix(int i, int j, FMatsptr fullMat); + void atijplusTransposeFullMatrix(int i, int j, FMatsptr fullMat); + void atijplusFullMatrixtimes(int i, int j, FMatsptr fullMat, T factor); void atijplusNumber(int i, int j, double value); void atijminusNumber(int i, int j, double value); void atijput(int i, int j, T value); + double maxMagnitude() override; + FColsptr timesFullColumn(FColsptr fullCol); std::ostream& printOn(std::ostream& s) const override; - std::shared_ptr> timesFullColumn(std::shared_ptr> fullCol); }; - using SpMatDsptr = std::shared_ptr>; template - inline void SparseMatrix::atiput(int i, std::shared_ptr> spRow) + inline void SparseMatrix::atiput(int i, SpRowsptr spRow) { this->at(i) = spRow; } template - inline void SparseMatrix::atijplusDiagonalMatrix(int i, int j, std::shared_ptr> diagMat) + inline void SparseMatrix::atijplusDiagonalMatrix(int i, int j, DiagMatDsptr diagMat) { auto n = diagMat->nrow(); for (int ii = 0; ii < n; ii++) @@ -66,7 +78,7 @@ namespace MbD { } template<> - inline void SparseMatrix::atijminusDiagonalMatrix(int i1, int j1, std::shared_ptr> diagMat) + inline void SparseMatrix::atijminusDiagonalMatrix(int i1, int j1, DiagMatDsptr diagMat) { auto n = diagMat->nrow(); for (int ii = 0; ii < n; ii++) @@ -92,12 +104,12 @@ namespace MbD { } } template - inline void SparseMatrix::atijplusFullRow(int i, int j, std::shared_ptr> fullRow) + inline void SparseMatrix::atijplusFullRow(int i, int j, FRowsptr fullRow) { this->at(i)->atiplusFullRow(j, fullRow); } template - inline void SparseMatrix::atijplusFullColumn(int i, int j, std::shared_ptr> fullCol) + inline void SparseMatrix::atijplusFullColumn(int i, int j, FColsptr fullCol) { for (int ii = 0; ii < fullCol->size(); ii++) { @@ -105,7 +117,7 @@ namespace MbD { } } template - inline void SparseMatrix::atijplusFullMatrix(int i, int j, std::shared_ptr> fullMat) + inline void SparseMatrix::atijplusFullMatrix(int i, int j, FMatsptr fullMat) { for (int ii = 0; ii < fullMat->nrow(); ii++) { @@ -113,7 +125,7 @@ namespace MbD { } } template - inline void SparseMatrix::atijminusFullMatrix(int i, int j, std::shared_ptr> fullMat) + inline void SparseMatrix::atijminusFullMatrix(int i, int j, FMatsptr fullMat) { for (int ii = 0; ii < fullMat->nrow(); ii++) { @@ -121,7 +133,7 @@ namespace MbD { } } template - inline void SparseMatrix::atijplusTransposeFullMatrix(int i, int j, std::shared_ptr> fullMat) + inline void SparseMatrix::atijplusTransposeFullMatrix(int i, int j, FMatsptr fullMat) { for (int ii = 0; ii < fullMat->nrow(); ii++) { @@ -129,7 +141,7 @@ namespace MbD { } } template - inline void SparseMatrix::atijplusFullMatrixtimes(int i, int j, std::shared_ptr> fullMat, T factor) + inline void SparseMatrix::atijplusFullMatrixtimes(int i, int j, FMatsptr fullMat, T factor) { for (int ii = 0; ii < fullMat->nrow(); ii++) { @@ -152,6 +164,17 @@ namespace MbD { this->at(i)->atiput(j, value); } template + inline double SparseMatrix::maxMagnitude() + { + auto max = 0.0; + for (int i = 0; i < this->size(); i++) + { + auto element = this->at(i)->maxMagnitude(); + if (max < element) max = element; + } + return max; + } + template inline std::ostream& SparseMatrix::printOn(std::ostream& s) const { s << "SpMat[" << std::endl; @@ -163,7 +186,7 @@ namespace MbD { return s; } template - inline std::shared_ptr> SparseMatrix::timesFullColumn(std::shared_ptr> fullCol) + inline FColsptr SparseMatrix::timesFullColumn(FColsptr fullCol) { //"a*b = a(i,j)b(j) sum j." auto nrow = this->nrow(); diff --git a/MbDCode/SparseRow.cpp b/MbDCode/SparseRow.cpp index 511dc06..3f48848 100644 --- a/MbDCode/SparseRow.cpp +++ b/MbDCode/SparseRow.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "SparseRow.h" using namespace MbD; diff --git a/MbDCode/SparseRow.h b/MbDCode/SparseRow.h index 42d63a0..64ea662 100644 --- a/MbDCode/SparseRow.h +++ b/MbDCode/SparseRow.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include @@ -7,6 +15,12 @@ #include "FullRow.h" namespace MbD { + template + class SparseRow; + template + using SpRowsptr = std::shared_ptr>; + using SpRowDsptr = std::shared_ptr>; + template class SparseRow : public SparseVector { @@ -15,17 +29,16 @@ namespace MbD { SparseRow(int n) : SparseVector(n) {} SparseRow(std::initializer_list> list) : SparseVector{ list } {} SparseRow(std::initializer_list> list) : SparseVector{ list } {} - std::shared_ptr> timesconditionedWithTol(double scaling, double tol); - std::shared_ptr> conditionedWithTol(double tol); - void atiplusFullRow(int j, std::shared_ptr> fullRow); - void atiminusFullRow(int j, std::shared_ptr> fullRow); - void atiplusFullRowtimes(int j, std::shared_ptr> fullRow, double factor); - T timesFullColumn(std::shared_ptr> fullCol); + SpRowDsptr timesconditionedWithTol(double scaling, double tol); + SpRowDsptr conditionedWithTol(double tol); + void atiplusFullRow(int j, FRowsptr fullRow); + void atiminusFullRow(int j, FRowsptr fullRow); + void atiplusFullRowtimes(int j, FRowsptr fullRow, double factor); + T timesFullColumn(FColsptr fullCol); }; - using SpRowDsptr = std::shared_ptr>; template<> - inline std::shared_ptr> SparseRow::timesconditionedWithTol(double scaling, double tol) + inline SpRowDsptr SparseRow::timesconditionedWithTol(double scaling, double tol) { auto answer = std::make_shared>(this->numberOfElements()); for (auto const& keyValue : *this) @@ -36,7 +49,7 @@ namespace MbD { return answer; } template<> - inline std::shared_ptr> SparseRow::conditionedWithTol(double tol) + inline SpRowDsptr SparseRow::conditionedWithTol(double tol) { auto answer = std::make_shared>(this->numberOfElements()); for (auto const& keyValue : *this) @@ -47,7 +60,7 @@ namespace MbD { return answer; } template - inline void SparseRow::atiplusFullRow(int j, std::shared_ptr> fullRow) + inline void SparseRow::atiplusFullRow(int j, FRowsptr fullRow) { for (int jj = 0; jj < fullRow->size(); jj++) { @@ -55,7 +68,7 @@ namespace MbD { } } template - inline void SparseRow::atiminusFullRow(int j, std::shared_ptr> fullRow) + inline void SparseRow::atiminusFullRow(int j, FRowsptr fullRow) { for (int jj = 0; jj < fullRow->size(); jj++) { @@ -63,7 +76,7 @@ namespace MbD { } } template - inline void SparseRow::atiplusFullRowtimes(int j, std::shared_ptr> fullRow, double factor) + inline void SparseRow::atiplusFullRowtimes(int j, FRowsptr fullRow, double factor) { for (int jj = 0; jj < fullRow->size(); jj++) { @@ -71,7 +84,7 @@ namespace MbD { } } template - inline T SparseRow::timesFullColumn(std::shared_ptr> fullCol) + inline T SparseRow::timesFullColumn(FColsptr fullCol) { T sum = 0.0; for (auto const& keyValue : *this) { diff --git a/MbDCode/SparseVector.cpp b/MbDCode/SparseVector.cpp index c5b357b..4dcd6aa 100644 --- a/MbDCode/SparseVector.cpp +++ b/MbDCode/SparseVector.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "SparseVector.h" using namespace MbD; diff --git a/MbDCode/SparseVector.h b/MbDCode/SparseVector.h index cbde3f3..b2695c9 100644 --- a/MbDCode/SparseVector.h +++ b/MbDCode/SparseVector.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include diff --git a/MbDCode/SphSphJoint.cpp b/MbDCode/SphSphJoint.cpp index f1fdfe9..0224638 100644 --- a/MbDCode/SphSphJoint.cpp +++ b/MbDCode/SphSphJoint.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "SphSphJoint.h" #include "CREATE.h" #include "DistanceConstraintIJ.h" diff --git a/MbDCode/SphSphJoint.h b/MbDCode/SphSphJoint.h index 5ac1728..608fcd4 100644 --- a/MbDCode/SphSphJoint.h +++ b/MbDCode/SphSphJoint.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "CompoundJoint.h" diff --git a/MbDCode/SphericalJoint.cpp b/MbDCode/SphericalJoint.cpp index 9b534a4..e15bca9 100644 --- a/MbDCode/SphericalJoint.cpp +++ b/MbDCode/SphericalJoint.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "SphericalJoint.h" #include "CREATE.h" #include "System.h" diff --git a/MbDCode/SphericalJoint.h b/MbDCode/SphericalJoint.h index f1631a7..44b597c 100644 --- a/MbDCode/SphericalJoint.h +++ b/MbDCode/SphericalJoint.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "AtPointJoint.h" diff --git a/MbDCode/StableBackwardDifference.cpp b/MbDCode/StableBackwardDifference.cpp index 0fdfd46..c594e0f 100644 --- a/MbDCode/StableBackwardDifference.cpp +++ b/MbDCode/StableBackwardDifference.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "StableBackwardDifference.h" using namespace MbD; diff --git a/MbDCode/StableBackwardDifference.h b/MbDCode/StableBackwardDifference.h index f8a7d25..4393e88 100644 --- a/MbDCode/StableBackwardDifference.h +++ b/MbDCode/StableBackwardDifference.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "LinearMultiStepMethod.h" diff --git a/MbDCode/StateData.cpp b/MbDCode/StateData.cpp index 39544dd..ec3809f 100644 --- a/MbDCode/StateData.cpp +++ b/MbDCode/StateData.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include "StateData.h" using namespace MbD; diff --git a/MbDCode/StateData.h b/MbDCode/StateData.h index b63f38d..e913445 100644 --- a/MbDCode/StateData.h +++ b/MbDCode/StateData.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "Item.h" diff --git a/MbDCode/Sum.cpp b/MbDCode/Sum.cpp index 7933ab3..1c5533a 100644 --- a/MbDCode/Sum.cpp +++ b/MbDCode/Sum.cpp @@ -1,35 +1,55 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#include +#include + #include "Sum.h" #include "Constant.h" +#include using namespace MbD; -Symsptr Sum::timesSum(Symsptr sptr, Symsptr aSum) +Symsptr MbD::Sum::parseExpression(std::string& expression) { - auto answer = std::make_shared(); - auto sumTERMs = aSum->getTerms(); - for (const auto& term : *terms) { - for (const auto& sumTERM : *sumTERMs) { - Symsptr termTERM; - if (sumTERM->isProduct()) { - termTERM = term->timesProduct(term, sumTERM); - } - else { - termTERM = term->timesFunction(term, sumTERM); - } - answer->terms->push_back(termTERM); - } + std::istringstream iss(expression); + auto sum = std::make_shared(); + sum->parse(iss); + return sum->simplified(sum); +} + +void MbD::Sum::parse(std::istringstream& iss) +{ + iss >> std::ws; + char c = iss.peek(); + if (c == '+') { + parsePlusTerm(iss); + } + else if (c == '-') { + parseMinusTerm(iss); + } + else { + parseTerm(iss); } - return answer; } -Symsptr Sum::timesProduct(Symsptr sptr, Symsptr product) +void MbD::Sum::parseTerm(std::istringstream& iss) { - return product->timesSum(product, sptr); } -Symsptr Sum::timesFunction(Symsptr sptr, Symsptr function) +void MbD::Sum::parsePlusTerm(std::istringstream& iss) +{ + iss.get(); + +} + +void MbD::Sum::parseMinusTerm(std::istringstream& iss) { - return function->timesSum(function, sptr); } Symsptr Sum::expandUntil(Symsptr sptr, std::shared_ptr> set) @@ -112,6 +132,23 @@ double Sum::getValue() return answer; } +Symsptr MbD::Sum::clonesptr() +{ + return std::make_shared(*this); +} + +Symsptr MbD::Sum::differentiateWRT(Symsptr var) +{ + auto derivatives = std::make_shared>(); + std::transform(terms->begin(), terms->end(), + std::back_inserter(*derivatives), + [var](Symsptr term) { return term->differentiateWRT(var); } + ); + auto answer = std::make_shared(); + answer->terms = derivatives; + return answer; +} + std::ostream& Sum::printOn(std::ostream& s) const { s << "("; diff --git a/MbDCode/Sum.h b/MbDCode/Sum.h index 8c0e4a7..a40de7f 100644 --- a/MbDCode/Sum.h +++ b/MbDCode/Sum.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include "FunctionWithManyArgs.h" @@ -6,19 +14,26 @@ namespace MbD { class Sum : public FunctionWithManyArgs { public: + static Symsptr parseExpression(std::string& expression); + void parse(std::istringstream& iss); + void parseTerm(std::istringstream& iss); + void parsePlusTerm(std::istringstream& iss); + void parseMinusTerm(std::istringstream& iss); + Sum() : FunctionWithManyArgs() {} Sum(Symsptr term) : FunctionWithManyArgs(term) {} Sum(Symsptr term, Symsptr term1) : FunctionWithManyArgs(term, term1) {} Sum(Symsptr term, Symsptr term1, Symsptr term2) : FunctionWithManyArgs(term, term1, term2) {} Sum(std::shared_ptr> _terms) : FunctionWithManyArgs(_terms) {} - Symsptr timesSum(Symsptr sptr, Symsptr sum) override; - Symsptr timesProduct(Symsptr sptr, Symsptr product) override; - Symsptr timesFunction(Symsptr sptr, Symsptr function) override; Symsptr expandUntil(Symsptr sptr, std::shared_ptr> set) override; Symsptr simplifyUntil(Symsptr sptr, std::shared_ptr> set) override; bool isSum() override; double getValue() override; + Symsptr clonesptr() override; + Symsptr differentiateWRT(Symsptr var) override; + std::ostream& printOn(std::ostream& s) const override; + }; } diff --git a/MbDCode/Symbolic.cpp b/MbDCode/Symbolic.cpp index f862d85..14ad524 100644 --- a/MbDCode/Symbolic.cpp +++ b/MbDCode/Symbolic.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include #include #include @@ -6,6 +14,7 @@ #include "Constant.h" #include "Product.h" #include "Sum.h" +#include "Power.h" using namespace MbD; @@ -13,16 +22,82 @@ Symbolic::Symbolic() { } +Symsptr MbD::Symbolic::times(Symsptr arg, Symsptr arg1) +{ + if (arg->isProduct()) { + if (arg1->isProduct()) { + auto newTerms = arg->getTerms(); + auto arg1Terms = arg1->getTerms(); + newTerms->insert(newTerms->end(), arg1Terms->begin(), arg1Terms->end()); + return std::make_shared(newTerms); + } + else { + auto newTerms = arg->getTerms(); + newTerms->insert(newTerms->end(), arg1); + return std::make_shared(newTerms); + } + } + else { + if (arg1->isProduct()) { + auto newTerms = arg1->getTerms(); + newTerms->insert(newTerms->begin(), arg); + return std::make_shared(newTerms); + } + else { + return std::make_shared(arg, arg1); + } + } +} + +Symsptr MbD::Symbolic::sum(Symsptr arg, Symsptr arg1) +{ + if (arg->isSum()) { + if (arg1->isSum()) { + auto newTerms = arg->getTerms(); + auto arg1Terms = arg1->getTerms(); + newTerms->insert(newTerms->end(), arg1Terms->begin(), arg1Terms->end()); + return std::make_shared(newTerms); + } + else { + auto newTerms = arg->getTerms(); + newTerms->insert(newTerms->end(), arg1); + return std::make_shared(newTerms); + } + } + else { + if (arg1->isSum()) { + auto newTerms = arg1->getTerms(); + newTerms->insert(newTerms->begin(), arg); + return std::make_shared(newTerms); + } + else { + return std::make_shared(arg, arg1); + } + } +} + void Symbolic::initialize() { } -Symsptr Symbolic::differentiateWRT(Symsptr sptr, Symsptr var) +Symsptr MbD::Symbolic::differentiateWRT(Symsptr var) { assert(false); return Symsptr(); } +Symsptr MbD::Symbolic::simplified() +{ + //std::cout << "sptr " << *sptr << std::endl; + auto set = std::make_shared>(); + auto expanded = this->expandUntil(set); + //std::cout << "expanded " << *expanded << std::endl; + auto set1 = std::make_shared>(); + auto simplified = expanded->simplifyUntil(expanded, set1); + //std::cout << "simplified " << *simplified << std::endl; + return simplified; +} + Symsptr Symbolic::simplified(Symsptr sptr) { //std::cout << "sptr " << *sptr << std::endl; @@ -35,6 +110,12 @@ Symsptr Symbolic::simplified(Symsptr sptr) return simplified; } +Symsptr MbD::Symbolic::expandUntil(std::shared_ptr> set) +{ + assert(false); + return clonesptr(); +} + Symsptr Symbolic::expandUntil(Symsptr sptr, std::shared_ptr> set) { return sptr; @@ -45,24 +126,14 @@ Symsptr Symbolic::simplifyUntil(Symsptr sptr, std::shared_ptr(sptr); - return product->timesSum(product, sum); + return false; } -Symsptr Symbolic::timesProduct(Symsptr sptr, Symsptr product) +bool MbD::Symbolic::isOne() { - auto answer = std::make_shared(product->getTerms()); - auto& answerTerms = answer->terms; - answerTerms->insert(answerTerms->begin(), sptr); - return answer; -} - -Symsptr Symbolic::timesFunction(Symsptr sptr, Symsptr function) -{ - auto answer = std::make_shared(sptr, function); - return answer; + return false; } bool Symbolic::isSum() @@ -87,11 +158,40 @@ std::ostream& Symbolic::printOn(std::ostream& s) const std::shared_ptr> Symbolic::getTerms() { + assert(false); return std::make_shared>(); } +void MbD::Symbolic::addTerm(Symsptr trm) +{ + getTerms()->push_back(trm); +} + double Symbolic::getValue() { assert(false); return 0.0; } + +void MbD::Symbolic::createMbD(std::shared_ptr mbdSys, std::shared_ptr mbdUnits) +{ + assert(false); + return; +} + +Symsptr MbD::Symbolic::clonesptr() +{ + //Return shallow copy of *this wrapped in shared_ptr + assert(false); + return std::make_shared(*this); +} + +std::shared_ptr MbD::Symbolic::sptrConstant(double value) +{ + return std::make_shared(value); +} + +Symsptr MbD::Symbolic::raisedTo(Symsptr x, Symsptr y) +{ + return std::make_shared(x, y); +} diff --git a/MbDCode/Symbolic.h b/MbDCode/Symbolic.h index f2370ea..9973bfd 100644 --- a/MbDCode/Symbolic.h +++ b/MbDCode/Symbolic.h @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #pragma once #include @@ -6,34 +14,47 @@ #include #include "Math.h" +#include "System.h" +#include "Units.h" +//#include "Constant.h" namespace MbD { + class Constant; + class Symbolic; + using Symsptr = std::shared_ptr; class Symbolic : public Math { public: Symbolic(); + static Symsptr times(Symsptr arg, Symsptr arg1); + static Symsptr sum(Symsptr arg, Symsptr arg1); + static Symsptr raisedTo(Symsptr x, Symsptr y); + virtual void initialize(); - virtual std::shared_ptr differentiateWRT(std::shared_ptr sptr, std::shared_ptr var); - virtual std::shared_ptr simplified(std::shared_ptr sptr); - virtual std::shared_ptr expandUntil(std::shared_ptr sptr, std::shared_ptr>> set); - virtual std::shared_ptr simplifyUntil(std::shared_ptr sptr, std::shared_ptr>> set); - virtual std::shared_ptr timesSum(std::shared_ptr sptr, std::shared_ptr sum); - virtual std::shared_ptr timesProduct(std::shared_ptr sptr, std::shared_ptr product); - virtual std::shared_ptr timesFunction(std::shared_ptr sptr, std::shared_ptr function); + virtual Symsptr differentiateWRT(Symsptr var); + virtual Symsptr simplified(); + virtual Symsptr simplified(Symsptr sptr); + virtual Symsptr expandUntil(std::shared_ptr> set); + virtual Symsptr expandUntil(Symsptr sptr, std::shared_ptr> set); + virtual Symsptr simplifyUntil(Symsptr sptr, std::shared_ptr> set); + virtual bool isZero(); + virtual bool isOne(); virtual bool isSum(); virtual bool isProduct(); virtual bool isConstant(); - virtual std::ostream& printOn(std::ostream& s) const; - - virtual std::shared_ptr>> getTerms(); + virtual std::shared_ptr> getTerms(); + virtual void addTerm(Symsptr trm); virtual double getValue(); + virtual void createMbD(std::shared_ptr mbdSys, std::shared_ptr mbdUnits); + virtual Symsptr clonesptr(); + std::shared_ptr sptrConstant(double value); + virtual std::ostream& printOn(std::ostream& s) const; friend std::ostream& operator<<(std::ostream& s, const Symbolic& sym) { return sym.printOn(s); } }; - using Symsptr = std::shared_ptr; } diff --git a/MbDCode/SymbolicParser.cpp b/MbDCode/SymbolicParser.cpp new file mode 100644 index 0000000..ed54b44 --- /dev/null +++ b/MbDCode/SymbolicParser.cpp @@ -0,0 +1,504 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#include +#include +#include + +#include "SymbolicParser.h" +#include "BasicUserFunction.h" +#include "Constant.h" +#include "Sum.h" +#include "Product.h" +#include "CREATE.h" +#include "Power.h" +#include "Abs.h" +#include "ArcTan.h" +#include "Sine.h" +#include "Cosine.h" +#include "Negative.h" +#include "Reciprocal.h" +#include "GeneralSpline.h" + +void MbD::SymbolicParser::initialize() +{ + variables = std::make_shared>(); + stack = std::make_shared>(); + buffer = std::make_shared(); + +} + +void MbD::SymbolicParser::parseUserFunction(Symsptr userFunc) +{ + auto usrFunc = std::static_pointer_cast(userFunc); + units = usrFunc->units; + this->parseString(usrFunc->funcText); + Symsptr func = stack->top(); + stack->pop(); + stack->push(Symbolic::times(func, std::make_shared(usrFunc->myUnit))); +} + +void MbD::SymbolicParser::parseString(std::string expr) +{ + buffer->clear(); + while (!stack->empty()) { + stack->pop(); + } + source = std::make_shared(expr); + hereChar = source->get(); + prevEnd = -1; + scanToken(); + expression(); + if (tokenType != "end") expected("Nothing more"); + if (stack->size() != 1) notify("Stack size error, compiler bug!"); +} + +bool MbD::SymbolicParser::commaExpression() +{ + if (peekForTypeNoPush(",")) { + if (expression()) return true; + expected("expression"); + } + return false; +} + +bool MbD::SymbolicParser::plusTerm() +{ + if (peekForTypeNoPush("+")) { + if (plainTerm()) return true; + expected("plainTerm"); + } + return false; +} + +bool MbD::SymbolicParser::minusTerm() +{ + if (peekForTypeNoPush("-")) { + if (term()) { + auto trm = stack->top(); + stack->pop(); + auto negativeTrm = std::make_shared(trm); + auto sum = stack->top(); + sum->addTerm(negativeTrm); + return true; + } + expected("term"); + } + return false; +} + +bool MbD::SymbolicParser::plainTerm() +{ + if (term()) { + auto trm = stack->top(); + stack->pop(); + auto sum = stack->top(); + sum->addTerm(trm); + return true; + } + return false; +} + +bool MbD::SymbolicParser::term() +{ + auto product = std::make_shared(); + stack->push(product); + if (plainFunction()) { + while (timesFunction() || divideByFunction()) {} + auto term = stack->top(); + if (term->isProduct()) { + if (term->isOne()) { + stack->pop(); + } + else if (term->getTerms()->size() == 1) { + stack->pop(); + stack->push(term->getTerms()->front()); + } + } + else { + notify("SymbolicParser error"); + } + return true; + } + return false; +} + +bool MbD::SymbolicParser::plainFunction() +{ + if (symfunction()) { + auto trm = stack->top(); + stack->pop(); + auto product = stack->top(); + product->addTerm(trm); + return true; + } + return false; +} + +bool MbD::SymbolicParser::timesFunction() +{ + if (peekForTypeNoPush("*")) { + if (plainFunction()) return true; + expected("plainFunction"); + } + return false; +} + +bool MbD::SymbolicParser::divideByFunction() +{ + if (peekForTypeNoPush("/")) { + if (symfunction()) { + auto trm = stack->top(); + stack->pop(); + auto reciprocalTrm = std::make_shared(trm); + auto product = stack->top(); + product->addTerm(reciprocalTrm); + return true; + } + expected("function"); + } + return false; +} + +bool MbD::SymbolicParser::peekForTypeNoPush(std::string c) +{ + //"Test to see if tokenType matches aType. If so, advance to the next token, leaving the stack unchanged" + + if (tokenType == c) { + scanToken(); + return true; + } + return false; +} + +std::string MbD::SymbolicParser::scanToken() +{ + prevEnd = (int)source->tellg(); + prevEnd--; + while (std::isspace(hereChar) || isNextLineTag(hereChar)) { + hereChar = source->get(); + } + if (hereChar == EOF) { + mark = prevEnd + 1; + tokenType = "end"; + return token = ""; + } + mark = (int)source->tellg(); + if (std::isalpha(hereChar)) { + xLetter(); + } + else if (std::isdigit(hereChar)) { + xDigit(); + } + else if (hereChar == '\"') { + xDoubleQuote(); + } + else { + token = std::string(1, hereChar); + tokenType = token; + hereChar = source->get(); + } + return token; +} + +void MbD::SymbolicParser::xLetter() +{ + buffer->str(""); + buffer->clear(); + *buffer << hereChar; + while (true) { + hereChar = source->get(); + if (hereChar == EOF) break; + if (!std::isalnum(hereChar)) break; + *buffer << hereChar; + } + tokenType = "word"; + token = buffer->str(); +} + +void MbD::SymbolicParser::xDigit() +{ + tokenType = "number"; + if (hereChar != EOF) { + auto pos = source->tellg(); + std::streamoff offset = -1; + pos += offset; + source->seekg(pos); + } + double mantissa = 0.0; + int exponent = 0; + *source >> mantissa; + hereChar = source->peek(); + if ((hereChar == 'd') || (hereChar == 'e')) { + hereChar = source->get(); + char peekChar = source->peek(); + if (std::isdigit(peekChar) || (peekChar == '+') || (peekChar == '-')) { + *source >> exponent; + } + } + token = ""; + tokenNum = mantissa * std::pow(10.0, exponent); + hereChar = source->get(); +} + +void MbD::SymbolicParser::xDoubleQuote() +{ + tokenType = "comment"; + if (hereChar != EOF) { + auto pos = source->tellg(); + std::streamoff offset = -1; + pos += offset; + source->seekg(pos); + } + *source >> std::quoted(token); + hereChar = source->get(); +} + +bool MbD::SymbolicParser::symfunction() +{ + if (expressionInParentheses() || constant() || namedFunction() || variable()) { + raisedTo(); + return true; + } + else { + notify("Unrecognized symbol ->"); + } + return false; +} + +bool MbD::SymbolicParser::expression() +{ + auto sum = std::make_shared(); + stack->push(sum); + if (plusTerm() || minusTerm() || plainTerm()) { + while (plusTerm() || minusTerm()) {} + auto term = stack->top(); + if (term->isSum()) { + auto sum1 = std::static_pointer_cast(term); + if (sum1->isZero()) { + stack->pop(); + } + else if (sum1->terms->size() == 1) { + stack->pop(); + stack->push(sum1->terms->front()); + } + } + else { + notify("Compiler error!"); + } + return true; + } + return false; +} + +bool MbD::SymbolicParser::expressionInParentheses() +{ + if (peekForTypeNoPush("(")) { + if (expression()) { + if (peekForTypeNoPush(")")) { + return true; + } + else { + expected(")"); + } + } + else { + expected("expression"); + } + } + return false; +} + +bool MbD::SymbolicParser::constant() +{ + if (signedNumber()) { + return true; + } + if (peekForTypevalue("word", "pi")) { + auto symconst = std::make_shared(M_PI); + stack->push(symconst); + return true; + } + return false; +} + +bool MbD::SymbolicParser::namedFunction() +{ + return intrinsic(); +} + +bool MbD::SymbolicParser::intrinsic() +{ + Symsptr symfunc = nullptr; + if (peekForTypevalue("word", "abs")) { + symfunc = std::make_shared(); + } + else if (peekForTypevalue("word", "arctan")) { + symfunc = std::make_shared(); + } + else if (peekForTypevalue("word", "cos")) { + symfunc = std::make_shared(); + } + else if (peekForTypevalue("word", "sin")) { + symfunc = std::make_shared(); + } + else if (peekForTypevalue("word", "spline")) { + symfunc = std::make_shared(); + } + if (symfunc != nullptr) { + stack->push(symfunc); + if (peekForTypeNoPush("(")) { + auto startsize = stack->size(); + if (expression()) { + while (commaExpression()) {} + if (stack->size() > startsize) { + combineStackTo((int)startsize); + if (peekForTypeNoPush(")")) { + auto args = stack->top(); //args is a Sum with "terms" containing the actual arguments + stack->pop(); + auto func = std::static_pointer_cast(stack->top()); + func->arguments(args); + return true; + } + expected(")"); + } + } + expected("expression"); + } + expected("("); + } + return false; +} + +bool MbD::SymbolicParser::variable() +{ + if ((tokenType == "word") && (variables->count(token) == 1)) { + auto& var = variables->at(token); + stack->push(var); + scanToken(); + return true; + } + return false; +} + +bool MbD::SymbolicParser::raisedTo() +{ + if (peekForTypeNoPush("^")) { + if (symfunction()) { + auto exp = stack->top(); + stack->pop(); + auto base = stack->top(); + stack->pop(); + auto pow = std::make_shared(base, exp); + stack->push(pow); + return true; + } + expected("function"); + } + return false; +} + +bool MbD::SymbolicParser::expected(std::string msg) +{ + return false; +} + +bool MbD::SymbolicParser::signedNumber() +{ + if (tokenType == "number") { + auto symNum = std::make_shared(tokenNum); + stack->push(symNum); + scanToken(); + return true; + } + if ((token == "+") && (hereChar != EOF) && (std::isdigit(hereChar) || (hereChar == '.'))) { + //"no intervening delimiters" + scanToken(); + auto symNum = std::make_shared(tokenNum); + stack->push(symNum); + scanToken(); + return true; + } + if ((token == "-") && (hereChar != EOF) && (std::isdigit(hereChar) || (hereChar == '.'))) { + //"no intervening delimiters" + scanToken(); + auto symNum = std::make_shared(-tokenNum); + stack->push(symNum); + scanToken(); + return true; + } + return false; +} + +bool MbD::SymbolicParser::peekForTypevalue(std::string type, std::string symbol) +{ + if ((tokenType == type) && (token == symbol)) { + scanToken(); + return true; + } + return false; +} + +void MbD::SymbolicParser::notify(std::string msg) +{ + notifyat(msg, mark); +} + +void MbD::SymbolicParser::notifyat(std::string msg, int mrk) +{ + //"Temporarily reset source in order to get full contents" + auto p = source->tellg(); + source->seekg(0); + auto contents = source->str(); + source->seekg(p); + assert(false); + //SyntaxErrorException new + //targetClass : class; + //messageText: aString; + //source: contents; + //position: position; + //raiseSignal +} + +void MbD::SymbolicParser::combineStackTo(int pos) +{ + auto args = std::make_shared>(); + while (stack->size() > pos) { + auto arg = stack->top(); + stack->pop(); + args->push_back(arg); + } + std::reverse(args->begin(), args->end()); + auto sum = std::make_shared(); + sum->terms = args; + stack->push(sum); +} + +bool MbD::SymbolicParser::isNextLineTag(char c) +{ + //Skip tag in asmt file + auto pos = source->tellg(); + char ch = c; + if (ch == '<') { + ch = source->get(); + if (ch == 'n') { + ch = source->get(); + if (ch == '>') { + return true; + } + else { + source->seekg(pos); + } + } + else { + source->seekg(pos); + } + } + return false; +} + diff --git a/MbDCode/SymbolicParser.h b/MbDCode/SymbolicParser.h new file mode 100644 index 0000000..47283f1 --- /dev/null +++ b/MbDCode/SymbolicParser.h @@ -0,0 +1,69 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#pragma once + +#include +#include +#include + +#include "Symbolic.h" +#include "ASMTItem.h" +#include "ASMTItemIJ.h" + +namespace MbD { + class SymbolicParser + { + // + public: + void initialize(); + void parseUserFunction(Symsptr userFunc); + void parseString(std::string expr); + bool commaExpression(); + bool plusTerm(); + bool minusTerm(); + bool plainTerm(); + bool term(); + bool plainFunction(); + bool timesFunction(); + bool divideByFunction(); + bool peekForTypeNoPush(std::string c); + std::string scanToken(); + void xLetter(); + void xDigit(); + void xDoubleQuote(); + bool symfunction(); + bool expression(); + bool expressionInParentheses(); + bool constant(); + bool namedFunction(); + bool intrinsic(); + bool variable(); + bool raisedTo(); + bool expected(std::string msg); + bool signedNumber(); + bool peekForTypevalue(std::string type, std::string symbol); + void notify(std::string msg); + void notifyat(std::string msg, int mrk); + void combineStackTo(int pos); + bool isNextLineTag(char c); + + ASMTItem* owner = nullptr; + std::shared_ptr> variables; + std::shared_ptr> geoIJs; + std::shared_ptr units; + int mark = -1, prevEnd = -1; + char hereChar = '\0'; + std::string token, tokenType; + double tokenNum = -1.0e100; + std::shared_ptr source; + std::shared_ptr buffer; + std::shared_ptr> stack; + }; +} + diff --git a/MbDCode/SyntaxError.cpp b/MbDCode/SyntaxError.cpp new file mode 100644 index 0000000..06d43514 --- /dev/null +++ b/MbDCode/SyntaxError.cpp @@ -0,0 +1,15 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#include "SyntaxError.h" + +using namespace MbD; + +SyntaxError::SyntaxError(const std::string& msg) : std::runtime_error(msg) +{ +} diff --git a/MbDCode/SyntaxError.h b/MbDCode/SyntaxError.h new file mode 100644 index 0000000..aee253f --- /dev/null +++ b/MbDCode/SyntaxError.h @@ -0,0 +1,24 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + +#pragma once + +#include +#include +#include + +namespace MbD { + class SyntaxError : virtual public std::runtime_error + { + + public: + //SyntaxError(); + explicit SyntaxError(const std::string& msg); + virtual ~SyntaxError() noexcept {} + }; +} diff --git a/MbDCode/System.cpp b/MbDCode/System.cpp index b94fb1e..eee074c 100644 --- a/MbDCode/System.cpp +++ b/MbDCode/System.cpp @@ -1,3 +1,11 @@ +/*************************************************************************** + * Copyright (c) 2023 Ondsel, Inc. * + * * + * This file is part of OndselSolver. * + * * + * See LICENSE file for details about copyright. * + ***************************************************************************/ + #include #include "System.h" @@ -7,16 +15,15 @@ #include "SystemSolver.h" #include "Time.h" #include "CREATE.h" -#include "CADSystem.h" +#include "ExternalSystem.h" +#include "PrescribedMotion.h" using namespace MbD; System::System() { - initialize(); } System::System(const char* str) : Item(str) { - initialize(); } System* MbD::System::root() @@ -26,6 +33,7 @@ System* MbD::System::root() void System::initialize() { + externalSystem = std::make_shared(); time = CREATE