Changeset 3969


Ignore:
Timestamp:
05/27/10 11:38:14 (15 years ago)
Author:
Mathieu Morlighem
Message:

moved some dataset methods to modules

Location:
issm/trunk/src/c
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/DataSet/DataSet.cpp

    r3968 r3969  
    687687}
    688688/*}}}*/
    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 /*}}}*/
    723689/*FUNCTION DataSet::FieldExtrude{{{1*/
    724690void  DataSet::FieldExtrude(Vec field,double* field_serial,char* field_name, int collapse){
     
    744710        }
    745711
    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        
    763712}
    764713/*}}}*/
     
    776725                }
    777726        }
    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);
    846727}
    847728/*}}}*/
     
    11971078}
    11981079/*}}}*/
    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 /*}}}*/
    12161080/*FUNCTION DataSet::GetSolutionFromInputs{{{1*/
    12171081void  DataSet::GetSolutionFromInputs(Vec solution, int analysis_type, int sub_analysis_type){
     
    12881152}
    12891153/*}}}*/
    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  
    8181                void  MeltingConstraints(int* pconverged, int* pnum_unstable_constraints,int analysis_type,int sub_analysis_type);
    8282                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);
    8683                void  InputExtrude(int enum_type);
    8784                int   DeleteObject(Object* object);
    8885                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);
    9186                void  OutputRifts(Vec riftproperties);
    9287                /*}}}*/
  • issm/trunk/src/c/modules/DepthAverageInputx/DepthAverageInputx.cpp

    r3913 r3969  
    1212void DepthAverageInputx( DataSet* elements,DataSet* nodes, DataSet* vertices, DataSet* loads, DataSet* materials, Parameters* parameters,int enum_type){
    1313       
     14        /*Intermediary*/
     15        int i;
     16        Element* element=NULL;
     17
    1418        /*First, get elements*/
    1519        elements->Configure(elements,loads, nodes,vertices, materials,parameters);
    1620
    1721        /*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        }
    1926
    2027        /*Then extrude vertically the new inputs*/
  • issm/trunk/src/c/modules/FieldAverageOntoVerticesx/FieldAverageOntoVerticesx.cpp

    r3913 r3969  
    1212void FieldAverageOntoVerticesx(Vec* pfield, DataSet* elements,DataSet* nodes, DataSet* vertices, DataSet* loads, DataSet* materials, Parameters* parameters){
    1313
    14         extern int my_rank;
    15 
    1614        /*Intermediary*/
     15        int i;
    1716        int     numberofvertices,found;
    1817        Vec     connectivity=NULL;
    1918        Vec     fieldsum=NULL;
    2019        double* field_serial=NULL;
     20        Node*   node=NULL;
    2121
    2222        /*Output*/
     
    3737
    3838        /*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        }
    4043
    4144        /*Assemble vectors: */
  • issm/trunk/src/c/modules/FieldDepthAveragex/FieldDepthAveragex.cpp

    r3913 r3969  
    1212void FieldDepthAveragex( Vec field, DataSet* elements,DataSet* nodes, DataSet* vertices, DataSet* loads, DataSet* materials, Parameters* parameters,char* fieldname){
    1313
     14        /*Intermediary*/
     15        int i;
    1416        double* field_serial=NULL;
     17        Node*   node=NULL;
    1518
    1619        /*First, get elements and nodes configured: */
     
    2326
    2427        /*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        }
    2632
    2733        /*Assemble vector: */
  • issm/trunk/src/c/modules/UpdateInputsFromSolutionx/UpdateInputsFromSolutionx.cpp

    r3922 r3969  
    1717
    1818        /*Call overloaded form of UpdateInputsFromSolutionx: */
    19         UpdateInputsFromSolutionx(  elements, nodes,  vertices,  loads,  materials,  parameters,serial_solution, analysis_type, sub_analysis_type);
     19        UpdateInputsFromSolutionx( elements, nodes,  vertices,  loads,  materials,  parameters,serial_solution, analysis_type, sub_analysis_type);
    2020
    2121        /*Free ressources:*/
     
    2727void UpdateInputsFromSolutionx( DataSet* elements,DataSet* nodes, DataSet* vertices, DataSet* loads, DataSet* materials, Parameters* parameters,double* solution, int analysis_type, int sub_analysis_type){
    2828
     29        /*Intermediary*/
     30        int i;
     31        Element* element=NULL;
     32
    2933        /*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);
    3337        parameters->Configure(elements,loads, nodes,vertices, materials,parameters);
    34 
    3538       
    3639        /*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        }
    3844
    3945}
  • issm/trunk/src/c/modules/UpdateVertexPositionsx/UpdateVertexPositionsx.cpp

    r3913 r3969  
    1313
    1414        /*intermediary: */
     15        int i;
     16        Vertex* vertex=NULL;
    1517        double* thickness_serial=NULL;
    1618        double* bed_serial=NULL;
     
    2022        VecToMPISerial(&bed_serial,bed);
    2123       
    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        }
    2429
    2530        /*Free ressources:*/
  • issm/trunk/src/c/objects/DofIndexing.h

    r3463 r3969  
    4242};
    4343#endif //ifndef _DOFINDEXING_H_
    44 
    45                
  • issm/trunk/src/c/objects/Node.h

    r3956 r3969  
    1414class  Hook;
    1515class  DofIndexing;
    16 class IoModel;
     16class  IoModel;
    1717class  DataSet;
    1818/*}}}*/
  • issm/trunk/src/c/objects/objects.h

    r3938 r3969  
    88/*Abstract classes: */
    99#include "./Object.h"
    10 
    1110
    1211/*Objects: */
     
    110109#include "./Bamg/SetOfE4.h"
    111110
    112 
    113111#endif
  • issm/trunk/src/c/shared/Elements/elements.h

    r3556 r3969  
    88#include "../../objects/objects.h"
    99#include "../../DataSet/DataSet.h"
     10#include "../../objects/Node.h"
    1011
    1112void ResolvePointers(Object** objects,int* object_ids,int* object_offsets,int num_objects,DataSet* dataset);
Note: See TracChangeset for help on using the changeset viewer.