Changeset 8414
- Timestamp:
- 05/24/11 12:07:28 (14 years ago)
- Location:
- issm/trunk/src/c/objects/Elements
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/c/objects/Elements/Penta.cpp
r8413 r8414 2827 2827 ElementVector* Penta::CreatePVectorDiagnosticVertBase(void){ 2828 2828 2829 2830 /*Constants*/ 2831 const int numdof=NDOF1*NUMVERTICES; 2832 2833 /*Intermediaries */ 2834 int i,j,ig; 2835 int approximation; 2836 double xyz_list[NUMVERTICES][3]; 2837 double xyz_list_tria[NUMVERTICES2D][3]; 2838 double Jdet2d; 2839 double vx,vy,vz,dbdx,dbdy,basalmeltingvalue; 2840 double slope[2]; 2841 double l1l6[NUMVERTICES]; 2842 GaussPenta* gauss=NULL; 2843 2829 2844 if (!IsOnBed()) return NULL; 2830 2845 2831 /*Call Tria function*/ 2832 Tria* tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria. 2833 ElementVector* pe=tria->CreatePVectorDiagnosticBaseVert(); 2834 delete tria->matice; delete tria; 2846 /*Initialize Element vector*/ 2847 ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters); 2848 2849 /*Retrieve all inputs and parameters*/ 2850 GetVerticesCoordinates(&xyz_list[0][0], nodes, NUMVERTICES); 2851 for(i=0;i<NUMVERTICES2D;i++) for(j=0;j<3;j++) xyz_list_tria[i][j]=xyz_list[i][j]; 2852 inputs->GetParameterValue(&approximation,ApproximationEnum); 2853 Input* bed_input=inputs->GetInput(BedEnum); _assert_(bed_input); 2854 Input* basal_melting_input=inputs->GetInput(BasalMeltingRateEnum); _assert_(basal_melting_input); 2855 Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input); 2856 Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input); 2857 Input* vzstokes_input=NULL; 2858 if(approximation==PattynStokesApproximationEnum || approximation==MacAyealStokesApproximationEnum){ 2859 vzstokes_input=inputs->GetInput(VzStokesEnum); _assert_(vzstokes_input); 2860 } 2861 2862 /* Start looping on the number of gaussian points: */ 2863 gauss=new GaussPenta(0,1,2,2); 2864 for(ig=gauss->begin();ig<gauss->end();ig++){ 2865 2866 gauss->GaussPoint(ig); 2867 2868 basal_melting_input->GetParameterValue(&basalmeltingvalue, gauss); 2869 bed_input->GetParameterDerivativeValue(&slope[0],&xyz_list[0][0],gauss); 2870 vx_input->GetParameterValue(&vx, gauss); 2871 vy_input->GetParameterValue(&vy, gauss); 2872 if(approximation==PattynStokesApproximationEnum || approximation==MacAyealStokesApproximationEnum){ 2873 vzstokes_input->GetParameterValue(&vz, gauss); 2874 } 2875 else vz=0; 2876 2877 dbdx=slope[0]; 2878 dbdy=slope[1]; 2879 2880 GetTriaJacobianDeterminand(&Jdet2d, &xyz_list_tria[0][0],gauss); 2881 GetNodalFunctionsP1(&l1l6[0], gauss); 2882 2883 for(i=0;i<numdof;i++) pe->values[i]+=-Jdet2d*gauss->weight*(vx*dbdx+vy*dbdy-vz-basalmeltingvalue)*l1l6[i]; 2884 } 2835 2885 2836 2886 /*Clean up and return*/ 2887 delete gauss; 2837 2888 return pe; 2838 2889 } -
issm/trunk/src/c/objects/Elements/Tria.cpp
r8410 r8414 1717 1717 1718 1718 for(i=0;i<numdof;i++) pe->values[i]+=Jdettria*gauss->weight*(surface_mass_balance_g-basal_melting_g)*L[i]; 1719 }1720 1721 /*Clean up and return*/1722 delete gauss;1723 return pe;1724 }1725 /*}}}*/1726 /*FUNCTION Tria::CreatePVectorDiagnosticBaseVert {{{1*/1727 ElementVector* Tria::CreatePVectorDiagnosticBaseVert(void){1728 1729 /*Constants*/1730 const int numdof=NDOF1*NUMVERTICES;1731 1732 /*Intermediaries */1733 int i,j,ig;1734 int approximation;1735 double xyz_list[NUMVERTICES][3];1736 double Jdet;1737 double vx,vy,vz,dbdx,dbdy,basalmeltingvalue;1738 double slope[2];1739 double L[NUMVERTICES];1740 GaussTria* gauss=NULL;1741 1742 /*Initialize Element vector*/1743 ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters);1744 1745 /*Retrieve all inputs and parameters*/1746 GetVerticesCoordinates(&xyz_list[0][0], nodes, NUMVERTICES);1747 inputs->GetParameterValue(&approximation,ApproximationEnum);1748 Input* bed_input=inputs->GetInput(BedEnum); _assert_(bed_input);1749 Input* basal_melting_input=inputs->GetInput(BasalMeltingRateEnum); _assert_(basal_melting_input);1750 Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);1751 Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);1752 Input* vzstokes_input=NULL;1753 if(approximation==PattynStokesApproximationEnum || approximation==MacAyealStokesApproximationEnum){1754 vzstokes_input=inputs->GetInput(VzStokesEnum); _assert_(vzstokes_input);1755 }1756 1757 /* Start looping on the number of gaussian points: */1758 gauss=new GaussTria(2);1759 for(ig=gauss->begin();ig<gauss->end();ig++){1760 1761 gauss->GaussPoint(ig);1762 1763 basal_melting_input->GetParameterValue(&basalmeltingvalue, gauss);1764 bed_input->GetParameterDerivativeValue(&slope[0],&xyz_list[0][0],gauss);1765 vx_input->GetParameterValue(&vx, gauss);1766 vy_input->GetParameterValue(&vy, gauss);1767 if(approximation==PattynStokesApproximationEnum || approximation==MacAyealStokesApproximationEnum){1768 vzstokes_input->GetParameterValue(&vz, gauss);1769 }1770 else vz=0;1771 1772 dbdx=slope[0];1773 dbdy=slope[1];1774 1775 GetJacobianDeterminant3d(&Jdet, &xyz_list[0][0],gauss);1776 GetL(&L[0], &xyz_list[0][0], gauss,NDOF1);1777 1778 for(i=0;i<numdof;i++) pe->values[i]+=-Jdet*gauss->weight*(vx*dbdx+vy*dbdy-vz-basalmeltingvalue)*L[i];1779 1719 } 1780 1720 -
issm/trunk/src/c/objects/Elements/Tria.h
r8410 r8414 164 164 ElementVector* CreatePVectorBalancethickness_CG(void); 165 165 ElementVector* CreatePVectorBalancevelocities(void); 166 ElementVector* CreatePVectorDiagnosticBaseVert(void);167 166 ElementVector* CreatePVectorDiagnosticMacAyeal(void); 168 167 ElementVector* CreatePVectorAdjointHoriz(void);
Note:
See TracChangeset
for help on using the changeset viewer.