Changeset 25317 for issm/trunk-jpl/src/c/modules/GetVectorFromControlInputsx/GetVectorFromControlInputsx.cpp
- Timestamp:
- 07/31/20 09:21:13 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/modules/GetVectorFromControlInputsx/GetVectorFromControlInputsx.cpp
r24335 r25317 9 9 void GetVectorFromControlInputsx(Vector<IssmDouble>** pvector, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,const char* data){/*{{{*/ 10 10 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; 19 15 20 21 22 23 24 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); 25 21 26 27 28 22 /*1. Get vector size*/ 23 int size = 0; 24 for(int i=0;i<num_controls;i++) size+=M[i]*N[i]; 29 25 30 31 26 /*2. Allocate vector*/ 27 Vector<IssmDouble>* vector=new Vector<IssmDouble>(size); 32 28 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); 41 35 } 36 offset += M[i]*N[i]; 37 } 38 vector->Assemble(); 42 39 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; 79 45 }/*}}}*/ 80 46 void 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.