Каждая из следующих C-подпрограмм упаковывает массив предоставленных
данных определенного типа в активный буфер передачи. Они могут быть
вызваны сколь угодно раз для упаковки данных в одно сообщение. Так,
сообщение может содержать несколько массивов с данными различных типов.
C-структуры, в процессе упаковки, должны принимать их индивидуальные
элементы. На комплексность упаковываемых данных ограничений не накладывается,
но приложение должно распаковывать сообщения точно в соответствие
тому, как они были упакованы. Хотя этого строго и не требуется, но
сложилась практика безопасного программирования.
Аргументами для каждой из подпрограмм являются: указатель на первый
из элементов для упаковки, nitem - суммарное число элементов
для упаковки из данного массива и stride - "шаг" для
использования во время упаковки. Шаг, равный 1, означает последовательную
упаковку вектора, равный 2 - упаковку "через раз" и т.д. Исключение
составляет pvm_pkstr(), которая завершает упаковку строки
символов при "встрече" NULL и поэтому не требует наличия
аргументов nitem и stride.
ПВМ так же поддерживает подпрограммы упаковки с printf-подобным
форматами выражений, которыми указывается, какие данные упаковывать
в буфер передачи и как. Все переменные передаются через адреса - если
указаны счетчик и шаг; в противном случае, предполагается, что переменные
будут передаваться значениями.
int info = pvm_pkbyte( char *cp, int nitem, int stride)
int info = pvm_pkcplx( float *xp, int nitem, int stride)
int info = pvm_pkdcplx( double *zp, int nitem, int stride)
int info = pvm_pkdouble( double *dp, int nitem, int stride)
int info = pvm_pkfloat( float *fp, int nitem, int stride)
int info = pvm_pkint( int *np, int nitem, int stride)
int info = pvm_pklong( long *np, int nitem, int stride)
int info = pvm_pkshort( short *np, int nitem, int stride)
int info = pvm_pkstr( char *cp)
int info = pvm_packfconst( char fmt, ...)
Единственная подпрограмма на Fortran реализует все упаковочные функции
перечисленных подпрограмм на C.
call pvmfpack( what, xp, nitem, stride, info)
Аргумент xp - это первый элемент для упаковки из массива.
Заметьте, что на Fortran количество символов в упаковываемой строке
должно указываться через nitem. Целое число what
указывает тип упаковываемых данных. Поддерживаются следующие опции.
STRING0
REAL4 4 BYTE 1
Эти имена уже предопределены в параметрических конструкциях включаемого
файла /pvm3/include/pvm3.h. Ряд производителей может расширять
этот список и включать в него поддержку 64-битных архитектур в своей
реализации. INTEGER8, REAL16 и др. будут добавлены,
как только XDR-поддержка этих типов данных будет реализована.
Знаете ли Вы, что динамическая модель - это модель, в которой состояние объекта явно или неявно зависит от времени. Даже если на эту модель не воздействовать извне, то при движении времени в ней все равно будут изменяться выходные характеристики. Примером динамической системы может служить тело, брошенное под углом к горизонту.