source: issm/trunk-jpl/src/c/classes/Options/OptionUtilities.cpp@ 20827

Last change on this file since 20827 was 20827, checked in by agscott1, 9 years ago

CHG: Alphabetized all function names under classes

File size: 2.6 KB
Line 
1/*!\file OptionUtilities.cpp
2 * \brief: implementation of the options utilities
3 */
4
5/*Headers:*/
6/*{{{*/
7#ifdef HAVE_CONFIG_H
8 #include <config.h>
9#else
10#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
11#endif
12
13#include "../classes.h"
14#include "../../shared/shared.h"
15/*}}}*/
16
17int ColumnWiseDimsFromIndex(int* dims,int index,int* size,int ndims){/*{{{*/
18
19 int i;
20 int aprod=1;
21
22 /*check for index too large */
23 for (i=0;i<ndims;i++) aprod*=size[i];
24 if (index >= aprod) _error_("Index " << index << " exceeds number of elements " << aprod << ".");
25
26 /*calculate the dimensions (being careful of integer division) */
27 for (i=ndims-1; i>=0; i--) {
28 aprod=reCast<int>(((IssmPDouble)aprod+0.5)/(IssmPDouble)size[i]);
29 dims[i]=(int)floor(((IssmPDouble)index+0.5)/(IssmPDouble)aprod);
30 index-=dims[i]*aprod;
31 }
32
33 return(0);
34}/*}}}*/
35int IndexFromColumnWiseDims(int* dims, int* size, int ndims) {/*{{{*/
36
37 int i;
38 int index=0;
39
40 /*check for any dimension too large */
41 for (i=0;i<ndims;i++){
42 if (dims[i] >= size[i]) _error_("Dimension " << i << " of " << dims[i] << " exceeds size of " << size[i] << ".");
43 }
44
45 /*calculate the index */
46 for (i=ndims-1; i>=0; i--){
47 index*=size[i];
48 index+=dims[i];
49 }
50
51 return(index);
52}/*}}}*/
53int IndexFromRowWiseDims(int* dims, int* size, int ndims) {/*{{{*/
54
55 int i;
56 int index=0;
57
58 /*check for any dimension too large */
59 for (i=0; i<ndims; i++){
60 if (dims[i] >= size[i]) _error_("Dimension " << i << " of " << dims[i] << " exceeds size of " << size[i] << ".");
61 }
62
63 /*calculate the index */
64 for (i=0; i<ndims; i++) {
65 index*=size[i];
66 index+=dims[i];
67 }
68
69 return(index);
70}/*}}}*/
71int RowWiseDimsFromIndex(int* dims, int index, int* size, int ndims) {/*{{{*/
72
73 int i;
74 int aprod=1;
75
76 /*check for index too large */
77 for (i=0; i<ndims; i++) aprod*=size[i];
78 if (index >= aprod) _error_("Index " << index << " exceeds number of elements " << aprod << ".");
79
80 /*calculate the dimensions (being careful of integer division) */
81 for (i=0; i<ndims; i++) {
82 aprod=(int)(((IssmPDouble)aprod+0.5)/(IssmPDouble)size[i]);
83 dims[i]=(int)floor(((IssmPDouble)index+0.5)/(IssmPDouble)aprod);
84 index-=dims[i]*aprod;
85 }
86
87 return(0);
88}/*}}}*/
89int StringFromDims(char* cstr, int* dims, int ndims) {/*{{{*/
90
91 sprintf(&cstr[0],"[");
92 for(int i=0; i<ndims-1; i++) sprintf(&cstr[strlen(cstr)],"%d,",dims[i]);
93 sprintf(&cstr[strlen(cstr)],"%d]",dims[ndims-1]);
94
95 return(0);
96}/*}}}*/
97int StringFromSize(char* cstr, int* size, int ndims) {/*{{{*/
98
99 sprintf(&cstr[0],"[");
100 for(int i=0; i<ndims-1; i++) sprintf(&cstr[strlen(cstr)],"%dx",size[i]);
101 sprintf(&cstr[strlen(cstr)],"%d]",size[ndims-1]);
102
103 return(0);
104}/*}}}*/
Note: See TracBrowser for help on using the repository browser.