Разработка пользовательского интерфейса и инструмента постобработки результатов гидродинамического симулятора для моделирования процессов нефтедобычи

Обложка


Цитировать

Полный текст

Аннотация

В рамках проекта гидродинамического симулятора KMGEsim: разработаны пользовательский интерфейс для контроля ввода данных и инструмент постобработки результатов моделирования; создан приватный проект в системе GitHub с единой архитектурой; добавлены лицензия, документация и инструмент непрерывной интеграции в проект на GitHub для его дальнейшего использования в виде программного обеспечения с открытым исходным кодом.

Полный текст

Введение

Гидродинамический симулятор (далее – ГДС) KMGEsim был разработан на основе новой формулировки дифференциальных уравнений в частных производных композиционной модели химического заводнения пласта [1].

В разделе 1 основной части данной работы описывается разработка пользовательского интерфейса гидродинамического симулятора для контроля ввода данных и удобства запуска на расчёт с использованием кроссплатформенной интегрированной среды разработки Qt. Для запуска гидродинамического симулятора на расчёт в большинстве случаев требуются 2 входных файла: «HEAD» и «INPUT». Файл входных данных содержит полное описание модели, т.е. описание пласта, свойств флюида и породы, данные для инициализации, скважины и их дебиты. В общем случае пользователь может работать в многофайловом режиме, который достигается указанием некоторых параметров с помощью дополнительных входных файлов, описанных в литературе [2]. Наличие дополнительных входных файлов зависит от различных флагов или указателей управления, описанных в файле «INPUT». До настоящего времени ввод данных для гидродинамического симулятора осуществлялся путем создания пользователем входных файлов и записи непосредственно в них. Пользователю следует тщательно изучить описание флагов и провести обзор каждой строки для получения представления о правилах ввода данных и корректного моделирования того или иного варианта разработки. Опции моделирования и флаги описаны в руководстве пользователя гидродинамического симулятора [3], согласно которому строки с флагами должны располагаться в определенном порядке. Кроме того, в ныне используемом методе ввода набор данных, прописываемый в виде строк, часто выглядит беспорядочно и неорганизованно, что затрудняет визуальное восприятие. У входных параметров существует зависимость между собой, т.е. при присваивании входным параметрам определенных значений устанавливается необходимость ввода соответствующих последующих данных. В существующей версии пользовательского интерфейса гидродинамического симулятора данные зависимости учитывались самим пользователем, что усложняло процесс ввода данных и значительно замедляло работу. Для устранения этой сложности в рамках данной работы разработано окно пользовательского интерфейса гидродинамического симулятора для контроля ввода данных, где ввод значения параметров осуществляется с помощью ячеек. Под ячейками в Qt подразумеваются объекты lineEdit и textEdit. Необходимость ввода значения параметра определяется активностью и неактивностью ячейки, соответствующей данному параметру.

В разделе 2 описывается инструмент визуализации и постобработки результатов. Были изучены широко используемые программные обеспечения (далее – ПО) для визуализации и постобработки результатов расчета гидродинамического симулятора для моделирования процессов нефтедобычи.

Широко распространенными программными продуктами для визуализации результатов гидродинамических симуляторов выступают S3GRAF, Tecplot RS, ResInsight, ParaView-RVA и др. Гидродинамические симуляторы, такие как ECLIPSE (Schlumberger) и tNavigator (Rock Flow Dynamics), имеют собственные инструменты для визуализации и анализа данных.

S3GRAF является коммерческим ПО, который обеспечивает трехмерную визуализацию и анализ моделей. S3GRAF может одновременно визуализировать, сравнивать и анализировать результаты нескольких симуляторов [4]. Ключевой особенностью является быстрая загрузка данных и построение графиков.

Tecplot RS является коммерческим ПО, которое дает возможность управлять данными моделирования и анализировать их [5], поддерживает большинство гидродинамических симуляторов.

ResInsight является кроссплатформенным инструментом трехмерной визуализации и постобработки с открытым исходным кодом для гидродинамических моделей. ResInsight был разработан совместно Equinor ASA, Ceetron Solutions AS и Ceetron AS с целью предоставить универсальный инструмент для профессионалов, которым необходимо визуализировать и обрабатывать модели коллекторов [6].

ParaView-RVA – открытое программное обеспечение для анализа и визуализации данных, которое позволяет анализировать и визуализировать результаты расчетов ГДС. Это ПО использует параллельную обработку и рендеринг данных для интерактивной визуализации наборов данных. ParaView-RVA обеспечивает возможности визуализации нескольких характеристик пласта вместе с физическими свойствами жидкости, такими как насыщенности, давление фаз и др. [7].

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

В рамках данной работы был создан инструмент для визуализации результатов гидродинамического симулятора с помощью языка программирования Python и модуля графического интерфейса Tkinter.

В работе [1] также приводится описание архитектуры проекта гидродинамического симулятора на GitHub и его основных компонентов. GitHub является удобным веб-сервисом для совместной разработки, который предоставляет возможности просмотра, распространения кода и его хранения. Также для управления версиями кода в веб-сервисе GitHub используется сервис Git, предназначенный для хранения информации обо всех изменениях в коде и его контроля. Наличие компонентов проекта, таких как лицензия, документация и непрерывная интеграция, положительно влияет в будущем для представления проекта в виде ПО с открытым исходным кодом. Это позволит сообществу разработчиков на GitHub использовать открытый исходный код для разработки новых версий ПО. Также можно ожидать, что в будущем переход на ПО с открытым исходным кодом послужит хорошей рекламой проекту и создаст отличную возможность для продвижения ПО.

Целью данной работы по созданию ГДС является разработка пользовательского интерфейса для контроля ввода данных, инструмента для визуализации и постобработки результатов расчета, а также архитектуры проекта на GitHub.

Основная часть

1.     Разработка пользовательского интерфейса гидродинамического симулятора для контроля ввода данных с использованием кроссплатформенной интегрированной среды разработки Qt

Работа по разработке пользовательского интерфейса гидродинамического симулятора была разделена на следующие этапы:

  1. Составление алгоритма зависимости параметров для определения активности ячеек.
  2. Формирование групп параметров, каждая из которых заканчивается кнопкой «Enter».
  3. Присвоение функционала, соответствующего каждой кнопке «Enter».
  4. Создание алгоритма для возможности редактирования введенных и записанных значений параметров.

Перед началом основной работы в ранее разработанную версию пользовательского интерфейса гидродинамического симулятора была установлена кнопка «New Document», которая открывает окно, отвечающее за ввод данных. Кнопка «New Document», показанная на рис. 1, появляется после нажатия на кнопку «Choose input directory» и выбора директории для файлов.

 

Рисунок 1. Демонстрация кнопки «New Document»

 

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

Второй этап работы связан непосредственно с основной целью работы, а именно с разработкой окна пользовательского интерфейса гидродинамического симулятора для контроля ввода данных и удобства запуска на расчёт. На данном этапе основными задачами являются создание объектов однострочного (lineEdit) и многострочного (textEdit) текстовых полей элементов ввода [8] в окне ввода данных (рис. 2) для каждого параметра, а также формирование групп параметров. Формирование групп параметров осуществляется для соблюдения алгоритма зависимости между входными параметрами, составленного на первом этапе данной работы. Строки, заканчивающиеся на кнопку «Enter», свидетельствуют о завершении формирующейся группы. Для формирования группы и вставки кнопки «Enter» составляется совокупность параметров. При этом важным условием является зависимость между строками параметров, состоящих в группе, и следующей по порядку строкой параметров, не состоящей в группе. Если в последующей строке нет параметров, которые зависят от параметров формируемой группы, то данная строка вносится в группу. Такой отбор происходит до тех пор, пока не будет обнаружен параметр в строке, который будет зависеть от параметров формируемой группы. Эта строка, соответственно, и становится концом группы.

 

Рисунок 2. Окно ввода данных

 

Изначально все ячейки параметров групп, за исключением первой группы, являются неактивными.

На рис. 3 продемонстрирован принцип формирования группы. Строка «XCORD(I), ZCORD(I)» зависит от параметра «ICOORD», строка «DX1, DY1, DZ1» от параметров «IDXYZ», «ICOORD» и т.д.

 

Рисунок 3. Демонстрация принципа формирования группы

 

Третий этап работы заключается в присвоении функционала, соответствующего каждой кнопке «Enter». Первый «Enter» отвечает за создание «HEAD» и «INPUT» файлов в выбранной ранее директории, а также запись в них первой группы параметров. Все параметры «HEAD» файла содержатся в первой группе параметров. После нажатия на первый «Enter» создание «HEAD» файла и запись в него осуществляются, вследствие чего работа с «HEAD» файлом завершается. Каждая строка параметров записывается в виде двух строк: первая строка – описание строки параметров, в которой содержатся названия параметров, а вторая – численные значения вводимых параметров, которые отделяются между собой пробелом. Так как каждая группа заканчивается кнопкой «Enter», количество кнопок соответствует количеству групп. Последующие кнопки «Enter» добавляют в созданный файл «INPUT» значения соответствующих групп параметров. После нажатия на кнопку она становится неактивной. На рис. 4 показана функциональность кнопки «Enter». После нажатия на эту кнопку создание файлов и запись в них осуществляются, и кнопка становится неактивной. В результате ввода данных и нажатия кнопки «Enter», согласно алгоритму зависимости параметров, ячейки следующей группы становятся активными.

 

Рисунок 4. Ввод данных в ячейки

 

Работа в ходе заключительного этапа дает возможность редактирования ранее введенных данных. Предположим, что в ячейки были введены определенные группы параметров, и они записались в файл. В результате кнопка «Enter», соответствующая редактируемой группе параметров, становится неактивной. При этом для редактирования данных нам достаточно изменить значения в ячейке. После изменения значений параметров кнопка «Enter» редактируемой группы снова становится активной.

Данная работа находится в общем проекте KMGEsim на GitHub под названием KMGEsim_IF, который описан в разделе 3. В дальнейшем планируется внедрение нового функционала по считыванию интерфейсом данных из «HEAD» и «INPUT» файлов существующей модели и редактированию этих файлов. Также планируется внедрение функции работы в многофайловом режиме.

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

В рамках данной работы создан прототип инструмента визуализации результатов гидродинамического симулятора KMGEsim для моделирования процессов нефтедобычи. В интерфейс визуализатора были добавлены меню File, Summary и Solution. Меню File (рис. 5) состоит из блоков Open и Clear. Блок Open предназначен для открытия файла выходных данных OVERALL, а блок Clear – для очистки графиков в форме. Меню Summary (рис. 6) состоит из блоков Well и Overall. В блоке Well находится информация о скважинах. Файл выходных данных OVERALL содержит данные пласта и скважин, такие как насыщенность, давление фаз и др.

 

Рисунок 5. Окно меню File

 

Рисунок 6. Окно меню Summary

 

На рис. 7 представлен интерфейс визуализатора и окно для открытия файла с расширением OVERALL.

 

Рисунок 7. Окно интерфейса визуализации

 

Для считывания данных параллельно из выходных файлов мы используем модуль Asyncio, что дает возможность ускорить обработку данных и тем самым сократить время ожидания. После открытия файлов выходных данных считываем данные из них и создаем фрейм данных с помощью модуля Pandas. На рис. 8 можно видеть окно блока Overall. В этом окне пользователь выбирает физические свойства сплошной среды, такие как насыщенность и давление фаз, для представления их зависимости относительно оси «день» или «прокачанный поровый объем» (PV). Графический интерфейс пользователя создан с использованием модуля Matplotlib.

 

Рисунок 8. Окно меню блока Overall

 

Для визуализации трехмерного графика полей концентраций, насыщенностей и давлений используются модули plot_3D и Color. С помощью plot_3D создается трехмерное пространство, в которое циклично добавляются ячейки по координатам, полученным из файла с расширением MESH. Для наблюдения изменения значений физических свойств, таких как давление, насыщенности фаз и концентрации компонентов, в каждой ячейке по времени в режиме анимации используется функция Animate. Модуль Color определяет цвет ячейки согласно численному значению той или иной характеристики фаз/компонентов.

На рис. 9 представлено окно, которое открывает меню Solution. В этом окне можно наблюдать за изменениями значений выбранной характеристики фаз или компонентов в каждой ячейке. С помощью кнопки «Play» пользователь может выполнять пошаговую анимацию с течением времени или по прокачанному поровому объему.

 

Рисунок 9. Окно трехмерной визуализации

 

Данная работа находится в общем проекте KMGEsim на GitHub под названием KMGEsim_VS, который описан в разделе 3. В дальнейшем планируется оптимизировать работу и улучшить функциональность визуализатора.

3.     Разработка архитектуры проекта гидродинамического симулятора на GitHub

Создание репозитория и веток на GitHub для модулей гидродинамического симулятора KMGEsim

Разработанная в рамках данной работы архитектура, представленная на рис. 10, позволит налаживать рабочий процесс и взаимодействие внутри команды. Создана организация на GitHub для проекта KMGEsim, которая на данный момент имеет приватный характер. KMGEsim состоит из трех проектов с наименованиями KMGEsim_TP, KMGEsim_IF и KMGEsim_VS.

 

Рисунок 10. Архитектура проекта гидродинамического симулятора на GitHub

 

На рис. 11 рассматриваются основные компоненты GitHub и их построение: ветки и проекты.

 

Рисунок 11. Настройка веток и непрерывная интеграция

 

В каждом проекте настроена лицензия Apache 2.0 и имеется файл документации README.md, в котором участники проекта имеют право вносить корректировки в связи с изменением содержания кода. Ограничений в количестве и наименовании веток не имеется, но при условии, что для хранения официальной истории релиза используется ветка «main». Любая другая ветка используется для хранения отдельных функций, которых вскоре можно добавить в основную ветку «main». После добавления определенных функций на основную ветку проекта через ветки разработки необходимо проверить сборку проекта с помощью автоматизированного инструмента непрерывной интеграции Travis CI для проверки нового кода перед интеграцией. При успешной проверке кода внесенные изменения вправе быть добавленными в основную ветку.

Так как в будущем рассматривается изменение проекта с частного вида на проект с открытым исходным кодом, важно будет поддержать взаимосвязь с внешним миром. Для этого случая на рис. 12 представлена схема архитектуры проекта.

 

Рисунок 12. Взаимосвязь проекта KMGEsim с внешним миром

 

Каждый пользователь GitHub имеет право вносить изменения в код проекта. В случае дальнейшей публикации измененного кода в интернете под своим аккаунтом пользователь должен указать авторов оригинального кода согласно лицензии. Также пользователь может предложить свои изменения авторам и при согласованности внести изменения в главные проекты. Для этого обязательно произвести «fork» проекта и создать запрос авторам на добавление изменении «Pull request».

В части архитектуры на рис. 13 описывается процесс актуализации проекта с локального компьютера на облачный сервис GitHub и наоборот.

 

Рисунок 13. Актуализация проекта

 

При актуализации проекта с облачного сервиса GitHub на локальный компьютер используется два возможных способа:

- графический интерфейс пользователя;

- командная строка.

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

Подготовка к реализации проекта с открытым исходным кодом

Лицензия. Общедоступные репозитории на GitHub часто используются для хранения кода и обмена фреймворками, библиотеками и техническими решениями. Лицензирование ПО с открытым исходным кодом способствует совместным разработке и использованию решений, поскольку оно позволяет другим людям вносить изменения в исходный код и включать эти изменения в свои собственные проекты.

В настоящей работе используется лицензия Apache 2.0 (рис. 14), в которой имеются следующие допуски к проекту: коммерческое использование, распространение, изменение исходного кода, личное использование [9]. Также лицензия требует упоминания авторства и лицензии в работе и указания изменений, внесенных в работу.

 

Рисунок 14. Демонстрация лицензии в проекте KMGEsim_TP

 

Документация. Проекты с открытым исходным кодом нуждаются в документации, описывающей используемые шаблоны проектирования, стандарты работы и всё, что может помочь новым участникам войти в курс дела. Документация зачастую находится в главной ветке в файле README.md, используется для инструктажа запуска проекта и использования его. На рис. 15 представлена документация по проекту KMGEsim_VS, в которой демонстрируется инструктаж для установки и запуска проекта с облака GitHub на локальный компьютер, а именно добавление установочных файлов и программ, которые включают python3 и pip3.

 

Рисунок 15. Демонстрация документации в проекте KMGEsim_VS

 

CI (Непрерывная интеграция). Данный раздел посвящен автоматизации сборки проекта с помощью Travis CI. Travis CI — это размещенная платформа непрерывной интеграции, которая бесплатна для проектов с открытым исходным кодом на GitHub. В файле .travis.yml на рис. 16 содержится информация о проекте, с помощью которого можно запускать автоматические сборки при каждом изменении базы кода в основной ветви, других ветвях или даже по запросу извлечения [10].

 

Рисунок 16. Travis CI в проекте KMGEsim_TP

 

На данный момент для проектов KMGEsim_TP, KMGEsim_IF и KMGEsim_VS добавлена непрерывная интеграция для автоматизации сборки проекта. Проведена адаптация непрерывной интеграции языков программирования Fortran, C++ и Python.

Заключение

При разработке пользовательского интерфейса и инструмента постобработки данных гидродинамического симулятора для моделирования процессов добычи нефти были достигнуты следующие результаты:

  1. Построен алгоритм взаимозависимости входных параметров для автоматизации контроля ввода данных.
  2. Сформированы группы данных на основе разработанного алгоритма зависимости между входными параметрами.
  3. Присвоен соответствующий функционал каждой кнопке «Enter».
  4. Создан и реализован алгоритм для возможности редактирования ранее введенных значений параметров.
  5. Разработан прототип инструмента для визуализации и постобработки результатов гидродинамического симулятора.
  6. Разработана архитектура проекта гидродинамического симулятора KMGEsim в системе GitHub.
  7. Добавлены основные компоненты веб-сервиса GitHub для перехода с закрытого проекта на проект с открытым исходным кодом.
  8. В проекты KMGEsim были настроены инструменты непрерывной интеграции Travis CI в зависимости от языка программирования.
×

Об авторах

Данат Маратұлы Жексембин

ТОО «КМГ Инжиниринг»

Email: d.zhexembin@niikmg.kz

специалист службы моделирования Департамента интегрированного моделирования

Казахстан, Нур-Султан

Бекболат Қурметбек

ТОО «КМГ Инжиниринг»

Email: qurmetbek.bekbolat@mail.ru

практикант

Казахстан, Нур-Султан

Аружан М. Серикбаева

ТОО «КМГ Инжиниринг»

Email: rnserikbaevaa@gmail.com

практикант

Казахстан, Нур-Султан

Бахберген Ермекбаевич Бекбауов

ТОО «КМГ Инжиниринг»

Автор, ответственный за переписку.
Email: b.bekbauov@niikmg.kz

доктор PhD, ведущий научный сотрудник Службы моделирования Департамента интегрированного моделирования

Казахстан, Нур-Султан

Список литературы

  1. Бекбауов Б.Е, Темірқас М.М., Кучиков А.Г. Разработка композиционного гидродинамического симулятора процессов повышения нефтеотдачи пластов химическими методами. – Вестник нефтегазовой отрасли Казахстана, 2020, № 3(4), c. 56–69. // Bekbauov B.E, Temіrқas M.M., Kuchikov A.G. Razrabotka kompozicionnogo gidrodinamicheskogo simulyatora processov povysheniya nefteotdachi plastov himicheskimi metodami [Development of a composite hydrodynamic simulator of enhanced oil recovery processes by chemical methods]. – Vestnik neftegazovoi otrasli Kazahstana [Kazakhstan journal for oil & gas industry], 2020, № 3(4), pp. 56–69.
  2. Pope G., Delshad M. User's Guide for UTCHEM 2011_7, A Three-Dimensional Chemical Flood Simulator. Volume I. – Center for Petroleum and Geosystems Engineering, The University of Texas at Austin, Austin, Texas, USA, 2011, 181 p.
  3. User's Guide for KMGEsim 2020_1, A Three-Dimensional Chemical Flood Simulator. – KMG Engineering LLP, Nur-Sultan, 2020, 168 p.
  4. Bonallo R. Post Processing Techniques for Smoothed Particle Hydrodynamics. – Master's Thesis, Imperial College London, 2015.
  5. Гладков Е.А. Геологическое и гидродинамическое моделирование месторождений нефти и газа. – Томский Политехнический Университет, 2012, 99 с. // Gladkov E.A. Geologicheskoe i gidrodinamicheskoe modelirovanie mestorozhdenii nefti i gaza [Geological and hydrodynamic simulation of oil and gas fields]. – Tomskii Politekhnicheskii Universitet [Tomsk Polytechnic University], 2012, 99 s.
  6. Renli L., Helstrup O.A., Ke G., Thompson N. Fast 4D Geomechanical Modeling with Multiple Applications. – Society of Petroleum Engineers, 2019, SPE-195606-MS. DOI https://doi.org/10.2118/195606-MS
  7. Keefer D. RVA: A Plugin to ParaView 3.14 for Improved Reservoir Visualization and Analysis. – University of Illinois at Urbana Champaign, 2015.
  8. Шлее М. Qt 5.10. Профессиональное программирование на С++. – СПб, БХВ-Петербург, 2018, 1072 с. // Shlee M. Qt 5.10. Professional'noe programmirovanie na S++ [Professional programming in C++]. – SPb, BHV-Peterburg, 2018, 1072 p.
  9. Соковых П. В чём разница между популярными Open Source лицензиями? Объясняет Github. – Материалы сайта Tproger, 2017, March 19. https://tproger.ru/articles/whats-difference-between-licenses/ // Sokovyh P. V chyom raznica mezhdu populyarnymi Open Source licenziyami? Ob"yasnyaet Github [What is the difference between popular Open Source licenses? Github explains]. – Materialy saita Tproger [Materials of the Tproger site], 2017, March 19. https://tproger.ru/articles/whats-difference-between-licenses/.
  10. Travis-CI: что, почему, как. Материалы сайта CoderLessons.com, 2019, March 15. https://coderlessons.com/articles/veb-razrabotka-articles/travis-ci-chto-pochemu-kak. // Travis-CI: chto, pochemu, kak. Materialy sajta CoderLessons.com [Travis-CI: what, why, how. Materials of the CoderLessons.com site], 2019, March 15. https://coderlessons.com/articles/veb-razrabotka-articles/travis-ci-chto-pochemu-kak

Дополнительные файлы

Доп. файлы
Действие
1. JATS XML
2. Рисунок 1. Демонстрация кнопки «New Document»

Скачать (36KB)
3. Рисунок 2. Окно ввода данных

Скачать (102KB)
4. Рисунок 3. Демонстрация принципа формирования группы

Скачать (114KB)
5. Рисунок 4. Ввод данных в ячейки

Скачать (113KB)
6. Рисунок 5. Окно меню File

7. Рисунок 6. Окно меню Summary

Скачать (13KB)
8. Рисунок 7. Окно интерфейса визуализации

Скачать (65KB)
9. Рисунок 8. Окно меню блока Overall

Скачать (87KB)
10. Рисунок 9. Окно трехмерной визуализации

Скачать (104KB)
11. Рисунок 10. Архитектура проекта гидродинамического симулятора на GitHub

Скачать (355KB)
12. Рисунок 11. Настройка веток и непрерывная интеграция

Скачать (55KB)
13. Рисунок 12. Взаимосвязь проекта KMGEsim с внешним миром

Скачать (61KB)
14. Рисунок 13. Актуализация проекта

Скачать (154KB)
15. Рисунок 14. Демонстрация лицензии в проекте KMGEsim_TP

Скачать (226KB)
16. Рисунок 15. Демонстрация документации в проекте KMGEsim_VS

Скачать (146KB)
17. Рисунок 16. Travis CI в проекте KMGEsim_TP

Скачать (109KB)

© Жексембин Д.М., Қурметбек Б., Серикбаева А.М., Бекбауов Б.Е., 2021

Creative Commons License
Эта статья доступна по лицензии Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.

Данный сайт использует cookie-файлы

Продолжая использовать наш сайт, вы даете согласие на обработку файлов cookie, которые обеспечивают правильную работу сайта.

О куки-файлах