핵반응기 차폐 모사(서브루틴 RANDOM_SEED, RANDOM_NUMBER)
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로 저장
컴파일 및 프로그램 테스트