00001 #include <utils/utils.h>
00002 #include <sed/sed_sedflux.h>
00003 #include <check.h>
00004
00005 int compact( Sed_column );
00006
00007 START_TEST ( test_compact_0 )
00008 {
00009 Sed_column c = sed_column_new( 5 );
00010 Sed_cell cell;
00011
00012 {
00013 double* f = eh_new0( double , sed_sediment_env_n_types() );
00014
00015 f[0] = 1.;
00016 cell = sed_cell_new_sized( sed_sediment_env_n_types() , 30000 , f );
00017
00018 eh_free( f );
00019 }
00020
00021 sed_column_set_sea_level ( c , 10 );
00022 sed_column_set_base_height( c , -40000 );
00023
00024 sed_column_add_cell( c , cell );
00025
00026 {
00027 double mass_out;
00028 double mass_in = sed_column_sediment_mass(c);
00029
00030 compact( c );
00031
00032 mass_out = sed_column_sediment_mass(c);
00033
00034 fail_unless( eh_compare_dbl( mass_in , mass_out , 1e-12 ) , "Mass balance error in compaction" );
00035 }
00036
00037 {
00038 Sed_cell cell_0 = sed_column_nth_cell( c , 0 );
00039 double e_min = sed_cell_void_ratio_min( cell_0 );
00040 double e = sed_cell_void_ratio ( cell_0 );
00041
00042 fail_unless( eh_compare_dbl( e_min , e , 1e-6 ) , "Cell did not reach maximum compaction" );
00043 }
00044
00045 sed_cell_destroy ( cell );
00046 sed_column_destroy( c );
00047 }
00048 END_TEST
00049
00050 START_TEST ( test_compact_1 )
00051 {
00052 Sed_column c = sed_column_new( 5 );
00053 Sed_cell cell;
00054
00055 {
00056 double* f = eh_new0( double , sed_sediment_env_n_types() );
00057
00058 f[1] = 1.;
00059 cell = sed_cell_new_sized( sed_sediment_env_n_types() , 30000 , f );
00060
00061 eh_free( f );
00062 }
00063
00064 sed_column_set_sea_level ( c , 10 );
00065 sed_column_set_base_height( c , -40000 );
00066
00067 sed_column_add_cell( c , cell );
00068
00069 {
00070 double mass_out;
00071 double mass_in = sed_column_sediment_mass(c);
00072
00073 compact( c );
00074
00075 mass_out = sed_column_sediment_mass(c);
00076
00077 fail_unless( eh_compare_dbl( mass_in , mass_out , 1e-12 ) , "Mass balance error in compaction" );
00078 }
00079
00080 {
00081 Sed_cell cell_0 = sed_column_nth_cell( c , 0 );
00082 double e_min = sed_cell_void_ratio_min( cell_0 );
00083 double e = sed_cell_void_ratio ( cell_0 );
00084
00085 fail_unless( eh_compare_dbl( e_min , e , 1e-6 ) , "Cell did not reach maximum compaction" );
00086 }
00087
00088 sed_cell_destroy ( cell );
00089 sed_column_destroy( c );
00090 }
00091 END_TEST
00092
00093 START_TEST ( test_compact_2 )
00094 {
00095 Sed_column c = sed_column_new( 5 );
00096 Sed_cell cell;
00097
00098 {
00099 double* f = eh_new0( double , sed_sediment_env_n_types() );
00100
00101 f[2] = 1.;
00102 cell = sed_cell_new_sized( sed_sediment_env_n_types() , 30000 , f );
00103
00104 eh_free( f );
00105 }
00106
00107 sed_column_set_sea_level ( c , 10 );
00108 sed_column_set_base_height( c , -40000 );
00109
00110 sed_column_add_cell( c , cell );
00111
00112 {
00113 double mass_out;
00114 double mass_in = sed_column_sediment_mass(c);
00115
00116 compact( c );
00117
00118 mass_out = sed_column_sediment_mass(c);
00119
00120 fail_unless( eh_compare_dbl( mass_in , mass_out , 1e-12 ) , "Mass balance error in compaction" );
00121 }
00122
00123 {
00124 Sed_cell cell_0 = sed_column_nth_cell( c , 0 );
00125 double e_min = sed_cell_void_ratio_min( cell_0 );
00126 double e = sed_cell_void_ratio ( cell_0 );
00127
00128 fail_unless( eh_compare_dbl( e_min , e , 1e-6 ) , "Cell did not reach maximum compaction" );
00129 }
00130
00131 sed_cell_destroy ( cell );
00132 sed_column_destroy( c );
00133 }
00134 END_TEST
00135
00136 START_TEST ( test_compact_3 )
00137 {
00138 Sed_column c = sed_column_new( 5 );
00139 Sed_cell cell;
00140
00141 {
00142 double* f = eh_new0( double , sed_sediment_env_n_types() );
00143
00144 f[3] = 1.;
00145 cell = sed_cell_new_sized( sed_sediment_env_n_types() , 30000 , f );
00146
00147 eh_free( f );
00148 }
00149
00150 sed_column_set_sea_level ( c , 10 );
00151 sed_column_set_base_height( c , -40000 );
00152
00153 sed_column_add_cell( c , cell );
00154
00155 {
00156 double mass_out;
00157 double mass_in = sed_column_sediment_mass(c);
00158
00159 compact( c );
00160
00161 mass_out = sed_column_sediment_mass(c);
00162
00163 fail_unless( eh_compare_dbl( mass_in , mass_out , 1e-12 ) , "Mass balance error in compaction" );
00164 }
00165
00166 {
00167 Sed_cell cell_0 = sed_column_nth_cell( c , 0 );
00168 double e_min = sed_cell_void_ratio_min( cell_0 );
00169 double e = sed_cell_void_ratio ( cell_0 );
00170
00171 fail_unless( eh_compare_dbl( e_min , e , 1e-6 ) , "Cell did not reach maximum compaction" );
00172 }
00173
00174 sed_cell_destroy ( cell );
00175 sed_column_destroy( c );
00176 }
00177 END_TEST
00178
00179 START_TEST ( test_compact_4 )
00180 {
00181 Sed_column c = sed_column_new( 5 );
00182 Sed_cell cell;
00183
00184 {
00185 double* f = eh_new0( double , sed_sediment_env_n_types() );
00186
00187 f[4] = 1.;
00188 cell = sed_cell_new_sized( sed_sediment_env_n_types() , 30000 , f );
00189
00190 eh_free( f );
00191 }
00192
00193 sed_column_set_sea_level ( c , 10 );
00194 sed_column_set_base_height( c , -40000 );
00195
00196 sed_column_add_cell( c , cell );
00197
00198 {
00199 double mass_out;
00200 double mass_in = sed_column_sediment_mass(c);
00201
00202 compact( c );
00203
00204 mass_out = sed_column_sediment_mass(c);
00205
00206 fail_unless( eh_compare_dbl( mass_in , mass_out , 1e-12 ) , "Mass balance error in compaction" );
00207 }
00208
00209 {
00210 Sed_cell cell_0 = sed_column_nth_cell( c , 0 );
00211 double e_min = sed_cell_void_ratio_min( cell_0 );
00212 double e = sed_cell_void_ratio ( cell_0 );
00213
00214 fail_unless( eh_compare_dbl( e_min , e , 1e-6 ) , "Cell did not reach maximum compaction" );
00215 }
00216
00217 sed_cell_destroy ( cell );
00218 sed_column_destroy( c );
00219 }
00220 END_TEST
00221
00222 START_TEST ( test_compact_mixed )
00223 {
00224 Sed_column c = sed_column_new( 5 );
00225 Sed_cell cell;
00226
00227 {
00228 double* f = eh_new0( double , sed_sediment_env_n_types() );
00229 gssize n;
00230
00231 for ( n=0 ; n<sed_sediment_env_n_types() ; n++ )
00232 f[n] = 1./(double)sed_sediment_env_n_types();
00233 cell = sed_cell_new_sized( sed_sediment_env_n_types() , 30000 , f );
00234
00235 eh_free( f );
00236 }
00237
00238 sed_column_set_sea_level ( c , 10 );
00239 sed_column_set_base_height( c , -40000 );
00240
00241 sed_column_add_cell( c , cell );
00242
00243 {
00244 double mass_out;
00245 double mass_in = sed_column_sediment_mass(c);
00246
00247 compact( c );
00248
00249 mass_out = sed_column_sediment_mass(c);
00250
00251 fail_unless( eh_compare_dbl( mass_in , mass_out , 1e-12 ) , "Mass balance error in compaction" );
00252 }
00253
00254 {
00255 Sed_cell cell_0 = sed_column_nth_cell( c , 0 );
00256 double e_min = sed_cell_void_ratio_min( cell_0 );
00257 double e = sed_cell_void_ratio ( cell_0 );
00258
00259 fail_unless( eh_compare_dbl( e_min , e , 1e-5 ) , "Cell did not reach maximum compaction" );
00260 }
00261
00262 sed_cell_destroy ( cell );
00263 sed_column_destroy( c );
00264 }
00265 END_TEST
00266
00267 Suite *sed_compact_suite( void )
00268 {
00269 Suite *s = suite_create( "Compact" );
00270 TCase *test_case_core = tcase_create( "Core" );
00271
00272 suite_add_tcase( s , test_case_core );
00273
00274 tcase_add_test( test_case_core , test_compact_0 );
00275 tcase_add_test( test_case_core , test_compact_1 );
00276 tcase_add_test( test_case_core , test_compact_2 );
00277 tcase_add_test( test_case_core , test_compact_3 );
00278 tcase_add_test( test_case_core , test_compact_4 );
00279 tcase_add_test( test_case_core , test_compact_mixed );
00280
00281 return s;
00282 }
00283
00284 int main( void )
00285 {
00286 int n;
00287 Sed_sediment sed = NULL;
00288 GError* error = NULL;
00289
00290 eh_init_glib();
00291
00292 sed = sed_sediment_scan( SED_SEDIMENT_TEST_FILE , &error );
00293 if ( !sed )
00294 eh_error( "%s: Unable to read sediment file: %s" , SED_SEDIMENT_TEST_FILE , error->message);
00295 else
00296 sed_sediment_set_env( sed );
00297
00298
00299 {
00300 Suite *s = sed_compact_suite();
00301 SRunner *sr = srunner_create( s );
00302
00303 srunner_run_all( sr , CK_NORMAL );
00304 n = srunner_ntests_failed( sr );
00305 srunner_free( sr );
00306 }
00307
00308 sed_sediment_unset_env();
00309
00310 return n;
00311 }
00312
00313