21 #ifndef IS_BUILDING_MB
22 #define IS_BUILDING_MB
36 std::vector< const char* >& filenames,
37 std::string& norm_tag,
38 std::vector< const char* >& tag_names,
39 std::vector< const char* >& tag_values,
40 std::string& file_opts,
46 std::vector< std::vector< EntityHandle > >& groups,
51 double field_1(
double x,
double y,
double z );
52 double field_2(
double x,
double y,
double z );
53 double field_3(
double x,
double y,
double z );
54 double physField(
double x,
double y,
double z );
63 int main(
int argc,
char** argv )
68 int err = MPI_Init( &argc, &argv );
73 std::cerr <<
"Usage: ";
74 std::cerr << argv[0] <<
" <nfiles> <fname1> ... <fnamen> <norm_tag> <tag_select_opts> <file_opts>" << std::endl;
75 std::cerr <<
"nfiles : number of mesh files" << std::endl;
76 std::cerr <<
"fname1...fnamen : mesh files" << std::endl;
77 std::cerr <<
"norm_tag : name of tag to normalize across meshes" << std::endl;
78 std::cerr <<
"tag_select_opts : quoted string of tags and values for subset selection, "
79 "e.g. \"TAG1=VAL1;TAG2=VAL2;TAG3;TAG4\""
81 std::cerr <<
"file_opts : quoted string of parallel file read options, e.g. "
82 "\"OPTION1=VALUE1;OPTION2;OPTION3=VALUE3\""
94 err = MPI_Comm_size( MPI_COMM_WORLD, &nprocs );
95 assert( MPI_SUCCESS == err );
96 err = MPI_Comm_rank( MPI_COMM_WORLD, &rank );
97 assert( MPI_SUCCESS == err );
100 std::stringstream fname;
101 fname << argv[0] << rank <<
".out";
102 if( !std::freopen( fname.str().c_str(),
"a", stdout ) )
return -1;
103 if( !std::freopen( fname.str().c_str(),
"a", stderr ) )
return -1;
109 std::cerr <<
"MOAB constructor failed" << std::endl;
114 std::cout <<
"Getting options..." << std::endl;
115 std::vector< const char* > filenames;
116 std::vector< const char* > tagNames;
117 std::vector< const char* > tagValues;
118 std::string normTag, fileOpts;
119 get_file_options( argc, argv, filenames, normTag, tagNames, tagValues, fileOpts, &err );
123 std::cout <<
" Input Parameters - " << std::endl;
124 std::cout <<
" Filenames: ";
125 for( std::vector< const char* >::iterator it = filenames.begin(); it != filenames.end(); ++it )
126 std::cout << *it <<
" ";
127 std::cout << std::endl;
128 std::cout <<
" Norm Tag: " << normTag << std::endl;
129 std::cout <<
" Selection Data: NumNames=" << tagNames.size() <<
" NumValues=" << tagValues.size() << std::endl;
130 std::cout <<
" TagNames TagValues " << std::endl;
131 std::cout <<
" -------------------- --------------------" << std::endl;
132 std::vector< const char* >::iterator nameIt = tagNames.begin();
133 std::vector< const char* >::iterator valIt = tagValues.begin();
134 std::cout << std::setiosflags( std::ios::left );
135 for( ; nameIt != tagNames.end(); ++nameIt )
137 std::cout <<
" " << std::setw( 20 ) << *nameIt;
140 std::cout <<
" " << std::setw( 20 ) << *( (
int*)( *valIt ) ) << std::endl;
144 std::cout <<
" NULL " << std::endl;
146 std::cout << std::resetiosflags( std::ios::left );
147 std::cout <<
" File Options: " << fileOpts << std::endl;
150 std::cout <<
"Reading mesh file(s)..." << std::endl;
151 std::vector< ParallelComm* > pcs( filenames.size() );
152 std::vector< ReadParallel* > rps( filenames.size() );
155 std::vector< EntityHandle > roots( filenames.size() );
158 for(
unsigned int i = 0; i < filenames.size(); i++ )
166 result = rps[i]->load_file( filenames[i], &roots[i],
FileOptions( fileOpts.c_str() ) );
176 for(
unsigned int k = 0; k < filenames.size(); k++ )
182 debugOut.
print( 2,
"Root set entities: ", rootRg );
186 pcs[k]->get_part_entities( partRg );
187 debugOut.
print( 2,
"Partition entities: ", partRg );
192 Range src_elems, targ_elems;
195 std::cout <<
"********** Create Coupler **********" << std::endl;
197 std::cout <<
"Creating Coupler..." << std::endl;
198 Coupler mbc( mbi, pcs[0], src_elems, 0 );
201 std::cout <<
"Getting tag handles..." << std::endl;
202 int numTagNames = tagNames.size();
204 std::vector< Tag > tagHandles( numTagNames );
206 while( iTags < numTagNames )
208 std::cout <<
"Getting handle for " << tagNames[iTags] << std::endl;
209 result = mbi->
tag_get_handle( tagNames[iTags], tagHandles[iTags] );
215 std::cout <<
"********** Test create_tuples **********" << std::endl;
219 Range entsets1, entsets2;
221 (
const void*
const*)&tagValues[0], tagHandles.size(), entsets1,
223 MB_CHK_SET_ERR( result,
"sets: get_entities_by_type_and_tag failed on Mesh 1." );
226 std::cout <<
"Creating tuples for mesh 1..." << std::endl;
228 err = mbc.
create_tuples( entsets1, &tagHandles[0], tagHandles.
size(), &m1TagTuples );
231 std::cout <<
" create_tuples returned" << std::endl;
235 (
const void*
const*)&tagValues[0], tagHandles.size(), entsets2,
237 MB_CHK_SET_ERR( result,
"sets: get_entities_by_type_and_tag failed on Mesh 2." );
239 std::cout <<
"Creating tuples for mesh 2..." << std::endl;
244 std::cout <<
" create_tuples returned" << std::endl;
248 std::cout <<
"********** Test consolidate_tuples **********" << std::endl;
251 std::cout <<
"Consolidating tuple_lists for Mesh 1 and Mesh 2..." << std::endl;
254 tplp_arr[0] = m1TagTuples;
255 tplp_arr[1] = m2TagTuples;
259 std::cout <<
" consolidate_tuples returned" << std::endl;
264 std::cout <<
"********** Test get_matching_entities **********" << std::endl;
265 std::vector< std::vector< EntityHandle > > m1EntitySets;
266 std::vector< std::vector< EntityHandle > > m1EntityGroups;
267 std::vector< std::vector< EntityHandle > > m2EntitySets;
268 std::vector< std::vector< EntityHandle > > m2EntityGroups;
271 std::cout <<
"Get matching entities for mesh 1..." << std::endl;
272 err = mbc.
get_matching_entities( roots[0], &tagHandles[0], &tagValues[0], tagHandles.size(), &m1EntitySets,
276 std::cout <<
" get_matching_entities returned " << m1EntityGroups.size() <<
" entity groups" << std::endl;
279 std::vector< std::vector< EntityHandle > >::iterator iter_esi;
280 std::vector< std::vector< EntityHandle > >::iterator iter_egi;
281 std::vector< EntityHandle >::iterator iter_esj;
282 std::vector< EntityHandle >::iterator iter_egj;
285 for( iter_egi = m1EntityGroups.begin(), iter_esi = m1EntitySets.begin(), icnt = 1;
286 ( iter_egi != m1EntityGroups.end() ) && ( iter_esi != m1EntitySets.end() ); ++iter_egi, ++iter_esi, icnt++ )
288 std::cout <<
" EntityGroup(" << icnt <<
") = ";
291 for( iter_egj = ( *iter_egi ).begin(); iter_egj != ( *iter_egi ).end(); ++iter_egj )
293 debugOut.
print( 2,
"Mesh1 matching Entities: ", entSetRg );
296 std::cout <<
" EntitySet(" << icnt <<
") = ";
299 for( iter_esj = ( *iter_esi ).begin(); iter_esj != ( *iter_esi ).end(); ++iter_esj )
301 debugOut.
print( 2,
"Mesh1 matching EntitySets: ", entSetRg );
306 std::cout <<
"Get matching entities for mesh 2..." << std::endl;
307 err = mbc.
get_matching_entities( roots[1], &tagHandles[0], &tagValues[0], tagHandles.size(), &m2EntitySets,
311 std::cout <<
" get_matching_entities returned " << m2EntityGroups.size() <<
" entity groups" << std::endl;
312 for( iter_egi = m2EntityGroups.begin(), iter_esi = m2EntitySets.begin(), icnt = 1;
313 ( iter_egi != m2EntityGroups.end() ) && ( iter_esi != m2EntitySets.end() ); ++iter_egi, ++iter_esi, icnt++ )
315 std::cout <<
" EntityGroup(" << icnt <<
") = ";
318 for( iter_egj = ( *iter_egi ).begin(); iter_egj != ( *iter_egi ).end(); ++iter_egj )
320 debugOut.
print( 2,
"Mesh2 matching Entities: ", entSetRg );
323 std::cout <<
" EntitySet(" << icnt <<
") = ";
326 for( iter_esj = ( *iter_esi ).begin(); iter_esj != ( *iter_esi ).end(); ++iter_esj )
328 debugOut.
print( 2,
"Mesh2 matching EntitySets: ", entSetRg );
335 std::cout <<
"********** Test print_tuples **********" << std::endl;
337 std::cout <<
"Testing print_tuples..." << std::endl;
340 int num_ints = 3, num_longs = 2, num_ulongs = 4, num_reals = 6, num_rows = 10;
342 std::cout <<
" print of test_tuples zero init..." << std::endl;
349 std::cout <<
" print of test_tuples after setting n to 10..." << std::endl;
350 test_tuple.
set_n( 10 );
353 test_tuple.
initialize( num_ints, num_longs, num_ulongs, num_reals, num_rows );
354 std::cout <<
" print of test_tuples after init..." << std::endl;
357 std::cout <<
" print of test_tuples after setting n to 10..." << std::endl;
358 test_tuple.
set_n( 10 );
361 for(
int i = 0; i < num_rows; i++ )
364 for( j = 0; j < num_ints; j++ )
365 test_tuple.
vi_wr[i * num_ints + j] = (
int)( ( j + 1 ) * ( i + 1 ) );
367 for( j = 0; j < num_longs; j++ )
368 test_tuple.
vl_wr[i * num_longs + j] = (
int)( ( j + 1 ) * ( i + 1 ) );
370 for( j = 0; j < num_ulongs; j++ )
371 test_tuple.
vul_wr[i * num_ulongs + j] = (
int)( ( j + 1 ) * ( i + 1 ) );
373 for( j = 0; j < num_reals; j++ )
374 test_tuple.
vr_wr[i * num_reals + j] = (
int)( ( j + 1 ) * ( i + 1 ) + ( j * 0.01 ) );
376 std::cout <<
" print of test_tuples after filling with data..." << std::endl;
380 std::cout <<
"********** Test pack_tuples and unpack_tuples **********" << std::endl;
389 err = MPI_Bcast( &buf_sz, 1, MPI_INT, 0, MPI_COMM_WORLD );
391 if( err != MPI_SUCCESS )
393 std::cerr <<
"MPI_Bcast of buffer size failed" << std::endl;
400 mp_buf = malloc( buf_sz *
sizeof(
uint ) );
403 err = MPI_Bcast( mp_buf, buf_sz *
sizeof(
uint ), MPI_UNSIGNED_CHAR, 0, MPI_COMM_WORLD );
404 if( err != MPI_SUCCESS )
406 std::cerr <<
"MPI_Bcast of buffer failed" << std::endl;
413 std::cout <<
" print of rcv_tuples after unpacking from MPI_Bcast..." << std::endl;
421 std::cout <<
"********** Test get_group_integ_vals **********" << std::endl;
422 std::cout <<
"Get group integrated field values..." << std::endl;
425 std::cout <<
" print vertex field values first:" << std::endl;
432 std::cout <<
" Original entity vertex field values (mesh 1): " << std::endl;
436 std::cout <<
" Original entity vertex field values (mesh 2): " << std::endl;
440 std::vector< double >::iterator iter_ivals;
442 std::cout <<
"Get group integrated field values for mesh 1..." << std::endl;
443 std::vector< double > m1IntegVals( m1EntityGroups.size() );
446 std::cout <<
"Mesh 1 integrated field values(" << m1IntegVals.size() <<
"): ";
447 for( iter_ivals = m1IntegVals.begin(); iter_ivals != m1IntegVals.end(); ++iter_ivals )
449 std::cout << ( *iter_ivals ) <<
" ";
451 std::cout << std::endl;
453 std::cout <<
"Get group integrated field values for mesh 2..." << std::endl;
454 std::vector< double > m2IntegVals( m2EntityGroups.size() );
457 std::cout <<
"Mesh 2 integrated field values(" << m2IntegVals.size() <<
"): ";
458 for( iter_ivals = m2IntegVals.begin(); iter_ivals != m2IntegVals.end(); ++iter_ivals )
460 std::cout << ( *iter_ivals ) <<
" ";
462 std::cout << std::endl;
465 std::cout <<
"********** Test apply_group_norm_factors **********" << std::endl;
468 for(
unsigned int i = 0; i < m1IntegVals.size(); i++ )
470 val = m1IntegVals[i];
471 m1IntegVals[i] = 1 / val;
474 for(
unsigned int i = 0; i < m2IntegVals.size(); i++ )
476 val = m2IntegVals[i];
477 m2IntegVals[i] = 1 / val;
480 std::cout <<
"Mesh 1 norm factors(" << m1IntegVals.size() <<
"): ";
481 for( iter_ivals = m1IntegVals.begin(); iter_ivals != m1IntegVals.end(); ++iter_ivals )
483 std::cout << ( *iter_ivals ) <<
" ";
485 std::cout << std::endl;
487 std::cout <<
"Mesh 2 norm factors(" << m2IntegVals.size() <<
"): ";
488 for( iter_ivals = m2IntegVals.begin(); iter_ivals != m2IntegVals.end(); ++iter_ivals )
490 std::cout << ( *iter_ivals ) <<
" ";
492 std::cout << std::endl;
504 std::string normFactor = normTag +
"_normf";
505 result = mbi->
tag_get_handle( normFactor.c_str(), norm_factor_hdl );
506 MB_CHK_SET_ERR( result,
"Failed to get norm factor tag handle." );
509 std::cout <<
"Mesh 1 norm factors per EntitySet...";
510 for( iter_esi = m1EntitySets.begin(); iter_esi != m1EntitySets.end(); ++iter_esi )
512 for( iter_esj = ( *iter_esi ).begin(); iter_esj != ( *iter_esi ).end(); ++iter_esj )
516 result = mbi->
tag_get_data( norm_factor_hdl, &eh, 1, &data );
518 std::cout << data <<
", ";
521 std::cout << std::endl;
524 std::cout <<
"Mesh 2 norm factors per EntitySet...";
525 for( iter_esi = m2EntitySets.begin(); iter_esi != m2EntitySets.end(); ++iter_esi )
527 for( iter_esj = ( *iter_esi ).begin(); iter_esj != ( *iter_esi ).end(); ++iter_esj )
531 result = mbi->
tag_get_data( norm_factor_hdl, &eh, 1, &data );
533 std::cout << data <<
", ";
536 std::cout << std::endl;
539 std::cout <<
"********** Test normalize_subset **********" << std::endl;
541 std::cout <<
"Running Coupler::normalize_subset() on mesh 1" << std::endl;
548 std::cout <<
"Mesh 1 norm factors per EntitySet...";
549 for( iter_esi = m1EntitySets.begin(); iter_esi != m1EntitySets.end(); ++iter_esi )
551 for( iter_esj = ( *iter_esi ).begin(); iter_esj != ( *iter_esi ).end(); ++iter_esj )
555 result = mbi->
tag_get_data( norm_factor_hdl, &eh, 1, &data );
557 std::cout << data <<
", ";
560 std::cout << std::endl;
562 std::cout <<
"Running Coupler::normalize_subset() on mesh 2" << std::endl;
568 std::cout <<
"Mesh 2 norm factors per EntitySet...";
569 for( iter_esi = m2EntitySets.begin(); iter_esi != m2EntitySets.end(); ++iter_esi )
571 for( iter_esj = ( *iter_esi ).begin(); iter_esj != ( *iter_esi ).end(); ++iter_esj )
575 result = mbi->
tag_get_data( norm_factor_hdl, &eh, 1, &data );
578 std::cout << data <<
", ";
581 std::cout << std::endl;
584 std::cout <<
"********** ssn_test DONE! **********" << std::endl;
592 std::cout <<
"********** Test moab::Element::Map::integrate_scalar_field **********" << std::endl;
594 std::vector< CartVect > biunit_cube( 8 );
595 biunit_cube[0] =
CartVect( -1, -1, -1 );
596 biunit_cube[1] =
CartVect( 1, -1, -1 );
597 biunit_cube[2] =
CartVect( 1, 1, -1 );
598 biunit_cube[3] =
CartVect( -1, 1, -1 );
599 biunit_cube[4] =
CartVect( -1, -1, 1 );
600 biunit_cube[5] =
CartVect( 1, -1, 1 );
601 biunit_cube[6] =
CartVect( 1, 1, 1 );
602 biunit_cube[7] =
CartVect( -1, 1, 1 );
604 std::vector< CartVect > zerobase_cube( 8 );
605 zerobase_cube[0] =
CartVect( 0, 0, 0 );
606 zerobase_cube[1] =
CartVect( 2, 0, 0 );
607 zerobase_cube[2] =
CartVect( 2, 2, 0 );
608 zerobase_cube[3] =
CartVect( 0, 2, 0 );
609 zerobase_cube[4] =
CartVect( 0, 0, 2 );
610 zerobase_cube[5] =
CartVect( 2, 0, 2 );
611 zerobase_cube[6] =
CartVect( 2, 2, 2 );
612 zerobase_cube[7] =
CartVect( 0, 2, 2 );
615 double bcf[8], bf1[8], bf2[8], bf3[8], zcf[8], zf1[8], zf2[8], zf3[8];
616 for(
int i = 0; i < 8; i++ )
618 bcf[i] =
const_field( biunit_cube[i][0], biunit_cube[i][1], biunit_cube[i][2] );
619 bf1[i] =
field_1( biunit_cube[i][0], biunit_cube[i][1], biunit_cube[i][2] );
620 bf2[i] =
field_2( biunit_cube[i][0], biunit_cube[i][1], biunit_cube[i][2] );
621 bf3[i] =
field_3( biunit_cube[i][0], biunit_cube[i][1], biunit_cube[i][2] );
623 zcf[i] =
const_field( zerobase_cube[i][0], zerobase_cube[i][1], zerobase_cube[i][2] );
624 zf1[i] =
field_1( zerobase_cube[i][0], zerobase_cube[i][1], zerobase_cube[i][2] );
625 zf2[i] =
field_2( zerobase_cube[i][0], zerobase_cube[i][1], zerobase_cube[i][2] );
626 zf3[i] =
field_3( zerobase_cube[i][0], zerobase_cube[i][1], zerobase_cube[i][2] );
629 std::cout <<
"Integrated values:" << std::endl;
633 double field_const1, field_const2;
634 double field_linear1, field_linear2;
635 double field_quad1, field_quad2;
636 double field_cubic1, field_cubic2;
644 std::cout <<
" binunit_cube, const_field(num_pts=" << ipoints <<
"): field_val=" << field_const1
646 std::cout <<
" zerobase_cube, const_field(num_pts=" << ipoints <<
"): field_val=" << field_const2
651 std::cout <<
" binunit_cube, field_1(num_pts=" << ipoints <<
"): field_val=" << field_linear1 << std::endl;
652 std::cout <<
" zerobase_cube, field_1(num_pts=" << ipoints <<
"): field_val=" << field_linear2 << std::endl;
656 std::cout <<
" binunit_cube, field_2(num_pts=" << ipoints <<
"): field_val=" << field_quad1 << std::endl;
657 std::cout <<
" zerobase_cube, field_2(num_pts=" << ipoints <<
"): field_val=" << field_quad2 << std::endl;
661 std::cout <<
" binunit_cube, field_3(num_pts=" << ipoints <<
"): field_val=" << field_cubic1 << std::endl;
662 std::cout <<
" zerobase_cube, field_3(num_pts=" << ipoints <<
"): field_val=" << field_cubic2 << std::endl;
666 MB_CHK_SET_ERR( MB_FAILURE,
"Failed to set vertices on Element::Map." );
670 MB_CHK_SET_ERR( MB_FAILURE,
"Failed to get inverse evaluation of coordinate on Element::Map." );
678 std::vector< const char* >& filenames,
679 std::string& normTag,
680 std::vector< const char* >& tagNames,
681 std::vector< const char* >& tagValues,
682 std::string& fileOpts,
688 int nfiles = atoi( argv[npos++] );
691 filenames.resize( nfiles );
692 for(
int i = 0; i < nfiles; i++ )
693 filenames[i] = argv[npos++];
697 normTag = argv[npos++];
700 std::cerr <<
"Insufficient parameters: norm_tag missing" << std::endl;
708 char* opts = argv[npos++];
711 bool end_vals_seen =
false;
712 std::vector< char* > tmpTagOpts;
715 for(
char* i = strtok( opts,
";" ); i; i = strtok( 0,
";" ) )
717 if(
debug ) std::cout <<
"get_file_options: i=" << i << std::endl;
718 tmpTagOpts.push_back( i );
722 for(
unsigned int j = 0; j < tmpTagOpts.size(); j++ )
724 char* e = strtok( tmpTagOpts[j],
"=" );
725 if(
debug ) std::cout <<
"get_file_options: name=" << e << std::endl;
726 tagNames.push_back( e );
727 e = strtok( 0,
"=" );
730 if(
debug ) std::cout <<
"get_file_options: val=" << e << std::endl;
735 std::cerr <<
"Incorrect parameters: new value seen after end of values" << std::endl;
742 tagValues.push_back( (
const char*)valp );
747 end_vals_seen =
true;
748 tagValues.push_back( (
const char*)0 );
754 std::cerr <<
"Insufficient parameters: tag_select_opts missing" << std::endl;
761 fileOpts = argv[npos++];
764 std::cerr <<
"Insufficient parameters: file_opts missing" << std::endl;
773 uint mi, ml, mul, mr;
775 std::cout <<
" tuple data: (n=" << tlp->
get_n() <<
")" << std::endl;
776 std::cout <<
" mi:" << mi <<
" ml:" << ml <<
" mul:" << mul <<
" mr:" << mr << std::endl;
777 std::cout <<
" [" << std::setw( 11 * mi ) <<
" int data"
778 <<
" |" << std::setw( 11 * ml ) <<
" long data"
779 <<
" |" << std::setw( 11 * mul ) <<
" Ulong data"
780 <<
" |" << std::setw( 11 * mr ) <<
" real data"
783 for(
unsigned int i = 0; i < tlp->
get_n(); i++ )
787 for(
unsigned int j = 0; j < mi; j++ )
789 std::cout << std::setw( 10 ) << tlp->
vi_rd[i * mi + j] <<
" ";
800 for(
unsigned int j = 0; j < ml; j++ )
802 std::cout << std::setw( 10 ) << tlp->
vl_rd[i * ml + j] <<
" ";
813 for(
unsigned int j = 0; j < mul; j++ )
815 std::cout << std::setw( 10 ) << tlp->
vul_rd[i * mul + j] <<
" ";
826 for(
unsigned int j = 0; j < mr; j++ )
828 std::cout << std::setw( 10 ) << tlp->
vr_rd[i * mr + j] <<
" ";
836 if( i + 1 < tlp->
get_n() ) std::cout << std::endl <<
" ";
838 std::cout <<
"]" << std::endl;
843 std::vector< std::vector< EntityHandle > >& groups,
849 std::vector< EntityHandle >::iterator iter_j;
851 for(
unsigned int i = 0; i < groups.size(); i++ )
853 std::cout <<
" Group - " << std::endl <<
" ";
854 for( iter_j = groups[i].begin(); iter_j != groups[i].end(); ++iter_j )
868 std::cout << std::fixed;
869 for(
int iv = 0; iv < num_verts; iv++ )
872 result = mbi->
tag_get_data( norm_hdl, &conn[iv], 1, &data );
874 std::cout << std::setprecision( 8 ) << data <<
", ";
876 std::cout << std::endl <<
" ";
878 std::cout << std::endl;
879 std::cout.unsetf( std::ios_base::floatfield );
893 double field_1(
double x,
double y,
double z )
895 double f = fabs( x ) + fabs( y ) + fabs( z );
900 double field_2(
double x,
double y,
double z )
902 double f = x * x + y * y + z * z;
907 double field_3(
double x,
double y,
double z )
909 double f = 2 * x + 2 * y + 2 * z;
921 out = x * x + y * y + z * z;
928 #define UINT_PER_X( X ) ( ( sizeof( X ) + sizeof( uint ) - 1 ) / sizeof( uint ) )
929 #define UINT_PER_REAL UINT_PER_X( realType )
930 #define UINT_PER_LONG UINT_PER_X( slong )
931 #define UINT_PER_ULONG UINT_PER_X( Ulong )
932 #define UINT_PER_UNSIGNED UINT_PER_X( unsigned )
937 uint mi, ml, mul, mr;
949 memcpy( buf, &n,
sizeof(
uint ) ), buf += 1;
977 unsigned mit, mlt, mult, mrt;
981 memcpy( &nt, buf,
sizeof(
uint ) ), buf += 1;
996 uint mi, ml, mul, mr;