1 / 23

Программирование на современном Фортране

Программирование на современном Фортране. Занимает лидирующее положение среди языков программирования, ориентированных на решение научно-технических задач, требующих большого объема вычислений

zazu
Télécharger la présentation

Программирование на современном Фортране

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Программирование на современном Фортране • Занимает лидирующее положение среди языков программирования, ориентированных на решение научно-технических задач, требующих большого объема вычислений • Постоянно развивается и совершенствуется в соответствии с развитием вычислительной техники и технологий программирования • Накоплен огромный фонд прикладных программ • Удобство программирования • Эффективность выполнения программ • Стандартизация языка на международном уровне

  2. Структура программы Программа состоит из программных единиц: • главная программная единица (PROGRAM); • подпрограмма(SUBROUTINE); • функция (FUNCTION); • блок данных (BLOCK DATA); • модуль (MODULE).

  3. Лексемы • Имена (до 31 символа – в старых версиях 6) • Метки (не более 5 цифр) • Ключевые слова • Встроенные операции: + - * / ** - арифметические .NOT. .AND. .OR. .EQV. .NEQV. – логические .EQ. .LT. .LE. .GT. .GE. .NE. – отношения == < <= > >= /=

  4. Формат исходного текста • Фиксированный (зафиксированы позиции строки) 1234567 С Длина строки 72 символа * 1-5 метка 123 A (I,J) = (A (I-1,J) + A (I+1,J) + A (I,J-1) * + A (I, J+1))/4 • Свободный ! Оператор со строкой продолжения A = ‘ Перенос строки на & & строку-продолжение’

  5. Оператор IMPLICIT принцип умолчания: приписывание объектам типа по имени объекта I,J,K,L,M,N – INTEGER остальные – REAL INTEGER ICOUNT0 … ICOUNT0=ICOUNTO+1 IMPLICIT NONE ! Тип всех объектов должен быть ! объявлен явно

  6. Базовые типы данных • Целый INTEGER I ! 34567 • Вещественный REAL X,Y,Z! -3.2 DOBLE PRECISION T! 12.6E-11 • Комплексный COMPLEX Z1, Z2 ! (2.5, -3.) • Логический LOGICAL L ! .TRUE. или .FALSE. • Символьный CHARACTER (LEN=6) C1, C2 ! ‘SUM’ или “PART1”

  7. Производные типы данных TYPE BOOK CHARACTER (LEN = 30) TITLE CHARACTER (LEN = 20) AUTHOR INTEGER NUM_OF_PAGES END TYPE BOOK TYPE (BOOK) :: BOOK_1, BOOK_2 BOOK_1%AUTHOR = ‘Tolstoy’

  8. Массивы REAL Z (100,200) REAL, DIMENSION (100,100) :: X,Y DIMENSION W (2:10, 3, -1:1) REAL, DIMENSION(21):: AR= (/(1.5,2.8, L=1,10), 6.4/) REAL, DIMENSION (:,:) ALLOCATABLE :: AR1, AR2 READ (*,*) NX,NY ALLOCATE ( AR1 (NX,NY), AR2 (NX,NY)) … DEALLOCATE (AR1, AR2, STAT = NUMB_ERR)

  9. Массивы “по столбцам”

  10. Секция массива REAL, DIMENSION :: Z (M,N), V(3), A (3,3) Z (3,:) – третья строка матрицы Z; Z (:,J) – J-ый столбец матрицы Z; Z (K1:K2, L1:L2:L3) – прямоугольная секция V = (/2, 1, 3/) A (3,V) - секция массива содержащая элементы: A(3,2), A(3,1) и A(3,3)

  11. Операторы присваивания REAL X (10,20), Y(40), Z (-7:12), W (10,10) Z(1) = 7.4 Z = 7.4 X(10, :) = 2.9 * Y (2:40:2) +EXP(Z) Y (1:40) = Y (40:1:-1) Y (3:5) = Y (2:4) W(1:10, I) = X (J,1:10)

  12. Присваивание по маске WHERE (A<0.0) A=0.0 WHERE (W /=Y) X(10, :) = (W+Y)/(W-Y) ELSEWHERE X(10, :) = 0.0 END WHERE

  13. Условные операторы IF (X .LT. 0) X = -X IF (A .LT. 0.0) THEN X = A + 1.0 ELSE IF (A .EQ. 0.0) THEN X = A + 2.0 ELSE IF (A .LT. 3.0) THEN X = A + 3.0 ELSE X = A + 4.0 ENDIF … IF (N-10) 10, 20, 30

  14. Конструкция выбора SELECT CASE (N) CASE (:-1) X = -N CASE (0, 4:6, 9) X = 0 CASE DEFAULT X = N END SELECT

  15. Циклы DO 20 I = 10, 1, -2 WRITE (*,*) ‘I =', I 20 CONTINUE DO I = 1, 10 WRITE (*,*) ‘I =', I ENDDO

  16. Циклы SUM=0.0 I=0 DO WHILE (I<5) ! WHILE (I<5) DO I=I+1 SUM=SUM + 1 ENDDO … DO I=I+1 SUM=SUM + 1 UNTIL (I<5)

  17. Циклы DO WHILE (IND<5) IND=IND-1 IF (IND < 0) EXIT IF(IND==0) CYCLE … ENDDO LOOP1: DO WHILE (N<1000) READ *,N IF (N .EQ. SIGNAL) EXIT LOOP1 … ENDDO

  18. Функции REAL FUNCTION FUNC(M,T) INTEGER M REAL T SAVE ICOUNT FUNC = 0.1*T * (M**2 + 14*M + 46) IF (FUNC .LT. 0) FUNC = 0.0 ICOUNT = ICOUNT + 1 RETURN END … IF (FUNC(I,X) .GT. FUNC(J,Y)) THEN …

  19. Процедуры SUBROUTINE S (X,N,METHOD,PR) INTEGER, OPTIONAL :: PR, METHOD REAL, INTENT(OUT) :: X (N) INTEGER, INTENT(IN) :: N REAL WORK (N) ! Автоматический массив EXTERNAL FUNC WORK (1) = FUNC (1, X(1)) … END SUBROUTINE S CALL S (Y,N, PR=6)

  20. Рекурсивная функция RECURSIVE FUNCTION FACTORIAL (N) RESULT (NFACTORIAL) INTEGER, INTENT (IN) :: N INTEGER NFACTORIAL SELECT CASE (N) CASE (0) NFACTORIAL = 1 CASE (1:) NFACTORIAL = N * FACTORIAL (N-1) CASE DEFAULT NFACTORIAL = -1 END SELECT END FUNCTION FACTORIAL

  21. Оператор COMMON SUBROUTINE SUB1 (some arguments) declarations of arguments REAL ALPHA, BETA COMMON /COEFF/ ALPHA, BETA ! Описание общей области statements! памяти, доступной разным RETURN ! блокам. END SUBROUTINE SUB2 (some arguments) declarations of arguments REAL ALPHA, BETA COMMON /COEFF/ ALPHA, BETA statements RETURN END

  22. Оператор DATA REAL A1, A2, A3 INTEGER M1, N1 DATA A1, A2, A3 /1., 2., 3./, M1 , N1 /1, -1/ REAL W1, W2, W3 DATA W1, W2, W3 / 3*0.0/ REAL AR (10, 10) DATA AR /100*1.1/ DATA AR(1,1),AR(10,1),AR(1,10),AR(10,10) /2*1.0, 2*2.0/

  23. PROGRAM JAC PARAMETER (L=8, ITMAX=20) REAL A(L,L), EPS, MAXEPS, B(L,L) PRINT *, '********** TEST_JACOBI **********' MAXEPS = 0.5E - 7 DO IT = 1, ITMAX EPS = 0. DO J = 2, L-1 DO I = 2, L-1 EPS = MAX ( EPS, ABS( B( I, J) - A( I, J))) A(I, J) = B(I, J) ENDDO ENDDO DO J = 2, L-1 DO I = 2, L-1 B(I, J) = (A( I-1, J ) + A( I, J-1 ) + A( I+1, J)+ * A( I, J+1 )) / 4 ENDDO ENDDO PRINT 200, IT, EPS 200 FORMAT(' IT = ',I4, ' EPS = ', E14.7) IF ( EPS . LT . MAXEPS ) GO TO 3 ENDDO 3 OPEN (3, FILE='JAC.DAT', FORM='FORMATTED', STATUS='UNKNOWN') WRITE (3,*) B CLOSE (3) END

More Related