what do you mean by setting the matrix type before the preallocation?
I did it like this:
    call MatCreateMPIAIJ(PETSC_COMM_WORLD, Np, Np, Ng, Ng, &
         nmax, PETSC_NULL, nmax, PETSC_NULL, Jac, info)
    call MatSetLocalToGlobalMapping(Jac, lgm, info)
(i also had d_nnz and o_nnz there, but I deleted it when I switched to
matrix shell)