[bfdf16]: / Body / AAUHuman / Trunk / TrunkModel.root.any

Download this file

232 lines (173 with data), 8.0 kB

/** 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"
};