def METHOD_NAME(psy):
    ''' Transform a specific Schedule by making all loops
    over vertical levels OpenMP parallel.
    :param psy: the object holding all information on the PSy layer \
                to be modified.
    :type psy: :py:class:`psyclone.psyGen.PSy`
    :returns: the transformed PSy object
    :rtype:  :py:class:`psyclone.psyGen.PSy`
    '''
    # Get the Schedule of the target routine
    sched = psy.invokes.get('tra_adv').schedule
    loops = [loop for loop in sched.walk(Loop) if loop.loop_type == "levels"]
    idx = 0
    # Loop over each of these loops over levels to see which neighbour each
    # other in the Schedule and thus can be put in a single parallel region.
    while idx < len(loops):
        child = loops[idx]
        posn = child.parent.children.index(child)
        loop_list = [child]
        current = idx + 1
        # Look at the children of the parent of the current node, starting
        # from the immediate sibling of the current node
        for sibling in child.parent.children[posn+1:]:
            # Is this immediate sibling also in our list of loops?
            if current < len(loops) and sibling is loops[current]:
                # It is so add it to the list and move on to the next sibling
                loop_list.append(sibling)
                current += 1
            else:
                # It's not so that's the end of the list of nodes that we
                # can enclose in a single parallel region
                break
        idx = current
        try:
            OMP_PARALLEL_TRANS.apply(loop_list)
            for loop in loop_list:
                OMP_LOOP_TRANS.apply(loop)
        except TransformationError:
            pass
    directives = sched.walk(Directive)
    print(f"Added {len(directives)} Directives")
    # Display the transformed PSyIR
    print(sched.view())
    # Return the modified psy object
    return psy