Changeset 3969
- Timestamp:
- 05/27/10 11:38:14 (15 years ago)
- Location:
- issm/trunk/src/c
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/c/DataSet/DataSet.cpp
r3968 r3969 687 687 } 688 688 /*}}}*/ 689 /*FUNCTION DataSet::FieldAverageOntoVertices{{{1*/690 void DataSet::FieldAverageOntoVertices(Vec fieldsum,Vec connectivity,double* field){691 692 vector<Object*>::iterator object;693 Node* node=NULL;694 695 for ( object=objects.begin() ; object < objects.end(); object++ ){696 697 if((*object)->Enum()==NodeEnum){698 node=(Node*)(*object);699 node->FieldAverageOntoVertices(fieldsum,connectivity,field);700 }701 702 }703 704 }705 /*}}}*/706 /*FUNCTION DataSet::FieldDepthAverageAtBase{{{1*/707 void DataSet::FieldDepthAverageAtBase(Vec field,double* field_serial,char* fieldname){708 709 vector<Object*>::iterator object;710 Node* node=NULL;711 712 for ( object=objects.begin() ; object < objects.end(); object++ ){713 714 if((*object)->Enum()==NodeEnum){715 716 node=(Node*)(*object);717 node->FieldDepthAverageAtBase(field,field_serial,fieldname);718 }719 }720 721 }722 /*}}}*/723 689 /*FUNCTION DataSet::FieldExtrude{{{1*/ 724 690 void DataSet::FieldExtrude(Vec field,double* field_serial,char* field_name, int collapse){ … … 744 710 } 745 711 746 }747 /*}}}*/748 /*FUNCTION DataSet::DepthAverageInputAtBase(int enum_type) {{{1*/749 void DataSet::DepthAverageInputAtBase(int enum_type){750 751 vector<Object*>::iterator object;752 Element* element=NULL;753 754 for ( object=objects.begin() ; object < objects.end(); object++ ){755 756 if(EnumIsElement((*object)->Enum())){757 758 element=(Element*)(*object);759 element->DepthAverageInputAtBase(enum_type);760 }761 }762 763 712 } 764 713 /*}}}*/ … … 776 725 } 777 726 } 778 }779 /*}}}*/780 /*FUNCTION DataSet::InputToResult{{{1*/781 void DataSet::InputToResult(Mat* psolution,int enum_type){782 783 /*Output*/784 Mat solution=NULL;785 786 /*Intermediary*/787 int i;788 vector<Object*>::iterator object;789 extern int num_procs;790 extern int my_rank;791 Element* element=NULL;792 int elemcols;793 int cols=0,lines=0;794 int local_cols=0;795 int* all_cols=NULL;796 int local_lines=0;797 int* all_lines=NULL;798 799 ISSMERROR("not implemented yet");800 /*First: Get number of columns to be allocated*/801 for ( object=objects.begin() ; object < objects.end(); object++ ){802 803 if(EnumIsElement((*object)->Enum())){804 805 /*increase number of lines by 1*/806 local_lines++;807 808 /*Get number of columns required for this element*/809 element=(Element*)(*object);810 //elemcols=element->InputToResultAllocation(enum_type);811 812 /*Increase number of columns if higher than previous value*/813 //if(elemcols>local_cols) local_cols=elemcols;814 }815 }816 817 /*OK, sum contributions of all cpus*/818 all_lines=(int*)xmalloc(num_procs*sizeof(int));819 MPI_Gather(&local_lines,1,MPI_INT,all_lines,1,MPI_INT,0,MPI_COMM_WORLD);820 MPI_Bcast(all_lines,num_procs,MPI_INT,0,MPI_COMM_WORLD);821 all_cols=(int*)xmalloc(num_procs*sizeof(int));822 MPI_Gather(&local_cols,1,MPI_INT,all_cols,1,MPI_INT,0,MPI_COMM_WORLD);823 MPI_Bcast(all_cols,num_procs,MPI_INT,0,MPI_COMM_WORLD);824 825 for(i=0;i<num_procs;i++) if(all_cols[i]>cols) cols=all_cols[i];826 for(i=0;i<num_procs;i++) lines+=all_lines[i];827 828 /*Second: Create Dense matrix that has the right size*/829 MatCreateMPIDense(PETSC_COMM_WORLD, PETSC_DECIDE, PETSC_DECIDE,lines,cols,PETSC_NULL,&solution);830 831 /*Finally, enter solution for every element*/832 for ( object=objects.begin() ; object < objects.end(); object++ ){833 834 if(EnumIsElement((*object)->Enum())){835 element=(Element*)(*object);836 //elemcols=element->InputToResult(&solution,enum_type);837 }838 }839 840 /*Allocate output pointer*/841 *psolution=solution;842 843 /* Free ressources: */844 xfree((void**)&all_cols);845 xfree((void**)&all_lines);846 727 } 847 728 /*}}}*/ … … 1197 1078 } 1198 1079 /*}}}*/ 1199 /*FUNCTION DataSet::UpdateInputsFromSolution{{{1*/1200 void DataSet::UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type){1201 1202 vector<Object*>::iterator object;1203 Element* element=NULL;1204 1205 for ( object=objects.begin() ; object < objects.end(); object++ ){1206 1207 if(EnumIsElement((*object)->Enum())){1208 1209 element=(Element*)(*object);1210 element->UpdateInputsFromSolution(solution,analysis_type,sub_analysis_type);1211 }1212 else ISSMERROR("%s%i%s"," object with id: ",(*object)->Id()," is not an element, in a function that deals only with elements!");1213 }1214 }1215 /*}}}*/1216 1080 /*FUNCTION DataSet::GetSolutionFromInputs{{{1*/ 1217 1081 void DataSet::GetSolutionFromInputs(Vec solution, int analysis_type, int sub_analysis_type){ … … 1288 1152 } 1289 1153 /*}}}*/ 1290 /*FUNCTION DataSet::UpdateVertexPositions{{{1*/1291 void DataSet::UpdateVertexPositions(double* thickness,double* bed){1292 1293 vector<Object*>::iterator object;1294 Vertex* vertex=NULL;1295 1296 for ( object=objects.begin() ; object < objects.end(); object++ ){1297 1298 if((*object)->Enum()==VertexEnum){1299 1300 vertex=(Vertex*)(*object);1301 vertex->UpdatePosition(thickness,bed);1302 }1303 }1304 }1305 /*}}}*/ -
issm/trunk/src/c/DataSet/DataSet.h
r3968 r3969 81 81 void MeltingConstraints(int* pconverged, int* pnum_unstable_constraints,int analysis_type,int sub_analysis_type); 82 82 DataSet* Copy(void); 83 void FieldAverageOntoVertices(Vec fieldsum,Vec connectivity,double* field);84 void FieldDepthAverageAtBase(Vec field,double* field_serial,char* fieldname);85 void DepthAverageInputAtBase(int enum_type);86 83 void InputExtrude(int enum_type); 87 84 int DeleteObject(Object* object); 88 85 void FieldExtrude(Vec field,double* field_serial,char* field_name, int collapse); 89 void InputToResult(Mat* psolution,int enum_type);90 void UpdateVertexPositions(double* thickness,double* bed);91 86 void OutputRifts(Vec riftproperties); 92 87 /*}}}*/ -
issm/trunk/src/c/modules/DepthAverageInputx/DepthAverageInputx.cpp
r3913 r3969 12 12 void DepthAverageInputx( DataSet* elements,DataSet* nodes, DataSet* vertices, DataSet* loads, DataSet* materials, Parameters* parameters,int enum_type){ 13 13 14 /*Intermediary*/ 15 int i; 16 Element* element=NULL; 17 14 18 /*First, get elements*/ 15 19 elements->Configure(elements,loads, nodes,vertices, materials,parameters); 16 20 17 21 /*First depth-average inputs at base of the glacier*/ 18 elements->DepthAverageInputAtBase(enum_type); 22 for (i=0;i<elements->Size();i++){ 23 element=(Element*)elements->GetObjectByOffset(i); 24 element->DepthAverageInputAtBase(enum_type); 25 } 19 26 20 27 /*Then extrude vertically the new inputs*/ -
issm/trunk/src/c/modules/FieldAverageOntoVerticesx/FieldAverageOntoVerticesx.cpp
r3913 r3969 12 12 void FieldAverageOntoVerticesx(Vec* pfield, DataSet* elements,DataSet* nodes, DataSet* vertices, DataSet* loads, DataSet* materials, Parameters* parameters){ 13 13 14 extern int my_rank;15 16 14 /*Intermediary*/ 15 int i; 17 16 int numberofvertices,found; 18 17 Vec connectivity=NULL; 19 18 Vec fieldsum=NULL; 20 19 double* field_serial=NULL; 20 Node* node=NULL; 21 21 22 22 /*Output*/ … … 37 37 38 38 /*Compute summ of connectivity and summ of values: */ 39 nodes->FieldAverageOntoVertices(fieldsum,connectivity,field_serial); 39 for (i=0;i<nodes->Size();i++){ 40 node=(Node*)nodes->GetObjectByOffset(i); 41 node->FieldAverageOntoVertices(fieldsum,connectivity,field_serial); 42 } 40 43 41 44 /*Assemble vectors: */ -
issm/trunk/src/c/modules/FieldDepthAveragex/FieldDepthAveragex.cpp
r3913 r3969 12 12 void FieldDepthAveragex( Vec field, DataSet* elements,DataSet* nodes, DataSet* vertices, DataSet* loads, DataSet* materials, Parameters* parameters,char* fieldname){ 13 13 14 /*Intermediary*/ 15 int i; 14 16 double* field_serial=NULL; 17 Node* node=NULL; 15 18 16 19 /*First, get elements and nodes configured: */ … … 23 26 24 27 /*Depth average field, onto base of mesh: */ 25 nodes->FieldDepthAverageAtBase(field,field_serial,fieldname); 28 for (i=0;i<nodes->Size();i++){ 29 node=(Node*)nodes->GetObjectByOffset(i); 30 node->FieldDepthAverageAtBase(field,field_serial,fieldname); 31 } 26 32 27 33 /*Assemble vector: */ -
issm/trunk/src/c/modules/UpdateInputsFromSolutionx/UpdateInputsFromSolutionx.cpp
r3922 r3969 17 17 18 18 /*Call overloaded form of UpdateInputsFromSolutionx: */ 19 UpdateInputsFromSolutionx( 19 UpdateInputsFromSolutionx( elements, nodes, vertices, loads, materials, parameters,serial_solution, analysis_type, sub_analysis_type); 20 20 21 21 /*Free ressources:*/ … … 27 27 void UpdateInputsFromSolutionx( DataSet* elements,DataSet* nodes, DataSet* vertices, DataSet* loads, DataSet* materials, Parameters* parameters,double* solution, int analysis_type, int sub_analysis_type){ 28 28 29 /*Intermediary*/ 30 int i; 31 Element* element=NULL; 32 29 33 /*First, get elements and loads configured: */ 30 elements-> Configure(elements,loads, nodes,vertices, materials,parameters);31 loads-> Configure(elements,loads, nodes,vertices, materials,parameters);32 nodes-> Configure(elements,loads, nodes,vertices, materials,parameters);34 elements-> Configure(elements,loads, nodes,vertices, materials,parameters); 35 loads-> Configure(elements,loads, nodes,vertices, materials,parameters); 36 nodes-> Configure(elements,loads, nodes,vertices, materials,parameters); 33 37 parameters->Configure(elements,loads, nodes,vertices, materials,parameters); 34 35 38 36 39 /*Elements drive the update: */ 37 elements->UpdateInputsFromSolution(solution,analysis_type,sub_analysis_type); 40 for (i=0;i<elements->Size();i++){ 41 element=(Element*)elements->GetObjectByOffset(i); 42 element->UpdateInputsFromSolution(solution,analysis_type,sub_analysis_type); 43 } 38 44 39 45 } -
issm/trunk/src/c/modules/UpdateVertexPositionsx/UpdateVertexPositionsx.cpp
r3913 r3969 13 13 14 14 /*intermediary: */ 15 int i; 16 Vertex* vertex=NULL; 15 17 double* thickness_serial=NULL; 16 18 double* bed_serial=NULL; … … 20 22 VecToMPISerial(&bed_serial,bed); 21 23 22 /*Update elements, nodes, loads and materials from new geometry: */ 23 vertices->UpdateVertexPositions(thickness_serial,bed_serial); 24 /*Update verices new geometry: */ 25 for (i=0;i<vertices->Size();i++){ 26 vertex=(Vertex*)vertices->GetObjectByOffset(i); 27 vertex->UpdatePosition(thickness_serial,bed_serial); 28 } 24 29 25 30 /*Free ressources:*/ -
issm/trunk/src/c/objects/DofIndexing.h
r3463 r3969 42 42 }; 43 43 #endif //ifndef _DOFINDEXING_H_ 44 45 -
issm/trunk/src/c/objects/Node.h
r3956 r3969 14 14 class Hook; 15 15 class DofIndexing; 16 class IoModel;16 class IoModel; 17 17 class DataSet; 18 18 /*}}}*/ -
issm/trunk/src/c/objects/objects.h
r3938 r3969 8 8 /*Abstract classes: */ 9 9 #include "./Object.h" 10 11 10 12 11 /*Objects: */ … … 110 109 #include "./Bamg/SetOfE4.h" 111 110 112 113 111 #endif -
issm/trunk/src/c/shared/Elements/elements.h
r3556 r3969 8 8 #include "../../objects/objects.h" 9 9 #include "../../DataSet/DataSet.h" 10 #include "../../objects/Node.h" 10 11 11 12 void ResolvePointers(Object** objects,int* object_ids,int* object_offsets,int num_objects,DataSet* dataset);
Note:
See TracChangeset
for help on using the changeset viewer.