21 #include <sys/resource.h>
24 extern "C" int getrusage(
int,
struct rusage* );
26 #include </usr/ucbinclude/sys/rusage.h>
33 #include "CubitNode.hpp"
34 #include "NodeHex.hpp"
44 void print_time(
const bool print_em,
double& tot_time,
double& utime,
double& stime );
50 int numv_sq = numv * numv;
51 int tot_numv = numv * numv * numv;
52 coords =
new double[3 * tot_numv];
54 double scale =
LENGTH / nelem;
56 #define VINDEX( i, j, k ) ( ( i ) + ( (j)*numv ) + ( (k)*numv_sq ) )
59 for(
int i = 0; i < numv; i++ )
61 for(
int j = 0; j < numv; j++ )
63 for(
int k = 0; k < numv; k++ )
67 coords[3 * idx] = i * scale;
68 coords[3 * idx + 1] = j * scale;
69 coords[3 * idx + 2] = k * scale;
78 int nume_tot = nelem * nelem * nelem;
79 connect =
new int[8 * nume_tot];
82 int numv_sq = numv * numv;
85 for(
int i = 0; i < nelem; i++ )
87 for(
int j = 0; j < nelem; j++ )
89 for(
int k = 0; k < nelem; k++ )
92 connect[idx++] = vijk;
93 connect[idx++] = vijk + 1;
94 connect[idx++] = vijk + 1 + numv;
95 connect[idx++] = vijk + numv;
96 connect[idx++] = vijk + numv * numv;
97 connect[idx++] = vijk + 1 + numv * numv;
98 connect[idx++] = vijk + 1 + numv + numv * numv;
99 connect[idx++] = vijk + numv + numv * numv;
100 assert( idx <= 8 * nume_tot );
106 int main(
int argc,
char* argv[] )
111 sscanf( argv[1],
"%d", &nelem );
113 std::cout <<
"number of elements: " << nelem << std::endl;
117 int nnodes = nelem + 1;
119 double* coords = NULL;
128 assert( NULL != connect && NULL != coords );
130 double ttime0, ttime1, ttime2, ttime3, utime, stime;
132 int nodes_tot = nnodes * nnodes * nnodes;
133 CubitNode** node_array =
new CubitNode*[nodes_tot];
135 for( i = 0; i < nodes_tot; i++ )
136 node_array[i] =
new CubitNode( coords[3 * i], coords[3 * i + 1], coords[3 * i + 2] );
138 int nelem_tot = nelem * nelem * nelem;
139 NodeHex** hex_array =
new NodeHex*[nelem_tot];
142 for( i = 0; i < nelem_tot; i++ )
144 conn[0] = node_array[connect[j]];
145 conn[1] = node_array[connect[j + 1]];
146 conn[2] = node_array[connect[j + 2]];
147 conn[3] = node_array[connect[j + 3]];
148 conn[4] = node_array[connect[j + 4]];
149 conn[5] = node_array[connect[j + 5]];
150 conn[6] = node_array[connect[j + 6]];
151 conn[7] = node_array[connect[j + 7]];
154 hex_array[i] =
new NodeHex( conn );
161 for( i = 0; i < nelem_tot; i++ )
163 double centroid[3] = { 0.0, 0.0, 0.0 };
164 hex_array[i]->hex_nodes( conn[0], conn[1], conn[2], conn[3], conn[4], conn[5], conn[6], conn[7] );
165 for( j = 0; j < 8; j++ )
167 centroid[0] += conn[j]->node_x();
168 centroid[1] += conn[j]->node_y();
169 centroid[2] += conn[j]->node_z();
176 for( i = 0; i < nelem_tot; i++ )
177 hex_array[i]->add_hex_to_nodes();
179 DLIList< CubitHex* > hexes;
180 for( i = 0; i < nodes_tot; i++ )
182 node_array[i]->all_hexes( hexes );
187 std::cout <<
"CUBIT: nelem, construct, e_to_v query, v_to_e query = " << nelem <<
", " << ttime1 - ttime0 <<
", "
188 << ttime2 - ttime1 <<
", " << ttime3 - ttime2 <<
" seconds" << std::endl;
192 void print_time(
const bool print_em,
double& tot_time,
double& utime,
double& stime )
194 struct rusage r_usage;
195 getrusage( RUSAGE_SELF, &r_usage );
196 utime = (double)r_usage.ru_utime.tv_sec + ( (
double)r_usage.ru_utime.tv_usec / 1.e6 );
197 stime = (double)r_usage.ru_stime.tv_sec + ( (
double)r_usage.ru_stime.tv_usec / 1.e6 );
198 tot_time = utime + stime;
200 std::cout <<
"User, system, total time = " << utime <<
", " << stime <<
", " << tot_time << std::endl;
202 std::cout <<
"Max resident set size = " << r_usage.ru_maxrss * 4096 <<
" bytes" << std::endl;
203 std::cout <<
"Int resident set size = " << r_usage.ru_idrss << std::endl;
205 system(
"ps o args,drs,rss | grep perf | grep -v grep" );