22 int * variable_partitions_npart = NULL;
23 int * variable_partitions_nt = NULL;
24 int variable_partitions_num;
29 double *distributed_values = NULL;
30 double *parameter = NULL;
31 char *descriptor = NULL;
46 for(i=0;i<numdakotavariables;i++){
48 descriptor=variables_descriptors[i];
53 if (strncmp(descriptor,
"scaled_",7)==0){
56 variable_partition=variable_partitions[variablecount];
57 npart=variable_partitions_npart[variablecount];
58 nt=variable_partitions_nt[variablecount];
64 memcpy(root,strstr(descriptor,
"_")+1,(strlen(strstr(descriptor,
"_")+1)+1)*
sizeof(
char));
65 *strstr(root,
"_")=
'\0';
67 distributed_values=xNew<double>(npart*nt);
68 for(j=0;j<npart*nt;j++){
69 distributed_values[j]=variables[i+j];
84 if (nt!=1)
_error_(
"InputUpdateFromDakotax error message: transient input being updated should be the same col size as the number of time step in the qmu variable specificationi");
89 if (nrows==numberofvertices || nrows==(numberofvertices+1)){
90 for(k=0;k<numberofvertices;k++){
91 if (variable_partition[k]==-1)
continue;
94 *(parameter+ncols*k+l)=*(parameter+ncols*k+l)*distributed_values[(int)variable_partition[k]];
99 else if (nrows==numberofelements || nrows==(numberofelements+1)){
100 for(k=0;k<numberofelements;k++){
101 if (variable_partition[k]==-1)
continue;
103 for(l=0;l<ncols;l++){
104 *(parameter+ncols*k+l)=*(parameter+ncols*k+l)*distributed_values[(int)variable_partition[k]];
110 else _error_(
"partitioning vector should be either elements or vertex sized!");
115 if (nrows==numberofvertices || nrows==(numberofvertices+1)){
116 for(k=0;k<numberofvertices;k++){
117 if (variable_partition[k]==-1)
continue;
119 for(l=0;l<ncols;l++){
120 *(parameter+ncols*k+l)=*(parameter+ncols*k+l)*distributed_values[(int)variable_partition[k]*nt+l];
125 else if (nrows==numberofelements || nrows==(numberofelements+1)){
126 for(k=0;k<numberofelements;k++){
127 if (variable_partition[k]==-1)
continue;
129 for(l=0;l<ncols;l++){
130 *(parameter+ncols*k+l)=*(parameter+ncols*k+l)*distributed_values[(int)variable_partition[k]*nt+l];
136 else _error_(
"partitioning vector should be either elements or vertex sized!");
142 for(l=0;l<ncols;l++){
146 for(k=0;k<numberofvertices;k++){
147 PetscSynchronizedPrintf(
IssmComm::GetComm(),
" node %i value %g\n",k+1,*(parameter+k*ncols+l));
156 if(nrows==numberofvertices || (nrows==numberofvertices+1))
165 xDelete<double>(parameter);
166 xDelete<double>(distributed_values);
168 else if (strncmp(descriptor,
"indexed_",8)==0){
169 _error_(
"indexed variables not supported yet!");
171 else if (strncmp(descriptor,
"nodal_",8)==0){
172 _error_(
"nodal variables not supported yet!");
182 for(i=0;i<variable_partitions_num;i++){
184 xDelete<IssmDouble>(matrix);
186 xDelete<IssmDouble*>(variable_partitions);
187 xDelete<int>(variable_partitions_npart);
188 xDelete<int>(variable_partitions_nt);