source: issm/branches/trunk-jpl-damage/src/c/objects/ElementResults/TriaP1ElementResult.cpp@ 11427

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

moved TriaVertexElementResult to TriaP1ElementResult and same for Penta

File size: 6.1 KB
Line 
1/*!\file TriaP1ElementResult.c
2 * \brief: implementation of the TriaP1ElementResult object
3 */
4
5#ifdef HAVE_CONFIG_H
6 #include <config.h>
7#else
8#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
9#endif
10
11#include <stdio.h>
12#include <string.h>
13#include "./ElementResultLocal.h"
14#include "../objects.h"
15#include "../../EnumDefinitions/EnumDefinitions.h"
16#include "../../shared/shared.h"
17#include "../../Container/Container.h"
18#include "../../include/include.h"
19
20/*TriaP1ElementResult constructors and destructor*/
21/*FUNCTION TriaP1ElementResult::TriaP1ElementResult(){{{1*/
22TriaP1ElementResult::TriaP1ElementResult(){
23 return;
24}
25/*}}}*/
26/*FUNCTION TriaP1ElementResult::TriaP1ElementResult(int in_enum_type,double* in_values,int in_step, double in_time){{{1*/
27TriaP1ElementResult::TriaP1ElementResult(int in_enum_type,double* in_values,int in_step, double in_time){
28
29 enum_type=in_enum_type;
30 values[0]=in_values[0];
31 values[1]=in_values[1];
32 values[2]=in_values[2];
33 step=in_step;
34 time=in_time;
35}
36/*}}}*/
37/*FUNCTION TriaP1ElementResult::~TriaP1ElementResult(){{{1*/
38TriaP1ElementResult::~TriaP1ElementResult(){
39 return;
40}
41/*}}}*/
42
43/*Object virtual functions definitions:*/
44/*FUNCTION TriaP1ElementResult::Echo {{{1*/
45void TriaP1ElementResult::Echo(void){
46 this->DeepEcho();
47}
48/*}}}*/
49/*FUNCTION TriaP1ElementResult::DeepEcho{{{1*/
50void TriaP1ElementResult::DeepEcho(void){
51
52 printf("TriaP1ElementResult:\n");
53 printf(" enum: %i (%s)\n",this->enum_type,EnumToStringx(this->enum_type));
54 printf(" values: [%g %g %g]\n",this->values[0],this->values[1],this->values[2]);
55 printf(" step: %i\n",this->step);
56 printf(" time: %g\n",this->time);
57}
58/*}}}*/
59/*FUNCTION TriaP1ElementResult::Id{{{1*/
60int TriaP1ElementResult::Id(void){ return -1; }
61/*}}}*/
62/*FUNCTION TriaP1ElementResult::MyRank{{{1*/
63int TriaP1ElementResult::MyRank(void){
64 extern int my_rank;
65 return my_rank;
66}
67/*}}}*/
68#ifdef _SERIAL_
69/*FUNCTION TriaP1ElementResult::Marshall{{{1*/
70void TriaP1ElementResult::Marshall(char** pmarshalled_dataset){
71
72 char* marshalled_dataset=NULL;
73 int enum_value=0;
74
75
76 /*recover marshalled_dataset: */
77 marshalled_dataset=*pmarshalled_dataset;
78
79 /*get enum value of TriaP1ElementResult: */
80 enum_value=TriaP1ElementResultEnum;
81
82 /*marshall enum: */
83 memcpy(marshalled_dataset,&enum_value,sizeof(enum_value));marshalled_dataset+=sizeof(enum_value);
84
85 /*marshall TriaP1ElementResult data: */
86 memcpy(marshalled_dataset,&enum_type,sizeof(enum_type));marshalled_dataset+=sizeof(enum_type);
87 memcpy(marshalled_dataset,&values,sizeof(values));marshalled_dataset+=sizeof(values);
88 memcpy(marshalled_dataset,&time,sizeof(time));marshalled_dataset+=sizeof(time);
89 memcpy(marshalled_dataset,&step,sizeof(step));marshalled_dataset+=sizeof(step);
90
91 *pmarshalled_dataset=marshalled_dataset;
92}
93/*}}}*/
94/*FUNCTION TriaP1ElementResult::MarshallSize{{{1*/
95int TriaP1ElementResult::MarshallSize(){
96
97 return sizeof(values)
98 +sizeof(enum_type)
99 +sizeof(time)
100 +sizeof(step)
101 +sizeof(int); //sizeof(int) for enum value
102}
103/*}}}*/
104/*FUNCTION TriaP1ElementResult::Demarshall{{{1*/
105void TriaP1ElementResult::Demarshall(char** pmarshalled_dataset){
106
107 char* marshalled_dataset=NULL;
108 int i;
109
110 /*recover marshalled_dataset: */
111 marshalled_dataset=*pmarshalled_dataset;
112
113 /*this time, no need to get enum type, the pointer directly points to the beginning of the
114 *object data (thanks to DataSet::Demarshall):*/
115 memcpy(&enum_type,marshalled_dataset,sizeof(enum_type));marshalled_dataset+=sizeof(enum_type);
116 memcpy(&values,marshalled_dataset,sizeof(values));marshalled_dataset+=sizeof(values);
117 memcpy(&time,marshalled_dataset,sizeof(time));marshalled_dataset+=sizeof(time);
118 memcpy(&step,marshalled_dataset,sizeof(step));marshalled_dataset+=sizeof(step);
119
120 /*return: */
121 *pmarshalled_dataset=marshalled_dataset;
122 return;
123}
124/*}}}*/
125#endif
126/*FUNCTION TriaP1ElementResult::ObjectEnum{{{1*/
127int TriaP1ElementResult::ObjectEnum(void){
128
129 return TriaP1ElementResultEnum;
130
131}
132/*}}}*/
133/*FUNCTION TriaP1ElementResult::copy{{{1*/
134Object* TriaP1ElementResult::copy() {
135
136 return new TriaP1ElementResult(this->enum_type,this->values,this->step,this->time);
137
138}
139/*}}}*/
140
141/*ElementResult management*/
142/*FUNCTION TriaP1ElementResult::InstanceEnum{{{1*/
143int TriaP1ElementResult::InstanceEnum(void){
144
145 return this->enum_type;
146
147}
148/*}}}*/
149/*FUNCTION TriaP1ElementResult::SpawnTriaElementResult{{{1*/
150ElementResult* TriaP1ElementResult::SpawnTriaElementResult(int* indices){
151
152 /*output*/
153 TriaP1ElementResult* outresult=NULL;
154
155 /*Create new Tria result (copy of current result)*/
156 outresult=new TriaP1ElementResult(this->enum_type,&this->values[0],this->step,this->time);
157
158 /*Assign output*/
159 return outresult;
160
161}
162/*}}}*/
163/*FUNCTION TriaP1ElementResult::ProcessUnits{{{1*/
164void TriaP1ElementResult::ProcessUnits(Parameters* parameters){
165
166 UnitConversion(this->values,3,IuToExtEnum,this->enum_type);
167
168}
169/*}}}*/
170/*FUNCTION TriaP1ElementResult::NumberOfNodalValues{{{1*/
171int TriaP1ElementResult::NumberOfNodalValues(void){
172 return 3;
173}
174/*}}}*/
175/*FUNCTION TriaP1ElementResult::PatchFill{{{1*/
176void TriaP1ElementResult::PatchFill(int row, Patch* patch){
177
178 /*Here, we fill the result information into the patch object. First, let's remember what is in a row
179 * of the patch object: enum_type step time element_id interpolation vertices_ids nodal_values
180 * Here, we will supply the enum_type, step, time, interpolation and nodal_values: */
181 patch->fillresultinfo(row,this->enum_type,this->step,this->time,P1Enum,this->values,3);
182
183}
184/*}}}*/
185/*FUNCTION TriaP1ElementResult::GetVectorFromResults{{{1*/
186void TriaP1ElementResult::GetVectorFromResults(Vec vector,int* doflist,int* connectivitylist,int numdofs){
187
188 double data[3];
189
190 if(numdofs!=3)_error_("Result %s is a TriaP1ElementResult and cannot write vector of %i dofs",numdofs);
191 for(int i=0;i<3;i++) data[i]=this->values[i]/(double)connectivitylist[i];
192 VecSetValues(vector,numdofs,doflist,(const double*)&data,ADD_VALUES);
193
194} /*}}}*/
195/*FUNCTION TriaP1ElementResult::GetElementVectorFromResults{{{1*/
196void TriaP1ElementResult::GetElementVectorFromResults(Vec vector,int dof){
197
198 _error_("Result %s is a TriaP1ElementResult and should not write vector of size numberofelemenrs",EnumToStringx(enum_type));
199} /*}}}*/
Note: See TracBrowser for help on using the repository browser.