RANDOM_SEED와 RANDOM_NUMBER를 이용하여

핵반응기 차폐 모사 프로그램 작성

PROGRAM Shielding

IMPLICIT NONE

REAL :: RandomReal

INTEGER :: Thickness, DirectionChangeLimit, NewDirection, &
OldDirection, NumDirectionChanges, Forward, &
NumNeutrons, NumEscaped, I

PRINT *, "Enter thickness of shield, limit on # of direction changes"
PRINT *, "and the number of neutrons to simulate : "

READ *, Thickness, DirectionChangeLimit, NumNeutrons

NumEscaped = 0

CALL RANDOM_SEED

DO I = 1, NumNeutrons

Forward = 0
OldDirection = 0
NumDirectionChanges = 0

DO

CALL RANDOM_NUMBER(RandomReal)

NewDirection = 1 + INT(4 * RandomReal)

IF (NewDirection /= OldDirection) THEN
NumDirectionChanges = NumDirectionChanges + 1
OldDirection = NewDirection
END IF

IF (NewDirection == 1) THEN
Forward = Forward + 1
ELSE IF (NewDirection == 2) THEN
Forward = Forward - 1
END IF

IF ((Forward >= Thickness) .OR. (Forward <= 0) .OR. &
(NumDirectionChanges >= DirectionChangeLimit)) EXIT
END DO

IF (Forward == Thickness) NumEscaped = NumEscaped + 1

END DO

PRINT '(1X, F5.2, "% of the neutrons escaped")', &
100 * REAL(NumEscaped) / REAL(NumNeutrons)

END PROGRAM Shielding

위 소스를 07_03_Shielding.f95로 저장

컴파일 및 프로그램 테스트



+ Recent posts