Changeset 22424


Ignore:
Timestamp:
02/16/18 08:03:30 (7 years ago)
Author:
erobo
Message:

CHG: added PassiveVector option for ADOLC

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

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/modules/GetVectorFromControlInputsx/GetVectorFromControlInputsx.cpp

    r18870 r22424  
    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,bool onsid){/*{{{*/
    1010
    1111        int  num_controls;
     
    3232        xDelete<int>(control_type);
    3333        *pvector=vector;
    34 }
    35 
    36 void GetVectorFromControlInputsx( IssmDouble** pvector, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters, const char* data,bool onsid){
     34}/*}}}*/
     35void GetVectorFromControlInputsx( IssmDouble** pvector, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters, const char* data,bool onsid){/*{{{*/
    3736
    3837        /*output: */
     
    5049        /*Assign output pointers:*/
    5150        *pvector=vector;
    52 }
     51}/*}}}*/
     52
     53/*For autodiff, we sometimes need to cast our vectors to passive*/
     54#ifdef _HAVE_ADOLC_
     55void GetPassiveVectorFromControlInputsx(Vector<IssmPDouble>** pvector, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,const char* data,bool onsid){/*{{{*/
     56
     57        /*Get active vector first*/
     58        Vector<IssmDouble>*   activevector=NULL;
     59        Vector<IssmPDouble>*  vector=NULL;
     60        int                   size;
     61
     62        /*Retrieve some parameters*/
     63        GetVectorFromControlInputsx(&activevector, elements,nodes, vertices, loads, materials, parameters,data,onsid);
     64
     65        /*Serialize vector*/
     66        activevector->GetSize(&size);
     67        IssmDouble* dactivevector=activevector->ToMPISerial();
     68
     69        /*Cast to passive*/
     70        vector=new Vector<IssmPDouble>(size);
     71        for(int i=0;i<size;i++){
     72                vector->SetValue(i,reCast<IssmPDouble>(dactivevector[i]),INS_VAL);
     73        }
     74        vector->Assemble();
     75
     76        /*Assign output pointers:*/
     77        delete activevector;
     78        xDelete<IssmDouble>(dactivevector);
     79        *pvector=vector;
     80
     81}/*}}}*/
     82void GetPassiveVectorFromControlInputsx(IssmPDouble** pvector, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters, const char* data,bool onsid){/*{{{*/
     83
     84        /*Get active vector first*/
     85        Vector<IssmDouble>*   activevector=NULL;
     86        IssmPDouble*          vector=NULL;
     87        int                   size;
     88
     89        /*Retrieve some parameters*/
     90        GetVectorFromControlInputsx(&activevector, elements,nodes, vertices, loads, materials, parameters,data,onsid);
     91
     92        /*Serialize vector*/
     93        activevector->GetSize(&size);
     94        IssmDouble* dactivevector=activevector->ToMPISerial();
     95
     96        /*Cast to passive*/
     97        vector=xNew<IssmPDouble>(size);
     98        for(int i=0;i<size;i++) vector[i] = reCast<IssmPDouble>(dactivevector[i]);
     99
     100        /*Assign output pointers:*/
     101        delete activevector;
     102        xDelete<IssmDouble>(dactivevector);
     103        *pvector=vector;
     104
     105}/*}}}*/
     106#else
     107void GetPassiveVectorFromControlInputsx(Vector<IssmPDouble>** pvector, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,const char* data,bool onsid){/*{{{*/
     108
     109        GetVectorFromControlInputsx(pvector, elements,nodes, vertices, loads, materials, parameters,data,onsid);
     110
     111}/*}}}*/
     112void GetPassiveVectorFromControlInputsx(IssmPDouble** pvector, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters, const char* data,bool onsid){/*{{{*/
     113
     114        GetVectorFromControlInputsx(pvector, elements,nodes, vertices, loads, materials, parameters,data,onsid);
     115}/*}}}*/
     116#endif
  • issm/trunk-jpl/src/c/modules/GetVectorFromControlInputsx/GetVectorFromControlInputsx.h

    r18870 r22424  
    1111void    GetVectorFromControlInputsx( IssmDouble** pvector, Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,const char* data="value",bool onsid=false);
    1212
     13void    GetPassiveVectorFromControlInputsx(Vector<double>** pvector, Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,const char* data="value",bool onsid=false);
     14void    GetPassiveVectorFromControlInputsx(double** pvector, Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,const char* data="value",bool onsid=false);
     15
    1316#endif  /* _GETVECTORFROMCONTROLINPUTSXX_H */
  • issm/trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.cpp

    r21746 r22424  
    77#include "../../toolkits/toolkits.h"
    88
    9 void GetVectorFromInputsx(Vector<IssmDouble>** pvector,FemModel* femmodel,int name,int type){
     9void GetVectorFromInputsx(Vector<IssmDouble>** pvector,FemModel* femmodel,int name,int type){/*{{{*/
    1010
    1111        int i;
     
    3535        /*Assign output pointers:*/
    3636        *pvector=vector;
    37 }
    38 
    39 void GetVectorFromInputsx(IssmDouble** pvector,FemModel* femmodel,int name, int type){
     37}/*}}}*/
     38void GetVectorFromInputsx(IssmDouble** pvector,FemModel* femmodel,int name, int type){/*{{{*/
    4039
    4140        /*output: */
     
    5352        /*Assign output pointers:*/
    5453        *pvector=vector;
    55 }
    56 
    57 void GetVectorFromInputsx(IssmDouble** pvector,int* pvector_size, FemModel* femmodel,int name){
     54}/*}}}*/
     55void GetVectorFromInputsx(IssmDouble** pvector,int* pvector_size, FemModel* femmodel,int name){/*{{{*/
    5856
    5957        int interpolation_type;
     
    7674        }
    7775        else _error_("interpolation type : " << interpolation_type << " not supported yet!");
    78 }
     76}/*}}}*/
  • issm/trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.h

    r21746 r22424  
    1010void    GetVectorFromInputsx( Vector<IssmDouble>** pvector,FemModel* femmodel,int name,int type);
    1111void    GetVectorFromInputsx( IssmDouble** pvector,FemModel* femmodel,int name,int type);
    12 void    GetVectorFromInputsx(IssmDouble** pvector,int* pvector_size, FemModel* femmodel,int name);
     12void  GetVectorFromInputsx(IssmDouble** pvector,int* pvector_size, FemModel* femmodel,int name);
    1313
    1414#endif  /* _GETVECTORFROMINPUTSXX_H */
Note: See TracChangeset for help on using the changeset viewer.