def METHOD_NAME(cart3d_filename: str,
                            loads_map: Optional[LOADS_DICT]=None,
                            log: Optional[SimpleLogger]=None,
                            debug: bool=False) -> BDF:
    """
    Converts a Cart3D file to Nastran format and returns a BDF() object.
    Parameters
    ----------
    cart3d_filename : str
        path to the input Cart3D file
    loads_dict: dict[load_id, case]
        case : dict[eid, pressure]
        write the loads
    log : log / None
        log : a logger object
        None : a log will be defined
    debug : bool
        True/False (used if log is not defined)
    Returns
    -------
    bdf_model : BDF
        BDF() model object
    """
    if isinstance(cart3d_filename, Cart3D):
        cart3d = cart3d_filename
    else:
        cart3d = read_cart3d(cart3d_filename, log=log, debug=debug, result_names=None)
    nodes = cart3d.nodes
    elements = cart3d.elements + 1
    regions = cart3d.regions
    if regions.min() == 0:
        # bit of a hack to take an invalid cart3d model and make it
        # work in Nastran, which requires property_ids > 0
        regions += 1
    i = 0
    nid = 1
    model = BDF(log=log, debug=debug)
    for xyz in nodes:
        model.add_grid(nid, xyz)
        nid += 1
    eid = 1
    for nids, pid in zip(elements, regions):
        model.add_ctria3(eid, pid, nids)
        #print(model.elements[eid])
        eid += 1
    t = 0.1
    E = 1e7
    G = None
    nu = 0.3
    for pid in unique(regions):
        mid = pid
        model.add_pshell(pid, mid1=mid, t=t)
        model.add_mat1(mid, E, G, nu)
    if loads_map:
        for name, load_id in loads_map.items():
            loads = cart3d.loads[name]
            comment = name
            for inid, Cp in enumerate(loads):
                loadi = model.add_sload(load_id, [inid+1], [Cp], comment=comment)
                comment = ''
    model.pop_parse_errors()
    return model