278 bool enable_mem_free =
false;
280 auto get_optional_free_mem = [&](
auto &bind_to,
auto &add_to) {
281 if (enable_mem_free) {
283 node.set_edges(bind_to);
284 add_to.push_back(std::make_shared<
decltype(node)>(std::move(node)));
289 storage.ghost_layout = std::make_shared<shamrock::patch::PatchDataLayerLayout>();
293 ghost_layout.
add_field<TgridVec>(
"cell_min", 1);
294 ghost_layout.
add_field<TgridVec>(
"cell_max", 1);
295 ghost_layout.
add_field<Tscal>(
"rho", AMRBlock::block_size);
296 ghost_layout.
add_field<Tscal>(
"rhoetot", AMRBlock::block_size);
297 ghost_layout.
add_field<Tvec>(
"rhovel", AMRBlock::block_size);
299 if (solver_config.is_dust_on()) {
300 auto ndust = solver_config.dust_config.ndust;
301 ghost_layout.
add_field<Tscal>(
"rho_dust", ndust * AMRBlock::block_size);
302 ghost_layout.
add_field<Tvec>(
"rhovel_dust", ndust * AMRBlock::block_size);
305 if (solver_config.is_gravity_on()) {
306 ghost_layout.
add_field<Tscal>(
"phi", AMRBlock::block_size);
309 if (solver_config.is_gas_passive_scalar_on()) {
310 u32 npscal_gas = solver_config.npscal_gas_config.npscal_gas;
311 ghost_layout.
add_field<Tscal>(
"rho_gas_pscal", npscal_gas * AMRBlock::block_size);
319 using namespace shamrock::solvergraph;
326 "global_patch_boxes",
332 edge.
patch_tree = std::ref(storage.serial_patch_tree.get());
338 storage.local_patch_ids
339 = std::make_shared<shamrock::solvergraph::IDataEdge<std::vector<u64>>>(
"",
"");
342 = std::make_shared<shamrock::solvergraph::ScalarEdge<shammath::AABB<TgridVec>>>(
343 "sim_box",
"sim_box");
345 storage.exchange_gz_edge = std::make_shared<shamrock::solvergraph::PatchDataLayerDDShared>(
346 "exchange_gz_edge",
"exchange_gz_edge");
348 storage.idx_in_ghost = std::make_shared<shamrock::solvergraph::DDSharedBuffers<u32>>(
349 "idx_in_ghost",
"idx_in_ghost");
351 storage.ghost_layers_candidates_edge = std::make_shared<
353 "ghost_layers_candidates",
"ghost_layers_candidates");
355 storage.patch_rank_owner = std::make_shared<shamrock::solvergraph::RankGetter>(
356 [&](
u64 patch_id) ->
u32 {
357 return scheduler().get_patch_rank_owner(patch_id);
362 storage.source_patches = std::make_shared<shamrock::solvergraph::PatchDataLayerRefs>(
363 "source_patches",
"P_{\\rm source}");
365 storage.merged_patchdata_ghost = std::make_shared<shamrock::solvergraph::PatchDataLayerEdge>(
366 "merged_patchdata_ghost",
"patchdata_{\\rm ghost}", storage.ghost_layout);
369 = std::make_shared<shamrock::solvergraph::Indexes<u32>>(
"block_count",
"N_{\\rm block}");
371 storage.block_counts_with_ghost = std::make_shared<shamrock::solvergraph::Indexes<u32>>(
372 "block_count_with_ghost",
"N_{\\rm block, with ghost}");
375 storage.refs_block_min = std::make_shared<shamrock::solvergraph::FieldRefs<TgridVec>>(
376 "block_min",
"\\mathbf{r}_{\\rm block, min}");
377 storage.refs_block_max = std::make_shared<shamrock::solvergraph::FieldRefs<TgridVec>>(
378 "block_max",
"\\mathbf{r}_{\\rm block, max}");
380 storage.refs_rho = std::make_shared<shamrock::solvergraph::FieldRefs<Tscal>>(
"rho",
"\\rho");
382 = std::make_shared<shamrock::solvergraph::FieldRefs<Tvec>>(
"rhovel",
"(\\rho \\mathbf{v})");
384 = std::make_shared<shamrock::solvergraph::FieldRefs<Tscal>>(
"rhoetot",
"(\\rho E)");
386 if (solver_config.is_dust_on()) {
387 storage.refs_rho_dust = std::make_shared<shamrock::solvergraph::FieldRefs<Tscal>>(
388 "rho_dust",
"\\rho_{\\rm dust}");
389 storage.refs_rhov_dust = std::make_shared<shamrock::solvergraph::FieldRefs<Tvec>>(
390 "rhovel_dust",
"(\\rho_{\\rm dust} \\mathbf{v}_{\\rm dust})");
394 storage.vel = std::make_shared<shamrock::solvergraph::Field<Tvec>>(
395 AMRBlock::block_size,
"vel",
"\\mathbf{v}");
397 = std::make_shared<shamrock::solvergraph::Field<Tscal>>(AMRBlock::block_size,
"P",
"P");
399 if (!solver_config.amr_mode.old_amr) {
400 storage.rho_primitive = std::make_shared<shamrock::solvergraph::Field<Tscal>>(
401 AMRBlock::block_size,
"rho-prim",
"rho-prim");
406 if (std::get_if<AMRmode_None>(&solver_config.amr_mode.config) ==
nullptr) {
407 storage.rho_snap = std::make_shared<shamrock::solvergraph::Field<Tscal>>(
408 AMRBlock::block_size,
"rho_snap",
"rho_snap");
409 storage.rhoe_snap = std::make_shared<shamrock::solvergraph::Field<Tscal>>(
410 AMRBlock::block_size,
"rhoe_snap",
"rhoe_snap");
411 storage.rho_vel_snap = std::make_shared<shamrock::solvergraph::Field<Tvec>>(
412 AMRBlock::block_size,
"rhov_snap",
"rhov_snap");
415 if (solver_config.is_dust_on()) {
416 u32 ndust = solver_config.dust_config.ndust;
419 storage.vel_dust = std::make_shared<shamrock::solvergraph::Field<Tvec>>(
420 AMRBlock::block_size * ndust,
"vel_dust",
"{\\mathbf{v}_{\\rm dust}}");
424 = std::make_shared<solvergraph::TreeEdge<u_morton, TgridVec>>(
"trees",
"\\text{trees}");
426 storage.block_graph_edge = std::make_shared<
428 "block_graph_edge",
"\\text{block graph edge}");
430 storage.cell_graph_edge = std::make_shared<
432 "cell_graph_edge",
"\\text{cell graph edge}");
435 storage.block_cell_sizes = std::make_shared<shamrock::solvergraph::Field<Tscal>>(
436 1,
"block_cell_sizes",
"s_{\\rm cell}");
437 storage.cell0block_aabb_lower = std::make_shared<shamrock::solvergraph::Field<Tvec>>(
438 1,
"cell0block_aabb_lower",
"\\mathbf{s}_{\\rm inf,block}");
440 if (solver_config.is_coordinate_field_required()) {
442 storage.coordinates = std::make_shared<shamrock::solvergraph::Field<Tvec>>(
443 AMRBlock::block_size,
"coordinates",
"\\mathbf{xyz}");
446 if (solver_config.amr_mode.need_level_zero_compute()) {
448 storage.level0_size = std::make_shared<shamrock::solvergraph::ScalarsEdge<TgridVec>>(
449 "level0_amr",
"level0_amr");
452 if (solver_config.amr_mode.need_amr_level_compute()) {
453 using TgridUint =
typename std::make_unsigned<shambase::VecComponent<TgridVec>>::type;
454 storage.amr_block_levels
455 = std::make_shared<shamrock::solvergraph::Field<TgridUint>>(1,
"",
"");
458 storage.grad_rho = std::make_shared<shamrock::solvergraph::Field<Tvec>>(
459 AMRBlock::block_size,
"grad_rho",
"\\nabla \\rho");
460 storage.dx_v = std::make_shared<shamrock::solvergraph::Field<Tvec>>(
461 AMRBlock::block_size,
"dx_v",
"\\nabla_x \\mathbf{v}");
462 storage.dy_v = std::make_shared<shamrock::solvergraph::Field<Tvec>>(
463 AMRBlock::block_size,
"dy_v",
"\\nabla_y \\mathbf{v}");
464 storage.dz_v = std::make_shared<shamrock::solvergraph::Field<Tvec>>(
465 AMRBlock::block_size,
"dz_v",
"\\nabla_z \\mathbf{v}");
466 storage.grad_P = std::make_shared<shamrock::solvergraph::Field<Tvec>>(
467 AMRBlock::block_size,
"grad_P",
"\\nabla P");
470 storage.euler_dt_rho = std::make_shared<shamrock::solvergraph::Field<Tscal>>(
471 AMRBlock::block_size,
"euler_dt_rho",
"\\partial_t \\rho");
472 storage.euler_dt_vel = std::make_shared<shamrock::solvergraph::Field<Tvec>>(
473 AMRBlock::block_size,
"euler_dt_vel",
"\\partial_t \\mathbf{v}");
474 storage.euler_dt_press = std::make_shared<shamrock::solvergraph::Field<Tscal>>(
475 AMRBlock::block_size,
"euler_dt_press",
"\\partial_t P");
477 if (solver_config.is_dust_on()) {
478 u32 ndust = solver_config.dust_config.ndust;
479 storage.grad_rho_dust = std::make_shared<shamrock::solvergraph::Field<Tvec>>(
480 AMRBlock::block_size * ndust,
"grad_rho_dust",
"\\nabla \\rho_{\\rm dust}");
481 storage.dx_v_dust = std::make_shared<shamrock::solvergraph::Field<Tvec>>(
482 AMRBlock::block_size * ndust,
"dx_v_dust",
"\\nabla_x \\mathbf{v}_{\\rm dust}");
483 storage.dy_v_dust = std::make_shared<shamrock::solvergraph::Field<Tvec>>(
484 AMRBlock::block_size * ndust,
"dy_v_dust",
"\\nabla_y \\mathbf{v}_{\\rm dust}");
485 storage.dz_v_dust = std::make_shared<shamrock::solvergraph::Field<Tvec>>(
486 AMRBlock::block_size * ndust,
"dz_v_dust",
"\\nabla_z \\mathbf{v}_{\\rm dust}");
489 storage.euler_dt_rho_dust = std::make_shared<shamrock::solvergraph::Field<Tscal>>(
490 AMRBlock::block_size * ndust,
"euler_dt_rho_dust",
"\\partial_t \\rho_{\\rm dust}");
491 storage.euler_dt_vel_dust = std::make_shared<shamrock::solvergraph::Field<Tvec>>(
492 AMRBlock::block_size * ndust,
494 "\\partial_t \\mathbf{v}_{\\rm dust}");
500 = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<std::array<Tscal, 2>>>(
501 "rho_face_xp",
"rho_face_xp", 1);
503 = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<std::array<Tscal, 2>>>(
504 "rho_face_xm",
"rho_face_xm", 1);
506 = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<std::array<Tscal, 2>>>(
507 "rho_face_yp",
"rho_face_yp", 1);
509 = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<std::array<Tscal, 2>>>(
510 "rho_face_ym",
"rho_face_ym", 1);
512 = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<std::array<Tscal, 2>>>(
513 "rho_face_zp",
"rho_face_zp", 1);
515 = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<std::array<Tscal, 2>>>(
516 "rho_face_zm",
"rho_face_zm", 1);
519 = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<std::array<Tvec, 2>>>(
520 "vel_face_xp",
"vel_face_xp", 1);
522 = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<std::array<Tvec, 2>>>(
523 "vel_face_xm",
"vel_face_xm", 1);
525 = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<std::array<Tvec, 2>>>(
526 "vel_face_yp",
"vel_face_yp", 1);
528 = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<std::array<Tvec, 2>>>(
529 "vel_face_ym",
"vel_face_ym", 1);
531 = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<std::array<Tvec, 2>>>(
532 "vel_face_zp",
"vel_face_zp", 1);
534 = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<std::array<Tvec, 2>>>(
535 "vel_face_zm",
"vel_face_zm", 1);
537 storage.press_face_xp
538 = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<std::array<Tscal, 2>>>(
539 "press_face_xp",
"press_face_xp", 1);
540 storage.press_face_xm
541 = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<std::array<Tscal, 2>>>(
542 "press_face_xm",
"press_face_xm", 1);
543 storage.press_face_yp
544 = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<std::array<Tscal, 2>>>(
545 "press_face_yp",
"press_face_yp", 1);
546 storage.press_face_ym
547 = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<std::array<Tscal, 2>>>(
548 "press_face_ym",
"press_face_ym", 1);
549 storage.press_face_zp
550 = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<std::array<Tscal, 2>>>(
551 "press_face_zp",
"press_face_zp", 1);
552 storage.press_face_zm
553 = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<std::array<Tscal, 2>>>(
554 "press_face_zm",
"press_face_zm", 1);
557 if (solver_config.is_dust_on()) {
558 u32 ndust = solver_config.dust_config.ndust;
560 storage.rho_dust_face_xp
561 = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<std::array<Tscal, 2>>>(
562 "rho_dust_face_xp",
"rho_dust_face_xp", ndust);
563 storage.rho_dust_face_xm
564 = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<std::array<Tscal, 2>>>(
565 "rho_dust_face_xm",
"rho_dust_face_xm", ndust);
566 storage.rho_dust_face_yp
567 = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<std::array<Tscal, 2>>>(
568 "rho_dust_face_yp",
"rho_dust_face_yp", ndust);
569 storage.rho_dust_face_ym
570 = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<std::array<Tscal, 2>>>(
571 "rho_dust_face_ym",
"rho_dust_face_ym", ndust);
572 storage.rho_dust_face_zp
573 = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<std::array<Tscal, 2>>>(
574 "rho_dust_face_zp",
"rho_dust_face_zp", ndust);
575 storage.rho_dust_face_zm
576 = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<std::array<Tscal, 2>>>(
577 "rho_dust_face_zm",
"rho_dust_face_zm", ndust);
579 storage.vel_dust_face_xp
580 = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<std::array<Tvec, 2>>>(
581 "vel_dust_face_xp",
"vel_dust_face_xp", ndust);
582 storage.vel_dust_face_xm
583 = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<std::array<Tvec, 2>>>(
584 "vel_dust_face_xm",
"vel_dust_face_xm", ndust);
585 storage.vel_dust_face_yp
586 = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<std::array<Tvec, 2>>>(
587 "vel_dust_face_yp",
"vel_dust_face_yp", ndust);
588 storage.vel_dust_face_ym
589 = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<std::array<Tvec, 2>>>(
590 "vel_dust_face_ym",
"vel_dust_face_ym", ndust);
591 storage.vel_dust_face_zp
592 = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<std::array<Tvec, 2>>>(
593 "vel_dust_face_zp",
"vel_dust_face_zp", ndust);
594 storage.vel_dust_face_zm
595 = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<std::array<Tvec, 2>>>(
596 "vel_dust_face_zm",
"vel_dust_face_zm", ndust);
599 if (solver_config.should_compute_rho_mean()) {
600 storage.cell_mass = std::make_shared<shamrock::solvergraph::Field<Tscal>>(
601 AMRBlock::block_size,
"cell_mass",
"m");
603 = std::make_shared<shamrock::solvergraph::ScalarEdge<Tscal>>(
"rho_mean",
"< \\rho >");
604 storage.simulation_volume = std::make_shared<shamrock::solvergraph::ScalarEdge<Tscal>>(
605 "simulation_volume",
"V_{\\rm sim}");
609 = std::make_shared<shamrock::solvergraph::ScalarEdge<Tscal>>(
"dt_half",
"dt_{half}");
613 storage.flux_rho_face_xm = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<Tscal>>(
614 "flux_rho_face_xm",
"flux_rho_face_xm", 1);
616 storage.flux_rho_face_xp = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<Tscal>>(
617 "flux_rho_face_xp",
"flux_rho_face_xp", 1);
619 storage.flux_rho_face_ym = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<Tscal>>(
620 "flux_rho_face_ym",
"flux_rho_face_ym", 1);
622 storage.flux_rho_face_yp = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<Tscal>>(
623 "flux_rho_face_yp",
"flux_rho_face_yp", 1);
625 storage.flux_rho_face_zm = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<Tscal>>(
626 "flux_rho_face_zm",
"flux_rho_face_zm", 1);
628 storage.flux_rho_face_zp = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<Tscal>>(
629 "flux_rho_face_zp",
"flux_rho_face_zp", 1);
631 storage.flux_rhov_face_xm = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<Tvec>>(
632 "flux_rhov_face_xm",
"flux_rhov_face_xm", 1);
634 storage.flux_rhov_face_xp = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<Tvec>>(
635 "flux_rhov_face_xp",
"flux_rhov_face_xp", 1);
637 storage.flux_rhov_face_ym = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<Tvec>>(
638 "flux_rhov_face_ym",
"flux_rhov_face_ym", 1);
640 storage.flux_rhov_face_yp = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<Tvec>>(
641 "flux_rhov_face_yp",
"flux_rhov_face_yp", 1);
643 storage.flux_rhov_face_zm = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<Tvec>>(
644 "flux_rhov_face_zm",
"flux_rhov_face_zm", 1);
646 storage.flux_rhov_face_zp = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<Tvec>>(
647 "flux_rhov_face_zp",
"flux_rhov_face_zp", 1);
649 storage.flux_rhoe_face_xm = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<Tscal>>(
650 "flux_rhoe_face_xm",
"flux_rhoe_face_xm", 1);
652 storage.flux_rhoe_face_xp = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<Tscal>>(
653 "flux_rhoe_face_xp",
"flux_rhoe_face_xp", 1);
655 storage.flux_rhoe_face_ym = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<Tscal>>(
656 "flux_rhoe_face_ym",
"flux_rhoe_face_ym", 1);
658 storage.flux_rhoe_face_yp = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<Tscal>>(
659 "flux_rhoe_face_yp",
"flux_rhoe_face_yp", 1);
661 storage.flux_rhoe_face_zm = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<Tscal>>(
662 "flux_rhoe_face_zm",
"flux_rhoe_face_zm", 1);
664 storage.flux_rhoe_face_zp = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<Tscal>>(
665 "flux_rhoe_face_zp",
"flux_rhoe_face_zp", 1);
668 if (solver_config.is_dust_on()) {
669 u32 ndust = solver_config.dust_config.ndust;
671 storage.flux_rho_dust_face_xm
672 = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<Tscal>>(
673 "flux_rho_dust_face_xm",
"flux_rho_dust_face_xm", ndust);
675 storage.flux_rho_dust_face_xp
676 = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<Tscal>>(
677 "flux_rho_dust_face_xp",
"flux_rho_dust_face_xp", ndust);
679 storage.flux_rho_dust_face_ym
680 = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<Tscal>>(
681 "flux_rho_dust_face_ym",
"flux_rho_dust_face_ym", ndust);
683 storage.flux_rho_dust_face_yp
684 = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<Tscal>>(
685 "flux_rho_dust_face_yp",
"flux_rho_dust_face_yp", ndust);
687 storage.flux_rho_dust_face_zm
688 = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<Tscal>>(
689 "flux_rho_dust_face_zm",
"flux_rho_dust_face_zm", ndust);
691 storage.flux_rho_dust_face_zp
692 = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<Tscal>>(
693 "flux_rho_dust_face_zp",
"flux_rho_dust_face_zp", ndust);
695 storage.flux_rhov_dust_face_xm
696 = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<Tvec>>(
697 "flux_rhov_dust_face_xm",
"flux_rhov_dust_face_xm", ndust);
699 storage.flux_rhov_dust_face_xp
700 = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<Tvec>>(
701 "flux_rhov_dust_face_xp",
"flux_rhov_dust_face_xp", ndust);
703 storage.flux_rhov_dust_face_ym
704 = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<Tvec>>(
705 "flux_rhov_dust_face_ym",
"flux_rhov_dust_face_ym", ndust);
707 storage.flux_rhov_dust_face_yp
708 = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<Tvec>>(
709 "flux_rhov_dust_face_yp",
"flux_rhov_dust_face_yp", ndust);
711 storage.flux_rhov_dust_face_zm
712 = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<Tvec>>(
713 "flux_rhov_dust_face_zm",
"flux_rhov_dust_face_zm", ndust);
715 storage.flux_rhov_dust_face_zp
716 = std::make_shared<solvergraph::NeighGraphLinkFieldEdge<Tvec>>(
717 "flux_rhov_dust_face_zp",
"flux_rhov_dust_face_zp", ndust);
720 storage.dtrho = std::make_shared<shamrock::solvergraph::Field<Tscal>>(
721 AMRBlock::block_size,
"dtrho",
"dtrho");
722 storage.dtrhov = std::make_shared<shamrock::solvergraph::Field<Tvec>>(
723 AMRBlock::block_size,
"dtrhov",
"dtrhov");
724 storage.dtrhoe = std::make_shared<shamrock::solvergraph::Field<Tscal>>(
725 AMRBlock::block_size,
"dtrhoe",
"dtrhoe");
727 if (solver_config.is_dust_on()) {
728 u32 ndust = solver_config.dust_config.ndust;
729 storage.dtrho_dust = std::make_shared<shamrock::solvergraph::Field<Tscal>>(
730 AMRBlock::block_size * ndust,
"dtrho_dust",
"dtrho_dust");
731 storage.dtrhov_dust = std::make_shared<shamrock::solvergraph::Field<Tvec>>(
732 AMRBlock::block_size * ndust,
"dtrhov_dust",
"dtrhov_dust");
738 std::vector<std::shared_ptr<shamrock::solvergraph::INode>> solver_sequence;
742 auto cfg_bc_to_geom = [](BCConfig::GhostType ghost_type) {
743 switch (ghost_type) {
744 case BCConfig::GhostType::Periodic :
return modules::GhostType::Periodic;
745 case BCConfig::GhostType::Reflective:
return modules::GhostType::Reflective;
746 case BCConfig::GhostType::Outflow :
return modules::GhostType::Reflective;
749 "Unsupported ghost type: " + std::to_string(
static_cast<int>(ghost_type)));
754 cfg_bc_to_geom(solver_config.bc_config.get_x()),
755 cfg_bc_to_geom(solver_config.bc_config.get_y()),
756 cfg_bc_to_geom(solver_config.bc_config.get_z())};
759 bool transform_vec_x = solver_config.bc_config.get_x() != BCConfig::GhostType::Outflow;
760 bool transform_vec_y = solver_config.bc_config.get_y() != BCConfig::GhostType::Outflow;
761 bool transform_vec_z = solver_config.bc_config.get_z() != BCConfig::GhostType::Outflow;
766 ghost_layer_gen_mode);
767 find_ghost_layer_candidates.set_edges(
768 storage.local_patch_ids,
769 storage.sim_box_edge,
772 storage.ghost_layers_candidates_edge);
773 solver_sequence.push_back(
774 std::make_shared<
decltype(find_ghost_layer_candidates)>(
775 std::move(find_ghost_layer_candidates)));
778 find_ghost_layer_indices.set_edges(
779 storage.sim_box_edge,
780 storage.source_patches,
781 storage.ghost_layers_candidates_edge,
783 storage.idx_in_ghost);
784 solver_sequence.push_back(
785 std::make_shared<
decltype(find_ghost_layer_indices)>(
786 std::move(find_ghost_layer_indices)));
790 std::vector<std::shared_ptr<shamrock::solvergraph::INode>> gz_xchg_sequence;
792 auto &ghost_layout_ptr = storage.ghost_layout;
794 auto copy_fields = std::make_shared<shamrock::solvergraph::CopyPatchDataLayerFields>(
795 scheduler().get_layout_ptr_old(), ghost_layout_ptr);
797 copy_fields->set_edges(storage.source_patches, storage.merged_patchdata_ghost);
798 gz_xchg_sequence.push_back(std::move(copy_fields));
803 = std::make_shared<shammodels::basegodunov::modules::ExtractGhostLayer>(
806 extract_gz_node->set_edges(
807 storage.merged_patchdata_ghost, storage.idx_in_ghost, storage.exchange_gz_edge);
808 gz_xchg_sequence.push_back(std::move(extract_gz_node));
812 auto transform_gz_node = std::make_shared<
814 ghost_layer_gen_mode,
820 transform_gz_node->set_edges(
821 storage.sim_box_edge,
822 storage.ghost_layers_candidates_edge,
823 storage.exchange_gz_edge);
824 gz_xchg_sequence.push_back(std::move(transform_gz_node));
828 auto exchange_gz_node
829 = std::make_shared<shamrock::solvergraph::ExchangeGhostLayer>(ghost_layout_ptr);
830 exchange_gz_node->set_edges(storage.patch_rank_owner, storage.exchange_gz_edge);
831 gz_xchg_sequence.push_back(std::move(exchange_gz_node));
836 = std::make_shared<shammodels::basegodunov::modules::FuseGhostLayer>();
837 fuse_gz_node->set_edges(storage.exchange_gz_edge, storage.merged_patchdata_ghost);
838 gz_xchg_sequence.push_back(std::move(fuse_gz_node));
855 "Ghost zone exchange", std::move(gz_xchg_sequence));
856 solver_sequence.push_back(std::make_shared<
decltype(seq)>(std::move(seq)));
864 extract_counts_node.set_edges(storage.source_patches, storage.block_counts);
865 solver_sequence.push_back(
866 std::make_shared<
decltype(extract_counts_node)>(std::move(extract_counts_node)));
872 extract_counts_node.set_edges(
873 storage.merged_patchdata_ghost, storage.block_counts_with_ghost);
874 solver_sequence.push_back(
875 std::make_shared<
decltype(extract_counts_node)>(std::move(extract_counts_node)));
881 attach_block_min.set_edges(storage.merged_patchdata_ghost, storage.refs_block_min);
882 solver_sequence.push_back(
883 std::make_shared<
decltype(attach_block_min)>(std::move(attach_block_min)));
887 attach_block_max.set_edges(storage.merged_patchdata_ghost, storage.refs_block_max);
888 solver_sequence.push_back(
889 std::make_shared<
decltype(attach_block_max)>(std::move(attach_block_max)));
895 attach_rho.set_edges(storage.merged_patchdata_ghost, storage.refs_rho);
896 solver_sequence.push_back(
897 std::make_shared<
decltype(attach_rho)>(std::move(attach_rho)));
901 attach_rhov.set_edges(storage.merged_patchdata_ghost, storage.refs_rhov);
902 solver_sequence.push_back(
903 std::make_shared<
decltype(attach_rhov)>(std::move(attach_rhov)));
907 storage.ghost_layout,
"rhoetot");
908 attach_rhoe.set_edges(storage.merged_patchdata_ghost, storage.refs_rhoe);
909 solver_sequence.push_back(
910 std::make_shared<
decltype(attach_rhoe)>(std::move(attach_rhoe)));
913 if (solver_config.is_dust_on()) {
916 storage.ghost_layout,
"rho_dust");
917 attach_rho_dust.set_edges(storage.merged_patchdata_ghost, storage.refs_rho_dust);
918 solver_sequence.push_back(
919 std::make_shared<
decltype(attach_rho_dust)>(std::move(attach_rho_dust)));
923 storage.ghost_layout,
"rhovel_dust");
924 attach_rhov_dust.set_edges(storage.merged_patchdata_ghost, storage.refs_rhov_dust);
925 solver_sequence.push_back(
926 std::make_shared<
decltype(attach_rhov_dust)>(std::move(attach_rhov_dust)));
934 storage.block_counts_with_ghost,
935 storage.refs_block_min,
936 storage.refs_block_max,
939 solver_sequence.push_back(std::make_shared<
decltype(node)>(std::move(node)));
943 std::vector<std::shared_ptr<shamrock::solvergraph::INode>> neigh_table_sequence;
947 storage.block_counts_with_ghost,
948 storage.refs_block_min,
949 storage.refs_block_max,
951 storage.block_graph_edge);
956 storage.block_counts_with_ghost,
957 storage.refs_block_min,
958 storage.refs_block_max,
959 storage.block_graph_edge,
960 storage.cell_graph_edge);
963 neigh_table_sequence.push_back(std::make_shared<
decltype(node1)>(std::move(node1)));
964 get_optional_free_mem(storage.trees, neigh_table_sequence);
965 neigh_table_sequence.push_back(std::make_shared<
decltype(node2)>(std::move(node2)));
966 get_optional_free_mem(storage.block_graph_edge, neigh_table_sequence);
969 "Compute neigh table", std::move(neigh_table_sequence));
970 solver_sequence.push_back(std::make_shared<
decltype(seq)>(std::move(seq)));
976 AMRBlock::Nside, solver_config.grid_coord_to_pos_fact};
979 storage.block_counts_with_ghost,
980 storage.refs_block_min,
981 storage.refs_block_max,
982 storage.block_cell_sizes,
983 storage.cell0block_aabb_lower);
984 solver_sequence.push_back(std::make_shared<
decltype(node)>(std::move(node)));
987 if (solver_config.is_coordinate_field_required()) {
990 AMRBlock::block_size,
992 solver_config.grid_coord_to_pos_fact,
995 node_coordinates.set_edges(
996 storage.block_counts,
997 storage.refs_block_min,
998 storage.refs_block_max,
999 storage.coordinates);
1001 solver_sequence.push_back(
1002 std::make_shared<
decltype(node_coordinates)>(std::move(node_coordinates)));
1005 if (solver_config.amr_mode.need_level_zero_compute()) {
1008 node_level0_sizes.set_edges(
1010 storage.source_patches,
1011 storage.level0_size);
1012 solver_sequence.push_back(
1013 std::make_shared<
decltype(node_level0_sizes)>(std::move(node_level0_sizes)));
1016 if (solver_config.amr_mode.need_amr_level_compute()) {
1018 node_amr_level.set_edges(
1019 storage.block_counts,
1020 storage.level0_size,
1021 storage.refs_block_min,
1022 storage.refs_block_max,
1023 storage.amr_block_levels);
1024 solver_sequence.push_back(
1025 std::make_shared<
decltype(node_amr_level)>(std::move(node_amr_level)));
1028 if (solver_config.should_compute_rho_mean()) {
1031 storage.block_counts, storage.block_cell_sizes, storage.refs_rho, storage.cell_mass);
1032 solver_sequence.push_back(std::make_shared<
decltype(node)>(std::move(node)));
1036 storage.block_counts, storage.cell_mass, storage.simulation_volume, storage.rho_mean);
1037 solver_sequence.push_back(std::make_shared<
decltype(node2)>(std::move(node2)));
1041 std::vector<std::shared_ptr<shamrock::solvergraph::INode>> const_to_prim_sequence;
1046 storage.block_counts_with_ghost,
1053 const_to_prim_sequence.push_back(std::make_shared<
decltype(node)>(std::move(node)));
1056 if (solver_config.is_dust_on()) {
1057 u32 ndust = solver_config.dust_config.ndust;
1060 storage.block_counts_with_ghost,
1061 storage.refs_rho_dust,
1062 storage.refs_rhov_dust,
1065 const_to_prim_sequence.push_back(std::make_shared<
decltype(node)>(std::move(node)));
1069 "Cons to Prim", std::move(const_to_prim_sequence));
1070 solver_sequence.push_back(std::make_shared<
decltype(seq)>(std::move(seq)));
1075 std::vector<std::shared_ptr<shamrock::solvergraph::INode>> grad_sequence;
1079 AMRBlock::block_size, 1, solver_config.slope_config};
1081 storage.block_counts_with_ghost,
1082 storage.cell_graph_edge,
1083 storage.block_cell_sizes,
1086 grad_sequence.push_back(std::make_shared<
decltype(node)>(std::move(node)));
1091 AMRBlock::block_size, 1, solver_config.slope_config};
1093 storage.block_counts_with_ghost,
1094 storage.cell_graph_edge,
1095 storage.block_cell_sizes,
1100 grad_sequence.push_back(std::make_shared<
decltype(node)>(std::move(node)));
1104 AMRBlock::block_size, 1, solver_config.slope_config};
1106 storage.block_counts_with_ghost,
1107 storage.cell_graph_edge,
1108 storage.block_cell_sizes,
1111 grad_sequence.push_back(std::make_shared<
decltype(node)>(std::move(node)));
1114 if (solver_config.is_dust_on()) {
1115 u32 ndust = solver_config.dust_config.ndust;
1117 AMRBlock::block_size, ndust, solver_config.slope_config};
1119 storage.block_counts_with_ghost,
1120 storage.cell_graph_edge,
1121 storage.block_cell_sizes,
1122 storage.refs_rho_dust,
1123 storage.grad_rho_dust);
1124 grad_sequence.push_back(std::make_shared<
decltype(node)>(std::move(node)));
1127 AMRBlock::block_size, ndust, solver_config.slope_config};
1129 storage.block_counts_with_ghost,
1130 storage.cell_graph_edge,
1131 storage.block_cell_sizes,
1136 grad_sequence.push_back(std::make_shared<
decltype(node2)>(std::move(node2)));
1140 "Slope limited gradients", std::move(grad_sequence));
1141 solver_sequence.push_back(std::make_shared<
decltype(seq)>(std::move(seq)));
1148 std::vector<std::shared_ptr<shamrock::solvergraph::INode>> dt_prim_sequence;
1152 AMRBlock::block_size, solver_config.eos_gamma};
1154 storage.block_counts_with_ghost,
1163 storage.euler_dt_rho,
1164 storage.euler_dt_vel,
1165 storage.euler_dt_press);
1166 dt_prim_sequence.push_back(std::make_shared<
decltype(node)>(std::move(node)));
1169 if (solver_config.is_dust_on()) {
1170 u32 ndust = solver_config.dust_config.ndust;
1173 storage.block_counts_with_ghost,
1174 storage.refs_rho_dust,
1176 storage.grad_rho_dust,
1180 storage.euler_dt_rho_dust,
1181 storage.euler_dt_vel_dust);
1182 dt_prim_sequence.push_back(std::make_shared<
decltype(node)>(std::move(node)));
1186 "Euler time derivatives", std::move(dt_prim_sequence));
1187 solver_sequence.push_back(std::make_shared<
decltype(seq)>(std::move(seq)));
1191 std::vector<std::shared_ptr<shamrock::solvergraph::INode>> interp_sequence;
1196 storage.cell_graph_edge,
1197 storage.block_cell_sizes,
1198 storage.cell0block_aabb_lower,
1201 storage.euler_dt_rho,
1202 storage.rho_face_xp,
1203 storage.rho_face_xm,
1204 storage.rho_face_yp,
1205 storage.rho_face_ym,
1206 storage.rho_face_zp,
1207 storage.rho_face_zm);
1208 interp_sequence.push_back(std::make_shared<
decltype(node)>(std::move(node)));
1215 storage.cell_graph_edge,
1216 storage.block_cell_sizes,
1217 storage.cell0block_aabb_lower,
1222 storage.euler_dt_vel,
1223 storage.vel_face_xp,
1224 storage.vel_face_xm,
1225 storage.vel_face_yp,
1226 storage.vel_face_ym,
1227 storage.vel_face_zp,
1228 storage.vel_face_zm);
1229 interp_sequence.push_back(std::make_shared<
decltype(node)>(std::move(node)));
1236 storage.cell_graph_edge,
1237 storage.block_cell_sizes,
1238 storage.cell0block_aabb_lower,
1241 storage.euler_dt_press,
1242 storage.press_face_xp,
1243 storage.press_face_xm,
1244 storage.press_face_yp,
1245 storage.press_face_ym,
1246 storage.press_face_zp,
1247 storage.press_face_zm);
1248 interp_sequence.push_back(std::make_shared<
decltype(node)>(std::move(node)));
1251 if (solver_config.is_dust_on()) {
1252 u32 ndust = solver_config.dust_config.ndust;
1256 storage.cell_graph_edge,
1257 storage.block_cell_sizes,
1258 storage.cell0block_aabb_lower,
1259 storage.refs_rho_dust,
1260 storage.grad_rho_dust,
1261 storage.euler_dt_rho_dust,
1262 storage.rho_dust_face_xp,
1263 storage.rho_dust_face_xm,
1264 storage.rho_dust_face_yp,
1265 storage.rho_dust_face_ym,
1266 storage.rho_dust_face_zp,
1267 storage.rho_dust_face_zm);
1268 interp_sequence.push_back(std::make_shared<
decltype(node)>(std::move(node)));
1271 if (solver_config.is_dust_on()) {
1272 u32 ndust = solver_config.dust_config.ndust;
1276 storage.cell_graph_edge,
1277 storage.block_cell_sizes,
1278 storage.cell0block_aabb_lower,
1283 storage.euler_dt_vel_dust,
1284 storage.vel_dust_face_xp,
1285 storage.vel_dust_face_xm,
1286 storage.vel_dust_face_yp,
1287 storage.vel_dust_face_ym,
1288 storage.vel_dust_face_zp,
1289 storage.vel_dust_face_zm);
1290 interp_sequence.push_back(std::make_shared<
decltype(node)>(std::move(node)));
1294 "Interpolate to face", std::move(interp_sequence));
1295 solver_sequence.push_back(std::make_shared<
decltype(seq)>(std::move(seq)));
1300 std::vector<std::shared_ptr<shamrock::solvergraph::INode>> flux_sequence;
1302 if (solver_config.riemann_config == Rusanov) {
1306 solver_config.eos_gamma,
1307 storage.cell_graph_edge,
1308 storage.rho_face_xp,
1309 storage.rho_face_xm,
1310 storage.rho_face_yp,
1311 storage.rho_face_ym,
1312 storage.rho_face_zp,
1313 storage.rho_face_zm,
1314 storage.vel_face_xp,
1315 storage.vel_face_xm,
1316 storage.vel_face_yp,
1317 storage.vel_face_ym,
1318 storage.vel_face_zp,
1319 storage.vel_face_zm,
1320 storage.press_face_xp,
1321 storage.press_face_xm,
1322 storage.press_face_yp,
1323 storage.press_face_ym,
1324 storage.press_face_zp,
1325 storage.press_face_zm,
1326 storage.flux_rho_face_xp,
1327 storage.flux_rho_face_xm,
1328 storage.flux_rho_face_yp,
1329 storage.flux_rho_face_ym,
1330 storage.flux_rho_face_zp,
1331 storage.flux_rho_face_zm,
1332 storage.flux_rhov_face_xp,
1333 storage.flux_rhov_face_xm,
1334 storage.flux_rhov_face_yp,
1335 storage.flux_rhov_face_ym,
1336 storage.flux_rhov_face_zp,
1337 storage.flux_rhov_face_zm,
1338 storage.flux_rhoe_face_xp,
1339 storage.flux_rhoe_face_xm,
1340 storage.flux_rhoe_face_yp,
1341 storage.flux_rhoe_face_ym,
1342 storage.flux_rhoe_face_zp,
1343 storage.flux_rhoe_face_zm);
1344 flux_sequence.push_back(std::make_shared<
decltype(node)>(std::move(node)));
1345 }
else if (solver_config.riemann_config == HLL) {
1348 solver_config.eos_gamma,
1349 storage.cell_graph_edge,
1350 storage.rho_face_xp,
1351 storage.rho_face_xm,
1352 storage.rho_face_yp,
1353 storage.rho_face_ym,
1354 storage.rho_face_zp,
1355 storage.rho_face_zm,
1356 storage.vel_face_xp,
1357 storage.vel_face_xm,
1358 storage.vel_face_yp,
1359 storage.vel_face_ym,
1360 storage.vel_face_zp,
1361 storage.vel_face_zm,
1362 storage.press_face_xp,
1363 storage.press_face_xm,
1364 storage.press_face_yp,
1365 storage.press_face_ym,
1366 storage.press_face_zp,
1367 storage.press_face_zm,
1368 storage.flux_rho_face_xp,
1369 storage.flux_rho_face_xm,
1370 storage.flux_rho_face_yp,
1371 storage.flux_rho_face_ym,
1372 storage.flux_rho_face_zp,
1373 storage.flux_rho_face_zm,
1374 storage.flux_rhov_face_xp,
1375 storage.flux_rhov_face_xm,
1376 storage.flux_rhov_face_yp,
1377 storage.flux_rhov_face_ym,
1378 storage.flux_rhov_face_zp,
1379 storage.flux_rhov_face_zm,
1380 storage.flux_rhoe_face_xp,
1381 storage.flux_rhoe_face_xm,
1382 storage.flux_rhoe_face_yp,
1383 storage.flux_rhoe_face_ym,
1384 storage.flux_rhoe_face_zp,
1385 storage.flux_rhoe_face_zm);
1386 flux_sequence.push_back(std::make_shared<
decltype(node)>(std::move(node)));
1387 }
else if (solver_config.riemann_config == HLLC) {
1390 solver_config.eos_gamma,
1391 storage.cell_graph_edge,
1392 storage.rho_face_xp,
1393 storage.rho_face_xm,
1394 storage.rho_face_yp,
1395 storage.rho_face_ym,
1396 storage.rho_face_zp,
1397 storage.rho_face_zm,
1398 storage.vel_face_xp,
1399 storage.vel_face_xm,
1400 storage.vel_face_yp,
1401 storage.vel_face_ym,
1402 storage.vel_face_zp,
1403 storage.vel_face_zm,
1404 storage.press_face_xp,
1405 storage.press_face_xm,
1406 storage.press_face_yp,
1407 storage.press_face_ym,
1408 storage.press_face_zp,
1409 storage.press_face_zm,
1410 storage.flux_rho_face_xp,
1411 storage.flux_rho_face_xm,
1412 storage.flux_rho_face_yp,
1413 storage.flux_rho_face_ym,
1414 storage.flux_rho_face_zp,
1415 storage.flux_rho_face_zm,
1416 storage.flux_rhov_face_xp,
1417 storage.flux_rhov_face_xm,
1418 storage.flux_rhov_face_yp,
1419 storage.flux_rhov_face_ym,
1420 storage.flux_rhov_face_zp,
1421 storage.flux_rhov_face_zm,
1422 storage.flux_rhoe_face_xp,
1423 storage.flux_rhoe_face_xm,
1424 storage.flux_rhoe_face_yp,
1425 storage.flux_rhoe_face_ym,
1426 storage.flux_rhoe_face_zp,
1427 storage.flux_rhoe_face_zm);
1428 flux_sequence.push_back(std::make_shared<
decltype(node)>(std::move(node)));
1433 if (solver_config.is_dust_on()) {
1434 u32 ndust = solver_config.dust_config.ndust;
1435 if (solver_config.dust_config.dust_riemann_config ==
DHLL) {
1437 NodeComputeFluxDustMode<Tvec, TgridVec, modules::DustRiemannSolverMode::DHLL>
1439 "Dust flux compute",
1441 storage.cell_graph_edge,
1442 storage.rho_dust_face_xp,
1443 storage.rho_dust_face_xm,
1444 storage.rho_dust_face_yp,
1445 storage.rho_dust_face_ym,
1446 storage.rho_dust_face_zp,
1447 storage.rho_dust_face_zm,
1448 storage.vel_dust_face_xp,
1449 storage.vel_dust_face_xm,
1450 storage.vel_dust_face_yp,
1451 storage.vel_dust_face_ym,
1452 storage.vel_dust_face_zp,
1453 storage.vel_dust_face_zm,
1454 storage.flux_rho_dust_face_xp,
1455 storage.flux_rho_dust_face_xm,
1456 storage.flux_rho_dust_face_yp,
1457 storage.flux_rho_dust_face_ym,
1458 storage.flux_rho_dust_face_zp,
1459 storage.flux_rho_dust_face_zm,
1460 storage.flux_rhov_dust_face_xp,
1461 storage.flux_rhov_dust_face_xm,
1462 storage.flux_rhov_dust_face_yp,
1463 storage.flux_rhov_dust_face_ym,
1464 storage.flux_rhov_dust_face_zp,
1465 storage.flux_rhov_dust_face_zm);
1466 flux_sequence.push_back(std::make_shared<
decltype(node)>(std::move(node)));
1467 }
else if (solver_config.dust_config.dust_riemann_config ==
HB) {
1470 "Dust flux compute",
1472 storage.cell_graph_edge,
1473 storage.rho_dust_face_xp,
1474 storage.rho_dust_face_xm,
1475 storage.rho_dust_face_yp,
1476 storage.rho_dust_face_ym,
1477 storage.rho_dust_face_zp,
1478 storage.rho_dust_face_zm,
1479 storage.vel_dust_face_xp,
1480 storage.vel_dust_face_xm,
1481 storage.vel_dust_face_yp,
1482 storage.vel_dust_face_ym,
1483 storage.vel_dust_face_zp,
1484 storage.vel_dust_face_zm,
1485 storage.flux_rho_dust_face_xp,
1486 storage.flux_rho_dust_face_xm,
1487 storage.flux_rho_dust_face_yp,
1488 storage.flux_rho_dust_face_ym,
1489 storage.flux_rho_dust_face_zp,
1490 storage.flux_rho_dust_face_zm,
1491 storage.flux_rhov_dust_face_xp,
1492 storage.flux_rhov_dust_face_xm,
1493 storage.flux_rhov_dust_face_yp,
1494 storage.flux_rhov_dust_face_ym,
1495 storage.flux_rhov_dust_face_zp,
1496 storage.flux_rhov_dust_face_zm);
1497 flux_sequence.push_back(std::make_shared<
decltype(node)>(std::move(node)));
1504 solver_sequence.push_back(std::make_shared<
decltype(seq)>(std::move(seq)));
1509 AMRBlock::block_size, solver_config.grid_coord_to_pos_fact};
1511 storage.block_counts,
1512 storage.cell_graph_edge,
1513 storage.block_cell_sizes,
1514 storage.cell0block_aabb_lower,
1515 storage.flux_rho_face_xp,
1516 storage.flux_rho_face_xm,
1517 storage.flux_rho_face_yp,
1518 storage.flux_rho_face_ym,
1519 storage.flux_rho_face_zp,
1520 storage.flux_rho_face_zm,
1521 storage.flux_rhov_face_xp,
1522 storage.flux_rhov_face_xm,
1523 storage.flux_rhov_face_yp,
1524 storage.flux_rhov_face_ym,
1525 storage.flux_rhov_face_zp,
1526 storage.flux_rhov_face_zm,
1527 storage.flux_rhoe_face_xp,
1528 storage.flux_rhoe_face_xm,
1529 storage.flux_rhoe_face_yp,
1530 storage.flux_rhoe_face_ym,
1531 storage.flux_rhoe_face_zp,
1532 storage.flux_rhoe_face_zm,
1536 solver_sequence.push_back(std::make_shared<
decltype(node)>(std::move(node)));
1539 if (solver_config.is_dust_on()) {
1541 AMRBlock::block_size,
1542 solver_config.grid_coord_to_pos_fact,
1543 solver_config.dust_config.ndust};
1545 storage.block_counts,
1546 storage.cell_graph_edge,
1547 storage.block_cell_sizes,
1548 storage.cell0block_aabb_lower,
1549 storage.flux_rho_dust_face_xp,
1550 storage.flux_rho_dust_face_xm,
1551 storage.flux_rho_dust_face_yp,
1552 storage.flux_rho_dust_face_ym,
1553 storage.flux_rho_dust_face_zp,
1554 storage.flux_rho_dust_face_zm,
1555 storage.flux_rhov_dust_face_xp,
1556 storage.flux_rhov_dust_face_xm,
1557 storage.flux_rhov_dust_face_yp,
1558 storage.flux_rhov_dust_face_ym,
1559 storage.flux_rhov_dust_face_zp,
1560 storage.flux_rhov_dust_face_zm,
1562 storage.dtrhov_dust);
1563 solver_sequence.push_back(std::make_shared<
decltype(node)>(std::move(node)));
1567 storage.solver_sequence = std::make_shared<decltype(seq)>(std::move(seq));