-
Notifications
You must be signed in to change notification settings - Fork 29
Description
I have a model with several variables including a few text variables:
netcdf result {
dimensions:
num_qa_rec = 1 ;
four = 4 ;
len_string = 33 ;
num_info = 433 ;
len_line = 81 ;
len_name = 101 ;
num_dim = 3 ;
time_step = UNLIMITED ; // (0 currently)
num_nodes = 148977 ;
num_elem = 796986 ;
num_el_blk = 3 ;
num_side_sets = 25 ;
num_el_in_blk2 = 791921 ;
num_nod_per_el2 = 4 ;
num_el_in_blk3 = 5065 ;
num_nod_per_el3 = 4 ;
num_side_ss2 = 24564 ;
num_side_ss5 = 11888 ;
num_side_ss9 = 72 ;
num_side_ss12 = 156 ;
num_side_ss14 = 779 ;
num_side_ss15 = 515 ;
num_side_ss17 = 24540 ;
num_side_ss21 = 36 ;
num_side_ss25 = 1894 ;
num_elem_maps = 1 ;
variables:
char qa_records(num_qa_rec, four, len_string) ;
char info_records(num_info, len_line) ;
double time_whole(time_step) ;
int node_num_map(num_nodes) ;
int elem_num_map(num_elem) ;
int eb_status(num_el_blk) ;
int eb_prop1(num_el_blk) ;
eb_prop1:name = "ID" ;
char eb_names(num_el_blk, len_name) ;
int ss_status(num_side_sets) ;
int ss_prop1(num_side_sets) ;
ss_prop1:name = "ID" ;
char ss_names(num_side_sets, len_name) ;
double coordx(num_nodes) ;
double coordy(num_nodes) ;
double coordz(num_nodes) ;
char coor_names(num_dim, len_name) ;
int connect2(num_el_in_blk2, num_nod_per_el2) ;
connect2:elem_type = "tetra4" ;
int connect3(num_el_in_blk3, num_nod_per_el3) ;
connect3:elem_type = "tetra4" ;
int elem_ss2(num_side_ss2) ;
int side_ss2(num_side_ss2) ;
int elem_ss5(num_side_ss5) ;
int side_ss5(num_side_ss5) ;
int elem_ss9(num_side_ss9) ;
int side_ss9(num_side_ss9) ;
int elem_ss12(num_side_ss12) ;
int side_ss12(num_side_ss12) ;
int elem_ss14(num_side_ss14) ;
int side_ss14(num_side_ss14) ;
int elem_ss15(num_side_ss15) ;
int side_ss15(num_side_ss15) ;
int elem_ss17(num_side_ss17) ;
int side_ss17(num_side_ss17) ;
int elem_ss21(num_side_ss21) ;
int side_ss21(num_side_ss21) ;
int elem_ss25(num_side_ss25) ;
int side_ss25(num_side_ss25) ;
int em_prop1(num_elem_maps) ;
em_prop1:name = "ID" ;
char emap_names(num_elem_maps, len_name) ;
emap_names:_FillValue = "" ;
int elem_map1(num_elem) ;
The values in the eb_names, ss_names, and coor_names are correct if I ncdump the file following outputting them and prior to a subsequent nc_redef/nc_enddef cycle. Here are some of the values prior to calling nc_enddef
eb_names =
"block_1",
"block_1_air",
"block_1_fluid" ;
ss_names =
"surface_1",
"surface_1_air",
"surface_1_fluid",
"surface_2",
"surface_2_air",
"surface_2_fluid",
"surface_3",
"surface_3_air",
"surface_3_fluid",
"surface_4",
"surface_44",
"surface_44_air",
"surface_44_fluid",
"surface_4_air",
"surface_4_fluid",
"surface_5",
"surface_5_air",
"surface_5_fluid",
"surface_6",
"surface_66",
"surface_66_air",
"surface_66_fluid",
"surface_6_air",
"surface_6_fluid",
"surface_air_fluid" ;
The values remain as above up until the next time that nc_enddef is called and then they look like:
eb_names =
"block_1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001",
"\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\001\000\000\000\001\000\000\000\000\000\000\000\001",
"block_1_fluid" ;
ss_names =
"surface_1",
"surface_1_air",
"surface_1_fluid",
"surface_2",
"surface_2_air",
"surface_2_fluid",
"surface_3",
"surface_3_air",
"surface_3_fluid",
"surface_4",
"surface_44",
"surface_44_air",
"surface_44_f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000surface_5",
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000surface_5_air",
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000surface_5_flui",
"d\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000surface_6",
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000surface_66",
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000surface_66_air",
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000surface_66_flu",
"id\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000surface_6_air",
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000surface_6_flui",
"d\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000surface_air_fl",
"uid",
"",
"" ;
This is being run on 16 mpi ranks, but I get similar behavior on different rank counts. If I change the netCDF format to be netcdf4, then it runs correctly.
I have tried the following and all give similar results:
- all ranks outputting the same data in collective mode nc_put_var_text
- rank 0 outputs valid data, all other ranks call output function, but output nothing, collective mode, nc_put_vara_text
- rank 0 outputs valid data. Other ranks do not call output function. independent mode
It looks like the issue is due to some bad behavior during the nc_enddef call, but it could also be that I have some option set incorrectly.
This always happens on this particular file, but we have many other instances where the char data is not corrupted, so it seems related to something particular about this data.
This is with PnetCDF-1.13.0, netCDF-4.9.2, Open MPI v4.1.6,