Трехмерное численное моделирование высокоэнергетических импульсных процессов тема автореферата и диссертации по физике, 01.04.17 ВАК РФ
Султанов, Валерий Гулямович
АВТОР
|
||||
кандидата физико-математических наук
УЧЕНАЯ СТЕПЕНЬ
|
||||
Черноголовка
МЕСТО ЗАЩИТЫ
|
||||
2001
ГОД ЗАЩИТЫ
|
|
01.04.17
КОД ВАК РФ
|
||
|
Введение.
Глава I. Параллельные системы и крупномасштабное численное моделирование.
Глава II. Описание реализация метода CIP.
Глава III. Пространственное моделирование струйных течений: эволюция, структура, неустойчивость.
Глава IV. Метод индивидуальных частиц для равномерных прямоугольных сеток.
Глава V. Высокоскоростной удар - трехмерное моделирование.
С развитием компьютерной техники и вычислительных методов стало возможным более детальное исследование вихревых и струйных течений. Именно такого рода течения определяют многие процессы в природе и в технических агрегатах: развитие смерчей и тайфунов, движение газовых потоков в турбинах, впрыск топлива в ракетных прямоточных двигателях, перемешивание компонент в химических реакторах и т.п. Все эти процессы требуют точного расчёта и прогноза, что невозможно без активного использования методов численного моделирования [1,9,11].
Специфической особенностью интересующих нас процессов является их сугубо нелинейная природа и многостадийный характер, когда одновременно развиваются взаимосвязанные разномасштабные по времени и пространству события. Всё это предъявляет жёсткие требования к используемым численным алгоритмам и делает непригодными многие традиционные методы решения газодинамических задач. Так, например, большинство известных численных схем, применяемых для решения газодинамических задач ударно-волнового воздействия, обладают неудовлетворительными дисперсионными свойствами и приводят к существенным искажениям не только фазовых, но и групповых скоростей волновых пакетов, формирующих вихревые и струйные течения [2-7].
Подавляющая масса расчетов в этой области проводилась в двумерной постановке [8], что естественно накладывало существенные топологические ограничения на структуру течений, а, следовательно, на качество и достоверность полученных результатов. Представляется интересным снять это ограничение и провести серию экспериментов по 3-х мерному численному моделированию упомянутых выше явлений.
На основании специально проведённых исследований и накопленного опыта численного моделирования для решения широкого круга задач сложных гидродинамических течений было выделен наиболее оптимальный с точки зрения точности и экономичности алгоритм: метод CIP [10,11]. При выборе метода учитывалась возможность его распараллеливания, так как современное 3-х мерное численное моделирование невозможно без использования параллельных вычислительных платформ.
С другой стороны анализ типичных процессов физики взрыва и соударения показывает, что их характерными особенностями являются: большие деформации, наличие значительного числа свободных и контактных границ, разрывов, фазовые и структурные превращения, пересечение и самопересечение границ и разрывов, изменение топологии областей за счет процессов разрушения.
Математическое моделирование явлений взрыва и соударения с учетом всех перечисленных выше особенностей - трудная задача, до конца не решенная в настоящее время. Дело в том, что при всем многообразии численных методов интегрирования систем уравнений, описывающих нестационарные движения сжимаемой среды, невозможно указать безусловно лучший по всем показателям. Сравнение различных численных методов и разностных схем с указанием на их достоинства и недостатки имеется в литературе [2-7].
Поэтому выбор метода индивидуальных частиц [12-14], позволяющий моделировать разнообразные процессы, сопровождающие явления пробивания и соударения, в качестве альтернативного методу CIP для данного круга задач неслучаен. Использование этих методов, каждого в своей области позволяет проводить более качественные расчеты без каких-либо специальных ухищрений.
Настоящая работа посвящена параллельному трехмерному численному моделированию процессов, происходящих при высокоскоростных импульсных воздействиях, на основе численных методов: метода CIP (Cubic Interpolation Propagation) [10,11], ориентированного на моделирование струйных течений и гидродинамических неустойчивостей и трехмерной реализации метода индивидуальных частиц ИНЧ [12-14], для моделирования процессов протекающих при высокоскоростных соударениях, детонациях и взрывах.
Целями работы являются:
Создание параллельных численных кодов и 3-х мерное моделирование процессов при экстремально высоких давлениях и температурах, а именно:
• разработка 3-х мерных параллельных кодов
• исследование Релей-Тейлоровской неустойчивости и импульсных струйных течений (метод CIP)
• расчет процессов высокоскоростного удара (метод ИНЧ)
Новизна работы состоит в следующем:
На основе разработанных численных методов CIP и ИНЧ выполнено 3-х мерное численное моделирование в параллельном режиме (на области 250x200x200):
• исследовано влияние трехмерных факторов на развитие Релей-Тейлоровской неустойчивости
• исследовано развитие импульсных струйных течений
• впервые реализован трехмерный вариант метода ИНЧ, - на его основе проведены расчеты различных режимов высокоскоростного пробивания в широком спектре параметров скоростей, давления и температур.
Практическая ценность работы заключается в следующем:
Метод CIP для моделирования отдельных режимов развития Релей-Тейлоровской неустойчивости позволяет более детально исследовать:
• развитие геологических формаций;
• физические процессы гидродинамических неустойчивостей, определяющие инерционный термоядерный синтез;
• конвективную динамику атмосферы.
Метод ИНЧ для решения задач высокоскоростного пробивания позволяет эффективно решать задачи:
• противометеоритной защиты;
• астероидная опасности.
Работа имеет следующую структуру. Организационно она состоит из введения, 5-ти глав, заключения и списка литературы.
4.5 Основные результаты и выводы
В настоящей главе представлен краткий анализ численных методов, используемых для математического моделирования явлений взрыва и соударения. Очерчены проблемы, связанные с использованием упорядоченных и неупорядоченных носителей информации о течении, определено место метода ИНЧ в ряду других численных методов.
Подробно изложен трехмерный алгоритм метода ИНЧ для течений на равномерных сетках в декартовой системе координат. Выписаны соответствующие разностные схемы, исследована их устойчивость.
Изложены алгоритмы дробления и объединения частиц, отвечающие за согласованность эйлеровой и лагранжевой сеток и за экономичное использование ресурсов ЭВМ.
Решена задача пробивания в двумерной постановке, приведено сравнение решения известными численными методами, получено хорошее согласование расчетов.
Приведена структура счетной программы ПК «СТЕРЕО-МР1» [47], реализующей все перечисленные выше алгоритмы.
ГЛАВА 5. ВЫСОКОСКОРОСТНОЙ УДАР - ТРЕХМЕРНОЕ
МОДЕЛИРОВАНИЕ
Проблема моделирования высокоскоростного пробивания достаточно сложная задача. В настоящее время существует большое число работ [24], посвященных проблемам численного моделирования в задачах с большим градиентами параметров. Кроме того, современное состояние вычислительных кодов в данной области таково, что в отдельных промоделировать можно точнее, чем измерить [18].
Существует достаточно большое число областей деятельности человека, в которых численное моделирование, если не заменяет полностью дорогостоящие натурные эксперименты: профилирование корпусов машин, самолетов; «краш» тесты; взрывные эксперименты, то значительно удешевляет их. Но есть целый ряд проблем, - защита от микрометеоритов, астероидная опасность, - проведение натурных экспериментов в которых практически невыполнимая задача.
В данной главе решается задача моделирования высокоскоростного пробивания, скорость ~ 90 км/с. (Проблема защиты космических аппаратов от микрометеоритов.)
5.1. Постановка задачи и моделирование
Пусть алюминиевый кубик размером 0.5 мм бьет со скоростью перпендикулярной составляющей плоскости, состоящей из алюминия, 80 км/с и касательной составляющей 20 км/с по обоим направлениям. В качестве уравнений состояния будем использовать широкодиапазонные уравнения состояния [49].
На рис. 5.1. приведено состояние процесса пробивания на 0.12 мкс после столкновения объектов.
Рис. 5.1. Изоповерхность плотности на 0.12 мкс. после столкновения (плотность алюминия при нормальных условиях)
Рис. 5.2. Срез параллельно касательной составляющей скорости на время 0.12 мкс. после столкновения. Плотность.
На рисунке 5.2 отчетливо видны процессы, происходящие при высокоскоростном пробивании, область испарения, твердой фазы, фронт ударной волны.
ЗАКЛЮЧЕНИЕ
В данной работе рассматривается проблема пространственного моделирования струйных течений и неустойчивостей Рэлея - Тейлора, а также проблема моделирования высокоскоростного удара. В качестве численных методов решения предлагается два различных, но наиболее подходящих для каждого класса задач метода: метод CIP и метод ИНЧ. Обосновывается их выбор.
Для метода ИНЧ впервые приводится его трехмерный вариант.
В результате численного моделирования неустойчивостей Рэлея-Тейлора обнаружено образование аксиально-симметричных структур, предложена интерпретация данного процесса.
При моделировании струйных течений получены качественные картины процессов образования головных вихрей и жгутов вокруг них, -потери аксиальной симметрии. Объяснен механизм ускорения до сверхзвукового дозвуковой струи в поле тяготения.
Решена задача высокоскоростного пробивания в трехмерной постановке.
1. Ландау J1.Д., ЛифшицЕ.М. Теоретическая физика: Учеб. пособие. В 10 т. Т. IV, Гидродинамика - 3 изд. М.: Наука, 1986. - 736 с.
2. Самарский А.А. Ведение в теорию разностных схем. М.: Наука, 1971.-552 с.
3. Самарский А.Ю., Попов Ю.П. Разностные методы решения задач газовой динамики: Учеб. пособие. 3-е изд., доп. - М.: Наука. 1992. -442 с
4. Белоцерковский О.М., Давыдов Ю.М. Метод крупных частиц в газовой динамике. М.: Наука, 1982. - 392с.
5. Теоретические основы и конструирование численных алгоритмов задач математической физики. М.: Наука, 1979. - 296с.
6. Вычислительные методы в гидродинамике. М.: Мир, 1967. - 384с.
7. Роуч П. Вычислительная гидродинамика. М.: Мир, 1980. - 616с.
8. Golub V.V. // Shock Waves, 1994, V. 3. P. 279-285.
9. Yabe Т., Ishikawa Т., Wang P.Y. A Universal Solver for Hyperbolic Equations by Cubic-Polinomial Interpolation II. Two- and Tree-Dimensional Solvers // Computer Physics Communications. № 66.1991. P. 233-242.
10. Yabe Т., Aoki T. A universal solver for hyperbolic equations by cubic-polynomial interpolation II Comput. Phys. Cornmuns., 1991, V. 66. P. 219 -226.
11. Иванов М.Ф., Опарин A.M., Султанов В.Г., Фортов B.E. Некоторые особенности развития Релей-Тейлоровских неустойчивостей в трехмерной геометрии. //ДАН, Физика, 1999, Т. 367, № 4, С. 464-467.
12. Харлоу Ф.Х. Численный метод частиц в ячейках для задач гидродинамики. // Вычислительные методы в гидродинамике. М.: Мир, 1967.
13. Marder B.M. GAP a PIC-type fluid code. // Math, of comput.,1975, 29, №130.
14. Агурейкин B.A., Крюков Б.П. Метод индивидуальных частиц для расчета течений многокомпонентных сред с большими деформациями. // Численные методы механики сплошной среды, Новосибирск, 1986, Т. 17, №1, С. 17-31.
15. Womble D.E., Dosanjh S.S., Hendrickson В., HerouxM.A., Plimpton S.J., Tomkins J.L., Greenberg D.S. Massively parallel computing: A Sandia perspective. //Parallel Computing, 1999, У. 25, P. 1853-1876.
16. Strohmaier E., Dongarra J.J., Meuer H.W., Simod H.D. The marketplace of high-performance computing. //Parallel Computing. V. 25 (1999), P. 15171544.
17. Meuer H.W. The Mannheim supercomputer statistics 1986-1992, TOP 500 report 1993. University of Mannheim, 1994, P. 1-15.
18. Clemens-August Thole, Klaus Stuben. Industrial simulation on parallel computing. // Parallel Computing. V.25 (1999), P. 2015-2037.
19. PickeringS., Snook I.K. A parallel molecular dynamic algorithms for the MasPar supercomputer. // Computer Physic Communications. V. 105 (1998), P. 200-210.
20. ASCI overview web site: http://www.sandia.gov/ASCI
21. HockneyR.W., JesshopeC. Parallel Computers П: Architecture, Programming and Algorithms. Adam Hilger, Bristol, UK.
22. DongaraJJ., Meuer H.W., Strohmaier S. TOP500. // http://www.TOP500.org
23. DongaraJ.J., Bunch J.R., MolerC.B. and Stewart G.W. Unpack Users' Guide. // SIAM, Philadelphia, PA, 1979.
24. Cameron I.G. The current code status in modeling shock physics problem. //Химическая физика, Т. 19 (2000), № 2, С. 3-14.
25. Thompson J.F. A survey of dynamically-adaptive grids in the numerical solution of partial differential equations// AIAA-84-1606, AIAA Fluid and Plasma Dynamics Conference, Snowmass, Colorado, 1984.
26. EisemanP.R. Grid generation for fluid mechanics computations// Annual Review of Fluid Mechanics.-1985.-Vol. 17.
27. BergerM.J., ColellaP. Local adaptive mesh refinement for shock hydrodynamics//J. Comput. Phys.-1989.-82(l).-pp.64-84.
28. BergerM.J., OligerJ. Adaptive mesh refinement for hyperbolic partial differential equations//J. Comput. Phys.- V. 53 (1984).-pp.484-512.
29. Hatakeyama M., Watanabe M., Suzuki T. Object oriented Fluid-Flow simulation system. II Computers & Fluids V. 27 (1998), P 581-597.
30. Wingate C. Progress in Smooth Particle Hydrodynamics. International workshop of New Models and Numerical Codes, Oxford 1997, P. 491.
31. Yabe Т., Hoshino H., Tsuchiya Т. Two- and three-dimensional behavior of Rayleigh-Taylor and Kelvin-Helmholtz instabilities// Physical review A.-1991.-Vol.44(4).-pp.275-277.
32. Султанов В.Г., Берзигияров П.К. Параллельная реализация С1Р-метода для моделирования релей-тейлоровских гидродинамических неустойчивостей. // Вестник МГУ, серия 15, Вычислительная математика и кибернетика. 2001
33. Snir М., Otto S. W., Huss-Lederman S., Walker D., and Dongarra J. MPI: The Complete Reference. MIT Press. Boston, 1996.
34. Dongarra J., Otto S. W., Snir M., and Walker D. An Introduction to the MPI Standard. Technical report CS-95-274. University of Tennessee, January 1995.
35. Бебб P., Мак-Гроу Дж., Акселрод Т. и др. Программирование на параллельных вычислительных системах: Пер. с англ. под ред. Р. Бебба II. М.:Мир, 1991.
36. Foster I. Designing and Building Parallel Programs. Addison-Wesley, 95.
37. Бебб Р., Мак-Гроу Дж., Акселрод Т. и др. Программирование на параллельных вычислительных системах: Пер. с англ. под ред. Р. Бебба II. М.:Мир, 1991.
38. Иногамов Н.А., Опарин. А.М. О трехмерных сетчатых структурах, связанных с неустойчивостями Рихтмаера-Мешкова и Рэлей-Тейлора. // ЖЕТФ, 1999, Т. 116, вып. 3(9), С. 908-939
39. Li X.L. // Phys. Fluids, 1996. V. 8, № 2. P. 336-343
40. Анисимов С.И., Лукьянчик Б.С., Лучес А. // ЖЭТФ. 1995. Т. 108. № 1. С. 240-257.
41. Norman M.L., SmarrL.L., Winker К.-Н.А. // Physic D. 1984. V. 12., P. 83-106.
42. Windnell S.E., Bliss D.B., Tsai C.-Y. // J. Fluid Mech. 1974. V. 66. Part 1. P.35.
43. Гинзбург И.Я. Редактор трехмерных сцен на основе системы Open Visualization Data Explorer. // Труды Всероссийской научной конференции «Высокопроизводительные вычисления и их приложения», Издательство Московского Университета. С.92-96, октябрь 2000
44. Гинзбург И .Я., Султанов В.Г. Проблемы визуализации 3-х мерных гидродинамических расчетов. // Труды Всероссийской научной конференции «Высокопроизводительные вычисления и их приложения», Издательство Московского Университета. С.96-100, октябрь 2000
45. Bose A., Carey G.F. A class of data structures and object-oriented implementation for finite element methods on distributed memory system. //Comput. Methods Appl. Mech. Engrg. V. 171 (1999), P. 109-121.
46. CurTime = 0.0; TimeEnd = TIMEEND; T = 0.1; X =Y =Z = 0.005;if (myid == 0){
47. ArrayForSave = (pGLArray) malloc(sizeof(double)*(maxX+3)*mY*mZ);
48. ArrayForSaveShortFormat = (pGLShortArray) malloc(sizeof(float)*(maxX+3)*mY*mZ); }
49. P = (pGLArray) malloc(sizeof(double)*mX*mY*mZ);
50. Rx1.Q.k] = 0.0; Ry[i]D][k] = 0.0; Rz[i][j][k] = 0.0;
51. U1.DKk. = 0; UNewi][j][k] = 0; V[i]D][4 = 0; VNew[i][j][k] = 0; W[i]D][k] = 0; WNew[i][j][k] = 0;
52. Ux1.j.[k] = 0; Uy[i]D][k] = 0; Uz[i]U][k] = 0; llxNew[i][)][k] = 0; UyNew[i][)][k] = 0; UzNew[i][|][k] = 0;
53. Vx1.j.[k] = 0; Vy[i]DHk] = 0; Vz[i][j][k] = 0; VxNew[i][j][k] = 0; VyNew[i][j][k] = 0; VzNew[i][j][k] = 0;
54. Wx1.Q.k] = 0; Wy[i]Q][k] = 0; Wz[i][j][k]=0; WxNew[i][j][k] = 0; WyNew[i][j][k] = 0; WzNew[i][j][k] = 0;
55. E1.Dlk. = (P +R1*G*((mX i - 1)*X))/(R1*(GAMMA ■ 1.0)) * LValue*LValue;
56. ENew1.j.[k] = E[i][j][k]; Ex[i][j][k] = 0.0; Ey[i]D][k] = 0.0 Ez[i][j][k] = 0.0else {1. RNew1.j.[k] = R0;1. ROId1.Q.k] =R0;1. R1.U.k] = R0;
57. Rx1.B.4 = 00; Ry[i]WC4 = 0.0; Rz[i][j][k] = 0.0;
58. U1.j.[k] = 0; UNew[i][j][k] = 0; V[i]0][k] = 0; VNew[i]Q][k] = 0; W[i][j]lk] = 0; WNew[i][j][k] = 0;
59. Ux1.D.k] = 0; Uy[i][j][k] = 0; Uz[i][j][k] = 0; UxNew[i][j][k] = 0; UyNew[i][j][k] = 0; UzNew[i][j][k] = 0;
60. Vx1.j.[k] = 0; Vy[i][j][k] = 0; Vz[i]U][k] = 0; VxNew[i][j][k] = 0; VyNew[i][j][k] = 0; VzNew[i][j][k] = 0;
61. Wx1.j.[k] = 0; Wy[i]Dl[k] = 0; Wz[i][j][k] = 0; WxNew[i][|][k] = 0; WyNew[i][|][k] = 0; WzNew[i][|][k] = 0;
62. E1.i.[k] = (P +R1* G*((mX mBOUND - 1)* X) + G*(R1 + R0)/2.0\X
63. G*RO*((mBOUND -1) i)*X)/( RO*(GAMMA - 1.0)) * LValue'LValue;
64. ENew1.j.[k] = E[i][j][k]; Ex[i][j][k]= 0.0; Ey[i]H][k]= 0.0; Ez[i][j][k]= 0.0;pi = 3.14159265359;
65. Ellipse.Options = elOverwrite; Ell ipse. Y = YCenter; Ellipse.Z = ZCenter; Ellipse.a = YRadius; Ellipse.b =ZRadius; Ellipse.alpha = 0.0;
66. BuildEllipse(U, mBOUND , Ellipse, U * LValue); BuildEllipse(U, mBOUND -1 , Ellipse, U * LValue);
67. Ellipse.Options = eINoOptions;
68. BuildEllipse(R, mBOUND -1 , Ellipse, R1);
69. GlobalWrite(FileNameForSave, R, (myid == numprocs -1)? mX : mX-3); strcpy(FileNameForSave, FileName); strcat(FileNameForSave, "Rx");
70. GlobalWrite(FileNameForSave, Rx, (myid == numprocs -1)? mX : mX-3); strcpy(FileNameForSave, FileName); slrcai(FileNameForSave, "Ry");
71. GlobalWrite(FileNameForSave, Ry, (myid == numprocs -1)? mX : mX-3); strcpy(FileNameForSave, FileName); strcat(FileNameForSave, "Rz");
72. GiobalWrite(FileNameForSave, Rz, (myid == numprocs -1)? mX : mX-3);strcpy(FileNameForSave, FileName); strcat(FileNameForSave, "E");
73. GlobalWrite(FileNameForSave, E, (myid == numprocs -1)? mX : mX-3);strcpy(FileNameForSave, FileName); strcat(FileNameForSave, "Ex");
74. GlobalWrite(FileNameForSave, Ex, (myid == numprocs -1)? mX : mX-3); strcpy(FileNameForSave, FileName); strcat(FileNameForSave, "Ey");
75. GlobalWrite(FileNameForSave, Ey, (myid == numprocs -1)? mX : mX-3); strcpy(FileNameForSave, FileName); strcat(FileNameForSave, "Ez");
76. GlobalWrite(FiieNameForSave, Ez, (myid == numprocs -1)? mX : mX-3);strcpy(FileNameForSave, FileName); strcat(FileNameForSave, "U");
77. GlobalWrite(FileNameForSave, U, (myid == numprocs -1)? mX : mX-3); strcpy(FileNameForSave, FileName); strcat(FileNameForSave, "Ux");
78. GlobalWrite(FileNameForSave, Ux, (myid == numprocs -1)? mX : mX-3); strcpy(FileNameForSave, FileName); strcat(FileNameForSave, "Uy");
79. GiobalWrite(FileNameForSave, Uy, (myid == numprocs -1)? mX: mX-3); strcpy(FileNameForSave, FileName); strcat(FileNameForSave, "Uz");
80. GlobalWrite(FileNameForSave, Uz, (myid == numprocs -1)? mX: mX-3);strcpy(FiieNameForSave, FileName); strcat(FileNameForSave, "V");
81. GlobalWrite(FileNameForSave, V, (myid == numprocs -1)? mX: mX-3); strcpy(FileNameForSave, FileName); strcat(FileNameForSave, "Vx");
82. GlobalWrite(FileNameForSave, Vx, (myid == numprocs -1)? mX: mX-3); strcpy(FileNameForSave, FileName); strcat(FileNameForSave, "Vy");
83. GlobalWrite(FileNameForSave, Vy, (myid = numprocs -1)? mX: mX-3); strcpy(FileNameForSave, FileName); strcat(FileNameForSave, "Vz");
84. GlobalWrite(FileNameForSave, Vz, (myid == numprocs -1)? mX: mX-3);strcpy(FileNameForSave, FileName); strcat(FileNameForSave, "W");
85. GlobalWrite(FileNameForSave, W, (myid == numprocs -1)? mX : mX-3); strcpy(FileNameForSave, FileName); strcat(FileNameForSave, "Wx");
86. GlobalWrite(FileNameForSave, Wx, (myid == numprocs -1)? mX: mX-3); strcpy(FileNameForSave, FileName); strcat(FileNameForSave, "Wy");
87. GlobaiWrite(FileNameForSave, Wy, (myid == numprocs -1)? mX: mX-3); strcpy(FileNameForSave, FileName); strcat(FileNameForSave, "Wz");
88. GlobalRead(FileNameForSave, R, (myid == numprocs -1)? mX: mX-3); strcpy(FileNameForSave, FileName);strcat(FileNameForSave, "Rx");
89. GlobalRead(FileNameForSave, Rx, (myid == numprocs -1)? mX : mX-3); strcpy(FileNameForSave, FileName); strcat(FileNameForSave, "Ry");
90. GlobalRead(FileNameForSave, Ry, (myid = numprocs -1)? mX: mX-3); strcpy(FileNameForSave, FileName); strcat(FileNameForSave, "Rz");
91. GlobalRead(FileNameForSave, Rz, (myid == numprocs -1)? mX: mX-3);strcpy(FileNameForSave, FileName); strcat(FileNameForSave, "E");
92. GlobalRead(FileNameForSave, E, (myid == numprocs -1)? mX: mX-3); strcpy(FileNameForSave, FileName); strcat(FiieNameForSave, "Ex");
93. GiobalRead(FileNameForSave, Ex, (myid == numprocs -1)? mX: mX-3); strcpy(FileNameForSave, FileName); strcat(FileNameForSave, "Ey");
94. GlobalRead(FileNameForSave, Ey, (myid == numprocs -1)? mX: mX-3); strcpy(FileNameForSave, FileName); strcat(FiieNameForSave, "Ez");
95. Global Read(FileNameForSave, Ez, (myid == numprocs -1)? mX: mX-3);strcpy(FileNameForSave, FileName); strcat(FileNameForSave, "U");
96. GlobalRead(FileNameForSave, U, (myid == numprocs -1)? mX: mX-3); strcpy(FileNameForSave, FileName); strcat(FileNameForSave, "Ux");
97. GlobalRead(FileNameForSave, Ux, (myid == numprocs -1)? mX: mX-3); strcpy(FileNameForSave, FileName); strcat(FileNameForSave, "Uy");
98. GlobalRead(FileNameForSave, Uy, (myid == numprocs -1)? mX: mX-3); strcpy(FileNameForSave, FileName); strcat(FileNameForSave, "Uz");
99. GlobaiRead(FiieNameForSave, Uz, (myid == numprocs -1)? mX: mX-3);strcpy(FileNameForSave, FileName); strcat(FileNameForSave, "V");
100. GlobalRead(FileNameForSave, V, (myid == numprocs -1)? mX : mX-3); strcpy(FileNameForSave, FileName); strcat(FileNameForSave, "Vx");
101. Global Read(FiieNameForSave, Vx, (myid == numprocs 1)? mX: mX-3); strcpy(FiieNameForSave, FileName); strcat(FileNameForSave, "Vy");
102. GlobalRead(FiieNameForSave, Vy, (myid == numprocs 1)? mX: mX-3); strcpy(FileNameForSave, FileName); strcat(FileNameForSave, "Vz");
103. GlobalRead(FileNameForSave, Vz, (myid == numprocs 1)? mX : mX-3);strcpy(FileNameForSave, FileName); strcat(FileNameForSave, "W");
104. GlobalRead(FileNameForSave, W, (myid == numprocs -1)? mX: mX-3); strcpy(FiieNameForSave, FileName); strcat(FileNameForSave, "Wx");
105. GlobaiRead(FileNameForSave, Wx, (myid == numprocs -1)? mX: mX-3); strcpy(FileNameForSave, FileName); strcat(FileNameForSave, "Wy");
106. GlobaiRead(FileNameForSave, Wy, (myid == numprocs -1)? mX: mX-3); strcpy(FileNameForSave, FileName); strcat(FileNameForSave, "Wz");
107. NewPosJ = OldPosJ*cos(Ellipse.alpha) OldPosK*sin(Ellipse.alpha); NewPosK = OldPosJ*sin(Ellipse.alpha) + OldPosK*cos(Ellipse.alpha);
108. Radius = sqrt(NewPosJ*NewPosJ/(Ellipse.a*Eliipse.a) +NewPosK*NewPosK/(Ellipse.b*Ellipse.b)); if (Radius < 1.0){ switch (Ellipse.Options){ case elOverwrite:
109. FPoint-startX.[j][k] = Value*cos(pi/2.0*Radius); break; case elAppend:if (fabs(FPoint-startX.[j][k]) < fabs(Value*cos(pi/2.0*Radius))){ F[Point-startX][j][k] = Value*cos(pi/2.0*Radius);break; case eINoOptions:
110. FPoint-startX.[j][k] = Value; break;
111. Л-----------------------------------------------------7void RandomMixing(pGLArray F, int Point, double Value) {int i,j;double CurAmp; EllipseConf Ellipse; double pi = 3.14159265359;srand(0);for(i = 0; i < maxX; i += 10) for(j = 0; j < mY; j += 10){
112. CurAmp = (R1 -R0)*(((double) rand())/RANDMAX) + R0;
113. Ellipse.Options = elAppend;
114. RecvBound(F,FI); SendBound(F,FI);void SendRecv3(pGLArray Fx, pGLArray Fy, pGLArray Fz, int FI) I* FI == 0 if F is R, E; else FI1 7 {if (myid % 2 == 0){ SendBound3(Fx, Fy, Fz, FI); RecvBound3(Fx, Fy, Fz, FI); } else{
115. ToSendQ.k] = F[mX-3][j][k];
116. MPI Send(ToSend, mY*mZ, MPLDOUBLE, myid + 1, msgtagRIGHTBOUND,1. MPICOMMWORLD); }f* посылаем левую границу 7if (myid > 0){ for(j=0;j<mY;j++) for(k=0;k<mZ;k++){ ToSendj.[k] = F[1+FI][j][k];
117. MPI Send(ToSend3,3*mY*mZ, MPLDOUBLE, myid + 1, msgtag RIGHT BOUND,1. MPICOMMWORLD); }
118. Г посылаем левую границу*/ if (myid > 0){ for(j=0;j<mY;j++) for(k=0;k<mZ;k++){ ToSend30.[j][k] = Fx[1+FI][j][k]; ToSend31.[j][k] = Fy[1 +Fi]Q][k]; ToSend3[2][j][k] = Fz[1+FI][j][k];
119. MPISend(ToSend3, 3*mY*mZ, MPLDOUBLE, myid -1, msgtagLEFTBOUND,1. MPICOMMWORLD); }--------------------------------------------------------*ivoid RecvBound(pGLArray F, int Fl)/* Fl == 0 if F is R, E; else Fl == 1 */int j, k;1. MPLStatus status;
120. Г получаем данные (левый -> 0) (правый -> mX) */1. получаем левую границу (правая граница процесса myid-1) */ if (myid > 0){
121. MPIRecv(ToReceive, mY*mZ, MPIDOUBLE, myid -1, msgtagRIGHTBOUND, MPI COMM WORLD, &status);for(j=0;j<mY;j++) for(k=0; k<mZ; k++){
122. F0.D][k] = ToReceive[j][k];
123. MPIRecv(ToReceive, mY*mZ, MPLDOUBLE, myid + 1, msgtagLEFTBOUND, MPICOMMWORLD, &status);for(j=0;j<mY;j++) for(k=0;k<mZ;k++){ FmX-2 + Fl.[j][k] = ToReceive[j][k];