// Create a single staged geared model with all necessary mass elastic and excitation data
// Number of branches: 	2
// Number of masses:	19

// Create inertias
dataModel.Add(Inertia1 = new Inertia() { X=50; Y=150 });
dataModel.Add(Inertia2 = new Inertia() { X=51; Y=150 });
dataModel.Add(Inertia3 = new Inertia() { X=52; Y=150 });
dataModel.Add(Cylinder1 = new Cylinder() { X=53; Y=150 } );
dataModel.Add(Cylinder2 = new Cylinder() { X=54; Y=150 } );
dataModel.Add(Cylinder3 = new Cylinder() { X=55; Y=150 } );
dataModel.Add(Cylinder4 = new Cylinder() { X=56; Y=150 } );
dataModel.Add(Cylinder5 = new Cylinder() { X=57; Y=150 } );
dataModel.Add(Cylinder6 = new Cylinder() { X=58; Y=150 } );
dataModel.Add(Inertia4 = new Inertia() { X=59; Y=150 } );
dataModel.Add(Inertia5 = new Inertia() { X=60; Y=150 } );
dataModel.Add(Inertia6 = new Inertia() { X=61; Y=150 } );
dataModel.Add(Inertia7 = new Inertia() { X=62; Y=150 } );
dataModel.Add(Inertia8 = new Inertia() { X=650; Y=250 } );
dataModel.Add(Inertia9 = new Inertia() { X=651; Y=250 } );
dataModel.Add(Inertia10 = new Inertia() { X=652; Y=250 } );
dataModel.Add(Inertia11 = new Inertia() { X=653; Y=250 } );
dataModel.Add(Inertia12 = new Inertia() { X=654; Y=250 } );
dataModel.Add(Propeller1 = new Propeller() { X=655; Y=250 } );

// Align inertias
AlignInertias(AlignDirection.Horizontal, [1,2,3,4,5,6,7,8,9,10,11,12,13]);
AlignInertias(AlignDirection.Horizontal, [14,15,16,17,18,19]);

// Add stiffness
dataModel.Add(DamperStiffness1 = new DamperStiffness(Inertia1, Inertia2));
dataModel.Add(Stiffness1 = new Stiffness(Inertia2, Inertia3));
dataModel.Add(Crankthrow1 = new Crankthrow(Inertia3, Cylinder1));
dataModel.Add(Crankthrow2 = new Crankthrow(Cylinder1, Cylinder2));
dataModel.Add(Crankthrow3 = new Crankthrow(Cylinder2, Cylinder3));
dataModel.Add(Crankthrow4 = new Crankthrow(Cylinder3, Cylinder4));
dataModel.Add(Crankthrow5 = new Crankthrow(Cylinder4, Cylinder5));
dataModel.Add(Crankthrow6 = new Crankthrow(Cylinder5, Cylinder6));
dataModel.Add(Crankthrow7 = new Crankthrow(Cylinder6, Inertia4));
dataModel.Add(Stiffness2 = new Stiffness(Inertia4, Inertia5));
dataModel.Add(Coupling1 = new Coupling(Inertia5, Inertia6));
dataModel.Add(Stiffness3 = new Stiffness(Inertia6, Inertia7));
dataModel.Add(Mesh1 = new Mesh(Inertia7, Inertia8));
dataModel.Add(Stiffness4 = new Stiffness(Inertia8, Inertia9));
dataModel.Add(Stiffness5 = new Stiffness(Inertia9, Inertia10));
dataModel.Add(Stiffness6 = new Stiffness(Inertia10, Inertia11));
dataModel.Add(Stiffness7 = new Stiffness(Inertia11, Inertia12));
dataModel.Add(Stiffness8 = new Stiffness(Inertia12, Propeller1));

// Group into damper
Damper1 = new Damper();
Damper1.Add(Inertia1);
Damper1.Add(Inertia2);
dataModel.Add(Damper1);

// Group into diesel engine
DieselEngine1 = new DieselEngine();
DieselEngine1.Add(Inertia3);
DieselEngine1.Add(Cylinder1);
DieselEngine1.Add(Cylinder2);
DieselEngine1.Add(Cylinder3);
DieselEngine1.Add(Cylinder4);
DieselEngine1.Add(Cylinder5);
DieselEngine1.Add(Cylinder6);
DieselEngine1.Add(Inertia4);
dataModel.Add(DieselEngine1);

// Group into elastic coupling
ElasticCoupling1 = new ElasticCoupling();
ElasticCoupling1.Add(Inertia5);
ElasticCoupling1.Add(Inertia6);
dataModel.Add(ElasticCoupling1);

// Group into gear
Gear1 = new Gear();
Gear1.Add(Inertia7);
Gear1.Add(Inertia8);
dataModel.Add(Gear1);


// Mass properties
dataModel.GetInertia(1).MomentOfInertia=0.23 kg*m^2;
dataModel.GetInertia(2).MomentOfInertia=0.13 kg*m^2;
dataModel.GetInertia(3).MomentOfInertia=0.13 kg*m^2;
dataModel.GetInertia(4).MomentOfInertia=0.24 kg*m^2;
dataModel.GetInertia(5).MomentOfInertia=0.11 kg*m^2;
dataModel.GetInertia(6).MomentOfInertia=0.22 kg*m^2;
dataModel.GetInertia(7).MomentOfInertia=0.22 kg*m^2;
dataModel.GetInertia(8).MomentOfInertia=0.14 kg*m^2;
dataModel.GetInertia(9).MomentOfInertia=0.22 kg*m^2;
dataModel.GetInertia(10).MomentOfInertia=1.99 kg*m^2;
dataModel.GetInertia(11).MomentOfInertia=0.48 kg*m^2;
dataModel.GetInertia(12).MomentOfInertia=0.30 kg*m^2;
dataModel.GetInertia(13).MomentOfInertia=0.30 kg*m^2;
dataModel.GetInertia(14).MomentOfInertia=0.49 kg*m^2;
dataModel.GetInertia(15).MomentOfInertia=0.05 kg*m^2;
dataModel.GetInertia(16).MomentOfInertia=0.47 kg*m^2;
dataModel.GetInertia(17).MomentOfInertia=0.80 kg*m^2;
dataModel.GetInertia(18).MomentOfInertia=0.75 kg*m^2;

// Stiffness properties
dataModel.GetStiffness(1).TorsionalStiffness=3.000E+003 N*m/rad;
dataModel.GetStiffness(2).TorsionalStiffness=1.000E+010 N*m/rad;
dataModel.GetStiffness(3).TorsionalStiffness=5.650E+006 N*m/rad;
dataModel.GetStiffness(4).TorsionalStiffness=3.720E+006 N*m/rad;
dataModel.GetStiffness(5).TorsionalStiffness=3.450E+006 N*m/rad;
dataModel.GetStiffness(6).TorsionalStiffness=3.800E+006 N*m/rad;
dataModel.GetStiffness(7).TorsionalStiffness=3.800E+006 N*m/rad;
dataModel.GetStiffness(8).TorsionalStiffness=3.800E+006 N*m/rad;
dataModel.GetStiffness(9).TorsionalStiffness=5.870E+006 N*m/rad;
dataModel.GetStiffness(10).TorsionalStiffness=1.000E+010 N*m/rad;
dataModel.GetStiffness(12).TorsionalStiffness=2.877E+005 N*m/rad;
dataModel.GetStiffness(13).TorsionalStiffness=1.000E+009 N*m/rad;
dataModel.GetStiffness(14).TorsionalStiffness=1.634E+006 N*m/rad;
dataModel.GetStiffness(15).TorsionalStiffness=1.000E+010 N*m/rad;
dataModel.GetStiffness(16).TorsionalStiffness=1.565E+005 N*m/rad;
dataModel.GetStiffness(17).TorsionalStiffness=2.100E+005 N*m/rad;
dataModel.GetStiffness(18).TorsionalStiffness=2.984E+005 N*m/rad;

// Outer diameter on shafts
dataModel.GetStiffness(1).DiamOuter = 0 m;
dataModel.GetStiffness(2).DiamOuter = 0 m;
dataModel.GetStiffness(3).DiamOuter = 0 m;
dataModel.GetStiffness(4).DiamOuter = 0.095 m;
dataModel.GetStiffness(5).DiamOuter = 0.095 m;
dataModel.GetStiffness(6).DiamOuter = 0.095 m;
dataModel.GetStiffness(7).DiamOuter = 0.095 m;
dataModel.GetStiffness(8).DiamOuter = 0.095 m;
dataModel.GetStiffness(9).DiamOuter = 0.095 m;
dataModel.GetStiffness(10).DiamOuter = 0 m;
dataModel.GetStiffness(11).DiamOuter = 0 m;
dataModel.GetStiffness(12).DiamOuter = 0 m;
dataModel.GetStiffness(13).DiamOuter = 0 m;
dataModel.GetStiffness(14).DiamOuter = 0 m;
dataModel.GetStiffness(15).DiamOuter = 0 m;
dataModel.GetStiffness(16).DiamOuter = 0.1 m;
dataModel.GetStiffness(17).DiamOuter = 0.1 m;
dataModel.GetStiffness(18).DiamOuter = 0.1 m;

// Mass damping
for (i=4;i<=9;i++) { dataModel.GetInertia(i).DynamicMagnifier = 70; }

// Shaft damping
dataModel.GetStiffness(3).DynamicMagnifier = 180;
for (s=4;s<=9;s++) { dataModel.GetStiffness(s).DynamicMagnifier = 45; }
dataModel.GetStiffness(10).DynamicMagnifier = 180;
dataModel.GetStiffness(11).DynamicMagnifier = 5.7;
dataModel.GetStiffness(12).DynamicMagnifier = 180;
dataModel.GetStiffness(14).DynamicMagnifier = 180;
dataModel.GetStiffness(16).DynamicMagnifier = 180;
dataModel.GetStiffness(17).DynamicMagnifier = 180;
dataModel.GetStiffness(18).DynamicMagnifier = 180;

// Propeller properties
Propeller1.PowerMCR = 480 kW;
Propeller1.SpeedMCR=690.9 rpm;
Propeller1.BladeNumber = 5;
Propeller1.DampingModel = "Schwaneke";
Propeller1.EntrainedWaterModel = "Schwaneke";
Propeller1.InertiaInAir = 9 kg*m^2;
Propeller1.DiameterBoss = 0.19 m;
Propeller1.DiameterPropeller = 1.1 m;
Propeller1.ExpandedAreaRatio = 0.82;
Propeller1.PitchRatio = 0.816;
Propeller1.FirstOrderTorqueAmplitude = 0.04;
Propeller1.SecondOrderTorqueAmplitude = 0.015;

// Diesel engine properties
DieselEngine1.Manufacturer = "Caterpillar";
DieselEngine1.TypeDesignation = "CAT 3406C";
DieselEngine1.NumberOfStrokes = "4";
DieselEngine1.Bore = 0.137 m;
DieselEngine1.StrokeLength = 0.165 m;
DieselEngine1.ConnectingRodRatio = 0.315;
DieselEngine1.ReciprocatingMass = 5.44 kg;
DieselEngine1.PowerMCR = 480 kW;
DieselEngine1.SpeedMCR = 2100 rpm;

// Elastic coupling properties
Coupling1.Type = "Progressive";
Coupling1.NominalCouplingTorque = 5 kN*m;
Coupling1.StiffnessAt0Torque = 11000 N*m/rad;
Coupling1.StiffnessAt25Torque = 11000 N*m/rad;
Coupling1.StiffnessAt50Torque = 13400 N*m/rad;
Coupling1.StiffnessAt75Torque = 23200 N*m/rad;
Coupling1.StiffnessAt100Torque = 42000 N*m/rad;
Coupling1.NominalStiffness = 12500 N*m/rad;

// Cylinder index and firing order
Cylinder1.CylinderIndex = 1;
Cylinder2.CylinderIndex = 2;
Cylinder3.CylinderIndex = 3;
Cylinder4.CylinderIndex = 4;
Cylinder5.CylinderIndex = 5;
Cylinder6.CylinderIndex = 6;
Cylinder1.FiringAngleBankA = 0 deg;
Cylinder2.FiringAngleBankA = 480 deg;
Cylinder3.FiringAngleBankA = 240 deg;
Cylinder4.FiringAngleBankA = 600 deg;
Cylinder5.FiringAngleBankA = 120 deg;
Cylinder6.FiringAngleBankA = 360 deg;

// Engine excitation data (theoretical cylinder pressure)
DieselEngine1.ExcitationData.CompressionRatio = 14.5;
DieselEngine1.ExcitationData.AngleIgnition = -5 deg;
DieselEngine1.ExcitationData.AngleEndOfCombustion = 55 deg;
DieselEngine1.ExcitationData.AngleExhaustStart = 149 deg;
DieselEngine1.ExcitationData.PressureChargeAir = 2.3 bar;
DieselEngine1.ExcitationData.PressureCompression = 95 bar;
DieselEngine1.ExcitationData.PressureMax = 145 bar;
DieselEngine1.ExcitationData.TemperatureChargeAir = 40;


// Operating conditions and load cases
dataModel.AddOperatingMode(OPM1 = new OperatingMode() { Name="MCR operation" });
dataModel.AddLoadCase(OPM1,LC1 = new LoadCase() { Name="Normal firing"; MaxSpeed=2400; MinSpeed=500; StepSpeed=100; Type="Propeller law - full pitch"});
