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

Last change on this file since 14917 was 14917, checked in by Eric.Larour, 12 years ago

CHG: got rid of the include/include.h headere file, finally :)

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