2016-09-02 2 views
0

최근에 많은 특수 기능을 포함하고있는 f90 파일을 발견했습니다. subroutine pbdv (v, x, dv, dp, pdf, pdd)을 사용해야하고,이 6 가지 변수의 정의를 살펴 보겠습니다. dp 및 dv의 정의는 다음과 같습니다. 배열을 서브 루틴의 이런 종류의 정의 배열에 전달하는 방법

real (kind = 8) dp(0:*) 
real (kind = 8) dv(0:*) 

어떻게 배열의 정의 어떤 종류의이 서브 루틴을 호출? 이 서브 루틴의 전체 정의는 here입니다.

+0

이 질문은 현재 약간 분명합니다. '진짜 x (0 : *)'(단순화 된) 의미를 간단하게 묻고 있습니까? 그와 같은 가짜 인수로 서브 루틴을 호출하는 측면에서 특별히 특별한 것은 없습니다. – francescalus

+0

@francescalus이 서브 루틴을 사용하려면''pbdv (v, x, dv, dp, pdf, pdd)'를 호출해야하지만이 서브 루틴을 호출하기 전에이 6 개의 변수를 정의해야합니다. 그러면 dv와 dp를 정의하기 위해 작성해야 할 문장은 무엇입니까? 'real (kind = 8) :: dp (0 : *)'이 잘못되었습니다. – zmwang

+2

가짜 인수는 _assumed-size_입니다. 그게 의미하는 바를 읽을 수 있습니다. 본질적으로, 그들은 그들에게 전달 된 것들로부터 그들의 크기를 추측합니다. 즉, 서브 루틴을 호출하는 장소에는 특별한 선언이 필요하지 않습니다. 거기에는 단지 정상적인 배열입니다. – francescalus

답변

-1

여기는 간단합니다. 또한 할당 할 수 없도록 할 수 있으며 할당 할 수있는 모든 요소를 ​​삭제할 수 있습니다.

PROGRAM MAIN 
... 
real (kind = 8), DIMENSION(:), ALLOCATABLE :: dp 
real (kind = 8), DIMENSION(-2:80)   :: dv 
... 
ALLOCATE(dp(0:100)) 
... 
CALL yourSub1('dp', dp) 
CALL yourSub2('dv', dv) 
... 
IF(ALLOCATED(DP)) DEALLOCATE(DP) 
END PROGRAM 

SUBROUTINE YourSub1(Label, ddd) 
IMPLICIT NONE 
CHARACTER(LEN=*)      , INTENT(IN ) :: Label 
real(kind=8), DIMENSION(:), ALLOCATABLE, INTENT(INOUT) :: ddd 

WRITE(*,22) Label, LBOUND(DDD, DIM=1), label, LBOUND(DDD, DIM=1) 
22 FORMAT(' LBOUND(',A,')=',I7,' UBOUND(',A,'=',I6) 

RETURN 
END SUBROUTINE YourSub1 

SUBROUTINE YourSub2(Label, ddd) 
IMPLICIT NONE 
CHARACTER(LEN=*)   , INTENT(IN ) :: Label 
real(kind=8), DIMENSION(:), INTENT(INOUT) :: ddd 

WRITE(*,22) Label, LBOUND(DDD, DIM=1), label, LBOUND(DDD, DIM=1) 
22 FORMAT(' LBOUND(',A,')=',I7,' UBOUND(',A,'=',I6) 

RETURN 
END SUBROUTINE YourSub2 
+1

이 질문에 어떻게 대답 할 수 있습니까? 이 예제는 하나의 가정 된 크기 배열을 포함하지 않습니다! (그리고 추악한 코드입니다.) –

+1

중요한 점은, 외부 서브 루틴의 주 프로그램에서 사용할 수있는 명시 적 인터페이스가 없습니다 (생략 된 코드 섹션 제외). 이러한 명시 적 인터페이스가 매우 필요합니다. – francescalus

+0

아마도 그 점을 모르겠습니까? 1 : n의 배열을 전달하고 그것을 0 : (n-1)의 배열처럼 취급합니까? 그리고 블라디미르 F는 어떤 부분이 특별히 추악한가요? OP 스타일의 컨텍스트에있는 실제 = 8 이외. zmwang은 서브 루틴이 배열에 대해 이해하는 것을 볼 수있는 방법을 제공합니다. 이것은 예제를 제공하려는 의도였습니다. – Holmz

관련 문제