Диссертация (1149802), страница 8
Текст из файла (страница 8)
Данная возможность позволяет получать максимально точные решенияприкладных задач с учетом особенностей их геометрии. Например, в цилиндрической геометрии выбор полярных или цилиндрических координат,структурированные сетки в которых более точно аппроксимируют границырасчетной области, позволяет сократить объем вычислений и приводит кболее точным и устойчивым решениям, чем при использовании декартовыхкоординат.53• Возможность выбора пользователем метода решения задачи. В зависимостиот наличия или отсутствия стационарного решения рассматриваемой задачи, пользователю стоит использовать метод частиц в ячейках или итерационный метод. В некоторых же задачах, таких как моделирование динамикипучка в линейном резонансном ускорителе, заранее допустимо использование только метода частиц в ячейках.• Возможность точного описания пользователем параметров моделируемогоустройства: сложной геометрии расчетной области, граничных условий наэлектродах, начальных данных для потоков частиц.• Возможность настройки параметров используемых численных методов: генерация неоднородной расчетной сетки с её визуализацией, настройка шагаинтегрирования уравнений движения, точности решения уравнений поля ит.
д.• Визуализация результатов расчета с возможностью сохранения результатови вывода в файл.• Загрузка и сохранение проектов — файлов, содержащих все введенные пользователем параметры задачи, геометрию и некоторые результаты расчетов(структуру расчетной сетки, положения частиц, распределения полей).• Возможность расширения комплекса программ на другие задачи, напримердвумерная задача с экструзией сетки.UML (unified modeling language) диаграмма вариантов использования разработанного комплекса программ, отвечающего перечисленным выше требованиям представлена на рис.
3.2.54пользовательВыбор используемогометода<<Include>>Создание новогопроектаСохранение/загрузкамодели<<Include>><<Extend>>загрузкапроектаСохранение/загрузкапроекта<<Extend>><<Extend>>Выбор системыкоординат<<Extend>>загрузка результатовпредыдущих расчетовработа с текущим проектом<<Extend>><<Extend>><<Extend>>Настройка параметровмоделируемого устройства<<Extend>>Задание граници геометриинастройкапараметров методовНастройкавизуализаторапроцесса расчетаГенерациярасчетной сеткиЗапуск расчетавнешнего поляЗаданиеграничных условийЗаданиеначальных данныхдля потоковчастицВизуализациясостоянияустройстваЗапуск расчетадинамики потоковчастиц<<Include>><<Include>><<Include>>ПрерываниерасчетаВизуализациярезультатоврасчетаСохранениерезультатоврасчетовРиcунок 3.2: UML диаграмма вариантов использования553.2 Общее описание архитектурыАрхитектура разработанного комплекса программ представляет собой двухуровневую архитектуру клиент-сервер.
В качестве сервера выступает библиотека, выполняющая расчеты, имеющая в качестве интерфейса набор функций, позволяющих настраивать параметры задачи, управлять процессом расчета и получать данные решения. В качестве клиента выступает приложение с графическиминтерфейсом, с которым взаимодействует пользователь. Подобный подход позволяет легко заменить клиентское приложение на С++ интерфейс или простойобработчик конфигурационных файлов с целью использования кодов серверногоприложения на высокопроизводительном кластере.Одной из основных задач при разработке иерархии классов сервера быламинимизация использования виртуальных функций для увеличения производительности и легкости дальнейшего изменения кода с целью использованиятехнологии CUDA (Compute Unified Device Architecture). Технология виртуальных функций и полиморфизма времени выполнения была эффективно замененашаблонами С++ и полиморфизмом времени компиляции.
В итоге, виртуальныефункции используются только в некритичной части взаимодействия клиента исервера.При описании архитектуры комплекса, под моделью (Model) будем пониматьобъединение параметров моделируемого устройства (Device) и набора применяемых численных методов с параметрами (Solver).В зависимости от типа задачи и типа применяемого метода, классDeviceStatus, описывающий состояние моделируемого устройства, будет агре-гировать в себе данные различных типов и являться шаблонным. Такая структура позволяет использовать единую реализацию численного метода на высоком уровне для всех задач (общая схема метода) и индивидуальную реализациюметодов для задачи каждого типа на низком уровне (решение уравнений поля,расчет траекторий частиц и т.
д.).56Диаграмма классов объекты которых составляют класс DeviceStatus представлена на рис. 3.3.particlesDataTypeemitterDeviceTypedataTypedataTypeParticlesBase-particlesNumber : int-cellsNumbers : int-charges : std::vector: dataTypeParticlesFlowdataTypeParticles2dpolar-coordinates : std::vector: dataType-momentums : std::vector: dataType-dynamicsData : std::vector<particlesDataType>-mass : double-charge : double-emitterDeviceStatus : emitterDeviceType-boundaryConditions : BoundaryConditions+generateParticles()dataTypeParticles3dcyl-coordinates : std::vector: dataType-momentums : std::vector: dataTypedataTypedataTypeGridData2d-nodesCoordinates : std::vector: dataType-fieldComponents : std::vector: dataType-chargeDensity : std::vector: dataTypeparticles2ddataType-coordinates : std::vector: dataType-momentums : std::vector: dataTypedataTypeParticles3d-coordinates : std::vector: dataType-momentums : std::vector: dataTypedataTypeBoundaryConditions-boundariesList:: std::vector : int-conditionType : string-conditionProperties : std::vector: doubledataTypePointdataTypeEdge-point1 : Point-point2 : Point-x : dataType-y : dataType-z : dataTypedataTypeGridData2daxs-nodesCoordinates : std::vector: dataType-fieldComponents : std::vector: dataType-chargeDensity : std::vector: dataTypeTriangle-point1 : Point-point2 : Point-point3 : PointdataTypeGridData2dpolar-nodesCoordinates : std::vector: dataType-fieldComponents : std::vector: dataType-chargeDensity : std::vector: dataTypeParticlesSource2ddataTypeBoundaryContainer2d-geomData : std::vector: Edge-currentDensity : std::vector: double-sourceSurface : BoundaryContainer2ddataTypedataTypeGridData3ddataTypeParticlesSource3d-currentDensity : std::vector: double-sourceSurface : BoundaryContainer3d-nodesCoordinates : std::vector: dataType-fieldComponents : std::vector: dataType-chargeDensity : std::vector: dataTypeBoundaryContainer3d-geomData : std::vector: TriangleMeshContainer2d-meshData : std::vector: Point-cellsPoints : std::vector: intdataTypeEmitterDeviceBase+convertToGridData2d()+convertToGridData2daxs()+convertToGridData2dpolar()dataTypeEmitterDevice2d-particlesSource : ParticlesSource2d+generateParticles(p : particles2d *)+generateParticles(p : Particles2dpolar *)+generateParticles(p : Particles3d *)+generateParticles(p : Particles3dcyl *)dataTypeEmitterDevice2daxs-particlesSource : ParticlesSource2d+generateParticles(p : particles2daxs *)particlesDataTypegridDataTypeemitterDeviceTypeboundaryContainerTypemeshDataTypedataTypeDeviceStatus-particlesFlowsStatus : std::vector: particlesFlow-domainBoundaries : boundaryContainerType-mesh : meshDataType-gridData : gridDataType-boundaryConditions : BoundaryConditions-electrodes : std::vector: ElectrodeMeshContainer3d-meshData : std::vector: Point-cellsPoints : std::vector: int+convertToGridData3d()Electrode-electrodeEdges : std::vector: Edges-currenrAtEdges : std::vector: doubledataTypeEmitterDevice3d-particlesSource : ParticlesSource3d+generateParticles(p : Particles3d *)+generateParticles(p : Particles3dcyl *)Риcунок 3.3: UML диаграмма классов части deviceКлассы с именами Particles и GridData представляют собой структуры дляхранения данных о частицах и значениях полей и плотностей в узлах эйлеровыхсеток, а также содержат некоторые функции обработки данных с учетом особенностей используемой системы координат.
Классы EmitterDevice содержат дан-57ные об эмиттере и свойствах начального распределения частиц, а также имеютметоды генерации начальных данных. При этом класс ParticlesFlow агрегирует общую информацию о каждом потоке частиц. Классы MeshContainer2d иMeshContainer3d содержат более детальные описания структур эйлеровых сетокбез значений полей, функции экспорта в формат VTK для визуализации, а такжеметоды конвертирования в форматы GridData. Классы Point, Edge, Triangle,BoundaryContainer предназначены для работы с геометрией.
Для описания гра-ничных условий на электродах и для потоков заряженных частиц используетсякласс BoundaryConditions. Класс Electrode предназначен для расчета плотности тока, протекающего по электродам моделируемого устройства и плотностиих облучения.Дополнительно, все крупные структуры данных являются шаблонными поиспользумому типу числового представления dataType для поддержания возможности проводить расчеты с плавающей точкой двойной или одинарной точности.Данная архитектура позволяет удобным образом, правильно скомбинировавпараметры шаблона класса DeviceStatus, создавать объект нужного типа длярешения той или иной задачи. Например, для решения двумерной задачи вдекартовых координатах с использованием типа dataType можно ввести типdevice2d.typedef DeviceStatus<Particles2d, GridData2d,EmitterDevice2d, BoundaryContainer2d,MeshContainer2d, dataType> device2dПо аналогии введем типы device2d, device2dpolar, device2daxs, device3d.Диаграмма классов SolverPIC и SolverPTI, описывающих применяемыечисленные методы, представлена на рис.
3.4. Класс SolverPIC реализует метод частиц в ячейках, а класс SolverPTI — итерационный метод. КлассPaticleGridInterface реализует функции интерполяции сил, раздачи заряда58dataTypeEmissionCurrentSolverPTI+UpdateEmissionCurrent(emitter : EmitterDeviceType *)dataTypePrticleGridInterface+GridToParticles(particles : particlesDataType *, grid : GridDataType *)+ParticlesToGrid(particles : particlesDataType *, grid : GridDataType *)+ParticlesBoundaries(particles : particlesDataType *, grid : GridDataType *)dataTypeSolverPTI+Simulate()dataTypedataTypeParticlesMover+UpdateMomentums(particles : particlesDataType *)+UpdatePositions(particles : particlesDataType *)SolverBasedataTypeMeshGeneratordataType+GenerateMesh(boundary : boundaryContainerType *)SolverPIC+Simulate()dataTypeFieldSolver+SimulateFields(grid : GridDataType *)dataTypeEmissionCurrentSolverPIC+UpdateEmissionCurrent(emitter : EmitterDeviceType *)Риcунок 3.4: UML диаграмма классов части deviceпо узлам сетки, проверки прохождения частицами границ области и т.














