def METHOD_NAME(self):
    self.fea_assembler = self.options["fea_assembler"]
    self.src_indices = self.get_dv_src_indices()
    vals = self.options["initial_dv_vals"]
    ndv = self.fea_assembler.getNumDesignVars()
    # Keep a list of dvs corresponding to regular struct dvs and mass dvs
    self.struct_dvs = list(range(len(vals)))
    self.mass_dvs = {}
    # Check if user wants to separate out point mass dvs by user-defined names
    if self.options["separate_mass_dvs"]:
        g_dvs = self.fea_assembler.getGlobalDVs()
        for dv_name in g_dvs:
            dv_dict = g_dvs[dv_name]
            if dv_dict["isMassDV"]:
                dv_num = dv_dict["num"]
                mass_val = vals[dv_num]
                # Store mass dv num with user-defined dv name
                self.mass_dvs[f"dv_mass_{dv_name}"] = dv_num
                # Remove mass dv from struct list
                self.struct_dvs.remove(dv_num)
                # Add user-defined dv name as input
                self.add_input(
                    f"dv_mass_{dv_name}",
                    desc="serial mass design variable holding one mass design variable instance for tacs",
                    val=mass_val,
                    distributed=False,
                    tags=["mphys_input"],
                )
        # Remove all mass dvs from vals
        vals = vals[self.struct_dvs]
    self.add_input(
        "dv_struct",
        desc="serial vector holding all structural tacs design variable values",
        val=vals,
        distributed=False,
        tags=["mphys_input"],
    )
    self.add_output(
        "tacs_dvs",
        desc="distributed vector holding tacs design variable values\
                    for this proc",
        shape=ndv,
        distributed=True,
        tags=["mphys_coupling"],
    )