Changeset 8653
- Timestamp:
- 06/16/11 16:08:22 (14 years ago)
- Location:
- issm/trunk/src/c/objects/Elements
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/c/objects/Elements/Penta.cpp
r8649 r8653 1773 1773 double surface_normal[3]; 1774 1774 double Jdet2d,DL_scalar; 1775 double l1l6[NUMVERTICES];1775 double basis[NUMVERTICES]; 1776 1776 GaussPenta *gauss=NULL; 1777 1777 double Ke_g[numdof][numdof]; //stiffness matrix evaluated at the gaussian point. … … 1792 1792 1793 1793 GetTriaJacobianDeterminant(&Jdet2d, &xyz_list_tria[0][0],gauss); 1794 GetNodalFunctionsP1(& l1l6[0], gauss);1794 GetNodalFunctionsP1(&basis[0], gauss); 1795 1795 1796 1796 /**********************Do not forget the sign**********************************/ … … 1798 1798 /******************************************************************************/ 1799 1799 1800 TripleMultiply( l1l6,1,numdof,1,1800 TripleMultiply( basis,1,numdof,1, 1801 1801 &DL_scalar,1,1,0, 1802 l1l6,1,numdof,0,1802 basis,1,numdof,0, 1803 1803 &Ke_g[0][0],0); 1804 1804 … … 1848 1848 double Bprime_advec[3][numdof]; 1849 1849 double L[numdof]; 1850 double d h1dh6[3][6];1850 double dbasis[3][6]; 1851 1851 double D_scalar_conduct,D_scalar_advec; 1852 1852 double D_scalar_trans,D_scalar_artdiff; … … 1970 1970 else if(artdiff==2){ 1971 1971 1972 GetNodalFunctionsP1Derivatives(&d h1dh6[0][0],&xyz_list[0][0], gauss);1972 GetNodalFunctionsP1Derivatives(&dbasis[0][0],&xyz_list[0][0], gauss); 1973 1973 1974 1974 tau_parameter=GetStabilizationParameter(u-um,v-vm,w-wm,diameter,rho_ice,heatcapacity,thermalconductivity); … … 1977 1977 for(j=0;j<numdof;j++){ 1978 1978 Ke_gaussian_artdiff[i][j]=tau_parameter*D_scalar_advec* 1979 ((u-um)*d h1dh6[0][i]+(v-vm)*dh1dh6[1][i]+(w-wm)*dh1dh6[2][i])*((u-um)*dh1dh6[0][j]+(v-vm)*dh1dh6[1][j]+(w-wm)*dh1dh6[2][j]);1979 ((u-um)*dbasis[0][i]+(v-vm)*dbasis[1][i]+(w-wm)*dbasis[2][i])*((u-um)*dbasis[0][j]+(v-vm)*dbasis[1][j]+(w-wm)*dbasis[2][j]); 1980 1980 } 1981 1981 } … … 1983 1983 for(i=0;i<numdof;i++){ 1984 1984 for(j=0;j<numdof;j++){ 1985 Ke_gaussian_artdiff[i][j]+=tau_parameter*D_scalar_trans*L[j]*((u-um)*d h1dh6[0][i]+(v-vm)*dh1dh6[1][i]+(w-wm)*dh1dh6[2][i]);1985 Ke_gaussian_artdiff[i][j]+=tau_parameter*D_scalar_trans*L[j]*((u-um)*dbasis[0][i]+(v-vm)*dbasis[1][i]+(w-wm)*dbasis[2][i]); 1986 1986 } 1987 1987 } … … 2013 2013 double xyz_list[NUMVERTICES][3]; 2014 2014 double xyz_list_tria[NUMVERTICES2D][3]; 2015 double l1l6[NUMVERTICES];2015 double basis[NUMVERTICES]; 2016 2016 double D_scalar; 2017 2017 double Ke_gaussian[numdof][numdof]={0.0}; … … 2039 2039 2040 2040 GetTriaJacobianDeterminant(&Jdet2d, &xyz_list_tria[0][0], gauss); 2041 GetNodalFunctionsP1(& l1l6[0], gauss);2041 GetNodalFunctionsP1(&basis[0], gauss); 2042 2042 2043 2043 D_scalar=gauss->weight*Jdet2d*rho_water*mixed_layer_capacity*thermal_exchange_velocity/(rho_ice*heatcapacity); 2044 2044 if(dt) D_scalar=dt*D_scalar; 2045 2045 2046 TripleMultiply(& l1l6[0],numdof,1,0,2046 TripleMultiply(&basis[0],numdof,1,0, 2047 2047 &D_scalar,1,1,0, 2048 & l1l6[0],1,numdof,0,2048 &basis[0],1,numdof,0, 2049 2049 &Ke_gaussian[0][0],0); 2050 2050 … … 2138 2138 double Bprime_advec[3][numdof]; 2139 2139 double L[numdof]; 2140 double d h1dh6[3][6];2140 double dbasis[3][6]; 2141 2141 double D_scalar_conduct,D_scalar_advec; 2142 2142 double D_scalar_trans,D_scalar_artdiff; … … 2253 2253 else if(artdiff==2){ 2254 2254 2255 GetNodalFunctionsP1Derivatives(&d h1dh6[0][0],&xyz_list[0][0], gauss);2255 GetNodalFunctionsP1Derivatives(&dbasis[0][0],&xyz_list[0][0], gauss); 2256 2256 2257 2257 tau_parameter=GetStabilizationParameter(u-um,v-vm,w-wm,diameter,rho_ice,heatcapacity,thermalconductivity); … … 2260 2260 for(j=0;j<numdof;j++){ 2261 2261 Ke_gaussian_artdiff[i][j]=tau_parameter*D_scalar_advec* 2262 ((u-um)*d h1dh6[0][i]+(v-vm)*dh1dh6[1][i]+(w-wm)*dh1dh6[2][i])*((u-um)*dh1dh6[0][j]+(v-vm)*dh1dh6[1][j]+(w-wm)*dh1dh6[2][j]);2262 ((u-um)*dbasis[0][i]+(v-vm)*dbasis[1][i]+(w-wm)*dbasis[2][i])*((u-um)*dbasis[0][j]+(v-vm)*dbasis[1][j]+(w-wm)*dbasis[2][j]); 2263 2263 } 2264 2264 } … … 2266 2266 for(i=0;i<numdof;i++){ 2267 2267 for(j=0;j<numdof;j++){ 2268 Ke_gaussian_artdiff[i][j]+=tau_parameter*D_scalar_trans*L[j]*((u-um)*d h1dh6[0][i]+(v-vm)*dh1dh6[1][i]+(w-wm)*dh1dh6[2][i]);2268 Ke_gaussian_artdiff[i][j]+=tau_parameter*D_scalar_trans*L[j]*((u-um)*dbasis[0][i]+(v-vm)*dbasis[1][i]+(w-wm)*dbasis[2][i]); 2269 2269 } 2270 2270 } … … 2297 2297 double xyz_list[NUMVERTICES][3]; 2298 2298 double xyz_list_tria[NUMVERTICES2D][3]; 2299 double l1l6[NUMVERTICES];2299 double basis[NUMVERTICES]; 2300 2300 double D_scalar; 2301 2301 double Ke_gaussian[numdof][numdof]={0.0}; … … 2323 2323 2324 2324 GetTriaJacobianDeterminant(&Jdet2d, &xyz_list_tria[0][0], gauss); 2325 GetNodalFunctionsP1(& l1l6[0], gauss);2325 GetNodalFunctionsP1(&basis[0], gauss); 2326 2326 2327 2327 D_scalar=gauss->weight*Jdet2d*rho_water*mixed_layer_capacity*thermal_exchange_velocity/(heatcapacity*rho_ice); 2328 2328 if(dt) D_scalar=dt*D_scalar; 2329 2329 2330 TripleMultiply(& l1l6[0],numdof,1,0,2330 TripleMultiply(&basis[0],numdof,1,0, 2331 2331 &D_scalar,1,1,0, 2332 & l1l6[0],1,numdof,0,2332 &basis[0],1,numdof,0, 2333 2333 &Ke_gaussian[0][0],0); 2334 2334 … … 2522 2522 double dw[3]; 2523 2523 double xyz_list[NUMVERTICES][3]; 2524 double l1l6[6]; //for the six nodes of the penta2525 double d h1dh6[3][6]; //for the six nodes of the penta2524 double basis[6]; //for the six nodes of the penta 2525 double dbasis[3][6]; //for the six nodes of the penta 2526 2526 GaussPenta *gauss=NULL; 2527 2527 … … 2546 2546 2547 2547 GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss); 2548 GetNodalFunctionsP1(& l1l6[0], gauss);2549 GetNodalFunctionsP1Derivatives(&d h1dh6[0][0],&xyz_list[0][0], gauss);2548 GetNodalFunctionsP1(&basis[0], gauss); 2549 GetNodalFunctionsP1Derivatives(&dbasis[0][0],&xyz_list[0][0], gauss); 2550 2550 2551 2551 vzmacayeal_input->GetParameterDerivativeValue(&dw[0],&xyz_list[0][0],gauss); … … 2555 2555 2556 2556 for(i=0;i<NUMVERTICES;i++){ 2557 pe->values[i*NDOF4+0]+=-Jdet*gauss->weight*viscosity*dw[0]*d h1dh6[2][i];2558 pe->values[i*NDOF4+1]+=-Jdet*gauss->weight*viscosity*dw[1]*d h1dh6[2][i];2559 pe->values[i*NDOF4+2]+=-Jdet*gauss->weight*viscosity*(dw[0]*d h1dh6[0][i]+dw[1]*dh1dh6[1][i]+2*dw[2]*dh1dh6[2][i]);2560 pe->values[i*NDOF4+3]+=Jdet*gauss->weight*stokesreconditioning*dw[2]* l1l6[i];2557 pe->values[i*NDOF4+0]+=-Jdet*gauss->weight*viscosity*dw[0]*dbasis[2][i]; 2558 pe->values[i*NDOF4+1]+=-Jdet*gauss->weight*viscosity*dw[1]*dbasis[2][i]; 2559 pe->values[i*NDOF4+2]+=-Jdet*gauss->weight*viscosity*(dw[0]*dbasis[0][i]+dw[1]*dbasis[1][i]+2*dw[2]*dbasis[2][i]); 2560 pe->values[i*NDOF4+3]+=Jdet*gauss->weight*stokesreconditioning*dw[2]*basis[i]; 2561 2561 } 2562 2562 } … … 2584 2584 double xyz_list_tria[NUMVERTICES2D][3]; 2585 2585 double xyz_list[NUMVERTICES][3]; 2586 double l1l6[6]; //for the six nodes of the penta2586 double basis[6]; //for the six nodes of the penta 2587 2587 Tria* tria=NULL; 2588 2588 Friction* friction=NULL; … … 2616 2616 2617 2617 GetTriaJacobianDeterminant(&Jdet2d, &xyz_list_tria[0][0], gauss); 2618 GetNodalFunctionsP1( l1l6, gauss);2618 GetNodalFunctionsP1(basis, gauss); 2619 2619 2620 2620 vzmacayeal_input->GetParameterValue(&w, gauss); … … 2627 2627 2628 2628 for(i=0;i<NUMVERTICES2D;i++){ 2629 pe->values[i*NDOF4+0]+=Jdet2d*gauss->weight*(alpha2_gauss*w*bed_normal[0]*bed_normal[2]+2*viscosity*dw[2]*bed_normal[0])* l1l6[i];2630 pe->values[i*NDOF4+1]+=Jdet2d*gauss->weight*(alpha2_gauss*w*bed_normal[1]*bed_normal[2]+2*viscosity*dw[2]*bed_normal[1])* l1l6[i];2631 pe->values[i*NDOF4+2]+=Jdet2d*gauss->weight*2*viscosity*(dw[0]*bed_normal[0]+dw[1]*bed_normal[1]+dw[2]*bed_normal[2])* l1l6[i];2629 pe->values[i*NDOF4+0]+=Jdet2d*gauss->weight*(alpha2_gauss*w*bed_normal[0]*bed_normal[2]+2*viscosity*dw[2]*bed_normal[0])*basis[i]; 2630 pe->values[i*NDOF4+1]+=Jdet2d*gauss->weight*(alpha2_gauss*w*bed_normal[1]*bed_normal[2]+2*viscosity*dw[2]*bed_normal[1])*basis[i]; 2631 pe->values[i*NDOF4+2]+=Jdet2d*gauss->weight*2*viscosity*(dw[0]*bed_normal[0]+dw[1]*bed_normal[1]+dw[2]*bed_normal[2])*basis[i]; 2632 2632 } 2633 2633 } … … 2667 2667 double dw[3]; 2668 2668 double xyz_list[NUMVERTICES][3]; 2669 double l1l6[6]; //for the six nodes of the penta2670 double d h1dh6[3][6]; //for the six nodes of the penta2669 double basis[6]; //for the six nodes of the penta 2670 double dbasis[3][6]; //for the six nodes of the penta 2671 2671 GaussPenta *gauss=NULL; 2672 2672 … … 2691 2691 2692 2692 GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss); 2693 GetNodalFunctionsP1(& l1l6[0], gauss);2694 GetNodalFunctionsP1Derivatives(&d h1dh6[0][0],&xyz_list[0][0], gauss);2693 GetNodalFunctionsP1(&basis[0], gauss); 2694 GetNodalFunctionsP1Derivatives(&dbasis[0][0],&xyz_list[0][0], gauss); 2695 2695 2696 2696 vzpattyn_input->GetParameterDerivativeValue(&dw[0],&xyz_list[0][0],gauss); … … 2700 2700 2701 2701 for(i=0;i<NUMVERTICES;i++){ 2702 pe->values[i*NDOF4+0]+=-Jdet*gauss->weight*viscosity*dw[0]*d h1dh6[2][i];2703 pe->values[i*NDOF4+1]+=-Jdet*gauss->weight*viscosity*dw[1]*d h1dh6[2][i];2704 pe->values[i*NDOF4+2]+=-Jdet*gauss->weight*viscosity*(dw[0]*d h1dh6[0][i]+dw[1]*dh1dh6[1][i]+2*dw[2]*dh1dh6[2][i]);2705 pe->values[i*NDOF4+3]+=Jdet*gauss->weight*stokesreconditioning*dw[2]* l1l6[i];2702 pe->values[i*NDOF4+0]+=-Jdet*gauss->weight*viscosity*dw[0]*dbasis[2][i]; 2703 pe->values[i*NDOF4+1]+=-Jdet*gauss->weight*viscosity*dw[1]*dbasis[2][i]; 2704 pe->values[i*NDOF4+2]+=-Jdet*gauss->weight*viscosity*(dw[0]*dbasis[0][i]+dw[1]*dbasis[1][i]+2*dw[2]*dbasis[2][i]); 2705 pe->values[i*NDOF4+3]+=Jdet*gauss->weight*stokesreconditioning*dw[2]*basis[i]; 2706 2706 } 2707 2707 } … … 2729 2729 double xyz_list_tria[NUMVERTICES2D][3]; 2730 2730 double xyz_list[NUMVERTICES][3]; 2731 double l1l6[6]; //for the six nodes of the penta2731 double basis[6]; //for the six nodes of the penta 2732 2732 Tria* tria=NULL; 2733 2733 Friction* friction=NULL; … … 2761 2761 2762 2762 GetTriaJacobianDeterminant(&Jdet2d, &xyz_list_tria[0][0], gauss); 2763 GetNodalFunctionsP1( l1l6, gauss);2763 GetNodalFunctionsP1(basis, gauss); 2764 2764 2765 2765 vzpattyn_input->GetParameterValue(&w, gauss); … … 2772 2772 2773 2773 for(i=0;i<NUMVERTICES2D;i++){ 2774 pe->values[i*NDOF4+0]+=Jdet2d*gauss->weight*(alpha2_gauss*w*bed_normal[0]*bed_normal[2]+2*viscosity*dw[2]*bed_normal[0])* l1l6[i];2775 pe->values[i*NDOF4+1]+=Jdet2d*gauss->weight*(alpha2_gauss*w*bed_normal[1]*bed_normal[2]+2*viscosity*dw[2]*bed_normal[1])* l1l6[i];2776 pe->values[i*NDOF4+2]+=Jdet2d*gauss->weight*2*viscosity*(dw[0]*bed_normal[0]+dw[1]*bed_normal[1]+dw[2]*bed_normal[2])* l1l6[i];2774 pe->values[i*NDOF4+0]+=Jdet2d*gauss->weight*(alpha2_gauss*w*bed_normal[0]*bed_normal[2]+2*viscosity*dw[2]*bed_normal[0])*basis[i]; 2775 pe->values[i*NDOF4+1]+=Jdet2d*gauss->weight*(alpha2_gauss*w*bed_normal[1]*bed_normal[2]+2*viscosity*dw[2]*bed_normal[1])*basis[i]; 2776 pe->values[i*NDOF4+2]+=Jdet2d*gauss->weight*2*viscosity*(dw[0]*bed_normal[0]+dw[1]*bed_normal[1]+dw[2]*bed_normal[2])*basis[i]; 2777 2777 } 2778 2778 } … … 2972 2972 double driving_stress_baseline,thickness; 2973 2973 double xyz_list[NUMVERTICES][3]; 2974 double l1l6[6];2974 double basis[6]; 2975 2975 GaussPenta *gauss=NULL; 2976 2976 … … 2990 2990 2991 2991 GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss); 2992 GetNodalFunctionsP1( l1l6, gauss);2992 GetNodalFunctionsP1(basis, gauss); 2993 2993 2994 2994 thickness_input->GetParameterValue(&thickness, gauss); … … 2997 2997 driving_stress_baseline=matpar->GetRhoIce()*matpar->GetG(); 2998 2998 2999 for(i=0;i<NUMVERTICES;i++) for(j=0;j<NDOF2;j++) pe->values[i*NDOF2+j]+= -driving_stress_baseline*slope[j]*Jdet*gauss->weight* l1l6[i];2999 for(i=0;i<NUMVERTICES;i++) for(j=0;j<NDOF2;j++) pe->values[i*NDOF2+j]+= -driving_stress_baseline*slope[j]*Jdet*gauss->weight*basis[i]; 3000 3000 } 3001 3001 … … 3110 3110 double bed_normal[3]; 3111 3111 double dz[3]; 3112 double l1l6[6]; //for the six nodes of the penta3112 double basis[6]; //for the six nodes of the penta 3113 3113 double Jdet2d; 3114 3114 GaussPenta *gauss=NULL; … … 3139 3139 3140 3140 GetTriaJacobianDeterminant(&Jdet2d, &xyz_list_tria[0][0], gauss); 3141 GetNodalFunctionsP1( l1l6, gauss);3141 GetNodalFunctionsP1(basis, gauss); 3142 3142 3143 3143 BedNormal(&bed_normal[0],xyz_list_tria); … … 3155 3155 water_pressure=gravity*rho_water*bed; 3156 3156 3157 for(i=0;i<NUMVERTICES;i++) for(j=0;j<3;j++) pe->values[i*NDOF4+j]+=(water_pressure+damper)*gauss->weight*Jdet2d* l1l6[i]*bed_normal[j];3157 for(i=0;i<NUMVERTICES;i++) for(j=0;j<3;j++) pe->values[i*NDOF4+j]+=(water_pressure+damper)*gauss->weight*Jdet2d*basis[i]*bed_normal[j]; 3158 3158 } 3159 3159 … … 3204 3204 double dudx,dvdy,dwdz; 3205 3205 double du[3],dv[3],dw[3]; 3206 double l1l6[6];3206 double basis[6]; 3207 3207 GaussPenta *gauss=NULL; 3208 3208 … … 3227 3227 3228 3228 GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss); 3229 GetNodalFunctionsP1( l1l6, gauss);3229 GetNodalFunctionsP1(basis, gauss); 3230 3230 3231 3231 vx_input->GetParameterDerivativeValue(&du[0],&xyz_list[0][0],gauss); … … 3239 3239 dvdy=dv[1]; 3240 3240 3241 for (i=0;i<numdof;i++) pe->values[i] += (dudx+dvdy+dwdz)*Jdet*gauss->weight* l1l6[i];3241 for (i=0;i<numdof;i++) pe->values[i] += (dudx+dvdy+dwdz)*Jdet*gauss->weight*basis[i]; 3242 3242 } 3243 3243 … … 3262 3262 double vx,vy,vz,dbdx,dbdy,basalmeltingvalue; 3263 3263 double slope[3]; 3264 double l1l6[NUMVERTICES];3264 double basis[NUMVERTICES]; 3265 3265 GaussPenta* gauss=NULL; 3266 3266 … … 3302 3302 3303 3303 GetTriaJacobianDeterminant(&Jdet2d, &xyz_list_tria[0][0],gauss); 3304 GetNodalFunctionsP1(& l1l6[0], gauss);3305 3306 for(i=0;i<numdof;i++) pe->values[i]+=-Jdet2d*gauss->weight*(vx*dbdx+vy*dbdy-vz-basalmeltingvalue)* l1l6[i];3304 GetNodalFunctionsP1(&basis[0], gauss); 3305 3306 for(i=0;i<numdof;i++) pe->values[i]+=-Jdet2d*gauss->weight*(vx*dbdx+vy*dbdy-vz-basalmeltingvalue)*basis[i]; 3307 3307 } 3308 3308 … … 3347 3347 double xyz_list[NUMVERTICES][3]; 3348 3348 double L[numdof]; 3349 double d h1dh6[3][6];3349 double dbasis[3][6]; 3350 3350 double epsilon[6]; 3351 3351 GaussPenta *gauss=NULL; … … 3394 3394 3395 3395 if(artdiff==2){ 3396 GetNodalFunctionsP1Derivatives(&d h1dh6[0][0],&xyz_list[0][0], gauss);3396 GetNodalFunctionsP1Derivatives(&dbasis[0][0],&xyz_list[0][0], gauss); 3397 3397 3398 3398 vx_input->GetParameterValue(&u, gauss); … … 3402 3402 tau_parameter=GetStabilizationParameter(u,v,w,diameter,rho_ice,heatcapacity,thermalconductivity); 3403 3403 3404 for(i=0;i<NUMVERTICES;i++) pe->values[i]+=tau_parameter*scalar_def*(u*d h1dh6[0][i]+v*dh1dh6[1][i]+w*dh1dh6[2][i]);3404 for(i=0;i<NUMVERTICES;i++) pe->values[i]+=tau_parameter*scalar_def*(u*dbasis[0][i]+v*dbasis[1][i]+w*dbasis[2][i]); 3405 3405 if(dt){ 3406 for(i=0;i<NUMVERTICES;i++) pe->values[i]+=tau_parameter*scalar_transient*(u*d h1dh6[0][i]+v*dh1dh6[1][i]+w*dh1dh6[2][i]);3406 for(i=0;i<NUMVERTICES;i++) pe->values[i]+=tau_parameter*scalar_transient*(u*dbasis[0][i]+v*dbasis[1][i]+w*dbasis[2][i]); 3407 3407 } 3408 3408 } … … 3428 3428 double xyz_list[NUMVERTICES][3]; 3429 3429 double xyz_list_tria[NUMVERTICES2D][3]; 3430 double l1l6[NUMVERTICES];3430 double basis[NUMVERTICES]; 3431 3431 GaussPenta* gauss=NULL; 3432 3432 … … 3455 3455 3456 3456 GetTriaJacobianDeterminant(&Jdet2d, &xyz_list_tria[0][0], gauss); 3457 GetNodalFunctionsP1(& l1l6[0], gauss);3457 GetNodalFunctionsP1(&basis[0], gauss); 3458 3458 3459 3459 pressure_input->GetParameterValue(&pressure,gauss); … … 3463 3463 if(dt) scalar_ocean=dt*scalar_ocean; 3464 3464 3465 for(i=0;i<numdof;i++) pe->values[i]+=scalar_ocean* l1l6[i];3465 for(i=0;i<numdof;i++) pe->values[i]+=scalar_ocean*basis[i]; 3466 3466 } 3467 3467 … … 3486 3486 double basalfriction,alpha2,vx,vy; 3487 3487 double scalar; 3488 double l1l6[NUMVERTICES];3488 double basis[NUMVERTICES]; 3489 3489 Friction* friction=NULL; 3490 3490 GaussPenta* gauss=NULL; … … 3520 3520 3521 3521 GetTriaJacobianDeterminant(&Jdet2d, &xyz_list_tria[0][0], gauss); 3522 GetNodalFunctionsP1(& l1l6[0], gauss);3522 GetNodalFunctionsP1(&basis[0], gauss); 3523 3523 3524 3524 geothermalflux_input->GetParameterValue(&geothermalflux_value,gauss); … … 3531 3531 if(dt) scalar=dt*scalar; 3532 3532 3533 for(i=0;i<numdof;i++) pe->values[i]+=scalar* l1l6[i];3533 for(i=0;i<numdof;i++) pe->values[i]+=scalar*basis[i]; 3534 3534 } 3535 3535 … … 3616 3616 double xyz_list[NUMVERTICES][3]; 3617 3617 double L[numdof]; 3618 double d h1dh6[3][6];3618 double dbasis[3][6]; 3619 3619 double epsilon[6]; 3620 3620 GaussPenta *gauss=NULL; … … 3663 3663 3664 3664 if(artdiff==2){ 3665 GetNodalFunctionsP1Derivatives(&d h1dh6[0][0],&xyz_list[0][0], gauss);3665 GetNodalFunctionsP1Derivatives(&dbasis[0][0],&xyz_list[0][0], gauss); 3666 3666 3667 3667 vx_input->GetParameterValue(&u, gauss); … … 3671 3671 tau_parameter=GetStabilizationParameter(u,v,w,diameter,rho_ice,heatcapacity,thermalconductivity); 3672 3672 3673 for(i=0;i<NUMVERTICES;i++) pe->values[i]+=tau_parameter*scalar_def*(u*d h1dh6[0][i]+v*dh1dh6[1][i]+w*dh1dh6[2][i]);3673 for(i=0;i<NUMVERTICES;i++) pe->values[i]+=tau_parameter*scalar_def*(u*dbasis[0][i]+v*dbasis[1][i]+w*dbasis[2][i]); 3674 3674 if(dt){ 3675 for(i=0;i<NUMVERTICES;i++) pe->values[i]+=tau_parameter*scalar_transient*(u*d h1dh6[0][i]+v*dh1dh6[1][i]+w*dh1dh6[2][i]);3675 for(i=0;i<NUMVERTICES;i++) pe->values[i]+=tau_parameter*scalar_transient*(u*dbasis[0][i]+v*dbasis[1][i]+w*dbasis[2][i]); 3676 3676 } 3677 3677 } … … 3697 3697 double xyz_list[NUMVERTICES][3]; 3698 3698 double xyz_list_tria[NUMVERTICES2D][3]; 3699 double l1l6[NUMVERTICES];3699 double basis[NUMVERTICES]; 3700 3700 GaussPenta* gauss=NULL; 3701 3701 … … 3724 3724 3725 3725 GetTriaJacobianDeterminant(&Jdet2d, &xyz_list_tria[0][0], gauss); 3726 GetNodalFunctionsP1(& l1l6[0], gauss);3726 GetNodalFunctionsP1(&basis[0], gauss); 3727 3727 3728 3728 pressure_input->GetParameterValue(&pressure,gauss); … … 3732 3732 if(dt) scalar_ocean=dt*scalar_ocean; 3733 3733 3734 for(i=0;i<numdof;i++) pe->values[i]+=scalar_ocean* l1l6[i];3734 for(i=0;i<numdof;i++) pe->values[i]+=scalar_ocean*basis[i]; 3735 3735 } 3736 3736 … … 3755 3755 double basalfriction,alpha2,vx,vy; 3756 3756 double scalar; 3757 double l1l6[NUMVERTICES];3757 double basis[NUMVERTICES]; 3758 3758 Friction* friction=NULL; 3759 3759 GaussPenta* gauss=NULL; … … 3789 3789 3790 3790 GetTriaJacobianDeterminant(&Jdet2d, &xyz_list_tria[0][0], gauss); 3791 GetNodalFunctionsP1(& l1l6[0], gauss);3791 GetNodalFunctionsP1(&basis[0], gauss); 3792 3792 3793 3793 geothermalflux_input->GetParameterValue(&geothermalflux_value,gauss); … … 3800 3800 if(dt) scalar=dt*scalar; 3801 3801 3802 for(i=0;i<numdof;i++) pe->values[i]+=scalar* l1l6[i];3802 for(i=0;i<numdof;i++) pe->values[i]+=scalar*basis[i]; 3803 3803 } 3804 3804 -
issm/trunk/src/c/objects/Elements/PentaRef.cpp
r8417 r8653 70 70 */ 71 71 72 double d h1dh6[3][NUMNODESP1];73 74 /*Get d h1dh6in actual coordinate system: */75 GetNodalFunctionsP1Derivatives(&d h1dh6[0][0],xyz_list, gauss);72 double dbasis[3][NUMNODESP1]; 73 74 /*Get dbasis in actual coordinate system: */ 75 GetNodalFunctionsP1Derivatives(&dbasis[0][0],xyz_list, gauss); 76 76 77 77 /*Build B: */ 78 78 for (int i=0;i<NUMNODESP1;i++){ 79 *(B+NDOF2*NUMNODESP1*0+NDOF2*i)=d h1dh6[0][i];79 *(B+NDOF2*NUMNODESP1*0+NDOF2*i)=dbasis[0][i]; 80 80 *(B+NDOF2*NUMNODESP1*0+NDOF2*i+1)=0.0; 81 81 82 82 *(B+NDOF2*NUMNODESP1*1+NDOF2*i)=0.0; 83 *(B+NDOF2*NUMNODESP1*1+NDOF2*i+1)=dh1dh6[1][i]; 84 85 *(B+NDOF2*NUMNODESP1*2+NDOF2*i)=(float).5*dh1dh6[1][i]; 86 *(B+NDOF2*NUMNODESP1*2+NDOF2*i+1)=(float).5*dh1dh6[0][i]; 87 88 } 89 83 *(B+NDOF2*NUMNODESP1*1+NDOF2*i+1)=dbasis[1][i]; 84 85 *(B+NDOF2*NUMNODESP1*2+NDOF2*i)=(float).5*dbasis[1][i]; 86 *(B+NDOF2*NUMNODESP1*2+NDOF2*i+1)=(float).5*dbasis[0][i]; 87 } 90 88 } 91 89 /*}}}*/ … … 151 149 */ 152 150 153 double d h1dh6[3][NUMNODESP1];154 155 /*Get d h1dh6in actual coordinate system: */156 GetNodalFunctionsP1Derivatives(&d h1dh6[0][0],xyz_list, gauss);151 double dbasis[3][NUMNODESP1]; 152 153 /*Get dbasis in actual coordinate system: */ 154 GetNodalFunctionsP1Derivatives(&dbasis[0][0],xyz_list, gauss); 157 155 158 156 /*Build B: */ 159 157 for (int i=0;i<NUMNODESP1;i++){ 160 *(B+NDOF2*NUMNODESP1*0+NDOF2*i)=d h1dh6[0][i];158 *(B+NDOF2*NUMNODESP1*0+NDOF2*i)=dbasis[0][i]; 161 159 *(B+NDOF2*NUMNODESP1*0+NDOF2*i+1)=0.0; 162 160 163 161 *(B+NDOF2*NUMNODESP1*1+NDOF2*i)=0.0; 164 *(B+NDOF2*NUMNODESP1*1+NDOF2*i+1)=d h1dh6[1][i];165 166 *(B+NDOF2*NUMNODESP1*2+NDOF2*i)=(float).5*d h1dh6[1][i];167 *(B+NDOF2*NUMNODESP1*2+NDOF2*i+1)=(float).5*d h1dh6[0][i];168 169 *(B+NDOF2*NUMNODESP1*3+NDOF2*i)=(float).5*d h1dh6[2][i];162 *(B+NDOF2*NUMNODESP1*1+NDOF2*i+1)=dbasis[1][i]; 163 164 *(B+NDOF2*NUMNODESP1*2+NDOF2*i)=(float).5*dbasis[1][i]; 165 *(B+NDOF2*NUMNODESP1*2+NDOF2*i+1)=(float).5*dbasis[0][i]; 166 167 *(B+NDOF2*NUMNODESP1*3+NDOF2*i)=(float).5*dbasis[2][i]; 170 168 *(B+NDOF2*NUMNODESP1*3+NDOF2*i+1)=0.0; 171 169 172 170 *(B+NDOF2*NUMNODESP1*4+NDOF2*i)=0.0; 173 *(B+NDOF2*NUMNODESP1*4+NDOF2*i+1)=(float).5*d h1dh6[2][i];171 *(B+NDOF2*NUMNODESP1*4+NDOF2*i+1)=(float).5*dbasis[2][i]; 174 172 } 175 173 … … 190 188 * We assume B has been allocated already, of size: 5x(NDOF2*NUMNODESP1) 191 189 */ 192 double d h1dh6[3][NUMNODESP1];193 194 /*Get d h1dh6in actual coordinate system: */195 GetNodalFunctionsP1Derivatives(&d h1dh6[0][0],xyz_list, gauss_coord);190 double dbasis[3][NUMNODESP1]; 191 192 /*Get dbasis in actual coordinate system: */ 193 GetNodalFunctionsP1Derivatives(&dbasis[0][0],xyz_list, gauss_coord); 196 194 197 195 /*Build BPrime: */ 198 196 for (int i=0;i<NUMNODESP1;i++){ 199 *(B+NDOF2*NUMNODESP1*0+NDOF2*i)=2.0*d h1dh6[0][i];200 *(B+NDOF2*NUMNODESP1*0+NDOF2*i+1)=d h1dh6[1][i];201 202 *(B+NDOF2*NUMNODESP1*1+NDOF2*i)=d h1dh6[0][i];203 *(B+NDOF2*NUMNODESP1*1+NDOF2*i+1)=2.0*d h1dh6[1][i];204 205 *(B+NDOF2*NUMNODESP1*2+NDOF2*i)=d h1dh6[1][i];206 *(B+NDOF2*NUMNODESP1*2+NDOF2*i+1)=d h1dh6[0][i];207 208 *(B+NDOF2*NUMNODESP1*3+NDOF2*i)=d h1dh6[2][i];197 *(B+NDOF2*NUMNODESP1*0+NDOF2*i)=2.0*dbasis[0][i]; 198 *(B+NDOF2*NUMNODESP1*0+NDOF2*i+1)=dbasis[1][i]; 199 200 *(B+NDOF2*NUMNODESP1*1+NDOF2*i)=dbasis[0][i]; 201 *(B+NDOF2*NUMNODESP1*1+NDOF2*i+1)=2.0*dbasis[1][i]; 202 203 *(B+NDOF2*NUMNODESP1*2+NDOF2*i)=dbasis[1][i]; 204 *(B+NDOF2*NUMNODESP1*2+NDOF2*i+1)=dbasis[0][i]; 205 206 *(B+NDOF2*NUMNODESP1*3+NDOF2*i)=dbasis[2][i]; 209 207 *(B+NDOF2*NUMNODESP1*3+NDOF2*i+1)=0.0; 210 208 211 209 *(B+NDOF2*NUMNODESP1*4+NDOF2*i)=0.0; 212 *(B+NDOF2*NUMNODESP1*4+NDOF2*i+1)=d h1dh6[2][i];210 *(B+NDOF2*NUMNODESP1*4+NDOF2*i+1)=dbasis[2][i]; 213 211 } 214 212 } … … 401 399 402 400 /*Same thing in the actual coordinate system: */ 403 double d h1dh6[3][NUMNODESP1];404 405 /*Get d h1dh6in actual coordinates system : */406 GetNodalFunctionsP1Derivatives(&d h1dh6[0][0],xyz_list,gauss);401 double dbasis[3][NUMNODESP1]; 402 403 /*Get dbasis in actual coordinates system : */ 404 GetNodalFunctionsP1Derivatives(&dbasis[0][0],xyz_list,gauss); 407 405 408 406 /*Build B': */ 409 407 for (int i=0;i<NUMNODESP1;i++){ 410 *(B_artdiff+NDOF1*NUMNODESP1*0+NDOF1*i)=d h1dh6[0][i];411 *(B_artdiff+NDOF1*NUMNODESP1*1+NDOF1*i)=d h1dh6[1][i];408 *(B_artdiff+NDOF1*NUMNODESP1*0+NDOF1*i)=dbasis[0][i]; 409 *(B_artdiff+NDOF1*NUMNODESP1*1+NDOF1*i)=dbasis[1][i]; 412 410 } 413 411 } -
issm/trunk/src/c/objects/Elements/Tria.cpp
r8651 r8653 1538 1538 double xyz_list[NUMVERTICES][3]; 1539 1539 double slope[2]; 1540 double l1l2l3[3];1540 double basis[3]; 1541 1541 double pe_g_gaussian[numdof]; 1542 1542 GaussTria* gauss=NULL; … … 1559 1559 1560 1560 GetJacobianDeterminant2d(&Jdet, &xyz_list[0][0],gauss); 1561 GetNodalFunctions( l1l2l3, gauss);1561 GetNodalFunctions(basis, gauss); 1562 1562 1563 1563 thickness_input->GetParameterValue(&thickness,gauss); … … 1574 1574 for (i=0;i<NUMVERTICES;i++){ 1575 1575 for (j=0;j<NDOF2;j++){ 1576 pe->values[i*NDOF2+j]+=(-driving_stress_baseline*slope[j]-plastic_stress)*Jdet*gauss->weight* l1l2l3[i];1576 pe->values[i*NDOF2+j]+=(-driving_stress_baseline*slope[j]-plastic_stress)*Jdet*gauss->weight*basis[i]; 1577 1577 } 1578 1578 } … … 1581 1581 for (i=0;i<NUMVERTICES;i++){ 1582 1582 for (j=0;j<NDOF2;j++){ 1583 pe->values[i*NDOF2+j]+=-driving_stress_baseline*slope[j]*Jdet*gauss->weight* l1l2l3[i];1583 pe->values[i*NDOF2+j]+=-driving_stress_baseline*slope[j]*Jdet*gauss->weight*basis[i]; 1584 1584 } 1585 1585 } … … 1605 1605 int num_responses; 1606 1606 double xyz_list[NUMVERTICES][3]; 1607 double l1l2l3[3];1607 double basis[3]; 1608 1608 double dbasis[NDOF2][NUMVERTICES]; 1609 1609 double dH[2]; … … 1628 1628 1629 1629 GetJacobianDeterminant2d(&Jdet, &xyz_list[0][0],gauss); 1630 GetNodalFunctions( l1l2l3, gauss);1630 GetNodalFunctions(basis, gauss); 1631 1631 GetNodalFunctionsDerivatives(&dbasis[0][0],&xyz_list[0][0],gauss); 1632 1632 … … 1640 1640 case ThicknessAbsMisfitEnum: 1641 1641 weights_input->GetParameterValue(&weight, gauss,resp); 1642 for(i=0;i<numdof;i++) pe->values[i]+=(thicknessobs-thickness)*weight*Jdet*gauss->weight* l1l2l3[i];1642 for(i=0;i<numdof;i++) pe->values[i]+=(thicknessobs-thickness)*weight*Jdet*gauss->weight*basis[i]; 1643 1643 break; 1644 1644 case ThicknessAbsGradientEnum: … … 1673 1673 double vx,vy,vxobs,vyobs,weight; 1674 1674 double xyz_list[NUMVERTICES][3]; 1675 double l1l2l3[3];1675 double basis[3]; 1676 1676 GaussTria* gauss=NULL; 1677 1677 … … 1712 1712 vxobs_input->GetParameterValue(&vxobs,gauss); 1713 1713 vyobs_input->GetParameterValue(&vyobs,gauss); 1714 GetNodalFunctions( l1l2l3, gauss);1714 GetNodalFunctions(basis, gauss); 1715 1715 1716 1716 /*Loop over all requested responses*/ … … 1733 1733 dux=vxobs-vx; 1734 1734 duy=vyobs-vy; 1735 pe->values[i*NDOF2+0]+=dux*weight*Jdet*gauss->weight* l1l2l3[i];1736 pe->values[i*NDOF2+1]+=duy*weight*Jdet*gauss->weight* l1l2l3[i];1735 pe->values[i*NDOF2+0]+=dux*weight*Jdet*gauss->weight*basis[i]; 1736 pe->values[i*NDOF2+1]+=duy*weight*Jdet*gauss->weight*basis[i]; 1737 1737 } 1738 1738 break; … … 1754 1754 dux=scalex*(vxobs-vx); 1755 1755 duy=scaley*(vyobs-vy); 1756 pe->values[i*NDOF2+0]+=dux*weight*Jdet*gauss->weight* l1l2l3[i];1757 pe->values[i*NDOF2+1]+=duy*weight*Jdet*gauss->weight* l1l2l3[i];1756 pe->values[i*NDOF2+0]+=dux*weight*Jdet*gauss->weight*basis[i]; 1757 pe->values[i*NDOF2+1]+=duy*weight*Jdet*gauss->weight*basis[i]; 1758 1758 } 1759 1759 break; … … 1776 1776 dux=scale*vx; 1777 1777 duy=scale*vy; 1778 pe->values[i*NDOF2+0]+=dux*weight*Jdet*gauss->weight* l1l2l3[i];1779 pe->values[i*NDOF2+1]+=duy*weight*Jdet*gauss->weight* l1l2l3[i];1778 pe->values[i*NDOF2+0]+=dux*weight*Jdet*gauss->weight*basis[i]; 1779 pe->values[i*NDOF2+1]+=duy*weight*Jdet*gauss->weight*basis[i]; 1780 1780 } 1781 1781 break; … … 1794 1794 dux=scale*(vxobs-vx); 1795 1795 duy=scale*(vyobs-vy); 1796 pe->values[i*NDOF2+0]+=dux*weight*Jdet*gauss->weight* l1l2l3[i];1797 pe->values[i*NDOF2+1]+=duy*weight*Jdet*gauss->weight* l1l2l3[i];1796 pe->values[i*NDOF2+0]+=dux*weight*Jdet*gauss->weight*basis[i]; 1797 pe->values[i*NDOF2+1]+=duy*weight*Jdet*gauss->weight*basis[i]; 1798 1798 } 1799 1799 break; … … 1811 1811 dux = - pow(meanvel,2.) * log((fabs(vx)+epsvel)/(fabs(vxobs)+epsvel)) / (vx+epsvel); 1812 1812 duy = - pow(meanvel,2.) * log((fabs(vy)+epsvel)/(fabs(vyobs)+epsvel)) / (vy+epsvel); 1813 pe->values[i*NDOF2+0]+=dux*weight*Jdet*gauss->weight* l1l2l3[i];1814 pe->values[i*NDOF2+1]+=duy*weight*Jdet*gauss->weight* l1l2l3[i];1813 pe->values[i*NDOF2+0]+=dux*weight*Jdet*gauss->weight*basis[i]; 1814 pe->values[i*NDOF2+1]+=duy*weight*Jdet*gauss->weight*basis[i]; 1815 1815 } 1816 1816 break; … … 1849 1849 double vx,vy,vxobs,vyobs,weight; 1850 1850 double xyz_list[NUMVERTICES][3]; 1851 double l1l2l3[3];1851 double basis[3]; 1852 1852 GaussTria* gauss=NULL; 1853 1853 … … 1888 1888 vxobs_input->GetParameterValue(&vxobs,gauss); 1889 1889 vyobs_input->GetParameterValue(&vyobs,gauss); 1890 GetNodalFunctions( l1l2l3, gauss);1890 GetNodalFunctions(basis, gauss); 1891 1891 1892 1892 /*Loop over all requested responses*/ … … 1910 1910 dux=vxobs-vx; 1911 1911 duy=vyobs-vy; 1912 pe->values[i*NDOF4+0]+=dux*weight*Jdet*gauss->weight* l1l2l3[i];1913 pe->values[i*NDOF4+1]+=duy*weight*Jdet*gauss->weight* l1l2l3[i];1912 pe->values[i*NDOF4+0]+=dux*weight*Jdet*gauss->weight*basis[i]; 1913 pe->values[i*NDOF4+1]+=duy*weight*Jdet*gauss->weight*basis[i]; 1914 1914 } 1915 1915 break; … … 1931 1931 dux=scalex*(vxobs-vx); 1932 1932 duy=scaley*(vyobs-vy); 1933 pe->values[i*NDOF4+0]+=dux*weight*Jdet*gauss->weight* l1l2l3[i];1934 pe->values[i*NDOF4+1]+=duy*weight*Jdet*gauss->weight* l1l2l3[i];1933 pe->values[i*NDOF4+0]+=dux*weight*Jdet*gauss->weight*basis[i]; 1934 pe->values[i*NDOF4+1]+=duy*weight*Jdet*gauss->weight*basis[i]; 1935 1935 } 1936 1936 break; … … 1953 1953 dux=scale*vx; 1954 1954 duy=scale*vy; 1955 pe->values[i*NDOF4+0]+=dux*weight*Jdet*gauss->weight* l1l2l3[i];1956 pe->values[i*NDOF4+1]+=duy*weight*Jdet*gauss->weight* l1l2l3[i];1955 pe->values[i*NDOF4+0]+=dux*weight*Jdet*gauss->weight*basis[i]; 1956 pe->values[i*NDOF4+1]+=duy*weight*Jdet*gauss->weight*basis[i]; 1957 1957 } 1958 1958 break; … … 1971 1971 dux=scale*(vxobs-vx); 1972 1972 duy=scale*(vyobs-vy); 1973 pe->values[i*NDOF4+0]+=dux*weight*Jdet*gauss->weight* l1l2l3[i];1974 pe->values[i*NDOF4+1]+=duy*weight*Jdet*gauss->weight* l1l2l3[i];1973 pe->values[i*NDOF4+0]+=dux*weight*Jdet*gauss->weight*basis[i]; 1974 pe->values[i*NDOF4+1]+=duy*weight*Jdet*gauss->weight*basis[i]; 1975 1975 } 1976 1976 break; … … 1988 1988 dux = - pow(meanvel,2.) * log((fabs(vx)+epsvel)/(fabs(vxobs)+epsvel)) / (vx+epsvel); 1989 1989 duy = - pow(meanvel,2.) * log((fabs(vy)+epsvel)/(fabs(vyobs)+epsvel)) / (vy+epsvel); 1990 pe->values[i*NDOF4+0]+=dux*weight*Jdet*gauss->weight* l1l2l3[i];1991 pe->values[i*NDOF4+1]+=duy*weight*Jdet*gauss->weight* l1l2l3[i];1990 pe->values[i*NDOF4+0]+=dux*weight*Jdet*gauss->weight*basis[i]; 1991 pe->values[i*NDOF4+1]+=duy*weight*Jdet*gauss->weight*basis[i]; 1992 1992 } 1993 1993 break; … … 2229 2229 double xyz_list[NUMVERTICES][3]; 2230 2230 double slope[2]; 2231 double l1l2l3[3];2231 double basis[3]; 2232 2232 GaussTria* gauss=NULL; 2233 2233 … … 2253 2253 2254 2254 GetJacobianDeterminant2d(&Jdet, &xyz_list[0][0],gauss); 2255 GetNodalFunctions( l1l2l3, gauss);2255 GetNodalFunctions(basis, gauss); 2256 2256 2257 2257 slope_input->GetParameterDerivativeValue(&slope[0],&xyz_list[0][0],gauss); 2258 2258 2259 2259 if ( (analysis_type==SurfaceSlopeXAnalysisEnum) || (analysis_type==BedSlopeXAnalysisEnum)){ 2260 for(i=0;i<numdof;i++) pe->values[i]+=Jdet*gauss->weight*slope[0]* l1l2l3[i];2260 for(i=0;i<numdof;i++) pe->values[i]+=Jdet*gauss->weight*slope[0]*basis[i]; 2261 2261 } 2262 2262 if ( (analysis_type==SurfaceSlopeYAnalysisEnum) || (analysis_type==BedSlopeYAnalysisEnum)){ 2263 for(i=0;i<numdof;i++) pe->values[i]+=Jdet*gauss->weight*slope[1]* l1l2l3[i];2263 for(i=0;i<numdof;i++) pe->values[i]+=Jdet*gauss->weight*slope[1]*basis[i]; 2264 2264 } 2265 2265 } … … 2949 2949 double Jdet,weight; 2950 2950 double xyz_list[NUMVERTICES][3]; 2951 double d h1dh3[NDOF2][NUMVERTICES];2951 double dbasis[NDOF2][NUMVERTICES]; 2952 2952 double dk[NDOF2]; 2953 2953 double grade_g[NUMVERTICES]={0.0}; … … 2967 2967 2968 2968 GetJacobianDeterminant2d(&Jdet, &xyz_list[0][0],gauss); 2969 GetNodalFunctionsDerivatives(&d h1dh3[0][0],&xyz_list[0][0],gauss);2969 GetNodalFunctionsDerivatives(&dbasis[0][0],&xyz_list[0][0],gauss); 2970 2970 weights_input->GetParameterValue(&weight,gauss,weight_index); 2971 2971 … … 2974 2974 2975 2975 /*Build gradje_g_gaussian vector (actually -dJ/ddrag): */ 2976 for (i=0;i<NUMVERTICES;i++) grade_g[i]+=-weight*Jdet*gauss->weight*(d h1dh3[0][i]*dk[0]+dh1dh3[1][i]*dk[1]);2976 for (i=0;i<NUMVERTICES;i++) grade_g[i]+=-weight*Jdet*gauss->weight*(dbasis[0][i]*dk[0]+dbasis[1][i]*dk[1]); 2977 2977 } 2978 2978 VecSetValues(gradient,NUMVERTICES,doflist1,(const double*)grade_g,ADD_VALUES); … … 3050 3050 double bed,thickness,Neff,drag; 3051 3051 double xyz_list[NUMVERTICES][3]; 3052 double d h1dh3[NDOF2][NUMVERTICES];3052 double dbasis[NDOF2][NUMVERTICES]; 3053 3053 double dk[NDOF2]; 3054 3054 double grade_g[NUMVERTICES]={0.0}; 3055 3055 double grade_g_gaussian[NUMVERTICES]; 3056 double l1l2l3[3];3056 double basis[3]; 3057 3057 double epsilon[3]; /* epsilon=[exx,eyy,exy];*/ 3058 3058 Friction* friction=NULL; … … 3084 3084 3085 3085 GetJacobianDeterminant2d(&Jdet, &xyz_list[0][0],gauss); 3086 GetNodalFunctions( l1l2l3, gauss);3087 GetNodalFunctionsDerivatives(&d h1dh3[0][0],&xyz_list[0][0],gauss);3086 GetNodalFunctions(basis, gauss); 3087 GetNodalFunctionsDerivatives(&dbasis[0][0],&xyz_list[0][0],gauss); 3088 3088 3089 3089 /*Build alpha_complement_list: */ … … 3100 3100 /*Build gradje_g_gaussian vector (actually -dJ/ddrag): */ 3101 3101 for (i=0;i<NUMVERTICES;i++){ 3102 grade_g_gaussian[i]=-2*drag*alpha_complement*((lambda*vx+mu*vy))*Jdet*gauss->weight* l1l2l3[i];3102 grade_g_gaussian[i]=-2*drag*alpha_complement*((lambda*vx+mu*vy))*Jdet*gauss->weight*basis[i]; 3103 3103 } 3104 3104 … … 3128 3128 double surface_normal[3],bed_normal[3]; 3129 3129 double xyz_list[NUMVERTICES][3]; 3130 double d h1dh3[NDOF2][NUMVERTICES];3130 double dbasis[NDOF2][NUMVERTICES]; 3131 3131 double dk[NDOF2]; 3132 double l1l2l3[3];3132 double basis[3]; 3133 3133 double epsilon[3]; /* epsilon=[exx,eyy,exy];*/ 3134 3134 double grade_g[NUMVERTICES]={0.0}; … … 3193 3193 3194 3194 /* Get nodal functions value at gaussian point:*/ 3195 GetNodalFunctions( l1l2l3, gauss);3195 GetNodalFunctions(basis, gauss); 3196 3196 3197 3197 /*Get nodal functions derivatives*/ 3198 GetNodalFunctionsDerivatives(&d h1dh3[0][0],&xyz_list[0][0],gauss);3198 GetNodalFunctionsDerivatives(&dbasis[0][0],&xyz_list[0][0],gauss); 3199 3199 3200 3200 /*Get k derivative: dk/dx */ … … 3208 3208 -mu *(2*drag*alpha_complement*(vy - vz*bed_normal[1]*bed_normal[2])) 3209 3209 -xi *(2*drag*alpha_complement*(-vx*bed_normal[0]*bed_normal[2]-vy*bed_normal[1]*bed_normal[2])) 3210 )*Jdet*gauss->weight* l1l2l3[i];3210 )*Jdet*gauss->weight*basis[i]; 3211 3211 } 3212 3212 … … 3228 3228 double Jdet,weight; 3229 3229 double xyz_list[NUMVERTICES][3]; 3230 double d h1dh3[NDOF2][NUMVERTICES];3230 double dbasis[NDOF2][NUMVERTICES]; 3231 3231 double dk[NDOF2]; 3232 3232 double grade_g[NUMVERTICES]={0.0}; … … 3247 3247 3248 3248 GetJacobianDeterminant2d(&Jdet, &xyz_list[0][0],gauss); 3249 GetNodalFunctionsDerivatives(&d h1dh3[0][0],&xyz_list[0][0],gauss);3249 GetNodalFunctionsDerivatives(&dbasis[0][0],&xyz_list[0][0],gauss); 3250 3250 weights_input->GetParameterValue(&weight,gauss,weight_index); 3251 3251 … … 3255 3255 /*Build gradje_g_gaussian vector (actually -dJ/ddrag): */ 3256 3256 for (i=0;i<NUMVERTICES;i++){ 3257 grade_g[i]+=-weight*Jdet*gauss->weight*(d h1dh3[0][i]*dk[0]+dh1dh3[1][i]*dk[1]);3257 grade_g[i]+=-weight*Jdet*gauss->weight*(dbasis[0][i]*dk[0]+dbasis[1][i]*dk[1]); 3258 3258 _assert_(!isnan(grade_g[i])); 3259 3259 } … … 3289 3289 int doflist1[NUMVERTICES]; 3290 3290 double thickness,Jdet; 3291 double l1l2l3[3];3291 double basis[3]; 3292 3292 double dbasis[NDOF2][NUMVERTICES]; 3293 3293 double Dlambda[2],dp[2]; … … 3311 3311 3312 3312 GetJacobianDeterminant2d(&Jdet, &xyz_list[0][0],gauss); 3313 GetNodalFunctions( l1l2l3, gauss);3313 GetNodalFunctions(basis, gauss); 3314 3314 GetNodalFunctionsDerivatives(&dbasis[0][0],&xyz_list[0][0],gauss); 3315 3315 … … 3318 3318 thickness_input->GetParameterDerivativeValue(&dp[0],&xyz_list[0][0],gauss); 3319 3319 3320 for(i=0;i<NUMVERTICES;i++) grade_g[i]+=thickness*Dlambda[0]*Jdet*gauss->weight* l1l2l3[i];3320 for(i=0;i<NUMVERTICES;i++) grade_g[i]+=thickness*Dlambda[0]*Jdet*gauss->weight*basis[i]; 3321 3321 } 3322 3322 … … 3334 3334 int doflist1[NUMVERTICES]; 3335 3335 double thickness,Jdet; 3336 double l1l2l3[3];3336 double basis[3]; 3337 3337 double dbasis[NDOF2][NUMVERTICES]; 3338 3338 double Dlambda[2],dp[2]; … … 3356 3356 3357 3357 GetJacobianDeterminant2d(&Jdet, &xyz_list[0][0],gauss); 3358 GetNodalFunctions( l1l2l3, gauss);3358 GetNodalFunctions(basis, gauss); 3359 3359 GetNodalFunctionsDerivatives(&dbasis[0][0],&xyz_list[0][0],gauss); 3360 3360 … … 3363 3363 thickness_input->GetParameterDerivativeValue(&dp[0],&xyz_list[0][0],gauss); 3364 3364 3365 for(i=0;i<NUMVERTICES;i++) grade_g[i]+=thickness*Dlambda[1]*Jdet*gauss->weight* l1l2l3[i];3365 for(i=0;i<NUMVERTICES;i++) grade_g[i]+=thickness*Dlambda[1]*Jdet*gauss->weight*basis[i]; 3366 3366 } 3367 3367 VecSetValues(gradient,NUMVERTICES,doflist1,(const double*)grade_g,ADD_VALUES); -
issm/trunk/src/c/objects/Elements/TriaRef.cpp
r8303 r8653 70 70 71 71 int i; 72 double d h1dh3[NDOF2][NUMNODES];72 double dbasis[NDOF2][NUMNODES]; 73 73 74 74 /*Get dh1dh2dh3 in actual coordinate system: */ 75 GetNodalFunctionsDerivatives(&d h1dh3[0][0],xyz_list,gauss);75 GetNodalFunctionsDerivatives(&dbasis[0][0],xyz_list,gauss); 76 76 77 77 /*Build B: */ 78 78 for (i=0;i<NUMNODES;i++){ 79 *(B+NDOF2*NUMNODES*0+NDOF2*i)=d h1dh3[0][i]; //B[0][NDOF2*i]=dh1dh3[0][i];79 *(B+NDOF2*NUMNODES*0+NDOF2*i)=dbasis[0][i]; //B[0][NDOF2*i]=dbasis[0][i]; 80 80 *(B+NDOF2*NUMNODES*0+NDOF2*i+1)=0; 81 81 *(B+NDOF2*NUMNODES*1+NDOF2*i)=0; 82 *(B+NDOF2*NUMNODES*1+NDOF2*i+1)=d h1dh3[1][i];83 *(B+NDOF2*NUMNODES*2+NDOF2*i)=(float).5*d h1dh3[1][i];84 *(B+NDOF2*NUMNODES*2+NDOF2*i+1)=(float).5*d h1dh3[0][i];82 *(B+NDOF2*NUMNODES*1+NDOF2*i+1)=dbasis[1][i]; 83 *(B+NDOF2*NUMNODES*2+NDOF2*i)=(float).5*dbasis[1][i]; 84 *(B+NDOF2*NUMNODES*2+NDOF2*i+1)=(float).5*dbasis[0][i]; 85 85 } 86 86 } … … 101 101 102 102 /*Same thing in the actual coordinate system: */ 103 double d h1dh3[NDOF2][NUMNODES];103 double dbasis[NDOF2][NUMNODES]; 104 104 105 105 /*Get dh1dh2dh3 in actual coordinates system : */ 106 GetNodalFunctionsDerivatives(&d h1dh3[0][0],xyz_list,gauss);106 GetNodalFunctionsDerivatives(&dbasis[0][0],xyz_list,gauss); 107 107 108 108 /*Build B': */ 109 109 for (int i=0;i<NUMNODES;i++){ 110 *(B+NDOF2*NUMNODES*0+NDOF2*i)=d h1dh3[0][i];110 *(B+NDOF2*NUMNODES*0+NDOF2*i)=dbasis[0][i]; 111 111 *(B+NDOF2*NUMNODES*0+NDOF2*i+1)=0; 112 112 *(B+NDOF2*NUMNODES*1+NDOF2*i)=0; 113 *(B+NDOF2*NUMNODES*1+NDOF2*i+1)=d h1dh3[1][i];114 *(B+NDOF2*NUMNODES*2+NDOF2*i)=0.5*d h1dh3[1][i];115 *(B+NDOF2*NUMNODES*2+NDOF2*i+1)=0.5*d h1dh3[0][i];113 *(B+NDOF2*NUMNODES*1+NDOF2*i+1)=dbasis[1][i]; 114 *(B+NDOF2*NUMNODES*2+NDOF2*i)=0.5*dbasis[1][i]; 115 *(B+NDOF2*NUMNODES*2+NDOF2*i+1)=0.5*dbasis[0][i]; 116 116 } 117 117 } … … 167 167 */ 168 168 169 double l1l2l3[NUMNODES];169 double basis[NUMNODES]; 170 170 171 171 /*Get dh1dh2dh3 in actual coordinate system: */ 172 GetNodalFunctions(& l1l2l3[0],gauss);172 GetNodalFunctions(&basis[0],gauss); 173 173 174 174 /*Build B_prog: */ 175 175 for (int i=0;i<NUMNODES;i++){ 176 *(B_prog+NDOF1*NUMNODES*0+NDOF1*i)= l1l2l3[i];177 *(B_prog+NDOF1*NUMNODES*1+NDOF1*i)= l1l2l3[i];176 *(B_prog+NDOF1*NUMNODES*0+NDOF1*i)=basis[i]; 177 *(B_prog+NDOF1*NUMNODES*1+NDOF1*i)=basis[i]; 178 178 } 179 179 } … … 194 194 195 195 /*Same thing in the actual coordinate system: */ 196 double d h1dh3[NDOF2][NUMNODES];196 double dbasis[NDOF2][NUMNODES]; 197 197 198 198 /*Get dh1dh2dh3 in actual coordinates system : */ 199 GetNodalFunctionsDerivatives(&d h1dh3[0][0],xyz_list,gauss);199 GetNodalFunctionsDerivatives(&dbasis[0][0],xyz_list,gauss); 200 200 201 201 /*Build B': */ 202 202 for (int i=0;i<NUMNODES;i++){ 203 *(Bprime+NDOF2*NUMNODES*0+NDOF2*i)=2*d h1dh3[0][i];204 *(Bprime+NDOF2*NUMNODES*0+NDOF2*i+1)=d h1dh3[1][i];205 *(Bprime+NDOF2*NUMNODES*1+NDOF2*i)=d h1dh3[0][i];206 *(Bprime+NDOF2*NUMNODES*1+NDOF2*i+1)=2*d h1dh3[1][i];207 *(Bprime+NDOF2*NUMNODES*2+NDOF2*i)=d h1dh3[1][i];208 *(Bprime+NDOF2*NUMNODES*2+NDOF2*i+1)=d h1dh3[0][i];203 *(Bprime+NDOF2*NUMNODES*0+NDOF2*i)=2*dbasis[0][i]; 204 *(Bprime+NDOF2*NUMNODES*0+NDOF2*i+1)=dbasis[1][i]; 205 *(Bprime+NDOF2*NUMNODES*1+NDOF2*i)=dbasis[0][i]; 206 *(Bprime+NDOF2*NUMNODES*1+NDOF2*i+1)=2*dbasis[1][i]; 207 *(Bprime+NDOF2*NUMNODES*2+NDOF2*i)=dbasis[1][i]; 208 *(Bprime+NDOF2*NUMNODES*2+NDOF2*i+1)=dbasis[0][i]; 209 209 } 210 210 } … … 226 226 227 227 /*Same thing in the actual coordinate system: */ 228 double d h1dh3[NDOF2][NUMNODES];228 double dbasis[NDOF2][NUMNODES]; 229 229 230 230 /*Get dh1dh2dh3 in actual coordinates system : */ 231 GetNodalFunctionsDerivatives(&d h1dh3[0][0],xyz_list,gauss);231 GetNodalFunctionsDerivatives(&dbasis[0][0],xyz_list,gauss); 232 232 233 233 /*Build Bprime: */ 234 234 for (int i=0;i<NUMNODES;i++){ 235 *(Bprime+NDOF2*NUMNODES*0+NDOF2*i)=d h1dh3[0][i];235 *(Bprime+NDOF2*NUMNODES*0+NDOF2*i)=dbasis[0][i]; 236 236 *(Bprime+NDOF2*NUMNODES*0+NDOF2*i+1)=0; 237 237 *(Bprime+NDOF2*NUMNODES*1+NDOF2*i)=0; 238 *(Bprime+NDOF2*NUMNODES*1+NDOF2*i+1)=d h1dh3[1][i];239 *(Bprime+NDOF2*NUMNODES*2+NDOF2*i)=d h1dh3[1][i];240 *(Bprime+NDOF2*NUMNODES*2+NDOF2*i+1)=d h1dh3[0][i];241 *(Bprime+NDOF2*NUMNODES*3+NDOF2*i)=d h1dh3[0][i];242 *(Bprime+NDOF2*NUMNODES*3+NDOF2*i+1)=d h1dh3[1][i];238 *(Bprime+NDOF2*NUMNODES*1+NDOF2*i+1)=dbasis[1][i]; 239 *(Bprime+NDOF2*NUMNODES*2+NDOF2*i)=dbasis[1][i]; 240 *(Bprime+NDOF2*NUMNODES*2+NDOF2*i+1)=dbasis[0][i]; 241 *(Bprime+NDOF2*NUMNODES*3+NDOF2*i)=dbasis[0][i]; 242 *(Bprime+NDOF2*NUMNODES*3+NDOF2*i+1)=dbasis[1][i]; 243 243 } 244 244 } … … 257 257 258 258 /*Same thing in the actual coordinate system: */ 259 double d h1dh3[NDOF2][NUMNODES];259 double dbasis[NDOF2][NUMNODES]; 260 260 261 261 /*Get dh1dh2dh3 in actual coordinates system : */ 262 GetNodalFunctionsDerivatives(&d h1dh3[0][0],xyz_list,gauss);262 GetNodalFunctionsDerivatives(&dbasis[0][0],xyz_list,gauss); 263 263 264 264 /*Build B': */ 265 265 for (int i=0;i<NUMNODES;i++){ 266 *(Bprime_prog+NDOF1*NUMNODES*0+NDOF1*i)=d h1dh3[0][i];267 *(Bprime_prog+NDOF1*NUMNODES*1+NDOF1*i)=d h1dh3[1][i];266 *(Bprime_prog+NDOF1*NUMNODES*0+NDOF1*i)=dbasis[0][i]; 267 *(Bprime_prog+NDOF1*NUMNODES*1+NDOF1*i)=dbasis[1][i]; 268 268 } 269 269 } … … 285 285 286 286 int i; 287 double l1l2l3[3];288 289 /*Get l1l2l3in actual coordinate system: */290 GetNodalFunctions( l1l2l3,gauss);287 double basis[3]; 288 289 /*Get basis in actual coordinate system: */ 290 GetNodalFunctions(basis,gauss); 291 291 292 292 /*Build L: */ 293 293 if(numdof==1){ 294 294 for (i=0;i<NUMNODES;i++){ 295 L[i]= l1l2l3[i];295 L[i]=basis[i]; 296 296 } 297 297 } 298 298 else{ 299 299 for (i=0;i<NUMNODES;i++){ 300 *(L+numdof*NUMNODES*0+numdof*i)= l1l2l3[i]; //L[0][NDOF2*i]=dh1dh3[0][i];300 *(L+numdof*NUMNODES*0+numdof*i)=basis[i]; //L[0][NDOF2*i]=dbasis[0][i]; 301 301 *(L+numdof*NUMNODES*0+numdof*i+1)=0; 302 302 *(L+numdof*NUMNODES*1+numdof*i)=0; 303 *(L+numdof*NUMNODES*1+numdof*i+1)= l1l2l3[i];303 *(L+numdof*NUMNODES*1+numdof*i+1)=basis[i]; 304 304 } 305 305 } … … 394 394 /*}}}*/ 395 395 /*FUNCTION TriaRef::GetNodalFunctions{{{1*/ 396 void TriaRef::GetNodalFunctions(double* l1l2l3,GaussTria* gauss){396 void TriaRef::GetNodalFunctions(double* basis,GaussTria* gauss){ 397 397 /*This routine returns the values of the nodal functions at the gaussian point.*/ 398 398 399 l1l2l3[0]=gauss->coord1;400 l1l2l3[1]=gauss->coord2;401 l1l2l3[2]=gauss->coord3;399 basis[0]=gauss->coord1; 400 basis[1]=gauss->coord2; 401 basis[2]=gauss->coord3; 402 402 403 403 } 404 404 /*}}}*/ 405 405 /*FUNCTION TriaRef::GetSegmentNodalFunctions{{{1*/ 406 void TriaRef::GetSegmentNodalFunctions(double* l1l2,GaussTria* gauss,int index1,int index2){406 void TriaRef::GetSegmentNodalFunctions(double* basis,GaussTria* gauss,int index1,int index2){ 407 407 /*This routine returns the values of the nodal functions at the gaussian point.*/ 408 408 … … 413 413 _assert_(index1>=0 && index1<3); 414 414 _assert_(index2>=0 && index2<3); 415 l1l2[0]=BasisFunctions[index1];416 l1l2[1]=BasisFunctions[index2];415 basis[0]=BasisFunctions[index1]; 416 basis[1]=BasisFunctions[index2]; 417 417 } 418 418 /*}}}*/ 419 419 /*FUNCTION TriaRef::GetNodalFunctionsDerivatives{{{1*/ 420 void TriaRef::GetNodalFunctionsDerivatives(double* d h1dh3,double* xyz_list, GaussTria* gauss){420 void TriaRef::GetNodalFunctionsDerivatives(double* dbasis,double* xyz_list, GaussTria* gauss){ 421 421 422 422 /*This routine returns the values of the nodal functions derivatives (with respect to the 423 423 * actual coordinate system): */ 424 424 int i; 425 double d h1dh3_ref[NDOF2][NUMNODES];425 double dbasis_ref[NDOF2][NUMNODES]; 426 426 double Jinv[NDOF2][NDOF2]; 427 427 428 428 /*Get derivative values with respect to parametric coordinate system: */ 429 GetNodalFunctionsDerivativesReference(&d h1dh3_ref[0][0], gauss);429 GetNodalFunctionsDerivativesReference(&dbasis_ref[0][0], gauss); 430 430 431 431 /*Get Jacobian invert: */ 432 432 GetJacobianInvert(&Jinv[0][0], xyz_list, gauss); 433 433 434 /*Build d h1dh3:434 /*Build dbasis: 435 435 * 436 436 * [dhi/dx]= Jinv*[dhi/dr] … … 438 438 */ 439 439 for (i=0;i<NUMNODES;i++){ 440 d h1dh3[NUMNODES*0+i]=Jinv[0][0]*dh1dh3_ref[0][i]+Jinv[0][1]*dh1dh3_ref[1][i];441 d h1dh3[NUMNODES*1+i]=Jinv[1][0]*dh1dh3_ref[0][i]+Jinv[1][1]*dh1dh3_ref[1][i];440 dbasis[NUMNODES*0+i]=Jinv[0][0]*dbasis_ref[0][i]+Jinv[0][1]*dbasis_ref[1][i]; 441 dbasis[NUMNODES*1+i]=Jinv[1][0]*dbasis_ref[0][i]+Jinv[1][1]*dbasis_ref[1][i]; 442 442 } 443 443 … … 467 467 468 468 /*From node values of parameter p (plist[0],plist[1],plist[2]), return parameter derivative value at gaussian 469 * point specified by gauss_ l1l2l3:469 * point specified by gauss_basis: 470 470 * dp/dx=plist[0]*dh1/dx+plist[1]*dh2/dx+plist[2]*dh3/dx 471 471 * dp/dx=plist[0]*dh1/dx+plist[1]*dh2/dx+plist[2]*dh3/dx … … 475 475 476 476 /*Nodal Derivatives*/ 477 double d h1dh3[2][3]; //nodal derivative functions in actual coordinate system.477 double dbasis[2][3]; //nodal derivative functions in actual coordinate system. 478 478 479 479 /*Get dh1dh2dh3 in actual coordinate system: */ 480 GetNodalFunctionsDerivatives(&d h1dh3[0][0],xyz_list, gauss);480 GetNodalFunctionsDerivatives(&dbasis[0][0],xyz_list, gauss); 481 481 482 482 /*Assign values*/ 483 *(p+0)=plist[0]*d h1dh3[0][0]+plist[1]*dh1dh3[0][1]+plist[2]*dh1dh3[0][2];484 *(p+1)=plist[0]*d h1dh3[1][0]+plist[1]*dh1dh3[1][1]+plist[2]*dh1dh3[1][2];483 *(p+0)=plist[0]*dbasis[0][0]+plist[1]*dbasis[0][1]+plist[2]*dbasis[0][2]; 484 *(p+1)=plist[0]*dbasis[1][0]+plist[1]*dbasis[1][1]+plist[2]*dbasis[1][2]; 485 485 486 486 } … … 493 493 494 494 /*nodal functions annd output: */ 495 double l1l2l3[3];495 double basis[3]; 496 496 497 497 /*Get nodal functions*/ 498 GetNodalFunctions( l1l2l3, gauss);498 GetNodalFunctions(basis, gauss); 499 499 500 500 /*Get parameter*/ 501 *p= l1l2l3[0]*plist[0]+l1l2l3[1]*plist[1]+l1l2l3[2]*plist[2];502 } 503 /*}}}*/ 501 *p=basis[0]*plist[0]+basis[1]*plist[1]+basis[2]*plist[2]; 502 } 503 /*}}}*/
Note:
See TracChangeset
for help on using the changeset viewer.