--- a +++ b/Body/AAUHuman/Trunk/TrunkModel.root.any @@ -0,0 +1,231 @@ +/** A detailed model of the human lumbar spine. + +Trunk.root.any is the root file for the lumbar spine model with muscles. + +You can read more about this lumbar spine model and some prelimary validation in the following article: +de Zee, M., L. Hansen, C. Wong, J. Rasmussen, and E.B. Simonsen. A generic detailed rigid-body +lumbar spine model. J.Biomech. 40: 1219-1227, 2007. + +Data of vertebrae dimensions is taken from Nissan and Gilad (J.Biomech. 19: 753-758, 1986) +and also the WholeBodyParameters. + +Some important facts about this model +- The model is only partly evaluated. More validation is needed for your own purpose. +- The model does not include facet joints. +- The muscles do not include the force-length-velocity relations (i.e. we use the socalled simple muscle model). + The only input parameter in the muscle model is the cross-sectional area multiplied by a factor. Daggfeldt and + Thorstensson (J.Biomech. 2003, 36: 815-825) didn't include the force-length-velocity relations either. +- Ligaments are not included in this model, because we do not have the necessary mechanical properties. This + is however not a problem, because it has been shown that the torque production from ligaments might not be very important + (Cholewicki and McGill, J.Biomech. 1992, 25: 17-28). + +The model contains a preliminary model of the Intra Abdominal pressure (IAP). In short the IAP is modelled as constant volume, +which, when squeezed from the side by the transversus muscles extends the spine by pushing on the rib thorax +and the pelvic floor. From the mathematical point-ofview,this lets the abdominal muscles function as spine +extensors, and they become part of the whole recruitment problem. The limit of the IAP was set to +26600 Pa, which was based on measurements on well-trained subjects (Essendrop, M., 2003. Significance of intra-abdominal pressure in work +related trunk-loading. Ph.D. Thesis, National Institute of Occupational Health, Denmark.) and using geometric/anatomic estimates of pressure surface +area and area centroids, which in turn determines the effective moment arm of the pressure. + +This root file contains the following include files: + +"Buckle.any" this is the main file for simulating the abdominal pressure +"SegmentsLumbar.any" this the segments for the lumbar part of the spine +"SegmentsThorax.any" this is the segment for thoracic part of the spine +"JointsLumbar.any" this file contains the joint definitions +"MuscleSpineLeft.any" this is the file which collects the muscles for the left side of the spine +"MuscleSpineRight.any" this is the file which collects the muscles for the right side of the spine + +"MuscleParametersSpineSimpleLeft.any" the muscle strength parameters for the left side of the spine +"MuscleParametersSpineSimpleRight.any" the muscle strength parameters for the right side of the spine + +*/ +AnyFolder &PsoasMajorRightRef=PsoasMajorRightReference; +AnyFolder &PsoasMajorLeftRef=PsoasMajorLeftReference; + + +/* Data section */ + +#ifndef BM_TRUNK_DATASET + // default dataset + #define BM_TRUNK_DATASET "TrunkData1.1" +#endif + +#ifndef BM_TRUNK_DATASET_PATH + #path BM_TRUNK_DATASET_PATH "../Trunk/"+BM_TRUNK_DATASET +#endif + +AnyFolder ModelParameters = { + #include "<BM_TRUNK_DATASET_PATH>/ModelParameters.any" +}; +AnyFolder STL = { + #include "<BM_TRUNK_DATASET_PATH>/STL/STL.any" +}; + +//AnyFolder DumpingData = { +// AnyFolder Lumbar = { +// #include "<BM_TRUNK_DATASET_PATH>/DumpLumbarNodes.any" +// }; +// AnyFolder Thorax = { +// #include "<BM_TRUNK_DATASET_PATH>/DumpThoracicNodes.any" +// }; +// AnyFolder CervicalSpine = { +// #include "<BM_TRUNK_DATASET_PATH>/DumpCervicalSpineNodes.any" +// }; +//}; + + +/* Segment & node construction section */ + + +// Including all spinal segments +#include "SegmentsLumbar.any" +#include "SegmentsCervicalSpine.any" + + +// Thorax can be either rigid or deformable with more segments + +AnyFolder SegmentsRibCage = {}; + + + +#include "SegmentsThorax.any" + +SegmentsRibCage = { + AnyFolder &SternumSeg = .SegmentsThorax.ThoraxSeg; + AnyFolder &SternalBodySeg = .SegmentsThorax.ThoraxSeg; + AnyFolder RibsRight = {}; + AnyFolder RibsLeft = {}; +}; + + +// nodes for muscle attachments +#include "NodesSegmentsThoraxIndividual.any" +#include "NodesForThoracicMuscles.any" +#include "RibCageMuscleNodes.any" + +// nodes for interaction with environment +#include "ContactPoints.any" + +/* Joint muscle section */ +AnyFolder JointMuscles = {}; + +#if BM_TRUNK_CERVICAL_MUSCLES == OFF + #include "JointMusclesCervical.any" //Adds muscles to the joints in the cervical spine +#endif + +//#if BM_TRUNK_THORACIC_MUSCLES == OFF +// //#include "JointMusclesThoracic.any" //Adds muscles to the joints in the cervical spine // PLACEHOLDER +//#endif + +#if BM_TRUNK_LUMBAR_MUSCLES == OFF + // if no muscles are defined at all - we will use the leg muscles for PsoasMajor + #include "JointMusclesLumbar.any" //Adds muscles to the joints in the lumbar spine +#endif + + +/* Section for kinematic constraints & stiffnesses */ + +#include "JointsLumbar.any" +#include "JointsCervical.any" + +/* Muscle definition section */ + +// switch cervical muscles on if flags provided +#if BM_TRUNK_CERVICAL_MUSCLES != OFF + #include "MusclesCervicalSpineRight.any" + #include "MusclesCervicalSpineLeft.any" + #include "MuscleParametersCervicalSpineSimpleRight.any" + #include "MuscleParametersCervicalSpineSimpleLeft.any" +#endif + + +#if BM_TRUNK_THORACIC_FUTURE + #include "MuscleParametersRibCage.any" + #include "MusclesRibCage.any" + // PLACEHOLDER FOR THE THORAX +#endif + + +AnyFolder MusclesSpineRight = {}; +AnyFolder MusclesSpineLeft= {}; + +// switch lumbar muscles on if flags provided (NEEDS A REVISIT WHEN THORAX IS ADDED) +#if BM_TRUNK_LUMBAR_MUSCLES != OFF + #include "Buckle.any" + #include "RectusAbdominis.any" + #include "Transversus.any" + + + #include "MusclesSpineRight.any" + #include "MusclesSpineLeft.any" + #include "Spinalis.any" + + #include "MuscleParametersSpineSimpleRight.any" + #include "MuscleParametersSpineSimpleLeft.any" +#endif + + +/* Soft tissue section */ + +#if BM_TRUNK_LUMBAR_LIGAMENTS == ON + #include "LumbarLigamentNodes.any" + #include "LigamentsLumbar.any" +#endif + +//#if BM_TRUNK_THORACIC_LIGAMENTS == ON +// // PLACEHOLDER FOR THE THORACIC SPINE LIGAMENTS +//#endif + +// #if BM_TRUNK_CERVICAL_LIGAMENTS == ON +// // PLACEHOLDER FOR THE CERVICAL SPINE LIGAMENTS +// #endif + +/* Other sections */ + + +//Summation of masses in the spine +AnyFolder MassSummation= +{ + AnyVar Mass=.SegmentsCervicalSpine.SkullSeg.Mass+ + .SegmentsThorax.ThoraxSeg.Mass+ + .SegmentsLumbar.L1Seg.Mass+ + .SegmentsLumbar.L2Seg.Mass+ + .SegmentsLumbar.L3Seg.Mass+ + .SegmentsLumbar.L4Seg.Mass+ + .SegmentsLumbar.L5Seg.Mass+ + .SegmentsLumbar.SacrumSeg.Mass+ + .SegmentsLumbar.PelvisSeg.Mass+ + .SegmentsCervicalSpine.C1Seg.Mass+ + .SegmentsCervicalSpine.C2Seg.Mass+ + .SegmentsCervicalSpine.C3Seg.Mass+ + .SegmentsCervicalSpine.C4Seg.Mass+ + .SegmentsCervicalSpine.C5Seg.Mass+ + .SegmentsCervicalSpine.C6Seg.Mass+ + .SegmentsCervicalSpine.C7Seg.Mass + #if BM_TRUNK_LUMBAR_MUSCLES != OFF + + + .Buckle.Segments.BuckleSeg.Mass+ + .Buckle.Slider1.Seg.Mass+ + .Buckle.Slider2.Seg.Mass+ + .Buckle.Slider3.Seg.Mass+ + .Buckle.Slider4.Seg.Mass+ + .Buckle.Slider5.Seg.Mass + #endif + ; +}; + +InterfaceFolder= +{ + #include "Interface.any" +}; + +#ifdef DONT_USE_INITIAL_POSITION_FROM_MANNEQUIN +#else +#include "InitialPositions.any" +#endif + + +MannequinValuesFolder ={ + #include "MannequinValuesFromModel.any" +};