Helper function for reading data from NetCDF file into a provided FAB.
258 int ns1 = 0, ns2 = 0, ns3 = 0;
260 ns1 = nc_arrays[iv].get_vshape()[1];
266 ns2 = nc_arrays[iv].get_vshape()[1];
267 ns3 = nc_arrays[iv].get_vshape()[2];
270 ns1 = nc_arrays[iv].get_vshape()[1];
271 ns2 = nc_arrays[iv].get_vshape()[2];
272 ns3 = nc_arrays[iv].get_vshape()[3];
275 ns1 = nc_arrays[iv].get_vshape()[1];
276 ns2 = nc_arrays[iv].get_vshape()[2];
277 ns3 = nc_arrays[iv].get_vshape()[3];
280 ns1 = nc_arrays[iv].get_vshape()[1];
286 amrex::Abort(
"fill_fab_from_arrays: variable " + var_name +
287 " has NC_Data_Dims_Type " + std::to_string(
static_cast<int>(NC_dim_type)) +
288 ", which this reader does not handle (only Time_BT, Time_SN_WE,"
289 " Time_BT_SN_WE, Time_SL_SN_WE and Time_SL)");
296 int khi = std::min(domain.bigEnd(2), ns1-1);
299 amrex::Box in_box(amrex::IntVect(0,0,0), amrex::IntVect(ns3-1,ns2-1,ns1-1));
300 amrex::Box my_box(amrex::IntVect(0,0,0), amrex::IntVect(ns3-1,ns2-1,
khi));
302 if (var_name ==
"PH" || var_name ==
"PHB") {
303 my_box.setType(amrex::IndexType(amrex::IntVect(0,0,1)));
304 my_box.setBig(2,
khi+1);
306 else if (var_name ==
"U" || var_name ==
"UU" || var_name ==
"MAPFAC_U") {
307 my_box.setType(amrex::IndexType(amrex::IntVect(1,0,0)));
309 else if (var_name ==
"V" || var_name ==
"VV" || var_name ==
"MAPFAC_V") {
310 my_box.setType(amrex::IndexType(amrex::IntVect(0,1,0)));
312 else if (var_name ==
"W" || var_name ==
"WW") {
313 my_box.setType(amrex::IndexType(amrex::IntVect(0,0,1)));
314 my_box.setBig(2,
khi+1);
316 else if (var_name ==
"TSLB" || var_name ==
"SMOIS" || var_name ==
"SH2O" || var_name ==
"ZS" || var_name ==
"DZS") {
318 my_box.setType(amrex::IndexType(amrex::IntVect(0,0,1)));
321 amrex::Arena*
Arena_Used = amrex::The_Arena();
327 amrex::Array4<DType> fab_arr = temp.array();
329 int ioff = temp.box().smallEnd()[0];
330 int joff = temp.box().smallEnd()[1];
331 int kmax = temp.box().bigEnd()[2];
334 auto num_pts = in_box.numPts();
336 for (
int n(0); n < num_pts; ++n) {
337 int k = n / (ns2*ns3);
338 if (k > kmax)
continue;
339 int j = (n - k*(ns2*ns3)) / ns3 + joff;
340 int i = n - k*(ns2*ns3) - (j-joff) * ns3 + ioff;
341 fab_arr(i,j,k,0) =
static_cast<DType
>(*(nc_arrays[iv].get_data()+n));
const int khi
Definition: ERF_InitCustomPert_Bubble.H:21
Arena * Arena_Used
Definition: ERF_Morrison_Advance_F.H:23