СуперЭВМ в ИММ УрО РАН New Как стать пользователем Языки программирования и трансляторы Фортран-кратко, полно 77, С - опции С++,опции Работа с MPI и DVM. Здесь большое число встроенных функций Fortran 90 и 5 встроенных подпрограмм. Численные и математические подпрограммы рассмотрены очень кратко, поскольку они не заменены по сравнению с Fortran 77 и они могут быть известны. Раздел базируется на секции 13 стандарта ISO 1991который содержит более формальное рассмотрение. Мы следуем представлению различных функций и подпрограмм стандарта, но более подробное рассмотрение мы увидим у Metcalf и Reid 1990, 1993. Необязательные параметры даны малыми буквами. Когда список параметров содержит более одного параметра, функции могут быть вызваны позиционным перечислением параметров или с ключевыми словами. Ключевые слова дожны быть использованы обязательно, если предыдущие аргументы не включены. Ключевые слова обычно это имена, которые даны ниже. Мы не можем снова давать все естественные ограничения на переменные, например, что ранг не может быть отрицательным. Функция PRESENT A возвращает. Использование иллюстрируется в примере программы в главе 8 основного текста. Следующие доступные из Fortran 77: ABS, AIMAG, AINT, ANINT, CMPLX, CONJG, DBLE, DIM, DPROD, INT, MAX, MIN, MOD, NINT, REAL и SIGN. Дополнительно, CEILING, FLOOR и MODULO добавлены к Fortran 90. Только последняя трудна для объяснения, которое облегчается примером из ISO 1991 MOD 8,5 дает 3 MODULO 8,5 дает 3 MOD -8,5 дает -3 MODULO -8,5 дает 2 MOD 8,-5 дает 3 MODULO 8,-5 дает -2 MOD -8,-5 дает -3 MODULO -8,-5 дает v3 Следующие функции из Fortran 77 могут иметь параметры вида kind-parameter подобно AINT A, kindименно AINT, ANINT, CMPLX, INT, NINT и REAL. Исторический факт, что численные функции в Fortran 66 могли иметь специальные различные имена для различных точностей, и эти явные имена являются единственными, которые можно использовать, когда имя функции используется как аргумент. Полная таблица всех числовых функций следует ниже. Некоторые функции, подобно INT и IFIX имеют два специальных имени, из которых оба могут быть использованы. С другой стороны некоторые функции могут не иметь никаких специальных имен. Ниже я использую C для значений комплексных с плавающей точкойD для значений двойной точности с плавающей точкойI для целыхи R для значений одинарной точности с плавающей точкой. Новые функции FLOOR и CEILING усекают бесконечно в сторону минуса и плюсасоответственно. Функция CMPLX может иметь один или два аргументаесли имеются два аргумента, они должны быть одного и того же типа, но не COMPLEX. Положительная разница DIM это ф ункция. Я не могу никогда использовать, но X,Y дает X-Y, если разница положительна, и 0 в другом случае. Внутреннеее произведение DPROD с другой стороны это очень нужная функция, которая дает произведение двух чисел в одинарной точности как двойной точности. Оба выстрые и точные. Две функции MAX и MIN уникальны в том, что они могут иметь произвольное число аргументовно не менее двух. Аргументы могут быть любого типа, но не разрешен тип COMPLEX. Так же как в Fortran 77. Все тригонометрические функции работают в радианах. Следующие известны: ACOS, ASIN, ATAN, ATAN2, COS, COSH, EXP, LOG, LOG10, SIN, SINH, SQRT, TAN и TANH. Исторический факт, что математические функции в Fortran 66 могли иметь специальные различные имена в различных диапазонах точности, и эти явные имена до сих пор только и могут быть использованы, когда имена функций используются как аргумент. Ниже дается полная таблица математических функций. Ниже я использую C для комплексных переменных с плавающей точкой, D для переменных двойной точности с плавающей точкой, I для целых, и R для переменных одинарной точности с плавающей точкой. Функци Generic Specific Data type name name Arg Res Квадратный SQRT SQRT R R корень DSQRT D D CSQRT C C Экспонента EXP EXP R R DEXP D D CEXP C C Натуральный LOG ALOG R R Логарифм DLOG D D CLOG C C Десятичный LOG10 ALOG10 R R Логарифм DLOG10 D D Синус SIN SIN R R DSIN D D CSIN C C Косинус COS COS R R DCOS D D CCOS C C Тангенс TAN TAN R R DTAN D D Арксинус ASIN ASIN R R DASIN D D Арккосинус ACOS ACOS R R DCOS D D Арктангенс ATAN ATAN R R DATAN D D ATAN2 ATAN2 2R R DATAN2 2D D Гиперболический SINH SINH R R синус DSINH D D Гиперболический COSH COSH R R косинус DCOSH D D Гиперболический TANH TANH R R тангенс DTANH D D Назначение большинства этих функций очевидно. Заметим, что они все определены только для чисел с плавающей точкой, а не для целых. Поэтому Вы не можете вычислять квадратный корень для 4 как SQRT 4но взамен Вы можете использовать NINT SQRT REAL 4. Заметим также, что все комплексные функции возвращают главное значение. Квадратный корень дает результат типа real для аргументов типа real двойной или одинарной точности, и результат типа complex для аргумента типа complex. Так SQ RT -1. Модуль для аргумента функций ASIN и ACOS могут быть более 1. Если Y положительно, результат будет положителен. Если Y нуль, результат будет нулевым, если X положительнои pi, если X отрицательно. Если Y отрицательно, результат будет отрицательным. Оба X и Y позволяется быть нулевыми одновременно. Назначение функции избежать деления на ноль. Естественным ограничением для математических функций является ограничение точности и диапазона, которые означают, например, что EXP может вызвать исчезновение или переполнение верхней границы значений аргумента. Тригонометрические функции получат малую точность для больших аргументов. Эти ограничения зависят от реализации и будут даны в руководстве поставщика. Ниже представлены функции над символьными строками. Заметьте, что ACHAR работает с множеством символов стандврта ASCII, тогда как CHAR работает с представлением компьютера, который Вы используете. ACHAR I Возвращает символ ASCII, который имеет номер I ADJUSTL STR ING пердвигает влево ADJUSTR STRING пердвигает вправо CHAR I, kind возвращает символ, который имеет номер I IACHAR C Возвращает номер ASCII-символа для символа C ICHAR C Возвращает номер символа C INDEX STRING, SUBSTRING, ba ck Возвращает начальную позицию подстроки SUBSTRING в строке STRING. Если BACK есть "true", то Вы получаете последнюю начальную позицию, в противном случае одну первую. Если одна строка короче другой, добавляются пробел в конец более короткой строки. Если строка содержит символы, не входящие в множество символов ASCII, результат зависит от реализации. REPEAT STRING, NCOPIES Присоединяет к себе самой символьную строку NCOPIES. SCAN STRING, SET, back Возвращает позицию первого вхождения любого символа строки SET в стороку. TRIM STRING Возвращает символьную строку STRING без конечных пробелов. VERIFY STRING, SET, back Возвращает позицию первого символа в STRIN G, который не входит в множество SET. Если BACK есть TRUE, вы получаете самый последний! Результат нулевой, если все символы включены! LEN STRING возвращает длину символьной строки. Не может иметь присваивания значения переменной STRING. Аргумент X не можкт быть присвоен никакого значения. Вторая возвращает вид целоес запрашиваемым числом цифр, и третья возвращает вид для чисел с плавающей точкой с точностью, меньшей чем P цифр и диапазоном десятичной степени между -R и +R. Параметры P и R должны быть скалярными целыми. Один из последних P и R должен быть задан. Если некоторые выполненные типы удовлетворяют условию, единственный one использован с нименьшим диапазоном. Если здесь тем не менее некоторые типы или виды, которые удовлетворяют условию, единственный с нименьшим числом видов будт использован. Если некоторые выполненные типы соответствуют условию, возвращается один с наименьшей десятичной точностью, и если он один из тех, возвращается вид с наименьшим номером. LOGICAL L, kind конвертирует различные виды логических переменных. Логические переменные могут быть выполнены различным способом, например, физическим представлением одним битом не рекомендуетсяодним байтом, одним словом или возможно даже одним двойным словом. Это различие важно, если COMMON и EQUIVALENCE с логическими переменными неправильно использованы в программе при традиционном способе программировании на языке Fortran. Численные функции запроса, наведения справки: Эти функции работают с определенной моделью арифметики целой и с плавающей точкой, смотри ISO 1991раздел 13. Функции возвращают свойства чисел таких видов как переменная Xкоторая может быть real и в то же время integer. Функции, которые возвращают свойства фактического аргумента X, показаны ниже, функции манипуляции с плавающей точокй. Нормально мы получаем число битов в слове во. Модель для битового представления в стандарте ISO 1991раздел 13. Позиции, которые освобождаются, устанавливаются в нуль. Сдвиг дается только для битов, которые занимают в SIZE самую правую позициюно для всех позиций в SIZE не дан. NOT I возвращает логическое дополнение TRANSFER SOURCE, MOULD, size устанавливает, что физическое представление первого параметра SOURCE будет выступать так, как если бы он имел тип и параметры как второй параметр MOULDно без его преобразования. Имеет целью дать возможность улучшить качество определенного типа с помощью подпрограммы, которое не может иметь яввно этот тип данных. Функции для манипуляций над числами с плавающей точкой: Эти функции работают в некоторой модели арифметики целых и с плавающей точкой, см. Функции возвращают число, относительное к фактической переменной X типа REAL. ALL MASK, dim возвращает логическое значение, которое говорит о том, все ли отношения в MASK имеют значение. ANY MASK, dim возвращает логическое значение, которое говорит о том, есть какое-либо отношение в MASK, имеющее значение. COUNT MASK, dim возвращает числовое значение, которое является числом отношений в MASK, которые равны. MAXVAL ARRAY, dim, mask возвращает наибольшее значение в массиве ARRAY из тех, которые подчиняются отношениям в третьем параметре MASK, если отношение данотолько по требуемому измерению, если дан второй параметр DIM. MINVAL ARRAY, dim, mask возвращает наименьшее значение в массиве ARRAY из тех, которые подчиняются отношениям в третьем параметре MASK, если отношение данотолько по требуемому измерению, если дан второй параметр DIM. PRODUCT ARRAY, dim, mask возвращает произведение всех элементов массива ARRAYкоторые подчиняются отношениям в третьем параметре MASK, если отношение данотолько по требуемому измерению, если дан второй параметр DIM. SUM ARRAY, dim, mask возвращает сумму всех элементов массива ARRAYкоторые подчиняются отношениям в третьем параметре MASK, если отношение данотолько по требуемому измерению, если дан второй параметр DIM. ALLOCATED ARRAY - логическая функция, которая сообщает, произошло ли выделение месста для массива. LBOUND ARRAY, dim - функция, возвращающая меньшую границу по измерению для ARRAY. Если DIM размерность не задана в качестве аргумента, вы получите целый вектор, если DIM включенВы получите значение явно, которое означает меньшую границу того измерения, которое вы спрашивали. SHAPE SOURCE - функция, которая возвращает образ массива SOURCE в виде целого вектора. SIZE ARRAY, dim - функция, возвращающая число элементов массива ARRAYесли DIM не заданои число элементов в измерении, заданном с помощью DIM, если он задан. UBOUND ARRAY, dim - функция, подобная LBOUND, возвращающая верхнюю границу по измерению. MERGE TSOURCE, FSOURCE, MASK - функция, которая связывает два массива. Она дает элементы TSOURCE, если условие в MASK равно. Два поля TSOURCE и FSOURCE имеют одинаковый тип и образ. Результат этого типа и этого образа. А также MASK должен иметь тот же образ. Я здесь дам полный пример использования MERGE, который использует также RESHAPE из следующего раздела с целью построения подходящего тестовой матрицы. Образ логического массива MASK может согласовываться с образом из ARRAY или MASK, один из которых должен быть скаляром. Если включен VECTORможет быть массив ранга 1 то есть вектор с наименьшим числом элементов, для которых верен MASK и которые имеют тот же тип, что и ARRAY. Если MASK скаляр со значением. Рещультатом является вектор с числом элементов, таким же как число элементов массива ARRAY, удовлетворяющих условиям, если вектор VECTOR не включен то есть все элементы, когда MASK скаляр, со значением. В другом случае число элементов результата будет равно числу элементов в VECTOR. Значения будут отобраны и помещены в вектор, то есть значения, которые полностью удовлетворяют условию, и будет размещены в порядке обычного Фортрана. Если VECTOR включен и число его элементов превышает число отобранных значенийнедостающие значения, требуемые для результата, берутся из соответствующих позиций в VECTOR. Следующий пример основан на модификации примера для MERGEно I дает теперь только результат итог. Параметры DIM и NCOPIES целые. Если NCOPIES отрицательно, используется значение 0 вместо. SOURCE скалярто SPREAD становится вектором с NCOPIES элементами, которые все имеют те же значения, что и SOURCE. Параметр DIM обозначает, что индекс может быть расширен. Он имеет внутри ранг 1 и 1+ ранг для SOURCEесли SOURCE скаляр, то DIM может иметь тот же ранг. Параметр NCOPIES это число элементов в новом измерении. Дополнительное обсуждение дано в решении упражнения 11. MASK устанавливает образ результата и управляет размещением элементов из массива VECTOR. Элементы из VECTOR устанавливаются в те позиции, которым соответствуют позиции со значением. ARRAY того же типа, что и VECTOR. ARRAY показывает значения, которые устанавливаются в позиции результата, для которых нет элемента в массиве VECTOR. Образ логического массива MASK может согласовываться с образом для ARRAY. Массив VECTOR имеет ранг 1 то есть это вектор с наименьшим числом тех элементов, которые имеют true в MASK. Если ARRAY дан как скаляр, то он рассмотрен в массиве с тем же образом что и MASK и такими же скалярными элементами всюду. Результат будет массивом с тем же образом, что и MASK, и тем же типом, что и VECTOR. RESHAPE SOURCE, SHAPE, pad, order конструирует массив с указанным образом SHAPЕ, начиная с элементов из массива SOURCE. Если PAD не включен, то общий размер результата, определенный с помощью SHAPEдолжен быть меньше или равен размеру SOURCE. Если PAD включен, он имеет тот же тип, что и тип SOURCE, он должен быть массивом. Если ORDER включен, он является одномерным массивом INTEGER с тем же образом, что и у SHAPE и значения должны быть выстроены по размерностям, пронумерованым 1,2,3. Результат имеет образ SHAPE и те элементы из SOURCEвозможно дополненные из PAD. Различным размерностям могут быть установлены присваиванием элементов, если включен ORDERно без влияния образа результата. Несколько простых примеров было дано прежде и будет далее в следующем разделе. Более полный пример, иллюстрирующий необязательные параметры приведен ниже. Они до некоторой степени трудны для объснения, то я рекомендую изучать стандарт ISO 1991. CSHIFT ARRAY, SHIFT, dim осуществляет циклический сдвиг на SHIFT позиций влево, если SHIFT положительно и вправо, если SHIFT отрицательно. Если ARRAY есть вектор, сдвиг производится естественным путемесли это массив более высокой размерности, то производится сдвиг по размерности DIM. Если DIM опУщено, то он берется равным 1, в другом случае он будет скалярным целым числом между 1 и n где n равно рангу массива ARRAY. Параметр SHIFT это целый скаляр или целый массив ранга n-1 и с тем же образом, что и массив ARRAYисключая измеение DIM которое удалено поскольку меньшего ранга. Различные секции поэтому могут быть сдвинуты в различных направлениях и на различное число позиций. EOSHIFT ARRAY, SHIFT, boundar y, dim производит сдвиг влево, если SHIFT положительно и направо, если сдвиг отрицателен. Вместо выдвинутых элементов берутся новые элементы из BOUNDARY. Если ARRAY это вектор, сдвиг присходит естестивенным путем, если ARRAY явяляется массивом более высокого ранга, сдвиг по всем секциям вдоль измерения DIM. Если DIM отсутствуетто DIM принимается равным 1, в других случаях он должен иметь скалярное целое значение между 1 и n где n равно рангу массива ARRAY. Параметр SHIFT есть скалярное целое, если ARRAY имеет ранг 1, в ином случае он может быть скалярным целым или целым массивом ранга n-1 и с тем же образом, что и массив ARRAY, исключая размерность DIM которая удаляется, потому что меньшего ранга. Связь показывает на BOUNDARY, который должен иметь тот же тип, что и ARRAY. Если параметр BOUNDARY отсутствует, вы имеете выбранные значения нулевые. Различные секции быть сдвинуты в различных направлениях и на различное число позиций. Простой пример выше приведенных функций для выбора векторов показывает две программы и вывод. Я здесь использовал RESHAPE, чтобы создать подходящую матрицу для начала работы. Программа здесь не приводится, только основные операторы. Функция TRANSPOSE заменяет ряды и колонки в матрице. MAXLOC ARRAY, mask возвращает позицию наибольшего элемента в массиве ARRAYесли MASK включен, только для тех, которым соответсвуют условия в MASK. Результат это целый вектор! MINLOC ARRAY, mask возвращает позицию наименьшего элемента в массиве ARRAY, если MASK включен, только для тех, которым соответсвуют условия в MASK. Результат это целый вектор! ASSOCIATED POINTER, target это логическая функция, которая сообщает, если указатель POINTER связан с некоторым адресатоми если спецификация TARGET включена, указывает, если указатель связан именно с этим адресатом. Если оба параметра POINTER и TARGET являются указателями, результат. Хотя бы один параметр должен быть задан. DATE должна быть скалярной переменной строк символов хотя бы с 8 символами и присваивает значение CCYYMMDD для столетия, года, месяца, дня. Все заданы числами, с пробелами, если система не включает дату. TIME должна быть скалярной переменной как строка символов, содержащая не менее 10 символов и присвоено значение hhmmss. Все даны числами с пробелами, если система не включает часы. ZONE должна быть скалярной переменной типа "строка символов", содержащая не менее 5 символов и присвоено значение +hhmm для знака, времени в часах и минутах для местного времени, отличного от мирового гринвичского UTC. Все даны численно с пробелами, если система не включает часы. В Швеции мы получим +0100 зимой и +0200 летом, в Новосибирске получим +0700. Если система не включает дату или время, вы получаете в качестве выходной величины значение -HUGE 0которое есть наименьшее целое число в модели. Вектор будет включать следующие элементы: год, месяц, день, время в минутах, часах, секундах и миллисекундах. Не менее одного параметра должно быть задано. Если нет системных часов, то возвращается HUGE 0. Если системных часов нет, возвращается значение нуль. Если системных часов нет, возвращается значение нуль. MVBITS FROM, FROMPOS, LEN, TO, TOPOS Подпрограмма, которая копирует последовательность битов в позиции FROMPOS имеет длину LEN в целевую величину TO с начальной позиции TOPOS. Перемещаемые биты не заменяются. Все количественные величины должны быть целыми и все, исключая TO, должны быть входными с INTENT INтогда как TO должно быть выходным с INTENT INOUT и быть того же вида типа, что и FROM. FROM и TO могут быть одной и той же переменной. Программы случайных чисел: Последовательность псевдослучайных чисел может быть получена из начального значения, которое хранится как целый вектор. Подпрограммы предлагают переносимый интерфейс к реализации, зависящий от последовательности случайных чисел. Без параметров не может быть выполнена. Выходная переменная SIZE должна быть скалярным целым и дает число целых Nпроцессор использует для начальных значений. Входная переменная PUT это целый вектор, который кладет начальные числа, заданные пользователем, в генератор случайных чисел. Выходная переменная GET также целый вектор читает представленные начальные значения.

Смотрите также: