Input data description: FLOW PATTERN (FREE=0), SUPERF. GAS VELOCITY, [m/s],
        SUPERF. LIQUID VEL, [m/s], WATERCUT (WC), [fraction], DENSITY GAS, [kg/m3],
        DENSITY OIL, [kg/m3], DENSITY WATER, [kg/m3], VISCOSITY GAS, [Ns/m2],
        VISCOSITY OIL, [Ns/m2], VISCOSITY WATER, [Ns/m2], SURFACE TENSION O/G, [N/m],
        SURFACE TENSION W/O, [N/m], PIPE DIAMETER, [m], PIPE INCLINATION, [deg],
        WALL ROUGHNESS,[m], ENTRAINMENT, [fraction of liquid], 
        PHASE INVERSION, [-], LINEAR EMULSION FACTOR, [-],
        QUADRATIC EMULSION FACTOR, [-], SMOOTHING FACTOR, [-],
        POWER LAW / HERSCHEL-BULKLEY EXP (N), POWER LAW CONSISTENCY, YIELD STRESS

def run(self, phase_number=3, **kwargs):
        """
        Input data description: FLOW PATTERN (FREE=0), SUPERF. GAS VELOCITY, [m/s],
        SUPERF. LIQUID VEL, [m/s], WATERCUT (WC), [fraction], DENSITY GAS, [kg/m3],
        DENSITY OIL, [kg/m3], DENSITY WATER, [kg/m3], VISCOSITY GAS, [Ns/m2],
        VISCOSITY OIL, [Ns/m2], VISCOSITY WATER, [Ns/m2], SURFACE TENSION O/G, [N/m],
        SURFACE TENSION W/O, [N/m], PIPE DIAMETER, [m], PIPE INCLINATION, [deg],
        WALL ROUGHNESS,[m], ENTRAINMENT, [fraction of liquid], 
        PHASE INVERSION, [-], LINEAR EMULSION FACTOR, [-],
        QUADRATIC EMULSION FACTOR, [-], SMOOTHING FACTOR, [-],
        POWER LAW / HERSCHEL-BULKLEY EXP (N), POWER LAW CONSISTENCY, YIELD STRESS
        """
        input_data = {'FP':   0,
                      'SGV':  kwargs['SGV'],
                      'SLV':  kwargs['SLV'],
                      'WC':   kwargs['WC'],
                      'RO_G': kwargs['RO_G'],
                      'RO_O': kwargs['RO_O'],
                      'RO_W': kwargs['RO_W'],
                      'MU_G': kwargs['MU_G'],
                      'MU_O': kwargs['MU_O'],
                      'MU_W': kwargs['MU_W'],
                      'S_OG': kwargs['S_OG'],
                      'S_OW': kwargs['S_OW'],
                      'ID':   kwargs['ID'],
                      'INCL': kwargs['INCL'],
                      'Ra':   kwargs['Ra'],
                      'ENTRAINMENT': 0,
                      'PHASE INVERSION': 0.67,
                      'LINEAR EMULSION FACTOR': 1,
                      'QUADRATIC EMULSION FACTOR': 1,
                      'SMOOTHING FACTOR': 1,
                      'POWER LAW / HERSCHEL-BULKLEY EXP': 0,
                      'POWER LAW CONSISTENCY': 0,
                      'YIELD STRESS': 0,}
        input_arr = [v for v in input_data.values()]
        arr = np.zeros(200)
        if phase_number is 2:
            indx = [4,2,1,1,6,0,0,1,2,0,2,0,0,0,0,0,0,1,0,0] # SFC 2-phase option
        if phase_number is 3:
            indx = [4,2,1,1,6,0,0,1,2,0,2,0,0,0,0,1,0,1,0,0] # SFC 3-phase option
        input_arr = (ctypes.c_double * len(input_arr))(*input_arr)
        arr = (ctypes.c_double * len(arr))(*arr)
        indx = (ctypes.c_short * len(indx))(*indx)
        self.dll.sfc_front(input_arr, indx, arr)
        results = pd.DataFrame(np.hstack([input_arr[1:], arr])).T
        results.columns = IO_COLNAMES
        return results