Одна вещь, которая бросается в глаза, это то, что вы используете sizeof(&foo)
(размер указателя на foo), когда вы, вероятно, имеете в виду sizeof(*foo)
(размер того, на что указывает foo).
Могу поспорить, что происходит то, что mpic ++ компилируется в 32-битную цель, где размер double равен 64 битам, а размер адресов 32 битам. Это дает вам несоответствие и вызывает проблемы. Ваш g ++, вероятно, нацелен на 64-битную систему, где эти размеры одинаковы (оба 64-битных).
EDIT:
Вот код, который вы должны использовать:
double * one = new double[nx * nx * nt];
double ** two = new double*[nx * nx];
double ***rho_exp = new double**[nx];
И, если честно, вы заново изобретаете колесо. Вам следует использовать предоставляемую поставщиком библиотеку BLAS , в которой быстрые операции с матрицами оптимизированы для вашей платформы (возможно, в сотни раз быстрее, чем вы пишете ...).