yt_get_FieldsPtr – Set Field Information

yt_get_FieldsPtr

int yt_get_FieldsPtr( yt_field **field_list )
  • Usage: Get the yt_field array pointer where libyt access fields information from. Each MPI rank should call this function and fill them in. If you don’t have any fields, then skip this.

  • Return: YT_SUCCESS or YT_FAIL

Every MPI rank must call this API and fill in the field information in the same order. libyt does not broadcast and sync information here.

yt_field

  • const char* field_name (Default=NULL)

    • Usage: Field name. It should be unique.

    Make sure the lifetime of field_name covers the whole in situ analysis process. libyt only borrows this name and does not make a copy.

  • const char* field_type (Default="cell-centered")

    • Usage: Define type of the field.

    • Valid Value:

      • "cell-centered": Cell-centered data.

      • "face-centered": Face-centered data. For more details, see Face-Centered Field.

      • "derived_func": Derived field data. Simulation code will generate data when it is called by Python using user-provided C function. See Derived Field.

    Please make sure the lifetime of field_type covers the whole in situ analysis process. libyt does not make a copy.

  • short field_ghost_cell[6] (Default=0)

    • Usage: Number of ghost cell to be ignored at the beginning and the end of each dimension. This is from the point of view of the data array.
      field_ghost_cell[0]: Number of ghost cell to be ignored at the beginning of 0-dim of the data.
      field_ghost_cell[1]: Number of ghost cell to be ignored at the end of 0-dim of the data.
      field_ghost_cell[2]: Number of ghost cell to be ignored at the beginning of 1-dim of the data.
      field_ghost_cell[3]: Number of ghost cell to be ignored at the end of 1-dim of the data.
      field_ghost_cell[4]: Number of ghost cell to be ignored at the beginning of 2-dim of the data.
      field_ghost_cell[5]: Number of ghost cell to be ignored at the end of 2-dim of the data.

    • Valid Value: Must be greater than or equal to 0.

  • yt_dtype field_dtype (Default=YT_DTYPE_UNKNOWN)

    • Usage: Data type of the field.

    • Valid Value: yt_dtype

  • bool contiguous_in_x (Default=true)

    • Usage: Is the 3D data array define as [z][y][x], which is x address alters first.

    • Valid Value:

      • true: Data is in x-address alters first orientation, which is [z][y][x].

      • false: Data is in z-address alters first orientation, which is [x][y][z].

  • void (*derived_func) (const int, const long *, const char *, yt_array*) (Default=NULL)

    • Usage: Function pointer to generate derived field data when input grid id. This is only used in derived field (field_type="derived_func"). See Derived Field.

  • const char* field_unit (Default="")

    • Usage: Unit of the field, using yt unit system.

    Make sure the lifetime of field_unit covers yt_commit.

  • int num_field_name_alias (Default=0)

    • Usage: Number of name aliases in field_name_alias.

  • const char** field_name_alias (Default=NULL)

    • Usage: Name aliases.

    Please make sure the lifetime of field_name_alias covers yt_commit.

  • const char* field_display_name (Default=NULL)

    • Usage: Display name of the field on the output figure. If not set, yt uses its field name instead.

    Please make sure the lifetime of field_display_name covers yt_commit.

libyt borrows the full field information class (class XXXFieldInfo) from frontend. It is OK not to set a field’s field_unit, num_field_name_alias, field_name_alias, field_display_name, if this field_name is already defined inside the frontend. If you are adding a totally new field, do add them. libyt will add these new field information alongside with your original one.

Refer to Naming and Field Information for how field names and yt fields are linked and reused.

Example

/* libyt API */  
yt_field *field_list;
yt_get_FieldsPtr( &field_list );

// cell-centered type field "Dens" 
field_list[0].field_name = "Dens";  
field_list[0].field_type = "cell-centered";  
field_list[0].field_dtype = ( typeid(real) == typeid(float) ) ? YT_FLOAT : YT_DOUBLE;  
const char *field_name_alias[] = {"Name Alias 1", "Name Alias 2", "Name Alias 3"};  
field_list[0].field_name_alias = field_name_alias;  
field_list[0].num_field_name_alias = 3;  
for(int d = 0; d < 6; d++){
    field_list[0].field_ghost_cell[d] = GHOST_CELL;  
}