Changeset 5217
- Timestamp:
- 08/12/10 17:54:04 (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/c/modules/ModelProcessorx/Qmu/CreateParametersQmu.cpp
r5103 r5217 27 27 char** variabledescriptors=NULL; 28 28 char* descriptor=NULL; 29 char* root=NULL; 29 30 double* dakota_parameter=NULL; 30 31 … … 52 53 int count; 53 54 55 /*fetching of parameters: */ 56 int found=0; 57 char** strings=NULL; 58 char* string=NULL; 59 54 60 #ifdef _SERIAL_ 55 61 mxArray* pfield=NULL; … … 77 83 parameters->AddObject(new StringParam(QmuErrNameEnum,qmuerrname)); 78 84 /*}}}*/ 79 85 80 86 /*Deal with variable descriptors: {{{1*/ 81 87 variabledescriptors=(char**)xmalloc(iomodel->numberofvariables*sizeof(char*)); … … 95 101 #else 96 102 for(i=0;i<iomodel->numberofvariables;i++){ 97 sprintf(variabledescriptors_tag,"%s%i","variabledescriptor",i );103 sprintf(variabledescriptors_tag,"%s%i","variabledescriptor",i+1); 98 104 IoModelFetchData(&descriptor,iomodel_handle,variabledescriptors_tag); 99 105 variabledescriptors[i]=descriptor; … … 119 125 #else 120 126 for(i=0;i<iomodel->numberofresponses;i++){ 121 sprintf(responsedescriptors_tag,"%s%i","responsedescriptor",i );127 sprintf(responsedescriptors_tag,"%s%i","responsedescriptor",i+1); 122 128 IoModelFetchData(&descriptor,iomodel_handle,responsedescriptors_tag); 123 129 responsedescriptors[i]=descriptor; … … 127 133 /*Ok, we have all the response descriptors. Build a parameter with it: */ 128 134 parameters->AddObject(new StringArrayParam(ResponseDescriptorsEnum,responsedescriptors,iomodel->numberofresponses)); 129 /*}}} }*/135 /*}}}*/ 130 136 131 137 /*Deal with partitioning: {{{1*/ … … 147 153 148 154 /*Deal with data needed because of qmu variable inputs: {{{1*/ 149 for(i=0;i<iomodel->numberofvariables;i++){ 150 155 156 /*First, build a list of strings, used to make sure we don't deal with the same descriptor twice: */ 157 if(iomodel->numberofvariables){ 158 strings=(char**)xmalloc(iomodel->numberofvariables*sizeof(char*)); 159 for(i=0;i<iomodel->numberofvariables;i++)strings[i]=NULL; 160 } 161 162 /*Now, go through all our needed variables, and fetch the corresponding data: */ 163 for(i=0;i<iomodel->numberofvariables;i++){ 164 165 /*recover root of descriptor. Descriptors can come in 2 forms: Letters+Number or just letters (ex: Thickness1, RhoIce, Surface3). Strip the number 166 * from the descriptor (root), so that we key off of this: */ 151 167 descriptor=variabledescriptors[i]; 152 153 if ((strcmp(descriptor,"Thickness")==0) || (strcmp(descriptor,"DragCoefficient") ==0) || (strcmp(descriptor,"Surface") ==0) || (strcmp(descriptor,"Bed") ==0) 154 155 156 ){ 157 158 IoModelFetchData(&dakota_parameter,NULL,NULL,iomodel_handle,EnumToModelField(StringToEnum(descriptor))); 159 parameters->AddObject(new DoubleVecParam(StringToEnum(descriptor),dakota_parameter,iomodel->numberofvertices)); 160 xfree((void**)&dakota_parameter); 161 } 162 } 168 if(isdistributed(&root,descriptor)){ 169 170 //now, check that this root was not already processed, ie we did not already fetch the corresponding data! 171 found=0; 172 for(j=0;j<iomodel->numberofvariables;j++){ 173 if (strings[j]) if (strcmp(strings[j],root)==0)found=1; 174 } 175 176 /*If we did not, fetch data and add it to the parameters: */ 177 if(!found){ 178 179 /*Recover: */ 180 printf("ok1 %s %s %s\n",descriptor,root,EnumToModelField(StringToEnum(root))); 181 182 IoModelFetchData(&dakota_parameter,NULL,NULL,iomodel_handle,EnumToModelField(StringToEnum(root))); 183 184 /*Add to parameters: */ 185 parameters->AddObject(new DoubleVecParam(StringToEnum(root),dakota_parameter,iomodel->numberofvertices)); 186 187 /*Free ressources:*/ 188 xfree((void**)&dakota_parameter); 189 190 /*Ensure we won't process this variable anymore: */ 191 string=(char*)xmalloc((strlen(root)+1)*sizeof(char)); strcpy(string,root); strings[i]=string; 192 } 193 } 194 xfree((void**)&root); 195 } 196 /*Free strings: not needed anymore */ 197 for(i=0;i<iomodel->numberofvariables;i++){ 198 string=strings[i]; 199 xfree((void**)&string); 200 } 201 xfree((void**)&strings); 163 202 /*}}}*/ 164 203
Note:
See TracChangeset
for help on using the changeset viewer.