source: issm/trunk-jpl/src/c/classes/objects/Params/DoubleMatArrayParam.cpp@ 13622

Last change on this file since 13622 was 13622, checked in by Mathieu Morlighem, 12 years ago

CHG: cosmetics, removing all deboule blank lines and indent single white lines correctly

File size: 5.7 KB
Line 
1/*!\file DoubleMatArrayParam.c
2 * \brief: implementation of the DoubleMatArrayParam object
3 */
4
5/*header files: */
6/*{{{*/
7#ifdef HAVE_CONFIG_H
8 #include <config.h>
9#else
10#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
11#endif
12
13#include <stdio.h>
14#include <string.h>
15#include "../objects.h"
16#include "../../../EnumDefinitions/EnumDefinitions.h"
17#include "../../../shared/shared.h"
18#include "../../../Container/Container.h"
19#include "../../../include/include.h"
20/*}}}*/
21
22/*DoubleMatArrayParam constructors and destructor*/
23/*FUNCTION DoubleMatArrayParam::DoubleMatArrayParam(){{{*/
24DoubleMatArrayParam::DoubleMatArrayParam(){
25 return;
26}
27/*}}}*/
28/*FUNCTION DoubleMatArrayParam::DoubleMatArrayParam(int enum_type,IssmDouble** array, int M, int* mdim_array, int* ndim_array){{{*/
29DoubleMatArrayParam::DoubleMatArrayParam(int in_enum_type,IssmDouble** in_array, int in_M, int* in_mdim_array, int* in_ndim_array){
30
31 int i;
32 IssmDouble* matrix=NULL;
33 int m,n;
34
35 enum_type=in_enum_type;
36 M=in_M;
37 if(M){
38 array=xNew<IssmDouble*>(M);
39 mdim_array=xNew<int>(M);
40 ndim_array=xNew<int>(M);
41
42 for(i=0;i<M;i++){
43 m=in_mdim_array[i];
44 n=in_ndim_array[i];
45
46 mdim_array[i]=m;
47 ndim_array[i]=n;
48
49 if(m*n){
50 matrix=xNew<IssmDouble>(m*n);
51 xMemCpy<IssmDouble>(matrix,in_array[i],m*n);
52 }
53 else{
54 matrix=NULL;
55 }
56 array[i]=matrix;
57 }
58 }
59 else{
60 array=NULL;
61 mdim_array=NULL;
62 ndim_array=NULL;
63 }
64}
65/*}}}*/
66/*FUNCTION DoubleMatArrayParam::~DoubleMatArrayParam(){{{*/
67DoubleMatArrayParam::~DoubleMatArrayParam(){
68
69 int i;
70 IssmDouble* matrix=NULL;
71
72 xDelete<int>(mdim_array);
73 xDelete<int>(ndim_array);
74
75 for(i=0;i<M;i++){
76 matrix=array[i];
77 xDelete<IssmDouble>(matrix);
78 }
79
80 xDelete<IssmDouble*>(array);
81 return;
82}
83/*}}}*/
84
85/*Object virtual functions definitions:*/
86/*FUNCTION DoubleMatArrayParam::Echo {{{*/
87void DoubleMatArrayParam::Echo(void){
88
89 _printLine_("DoubleMatArrayParam:");
90 _printLine_(" enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")");
91 _printLine_(" array size: " << this->M);
92 _printLine_(" array pointer: " << this->array);
93
94}
95/*}}}*/
96/*FUNCTION DoubleMatArrayParam::DeepEcho{{{*/
97void DoubleMatArrayParam::DeepEcho(void){
98
99 int i,j,k;
100 int m,n;
101 IssmDouble* matrix=NULL;
102
103 _printLine_("DoubleMatArrayParam:");
104 _printLine_(" enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")");
105 _printLine_(" array size: " << this->M);
106 for(i=0;i<M;i++){
107 _printLine_(" array " << i << " (" << mdim_array[i] << "x" << ndim_array[i] << "):");
108 matrix=array[i];
109 m=mdim_array[i];
110 n=ndim_array[i];
111
112 for(j=0;j<m;j++){
113 _printString_(" ");
114 for(k=0;k<n;k++)_printString_(*(matrix+n*j+k) << " ");
115 _printLine_("");
116 }
117 }
118}
119/*}}}*/
120/*FUNCTION DoubleMatArrayParam::Id{{{*/
121int DoubleMatArrayParam::Id(void){ return -1; }
122/*}}}*/
123/*FUNCTION DoubleMatArrayParam::ObjectEnum{{{*/
124int DoubleMatArrayParam::ObjectEnum(void){
125
126 return DoubleMatArrayParamEnum;
127
128}
129/*}}}*/
130/*FUNCTION DoubleMatArrayParam::copy{{{*/
131Object* DoubleMatArrayParam::copy() {
132
133 return new DoubleMatArrayParam(this->enum_type,this->array, this->M, this->mdim_array,this->ndim_array);
134
135}
136/*}}}*/
137
138/*DoubleMatArrayParam virtual functions definitions: */
139/*FUNCTION DoubleMatArrayParam::GetParameterValue(IssmDouble*** parray, int* pM,int** pmdims, int** pndims){{{*/
140void DoubleMatArrayParam::GetParameterValue(IssmDouble*** pout_array, int* pout_M,int** pout_mdim_array, int** pout_ndim_array){
141
142 int i,m,n;
143 IssmDouble* matrix=NULL;
144 IssmDouble* out_matrix=NULL;
145
146 /*output: */
147 IssmDouble** out_array=NULL;
148 int out_M;
149 int* out_mdim_array=NULL;
150 int* out_ndim_array=NULL;
151
152 out_M=this->M;
153 if(out_M){
154 out_array=xNew<IssmDouble*>(M);
155 out_mdim_array=xNew<int>(M);
156 out_ndim_array=xNew<int>(M);
157
158 xMemCpy<int>(out_mdim_array,this->mdim_array,M);
159 xMemCpy<int>(out_ndim_array,this->ndim_array,M);
160
161 for(i=0;i<this->M;i++){
162 matrix=this->array[i];
163 m=this->mdim_array[i];
164 n=this->ndim_array[i];
165
166 if(m*n){
167 out_matrix=xNew<IssmDouble>(m*n);
168 xMemCpy<IssmDouble>(out_matrix,matrix,m*n);
169 }
170 else{
171 out_matrix=NULL;
172 }
173 out_array[i]=out_matrix;
174 }
175 }
176 else{
177 out_array=NULL;
178 out_matrix=NULL;
179 out_ndim_array=NULL;
180 }
181
182 /*Assign output pointers:*/
183 if(pout_M) *pout_M=out_M;
184 if(pout_mdim_array) *pout_mdim_array=out_mdim_array;
185 if(pout_ndim_array) *pout_ndim_array=out_ndim_array;
186 *pout_array=out_array;
187
188}
189/*}}}*/
190/*FUNCTION DoubleMatArrayParam::GetParameterName{{{*/
191void DoubleMatArrayParam::GetParameterName(char**pname){
192 EnumToStringx(pname,this->enum_type);
193}
194/*}}}*/
195/*FUNCTION DoubleMatArrayParam::SetValue(IssmDouble** array, int M, int* mdim_array, int* ndim_array){{{*/
196void DoubleMatArrayParam::SetValue(IssmDouble** in_array, int in_M, int* in_mdim_array, int* in_ndim_array){
197
198 int i,m,n;
199 IssmDouble* in_matrix=NULL;
200 IssmDouble* matrix=NULL;
201
202 /*avoid leak: */
203 xDelete<int>(mdim_array);
204 xDelete<int>(ndim_array);
205 for(i=0;i<M;i++){
206 matrix=array[i];
207 xDelete<IssmDouble>(matrix);
208 }
209 xDelete<IssmDouble*>(array);
210
211 /*copy data: */
212 this->M=in_M;
213 this->array=xNew<IssmDouble*>(M);
214 this->mdim_array=xNew<int>(M);
215 this->ndim_array=xNew<int>(M);
216
217 xMemCpy<int>(this->mdim_array,in_mdim_array,M);
218 xMemCpy<int>(this->ndim_array,in_ndim_array,M);
219
220 for(i=0;i<M;i++){
221 in_matrix=in_array[i];
222 m=in_mdim_array[i];
223 n=in_ndim_array[i];
224
225 matrix=xNew<IssmDouble>(m*n);
226 xMemCpy<IssmDouble>(matrix,in_matrix,m*n);
227
228 this->array[i]=matrix;
229 }
230
231}
232/*}}}*/
233/*FUNCTION DoubleMatArrayParam::UnitConversion{{{*/
234void DoubleMatArrayParam::UnitConversion(int direction_enum){
235 /*go through all matrices and convert: */
236 for (int i=0;i<this->M;i++){
237 IssmDouble* matrix=this->array[i];
238 int m=this->mdim_array[i];
239 int n=this->ndim_array[i];
240 ::UnitConversion(matrix,m*n,direction_enum,this->enum_type);
241 }
242
243}
244/*}}}*/
Note: See TracBrowser for help on using the repository browser.