subroutine Drawworks_MainSolver
    
    use SimulationVariables !@
    
	IMPLICIT NONE
    

            
    Call Drawworks_Inputs
        
    if (data%State%Drawworks%Throttle<=0.d0) then
        data%State%Drawworks%K_Throttle = 1
    end if
    
    
    if((any(data%State%Drawworks%AssignmentSwitch==(/1,2,3,4,5,7,8,9,10,11/))) .and. (data%State%Drawworks%Switch==-1 .or. data%State%Drawworks%Switch==1) .and. (data%State%Drawworks%CrownCollision==.false. .and. data%State%Drawworks%FloorCollision==.false.) .and. (data%State%Drawworks%K_Throttle==1)) then
        
        data%State%Drawworks%SoundBlower = .true.
        data%State%Drawworks%BLWR        = 1
        
        Call Drawworks_Solver
        
        if ( data%State%Drawworks%motion==+1 ) then
            data%State%Drawworks%SoundRev = 0                      ![rpm or rad/s????????????????] , Integer
            data%State%Drawworks%SoundFw  = INT(data%State%Drawworks%w_drum)  ![rpm] , Integer
        else
            data%State%Drawworks%SoundFw  = 0                      ![rpm] , Integer
            data%State%Drawworks%SoundRev = INT(data%State%Drawworks%w_drum)  ![rpm] , Integer
        end if
        
    else
        
        if((any(data%State%Drawworks%AssignmentSwitch==(/1,2,3,4,5,7,8,9,10,11/))) .and. (data%State%Drawworks%Switch==-1 .or. data%State%Drawworks%Switch==1)) then
            data%State%Drawworks%SoundBlower = .true.
            data%State%Drawworks%BLWR        = 1
        else
            data%State%Drawworks%SoundBlower = .false.
            data%State%Drawworks%BLWR        = 0
        end if
            
        Call Drawworks_Solver_OffMode
        
        if ( data%State%Drawworks%motion==+1 ) then
            data%State%Drawworks%SoundRev = 0                       ![rpm] , Integer
            data%State%Drawworks%SoundFw  = INT(data%State%Drawworks%w_drum)   ![rpm] , Integer
        else
            data%State%Drawworks%SoundFw  = 0                       ![rpm] , Integer
            data%State%Drawworks%SoundRev = INT(data%State%Drawworks%w_drum)   ![rpm] , Integer
        end if
            
        data%State%Drawworks%K_Throttle = 0
        
    end if
        
        
    Call Drawworks_Outputs
        
    data%State%Drawworks%N_old = data%State%Drawworks%Speed

    
     
end subroutine Drawworks_MainSolver