Support non-square elements in regular quad mesh generation

as titled
changed to use std:array