@classmethod
def subnodes(cls, n):
    conbase = np.array([0, 1, (n + 2), (n + 1)])
    if (cls.ndim == 3):
        conbase = np.hstack((conbase, (conbase + ((1 + n) ** 2))))
    nodeoff = np.zeros(((n,) * cls.ndim))
    for (dim, off) in enumerate(np.ix_(*((range(n),) * cls.ndim))):
        nodeoff += (off * ((n + 1) ** dim))
    internal_con = np.tile(conbase, ((n ** cls.ndim), 1))
    internal_con += nodeoff.T.flatten()[:, None]
    return np.hstack(internal_con)
@classmethod
def subnodes(cls, n):
    conbase = np.array([0, 1, (n + 2), (n + 1)])
    if (cls.ndim == 3):
        conbase = np.hstack((conbase, (conbase + ((1 + n) ** 2))))
    nodeoff = np.zeros(((n,) * cls.ndim))
    for (dim, off) in enumerate(np.ix_(*((range(n),) * cls.ndim))):
        nodeoff += (off * ((n + 1) ** dim))
    internal_con = np.tile(conbase, ((n ** cls.ndim), 1))
    internal_con += nodeoff.T.flatten()[:, None]
    return np.hstack(internal_con)