source: issm/trunk-jpl/src/c/objects/ExternalResults/DoubleMatExternalResult.cpp@ 12365

Last change on this file since 12365 was 12365, checked in by Mathieu Morlighem, 13 years ago

Do not number folds (folding is automated)

File size: 4.1 KB
Line 
1/*!\file DoubleMatExternalResult.c
2 * \brief: implementation of the DoubleMatExternalResult 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/*DoubleMatExternalResult constructors and destructor*/
23/*FUNCTION DoubleMatExternalResult::DoubleMatExternalResult(){{{*/
24DoubleMatExternalResult::DoubleMatExternalResult(){
25 return;
26}
27/*}}}*/
28/*FUNCTION DoubleMatExternalResult::DoubleMatExternalResult(int in_id, int enum_type,IssmDoubleMat values,int M,int N,int in_step,double in_time){{{*/
29DoubleMatExternalResult::DoubleMatExternalResult(int in_id, int in_enum_type,double* in_values, int in_M,int in_N,int in_step,double in_time){
30
31 id=in_id;
32 enum_type=in_enum_type;
33 M=in_M;
34 N=in_N;
35
36 /*Copy result in values*/
37 if(M*N){
38 values=(double*)xmalloc(M*N*sizeof(double));
39 memcpy(values,in_values,M*N*sizeof(double));
40 }
41 else values=NULL;
42
43 step=in_step;
44 time=in_time;
45}
46/*}}}*/
47/*FUNCTION DoubleMatExternalResult::~DoubleMatExternalResult(){{{*/
48DoubleMatExternalResult::~DoubleMatExternalResult(){
49
50 xfree((void**)&this->values);
51 return;
52}
53/*}}}*/
54
55/*Object virtual functions definitions:*/
56/*FUNCTION DoubleMatExternalResult::Echo {{{*/
57void DoubleMatExternalResult::Echo(void){
58
59 printf("DoubleMatExternalResult:\n");
60 printf(" enum: %i (%s)\n",this->enum_type,EnumToStringx(this->enum_type));
61 printf(" step: %i\n",this->step);
62 printf(" time: %g\n",this->time);
63 printf(" matrix size: %i-%i\n",this->M,this->N);
64
65}
66/*}}}*/
67/*FUNCTION DoubleMatExternalResult::DeepEcho{{{*/
68void DoubleMatExternalResult::DeepEcho(void){
69
70 int i,j;
71
72 printf("DoubleMatExternalResult:\n");
73 printf(" id: %i\n",this->id);
74 printf(" enum: %i (%s)\n",this->enum_type,EnumToStringx(this->enum_type));
75 printf(" step: %i\n",this->step);
76 printf(" time: %g\n",this->time);
77 printf(" matrix size: %i-%i\n",this->M,this->N);
78 for (i=0;i<this->M;i++){
79 printf(" [ ");
80 for (j=0;j<this->N;j++){
81 printf(" %12.6g ",this->values[i*this->N+j]);
82 }
83 printf(" ]\n");
84 }
85 printf("\n");
86
87}
88/*}}}*/
89/*FUNCTION DoubleMatExternalResult::Id{{{*/
90int DoubleMatExternalResult::Id(void){ return -1; }
91/*}}}*/
92/*FUNCTION DoubleMatExternalResult::MyRank{{{*/
93int DoubleMatExternalResult::MyRank(void){
94 extern int my_rank;
95 return my_rank;
96}
97/*}}}*/
98/*FUNCTION DoubleMatExternalResult::ObjectEnum{{{*/
99int DoubleMatExternalResult::ObjectEnum(void){
100
101 return DoubleMatExternalResultEnum;
102
103}
104/*}}}*/
105/*FUNCTION DoubleMatExternalResult::copy{{{*/
106Object* DoubleMatExternalResult::copy() {
107
108 return new DoubleMatExternalResult(this->id,this->enum_type,this->values,this->M,this->N,this->step,this->time);
109
110}
111/*}}}*/
112
113/*DoubleMatExternalResult management: */
114/*FUNCTION DoubleMatExternalResult::WriteData{{{*/
115void DoubleMatExternalResult::WriteData(FILE* fid,bool io_gather){
116
117 int length;
118 int type;
119 int rows,cols;
120 char *name = NULL;
121 extern int my_rank;
122
123 if(io_gather){
124 /*we are gathering the data on cpu 0, don't write on other cpus: */
125 if(my_rank) return;
126 }
127
128 /*First write enum: */
129 EnumToStringx(&name,this->enum_type);
130 length=(strlen(name)+1)*sizeof(char);
131 fwrite(&length,sizeof(int),1,fid);
132 fwrite(name,length,1,fid);
133 xfree((void**)&name);
134
135 /*Now write time and step: */
136 fwrite(&time,sizeof(double),1,fid);
137 fwrite(&step,sizeof(int),1,fid);
138
139 /*writing a double array, type is 3:*/
140 type=3;
141 fwrite(&type,sizeof(int),1,fid);
142 rows=this->M;
143 fwrite(&rows,sizeof(int),1,fid);
144 cols=this->N;
145 fwrite(&cols,sizeof(int),1,fid);
146 fwrite(this->values,cols*rows*sizeof(double),1,fid);
147
148}
149/*}}}*/
150/*FUNCTION DoubleMatExternalResult::GetResultName{{{*/
151void DoubleMatExternalResult::GetResultName(char** pname){
152 EnumToStringx(pname,this->enum_type);
153}
154/*}}}*/
155/*FUNCTION DoubleMatExternalResult::GetStep{{{*/
156int DoubleMatExternalResult::GetStep(void){
157
158 return this->step;
159}
160/*}}}*/
Note: See TracBrowser for help on using the repository browser.