Changeset 22513
- Timestamp:
- 03/09/18 15:23:52 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
r22510 r22513 1307 1307 /*Initialize Element matrix and vectors*/ 1308 1308 ElementMatrix* Ke = element->NewElementMatrix(SSAApproximationEnum); 1309 IssmDouble* B = xNew<IssmDouble>(dim*numdof); 1310 IssmDouble* D = xNewZeroInit<IssmDouble>(dim*dim); 1309 IssmDouble* basis = xNew<IssmDouble>(numnodes); 1311 1310 1312 1311 /*Retrieve all inputs and parameters*/ … … 1341 1340 } 1342 1341 1343 this->GetBSSAFriction(B,element,dim,xyz_list,gauss);1342 element->NodalFunctions(basis,gauss); 1344 1343 element->JacobianDeterminant(&Jdet, xyz_list,gauss); 1345 for(int i=0;i<dim;i++) D[i*dim+i]=alpha2*gauss->weight*Jdet; 1346 1347 TripleMultiply(B,dim,numdof,1, 1348 D,dim,dim,0, 1349 B,dim,numdof,0, 1350 &Ke->values[0],1); 1344 1345 if(dim==2){ 1346 for(int i=0;i<numnodes;i++){ 1347 for(int j=0;j<numnodes;j++){ 1348 Ke->values[2*i*2*numnodes+2*j] += alpha2*gauss->weight*Jdet*basis[i]*basis[j]; 1349 Ke->values[(2*i+1)*2*numnodes+2*j+1] += alpha2*gauss->weight*Jdet*basis[i]*basis[j]; 1350 } 1351 } 1352 } 1353 else{ 1354 for(int i=0;i<numnodes;i++){ 1355 for(int j=0;j<numnodes;j++){ 1356 Ke->values[i*numnodes+j] += alpha2*gauss->weight*Jdet*basis[i]*basis[j]; 1357 } 1358 } 1359 } 1351 1360 } 1352 1361 … … 1358 1367 delete friction; 1359 1368 xDelete<IssmDouble>(xyz_list); 1360 xDelete<IssmDouble>(B); 1361 xDelete<IssmDouble>(D); 1369 xDelete<IssmDouble>(basis); 1362 1370 return Ke; 1363 1371 }/*}}}*/ … … 1434 1442 1435 1443 /*Intermediaries*/ 1436 int dim,domaintype ,bsize;1444 int dim,domaintype; 1437 1445 IssmDouble viscosity,newviscosity,oldviscosity; 1438 1446 IssmDouble viscosity_overshoot,thickness,Jdet; 1439 IssmDouble D_scalar;1440 1447 IssmDouble *xyz_list = NULL; 1441 1448 … … 1443 1450 element->FindParam(&domaintype,DomainTypeEnum); 1444 1451 switch(domaintype){ 1445 case Domain2DverticalEnum: dim = 1; b size = 1; break;1446 case Domain2DhorizontalEnum: dim = 2; b size = 3; break;1447 case Domain3DEnum: dim = 2; b size = 3; break;1452 case Domain2DverticalEnum: dim = 1; break; 1453 case Domain2DhorizontalEnum: dim = 2; break; 1454 case Domain3DEnum: dim = 2; break; 1448 1455 default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet"); 1449 1456 } … … 1455 1462 /*Initialize Element matrix and vectors*/ 1456 1463 ElementMatrix* Ke = element->NewElementMatrix(SSAApproximationEnum); 1457 IssmDouble* B = xNew<IssmDouble>(bsize*numdof); 1458 IssmDouble* Bprime = xNew<IssmDouble>(bsize*numdof); 1459 IssmDouble* D = xNewZeroInit<IssmDouble>(bsize*bsize); 1464 IssmDouble* dbasis = xNew<IssmDouble>(2*numnodes); 1460 1465 1461 1466 /*Retrieve all inputs and parameters*/ … … 1478 1483 1479 1484 element->JacobianDeterminant(&Jdet,xyz_list,gauss); 1480 this->GetBSSA(B,element,dim,xyz_list,gauss);1481 this->GetBSSAprime(Bprime,element,dim,xyz_list,gauss); 1482 1485 element->NodalFunctionsDerivatives(dbasis,xyz_list,gauss); 1486 1487 thickness_input->GetInputValue(&thickness, gauss); 1483 1488 element->material->ViscositySSA(&viscosity,dim,xyz_list,gauss,vx_input,vy_input); 1484 1489 element->material->ViscositySSA(&oldviscosity,dim,xyz_list,gauss,vxold_input,vyold_input); 1485 thickness_input->GetInputValue(&thickness, gauss);1486 1487 1490 newviscosity=viscosity+viscosity_overshoot*(viscosity-oldviscosity); 1488 D_scalar=2.*newviscosity*thickness*gauss->weight*Jdet; 1489 for(int i=0;i<bsize;i++) D[i*bsize+i]=D_scalar; 1490 1491 TripleMultiply(B,bsize,numdof,1, 1492 D,bsize,bsize,0, 1493 Bprime,bsize,numdof,0, 1494 &Ke->values[0],1); 1491 1492 if(dim==2){ 1493 for(int i=0;i<numnodes;i++){ 1494 for(int j=0;j<numnodes;j++){ 1495 Ke->values[2*i*2*numnodes+2*j] += gauss->weight*Jdet*newviscosity*thickness*( 1496 4.*dbasis[0*numnodes+j]*dbasis[0*numnodes+i] + dbasis[1*numnodes+j]*dbasis[1*numnodes+i] 1497 ); 1498 Ke->values[2*i*2*numnodes+2*j+1] += gauss->weight*Jdet*newviscosity*thickness*( 1499 2.*dbasis[1*numnodes+j]*dbasis[0*numnodes+i] + dbasis[0*numnodes+j]*dbasis[1*numnodes+i] 1500 ); 1501 Ke->values[(2*i+1)*2*numnodes+2*j] += gauss->weight*Jdet*newviscosity*thickness*( 1502 2.*dbasis[0*numnodes+j]*dbasis[1*numnodes+i] + dbasis[1*numnodes+j]*dbasis[0*numnodes+i] 1503 ); 1504 Ke->values[(2*i+1)*2*numnodes+2*j+1] += gauss->weight*Jdet*newviscosity*thickness*( 1505 dbasis[0*numnodes+j]*dbasis[0*numnodes+i] + 4.*dbasis[1*numnodes+j]*dbasis[1*numnodes+i] 1506 ); 1507 } 1508 } 1509 } 1510 else{ 1511 for(int i=0;i<numnodes;i++){ 1512 for(int j=0;j<numnodes;j++){ 1513 Ke->values[i*numnodes+j] += gauss->weight*Jdet*newviscosity*thickness*( 1514 4.*dbasis[0*numnodes+j]*dbasis[0*numnodes+i] 1515 ); 1516 } 1517 } 1518 } 1495 1519 } 1496 1520 … … 1501 1525 delete gauss; 1502 1526 xDelete<IssmDouble>(xyz_list); 1503 xDelete<IssmDouble>(D); 1504 xDelete<IssmDouble>(Bprime); 1505 xDelete<IssmDouble>(B); 1527 xDelete<IssmDouble>(dbasis); 1506 1528 return Ke; 1507 1529 }/*}}}*/
Note:
See TracChangeset
for help on using the changeset viewer.