Changeset 25412
- Timestamp:
- 08/16/20 20:50:42 (5 years ago)
- Location:
- issm/trunk-jpl/src/c/classes/Elements
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/classes/Elements/Element.cpp
r25406 r25412 1750 1750 IssmDouble value,value_min,value_max; 1751 1751 1752 int *vertexids = xNew<int>(numvertices); 1753 IssmDouble *values = xNew<IssmDouble>(numvertices); 1754 IssmDouble *values_min = xNew<IssmDouble>(numvertices); 1755 IssmDouble *values_max = xNew<IssmDouble>(numvertices); 1752 int vertexids[MAXVERTICES]; 1753 int vertexlids[MAXVERTICES]; 1754 IssmDouble values[MAXVERTICES]; 1755 IssmDouble values_min[MAXVERTICES]; 1756 IssmDouble values_max[MAXVERTICES]; 1756 1757 1757 1758 /*Some sanity checks*/ … … 1764 1765 for(int i=0;i<numvertices;i++){ 1765 1766 vertexids[i]=reCast<int>(iomodel->elements[numvertices*this->Sid()+i]); //ids for vertices are in the elements array from Matlab 1767 vertexlids[i]=iomodel->my_vertices_lids[vertexids[i]-1]; 1766 1768 } 1767 1769 … … 1773 1775 values_max[i] = scale*max_vector[vertexids[i]-1]; 1774 1776 } 1775 this->AddControlInput(input_enum,inputs,iomodel, values,values_min,values_max,P1Enum,id);1777 this->AddControlInput(input_enum,inputs,iomodel,&values[0],&values_min[0],&values_max[0],P1Enum,id); 1776 1778 } 1777 1779 else if(M==iomodel->numberofelements && N==1){ … … 1779 1781 values_min[0] = scale*min_vector[this->Sid()]; 1780 1782 values_max[0] = scale*max_vector[this->Sid()]; 1781 this->AddControlInput(input_enum,inputs,iomodel, values,values_min,values_max,P0Enum,id);1783 this->AddControlInput(input_enum,inputs,iomodel,&values[0],&values_min[0],&values_max[0],P0Enum,id); 1782 1784 } 1783 1785 else if(M==iomodel->numberofelements+1 && N>1){ … … 1813 1815 } 1814 1816 else if(M==iomodel->numberofvertices+1 && N>1){ 1815 _error_("not supported tet"); 1816 ///*create transient input: */ 1817 //IssmDouble* times = xNew<IssmDouble>(N); 1818 //for(int t=0;t<N;t++) times[t] = vector[(M-1)*N+t]; 1819 ///*Create the three transient inputs for the control input*/ 1820 //TransientInput* values_input=new TransientInput(input_enum,times,N); 1821 //TransientInput* mins_input = new TransientInput(ControlInputMinsEnum,times,N); 1822 //TransientInput* maxs_input = new TransientInput(ControlInputMaxsEnum,times,N); 1823 //TransientInput* grad_input = new TransientInput(ControlInputGradEnum); 1824 //for(int t=0;t<N;t++){ 1825 // for(int i=0;i<numvertices;i++){ 1826 // values[i]=vector[N*(vertexids[i]-1)+t]; 1827 // values_min[i] = min_vector[N*(vertexids[i]-1)+t]; 1828 // values_max[i] = max_vector[N*(vertexids[i]-1)+t]; 1829 // } 1830 // switch(this->ObjectEnum()){ 1831 // case TriaEnum: 1832 // values_input->AddTimeInput(new TriaInput(input_enum,values,P1Enum)); 1833 // mins_input->AddTimeInput(new TriaInput(ControlInputMinsEnum,values_min,P1Enum)); 1834 // maxs_input->AddTimeInput(new TriaInput(ControlInputMaxsEnum,values_max,P1Enum)); 1835 // break; 1836 // case PentaEnum: 1837 // values_input->AddTimeInput(new PentaInput(input_enum,values,P1Enum)); 1838 // mins_input->AddTimeInput(new PentaInput(ControlInputMinsEnum,values_min,P1Enum)); 1839 // maxs_input->AddTimeInput(new PentaInput(ControlInputMaxsEnum,values_max,P1Enum)); 1840 // break; 1841 // case TetraEnum: 1842 // values_input->AddTimeInput(new TetraInput(input_enum,values,P1Enum)); 1843 // mins_input->AddTimeInput(new TetraInput(ControlInputMinsEnum,values_min,P1Enum)); 1844 // maxs_input->AddTimeInput(new TetraInput(ControlInputMaxsEnum,values_max,P1Enum)); 1845 // break; 1846 // default: _error_("Not implemented yet"); 1847 // } 1848 //} 1849 //this->inputs->AddInput(new ControlInput(input_enum,TransientInputEnum,values_input,mins_input,maxs_input,grad_input,P1Enum,id)); 1850 //xDelete<IssmDouble>(times); 1817 1818 /*create transient input: */ 1819 IssmDouble* times = xNew<IssmDouble>(N); 1820 for(int t=0;t<N;t++) times[t] = vector[(M-1)*N+t]; 1821 inputs->SetTransientControlInput(input_enum,id,times,N); 1822 1823 /*Get input*/ 1824 ControlInput* control_input = inputs->GetControlInput(input_enum); _assert_(control_input); 1825 TransientInput* transientinput_val = control_input->GetTransientInput("value"); 1826 TransientInput* transientinput_min = control_input->GetTransientInput("lowerbound"); 1827 TransientInput* transientinput_max = control_input->GetTransientInput("upperbound"); 1828 for(int t=0;t<N;t++){ 1829 for(int i=0;i<numvertices;i++){ 1830 values[i] = vector[N*(vertexids[i]-1)+t]; 1831 values_min[i] = scale*min_vector[N*(vertexids[i]-1)+t]; 1832 values_max[i] = scale*max_vector[N*(vertexids[i]-1)+t]; 1833 } 1834 switch(this->ObjectEnum()){ 1835 case TriaEnum: 1836 transientinput_val->AddTriaTimeInput( t,numvertices,vertexlids,&values[0],P1Enum); 1837 transientinput_min->AddTriaTimeInput( t,numvertices,vertexlids,&values_min[0],P1Enum); 1838 transientinput_max->AddTriaTimeInput( t,numvertices,vertexlids,&values_max[0],P1Enum); 1839 break; 1840 case PentaEnum: 1841 //transientinput->AddPentaTimeInput(t,1,&(this->lid),&value,P0Enum); 1842 _error_("to be implemented"); 1843 break; 1844 default: _error_("Not implemented yet"); 1845 } 1846 } 1847 xDelete<IssmDouble>(times); 1851 1848 } 1852 1849 else _error_("not currently supported type of M and N attempted"); 1853 1854 /*clean up*/ 1855 xDelete<IssmDouble>(values); 1856 xDelete<IssmDouble>(values_min); 1857 xDelete<IssmDouble>(values_max); 1858 xDelete<int>(vertexids); 1859 } 1860 /*}}}*/ 1850 }/*}}}*/ 1861 1851 void Element::DatasetInputAdd(int enum_type,IssmDouble* vector,Inputs* inputs,IoModel* iomodel,int M,int N,int vector_type,int input_enum,int code,int input_id){/*{{{*/ 1862 1852 /*enum_type: the name of the DatasetInput (eg Outputdefinition1) -
issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
r25408 r25412 1136 1136 else if(control_input->layout_enum==TransientInputEnum){ 1137 1137 _assert_(N>1); 1138 1139 int* interp = NULL; 1140 parameters->FindParam(&interp,NULL,ControlInputInterpolationEnum); 1141 1138 1142 TransientInput* gradient_input = control_input->GetTransientInput("gradient"); _assert_(gradient_input); 1139 1143 1140 1144 for(int n=0;n<N;n++){ 1141 TriaInput* input_n = gradient_input->GetTriaInput(n); _assert_(input_n); 1142 if(input_n->GetInputInterpolationType()==P1Enum){ 1145 if(interp[control_index]==P1Enum){ 1143 1146 _error_("not implemented"); 1144 1147 } 1145 else if(in put_n->GetInputInterpolationType()==P0Enum){1146 input_n->SetInput(P0Enum,this->lid,gradient[idlist[n]]);1148 else if(interp[control_index]==P0Enum){ 1149 gradient_input->AddTriaTimeInput(n,1,&(this->lid),&gradient[idlist[n]],P0Enum); 1147 1150 } 1148 1151 else{ … … 1150 1153 } 1151 1154 } 1155 xDelete<int>(interp); 1152 1156 } 1153 1157 else _error_("Type not supported"); … … 2470 2474 TriaInput* input_n = input->GetTriaInput(n); _assert_(input_n); 2471 2475 if(input_n->GetInputInterpolationType()==P1Enum){ 2472 _error_("not implemented"); 2476 IssmDouble values[NUMVERTICES]; 2477 input_n->Serve(NUMVERTICES,&lidlist[0]); 2478 for(int i=0;i<NUMVERTICES;i++) values[count+i] = input_n->element_values[i]; 2479 count=count+NUMVERTICES; 2473 2480 } 2474 2481 else if(input_n->GetInputInterpolationType()==P0Enum){ 2475 2482 input_n->Serve(1,&this->lid); 2476 2483 values[n] = input_n->element_values[0]; 2477 count++;2478 2484 } 2479 2485 else{ … … 3964 3970 TriaInput* input_n = input->GetTriaInput(n); _assert_(input_n); 3965 3971 if(input_n->GetInputInterpolationType()==P1Enum){ 3966 _error_("not implemented"); 3972 for(int i=0;i<NUMVERTICES;i++) values[i] = vector[idlist[i]]; 3973 input_n->SetInput(P1Enum,NUMVERTICES,&lidlist[0],&values[0]); 3967 3974 } 3968 3975 else if(input_n->GetInputInterpolationType()==P0Enum){
Note:
See TracChangeset
for help on using the changeset viewer.