Changeset 15313
- Timestamp:
- 06/22/13 08:54:37 (12 years ago)
- Location:
- issm/trunk-jpl/src/c/classes/Elements
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified issm/trunk-jpl/src/c/classes/Elements/Penta.cpp ¶
r15306 r15313 6060 6060 6061 6061 GetTriaJacobianDeterminant(&Jdet2d, &xyz_list_tria[0][0],gauss); 6062 Get L(&L[0][0], gauss,NDOF2);6062 GetBPattynFriction(&L[0][0],gauss); 6063 6063 6064 6064 DL_scalar=alpha2*gauss->weight*Jdet2d; … … 6873 6873 6874 6874 GetTriaJacobianDeterminant(&Jdet, &xyz_list_tria[0][0],gauss); 6875 Get L(&L[0][0], gauss,NDOF2);6875 GetBPattynFriction(&L[0][0],gauss); 6876 6876 6877 6877 friction->GetAlpha2(&alpha2, gauss,VxEnum,VyEnum,VzEnum); -
TabularUnified issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp ¶
r15298 r15313 488 488 } 489 489 /*}}}*/ 490 /*FUNCTION PentaRef::Get L{{{*/491 void PentaRef::Get L(IssmDouble* L, GaussPenta* gauss, int numdof){492 /*Compute L matrix. L=[L1 L2 L3] where Li is square and of size numdof.493 ** For node i, Li can be expressed in the actual coordinate system490 /*FUNCTION PentaRef::GetBPattynFriction{{{*/ 491 void PentaRef::GetBPattynFriction(IssmDouble* B, GaussPenta* gauss){ 492 /*Compute B matrix. B=[B1 B2 B3] where Bi is square and of size 2x2. 493 ** For node i, Bi can be expressed in the actual coordinate system 494 494 ** by: 495 ** numdof=1: 496 ** Li=h; 497 ** numdof=2: 498 ** Li=[ h 0 ] 499 ** [ 0 h ] 500 ** where h is the interpolation function for node i. 495 ** Bi=[ N 0 ] 496 ** [ 0 N ] 497 ** where N is the interpolation function for node i. 501 498 ** 502 ** We assume L has been allocated already, of size: NUMNODESP1 (numdof=1), or numdofx(numdof*NUMNODESP1) (numdof=2)499 ** We assume B has been allocated already, of size: 2 (2 x numnodes) 503 500 **/ 504 501 505 int i; 506 IssmDouble l1l6[6]; 502 IssmDouble basis[6]; 507 503 508 504 /*Get l1l6 in actual coordinate system: */ 509 GetNodalFunctionsP1(l1l6,gauss); 510 511 /*Build L: */ 512 if(numdof==1){ 513 for (i=0;i<NUMNODESP1;i++){ 514 L[i]=l1l6[i]; 515 } 516 } 517 else{ 518 for (i=0;i<NUMNODESP1;i++){ 519 *(L+numdof*NUMNODESP1*0+numdof*i)=l1l6[i]; 520 *(L+numdof*NUMNODESP1*0+numdof*i+1)=0; 521 *(L+numdof*NUMNODESP1*1+numdof*i)=0; 522 *(L+numdof*NUMNODESP1*1+numdof*i+1)=l1l6[i]; 523 } 505 GetNodalFunctionsP1(&basis[0],gauss); 506 507 for(int i=0;i<NUMNODESP1;i++){ 508 B[2*NUMNODESP1*0+2*i+0]=basis[i]; 509 B[2*NUMNODESP1*0+2*i+1]=0.; 510 B[2*NUMNODESP1*1+2*i+0]=0.; 511 B[2*NUMNODESP1*1+2*i+1]=basis[i]; 524 512 } 525 513 } -
TabularUnified issm/trunk-jpl/src/c/classes/Elements/PentaRef.h ¶
r15298 r15313 47 47 void GetBVert(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss); 48 48 void GetBprimeAdvec(IssmDouble* Bprime_advec, IssmDouble* xyz_list, GaussPenta* gauss); 49 void Get L(IssmDouble* L, GaussPenta* gauss,int numdof);49 void GetBPattynFriction(IssmDouble* L, GaussPenta* gauss); 50 50 void GetLStokes(IssmDouble* LStokes, GaussPenta* gauss); 51 51 void GetLprimeStokes(IssmDouble* LprimeStokes, IssmDouble* xyz_list, GaussPenta* gauss); -
TabularUnified issm/trunk-jpl/src/c/classes/Elements/Tria.cpp ¶
r15305 r15313 292 292 IssmDouble Jdet,D_scalar; 293 293 IssmDouble xyz_list[NUMVERTICES][3]; 294 IssmDouble L[3];294 IssmDouble basis[3]; 295 295 GaussTria *gauss=NULL; 296 296 … … 309 309 gauss->GaussPoint(ig); 310 310 311 Get L(&L[0], &xyz_list[0][0], gauss,NDOF1);311 GetNodalFunctions(&basis[0],gauss); 312 312 GetJacobianDeterminant(&Jdet, &xyz_list[0][0], gauss); 313 313 314 314 D_scalar=latentheat/heatcapacity*gauss->weight*Jdet; 315 315 316 TripleMultiply(& L[0],numdof,1,0,316 TripleMultiply(&basis[0],numdof,1,0, 317 317 &D_scalar,1,1,0, 318 & L[0],1,numdof,0,318 &basis[0],1,numdof,0, 319 319 &Ke->values[0],1); 320 320 } … … 353 353 IssmDouble v_gauss[2]={0.0}; 354 354 IssmDouble xyz_list[NUMVERTICES][3]; 355 IssmDouble L[NUMVERTICES];355 IssmDouble basis[NUMVERTICES]; 356 356 IssmDouble B[2][NUMVERTICES]; 357 357 IssmDouble Bprime[2][NUMVERTICES]; … … 388 388 389 389 GetJacobianDeterminant(&Jdettria, &xyz_list[0][0],gauss); 390 Get L(&L[0], &xyz_list[0][0], gauss,NDOF1);390 GetNodalFunctions(&basis[0],gauss); 391 391 392 392 vxaverage_input->GetInputValue(&vx,gauss); … … 397 397 DL_scalar=gauss->weight*Jdettria; 398 398 399 TripleMultiply( &L[0],1,numdof,1,399 TripleMultiply(&basis[0],1,numdof,1, 400 400 &DL_scalar,1,1,0, 401 & L[0],1,numdof,0,401 &basis[0],1,numdof,0, 402 402 &Ke->values[0],1); 403 403 … … 468 468 IssmDouble xyz_list[NUMVERTICES][3]; 469 469 IssmDouble Jdettria,dt,vx,vy; 470 IssmDouble L[NUMVERTICES];470 IssmDouble basis[NUMVERTICES]; 471 471 IssmDouble B[2][NUMVERTICES]; 472 472 IssmDouble Bprime[2][NUMVERTICES]; … … 504 504 505 505 GetJacobianDeterminant(&Jdettria, &xyz_list[0][0],gauss); 506 Get L(&L[0], &xyz_list[0][0], gauss,NDOF1);506 GetNodalFunctions(&basis[0],gauss); 507 507 508 508 DL_scalar=gauss->weight*Jdettria; 509 509 510 TripleMultiply( &L[0],1,numdof,1,510 TripleMultiply(&basis[0],1,numdof,1, 511 511 &DL_scalar,1,1,0, 512 & L[0],1,numdof,0,512 &basis[0],1,numdof,0, 513 513 &Ke->values[0],1); 514 514 … … 542 542 IssmDouble D,Jdet; 543 543 IssmDouble xyz_list[NUMVERTICES][3]; 544 IssmDouble L[1][numdof];544 IssmDouble basis[numdof]; 545 545 GaussTria *gauss = NULL; 546 546 … … 556 556 gauss->GaussPoint(ig); 557 557 558 GetNodalFunctions(&basis[0],gauss); 558 559 GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss); 559 560 D=gauss->weight*Jdet; 560 561 561 GetL(&L[0][0], &xyz_list[0][0], gauss,NDOF1); 562 563 TripleMultiply(&L[0][0],1,3,1, 562 TripleMultiply(&basis[0],1,3,1, 564 563 &D,1,1,0, 565 & L[0][0],1,3,0,564 &basis[0],1,3,0, 566 565 &Ke->values[0],1); 567 566 } … … 668 667 IssmDouble surface_mass_balance_g,basal_melting_g,basal_melting_correction_g,thickness_g; 669 668 IssmDouble xyz_list[NUMVERTICES][3]; 670 IssmDouble L[NUMVERTICES];669 IssmDouble basis[NUMVERTICES]; 671 670 GaussTria* gauss=NULL; 672 671 … … 690 689 691 690 GetJacobianDeterminant(&Jdettria, &xyz_list[0][0],gauss); 692 Get L(&L[0], &xyz_list[0][0], gauss,NDOF1);691 GetNodalFunctions(&basis[0],gauss); 693 692 694 693 surface_mass_balance_input->GetInputValue(&surface_mass_balance_g,gauss); … … 700 699 basal_melting_correction_g=0.; 701 700 702 for(int i=0;i<numdof;i++) pe->values[i]+=Jdettria*gauss->weight*(thickness_g+dt*(surface_mass_balance_g-basal_melting_g-basal_melting_correction_g))* L[i];701 for(int i=0;i<numdof;i++) pe->values[i]+=Jdettria*gauss->weight*(thickness_g+dt*(surface_mass_balance_g-basal_melting_g-basal_melting_correction_g))*basis[i]; 703 702 } 704 703 … … 718 717 IssmDouble surface_mass_balance_g,basal_melting_g,thickness_g; 719 718 IssmDouble xyz_list[NUMVERTICES][3]; 720 IssmDouble L[NUMVERTICES];719 IssmDouble basis[NUMVERTICES]; 721 720 GaussTria* gauss=NULL; 722 721 … … 738 737 739 738 GetJacobianDeterminant(&Jdettria, &xyz_list[0][0],gauss); 740 Get L(&L[0], &xyz_list[0][0], gauss,NDOF1);739 GetNodalFunctions(&basis[0],gauss); 741 740 742 741 surface_mass_balance_input->GetInputValue(&surface_mass_balance_g,gauss); … … 744 743 thickness_input->GetInputValue(&thickness_g,gauss); 745 744 746 for(int i=0;i<numdof;i++) pe->values[i]+=Jdettria*gauss->weight*(thickness_g+dt*(surface_mass_balance_g-basal_melting_g))* L[i];745 for(int i=0;i<numdof;i++) pe->values[i]+=Jdettria*gauss->weight*(thickness_g+dt*(surface_mass_balance_g-basal_melting_g))*basis[i]; 747 746 } 748 747 … … 3401 3400 } 3402 3401 3403 Get L(&B[0], &xyz_list[0][0], gauss,NDOF2);3402 GetBMacAyealFriction(&B[0], &xyz_list[0][0], gauss); 3404 3403 GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss); 3405 3404 D_scalar=alpha2*gauss->weight*Jdet; … … 5947 5946 IssmDouble v_gauss[2]={0.0}; 5948 5947 IssmDouble xyz_list[NUMVERTICES][3]; 5949 IssmDouble L[NUMVERTICES];5948 IssmDouble basis[NUMVERTICES]; 5950 5949 IssmDouble B[2][NUMVERTICES]; 5951 5950 IssmDouble Bprime[2][NUMVERTICES]; … … 5980 5979 5981 5980 GetJacobianDeterminant(&Jdettria, &xyz_list[0][0],gauss); 5982 Get L(&L[0], &xyz_list[0][0], gauss,NDOF1);5981 GetNodalFunctions(&basis[0],gauss); 5983 5982 5984 5983 vx_input->GetInputValue(&vx,gauss); … … 5989 5988 DL_scalar=gauss->weight*Jdettria; 5990 5989 5991 TripleMultiply( &L[0],1,numdof,1,5990 TripleMultiply(&basis[0],1,numdof,1, 5992 5991 &DL_scalar,1,1,0, 5993 & L[0],1,numdof,0,5992 &basis[0],1,numdof,0, 5994 5993 &Ke->values[0],1); 5995 5994 … … 6050 6049 IssmDouble xyz_list[NUMVERTICES][3]; 6051 6050 IssmDouble B[2][numdof]; 6052 IssmDouble L[NUMVERTICES];6051 IssmDouble basis[NUMVERTICES]; 6053 6052 IssmDouble D[2][2]; 6054 6053 GaussTria *gauss = NULL; … … 6078 6077 GetBHydro(&B[0][0],&xyz_list[0][0],gauss); 6079 6078 TripleMultiply(&B[0][0],2,numdof,1, 6080 6081 6082 6079 &D[0][0],2,2,0, 6080 &B[0][0],2,numdof,0, 6081 &Ke->values[0],1); 6083 6082 6084 6083 /*Transient*/ 6085 6084 if(reCast<bool,IssmDouble>(dt)){ 6086 Get L(&L[0], &xyz_list[0][0], gauss,NDOF1);6085 GetNodalFunctions(&basis[0],gauss); 6087 6086 D_scalar=sediment_storing*gauss->weight*Jdet; 6088 6087 6089 TripleMultiply(& L[0],numdof,1,0,6090 6091 &L[0],1,numdof,0,6092 6088 TripleMultiply(&basis[0],numdof,1,0, 6089 &D_scalar,1,1,0, 6090 &basis[0],1,numdof,0, 6091 &Ke->values[0],1); 6093 6092 } 6094 6093 } … … 6110 6109 IssmDouble xyz_list[NUMVERTICES][3]; 6111 6110 IssmDouble B[2][numdof]; 6112 IssmDouble L[NUMVERTICES];6111 IssmDouble basis[NUMVERTICES]; 6113 6112 IssmDouble D[2][2]; 6114 6113 GaussTria *gauss = NULL; … … 6149 6148 /*Transient*/ 6150 6149 if(reCast<bool,IssmDouble>(dt)){ 6151 Get L(&L[0], &xyz_list[0][0], gauss,NDOF1);6150 GetNodalFunctions(&basis[0],gauss); 6152 6151 D_scalar=epl_storing*gauss->weight*Jdet; 6153 6152 6154 TripleMultiply(& L[0],numdof,1,0,6155 6156 &L[0],1,numdof,0,6157 6153 TripleMultiply(&basis[0],numdof,1,0, 6154 &D_scalar,1,1,0, 6155 &basis[0],1,numdof,0, 6156 &Ke->values[0],1); 6158 6157 } 6159 6158 } … … 7058 7057 IssmDouble xyz_list[NUMVERTICES][3]; 7059 7058 IssmDouble dhdt_g,basal_melting_g,surface_mass_balance_g,Jdettria; 7060 IssmDouble L[NUMVERTICES];7059 IssmDouble basis[NUMVERTICES]; 7061 7060 GaussTria* gauss=NULL; 7062 7061 … … 7081 7080 7082 7081 GetJacobianDeterminant(&Jdettria, &xyz_list[0][0],gauss); 7083 Get L(&L[0], &xyz_list[0][0], gauss,NDOF1);7084 7085 for(i=0;i<numdof;i++) pe->values[i]+=Jdettria*gauss->weight*(surface_mass_balance_g-basal_melting_g-dhdt_g)* L[i];7082 GetNodalFunctions(&basis[0],gauss); 7083 7084 for(i=0;i<numdof;i++) pe->values[i]+=Jdettria*gauss->weight*(surface_mass_balance_g-basal_melting_g-dhdt_g)*basis[i]; 7086 7085 } 7087 7086 … … 7101 7100 IssmDouble xyz_list[NUMVERTICES][3]; 7102 7101 IssmDouble basal_melting_g,surface_mass_balance_g,dhdt_g,Jdettria; 7103 IssmDouble L[NUMVERTICES];7102 IssmDouble basis[NUMVERTICES]; 7104 7103 GaussTria* gauss=NULL; 7105 7104 … … 7124 7123 7125 7124 GetJacobianDeterminant(&Jdettria, &xyz_list[0][0],gauss); 7126 Get L(&L[0], &xyz_list[0][0], gauss,NDOF1);7127 7128 for(i=0;i<numdof;i++) pe->values[i]+=Jdettria*gauss->weight*(surface_mass_balance_g-basal_melting_g-dhdt_g)* L[i];7125 GetNodalFunctions(&basis[0],gauss); 7126 7127 for(i=0;i<numdof;i++) pe->values[i]+=Jdettria*gauss->weight*(surface_mass_balance_g-basal_melting_g-dhdt_g)*basis[i]; 7129 7128 } 7130 7129 -
TabularUnified issm/trunk-jpl/src/c/classes/Elements/TriaRef.cpp ¶
r15312 r15313 298 298 /*}}}*/ 299 299 /*FUNCTION TriaRef::GetL{{{*/ 300 void TriaRef::GetL(IssmDouble* L, IssmDouble* xyz_list,GaussTria* gauss,int numdof){ 301 /*Compute L matrix. L=[L1 L2 L3] where Li is square and of size numdof. 302 * For node i, Li can be expressed in the actual coordinate system 303 * by: 304 * numdof=1: 305 * Li=h; 306 * numdof=2: 307 * Li=[ h 0 ] 308 * [ 0 h ] 309 * where h is the interpolation function for node i. 310 * 311 * We assume L has been allocated already, of size: NUMNODESP1 (numdof=1), or numdofx(numdof*NUMNODESP1) (numdof=2) 300 void TriaRef::GetBMacAyealFriction(IssmDouble* B, IssmDouble* xyz_list,GaussTria* gauss){ 301 /*Compute B matrix. B=[B1 B2 B3] where Bi is square and of size 2. 302 * For node i, Bi can be expressed in the actual coordinate system 303 * by: 304 * Bi=[ N 0 ] 305 * [ 0 N ] 306 * where N is the interpolation function for node i. 307 * 308 * We assume B has been allocated already, of size: 2 x (numdof*NUMNODESP1) 312 309 */ 313 310 … … 319 316 320 317 /*Build L: */ 321 if(numdof==1){ 322 for (i=0;i<NUMNODESP1;i++){ 323 L[i]=basis[i]; 324 } 325 } 326 else{ 327 for (i=0;i<NUMNODESP1;i++){ 328 *(L+numdof*NUMNODESP1*0+numdof*i)=basis[i]; //L[0][NDOF2*i]=dbasis[0][i]; 329 *(L+numdof*NUMNODESP1*0+numdof*i+1)=0; 330 *(L+numdof*NUMNODESP1*1+numdof*i)=0; 331 *(L+numdof*NUMNODESP1*1+numdof*i+1)=basis[i]; 332 } 318 for (i=0;i<NUMNODESP1;i++){ 319 *(B+2*NUMNODESP1*0+2*i)=basis[i]; //L[0][NDOF2*i]=dbasis[0][i]; 320 *(B+2*NUMNODESP1*0+2*i+1)=0; 321 *(B+2*NUMNODESP1*1+2*i)=0; 322 *(B+2*NUMNODESP1*1+2*i+1)=basis[i]; 333 323 } 334 324 } -
TabularUnified issm/trunk-jpl/src/c/classes/Elements/TriaRef.h ¶
r15298 r15313 30 30 void GetBPrognostic(IssmDouble* B_prog, IssmDouble* xyz_list, GaussTria* gauss); 31 31 void GetBHydro(IssmDouble* B, IssmDouble* xyz_list, GaussTria* gauss); 32 void Get L(IssmDouble* L, IssmDouble* xyz_list,GaussTria* gauss,int numdof);32 void GetBMacAyealFriction(IssmDouble* L, IssmDouble* xyz_list,GaussTria* gauss); 33 33 void GetJacobian(IssmDouble* J, IssmDouble* xyz_list,GaussTria* gauss); 34 34 void GetSegmentJacobianDeterminant(IssmDouble* Jdet, IssmDouble* xyz_list,GaussTria* gauss);
Note:
See TracChangeset
for help on using the changeset viewer.