Changeset 11262
- Timestamp:
- 01/31/12 09:15:07 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/objects/Elements/Penta.cpp
r11260 r11262 3207 3207 int i,j,ig,found=0; 3208 3208 double Jdet,u,v,w,um,vm,wm; 3209 double h,hx,hy,hz,vx,vy,vz,vel; 3209 3210 double gravity,rho_ice,rho_water; 3210 3211 double epsvel=2.220446049250313e-16; … … 3214 3215 double tau_parameter,diameter; 3215 3216 double xyz_list[NUMVERTICES][3]; 3216 double B[3][numdof];3217 double Bprime[3][numdof];3218 3217 double B_conduct[3][numdof]; 3219 3218 double B_advec[3][numdof]; 3220 double B_stab[2][numdof];3221 3219 double Bprime_advec[3][numdof]; 3222 3220 double L[numdof]; … … 3225 3223 double D_scalar_trans,D_scalar_stab; 3226 3224 double D[3][3]; 3227 double K[ 2][2]={0.0};3225 double K[3][3]={0.0}; 3228 3226 Tria* tria=NULL; 3229 3227 GaussPenta *gauss=NULL; … … 3262 3260 /*Conduction: */ 3263 3261 /*Need to change that depending on enthalpy value -> cold or temperate ice: */ 3264 3265 3262 GetBConduct(&B_conduct[0][0],&xyz_list[0][0],gauss); 3266 3263 … … 3281 3278 3282 3279 /*Advection: */ 3283 3284 3280 GetBAdvec(&B_advec[0][0],&xyz_list[0][0],gauss); 3285 3281 GetBprimeAdvec(&Bprime_advec[0][0],&xyz_list[0][0],gauss); … … 3291 3287 vym_input->GetInputValue(&vm,gauss); 3292 3288 vzm_input->GetInputValue(&wm,gauss); 3289 vx=u-um; vy=v-vm; vz=w-wm; 3293 3290 3294 3291 D_scalar_advec=gauss->weight*Jdet; 3295 3292 if(dt) D_scalar_advec=D_scalar_advec*dt; 3296 3293 3297 D[0][0]=D_scalar_advec* (u-um);D[0][1]=0;D[0][2]=0;3298 D[1][0]=0; D[1][1]=D_scalar_advec*(v-vm);D[1][2]=0;3299 D[2][0]=0; D[2][1]=0; D[2][2]=D_scalar_advec*(w-wm);3294 D[0][0]=D_scalar_advec*vx;D[0][1]=0; D[0][2]=0; 3295 D[1][0]=0; D[1][1]=D_scalar_advec*vy;D[1][2]=0; 3296 D[2][0]=0; D[2][1]=0; D[2][2]=D_scalar_advec*vz; 3300 3297 3301 3298 TripleMultiply(&B_advec[0][0],3,numdof,1, … … 3305 3302 3306 3303 /*Transient: */ 3307 3308 3304 if(dt){ 3309 3305 GetNodalFunctionsP1(&L[0], gauss); … … 3318 3314 3319 3315 /*Artifficial diffusivity*/ 3320 3321 3316 if(stabilization==1){ 3322 3317 /*Build K: */ 3323 D_scalar_stab=gauss->weight*Jdet/(pow(u-um,2)+pow(v-vm,2)+epsvel); 3318 GetElementSizes(&hx,&hy,&hz); 3319 vel=sqrt(pow(vx,2.)+pow(vy,2.)+pow(vz,2.))+1.e-14; 3320 h=sqrt( pow(hx*vx/vel,2.) + pow(hy*vy/vel,2.) + pow(hz*vz/vel,2.)); 3321 K[0][0]=h/(2*vel)*fabs(vx*vx); K[0][1]=h/(2*vel)*fabs(vx*vy); K[0][2]=h/(2*vel)*fabs(vx*vz); 3322 K[1][0]=h/(2*vel)*fabs(vy*vx); K[1][1]=h/(2*vel)*fabs(vy*vy); K[1][2]=h/(2*vel)*fabs(vy*vz); 3323 K[2][0]=h/(2*vel)*fabs(vz*vx); K[2][1]=h/(2*vel)*fabs(vz*vy); K[2][2]=h/(2*vel)*fabs(vz*vz); 3324 D_scalar_stab=gauss->weight*Jdet; 3324 3325 if(dt) D_scalar_stab=D_scalar_stab*dt; 3325 K[0][0]=D_scalar_stab*pow(u,2); K[0][1]=D_scalar_stab*fabs(u)*fabs(v); 3326 K[1][0]=D_scalar_stab*fabs(u)*fabs(v);K[1][1]=D_scalar_stab*pow(v,2); 3327 _error_("TO BE RECODED"); 3328 3329 //GetBArtdiff(&B_stab[0][0],&xyz_list[0][0],gauss); 3330 3331 TripleMultiply(&B_stab[0][0],2,numdof,1, 3332 &K[0][0],2,2,0, 3333 &B_stab[0][0],2,numdof,0, 3326 for(i=0;i<3;i++) for(j=0;j<3;j++) K[i][j] = D_scalar_stab*K[i][j]; 3327 3328 GetBprimeAdvec(&Bprime_advec[0][0],&xyz_list[0][0],gauss); 3329 3330 TripleMultiply(&Bprime_advec[0][0],3,numdof,1, 3331 &K[0][0],3,3,0, 3332 &Bprime_advec[0][0],3,numdof,0, 3334 3333 &Ke->values[0],1); 3335 3334 } 3336 3335 else if(stabilization==2){ 3337 3338 3336 GetNodalFunctionsP1Derivatives(&dbasis[0][0],&xyz_list[0][0], gauss); 3339 3340 3337 tau_parameter=GetStabilizationParameter(u-um,v-vm,w-wm,diameter,rho_ice,heatcapacity,thermalconductivity); 3341 3338 … … 3456 3453 double tau_parameter,diameter; 3457 3454 double xyz_list[NUMVERTICES][3]; 3458 double B[3][numdof];3459 double Bprime[3][numdof];3460 3455 double B_conduct[3][numdof]; 3461 3456 double B_advec[3][numdof]; 3462 double B_stab[2][numdof];3463 3457 double Bprime_advec[3][numdof]; 3464 3458 double L[numdof]; … … 3537 3531 3538 3532 /*Transient: */ 3539 3540 3533 if(dt){ 3541 3534 GetNodalFunctionsP1(&L[0], gauss); … … 3550 3543 3551 3544 /*Artifficial diffusivity*/ 3552 3553 3545 if(stabilization==1){ 3554 3546 /*Build K: */
Note:
See TracChangeset
for help on using the changeset viewer.