/Users/huttone/Devel/sedflux-new/sedflux/trunk/ew/sedutils/sedflux-make-bathy.c

Go to the documentation of this file.
00001 #include <glib.h>
00002 #include <utils/utils.h>
00003 #include <sed/sed_sedflux.h>
00004 
00005 static gchar*   out_file   = NULL;
00006 static double   slope      = .02;
00007 static gint     n_x        = 100;
00008 static gint     n_y        = 100;
00009 static double   x_res      = 1000.;
00010 static double   y_res      = 1000.;
00011 static gboolean big_endian    = FALSE;
00012 static gboolean little_endian = FALSE;
00013 static gboolean ascii         = FALSE;
00014 static gboolean version    = FALSE;
00015 static gint     verbosity  = 0;
00016 static gboolean debug      = FALSE;
00017 
00018 GOptionEntry entries[] =
00019 {
00020    { "out-file"      , 'o' , 0 , G_OPTION_ARG_FILENAME , &out_file      , "Output bathymetry file"        , "<file>" } ,
00021    { "slope"         , 's' , 0 , G_OPTION_ARG_DOUBLE   , &slope         , "Bathymetric slope"             , "SLOPE"  } ,
00022    { "nx"            , 'x' , 0 , G_OPTION_ARG_INT      , &n_x           , "Number of cell in x-dimension" , "NX"     } ,
00023    { "ny"            , 'y' , 0 , G_OPTION_ARG_INT      , &n_y           , "Number of cell in y-dimension" , "NY"     } ,
00024    { "x-res"         , 'X' , 0 , G_OPTION_ARG_DOUBLE   , &x_res         , "Cell size in x-dimension (m)"  , "DX"     } ,
00025    { "y-res"         , 'Y' , 0 , G_OPTION_ARG_DOUBLE   , &y_res         , "Cell size in y-dimension (m)"  , "DY"     } ,
00026    { "big-endian"    , 'b' , 0 , G_OPTION_ARG_NONE     , &big_endian    , "Byte order is big endian"      , NULL     } ,
00027    { "little-endian" , 'l' , 0 , G_OPTION_ARG_NONE     , &little_endian , "Byte order is little endian"   , NULL     } ,
00028    { "ascii"         , 'a' , 0 , G_OPTION_ARG_NONE     , &ascii         , "Space delimited ASCII output"  , NULL     } ,
00029    { "verbose"       , 'V' , 0 , G_OPTION_ARG_INT      , &verbosity     , "Verbosity level"               , "n"      } ,
00030    { "version"       , 'v' , 0 , G_OPTION_ARG_NONE     , &version       , "Version number"                , NULL     } ,
00031    { "debug"         , 'd' , 0 , G_OPTION_ARG_NONE     , &debug         , "Write debugging messages"      , NULL     } ,
00032    { NULL }
00033 };
00034 
00035 int main( int argc , char* argv[] )
00036 {
00037    GOptionContext* context = g_option_context_new( "Create a bathymetry file for sedflux-3d" );
00038    GError*         error   = NULL;
00039    FILE*           fp_out  = stdout;
00040    gint            byte_order = G_BYTE_ORDER;
00041 
00042    g_option_context_add_main_entries( context , entries , NULL );
00043 
00044    if ( !g_option_context_parse( context , &argc , &argv , &error ) )
00045       eh_error( "Error parsing command line arguments: %s" , error->message );
00046 
00047    if ( version )
00048       eh_fprint_version_info( stdout , "sedflux-make-bathy" , 0 , 9 , 0 ), exit(0);
00049 
00050    if ( debug )
00051       g_setenv( "SEDFLUX_MAKE_BATHY_DEBUG" , "TRUE" , TRUE );
00052 
00053    eh_set_verbosity_level( verbosity );
00054 
00055    if ( out_file )
00056       fp_out = eh_fopen_error( out_file , "w" , &error );
00057 
00058    if ( !fp_out )
00059       eh_error( "Error opening file: %s" , error->message );
00060 
00061    if      ( big_endian && little_endian )
00062       eh_error( "Byte order must be big endian or little endian" );
00063    else if ( !big_endian && !little_endian )
00064       byte_order = G_BYTE_ORDER;
00065    else if ( big_endian )
00066       byte_order = G_BIG_ENDIAN;
00067    else if ( little_endian )
00068       byte_order = G_LITTLE_ENDIAN;
00069 
00070    eh_message( "x-resolution (m)  : %f" , x_res );
00071    eh_message( "y-resolution (m)  : %f" , y_res );
00072    eh_message( "x-dimension       : %d" , n_x   );
00073    eh_message( "y-dimension       : %d" , n_y   );
00074    eh_message( "Bathymetric slope : %f" , slope   );
00075 
00076    if ( ascii )
00077    {
00078       eh_message( "Byte order        : %s" , "ASCII" );
00079       eh_message( "Format            : %s" , "Space-delimited" );
00080    }
00081    else
00082    {
00083       eh_message( "Byte order        : %s" , byte_order==G_BIG_ENDIAN?"Big-endian":"Little-endian" );
00084       eh_message( "Format            : %s" , "<32-bit-integer=N> <<64-bit-double*N> ... EOF>" );
00085    }
00086 
00087    {
00088       gint i, j;
00089       Eh_dbl_grid g = eh_grid_new( double , n_x , n_y );
00090 
00091       for ( i=0 ; i<n_x ; i++ )
00092          for ( j=0 ; j<n_y ; j++ )
00093             eh_dbl_grid_set_val( g , i , j , -slope*j*y_res );
00094 
00095       if      ( ascii )
00096          eh_dlm_print_dbl_grid( out_file , ", " , g , NULL );
00097       else if ( byte_order == G_BYTE_ORDER )
00098       {
00099          fwrite( &n_y                  , sizeof(gint32) , 1       , fp_out );
00100          fwrite( eh_grid_data_start(g) , sizeof(double) , n_x*n_y , fp_out );
00101       }
00102       else
00103       {
00104          eh_fwrite_int32_swap( &n_y                  , sizeof(gint32) , 1       , fp_out );
00105          eh_fwrite_dbl_swap  ( eh_grid_data_start(g) , sizeof(double) , n_x*n_y , fp_out );
00106       }
00107 
00108       eh_grid_destroy( g , TRUE );
00109    }
00110 
00111    fclose( fp_out );
00112 }
00113 

Generated on Fri Jan 4 18:04:16 2008 for sedflux by  doxygen 1.5.2