Трехмерное численное моделирование высокоэнергетических импульсных процессов
Диссертация
Существует достаточно большое число областей деятельности человека, в которых численное моделирование, если не заменяет полностью дорогостоящие натурные эксперименты: профилирование корпусов машин, самолетов- «краш» тестывзрывные эксперименты, то значительно удешевляет их. Но есть целый ряд проблем, — защита от микрометеоритов, астероидная опасность, — проведение натурных экспериментов в которых… Читать ещё >
Список литературы
- Ландау J1.Д., ЛифшицЕ.М. Теоретическая физика: Учеб. пособие. В 10 т. Т. IV, Гидродинамика — 3 изд. М.: Наука, 1986. — 736 с.
- Самарский А.А. Ведение в теорию разностных схем. М.: Наука, 1971.-552 с.
- Самарский А.Ю., Попов Ю. П. Разностные методы решения задач газовой динамики: Учеб. пособие. 3-е изд., доп. — М.: Наука. 1992. -442 с
- Белоцерковский О.М., Давыдов Ю. М. Метод крупных частиц в газовой динамике. М.: Наука, 1982. — 392с.
- Теоретические основы и конструирование численных алгоритмов задач математической физики. М.: Наука, 1979. — 296с.
- Вычислительные методы в гидродинамике. М.: Мир, 1967. — 384с.
- Роуч П. Вычислительная гидродинамика. М.: Мир, 1980. — 616с.
- Golub V.V. // Shock Waves, 1994, V. 3. P. 279−285.
- 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.
- Yabe Т., Aoki T. A universal solver for hyperbolic equations by cubic-polynomial interpolation II Comput. Phys. Cornmuns., 1991, V. 66. P. 219 -226.
- Иванов М.Ф., Опарин A.M., Султанов В. Г., Фортов B.E. Некоторые особенности развития Релей-Тейлоровских неустойчивостей в трехмерной геометрии. //ДАН, Физика, 1999, Т. 367, № 4, С. 464−467.
- Харлоу Ф.Х. Численный метод частиц в ячейках для задач гидродинамики. // Вычислительные методы в гидродинамике. М.: Мир, 1967.
- Marder B.M. GAP a PIC-type fluid code. // Math, of comput., 1975, 29, № 130.
- Агурейкин B.A., Крюков Б. П. Метод индивидуальных частиц для расчета течений многокомпонентных сред с большими деформациями. // Численные методы механики сплошной среды, Новосибирск, 1986, Т. 17, № 1, С. 17−31.
- 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.
- Strohmaier E., Dongarra J.J., Meuer H.W., Simod H.D. The marketplace of high-performance computing. //Parallel Computing. V. 25 (1999), P. 15 171 544.
- Meuer H.W. The Mannheim supercomputer statistics 1986−1992, TOP 500 report 1993. University of Mannheim, 1994, P. 1−15.
- Clemens-August Thole, Klaus Stuben. Industrial simulation on parallel computing. // Parallel Computing. V.25 (1999), P. 2015−2037.
- PickeringS., Snook I.K. A parallel molecular dynamic algorithms for the MasPar supercomputer. // Computer Physic Communications. V. 105 (1998), P. 200−210.
- ASCI overview web site: http://www.sandia.gov/ASCI
- HockneyR.W., JesshopeC. Parallel Computers П: Architecture, Programming and Algorithms. Adam Hilger, Bristol, UK.
- DongaraJJ., Meuer H.W., Strohmaier S. TOP500. // http://www.TOP500.org
- DongaraJ.J., Bunch J.R., MolerC.B. and Stewart G.W. Unpack Users' Guide. // SIAM, Philadelphia, PA, 1979.
- Cameron I.G. The current code status in modeling shock physics problem. //Химическая физика, Т. 19 (2000), № 2, С. 3−14.
- 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.
- EisemanP.R. Grid generation for fluid mechanics computations// Annual Review of Fluid Mechanics.-1985.-Vol. 17.
- BergerM.J., ColellaP. Local adaptive mesh refinement for shock hydrodynamics//J. Comput. Phys.-1989.-82(l).-pp.64−84.
- BergerM.J., OligerJ. Adaptive mesh refinement for hyperbolic partial differential equations//J. Comput. Phys.- V. 53 (1984).-pp.484−512.
- Hatakeyama M., Watanabe M., Suzuki T. Object oriented Fluid-Flow simulation system. II Computers & Fluids V. 27 (1998), P 581−597.
- Wingate C. Progress in Smooth Particle Hydrodynamics. International workshop of New Models and Numerical Codes, Oxford 1997, P. 491.
- 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.
- Султанов В.Г., Берзигияров П. К. Параллельная реализация С1Р-метода для моделирования релей-тейлоровских гидродинамических неустойчивостей. // Вестник МГУ, серия 15, Вычислительная математика и кибернетика. 2001
- Snir М., Otto S. W., Huss-Lederman S., Walker D., and Dongarra J. MPI: The Complete Reference. MIT Press. Boston, 1996.
- 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.
- Бебб P., Мак-Гроу Дж., Акселрод Т. и др. Программирование на параллельных вычислительных системах: Пер. с англ. под ред. Р. Бебба II. М.:Мир, 1991.
- Foster I. Designing and Building Parallel Programs. Addison-Wesley, 95.
- Бебб Р., Мак-Гроу Дж., Акселрод Т. и др. Программирование на параллельных вычислительных системах: Пер. с англ. под ред. Р. Бебба II. М.:Мир, 1991.
- Иногамов Н.А., Опарин. А.М. О трехмерных сетчатых структурах, связанных с неустойчивостями Рихтмаера-Мешкова и Рэлей-Тейлора. // ЖЕТФ, 1999, Т. 116, вып. 3(9), С. 908−939
- Li X.L. // Phys. Fluids, 1996. V. 8, № 2. P. 336−343
- Анисимов С.И., Лукьянчик Б. С., Лучес А. // ЖЭТФ. 1995. Т. 108. № 1. С. 240−257.
- Norman M.L., SmarrL.L., Winker К.-Н.А. // Physic D. 1984. V. 12., P. 83−106.
- Windnell S.E., Bliss D.B., Tsai C.-Y. // J. Fluid Mech. 1974. V. 66. Part 1. P.35.
- Гинзбург И.Я. Редактор трехмерных сцен на основе системы Open Visualization Data Explorer. // Труды Всероссийской научной конференции «Высокопроизводительные вычисления и их приложения», Издательство Московского Университета. С.92−96, октябрь 2000
- Гинзбург И .Я., Султанов В. Г. Проблемы визуализации 3-х мерных гидродинамических расчетов. // Труды Всероссийской научной конференции «Высокопроизводительные вычисления и их приложения», Издательство Московского Университета. С.96−100, октябрь 2000
- 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.
- CurTime = 0.0- TimeEnd = TIMEEND- T = 0.1- X =Y =Z = 0.005-if (myid == 0){
- ArrayForSave = (pGLArray) malloc (sizeof (double)*(maxX+3)*mY*mZ) —
- ArrayForSaveShortFormat = (pGLShortArray) malloc (sizeof (float)*(maxX+3)*mY*mZ) — }
- P = (pGLArray) malloc (sizeof (double)*mX*mY*mZ) —
- Rx1.Q.k] = 0.0- Ry[i]D][k] = 0.0- Rz[i][j][k] = 0.0-
- 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-
- 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-
- 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-
- 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-
- E1.Dlk. = (P +R1*G*((mX i — 1)*X))/(R1*(GAMMA ¦ 1.0)) * LValue*LValue-
- 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-
- Rx1.B.4 = 00- Ry[i]WC4 = 0.0- Rz[i][j][k] = 0.0-
- 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-
- 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-
- 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-
- 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-
- E1.i. k] = (P +R1* G*((mX mBOUND — 1)* X) + G*(R1 + R0)/2.0X
- G*RO*((mBOUND -1) i)*X)/(RO*(GAMMA — 1.0)) * LValue’LValue-
- 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.14 159 265 359-
- Ellipse.Options = elOverwrite- Ell ipse. Y = YCenter- Ellipse. Z = ZCenter- Ellipse. a = YRadius- Ellipse. b =ZRadius- Ellipse. alpha = 0.0-
- BuildEllipse (U, mBOUND, Ellipse, U * LValue) — BuildEllipse (U, mBOUND -1, Ellipse, U * LValue) —
- Ellipse.Options = eINoOptions-
- BuildEllipse (R, mBOUND -1, Ellipse, R1) —
- GlobalWrite (FileNameForSave, R, (myid == numprocs -1)? mX: mX-3) — strcpy (FileNameForSave, FileName) — strcat (FileNameForSave, «Rx») —
- GlobalWrite (FileNameForSave, Rx, (myid == numprocs -1)? mX: mX-3) — strcpy (FileNameForSave, FileName) — slrcai (FileNameForSave, «Ry») —
- GlobalWrite (FileNameForSave, Ry, (myid == numprocs -1)? mX: mX-3) — strcpy (FileNameForSave, FileName) — strcat (FileNameForSave, «Rz») —
- GiobalWrite (FileNameForSave, Rz, (myid == numprocs -1)? mX: mX-3)-strcpy (FileNameForSave, FileName) — strcat (FileNameForSave, «E») —
- GlobalWrite (FileNameForSave, E, (myid == numprocs -1)? mX: mX-3)-strcpy (FileNameForSave, FileName) — strcat (FileNameForSave, «Ex») —
- GlobalWrite (FileNameForSave, Ex, (myid == numprocs -1)? mX: mX-3) — strcpy (FileNameForSave, FileName) — strcat (FileNameForSave, «Ey») —
- GlobalWrite (FileNameForSave, Ey, (myid == numprocs -1)? mX: mX-3) — strcpy (FileNameForSave, FileName) — strcat (FileNameForSave, «Ez») —
- GlobalWrite (FiieNameForSave, Ez, (myid == numprocs -1)? mX: mX-3)-strcpy (FileNameForSave, FileName) — strcat (FileNameForSave, «U») —
- GlobalWrite (FileNameForSave, U, (myid == numprocs -1)? mX: mX-3) — strcpy (FileNameForSave, FileName) — strcat (FileNameForSave, «Ux») —
- GlobalWrite (FileNameForSave, Ux, (myid == numprocs -1)? mX: mX-3) — strcpy (FileNameForSave, FileName) — strcat (FileNameForSave, «Uy») —
- GiobalWrite (FileNameForSave, Uy, (myid == numprocs -1)? mX: mX-3) — strcpy (FileNameForSave, FileName) — strcat (FileNameForSave, «Uz») —
- GlobalWrite (FileNameForSave, Uz, (myid == numprocs -1)? mX: mX-3)-strcpy (FiieNameForSave, FileName) — strcat (FileNameForSave, «V») —
- GlobalWrite (FileNameForSave, V, (myid == numprocs -1)? mX: mX-3) — strcpy (FileNameForSave, FileName) — strcat (FileNameForSave, «Vx») —
- GlobalWrite (FileNameForSave, Vx, (myid == numprocs -1)? mX: mX-3) — strcpy (FileNameForSave, FileName) — strcat (FileNameForSave, «Vy») —
- GlobalWrite (FileNameForSave, Vy, (myid = numprocs -1)? mX: mX-3) — strcpy (FileNameForSave, FileName) — strcat (FileNameForSave, «Vz») —
- GlobalWrite (FileNameForSave, Vz, (myid == numprocs -1)? mX: mX-3)-strcpy (FileNameForSave, FileName) — strcat (FileNameForSave, «W») —
- GlobalWrite (FileNameForSave, W, (myid == numprocs -1)? mX: mX-3) — strcpy (FileNameForSave, FileName) — strcat (FileNameForSave, «Wx») —
- GlobalWrite (FileNameForSave, Wx, (myid == numprocs -1)? mX: mX-3) — strcpy (FileNameForSave, FileName) — strcat (FileNameForSave, «Wy») —
- GlobaiWrite (FileNameForSave, Wy, (myid == numprocs -1)? mX: mX-3) — strcpy (FileNameForSave, FileName) — strcat (FileNameForSave, «Wz») —
- GlobalRead (FileNameForSave, R, (myid == numprocs -1)? mX: mX-3) — strcpy (FileNameForSave, FileName)-strcat (FileNameForSave, «Rx») —
- GlobalRead (FileNameForSave, Rx, (myid == numprocs -1)? mX: mX-3) — strcpy (FileNameForSave, FileName) — strcat (FileNameForSave, «Ry») —
- GlobalRead (FileNameForSave, Ry, (myid = numprocs -1)? mX: mX-3) — strcpy (FileNameForSave, FileName) — strcat (FileNameForSave, «Rz») —
- GlobalRead (FileNameForSave, Rz, (myid == numprocs -1)? mX: mX-3)-strcpy (FileNameForSave, FileName) — strcat (FileNameForSave, «E») —
- GlobalRead (FileNameForSave, E, (myid == numprocs -1)? mX: mX-3) — strcpy (FileNameForSave, FileName) — strcat (FiieNameForSave, «Ex») —
- GiobalRead (FileNameForSave, Ex, (myid == numprocs -1)? mX: mX-3) — strcpy (FileNameForSave, FileName) — strcat (FileNameForSave, «Ey») —
- GlobalRead (FileNameForSave, Ey, (myid == numprocs -1)? mX: mX-3) — strcpy (FileNameForSave, FileName) — strcat (FiieNameForSave, «Ez») —
- Global Read (FileNameForSave, Ez, (myid == numprocs -1)? mX: mX-3)-strcpy (FileNameForSave, FileName) — strcat (FileNameForSave, «U») —
- GlobalRead (FileNameForSave, U, (myid == numprocs -1)? mX: mX-3) — strcpy (FileNameForSave, FileName) — strcat (FileNameForSave, «Ux») —
- GlobalRead (FileNameForSave, Ux, (myid == numprocs -1)? mX: mX-3) — strcpy (FileNameForSave, FileName) — strcat (FileNameForSave, «Uy») —
- GlobalRead (FileNameForSave, Uy, (myid == numprocs -1)? mX: mX-3) — strcpy (FileNameForSave, FileName) — strcat (FileNameForSave, «Uz») —
- GlobaiRead (FiieNameForSave, Uz, (myid == numprocs -1)? mX: mX-3)-strcpy (FileNameForSave, FileName) — strcat (FileNameForSave, «V») —
- GlobalRead (FileNameForSave, V, (myid == numprocs -1)? mX: mX-3) — strcpy (FileNameForSave, FileName) — strcat (FileNameForSave, «Vx») —
- Global Read (FiieNameForSave, Vx, (myid == numprocs 1)? mX: mX-3) — strcpy (FiieNameForSave, FileName) — strcat (FileNameForSave, «Vy») —
- GlobalRead (FiieNameForSave, Vy, (myid == numprocs 1)? mX: mX-3) — strcpy (FileNameForSave, FileName) — strcat (FileNameForSave, «Vz») —
- GlobalRead (FileNameForSave, Vz, (myid == numprocs 1)? mX: mX-3)-strcpy (FileNameForSave, FileName) — strcat (FileNameForSave, «W») —
- GlobalRead (FileNameForSave, W, (myid == numprocs -1)? mX: mX-3) — strcpy (FiieNameForSave, FileName) — strcat (FileNameForSave, «Wx») —
- GlobaiRead (FileNameForSave, Wx, (myid == numprocs -1)? mX: mX-3) — strcpy (FileNameForSave, FileName) — strcat (FileNameForSave, «Wy») —
- GlobaiRead (FileNameForSave, Wy, (myid == numprocs -1)? mX: mX-3) — strcpy (FileNameForSave, FileName) — strcat (FileNameForSave, «Wz») —
- NewPosJ = OldPosJ*cos (Ellipse.alpha) OldPosK*sin (Ellipse.alpha) — NewPosK = OldPosJ*sin (Ellipse.alpha) + OldPosK*cos (Ellipse.alpha) —
- Radius = sqrt (NewPosJ*NewPosJ/(Ellipse.a*Eliipse.a) +NewPosK*NewPosK/(Ellipse.b*Ellipse.b)) — if (Radius < 1.0){ switch (Ellipse.Options){ case elOverwrite:
- 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:
- FPoint-startX. j][k] = Value- break-
- Л-----------------------------------------------------7void RandomMixing (pGLArray F, int Point, double Value) {int i, j-double CurAmp- EllipseConf Ellipse- double pi = 3.14 159 265 359-srand (0)-for (i = 0- i < maxX- i += 10) for (j = 0- j < mY- j += 10){
- CurAmp = (R1 -R0)*(((double) rand ())/RANDMAX) + R0-
- Ellipse.Options = elAppend-
- 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{
- ToSendQ.k] = F[mX-3][j][k]-
- MPI Send (ToSend, mY*mZ, MPLDOUBLE, myid + 1, msgtagRIGHTBOUND, 1. MPICOMMWORLD) — }f* посылаем левую границу 7if (myid > 0){ for (j=0-j
- MPI Send (ToSend3,3*mY*mZ, MPLDOUBLE, myid + 1, msgtag RIGHT BOUND, 1. MPICOMMWORLD) — }
- Г посылаем левую границу*/ if (myid > 0){ for (j=0-j
- 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-
- Г получаем данные (левый → 0) (правый → mX) */1. получаем левую границу (правая граница процесса myid-1) */ if (myid > 0){
- MPIRecv (ToReceive, mY*mZ, MPIDOUBLE, myid -1, msgtagRIGHTBOUND, MPI COMM WORLD, &status)-for (j=0-j
- F0.D][k] = ToReceive[j][k]-
- MPIRecv (ToReceive, mY*mZ, MPLDOUBLE, myid + 1, msgtagLEFTBOUND, MPICOMMWORLD, &status)-for (j=0-j