-
Notifications
You must be signed in to change notification settings - Fork 3
/
README_RUS
277 lines (220 loc) · 18.5 KB
/
README_RUS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
------------------------------------------------------------------------------
| Collection of exact solutions (ColESo) |
| |
| Revised 21.06.2022 |
------------------------------------------------------------------------------
Условия распространения библиотеки см. в файле COPYING.
Информацию об авторах библиотеки см. в файле AUTHORS.
Описание изменений см. в файле NEWS.
I. Введение
II. Директории и файлы библиотеки
III. Сборка библиотеки и запуск тестов
IV. Использование библиотеки ColESo
Использование в программах на C++
Использование в программах на C
Использование в программах на FORTRAN
V. Формат файла параметров
VI. Обработка ошибок библиотекой
VII. Работа в многонитевом режиме
VIII. Использованные библиотеки
IX. Контакты
Введение
--------
Коллекция точных решений (Collection of exact solutions, ColESo)
состоит из более 30 точных решений. Её основным предназначением является
верификация численных методов моделирования сжимаемых течений.
Основой библиотеки является набор решений линеаризованных уравнений
Эйлера и Навье – Стокса. Также ColESo включает несколько нелинейных решений,
включая решение задачи Римана.
Директории и файлы библиотеки
-----------------------------
Корневая директория настоящей сборки содержит семь директорий.
docs Содержит документы, относящиеся к библиотеке ColESo.
example Содержит простые примеры программ на FORTRAN, C и C++
с использованием библиотеки ColESo.
projects Содержит проекты для Microsoft Visual Studio 2008.
qd Содержит библиотеку QD (quad-double/double-double computation
package). Эта библиотека не является частью ColESo и приводится
для удобства пользователя.
src Содержит исходный код библиотеки ColESo, включая элементы
системы самотестирования и заголовочные файлы на C++.
es_specfunc.cpp и es_specfunc_dd.cpp реализуют специальные функции.
es_jacobi_rule.hpp содержат квадратурные формулы Гаусса – Якоби.
es_aux.cpp реализует интерфейс для использования библиотеки ColESo
в программах на C и FORTRAN.
es_tests.cpp реализует частичное тестирование библиотеки путём
проверки, что "точные" решения действительно удовлетворяют
уравнениям, которым они должны удовлетворять.
io_parser.cpp содержит файловый и формульный парсеры, используемые
при чтении настроечных файлов внутренними средствами ColESo.
Остальные файлы *.cpp реализуют точные решения.
templates Содержит шаблоны файлов, содержащих параметры точных решений.
Формат файлов описан ниже.
test Содержит программы с использованием ColESo, написанные
на C++, C и FORTRAN, и выводящие данные для формирования изображений,
аналогичных использованным в документации. Также приводятся
bash-скрипты, формирующие изображения по этим данным при помощи
gnuplot.
Сборка библиотеки и запуск тестов
---------------------------------
Библиотека ColESo может быть собрана с использованием Makefile.
Доступные цели сборки приведены ниже.
Все создаваемые библиотеки и запускаемые файлы помещаются в директорию bin.
qd-package Сборка библиотеки QD
lib Сборка ColESo с арифметикой типа double
libqd Сборка ColESo с арифметиками типа double, double-double, quad-double
examplecpp Сборка простого примера с использованием ColESo на C++
examplec Сборка простого примера с использованием ColESo на C
examplef Сборка простого примера с использованием ColESo на FORTRAN
examplecppqd Сборка простого примера на C++ с использованием ColESo
в арифметике повышенной точности
testcpp Сборка программы на C++, выводящей данные для построения изображений
testcpprun То же плюс запуск этой программы плюс рисование изображений в gnuplot
testc Сборка программы на C, выводящей данные для построения изображений
testcrun То же плюс запуск этой программы плюс рисование изображений в gnuplot
testf Сборка программы на FORTRAN, выводящей данные для построения изображений
testfrun То же плюс запуск этой программы плюс рисование изображений в gnuplot
check Запуск проверок, что решения удовлетворяют уравнениям, которым
они должны удовлетворять
checkqd Для решения задачи о волне в цилиндрическом канале запустить
проверку, что решение удовлетворяет линеаризованным уравнениям
Навье – Стокса с двойной, четверной и восьмерной точностью
clean Удалить все выходные директории (bin, test/DATA1D, test/DATA2D)
Также предлагается решение для Microsoft Visual Studio, содержащее два простых примера
на C++, работающих в арифметике двойной и четверной точности соответственно.
Для сборки последнего требуется определить соответствующий флаг
(#define EXTRAPRECISION_COLESO) в файле src/personal.h и пересобрать библиотеку ColESo.
Использование библиотеки ColESo
-------------------------------
Чтобы вычислить решение при помощи библиотеки ColESo, необходимо
последовательно выполнить следующие операции:
1) создать объект, реализующий конкретное точное решение;
2) задать параметры решения или вызвать процедуру считывания их из файла;
3) вызвать процедуру инициализации решения;
4) вызвать процедуру для вычисления решения на заданное время в заданной точке.
Эта процедура может вызываться многократно, в т. ч. в многонитевом режиме.
Использование в программах на C++
---------------------------------
При программировании на С++ можно напрямую обращаться к объектам, реализующим
конкретные точные решения. Каждое точное решение реализуется классом,
наследующим абстрактный класс tPointFunction.
I. Создание объекта.
Для создания объекта, реализующего точное решение, нужно создать экземпляр
соответствующего класса, например:
s_CornerPlanar S;
II. Задание параметров решения.
Параметры можно считать из файла, вызвав метод ReadParamsFromFile(const char*):
S.ReadParamsFromFile(file_name);
Здесь file_name – указатель на строку (const char*), содержащую имя файла.
Если имя файла не указать:
S.ReadParamsFromFile();
то параметры будут считываться из файла, соответствующего имени класса,
в данном случае – es_cornerplanar.txt.
Параметры точного решения также можно задать напрямую, присвоив значения
элементам класса. Например, единичную амплитуду можно задать оператором
S.Aterm = 1.0;
Имена членов класса могут иметь незначительные отличия от имён параметров,
считываемых из файла. Это соответствие можно установить, открыв код метода
ReadParams() у класса, реализующего конкретное точное решение.
III. Инициализация решения.
Прежде, чем использовать точное решение, необходимо вызвать метод Init()
для инициализации внутренних переменных класса. Например:
S.Init();
IV. Вычисление решения.
Для вычисления решения вызывается метод PointValue, принимающий на вход время,
координаты и указатель на выходной массив. Минимальный размер выходного
массива зависит от типа решения, но не более 10 элементов.
Использование в программах на C
-------------------------------
При программировании на C доступ к объектам, реализующим конкретные
точные решения, осуществляется через специальный интерфейс.
I. Создание объекта.
Создание объекта, реализующего точное решение, выполняется функцией
void coleso_add_function(char* FUNCNAME, int* ID);
Функция принимает имя точного решения и возвращает его идентификатор
по указателю ID. Например:
int ID; coleso_add_function("CornerPlanar", &ID);
Дальнейшее обращение к созданному объекту проводится с использованием
этого идентификатора.
II. Задание параметров решения.
Для считывания параметров из файла можно использовать функцию
void coleso_read_file(int ID, char* FILENAME);
Функция принимает идентификатор и имя файла. Например:
coleso_read_file(ID, "PARAMS/es_cornerplanar.txt");
Параметры точного решения также можно задать через строковый интерфейс.
Для этого используются функции
void coleso_set_parameter(char* PARAMNAME, char* PARAMVALUE);
void coleso_read_set(int ID);
Первая функция добавляет параметр в строковый буфер, вторая вызывает
считывание из него аналогично чтению из файла. Аргумент PARAMNAME
является именем параметра, как он задаётся в файле, что не обязательно
совпадает с именем члена класса. Например:
coleso_set_parameter("Aterm", "1.0");
coleso_set_parameter("Bterm", "3.0");
coleso_read_set(ID);
III. Инициализация решения.
Прежде, чем использовать точное решение, необходимо вызвать функцию
void coleso_init(int ID);
Например:
coleso_init(ID);
IV. Вычисление решения.
Для вычисления решения вызывается функция
void coleso_pointvalue(int ID, double T, double* C, double* V);
Она принимает на вход идентификатор объекта, время, координаты
и указатель на выходной массив. Минимальный размер выходного массива
зависит от типа решения, но не более 10 элементов.
Использование в программах на FORTRAN
-------------------------------------
Использование ColESo на FORTRAN идентично использованию на C.
В конец каждой строки, передаваемой в качестве параметра,
необходимо добавлять нулевой символ, чтобы такая строка была
корректно обработана в программе на C/C++.
Пример использования ColESo в программе на языке FORTRAN
см. в файле example.f.
Формат файла параметров
-----------------------
Файлы параметров считываются построчно. Каждая строка содержит имя параметра
и значение, разделённые одним или несколькими пробелами или знаками табуляции.
Значение может быть задано арифметическим выражением, в котором может
использоваться предопределённая константа PI.
Начиная с символа '#', все последующие символы в пределах строки игнорируются.
Byte Order Mark (BOM) в начале файла не допускается.
В шаблонах часть параметров закомментирована. Это сделано исключительно
для удобства автора; такие параметры должны задаваться наряду с остальными,
т. е. знак комментария перед такими параметрами должен быть снят.
Обработка ошибок
----------------
При возникновении ошибки библиотека ColESo не возвращает управление вызывающей
программе, а вызывает макрос crash(...), определённый в personal.h.
При необходимости пользователь может переопределить этот макрос.
При чтении файла параметров выдаётся лог. Для этого вызывается макрос
pprintf(...), который также может быть переопределён. Этот же макрос
вызывается в некоторых функциях инициализации.
В многонитевом режиме
---------------------
Библиотека ColESo может использоваться в многонитевом режиме.
Интерфейс для использования ColESo в программах на C или FORTRAN основан
на статических переменных. Во время вызова coleso_add_function иной доступ
к библиотеке ColESo не допускается. Также не допускается одновременное задание
параметров разных решений.
Используемые библиотеки
-----------------------
ColESo использует отдельные процедуры из следующих библиотек:
* Cephes,
http://www.netlib.org/cephes
Распространяется по лицензии MIT
* GNU LibQuadMath,
https://gcc.gnu.org/onlinedocs/gcc-4.9.4/libquadmath
Распространяется по лицензии GPL v2.1
* Jacobi quadrature rules by S. Elhay, J. Kautsky, J. Burkadrt,
people.sc.fsu.edu/~jburkardt/cpp_src/jacobi_rule/jacobi_rule.html
Распространяется по лицензии LPGL
Для работы с арифметикой четверной и восьмерной точности ColESo использует
следующую библиотеку:
* QD – A C++/Fortran-90 double-double and quad-double package,
https://github.com/aoki-t/QD
Контакты
--------
Если у Вас есть вопросы, касающиеся использования ColESo,
Вы хотите сообщить об ошибке или готовы её улучшить,
Вы можете написать письмо на <bahvalo@mail.ru>.