14 Типы параметров-массивов




Скачать 199.6 Kb.
Название14 Типы параметров-массивов
Дата10.11.2012
Размер199.6 Kb.
ТипДокументы
14.6.2. Типы параметров-массивов

Разрешены три типа массивов: ARRAY, CHAR и TABLE. Тип ARRAY используется для задания чисел в удобной табличной форме. Примеры таких массивов приведены ниже.


0.025

-47.6 0.01

-5.2 0.265

25.0 1.00

NTEMP = 86.5 EVOLUM = 0.832

107.9 0.52

168.7 1.032

225.0 0.002

0.697

0.01


12152 814 -386 202 -82 -1108

14848 1057 -704 117 -101 -555

15490 1033 -713 15 -76 235

COMPSTRS = 13899 786 -348 -103 -45 848

10813 420 -66 -211 -17 1065

7151 109 111 -272 11 1052

Параметр NTEMP может представлять собой массив температур в выделенных узлах; в таком случае элемент NTEMP(1)=-47.6 может трактоваться как температура в узле 27, а элемент NTEMP(2)=-5.2 - как температура в узле 43 и т.д. Подобным же образом параметр EVOLUM можно рассматривать как массив объемов конечных элементов модели, а параметр COMPSTRS - как массив компонент напряжений в узлах, при этом каждый столбец таблицы можно рассматривать как составляющую напряжения в определенном направлении (например, X, Y, Z, XY, YZ, XZ).

Массив символьных значений CHAR структурно подобен параметру ARRAY, только вместо чисел в таблице содержатся строки символов (не более восьми). Два примера символьных массивов приведены ниже.


JOB1 LOG

JOB2 ERR

FILNAM = JOB3 EXTES = DB

JOB4 LIB

JOB5 MAC


Параметр-массив типа TABLE состоит из чисел (использование символьных значений не разрешается) в виде таблицы, но с той разницей, что массив дает возможность получить линейной интерполяцией любые значения между элементами массива. Еще одно отличие состоит в том, что столбец j=0, который обычно представляет собой индексы строк от i=1 до m, должен быть заменен монотонно возрастающими числами. Аналогично, строка i=0, которая обычно представляет собой индексы столбцов от j=1 до n, должна быть заменена монотонно возрастающими числами. Для трехмерного массива типа TABLE индексы строк и столбцов (i и j) задаются только раз для первой плоскости значений, а индекс плоскостей (k) нужно вводить для каждой плоскости. По умолчанию все индексы установлены в нуль.


Обратимся к следующим примерам:


1.0 1.0 2.0

1.0 12.0 1.0 2.8 4.2

A = 2.0 28.0 PQ = 2.0 -9.6 -12.3

3.0 146.4 3.0 42.0 9.7

4.0 -4.5 2.0


Если параметр-массив A имеет тип TABLE, то программа ANSYS может получить интерполяцией любые значения между элементами A(1) и A(2), например:

значением А(1.5) является 20.0 (средняя величина между 12.0 и 28.0);

значением А(1.75) является 24.0;

значением А(1.9) является 26.4.

Аналогично, если PQ является параметром-массивом типа TABLE, то

значением PQ(1.5,1) является -3.4 (средняя величина между 2.8 и -9.6);

значением PQ(1,1.5) является 3.5 (средняя величина между 2.8 и 4.2);

значением PQ(3.5,1.3) является 14.88.

Такая возможность позволяет описывать функции вида y=f(x), используя тип параметра-массива TABLE. При этом столбец j=0 используется для ввода независимой переменной x, а столбец j=1 - для значений y. Рассмотрим, например, функцию зависимости усилия от времени, заданную в пяти точках, как показано ниже.






Время Усилие

1Е-6 0.0

0.8 560.0

7.2 560.0

8.5 238.5

9.3 0.0


Эта функция задается как параметр-массив типа TABLE, элементами которого являются значения усилия, а индексы строк от 1 до 5 равны соответствующим значениям времени. (Подробности приводятся в следующем разделе этой главы.) Условно нужный параметр-массив выглядит следующим образом:


1.0

1E-6 0.0

0.8 560.0

FORCE = 7.2 560.0

8.5 238.5

    1. 0.0


Теперь программа ANSYS может вычислять значения усилия в моменты времени, не указанные в параметре-массиве FORCE, используя линейную интерполяцию. Вычисления заканчиваются, если значения функции оказываются за пределами, определяемыми элементами параметра-массива (т.е. экстраполяция не выполняется).

Из приведенных примеров видно, что параметр-массив типа TABLE представляет собой мощный инструмент анализа. Его типичным приложением является задание зависимостей нагрузок от времени, кривых спектрального отклика, диаграмм напряжение-деформация, зависимостей свойств материала от температуры, кривых B-H для магнитных материалов и так далее. Следует, однако знать, что обработка параметров-массивов этого типа требует больше компьютерного времени по сравнению с параметрами типа ARRAY.


14.6.3. Задание и вывод списка параметров-массивов

Чтобы задать параметр-массив, сначала следует объявить его тип и размер, используя один из следующих способов:

Команда: *DIM

Маршрут: Utility Menu>Parameters>Array Parameters>Define/Edit


Пример командного ввода:


*DIM,AA,,4 ! Тип ARRAY по умолчанию, размер 4[x1x1]

*DIM,XYZ,ARRAY,12

*DIM,FORCE,TABLE,5

*DIM,T2,,4,3 ! Размер 4х3[x1]

*DIM,CPARR1,CHAR,5 ! Тип CHAR, размер 5[x1x1]

Для параметров-массивов, имеющих типы ARRAY и TABLE, доступны перечисленные ниже процедуры.

  1. Графическое редактирование параметров можно выполнить одним из способов:



Команда: *VEDIT

Маршрут: Utility Menu>Parameters>Array Parameters>Define/Edit

Команда *VEDIT, доступная только в интерактивном режиме, выводит на экран окно диалога для редактирования параметров типа ARRAY или TABLE.

  1. Для задания элементов массива используются способы:

Команда: *VFILL

Маршрут: Utility Menu>Parameters>Array Parameters>Fill

  1. Для задания параметров-массивов типа CHAR, ARRAY и TABLE используется команда “=“.


Команда “=“ действует аналогично такой же команде для скалярных параметров, за исключением того, что теперь задается колонка данных (до десяти величин на каждый символ “=“). Например, чтобы задать объявленный выше параметр XYZ размера 12х1, потребуется две команды “=“:


*XYZ(1)=59.5,42.494,-9.01,-8.98,-8.98,9.01,-30.6,51

*XYZ(9)=-51.9,14.88,10.8,-10.8


59.5  Обратите внимание: начальная позиция

42.494 элементов массива указывается

-9.01 индексом номера (1 - для первой

-8.98 команды, 9 - для второй).

-8.98

XYZ =   9.01

-30.6

51

- 51.9

14.88

10.8

-10.8

Следующий пример показывает, как задать объявленный ранее параметр-массив Т2 размера 4х3:


T2(1,1)=.6,2,-1.8,4 ! элементы (1,1),(2,1),(3,1),(4,1)

T2(1,2)=7,5,9.1,62.5 ! элементы (1,2),(2,2),(3,2),(4,2)

T2(1,3)=2E-4,-3.5,22,.01 ! элементы (1,3),(2,3),(3,3),(4,3)


0.6 7.0 0.0002

2.0 5.0 -3.5

T2 = -1.8 9.1 22.0

4.0 62.5 0.01


Задание заявленного ранее параметра-массива FORCE типа TABLE:


FORCE(1)=0,560,560,238.5,0

FORCE(1,0)=1E-6,.8.7.2,8.5,9.3

FORCE(0,1)=1.0


1.0 Первая команда “=“ задает пять

1.E-6 0.0 элементов массива FORCE типа

0.8 560.0 ARRAY. Вторая и третья команды

FORCE = 7.2 560.0 “=“ переопределяют номера

8.5 238.3 индексов в колонке j=0 и в строке

9.3 0.0 i=0.


Символьные параметры-массивы можно также задавать с помощью команды “=“. Значения элементов представляют собой набор символов (не более 8-ми), заключенных в одинарные кавычки. Например,


*DIM,RESULT,CHAR,3 Символьный параметр-массив размера (3,1,1)

RESULT(1)= 'SX','SY','SZ' ! Присвоение значений параметру

Как и при задании числового параметра-массива, указывается начальное положение элемента массива (в данном случае задается индекс строки 1).

Предостережение - Идентификатор CHAR нельзя использовать в качестве имени символьного параметра, так как это будет создавать конфликт с меткой CHAR команды *DIM.

Команда *VFILL (или соответствующий маршрут меню интерфейса) используется для “заполнения” числового параметра-массива возрастающими или убывающими с постоянным шагом величинами (RAMP), случайными числами (RAND), случайными выборками для распределений Гаусса (GDIS), треугольного (TRIA), гамма- (GAMM) или бета- (BETA) законов распределения случайных величин, а также просто строкой из десяти констант (DATA) (действует подобно команде “=“). Примеры иллюстрируют способ командного ввода:

*DIM,TEMP,ARRAY,7

*VFILL,TEMP(1),RAMP,800,-150


800 Командой *VFILL задается параметр

650 TEMP, значения которого уменьшаются

500 от 800 с шагом -150.

TEMP = 350

200

50

-100


*DIM,RANDNUM,ARRAY,4

*VFILL,RANDNUM(1),RAND,30,40


31.528 Командой *VFILL задается

35.428 параметр RANDNUM в виде

RANDNUM = 36.120 случайных чисел между 30 и 40.

33.076


При задании параметров-массивов пользователю доступны приведенные ниже процедуры.

  1. Чтобы прочитать числовые или символьные данные из файла, используются один из способов:

Команда: *VREAD

Маршрут: Utility Menu>Parameters>Array Parameters>Read from File

  1. Чтобы задать вектор числового параметра-массива (для символьного параметра использовать этот прием нельзя), который состоит из величин, поставляемых программой ANSYS, используются один из способов:

Команда: *VGET

Маршрут: Utility Menu>Parameters>Get Array Data


Замечание - Команды *VFILL, *VREAD, *VGET и их аналоги-маршруты являются частью команд “векторных операций”. На результат их выполнения влияют установки команд *VLEN и *VMASK. Эти и другие команды векторных операций рассмотрены в разделе “Операции с параметрами- массивами”.

  1. Как и в случае скалярных параметров, имеется возможность использовать один из следующих способов для получения перечня параметров-массивов:

Команда: *STATUS

Маршрут: Utility Menu>List>Other>Named Parameters

Utility Menu>List>Other>Parameters

Utility Menu>List>Status>Parameters>All Parameters

Utility Menu>List>Status>Parameters>Named Parameters


Следующие примеры демонстрируют использование командного ввода:


*STATUS,XYZ(1),5,9 ! Выдать 5,6,7,8 и 9 строки массива XYZ

PARAMETER STATUS- XYZ (Определено 4 значения)


LOCATION VALUE

5 1 1 -8.98000000

6 1 1 9.01000000

7 1 1 -30.6000000

8 1 1 51.0000000

9 1 1 -51.9000000


*STATUS,FORCE(1),,,0 ! Выдать массив FORCE, включая колонку j=0

PARAMETER STATUS- FORCE (Определено 4 значения)


LOCATION VALUE

1 0 1 0.000000000Е+00

2 0 1 0.800000000

3 0 1 7.20000000

4 0 1 8.50000000

5 0 1 9.30000000

1 1 1 0.000000000Е+00

2 1 1 560.000000

3 1 1 560.000000

4 1 1 238.500000

5 1 1 0.000000000Е+00


*STATUS,T2(1,1) ! Выдать массив T2

PARAMETER STATUS- T2 (Определено 4 значения)


LOCATION VALUE

1 1 1 0.600000000

2 1 1 2.00000000

3 1 1 -1.80000000

4 1 1 4.00000000

1 2 1 7.00000000

2 2 1 5.00000000

3 2 1 9.10000000

4 2 1 62.5000000

1 3 1 2.000000000Е-04

2 3 1 -3.5000000

3 3 1 22.0000000

4 3 1 1.000000000Е-02


*STATUS,RESULT(1) ! Выдать массив RESULT

PARAMETER STATUS- RESULT (Определено 4 значения)


LOCATION VALUE

1 1 1 SX (CHAR)

2 1 1 SY (CHAR)

3 1 1 SZ (CHAR)



  1. Чтобы получить график зависимости одного параметра-массива от другого (что особенно полезно для типа TABLE), используется один из способов:

Команда: *VPLOT

Маршрут: Utility Menu>Plot>Array Parameters

  1. Для передачи результата применения команды *VGET к числовому параметру-массиву в базу данных используется один из способов:

Команда: *VPUT

Маршрут: Utility Menu>Parameters>Array Operations>Put Array Data

Эту команду следует применять с осторожностью, так как это может изменить целые разделы базы данных.


14.6.4. Удаление параметров-массивов

Чтобы удалить параметр-массив (числовой или символьный), достаточно оставить пустой правую сторону команды “=“. Так, например, команда

XYZ(1)=

удаляет параметр-массив XYZ.


14.6.5. Операции с параметрами-массивами

Подобно возможности выполнять разнообразные процедуры со скалярными параметрами (с использованием выражения с параметрами и функций параметров), существует несколько команд для совершения операций с параметрами-массивами. Можно указать два класса таких операций: с векторами столбцов, т.е. так называемые векторные операции, и операции с целыми матрицами, т.е. матричные операции. Все эти операции выполняются с использованием команд, рассматриваемых в разделе “Спецификация команд для векторных и матричных операций”.


Векторные операции

Векторные операции представляют собой просто ряд действий - сложение, вычитание, вычисление значений синуса или косинуса, скалярное или векторное произведение и т.д. - над последовательностью элементов массива. Для этой цели можно было бы применить рассмотренные ранее циклы DO, но значительно более удобно использовать команды векторных операций - *VOPER, *VFUN, *VSVFUN, *VITRP, *VFILL, *VREAD и *VGET. Из всех перечисленных только команда *VREAD (как и команда *VWRITE) применима к символьным параметрам. Другие команды векторных операций можно использовать только с параметрами-массивами, объявленными (с помощью команды *DIM) как переменные типа ARRAY или TABLE.

Команды *VFILL, *VREAD, *VGET, *VWRITE, *DIM и соответствующие им маршруты меню были рассмотрены ранее. Остальные команды векторных операций приведены ниже.

  1. Чтобы выполнить операцию с двумя массивами, используется один из следующих способов:

Команда: *VOPER

Маршрут: Utility Menu>Parameters>Array Operations>Vector Operations

  1. Для получения значений какой-либо функции от параметра-массива, используется один из следующих способов:

Команда: *VFUN

Маршрут: Utility Menu>Parameters>Array Operations>Vector Functions

  1. Для получения информации о реквизитах параметра-массива, используется один из следующих способов:

Команда: *VSCFUN

Маршрут: Utility Menu>Parameters>Array Operations>Vector-Scalar Func

  1. Чтобы создать параметр-массив интерполяцией табличных значений, используется один из следующих способов:

Команда: *VITRP

Маршрут: Utility Menu>Parameters>Array Operations>Vector Interpolate

  1. Чтобы указать число строк, разрешенных в операции с массивом, используется один из следующих способов:

Команда: *VLEN

Маршрут: Utility Menu>Parameters>Array Operations>Operation Settings

  1. Для задания некоторого массива в качестве маски (шаблона) вектора используется один из следующих способов:

Команда: *VMASK

Маршрут: Utility Menu>Parameters>Array Operations>Operation Settings

Приведенные ниже примеры иллюстрируют использование некоторых из этих команд.

Предполагается, что параметры-массивы (типа ARRAY) X, Y и THETA объявлены и заданы программой ANSYS. Как будет показано ниже, параметр-массив, содержащий результат той или иной векторной операции, также должен быть объявлен до ее выполнения.


0

- 2 6 8 0 3 2 5 - 6 15

- 1 0 2 12 - 5 - 7 1 0 30

X = 4 - 3 - 1 7 Y = 8 0 0 11 THETA = 45

- 8 1 10 - 5 1 4 9 16 60

75

90


*DIM,Z1,ARRAY,4

*VOPER,Z1(1),X(1,2),ADD,Y(1,1)


9  Обратите внимание: начальное положение (индексы строки и

- 5 столбца) должно быть указано для каждого параметра-массива.

Z1 = 5 Требуемая операция затем выполняется последовательно

2 сверху вниз для указанного столбца. В данном случае команда

*VOPER задает сложение элементов столбца 2 массива X со столбцом 1 массива Y, начиная со строки 1 для каждого массива.


*DIM,Z2,ARRAY,3

*VOPER,Z2(1),X(2,1),MULT,Y(1,4)


- 6  Эта команда *VOPER задает умножение первого столбца

Z2 = 0 массива X (начиная со строки 2) на четвертый столбец

- 88 массива Y (начиная со строки 1).


*DIM,Z4,ARRAY,4,3

*VOPER,Z4(1,1),X(1,1),CROSS,Y(1,2)


- 76 4 - 22  Выполняется векторное умножение четырех пар

-2 - 14 1 векторов, по одной паре для каждой строки массивов

Z4 = - 33 -44 0 X и Y. Компонентами i, j, k этих векторов являются

- 74 168 - 76 столбцы 1, 2, 3 массива X и столбцы2, 3, 4 массива Y.

Результатом является массив Z размера 4х3, который представляет собой четыре вектора с компонентами i, j, k в виде столбцов 1, 2, 3 соответственно


*DIM,A3,ARRAY,4

*VFUN,A3(1),PWR,X(1,2),2


36 Командой *VFUN выполняется возведение в квадрат

0 каждого элемента столбца 2 массива Х.

А3 = 9

1


*DIM,A4,ARRAY,7,3

*AFUN,DEG

*VFUN,A4(1,1),COS,THETA(1)

*VFUN,A4(1,2),SIN,THETA(1)

A4(1,3)=2,2,2,2,2,2,2


1.0 0.0 2.0  Командами *VFUN задается вычисление

0.966 0.259 2.0 значений косинуса и синуса для элементов

0.866 0.5 2.0 массива THETA и размещение их в первых

A4 = 0.707 0.707 2.0 двух столбцах массива А4. Этот массив описывает

0.5 0.866 2.0 круговую дугу в 900, заданную в семи точках

0.259 0.966 2.0 (их координаты x, y, z в глобальной системе

0.0 1.0 2.0 декартовых координат записаны в трех столбцах

массива). Радиус дуги равен единице и она расположена в плоскости x-y при z=2.0.

*DIM,CMPR,ARRAY,4,4

*VLEN,4,2 Выполнить следующую *V-операцию, пропуская каждую вторую строку

*VFUN,CMPR(1,2),COMP,Y(1,1)

*VMASK,X(1,3) Использовать столбцы 3 массива Х как маску для следующей операции

*VFUN,CMPR(1,3),COMP,Y(1,2)


0 3 2 0  Две команды *VFUN вместе с предшест-

0 8 -7 0 вующими командами *VMASK и *VLEN

CMPR = 0 0 4 0 выполняют сжатие выделенных данных

0 0 0 0 и запись в указанные элементы массива

CMPR. Дополнением операции COMP является операция EXPA.

Две дополнительные операции для команды *VOPER - “собирания” (GATH) и “разбрасывания” (SCAT) - используются для копирования значений из одного вектора в другой, который формируется на основе чисел, содержащихся в “отправном” векторе. Следующий пример демонстрирует операцию собирания.


*DIM,B1,,4

*DIM,B1,,4

*DIM,B1,,4

B1(1)=10,20,30,40

B2(1)=2,4,1

*VOPER,B3(1),B1(1),GATH,B2(1)


20  Копируются значения вектора B1, указанные компонента-

40 ми вектора B2.

B3 = 10

0


На рис. 14.2 показан процесс собирания в соответствии с заданным в примере алгоритмом.


B1 10 20 30 40

B2 2 4 1

B3 20 40 10 0


Рис. 14.2. Операция GATH команды *VOPER



Матричные операции

Матричные операции представляют собой такие математические операции между параметрами-массивами, как матричное умножение, транспонирование и получение решения для системы совместных линейных уравнений.


Доступны перечисленные ниже команды матричных операций.

  1. Для выполнения матричных операций над параметром-массивом используется один из следующих способов:

Команда: *MOPER

Маршрут: Utility Menu>Parameters>Array Operations>Matrix Operations

  1. Для копирования или транспонирования используется один из следующих способов:

Команда: *MFUN

Маршрут: Utility Menu>Parameters>Array Operations>Matrix Functions

  1. Для получения коэффициентов ряда Фурье для заданной кривой используется один из следующих способов:

Команда: *MFOURI,FIT

Маршрут: Utility Menu>Parameters>Array Operations>Matrix Fourier

И наоборот, можно найти кривую, соответствующую данному набору коэффициентов ряда Фурье [*MFOURI, EVAL].


Спецификация команд для векторных и матричных операций

На выполнение всех команд векторных и матричных операций оказывают влияние следующие команды задания спецификаций: *VCUM, *VABS, *VFACT, *VLEN, *VCOL и *VMASK. (Из всех перечисленных только команды *VLEN и *VMASK в сочетании с командами *VREAD и *VWRITE можно использовать для символьных параметров.) Статус этих команд можно установить с помощью команды *VSTAT. Большинство этих команд и соответствующие маршруты графического интерфейса были рассмотрены в этой главе ранее. Остальные команды приводятся ниже.

За исключением команды *VSTAT, к которой нет прямого доступа из графического интерфейса, все команды спецификаций, которые описываются далее, доступны с помощью маршрута меню Utility Menu>Parameters>Array Operations> Operation Settings.


Внимание: Все команды спецификации возвращаются к своим установкам по умолчанию после каждой векторной или матричной операции.

Команда *VCUM задает процедуру накопления или не накопления результатов: величина ParR, результат векторной операции, добавляется к существующему параметру с таким же именем или переписывается заново. По умолчанию предполагается не накопление результатов, т.е. параметр ParR записывается вместо существующего параметра при сохранении имени параметра.

Команда *VABS присваивает абсолютные значения элементам какого-нибудь одного или всех параметров-массивов, участвующих в векторной операции. По умолчанию используются истинные (алгебраические) значения.

Команда *VFACT вводит масштабный коэффициент для элементов какого-нибудь одного или всех параметров-массивов, над которыми выполняется векторная операция.

Командой *VCOL задается число столбцов массива для матричных операций. По умолчанию заполняются все позиции результата, начиная с заданной начальной.

Команда *VSTAT выводит перечень всех текущих спецификаций для параметров-массивов.


14-
Ansys Parametric Design Language (ADPL)


Похожие:

14 Типы параметров-массивов iconИнициализация массивов и классы памяти
Переменная m массив из семи массивов, каждый из которых состоит из 50 символов
14 Типы параметров-массивов iconВопросы к зачету по дисциплине «Основы алгоритмизации и программирования»
Типы данных в программе Turbo Pascal: целые типы, вещественные типы, логический тип, символьный тип
14 Типы параметров-массивов iconЛабораторная работа. "Обработка одномерных массивов (векторов)"
Цель работы: Знакомство с структурированными типами данных, получение практических навыков в организации одномерных массивов данных....
14 Типы параметров-массивов iconУрок- игра в 8 классе. Тема: «типы химических реакций»
Цель урока: повторить классификацию веществ, типы химических реакций и признак их классификации, научить учащихся применять полученные...
14 Типы параметров-массивов iconНаселенные пункты и отдельно расположенные объекты должны быть обеспечены исправной телефонной или радиосвязью для сообщения о пожаре в пожарную охрану. Не
Противопожарные расстояния от границ застройки городских поселений до лесных массивов должны быть не менее 50 метров, а от границ...
14 Типы параметров-массивов icon3 Общие вопросы теории инвариантности применительно к измерительным преобразователям комплекса параметров 154
Гидродинамические и термодинамические методы изучения фильтрационных параметров продуктивного пласта 21
14 Типы параметров-массивов iconОценка параметров производственных функций малых и средних предприятий
В статье рассмотрены основные методы оценки параметров производственных функций малых и средних предприятий, которые могут быть применены...
14 Типы параметров-массивов iconЗадача макси/мин», «Сортировка массивов», а также урок лекция по теме «Двумерные массивы. Теория матриц»
«Задача макси/мин», «Сортировка массивов», а также урок – лекция по теме «Двумерные массивы. Теория матриц». Достоинством занятия...
14 Типы параметров-массивов iconПрограмма вступительного экзамена по обществознанию
Типы цивилизаций и исторические типы обществ. Традиционное, индустриальное и постиндустриальное (информационное) общество. Противоречия...
14 Типы параметров-массивов iconУрок физики в 10-м классе по теме: "Изопроцессы: изотермический, изобарный и изохорный"
Цель урока: выяснение условий выполнения изопроцессов; выяснение теоретической зависимости трех макроскопических параметров; практическое...
Разместите кнопку на своём сайте:
Библиотека


База данных защищена авторским правом ©lib.znate.ru 2014
обратиться к администрации
Библиотека
Главная страница