Changeset 5827 for issm/trunk/src/c/objects/Numerics/ElementMatrix.cpp
- Timestamp:
- 09/15/10 13:09:01 (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/c/objects/Numerics/ElementMatrix.cpp
r5821 r5827 30 30 31 31 this->row_fsize=0; 32 this->row_f internaldoflist=NULL;33 this->row_f externaldoflist=NULL;32 this->row_flocaldoflist=NULL; 33 this->row_fglobaldoflist=NULL; 34 34 this->row_ssize=0; 35 this->row_s internaldoflist=NULL;36 this->row_s externaldoflist=NULL;35 this->row_slocaldoflist=NULL; 36 this->row_sglobaldoflist=NULL; 37 37 38 38 this->col_fsize=0; 39 this->col_f internaldoflist=NULL;40 this->col_f externaldoflist=NULL;39 this->col_flocaldoflist=NULL; 40 this->col_fglobaldoflist=NULL; 41 41 this->col_ssize=0; 42 this->col_s internaldoflist=NULL;43 this->col_s externaldoflist=NULL;44 45 } 46 /*}}}*/ 47 /*FUNCTION ElementMatrix::ElementMatrix(int gsize,bool square,int* in_g externaldoflist){{{1*/48 ElementMatrix::ElementMatrix(int gsize,bool square,int* in_g externaldoflist){42 this->col_slocaldoflist=NULL; 43 this->col_sglobaldoflist=NULL; 44 45 } 46 /*}}}*/ 47 /*FUNCTION ElementMatrix::ElementMatrix(int gsize,bool square,int* in_gglobaldoflist){{{1*/ 48 ElementMatrix::ElementMatrix(int gsize,bool square,int* in_gglobaldoflist){ 49 49 50 50 if(square=false)ISSMERROR(" calling square constructor with false square flag!"); … … 59 59 60 60 if(this->nrows){ 61 this->g externaldoflist=(int*)xmalloc(this->nrows*sizeof(int));62 memcpy(this->g externaldoflist,in_gexternaldoflist,this->nrows*sizeof(int));63 } 64 else{ 65 this->g externaldoflist=NULL;61 this->gglobaldoflist=(int*)xmalloc(this->nrows*sizeof(int)); 62 memcpy(this->gglobaldoflist,in_gglobaldoflist,this->nrows*sizeof(int)); 63 } 64 else{ 65 this->gglobaldoflist=NULL; 66 66 } 67 67 68 68 /*don't do rows and cols, because kff is false:*/ 69 69 this->row_fsize=0; 70 this->row_f internaldoflist=NULL;71 this->row_f externaldoflist=NULL;70 this->row_flocaldoflist=NULL; 71 this->row_fglobaldoflist=NULL; 72 72 this->row_ssize=0; 73 this->row_s internaldoflist=NULL;74 this->row_s externaldoflist=NULL;73 this->row_slocaldoflist=NULL; 74 this->row_sglobaldoflist=NULL; 75 75 76 76 this->col_fsize=0; 77 this->col_f internaldoflist=NULL;78 this->col_f externaldoflist=NULL;77 this->col_flocaldoflist=NULL; 78 this->col_fglobaldoflist=NULL; 79 79 this->col_ssize=0; 80 this->col_s internaldoflist=NULL;81 this->col_s externaldoflist=NULL;82 83 } 84 /*}}}*/ 85 /*FUNCTION ElementMatrix::ElementMatrix(int gsize,bool square,int* f internaldoflist,int* fexternaldoflist,int fsize,int* sinternaldoflist,int* sexternaldoflist,int ssize){{{1*/86 ElementMatrix::ElementMatrix(int gsize,bool square,int* f internaldoflist,int* fexternaldoflist,int fsize,int* sinternaldoflist,int* sexternaldoflist,int ssize){80 this->col_slocaldoflist=NULL; 81 this->col_sglobaldoflist=NULL; 82 83 } 84 /*}}}*/ 85 /*FUNCTION ElementMatrix::ElementMatrix(int gsize,bool square,int* flocaldoflist,int* fglobaldoflist,int fsize,int* slocaldoflist,int* sglobaldoflist,int ssize){{{1*/ 86 ElementMatrix::ElementMatrix(int gsize,bool square,int* flocaldoflist,int* fglobaldoflist,int fsize,int* slocaldoflist,int* sglobaldoflist,int ssize){ 87 87 88 88 if(square=false)ISSMERROR(" calling square constructor with false square flag!"); … … 99 99 this->row_fsize=fsize; 100 100 if(fsize){ 101 this->row_f internaldoflist=(int*)xmalloc(fsize*sizeof(int));102 this->row_f externaldoflist=(int*)xmalloc(fsize*sizeof(int));103 memcpy(this->row_f internaldoflist,finternaldoflist,fsize*sizeof(int));104 memcpy(this->row_f externaldoflist,fexternaldoflist,fsize*sizeof(int));105 } 106 else{ 107 this->row_f internaldoflist=NULL;108 this->row_f externaldoflist=NULL;101 this->row_flocaldoflist=(int*)xmalloc(fsize*sizeof(int)); 102 this->row_fglobaldoflist=(int*)xmalloc(fsize*sizeof(int)); 103 memcpy(this->row_flocaldoflist,flocaldoflist,fsize*sizeof(int)); 104 memcpy(this->row_fglobaldoflist,fglobaldoflist,fsize*sizeof(int)); 105 } 106 else{ 107 this->row_flocaldoflist=NULL; 108 this->row_fglobaldoflist=NULL; 109 109 } 110 110 111 111 this->row_ssize=ssize; 112 112 if(ssize){ 113 this->row_s internaldoflist=(int*)xmalloc(ssize*sizeof(int));114 this->row_s externaldoflist=(int*)xmalloc(ssize*sizeof(int));115 memcpy(this->row_s internaldoflist,sinternaldoflist,ssize*sizeof(int));116 memcpy(this->row_s externaldoflist,sexternaldoflist,ssize*sizeof(int));117 } 118 else{ 119 this->row_s internaldoflist=NULL;120 this->row_s externaldoflist=NULL;113 this->row_slocaldoflist=(int*)xmalloc(ssize*sizeof(int)); 114 this->row_sglobaldoflist=(int*)xmalloc(ssize*sizeof(int)); 115 memcpy(this->row_slocaldoflist,slocaldoflist,ssize*sizeof(int)); 116 memcpy(this->row_sglobaldoflist,sglobaldoflist,ssize*sizeof(int)); 117 } 118 else{ 119 this->row_slocaldoflist=NULL; 120 this->row_sglobaldoflist=NULL; 121 121 } 122 122 123 123 /*don't do cols, we can't pick them up from the rows: */ 124 124 this->col_fsize=0; 125 this->col_f internaldoflist=NULL;126 this->col_f externaldoflist=NULL;125 this->col_flocaldoflist=NULL; 126 this->col_fglobaldoflist=NULL; 127 127 this->col_ssize=0; 128 this->col_s internaldoflist=NULL;129 this->col_s externaldoflist=NULL;128 this->col_slocaldoflist=NULL; 129 this->col_sglobaldoflist=NULL; 130 130 131 131 /*don't do g-set: */ 132 this->g externaldoflist=NULL;132 this->gglobaldoflist=NULL; 133 133 134 134 } … … 138 138 139 139 xfree((void**)&this->values); 140 xfree((void**)&this->g externaldoflist);141 xfree((void**)&this->row_f internaldoflist);142 xfree((void**)&this->row_f externaldoflist);143 xfree((void**)&this->row_s internaldoflist);144 xfree((void**)&this->row_s externaldoflist);145 xfree((void**)&this->col_f internaldoflist);146 xfree((void**)&this->col_f externaldoflist);147 xfree((void**)&this->col_s internaldoflist);148 xfree((void**)&this->col_s externaldoflist);140 xfree((void**)&this->gglobaldoflist); 141 xfree((void**)&this->row_flocaldoflist); 142 xfree((void**)&this->row_fglobaldoflist); 143 xfree((void**)&this->row_slocaldoflist); 144 xfree((void**)&this->row_sglobaldoflist); 145 xfree((void**)&this->col_flocaldoflist); 146 xfree((void**)&this->col_fglobaldoflist); 147 xfree((void**)&this->col_slocaldoflist); 148 xfree((void**)&this->col_sglobaldoflist); 149 149 } 150 150 /*}}}*/ … … 167 167 168 168 int i,j; 169 double* internalvalues=NULL;169 double* localvalues=NULL; 170 170 171 171 if(this->square){ … … 173 173 174 174 if(!this->kff){ 175 /*add internal values into global matrix, using the fexternaldoflist: */176 MatSetValues(Kgg,this->nrows,this->g externaldoflist,this->nrows,this->gexternaldoflist,(const double*)values,ADD_VALUES);175 /*add local values into global matrix, using the fglobaldoflist: */ 176 MatSetValues(Kgg,this->nrows,this->gglobaldoflist,this->nrows,this->gglobaldoflist,(const double*)values,ADD_VALUES); 177 177 } 178 178 else{ 179 179 if(this->row_fsize){ 180 180 /*first, retrieve values that are in the f-set from the g-set values matrix: */ 181 internalvalues=(double*)xmalloc(this->row_fsize*this->row_fsize*sizeof(double));181 localvalues=(double*)xmalloc(this->row_fsize*this->row_fsize*sizeof(double)); 182 182 for(i=0;i<this->row_fsize;i++){ 183 183 for(j=0;j<this->row_fsize;j++){ 184 *( internalvalues+this->row_fsize*i+j)=*(this->values+this->ncols*this->row_finternaldoflist[i]+this->row_finternaldoflist[j]);184 *(localvalues+this->row_fsize*i+j)=*(this->values+this->ncols*this->row_flocaldoflist[i]+this->row_flocaldoflist[j]); 185 185 } 186 186 } 187 /*add internal values into global matrix, using the fexternaldoflist: */188 MatSetValues(Kff,this->row_fsize,this->row_f externaldoflist,this->row_fsize,this->row_fexternaldoflist,(const double*)internalvalues,ADD_VALUES);187 /*add local values into global matrix, using the fglobaldoflist: */ 188 MatSetValues(Kff,this->row_fsize,this->row_fglobaldoflist,this->row_fsize,this->row_fglobaldoflist,(const double*)localvalues,ADD_VALUES); 189 189 190 190 /*Free ressources:*/ 191 xfree((void**)& internalvalues);191 xfree((void**)&localvalues); 192 192 } 193 193 … … 195 195 if((this->row_ssize!=0) && (this->row_fsize!=0)){ 196 196 /*first, retrieve values that are in the f and s-set from the g-set values matrix: */ 197 internalvalues=(double*)xmalloc(this->row_fsize*this->row_ssize*sizeof(double));197 localvalues=(double*)xmalloc(this->row_fsize*this->row_ssize*sizeof(double)); 198 198 for(i=0;i<this->row_fsize;i++){ 199 199 for(j=0;j<this->row_ssize;j++){ 200 *( internalvalues+this->row_ssize*i+j)=*(this->values+this->ncols*this->row_finternaldoflist[i]+this->row_sinternaldoflist[j]);200 *(localvalues+this->row_ssize*i+j)=*(this->values+this->ncols*this->row_flocaldoflist[i]+this->row_slocaldoflist[j]); 201 201 } 202 202 } 203 /*add internal values into global matrix, using the fexternaldoflist: */204 MatSetValues(Kfs,this->row_fsize,this->row_f externaldoflist,this->row_ssize,this->row_sexternaldoflist,(const double*)internalvalues,ADD_VALUES);203 /*add local values into global matrix, using the fglobaldoflist: */ 204 MatSetValues(Kfs,this->row_fsize,this->row_fglobaldoflist,this->row_ssize,this->row_sglobaldoflist,(const double*)localvalues,ADD_VALUES); 205 205 206 206 /*Free ressources:*/ 207 xfree((void**)& internalvalues);207 xfree((void**)&localvalues); 208 208 } 209 209 } … … 232 232 } 233 233 234 printf(" g externaldoflist (%p): ",gexternaldoflist);235 if(g externaldoflist) for(i=0;i<nrows;i++)printf("%i ",gexternaldoflist[i]); printf("\n");234 printf(" gglobaldoflist (%p): ",gglobaldoflist); 235 if(gglobaldoflist) for(i=0;i<nrows;i++)printf("%i ",gglobaldoflist[i]); printf("\n"); 236 236 237 237 printf(" row_fsize: %i\n",row_fsize); 238 printf(" row_f internaldoflist (%p): ",row_finternaldoflist);239 if(row_f internaldoflist) for(i=0;i<row_fsize;i++)printf("%i ",row_finternaldoflist[i]); printf("\n");240 printf(" row_f externaldoflist (%p): ",row_fexternaldoflist);241 if(row_f externaldoflist)for(i=0;i<row_fsize;i++)printf("%i ",row_fexternaldoflist[i]); printf("\n");238 printf(" row_flocaldoflist (%p): ",row_flocaldoflist); 239 if(row_flocaldoflist) for(i=0;i<row_fsize;i++)printf("%i ",row_flocaldoflist[i]); printf("\n"); 240 printf(" row_fglobaldoflist (%p): ",row_fglobaldoflist); 241 if(row_fglobaldoflist)for(i=0;i<row_fsize;i++)printf("%i ",row_fglobaldoflist[i]); printf("\n"); 242 242 243 243 printf(" row_ssize: %i\n",row_ssize); 244 printf(" row_s internaldoflist (%p): ",row_sinternaldoflist);245 if(row_s internaldoflist)for(i=0;i<row_ssize;i++)printf("%i ",row_sinternaldoflist[i]); printf("\n");246 printf(" row_s externaldoflist (%p): ",row_sexternaldoflist);247 if(row_s externaldoflist)for(i=0;i<row_ssize;i++)printf("%i ",row_sexternaldoflist[i]); printf("\n");244 printf(" row_slocaldoflist (%p): ",row_slocaldoflist); 245 if(row_slocaldoflist)for(i=0;i<row_ssize;i++)printf("%i ",row_slocaldoflist[i]); printf("\n"); 246 printf(" row_sglobaldoflist (%p): ",row_sglobaldoflist); 247 if(row_sglobaldoflist)for(i=0;i<row_ssize;i++)printf("%i ",row_sglobaldoflist[i]); printf("\n"); 248 248 249 249 if(!square){ 250 250 printf(" col_fsize: %i\n",col_fsize); 251 printf(" col_f internaldoflist (%p): ",col_finternaldoflist);252 if(col_f internaldoflist)for(i=0;i<col_fsize;i++)printf("%i ",col_finternaldoflist[i]); printf("\n");253 printf(" col_f externaldoflist (%p): ",col_fexternaldoflist);254 if(col_f externaldoflist)for(i=0;i<col_fsize;i++)printf("%i ",col_fexternaldoflist[i]); printf("\n");251 printf(" col_flocaldoflist (%p): ",col_flocaldoflist); 252 if(col_flocaldoflist)for(i=0;i<col_fsize;i++)printf("%i ",col_flocaldoflist[i]); printf("\n"); 253 printf(" col_fglobaldoflist (%p): ",col_fglobaldoflist); 254 if(col_fglobaldoflist)for(i=0;i<col_fsize;i++)printf("%i ",col_fglobaldoflist[i]); printf("\n"); 255 255 256 256 printf(" col_ssize: %i\n",col_ssize); 257 printf(" col_s internaldoflist (%p): ",col_sinternaldoflist);258 if(col_s internaldoflist)for(i=0;i<col_ssize;i++)printf("%i ",col_sinternaldoflist[i]); printf("\n");259 printf(" col_s externaldoflist (%p): ",col_sexternaldoflist);260 if(col_s externaldoflist)for(i=0;i<col_ssize;i++)printf("%i ",col_sexternaldoflist[i]); printf("\n");261 } 262 } 263 /*}}}*/ 257 printf(" col_slocaldoflist (%p): ",col_slocaldoflist); 258 if(col_slocaldoflist)for(i=0;i<col_ssize;i++)printf("%i ",col_slocaldoflist[i]); printf("\n"); 259 printf(" col_sglobaldoflist (%p): ",col_sglobaldoflist); 260 if(col_sglobaldoflist)for(i=0;i<col_ssize;i++)printf("%i ",col_sglobaldoflist[i]); printf("\n"); 261 } 262 } 263 /*}}}*/
Note:
See TracChangeset
for help on using the changeset viewer.