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