00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #if !defined( SED_CUBE_H )
00022 #define SED_CUBE_H
00023
00024 #include <glib.h>
00025 #include "utils/utils.h"
00026
00027 #include "sed_sediment.h"
00028 #include "sed_cell.h"
00029 #include "sed_column.h"
00030 #include "sed_const.h"
00031 #include "sed_hydro.h"
00032 #include "sed_wave.h"
00033 #include "sed_river.h"
00034
00035 typedef enum
00036 {
00037 SED_CUBE_ERROR_NO_TIME_LABEL ,
00038 SED_CUBE_ERROR_TIME_NOT_MONOTONIC ,
00039 SED_CUBE_ERROR_NOT_TWO_COLUMNS ,
00040 SED_CUBE_ERROR_INSUFFICIENT_DATA ,
00041 SED_CUBE_ERROR_DATA_NOT_MONOTONIC ,
00042 SED_CUBE_ERROR_DATA_BAD_RANGE ,
00043
00044 SED_CUBE_ERROR_TOO_FEW_ROWS ,
00045 SED_CUBE_ERROR_TOO_FEW_COLUMNS ,
00046 SED_CUBE_ERROR_BAD_GRID_DIMENSION ,
00047 SED_CUBE_ERROR_TRUNCATED_FILE
00048 }
00049 Sed_cube_error;
00050
00051 #define SED_CUBE_SUSP_GRID sed_cube_susp_grid_quark()
00052 #define SED_CUBE_ERROR sed_cube_error_quark()
00053
00054 GQuark sed_cube_error_quark ( void );
00055 GQuark sed_cube_susp_grid_quark( void );
00056
00057 typedef enum
00058 {
00059 SEDFLUX_MODE_3D ,
00060 SEDFLUX_MODE_2D ,
00061 SEDFLUX_MODE_NOT_SET
00062 }
00063 Sedflux_mode;
00064
00065 void sed_mode_set ( Sedflux_mode mode );
00066 gboolean sed_mode_is ( Sedflux_mode mode );
00067 gboolean sed_mode_is_2d( void );
00068 gboolean sed_mode_is_3d( void );
00069
00073 typedef struct
00074 {
00075 double angle;
00076 int x;
00077 int y;
00078 double min_angle;
00079 double max_angle;
00080 double std_dev;
00081 }
00082 Sed_hinge_pt;
00083
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099 new_handle( Sed_cube );
00100
00101 typedef double (*Sed_grid_func) ( const Sed_cube , gssize , gssize );
00102 typedef gboolean (*Sed_cube_func) ( const Sed_cube , gssize , gssize , gpointer );
00103
00104 #define S_X_FUNC (&sed_cube_col_x_ij)
00105 #define S_Y_FUNC (&sed_cube_col_y_ij)
00106 #define S_X_SLOPE_FUNC (&sed_cube_x_slope)
00107 #define S_Y_SLOPE_FUNC (&sed_cube_y_slope)
00108 #define S_SLOPE_DIR_FUNC (&sed_cube_slope_dir)
00109 #define S_THICKNESS_FUNC (&sed_cube_thickness)
00110 #define S_ELEVATION_FUNC (&sed_cube_elevation)
00111 #define S_WATER_DEPTH_FUNC (&sed_cube_water_depth)
00112 #define S_LOAD_FUNC (&sed_cube_load)
00113
00114 Sed_cube sed_cube_new( gssize n_x , gssize n_y );
00115 Sed_cube sed_cube_new_from_file( const gchar* file , GError** error );
00116 Sed_cube sed_cube_new_empty( gssize n_x , gssize n_y );
00117 Sed_cube sed_cube_free( Sed_cube c , gboolean free_data );
00118 Sed_cube sed_cube_free_river( Sed_cube p );
00119 Sed_cube sed_cube_destroy( Sed_cube s );
00120 Sed_cube sed_cube_copy_pointer_data( Sed_cube dest , const Sed_cube src );
00121 Sed_cube sed_cube_copy_scalar_data( Sed_cube dest , const Sed_cube src );
00122 Sed_cell_grid sed_cube_create_in_suspension( Sed_cube s );
00123 Sed_cell_grid sed_cube_destroy_in_suspension( Sed_cell_grid g );
00124 gchar* sed_cube_name( const Sed_cube s );
00125 GSList* sed_cube_storm_list( Sed_cube c );
00126 Sed_cube sed_cube_set_storm_list( Sed_cube c , GSList *storms );
00127 Sed_cube sed_cube_adjust_sea_level( Sed_cube s , double dz );
00128 Sed_cube sed_cube_destroy_storm_list( Sed_cube c );
00129 Sed_cube sed_cube_set_bathy( Sed_cube c , Eh_dbl_grid g );
00130 Sed_cube sed_cube_set_dz( Sed_cube p , double new_dz );
00131 gssize sed_cube_size( const Sed_cube s );
00132 gssize sed_cube_n_x( const Sed_cube s );
00133 gssize sed_cube_n_y( const Sed_cube s );
00134
00135 Sed_column sed_cube_col ( const Sed_cube s , gssize ind );
00136 Sed_column sed_cube_col_ij ( const Sed_cube s , gssize i , gssize j );
00137 Sed_column sed_cube_col_pos( const Sed_cube s , double x , double y );
00138
00139 double sed_cube_sea_level( const Sed_cube s );
00140 double *sed_cube_x( const Sed_cube s , gssize *id );
00141 double *sed_cube_y( const Sed_cube s , gssize *id );
00142 double sed_cube_col_x( const Sed_cube s , gssize id );
00143 double sed_cube_col_y( const Sed_cube s , gssize id );
00144 double sed_cube_col_x_ij( const Sed_cube s , gssize i , gssize j );
00145 double sed_cube_col_y_ij( const Sed_cube s , gssize i , gssize j );
00146 double sed_cube_x_slope( const Sed_cube s , gssize i , gssize j );
00147 double sed_cube_y_slope( const Sed_cube s , gssize i , gssize j );
00148 double sed_cube_slope( const Sed_cube s , gssize i , gssize j );
00149 double sed_cube_slope_dir( const Sed_cube s , gssize i , gssize j );
00150 double sed_cube_top_height(const Sed_cube p , gssize i , gssize j );
00151 Eh_ind_2 ind2sub( gssize ind , gssize n_x , gssize n_y );
00152 Eh_dbl_grid sed_cube_grid( const Sed_cube s ,
00153 Sed_grid_func f ,
00154 gssize *index );
00155 Eh_dbl_grid sed_cube_slope_dir_grid( const Sed_cube s , gssize *index );
00156 Eh_dbl_grid sed_cube_x_slope_grid( const Sed_cube s , gssize *index );
00157 Eh_dbl_grid sed_cube_y_slope_grid( const Sed_cube s , gssize *index );
00158 double sed_cube_time_step( const Sed_cube s );
00159 double sed_cube_time_step_in_years( const Sed_cube s );
00160 double sed_cube_time_step_in_seconds( const Sed_cube s );
00161 double sed_cube_time_step_in_days( const Sed_cube s );
00162 Sed_constants sed_cube_constants( const Sed_cube s );
00163 double sed_cube_x_res( const Sed_cube s );
00164 double sed_cube_y_res( const Sed_cube s );
00165 double sed_cube_z_res( const Sed_cube s );
00166 Sed_cell sed_cube_to_remove( const Sed_cube s );
00167 Sed_cell sed_cube_to_add( const Sed_cube s );
00168 gssize sed_get_column_x_index( const Sed_cube c , double x );
00169 gssize sed_get_column_y_index( const Sed_cube c , double y );
00170 double sed_cube_wave_height( const Sed_cube s );
00171 double sed_cube_wave_period( const Sed_cube s );
00172 double sed_cube_wave_length( const Sed_cube s );
00173 double sed_cube_storm( const Sed_cube s );
00174 double sed_cube_quake( const Sed_cube s );
00175 double sed_cube_age( const Sed_cube s );
00176 double sed_cube_age_in_years( const Sed_cube s );
00177 double sed_cube_tidal_period( const Sed_cube s );
00178 Sed_cube sed_cube_set_tidal_period( Sed_cube s , double new_val );
00179 double sed_cube_tidal_range( const Sed_cube s );
00180 Sed_cube sed_cube_set_tidal_range( Sed_cube s , double new_val );
00181 double sed_cube_water_depth(const Sed_cube p , gssize i , gssize j );
00182 double sed_cube_load(const Sed_cube p , gssize i , gssize j );
00183 double sed_cube_water_pressure( const Sed_cube p , gssize i , gssize j );
00184 double sed_cube_thickness( const Sed_cube p , gssize i , gssize j );
00185 gboolean sed_cube_col_is_empty( const Sed_cube p , gssize i , gssize j );
00186 double sed_cube_base_height( const Sed_cube p , gssize i , gssize j );
00187
00188 Sed_cube sed_cube_dup( Sed_cube c );
00189 Sed_cube sed_cube_copy( Sed_cube dest , const Sed_cube src );
00190 Sed_cube sed_cube_copy_cols( const Sed_cube src , gssize* x , gssize* y , double* z , gssize len );
00191 Sed_cube sed_cube_copy_line( const Sed_cube src , double *x , double *y , double *z , gssize len );
00192 Sed_cube sed_cube_cols( Sed_cube src , gssize *path );
00193 gssize sed_cube_river_mouth_1d( Sed_cube c );
00194 Sed_cube sed_cube_remove( Sed_cube dest , Sed_cube src );
00195 Sed_cube sed_cube_add( Sed_cube dest , const Sed_cube src );
00196
00197
00198 double sed_cube_mass ( const Sed_cube p );
00199 double sed_cube_sediment_mass ( const Sed_cube p );
00200 double sed_cube_mass_in_suspension( const Sed_cube p );
00201 Sed_cube sed_cube_set_sea_level( Sed_cube s , double new_sea_level );
00202 Sed_cube sed_cube_set_base_height( Sed_cube s , gssize i , gssize j , double height );
00203 Sed_cube sed_cube_adjust_base_height( Sed_cube s , gssize i , gssize j , double dz );
00204 Sed_cube sed_cube_set_nth_river ( Sed_cube s , gssize n , Sed_riv river );
00205 Eh_pt_2* sed_cube_river_mouth_position ( Sed_cube s , Sed_riv this_river );
00206 Sed_hydro sed_cube_river_data( Sed_cube s , GList *this_river );
00207
00208
00209
00210
00211
00212 Sed_cube sed_cube_set_river_list( Sed_cube s , GList* river_list ) G_GNUC_DEPRECATED;
00213
00214
00215 Sed_cube sed_cube_split_river( Sed_cube s , const gchar* name );
00216 void sed_river_attach_susp_grid( Sed_riv r , Sed_cell_grid g );
00217 Sed_cell_grid sed_river_get_susp_grid( Sed_riv r );
00218 void sed_river_detach_susp_grid( Sed_riv r );
00219 Sed_cube sed_cube_add_trunk( Sed_cube s , Sed_riv new_trunk );
00220 Sed_cube sed_cube_remove_river( Sed_cube s , Sed_riv r );
00221 Sed_cube sed_cube_remove_all_trunks( Sed_cube s );
00222
00223 Sed_cube sed_cube_set_name( Sed_cube s , char *name );
00224 Sed_cube sed_cube_set_time_step( Sed_cube s , double time_step_in_years );
00225 Sed_cube set_cube_set_constants( Sed_cube s , Sed_constants new_c );
00226 Sed_cube sed_cube_set_x_res( Sed_cube s , double new_x_res );
00227 Sed_cube sed_cube_set_y_res( Sed_cube s , double new_x_res );
00228 Sed_cube sed_cube_set_z_res( Sed_cube s , double new_x_res );
00229 Sed_cube sed_cube_set_wave_height( Sed_cube s , double new_wave_height );
00230 Sed_cube sed_cube_set_wave_period( Sed_cube s , double new_wave_period );
00231 Sed_cube sed_cube_set_wave_length( Sed_cube s , double new_wave_length );
00232 Sed_cube sed_cube_set_storm( Sed_cube s , double new_storm_value );
00233 Sed_cube sed_cube_set_quake( Sed_cube s , double new_quake_value );
00234 Sed_cube sed_cube_set_age( Sed_cube s , double new_age );
00235 Sed_cube sed_cube_adjust_age( Sed_cube s , double dt );
00236 Sed_cube sed_cube_increment_age( Sed_cube s );
00237
00238 Eh_dbl_grid sed_cube_water_depth_grid( const Sed_cube s , gssize *index );
00239 Eh_dbl_grid sed_cube_thickness_grid( const Sed_cube s , gssize *index );
00240 Eh_dbl_grid sed_cube_load_grid( const Sed_cube s , gssize *index );
00241
00242 Sed_riv sed_cube_river_by_name ( Sed_cube s , const char *name );
00243 Sed_riv sed_cube_nth_river ( Sed_cube s , gint n );
00244 gssize sed_cube_river_id ( Sed_cube s , Sed_riv river );
00245
00246
00247 Sed_cell_grid sed_cube_in_suspension( Sed_cube s , Sed_riv r );
00248
00249 GList* sed_cube_river_list ( Sed_cube s );
00250 Sed_riv* sed_cube_all_trunks ( Sed_cube s );
00251 Sed_riv* sed_cube_all_branches( Sed_cube s );
00252 Sed_riv* sed_cube_all_leaves ( Sed_cube s );
00253 Sed_riv* sed_cube_all_rivers ( Sed_cube s );
00254
00255 gssize sed_cube_number_of_rivers( Sed_cube s ) G_GNUC_DEPRECATED;
00256 gint sed_cube_n_branches ( Sed_cube s );
00257 gint sed_cube_n_rivers ( Sed_cube s );
00258
00259 Sed_cube sed_cube_add_trunk ( Sed_cube s , Sed_riv river );
00260
00261 Sed_cube sed_load_cube( FILE *fp );
00262 gssize sed_cube_column_id( const Sed_cube c , double x , double y );
00263 void sed_set_shore( Sed_cube s );
00264 GList *sed_cube_find_shore_line( Sed_cube s , Eh_ind_2 *pos );
00265
00266 Sed_riv sed_cube_find_river_mouth( Sed_cube c , Sed_riv this_river );
00267
00268 GList *sed_find_next_shore( GList *shore_list ,
00269 Sed_cube s ,
00270 Eh_ind_2 *pos ,
00271 GList *ignore_list );
00272 gboolean is_shore_cell( Sed_cube s , gssize x , gssize y );
00273 GList *sed_find_columns_custom( Sed_cube s ,
00274 gssize i ,
00275 gssize j ,
00276 gpointer data ,
00277 Sed_cube_func stop_func ,
00278 Sed_cube_func angle_func );
00279 GList *sed_cube_find_cross_shore_columns( Sed_cube s , gssize i , gssize j );
00280 Eh_ind_2 *sed_cube_find_shore( Sed_cube s , int n , int vary_dim );
00281
00282
00283
00284 Eh_ind_2 *sed_find_adjacent_shore_edge( Sed_cube s ,
00285 gssize i ,
00286 gssize j ,
00287 int edge );
00288 int sed_rotate_direction( int dir , int angle );
00289 gboolean sed_cube_is_shore_edge( Sed_cube s , gssize i , gssize j , int edge );
00290 Eh_ind_2 sed_shift_index_over_edge( gssize i , gssize j , int edge );
00291
00292
00293
00294 GTree *sed_create_shore_tree( GList *shore );
00295 gssize* sed_cube_river_path_id( Sed_cube c , Sed_riv river , gboolean down_stream );
00296 GList* sed_cube_river_path ( Sed_cube c , Sed_riv river );
00297 GList *sed_find_river_path( Sed_cube c ,
00298 Eh_ind_2 *hinge_pos ,
00299 double angle );
00300 Eh_ind_2 *sed_find_river_mouth( Sed_cube c ,
00301 Eh_ind_2 *hinge_pos ,
00302 double angle );
00303 Eh_ind_2 get_offset_from_angle( double angle , double aspect );
00304
00305 int get_path_exit_side( Eh_pt_2 pos_in_box , double angle , double dx , double dy );
00306
00307
00308 int is_river_mouth( Eh_ind_2 *shore_pos , Sed_hinge_pt* dir );
00309 Eh_ind_2 get_offset_from_angle( double angle , double aspect );
00310 Eh_pt_2 get_path_exit_pos( Eh_pt_2 pos_in_box , double angle , double dx , double dy );
00311 Eh_pt_2 get_path_entrance_pos( Eh_pt_2 exit_pos , double dx , double dy );
00312 Eh_ind_2 get_shift_from_exit_pos( Eh_pt_2 exit_pos , double dx , double dy );
00313 GList *sed_get_river_path( Sed_cube c , GList *river );
00314 GList *sed_cube_find_line_path( Sed_cube c ,
00315 Eh_ind_2 *hinge_pos ,
00316 double angle );
00317
00318 double sed_cube_river_angle( Sed_cube c , GList *river );
00319
00320 Eh_dbl_grid sed_get_floor_3_default( int floor_type , int n_x , int n_y );
00321 double** sed_scan_sea_level_curve( const char* file , gint* len , GError** err );
00322
00323 typedef enum
00324 {
00325 SED_BATHY_FILE_TYPE_2D_ASCII ,
00326 SED_BATHY_FILE_TYPE_2D_BINARY ,
00327 SED_BATHY_FILE_TYPE_1D_ASCII
00328 }
00329 Sed_bathy_type;
00330
00331
00332 Eh_dbl_grid sed_bathy_grid_scan ( const char* file ,
00333 double dx ,
00334 double dy ,
00335 GError** error );
00336 Eh_dbl_grid sed_bathy_grid_scan_2d_binary( const char* file ,
00337 double dx ,
00338 double dy ,
00339 GError** error );
00340 Eh_dbl_grid sed_bathy_grid_scan_2d_ascii ( const char* file ,
00341 double dx ,
00342 double dy ,
00343 GError** error );
00344 Eh_dbl_grid sed_bathy_grid_scan_1d_ascii ( const char* file ,
00345 double dx ,
00346 double dy ,
00347 GError** error );
00348
00349 Eh_sequence *sed_get_floor_sequence_2( const char *file ,
00350 double *y ,
00351 gssize n_y ,
00352 GError** err );
00353 Eh_sequence *sed_get_floor_sequence_3( const char *file ,
00354 double dx ,
00355 double dy ,
00356 GError** error );
00357
00358 Sed_cube sed_cube_foreach_river( Sed_cube c , GFunc func , gpointer user_data );
00359
00360 Sed_cube sed_cube_find_all_river_mouths( Sed_cube c );
00361
00362 gssize sed_cube_write(FILE *fp,const Sed_cube p);
00363 Sed_cube sed_cube_read( FILE *fp );
00364
00365 gssize *sed_cube_find_column_below( Sed_cube c , double z );
00366 gssize *sed_cube_find_column_above( Sed_cube c , double z );
00367
00368 int sed_get_floor_vec ( char *filename , double *x , int len , double *y , GError** error ) G_GNUC_DEPRECATED;
00369 GArray* sed_get_floor ( char *filename , GArray *x , GError** error ) G_GNUC_DEPRECATED;
00370
00371 gssize sed_cube_id ( Sed_cube p , gssize i , gssize j );
00372 Eh_ind_2 sed_cube_sub( Sed_cube p , gssize id );
00373 gboolean sed_cube_is_in_domain ( Sed_cube p , gssize i , gssize j );
00374 gboolean sed_cube_is_in_domain_id ( Sed_cube p , gssize id );
00375 gboolean sed_cube_is_in_domain_pos( Sed_cube p , double x , double y );
00376 gboolean sed_cube_is_1d( Sed_cube p );
00377
00378 gssize sed_cube_fprint( FILE* fp , Sed_cube c );
00379
00380 Sed_cell sed_cube_to_cell( Sed_cube c , Sed_cell d );
00381
00382 gint sed_cube_count_above( Sed_cube c , double h );
00383 double sed_cube_area_above ( Sed_cube c , double h );
00384
00385 #endif
00386