source: issm/trunk-jpl/src/c/classes/Inputs/PentaP1Input.cpp@ 15300

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

CHG: force user to specify interpolation for TriaInput

File size: 15.1 KB
RevLine 
[11291]1/*!\file PentaP1Input.c
2 * \brief: implementation of the PentaP1Input object
[3683]3 */
4
5#ifdef HAVE_CONFIG_H
[9320]6 #include <config.h>
[3683]7#else
8#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
9#endif
10
[15012]11#include "../classes.h"
12#include "../../shared/shared.h"
[3683]13
[11291]14/*PentaP1Input constructors and destructor*/
[12365]15/*FUNCTION PentaP1Input::PentaP1Input(){{{*/
[11291]16PentaP1Input::PentaP1Input(){
[3683]17 return;
18}
19/*}}}*/
[12530]20/*FUNCTION PentaP1Input::PentaP1Input(int in_enum_type,IssmDouble* values){{{*/
21PentaP1Input::PentaP1Input(int in_enum_type,IssmDouble* in_values)
[4882]22 :PentaRef(1)
23{
[3683]24
[4882]25 /*Set PentaRef*/
26 this->SetElementType(P1Enum,0);
27 this->element_type=P1Enum;
28
[3683]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 values[3]=in_values[3];
34 values[4]=in_values[4];
35 values[5]=in_values[5];
36}
37/*}}}*/
[12365]38/*FUNCTION PentaP1Input::~PentaP1Input(){{{*/
[11291]39PentaP1Input::~PentaP1Input(){
[3683]40 return;
41}
42/*}}}*/
43
[4248]44/*Object virtual functions definitions:*/
[12365]45/*FUNCTION PentaP1Input::Echo {{{*/
[11291]46void PentaP1Input::Echo(void){
[4248]47 this->DeepEcho();
[3683]48}
49/*}}}*/
[12365]50/*FUNCTION PentaP1Input::DeepEcho{{{*/
[11291]51void PentaP1Input::DeepEcho(void){
[3683]52
[15104]53 _printf_("PentaP1Input:\n");
54 _printf_(" enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")\n");
55 _printf_(" values: [" << this->values[0] << " " << this->values[1] << " " << this->values[2] << " " << this->values[3] << " " << this->values[4] << " " << this->values[5] << "]\n");
[3683]56}
57/*}}}*/
[12365]58/*FUNCTION PentaP1Input::Id{{{*/
[11291]59int PentaP1Input::Id(void){ return -1; }
[3683]60/*}}}*/
[12365]61/*FUNCTION PentaP1Input::ObjectEnum{{{*/
[11291]62int PentaP1Input::ObjectEnum(void){
[4248]63
[11291]64 return PentaP1InputEnum;
[4248]65
66}
67/*}}}*/
[13622]68
[11291]69/*PentaP1Input management*/
[12365]70/*FUNCTION PentaP1Input::copy{{{*/
[11291]71Object* PentaP1Input::copy() {
[13622]72
[11291]73 return new PentaP1Input(this->enum_type,this->values);
[4248]74
75}
76/*}}}*/
[12365]77/*FUNCTION PentaP1Input::InstanceEnum{{{*/
[11291]78int PentaP1Input::InstanceEnum(void){
[4248]79
80 return this->enum_type;
81
82}
83/*}}}*/
[12365]84/*FUNCTION PentaP1Input::SpawnTriaInput{{{*/
[11291]85Input* PentaP1Input::SpawnTriaInput(int* indices){
[3683]86
[3847]87 /*output*/
[15298]88 TriaInput* outinput=NULL;
[12530]89 IssmDouble newvalues[3];
[3847]90
91 /*Loop over the new indices*/
92 for(int i=0;i<3;i++){
93
94 /*Check index value*/
[6412]95 _assert_(indices[i]>=0 && indices[i]<6);
[3847]96
97 /*Assign value to new input*/
98 newvalues[i]=this->values[indices[i]];
99 }
100
101 /*Create new Tria input*/
[15300]102 outinput=new TriaInput(this->enum_type,&newvalues[0],P1Enum);
[3847]103
104 /*Assign output*/
105 return outinput;
106
107}
108/*}}}*/
[12365]109/*FUNCTION PentaP1Input::SpawnResult{{{*/
[12530]110ElementResult* PentaP1Input::SpawnResult(int step, IssmDouble time){
[3847]111
[11292]112 return new PentaP1ElementResult(this->enum_type,this->values,step,time);
[4037]113
114}
115/*}}}*/
116
[3683]117/*Object functions*/
[12530]118/*FUNCTION PentaP1Input::GetInputValue(IssmDouble* pvalue,GaussPenta* gauss){{{*/
119void PentaP1Input::GetInputValue(IssmDouble* pvalue,GaussPenta* gauss){
[5629]120
121 /*Call PentaRef function*/
[10135]122 PentaRef::GetInputValue(pvalue,&values[0],gauss);
[5629]123
124}
125/*}}}*/
[12550]126/*FUNCTION PentaP1Input::GetInputDerivativeValue(IssmDouble* p, IssmDouble* xyz_list, GaussPenta* gauss){{{*/
127void PentaP1Input::GetInputDerivativeValue(IssmDouble* p, IssmDouble* xyz_list, GaussPenta* gauss){
[5629]128
129 /*Call PentaRef function*/
[10135]130 PentaRef::GetInputDerivativeValue(p,&values[0],xyz_list,gauss);
[5629]131}
132/*}}}*/
[12365]133/*FUNCTION PentaP1Input::GetVxStrainRate3d{{{*/
[12550]134void PentaP1Input::GetVxStrainRate3d(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){
[5647]135 int i,j;
136
[8303]137 const int numnodes=6;
[5647]138 const int DOFVELOCITY=3;
[12530]139 IssmDouble B[8][27];
140 IssmDouble B_reduced[6][DOFVELOCITY*numnodes];
141 IssmDouble velocity[numnodes][DOFVELOCITY];
[5647]142
143 /*Get B matrix: */
144 GetBStokes(&B[0][0], xyz_list, gauss);
145 /*Create a reduced matrix of B to get rid of pressure */
146 for (i=0;i<6;i++){
147 for (j=0;j<3;j++){
148 B_reduced[i][j]=B[i][j];
149 }
150 for (j=4;j<7;j++){
151 B_reduced[i][j-1]=B[i][j];
152 }
153 for (j=8;j<11;j++){
154 B_reduced[i][j-2]=B[i][j];
155 }
156 for (j=12;j<15;j++){
157 B_reduced[i][j-3]=B[i][j];
158 }
159 for (j=16;j<19;j++){
160 B_reduced[i][j-4]=B[i][j];
161 }
162 for (j=20;j<23;j++){
163 B_reduced[i][j-5]=B[i][j];
164 }
165 }
166
167 /*Here, we are computing the strain rate of (vx,0,0)*/
[8303]168 for(i=0;i<numnodes;i++){
[5647]169 velocity[i][0]=this->values[i];
170 velocity[i][1]=0.0;
171 velocity[i][2]=0.0;
172 }
173 /*Multiply B by velocity, to get strain rate: */
[8303]174 MatrixMultiply(&B_reduced[0][0],6,DOFVELOCITY*numnodes,0,&velocity[0][0],DOFVELOCITY*numnodes,1,0,epsilonvx,0);
[5647]175
176}
177/*}}}*/
[12365]178/*FUNCTION PentaP1Input::GetVyStrainRate3d{{{*/
[12550]179void PentaP1Input::GetVyStrainRate3d(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){
[5647]180 int i,j;
181
[8303]182 const int numnodes=6;
[5647]183 const int DOFVELOCITY=3;
[12530]184 IssmDouble B[8][27];
185 IssmDouble B_reduced[6][DOFVELOCITY*numnodes];
186 IssmDouble velocity[numnodes][DOFVELOCITY];
[5647]187
188 /*Get B matrix: */
189 GetBStokes(&B[0][0], xyz_list, gauss);
190 /*Create a reduced matrix of B to get rid of pressure */
191 for (i=0;i<6;i++){
192 for (j=0;j<3;j++){
193 B_reduced[i][j]=B[i][j];
194 }
195 for (j=4;j<7;j++){
196 B_reduced[i][j-1]=B[i][j];
197 }
198 for (j=8;j<11;j++){
199 B_reduced[i][j-2]=B[i][j];
200 }
201 for (j=12;j<15;j++){
202 B_reduced[i][j-3]=B[i][j];
203 }
204 for (j=16;j<19;j++){
205 B_reduced[i][j-4]=B[i][j];
206 }
207 for (j=20;j<23;j++){
208 B_reduced[i][j-5]=B[i][j];
209 }
210 }
211
212 /*Here, we are computing the strain rate of (0,vy,0)*/
[8303]213 for(i=0;i<numnodes;i++){
[5647]214 velocity[i][0]=0.0;
215 velocity[i][1]=this->values[i];
216 velocity[i][2]=0.0;
217 }
218 /*Multiply B by velocity, to get strain rate: */
[8303]219 MatrixMultiply(&B_reduced[0][0],6,DOFVELOCITY*numnodes,0,&velocity[0][0],DOFVELOCITY*numnodes,1,0,epsilonvy,0);
[5647]220
221}
222/*}}}*/
[12365]223/*FUNCTION PentaP1Input::GetVzStrainRate3d{{{*/
[12550]224void PentaP1Input::GetVzStrainRate3d(IssmDouble* epsilonvz,IssmDouble* xyz_list, GaussPenta* gauss){
[5647]225 int i,j;
226
[8303]227 const int numnodes=6;
[5647]228 const int DOFVELOCITY=3;
[12530]229 IssmDouble B[8][27];
230 IssmDouble B_reduced[6][DOFVELOCITY*numnodes];
231 IssmDouble velocity[numnodes][DOFVELOCITY];
[5647]232
233 /*Get B matrix: */
234 GetBStokes(&B[0][0], xyz_list, gauss);
235 /*Create a reduced matrix of B to get rid of pressure */
236 for (i=0;i<6;i++){
237 for (j=0;j<3;j++){
238 B_reduced[i][j]=B[i][j];
239 }
240 for (j=4;j<7;j++){
241 B_reduced[i][j-1]=B[i][j];
242 }
243 for (j=8;j<11;j++){
244 B_reduced[i][j-2]=B[i][j];
245 }
246 for (j=12;j<15;j++){
247 B_reduced[i][j-3]=B[i][j];
248 }
249 for (j=16;j<19;j++){
250 B_reduced[i][j-4]=B[i][j];
251 }
252 for (j=20;j<23;j++){
253 B_reduced[i][j-5]=B[i][j];
254 }
255 }
256
257 /*Here, we are computing the strain rate of (0,0,vz)*/
[8303]258 for(i=0;i<numnodes;i++){
[5647]259 velocity[i][0]=0.0;
260 velocity[i][1]=0.0;
261 velocity[i][2]=this->values[i];
262 }
263
264 /*Multiply B by velocity, to get strain rate: */
[8303]265 MatrixMultiply(&B_reduced[0][0],6,DOFVELOCITY*numnodes,0,&velocity[0][0],DOFVELOCITY*numnodes,1,0,epsilonvz,0);
[5647]266
267}
268/*}}}*/
[12365]269/*FUNCTION PentaP1Input::GetVxStrainRate3dPattyn{{{*/
[12550]270void PentaP1Input::GetVxStrainRate3dPattyn(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){
[5647]271
272 int i;
[8303]273 const int numnodes=6;
[12530]274 IssmDouble B[5][NDOF2*numnodes];
275 IssmDouble velocity[numnodes][NDOF2];
[5647]276
277 /*Get B matrix: */
278 GetBPattyn(&B[0][0], xyz_list, gauss);
279
280 /*Here, we are computing the strain rate of (vx,0)*/
[8303]281 for(i=0;i<numnodes;i++){
[5647]282 velocity[i][0]=this->values[i];
283 velocity[i][1]=0.0;
284 }
285
286 /*Multiply B by velocity, to get strain rate: */
[8303]287 MatrixMultiply( &B[0][0],5,NDOF2*numnodes,0,
288 &velocity[0][0],NDOF2*numnodes,1,0,
[5647]289 epsilonvx,0);
290
291}
292/*}}}*/
[12365]293/*FUNCTION PentaP1Input::GetVyStrainRate3dPattyn{{{*/
[12550]294void PentaP1Input::GetVyStrainRate3dPattyn(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){
[5647]295
296 int i;
[8303]297 const int numnodes=6;
[12530]298 IssmDouble B[5][NDOF2*numnodes];
299 IssmDouble velocity[numnodes][NDOF2];
[5647]300
301 /*Get B matrix: */
302 GetBPattyn(&B[0][0], xyz_list, gauss);
303
304 /*Here, we are computing the strain rate of (0,vy)*/
[8303]305 for(i=0;i<numnodes;i++){
[5647]306 velocity[i][0]=0.0;
307 velocity[i][1]=this->values[i];
308 }
309
310 /*Multiply B by velocity, to get strain rate: */
[8303]311 MatrixMultiply( &B[0][0],5,NDOF2*numnodes,0,
312 &velocity[0][0],NDOF2*numnodes,1,0,
[5647]313 epsilonvy,0);
314
315}
316/*}}}*/
[12365]317/*FUNCTION PentaP1Input::ChangeEnum{{{*/
[11291]318void PentaP1Input::ChangeEnum(int newenumtype){
[3732]319 this->enum_type=newenumtype;
320}
321/*}}}*/
[12365]322/*FUNCTION PentaP1Input::GetInputAverage{{{*/
[12530]323void PentaP1Input::GetInputAverage(IssmDouble* pvalue){
[3830]324 *pvalue=1./6.*(values[0]+values[1]+values[2]+values[3]+values[4]+values[5]);
325}
326/*}}}*/
[3840]327
328/*Intermediary*/
[12365]329/*FUNCTION PentaP1Input::SquareMin{{{*/
[15130]330void PentaP1Input::SquareMin(IssmDouble* psquaremin,Parameters* parameters){
[4042]331
332 int i;
333 const int numnodes=6;
[12530]334 IssmDouble valuescopy[numnodes];
335 IssmDouble squaremin;
[4042]336
337 /*First, copy values, to process units if requested: */
338 for(i=0;i<numnodes;i++)valuescopy[i]=this->values[i];
339
340 /*Now, figure out minimum of valuescopy: */
341 squaremin=pow(valuescopy[0],2);
342 for(i=1;i<numnodes;i++){
343 if(pow(valuescopy[i],2)<squaremin)squaremin=pow(valuescopy[i],2);
344 }
345 /*Assign output pointers:*/
346 *psquaremin=squaremin;
347}
348/*}}}*/
[12365]349/*FUNCTION PentaP1Input::ConstrainMin{{{*/
[12530]350void PentaP1Input::ConstrainMin(IssmDouble minimum){
[13622]351
[5017]352 int i;
[8303]353 const int numnodes=6;
[5017]354
[8303]355 for(i=0;i<numnodes;i++) if (values[i]<minimum) values[i]=minimum;
[5017]356}
357/*}}}*/
[12365]358/*FUNCTION PentaP1Input::InfinityNorm{{{*/
[12530]359IssmDouble PentaP1Input::InfinityNorm(void){
[5513]360
361 /*Output*/
[8303]362 const int numnodes=6;
[12530]363 IssmDouble norm=0;
[5513]364
[8303]365 for(int i=0;i<numnodes;i++) if(fabs(values[i])>norm) norm=fabs(values[i]);
[5513]366 return norm;
367}
368/*}}}*/
[12365]369/*FUNCTION PentaP1Input::Max{{{*/
[12530]370IssmDouble PentaP1Input::Max(void){
[5659]371
[8303]372 const int numnodes=6;
[12530]373 IssmDouble max=values[0];
[5659]374
[8303]375 for(int i=1;i<numnodes;i++){
[5659]376 if(values[i]>max) max=values[i];
377 }
378 return max;
379}
380/*}}}*/
[12365]381/*FUNCTION PentaP1Input::MaxAbs{{{*/
[12530]382IssmDouble PentaP1Input::MaxAbs(void){
[5659]383
[8303]384 const int numnodes=6;
[12530]385 IssmDouble max=fabs(values[0]);
[5659]386
[8303]387 for(int i=1;i<numnodes;i++){
[5659]388 if(fabs(values[i])>max) max=fabs(values[i]);
389 }
390 return max;
391}
392/*}}}*/
[12365]393/*FUNCTION PentaP1Input::Min{{{*/
[12530]394IssmDouble PentaP1Input::Min(void){
[5659]395
[8303]396 const int numnodes=6;
[12530]397 IssmDouble min=values[0];
[5659]398
[8303]399 for(int i=1;i<numnodes;i++){
[5659]400 if(values[i]<min) min=values[i];
401 }
402 return min;
403}
404/*}}}*/
[12365]405/*FUNCTION PentaP1Input::MinAbs{{{*/
[12530]406IssmDouble PentaP1Input::MinAbs(void){
[5659]407
[8303]408 const int numnodes=6;
[12530]409 IssmDouble min=fabs(values[0]);
[5659]410
[8303]411 for(int i=1;i<numnodes;i++){
[5659]412 if(fabs(values[i])<min) min=fabs(values[i]);
413 }
414 return min;
415}
416/*}}}*/
[12365]417/*FUNCTION PentaP1Input::Scale{{{*/
[12530]418void PentaP1Input::Scale(IssmDouble scale_factor){
[13622]419
[4047]420 int i;
[8303]421 const int numnodes=6;
[4047]422
[8303]423 for(i=0;i<numnodes;i++)values[i]=values[i]*scale_factor;
[4047]424}
425/*}}}*/
[12365]426/*FUNCTION PentaP1Input::AXPY{{{*/
[12530]427void PentaP1Input::AXPY(Input* xinput,IssmDouble scalar){
[4048]428
429 int i;
[8303]430 const int numnodes=6;
[4048]431
432 /*xinput is of the same type, so cast it: */
433
[4174]434 /*Carry out the AXPY operation depending on type:*/
[9883]435 switch(xinput->ObjectEnum()){
[4048]436
[11291]437 case PentaP1InputEnum:{
438 PentaP1Input* cast_input=(PentaP1Input*)xinput;
[8303]439 for(i=0;i<numnodes;i++)this->values[i]=this->values[i]+scalar*(cast_input->values[i]);}
[4174]440 return;
[6200]441 case ControlInputEnum:{
442 ControlInput* cont_input=(ControlInput*)xinput;
[13056]443 if(cont_input->values->ObjectEnum()!=PentaP1InputEnum) _error_("not supported yet");
[11291]444 PentaP1Input* cast_input=(PentaP1Input*)cont_input->values;
[8303]445 for(i=0;i<numnodes;i++)this->values[i]=this->values[i]+scalar*(cast_input->values[i]);}
[6200]446 return;
[4174]447 default:
[13056]448 _error_("not implemented yet");
[4174]449 }
450
[4048]451}
452/*}}}*/
[12365]453/*FUNCTION PentaP1Input::Constrain{{{*/
[12530]454void PentaP1Input::Constrain(IssmDouble cm_min, IssmDouble cm_max){
[4048]455
456 int i;
[8303]457 const int numnodes=6;
[13622]458
[12529]459 if(!xIsNan<IssmDouble>(cm_min)) for(i=0;i<numnodes;i++)if (this->values[i]<cm_min)this->values[i]=cm_min;
460 if(!xIsNan<IssmDouble>(cm_max)) for(i=0;i<numnodes;i++)if (this->values[i]>cm_max)this->values[i]=cm_max;
[4048]461
462}
463/*}}}*/
[12365]464/*FUNCTION PentaP1Input::Extrude{{{*/
[11291]465void PentaP1Input::Extrude(void){
[4274]466
467 int i;
468
469 /*First 3 values copied on 3 last values*/
470 for(i=0;i<3;i++) this->values[3+i]=this->values[i];
471}
472/*}}}*/
[12365]473/*FUNCTION PentaP1Input::VerticallyIntegrate{{{*/
[11291]474void PentaP1Input::VerticallyIntegrate(Input* thickness_input){
[4471]475
[15082]476 IssmDouble thickness;
[4471]477
478 /*Check that input provided is a thickness*/
[13056]479 if (thickness_input->InstanceEnum()!=ThicknessEnum) _error_("Input provided is not a Thickness (enum_type is " << EnumToStringx(thickness_input->InstanceEnum()) << ")");
[4471]480
481 /*vertically integrate depending on type:*/
[9883]482 switch(thickness_input->ObjectEnum()){
[4471]483
[15082]484 case PentaP1InputEnum:{
485 GaussPenta *gauss=new GaussPenta();
486 for(int iv=0;iv<3;iv++){
487 gauss->GaussVertex(iv);
488 thickness_input->GetInputValue(&thickness,gauss);
489 this->values[iv]=0.5*(this->values[iv]+this->values[iv+3]) * thickness;
490 this->values[iv+3]=this->values[iv];
[4471]491 }
[15082]492 delete gauss;
493 return; }
[4471]494
495 default:
[13056]496 _error_("not implemented yet");
[4471]497 }
498}
499/*}}}*/
[12365]500/*FUNCTION PentaP1Input::PointwiseDivide{{{*/
[11291]501Input* PentaP1Input::PointwiseDivide(Input* inputB){
[4471]502
503 /*Ouput*/
[11291]504 PentaP1Input* outinput=NULL;
[4471]505
506 /*Intermediaries*/
[13761]507 PentaP1Input *xinputB = NULL;
508 const int numnodes = 6;
509 IssmDouble AdotBvalues[numnodes];
[4471]510
511 /*Check that inputB is of the same type*/
[13056]512 if (inputB->ObjectEnum()!=PentaP1InputEnum) _error_("Operation not permitted because inputB is of type " << EnumToStringx(inputB->ObjectEnum()));
[11291]513 xinputB=(PentaP1Input*)inputB;
[4471]514
515 /*Create point wise sum*/
[13761]516 for(int i=0;i<numnodes;i++){
[6412]517 _assert_(xinputB->values[i]!=0);
[4471]518 AdotBvalues[i]=this->values[i]/xinputB->values[i];
519 }
520
[4899]521 /*Create new Penta vertex input (copy of current input)*/
[11291]522 outinput=new PentaP1Input(this->enum_type,&AdotBvalues[0]);
[4471]523
524 /*Return output pointer*/
525 return outinput;
526
527}
528/*}}}*/
[12365]529/*FUNCTION PentaP1Input::PointwiseMin{{{*/
[11291]530Input* PentaP1Input::PointwiseMin(Input* inputB){
[8129]531
532 /*Ouput*/
[11291]533 PentaP1Input* outinput=NULL;
[8129]534
535 /*Intermediaries*/
536 int i;
[11291]537 PentaP1Input *xinputB = NULL;
[8303]538 const int numnodes = 6;
[12530]539 IssmDouble minvalues[numnodes];
[8129]540
541 /*Check that inputB is of the same type*/
[13056]542 if (inputB->ObjectEnum()!=PentaP1InputEnum) _error_("Operation not permitted because inputB is of type " << EnumToStringx(inputB->ObjectEnum()));
[11291]543 xinputB=(PentaP1Input*)inputB;
[8129]544
545 /*Create point wise min*/
[8303]546 for(i=0;i<numnodes;i++){
[8129]547 if(this->values[i] > xinputB->values[i]) minvalues[i]=xinputB->values[i];
548 else minvalues[i]=this->values[i];
549 }
550
551 /*Create new Penta vertex input (copy of current input)*/
[11291]552 outinput=new PentaP1Input(this->enum_type,&minvalues[0]);
[8129]553
554 /*Return output pointer*/
555 return outinput;
556
557}
558/*}}}*/
[12365]559/*FUNCTION PentaP1Input::PointwiseMax{{{*/
[11291]560Input* PentaP1Input::PointwiseMax(Input* inputB){
[8129]561
562 /*Ouput*/
[11291]563 PentaP1Input* outinput=NULL;
[8129]564
565 /*Intermediaries*/
566 int i;
[11291]567 PentaP1Input *xinputB = NULL;
[8303]568 const int numnodes = 6;
[12530]569 IssmDouble maxvalues[numnodes];
[8129]570
571 /*Check that inputB is of the same type*/
[13056]572 if (inputB->ObjectEnum()!=PentaP1InputEnum) _error_("Operation not permitted because inputB is of type " << EnumToStringx(inputB->ObjectEnum()));
[11291]573 xinputB=(PentaP1Input*)inputB;
[8129]574
575 /*Create point wise max*/
[8303]576 for(i=0;i<numnodes;i++){
[8129]577 if(this->values[i] < xinputB->values[i]) maxvalues[i]=xinputB->values[i];
578 else maxvalues[i]=this->values[i];
579 }
580
581 /*Create new Penta vertex input (copy of current input)*/
[11291]582 outinput=new PentaP1Input(this->enum_type,&maxvalues[0]);
[8129]583
584 /*Return output pointer*/
585 return outinput;
586
587}
588/*}}}*/
[12365]589/*FUNCTION PentaP1Input::GetVectorFromInputs{{{*/
[13216]590void PentaP1Input::GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist){
[4048]591
592 const int numvertices=6;
[11695]593 vector->SetValues(numvertices,doflist,this->values,INS_VAL);
[4048]594
[4502]595} /*}}}*/
[12365]596/*FUNCTION PentaP1Input::Configure{{{*/
[11291]597void PentaP1Input::Configure(Parameters* parameters){
[8363]598 /*do nothing: */
599}
600/*}}}*/
Note: See TracBrowser for help on using the repository browser.