コード例 #1
0
ファイル: perfoap.py プロジェクト: thobson88/bluesky
    def create(self, n=1):
        # cautious! considering multiple created aircraft with same type

        super(OpenAP, self).create(n)

        actype = bs.traf.type[-1].upper()

        # check fixwing or rotor, default fixwing if not found
        if actype in self.coeff.actypes_rotor:
            self.lifttype[-n:] = coeff.LIFT_ROTOR
            self.mass[-n:] = 0.5 * (self.coeff.acs_rotor[actype]['oew'] + self.coeff.acs_rotor[actype]['mtow'])
            self.engnum[-n:] = int(self.coeff.acs_rotor[actype]['n_engines'])
            self.engpower[-n:] = self.coeff.acs_rotor[actype]['engines'][0][1]    # engine power (kW)

        else:
            # convert to known aircraft type
            if actype not in self.coeff.actypes_fixwing:
                actype = 'A320'

            # populate fuel flow model
            es = self.coeff.acs_fixwing[actype]['engines']
            e = es[list(es.keys())[0]]
            coeff_a, coeff_b, coeff_c = thrust.compute_eng_ff_coeff(e['ff_idl'], e['ff_app'], e['ff_co'], e['ff_to'])

            self.lifttype[-n:] = coeff.LIFT_FIXWING

            self.Sref[-n:] = self.coeff.acs_fixwing[actype]['wa']
            self.mass[-n:] = 0.5 * (self.coeff.acs_fixwing[actype]['oew'] + self.coeff.acs_fixwing[actype]['mtow'])

            self.engnum[-n:] = int(self.coeff.acs_fixwing[actype]['n_engines'])

            self.ff_coeff_a[-n:] = coeff_a
            self.ff_coeff_b[-n:] = coeff_b
            self.ff_coeff_c[-n:] = coeff_c

            all_ac_engs = list(self.coeff.acs_fixwing[actype]['engines'].keys())
            self.engthrust[-n:] = self.coeff.acs_fixwing[actype]['engines'][all_ac_engs[0]]['thr']
            self.engbpr[-n:] = self.coeff.acs_fixwing[actype]['engines'][all_ac_engs[0]]['bpr']

            # init drag polar coefficients
            if actype in self.coeff.dragpolar_fixwing.keys():
                self.cd0_clean[-n:] = self.coeff.dragpolar_fixwing[actype]['cd0_clean']
                self.cd0_gd[-n:] = self.coeff.dragpolar_fixwing[actype]['cd0_gd']
                self.cd0_to[-n:] = self.coeff.dragpolar_fixwing[actype]['cd0_to']
                self.cd0_ic[-n:] = self.coeff.dragpolar_fixwing[actype]['cd0_ic']
                self.cd0_ap[-n:] = self.coeff.dragpolar_fixwing[actype]['cd0_ap']
                self.cd0_ld[-n:] = self.coeff.dragpolar_fixwing[actype]['cd0_ld']
                self.k[-n:] = self.coeff.dragpolar_fixwing[actype]['k']
            else:
                self.cd0_clean[-n:] = self.coeff.dragpolar_fixwing['NA']['cd0_clean']
                self.cd0_gd[-n:] = self.coeff.dragpolar_fixwing['NA']['cd0_gd']
                self.cd0_to[-n:] = self.coeff.dragpolar_fixwing['NA']['cd0_to']
                self.cd0_ic[-n:] = self.coeff.dragpolar_fixwing['NA']['cd0_ic']
                self.cd0_ap[-n:] = self.coeff.dragpolar_fixwing['NA']['cd0_ap']
                self.cd0_ld[-n:] = self.coeff.dragpolar_fixwing['NA']['cd0_ld']
                self.k[-n:] = self.coeff.dragpolar_fixwing['NA']['k']


        # append update actypes, after removing unkown types
        self.actypes[-n:] = [actype] * n
コード例 #2
0
    def create(self, n=1):
        # cautious! considering multiple created aircraft with same type

        super(OpenAP, self).create(n)

        actype = bs.traf.type[-n]

        # check fixwing or rotor, default fixwing if not found
        if actype in self.coeff.actypes_rotor:

            self.lifttype[-n:] = coeff.LIFT_ROTOR
            self.mass[-n:] = 0.5 * (self.coeff.acs_rotor[actype]['oew'] +
                                    self.coeff.acs_rotor[actype]['mtow'])
            self.engnum[-n:] = int(self.coeff.acs_rotor[actype]['n_engines'])
            self.engpower[-n:] = self.coeff.acs_rotor[actype]['engines'][0][
                1]  # engine power (kW)

        else:
            # convert to known aircraft type
            if actype not in self.coeff.actypes_fixwing:
                actype = 'A320'

            # populate fuel flow model
            es = self.coeff.acs_fixwing[actype]['engines']
            e = es[list(es.keys())[0]]
            coeff_a, coeff_b, coeff_c = thrust.compute_eng_ff_coeff(
                e['ff_idl'], e['ff_app'], e['ff_co'], e['ff_to'])

            self.lifttype[-n:] = coeff.LIFT_FIXWING

            self.Sref[-n:] = self.coeff.acs_fixwing[actype]['wa']
            self.mass[-n:] = 0.5 * (self.coeff.acs_fixwing[actype]['oew'] +
                                    self.coeff.acs_fixwing[actype]['mtow'])

            self.engnum[-n:] = int(self.coeff.acs_fixwing[actype]['n_engines'])

            self.ff_coeff_a[-n:] = np.ones(n) * coeff_a
            self.ff_coeff_b[-n:] = np.ones(n) * coeff_b
            self.ff_coeff_c[-n:] = np.ones(n) * coeff_c

            all_ac_engs = list(
                self.coeff.acs_fixwing[actype]['engines'].keys())
            self.engthrust[-n:] = self.coeff.acs_fixwing[actype]['engines'][
                all_ac_engs[0]]['thr']
            self.engbpr[-n:] = self.coeff.acs_fixwing[actype]['engines'][
                all_ac_engs[0]]['bpr']

        # append update actypes, after removing unkown types
        self.actypes[-n:] = [actype] * n
        self.n_ac += n
コード例 #3
0
ファイル: perfoap.py プロジェクト: omar-Fouad/bluesky
    def create(self, n=1):
        # cautious! considering multiple created aircraft with same type

        super(OpenAP, self).create(n)

        actype = bs.traf.type[-1].upper()

        # Check synonym file if not in open ap actypes
        if (actype not in self.coeff.actypes_rotor) and (
                actype not in self.coeff.dragpolar_fixwing):
            if actype in self.coeff.synodict:
                # print(actype,"replaced by",self.coeff.synodict[actype])
                actype = self.coeff.synodict[actype]

        # check fixwing or rotor, default to fixwing
        if actype in self.coeff.actypes_rotor:
            self.lifttype[-n:] = coeff.LIFT_ROTOR
            self.mass[-n:] = 0.5 * (self.coeff.acs_rotor[actype]["oew"] +
                                    self.coeff.acs_rotor[actype]["mtow"])
            self.engnum[-n:] = int(self.coeff.acs_rotor[actype]["n_engines"])
            self.engpower[-n:] = self.coeff.acs_rotor[actype]["engines"][0][
                1]  # engine power (kW)

        else:
            # convert to known aircraft type
            if actype not in self.coeff.actypes_fixwing:
                actype = "B744"

            # populate fuel flow model
            es = self.coeff.acs_fixwing[actype]["engines"]
            e = es[list(es.keys())[0]]
            coeff_a, coeff_b, coeff_c = thrust.compute_eng_ff_coeff(
                e["ff_idl"], e["ff_app"], e["ff_co"], e["ff_to"])

            self.lifttype[-n:] = coeff.LIFT_FIXWING

            self.Sref[-n:] = self.coeff.acs_fixwing[actype]["wa"]
            self.mass[-n:] = 0.5 * (self.coeff.acs_fixwing[actype]["oew"] +
                                    self.coeff.acs_fixwing[actype]["mtow"])

            self.engnum[-n:] = int(self.coeff.acs_fixwing[actype]["n_engines"])

            self.ff_coeff_a[-n:] = coeff_a
            self.ff_coeff_b[-n:] = coeff_b
            self.ff_coeff_c[-n:] = coeff_c

            all_ac_engs = list(
                self.coeff.acs_fixwing[actype]["engines"].keys())
            self.engthrmax[-n:] = self.coeff.acs_fixwing[actype]["engines"][
                all_ac_engs[0]]["thr"]
            self.engbpr[-n:] = self.coeff.acs_fixwing[actype]["engines"][
                all_ac_engs[0]]["bpr"]

        # init type specific coefficients
        if actype in self.coeff.limits_fixwing.keys():
            self.vminic[-n:] = self.coeff.limits_fixwing[actype]["vminic"]
            self.vminer[-n:] = self.coeff.limits_fixwing[actype]["vminer"]
            self.vminap[-n:] = self.coeff.limits_fixwing[actype]["vminap"]
            self.vmaxic[-n:] = self.coeff.limits_fixwing[actype]["vmaxic"]
            self.vmaxer[-n:] = self.coeff.limits_fixwing[actype]["vmaxer"]
            self.vmaxap[-n:] = self.coeff.limits_fixwing[actype]["vmaxap"]

            self.vsmin[-n:] = self.coeff.limits_fixwing[actype]["vsmin"]
            self.vsmax[-n:] = self.coeff.limits_fixwing[actype]["vsmax"]
            self.hmax[-n:] = self.coeff.limits_fixwing[actype]["hmax"]
            self.axmax[-n:] = self.coeff.limits_fixwing[actype]["axmax"]
            self.vminto[-n:] = self.coeff.limits_fixwing[actype]["vminto"]

            self.cd0_clean[-n:] = self.coeff.dragpolar_fixwing[actype][
                "cd0_clean"]
            self.k_clean[-n:] = self.coeff.dragpolar_fixwing[actype]["k_clean"]
            self.cd0_to[-n:] = self.coeff.dragpolar_fixwing[actype]["cd0_to"]
            self.k_to[-n:] = self.coeff.dragpolar_fixwing[actype]["k_to"]
            self.cd0_ld[-n:] = self.coeff.dragpolar_fixwing[actype]["cd0_ld"]
            self.k_ld[-n:] = self.coeff.dragpolar_fixwing[actype]["k_ld"]
            self.delta_cd_gear[-n:] = self.coeff.dragpolar_fixwing[actype][
                "delta_cd_gear"]
        elif actype in self.coeff.limits_rotor.keys():  # rotorcraft
            self.vmin[-n:] = self.coeff.limits_rotor[actype]["vmin"]
            self.vmax[-n:] = self.coeff.limits_rotor[actype]["vmax"]
            self.vsmin[-n:] = self.coeff.limits_rotor[actype]["vsmin"]
            self.vsmax[-n:] = self.coeff.limits_rotor[actype]["vsmax"]
            self.hmax[-n:] = self.coeff.limits_rotor[actype]["hmax"]

            self.vsmin[-n:] = self.coeff.limits_rotor[actype]["vsmin"]
            self.vsmax[-n:] = self.coeff.limits_rotor[actype]["vsmax"]
            self.hmax[-n:] = self.coeff.limits_rotor[actype]["hmax"]

            self.cd0_clean[-n:] = np.nan
            self.k_clean[-n:] = np.nan
            self.cd0_to[-n:] = np.nan
            self.k_to[-n:] = np.nan
            self.cd0_ld[-n:] = np.nan
            self.k_ld[-n:] = np.nan
            self.delta_cd_gear[-n:] = np.nan
        else:  # Use default B747-400
            print(
                "Open AP (perfoap.py): Unknown actype, using default B744 instead."
            )
            self.vminic[-n:] = self.coeff.limits_fixwing["B744"]["vminic"]
            self.vminer[-n:] = self.coeff.limits_fixwing["B744"]["vminer"]
            self.vminap[-n:] = self.coeff.limits_fixwing["B744"]["vminap"]
            self.vmaxic[-n:] = self.coeff.limits_fixwing["B744"]["vmaxic"]
            self.vmaxer[-n:] = self.coeff.limits_fixwing["B744"]["vmaxer"]
            self.vmaxap[-n:] = self.coeff.limits_fixwing["B744"]["vmaxap"]

            self.vsmin[-n:] = self.coeff.limits_fixwing["B744"]["vsmin"]
            self.vsmax[-n:] = self.coeff.limits_fixwing["B744"]["vsmax"]
            self.hmax[-n:] = self.coeff.limits_fixwing["B744"]["hmax"]
            self.axmax[-n:] = self.coeff.limits_fixwing["B744"]["axmax"]
            self.vminto[-n:] = self.coeff.limits_fixwing["B744"]["vminto"]

            self.cd0_clean[-n:] = self.coeff.dragpolar_fixwing["B744"][
                "cd0_clean"]
            self.k_clean[-n:] = self.coeff.dragpolar_fixwing["B744"]["k_clean"]
            self.cd0_to[-n:] = self.coeff.dragpolar_fixwing["B744"]["cd0_to"]
            self.k_to[-n:] = self.coeff.dragpolar_fixwing["B744"]["k_to"]
            self.cd0_ld[-n:] = self.coeff.dragpolar_fixwing["B744"]["cd0_ld"]
            self.k_ld[-n:] = self.coeff.dragpolar_fixwing["B744"]["k_ld"]
            self.delta_cd_gear[-n:] = self.coeff.dragpolar_fixwing["B744"][
                "delta_cd_gear"]

        # append update actypes, after removing unkown types
        self.actypes[-n:] = [actype] * n
コード例 #4
0
    def create(self, n=1):
        # cautious! considering multiple created aircraft with same type

        super(OpenAP, self).create(n)

        actype = bs.traf.type[-1].upper()

        # Check synonym file if not in open ap actypes
        if (actype not in self.coeff.actypes_rotor) and \
           (actype not in self.coeff.dragpolar_fixwing):
            if actype in self.coeff.synodict:
                #print(actype,"replaced by",self.coeff.synodict[actype])
                actype = self.coeff.synodict[actype]

        # check fixwing or rotor, default fixwing if not found
        if actype in self.coeff.actypes_rotor:
            self.lifttype[-n:] = coeff.LIFT_ROTOR
            self.mass[-n:] = 0.5 * (self.coeff.acs_rotor[actype]['oew'] +
                                    self.coeff.acs_rotor[actype]['mtow'])
            self.engnum[-n:] = int(self.coeff.acs_rotor[actype]['n_engines'])
            self.engpower[-n:] = self.coeff.acs_rotor[actype]['engines'][0][
                1]  # engine power (kW)

        else:
            # convert to known aircraft type
            if actype not in self.coeff.actypes_fixwing:
                actype = "B744"

            # populate fuel flow model
            es = self.coeff.acs_fixwing[actype]['engines']
            e = es[list(es.keys())[0]]
            coeff_a, coeff_b, coeff_c = thrust.compute_eng_ff_coeff(
                e['ff_idl'], e['ff_app'], e['ff_co'], e['ff_to'])

            self.lifttype[-n:] = coeff.LIFT_FIXWING

            self.Sref[-n:] = self.coeff.acs_fixwing[actype]['wa']
            self.mass[-n:] = 0.5 * (self.coeff.acs_fixwing[actype]['oew'] +
                                    self.coeff.acs_fixwing[actype]['mtow'])

            self.engnum[-n:] = int(self.coeff.acs_fixwing[actype]['n_engines'])

            self.ff_coeff_a[-n:] = coeff_a
            self.ff_coeff_b[-n:] = coeff_b
            self.ff_coeff_c[-n:] = coeff_c

            all_ac_engs = list(
                self.coeff.acs_fixwing[actype]['engines'].keys())
            self.engthrmax[-n:] = self.coeff.acs_fixwing[actype]['engines'][
                all_ac_engs[0]]['thr']
            self.engbpr[-n:] = self.coeff.acs_fixwing[actype]['engines'][
                all_ac_engs[0]]['bpr']

            # init drag polar coefficients
            if actype in self.coeff.dragpolar_fixwing.keys():
                self.cd0_clean[-n:] = self.coeff.dragpolar_fixwing[actype][
                    'cd0_clean']
                self.cd0_gd[-n:] = self.coeff.dragpolar_fixwing[actype][
                    'cd0_gd']
                self.cd0_to[-n:] = self.coeff.dragpolar_fixwing[actype][
                    'cd0_to']
                self.cd0_ic[-n:] = self.coeff.dragpolar_fixwing[actype][
                    'cd0_ic']
                self.cd0_ap[-n:] = self.coeff.dragpolar_fixwing[actype][
                    'cd0_ap']
                self.cd0_ld[-n:] = self.coeff.dragpolar_fixwing[actype][
                    'cd0_ld']
                self.k[-n:] = self.coeff.dragpolar_fixwing[actype]['k']
            else:
                self.cd0_clean[-n:] = self.coeff.dragpolar_fixwing['NA'][
                    'cd0_clean']
                self.cd0_gd[-n:] = self.coeff.dragpolar_fixwing['NA']['cd0_gd']
                self.cd0_to[-n:] = self.coeff.dragpolar_fixwing['NA']['cd0_to']
                self.cd0_ic[-n:] = self.coeff.dragpolar_fixwing['NA']['cd0_ic']
                self.cd0_ap[-n:] = self.coeff.dragpolar_fixwing['NA']['cd0_ap']
                self.cd0_ld[-n:] = self.coeff.dragpolar_fixwing['NA']['cd0_ld']
                self.k[-n:] = self.coeff.dragpolar_fixwing['NA']['k']

        # append update actypes, after removing unkown types
        self.actypes[-n:] = [actype] * n
コード例 #5
0
    def create(self, n=1):
        # cautious! considering multiple created aircraft with same type
        super().create(n)

        actype = bs.traf.type[-1].upper()

        # Check synonym file if not in open ap actypes
        if (actype not in self.coeff.actypes_rotor) and (
                actype not in self.coeff.dragpolar_fixwing):
            if actype in self.coeff.synodict.keys():
                # warn = f"Warning: {actype} replaced by {self.coeff.synodict[actype]}"
                # print(warn)
                # bs.scr.echo(warn)
                actype = self.coeff.synodict[actype]

        # initialize aircraft / engine performance parameters
        # check fixwing or rotor, default to fixwing
        if actype in self.coeff.actypes_rotor:
            self.lifttype[-n:] = coeff.LIFT_ROTOR
            self.mass[-n:] = 0.5 * (self.coeff.acs_rotor[actype]["oew"] +
                                    self.coeff.acs_rotor[actype]["mtow"])
            self.engnum[-n:] = int(self.coeff.acs_rotor[actype]["n_engines"])
            self.engpower[-n:] = self.coeff.acs_rotor[actype]["engines"][0][1]

        else:
            # convert to known aircraft type
            if actype not in self.coeff.actypes_fixwing:
                # warn = f"Warning: {actype} replaced by B744"
                # print(warn)
                # bs.scr.echo(warn)
                actype = "B744"

            # populate fuel flow model
            es = self.coeff.acs_fixwing[actype]["engines"]
            e = es[list(es.keys())[0]]
            coeff_a, coeff_b, coeff_c = thrust.compute_eng_ff_coeff(
                e["ff_idl"], e["ff_app"], e["ff_co"], e["ff_to"])

            self.lifttype[-n:] = coeff.LIFT_FIXWING

            self.Sref[-n:] = self.coeff.acs_fixwing[actype]["wa"]
            self.mass[-n:] = 0.5 * (self.coeff.acs_fixwing[actype]["oew"] +
                                    self.coeff.acs_fixwing[actype]["mtow"])

            self.engnum[-n:] = int(self.coeff.acs_fixwing[actype]["n_engines"])

            self.ff_coeff_a[-n:] = coeff_a
            self.ff_coeff_b[-n:] = coeff_b
            self.ff_coeff_c[-n:] = coeff_c

            all_ac_engs = list(
                self.coeff.acs_fixwing[actype]["engines"].keys())
            self.engthrmax[-n:] = self.coeff.acs_fixwing[actype]["engines"][
                all_ac_engs[0]]["thr"]
            self.engbpr[-n:] = self.coeff.acs_fixwing[actype]["engines"][
                all_ac_engs[0]]["bpr"]

        # init type specific coefficients for flight envelops
        if actype in self.coeff.limits_rotor.keys():  # rotorcraft
            self.vmin[-n:] = self.coeff.limits_rotor[actype]["vmin"]
            self.vmax[-n:] = self.coeff.limits_rotor[actype]["vmax"]
            self.vsmin[-n:] = self.coeff.limits_rotor[actype]["vsmin"]
            self.vsmax[-n:] = self.coeff.limits_rotor[actype]["vsmax"]
            self.hmax[-n:] = self.coeff.limits_rotor[actype]["hmax"]

            self.vsmin[-n:] = self.coeff.limits_rotor[actype]["vsmin"]
            self.vsmax[-n:] = self.coeff.limits_rotor[actype]["vsmax"]
            self.hmax[-n:] = self.coeff.limits_rotor[actype]["hmax"]

            self.cd0_clean[-n:] = np.nan
            self.k_clean[-n:] = np.nan
            self.cd0_to[-n:] = np.nan
            self.k_to[-n:] = np.nan
            self.cd0_ld[-n:] = np.nan
            self.k_ld[-n:] = np.nan
            self.delta_cd_gear[-n:] = np.nan

        else:
            if actype not in self.coeff.limits_fixwing.keys():
                actype = "B744"

            self.vminic[-n:] = self.coeff.limits_fixwing[actype]["vminic"]
            self.vminer[-n:] = self.coeff.limits_fixwing[actype]["vminer"]
            self.vminap[-n:] = self.coeff.limits_fixwing[actype]["vminap"]
            self.vmaxic[-n:] = self.coeff.limits_fixwing[actype]["vmaxic"]
            self.vmaxer[-n:] = self.coeff.limits_fixwing[actype]["vmaxer"]
            self.vmaxap[-n:] = self.coeff.limits_fixwing[actype]["vmaxap"]

            self.vsmin[-n:] = self.coeff.limits_fixwing[actype]["vsmin"]
            self.vsmax[-n:] = self.coeff.limits_fixwing[actype]["vsmax"]
            self.hmax[-n:] = self.coeff.limits_fixwing[actype]["hmax"]
            self.axmax[-n:] = self.coeff.limits_fixwing[actype]["axmax"]
            self.vminto[-n:] = self.coeff.limits_fixwing[actype]["vminto"]
            self.hcross[-n:] = self.coeff.limits_fixwing[actype]["crosscl"]
            self.mmo[-n:] = self.coeff.limits_fixwing[actype]["mmo"]

            self.cd0_clean[-n:] = self.coeff.dragpolar_fixwing[actype][
                "cd0_clean"]
            self.k_clean[-n:] = self.coeff.dragpolar_fixwing[actype]["k_clean"]
            self.cd0_to[-n:] = self.coeff.dragpolar_fixwing[actype]["cd0_to"]
            self.k_to[-n:] = self.coeff.dragpolar_fixwing[actype]["k_to"]
            self.cd0_ld[-n:] = self.coeff.dragpolar_fixwing[actype]["cd0_ld"]
            self.k_ld[-n:] = self.coeff.dragpolar_fixwing[actype]["k_ld"]
            self.delta_cd_gear[-n:] = self.coeff.dragpolar_fixwing[actype][
                "delta_cd_gear"]

        # append update actypes, after removing unknown types
        self.actype[-n:] = [actype] * n

        # Update envelope speed limits
        mask = np.zeros_like(self.actype, dtype=bool)
        mask[-n:] = True
        self.vmin[-n:], self.vmax[-n:] = self._construct_v_limits(mask)
コード例 #6
0
    def create(self, n=1):
        # cautious! considering multiple created aircraft with same type

        super(OpenAP, self).create(n)

        actype = bs.traf.type[-1].upper()

        # check fixwing or rotor, default fixwing if not found
        if actype in self.coeff.actypes_rotor:
            self.lifttype[-n:] = coeff.LIFT_ROTOR
            self.mass[-n:] = 0.5 * (self.coeff.acs_rotor[actype]['oew'] +
                                    self.coeff.acs_rotor[actype]['mtow'])
            self.engnum[-n:] = int(self.coeff.acs_rotor[actype]['n_engines'])
            self.engpower[-n:] = self.coeff.acs_rotor[actype]['engines'][0][
                1]  # engine power (kW)

        else:
            # convert to known aircraft type
            if (actype not in self.coeff.actypes_fixwing) or (
                    actype not in self.coeff.limits_fixwing.keys()):
                print(
                    "WARNING: Aircraft type: %s was not found. It is set to %s."
                    % (actype, 'A320'))
                actype = 'A320'

            # populate fuel flow model
            if not self.coeff.acs_fixwing[actype]['engines']:
                print(
                    "WARNING: Engine type of %s was not found. Aircraft type is set to %s."
                    % (actype, 'A320'))
                actype = 'A320'

            es = self.coeff.acs_fixwing[actype]['engines']
            e = es[list(es.keys())[0]]
            coeff_a, coeff_b, coeff_c = thrust.compute_eng_ff_coeff(
                e['ff_idl'], e['ff_app'], e['ff_co'], e['ff_to'])

            self.lifttype[-n:] = coeff.LIFT_FIXWING

            self.Sref[-n:] = self.coeff.acs_fixwing[actype]['wa']
            self.mass[-n:] = 0.5 * (self.coeff.acs_fixwing[actype]['oew'] +
                                    self.coeff.acs_fixwing[actype]['mtow'])

            self.engnum[-n:] = int(self.coeff.acs_fixwing[actype]['n_engines'])

            self.ff_coeff_a[-n:] = coeff_a
            self.ff_coeff_b[-n:] = coeff_b
            self.ff_coeff_c[-n:] = coeff_c

            all_ac_engs = list(
                self.coeff.acs_fixwing[actype]['engines'].keys())
            self.engthrust[-n:] = self.coeff.acs_fixwing[actype]['engines'][
                all_ac_engs[0]]['thr']
            self.engbpr[-n:] = self.coeff.acs_fixwing[actype]['engines'][
                all_ac_engs[0]]['bpr']

            # init drag polar coefficients
            if actype in self.coeff.dragpolar_fixwing.keys():
                self.cd0_clean[-n:] = self.coeff.dragpolar_fixwing[actype][
                    'cd0_clean']
                self.cd0_gd[-n:] = self.coeff.dragpolar_fixwing[actype][
                    'cd0_gd']
                self.cd0_to[-n:] = self.coeff.dragpolar_fixwing[actype][
                    'cd0_to']
                self.cd0_ic[-n:] = self.coeff.dragpolar_fixwing[actype][
                    'cd0_ic']
                self.cd0_ap[-n:] = self.coeff.dragpolar_fixwing[actype][
                    'cd0_ap']
                self.cd0_ld[-n:] = self.coeff.dragpolar_fixwing[actype][
                    'cd0_ld']
                self.k[-n:] = self.coeff.dragpolar_fixwing[actype]['k']
            else:
                self.cd0_clean[-n:] = self.coeff.dragpolar_fixwing['NA'][
                    'cd0_clean']
                self.cd0_gd[-n:] = self.coeff.dragpolar_fixwing['NA']['cd0_gd']
                self.cd0_to[-n:] = self.coeff.dragpolar_fixwing['NA']['cd0_to']
                self.cd0_ic[-n:] = self.coeff.dragpolar_fixwing['NA']['cd0_ic']
                self.cd0_ap[-n:] = self.coeff.dragpolar_fixwing['NA']['cd0_ap']
                self.cd0_ld[-n:] = self.coeff.dragpolar_fixwing['NA']['cd0_ld']
                self.k[-n:] = self.coeff.dragpolar_fixwing['NA']['k']

        # append update actypes, after removing unkown types
        self.actypes[-n:] = [actype] * n