28 amrex::Print() <<
"Writing checkpoint " << checkpointname <<
"\n";
30 const int nlevels = finest_level+1;
38 amrex::PreBuildDirectorHierarchy(checkpointname,
"Level_", nlevels,
true);
41 if (ParallelDescriptor::IOProcessor()) {
43 std::string HeaderFileName(checkpointname +
"/Header");
44 VisMF::IO_Buffer io_buffer(VisMF::IO_Buffer_Size);
45 std::ofstream HeaderFile;
46 HeaderFile.rdbuf()->pubsetbuf(io_buffer.dataPtr(), io_buffer.size());
47 HeaderFile.open(HeaderFileName.c_str(), std::ofstream::out |
48 std::ofstream::trunc |
49 std::ofstream::binary);
50 if( ! HeaderFile.good()) {
51 amrex::FileOpenFailed(HeaderFileName);
54 HeaderFile.precision(17);
57 HeaderFile <<
"Checkpoint file for REMORA\n";
60 HeaderFile << finest_level <<
"\n";
66 HeaderFile <<
NCONS <<
"\n";
69 HeaderFile << 1 <<
"\n";
72 HeaderFile << 1 <<
"\n";
75 HeaderFile << 1 <<
"\n";
77 HeaderFile << 2 <<
"\n";
79 HeaderFile << 2 <<
"\n";
81 HeaderFile << 3 <<
"\n";
83 HeaderFile << 3 <<
"\n";
86 for (
int i = 0; i <
istep.size(); ++i) {
87 HeaderFile <<
istep[i] <<
" ";
92 for (
int i = 0; i <
dt.size(); ++i) {
93 HeaderFile <<
dt[i] <<
" ";
98 for (
int i = 0; i <
t_new.size(); ++i) {
99 HeaderFile <<
t_new[i] <<
" ";
104 for (
int lev = 0; lev <= finest_level; ++lev) {
105 boxArray(lev).writeOn(HeaderFile);
112 for (
int lev = 0; lev <= finest_level; ++lev)
114 BoxList bl2d = grids[lev].boxList();
115 for (
auto& b : bl2d) {
118 BoxArray ba2d(std::move(bl2d));
120 MultiFab cons(grids[lev],dmap[lev],
NCONS,
cons_new[lev]->nGrowVect());
122 VisMF::Write(cons, amrex::MultiFabFileFullPrefix(lev, checkpointname,
"Level_",
"Cell"));
125 VisMF::Write(cons, amrex::MultiFabFileFullPrefix(lev, checkpointname,
"Level_",
"Cell_old"));
127 MultiFab xvel(convert(grids[lev],IntVect(1,0,0)),dmap[lev],1,
xvel_new[lev]->nGrowVect());
129 VisMF::Write(xvel, amrex::MultiFabFileFullPrefix(lev, checkpointname,
"Level_",
"XFace"));
132 VisMF::Write(xvel, amrex::MultiFabFileFullPrefix(lev, checkpointname,
"Level_",
"XFace_old"));
134 MultiFab yvel(convert(grids[lev],IntVect(0,1,0)),dmap[lev],1,
yvel_new[lev]->nGrowVect());
136 VisMF::Write(yvel, amrex::MultiFabFileFullPrefix(lev, checkpointname,
"Level_",
"YFace"));
139 VisMF::Write(yvel, amrex::MultiFabFileFullPrefix(lev, checkpointname,
"Level_",
"YFace_old"));
141 MultiFab zvel(convert(grids[lev],IntVect(0,0,1)),dmap[lev],1,
zvel_new[lev]->nGrowVect());
143 VisMF::Write(zvel, amrex::MultiFabFileFullPrefix(lev, checkpointname,
"Level_",
"ZFace"));
146 VisMF::Write(zvel, amrex::MultiFabFileFullPrefix(lev, checkpointname,
"Level_",
"ZFace_old"));
148 MultiFab mf_ru(convert(grids[lev],IntVect(1,0,0)),dmap[lev],2,(
vec_ru[lev])->nGrowVect());
149 MultiFab::Copy(mf_ru,*
vec_ru[lev],0,0,2,(
vec_ru[lev])->nGrowVect());
150 VisMF::Write(mf_ru, amrex::MultiFabFileFullPrefix(lev, checkpointname,
"Level_",
"XRHS"));
152 MultiFab mf_rv(convert(grids[lev],IntVect(0,1,0)),dmap[lev],2,(
vec_rv[lev])->nGrowVect());
153 MultiFab::Copy(mf_rv,*
vec_rv[lev],0,0,2,(
vec_rv[lev])->nGrowVect());
154 VisMF::Write(mf_rv, amrex::MultiFabFileFullPrefix(lev, checkpointname,
"Level_",
"YRHS"));
156 MultiFab mf_ubar(convert(ba2d,IntVect(1,0,0)),dmap[lev],3,(
vec_ubar[lev])->nGrowVect());
157 MultiFab::Copy(mf_ubar,*(
vec_ubar[lev]),0,0,3,(
vec_ubar[lev])->nGrowVect());
158 VisMF::Write(mf_ubar, amrex::MultiFabFileFullPrefix(lev, checkpointname,
"Level_",
"XBar"));
160 MultiFab mf_vbar(convert(ba2d,IntVect(0,1,0)),dmap[lev],3,(
vec_vbar[lev])->nGrowVect());
161 MultiFab::Copy(mf_vbar,*(
vec_vbar[lev]),0,0,3,(
vec_vbar[lev])->nGrowVect());
162 VisMF::Write(mf_vbar, amrex::MultiFabFileFullPrefix(lev, checkpointname,
"Level_",
"YBar"));
164 MultiFab mf_ru2d(convert(ba2d,IntVect(1,0,0)),dmap[lev],2,(
vec_ru2d[lev])->nGrowVect());
165 MultiFab::Copy(mf_ru2d,*(
vec_ru2d[lev]),0,0,2,(
vec_ru2d[lev])->nGrowVect());
166 VisMF::Write(mf_ru2d, amrex::MultiFabFileFullPrefix(lev, checkpointname,
"Level_",
"XRHS2d"));
168 MultiFab mf_rv2d(convert(ba2d,IntVect(0,1,0)),dmap[lev],2,(
vec_rv2d[lev])->nGrowVect());
169 MultiFab::Copy(mf_rv2d,*(
vec_rv2d[lev]),0,0,2,(
vec_rv2d[lev])->nGrowVect());
170 VisMF::Write(mf_rv2d, amrex::MultiFabFileFullPrefix(lev, checkpointname,
"Level_",
"YRHS2d"));
172 MultiFab mf_mskr(ba2d,dmap[lev],1,(
vec_mskr[lev])->nGrowVect());
173 MultiFab::Copy(mf_mskr,*(
vec_mskr[lev]),0,0,1,(
vec_mskr[lev])->nGrowVect());
174 VisMF::Write(mf_mskr, amrex::MultiFabFileFullPrefix(lev, checkpointname,
"Level_",
"Mskr"));
176 MultiFab mf_msku(convert(ba2d,IntVect(1,0,0)),dmap[lev],1,(
vec_msku[lev])->nGrowVect());
177 MultiFab::Copy(mf_msku,*(
vec_msku[lev]),0,0,1,(
vec_msku[lev])->nGrowVect());
178 VisMF::Write(mf_msku, amrex::MultiFabFileFullPrefix(lev, checkpointname,
"Level_",
"Msku"));
180 MultiFab mf_mskv(convert(ba2d,IntVect(0,1,0)),dmap[lev],1,(
vec_mskv[lev])->nGrowVect());
181 MultiFab::Copy(mf_mskv,*(
vec_mskv[lev]),0,0,1,(
vec_mskv[lev])->nGrowVect());
182 VisMF::Write(mf_mskv, amrex::MultiFabFileFullPrefix(lev, checkpointname,
"Level_",
"Mskv"));
185 VisMF::Write(*(
vec_rdrag[lev]), amrex::MultiFabFileFullPrefix(lev, checkpointname,
"Level_",
"rdrag"));
187 VisMF::Write(*(
vec_rdrag2[lev]), amrex::MultiFabFileFullPrefix(lev, checkpointname,
"Level_",
"rdrag2"));
192 VisMF::Write(*(
vec_ZoBot[lev]), amrex::MultiFabFileFullPrefix(lev, checkpointname,
"Level_",
"ZoBot"));
195 VisMF::Write(*(
vec_DU_avg1[lev]), amrex::MultiFabFileFullPrefix(lev, checkpointname,
"Level_",
"DU_avg1"));
196 VisMF::Write(*(
vec_DU_avg2[lev]), amrex::MultiFabFileFullPrefix(lev, checkpointname,
"Level_",
"DU_avg2"));
197 VisMF::Write(*(
vec_DV_avg1[lev]), amrex::MultiFabFileFullPrefix(lev, checkpointname,
"Level_",
"DV_avg1"));
198 VisMF::Write(*(
vec_DV_avg2[lev]), amrex::MultiFabFileFullPrefix(lev, checkpointname,
"Level_",
"DV_avg2"));
200 VisMF::Write(*(
vec_zeta[lev]), amrex::MultiFabFileFullPrefix(lev, checkpointname,
"Level_",
"zeta"));
201 VisMF::Write(*(
vec_Zt_avg1[lev]), amrex::MultiFabFileFullPrefix(lev, checkpointname,
"Level_",
"Zt_avg1"));
203 VisMF::Write(*(
vec_hOfTheConfusingName[lev]), amrex::MultiFabFileFullPrefix(lev, checkpointname,
"Level_",
"h"));
205 VisMF::Write(*(
vec_tke[lev]), amrex::MultiFabFileFullPrefix(lev, checkpointname,
"Level_",
"tke"));
206 VisMF::Write(*(
vec_gls[lev]), amrex::MultiFabFileFullPrefix(lev, checkpointname,
"Level_",
"gls"));
207 VisMF::Write(*(
vec_Lscale[lev]), amrex::MultiFabFileFullPrefix(lev, checkpointname,
"Level_",
"Lscale"));
208 VisMF::Write(*(
vec_Akk[lev]), amrex::MultiFabFileFullPrefix(lev, checkpointname,
"Level_",
"Akk"));
209 VisMF::Write(*(
vec_Akp[lev]), amrex::MultiFabFileFullPrefix(lev, checkpointname,
"Level_",
"Akp"));
210 VisMF::Write(*(
vec_Akv[lev]), amrex::MultiFabFileFullPrefix(lev, checkpointname,
"Level_",
"Akv"));
211 VisMF::Write(*(
vec_Akt[lev]), amrex::MultiFabFileFullPrefix(lev, checkpointname,
"Level_",
"Akt"));
214#ifdef REMORA_USE_PARTICLES
215 particleData.Checkpoint(checkpointname);
218#ifdef REMORA_USE_NETCDF
228 std::ofstream bdy_h_file(amrex::MultiFabFileFullPrefix(0, checkpointname,
"Level_",
"bdy_H"));
229 bdy_h_file << std::setprecision(1) << std::fixed;
230 bdy_h_file << num_time <<
"\n";
231 bdy_h_file << num_var <<
"\n";
234 for (
int ivar(0); ivar<num_var; ++ivar) {
242 std::ofstream bdy_d_file(amrex::MultiFabFileFullPrefix(0, checkpointname,
"Level_",
"bdy_D"));
243 for (
int itime(0); itime<num_time; ++itime) {
244 for (
int ivar(0); ivar<num_var; ++ivar) {
258 amrex::Print() <<
"Restart from checkpoint " <<
restart_chkfile <<
"\n";
263 VisMF::IO_Buffer io_buffer(VisMF::GetIOBufferSize());
265 Vector<char> fileCharPtr;
266 ParallelDescriptor::ReadAndBcastFile(File, fileCharPtr);
267 std::string fileCharPtrString(fileCharPtr.dataPtr());
268 std::istringstream is(fileCharPtrString, std::istringstream::in);
270 std::string line, word;
275 std::getline(is, line);
287 AMREX_ASSERT(chk_ncomp ==
NCONS);
292 AMREX_ASSERT(chk_ncomp == 1);
297 AMREX_ASSERT(chk_ncomp == 1);
302 AMREX_ASSERT(chk_ncomp == 1);
306 AMREX_ASSERT(chk_ncomp == 2);
310 AMREX_ASSERT(chk_ncomp == 2);
314 AMREX_ASSERT(chk_ncomp == 3);
318 AMREX_ASSERT(chk_ncomp == 3);
321 std::getline(is, line);
323 std::istringstream lis(line);
325 while (lis >> word) {
326 istep[i++] = std::stoi(word);
331 std::getline(is, line);
333 std::istringstream lis(line);
335 while (lis >> word) {
336#ifdef AMREX_USE_FLOAT
337 dt[i++] = std::stof(word);
339 dt[i++] = std::stod(word);
345 std::getline(is, line);
347 std::istringstream lis(line);
349 while (lis >> word) {
350#ifdef AMREX_USE_FLOAT
351 t_new[i++] = std::stof(word);
353 t_new[i++] = std::stod(word);
358 for (
int lev = 0; lev <= finest_level; ++lev) {
366 DistributionMapping dm { ba, ParallelDescriptor::NProcs() };
372 for (
int lev = 0; lev <= finest_level; ++lev)
374 BoxList bl2d = grids[lev].boxList();
375 for (
auto& b : bl2d) {
378 BoxArray ba2d(std::move(bl2d));
380 MultiFab cons(grids[lev],dmap[lev],
NCONS,
cons_new[lev]->nGrowVect());
381 VisMF::Read(cons, amrex::MultiFabFileFullPrefix(lev,
restart_chkfile,
"Level_",
"Cell"));
384 VisMF::Read(cons, amrex::MultiFabFileFullPrefix(lev,
restart_chkfile,
"Level_",
"Cell_old"));
387 MultiFab xvel(convert(grids[lev],IntVect(1,0,0)),dmap[lev],1,
xvel_new[lev]->nGrowVect());
388 VisMF::Read(xvel, amrex::MultiFabFileFullPrefix(lev,
restart_chkfile,
"Level_",
"XFace"));
391 VisMF::Read(xvel, amrex::MultiFabFileFullPrefix(lev,
restart_chkfile,
"Level_",
"XFace_old"));
394 MultiFab yvel(convert(grids[lev],IntVect(0,1,0)),dmap[lev],1,
yvel_new[lev]->nGrowVect());
395 VisMF::Read(yvel, amrex::MultiFabFileFullPrefix(lev,
restart_chkfile,
"Level_",
"YFace"));
398 VisMF::Read(yvel, amrex::MultiFabFileFullPrefix(lev,
restart_chkfile,
"Level_",
"YFace_old"));
401 MultiFab zvel(convert(grids[lev],IntVect(0,0,1)),dmap[lev],1,
zvel_new[lev]->nGrowVect());
402 VisMF::Read(zvel, amrex::MultiFabFileFullPrefix(lev,
restart_chkfile,
"Level_",
"ZFace"));
405 VisMF::Read(zvel, amrex::MultiFabFileFullPrefix(lev,
restart_chkfile,
"Level_",
"ZFace_old"));
408 MultiFab mf_ru(convert(grids[lev],IntVect(1,0,0)),dmap[lev],2,(
vec_ru[lev])->nGrowVect());
409 VisMF::Read(mf_ru, amrex::MultiFabFileFullPrefix(lev,
restart_chkfile,
"Level_",
"XRHS"));
410 MultiFab::Copy(*(
vec_ru[lev]),mf_ru,0,0,2,(
vec_ru[lev])->nGrowVect());
412 MultiFab mf_rv(convert(grids[lev],IntVect(0,1,0)),dmap[lev],2,(
vec_rv[lev])->nGrowVect());
413 VisMF::Read(mf_rv, amrex::MultiFabFileFullPrefix(lev,
restart_chkfile,
"Level_",
"YRHS"));
414 MultiFab::Copy(*(
vec_rv[lev]),mf_rv,0,0,2,(
vec_rv[lev])->nGrowVect());
416 MultiFab mf_ubar(convert(ba2d,IntVect(1,0,0)),dmap[lev],3,(
vec_ubar[lev])->nGrowVect());
417 VisMF::Read(mf_ubar, amrex::MultiFabFileFullPrefix(lev,
restart_chkfile,
"Level_",
"XBar"));
418 MultiFab::Copy(*(
vec_ubar[lev]),mf_ubar,0,0,3,(
vec_ubar[lev])->nGrowVect());
420 MultiFab mf_vbar(convert(ba2d,IntVect(0,1,0)),dmap[lev],3,(
vec_vbar[lev])->nGrowVect());
421 VisMF::Read(mf_vbar, amrex::MultiFabFileFullPrefix(lev,
restart_chkfile,
"Level_",
"YBar"));
422 MultiFab::Copy(*(
vec_vbar[lev]),mf_vbar,0,0,3,(
vec_vbar[lev])->nGrowVect());
424 MultiFab mf_ru2d(convert(ba2d,IntVect(1,0,0)),dmap[lev],2,(
vec_ru2d[lev])->nGrowVect());
425 VisMF::Read(mf_ru2d, amrex::MultiFabFileFullPrefix(lev,
restart_chkfile,
"Level_",
"XRHS2d"));
426 MultiFab::Copy(*(
vec_ru2d[lev]),mf_ru2d,0,0,2,(
vec_ru2d[lev])->nGrowVect());
428 MultiFab mf_rv2d(convert(ba2d,IntVect(0,1,0)),dmap[lev],2,(
vec_rv2d[lev])->nGrowVect());
429 VisMF::Read(mf_rv2d, amrex::MultiFabFileFullPrefix(lev,
restart_chkfile,
"Level_",
"YRHS2d"));
430 MultiFab::Copy(*(
vec_rv2d[lev]),mf_rv2d,0,0,2,(
vec_rv2d[lev])->nGrowVect());
432 MultiFab mf_mskr(ba2d,dmap[lev],1,(
vec_mskr[lev])->nGrowVect());
433 VisMF::Read(mf_mskr, amrex::MultiFabFileFullPrefix(lev,
restart_chkfile,
"Level_",
"Mskr"));
434 MultiFab::Copy(*(
vec_mskr[lev]),mf_mskr,0,0,1,(
vec_mskr[lev])->nGrowVect());
436 MultiFab mf_msku(convert(ba2d,IntVect(1,0,0)),dmap[lev],1,(
vec_msku[lev])->nGrowVect());
437 VisMF::Read(mf_msku, amrex::MultiFabFileFullPrefix(lev,
restart_chkfile,
"Level_",
"Msku"));
438 MultiFab::Copy(*(
vec_msku[lev]),mf_msku,0,0,1,(
vec_msku[lev])->nGrowVect());
440 MultiFab mf_mskv(convert(ba2d,IntVect(0,1,0)),dmap[lev],1,(
vec_mskv[lev])->nGrowVect());
441 VisMF::Read(mf_mskv, amrex::MultiFabFileFullPrefix(lev,
restart_chkfile,
"Level_",
"Mskv"));
442 MultiFab::Copy(*(
vec_mskv[lev]),mf_mskv,0,0,1,(
vec_mskv[lev])->nGrowVect());
477#ifdef REMORA_USE_PARTICLES
481#ifdef REMORA_USE_NETCDF
485 int ioproc = ParallelDescriptor::IOProcessorNumber();
489 if (ParallelDescriptor::IOProcessor()) {
491 std::ifstream bdy_h_file(amrex::MultiFabFileFullPrefix(0,
restart_chkfile,
"Level_",
"bdy_H"));
492 bdy_h_file >> num_time;
493 bdy_h_file >> num_var;
496 bx_v.resize(4*num_var);
497 for (
int ivar(0); ivar<num_var; ++ivar) {
498 bdy_h_file >> bx_v[4*ivar ];
499 bdy_h_file >> bx_v[4*ivar+1];
500 bdy_h_file >> bx_v[4*ivar+2];
501 bdy_h_file >> bx_v[4*ivar+3];
509 for (
int itime(0); itime<num_time; ++itime) {
514 for (
int ivar(0); ivar<num_var; ++ivar) {
523 std::ifstream bdy_d_file(amrex::MultiFabFileFullPrefix(0,
restart_chkfile,
"Level_",
"bdy_D"));
524 for (
int itime(0); itime<num_time; ++itime) {
525 for (
int ivar(0); ivar<num_var; ++ivar) {
535 ParallelDescriptor::Barrier();
538 ParallelDescriptor::Bcast(&num_time,1,ioproc);
539 ParallelDescriptor::Bcast(&num_var,1,ioproc);
542 bx_v.resize(4*num_var);
544 ParallelDescriptor::Bcast(bx_v.dataPtr(),bx_v.size(),ioproc);
547 if (!ParallelDescriptor::IOProcessor()) {
552 for (
int itime(0); itime<num_time; ++itime) {
557 for (
int ivar(0); ivar<num_var; ++ivar) {
566 for (
int itime(0); itime<num_time; ++itime) {
567 for (
int ivar(0); ivar<num_var; ++ivar) {