Hi, I have an implementation issue with the MatRestrict/Interpolate functions. The problem is that one of my coarser levels (with PCMG) has higher dofs than the finest level. This does not always happen and requires a weird fine mesh system (in a sense) that uses multi-grid, but the idea is that the finest level problem has a high order (HO) discretization while the lower level mesh has a linear tesselation of the finest HO level (which I can optimize) and then adaptively coarsened levels beyond that. Since the number of columns in this case is larger than the number of rows, MatRestrict invariably calls MatMultTranspose to multiply instead of MatMult and vice-versa while calling MatInterpolate. These result in assertion errors while comparing the length of Mat and Vec. The chosen method is based on whether (M>N) which seems to act against what I am doing here...
I can always implement a shell matrix to replicate Restrict/Interpolate actions but my question is whether if such discretization will yield a consistent convergence in MG algorithm ? Is there a strong reason for checking if (M>N) rather than just doing (mat->rmap->N==y->map->N && mat->cmap->N==x->map->N) ? I would appreciate any detailed answer that you can provide for this and any suggestions to use the existing methods (without implementing the shell restriction) is very welcome. Thanks, vijay
