У меня проблема в Fortran 90.fortran 90 пользовательский тип, проходящий по значению?
У меня есть пользовательский тип, и когда я вызываю одну из подпрограмм MPI, данные выглядят переданными по значению (а не адресу, как я думал, он должен). Выходные аргументы не изменяются. Это, по-видимому, характерно для вызовов MPI. Я пробовал одно и то же в простом тесте, и я могу изменить переданные значения в области вызова. Я не знаю, почему это так, потому что я думал, что Фортран всегда проходит по адресу. Любая идея, что может продолжаться?
Чтобы быть чистым, прокомментированный фрагмент показывает, как выполняются вызовы. В первом вызове c%NSubDomains
является выходным аргументом и должен быть изменен в области вызова, но это не так. Когда я вызываю с массивом, а не с членом пользовательского типа, он работает в раскомментированном фрагменте.
! ! This doesn't work output values aren't modified ??
! call MPI_Dims_create(c%NProcs,c%NDims,c%NSubDomains,iErr)
nsubs(:)=0
call MPI_Dims_create(c%NProcs,c%NDims,nsubs,iErr)
c%NSubDomains=nsubs