Changeset 3556
- Timestamp:
- 04/16/10 11:34:43 (15 years ago)
- Location:
- issm/trunk/src
- Files:
-
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/c/DataSet/DataSet.cpp
r3529 r3556 1073 1073 /*}}}*/ 1074 1074 /*FUNCTION DataSet::FieldAverageOntoVertices{{{1*/ 1075 void DataSet::FieldAverageOntoVertices(Vec field,double* field_serial,char* fieldname){1075 void DataSet::FieldAverageOntoVertices(Vec fieldsum,Vec connectivity,double* field){ 1076 1076 1077 1077 vector<Object*>::iterator object; … … 1082 1082 if((*object)->Enum()==NodeEnum()){ 1083 1083 node=(Node*)(*object); 1084 node->FieldAverageOntoVertices(field ,field_serial,fieldname);1084 node->FieldAverageOntoVertices(fieldsum,connectivity,field); 1085 1085 } 1086 1086 -
issm/trunk/src/c/DataSet/DataSet.h
r3529 r3556 88 88 void CostFunction(double* pJ, void* inputs,int analysis_type,int sub_analysis_type); 89 89 void SurfaceArea(double* pS, void* inputs,int analysis_type,int sub_analysis_type); 90 void FieldAverageOntoVertices(Vec field ,double* field_serial,char* fieldname);90 void FieldAverageOntoVertices(Vec fieldsum,Vec connectivity,double* field); 91 91 void FieldDepthAverageAtBase(Vec field,double* field_serial,char* fieldname); 92 92 int DeleteObject(Object* object); -
issm/trunk/src/c/FieldAverageOntoVerticesx/FieldAverageOntoVerticesx.cpp
r3446 r3556 10 10 #include "../EnumDefinitions/EnumDefinitions.h" 11 11 12 void FieldAverageOntoVerticesx( Vec field, DataSet* elements,DataSet* nodes, DataSet* vertices, DataSet* loads, DataSet* materials, DataSet* parameters,char* fieldname){12 void FieldAverageOntoVerticesx(Vec* pfield, DataSet* elements,DataSet* nodes, DataSet* vertices, DataSet* loads, DataSet* materials, DataSet* parameters){ 13 13 14 extern int my_rank; 15 16 /*Intermediary*/ 17 int numberofvertices,found; 18 Vec connectivity=NULL; 19 Vec fieldsum=NULL; 14 20 double* field_serial=NULL; 21 22 /*Output*/ 23 Vec field=NULL; 24 25 /*Initioalize intermediary*/ 26 found=parameters->FindParam(&numberofvertices,"numberofvertices"); 27 connectivity=NewVec(numberofvertices); 28 fieldsum =NewVec(numberofvertices); 15 29 16 30 /*First, get elements and nodes configured: */ … … 20 34 21 35 /*Serialize field: */ 22 VecToMPISerial(&field_serial, field);36 VecToMPISerial(&field_serial,*pfield); 23 37 24 /* Depth average field, onto base of mesh: */25 nodes->FieldAverageOntoVertices(field ,field_serial,fieldname);38 /*Compute summ of connectivity and summ of values: */ 39 nodes->FieldAverageOntoVertices(fieldsum,connectivity,field_serial); 26 40 27 /*Assemble vector: */ 28 VecAssemblyBegin(field); 29 VecAssemblyEnd(field); 41 /*Assemble vectors: */ 42 VecAssemblyBegin(connectivity); 43 VecAssemblyEnd(connectivity); 44 VecAssemblyBegin(fieldsum); 45 VecAssemblyEnd(fieldsum); 46 47 /*Initialize output*/ 48 field=NewVec(numberofvertices); 49 50 /*Create Field = Fieldsum./connectivity */ 51 VecPointwiseDivide(field,fieldsum,connectivity); 52 53 /*Assign output pointer*/ 54 VecFree(pfield); 55 *pfield=field; 30 56 31 57 /*Free ressources:*/ 32 58 xfree((void**)&field_serial); 59 VecFree(&connectivity); 60 VecFree(&fieldsum); 33 61 34 62 } -
issm/trunk/src/c/FieldAverageOntoVerticesx/FieldAverageOntoVerticesx.h
r3446 r3556 9 9 10 10 /* local prototypes: */ 11 void FieldAverageOntoVerticesx( Vec field, DataSet* elements,DataSet* nodes, DataSet* vertices, DataSet* loads, DataSet* materials, DataSet* parameters,char* fieldname);11 void FieldAverageOntoVerticesx(Vec* field, DataSet* elements,DataSet* nodes, DataSet* vertices, DataSet* loads, DataSet* materials, DataSet* parameters); 12 12 13 13 #endif /* _FIELDDEPTHAVERAGEX_H */ -
issm/trunk/src/c/objects/Node.cpp
r3534 r3556 484 484 /*}}}*/ 485 485 /*FUNCTION Node::FieldAverageOntoVertices{{{2*/ 486 void Node::FieldAverageOntoVertices(Vec field,double* field_serial,char* fieldname){ 487 488 ISSMERROR("NOT SUPPORTED YET"); // we need the vertex number ! 486 void Node::FieldAverageOntoVertices(Vec fieldsum,Vec connectivity,double* field){ 487 488 /*Intermediary*/ 489 int vertexdof; 490 int index; 491 double value; 492 493 /*Skip if clone*/ 494 if (indexing.clone==1) return; 495 496 /*Check dofpernode*/ 497 if (indexing.numberofdofs!=1) ISSMERROR("only one dof suppoerted yet"); 498 499 /*Get value at node*/ 500 index=indexing.doflist[0]; 501 value=field[index]; 502 printf("value[%i]=%g\n",id,value); 503 504 /*Add values to the two vectors*/ 505 vertexdof=this->GetVertexDof(); 506 VecSetValue(fieldsum, vertexdof,value,ADD_VALUES); 507 VecSetValue(connectivity,vertexdof,1.0, ADD_VALUES); 489 508 } 490 509 /*}}}*/ -
issm/trunk/src/c/objects/Node.h
r3464 r3556 83 83 int IsOnSurface(); 84 84 void FreezeDof(int dof); 85 void FieldAverageOntoVertices(Vec field ,double* field_serial,char* fieldname);85 void FieldAverageOntoVertices(Vec fieldsum,Vec connectivity,double* field); 86 86 void FieldDepthAverageAtBase(Vec field,double* field_serial,char* fieldname); 87 87 int IsOnShelf(); -
issm/trunk/src/c/objects/Tria.cpp
r3534 r3556 1959 1959 MatSetValues(Kgg,numdof,doflist,numdof,doflist,(const double*)Ke_gg,ADD_VALUES); 1960 1960 1961 #ifdef _DEBUGELEMENTS_1962 if(my_rank==RANK && id==ELID){1963 printf(" Ke_gg erms:\n");1964 for( i=0; i<numdof; i++){1965 for (j=0;j<numdof;j++){1966 printf("%g ",Ke_gg[i][j]);1967 }1968 printf("\n");1969 }1970 printf(" Ke_gg row_indices:\n");1971 for( i=0; i<numdof; i++){1972 printf("%i ",doflist[i]);1973 }1974 1975 }1976 #endif1977 1961 1978 1962 cleanup_and_return: -
issm/trunk/src/c/parallel/ProcessResults.cpp
r3529 r3556 106 106 double* v_g_serial=NULL; 107 107 108 int numberofnodes,numberof elements;108 int numberofnodes,numberofvertices,numberofelements; 109 109 110 110 /*Initialize new results: */ … … 350 350 } 351 351 else if(strcmp(result->GetFieldName(),"h_g")==0){ 352 /*easy, h_g is of size numberof nodes, on 1 dof, just repartition: */352 /*easy, h_g is of size numberofvertices, on 1 dof, just repartition: */ 353 353 result->GetField(&h_g); 354 354 VecToMPISerial(&h_g_serial,h_g); 355 fem_p->parameters->FindParam(&numberof nodes,"numberofnodes");355 fem_p->parameters->FindParam(&numberofvertices,"numberofvertices"); 356 356 VecToMPISerial(&partition,fem_p->partition->vector); 357 357 358 thickness=(double*)xmalloc(numberof nodes*sizeof(double));359 360 for(i=0;i<numberof nodes;i++){358 thickness=(double*)xmalloc(numberofvertices*sizeof(double)); 359 360 for(i=0;i<numberofvertices;i++){ 361 361 thickness[i]=h_g_serial[(int)partition[i]]; 362 362 } 363 363 364 364 /*Ok, add pressure to newresults: */ 365 newresult=new Result(newresults->Size()+1,result->GetTime(),result->GetStep(),"thickness",thickness,numberof nodes);365 newresult=new Result(newresults->Size()+1,result->GetTime(),result->GetStep(),"thickness",thickness,numberofvertices); 366 366 newresults->AddObject(newresult); 367 367 -
issm/trunk/src/c/parallel/prognostic2_core.cpp
r3534 r3556 56 56 diagnostic_core_linear(&h_g,fem_p,inputs,Prognostic2AnalysisEnum(),NoneAnalysisEnum()); 57 57 58 _printf_("extrude computed thickness on all layers:\n"); 59 //FieldAverageOntoVertices(h_g, fem_p->elements,fem_p->nodes, fem_p->vertices,fem_p->loads, fem_p->materials,fem_p->parameters,"thickness",0); 58 _printf_("Averaging over vertices:\n"); 59 FieldAverageOntoVerticesx(&h_g,fem_p->elements,fem_p->nodes,fem_p->vertices,fem_p->loads,fem_p->materials,fem_p->parameters); 60 61 //_printf_("extrude computed thickness on all layers:\n"); 62 //FieldExtrudex(h_g, fem_p->elements,fem_p->nodes, fem_p->vertices,fem_p->loads, fem_p->materials,fem_p->parameters,"thickness",0); 60 63 61 64 /*Plug results into output dataset: */ -
issm/trunk/src/c/shared/Elements/elements.h
r3496 r3556 18 18 printf(" [ "); 19 19 for (j=0;j<cols;j++){ 20 printf(" %10g ",array[i*cols+j]); 20 printf(" %10.10g ",array[i*cols+j]); 21 } 22 printf(" ]\n"); 23 } 24 printf("\n"); 25 } 26 inline void printarray(int* array,int lines,int cols){ 27 int i,j; 28 printf("\n"); 29 for (i=0;i<lines;i++){ 30 printf(" [ "); 31 for (j=0;j<cols;j++){ 32 printf(" %i",array[i*cols+j]); 21 33 } 22 34 printf(" ]\n"); -
issm/trunk/src/m/solutions/jpl/prognostic2_core.m
r3534 r3556 25 25 results.h_g=diagnostic_core_linear(m,inputs,analysis_type,sub_analysis_type); 26 26 27 displaystring(m.parameters.verbose,'\n%s',['averaging over vertices']); 28 results.h_g=FieldAverageOntoVertices(m.elements,m.nodes,m.vertices,m.loads,m.materials,m.parameters,results.h_g); 29 27 30 displaystring(m.parameters.verbose,'\n%s',['extrude computed thickness on all layers:']); 28 31 %results.h_g=FieldAverageOntoVertices(m.elements,m.nodes,m.loads,m.materials,m.parameters,results.h_g,'thickness'); -
issm/trunk/src/mex/FieldAverageOntoVertices/FieldAverageOntoVertices.cpp
r3445 r3556 18 18 DataSet* parameters=NULL; 19 19 Vec field=NULL; 20 char* fieldname=NULL;21 20 22 21 /*Boot module: */ … … 34 33 FetchParams(¶meters,PARAMETERS); 35 34 FetchData(&field,FIELD); 36 FetchData(&fieldname,FIELDNAME);37 35 38 36 /*!Call core code: */ 39 FieldAverageOntoVerticesx( field,elements,nodes,vertices,loads,materials,parameters,fieldname);37 FieldAverageOntoVerticesx(&field,elements,nodes,vertices,loads,materials,parameters); 40 38 41 39 /*write output : */ … … 50 48 delete parameters; 51 49 VecFree(&field); 52 xfree((void**)&fieldname);53 50 54 51 /*end module: */ … … 60 57 { 61 58 _printf_("\n"); 62 _printf_(" usage: [field] = %s(elements, nodes,loads, materials, parameters,field ,fieldname);\n",__FUNCT__);59 _printf_(" usage: [field] = %s(elements, nodes,loads, materials, parameters,field);\n",__FUNCT__); 63 60 _printf_("\n"); 64 61 } -
issm/trunk/src/mex/FieldAverageOntoVertices/FieldAverageOntoVertices.h
r3445 r3556 24 24 #define PARAMETERS (mxArray*)prhs[5] 25 25 #define FIELD (mxArray*)prhs[6] 26 #define FIELDNAME (mxArray*)prhs[7]27 26 28 27 /* serial output macros: */ … … 33 32 #define NLHS 1 34 33 #undef NRHS 35 #define NRHS 834 #define NRHS 7 36 35 37 36
Note:
See TracChangeset
for help on using the changeset viewer.