379 const std::string
nt_name =
"ocean_time";
380 const std::string
ndim_name =
"num_geo_dimensions";
382 const std::string
flev_name =
"FINEST_LEVEL";
384 const std::string
nx_name =
"NX";
385 const std::string
ny_name =
"NY";
386 const std::string
nz_name =
"NZ";
403 ncf.enter_def_mode();
404 ncf.put_attr(
"title",
"REMORA data ");
434 ncf.var(
"probLo").put_attr(
"long_name",
"Low side of problem domain in internal AMReX grid");
435 ncf.var(
"probLo").put_attr(
"units",
"meter");
437 ncf.var(
"probHi").put_attr(
"long_name",
"High side of problem domain in internal AMReX grid");
438 ncf.var(
"probHi").put_attr(
"units",
"meter");
441 ncf.var(
"Geom.smallend").put_attr(
"long_name",
"Low side of problem domain in index space");
443 ncf.var(
"Geom.bigend").put_attr(
"long_name",
"High side of problem domain in index space");
445 ncf.var(
"CellSize").put_attr(
"long_name",
"Cell size on internal AMReX grid");
446 ncf.var(
"CellSize").put_attr(
"units",
"meter");
449 ncf.var(
"theta_s").put_attr(
"long_name",
"S-coordinate surface control parameter");
451 ncf.var(
"theta_b").put_attr(
"long_name",
"S-coordinate bottom control parameter");
453 ncf.var(
"hc").put_attr(
"long_name",
"S-coordinate parameter, critical depth");
454 ncf.var(
"hc").put_attr(
"units",
"meter");
457 ncf.var(
"grid").put_attr(
"cf_role",
"grid_topology");
458 ncf.var(
"grid").put_attr(
"topology_dimension",std::vector({2}));
459 ncf.var(
"grid").put_attr(
"node_dimensions",
"xi_psi eta_psi");
460 ncf.var(
"grid").put_attr(
"face_dimensions",
"xi_rho: xi_psi (padding: both) eta_rho: eta_psi (padding: both)");
461 ncf.var(
"grid").put_attr(
"edge1_dimensions",
"xi_u: xi_psi eta_u: eta_psi (padding: both)");
462 ncf.var(
"grid").put_attr(
"edge2_dimensions",
"xi_v: xi_psi (padding: both) eta_v: eta_psi");
463 ncf.var(
"grid").put_attr(
"node_coordinates",
"x_psi y_psi");
464 ncf.var(
"grid").put_attr(
"face_coordinates",
"x_rho y_rho");
465 ncf.var(
"grid").put_attr(
"edge1_coordinates",
"x_u y_u");
466 ncf.var(
"grid").put_attr(
"edge2_coordinates",
"x_v y_v");
467 ncf.var(
"grid").put_attr(
"vertical_dimensions",
"s_rho: s_w (padding: none)");
470 ncf.var(
"s_rho").put_attr(
"long_name",
"S-coordinate at RHO-points");
471 ncf.var(
"s_rho").put_attr(
"field",
"s_rho, scalar");
474 ncf.var(
"s_w").put_attr(
"long_name",
"S-coordinate at W-points");
475 ncf.var(
"s_w").put_attr(
"field",
"s_w, scalar");
478 ncf.var(
"pm").put_attr(
"long_name",
"curvilinear coordinate metric in XI");
479 ncf.var(
"pm").put_attr(
"units",
"meter-1");
480 ncf.var(
"pm").put_attr(
"grid",
"grid");
481 ncf.var(
"pm").put_attr(
"location",
"face");
482 ncf.var(
"pm").put_attr(
"coordinates",
"x_rho y_rho");
483 ncf.var(
"pm").put_attr(
"field",
"pm, scalar");
486 ncf.var(
"pn").put_attr(
"long_name",
"curvilinear coordinate metric in ETA");
487 ncf.var(
"pn").put_attr(
"units",
"meter-1");
488 ncf.var(
"pn").put_attr(
"grid",
"grid");
489 ncf.var(
"pn").put_attr(
"location",
"face");
490 ncf.var(
"pn").put_attr(
"coordinates",
"x_rho y_rho");
491 ncf.var(
"pn").put_attr(
"field",
"pn, scalar");
494 ncf.var(
"f").put_attr(
"long_name",
"Coriolis parameter at RHO-points");
495 ncf.var(
"f").put_attr(
"units",
"second-1");
496 ncf.var(
"f").put_attr(
"grid",
"grid");
497 ncf.var(
"f").put_attr(
"location",
"face");
498 ncf.var(
"f").put_attr(
"coordinates",
"x_rho y_rho");
499 ncf.var(
"f").put_attr(
"field",
"coriolis, scalar");
502 ncf.var(
"x_rho").put_attr(
"long_name",
"x-locations of RHO-points");
503 ncf.var(
"x_rho").put_attr(
"units",
"meter");
504 ncf.var(
"x_rho").put_attr(
"field",
"x_rho, scalar");
507 ncf.var(
"y_rho").put_attr(
"long_name",
"y-locations of RHO-points");
508 ncf.var(
"y_rho").put_attr(
"units",
"meter");
509 ncf.var(
"y_rho").put_attr(
"field",
"y_rho, scalar");
512 ncf.var(
"x_u").put_attr(
"long_name",
"x-locations of U-points");
513 ncf.var(
"x_u").put_attr(
"units",
"meter");
514 ncf.var(
"x_u").put_attr(
"field",
"x_u, scalar");
517 ncf.var(
"y_u").put_attr(
"long_name",
"y-locations of U-points");
518 ncf.var(
"y_u").put_attr(
"units",
"meter");
519 ncf.var(
"y_u").put_attr(
"field",
"y_u, scalar");
522 ncf.var(
"x_v").put_attr(
"long_name",
"x-locations of V-points");
523 ncf.var(
"x_v").put_attr(
"units",
"meter");
524 ncf.var(
"x_v").put_attr(
"field",
"x_v, scalar");
527 ncf.var(
"y_v").put_attr(
"long_name",
"y-locations of V-points");
528 ncf.var(
"y_v").put_attr(
"units",
"meter");
529 ncf.var(
"y_v").put_attr(
"field",
"y_v, scalar");
532 ncf.var(
"x_psi").put_attr(
"long_name",
"x-locations of PSI-points");
533 ncf.var(
"x_psi").put_attr(
"units",
"meter");
534 ncf.var(
"x_psi").put_attr(
"field",
"x_psi, scalar");
537 ncf.var(
"y_psi").put_attr(
"long_name",
"y-locations of PSI-points");
538 ncf.var(
"y_psi").put_attr(
"units",
"meter");
539 ncf.var(
"y_psi").put_attr(
"field",
"y_psi, scalar");
549 ncf.var(
"ocean_time").put_attr(
"long_name",
"time since initialization");
552 ncf.var(
"ocean_time").put_attr(
"field",
"time, scalar, series");
558 ncf.var(
"dstart").put_attr(
"long_name",
"time stamp assigned to model initialization");
563 ncf.var(
"Cs_r").put_attr(
"long_name",
"S-coordinate stretching curves at RHO points");
564 ncf.var(
"Cs_r").put_attr(
"valid_min",std::vector({-
one}));
565 ncf.var(
"Cs_r").put_attr(
"valid_max",std::vector({
zero}));
566 ncf.var(
"Cs_r").put_attr(
"field",
"Cs_r, scalar");
569 ncf.var(
"Cs_w").put_attr(
"long_name",
"S-coordinate stretching curves at W points");
570 ncf.var(
"Cs_w").put_attr(
"valid_min",std::vector({-
one}));
571 ncf.var(
"Cs_w").put_attr(
"valid_max",std::vector({
zero}));
572 ncf.var(
"Cs_w").put_attr(
"field",
"Cs_w, scalar");
575 ncf.var(
"h").put_attr(
"long_name",
"bathymetry at RHO-points");
576 ncf.var(
"h").put_attr(
"units",
"meter");
577 ncf.var(
"h").put_attr(
"grid",
"grid");
578 ncf.var(
"h").put_attr(
"location",
"face");
579 ncf.var(
"h").put_attr(
"coordinates",
"x_rho y_rho");
580 ncf.var(
"h").put_attr(
"field",
"bath, scalar");
583 ncf.var(
"zeta").put_attr(
"long_name",
"free-surface");
584 ncf.var(
"zeta").put_attr(
"units",
"meter");
585 ncf.var(
"zeta").put_attr(
"time",
"ocean_time");
586 ncf.var(
"zeta").put_attr(
"grid",
"grid");
587 ncf.var(
"zeta").put_attr(
"location",
"face");
588 ncf.var(
"zeta").put_attr(
"coordinates",
"x_rho y_rho ocean_time");
589 ncf.var(
"zeta").put_attr(
"field",
"free-surface, scalar, series");
591 for (
int n = 0; n <
ncons; ++n) {
600 ncf.var(
nm).put_attr(
"long_name",
"potential temperature");
601 ncf.var(
nm).put_attr(
"units",
"Celsius");
602 ncf.var(
nm).put_attr(
"field",
"temperature, scalar, series");
604 ncf.var(
nm).put_attr(
"long_name",
"salinity");
605 ncf.var(
nm).put_attr(
"field",
"salinity, scalar, series");
607 ncf.var(
nm).put_attr(
"long_name",
nm);
608 ncf.var(
nm).put_attr(
"field",
nm +
", scalar, series");
610 ncf.var(
nm).put_attr(
"time",
"ocean_time");
611 ncf.var(
nm).put_attr(
"grid",
"grid");
612 ncf.var(
nm).put_attr(
"location",
"face");
613 ncf.var(
nm).put_attr(
"coordinates",
"x_rho y_rho s_rho ocean_time");
624 ncf.var(
"vorticity").put_attr(
"long_name",
"vorticity");
625 ncf.var(
"vorticity").put_attr(
"time",
"ocean_time");
626 ncf.var(
"vorticity").put_attr(
"grid",
"grid");
627 ncf.var(
"vorticity").put_attr(
"location",
"face");
628 ncf.var(
"vorticity").put_attr(
"coordinates",
"x_rho y_rho s_rho ocean_time");
629 ncf.var(
"vorticity").put_attr(
"field",
"vorticity, scalar, series");
635 ncf.var(
"omega").put_attr(
"long_name",
"S-coordinate vertical momentum component");
636 ncf.var(
"omega").put_attr(
"units",
"meter second-1");
637 ncf.var(
"omega").put_attr(
"time",
"ocean_time");
638 ncf.var(
"omega").put_attr(
"grid",
"grid");
639 ncf.var(
"omega").put_attr(
"location",
"face");
640 ncf.var(
"omega").put_attr(
"coordinates",
"x_rho y_rho s_w ocean_time");
641 ncf.var(
"omega").put_attr(
"field",
"omega, scalar, series");
646 ncf.var(
"w").put_attr(
"long_name",
"vertical momentum component");
647 ncf.var(
"w").put_attr(
"units",
"meter second-1");
648 ncf.var(
"w").put_attr(
"time",
"ocean_time");
649 ncf.var(
"w").put_attr(
"grid",
"grid");
650 ncf.var(
"w").put_attr(
"location",
"face");
651 ncf.var(
"w").put_attr(
"coordinates",
"x_rho y_rho s_w ocean_time");
652 ncf.var(
"w").put_attr(
"field",
"w-velocity, scalar, series");
658 ncf.var(
"visc2").put_attr(
"long_name",
"horizontal harmonic viscosity coefficient at RHO-points");
659 ncf.var(
"visc2").put_attr(
"units",
"meter2 second-1");
660 ncf.var(
"visc2").put_attr(
"grid",
"grid");
661 ncf.var(
"visc2").put_attr(
"location",
"face");
662 ncf.var(
"visc2").put_attr(
"coordinates",
"x_rho y_rho");
663 ncf.var(
"visc2").put_attr(
"field",
"visc2, scalar");
665 for (
int n = 0; n <
ncons; ++n) {
666 const std::string
nm = std::string(
"diff2_") +
cons_names[n];
668 ncf.var(
nm).put_attr(
"long_name", std::string(
"horizontal harmonic diffusivity coefficient for ") +
cons_names[n] +
" at RHO-points");
669 ncf.var(
nm).put_attr(
"units",
"meter2 second-1");
670 ncf.var(
nm).put_attr(
"grid",
"grid");
671 ncf.var(
nm).put_attr(
"location",
"face");
672 ncf.var(
nm).put_attr(
"coordinates",
"x_rho y_rho");
673 ncf.var(
nm).put_attr(
"field",
nm +
", scalar");
678 ncf.var(
"u").put_attr(
"long_name",
"u-momentum component");
679 ncf.var(
"u").put_attr(
"units",
"meter second-1");
680 ncf.var(
"u").put_attr(
"time",
"ocean_time");
681 ncf.var(
"u").put_attr(
"grid",
"grid");
682 ncf.var(
"u").put_attr(
"location",
"edge1");
683 ncf.var(
"u").put_attr(
"coordinates",
"x_u y_u s_rho ocean_time");
684 ncf.var(
"u").put_attr(
"field",
"u-velocity, scalar, series");
687 ncf.var(
"v").put_attr(
"long_name",
"v-momentum component");
688 ncf.var(
"v").put_attr(
"units",
"meter second-1");
689 ncf.var(
"v").put_attr(
"time",
"ocean_time");
690 ncf.var(
"v").put_attr(
"grid",
"grid");
691 ncf.var(
"v").put_attr(
"location",
"edge2");
692 ncf.var(
"v").put_attr(
"coordinates",
"x_v y_v s_rho ocean_time");
693 ncf.var(
"v").put_attr(
"field",
"v-velocity, scalar, series");
696 ncf.var(
"ubar").put_attr(
"long_name",
"vertically integrated u-momentum component");
697 ncf.var(
"ubar").put_attr(
"units",
"meter second-1");
698 ncf.var(
"ubar").put_attr(
"time",
"ocean_time");
699 ncf.var(
"ubar").put_attr(
"grid",
"grid");
700 ncf.var(
"ubar").put_attr(
"location",
"edge1");
701 ncf.var(
"ubar").put_attr(
"coordinates",
"x_u y_u ocean_time");
702 ncf.var(
"ubar").put_attr(
"field",
"ubar-velocity, scalar, series");
705 ncf.var(
"vbar").put_attr(
"long_name",
"vertically integrated v-momentum component");
706 ncf.var(
"vbar").put_attr(
"units",
"meter second-1");
707 ncf.var(
"vbar").put_attr(
"time",
"ocean_time");
708 ncf.var(
"vbar").put_attr(
"grid",
"grid");
709 ncf.var(
"vbar").put_attr(
"location",
"edge2");
710 ncf.var(
"vbar").put_attr(
"coordinates",
"x_v y_v ocean_time");
711 ncf.var(
"vbar").put_attr(
"field",
"vbar-velocity, scalar, series");
714 ncf.var(
"sustr").put_attr(
"long_name",
"surface u-momentum stress");
715 ncf.var(
"sustr").put_attr(
"units",
"newton meter-2");
716 ncf.var(
"sustr").put_attr(
"time",
"ocean_time");
717 ncf.var(
"sustr").put_attr(
"grid",
"grid");
718 ncf.var(
"sustr").put_attr(
"location",
"edge1");
719 ncf.var(
"sustr").put_attr(
"coordinates",
"x_u y_u ocean_time");
720 ncf.var(
"sustr").put_attr(
"field",
"surface u-momentum stress, scalar, series");
723 ncf.var(
"svstr").put_attr(
"long_name",
"surface v-momentum stress");
724 ncf.var(
"svstr").put_attr(
"units",
"newton meter-2");
725 ncf.var(
"svstr").put_attr(
"time",
"ocean_time");
726 ncf.var(
"svstr").put_attr(
"grid",
"grid");
727 ncf.var(
"svstr").put_attr(
"location",
"edge2");
728 ncf.var(
"svstr").put_attr(
"coordinates",
"x_v y_v ocean_time");
729 ncf.var(
"svstr").put_attr(
"field",
"surface v-momentum stress, scalar, series");
732 ncf.var(
"mask_rho").put_attr(
"long_name",
"mask on RHO-points");
733 ncf.var(
"mask_rho").put_attr(
"time",
"ocean_time");
734 ncf.var(
"mask_rho").put_attr(
"flag_values",std::vector({Real(0.0),Real(1.0)}));
735 ncf.var(
"mask_rho").put_attr(
"flag_meanings",
"land water");
738 ncf.var(
"mask_u").put_attr(
"long_name",
"mask on U-points");
739 ncf.var(
"mask_u").put_attr(
"time",
"ocean_time");
740 ncf.var(
"mask_u").put_attr(
"flag_values",std::vector({Real(0.0),Real(1.0)}));
741 ncf.var(
"mask_u").put_attr(
"flag_meanings",
"land water");
744 ncf.var(
"mask_v").put_attr(
"long_name",
"mask on V-points");
745 ncf.var(
"mask_v").put_attr(
"time",
"ocean_time");
746 ncf.var(
"mask_v").put_attr(
"flag_values",std::vector({Real(0.0),Real(1.0)}));
747 ncf.var(
"mask_v").put_attr(
"flag_meanings",
"land water");
755 for (
int n = 0; n <
ncons; ++n) {
756 const std::string
nm = std::string(
"stflux_") +
cons_names[n];
759 ncf.var(
nm).put_attr(
"long_name", std::string(
"surface flux of ") +
cons_names[n]);
761 ncf.var(
nm).put_attr(
"units", (n ==
Temp_comp) ?
"Celsius meter second-1"
763 ncf.var(
nm).put_attr(
"time",
"ocean_time");
764 ncf.var(
nm).put_attr(
"grid",
"grid");
765 ncf.var(
nm).put_attr(
"location",
"face");
766 ncf.var(
nm).put_attr(
"coordinates",
"x_rho y_rho ocean_time");
767 ncf.var(
nm).put_attr(
"field",
nm +
", scalar, series");
773 ncf.var(
"Tair").put_attr(
"long_name",
"surface air temperature");
774 ncf.var(
"Tair").put_attr(
"units",
"Celsius");
775 ncf.var(
"Tair").put_attr(
"time",
"ocean_time");
776 ncf.var(
"Tair").put_attr(
"grid",
"grid");
777 ncf.var(
"Tair").put_attr(
"location",
"face");
778 ncf.var(
"Tair").put_attr(
"coordinates",
"x_rho y_rho ocean_time");
779 ncf.var(
"Tair").put_attr(
"field",
"Tair, scalar, series");
783 ncf.var(
"Pair").put_attr(
"long_name",
"surface air pressure");
784 ncf.var(
"Pair").put_attr(
"units",
"Pascal");
785 ncf.var(
"Pair").put_attr(
"time",
"ocean_time");
786 ncf.var(
"Pair").put_attr(
"grid",
"grid");
787 ncf.var(
"Pair").put_attr(
"location",
"face");
788 ncf.var(
"Pair").put_attr(
"coordinates",
"x_rho y_rho ocean_time");
789 ncf.var(
"Pair").put_attr(
"field",
"Pair, scalar, series");
793 ncf.var(
"qnet").put_attr(
"long_name",
"surface net heat flux");
794 ncf.var(
"qnet").put_attr(
"units",
"watt meter-2");
795 ncf.var(
"qnet").put_attr(
"time",
"ocean_time");
796 ncf.var(
"qnet").put_attr(
"grid",
"grid");
797 ncf.var(
"qnet").put_attr(
"location",
"face");
798 ncf.var(
"qnet").put_attr(
"coordinates",
"x_rho y_rho ocean_time");
799 ncf.var(
"qnet").put_attr(
"field",
"surface heat flux, scalar, series");
803 ncf.var(
"ssflux").put_attr(
"long_name",
"kinematic surface net salt flux, SALT*(E-P)/rhow");
804 ncf.var(
"ssflux").put_attr(
"units",
"meter second-1");
805 ncf.var(
"ssflux").put_attr(
"time",
"ocean_time");
806 ncf.var(
"ssflux").put_attr(
"grid",
"grid");
807 ncf.var(
"ssflux").put_attr(
"location",
"face");
808 ncf.var(
"ssflux").put_attr(
"coordinates",
"x_rho y_rho ocean_time");
809 ncf.var(
"ssflux").put_attr(
"field",
"surface net salt flux, scalar, series");
813 ncf.var(
"latent").put_attr(
"long_name",
"net latent heat flux");
814 ncf.var(
"latent").put_attr(
"units",
"watt meter-2");
815 ncf.var(
"latent").put_attr(
"time",
"ocean_time");
816 ncf.var(
"latent").put_attr(
"grid",
"grid");
817 ncf.var(
"latent").put_attr(
"location",
"face");
818 ncf.var(
"latent").put_attr(
"coordinates",
"x_rho y_rho ocean_time");
819 ncf.var(
"latent").put_attr(
"field",
"latent heat flux, scalar, series");
823 ncf.var(
"sensible").put_attr(
"long_name",
"net sensible heat flux");
824 ncf.var(
"sensible").put_attr(
"units",
"watt meter-2");
825 ncf.var(
"sensible").put_attr(
"time",
"ocean_time");
826 ncf.var(
"sensible").put_attr(
"grid",
"grid");
827 ncf.var(
"sensible").put_attr(
"location",
"face");
828 ncf.var(
"sensible").put_attr(
"coordinates",
"x_rho y_rho ocean_time");
829 ncf.var(
"sensible").put_attr(
"field",
"sensible heat flux, scalar, series");
833 ncf.var(
"lwrad").put_attr(
"long_name",
"net longwave radiation flux");
834 ncf.var(
"lwrad").put_attr(
"units",
"watt meter-2");
835 ncf.var(
"lwrad").put_attr(
"time",
"ocean_time");
836 ncf.var(
"lwrad").put_attr(
"grid",
"grid");
837 ncf.var(
"lwrad").put_attr(
"location",
"face");
838 ncf.var(
"lwrad").put_attr(
"coordinates",
"x_rho y_rho ocean_time");
839 ncf.var(
"lwrad").put_attr(
"field",
"longwave radiation, scalar, series");
843 ncf.var(
"swrad").put_attr(
"long_name",
"solar shortwave radiation flux");
844 ncf.var(
"swrad").put_attr(
"units",
"watt meter-2");
845 ncf.var(
"swrad").put_attr(
"time",
"ocean_time");
846 ncf.var(
"swrad").put_attr(
"grid",
"grid");
847 ncf.var(
"swrad").put_attr(
"location",
"face");
848 ncf.var(
"swrad").put_attr(
"coordinates",
"x_rho y_rho ocean_time");
849 ncf.var(
"swrad").put_attr(
"field",
"shortwave radiation, scalar, series");
853 ncf.var(
"evaporation").put_attr(
"long_name",
"evaporation rate");
854 ncf.var(
"evaporation").put_attr(
"units",
"kilogram meter-2 second-1");
855 ncf.var(
"evaporation").put_attr(
"time",
"ocean_time");
856 ncf.var(
"evaporation").put_attr(
"grid",
"grid");
857 ncf.var(
"evaporation").put_attr(
"location",
"face");
858 ncf.var(
"evaporation").put_attr(
"coordinates",
"x_rho y_rho ocean_time");
859 ncf.var(
"evaporation").put_attr(
"field",
"evaporation, scalar, series");
863 ncf.var(
"rain").put_attr(
"long_name",
"rain fall rate");
864 ncf.var(
"rain").put_attr(
"units",
"kilogram meter-2 second-1");
865 ncf.var(
"rain").put_attr(
"time",
"ocean_time");
866 ncf.var(
"rain").put_attr(
"grid",
"grid");
867 ncf.var(
"rain").put_attr(
"location",
"face");
868 ncf.var(
"rain").put_attr(
"coordinates",
"x_rho y_rho ocean_time");
869 ncf.var(
"rain").put_attr(
"field",
"rain, scalar, series");
874 ncf.put_attr(
"CurrentLevel", std::vector<int> {
flev });
875 ncf.put_attr(
"DefaultGeometry", std::vector<int> { amrex::DefaultGeometry().Coord() });
891 amrex::Vector<Real>
probLo;
892 amrex::Vector<Real>
probHi;
901 if (amrex::ParallelDescriptor::IOProcessor())
912 amrex::Vector<int>
bigend;
945 ncf.var(
"hc").put(&
hc);
946 ncf.var(
"theta_s").put(&theta_s);
947 ncf.var(
"theta_b").put(&theta_b);
974 const long long nt_count = amrex::ParallelDescriptor::IOProcessor() ?
local_nt : 0;
980 amrex::Abort(
"Found while writing output: zeta contains nan or inf");
986 for (
int n = 0; n <
ncons; ++n) {
991 if (
comp < 0) {
continue; }
993 amrex::Abort(
"Found while writing output: " +
cons_names[n] +
994 " contains nan or inf");
998 amrex::Abort(
"Found while writing output: velocity u contains nan or inf");
1001 amrex::Abort(
"Found while writing output: velocity ubar contains nan or inf");
1004 amrex::Abort(
"Found while writing output: velocity v contains nan or inf");
1007 amrex::Abort(
"Found while writing output: velocity vbar contains nan or inf");
1010 amrex::Abort(
"Found while writing output: omega contains nan or inf");
1013 amrex::Abort(
"Found while writing output: velocity w contains nan or inf");
1017 auto bx =
mfi.validbox();
1068 Gpu::streamSynchronize();
1082 Gpu::streamSynchronize();
1096 Gpu::streamSynchronize();
1111 Gpu::streamSynchronize();
1124 Gpu::streamSynchronize();
1128 nc_plot_var.put(
tmp_bathy.dataPtr(), { local_start_y, local_start_x }, { local_ny, local_nx });
1136 Gpu::streamSynchronize();
1141 nc_plot_var.put(
tmp_pm.dataPtr(), { local_start_y, local_start_x }, { local_ny, local_nx });
1149 Gpu::streamSynchronize();
1153 nc_plot_var.put(
tmp_pn.dataPtr(), { local_start_y, local_start_x }, { local_ny, local_nx });
1161 Gpu::streamSynchronize();
1165 nc_plot_var.put(
tmp_f.dataPtr(), { local_start_y, local_start_x }, { local_ny, local_nx });
1173 Gpu::streamSynchronize();
1178 nc_plot_var.put(
tmp_xr.dataPtr(), { local_start_y, local_start_x }, { local_ny, local_nx });
1186 Gpu::streamSynchronize();
1190 nc_plot_var.put(
tmp_yr.dataPtr(), { local_start_y, local_start_x }, { local_ny, local_nx });
1198 Gpu::streamSynchronize();
1201 nc_plot_var.put(
tmp_zeta.dataPtr(), { local_start_nt, local_start_y, local_start_x }, { local_nt, local_ny,
1209 Gpu::streamSynchronize();
1212 nc_plot_var.put(
tmp_mask_rho.dataPtr(), { local_start_nt, local_start_y, local_start_x }, { local_nt, local_ny,
1217 for (
int n = 0; n <
ncons; ++n) {
1218 const std::string
nm = std::string(
"stflux_") +
cons_names[n];
1223 Gpu::streamSynchronize();
1226 nc_var.put(
tmp.dataPtr(), { local_start_nt, local_start_y, local_start_x },
1227 { local_nt, local_ny, local_nx });
1240 Gpu::streamSynchronize();
1243 nc_plot_var.put(
tmp_Tair.dataPtr(), { local_start_nt, local_start_y, local_start_x }, { local_nt, local_ny, local_nx });
1250 Gpu::streamSynchronize();
1253 nc_plot_var.put(
tmp_Pair.dataPtr(), { local_start_nt, local_start_y, local_start_x }, { local_nt, local_ny, local_nx });
1271 Gpu::streamSynchronize();
1275 { local_start_nt, local_start_y, local_start_x },
1276 { local_nt, local_ny, local_nx });
1291 Gpu::streamSynchronize();
1295 { local_start_nt, local_start_y, local_start_x },
1296 { local_nt, local_ny, local_nx });
1307 Gpu::streamSynchronize();
1311 { local_start_nt, local_start_y, local_start_x },
1312 { local_nt, local_ny, local_nx });
1323 Gpu::streamSynchronize();
1327 { local_start_nt, local_start_y, local_start_x },
1328 { local_nt, local_ny, local_nx });
1339 Gpu::streamSynchronize();
1343 { local_start_nt, local_start_y, local_start_x },
1344 { local_nt, local_ny, local_nx });
1351 Gpu::streamSynchronize();
1355 { local_start_nt, local_start_y, local_start_x },
1356 { local_nt, local_ny, local_nx });
1363 Gpu::streamSynchronize();
1367 { local_start_nt, local_start_y, local_start_x },
1368 { local_nt, local_ny, local_nx });
1375 Gpu::streamSynchronize();
1379 { local_start_nt, local_start_y, local_start_x },
1380 { local_nt, local_ny, local_nx });
1385 for (
int n = 0; n <
ncons; ++n) {
1392 tmp.resize(
tmp_bx, 1, amrex::The_Pinned_Arena());
1394 Gpu::streamSynchronize();
1397 nc_plot_var.put(
tmp.dataPtr(), { local_start_nt, local_start_z, local_start_y, local_start_x }, { local_nt,
1398 local_nz, local_ny, local_nx });
1411 tmp.resize(
tmp_bx, 1, amrex::The_Pinned_Arena());
1413 Gpu::streamSynchronize();
1416 nc_plot_var.put(
tmp.dataPtr(), { local_start_nt, local_start_z, local_start_y, local_start_x }, { local_nt,
1417 local_nz, local_ny, local_nx });
1430 if (
wv.second ==
nullptr) {
continue; }
1432 tmp.resize(
tmp_bx_w, 1, amrex::The_Pinned_Arena());
1434 Gpu::streamSynchronize();
1437 nc_plot_var.put(
tmp.dataPtr(), { local_start_nt, local_start_z, local_start_y, local_start_x }, { local_nt,
1438 local_nz+1, local_ny, local_nx });
1452 Gpu::streamSynchronize();
1455 nc_var.put(
tmp.dataPtr(), { local_start_y, local_start_x }, { local_ny, local_nx });
1459 for (
int n = 0; n <
ncons; ++n) {
1460 const std::string
nm = std::string(
"diff2_") +
cons_names[n];
1464 Gpu::streamSynchronize();
1467 nc_var.put(
tmp.dataPtr(), { local_start_y, local_start_x }, { local_ny, local_nx });
1481 Box
bx =
mfi.validbox();
1488 tmp_bx.surroundingNodes(0);
1513 Gpu::streamSynchronize();
1517 nc_plot_var.put(
tmp.dataPtr(), { local_start_y, local_start_x }, { local_ny, local_nx });
1523 Gpu::streamSynchronize();
1527 nc_plot_var.put(
tmp.dataPtr(), { local_start_y, local_start_x }, { local_ny, local_nx });
1533 tmp.resize(
tmp_bx, 1, amrex::The_Pinned_Arena());
1535 Gpu::streamSynchronize();
1538 nc_plot_var.put(
tmp.dataPtr(), { local_start_nt, local_start_z, local_start_y, local_start_x }, { local_nt,
1539 local_nz, local_ny, local_nx });
1546 Gpu::streamSynchronize();
1549 nc_plot_var.put(
tmp.dataPtr(), { local_start_nt, local_start_y, local_start_x }, { local_nt, local_ny, local_nx });
1555 Gpu::streamSynchronize();
1558 nc_plot_var.put(
tmp.dataPtr(), { local_start_nt, local_start_y, local_start_x }, { local_nt, local_ny, local_nx });
1564 Gpu::streamSynchronize();
1567 nc_plot_var.put(
tmp.dataPtr(), { local_start_nt, local_start_y, local_start_x }, { local_nt, local_ny, local_nx });
1576 Box
bx =
mfi.validbox();
1583 tmp_bx.surroundingNodes(1);
1611 Gpu::streamSynchronize();
1615 nc_plot_var.put(
tmp.dataPtr(), { local_start_y, local_start_x }, { local_ny, local_nx });
1621 Gpu::streamSynchronize();
1625 nc_plot_var.put(
tmp.dataPtr(), { local_start_y, local_start_x }, { local_ny, local_nx });
1631 tmp.resize(
tmp_bx, 1, amrex::The_Pinned_Arena());
1633 Gpu::streamSynchronize();
1636 nc_plot_var.put(
tmp.dataPtr(), { local_start_nt, local_start_z, local_start_y, local_start_x }, { local_nt,
1637 local_nz, local_ny, local_nx });
1644 Gpu::streamSynchronize();
1647 nc_plot_var.put(
tmp.dataPtr(), { local_start_nt, local_start_y, local_start_x }, { local_nt, local_ny, local_nx });
1654 Gpu::streamSynchronize();
1657 nc_plot_var.put(
tmp.dataPtr(), { local_start_nt, local_start_y, local_start_x }, { local_nt, local_ny, local_nx });
1663 Gpu::streamSynchronize();
1666 nc_plot_var.put(
tmp.dataPtr(), { local_start_nt, local_start_y, local_start_x }, { local_nt, local_ny, local_nx });
1675 Box
bx =
mfi.validbox();
1682 tmp_bx.surroundingNodes(0);
1683 tmp_bx.surroundingNodes(1);
1703 Gpu::streamSynchronize();
1707 nc_plot_var.put(
tmp.dataPtr(), { local_start_y, local_start_x }, { local_ny, local_nx });
1713 Gpu::streamSynchronize();
1717 nc_plot_var.put(
tmp.dataPtr(), { local_start_y, local_start_x }, { local_ny, local_nx });