MGSuspensionBridgeStatics.html   (MotionGenesis input/output).
```   (1) % MotionGenesis file:  MGSuspensionBridgeStatics.txt
(2) % Problem:  Static equilibrium of suspension bridge
(4) %--------------------------------------------------------------------
(5) %       Physical declarations
(6) NewtonianFrame N             % Ground (Earth)
(7) RigidBody      A, B          % Support towers
(8) Point          AL(A), AR(A)  % Highest  left-point and right-point of A
(9) Point          BL(B), BR(B)  % Highest  left-point and right-point of B
(10) Particle       Q             % Models objects attached to cable between A and B
(11) %--------------------------------------------------------------------
(12) %       Mathematical declarations (all constants are positive +)
(13) Q.SetMass( m = 100000 kg )
(14) Constant   g+  = 9.8 m/s^2   % Earth's gravitational acceleration
(15) Constant   dA+ =  40 m       % Distance between No and tower A (horizontal)
(16) Constant   w+  =   5 m       % Width of towers (horizontal)
(17) Constant   dB+ = 100 m       % Distance between tower A and tower B (horizontal)
(18) Constant   h+  =  30 m       % Height of top of towers above No (vertical)
(19) Constant   L3+ =  80 m       % Distance between point AR and particle Q
(20) Constant   F+  = 800000 N    % Tension in pulling cable (known)
(21) Constant   theta+ = 20 deg   % Angle between Nx> and line connecting AR to CR
(22) Variable   q3                % Angle between Nx> and line connecting AR to Q
(23) Variable   T3                % Tension in cable between AR and Q
(24) %--------------------------------------------------------------------
(25) %       Position vectors
(26) AL.SetPosition( No, dA*Nx> + h*Ny> )
-> (27) p_No_AL> = dA*Nx> + h*Ny>

(28) AR.SetPosition( AL,  w*Nx> )
-> (29) p_AL_AR> = w*Nx>

(30) Q.SetPosition(  AR,  L3*cos(q3)*Nx> - L3*sin(q3)*Ny> )
-> (31) p_AR_Q> = L3*cos(q3)*Nx> - L3*sin(q3)*Ny>

(32) BL.SetPosition( AR,  dB*Nx> )
-> (33) p_AR_BL> = dB*Nx>

(34) BR.SetPosition( BL,  w*Nx> )
-> (35) p_BL_BR> = w*Nx>

(36) %--------------------------------------------------------------------
(38) L4 = BL.GetDistance( Q )
-> (39) L4 = sqrt(L3^2*sin(q3)^2+(dB-L3*cos(q3))^2)

(40) QUnitVectorFromAR>  =  Q.GetPosition( AR ) / L3
-> (41) QUnitVectorFromAR> = cos(q3)*Nx> - sin(q3)*Ny>

(42) QUnitVectorFromBL>  =  Q.GetPosition( BL ) / L4
-> (43) QUnitVectorFromBL> = -(dB-L3*cos(q3))/L4*Nx> - L3*sin(q3)/L4*Ny>

(44) %--------------------------------------------------------------------
(45) %       Contact and distance forces applied to Q
(46) Q.AddForce( -T3 * QUnitVectorFromAR>  -  F * QUnitVectorFromBL>  -  m*g*Ny> )
-> (47) Force_Q> = (F*(dB-L3*cos(q3))/L4-T3*cos(q3))*Nx> + (T3*sin(q3)+F*L3*sin
(q3)/L4-m*g)*Ny>

(48) %--------------------------------------------------------------------
(49) %       Scalar equations governing Q's static equilbrium
(50) ZeroStaticsWithPulleys[1] = Dot( Q.GetResultantMoment(AR), Nz> )
-> (51) ZeroStaticsWithPulleys[1] = -L3*(m*g*cos(q3)-dB*F*sin(q3)/L4)

(52) ZeroStaticsWithPulleys[2] = Dot( Q.GetResultantForce(),    Nx> )
-> (53) ZeroStaticsWithPulleys[2] = F*(dB-L3*cos(q3))/L4 - T3*cos(q3)

(54) %--------------------------------------------------------------------
(55) %       Solve statics for q3 and T3 (nonlinear in q3, linear in T3)
(56) SolnWithPulleys = Solve( ZeroStaticsWithPulleys,  q3 = 20 deg, T3 = Input(F) )
->   %  Note: q3 = 0.616316 radian  was converted from  q3 = 35.31231 deg.
-> (57) SolnWithPulleys = [0.616316;  588626.4]

(58) %********************************************************************
(59) %       Static analysis of q3 and cable tensions without pulleys
(60) %********************************************************************
(61) Point      CAL, CAR          % Points of cable coincident with AL and AR
(62) Point      CBL, CBR          % Points of cable coincident with BL and BR
(63) Point      CR                % Right-most point of cable C (where force is applied)
(64) %--------------------------------------------------------------------
(65) %       Unknown tensions in other parts of the cable.
(66) Variable   T1                % Tension in cable between No and AL
(67) Variable   T2                % Tension in cable between AL and AR
(68) Variable   T4                % Tension in cable between Q  and BL
(69) Variable   T5                % Tension in cable between BL and BR
(70) %--------------------------------------------------------------------
(71) %       Horizontal/vertical contact forces on cable from tower.
(72) %       Assume no horizontal forces on cable from tower (frictionless?)
(73) Variable  ALx = 0,  ALy      % Force on cable from A at AL
-> (74) ALx = 0

(75) Variable  ARx = 0,  ARy      % Force on cable from A at AR
-> (76) ARx = 0

(77) Variable  BLx = 0,  BLy      % Force on cable from B at BL
-> (78) BLx = 0

(79) Variable  BRx = 0,  BRy      % Force on cable from B at BR
-> (80) BRx = 0

(81) %--------------------------------------------------------------------
(82) %       Forces on points of cable by tension in cable or towers (A or B)
(83) L1 = AL.GetDistance( No )
-> (84) L1 = sqrt(dA^2+h^2)

(85) unitVectorFromALToNo> = No.GetPosition( AL ) / L1
-> (86) unitVectorFromALToNo> = -dA/L1*Nx> - h/L1*Ny>

(87) CAL.AddForce( T1*unitVectorFromALToNo> + T2*Nx> )
-> (88) Force_CAL> = (T2-dA*T1/L1)*Nx> - h*T1/L1*Ny>

(89) CAL.AddForce( AL,  ALx*Nx> + ALy*Ny> )
-> (90) Force_CAL_AL> = ALx*Nx> + ALy*Ny>

(91) CAR.AddForce( T3*QUnitVectorFromAR>  - T2*Nx> )
-> (92) Force_CAR> = (T3*cos(q3)-T2)*Nx> - T3*sin(q3)*Ny>

(93) CAR.AddForce( AR,  ARx*Nx> + ARy*Ny> )
-> (94) Force_CAR_AR> = ARx*Nx> + ARy*Ny>

(95) CBL.AddForce( T4*QUnitVectorFromBL>  + T5*Nx> )
-> (96) Force_CBL> = (T5-T4*(dB-L3*cos(q3))/L4)*Nx> - L3*T4*sin(q3)/L4*Ny>

(97) CBL.AddForce( BL,  BLx*Nx> + BLy*Ny> )
-> (98) Force_CBL_BL> = BLx*Nx> + BLy*Ny>

(99) unitVectorFromBRToCR> = cos(theta)*Nx> - sin(theta)*Ny>
-> (100) unitVectorFromBRToCR> = cos(theta)*Nx> - sin(theta)*Ny>

(101) CBR.AddForce( F*unitVectorFromBRToCR>  - T5*Nx> )
-> (102) Force_CBR> = (F*cos(theta)-T5)*Nx> - F*sin(theta)*Ny>

(103) CBR.AddForce( BR,  BRx*Nx> + BRy*Ny> )
-> (104) Force_CBR_BR> = BRx*Nx> + BRy*Ny>

(105) %--------------------------------------------------------------------
(106) %       Contact and distance forces applied to Q
(107) Q.ResetForce( -T3*QUnitVectorFromAR>  -  T4*QUnitVectorFromBL>  -  m*g*Ny> )
-> (108) Force_Q> = (T4*(dB-L3*cos(q3))/L4-T3*cos(q3))*Nx> + (T3*sin(q3)+L3*T4*
sin(q3)/L4-m*g)*Ny>

(109) %--------------------------------------------------------------------
(110) %       Scalar equations governing the system's static equilbrium
(111) Zero[1] = Dot( CAL.GetResultantForce(), Nx> )
-> (112) Zero[1] = ALx + T2 - dA*T1/L1

(113) Zero[2] = Dot( CAL.GetResultantForce(), Ny> )
-> (114) Zero[2] = ALy - h*T1/L1

(115) Zero[3] = Dot( CAR.GetResultantForce(), Nx> )
-> (116) Zero[3] = ARx + T3*cos(q3) - T2

(117) Zero[4] = Dot( CAR.GetResultantForce(), Ny> )
-> (118) Zero[4] = ARy - T3*sin(q3)

(119) Zero[5] = Dot( CBL.GetResultantForce(), Nx> )
-> (120) Zero[5] = BLx + T5 - T4*(dB-L3*cos(q3))/L4

(121) Zero[6] = Dot( CBL.GetResultantForce(), Ny> )
-> (122) Zero[6] = BLy - L3*T4*sin(q3)/L4

(123) Zero[7] = Dot( CBR.GetResultantForce(), Nx> )
-> (124) Zero[7] = F*cos(theta) + BRx - T5

(125) Zero[8] = Dot( CBR.GetResultantForce(), Ny> )
-> (126) Zero[8] = BRy - F*sin(theta)

(127) Zero[9] = Dot(   Q.GetResultantForce(), Nx> )
-> (128) Zero[9] = T4*(dB-L3*cos(q3))/L4 - T3*cos(q3)

(129) Zero[10] =Dot(   Q.GetResultantForce(), Ny> )
-> (130) Zero[10] = T3*sin(q3) + L3*T4*sin(q3)/L4 - m*g

(131) %--------------------------------------------------------------------
(132) %       Solve nonlinear equation for q3.  Use guess of q3 = 30 degrees.
(133) Solve( Zero,  q3 = 30 deg,  T1=1E5, T2=2E5, T3=3E5, T4=4E5, T5=5E5,  ALy=6E5, ARy=7E5, BLy=8E5, BRy=9E5 )
-> (134) q3 = 0.2974193       %  or  q3 = 17.04087 deg.
-> (135) T1 = 939692.6
-> (136) T2 = 751754.1
-> (137) T3 = 786274.7
-> (138) T4 = 1061604
-> (139) T5 = 751754.1
-> (140) ALy = 563815.6
-> (141) ARy = 230420.8
-> (142) BLy = 749579.2
-> (143) BRy = 273616.1

(144) %********************************************************************
(145) %       Static analysis of towers.
(146) %********************************************************************
(147) %       Resultant force on A and B by cables
(148) AResultantForceFromCable> = EvaluateToNumber( A.GetResultantForce() )
-> (149) AResultantForceFromCable> = -794236.3*Ny>

(150) BResultantForceFromCable> = EvaluateToNumber( B.GetResultantForce() )
-> (151) BResultantForceFromCable> = -1023195*Ny>

(152) %--------------------------------------------------------------------
(153) %       Magnitude of the moment on A about the center of its base
(154) Ao.SetPosition( AL,  0.5*w*Nx> - 2*h*Ny> )
-> (155) p_AL_Ao> = 0.5*w*Nx> - 2*h*Ny>

(156) MomentOnAAboutAo> = EvaluateToNumber(  A.GetResultantMoment(Ao) )

(158) %--------------------------------------------------------------------
(159) %       Magnitude of the moment on B about the center of its base
(160) Bo.SetPosition( BL,  0.5*w*Nx> - 2*h*Ny> )
-> (161) p_BL_Bo> = 0.5*w*Nx> - 2*h*Ny>

(162) MomentOnBAboutBo> = EvaluateToNumber(  B.GetResultantMoment(Bo) )

(164) %--------------------------------------------------------------------
```