Changeset 22523
- Timestamp:
- 03/11/18 14:38:34 (7 years ago)
- Location:
- issm/trunk-jpl/src/c/analyses
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp
r22492 r22523 156 156 /*Intermediaries */ 157 157 int stabilization,dim, domaintype, calvinglaw; 158 int i, 158 int i,j,k,row, col; 159 159 IssmDouble kappa; 160 160 IssmDouble Jdet, dt, D_scalar; 161 161 IssmDouble h,hx,hy,hz; 162 IssmDouble vel ;162 IssmDouble vel,v[3],w[3],c[3],m[3],dlsf[3]; 163 163 IssmDouble norm_dlsf, norm_calving, calvingrate, meltingrate, groundedice; 164 164 IssmDouble calvingmax, calvinghaf, heaviside, haf_eps; … … 184 184 ElementMatrix* Ke = basalelement->NewElementMatrix(); 185 185 IssmDouble* basis = xNew<IssmDouble>(numnodes); 186 IssmDouble* B = xNew<IssmDouble>(dim*numnodes); 187 IssmDouble* Bprime = xNew<IssmDouble>(dim*numnodes); 188 IssmDouble* D = xNew<IssmDouble>(dim*dim); 189 IssmDouble* v = xNew<IssmDouble>(dim); 190 IssmDouble* w = xNew<IssmDouble>(dim); 191 IssmDouble* c = xNewZeroInit<IssmDouble>(dim); 192 IssmDouble* m = xNewZeroInit<IssmDouble>(dim); 193 IssmDouble* dlsf = xNew<IssmDouble>(dim); 186 IssmDouble* dbasis = xNew<IssmDouble>(2*numnodes); 187 IssmDouble* Bprime = NULL; 188 if(stabilization==2){ 189 Bprime = xNew<IssmDouble>(dim*numnodes); 190 } 194 191 195 192 /*Retrieve all inputs and parameters*/ … … 283 280 284 281 basalelement->JacobianDeterminant(&Jdet,xyz_list,gauss); 282 basalelement->NodalFunctions(basis,gauss); 283 basalelement->NodalFunctionsDerivatives(dbasis,xyz_list,gauss); 285 284 D_scalar=gauss->weight*Jdet; 286 285 287 286 /* Transient */ 288 287 if(dt!=0.){ 289 basalelement->NodalFunctions(basis,gauss);290 TripleMultiply(basis,numnodes,1,0,291 &D_scalar,1,1,0,292 basis,1,numnodes,0,293 &Ke->values[0],1);294 D_scalar *=dt;288 for(i=0;i<numnodes;i++){ 289 for(j=0;j<numnodes;j++){ 290 Ke->values[i*numnodes+j] += D_scalar*basis[j]*basis[i]; 291 } 292 } 293 D_scalar=D_scalar*dt; 295 294 } 296 295 297 296 /* Advection */ 298 GetB(B,basalelement,xyz_list,gauss);299 GetBprime(Bprime,basalelement,xyz_list,gauss);300 297 vx_input->GetInputValue(&v[0],gauss); 301 298 vy_input->GetInputValue(&v[1],gauss); … … 458 455 459 456 /*Compute D*/ 460 for(row=0;row<dim;row++){ 461 for(col=0;col<dim;col++){ 462 if(row==col) 463 D[row*dim+col]=D_scalar*w[row]; 464 else 465 D[row*dim+col]=0.; 457 for(i=0;i<numnodes;i++){ 458 for(j=0;j<numnodes;j++){ 459 for(k=0;k<dim;k++){ 460 Ke->values[i*numnodes+j] += D_scalar*w[k]*dbasis[k*numnodes+j]*basis[i]; 461 } 466 462 } 467 463 } 468 469 TripleMultiply(B,dim,numnodes,1,470 D,dim,dim,0,471 Bprime,dim,numnodes,0,472 &Ke->values[0],1);473 464 474 465 /* Stabilization */ … … 485 476 h=sqrt( pow(hx*w[0]/vel,2) + pow(hy*w[1]/vel,2) ); 486 477 kappa=h*vel/2.; 487 for(row=0;row<dim;row++) 488 for(col=0;col<dim;col++) 489 if(row==col) 490 D[row*dim+col]=D_scalar*kappa; 491 else 492 D[row*dim+col]=0.; 493 494 TripleMultiply(Bprime,dim,numnodes,1, 495 D,dim,dim,0, 496 Bprime,dim,numnodes,0, 497 &Ke->values[0],1); 478 for(i=0;i<numnodes;i++){ 479 for(j=0;j<numnodes;j++){ 480 for(k=0;k<dim;k++){ 481 Ke->values[i*numnodes+j] += D_scalar*kappa*dbasis[k*numnodes+j]*dbasis[k*numnodes+i]; 482 } 483 } 484 } 498 485 break; 499 486 case 2: … … 501 488 basalelement->ElementSizes(&hx,&hy,&hz); 502 489 h=sqrt( pow(hx*w[0]/vel,2) + pow(hy*w[1]/vel,2) ); 490 IssmDouble D[3*3]; 503 491 for(row=0;row<dim;row++) 504 492 for(col=0;col<dim;col++) 505 493 D[row*dim+col] = D_scalar*h/(2.*vel)*w[row]*w[col]; 494 GetBprime(Bprime,basalelement,xyz_list,gauss); 506 495 507 496 TripleMultiply(Bprime,dim,numnodes,1, 508 D,dim,dim,0,497 &D[0],dim,dim,0, 509 498 Bprime,dim,numnodes,0, 510 499 &Ke->values[0],1); … … 518 507 xDelete<IssmDouble>(xyz_list); 519 508 xDelete<IssmDouble>(basis); 520 xDelete<IssmDouble>(B); 521 xDelete<IssmDouble>(D); 509 xDelete<IssmDouble>(dbasis); 522 510 xDelete<IssmDouble>(Bprime); 523 xDelete<IssmDouble>(v);524 xDelete<IssmDouble>(w);525 xDelete<IssmDouble>(c);526 xDelete<IssmDouble>(m);527 xDelete<IssmDouble>(dlsf);528 511 delete gauss; 529 512 if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;}; -
issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp
r22511 r22523 461 461 } 462 462 else if(stabilization==2){ 463 element->NodalFunctionsDerivatives(dbasis,xyz_list,gauss);464 463 tau_parameter=element->StabilizationParameter(u-um,v-vm,w-wm,diameter,kappa); 465 464 for(int i=0;i<numnodes;i++){
Note:
See TracChangeset
for help on using the changeset viewer.