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

Last change on this file since 18064 was 18064, checked in by Mathieu Morlighem, 11 years ago

DEL: removed all FUNCTIONs

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