У меня проблема с Фортран 90.
У меня пользовательский тип, и когда я вызываю одну из подпрограмм MPI, данные выглядят так, как будто они передаются по значению (а не по адресу, как я думал). Выходные аргументы не изменяются. Кажется, это специфично для вызовов MPI. Я попробовал то же самое в простом тесте, и я могу изменить переданные значения в области вызова. Я не уверен, почему это так, потому что я думал, что Fortran всегда проходит по адресу. Есть идеи, что может происходить?
Чтобы было ясно, фрагмент с комментариями показывает, как совершаются звонки. В первом вызове 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