@@ -101,6 +101,7 @@ class FieldNormsImpl : public amr_wind::field_norms::FieldNorms
101
101
{}
102
102
void check_output (
103
103
amrex::Real check_val0, amrex::Real check_val1, amrex::Real check_val2);
104
+ void check_output (amrex::Real check_val);
104
105
105
106
protected:
106
107
// No file output during test
@@ -117,10 +118,24 @@ void FieldNormsImpl::check_output(
117
118
EXPECT_EQ (var_names ()[1 ], (std::string) " velocityy" );
118
119
EXPECT_EQ (var_names ()[2 ], (std::string) " velocityz" );
119
120
// Loop through norm values and check them
120
- const amrex::Real tiny = std::numeric_limits<amrex::Real>::epsilon ();
121
- EXPECT_NEAR (field_norms ()[0 ], check_val0, 500 * tiny);
122
- EXPECT_NEAR (field_norms ()[1 ], check_val1, 500 * tiny);
123
- EXPECT_NEAR (field_norms ()[2 ], check_val2, 500 * tiny);
121
+ const amrex::Real tol = amr_wind::constants::TIGHT_TOL;
122
+ EXPECT_NEAR (field_norms ()[0 ], check_val0, tol);
123
+ EXPECT_NEAR (field_norms ()[1 ], check_val1, tol);
124
+ EXPECT_NEAR (field_norms ()[2 ], check_val2, tol);
125
+ }
126
+
127
+ void FieldNormsImpl::check_output (amrex::Real check_val)
128
+ {
129
+ // Get variable names and check
130
+ EXPECT_EQ (var_names ()[0 ], (std::string) " pressure" );
131
+ EXPECT_EQ (var_names ()[1 ], (std::string) " u_mac" );
132
+ EXPECT_EQ (var_names ()[2 ], (std::string) " v_mac" );
133
+ EXPECT_EQ (var_names ()[3 ], (std::string) " w_mac" );
134
+ // Loop through norm values and check them
135
+ const amrex::Real tol = amr_wind::constants::TIGHT_TOL;
136
+ for (int n = 0 ; n < 4 ; ++n) {
137
+ EXPECT_NEAR (field_norms ()[n], check_val, tol * check_val * 0.1 );
138
+ }
124
139
}
125
140
126
141
} // namespace
@@ -473,4 +488,66 @@ TEST_F(FieldNormsTest, levelmask_on_int_refinement)
473
488
tool.check_output (unorm, vnorm, wnorm);
474
489
}
475
490
491
+ TEST_F (FieldNormsTest, levelmask_not_cc)
492
+ {
493
+ bool levelmask = true ;
494
+ // Set up parameters for domain
495
+ populate_parameters ();
496
+ // Set up parameters for refinement
497
+ setup_fieldrefinement ();
498
+ // Set up parameters for sampler
499
+ setup_fnorm (levelmask);
500
+ // Create mesh and initialize
501
+ reset_prob_domain ();
502
+ auto rmesh = FNRefinemesh ();
503
+ rmesh.initialize_mesh (0.0 );
504
+
505
+ // Repo and fields
506
+ auto & repo = rmesh.field_repo ();
507
+ auto & pressure = repo.declare_nd_field (" pressure" , 1 , 1 );
508
+ auto & u_mac = repo.declare_xf_field (" u_mac" , 1 , 1 );
509
+ auto & v_mac = repo.declare_yf_field (" v_mac" , 1 , 1 );
510
+ auto & w_mac = repo.declare_zf_field (" w_mac" , 1 , 1 );
511
+ auto & flag = repo.declare_field (m_fname, 1 , 1 );
512
+
513
+ // Set up scalar for determining refinement - all fine level
514
+ flag.setVal (2.0 * m_fref_val);
515
+
516
+ // Initialize mesh refiner and remesh
517
+ rmesh.init_refiner ();
518
+ rmesh.remesh ();
519
+
520
+ // Initialize pressure distribution and access sim
521
+ const amrex::Real fval = 10000.3 ;
522
+ pressure.setVal (fval);
523
+ u_mac.setVal (fval);
524
+ v_mac.setVal (fval);
525
+ w_mac.setVal (fval);
526
+ auto & rsim = rmesh.sim ();
527
+
528
+ // Initialize IOManager because FieldNorms relies on it
529
+ auto & io_mgr = rsim.io_manager ();
530
+ // Set up output (plot) variables
531
+ io_mgr.register_output_var (" pressure" );
532
+ io_mgr.register_output_var (" u_mac" );
533
+ io_mgr.register_output_var (" v_mac" );
534
+ io_mgr.register_output_var (" w_mac" );
535
+ io_mgr.initialize_io ();
536
+
537
+ // Initialize sampler and check result on initial mesh
538
+ FieldNormsImpl tool (rsim, " fieldnorm" );
539
+ tool.initialize ();
540
+ tool.output_actions ();
541
+ // Only highest level will be counted
542
+ tool.check_output (fval);
543
+
544
+ // Turn off refinements
545
+ flag.setVal (0.0 );
546
+ rmesh.remesh ();
547
+
548
+ // Check again
549
+ tool.output_actions ();
550
+ tool.check_output (fval);
551
+ }
552
+
476
553
} // namespace amr_wind_tests
0 commit comments