Changeset 25208
- Timestamp:
- 07/05/20 23:44:11 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified issm/trunk-jpl/src/c/classes/IoModel.cpp ¶
r25145 r25208 27 27 #include "../shared/io/io.h" 28 28 #include "../shared/shared.h" 29 #include "../classes/Inputs2/TransientInput2.h" 29 30 30 31 #ifdef _HAVE_CODIPACK_ … … 1716 1717 } 1717 1718 break; 1719 case 8: { //MatArray {{{ 1720 1721 /*variables:*/ 1722 int numarray; 1723 IssmDouble** array=NULL; 1724 IssmDouble* matrix=NULL; 1725 IssmDouble* times = NULL; 1726 int* pM = NULL; 1727 int* pN = NULL; 1728 int M,N; 1729 1730 /*fetch array of matrices:*/ 1731 this->FetchData(&array,&pM,&pN,&numarray,vector_name); 1732 1733 for (int i=0;i<numarray;i++){ 1734 1735 M=pM[i]; 1736 N=pN[i]; 1737 matrix=array[i]; 1738 1739 //recover time vector: 1740 times=xNew<IssmDouble>(N); 1741 for(int t=0;t<N;t++) times[t] = matrix[(M-1)*N+t]; 1742 1743 //initialize transient input dataset: 1744 TransientInput2* transientinput=inputs2->SetDatasetTransientInput(input_enum,i, times,N); 1745 for(int j=0;j<elements->Size();j++){ 1746 1747 /*Get the right transient input*/ 1748 Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(j)); 1749 1750 /*Get values and lid list*/ 1751 const int numvertices = element->GetNumberOfVertices(); 1752 int *vertexlids = xNew<int>(numvertices); 1753 int *vertexsids = xNew<int>(numvertices); 1754 1755 1756 /*Recover vertices ids needed to initialize inputs*/ 1757 _assert_(this->elements); 1758 for(int k=0;k<numvertices;k++){ 1759 vertexsids[k] =reCast<int>(this->elements[numvertices*element->Sid()+k]); //ids for vertices are in the elements array from Matlab 1760 vertexlids[k]=this->my_vertices_lids[vertexsids[k]-1]; 1761 } 1762 1763 if(M==this->numberofvertices || M==(this->numberofvertices+1)){ 1764 1765 IssmDouble* values=xNew<IssmDouble>(numvertices); 1766 1767 for(int t=0;t<N;t++){ 1768 for (int k=0;k<numvertices;k++)values[k]=matrix[N*vertexsids[k]+t]; 1769 1770 switch(element->ObjectEnum()){ 1771 case TriaEnum: transientinput->AddTriaTimeInput( t,numvertices,vertexlids,values,P1Enum); break; 1772 case PentaEnum: transientinput->AddPentaTimeInput(t,numvertices,vertexlids,values,P1Enum); break; 1773 default: _error_("Not implemented yet"); 1774 } 1775 } 1776 xDelete<IssmDouble>(values); 1777 } 1778 else if(M==this->numberofelements || M==(this->numberofelements+1)){ 1779 1780 IssmDouble value; 1781 1782 for(int t=0;t<N;t++){ 1783 1784 value=matrix[N*element->Sid()+t]; 1785 //if(element->Sid()==188 && t==0)_printf_("value: " << value << "\n"); 1786 switch(element->ObjectEnum()){ 1787 case TriaEnum: transientinput->AddTriaTimeInput( t,1,&element->lid,&value,P0Enum); break; 1788 case PentaEnum: transientinput->AddPentaTimeInput( t,1,&element->lid,&value,P0Enum); break; 1789 default: _error_("Not implemented yet"); 1790 } 1791 } 1792 } 1793 else _error_("FetchDataToInput error message: row size of MatArray elements should be either numberofelements (+1) or numberofvertices (+1)"); 1794 1795 xDelete<int>(vertexlids); 1796 xDelete<int>(vertexsids); 1797 } 1798 1799 xDelete<IssmDouble>(times); 1800 } 1801 1802 /*Delete data:*/ 1803 for(int i=0;i<numarray;i++){ 1804 IssmDouble* matrix=array[i]; 1805 xDelete<IssmDouble>(matrix); 1806 } 1807 xDelete<IssmDouble*>(array); 1808 xDelete<int>(pM); 1809 xDelete<int>(pN); 1810 } //}}} 1811 break; 1718 1812 case 7: //IssmDouble vector 1719 1813 case 10:
Note:
See TracChangeset
for help on using the changeset viewer.