Changeset 22511
- Timestamp:
- 03/09/18 13:34:41 (7 years ago)
- Location:
- issm/trunk-jpl/src/c/analyses
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp
r22485 r22511 569 569 IssmDouble* basis = xNew<IssmDouble>(numnodes); 570 570 IssmDouble* dbasis = xNew<IssmDouble>(3*numnodes); 571 IssmDouble* B = xNew<IssmDouble>(3*numnodes);572 571 IssmDouble* Bprime = xNew<IssmDouble>(3*numnodes); 573 IssmDouble D[3][3] = {0.};574 572 IssmDouble K[3][3]; 575 573 … … 600 598 601 599 element->JacobianDeterminant(&Jdet,xyz_list,gauss); 600 element->NodalFunctions(basis,gauss); 601 element->NodalFunctionsDerivatives(dbasis,xyz_list,gauss); 602 602 603 D_scalar=gauss->weight*Jdet; 603 604 if(dt!=0.) D_scalar=D_scalar*dt; 604 605 605 606 /*Conduction: */ 606 GetBConduct(B,element,xyz_list,gauss); 607 D[0][0]=D_scalar*kappa/rho_ice; 608 D[1][1]=D_scalar*kappa/rho_ice; 609 D[2][2]=D_scalar*kappa/rho_ice; 610 TripleMultiply(B,3,numnodes,1, 611 &D[0][0],3,3,0, 612 B,3,numnodes,0, 613 &Ke->values[0],1); 607 for(int i=0;i<numnodes;i++){ 608 for(int j=0;j<numnodes;j++){ 609 Ke->values[i*numnodes+j] += D_scalar*kappa/rho_ice*( 610 dbasis[0*numnodes+j]*dbasis[0*numnodes+i] + dbasis[1*numnodes+j]*dbasis[1*numnodes+i] + dbasis[2*numnodes+j]*dbasis[2*numnodes+i] 611 ); 612 } 613 } 614 614 615 615 /*Advection: */ 616 GetBAdvec(B,element,xyz_list,gauss);617 GetBAdvecprime(Bprime,element,xyz_list,gauss);618 616 vx_input->GetInputValue(&u,gauss); vxm_input->GetInputValue(&um,gauss); vx=u-um; 619 617 vy_input->GetInputValue(&v,gauss); vym_input->GetInputValue(&vm,gauss); vy=v-vm; 620 618 vz_input->GetInputValue(&w,gauss); vzm_input->GetInputValue(&wm,gauss); vz=w-wm; 621 D[0][0]=D_scalar*vx;622 D[1][1]=D_scalar*vy;623 D[2][2]=D_scalar*vz;624 TripleMultiply(B,3,numnodes,1,625 &D[0][0],3,3,0,626 Bprime,3,numnodes,0,627 &Ke->values[0],1);619 for(int i=0;i<numnodes;i++){ 620 for(int j=0;j<numnodes;j++){ 621 Ke->values[i*numnodes+j] += D_scalar*( 622 vx*dbasis[0*numnodes+j]*basis[i] + vy*dbasis[1*numnodes+j]*basis[i] +vz*dbasis[2*numnodes+j]*basis[i] 623 ); 624 } 625 } 628 626 629 627 /*Transient: */ 630 628 if(dt!=0.){ 631 629 D_scalar=gauss->weight*Jdet; 632 element->NodalFunctions(basis,gauss);633 TripleMultiply(basis,numnodes,1,0,634 &D_scalar,1,1,0,635 basis,1,numnodes,0,636 &Ke->values[0],1);630 for(int i=0;i<numnodes;i++){ 631 for(int j=0;j<numnodes;j++){ 632 Ke->values[i*numnodes+j] += D_scalar*basis[j]*basis[i]; 633 } 634 } 637 635 D_scalar=D_scalar*dt; 638 636 } … … 678 676 xDelete<IssmDouble>(basis); 679 677 xDelete<IssmDouble>(dbasis); 680 xDelete<IssmDouble>(B);681 678 xDelete<IssmDouble>(Bprime); 682 679 delete gauss; -
issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp
r22506 r22511 242 242 243 243 /*Intermediaries*/ 244 IssmDouble D,Jdet;244 IssmDouble Jdet; 245 245 IssmDouble *xyz_list = NULL; 246 246 … … 250 250 /*Initialize Element matrix and vectors*/ 251 251 ElementMatrix* Ke = element->NewElementMatrix(NoneApproximationEnum); 252 IssmDouble* B= xNew<IssmDouble>(numnodes);253 IssmDouble* Bprime = xNew<IssmDouble>(numnodes);252 IssmDouble* basis = xNew<IssmDouble>(numnodes); 253 IssmDouble* dbasis = xNew<IssmDouble>(3*numnodes); 254 254 255 255 /*Retrieve all inputs and parameters*/ … … 262 262 263 263 element->JacobianDeterminant(&Jdet,xyz_list,gauss); 264 this->GetB(B,element,xyz_list,gauss); 265 this->GetBprime(Bprime,element,xyz_list,gauss); 266 D=gauss->weight*Jdet; 267 268 TripleMultiply(B,1,numnodes,1, 269 &D,1,1,0, 270 Bprime,1,numnodes,0, 271 &Ke->values[0],1); 264 element->NodalFunctions(basis,gauss); 265 element->NodalFunctionsDerivatives(dbasis,xyz_list,gauss); 266 267 for(int i=0;i<numnodes;i++){ 268 for(int j=0;j<numnodes;j++){ 269 Ke->values[i*numnodes+j] += gauss->weight*Jdet*( 270 basis[j]*dbasis[2*numnodes+i] 271 ); 272 } 273 } 272 274 } 273 275 … … 275 277 delete gauss; 276 278 xDelete<IssmDouble>(xyz_list); 277 xDelete<IssmDouble>( Bprime);278 xDelete<IssmDouble>( B);279 xDelete<IssmDouble>(dbasis); 280 xDelete<IssmDouble>(basis); 279 281 return Ke; 280 282 -
issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp
r22485 r22511 368 368 int stabilization; 369 369 IssmDouble Jdet,dt,u,v,w,um,vm,wm,vel; 370 IssmDouble h,hx,hy,hz,vx,vy,vz ;370 IssmDouble h,hx,hy,hz,vx,vy,vz,D_scalar; 371 371 IssmDouble tau_parameter,diameter; 372 IssmDouble D_scalar;373 372 IssmDouble* xyz_list = NULL; 374 373 … … 380 379 IssmDouble* basis = xNew<IssmDouble>(numnodes); 381 380 IssmDouble* dbasis = xNew<IssmDouble>(3*numnodes); 382 IssmDouble* B = xNew<IssmDouble>(3*numnodes);383 381 IssmDouble* Bprime = xNew<IssmDouble>(3*numnodes); 384 IssmDouble D[3][3]={0.};385 382 IssmDouble K[3][3]; 386 383 … … 409 406 410 407 element->JacobianDeterminant(&Jdet,xyz_list,gauss); 408 element->NodalFunctions(basis,gauss); 409 element->NodalFunctionsDerivatives(dbasis,xyz_list,gauss); 410 411 411 D_scalar=gauss->weight*Jdet; 412 412 if(dt!=0.) D_scalar=D_scalar*dt; 413 413 414 414 /*Conduction: */ 415 GetBConduct(B,element,xyz_list,gauss); 416 D[0][0]=D_scalar*kappa; 417 D[1][1]=D_scalar*kappa; 418 D[2][2]=D_scalar*kappa; 419 TripleMultiply(B,3,numnodes,1, 420 &D[0][0],3,3,0, 421 B,3,numnodes,0, 422 &Ke->values[0],1); 415 for(int i=0;i<numnodes;i++){ 416 for(int j=0;j<numnodes;j++){ 417 Ke->values[i*numnodes+j] += D_scalar*kappa*( 418 dbasis[0*numnodes+j]*dbasis[0*numnodes+i] + dbasis[1*numnodes+j]*dbasis[1*numnodes+i] + dbasis[2*numnodes+j]*dbasis[2*numnodes+i] 419 ); 420 } 421 } 423 422 424 423 /*Advection: */ 425 GetBAdvec(B,element,xyz_list,gauss);426 GetBAdvecprime(Bprime,element,xyz_list,gauss);427 424 vx_input->GetInputValue(&u,gauss); vxm_input->GetInputValue(&um,gauss); vx=u-um; 428 425 vy_input->GetInputValue(&v,gauss); vym_input->GetInputValue(&vm,gauss); vy=v-vm; 429 426 vz_input->GetInputValue(&w,gauss); vzm_input->GetInputValue(&wm,gauss); vz=w-wm; 430 D[0][0]=D_scalar*vx;431 D[1][1]=D_scalar*vy;432 D[2][2]=D_scalar*vz;433 TripleMultiply(B,3,numnodes,1,434 &D[0][0],3,3,0,435 Bprime,3,numnodes,0,436 &Ke->values[0],1);427 for(int i=0;i<numnodes;i++){ 428 for(int j=0;j<numnodes;j++){ 429 Ke->values[i*numnodes+j] += D_scalar*( 430 vx*dbasis[0*numnodes+j]*basis[i] + vy*dbasis[1*numnodes+j]*basis[i] +vz*dbasis[2*numnodes+j]*basis[i] 431 ); 432 } 433 } 437 434 438 435 /*Transient: */ 439 436 if(dt!=0.){ 440 437 D_scalar=gauss->weight*Jdet; 441 element->NodalFunctions(basis,gauss);442 TripleMultiply(basis,numnodes,1,0,443 &D_scalar,1,1,0,444 basis,1,numnodes,0,445 &Ke->values[0],1);438 for(int i=0;i<numnodes;i++){ 439 for(int j=0;j<numnodes;j++){ 440 Ke->values[i*numnodes+j] += D_scalar*basis[j]*basis[i]; 441 } 442 } 446 443 D_scalar=D_scalar*dt; 447 444 } … … 456 453 K[2][0]=h/(2.*vel)*fabs(vz*vx); K[2][1]=h/(2.*vel)*fabs(vz*vy); K[2][2]=h/(2.*vel)*fabs(vz*vz); 457 454 for(int i=0;i<3;i++) for(int j=0;j<3;j++) K[i][j] = D_scalar*K[i][j]; 458 459 455 GetBAdvecprime(Bprime,element,xyz_list,gauss); 460 456 … … 486 482 /*Clean up and return*/ 487 483 xDelete<IssmDouble>(xyz_list); 488 xDelete<IssmDouble>(B);489 484 xDelete<IssmDouble>(Bprime); 490 485 xDelete<IssmDouble>(basis);
Note:
See TracChangeset
for help on using the changeset viewer.