포트란 90에 문제가 있습니다.포트란 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