Changeset 3556


Ignore:
Timestamp:
04/16/10 11:34:43 (15 years ago)
Author:
Mathieu Morlighem
Message:

fixed prognostic2

Location:
issm/trunk/src
Files:
13 edited

Legend:

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

    r3529 r3556  
    10731073/*}}}*/
    10741074/*FUNCTION DataSet::FieldAverageOntoVertices{{{1*/
    1075 void  DataSet::FieldAverageOntoVertices(Vec field,double* field_serial,char* fieldname){
     1075void DataSet::FieldAverageOntoVertices(Vec fieldsum,Vec connectivity,double* field){
    10761076
    10771077        vector<Object*>::iterator object;
     
    10821082                if((*object)->Enum()==NodeEnum()){
    10831083                        node=(Node*)(*object);
    1084                         node->FieldAverageOntoVertices(field,field_serial,fieldname);
     1084                        node->FieldAverageOntoVertices(fieldsum,connectivity,field);
    10851085                }
    10861086
  • issm/trunk/src/c/DataSet/DataSet.h

    r3529 r3556  
    8888                void  CostFunction(double* pJ, void* inputs,int analysis_type,int sub_analysis_type);
    8989                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);
    9191                void  FieldDepthAverageAtBase(Vec field,double* field_serial,char* fieldname);
    9292                int   DeleteObject(Object* object);
  • issm/trunk/src/c/FieldAverageOntoVerticesx/FieldAverageOntoVerticesx.cpp

    r3446 r3556  
    1010#include "../EnumDefinitions/EnumDefinitions.h"
    1111
    12 void FieldAverageOntoVerticesx( Vec field, DataSet* elements,DataSet* nodes, DataSet* vertices, DataSet* loads, DataSet* materials, DataSet* parameters,char* fieldname){
     12void FieldAverageOntoVerticesx(Vec* pfield, DataSet* elements,DataSet* nodes, DataSet* vertices, DataSet* loads, DataSet* materials, DataSet* parameters){
    1313
     14        extern int my_rank;
     15
     16        /*Intermediary*/
     17        int     numberofvertices,found;
     18        Vec     connectivity=NULL;
     19        Vec     fieldsum=NULL;
    1420        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);
    1529
    1630        /*First, get elements and nodes configured: */
     
    2034
    2135        /*Serialize field: */
    22         VecToMPISerial(&field_serial,field);
     36        VecToMPISerial(&field_serial,*pfield);
    2337
    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);
    2640
    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;
    3056
    3157        /*Free ressources:*/
    3258        xfree((void**)&field_serial);
     59        VecFree(&connectivity);
     60        VecFree(&fieldsum);
    3361
    3462}
  • issm/trunk/src/c/FieldAverageOntoVerticesx/FieldAverageOntoVerticesx.h

    r3446 r3556  
    99
    1010/* local prototypes: */
    11 void FieldAverageOntoVerticesx( Vec field, DataSet* elements,DataSet* nodes, DataSet* vertices, DataSet* loads, DataSet* materials, DataSet* parameters,char* fieldname);
     11void FieldAverageOntoVerticesx(Vec* field, DataSet* elements,DataSet* nodes, DataSet* vertices, DataSet* loads, DataSet* materials, DataSet* parameters);
    1212
    1313#endif  /* _FIELDDEPTHAVERAGEX_H */
  • issm/trunk/src/c/objects/Node.cpp

    r3534 r3556  
    484484/*}}}*/
    485485/*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 !
     486void  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);
    489508}
    490509/*}}}*/
  • issm/trunk/src/c/objects/Node.h

    r3464 r3556  
    8383                int   IsOnSurface();
    8484                void  FreezeDof(int dof);
    85                 void  FieldAverageOntoVertices(Vec field,double* field_serial,char* fieldname);
     85                void  FieldAverageOntoVertices(Vec fieldsum,Vec connectivity,double* field);
    8686                void  FieldDepthAverageAtBase(Vec field,double* field_serial,char* fieldname);
    8787                int   IsOnShelf();
  • issm/trunk/src/c/objects/Tria.cpp

    r3534 r3556  
    19591959        MatSetValues(Kgg,numdof,doflist,numdof,doflist,(const double*)Ke_gg,ADD_VALUES);
    19601960
    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 #endif
    19771961
    19781962cleanup_and_return:
  • issm/trunk/src/c/parallel/ProcessResults.cpp

    r3529 r3556  
    106106        double* v_g_serial=NULL;
    107107
    108         int numberofnodes,numberofelements;
     108        int numberofnodes,numberofvertices,numberofelements;
    109109
    110110        /*Initialize new results: */
     
    350350                }
    351351                else if(strcmp(result->GetFieldName(),"h_g")==0){
    352                         /*easy, h_g is of size numberofnodes, on 1 dof, just repartition: */
     352                        /*easy, h_g is of size numberofvertices, on 1 dof, just repartition: */
    353353                        result->GetField(&h_g);
    354354                        VecToMPISerial(&h_g_serial,h_g);
    355                         fem_p->parameters->FindParam(&numberofnodes,"numberofnodes");
     355                        fem_p->parameters->FindParam(&numberofvertices,"numberofvertices");
    356356                        VecToMPISerial(&partition,fem_p->partition->vector);
    357357
    358                         thickness=(double*)xmalloc(numberofnodes*sizeof(double));
    359 
    360                         for(i=0;i<numberofnodes;i++){
     358                        thickness=(double*)xmalloc(numberofvertices*sizeof(double));
     359
     360                        for(i=0;i<numberofvertices;i++){
    361361                                thickness[i]=h_g_serial[(int)partition[i]];
    362362                        }
    363363                       
    364364                        /*Ok, add pressure to newresults: */
    365                         newresult=new Result(newresults->Size()+1,result->GetTime(),result->GetStep(),"thickness",thickness,numberofnodes);
     365                        newresult=new Result(newresults->Size()+1,result->GetTime(),result->GetStep(),"thickness",thickness,numberofvertices);
    366366                        newresults->AddObject(newresult);
    367367
  • issm/trunk/src/c/parallel/prognostic2_core.cpp

    r3534 r3556  
    5656        diagnostic_core_linear(&h_g,fem_p,inputs,Prognostic2AnalysisEnum(),NoneAnalysisEnum());
    5757
    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);
    6063
    6164        /*Plug results into output dataset: */
  • issm/trunk/src/c/shared/Elements/elements.h

    r3496 r3556  
    1818                printf("   [ ");
    1919                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}
     26inline 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]);
    2133                } 
    2234                printf(" ]\n");
  • issm/trunk/src/m/solutions/jpl/prognostic2_core.m

    r3534 r3556  
    2525        results.h_g=diagnostic_core_linear(m,inputs,analysis_type,sub_analysis_type);
    2626
     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
    2730        displaystring(m.parameters.verbose,'\n%s',['extrude computed thickness on all layers:']);
    2831        %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  
    1818        DataSet* parameters=NULL;
    1919        Vec      field=NULL;
    20         char*    fieldname=NULL;
    2120
    2221        /*Boot module: */
     
    3433        FetchParams(&parameters,PARAMETERS);
    3534        FetchData(&field,FIELD);
    36         FetchData(&fieldname,FIELDNAME);
    3735
    3836        /*!Call core code: */
    39         FieldAverageOntoVerticesx(field,elements,nodes,vertices,loads,materials,parameters,fieldname);
     37        FieldAverageOntoVerticesx(&field,elements,nodes,vertices,loads,materials,parameters);
    4038
    4139        /*write output : */
     
    5048        delete parameters;
    5149        VecFree(&field);
    52         xfree((void**)&fieldname);
    5350       
    5451        /*end module: */
     
    6057{
    6158        _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__);
    6360        _printf_("\n");
    6461}
  • issm/trunk/src/mex/FieldAverageOntoVertices/FieldAverageOntoVertices.h

    r3445 r3556  
    2424#define PARAMETERS (mxArray*)prhs[5]
    2525#define FIELD (mxArray*)prhs[6]
    26 #define FIELDNAME (mxArray*)prhs[7]
    2726
    2827/* serial output macros: */
     
    3332#define NLHS  1
    3433#undef NRHS
    35 #define NRHS  8
     34#define NRHS  7
    3635
    3736
Note: See TracChangeset for help on using the changeset viewer.