Ignore:
Timestamp:
07/31/20 09:21:13 (5 years ago)
Author:
Mathieu Morlighem
Message:

NEW: enable P0 controls

File:
1 edited

Legend:

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

    r24335 r25317  
    99void GetVectorFromControlInputsx(Vector<IssmDouble>** pvector, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,const char* data){/*{{{*/
    1010
    11         bool isautodiff;
    12         parameters->FindParam(&isautodiff,AutodiffIsautodiffEnum);
    13         if(isautodiff){
    14                 int*  N = NULL;
    15                 int*  M = NULL;
    16                 int  num_controls;
    17                 int* control_type = NULL;
    18                 Vector<IssmDouble>*  vector=NULL;
     11        int  num_controls;
     12        int* N = NULL;
     13        int* M = NULL;
     14        int* control_type = NULL;
    1915
    20                 /*Retrieve some parameters*/
    21                 parameters->FindParam(&num_controls,InversionNumControlParametersEnum);
    22                 parameters->FindParam(&control_type,NULL,InversionControlParametersEnum);
    23                 parameters->FindParam(&N,NULL,ControlInputSizeNEnum);
    24                 parameters->FindParam(&M,NULL,ControlInputSizeMEnum);
     16        /*Retrieve some parameters*/
     17        parameters->FindParam(&num_controls,InversionNumControlParametersEnum);
     18        parameters->FindParam(&control_type,NULL,InversionControlParametersEnum);
     19        parameters->FindParam(&N,NULL,ControlInputSizeNEnum);
     20        parameters->FindParam(&M,NULL,ControlInputSizeMEnum);
    2521
    26                 /*1. Get vector size*/
    27                 int size = 0;
    28                 for(int i=0;i<num_controls;i++) size+=M[i]*N[i];
     22        /*1. Get vector size*/
     23        int size = 0;
     24        for(int i=0;i<num_controls;i++) size+=M[i]*N[i];
    2925
    30                 /*2. Allocate vector*/
    31                 vector=new Vector<IssmDouble>(size);
     26        /*2. Allocate vector*/
     27        Vector<IssmDouble>* vector=new Vector<IssmDouble>(size);
    3228
    33                 /*3. Populate vector*/
    34                 int offset = 0;
    35                 for(int i=0;i<num_controls;i++){
    36                         for(int j=0;j<elements->Size();j++){
    37                                 Element* element=(Element*)elements->GetObjectByOffset(j);
    38                                 element->GetVectorFromControlInputs(vector,control_type[i],i,data,offset);
    39                         }
    40                         offset += M[i]*N[i];
     29        /*3. Populate vector*/
     30        int offset = 0;
     31        for(int i=0;i<num_controls;i++){
     32                for(int j=0;j<elements->Size();j++){
     33                        Element* element=(Element*)elements->GetObjectByOffset(j);
     34                        element->GetVectorFromControlInputs(vector,control_type[i],i,data,offset);
    4135                }
     36                offset += M[i]*N[i];
     37        }
     38        vector->Assemble();
    4239
    43                 vector->Assemble();
    44 
    45                 /*Assign output pointers:*/
    46                 xDelete<int>(control_type);
    47                 xDelete<int>(M);
    48                 xDelete<int>(N);
    49 
    50                 *pvector=vector;
    51         }
    52         else{
    53                 int  num_controls;
    54                 int* control_type = NULL;
    55                 Vector<IssmDouble>*  vector=NULL;
    56 
    57                 /*Retrieve some parameters*/
    58                 parameters->FindParam(&num_controls,InversionNumControlParametersEnum);
    59                 parameters->FindParam(&control_type,NULL,InversionControlParametersEnum);
    60 
    61                 /*2. Allocate vector*/
    62                 vector=new Vector<IssmDouble>(num_controls*vertices->NumberOfVertices());
    63 
    64                 /*3. Populate vector*/
    65                 int offset = 0;
    66                 for(int i=0;i<num_controls;i++){
    67                         for(int j=0;j<elements->Size();j++){
    68                                 Element* element=(Element*)elements->GetObjectByOffset(j);
    69                                 element->GetVectorFromControlInputs(vector,control_type[i],i,data);
    70                         }
    71                 }
    72                 vector->Assemble();
    73 
    74                 /*Assign output pointers:*/
    75                 xDelete<int>(control_type);
    76                 *pvector=vector;
    77         }
    78 
     40        /*Assign output pointers:*/
     41        xDelete<int>(control_type);
     42        xDelete<int>(M);
     43        xDelete<int>(N);
     44        *pvector=vector;
    7945}/*}}}*/
    8046void GetVectorFromControlInputsx( IssmDouble** pvector,int *pN, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters, const char* data){/*{{{*/
Note: See TracChangeset for help on using the changeset viewer.