В данной статье рассмотрим, из чего состоит проект FlowVision. Узнаем, как делать вещи, которые лучше не делать (вручную сохранять копию проекта, прореживать историю сохранения данных). Узнаем о возможности восстановления поврежденных проектов.
Структура хранения данных
Проект во FlowVision всегда состоит из нескольких файлов. При этом проект бывает двух видов – серверная часть и клиентская. Подробнее см. руководство пользователя (https://flowvision.ru/webhelp/fvru_30904/interaction_server_and_client.htm )
Серверная часть проекта содержит в себе всю клиентскую часть проекта, плюс несколько файлов:
- Solverpart – пустой файл, указывающий клиентским модулям на то, что это Серверная часть и ее лучше не открывать с помощью клиентских модулей.
- Файлы *.fvdata, *.fvgrid – файлы, в которых содержатся результаты расчета, данные в каждой ячейке и описание сетки
- Файлы *.log, *.err, *.sta – файлы протоколов работы Солвера с проектом.
Файлы проекта бывают трех типов:
- Текстовые
- Текстовые в xml формате
- Бинарные
Данные, которые имеют большой объем (сетка, результаты расчета, описание геометрических поверхностей), хранятся в бинарном виде. Остальные данные можно просмотреть в текстовом редакторе.
Файл *.fvproj – это XML файл, который содержит общее описание структуры проекта.
Вот пример fvproj файла:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<FVPROJECT>
<ProjID>3BBC6FD9-3E1B-482E-B9A9-007832DA2276</ProjID>
<VersionID>AD9356BC-9D40-4414-AC36-02FABA39D507</VersionID>
<SceneID>EB8E50E6-B8AF-492C-8781-9AE15A07476A</SceneID>
<CtrlID>1AA8A498-F547-4BB4-8D7E-F14FFD32C75B</CtrlID>
<FormatVer>3</FormatVer>
<Steps>
<ITEM>
<Number>0</Number>
<Iteration>0</Iteration>
<Time>0</Time>
<Contents>HGBOS</Contents>
</ITEM>
<ITEM>
<Number>1</Number>
<Iteration>500</Iteration>
<Time>0.016438364594882314</Time>
<Contents>SMV</Contents>
</ITEM>
</Steps>
</FVPROJECT>
Ручное сохранение проекта
Обратите внимание на тег <VersionID>
<ProjID>3BBC6FD9-3E1B-482E-B9A9-007832DA2276</ProjID>
Здесь указывается уникальный идентификатор проекта. По этому идентификатору Солвер-Агент производит сравнение Клиентской части проекта и Серверной. Если какая-то из частей сохранялась без связи с другой, то идентификатор меняется. Значит, проекты уже отличаются и их нельзя напрямую связывать.
Если сделать копию папки с Серверным проектом, то будет нарушена нормальная работа Солвер-Агента. Т.к. с его точки зрения два одинаковых проекта (с одинаковым идентификатором) будут находиться в одной папке. Поэтому сохранять копии проектов необходимо с помощью Пре-постпроцессора.
В случае острой необходимости сделать копию проекта вручную (например в условиях работы с кластером без прямого доступа) , необходимо в копии проекта поменять несколько символов в номере версии, окруженном тегами <ProjID> … </ProjID>
Ручное прореживание истории сохранений результатов расчета
С помощью Пре-Постпроцессора и опции «Сохранить выборочно» можно выполнить частичное удаление истории сохранений данных.
Существует возможность вручную проредить историю сохранений, однако я категорически не рекомендую это делать, т.к. в данном случае крайне высока вероятность повредить проект и утратить безвозвратно результаты работы. Все описанные действия выполняйте на свой страх и риск, они являются недокументированными и официально нерекомендуемыми.
В тег <Step> вложены блоки <ITEM> .. </ITEM>
Каждый <ITEM> блок – это запись о сохранении данных. В случае, если сохранение данных происходит с историей, в файле будет несколько <ITEM> блоков.
Подробно рассмотрим <ITEM> блок:
<ITEM>
<Number>11</Number>
<Iteration>550</Iteration>
<Time>0.015654564</Time>
<Contents>HGBOS</Contents>
</ITEM>
В тегах <Iteration> и <Time> указываются номер шага по времени и время физического процесса, которые соответствуют моменту сохранения.
В теге <Number> указывается порядковый номер сохранения. Этот же номер указывается в названии файлов, которые относятся именно к этому сохранению, вот пример:
На рисунке выше показаны файлы, которые относятся к сохранениям номер 0, 1 и 2. У файлов *.fvgrid и *.fvdata после номера сохранения также указывается номер процессора, в данном случае номер 000 (сохранение производилось только на одном процессоре).
В теге <Contents> зашифровано, какие именно данные сохранялись на данном сохранении. Ниже привожу расшифровку:
H -*.fvinp
G - *.fvgeom
B - *.fvbcs
O - *.fvgobj
S - *.fvstat
M - *.fvgrid
V - *.fvdata и *.fvmind
Процесс прореживания вручную состоит из нескольких этапов:
- Сделать резервную копию всего проекта в папку, которая находится за пределами Серверной директории проектов.
- Удалить ненужные записи <ITEM> из файла *.fvproj , при этом нужно помнить о следующем: нельзя удалять блоки ITEM, в которых в теге <Contents> упоминаются буквы HGBOM , если после этих записей еще останутся другие ITEM блоки, не содержащие этих букв, то эти сохранения не удастся прочитать. Поясню иными словами: при загрузке проекта FlowVision читает последний блок ITEM, если он в нем не находит какую-то из букв в теге <Contents>, он ищет эту букву в предыдущем блоге ITEM, и далее вверх по списку, пока не найдет. Если Вы удалите блок ITEM с какой-то буквой, которая ниже по списку ни разу больше не встречается, то проект невозможно будет восстановить. ( В случае сохранения сетки на каждом шаге преимущественно будут сохраняться записи ITEM с таким тегом Contents: <Contents>SMV</Contents> на каждом сохранении. В этом случае блок ITEM можно удалять спокойно, т.к. на следующем сохранении тоже будет сохранена буква M). Старайтесь вообще не удалять записи, содержащие редкие буквы H,G,B,O в теге Contents. Исключение может составлять разве только задача FSI, где буква O будет сохранена каждый раз.
- Удалить все файлы, содержащие номера удаленных блоков ITEM
- Загрузить проект на солвер и с помощью Модуля просмотра результатов или Пре-постпроцессора убедиться, что проект успешно загружен и можно просмотреть результаты сохранения на оставшихся шагах по времени
- Убедившись, что все хорошо, удалите бэкап.
Восстановление поврежденных данных
Иногда, из-за сбоев оборудования или стороннего программного обеспечения, в момент сохранения данных прекращается работ FlowVision. В этой ситуации могут быть повреждены те или иные файлы проекта.
При попытке загрузить проект на солвер в *.err файле можно узнать, какие именно файлы отсутствуют или повреждены.
Ниже я коротко перечислю основные действия по восстановлению данных:
0. Прежде всего сделайте резервную копию проекта
1. Убедитесь, что fvproj файл содержит типичные для него данные, не является пустым. Если файл пустой, попробуйте восстановить его из файла *.fvproj.backup или из Клиентской части проекта
2. Удалите в *.fvproj файле блок ITEM, содержащую тег <Intermediate> (если таковой имеется) следующего вида:
<ITEM>
<Number>16</Number>
<Iteration>7598</Iteration>
<Time>0.20775437958965703</Time>
<Intermediate>1</Intermediate>
</ITEM>
3. Если проект по-прежнему не загружается, но при этом расчет велся с сохранением с историей (нестационарная запись, т.е. без перезаписывания), тогда попробуйте удалить последний блок ITEM, возможно именно он поврежден и попробуйте загрузить проект снова.
4. Если проект не загружается и при этом сохранение было без истории, т.е. файлы данных перезаписывались, то попробуйте восстановить предыдущее сохранение, все файлы этого сохранения находятся в файлах *.backup .
Удалите соответствующие файлы , а у backup файлов удалите расширение backup
Не забывайте сохранять резервную копию проекта, прежде чем выполнять ручные манипуляции с его структурой и файлами.
И вообще, старайтесь без острой необходимости не делать этого :)