/Users/huttone/Devel/sedflux-new/sedflux/trunk/ew/sed/sed_diag.c

Go to the documentation of this file.
00001 #include <stdio.h>
00002 #include <glib.h>
00003 #include <sed/sed_diag.h>
00004 
00005 typedef enum
00006 {
00007    SED_DIAG_TARGET_CUBE = 0,
00008    SED_DIAG_TARGET_COLUMN  ,
00009    SED_DIAG_TARGET_CELL    ,
00010    SED_DIAG_TARGET_UNKNOWN ,
00011 } Sed_diag_type;
00012 
00013 CLASS ( Sed_diag )
00014 {
00015    Sed_cube   cube;
00016    Sed_column col;
00017    Sed_cell   cell;
00018 
00019    double     start;
00020    double     stop;
00021 
00022    Sed_diag_type type;
00023 };
00024 
00025 Sed_diag
00026 sed_diag_new( void )
00027 {
00028    Sed_diag d = NULL;
00029 
00030    NEW_OBJECT( Sed_diag , d );
00031 
00032    d->cube  = NULL;
00033    d->col   = NULL;
00034    d->cell  = NULL;
00035 
00036    d->start = 0;
00037    d->stop  = 0;
00038 
00039    d->type  = SED_DIAG_TARGET_UNKNOWN;
00040 
00041    return d;
00042 }
00043 
00044 Sed_diag
00045 sed_diag_destroy( Sed_diag d )
00046 {
00047    if ( d )
00048    {
00049       eh_free( d );
00050    }
00051    return NULL;
00052 }
00053 
00054 Sed_diag
00055 sed_diag_new_target_cube( Sed_cube   c )
00056 {
00057    Sed_diag d = NULL;
00058    if ( c )
00059    {
00060       d       = sed_diag_new();
00061       d->cube = c;
00062       d->type = SED_DIAG_TARGET_CUBE;
00063    }
00064    return d;
00065 }
00066 
00067 Sed_diag
00068 sed_diag_new_target_column( Sed_column c )
00069 {
00070    Sed_diag d = NULL;
00071    if ( c )
00072    {
00073       d       = sed_diag_new();
00074       d->col  = c;
00075       d->type = SED_DIAG_TARGET_COLUMN;
00076    }
00077    return d;
00078 }
00079 
00080 Sed_diag sed_diag_new_target_cell( Sed_cell   c )
00081 {
00082    Sed_diag d = NULL;
00083    if ( c )
00084    {
00085       d       = sed_diag_new();
00086       d->cell = c;
00087       d->type = SED_DIAG_TARGET_CELL;
00088    }
00089    return d;
00090 }
00091 
00092 double
00093 _sed_diag_mass( Sed_diag d )
00094 {
00095    double m = 0;
00096    switch ( d->type )
00097    {
00098       case SED_DIAG_TARGET_CUBE  : m = sed_cube_sediment_mass  ( d->cube ); break;
00099       case SED_DIAG_TARGET_COLUMN: m = sed_column_sediment_mass( d->col  ); break;
00100       case SED_DIAG_TARGET_CELL  : m = sed_cell_sediment_mass  ( d->cell ); break;
00101       default: eh_require_not_reached();
00102    }
00103    return m;
00104 }
00105 
00106 double
00107 sed_diag_start( Sed_diag d )
00108 {
00109    double m = 0;
00110    if ( d )
00111    {
00112       d->start = _sed_diag_mass( d );
00113    }
00114    return m;
00115 }
00116 
00117 double
00118 sed_diag_stop( Sed_diag d )
00119 {
00120    double m = 0;
00121    if ( d )
00122    {
00123       d->stop = _sed_diag_mass( d );
00124    }
00125    return m;
00126 }
00127 
00128 double
00129 sed_diag_elapsed( Sed_diag d )
00130 {
00131    double m = 0;
00132    if ( d )
00133    {
00134       m = _sed_diag_mass( d ) - d->start;
00135    }
00136    return m;
00137 }
00138 
00139 double
00140 sed_diag_continue( Sed_diag d )
00141 {
00142    double m = 0;
00143    if ( d )
00144    {
00145       d->stop  = 0;
00146 
00147       m = d->start;
00148    }
00149    return m;
00150 }
00151 
00152 double
00153 sed_diag_reset( Sed_diag d )
00154 {
00155    double m = 0;
00156    if ( d )
00157    {
00158       d->start = _sed_diag_mass( d );
00159       d->stop  = 0;
00160 
00161       m = d->start;
00162    }
00163    return m;
00164 }
00165 
00166 static gchar* target_s[] =
00167 {
00168    "Sed_cube"   ,
00169    "Sed_column" ,
00170    "Sed_cell"   ,
00171    "Unknown"
00172 };
00173 
00174 gchar*
00175 _sed_diag_target_s( Sed_diag d )
00176 {
00177    return target_s[d->type];
00178 }
00179 
00180 gint
00181 sed_diag_fprint( FILE* fp , Sed_diag d )
00182 {
00183    gint n = 0;
00184    if ( d )
00185    {
00186       fprintf( fp , "--- Start: sedflux diagnostics ---\n" );
00187       fprintf( fp , "Target type     : %s\n" , _sed_diag_target_s( d ) );
00188       fprintf( fp , "Starting mass   : %g\n" , d->start );
00189       fprintf( fp , "Stopping mass   : %g\n" , d->stop );
00190       fprintf( fp , "--- End: sedflux diagnostics ---\n" );
00191    }
00192    return n;
00193 }
00194 

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