- Timestamp:
- Jan 17, 2015, 6:11:34 AM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branches/ipp-20150112/Ohana/src/opihi/lib.shell/stack_math.c
r36528 r37857 127 127 int MMM_trinary (StackVar *OUT, StackVar *V1, StackVar *V2, StackVar *V3, char *op) { 128 128 129 int i, N x, Ny;129 int i, Npix; 130 130 float *out, *M1, *M2, *M3; 131 131 char line[512]; // this is only used to report an error 132 132 133 Nx = V1[0].buffer[0].matrix.Naxis[0]; 134 Ny = V1[0].buffer[0].matrix.Naxis[1]; 135 133 Npix = 1; 134 for (i = 0; i < V1[0].buffer[0].matrix.Naxes; i++) { 135 if (V1[0].buffer[0].matrix.Naxis[i] == 0) break; 136 Npix *= V1[0].buffer[0].matrix.Naxis[i]; 137 } 138 136 139 if (V1[0].type == ST_MATRIX_TMP) { /** use V1 as temp buffer **/ 137 140 OUT[0].buffer = V1[0].buffer; … … 154 157 155 158 # define MMM_FUNC(OP) \ 156 for (i = 0; i < N x*Ny; i++, out++, M1++, M2++, M3++) { \159 for (i = 0; i < Npix; i++, out++, M1++, M2++, M3++) { \ 157 160 *out = OP; \ 158 161 } \ … … 531 534 } 532 535 533 // the vector is applied to each column 536 // the vector is applied to each column (currently only valid for 2D matrix) 534 537 int MV_binary (StackVar *OUT, StackVar *V1, StackVar *V2, char *op) { 535 538 … … 626 629 } 627 630 628 // the vector is applied to each row 631 // the vector is applied to each row (currently only valid for 2D matrix) 629 632 int VM_binary (StackVar *OUT, StackVar *V1, StackVar *V2, char *op) { 630 633 … … 722 725 int MM_binary (StackVar *OUT, StackVar *V1, StackVar *V2, char *op) { 723 726 724 int i, N x, Ny;727 int i, Npix; 725 728 float *out, *M1, *M2; 726 729 char line[512]; // this is only used to report an error 727 730 728 Nx = V1[0].buffer[0].matrix.Naxis[0]; 729 Ny = V1[0].buffer[0].matrix.Naxis[1]; 730 731 Npix = 1; 732 for (i = 0; i < V1[0].buffer[0].matrix.Naxes; i++) { 733 if (V1[0].buffer[0].matrix.Naxis[i] == 0) break; 734 Npix *= V1[0].buffer[0].matrix.Naxis[i]; 735 } 736 731 737 if (V1[0].type == ST_MATRIX_TMP) { /** use V1 as temp buffer **/ 732 738 OUT[0].buffer = V1[0].buffer; … … 748 754 749 755 # define MM_FUNC(OP) \ 750 for (i = 0; i < N x*Ny; i++, out++, M1++, M2++) { \756 for (i = 0; i < Npix; i++, out++, M1++, M2++) { \ 751 757 *out = OP; \ 752 758 } \ … … 803 809 int MS_binary (StackVar *OUT, StackVar *V1, StackVar *V2, char *op) { 804 810 805 int i, N x, Ny;811 int i, Npix; 806 812 char line[512]; // this is only used to report an error 807 813 808 Nx = V1[0].buffer[0].matrix.Naxis[0]; 809 Ny = V1[0].buffer[0].matrix.Naxis[1]; 814 Npix = 1; 815 for (i = 0; i < V1[0].buffer[0].matrix.Naxes; i++) { 816 if (V1[0].buffer[0].matrix.Naxis[i] == 0) break; 817 Npix *= V1[0].buffer[0].matrix.Naxis[i]; 818 } 810 819 811 820 /* if possible, use V1 as temp buffer, otherwise create new one */ … … 825 834 if (V2->type == ST_SCALAR_FLT) { \ 826 835 opihi_flt M2 = V2[0].FltValue; \ 827 for (i = 0; i < N x*Ny; i++, out++, M1++) { \836 for (i = 0; i < Npix; i++, out++, M1++) { \ 828 837 *out = OP; \ 829 838 } \ … … 832 841 if (V2->type == ST_SCALAR_INT) { \ 833 842 opihi_int M2 = V2[0].IntValue; \ 834 for (i = 0; i < N x*Ny; i++, out++, M1++) { \843 for (i = 0; i < Npix; i++, out++, M1++) { \ 835 844 *out = OP; \ 836 845 } \ … … 881 890 int SM_binary (StackVar *OUT, StackVar *V1, StackVar *V2, char *op) { 882 891 883 int i, N x, Ny;892 int i, Npix; 884 893 char line[512]; // this is only used to report an error 885 894 886 Nx = V2[0].buffer[0].matrix.Naxis[0]; 887 Ny = V2[0].buffer[0].matrix.Naxis[1]; 888 895 Npix = 1; 896 for (i = 0; i < V2[0].buffer[0].matrix.Naxes; i++) { 897 if (V2[0].buffer[0].matrix.Naxis[i] == 0) break; 898 Npix *= V2[0].buffer[0].matrix.Naxis[i]; 899 } 900 889 901 if (V2[0].type == ST_MATRIX_TMP) { /* V2[0] is NOT temporary, we can't use it for storage */ 890 902 OUT[0].buffer = V2[0].buffer; … … 902 914 if (V1->type == ST_SCALAR_FLT) { \ 903 915 opihi_flt M1 = V1[0].FltValue; \ 904 for (i = 0; i < N x*Ny; i++, out++, M2++) { \916 for (i = 0; i < Npix; i++, out++, M2++) { \ 905 917 *out = OP; \ 906 918 } \ … … 909 921 if (V1->type == ST_SCALAR_INT) { \ 910 922 opihi_int M1 = V1[0].IntValue; \ 911 for (i = 0; i < N x*Ny; i++, out++, M2++) { \923 for (i = 0; i < Npix; i++, out++, M2++) { \ 912 924 *out = OP; \ 913 925 } \ … … 1259 1271 int M_unary (StackVar *OUT, StackVar *V1, char *op) { 1260 1272 1261 int i, j, N x, Ny;1273 int i, j, Npix; 1262 1274 float *out, *M1; 1263 1275 1264 Nx = V1[0].buffer[0].matrix.Naxis[0]; 1265 Ny = V1[0].buffer[0].matrix.Naxis[1]; 1266 1276 Npix = 1; 1277 for (i = 0; i < V1[0].buffer[0].matrix.Naxes; i++) { 1278 if (V1[0].buffer[0].matrix.Naxis[i] == 0) break; 1279 Npix *= V1[0].buffer[0].matrix.Naxis[i]; 1280 } 1281 1267 1282 if (V1[0].type == ST_MATRIX_TMP) { 1268 1283 OUT[0].buffer = V1[0].buffer; … … 1277 1292 1278 1293 if (!strcmp (op, "=")) { } 1279 if (!strcmp (op, "abs")) { for (i = 0; i < N x*Ny; i++, out++, M1++) { *out = fabs(*M1); }}1280 if (!strcmp (op, "int")) { for (i = 0; i < N x*Ny; i++, out++, M1++) { *out = (opihi_flt)(long long)(*M1); }}1281 1282 if (!strcmp (op, "floor")) { for (i = 0; i < N x*Ny; i++, out++, M1++) { *out = floor (*M1); }}1283 if (!strcmp (op, "ceil")) { for (i = 0; i < N x*Ny; i++, out++, M1++) { *out = ceil (*M1); }}1284 // if (!strcmp (op, "rint")) { for (i = 0; i < N x*Ny; i++, out++, M1++) { *out = nearbyint (*M1); }}1285 1286 if (!strcmp (op, "exp")) { for (i = 0; i < N x*Ny; i++, out++, M1++) { *out = exp(*M1); }}1287 if (!strcmp (op, "ten")) { for (i = 0; i < N x*Ny; i++, out++, M1++) { *out = pow(10.0,*M1); }}1288 if (!strcmp (op, "log")) { for (i = 0; i < N x*Ny; i++, out++, M1++) { *out = log10(*M1); }}1289 if (!strcmp (op, "ln")) { for (i = 0; i < N x*Ny; i++, out++, M1++) { *out = log(*M1); }}1290 if (!strcmp (op, "sqrt")) { for (i = 0; i < N x*Ny; i++, out++, M1++) { *out = sqrt(*M1); }}1291 if (!strcmp (op, "erf")) { for (i = 0; i < N x*Ny; i++, out++, M1++) { *out = erf(*M1); }}1292 1293 if (!strcmp (op, "sinh")) { for (i = 0; i < N x*Ny; i++, out++, M1++) { *out = sinh(*M1); }}1294 if (!strcmp (op, "cosh")) { for (i = 0; i < N x*Ny; i++, out++, M1++) { *out = cosh(*M1); }}1295 if (!strcmp (op, "asinh")) { for (i = 0; i < N x*Ny; i++, out++, M1++) { *out = asinh(*M1); }}1296 if (!strcmp (op, "acosh")) { for (i = 0; i < N x*Ny; i++, out++, M1++) { *out = acosh(*M1); }}1297 if (!strcmp (op, "lgamma")) { for (i = 0; i < N x*Ny; i++, out++, M1++) { *out = lgamma(*M1); }}1298 1299 if (!strcmp (op, "sin")) { for (i = 0; i < N x*Ny; i++, out++, M1++) { *out = sin(*M1); }}1300 if (!strcmp (op, "cos")) { for (i = 0; i < N x*Ny; i++, out++, M1++) { *out = cos(*M1); }}1301 if (!strcmp (op, "tan")) { for (i = 0; i < N x*Ny; i++, out++, M1++) { *out = tan(*M1); }}1302 if (!strcmp (op, "dsin")) { for (i = 0; i < N x*Ny; i++, out++, M1++) { *out = sin(*M1*RAD_DEG); }}1303 if (!strcmp (op, "dcos")) { for (i = 0; i < N x*Ny; i++, out++, M1++) { *out = cos(*M1*RAD_DEG); }}1304 if (!strcmp (op, "dtan")) { for (i = 0; i < N x*Ny; i++, out++, M1++) { *out = tan(*M1*RAD_DEG); }}1305 if (!strcmp (op, "asin")) { for (i = 0; i < N x*Ny; i++, out++, M1++) { *out = asin(*M1); }}1306 if (!strcmp (op, "acos")) { for (i = 0; i < N x*Ny; i++, out++, M1++) { *out = acos(*M1); }}1307 if (!strcmp (op, "atan")) { for (i = 0; i < N x*Ny; i++, out++, M1++) { *out = atan(*M1); }}1308 if (!strcmp (op, "dasin")) { for (i = 0; i < N x*Ny; i++, out++, M1++) { *out = asin(*M1)*DEG_RAD; }}1309 if (!strcmp (op, "dacos")) { for (i = 0; i < N x*Ny; i++, out++, M1++) { *out = acos(*M1)*DEG_RAD; }}1310 if (!strcmp (op, "datan")) { for (i = 0; i < N x*Ny; i++, out++, M1++) { *out = atan(*M1)*DEG_RAD; }}1311 if (!strcmp (op, "not")) { for (i = 0; i < N x*Ny; i++, out++, M1++) { *out = !(*M1); }}1312 if (!strcmp (op, "--")) { for (i = 0; i < N x*Ny; i++, out++, M1++) { *out = -(*M1); }}1313 if (!strcmp (op, "rnd")) { for (i = 0; i < N x*Ny; i++, out++, M1++) { *out = drand48(); }}1314 if (!strcmp (op, "ramp")) { for (i = 0; i < N x*Ny; i++, out++, M1++) { *out = i; }}1315 if (!strcmp (op, "zero")) { for (i = 0; i < N x*Ny; i++, out++, M1++) { *out = 0; }}1316 if (!strcmp (op, "isinf")) { for (i = 0; i < N x*Ny; i++, out++, M1++) { *out = !finite(*M1); }}1317 if (!strcmp (op, "isnan")) { for (i = 0; i < N x*Ny; i++, out++, M1++) { *out = isnan(*M1); }}1318 1319 /* xrm and yrm only make sense in formatrices. see special meaning for vectors */1294 if (!strcmp (op, "abs")) { for (i = 0; i < Npix; i++, out++, M1++) { *out = fabs(*M1); }} 1295 if (!strcmp (op, "int")) { for (i = 0; i < Npix; i++, out++, M1++) { *out = (opihi_flt)(long long)(*M1); }} 1296 1297 if (!strcmp (op, "floor")) { for (i = 0; i < Npix; i++, out++, M1++) { *out = floor (*M1); }} 1298 if (!strcmp (op, "ceil")) { for (i = 0; i < Npix; i++, out++, M1++) { *out = ceil (*M1); }} 1299 // if (!strcmp (op, "rint")) { for (i = 0; i < Npix; i++, out++, M1++) { *out = nearbyint (*M1); }} 1300 1301 if (!strcmp (op, "exp")) { for (i = 0; i < Npix; i++, out++, M1++) { *out = exp(*M1); }} 1302 if (!strcmp (op, "ten")) { for (i = 0; i < Npix; i++, out++, M1++) { *out = pow(10.0,*M1); }} 1303 if (!strcmp (op, "log")) { for (i = 0; i < Npix; i++, out++, M1++) { *out = log10(*M1); }} 1304 if (!strcmp (op, "ln")) { for (i = 0; i < Npix; i++, out++, M1++) { *out = log(*M1); }} 1305 if (!strcmp (op, "sqrt")) { for (i = 0; i < Npix; i++, out++, M1++) { *out = sqrt(*M1); }} 1306 if (!strcmp (op, "erf")) { for (i = 0; i < Npix; i++, out++, M1++) { *out = erf(*M1); }} 1307 1308 if (!strcmp (op, "sinh")) { for (i = 0; i < Npix; i++, out++, M1++) { *out = sinh(*M1); }} 1309 if (!strcmp (op, "cosh")) { for (i = 0; i < Npix; i++, out++, M1++) { *out = cosh(*M1); }} 1310 if (!strcmp (op, "asinh")) { for (i = 0; i < Npix; i++, out++, M1++) { *out = asinh(*M1); }} 1311 if (!strcmp (op, "acosh")) { for (i = 0; i < Npix; i++, out++, M1++) { *out = acosh(*M1); }} 1312 if (!strcmp (op, "lgamma")) { for (i = 0; i < Npix; i++, out++, M1++) { *out = lgamma(*M1); }} 1313 1314 if (!strcmp (op, "sin")) { for (i = 0; i < Npix; i++, out++, M1++) { *out = sin(*M1); }} 1315 if (!strcmp (op, "cos")) { for (i = 0; i < Npix; i++, out++, M1++) { *out = cos(*M1); }} 1316 if (!strcmp (op, "tan")) { for (i = 0; i < Npix; i++, out++, M1++) { *out = tan(*M1); }} 1317 if (!strcmp (op, "dsin")) { for (i = 0; i < Npix; i++, out++, M1++) { *out = sin(*M1*RAD_DEG); }} 1318 if (!strcmp (op, "dcos")) { for (i = 0; i < Npix; i++, out++, M1++) { *out = cos(*M1*RAD_DEG); }} 1319 if (!strcmp (op, "dtan")) { for (i = 0; i < Npix; i++, out++, M1++) { *out = tan(*M1*RAD_DEG); }} 1320 if (!strcmp (op, "asin")) { for (i = 0; i < Npix; i++, out++, M1++) { *out = asin(*M1); }} 1321 if (!strcmp (op, "acos")) { for (i = 0; i < Npix; i++, out++, M1++) { *out = acos(*M1); }} 1322 if (!strcmp (op, "atan")) { for (i = 0; i < Npix; i++, out++, M1++) { *out = atan(*M1); }} 1323 if (!strcmp (op, "dasin")) { for (i = 0; i < Npix; i++, out++, M1++) { *out = asin(*M1)*DEG_RAD; }} 1324 if (!strcmp (op, "dacos")) { for (i = 0; i < Npix; i++, out++, M1++) { *out = acos(*M1)*DEG_RAD; }} 1325 if (!strcmp (op, "datan")) { for (i = 0; i < Npix; i++, out++, M1++) { *out = atan(*M1)*DEG_RAD; }} 1326 if (!strcmp (op, "not")) { for (i = 0; i < Npix; i++, out++, M1++) { *out = !(*M1); }} 1327 if (!strcmp (op, "--")) { for (i = 0; i < Npix; i++, out++, M1++) { *out = -(*M1); }} 1328 if (!strcmp (op, "rnd")) { for (i = 0; i < Npix; i++, out++, M1++) { *out = drand48(); }} 1329 if (!strcmp (op, "ramp")) { for (i = 0; i < Npix; i++, out++, M1++) { *out = i; }} 1330 if (!strcmp (op, "zero")) { for (i = 0; i < Npix; i++, out++, M1++) { *out = 0; }} 1331 if (!strcmp (op, "isinf")) { for (i = 0; i < Npix; i++, out++, M1++) { *out = !finite(*M1); }} 1332 if (!strcmp (op, "isnan")) { for (i = 0; i < Npix; i++, out++, M1++) { *out = isnan(*M1); }} 1333 1334 /* xrm and yrm only make sense for 2D matrices. see special meaning for vectors */ 1320 1335 if (!strcmp (op, "xramp")) { 1336 int Nx = V1[0].buffer[0].matrix.Naxis[0]; 1337 int Ny = V1[0].buffer[0].matrix.Naxis[1]; 1321 1338 for (j = 0; j < Ny; j++) { 1322 1339 for (i = 0; i < Nx; i++, out++, M1++) { … … 1326 1343 } 1327 1344 if (!strcmp (op, "yramp")) { 1345 int Nx = V1[0].buffer[0].matrix.Naxis[0]; 1346 int Ny = V1[0].buffer[0].matrix.Naxis[1]; 1328 1347 for (j = 0; j < Ny; j++) { 1329 1348 for (i = 0; i < Nx; i++, out++, M1++) {
Note:
See TracChangeset
for help on using the changeset viewer.
