Changeset 22828


Ignore:
Timestamp:
06/05/18 10:49:26 (7 years ago)
Author:
Mathieu Morlighem
Message:

BUG: fixing ID problem when we have multiple controls

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

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/classes/Elements/Element.cpp

    r22801 r22828  
    13831383        return z;
    13841384}/*}}}*/
    1385 void       Element::GradientIndexing(int* indexing,int control_index,bool onsid){/*{{{*/
     1385void       Element::GradientIndexing(int* indexing,int control_index){/*{{{*/
    13861386
    13871387        /*Get number of controls*/
     
    14151415                int M;
    14161416                parameters->FindParam(&M,ControlInputSizeMEnum);
    1417         /*get gradient indices*/
    1418                 if(onsid){
    1419                         for(int i=0;i<numvertices;i++){
    1420                                 indexing[i]=this->vertices[i]->Sid() + (control_index)*M;
    1421                         }
    1422                 }
    1423                 else{
    1424                         for(int i=0;i<numvertices;i++){
    1425                                 indexing[i]=this->vertices[i]->Pid() + (control_index)*M;
    1426                         }
     1417                /*get gradient indices*/
     1418                for(int i=0;i<numvertices;i++){
     1419                        indexing[i]=this->vertices[i]->Sid() + (control_index)*M;
    14271420                }
    14281421        }
  • issm/trunk-jpl/src/c/classes/Elements/Element.h

    r22739 r22828  
    111111                IssmDouble         GetYcoord(IssmDouble* xyz_list,Gauss* gauss);
    112112                IssmDouble         GetZcoord(IssmDouble* xyz_list,Gauss* gauss);
    113                 void               GradientIndexing(int* indexing,int control_index,bool onsid=false);
     113                void               GradientIndexing(int* indexing,int control_index);
    114114                IssmDouble         GroundedArea(IssmDouble* mask, bool scaled);
    115115                bool               HasNodeOnBase();
     
    225225                virtual int        GetNumberOfNodes(int enum_type)=0;
    226226                virtual int        GetNumberOfVertices(void)=0;
    227                 virtual void       GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data,int offset, bool onsid)=0;
    228                 virtual void       GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data, bool onsid)=0;
     227                virtual void       GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data,int offset)=0;
     228                virtual void       GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data)=0;
    229229                virtual void       GetVerticesCoordinatesBase(IssmDouble** xyz_list)=0;
    230230                virtual void       GetVerticesCoordinatesTop(IssmDouble** xyz_list)=0;
  • issm/trunk-jpl/src/c/classes/Elements/Penta.cpp

    r22740 r22828  
    11531153}
    11541154/*}}}*/
    1155 void       Penta::GetVectorFromControlInputs(Vector<IssmDouble>* vector,int control_enum,int control_index,const char* data,bool onsid){/*{{{*/
     1155void       Penta::GetVectorFromControlInputs(Vector<IssmDouble>* vector,int control_enum,int control_index,const char* data){/*{{{*/
    11561156
    11571157        int vertexidlist[NUMVERTICES];
     
    11611161
    11621162        /*Prepare index list*/
    1163         GradientIndexing(&vertexidlist[0],control_index,onsid);
     1163        GradientIndexing(&vertexidlist[0],control_index);
    11641164
    11651165        /*Get input (either in element or material)*/
     
    11761176}
    11771177/*}}}*/
    1178 void       Penta::GetVectorFromControlInputs(Vector<IssmDouble>* vector,int control_enum,int control_index,const char* data,int offset,bool onsid){/*{{{*/
     1178void       Penta::GetVectorFromControlInputs(Vector<IssmDouble>* vector,int control_enum,int control_index,const char* data,int offset){/*{{{*/
    11791179
    11801180        int* idlist = NULL;
     
    12171217                                        idlist = xNew<int>(NUMVERTICES);
    12181218                                        values = xNew<IssmDouble>(NUMVERTICES);
    1219                                         GradientIndexing(&idlist[0],control_index,true);
     1219                                        GradientIndexing(&idlist[0],control_index);
    12201220                                        for(int i=0;i<NUMVERTICES;i++){
    12211221                                                values[i] = pentainput->values[i];
  • issm/trunk-jpl/src/c/classes/Elements/Penta.h

    r22739 r22828  
    8686                Penta*         GetLowerPenta(void);
    8787                Penta*         GetUpperPenta(void);
    88                 void           GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data,bool onsid);
    89                 void           GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data,int offset,bool onsid);
     88                void           GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data);
     89                void           GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data,int offset);
    9090                void           GetVerticesCoordinatesBase(IssmDouble** pxyz_list);
    9191                void           GetVerticesCoordinatesTop(IssmDouble** pxyz_list);
  • issm/trunk-jpl/src/c/classes/Elements/Seg.h

    r22739 r22828  
    7373                int         GetNumberOfNodes(int enum_type){_error_("not implemented yet");};
    7474                int         GetNumberOfVertices(void);
    75                 void        GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data,int offset,bool onsid){_error_("not implemented yet");};
    76                 void        GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data,bool onsid){_error_("not implemented yet");};
     75                void        GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data,int offset){_error_("not implemented yet");};
     76                void        GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data){_error_("not implemented yet");};
    7777                void        GetVerticesCoordinates(IssmDouble** pxyz_list);
    7878                void        GetVerticesCoordinatesBase(IssmDouble** pxyz_list){_error_("not implemented yet");};
  • issm/trunk-jpl/src/c/classes/Elements/Tetra.h

    r22739 r22828  
    7979                int         GetNumberOfNodes(int enum_type){_error_("not implemented yet");};
    8080                int         GetNumberOfVertices(void);
    81                 void        GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data,int offset,bool onsid){_error_("not implemented yet");};
    82                 void        GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data,bool onsid){_error_("not implemented yet");};
     81                void        GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data,int offset){_error_("not implemented yet");};
     82                void        GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data){_error_("not implemented yet");};
    8383                void        GetVerticesCoordinatesBase(IssmDouble** pxyz_list);
    8484                void        GetVerticesCoordinatesTop(IssmDouble** pxyz_list);
  • issm/trunk-jpl/src/c/classes/Elements/Tria.cpp

    r22764 r22828  
    753753        if (input->ObjectEnum()!=ControlInputEnum) _error_("Input " << EnumToStringx(enum_type) << " is not a ControlInput");
    754754
    755         GradientIndexing(&gradidlist[0],control_index,true);
     755        GradientIndexing(&gradidlist[0],control_index);
    756756
    757757        for(int n=0;n<N;n++){
     
    16891689}
    16901690/*}}}*/
    1691 void       Tria::GetVectorFromControlInputs(Vector<IssmDouble>* vector,int control_enum,int control_index,const char* data,bool onsid){/*{{{*/
     1691void       Tria::GetVectorFromControlInputs(Vector<IssmDouble>* vector,int control_enum,int control_index,const char* data){/*{{{*/
    16921692
    16931693        int vertexidlist[NUMVERTICES];
     
    16981698
    16991699        /*Prepare index list*/
    1700         GradientIndexing(&vertexidlist[0],control_index,onsid);
     1700        GradientIndexing(&vertexidlist[0],control_index);
    17011701
    17021702        /*Get input (either in element or material)*/
     
    17111711}
    17121712/*}}}*/
    1713 void       Tria::GetVectorFromControlInputs(Vector<IssmDouble>* vector,int control_enum,int control_index,const char* data,int offset, bool onsid){/*{{{*/
     1713void       Tria::GetVectorFromControlInputs(Vector<IssmDouble>* vector,int control_enum,int control_index,const char* data,int offset){/*{{{*/
    17141714
    17151715        int* idlist = NULL;
     
    17531753                                idlist = xNew<int>(NUMVERTICES);
    17541754                                values = xNew<IssmDouble>(NUMVERTICES);
    1755                                 GradientIndexing(&idlist[0],control_index,true);
     1755                                GradientIndexing(&idlist[0],control_index);
    17561756                                for(int i=0;i<NUMVERTICES;i++){
    17571757                                        values[i] = triainput->values[i];
  • issm/trunk-jpl/src/c/classes/Elements/Tria.h

    r22739 r22828  
    8686                int         GetNumberOfNodes(int enum_type);
    8787                int         GetNumberOfVertices(void);
    88                 void        GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data,int offset,bool onsid);
    89                 void        GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data,bool onsid);
     88                void        GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data,int offset);
     89                void        GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data);
    9090                void        GetVerticesCoordinatesBase(IssmDouble** pxyz_list);
    9191                void        GetVerticesCoordinatesTop(IssmDouble** pxyz_list);
  • issm/trunk-jpl/src/c/cores/controlm1qn3_core.cpp

    r22827 r22828  
    8888        G = xNew<double>(n);
    8989
    90         for(int i=0;i<intn;i++)_printf_(X[i]<<"\n");
    9190        /*Scale control for M1QN3*/
    9291        for(int c=0;c<num_controls;c++){
    9392                for(int i=0;i<numberofvertices;i++){
    9493                        int index = numberofvertices*c+i;
    95                         _printf_("Before "<<X[index]<<"\n");
    9694                        X[index] = X[index]/scaling_factors[c];
    97                         _printf_("After "<<X[index]<<"\n");
    9895                }
    9996        }
  • issm/trunk-jpl/src/c/modules/GetVectorFromControlInputsx/GetVectorFromControlInputsx.cpp

    r22739 r22828  
    77#include "../../toolkits/toolkits.h"
    88
    9 void GetVectorFromControlInputsx(Vector<IssmDouble>** pvector, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,const char* data,bool onsid){/*{{{*/
     9void GetVectorFromControlInputsx(Vector<IssmDouble>** pvector, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,const char* data){/*{{{*/
    1010
    1111        bool isautodiff;
     
    3737                        for(int j=0;j<elements->Size();j++){
    3838                                Element* element=(Element*)elements->GetObjectByOffset(j);
    39                                 element->GetVectorFromControlInputs(vector,control_type[i],i,data,offset,onsid);
     39                                element->GetVectorFromControlInputs(vector,control_type[i],i,data,offset);
    4040                        }
    4141                        offset += M[i]*N[i];
     
    6969                        for(int j=0;j<elements->Size();j++){
    7070                                Element* element=(Element*)elements->GetObjectByOffset(j);
    71                                 element->GetVectorFromControlInputs(vector,control_type[i],i,data,onsid);
     71                                element->GetVectorFromControlInputs(vector,control_type[i],i,data);
    7272                        }
    7373                }
     
    8080
    8181}/*}}}*/
    82 void GetVectorFromControlInputsx( IssmDouble** pvector, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters, const char* data,bool onsid){/*{{{*/
     82void GetVectorFromControlInputsx( IssmDouble** pvector, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters, const char* data){/*{{{*/
    8383
    8484        /*intermediary: */
    8585        Vector<IssmDouble>* vec_vector=NULL;
    8686
    87         GetVectorFromControlInputsx( &vec_vector, elements,nodes, vertices, loads, materials, parameters,data,onsid);
     87        GetVectorFromControlInputsx( &vec_vector, elements,nodes, vertices, loads, materials, parameters,data);
    8888        IssmDouble* vector=vec_vector->ToMPISerial();
    8989
     
    9797/*For autodiff, we sometimes need to cast our vectors to passive*/
    9898#ifdef _HAVE_ADOLC_
    99 void GetPassiveVectorFromControlInputsx(Vector<IssmPDouble>** pvector, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,const char* data,bool onsid){/*{{{*/
     99void GetPassiveVectorFromControlInputsx(Vector<IssmPDouble>** pvector, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,const char* data){/*{{{*/
    100100
    101101        /*Get active vector first*/
     
    105105
    106106        /*Retrieve some parameters*/
    107         GetVectorFromControlInputsx(&activevector, elements,nodes, vertices, loads, materials, parameters,data,onsid);
     107        GetVectorFromControlInputsx(&activevector, elements,nodes, vertices, loads, materials, parameters,data);
    108108
    109109        /*Serialize vector*/
     
    124124
    125125}/*}}}*/
    126 void GetPassiveVectorFromControlInputsx(IssmPDouble** pvector, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters, const char* data,bool onsid){/*{{{*/
     126void GetPassiveVectorFromControlInputsx(IssmPDouble** pvector, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters, const char* data){/*{{{*/
    127127
    128128        /*Get active vector first*/
     
    132132
    133133        /*Retrieve some parameters*/
    134         GetVectorFromControlInputsx(&activevector, elements,nodes, vertices, loads, materials, parameters,data,onsid);
     134        GetVectorFromControlInputsx(&activevector, elements,nodes, vertices, loads, materials, parameters,data);
    135135
    136136        /*Serialize vector*/
     
    149149}/*}}}*/
    150150#else
    151 void GetPassiveVectorFromControlInputsx(Vector<IssmPDouble>** pvector, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,const char* data,bool onsid){/*{{{*/
     151void GetPassiveVectorFromControlInputsx(Vector<IssmPDouble>** pvector, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,const char* data){/*{{{*/
    152152
    153         GetVectorFromControlInputsx(pvector, elements,nodes, vertices, loads, materials, parameters,data,onsid);
     153        GetVectorFromControlInputsx(pvector, elements,nodes, vertices, loads, materials, parameters,data);
    154154
    155155}/*}}}*/
    156 void GetPassiveVectorFromControlInputsx(IssmPDouble** pvector, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters, const char* data,bool onsid){/*{{{*/
     156void GetPassiveVectorFromControlInputsx(IssmPDouble** pvector, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters, const char* data){/*{{{*/
    157157
    158         GetVectorFromControlInputsx(pvector, elements,nodes, vertices, loads, materials, parameters,data,onsid);
     158        GetVectorFromControlInputsx(pvector, elements,nodes, vertices, loads, materials, parameters,data);
    159159}/*}}}*/
    160160#endif
  • issm/trunk-jpl/src/c/modules/GetVectorFromControlInputsx/GetVectorFromControlInputsx.h

    r22424 r22828  
    88
    99/* local prototypes: */
    10 void    GetVectorFromControlInputsx( Vector<IssmDouble>** pvector, Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,const char* data="value",bool onsid=false);
    11 void    GetVectorFromControlInputsx( IssmDouble** pvector, Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,const char* data="value",bool onsid=false);
     10void    GetVectorFromControlInputsx( Vector<IssmDouble>** pvector, Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,const char* data="value");
     11void    GetVectorFromControlInputsx( IssmDouble** pvector, Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,const char* data="value");
    1212
    13 void    GetPassiveVectorFromControlInputsx(Vector<double>** pvector, Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,const char* data="value",bool onsid=false);
    14 void    GetPassiveVectorFromControlInputsx(double** pvector, Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,const char* data="value",bool onsid=false);
     13void    GetPassiveVectorFromControlInputsx(Vector<double>** pvector, Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,const char* data="value");
     14void    GetPassiveVectorFromControlInputsx(double** pvector, Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,const char* data="value");
    1515
    1616#endif  /* _GETVECTORFROMCONTROLINPUTSXX_H */
Note: See TracChangeset for help on using the changeset viewer.