Справочное руководство по языку Fortran 95

перевод Балуева А. Н.

Оглавление

Глава 2.Алфавитный справочник

Функция COSH

В начало страницы

Описание
Гиперболический cosine.
Syntax
COSH (x)
Аргумент
x должен иметь тип REAL.
Результат
Результат имеет тот же тип и разновидность, что и x. Его значение есть представление типа REAL гиперболического косинуса x.
Пример
r = cosh(.5) ! r получает значение 1.12763

Функция COUNT

В начало страницы

Описание
Подсчет количества элементов true в маске вдоль указанного измерения.
Syntax
COUNT (mask, dim)
Обязательный аргумент
mask должна иметь тип LOGICAL. Она не может быть скаляром.
Необязательный аргумент
dim должен быть скаляром типа INTEGER в пределах 1 <= dim <= n , где n есть ранг mask. Соответствующий фактический аргумент не может быть необязательным фиктивным аргументом.
Результат
Результат имее тип INTEGER по умолчанию. Его значение и ранг вычисляются следующим образом:

  1. Если dim отсутствует или mask имеет ранг 1, результат есть скаляр. Его значение есть количество элементов, для которых mask есть true.
  2. Если dim присутствует или mask имеет ранг больше 1, то результат есть массив ранга n-1 формы (d1, d2, ..., ddim-1, ddim+1, ..., dn), где (d1, d2, ..., dn) есть форма mask, а n есть ранг mask. Результат есть количество элементов true для каждого соответствующего вектора в mask.
Пример
        integer, dimension (2,3) :: a, b
                          integer, dimension (2) :: c
                          integer, dimension (3) :: d
                          integer :: e
                          a = reshape((/1,2,3,4,5,6/), (/2,3/))
                                              ! представляет  |1 3 5|
                                                                       |2 4 6|
                          b = reshape((/1,2,3,5,6,4/), (/2,3/))
                                               ! представляет |1 3 6|
                                                                        |2 5 4|
                          e = count(a==b)      ! e получает значение  3
                          d = count(a==b, 1)! d получает значение  2,1,0
                          c = count(a==b, 2)! c получает значение  2,1
              

Подпрограмма CPU_TIME

В начало страницы

Описание
Время процессора.
Syntax
CPU_TIME (time)
Аргумент
time должно быть скаляром типа REAL. Это есть аргумент INTENT (OUT), который получает значение времени процессора в секундах.
Заметим, что CPU_TIME отражает фактическое время процессора только тогда, когда прикладная программа скомпилирована для Windows и исполняется на NT или когда она скомпилирована для Linux и исполняется под Linux. В остальных случаях CPU_TIME ведет себя как SYSTEM_CLOCK.

Функция CSHIFT

В начало страницы

Пример

                 call cpu_time(start_time)
                 x = cos(2.0)
                 call cpu_time(end_time)
                 cos_time = end_time - start_time
                 ! время на вычисление и помещение в память  cosine (2.0)
Функция CSHIFT
Описание
Циклический сдвиг всех секций ранга один в массиве. Элементы, выдвинутые с одного конца, вдвигаются с другого. Различные секции могут сдвигаться на разные количества и в разных направлениях с помощью массивного (array-valued) сдвига.
Syntax
CSHIFT (array, shift, dim)
Обязательные аргументы
array может иметь любой тип. Он не может быть скаляром.
shift должен иметь тип INTEGER и быть скаляром, если array имеет ранг 1; в остальных случаях он должен быть скаляром или иметь ранг n-1 и форму (d1, d2, ..., ddim-1, ddim+1, ..., dn) , где (d1, d2, ..., dn) есть форма массива.
Необязательный аргумент
dim должен быть скаляром типа INTEGER со значением в пределах от 1 до n , где n есть ранг массива array. Если dim опущен, он предполагается присутствующим и имеющим значение 1.
Результат
Результат имеет тот же тип, разновидность и форму, что и array.

Если array имеет ранг один, значение результата есть значение array с циклически сдвинутыми элементами. Сдвиг на n имеет значением вектор с элементами array(1 + MODULO(i + n - SIZE(array))) на месте i.

Если array имеет ранг 2 или больше, каждый полный вектор вдоль измерения dim циклически сдвигается на shift элементов. shift может иметь начением массив.
Пример
                          integer, dimension (2,3) :: a, b
                          integer, dimension (3) :: c, d
                          integer :: e
                          a = reshape((/1,2,3,4,5,6/), (/2,3/))
                                                ! представляет |1 3 5|
                                                                   |2 4 6|
                          c = (/1,2,3/)
                          b = cshift(a,1)      ! b получает значение |2 4 6|
                                            !                           |1 3 5|
                          b = cshift(a,-1,2)! b получает значение |3 5 1|
                                             !                        |4 6 2|
                          b = cshift(a,c,1) ! b получает значение  |2 3 5|
                                                !                     |1 4 6|
                          d = cshift(c,2)   ! c получает значение |3 1 2|

Оператор CYCLE

В начало страницы
Описание
Оператор CYCLE прекращает выполнение очередной итерации в операторе DO loop.
Syntax
CYCLE [ do-construct-name ]
где:
do-construct-name есть имя конструкта DO, который содержит оператор CYCLE. Если do-construct-name опущено, считается, что do-construct-name относилось к самому внутреннему конструкту DO, содержащему оператор CYCLE.
Пример
                          outer: do i=1, 10
                          inner:     do j=1, 10
                                        if (i>a) cycle outer
                                        if (j>b) cycle ! к циклу inner
                                        ...
                                     enddo inner
                                    enddo outer

Оператор DATA

В начало страницы
Описание
Оператор DATA обеспечивает начальные значения для переменных.
Syntax
                
                DATA data-stmt-set [ [ , ] data-stmt-set ] ...
Здесь:
data-stmt-set есть  object-list / value-list /
object-list есть список через запятую имен переменных или implied-dos.
value-list есть список через запятую  [repeat *] data-constant.
repeat есть целая константа типа INTEGER.
data-constant есть скалярная константа (literal или именованная) или
конструктор структуры.
implied-do есть (implied-do-object-list , implied-do-var = expr, expr[, expr]).
implied-do-object-list есть список через запятую элементов массива,
скалярных компрнент структуры или  implied-dos.
implied-do-var есть скалярная переменная типа INTEGER.
expr есть скалярное выражение типа INTEGER.
Замечания

object-list расширяется в последовательность скалярных переменных. Массив,простое имя которого стоит в object-list, эквивалентен полной последовательности его элементов в стандартном порядке. Секция массива эквивалентна последовательности ее элементов в порядке элементов в масиве. implied-do расширяется в последовательность элементов массива и компонент структуры под управлением implied-do-var, как в конструкте DO.

value-list развертывается в последовательность скалярных постоянных значений. Каждое такое значение должно быть константой, которая или определена ранее или сделана доступной использованием ассоциации или хост-ассоциации.

repeat показывает, сколько раз следующая константа должна быть включена в последовательность; отсутствие repeat имеет эффект повторения один раз.

Расширенные последовательность скалярных переменных и значений констант находятся во взаимно однозначном соответствии. Каждая постоянная определяет начальное значение соответствующей переменной. Длины обеих расширенных последовательностей должны совпадать. Никакая переменная или ее часть не может инициализироваться в программе более одного раза.

Переменная, имя которой включено в object-list, не должна:
быть фиктивным аргументом, сделанным доступным посредством ассоциации или хост-ассоциации;
входить в блок common, если оператор DATA не входит в программную единицу блок данных ;
входить в безымянный common block;
быть именем функции или результата функции;
быть автоматческим объектом, указателем, размещаемым массивом.

В элементе массива или скалярной компоненте структуры, которые стоят в implied-do-object-list, каждый индекс должен быть выражением, в котором первичныые составляющие есть или постоянные или implied-do-vars содержащих implied-dos, и все операции должны быть встроенными.

expr должно сдержать в качестве первичных только константы или implied-do-vars используемых implied-dos, а все операции должны быть встроенными. Значения констант должны быть совместимы с соответствующими им переменными по правилам встроенного присваивания, которые получают начальные значения по тем же правилам встроенного присваивания.

Пример
                          real :: a
                          integer, dimension (-3:3) :: smallarray
                          integer, dimension (10000) :: bigarray
                          data a /3.78/, smallarray /7 * 1/
                                  ! присваивает a значение 3.78  и  1 каждому
                                                   ! элементу в  smallarray
                          data (bigarray(i), i=1,10000,2) /5000*6/
                                             ! присваивает  6 каждому элементу
                                             ! с нечетным индексом

Подпрограмма DATE_AND_TIME

В начало страницы
Описание
Дата и значение real-time clock.
Syntax
DATE_AND_TIME (date, time, zone, values)
Необязательные аргументы

date должна быть скаляром типа default CHARACTER и должна иметь длину по крайней мере восемь, чтобы получить полное значение. Она используется как INTENT (OUT) argument. Ее самые левые восемь символов устанавливаются в значение вида ccггммдд, где сс означают столетия, гг -- годы в столетии мм -- месяц года и дд -- день месяца. Если дата недоступна, выдаются пробелы.

time должна быть скаляром типа default CHARACTER и должна иметь длину по крайней мере десять, чтобы получить полное значение. Это тоже аргумент INTENT (OUT). Его левые 10 символов устанавливаются в значение вида ччммсс.ссс, где чч есть часы дня, мм есть минуты, сс.ссс означают секунды и миллисекунды. Если часы недоступны, time заполняется пробелами.

zone должна быть скаляром типа default CHARACTER и иметь длину по крайней мере пять для получения полного значения. Это тоже аргумент INTENT (OUT). Его символы устанавливаются по форме +-ччмм, где чч и мм есть разница во времени по отношению Coordinated Universal Time (UTC, известное также как Среднее Гринвичское время ) в часах и минутах.

Если часы недоступны, поле времени заполняется пробелами. Чтобы воспользоваться аргументом zone, нужно предварительно установить значение в переменную окружения TZ:

         TZ=ZZZ[+/-]d[d][LLL]
Здесь ZZZ есть трехсимвольная цепочка, представляющая имя текущей временной зоны;

[+/-]d[d] есть требуемое поле, содержащее число из одной или двух цифр с возможным знаком, представляющее разность между локальным временем и UTC в часах (отрицательные числа соответствуют зонам к востоку от UTC);
а [LLL]есть необязательное трехсимвольное поле, представляющее местное декретное время (daylight savings time). Если [LLL] присутствует, то 1 добавляется к [+/-]d[d]. ZZZ и LLL (если есть) указываются с верхним регистром.

Например, "TZ=PST-8PDT" должно использоваться на западном побережье US в течение той части года, когда действует декретное время, и "TZ=PST-8" в остальное время года. Если переменная окружения TZ не установлена или установлена с неверным форматом, zone будет заполняться пробелами.

values должен иметь тип INTEGER по умолчанию и ранг 1. Это аргумент есть INTENT (OUT). Его размер должен быть по крайней мере восемь. Значения, возвращаемые в values, таковы:

values (1) содержит год (например, 1990) или -huge(0), если дата недоступна.
values (2) содержит месяц года или -huge(0), если дата недоступна.
values (3) содержит день месяца или -huge(0), если дата недоступна.
values (4) содержит разность по отношению к Coordinated Universal Time (UTC) в минутах или -huge(0), если эта информация недоступна.
values (5) содержит время дня в диапазоне от 0 до 23 или -huge(0), если часов нет.
values (6) содержит минуты часа в диапазоне от 0 до 59 или -huge(0), если часов нет.
values (7) содержит секунды минуты в диапазоне от 0 до 60 или -huge(0).
values (8) содержит миллисекунды, оставшиеся от секунды или -huge(0).

Пример
          ! вызвана в Incline Village, NV on February 3, 1993
          ! в момент  10:41:04.1
          integer :: dt(8)
          character (len=10) :: time, date, zone
          call date_and_time (date, time, zone, dt)
          ! date получает значение "19930203"
          ! time получает значение "104104.100"
          ! zone получает значение "-800"
          ! dt получает значение : 1993,2,3,
          !                                       -480,10,41,4,100.

Функция DBLE

В начало страницы
Описание
Конвертирует в тип REAL двойной точности.
Syntax
DBLE (a)
Аргумент
a должно иметь тип INTEGER, REAL или COMPLEX.
Результат
Результат имеет тип REAL двойной точности. Его значение есть представление с двойной точностью значения a. Если a имеет тип COMPLEX, результат представляет с двойной точностью его вещественную часть.
Пример
                      double precision d
                      d = dble (1) ! d получает значение 1.00000000000000

Оператор DEALLOCATE

В начало страницы

Описание
Оператор DEALLOCATE освобождает память, занятую размещаемыми массивами и назначениями указателей и деассоциирует указатели.
Syntax
DEALLOCATE ( object-list [, STAT = stat-variable ] )
Здесь:
object-list есть список через запятую указателей или размещаемых массивов. stat-variable есть скалярная переменная типа INTEGER.
Замечания

Если необязательное STAT= присутствует и оператор DEALLOCATE успешно выполнен, stat-variable получает значение 0. Если STAT= is присутствует, а оператор DEALLOCATE обнаружил ошибку, stat-variable получает значением номер динамического сообщения об ошибке. Если ошибка произошла при выполнении оператора DEALLOCATE без STAT= specifier, то выполнение программы прекращается.

Выполнение Deallocate для размещаемого массива, которого в данный момент в памяти нет, или для указателя, который деассоциирован или назначения которого нет в памяти, приводит к ошибке в операторе DEALLOCATE.

Если указатель в данный момент ассоциирован с размещаемым массивом, к нему нельзя применять deallocat.

Деаллокация размещаемого массива или указателя с атрибутом TARGET приводит к тому, что статус ассоциации всякого указателя, ассоциированного с ним, становится неопределенным.

Пример
                 deallocate (a, b, stat=s) ! приводит к деаллокации  a  b
                                           ! при успехе
                                           ! s iполучает значением  0

Функция DIGITS

В начало страницы
Описание
Количество значащих двоичных цифр.
Syntax
DIGITS (x)
Аргумент
x должен иметь тип INTEGER или REAL. Он может быть скаляром или массивом.
Результат
Имеет тип default INTEGER. Его значение есть количество значащих двоичных цифр в x.
Пример
                 real :: r
                 integer :: i
                 i = digits (r) ! i получает значение  24

Функция DIM

В начало страницы

Описание
Разность между двумя числами, если разность положительна; ноль в противном случае.
Syntax
DIM (x, y)
Аргументы
x должен быть типа INTEGER или REAL.
y должен быть того же типа и разновидности, что и x.
Результат
Результат имеет тот же тип, что и x. Его значение есть x - y, если x больше чем y, и 0 в противном случае.
Пример

                           z = dim(1.1, 0.8) ! z получает значение  0.3
                           z = dim(0.8, 1.1) ! z получает значение  0.0

Оператор DIMENSION

В начало страницы

Описание
Оператор DIMENSION определяет форму массива.
Syntax

DIMENSION [ :: ] array-name (array-spec) [ , array-name (array-spec) ] ...

Здесь:
array-name есть имя массива.
array-spec есть explicit-shape-specs
                или assumed-shape-specs
                или deferred-shape-specs
                или assumed-size-spec.
explicit-shape-specs есть список через запятую выражений
                [lower-bound : ] upper-bound,
  которые специфицируют форму и границы массивов явной формы.
  
assumed-shape-specs есть список через запятую [lower-bound] : , что
вместе с измерениями соответствующего фактического аргумента определяет
форму и границы массива предполагаемой формы.

deferred-shape-specs есть список через запятую двоеточий, которые указывают
ранг массива с отложенной формой.

assumed-size-spec есть [ explicit-shape-specs, ] [ lower-bound : ] *
assumed-size-spec указывает форму фиктивного аргумента-массива, размер
которого предполагается согласным фактическому аргументу-массиву.

lower-bound есть скалярное INTEGER выражение, значение которого можно
вычислить при входе в программную единицу и которое указывает нижнюю
границу данного измерения массива.

upper-bound есть скалярное INTEGER выражение, которое можно вычислить
при входе в программную единицу и которое указывает верхнюю границу данного
измерения массива.
Пример
                dimension a(3,2,1) ! a есть массив 3x2x1
                dimension b(-3:3) ! b есть 7-елементный вектор с
                                         ! нижней границей -3
                dimension c(:,:,:) ! c есть массив с предполагаемой формой или
                                         ! отложенной формой
                                         ! ранга  3
                dimension d(*)        ! d есть массив предполагаемого размера

Оператор DLL_EXPORT

В начало страницы

Описание
Оператор DLL_EXPORT указывает, какие процедуры должны быть доступными в динамической библиотеке.
Syntax
DLLEXPORT dll-export-names
где:
dll-export-names есть список процедур, определенных в текущей единице видимости.
Замечания
Процедуры, указанные в dll-export-names, не должны быть модульными процедурами.
Пример

                function half(x)
                  implicit none
                  integer :: half
                  dll_export half
                  half = x/2
                  return
                end function half

Оператор DLL_IMPORT

В начало страницы

Описание
Оператор DLL_IMPORT указывает, какие процедуры должны быть импортированы из динамической библиотеки.
Syntax
DLL_IMPORT dll-import-names
где:
dll-import-names есть список через запятую имен процедур.
Пример

                           program main
                             implicit none
                             integer :: foo, i
                             dll_import foo
                             i = half(i)
                             stop
                           end program main


<<< Оглавление Страницы:  9   10 >>>