![]() |
Mesh Oriented datABase
(version 5.4.1)
Array-based unstructured mesh datastructure
|
00001 /**
00002 * MOAB, a Mesh-Oriented datABase, is a software component for creating,
00003 * storing and accessing finite element mesh data.
00004 *
00005 * Copyright 2004 Sandia Corporation. Under the terms of Contract
00006 * DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government
00007 * retains certain rights in this software.
00008 *
00009 * This library is free software; you can redistribute it and/or
00010 * modify it under the terms of the GNU Lesser General Public
00011 * License as published by the Free Software Foundation; either
00012 * version 2.1 of the License, or (at your option) any later version.
00013 *
00014 */
00015
00016 #include
00017 #include
00018 #include
00019 #include "mhdf.h"
00020 #include "util.h"
00021 #include "file-handle.h"
00022 #include "status.h"
00023 #include "names-and-paths.h"
00024
00025 int mhdf_haveAdjacency( mhdf_FileHandle file, const char* elem_group, mhdf_Status* status )
00026 {
00027 FileHandle* file_ptr;
00028 hid_t elem_id;
00029 int result;
00030 API_BEGIN;
00031
00032 file_ptr = (FileHandle*)( file );
00033 if( !mhdf_check_valid_file( file_ptr, status ) ) return -1;
00034
00035 if( elem_group == mhdf_node_type_handle() )
00036 {
00037 #if defined( H5Gopen_vers ) && H5Gopen_vers > 1
00038 elem_id = H5Gopen( file_ptr->hdf_handle, NODE_GROUP, H5P_DEFAULT );
00039 #else
00040 elem_id = H5Gopen( file_ptr->hdf_handle, NODE_GROUP );
00041 #endif
00042 if( elem_id < 0 )
00043 {
00044 mhdf_setFail( status, "H5Gopen( \"%s\" ) failed.\n", NODE_GROUP );
00045 return -1;
00046 }
00047 }
00048 else
00049 {
00050 elem_id = mhdf_elem_group_from_handle( file_ptr, elem_group, status );
00051 if( elem_id < 0 ) return -1;
00052 }
00053
00054 result = mhdf_is_in_group( elem_id, ADJACENCY_NAME, status );
00055 H5Gclose( elem_id );
00056 mhdf_setOkay( status );
00057 API_END;
00058 return result;
00059 }
00060
00061 hid_t mhdf_createAdjacency( mhdf_FileHandle file, const char* elem_handle, long adj_list_size, mhdf_Status* status )
00062 {
00063 FileHandle* file_ptr;
00064 hid_t elem_id, table_id;
00065 hsize_t dim = (hsize_t)adj_list_size;
00066 API_BEGIN;
00067
00068 file_ptr = (FileHandle*)( file );
00069 if( !mhdf_check_valid_file( file_ptr, status ) ) return -1;
00070
00071 if( adj_list_size < 1 )
00072 {
00073 mhdf_setFail( status, "Invalid argument.\n" );
00074 return -1;
00075 }
00076
00077 if( elem_handle == mhdf_node_type_handle() )
00078 {
00079 table_id = mhdf_create_table( file_ptr->hdf_handle, NODE_ADJCY_PATH, file_ptr->id_type, 1, &dim, status );
00080 }
00081 else
00082 {
00083 elem_id = mhdf_elem_group_from_handle( file_ptr, elem_handle, status );
00084 if( elem_id < 0 ) return -1;
00085
00086 table_id = mhdf_create_table( elem_id, ADJACENCY_NAME, file_ptr->id_type, 1, &dim, status );
00087 H5Gclose( elem_id );
00088 }
00089
00090 API_END_H( 1 );
00091 return table_id;
00092 }
00093
00094 hid_t mhdf_openAdjacency( mhdf_FileHandle file, const char* elem_handle, long* adj_list_size_out, mhdf_Status* status )
00095
00096 {
00097 FileHandle* file_ptr;
00098 hid_t elem_id, table_id;
00099 hsize_t dim;
00100 API_BEGIN;
00101
00102 file_ptr = (FileHandle*)( file );
00103 if( !mhdf_check_valid_file( file_ptr, status ) ) return -1;
00104
00105 if( !adj_list_size_out )
00106 {
00107 mhdf_setFail( status, "Invalid argument.\n" );
00108 return -1;
00109 }
00110
00111 if( elem_handle == mhdf_node_type_handle() )
00112 {
00113 table_id = mhdf_open_table( file_ptr->hdf_handle, NODE_ADJCY_PATH, 1, &dim, status );
00114 }
00115 else
00116 {
00117 elem_id = mhdf_elem_group_from_handle( file_ptr, elem_handle, status );
00118 if( elem_id < 0 ) return -1;
00119 table_id = mhdf_open_table( elem_id, ADJACENCY_NAME, 1, &dim, status );
00120 H5Gclose( elem_id );
00121 }
00122
00123 *adj_list_size_out = (long)dim;
00124 API_END_H( 1 );
00125 return table_id;
00126 }
00127
00128 void mhdf_writeAdjacency( hid_t table_id, long offset, long count, hid_t type, const void* data, mhdf_Status* status )
00129 {
00130 API_BEGIN;
00131 mhdf_write_data( table_id, offset, count, type, data, H5P_DEFAULT, status );
00132 API_END;
00133 }
00134
00135 void mhdf_writeAdjacencyWithOpt( hid_t table_id,
00136 long offset,
00137 long count,
00138 hid_t type,
00139 const void* data,
00140 hid_t prop,
00141 mhdf_Status* status )
00142 {
00143 API_BEGIN;
00144 mhdf_write_data( table_id, offset, count, type, data, prop, status );
00145 API_END;
00146 }
00147
00148 void mhdf_readAdjacency( hid_t table_id, long offset, long count, hid_t type, void* data, mhdf_Status* status )
00149 {
00150 API_BEGIN;
00151 mhdf_read_data( table_id, offset, count, type, data, H5P_DEFAULT, status );
00152 API_END;
00153 }
00154 void mhdf_readAdjacencyWithOpt( hid_t table_id,
00155 long offset,
00156 long count,
00157 hid_t type,
00158 void* data,
00159 hid_t prop,
00160 mhdf_Status* status )
00161 {
00162 API_BEGIN;
00163 mhdf_read_data( table_id, offset, count, type, data, prop, status );
00164 API_END;
00165 }