// Create a generator set model
// Number of branches: 	1
// Number of masses:	13
// Components: Viscous damper, engine, progressive coupling and generator
// Engine type: Four-stroke inline

// Create inertias
dataModel.Add(M1 = new Inertia());
dataModel.Add(M2 = new Inertia());
dataModel.Add(M3 = new Inertia());
dataModel.Add(M4 = new Cylinder());
dataModel.Add(M5 = new Cylinder());
dataModel.Add(M6 = new Cylinder());
dataModel.Add(M7 = new Cylinder());
dataModel.Add(M8 = new Cylinder());
dataModel.Add(M9 = new Cylinder());
dataModel.Add(M10 = new Inertia());
dataModel.Add(M11 = new Inertia());
dataModel.Add(M12 = new Inertia());
dataModel.Add(M13 = new Generator());

// Align inertias
for (i=1;i<=13;i++) { dataModel.MoveInertia(dataModel.GetInertia(i), i+100, 100); }
AlignInertias(AlignDirection.Horizontal, [1,2,3,4,5,6,7,8,9,10,11,12,13]);

// Add stiffness
dataModel.Add(S1 = new DamperStiffness(M1, M2));
dataModel.Add(S2 = new Stiffness(M2, M3));
dataModel.Add(S3 = new Crankthrow(M3, M4));
dataModel.Add(S4 = new Crankthrow(M4, M5));
dataModel.Add(S5 = new Crankthrow(M5, M6));
dataModel.Add(S6 = new Crankthrow(M6, M7));
dataModel.Add(S7 = new Crankthrow(M7, M8));
dataModel.Add(S8 = new Crankthrow(M8, M9));
dataModel.Add(S9 = new Crankthrow(M9, M10));
dataModel.Add(S10 = new Crankthrow(M10, M11));
dataModel.Add(S11 = new Coupling(M11, M12));
dataModel.Add(S12 = new Stiffness(M12, M13));

// Group into damper
Damper1 = new Damper();
Damper1.Add(M1);
Damper1.Add(M2);
dataModel.Add(Damper1);

// Group into diesel engine
DieselEngine1 = new DieselEngine();
DieselEngine1.Add(M3);
DieselEngine1.Add(M4);
DieselEngine1.Add(M5);
DieselEngine1.Add(M6);
DieselEngine1.Add(M7);
DieselEngine1.Add(M8);
DieselEngine1.Add(M9);
DieselEngine1.Add(M10);
dataModel.Add(DieselEngine1);

// Group into elastic coupling
ElasticCoupling1 = new ElasticCoupling();
ElasticCoupling1.Add(M11);
ElasticCoupling1.Add(M12);
dataModel.Add(ElasticCoupling1);

// Mass properties
M1.MomentOfInertia = 0.188 kg*m^2;
M2.MomentOfInertia = 0.13 kg*m^2;
M3.MomentOfInertia = 0.13 kg*m^2;
M4.MomentOfInertia = 0.22 kg*m^2;
M5.MomentOfInertia = 0.11 kg*m^2;
M6.MomentOfInertia = 0.22 kg*m^2;
M7.MomentOfInertia = 0.22 kg*m^2;
M8.MomentOfInertia = 0.11 kg*m^2;
M9.MomentOfInertia = 0.22 kg*m^2;
M10.MomentOfInertia = 1.99 kg*m^2;
M11.MomentOfInertia = 0.45 kg*m^2;
M12.MomentOfInertia = 0.30 kg*m^2;
M13.MomentOfInertia = 1.81 kg*m^2;

// Stiffness properties
S1.TorsionalStiffness = 0 N*m/rad;
S2.TorsionalStiffness = 1.000E+010 N*m/rad;
S3.TorsionalStiffness = 5.540E+006 N*m/rad;
S4.TorsionalStiffness = 3.680E+006 N*m/rad;
S5.TorsionalStiffness = 3.680E+006 N*m/rad;
S6.TorsionalStiffness = 3.600E+006 N*m/rad;
S7.TorsionalStiffness = 3.680E+006 N*m/rad;
S8.TorsionalStiffness = 3.680E+006 N*m/rad;
S9.TorsionalStiffness = 5.750E+006 N*m/rad;
S10.TorsionalStiffness = 1.000E+010 N*m/rad;
S12.TorsionalStiffness = 2.998E+005 N*m/rad;

// Outer diameter on shafts
S4.DiamOuter = 0.09 m;
S5.DiamOuter = 0.09 m;
S6.DiamOuter = 0.09 m;
S7.DiamOuter = 0.09 m;
S8.DiamOuter = 0.09 m;
S9.DiamOuter = 0.09 m;
S12.DiamOuter = 0.06 m;

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

// Shaft damping
S2.DynamicMagnifier = 180;
S3.DynamicMagnifier = 180;
S4.DynamicMagnifier = 45;
S5.DynamicMagnifier = 45;
S6.DynamicMagnifier = 45;
S7.DynamicMagnifier = 45;
S8.DynamicMagnifier = 45;
S9.DynamicMagnifier = 45;
S10.DynamicMagnifier = 180;
S11.DynamicMagnifier = 5.7;
S12.DynamicMagnifier = 180;

// Damper properties
S1.Type = DamperStiffnessType.Viscous;
S1.RelDamping = 160 N*s*m/rad;

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

// Cylinder index and firing order
M4.CylinderIndex = 1;
M5.CylinderIndex = 2;
M6.CylinderIndex = 3;
M7.CylinderIndex = 4;
M8.CylinderIndex = 5;
M9.CylinderIndex = 6;
M4.FiringAngleBankA = 0 deg;
M5.FiringAngleBankA = 480 deg;
M6.FiringAngleBankA = 240 deg;
M7.FiringAngleBankA = 600 deg;
M8.FiringAngleBankA = 120 deg;
M9.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 = 136.9 bar;
DieselEngine1.ExcitationData.TemperatureChargeAir = 40;

// Elastic coupling properties
S11.NominalCouplingTorque = 5 kN*m;
S11.Type = "Progressive";
S11.StiffnessAt0Torque = 1.100E+004 N*m/rad;
S11.StiffnessAt25Torque = 1.100E+004 N*m/rad;
S11.StiffnessAt50Torque = 1.340E+004 N*m/rad;
S11.StiffnessAt75Torque = 2.320E+004 N*m/rad;
S11.StiffnessAt100Torque = 4.200E+004 N*m/rad;
S11.NominalStiffness = 1.211E+004 N*m/rad;

// Generator set properties
M13.PowerMCR = 345 kW;

// Operating conditions and load cases
dataModel.AddOperatingMode(OPM1 = new OperatingMode() { Name="LC1" });
dataModel.AddLoadCase(OPM1,LC1 = new LoadCase() { Name="Normal firing"; MaxSpeed=1850; MinSpeed=1700; StepSpeed=10; Type="Generator set - constant torque load and MIP"});
