Changeset 2956
- Timestamp:
- 02/04/10 08:04:08 (15 years ago)
- Location:
- issm/trunk/src/c/objects
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/c/objects/Penta.cpp
r2722 r2956 416 416 int ig1,ig2; 417 417 double gauss_weight1,gauss_weight2; 418 double gauss_ l1l2l3l4[4];418 double gauss_coord[4]; 419 419 int order_area_gauss; 420 420 int num_vert_gauss; … … 571 571 572 572 573 gauss_ l1l2l3l4[0]=*(first_gauss_area_coord+ig1);574 gauss_ l1l2l3l4[1]=*(second_gauss_area_coord+ig1);575 gauss_ l1l2l3l4[2]=*(third_gauss_area_coord+ig1);576 gauss_ l1l2l3l4[3]=*(fourth_gauss_vert_coord+ig2);573 gauss_coord[0]=*(first_gauss_area_coord+ig1); 574 gauss_coord[1]=*(second_gauss_area_coord+ig1); 575 gauss_coord[2]=*(third_gauss_area_coord+ig1); 576 gauss_coord[3]=*(fourth_gauss_vert_coord+ig2); 577 577 578 578 579 579 /*Get strain rate from velocity: */ 580 GetStrainRate(&epsilon[0],&vxvy_list[0][0],&xyz_list[0][0],gauss_ l1l2l3l4);581 GetStrainRate(&oldepsilon[0],&oldvxvy_list[0][0],&xyz_list[0][0],gauss_ l1l2l3l4);580 GetStrainRate(&epsilon[0],&vxvy_list[0][0],&xyz_list[0][0],gauss_coord); 581 GetStrainRate(&oldepsilon[0],&oldvxvy_list[0][0],&xyz_list[0][0],gauss_coord); 582 582 583 583 /*Get viscosity: */ … … 586 586 587 587 /*Get B and Bprime matrices: */ 588 GetB(&B[0][0], &xyz_list[0][0], gauss_ l1l2l3l4);589 GetBPrime(&Bprime[0][0], &xyz_list[0][0], gauss_ l1l2l3l4);588 GetB(&B[0][0], &xyz_list[0][0], gauss_coord); 589 GetBPrime(&Bprime[0][0], &xyz_list[0][0], gauss_coord); 590 590 591 591 /* Get Jacobian determinant: */ 592 GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss_ l1l2l3l4);592 GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss_coord); 593 593 594 594 /*Build the D matrix: we plug the gaussian weight, the thickness, the viscosity, and the jacobian determinant … … 960 960 int ig1,ig2; 961 961 double gauss_weight1,gauss_weight2; 962 double gauss_ l1l2l3l4[4];962 double gauss_coord[4]; 963 963 int order_area_gauss; 964 964 int num_vert_gauss; … … 1035 1035 gauss_weight=gauss_weight1*gauss_weight2; 1036 1036 1037 gauss_ l1l2l3l4[0]=*(first_gauss_area_coord+ig1);1038 gauss_ l1l2l3l4[1]=*(second_gauss_area_coord+ig1);1039 gauss_ l1l2l3l4[2]=*(third_gauss_area_coord+ig1);1040 gauss_ l1l2l3l4[3]=*(fourth_gauss_vert_coord+ig2);1037 gauss_coord[0]=*(first_gauss_area_coord+ig1); 1038 gauss_coord[1]=*(second_gauss_area_coord+ig1); 1039 gauss_coord[2]=*(third_gauss_area_coord+ig1); 1040 gauss_coord[3]=*(fourth_gauss_vert_coord+ig2); 1041 1041 1042 1042 /*Get B and Bprime matrices: */ 1043 GetB_vert(&B[0][0], &xyz_list[0][0], gauss_ l1l2l3l4);1044 GetBPrime_vert(&Bprime[0][0], &xyz_list[0][0], gauss_ l1l2l3l4);1043 GetB_vert(&B[0][0], &xyz_list[0][0], gauss_coord); 1044 GetBPrime_vert(&Bprime[0][0], &xyz_list[0][0], gauss_coord); 1045 1045 1046 1046 /* Get Jacobian determinant: */ 1047 GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss_ l1l2l3l4);1047 GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss_coord); 1048 1048 DL_scalar=gauss_weight*Jdet; 1049 1049 … … 1527 1527 double* area_gauss_weights = NULL; 1528 1528 double* vert_gauss_weights = NULL; 1529 double gauss_ l1l2l3l4[4];1529 double gauss_coord[4]; 1530 1530 int order_area_gauss; 1531 1531 int num_vert_gauss; … … 1539 1539 1540 1540 /*nodal functions: */ 1541 double l1l 2l3l4l5l6[6];1541 double l1l6[6]; 1542 1542 1543 1543 /*element vector at the gaussian points: */ … … 1609 1609 gauss_weight=gauss_weight1*gauss_weight2; 1610 1610 1611 gauss_ l1l2l3l4[0]=*(first_gauss_area_coord+ig1);1612 gauss_ l1l2l3l4[1]=*(second_gauss_area_coord+ig1);1613 gauss_ l1l2l3l4[2]=*(third_gauss_area_coord+ig1);1614 gauss_ l1l2l3l4[3]=*(fourth_gauss_vert_coord+ig2);1611 gauss_coord[0]=*(first_gauss_area_coord+ig1); 1612 gauss_coord[1]=*(second_gauss_area_coord+ig1); 1613 gauss_coord[2]=*(third_gauss_area_coord+ig1); 1614 gauss_coord[3]=*(fourth_gauss_vert_coord+ig2); 1615 1615 1616 1616 /*Compute thickness at gaussian point: */ 1617 GetParameterValue(&thickness, &h[0],gauss_ l1l2l3l4);1617 GetParameterValue(&thickness, &h[0],gauss_coord); 1618 1618 1619 1619 /*Compute slope at gaussian point: */ 1620 GetParameterDerivativeValue(&slope[0], &s[0],&xyz_list[0][0], gauss_ l1l2l3l4);1620 GetParameterDerivativeValue(&slope[0], &s[0],&xyz_list[0][0], gauss_coord); 1621 1621 1622 1622 /* Get Jacobian determinant: */ 1623 GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss_ l1l2l3l4);1623 GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss_coord); 1624 1624 1625 1625 /*Get nodal functions: */ 1626 GetNodalFunctions(l1l 2l3l4l5l6, gauss_l1l2l3l4);1626 GetNodalFunctions(l1l6, gauss_coord); 1627 1627 1628 1628 /*Compute driving stress: */ … … 1632 1632 for (i=0;i<numgrids;i++){ 1633 1633 for (j=0;j<NDOF2;j++){ 1634 pe_g_gaussian[i*NDOF2+j]=-driving_stress_baseline*slope[j]*Jdet*gauss_weight*l1l 2l3l4l5l6[i];1634 pe_g_gaussian[i*NDOF2+j]=-driving_stress_baseline*slope[j]*Jdet*gauss_weight*l1l6[i]; 1635 1635 } 1636 1636 } … … 1921 1921 double* area_gauss_weights = NULL; 1922 1922 double* vert_gauss_weights = NULL; 1923 double gauss_ l1l2l3l4[4];1923 double gauss_coord[4]; 1924 1924 int order_area_gauss; 1925 1925 int num_vert_gauss; … … 1935 1935 double pe_g[numdof]; 1936 1936 double pe_g_gaussian[numdof]; 1937 double l1l 2l3l4l5l6[6];1937 double l1l6[6]; 1938 1938 1939 1939 /*Spawning: */ … … 2000 2000 gauss_weight=gauss_weight1*gauss_weight2; 2001 2001 2002 gauss_ l1l2l3l4[0]=*(first_gauss_area_coord+ig1);2003 gauss_ l1l2l3l4[1]=*(second_gauss_area_coord+ig1);2004 gauss_ l1l2l3l4[2]=*(third_gauss_area_coord+ig1);2005 gauss_ l1l2l3l4[3]=*(fourth_gauss_vert_coord+ig2);2002 gauss_coord[0]=*(first_gauss_area_coord+ig1); 2003 gauss_coord[1]=*(second_gauss_area_coord+ig1); 2004 gauss_coord[2]=*(third_gauss_area_coord+ig1); 2005 gauss_coord[3]=*(fourth_gauss_vert_coord+ig2); 2006 2006 2007 2007 /*Get velocity derivative, with respect to x and y: */ 2008 GetParameterDerivativeValue(&du[0], &vx_list[0],&xyz_list[0][0], gauss_ l1l2l3l4);2009 GetParameterDerivativeValue(&dv[0], &vy_list[0],&xyz_list[0][0], gauss_ l1l2l3l4);2008 GetParameterDerivativeValue(&du[0], &vx_list[0],&xyz_list[0][0], gauss_coord); 2009 GetParameterDerivativeValue(&dv[0], &vy_list[0],&xyz_list[0][0], gauss_coord); 2010 2010 dudx=du[0]; 2011 2011 dvdy=dv[1]; … … 2013 2013 2014 2014 /* Get Jacobian determinant: */ 2015 GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss_ l1l2l3l4);2015 GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss_coord); 2016 2016 #ifdef _ISSM_DEBUG_ 2017 2017 printf("Element id %i Jacobian determinant: %lf\n",GetId(),Jdet); … … 2019 2019 2020 2020 /*Get nodal functions: */ 2021 GetNodalFunctions(l1l 2l3l4l5l6, gauss_l1l2l3l4);2021 GetNodalFunctions(l1l6, gauss_coord); 2022 2022 2023 2023 /*Build pe_g_gaussian vector: */ 2024 2024 for (i=0;i<numgrids;i++){ 2025 pe_g_gaussian[i]=(dudx+dvdy)*Jdet*gauss_weight*l1l 2l3l4l5l6[i];2025 pe_g_gaussian[i]=(dudx+dvdy)*Jdet*gauss_weight*l1l6[i]; 2026 2026 } 2027 2027 … … 2547 2547 #undef __FUNCT__ 2548 2548 #define __FUNCT__ "Penta::GetB" 2549 void Penta::GetB(double* B, double* xyz_list, double* gauss_ l1l2l3l4){2549 void Penta::GetB(double* B, double* xyz_list, double* gauss_coord){ 2550 2550 2551 2551 /*Compute B matrix. B=[B1 B2 B3 B4 B5 B6] where Bi is of size 5*NDOF2. 2552 * For grid i, Bi can be expressed in the basiccoordinate system2552 * For grid i, Bi can be expressed in the actual coordinate system 2553 2553 * by: 2554 * Bi _basic=[ dh/dx 0 ]2554 * Bi=[ dh/dx 0 ] 2555 2555 * [ 0 dh/dy ] 2556 2556 * [ 1/2*dh/dy 1/2*dh/dx ] … … 2567 2567 const int NDOF2=2; 2568 2568 2569 double dh1dh 2dh3dh4dh5dh6_basic[NDOF3][numgrids];2570 2571 /*Get dh1dh 2dh3dh4dh5dh6_basic in basiccoordinate system: */2572 GetNodalFunctionsDerivatives Basic(&dh1dh2dh3dh4dh5dh6_basic[0][0],xyz_list, gauss_l1l2l3l4);2569 double dh1dh6[NDOF3][numgrids]; 2570 2571 /*Get dh1dh6 in actual coordinate system: */ 2572 GetNodalFunctionsDerivatives(&dh1dh6[0][0],xyz_list, gauss_coord); 2573 2573 2574 2574 #ifdef _ISSM_DEBUG_ 2575 2575 for (i=0;i<numgrids;i++){ 2576 printf("Node %i dh/dx=%lf dh/dy=%lf dh/dz=%lf\n",i,dh1dh 2dh3dh4dh5dh6_basic[0][i],dh1dh2dh3dh4dh5dh6_basic[1][i],dh1dh2dh3dh4dh5dh6_basic[2][i]);2576 printf("Node %i dh/dx=%lf dh/dy=%lf dh/dz=%lf\n",i,dh1dh6[0][i],dh1dh6[1][i],dh1dh6[2][i]); 2577 2577 } 2578 2578 #endif … … 2580 2580 /*Build B: */ 2581 2581 for (i=0;i<numgrids;i++){ 2582 *(B+NDOF2*numgrids*0+NDOF2*i)=dh1dh 2dh3dh4dh5dh6_basic[0][i];2582 *(B+NDOF2*numgrids*0+NDOF2*i)=dh1dh6[0][i]; 2583 2583 *(B+NDOF2*numgrids*0+NDOF2*i+1)=0.0; 2584 2584 2585 2585 *(B+NDOF2*numgrids*1+NDOF2*i)=0.0; 2586 *(B+NDOF2*numgrids*1+NDOF2*i+1)=dh1dh 2dh3dh4dh5dh6_basic[1][i];2587 2588 *(B+NDOF2*numgrids*2+NDOF2*i)=(float).5*dh1dh 2dh3dh4dh5dh6_basic[1][i];2589 *(B+NDOF2*numgrids*2+NDOF2*i+1)=(float).5*dh1dh 2dh3dh4dh5dh6_basic[0][i];2590 2591 *(B+NDOF2*numgrids*3+NDOF2*i)=(float).5*dh1dh 2dh3dh4dh5dh6_basic[2][i];2586 *(B+NDOF2*numgrids*1+NDOF2*i+1)=dh1dh6[1][i]; 2587 2588 *(B+NDOF2*numgrids*2+NDOF2*i)=(float).5*dh1dh6[1][i]; 2589 *(B+NDOF2*numgrids*2+NDOF2*i+1)=(float).5*dh1dh6[0][i]; 2590 2591 *(B+NDOF2*numgrids*3+NDOF2*i)=(float).5*dh1dh6[2][i]; 2592 2592 *(B+NDOF2*numgrids*3+NDOF2*i+1)=0.0; 2593 2593 2594 2594 *(B+NDOF2*numgrids*4+NDOF2*i)=0.0; 2595 *(B+NDOF2*numgrids*4+NDOF2*i+1)=(float).5*dh1dh 2dh3dh4dh5dh6_basic[2][i];2595 *(B+NDOF2*numgrids*4+NDOF2*i+1)=(float).5*dh1dh6[2][i]; 2596 2596 } 2597 2597 … … 2604 2604 2605 2605 /*Compute B matrix. B=[B1 B2 B3 B4 B5 B6] where Bi is of size 5*DOFPERGRID. 2606 * For grid i, Bi' can be expressed in the basiccoordinate system2606 * For grid i, Bi' can be expressed in the actual coordinate system 2607 2607 * by: 2608 * Bi_artdiff _basic=[ dh/dx ]2608 * Bi_artdiff=[ dh/dx ] 2609 2609 * [ dh/dy ] 2610 2610 * where h is the interpolation function for grid i. … … 2618 2618 int DOFPERGRID=1; 2619 2619 2620 /*Same thing in the basiccoordinate system: */2621 double dh1dh6 _basic[calculationdof][numgrids];2622 2623 /*Get dh1dh2dh3 in basiccoordinates system : */2624 GetNodalFunctionsDerivatives Basic(&dh1dh6_basic[0][0],xyz_list,gauss_coord);2620 /*Same thing in the actual coordinate system: */ 2621 double dh1dh6[calculationdof][numgrids]; 2622 2623 /*Get dh1dh2dh3 in actual coordinates system : */ 2624 GetNodalFunctionsDerivatives(&dh1dh6[0][0],xyz_list,gauss_coord); 2625 2625 2626 2626 /*Build B': */ 2627 2627 for (i=0;i<numgrids;i++){ 2628 *(B_artdiff+DOFPERGRID*numgrids*0+DOFPERGRID*i)=dh1dh6 _basic[0][i];2629 *(B_artdiff+DOFPERGRID*numgrids*1+DOFPERGRID*i)=dh1dh6 _basic[1][i];2628 *(B_artdiff+DOFPERGRID*numgrids*0+DOFPERGRID*i)=dh1dh6[0][i]; 2629 *(B_artdiff+DOFPERGRID*numgrids*1+DOFPERGRID*i)=dh1dh6[1][i]; 2630 2630 } 2631 2631 } … … 2637 2637 2638 2638 /*Compute B matrix. B=[B1 B2 B3 B4 B5 B6] where Bi is of size 5*DOFPERGRID. 2639 * For grid i, Bi' can be expressed in the basiccoordinate system2639 * For grid i, Bi' can be expressed in the actual coordinate system 2640 2640 * by: 2641 * Bi_advec _basic=[ h ]2641 * Bi_advec =[ h ] 2642 2642 * [ h ] 2643 2643 * [ h ] … … 2652 2652 int DOFPERGRID=1; 2653 2653 2654 /*Same thing in the basiccoordinate system: */2654 /*Same thing in the actual coordinate system: */ 2655 2655 double l1l6[6]; 2656 2656 2657 /*Get dh1dh2dh3 in basiccoordinates system : */2657 /*Get dh1dh2dh3 in actual coordinates system : */ 2658 2658 GetNodalFunctions(l1l6, gauss_coord); 2659 2659 … … 2672 2672 2673 2673 /*Compute B matrix. B=[B1 B2 B3 B4 B5 B6] where Bi is of size 5*DOFPERGRID. 2674 * For grid i, Bi' can be expressed in the basiccoordinate system2674 * For grid i, Bi' can be expressed in the actual coordinate system 2675 2675 * by: 2676 * Bi_conduct _basic=[ dh/dx ]2676 * Bi_conduct=[ dh/dx ] 2677 2677 * [ dh/dy ] 2678 2678 * [ dh/dz ] … … 2687 2687 int DOFPERGRID=1; 2688 2688 2689 /*Same thing in the basiccoordinate system: */2690 double dh1dh6 _basic[calculationdof][numgrids];2691 2692 /*Get dh1dh2dh3 in basiccoordinates system : */2693 GetNodalFunctionsDerivatives Basic(&dh1dh6_basic[0][0],xyz_list,gauss_coord);2689 /*Same thing in the actual coordinate system: */ 2690 double dh1dh6[calculationdof][numgrids]; 2691 2692 /*Get dh1dh2dh3 in actual coordinates system : */ 2693 GetNodalFunctionsDerivatives(&dh1dh6[0][0],xyz_list,gauss_coord); 2694 2694 2695 2695 /*Build B': */ 2696 2696 for (i=0;i<numgrids;i++){ 2697 *(B_conduct+DOFPERGRID*numgrids*0+DOFPERGRID*i)=dh1dh6 _basic[0][i];2698 *(B_conduct+DOFPERGRID*numgrids*1+DOFPERGRID*i)=dh1dh6 _basic[1][i];2699 *(B_conduct+DOFPERGRID*numgrids*2+DOFPERGRID*i)=dh1dh6 _basic[2][i];2697 *(B_conduct+DOFPERGRID*numgrids*0+DOFPERGRID*i)=dh1dh6[0][i]; 2698 *(B_conduct+DOFPERGRID*numgrids*1+DOFPERGRID*i)=dh1dh6[1][i]; 2699 *(B_conduct+DOFPERGRID*numgrids*2+DOFPERGRID*i)=dh1dh6[2][i]; 2700 2700 } 2701 2701 } … … 2704 2704 #undef __FUNCT__ 2705 2705 #define __FUNCT__ "Penta:GetB_vert" 2706 void Penta::GetB_vert(double* B, double* xyz_list, double* gauss_ l1l2l3l4){2706 void Penta::GetB_vert(double* B, double* xyz_list, double* gauss_coord){ 2707 2707 2708 2708 … … 2713 2713 const int NDOF3=3; 2714 2714 const int numgrids=6; 2715 double dh1dh 2dh3dh4dh5dh6_basic[NDOF3][numgrids];2716 2717 /*Get dh1dh 2dh3dh4dh5dh6_basic in basiccoordinate system: */2718 GetNodalFunctionsDerivatives Basic(&dh1dh2dh3dh4dh5dh6_basic[0][0],xyz_list, gauss_l1l2l3l4);2715 double dh1dh6[NDOF3][numgrids]; 2716 2717 /*Get dh1dh6 in actual coordinate system: */ 2718 GetNodalFunctionsDerivatives(&dh1dh6[0][0],xyz_list, gauss_coord); 2719 2719 2720 2720 #ifdef _ISSM_DEBUG_ 2721 2721 for (i=0;i<numgrids;i++){ 2722 printf("Node %i dh/dx=%lf dh/dy=%lf dh/dz=%lf\n",i,dh1dh 2dh3dh4dh5dh6_basic[0][i],dh1dh2dh3dh4dh5dh6_basic[1][i],dh1dh2dh3dh4dh5dh6_basic[2][i]);2722 printf("Node %i dh/dx=%lf dh/dy=%lf dh/dz=%lf\n",i,dh1dh6[0][i],dh1dh6[1][i],dh1dh6[2][i]); 2723 2723 } 2724 2724 #endif … … 2726 2726 /*Build B: */ 2727 2727 for (i=0;i<numgrids;i++){ 2728 B[i]=dh1dh 2dh3dh4dh5dh6_basic[2][i];2728 B[i]=dh1dh6[2][i]; 2729 2729 } 2730 2730 … … 2742 2742 #undef __FUNCT__ 2743 2743 #define __FUNCT__ "Penta::GetBPrime" 2744 void Penta::GetBPrime(double* B, double* xyz_list, double* gauss_ l1l2l3l4){2744 void Penta::GetBPrime(double* B, double* xyz_list, double* gauss_coord){ 2745 2745 2746 2746 /*Compute B prime matrix. B=[B1 B2 B3 B4 B5 B6] where Bi is of size 5*NDOF2. 2747 * For grid i, Bi can be expressed in the basiccoordinate system2747 * For grid i, Bi can be expressed in the actual coordinate system 2748 2748 * by: 2749 * Bi _basic=[ 2*dh/dx dh/dy ]2749 * Bi=[ 2*dh/dx dh/dy ] 2750 2750 * [ dh/dx 2*dh/dy ] 2751 2751 * [ dh/dy dh/dx ] … … 2762 2762 const int numgrids=6; 2763 2763 2764 double dh1dh 2dh3dh4dh5dh6_basic[NDOF3][numgrids];2765 2766 /*Get dh1dh 2dh3dh4dh5dh6_basic in basiccoordinate system: */2767 GetNodalFunctionsDerivatives Basic(&dh1dh2dh3dh4dh5dh6_basic[0][0],xyz_list, gauss_l1l2l3l4);2764 double dh1dh6[NDOF3][numgrids]; 2765 2766 /*Get dh1dh6 in actual coordinate system: */ 2767 GetNodalFunctionsDerivatives(&dh1dh6[0][0],xyz_list, gauss_coord); 2768 2768 2769 2769 #ifdef _ISSM_DEBUG_ 2770 2770 for (i=0;i<numgrids;i++){ 2771 printf("Node %i dh/dx=%lf dh/dy=%lf dh/dz=%lf\n",i,dh1dh 2dh3dh4dh5dh6_basic[0][i],dh1dh2dh3dh4dh5dh6_basic[1][i],dh1dh2dh3dh4dh5dh6_basic[2][i]);2771 printf("Node %i dh/dx=%lf dh/dy=%lf dh/dz=%lf\n",i,dh1dh6[0][i],dh1dh6[1][i],dh1dh6[2][i]); 2772 2772 } 2773 2773 #endif … … 2775 2775 /*Build BPrime: */ 2776 2776 for (i=0;i<numgrids;i++){ 2777 *(B+NDOF2*numgrids*0+NDOF2*i)=2.0*dh1dh 2dh3dh4dh5dh6_basic[0][i];2778 *(B+NDOF2*numgrids*0+NDOF2*i+1)=dh1dh 2dh3dh4dh5dh6_basic[1][i];2779 2780 *(B+NDOF2*numgrids*1+NDOF2*i)=dh1dh 2dh3dh4dh5dh6_basic[0][i];2781 *(B+NDOF2*numgrids*1+NDOF2*i+1)=2.0*dh1dh 2dh3dh4dh5dh6_basic[1][i];2782 2783 *(B+NDOF2*numgrids*2+NDOF2*i)=dh1dh 2dh3dh4dh5dh6_basic[1][i];2784 *(B+NDOF2*numgrids*2+NDOF2*i+1)=dh1dh 2dh3dh4dh5dh6_basic[0][i];2785 2786 *(B+NDOF2*numgrids*3+NDOF2*i)=dh1dh 2dh3dh4dh5dh6_basic[2][i];2777 *(B+NDOF2*numgrids*0+NDOF2*i)=2.0*dh1dh6[0][i]; 2778 *(B+NDOF2*numgrids*0+NDOF2*i+1)=dh1dh6[1][i]; 2779 2780 *(B+NDOF2*numgrids*1+NDOF2*i)=dh1dh6[0][i]; 2781 *(B+NDOF2*numgrids*1+NDOF2*i+1)=2.0*dh1dh6[1][i]; 2782 2783 *(B+NDOF2*numgrids*2+NDOF2*i)=dh1dh6[1][i]; 2784 *(B+NDOF2*numgrids*2+NDOF2*i+1)=dh1dh6[0][i]; 2785 2786 *(B+NDOF2*numgrids*3+NDOF2*i)=dh1dh6[2][i]; 2787 2787 *(B+NDOF2*numgrids*3+NDOF2*i+1)=0.0; 2788 2788 2789 2789 *(B+NDOF2*numgrids*4+NDOF2*i)=0.0; 2790 *(B+NDOF2*numgrids*4+NDOF2*i+1)=dh1dh 2dh3dh4dh5dh6_basic[2][i];2790 *(B+NDOF2*numgrids*4+NDOF2*i+1)=dh1dh6[2][i]; 2791 2791 } 2792 2792 } … … 2799 2799 2800 2800 /*Compute B matrix. B=[B1 B2 B3 B4 B5 B6] where Bi is of size 5*DOFPERGRID. 2801 * For grid i, Bi' can be expressed in the basiccoordinate system2801 * For grid i, Bi' can be expressed in the actual coordinate system 2802 2802 * by: 2803 2803 * Biprime_advec=[ dh/dx ] … … 2814 2814 int DOFPERGRID=1; 2815 2815 2816 /*Same thing in the basiccoordinate system: */2817 double dh1dh6 _basic[calculationdof][numgrids];2818 2819 /*Get dh1dh2dh3 in basiccoordinates system : */2820 GetNodalFunctionsDerivatives Basic(&dh1dh6_basic[0][0],xyz_list,gauss_coord);2816 /*Same thing in the actual coordinate system: */ 2817 double dh1dh6[calculationdof][numgrids]; 2818 2819 /*Get dh1dh2dh3 in actual coordinates system : */ 2820 GetNodalFunctionsDerivatives(&dh1dh6[0][0],xyz_list,gauss_coord); 2821 2821 2822 2822 /*Build B': */ 2823 2823 for (i=0;i<numgrids;i++){ 2824 *(Bprime_advec+DOFPERGRID*numgrids*0+DOFPERGRID*i)=dh1dh6 _basic[0][i];2825 *(Bprime_advec+DOFPERGRID*numgrids*1+DOFPERGRID*i)=dh1dh6 _basic[1][i];2826 *(Bprime_advec+DOFPERGRID*numgrids*2+DOFPERGRID*i)=dh1dh6 _basic[2][i];2824 *(Bprime_advec+DOFPERGRID*numgrids*0+DOFPERGRID*i)=dh1dh6[0][i]; 2825 *(Bprime_advec+DOFPERGRID*numgrids*1+DOFPERGRID*i)=dh1dh6[1][i]; 2826 *(Bprime_advec+DOFPERGRID*numgrids*2+DOFPERGRID*i)=dh1dh6[2][i]; 2827 2827 } 2828 2828 } … … 2831 2831 #undef __FUNCT__ 2832 2832 #define __FUNCT__ "Penta:GetBPrime_vert" 2833 void Penta::GetBPrime_vert(double* B, double* xyz_list, double* gauss_ l1l2l3l4){2833 void Penta::GetBPrime_vert(double* B, double* xyz_list, double* gauss_coord){ 2834 2834 2835 2835 // Compute Bprime matrix. Bprime=[L1 L2 L3 L4 L5 L6] where Li is the nodal function for grid i … … 2837 2837 int i; 2838 2838 2839 GetNodalFunctions(B, gauss_ l1l2l3l4);2839 GetNodalFunctions(B, gauss_coord); 2840 2840 2841 2841 } … … 2847 2847 2848 2848 /* Compute B' matrix. B'=[B1' B2' B3' B4' B5' B6' Bb'] where Bi' is of size 3*NDOF2. 2849 * For grid i, Bi' can be expressed in the basiccoordinate system2849 * For grid i, Bi' can be expressed in the actual coordinate system 2850 2850 * by: 2851 * Bi _basic'=[ dh/dx 0 0 0]2851 * Bi'=[ dh/dx 0 0 0] 2852 2852 * [ 0 dh/dy 0 0] 2853 2853 * [ 0 0 dh/dz 0] … … 2867 2867 int DOFPERGRID=4; 2868 2868 2869 double dh1dh7 _basic[calculationdof][numgrids+1];2869 double dh1dh7[calculationdof][numgrids+1]; 2870 2870 double l1l6[numgrids]; 2871 2871 2872 /*Get dh1dh7 in basiccoordinate system: */2873 GetNodalFunctionsDerivatives BasicStokes(&dh1dh7_basic[0][0],xyz_list, gauss_coord);2872 /*Get dh1dh7 in actual coordinate system: */ 2873 GetNodalFunctionsDerivativesStokes(&dh1dh7[0][0],xyz_list, gauss_coord); 2874 2874 2875 2875 GetNodalFunctions(l1l6, gauss_coord); … … 2877 2877 #ifdef _ISSM_DEBUG_ 2878 2878 for (i=0;i<6;i++){ 2879 printf("Node %i dh/dx=%lf dh/dy=%lf dh/dz=%lf \n",i,dh1dh7 _basic[0][i],dh1dh7_basic[1][i]);2879 printf("Node %i dh/dx=%lf dh/dy=%lf dh/dz=%lf \n",i,dh1dh7[0][i],dh1dh7[1][i]); 2880 2880 } 2881 2881 … … 2884 2884 /*B_primeuild B_prime: */ 2885 2885 for (i=0;i<numgrids+1;i++){ 2886 *(B_prime+(DOFPERGRID*numgrids+3)*0+DOFPERGRID*i)=dh1dh7 _basic[0][i]; //B_prime[0][DOFPERGRID*i]=dh1dh6_basic[0][i];2886 *(B_prime+(DOFPERGRID*numgrids+3)*0+DOFPERGRID*i)=dh1dh7[0][i]; //B_prime[0][DOFPERGRID*i]=dh1dh6[0][i]; 2887 2887 *(B_prime+(DOFPERGRID*numgrids+3)*0+DOFPERGRID*i+1)=0; 2888 2888 *(B_prime+(DOFPERGRID*numgrids+3)*0+DOFPERGRID*i+2)=0; 2889 2889 *(B_prime+(DOFPERGRID*numgrids+3)*1+DOFPERGRID*i)=0; 2890 *(B_prime+(DOFPERGRID*numgrids+3)*1+DOFPERGRID*i+1)=dh1dh7 _basic[1][i];2890 *(B_prime+(DOFPERGRID*numgrids+3)*1+DOFPERGRID*i+1)=dh1dh7[1][i]; 2891 2891 *(B_prime+(DOFPERGRID*numgrids+3)*1+DOFPERGRID*i+2)=0; 2892 2892 *(B_prime+(DOFPERGRID*numgrids+3)*2+DOFPERGRID*i)=0; 2893 2893 *(B_prime+(DOFPERGRID*numgrids+3)*2+DOFPERGRID*i+1)=0; 2894 *(B_prime+(DOFPERGRID*numgrids+3)*2+DOFPERGRID*i+2)=dh1dh7 _basic[2][i];2895 *(B_prime+(DOFPERGRID*numgrids+3)*3+DOFPERGRID*i)=dh1dh7 _basic[1][i];2896 *(B_prime+(DOFPERGRID*numgrids+3)*3+DOFPERGRID*i+1)=dh1dh7 _basic[0][i];2894 *(B_prime+(DOFPERGRID*numgrids+3)*2+DOFPERGRID*i+2)=dh1dh7[2][i]; 2895 *(B_prime+(DOFPERGRID*numgrids+3)*3+DOFPERGRID*i)=dh1dh7[1][i]; 2896 *(B_prime+(DOFPERGRID*numgrids+3)*3+DOFPERGRID*i+1)=dh1dh7[0][i]; 2897 2897 *(B_prime+(DOFPERGRID*numgrids+3)*3+DOFPERGRID*i+2)=0; 2898 *(B_prime+(DOFPERGRID*numgrids+3)*4+DOFPERGRID*i)=dh1dh7 _basic[2][i];2898 *(B_prime+(DOFPERGRID*numgrids+3)*4+DOFPERGRID*i)=dh1dh7[2][i]; 2899 2899 *(B_prime+(DOFPERGRID*numgrids+3)*4+DOFPERGRID*i+1)=0; 2900 *(B_prime+(DOFPERGRID*numgrids+3)*4+DOFPERGRID*i+2)=dh1dh7 _basic[0][i];2900 *(B_prime+(DOFPERGRID*numgrids+3)*4+DOFPERGRID*i+2)=dh1dh7[0][i]; 2901 2901 *(B_prime+(DOFPERGRID*numgrids+3)*5+DOFPERGRID*i)=0; 2902 *(B_prime+(DOFPERGRID*numgrids+3)*5+DOFPERGRID*i+1)=dh1dh7 _basic[2][i];2903 *(B_prime+(DOFPERGRID*numgrids+3)*5+DOFPERGRID*i+2)=dh1dh7 _basic[1][i];2904 *(B_prime+(DOFPERGRID*numgrids+3)*6+DOFPERGRID*i)=dh1dh7 _basic[0][i];2905 *(B_prime+(DOFPERGRID*numgrids+3)*6+DOFPERGRID*i+1)=dh1dh7 _basic[1][i];2906 *(B_prime+(DOFPERGRID*numgrids+3)*6+DOFPERGRID*i+2)=dh1dh7 _basic[2][i];2902 *(B_prime+(DOFPERGRID*numgrids+3)*5+DOFPERGRID*i+1)=dh1dh7[2][i]; 2903 *(B_prime+(DOFPERGRID*numgrids+3)*5+DOFPERGRID*i+2)=dh1dh7[1][i]; 2904 *(B_prime+(DOFPERGRID*numgrids+3)*6+DOFPERGRID*i)=dh1dh7[0][i]; 2905 *(B_prime+(DOFPERGRID*numgrids+3)*6+DOFPERGRID*i+1)=dh1dh7[1][i]; 2906 *(B_prime+(DOFPERGRID*numgrids+3)*6+DOFPERGRID*i+2)=dh1dh7[2][i]; 2907 2907 *(B_prime+(DOFPERGRID*numgrids+3)*7+DOFPERGRID*i)=0; 2908 2908 *(B_prime+(DOFPERGRID*numgrids+3)*7+DOFPERGRID*i+1)=0; … … 2929 2929 2930 2930 /*Compute B matrix. B=[B1 B2 B3 B4 B5 B6] where Bi is of size 3*DOFPERGRID. 2931 * For grid i, Bi can be expressed in the basiccoordinate system2932 * by: Bi _basic=[ dh/dx 0 0 0 ]2931 * For grid i, Bi can be expressed in the actual coordinate system 2932 * by: Bi=[ dh/dx 0 0 0 ] 2933 2933 * [ 0 dh/dy 0 0 ] 2934 2934 * [ 0 0 dh/dy 0 ] … … 2947 2947 int DOFPERGRID=4; 2948 2948 2949 double dh1dh7 _basic[calculationdof][numgrids+1];2949 double dh1dh7[calculationdof][numgrids+1]; 2950 2950 double l1l6[numgrids]; 2951 2951 2952 2952 2953 /*Get dh1dh7 in basiccoordinate system: */2954 GetNodalFunctionsDerivatives BasicStokes(&dh1dh7_basic[0][0],xyz_list, gauss_coord);2953 /*Get dh1dh7 in actual coordinate system: */ 2954 GetNodalFunctionsDerivativesStokes(&dh1dh7[0][0],xyz_list, gauss_coord); 2955 2955 2956 2956 GetNodalFunctions(l1l6, gauss_coord); … … 2958 2958 #ifdef _ISSM_DEBUG_ 2959 2959 for (i=0;i<7;i++){ 2960 printf("Node %i dh/dx=%lf dh/dy=%lf dh/dz=%lf \n",i,dh1dh7 _basic[0][i],dh1dh7_basic[1][i],dh1dh7_basic[2][i]);2960 printf("Node %i dh/dx=%lf dh/dy=%lf dh/dz=%lf \n",i,dh1dh7[0][i],dh1dh7[1][i],dh1dh7[2][i]); 2961 2961 } 2962 2962 … … 2965 2965 /*Build B: */ 2966 2966 for (i=0;i<numgrids+1;i++){ 2967 *(B+(DOFPERGRID*numgrids+3)*0+DOFPERGRID*i)=dh1dh7 _basic[0][i]; //B[0][DOFPERGRID*i]=dh1dh6_basic[0][i];2967 *(B+(DOFPERGRID*numgrids+3)*0+DOFPERGRID*i)=dh1dh7[0][i]; //B[0][DOFPERGRID*i]=dh1dh6[0][i]; 2968 2968 *(B+(DOFPERGRID*numgrids+3)*0+DOFPERGRID*i+1)=0; 2969 2969 *(B+(DOFPERGRID*numgrids+3)*0+DOFPERGRID*i+2)=0; 2970 2970 *(B+(DOFPERGRID*numgrids+3)*1+DOFPERGRID*i)=0; 2971 *(B+(DOFPERGRID*numgrids+3)*1+DOFPERGRID*i+1)=dh1dh7 _basic[1][i];2971 *(B+(DOFPERGRID*numgrids+3)*1+DOFPERGRID*i+1)=dh1dh7[1][i]; 2972 2972 *(B+(DOFPERGRID*numgrids+3)*1+DOFPERGRID*i+2)=0; 2973 2973 *(B+(DOFPERGRID*numgrids+3)*2+DOFPERGRID*i)=0; 2974 2974 *(B+(DOFPERGRID*numgrids+3)*2+DOFPERGRID*i+1)=0; 2975 *(B+(DOFPERGRID*numgrids+3)*2+DOFPERGRID*i+2)=dh1dh7 _basic[2][i];2976 *(B+(DOFPERGRID*numgrids+3)*3+DOFPERGRID*i)=(float).5*dh1dh7 _basic[1][i];2977 *(B+(DOFPERGRID*numgrids+3)*3+DOFPERGRID*i+1)=(float).5*dh1dh7 _basic[0][i];2975 *(B+(DOFPERGRID*numgrids+3)*2+DOFPERGRID*i+2)=dh1dh7[2][i]; 2976 *(B+(DOFPERGRID*numgrids+3)*3+DOFPERGRID*i)=(float).5*dh1dh7[1][i]; 2977 *(B+(DOFPERGRID*numgrids+3)*3+DOFPERGRID*i+1)=(float).5*dh1dh7[0][i]; 2978 2978 *(B+(DOFPERGRID*numgrids+3)*3+DOFPERGRID*i+2)=0; 2979 *(B+(DOFPERGRID*numgrids+3)*4+DOFPERGRID*i)=(float).5*dh1dh7 _basic[2][i];2979 *(B+(DOFPERGRID*numgrids+3)*4+DOFPERGRID*i)=(float).5*dh1dh7[2][i]; 2980 2980 *(B+(DOFPERGRID*numgrids+3)*4+DOFPERGRID*i+1)=0; 2981 *(B+(DOFPERGRID*numgrids+3)*4+DOFPERGRID*i+2)=(float).5*dh1dh7 _basic[0][i];2981 *(B+(DOFPERGRID*numgrids+3)*4+DOFPERGRID*i+2)=(float).5*dh1dh7[0][i]; 2982 2982 *(B+(DOFPERGRID*numgrids+3)*5+DOFPERGRID*i)=0; 2983 *(B+(DOFPERGRID*numgrids+3)*5+DOFPERGRID*i+1)=(float).5*dh1dh7 _basic[2][i];2984 *(B+(DOFPERGRID*numgrids+3)*5+DOFPERGRID*i+2)=(float).5*dh1dh7 _basic[1][i];2983 *(B+(DOFPERGRID*numgrids+3)*5+DOFPERGRID*i+1)=(float).5*dh1dh7[2][i]; 2984 *(B+(DOFPERGRID*numgrids+3)*5+DOFPERGRID*i+2)=(float).5*dh1dh7[1][i]; 2985 2985 *(B+(DOFPERGRID*numgrids+3)*6+DOFPERGRID*i)=0; 2986 2986 *(B+(DOFPERGRID*numgrids+3)*6+DOFPERGRID*i+1)=0; 2987 2987 *(B+(DOFPERGRID*numgrids+3)*6+DOFPERGRID*i+2)=0; 2988 *(B+(DOFPERGRID*numgrids+3)*7+DOFPERGRID*i)=dh1dh7 _basic[0][i];2989 *(B+(DOFPERGRID*numgrids+3)*7+DOFPERGRID*i+1)=dh1dh7 _basic[1][i];2990 *(B+(DOFPERGRID*numgrids+3)*7+DOFPERGRID*i+2)=dh1dh7 _basic[2][i];2988 *(B+(DOFPERGRID*numgrids+3)*7+DOFPERGRID*i)=dh1dh7[0][i]; 2989 *(B+(DOFPERGRID*numgrids+3)*7+DOFPERGRID*i+1)=dh1dh7[1][i]; 2990 *(B+(DOFPERGRID*numgrids+3)*7+DOFPERGRID*i+2)=dh1dh7[2][i]; 2991 2991 } 2992 2992 … … 3041 3041 #undef __FUNCT__ 3042 3042 #define __FUNCT__ "Penta::GetJacobian" 3043 void Penta::GetJacobian(double* J, double* xyz_list,double* gauss_ l1l2l3l4){3043 void Penta::GetJacobian(double* J, double* xyz_list,double* gauss_coord){ 3044 3044 3045 3045 const int NDOF3=3; … … 3059 3059 3060 3060 /*Figure out xi,eta and zi (parametric coordinates), for this gaussian point: */ 3061 A1=gauss_ l1l2l3l4[0];3062 A2=gauss_ l1l2l3l4[1];3063 A3=gauss_ l1l2l3l4[2];3061 A1=gauss_coord[0]; 3062 A2=gauss_coord[1]; 3063 A3=gauss_coord[2]; 3064 3064 3065 3065 xi=A2-A1; 3066 3066 eta=sqrt3*A3; 3067 zi=gauss_ l1l2l3l4[3];3067 zi=gauss_coord[3]; 3068 3068 3069 3069 x1=*(xyz_list+3*0+0); … … 3114 3114 #undef __FUNCT__ 3115 3115 #define __FUNCT__ "Penta::GetJacobianDeterminant" 3116 void Penta::GetJacobianDeterminant(double* Jdet, double* xyz_list,double* gauss_ l1l2l3l4){3116 void Penta::GetJacobianDeterminant(double* Jdet, double* xyz_list,double* gauss_coord){ 3117 3117 3118 3118 /*On a penta, Jacobian varies according to coordinates. We need to get the Jacobian, and take … … 3122 3122 double J[NDOF3][NDOF3]; 3123 3123 3124 GetJacobian(&J[0][0],xyz_list,gauss_ l1l2l3l4);3124 GetJacobian(&J[0][0],xyz_list,gauss_coord); 3125 3125 3126 3126 *Jdet= J[0][0]*J[1][1]*J[2][2]-J[0][0]*J[1][2]*J[2][1]-J[1][0]*J[0][1]*J[2][2]+J[1][0]*J[0][2]*J[2][1]+J[2][0]*J[0][1]*J[1][2]-J[2][0]*J[0][2]*J[1][1]; … … 3137 3137 /* 3138 3138 * Compute L matrix. L=[L1 L2 L3] where Li is square and of size numdof. 3139 * For grid i, Li can be expressed in the basiccoordinate system3139 * For grid i, Li can be expressed in the actual coordinate system 3140 3140 * by: 3141 * Li _basic=[ h 0 0 0]3141 * Li=[ h 0 0 0] 3142 3142 * [ 0 h 0 0] 3143 3143 * [ 0 0 h 0] … … 3163 3163 3164 3164 3165 /*Get l1l2l3 in basiccoordinate system: */3165 /*Get l1l2l3 in actual coordinate system: */ 3166 3166 l1l2l3[0]=gauss_coord_tria[0]; 3167 3167 l1l2l3[1]=gauss_coord_tria[1]; … … 3177 3177 /*Build LStokes: */ 3178 3178 for (i=0;i<3;i++){ 3179 *(LStokes+num_dof*numgrids2d*0+num_dof*i)=l1l2l3[i]; //LStokes[0][NDOF2*i]=dh1dh 2dh3_basic[0][i];3179 *(LStokes+num_dof*numgrids2d*0+num_dof*i)=l1l2l3[i]; //LStokes[0][NDOF2*i]=dh1dh3[0][i]; 3180 3180 *(LStokes+num_dof*numgrids2d*0+num_dof*i+1)=0; 3181 3181 *(LStokes+num_dof*numgrids2d*0+num_dof*i+2)=0; … … 3244 3244 /* 3245 3245 * Compute Lprime matrix. Lprime=[Lp1 Lp2 Lp3] where Lpi is square and of size numdof. 3246 * For grid i, Lpi can be expressed in the basiccoordinate system3246 * For grid i, Lpi can be expressed in the actual coordinate system 3247 3247 * by: 3248 * Lpi _basic=[ h 0 0 0]3248 * Lpi=[ h 0 0 0] 3249 3249 * [ 0 h 0 0] 3250 3250 * [ h 0 0 0] … … 3268 3268 3269 3269 double l1l2l3[numgrids2d]; 3270 double dh1dh6 _basic[3][6];3271 3272 3273 /*Get l1l2l3 in basiccoordinate system: */3270 double dh1dh6[3][6]; 3271 3272 3273 /*Get l1l2l3 in actual coordinate system: */ 3274 3274 l1l2l3[0]=gauss_coord_tria[0]; 3275 3275 l1l2l3[1]=gauss_coord_tria[1]; 3276 3276 l1l2l3[2]=gauss_coord_tria[2]; 3277 3277 3278 GetNodalFunctionsDerivatives Basic(&dh1dh6_basic[0][0],xyz_list,gauss_coord);3278 GetNodalFunctionsDerivatives(&dh1dh6[0][0],xyz_list,gauss_coord); 3279 3279 3280 3280 #ifdef _DELUG_ … … 3286 3286 /*Build LprimeStokes: */ 3287 3287 for (i=0;i<3;i++){ 3288 *(LprimeStokes+num_dof*numgrids2d*0+num_dof*i)=l1l2l3[i]; //LprimeStokes[0][NDOF2*i]=dh1dh 2dh3_basic[0][i];3288 *(LprimeStokes+num_dof*numgrids2d*0+num_dof*i)=l1l2l3[i]; //LprimeStokes[0][NDOF2*i]=dh1dh3[0][i]; 3289 3289 *(LprimeStokes+num_dof*numgrids2d*0+num_dof*i+1)=0; 3290 3290 *(LprimeStokes+num_dof*numgrids2d*0+num_dof*i+2)=0; … … 3312 3312 *(LprimeStokes+num_dof*numgrids2d*6+num_dof*i)=0; 3313 3313 *(LprimeStokes+num_dof*numgrids2d*6+num_dof*i+1)=0; 3314 *(LprimeStokes+num_dof*numgrids2d*6+num_dof*i+2)=dh1dh6 _basic[2][i];3314 *(LprimeStokes+num_dof*numgrids2d*6+num_dof*i+2)=dh1dh6[2][i]; 3315 3315 *(LprimeStokes+num_dof*numgrids2d*6+num_dof*i+3)=0; 3316 3316 *(LprimeStokes+num_dof*numgrids2d*7+num_dof*i)=0; 3317 3317 *(LprimeStokes+num_dof*numgrids2d*7+num_dof*i+1)=0; 3318 *(LprimeStokes+num_dof*numgrids2d*7+num_dof*i+2)=dh1dh6 _basic[2][i];3318 *(LprimeStokes+num_dof*numgrids2d*7+num_dof*i+2)=dh1dh6[2][i]; 3319 3319 *(LprimeStokes+num_dof*numgrids2d*7+num_dof*i+3)=0; 3320 3320 *(LprimeStokes+num_dof*numgrids2d*8+num_dof*i)=0; 3321 3321 *(LprimeStokes+num_dof*numgrids2d*8+num_dof*i+1)=0; 3322 *(LprimeStokes+num_dof*numgrids2d*8+num_dof*i+2)=dh1dh6 _basic[2][i];3322 *(LprimeStokes+num_dof*numgrids2d*8+num_dof*i+2)=dh1dh6[2][i]; 3323 3323 *(LprimeStokes+num_dof*numgrids2d*8+num_dof*i+3)=0; 3324 *(LprimeStokes+num_dof*numgrids2d*9+num_dof*i)=dh1dh6 _basic[2][i];3324 *(LprimeStokes+num_dof*numgrids2d*9+num_dof*i)=dh1dh6[2][i]; 3325 3325 *(LprimeStokes+num_dof*numgrids2d*9+num_dof*i+1)=0; 3326 *(LprimeStokes+num_dof*numgrids2d*9+num_dof*i+2)=dh1dh6 _basic[0][i];3326 *(LprimeStokes+num_dof*numgrids2d*9+num_dof*i+2)=dh1dh6[0][i]; 3327 3327 *(LprimeStokes+num_dof*numgrids2d*9+num_dof*i+3)=0; 3328 3328 *(LprimeStokes+num_dof*numgrids2d*10+num_dof*i)=0; 3329 *(LprimeStokes+num_dof*numgrids2d*10+num_dof*i+1)=dh1dh6 _basic[2][i];3330 *(LprimeStokes+num_dof*numgrids2d*10+num_dof*i+2)=dh1dh6 _basic[1][i];3329 *(LprimeStokes+num_dof*numgrids2d*10+num_dof*i+1)=dh1dh6[2][i]; 3330 *(LprimeStokes+num_dof*numgrids2d*10+num_dof*i+2)=dh1dh6[1][i]; 3331 3331 *(LprimeStokes+num_dof*numgrids2d*10+num_dof*i+3)=0; 3332 3332 *(LprimeStokes+num_dof*numgrids2d*11+num_dof*i)=0; … … 3386 3386 } 3387 3387 /*}}}*/ 3388 /*FUNCTION GetNodalFunctionsDerivatives Basic{{{1*/3388 /*FUNCTION GetNodalFunctionsDerivatives {{{1*/ 3389 3389 #undef __FUNCT__ 3390 #define __FUNCT__ "Penta::GetNodalFunctionsDerivatives Basic"3391 void Penta::GetNodalFunctionsDerivatives Basic(double* dh1dh2dh3dh4dh5dh6_basic,double* xyz_list, double* gauss_l1l2l3l4){3392 3393 /*This routine returns the values of the nodal functions derivatives (with respect to the basiccoordinate system: */3390 #define __FUNCT__ "Penta::GetNodalFunctionsDerivatives" 3391 void Penta::GetNodalFunctionsDerivatives(double* dh1dh6,double* xyz_list, double* gauss_coord){ 3392 3393 /*This routine returns the values of the nodal functions derivatives (with respect to the actual coordinate system: */ 3394 3394 3395 3395 … … 3398 3398 const int numgrids=6; 3399 3399 3400 double dh1dh 2dh3dh4dh5dh6_param[NDOF3][numgrids];3400 double dh1dh6_ref[NDOF3][numgrids]; 3401 3401 double Jinv[NDOF3][NDOF3]; 3402 3402 3403 3403 /*Get derivative values with respect to parametric coordinate system: */ 3404 GetNodalFunctionsDerivatives Params(&dh1dh2dh3dh4dh5dh6_param[0][0], gauss_l1l2l3l4);3404 GetNodalFunctionsDerivativesReference(&dh1dh6_ref[0][0], gauss_coord); 3405 3405 3406 3406 /*Get Jacobian invert: */ 3407 GetJacobianInvert(&Jinv[0][0], xyz_list, gauss_ l1l2l3l4);3408 3409 /*Build dh1dh 2dh3_basic:3407 GetJacobianInvert(&Jinv[0][0], xyz_list, gauss_coord); 3408 3409 /*Build dh1dh3: 3410 3410 * 3411 3411 * [dhi/dx]= Jinv*[dhi/dr] … … 3415 3415 3416 3416 for (i=0;i<numgrids;i++){ 3417 *(dh1dh 2dh3dh4dh5dh6_basic+numgrids*0+i)=Jinv[0][0]*dh1dh2dh3dh4dh5dh6_param[0][i]+Jinv[0][1]*dh1dh2dh3dh4dh5dh6_param[1][i]+Jinv[0][2]*dh1dh2dh3dh4dh5dh6_param[2][i];3418 *(dh1dh 2dh3dh4dh5dh6_basic+numgrids*1+i)=Jinv[1][0]*dh1dh2dh3dh4dh5dh6_param[0][i]+Jinv[1][1]*dh1dh2dh3dh4dh5dh6_param[1][i]+Jinv[1][2]*dh1dh2dh3dh4dh5dh6_param[2][i];3419 *(dh1dh 2dh3dh4dh5dh6_basic+numgrids*2+i)=Jinv[2][0]*dh1dh2dh3dh4dh5dh6_param[0][i]+Jinv[2][1]*dh1dh2dh3dh4dh5dh6_param[1][i]+Jinv[2][2]*dh1dh2dh3dh4dh5dh6_param[2][i];3420 } 3421 3422 } 3423 /*}}}*/ 3424 /*FUNCTION GetNodalFunctionsDerivatives BasicStokes {{{1*/3425 #undef __FUNCT__ 3426 #define __FUNCT__ "Penta::GetNodalFunctionsDerivatives BasicStokes"3427 void Penta::GetNodalFunctionsDerivatives BasicStokes(double* dh1dh7_basic,double* xyz_list, double* gauss_coord){3417 *(dh1dh6+numgrids*0+i)=Jinv[0][0]*dh1dh6_ref[0][i]+Jinv[0][1]*dh1dh6_ref[1][i]+Jinv[0][2]*dh1dh6_ref[2][i]; 3418 *(dh1dh6+numgrids*1+i)=Jinv[1][0]*dh1dh6_ref[0][i]+Jinv[1][1]*dh1dh6_ref[1][i]+Jinv[1][2]*dh1dh6_ref[2][i]; 3419 *(dh1dh6+numgrids*2+i)=Jinv[2][0]*dh1dh6_ref[0][i]+Jinv[2][1]*dh1dh6_ref[1][i]+Jinv[2][2]*dh1dh6_ref[2][i]; 3420 } 3421 3422 } 3423 /*}}}*/ 3424 /*FUNCTION GetNodalFunctionsDerivativesStokes {{{1*/ 3425 #undef __FUNCT__ 3426 #define __FUNCT__ "Penta::GetNodalFunctionsDerivativesStokes" 3427 void Penta::GetNodalFunctionsDerivativesStokes(double* dh1dh7,double* xyz_list, double* gauss_coord){ 3428 3428 3429 3429 /*This routine returns the values of the nodal functions derivatives (with respect to the 3430 * basiccoordinate system: */3430 * actual coordinate system: */ 3431 3431 3432 3432 int i; 3433 3433 3434 3434 const int numgrids=7; 3435 double dh1dh7_ param[3][numgrids];3435 double dh1dh7_ref[3][numgrids]; 3436 3436 double Jinv[3][3]; 3437 3437 3438 3438 3439 3439 /*Get derivative values with respect to parametric coordinate system: */ 3440 GetNodalFunctionsDerivatives ParamsStokes(&dh1dh7_param[0][0], gauss_coord);3440 GetNodalFunctionsDerivativesReferenceStokes(&dh1dh7_ref[0][0], gauss_coord); 3441 3441 3442 3442 /*Get Jacobian invert: */ 3443 3443 GetJacobianInvert(&Jinv[0][0], xyz_list, gauss_coord); 3444 3444 3445 /*Build dh1dh6 _basic:3445 /*Build dh1dh6: 3446 3446 * 3447 3447 * [dhi/dx]= Jinv'*[dhi/dr] … … 3451 3451 3452 3452 for (i=0;i<numgrids;i++){ 3453 *(dh1dh7 _basic+numgrids*0+i)=Jinv[0][0]*dh1dh7_param[0][i]+Jinv[0][1]*dh1dh7_param[1][i]+Jinv[0][2]*dh1dh7_param[2][i];3454 *(dh1dh7 _basic+numgrids*1+i)=Jinv[1][0]*dh1dh7_param[0][i]+Jinv[1][1]*dh1dh7_param[1][i]+Jinv[1][2]*dh1dh7_param[2][i];3455 *(dh1dh7 _basic+numgrids*2+i)=Jinv[2][0]*dh1dh7_param[0][i]+Jinv[2][1]*dh1dh7_param[1][i]+Jinv[2][2]*dh1dh7_param[2][i];3456 } 3457 3458 } 3459 /*}}}*/ 3460 /*FUNCTION GetNodalFunctionsDerivatives Params{{{1*/3453 *(dh1dh7+numgrids*0+i)=Jinv[0][0]*dh1dh7_ref[0][i]+Jinv[0][1]*dh1dh7_ref[1][i]+Jinv[0][2]*dh1dh7_ref[2][i]; 3454 *(dh1dh7+numgrids*1+i)=Jinv[1][0]*dh1dh7_ref[0][i]+Jinv[1][1]*dh1dh7_ref[1][i]+Jinv[1][2]*dh1dh7_ref[2][i]; 3455 *(dh1dh7+numgrids*2+i)=Jinv[2][0]*dh1dh7_ref[0][i]+Jinv[2][1]*dh1dh7_ref[1][i]+Jinv[2][2]*dh1dh7_ref[2][i]; 3456 } 3457 3458 } 3459 /*}}}*/ 3460 /*FUNCTION GetNodalFunctionsDerivativesReference {{{1*/ 3461 3461 #undef __FUNCT__ 3462 #define __FUNCT__ "Penta::GetNodalFunctionsDerivatives Params"3463 void Penta::GetNodalFunctionsDerivatives Params(double* dl1dl2dl3dl4dl5dl6,double* gauss_l1l2l3l4){3462 #define __FUNCT__ "Penta::GetNodalFunctionsDerivativesReference" 3463 void Penta::GetNodalFunctionsDerivativesReference(double* dl1dl6,double* gauss_coord){ 3464 3464 3465 3465 /*This routine returns the values of the nodal functions derivatives (with respect to the … … 3470 3470 double sqrt3=sqrt(3.0); 3471 3471 3472 A1=gauss_ l1l2l3l4[0]; //first area coordinate value. In term of xi and eta: A1=(1-xi)/2-eta/(2*sqrt(3));3473 A2=gauss_ l1l2l3l4[1]; //second area coordinate value In term of xi and eta: A2=(1+xi)/2-eta/(2*sqrt(3));3474 A3=gauss_ l1l2l3l4[2]; //third area coordinate value In term of xi and eta: A3=y/sqrt(3);3475 z=gauss_ l1l2l3l4[3]; //fourth vertical coordinate value. Corresponding nodal function: (1-z)/2 and (1+z)/23472 A1=gauss_coord[0]; //first area coordinate value. In term of xi and eta: A1=(1-xi)/2-eta/(2*sqrt(3)); 3473 A2=gauss_coord[1]; //second area coordinate value In term of xi and eta: A2=(1+xi)/2-eta/(2*sqrt(3)); 3474 A3=gauss_coord[2]; //third area coordinate value In term of xi and eta: A3=y/sqrt(3); 3475 z=gauss_coord[3]; //fourth vertical coordinate value. Corresponding nodal function: (1-z)/2 and (1+z)/2 3476 3476 3477 3477 3478 3478 /*First nodal function derivatives. The corresponding nodal function is N=A1*(1-z)/2. Its derivatives follow*/ 3479 *(dl1dl 2dl3dl4dl5dl6+numgrids*0+0)=-1.0/2.0*(1.0-z)/2.0;3480 *(dl1dl 2dl3dl4dl5dl6+numgrids*1+0)=-1.0/2.0/sqrt3*(1.0-z)/2.0;3481 *(dl1dl 2dl3dl4dl5dl6+numgrids*2+0)=-1.0/2.0*A1;3479 *(dl1dl6+numgrids*0+0)=-1.0/2.0*(1.0-z)/2.0; 3480 *(dl1dl6+numgrids*1+0)=-1.0/2.0/sqrt3*(1.0-z)/2.0; 3481 *(dl1dl6+numgrids*2+0)=-1.0/2.0*A1; 3482 3482 3483 3483 /*Second nodal function: The corresponding nodal function is N=A2*(1-z)/2. Its derivatives follow*/ 3484 *(dl1dl 2dl3dl4dl5dl6+numgrids*0+1)=1.0/2.0*(1.0-z)/2.0;3485 *(dl1dl 2dl3dl4dl5dl6+numgrids*1+1)=-1.0/2.0/sqrt3*(1.0-z)/2.0;3486 *(dl1dl 2dl3dl4dl5dl6+numgrids*2+1)=-1.0/2.0*A2;3484 *(dl1dl6+numgrids*0+1)=1.0/2.0*(1.0-z)/2.0; 3485 *(dl1dl6+numgrids*1+1)=-1.0/2.0/sqrt3*(1.0-z)/2.0; 3486 *(dl1dl6+numgrids*2+1)=-1.0/2.0*A2; 3487 3487 3488 3488 /*Third nodal function: The corresponding nodal function is N=A3*(1-z)/2. Its derivatives follow*/ 3489 *(dl1dl 2dl3dl4dl5dl6+numgrids*0+2)=0.0;3490 *(dl1dl 2dl3dl4dl5dl6+numgrids*1+2)=1.0/sqrt3*(1.0-z)/2.0;3491 *(dl1dl 2dl3dl4dl5dl6+numgrids*2+2)=-1.0/2.0*A3;3489 *(dl1dl6+numgrids*0+2)=0.0; 3490 *(dl1dl6+numgrids*1+2)=1.0/sqrt3*(1.0-z)/2.0; 3491 *(dl1dl6+numgrids*2+2)=-1.0/2.0*A3; 3492 3492 3493 3493 /*Fourth nodal function: The corresponding nodal function is N=A1*(1+z)/2. Its derivatives follow*/ 3494 *(dl1dl 2dl3dl4dl5dl6+numgrids*0+3)=-1.0/2.0*(1.0+z)/2.0;3495 *(dl1dl 2dl3dl4dl5dl6+numgrids*1+3)=-1.0/2.0/sqrt3*(1.0+z)/2.0;3496 *(dl1dl 2dl3dl4dl5dl6+numgrids*2+3)=1.0/2.0*A1;3494 *(dl1dl6+numgrids*0+3)=-1.0/2.0*(1.0+z)/2.0; 3495 *(dl1dl6+numgrids*1+3)=-1.0/2.0/sqrt3*(1.0+z)/2.0; 3496 *(dl1dl6+numgrids*2+3)=1.0/2.0*A1; 3497 3497 3498 3498 /*Fifth nodal function: The corresponding nodal function is N=A2*(1+z)/2. Its derivatives follow*/ 3499 *(dl1dl 2dl3dl4dl5dl6+numgrids*0+4)=1.0/2.0*(1.0+z)/2.0;3500 *(dl1dl 2dl3dl4dl5dl6+numgrids*1+4)=-1.0/2.0/sqrt3*(1.0+z)/2.0;3501 *(dl1dl 2dl3dl4dl5dl6+numgrids*2+4)=1.0/2.0*A2;3499 *(dl1dl6+numgrids*0+4)=1.0/2.0*(1.0+z)/2.0; 3500 *(dl1dl6+numgrids*1+4)=-1.0/2.0/sqrt3*(1.0+z)/2.0; 3501 *(dl1dl6+numgrids*2+4)=1.0/2.0*A2; 3502 3502 3503 3503 /*Sixth nodal function: The corresponding nodal function is N=A3*(1+z)/2. Its derivatives follow*/ 3504 *(dl1dl 2dl3dl4dl5dl6+numgrids*0+5)=0.0;3505 *(dl1dl 2dl3dl4dl5dl6+numgrids*1+5)=1.0/sqrt3*(1.0+z)/2.0;3506 *(dl1dl 2dl3dl4dl5dl6+numgrids*2+5)=1.0/2.0*A3;3507 } 3508 /*}}}*/ 3509 /*FUNCTION GetNodalFunctionsDerivatives ParamsStokes {{{1*/3510 #undef __FUNCT__ 3511 #define __FUNCT__ "Penta::GetNodalFunctionsDerivatives ParamsStokes"3512 void Penta::GetNodalFunctionsDerivatives ParamsStokes(double* dl1dl7,double* gauss_coord){3504 *(dl1dl6+numgrids*0+5)=0.0; 3505 *(dl1dl6+numgrids*1+5)=1.0/sqrt3*(1.0+z)/2.0; 3506 *(dl1dl6+numgrids*2+5)=1.0/2.0*A3; 3507 } 3508 /*}}}*/ 3509 /*FUNCTION GetNodalFunctionsDerivativesReferenceStokes {{{1*/ 3510 #undef __FUNCT__ 3511 #define __FUNCT__ "Penta::GetNodalFunctionsDerivativesReferenceStokes" 3512 void Penta::GetNodalFunctionsDerivativesReferenceStokes(double* dl1dl7,double* gauss_coord){ 3513 3513 3514 3514 /*This routine returns the values of the nodal functions derivatives (with respect to the … … 3592 3592 #undef __FUNCT__ 3593 3593 #define __FUNCT__ "Penta::GetParameterDerivativeValue" 3594 void Penta::GetParameterDerivativeValue(double* p, double* p_list,double* xyz_list, double* gauss_ l1l2l3l4){3595 3596 /*From grid values of parameter p (p_list[0], p_list[1], p_list[2], p_list[3], p_list[4] and p_list[4]), return parameter derivative value at gaussian point specified by gauss_ l1l2l3l4:3594 void Penta::GetParameterDerivativeValue(double* p, double* p_list,double* xyz_list, double* gauss_coord){ 3595 3596 /*From grid values of parameter p (p_list[0], p_list[1], p_list[2], p_list[3], p_list[4] and p_list[4]), return parameter derivative value at gaussian point specified by gauss_coord: 3597 3597 * dp/dx=p_list[0]*dh1/dx+p_list[1]*dh2/dx+p_list[2]*dh3/dx+p_list[3]*dh4/dx+p_list[4]*dh5/dx+p_list[5]*dh6/dx; 3598 3598 * dp/dy=p_list[0]*dh1/dy+p_list[1]*dh2/dy+p_list[2]*dh3/dy+p_list[3]*dh4/dy+p_list[4]*dh5/dy+p_list[5]*dh6/dy; … … 3604 3604 const int NDOF3=3; 3605 3605 const int numgrids=6; 3606 double dh1dh 2dh3dh4dh5dh6_basic[NDOF3][numgrids];3607 3608 /*Get dh1dh 2dh3dh4dh5dh6_basic in basiccoordinate system: */3609 GetNodalFunctionsDerivatives Basic(&dh1dh2dh3dh4dh5dh6_basic[0][0],xyz_list, gauss_l1l2l3l4);3610 3611 *(p+0)=p_list[0]*dh1dh 2dh3dh4dh5dh6_basic[0][0]+p_list[1]*dh1dh2dh3dh4dh5dh6_basic[0][1]+p_list[2]*dh1dh2dh3dh4dh5dh6_basic[0][2]+p_list[3]*dh1dh2dh3dh4dh5dh6_basic[0][3]+p_list[4]*dh1dh2dh3dh4dh5dh6_basic[0][4]+p_list[5]*dh1dh2dh3dh4dh5dh6_basic[0][5];3606 double dh1dh6[NDOF3][numgrids]; 3607 3608 /*Get dh1dh6 in actual coordinate system: */ 3609 GetNodalFunctionsDerivatives(&dh1dh6[0][0],xyz_list, gauss_coord); 3610 3611 *(p+0)=p_list[0]*dh1dh6[0][0]+p_list[1]*dh1dh6[0][1]+p_list[2]*dh1dh6[0][2]+p_list[3]*dh1dh6[0][3]+p_list[4]*dh1dh6[0][4]+p_list[5]*dh1dh6[0][5]; 3612 3612 ; 3613 *(p+1)=p_list[0]*dh1dh 2dh3dh4dh5dh6_basic[1][0]+p_list[1]*dh1dh2dh3dh4dh5dh6_basic[1][1]+p_list[2]*dh1dh2dh3dh4dh5dh6_basic[1][2]+p_list[3]*dh1dh2dh3dh4dh5dh6_basic[1][3]+p_list[4]*dh1dh2dh3dh4dh5dh6_basic[1][4]+p_list[5]*dh1dh2dh3dh4dh5dh6_basic[1][5];3614 3615 *(p+2)=p_list[0]*dh1dh 2dh3dh4dh5dh6_basic[2][0]+p_list[1]*dh1dh2dh3dh4dh5dh6_basic[2][1]+p_list[2]*dh1dh2dh3dh4dh5dh6_basic[2][2]+p_list[3]*dh1dh2dh3dh4dh5dh6_basic[2][3]+p_list[4]*dh1dh2dh3dh4dh5dh6_basic[2][4]+p_list[5]*dh1dh2dh3dh4dh5dh6_basic[2][5];3613 *(p+1)=p_list[0]*dh1dh6[1][0]+p_list[1]*dh1dh6[1][1]+p_list[2]*dh1dh6[1][2]+p_list[3]*dh1dh6[1][3]+p_list[4]*dh1dh6[1][4]+p_list[5]*dh1dh6[1][5]; 3614 3615 *(p+2)=p_list[0]*dh1dh6[2][0]+p_list[1]*dh1dh6[2][1]+p_list[2]*dh1dh6[2][2]+p_list[3]*dh1dh6[2][3]+p_list[4]*dh1dh6[2][4]+p_list[5]*dh1dh6[2][5]; 3616 3616 3617 3617 } … … 3620 3620 #undef __FUNCT__ 3621 3621 #define __FUNCT__ "Penta::GetParameterValue" 3622 void Penta::GetParameterValue(double* pvalue, double* v_list,double* gauss_ l1l2l3l4){3622 void Penta::GetParameterValue(double* pvalue, double* v_list,double* gauss_coord){ 3623 3623 3624 3624 const int numgrids=6; 3625 double l1l 2l3l4l5l6[numgrids];3626 3627 GetNodalFunctions(&l1l 2l3l4l5l6[0], gauss_l1l2l3l4);3628 3629 *pvalue=l1l 2l3l4l5l6[0]*v_list[0]+l1l2l3l4l5l6[1]*v_list[1]+l1l2l3l4l5l6[2]*v_list[2]+l1l2l3l4l5l6[3]*v_list[3]+l1l2l3l4l5l6[4]*v_list[4]+l1l2l3l4l5l6[5]*v_list[5];3625 double l1l6[numgrids]; 3626 3627 GetNodalFunctions(&l1l6[0], gauss_coord); 3628 3629 *pvalue=l1l6[0]*v_list[0]+l1l6[1]*v_list[1]+l1l6[2]*v_list[2]+l1l6[3]*v_list[3]+l1l6[4]*v_list[4]+l1l6[5]*v_list[5]; 3630 3630 } 3631 3631 /*}}}*/ … … 3633 3633 #undef __FUNCT__ 3634 3634 #define __FUNCT__ "Penta::GetJacobianInvert" 3635 void Penta::GetJacobianInvert(double* Jinv, double* xyz_list,double* gauss_ l1l2l3l4){3635 void Penta::GetJacobianInvert(double* Jinv, double* xyz_list,double* gauss_coord){ 3636 3636 3637 3637 double Jdet; … … 3639 3639 3640 3640 /*Call Jacobian routine to get the jacobian:*/ 3641 GetJacobian(Jinv, xyz_list, gauss_ l1l2l3l4);3641 GetJacobian(Jinv, xyz_list, gauss_coord); 3642 3642 3643 3643 /*Invert Jacobian matrix: */ … … 3653 3653 #undef __FUNCT__ 3654 3654 #define __FUNCT__ "Penta::GetNodalFunctions" 3655 void Penta::GetNodalFunctions(double* l1l 2l3l4l5l6, double* gauss_l1l2l3l4){3655 void Penta::GetNodalFunctions(double* l1l6, double* gauss_coord){ 3656 3656 3657 3657 /*This routine returns the values of the nodal functions at the gaussian point.*/ 3658 3658 3659 l1l 2l3l4l5l6[0]=gauss_l1l2l3l4[0]*(1-gauss_l1l2l3l4[3])/2.0;3660 3661 l1l 2l3l4l5l6[1]=gauss_l1l2l3l4[1]*(1-gauss_l1l2l3l4[3])/2.0;3662 3663 l1l 2l3l4l5l6[2]=gauss_l1l2l3l4[2]*(1-gauss_l1l2l3l4[3])/2.0;3664 3665 l1l 2l3l4l5l6[3]=gauss_l1l2l3l4[0]*(1+gauss_l1l2l3l4[3])/2.0;3666 3667 l1l 2l3l4l5l6[4]=gauss_l1l2l3l4[1]*(1+gauss_l1l2l3l4[3])/2.0;3668 3669 l1l 2l3l4l5l6[5]=gauss_l1l2l3l4[2]*(1+gauss_l1l2l3l4[3])/2.0;3659 l1l6[0]=gauss_coord[0]*(1-gauss_coord[3])/2.0; 3660 3661 l1l6[1]=gauss_coord[1]*(1-gauss_coord[3])/2.0; 3662 3663 l1l6[2]=gauss_coord[2]*(1-gauss_coord[3])/2.0; 3664 3665 l1l6[3]=gauss_coord[0]*(1+gauss_coord[3])/2.0; 3666 3667 l1l6[4]=gauss_coord[1]*(1+gauss_coord[3])/2.0; 3668 3669 l1l6[5]=gauss_coord[2]*(1+gauss_coord[3])/2.0; 3670 3670 3671 3671 } … … 3730 3730 #undef __FUNCT__ 3731 3731 #define __FUNCT__ "Penta::GetStrainRate" 3732 void Penta::GetStrainRate(double* epsilon, double* velocity, double* xyz_list, double* gauss_ l1l2l3l4){3732 void Penta::GetStrainRate(double* epsilon, double* velocity, double* xyz_list, double* gauss_coord){ 3733 3733 3734 3734 int i; … … 3739 3739 3740 3740 /*Get B matrix: */ 3741 GetB(&B[0][0], xyz_list, gauss_ l1l2l3l4);3741 GetB(&B[0][0], xyz_list, gauss_coord); 3742 3742 3743 3743 #ifdef _ISSM_DEBUG_ -
issm/trunk/src/c/objects/Penta.h
r2722 r2956 95 95 void* SpawnTria(int g0, int g1, int g2); 96 96 97 void GetStrainRate(double* epsilon, double* velocity, double* xyz_list, double* gauss_ l1l2l3l4);98 void GetB(double* pB, double* xyz_list, double* gauss_ l1l2l3l4);99 void GetBPrime(double* B, double* xyz_list, double* gauss_ l1l2l3l4);100 void GetB_vert(double* B, double* xyz_list, double* gauss_ l1l2l3l4);101 void GetBPrime_vert(double* B, double* xyz_list, double* gauss_ l1l2l3l4);102 void GetJacobianDeterminant(double* Jdet, double* xyz_list,double* gauss_ l1l2l3l4);103 void GetNodalFunctionsDerivatives Basic(double* dh1dh2dh3dh4dh5dh6_basic,double* xyz_list, double* gauss_l1l2l3l4);104 void GetJacobian(double* J, double* xyz_list,double* gauss_ l1l2l3l4);105 void GetNodalFunctionsDerivatives Params(double* dl1dl2dl3dl4dl5dl6,double* gauss_l1l2l3l4);106 void GetJacobianInvert(double* Jinv, double* xyz_list,double* gauss_ l1l2l3l4);97 void GetStrainRate(double* epsilon, double* velocity, double* xyz_list, double* gauss_coord); 98 void GetB(double* pB, double* xyz_list, double* gauss_coord); 99 void GetBPrime(double* B, double* xyz_list, double* gauss_coord); 100 void GetB_vert(double* B, double* xyz_list, double* gauss_coord); 101 void GetBPrime_vert(double* B, double* xyz_list, double* gauss_coord); 102 void GetJacobianDeterminant(double* Jdet, double* xyz_list,double* gauss_coord); 103 void GetNodalFunctionsDerivatives(double* dh1dh6,double* xyz_list, double* gauss_coord); 104 void GetJacobian(double* J, double* xyz_list,double* gauss_coord); 105 void GetNodalFunctionsDerivativesReference(double* dl1dl6,double* gauss_coord); 106 void GetJacobianInvert(double* Jinv, double* xyz_list,double* gauss_coord); 107 107 void CreatePVectorDiagnosticHoriz( Vec pg, void* inputs,int analysis_type,int sub_analysis_type); 108 108 void CreatePVectorDiagnosticVert( Vec pg, void* inputs,int analysis_type,int sub_analysis_type); 109 void GetParameterValue(double* pvalue, double* v_list,double* gauss_ l1l2l3l4);110 void GetParameterDerivativeValue(double* p, double* p_list,double* xyz_list, double* gauss_ l1l2l3l4);111 void GetNodalFunctions(double* l1l 2l3l4l5l6, double* gauss_l1l2l3l4);109 void GetParameterValue(double* pvalue, double* v_list,double* gauss_coord); 110 void GetParameterDerivativeValue(double* p, double* p_list,double* xyz_list, double* gauss_coord); 111 void GetNodalFunctions(double* l1l6, double* gauss_coord); 112 112 void FieldExtrude(Vec field,double* field_serial,char* field_name, int iscollapsed); 113 113 void ComputePressure(Vec p_g); … … 131 131 void GetLStokes(double* LStokes, double* gauss_coord_tria); 132 132 void GetLprimeStokes(double* LprimeStokes, double* xyz_list, double* gauss_coord_tria, double* gauss_coord); 133 void GetNodalFunctionsDerivatives BasicStokes(double* dh1dh7_basic,double* xyz_list, double* gauss_coord);134 void GetNodalFunctionsDerivatives ParamsStokes(double* dl1dl7,double* gauss_coord);133 void GetNodalFunctionsDerivativesStokes(double* dh1dh7,double* xyz_list, double* gauss_coord); 134 void GetNodalFunctionsDerivativesReferenceStokes(double* dl1dl7,double* gauss_coord); 135 135 void ReduceVectorStokes(double* Pe_reduced, double* Ke_temp, double* Pe_temp); 136 136 void GetNodalFunctionsStokes(double* l1l7, double* gauss_coord); -
issm/trunk/src/c/objects/Tria.cpp
r2722 r2956 3054 3054 3055 3055 /*Compute B matrix. B=[B1 B2 B3] where Bi is of size 3*NDOF2. 3056 * For grid i, Bi can be expressed in the basiccoordinate system3056 * For grid i, Bi can be expressed in the actual coordinate system 3057 3057 * by: 3058 * Bi _basic=[ dh/dx 0 ]3058 * Bi=[ dh/dx 0 ] 3059 3059 * [ 0 dh/dy ] 3060 3060 * [ 1/2*dh/dy 1/2*dh/dx ] … … 3068 3068 const int numgrids=3; 3069 3069 3070 double dh1dh 2dh3_basic[NDOF2][numgrids];3071 3072 3073 /*Get dh1dh2dh3 in basiccoordinate system: */3074 GetNodalFunctionsDerivatives Basic(&dh1dh2dh3_basic[0][0],xyz_list, gauss_l1l2l3);3070 double dh1dh3[NDOF2][numgrids]; 3071 3072 3073 /*Get dh1dh2dh3 in actual coordinate system: */ 3074 GetNodalFunctionsDerivatives(&dh1dh3[0][0],xyz_list, gauss_l1l2l3); 3075 3075 3076 3076 #ifdef _ISSM_DEBUG_ 3077 3077 for (i=0;i<3;i++){ 3078 printf("Node %i dh/dx=%lf dh/dy=%lf \n",i,dh1dh 2dh3_basic[0][i],dh1dh2dh3_basic[1][i]);3078 printf("Node %i dh/dx=%lf dh/dy=%lf \n",i,dh1dh3[0][i],dh1dh3[1][i]); 3079 3079 } 3080 3080 #endif … … 3082 3082 /*Build B: */ 3083 3083 for (i=0;i<numgrids;i++){ 3084 *(B+NDOF2*numgrids*0+NDOF2*i)=dh1dh 2dh3_basic[0][i]; //B[0][NDOF2*i]=dh1dh2dh3_basic[0][i];3084 *(B+NDOF2*numgrids*0+NDOF2*i)=dh1dh3[0][i]; //B[0][NDOF2*i]=dh1dh3[0][i]; 3085 3085 *(B+NDOF2*numgrids*0+NDOF2*i+1)=0; 3086 3086 *(B+NDOF2*numgrids*1+NDOF2*i)=0; 3087 *(B+NDOF2*numgrids*1+NDOF2*i+1)=dh1dh 2dh3_basic[1][i];3088 *(B+NDOF2*numgrids*2+NDOF2*i)=(float).5*dh1dh 2dh3_basic[1][i];3089 *(B+NDOF2*numgrids*2+NDOF2*i+1)=(float).5*dh1dh 2dh3_basic[0][i];3087 *(B+NDOF2*numgrids*1+NDOF2*i+1)=dh1dh3[1][i]; 3088 *(B+NDOF2*numgrids*2+NDOF2*i)=(float).5*dh1dh3[1][i]; 3089 *(B+NDOF2*numgrids*2+NDOF2*i+1)=(float).5*dh1dh3[0][i]; 3090 3090 } 3091 3091 } … … 3098 3098 3099 3099 /*Compute B matrix. B=[B1 B2 B3] where Bi is of size 3*NDOF2. 3100 * For grid i, Bi can be expressed in the basiccoordinate system3100 * For grid i, Bi can be expressed in the actual coordinate system 3101 3101 * by: 3102 * Bi _basic=[ h ]3102 * Bi=[ h ] 3103 3103 * [ h ] 3104 3104 * where h is the interpolation function for grid i. … … 3114 3114 3115 3115 3116 /*Get dh1dh2dh3 in basiccoordinate system: */3116 /*Get dh1dh2dh3 in actual coordinate system: */ 3117 3117 GetNodalFunctions(&l1l2l3[0],gauss_l1l2l3); 3118 3118 … … 3145 3145 3146 3146 /*Compute B' matrix. B'=[B1' B2' B3'] where Bi' is of size 3*NDOF2. 3147 * For grid i, Bi' can be expressed in the basiccoordinate system3147 * For grid i, Bi' can be expressed in the actual coordinate system 3148 3148 * by: 3149 * Bi_prime __basic=[ 2*dh/dx dh/dy ]3149 * Bi_prime=[ 2*dh/dx dh/dy ] 3150 3150 * [ dh/dx 2*dh/dy] 3151 3151 * [dh/dy dh/dx] … … 3159 3159 const int numgrids=3; 3160 3160 3161 /*Same thing in the basiccoordinate system: */3162 double dh1dh 2dh3_basic[NDOF2][numgrids];3163 3164 3165 /*Get dh1dh2dh3 in basiccoordinates system : */3166 GetNodalFunctionsDerivatives Basic(&dh1dh2dh3_basic[0][0],xyz_list,gauss_l1l2l3);3161 /*Same thing in the actual coordinate system: */ 3162 double dh1dh3[NDOF2][numgrids]; 3163 3164 3165 /*Get dh1dh2dh3 in actual coordinates system : */ 3166 GetNodalFunctionsDerivatives(&dh1dh3[0][0],xyz_list,gauss_l1l2l3); 3167 3167 3168 3168 /*Build B': */ 3169 3169 for (i=0;i<numgrids;i++){ 3170 *(Bprime+NDOF2*numgrids*0+NDOF2*i)=2*dh1dh 2dh3_basic[0][i];3171 *(Bprime+NDOF2*numgrids*0+NDOF2*i+1)=dh1dh 2dh3_basic[1][i];3172 *(Bprime+NDOF2*numgrids*1+NDOF2*i)=dh1dh 2dh3_basic[0][i];3173 *(Bprime+NDOF2*numgrids*1+NDOF2*i+1)=2*dh1dh 2dh3_basic[1][i];3174 *(Bprime+NDOF2*numgrids*2+NDOF2*i)=dh1dh 2dh3_basic[1][i];3175 *(Bprime+NDOF2*numgrids*2+NDOF2*i+1)=dh1dh 2dh3_basic[0][i];3170 *(Bprime+NDOF2*numgrids*0+NDOF2*i)=2*dh1dh3[0][i]; 3171 *(Bprime+NDOF2*numgrids*0+NDOF2*i+1)=dh1dh3[1][i]; 3172 *(Bprime+NDOF2*numgrids*1+NDOF2*i)=dh1dh3[0][i]; 3173 *(Bprime+NDOF2*numgrids*1+NDOF2*i+1)=2*dh1dh3[1][i]; 3174 *(Bprime+NDOF2*numgrids*2+NDOF2*i)=dh1dh3[1][i]; 3175 *(Bprime+NDOF2*numgrids*2+NDOF2*i+1)=dh1dh3[0][i]; 3176 3176 } 3177 3177 } … … 3184 3184 3185 3185 /*Compute B' matrix. B'=[B1' B2' B3'] where Bi' is of size 3*NDOF2. 3186 * For grid i, Bi' can be expressed in the basiccoordinate system3186 * For grid i, Bi' can be expressed in the actual coordinate system 3187 3187 * by: 3188 * Bi_prime __basic=[ dh/dx ]3188 * Bi_prime=[ dh/dx ] 3189 3189 * [ dh/dy ] 3190 3190 * where h is the interpolation function for grid i. … … 3198 3198 const int numgrids=3; 3199 3199 3200 /*Same thing in the basiccoordinate system: */3201 double dh1dh 2dh3_basic[NDOF2][numgrids];3202 3203 /*Get dh1dh2dh3 in basiccoordinates system : */3204 GetNodalFunctionsDerivatives Basic(&dh1dh2dh3_basic[0][0],xyz_list,gauss_l1l2l3);3200 /*Same thing in the actual coordinate system: */ 3201 double dh1dh3[NDOF2][numgrids]; 3202 3203 /*Get dh1dh2dh3 in actual coordinates system : */ 3204 GetNodalFunctionsDerivatives(&dh1dh3[0][0],xyz_list,gauss_l1l2l3); 3205 3205 3206 3206 /*Build B': */ 3207 3207 for (i=0;i<numgrids;i++){ 3208 *(Bprime_prog+NDOF1*numgrids*0+NDOF1*i)=dh1dh 2dh3_basic[0][i];3209 *(Bprime_prog+NDOF1*numgrids*1+NDOF1*i)=dh1dh 2dh3_basic[1][i];3208 *(Bprime_prog+NDOF1*numgrids*0+NDOF1*i)=dh1dh3[0][i]; 3209 *(Bprime_prog+NDOF1*numgrids*1+NDOF1*i)=dh1dh3[1][i]; 3210 3210 } 3211 3211 } … … 3351 3351 3352 3352 /*Compute L matrix. L=[L1 L2 L3] where Li is square and of size numdof. 3353 * For grid i, Li can be expressed in the basiccoordinate system3353 * For grid i, Li can be expressed in the actual coordinate system 3354 3354 * by: 3355 3355 * numdof=1: 3356 * Li _basic=h;3356 * Li=h; 3357 3357 * numdof=2: 3358 * Li _basic=[ h 0 ]3358 * Li=[ h 0 ] 3359 3359 * [ 0 h ] 3360 3360 * where h is the interpolation function for grid i. … … 3370 3370 3371 3371 3372 /*Get l1l2l3 in basiccoordinate system: */3372 /*Get l1l2l3 in actual coordinate system: */ 3373 3373 GetNodalFunctions(l1l2l3, gauss_l1l2l3); 3374 3374 … … 3387 3387 else{ 3388 3388 for (i=0;i<numgrids;i++){ 3389 *(L+numdof*numgrids*0+numdof*i)=l1l2l3[i]; //L[0][NDOF2*i]=dh1dh 2dh3_basic[0][i];3389 *(L+numdof*numgrids*0+numdof*i)=l1l2l3[i]; //L[0][NDOF2*i]=dh1dh3[0][i]; 3390 3390 *(L+numdof*numgrids*0+numdof*i+1)=0; 3391 3391 *(L+numdof*numgrids*1+numdof*i)=0; … … 3423 3423 } 3424 3424 /*}}}*/ 3425 /*FUNCTION GetNodalFunctionsDerivatives Basic{{{1*/3426 #undef __FUNCT__ 3427 #define __FUNCT__ "Tria::GetNodalFunctionsDerivatives Basic"3428 void Tria::GetNodalFunctionsDerivatives Basic(double* dh1dh2dh3_basic,double* xyz_list, double* gauss_l1l2l3){3425 /*FUNCTION GetNodalFunctionsDerivatives {{{1*/ 3426 #undef __FUNCT__ 3427 #define __FUNCT__ "Tria::GetNodalFunctionsDerivatives" 3428 void Tria::GetNodalFunctionsDerivatives(double* dh1dh3,double* xyz_list, double* gauss_l1l2l3){ 3429 3429 3430 3430 /*This routine returns the values of the nodal functions derivatives (with respect to the 3431 * basiccoordinate system: */3431 * actual coordinate system: */ 3432 3432 3433 3433 int i; … … 3435 3435 const int numgrids=3; 3436 3436 3437 double dh1dh 2dh3_param[NDOF2][numgrids];3437 double dh1dh3_ref[NDOF2][numgrids]; 3438 3438 double Jinv[NDOF2][NDOF2]; 3439 3439 3440 3440 3441 3441 /*Get derivative values with respect to parametric coordinate system: */ 3442 GetNodalFunctionsDerivatives Params(&dh1dh2dh3_param[0][0], gauss_l1l2l3);3442 GetNodalFunctionsDerivativesReference(&dh1dh3_ref[0][0], gauss_l1l2l3); 3443 3443 3444 3444 /*Get Jacobian invert: */ 3445 3445 GetJacobianInvert(&Jinv[0][0], xyz_list, gauss_l1l2l3); 3446 3446 3447 /*Build dh1dh 2dh3_basic:3447 /*Build dh1dh3: 3448 3448 * 3449 3449 * [dhi/dx]= Jinv*[dhi/dr] … … 3452 3452 3453 3453 for (i=0;i<numgrids;i++){ 3454 *(dh1dh 2dh3_basic+numgrids*0+i)=Jinv[0][0]*dh1dh2dh3_param[0][i]+Jinv[0][1]*dh1dh2dh3_param[1][i];3455 *(dh1dh 2dh3_basic+numgrids*1+i)=Jinv[1][0]*dh1dh2dh3_param[0][i]+Jinv[1][1]*dh1dh2dh3_param[1][i];3456 } 3457 3458 } 3459 /*}}}*/ 3460 /*FUNCTION GetNodalFunctionsDerivatives Params{{{1*/3461 #undef __FUNCT__ 3462 #define __FUNCT__ "Tria::GetNodalFunctionsDerivatives Params"3463 void Tria::GetNodalFunctionsDerivatives Params(double* dl1dl2dl3,double* gauss_l1l2l3){3454 *(dh1dh3+numgrids*0+i)=Jinv[0][0]*dh1dh3_ref[0][i]+Jinv[0][1]*dh1dh3_ref[1][i]; 3455 *(dh1dh3+numgrids*1+i)=Jinv[1][0]*dh1dh3_ref[0][i]+Jinv[1][1]*dh1dh3_ref[1][i]; 3456 } 3457 3458 } 3459 /*}}}*/ 3460 /*FUNCTION GetNodalFunctionsDerivativesReference {{{1*/ 3461 #undef __FUNCT__ 3462 #define __FUNCT__ "Tria::GetNodalFunctionsDerivativesReference" 3463 void Tria::GetNodalFunctionsDerivativesReference(double* dl1dl3,double* gauss_l1l2l3){ 3464 3464 3465 3465 /*This routine returns the values of the nodal functions derivatives (with respect to the … … 3472 3472 3473 3473 /*First nodal function: */ 3474 *(dl1dl 2dl3+numgrids*0+0)=-1.0/2.0;3475 *(dl1dl 2dl3+numgrids*1+0)=-1.0/(2.0*sqrt3);3474 *(dl1dl3+numgrids*0+0)=-1.0/2.0; 3475 *(dl1dl3+numgrids*1+0)=-1.0/(2.0*sqrt3); 3476 3476 3477 3477 /*Second nodal function: */ 3478 *(dl1dl 2dl3+numgrids*0+1)=1.0/2.0;3479 *(dl1dl 2dl3+numgrids*1+1)=-1.0/(2.0*sqrt3);3478 *(dl1dl3+numgrids*0+1)=1.0/2.0; 3479 *(dl1dl3+numgrids*1+1)=-1.0/(2.0*sqrt3); 3480 3480 3481 3481 /*Third nodal function: */ 3482 *(dl1dl 2dl3+numgrids*0+2)=0;3483 *(dl1dl 2dl3+numgrids*1+2)=1.0/sqrt3;3482 *(dl1dl3+numgrids*0+2)=0; 3483 *(dl1dl3+numgrids*1+2)=1.0/sqrt3; 3484 3484 3485 3485 } … … 3515 3515 */ 3516 3516 3517 double dh1dh 2dh3_basic[NDOF2][numgrids]; //nodal derivative functions in basiccoordinate system.3518 3519 /*Get dh1dh2dh3 in basiccoordinate system: */3520 GetNodalFunctionsDerivatives Basic(&dh1dh2dh3_basic[0][0],xyz_list, gauss_l1l2l3);3521 3522 *(p+0)=plist[0]*dh1dh 2dh3_basic[0][0]+plist[1]*dh1dh2dh3_basic[0][1]+plist[2]*dh1dh2dh3_basic[0][2];3523 *(p+1)=plist[0]*dh1dh 2dh3_basic[1][0]+plist[1]*dh1dh2dh3_basic[1][1]+plist[2]*dh1dh2dh3_basic[1][2];3517 double dh1dh3[NDOF2][numgrids]; //nodal derivative functions in actual coordinate system. 3518 3519 /*Get dh1dh2dh3 in actual coordinate system: */ 3520 GetNodalFunctionsDerivatives(&dh1dh3[0][0],xyz_list, gauss_l1l2l3); 3521 3522 *(p+0)=plist[0]*dh1dh3[0][0]+plist[1]*dh1dh3[0][1]+plist[2]*dh1dh3[0][2]; 3523 *(p+1)=plist[0]*dh1dh3[1][0]+plist[1]*dh1dh3[1][1]+plist[2]*dh1dh3[1][2]; 3524 3524 3525 3525 } … … 3611 3611 double xyz_list[numgrids][3]; 3612 3612 int doflist1[numgrids]; 3613 double dh1dh 2dh3_basic[NDOF2][numgrids];3613 double dh1dh3[NDOF2][numgrids]; 3614 3614 3615 3615 /* grid data: */ … … 3733 3733 3734 3734 /*Get nodal functions derivatives*/ 3735 GetNodalFunctionsDerivatives Basic(&dh1dh2dh3_basic[0][0],&xyz_list[0][0],gauss_l1l2l3);3735 GetNodalFunctionsDerivatives(&dh1dh3[0][0],&xyz_list[0][0],gauss_l1l2l3); 3736 3736 3737 3737 /*Get B derivative: dB/dx */ … … 3745 3745 3746 3746 //Add regularization term 3747 grade_g_gaussian[i]-=numpar->cm_noisedmp*Jdet*gauss_weight*(dh1dh 2dh3_basic[0][i]*dB[0]+dh1dh2dh3_basic[1][i]*dB[1]);3747 grade_g_gaussian[i]-=numpar->cm_noisedmp*Jdet*gauss_weight*(dh1dh3[0][i]*dB[0]+dh1dh3[1][i]*dB[1]); 3748 3748 3749 3749 //min dampening … … 3787 3787 double xyz_list[numgrids][3]; 3788 3788 int doflist1[numgrids]; 3789 double dh1dh 2dh3_basic[NDOF2][numgrids];3789 double dh1dh3[NDOF2][numgrids]; 3790 3790 3791 3791 /* grid data: */ … … 3953 3953 3954 3954 /*Get nodal functions derivatives*/ 3955 GetNodalFunctionsDerivatives Basic(&dh1dh2dh3_basic[0][0],&xyz_list[0][0],gauss_l1l2l3);3955 GetNodalFunctionsDerivatives(&dh1dh3[0][0],&xyz_list[0][0],gauss_l1l2l3); 3956 3956 3957 3957 /*Get k derivative: dk/dx */ … … 3965 3965 3966 3966 //noise dampening d/dki(1/2*(dk/dx)^2) 3967 grade_g_gaussian[i]+=-numpar->cm_noisedmp*Jdet*gauss_weight*(dh1dh 2dh3_basic[0][i]*dk[0]+dh1dh2dh3_basic[1][i]*dk[1]);3967 grade_g_gaussian[i]+=-numpar->cm_noisedmp*Jdet*gauss_weight*(dh1dh3[0][i]*dk[0]+dh1dh3[1][i]*dk[1]); 3968 3968 3969 3969 //min dampening … … 4005 4005 double xyz_list[numgrids][3]; 4006 4006 int doflist1[numgrids]; 4007 double dh1dh 2dh3_basic[NDOF2][numgrids];4007 double dh1dh3[NDOF2][numgrids]; 4008 4008 4009 4009 /* grid data: */ … … 4186 4186 4187 4187 /*Get nodal functions derivatives*/ 4188 GetNodalFunctionsDerivatives Basic(&dh1dh2dh3_basic[0][0],&xyz_list[0][0],gauss_l1l2l3);4188 GetNodalFunctionsDerivatives(&dh1dh3[0][0],&xyz_list[0][0],gauss_l1l2l3); 4189 4189 4190 4190 /*Get k derivative: dk/dx */ … … 4201 4201 4202 4202 //Add regularization term 4203 grade_g_gaussian[i]+= - numpar->cm_noisedmp*Jdet*gauss_weight*(dh1dh 2dh3_basic[0][i]*dk[0]+dh1dh2dh3_basic[1][i]*dk[1]);4203 grade_g_gaussian[i]+= - numpar->cm_noisedmp*Jdet*gauss_weight*(dh1dh3[0][i]*dk[0]+dh1dh3[1][i]*dk[1]); 4204 4204 4205 4205 //min dampening -
issm/trunk/src/c/objects/Tria.h
r2722 r2956 89 89 void GetBPrime_prog(double* Bprime_prog, double* xyz_list, double* gauss_l1l2l3); 90 90 void GetNodalFunctions(double* l1l2l3, double* gauss_l1l2l3); 91 void GetNodalFunctionsDerivatives Basic(double* dh1dh2dh3_basic,double* xyz_list, double* gauss_l1l2l3);92 void GetNodalFunctionsDerivatives Params(double* dl1dl2dl3,double* gauss_l1l2l3);91 void GetNodalFunctionsDerivatives(double* dh1dh3,double* xyz_list, double* gauss_l1l2l3); 92 void GetNodalFunctionsDerivativesReference(double* dl1dl3,double* gauss_l1l2l3); 93 93 void GetJacobianInvert(double* Jinv, double* xyz_list,double* gauss_l1l2l3); 94 94 void GetJacobian(double* J, double* xyz_list,double* gauss_l1l2l3);
Note:
See TracChangeset
for help on using the changeset viewer.