Changeset 23311


Ignore:
Timestamp:
09/18/18 12:31:03 (7 years ago)
Author:
Mathieu Morlighem
Message:

CHG: trying to simplify m1qn3 core to merge with ad

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

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/cores/control_core.cpp

    r23242 r23311  
    8181        IssmDouble  *XL = NULL;
    8282        IssmDouble  *XU = NULL;
    83         GetVectorFromControlInputsx(&XL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound");
    84         GetVectorFromControlInputsx(&XU,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound");
     83        GetVectorFromControlInputsx(&XL,NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound");
     84        GetVectorFromControlInputsx(&XU,NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound");
    8585        for(long i=0;i<nsize;i++){
    8686                if(X0[i]>XU[i]) X0[i]=XU[i];
     
    134134        IssmDouble  *XL = NULL;
    135135        IssmDouble  *XU = NULL;
    136         GetVectorFromControlInputsx(&XL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound");
    137         GetVectorFromControlInputsx(&XU,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound");
     136        GetVectorFromControlInputsx(&XL,NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound");
     137        GetVectorFromControlInputsx(&XU,NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound");
    138138        for(long i=0;i<nsize;i++){
    139139                if(X[i]>XU[i]) X[i]=XU[i];
     
    225225        IssmDouble  *XL = NULL;
    226226        IssmDouble  *XU = NULL;
    227         GetVectorFromControlInputsx(&XL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound");
    228         GetVectorFromControlInputsx(&XU,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound");
     227        GetVectorFromControlInputsx(&XL,NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound");
     228        GetVectorFromControlInputsx(&XU,NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound");
    229229        for(long i=0;i<nsize;i++){
    230230                if(X[i]>XU[i]) X[i]=XU[i];
  • issm/trunk-jpl/src/c/cores/controlm1qn3_core.cpp

    r23309 r23311  
    7878
    7979        /*Get initial guess*/
    80         Vector<double> *Xpetsc = NULL;
    81         GetPassiveVectorFromControlInputsx(&Xpetsc,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"value");
    82         X = Xpetsc->ToMPISerial();
    83         Xpetsc->GetSize(&intn);
    84         delete Xpetsc;
     80        GetPassiveVectorFromControlInputsx(&X,&intn,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"value");
    8581        _assert_(intn==numberofvertices*num_controls);
    8682
     
    143139        double  *XL = NULL;
    144140        double  *XU = NULL;
    145         GetPassiveVectorFromControlInputsx(&XL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound");
    146         GetPassiveVectorFromControlInputsx(&XU,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound");
     141        GetPassiveVectorFromControlInputsx(&XL,NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound");
     142        GetPassiveVectorFromControlInputsx(&XU,NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound");
    147143        for(int c=0;c<num_controls;c++){
    148144                for(int i=0;i<numberofvertices;i++){
     
    213209        double *XL = NULL;
    214210        double *XU = NULL;
    215         #ifdef _HAVE_AD_
    216         GetPassiveVectorFromControlInputsx(&XL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound");
    217         GetPassiveVectorFromControlInputsx(&XU,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound");
    218         #else
    219         GetVectorFromControlInputsx(&XL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound");
    220         GetVectorFromControlInputsx(&XU,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound");
    221         #endif
     211        GetPassiveVectorFromControlInputsx(&XL,NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound");
     212        GetPassiveVectorFromControlInputsx(&XU,NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound");
    222213        for(int c=0;c<num_controls;c++){
    223214                for(int i=0;i<numberofvertices;i++){
  • issm/trunk-jpl/src/c/modules/GetVectorFromControlInputsx/GetVectorFromControlInputsx.cpp

    r23252 r23311  
    7878
    7979}/*}}}*/
    80 void GetVectorFromControlInputsx( IssmDouble** pvector, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters, const char* data){/*{{{*/
     80void GetVectorFromControlInputsx( IssmDouble** pvector,int *pN, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters, const char* data){/*{{{*/
    8181
    8282        /*intermediary: */
     83        int                 N;
    8384        Vector<IssmDouble>* vec_vector=NULL;
    8485
     86        /*Get PETSc vector*/
    8587        GetVectorFromControlInputsx( &vec_vector, elements,nodes, vertices, loads, materials, parameters,data);
     88
     89        /*Serialize*/
     90        vec_vector->GetSize(&N);
    8691        IssmDouble* vector=vec_vector->ToMPISerial();
    87 
    88         /*Free ressources:*/
    8992        delete vec_vector;
    9093
    9194        /*Assign output pointers:*/
    9295        *pvector=vector;
     96        if(pN) *pN=N;
    9397}/*}}}*/
    9498
    9599/*For autodiff, we sometimes need to cast our vectors to passive*/
    96100#ifdef _HAVE_AD_
    97 void GetPassiveVectorFromControlInputsx(Vector<IssmPDouble>** pvector, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,const char* data){/*{{{*/
    98 
    99         /*Get active vector first*/
    100         Vector<IssmDouble>*   activevector=NULL;
    101         Vector<IssmPDouble>*  vector=NULL;
    102         int                   size;
    103 
    104         /*Retrieve some parameters*/
    105         GetVectorFromControlInputsx(&activevector, elements,nodes, vertices, loads, materials, parameters,data);
    106 
    107         /*Serialize vector*/
    108         activevector->GetSize(&size);
    109         IssmDouble* dactivevector=activevector->ToMPISerial();
    110 
    111         /*Cast to passive*/
    112         vector=new Vector<IssmPDouble>(size);
    113         for(int i=0;i<size;i++){
    114                 vector->SetValue(i,reCast<IssmPDouble>(dactivevector[i]),INS_VAL);
    115         }
    116         vector->Assemble();
    117 
    118         /*Assign output pointers:*/
    119         delete activevector;
    120         xDelete<IssmDouble>(dactivevector);
    121         *pvector=vector;
    122 
    123 }/*}}}*/
    124 void GetPassiveVectorFromControlInputsx(IssmPDouble** pvector, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters, const char* data){/*{{{*/
     101void GetPassiveVectorFromControlInputsx(IssmPDouble** pvector,int* pN, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters, const char* data){/*{{{*/
    125102
    126103        /*Get active vector first*/
     
    144121        xDelete<IssmDouble>(dactivevector);
    145122        *pvector=vector;
     123        if(pN) *pN=size;
    146124
    147125}/*}}}*/
    148126#else
    149 void GetPassiveVectorFromControlInputsx(Vector<IssmPDouble>** pvector, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,const char* data){/*{{{*/
     127void GetPassiveVectorFromControlInputsx(IssmPDouble** pvector,int* pN, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters, const char* data){/*{{{*/
    150128
    151         GetVectorFromControlInputsx(pvector, elements,nodes, vertices, loads, materials, parameters,data);
    152 
    153 }/*}}}*/
    154 void GetPassiveVectorFromControlInputsx(IssmPDouble** pvector, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters, const char* data){/*{{{*/
    155 
    156         GetVectorFromControlInputsx(pvector, elements,nodes, vertices, loads, materials, parameters,data);
     129        GetVectorFromControlInputsx(pvector,pN,elements,nodes, vertices, loads, materials, parameters,data);
    157130}/*}}}*/
    158131#endif
  • issm/trunk-jpl/src/c/modules/GetVectorFromControlInputsx/GetVectorFromControlInputsx.h

    r22828 r23311  
    99/* local prototypes: */
    1010void    GetVectorFromControlInputsx( Vector<IssmDouble>** pvector, Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,const char* data="value");
    11 void    GetVectorFromControlInputsx( IssmDouble** pvector, Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,const char* data="value");
     11void    GetVectorFromControlInputsx( IssmDouble** pvector,int* pN, 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");
    14 void    GetPassiveVectorFromControlInputsx(double** pvector, Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,const char* data="value");
     13void    GetPassiveVectorFromControlInputsx(double** pvector,int* pN, Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,const char* data="value");
    1514
    1615#endif  /* _GETVECTORFROMCONTROLINPUTSXX_H */
Note: See TracChangeset for help on using the changeset viewer.