View Issue Details [ Jump to Notes ] | [ Print ] | ||||||||
ID | Project | Category | View Status | Date Submitted | Last Update | ||||
0011960 | ParaView | Feature | public | 2011-03-10 16:03 | 2012-02-18 00:02 | ||||
Reporter | Greg Weirs | ||||||||
Assigned To | Robert Maynard | ||||||||
Priority | high | Severity | minor | Reproducibility | N/A | ||||
Status | closed | Resolution | fixed | ||||||
Platform | OS | OS Version | |||||||
Product Version | Development | ||||||||
Target Version | Fixed in Version | 3.14 | |||||||
Summary | 0011960: CTH reader: Optionally calculate "derived variables" density and material densities. | ||||||||
Description | In spcth files, derived variables are not saved in the file because they can (usually) be calculated from the other variables that are written to the file. However, the spcth reader does not do this. The feature request is to optionally compute several derived variables if the variables they depend on are in the file and if the user requests them (through the variable checkboxes on the preperties panel.) Formulas given in Additional Information. The motivation for this request is that the Prism plugin is much more effective when the material densities are available, so this request is focused on just these quantities. A more complete solution would be to optionally compute all the derived variables, which would be straightforward and not too much more work after computing the material densities. | ||||||||
Additional Information | How to compute the density DENS and the material densities DENSM: All the variables under discussion are cell variables. In spcth files, material variables end in M and the specific material is appended as +n, where n is the material number. So, e.g. there is a material pressure for each material and these pressures are named PM+1, PM+2, ..., PM+N, for n=1, ..., N. DENS depends on the material masses M (M+1, M+2, ..., M+N), and the cell volume VOL. First calculate the cell volume VOL. This computation depends on the coordinate system (distinguished by "igm" in the header section of the file) as well as the coordinates: if (igm==11) Cvol=PI*(x[i+1]*x[i+1]-x[i]*x[i]); # 1D cyl else if (igm==12) Cvol = 4*PI/3*(x[i+1]*x[i+1]*x[i+1]-x[i]*x[i]*x[i]); # 1D sph else if (igm==20) Cvol = (y[j+1]-y[j])*(x[i+1]-x[i]); # 2D cart else if (igm==21) Cvol = PI*(y[j+1]-y[j])*(x[i+1]*x[i+1]-x[i]*x[i]); # 2D cyl else Cvol = (z[k+1]-z[k])*(y[j+1]-y[j])*(x[i+1]-x[i]); # 3D cart Then, density: DENS = sum(M+1, M+2, ...)/VOL and material densities: for n = 1,N: DENSM+n = M+n/( VOL*VOLM+n) # "+" is not an operator end | ||||||||
Tags | No tags attached. | ||||||||
Project | Sandia | ||||||||
Topic Name | 12602-cth-derived-density | ||||||||
Type | incorrect functionality | ||||||||
Attached Files | spyvars.pdf [^] (91,423 bytes) 2011-03-30 18:32 | ||||||||
Relationships | |
Relationships |
Notes | |
(0025978) Greg Weirs (developer) 2011-03-30 18:34 |
This is how spy calculates derived variables. spy is the viz system for CTH. I also attached the pages from the spy manual with the variable names and meanings - handy for labels, etc. /* velocity magnitude */ case STM_VMAG: vx = blk->CField[STM_VX][k][j][i]; if (ndim==1) { scratch[i] = fabs(vx); } else if (ndim==2) { vy = blk->CField[STM_VY][k][j][i]; scratch[i]= sqrt(vx*vx + vy*vy); } else { vy = blk->CField[STM_VY][k][j][i]; vz = blk->CField[STM_VZ][k][j][i]; scratch[i]= sqrt(vx*vx + vy*vy + vz*vz); } break; /* specific kinetic energy, per unit mass - skip the mass multiplier */ case STM_KE: vx = blk->CField[STM_VX][k][j][i]; if (ndim==1) { scratch[i] = 0.5*(vx*vx); } else if (ndim==2) { vy = blk->CField[STM_VY][k][j][i]; scratch[i]= 0.5*(vx*vx + vy*vy); } else { vy = blk->CField[STM_VY][k][j][i]; vz = blk->CField[STM_VZ][k][j][i]; scratch[i]= 0.5*(vx*vx + vy*vy + vz*vz); } break; /* density */ case STM_DENS: /* total cell mass */ Mass=0; for (m=0; m<nmat; m++) Mass+= blk->MField[1][m][k][j][i]; /* cell volume */ if (igm==11) Cvol=PI*(x[i+1]*x[i+1]-x[i]*x[i]); else if (igm==12) Cvol = 4*PI/3*(x[i+1]*x[i+1]*x[i+1]-x[i]*x[i]*x[i]); else if (igm==20) Cvol = (y[j+1]-y[j])*(x[i+1]-x[i]); else if (igm==21) Cvol = PI*(y[j+1]-y[j])*(x[i+1]*x[i+1]-x[i]*x[i]); else Cvol = (z[k+1]-z[k])*(y[j+1]-y[j])*(x[i+1]-x[i]); scratch[i] = Mass/Cvol; /* if (blk->CField[0][k][j][i]<1) { scratch[i] = Mass/Cvol/(1-blk->CField[0][k][j][i]); } else { scratch[i]=0; } */ break; /* Material volume fraction */ case STM_MVOL: if (blk->CField[0][0][0]!=NULL) { scratch[i] = 1 - blk->CField[0][k][j][i]; } else { for (m=0; m<nmat; m++) scratch[i] += blk->MField[0][m][k][j][i]; } break; /* IE - total material specific energy (mat energy per unit mass * mat_mass)/total_mass */ case STM_IE: /* total cell mass */ Mass=0; for (m=0; m<nmat; m++) { Mass+= blk->MField[1][m][k][j][i]; scratch[i]+=blk->MField[1][m][k][j][i]*blk->MField[4][m][k][j][i]; } if (Mass>0) scratch[i]/=Mass; break; /* XX stress */ case STM_XXSTRESS: scratch[i] = blk->CField[STM_P][k][j][i] - blk->CField[STM_XXDEV][k][j][i]; break; /* YY stress */ case STM_YYSTRESS: scratch[i] = blk->CField[STM_P][k][j][i] - blk->CField[STM_YYDEV][k][j][i]; break; /* ZZ stress */ case STM_ZZSTRESS: scratch[i] = blk->CField[STM_P][k][j][i] + blk->CField[STM_XXDEV][k][j][i] + blk->CField[STM_YYDEV][k][j][i]; break; /* ZZ deviator */ case STM_ZZDEV: scratch[i] = -blk->CField[STM_XXDEV][k][j][i] - blk->CField[STM_YYDEV][k][j][i]; break; /* J2P (now, for 2-D only) */ case STM_J2P: if(igm < 20) { if(igm == 11) { scratch[i] = sqrt(3*(blk->CField[STM_XXDEV][k][j][i]*blk->CField[STM_XXDEV][k][j][i] + blk->CField[STM_YYDEV][k][j][i]*blk->CField[STM_YYDEV][k][j][i] + blk->CField[STM_XXDEV][k][j][i]*blk->CField[STM_YYDEV][k][j][i])); } else { scratch[i] = 3*fabs(blk->CField[STM_XXDEV][k][j][i])/2; } } else if (igm < 30) { scratch[i] = sqrt(3*(blk->CField[STM_XXDEV][k][j][i]*blk->CField[STM_XXDEV][k][j][i] + blk->CField[STM_YYDEV][k][j][i]*blk->CField[STM_YYDEV][k][j][i] + blk->CField[STM_XYDEV][k][j][i]*blk->CField[STM_XYDEV][k][j][i] + blk->CField[STM_XXDEV][k][j][i]*blk->CField[STM_YYDEV][k][j][i])); } else { scratch[i] = sqrt(3*(blk->CField[STM_XXDEV][k][j][i]*blk->CField[STM_XXDEV][k][j][i] + blk->CField[STM_YYDEV][k][j][i]*blk->CField[STM_YYDEV][k][j][i] + blk->CField[STM_XYDEV][k][j][i]*blk->CField[STM_XYDEV][k][j][i] + blk->CField[STM_YZDEV][k][j][i]*blk->CField[STM_YZDEV][k][j][i] + blk->CField[STM_XZDEV][k][j][i]*blk->CField[STM_XZDEV][k][j][i] + blk->CField[STM_XXDEV][k][j][i]*blk->CField[STM_YYDEV][k][j][i])); } break; /* J2PP (now, for 2-D only) */ case STM_J2PP: if (blk->CField[STM_P][k][j][i]>0) { if(igm < 20) { if(igm == 11) { scratch[i] = sqrt(3*(blk->CField[STM_XXDEV][k][j][i]*blk->CField[STM_XXDEV][k][j][i] + blk->CField[STM_YYDEV][k][j][i]*blk->CField[STM_YYDEV][k][j][i] + blk->CField[STM_XXDEV][k][j][i]*blk->CField[STM_YYDEV][k][j][i]))/ blk->CField[STM_P][k][j][i]; } else { scratch[i] = 3*fabs(blk->CField[STM_XXDEV][k][j][i])/(2*blk->CField[STM_P][k][j][i]); } } else if (igm < 30) { scratch[i] = sqrt(3*(blk->CField[STM_XXDEV][k][j][i]*blk->CField[STM_XXDEV][k][j][i] + blk->CField[STM_YYDEV][k][j][i]*blk->CField[STM_YYDEV][k][j][i] + blk->CField[STM_XYDEV][k][j][i]*blk->CField[STM_XYDEV][k][j][i] + blk->CField[STM_XXDEV][k][j][i]*blk->CField[STM_YYDEV][k][j][i]))/ blk->CField[STM_P][k][j][i]; } else { scratch[i] = sqrt(3*(blk->CField[STM_XXDEV][k][j][i]*blk->CField[STM_XXDEV][k][j][i] + blk->CField[STM_YYDEV][k][j][i]*blk->CField[STM_YYDEV][k][j][i] + blk->CField[STM_XYDEV][k][j][i]*blk->CField[STM_XYDEV][k][j][i] + blk->CField[STM_YZDEV][k][j][i]*blk->CField[STM_YZDEV][k][j][i] + blk->CField[STM_XZDEV][k][j][i]*blk->CField[STM_XZDEV][k][j][i] + blk->CField[STM_XXDEV][k][j][i]*blk->CField[STM_YYDEV][k][j][i]))/ blk->CField[STM_P][k][j][i]; } } else { scratch[i]=-1; } break; /* CVMAG */ case STM_CVMAG: ip1=min(i+1,blk->Nx-1); vx = 0.5*(blk->CField[STM_VX][k][j][i]+blk->CField[STM_VX][k][j][ip1]); if (ndim==1) { scratch[i] = fabs(vx); } else if (ndim==2) { vy = 0.5*(blk->CField[STM_VY][k][j][i]+blk->CField[STM_VY][k][jp1][i]); scratch[i]= sqrt(vx*vx + vy*vy); } else { vy = 0.5*(blk->CField[STM_VY][k][j][i]+blk->CField[STM_VY][k][jp1][i]); vz = 0.5*(blk->CField[STM_VZ][k][j][i]+blk->CField[STM_VZ][kp1][j][i]); scratch[i]= sqrt(vx*vx + vy*vy + vz*vz); } break; /* CVX, cell centered velocity */ case STM_CVX: ip1=min(i+1,blk->Nx-1); vx = 0.5*(blk->CField[STM_VX][k][j][i]+blk->CField[STM_VX][k][j][ip1]); scratch[i] = vx; break; /* CVY, cell centered velocity*/ case STM_CVY: if (ndim>=2) { vy = 0.5*(blk->CField[STM_VY][k][j][i]+blk->CField[STM_VY][k][jp1][i]); scratch[i]= vy; } else { scratch[i]= 0.; } break; /* CVZ, cell centered velocity */ case STM_CVZ: if (ndim==2) { vz = 0.5*(blk->CField[STM_VZ][k][j][i]+blk->CField[STM_VZ][kp1][j][i]); scratch[i]= vz; } else { scratch[i]= 0.; } break; /* DIVV */ case STM_DIVV: ip1=min(i+1,blk->Nx-1); vx = blk->CField[STM_VX][k][j][i]; vxp = blk->CField[STM_VX][k][j][ip1]; if (ndim==1) { if(igm == 10) { scratch[i] = (vxp-vx)/(x[i+1]-x[i]); } else if (igm == 11) { scratch[i] = 2.0*(vxp*x[i+1]-vx*x[i])/((x[i+1]+x[i])*(x[i+1]-x[i])); } else if (igm == 12) { scratch[i] = 4.0*(vxp*x[i+1]*x[i+1]-vx*x[i]*x[i])/((x[i+1]+x[i])*(x[i+1]+x[i])*(x[i+1]-x[i])); } } else if (ndim==2) { vy = blk->CField[STM_VY][k][j][i]; vyp = blk->CField[STM_VY][k][jp1][i]; if(igm == 20) { scratch[i] = (vxp-vx)/(x[i+1]-x[i]) + (vyp-vy)/(y[j+1]-y[j]); } else { scratch[i] = 2.0*(vxp*x[i+1]-vx*x[i])/((x[i+1]+x[i])*(x[i+1]-x[i])) + (vyp-vy)/(y[j+1]-y[j]); } } else { vy = blk->CField[STM_VY][k][j][i]; vyp = blk->CField[STM_VY][k][jp1][i]; vz = blk->CField[STM_VZ][k][j][i]; vzp = blk->CField[STM_VZ][kp1][j][i]; scratch[i] = (vxp-vx)/(x[i+1]-x[i]) + (vyp-vy)/(y[j+1]-y[j]) + (vzp-vz)/(z[i+1]-z[i]); } break; /* Cell Temperature in K*/ case STM_TK: scratch[i] = blk->CField[STM_T][k][j][i]*EV2K; break; /* Material Temperature in K*/ case STM_TKM: scratch[i] = blk->MField[3][mat_id][k][j][i]*EV2K; break; /* material density */ case STM_DENSM: /* material mass */ Mass = blk->MField[1][mat_id][k][j][i]; /* cell volume */ if (igm==11) Cvol=PI*(x[i+1]*x[i+1]-x[i]*x[i]); else if (igm==12) Cvol = 4*PI/3*(x[i+1]*x[i+1]*x[i+1]-x[i]*x[i]*x[i]); else if (igm==20) Cvol = (y[j+1]-y[j])*(x[i+1]-x[i]); else if (igm==21) Cvol = PI*(y[j+1]-y[j])*(x[i+1]*x[i+1]-x[i]*x[i]); else Cvol = (z[k+1]-z[k])*(y[j+1]-y[j])*(x[i+1]-x[i]); if(Mass>0.) { scratch[i] = Mass/(Cvol*blk->MField[0][mat_id][k][j][i]); } else { scratch[i] = 0.; } break; /* angular momenta, 3D only! */ case STM_LX: yc=0.5*(y[j]+y[j+1])-center_of_mass[1]; zc=0.5*(z[k]+z[k+1])-center_of_mass[2]; vy = blk->CField[STM_VY][k][j][i]; vyp = blk->CField[STM_VY][k][jp1][i]; vz = blk->CField[STM_VZ][k][j][i]; vzp = blk->CField[STM_VZ][kp1][j][i]; scratch[i] = 0.5*(yc*(vz+vzp)-zc*(vy+vyp)); break; case STM_LY: xc=0.5*(x[i]+x[i+1])-center_of_mass[0]; zc=0.5*(z[k]+z[k+1])-center_of_mass[2]; vx = blk->CField[STM_VX][k][j][i]; vxp = blk->CField[STM_VX][k][j][ip1]; vz = blk->CField[STM_VZ][k][j][i]; vzp = blk->CField[STM_VZ][kp1][j][i]; scratch[i] = 0.5*(zc*(vx+vxp)-xc*(vz+vzp)); break; case STM_LZ: xc=0.5*(x[i]+x[i+1])-center_of_mass[0]; yc=0.5*(y[j]+y[j+1])-center_of_mass[1]; vx = blk->CField[STM_VX][k][j][i]; vxp = blk->CField[STM_VX][k][j][ip1]; vy = blk->CField[STM_VY][k][j][i]; vyp = blk->CField[STM_VY][k][jp1][i]; scratch[i] = 0.5*(xc*(vy+vyp)-yc*(vx+vxp)); break; /* Cell locations */ case STM_X: scratch[i] = x[i]; break; case STM_Y: if (ndim>=2) scratch[i] = y[j]; else scratch[i]=0; break; case STM_Z: if (ndim==3) scratch[i] = z[k]; else scratch[i]=0; break; case STM_XC: scratch[i] = 0.5*(x[i]+x[i+1]); break; case STM_YC: if (ndim>=2) scratch[i] = 0.5*(y[j]+y[j+1]); else scratch[i]=0; break; case STM_ZC: if (ndim==3) scratch[i] = 0.5*(z[k]+z[k+1]); else scratch[i]=0; break; } } |
(0026846) Robert Maynard (developer) 2011-06-13 09:17 |
Committed changes to master to support derived density to SpyPlot Reader. author Robert Maynard <robert.maynard@kitware.com> Mon, 13 Jun 2011 13:15:43 +0000 (09:15 -0400) committer ParaView Topic Stage <kwrobot@kitware.com> Mon, 13 Jun 2011 13:15:43 +0000 (09:15 -0400) commit 03583a21194a7c45f6d602016bb52a5813130e4f tree 4cf9a55a5d866927249c192270f1fb043564b1ed tree | snapshot parent fae1aede7e313388ee4a011521d3a74972026dda commit | diff parent 25864a5c172351b0a3aa8c3941dff1005e7ed41b commit | diff Merge topic '11960-derived-var-support' 25864a5 ENH: SpyPlot Reader now has user option to compute derived vars. 8abbec7 ENH: The derived variable algorithm doesnt require all materials to be loaded. 0e2d9ee BUG: Properly handle down converted material volume fractions. 905aa2c ENH: Adds in support for derived density to be per material. 23401a1 ENH: Reworked the Derived Density code to be faster. e0178d9 ENH: Added derived density variable for blocks that have bad ghost cells. 1c50fe0 ENH: First draft at adding derived density variable to spy plot. 520125c ENH: Giving vtkSpyPlotUniReader more methods to make it easier to read. 08c3f8a LEAK: Fix a memory leak in the spy plot stream reader. 75df86d BUG: Change the istream buffer which was creating debug issues in MSVC. |
(0027646) Alan Scott (manager) 2011-11-01 22:13 |
Tested Linux client, remote server, 3.12.0. Assuming calculations are correct - I don't know how to test them. |
(0027656) Alan Scott (manager) 2011-11-03 13:51 |
As per discussion at weekly meeting, we are possibly reading material volume fraction incorrectly. This must be fixed. |
(0027657) Alan Scott (manager) 2011-11-03 13:53 |
Setting as todo. |
(0027790) Utkarsh Ayachit (administrator) 2011-12-09 14:20 |
merged in master (wherever applicable) |
(0028261) Greg Weirs (developer) 2012-02-13 16:28 |
Customer review: works as expected. |
(0028301) Alan Scott (manager) 2012-02-18 00:02 |
Closing as per Greg. |
Notes |
Issue History | |||
Date Modified | Username | Field | Change |
2011-03-10 16:03 | Greg Weirs | New Issue | |
2011-03-17 11:22 | Robert Maynard | Assigned To | => Robert Maynard |
2011-03-17 11:22 | Robert Maynard | Status | backlog => tabled |
2011-03-29 15:00 | Utkarsh Ayachit | Target Version | => 3.10.1 |
2011-03-30 18:32 | Greg Weirs | File Added: spyvars.pdf | |
2011-03-30 18:34 | Greg Weirs | Note Added: 0025978 | |
2011-03-31 11:24 | Utkarsh Ayachit | Target Version | 3.10.1 => 3.12 |
2011-06-13 09:17 | Robert Maynard | Note Added: 0026846 | |
2011-06-13 09:17 | Robert Maynard | Status | tabled => @80@ |
2011-06-13 09:17 | Robert Maynard | Fixed in Version | => 3.12 |
2011-06-13 09:17 | Robert Maynard | Resolution | open => fixed |
2011-06-16 13:10 | Zack Galbreath | Category | Feature Request => Feature |
2011-07-22 14:16 | Utkarsh Ayachit | Project | => Sandia |
2011-11-01 22:13 | Alan Scott | Note Added: 0027646 | |
2011-11-01 22:13 | Alan Scott | Status | customer review => closed |
2011-11-03 13:51 | Alan Scott | Note Added: 0027656 | |
2011-11-03 13:51 | Alan Scott | Status | closed => backlog |
2011-11-03 13:51 | Alan Scott | Resolution | fixed => reopened |
2011-11-03 13:53 | Alan Scott | Note Added: 0027657 | |
2011-11-03 13:53 | Alan Scott | Status | backlog => todo |
2011-12-06 15:02 | Robert Maynard | Topic Name | => 12602-cth-derived-density |
2011-12-06 15:02 | Robert Maynard | Type | => incorrect functionality |
2011-12-06 15:04 | Robert Maynard | Status | todo => gatekeeper review |
2011-12-09 14:20 | Utkarsh Ayachit | Status | gatekeeper review => customer review |
2011-12-09 14:20 | Utkarsh Ayachit | Note Added: 0027790 | |
2011-12-09 14:21 | Utkarsh Ayachit | Fixed in Version | 3.12 => git-master |
2012-02-08 17:21 | Utkarsh Ayachit | Fixed in Version | git-master => 3.14 |
2012-02-13 16:28 | Greg Weirs | Note Added: 0028261 | |
2012-02-18 00:02 | Alan Scott | Note Added: 0028301 | |
2012-02-18 00:02 | Alan Scott | Status | customer review => closed |
2012-02-18 00:02 | Alan Scott | Resolution | reopened => fixed |
Issue History |
Copyright © 2000 - 2018 MantisBT Team |