op_dat op_decl_dat_temp_char (op_set set, int dim, char const * type, int size, char const *name ) { char* data = NULL; op_dat dat = op_decl_dat_temp_core ( set, dim, type, size, data, name ); dat->data = (char*) calloc(set->size*dim*size, 1); //initialize data bits to 0 dat-> user_managed = 0; return dat; }
op_dat op_decl_dat_temp_char(op_set set, int dim, char const * type, int size, char const *name ) { char* d = NULL; op_dat dat = op_decl_dat_temp_core ( set, dim, type, size, d, name ); //create empty data block to assign to this temporary dat (including the halos) int halo_size = OP_import_exec_list[set->index]->size + OP_import_nonexec_list[set->index]->size; dat->data = (char*) calloc((set->size+halo_size)*dim*size, 1); //initialize data bits to 0 dat-> user_managed = 0; //need to allocate mpi_buffers for this new temp_dat op_mpi_buffer mpi_buf= (op_mpi_buffer)xmalloc(sizeof(op_mpi_buffer_core)); halo_list exec_e_list = OP_export_exec_list[set->index]; halo_list nonexec_e_list = OP_export_nonexec_list[set->index]; mpi_buf->buf_exec = (char *)xmalloc((exec_e_list->size)*dat->size); mpi_buf->buf_nonexec = (char *)xmalloc((nonexec_e_list->size)*dat->size); halo_list exec_i_list = OP_import_exec_list[set->index]; halo_list nonexec_i_list = OP_import_nonexec_list[set->index]; mpi_buf->s_req = (MPI_Request *)xmalloc(sizeof(MPI_Request)* (exec_e_list->ranks_size + nonexec_e_list->ranks_size)); mpi_buf->r_req = (MPI_Request *)xmalloc(sizeof(MPI_Request)* (exec_i_list->ranks_size + nonexec_i_list->ranks_size)); mpi_buf->s_num_req = 0; mpi_buf->r_num_req = 0; dat->mpi_buffer = mpi_buf; return dat; }