/* !-------------------------------------------------------------------------! ! ! ! N A S G R I D B E N C H M A R K S ! ! ! ! J A V A V E R S I O N ! ! ! ! S P A R S E A ! ! ! !-------------------------------------------------------------------------! ! ! ! SparseA implements Sparse Array Class. ! ! ! ! Permission to use, copy, distribute and modify this software ! ! for any purpose with or without fee is hereby granted. ! ! We request, however, that all derived work reference the ! ! NAS Grid Benchmarks 3.0 or GridNPB3.0. This software is provided ! ! "as is" without expressed or implied warranty. ! ! ! ! Information on GridNPB3.0, including the concept of ! ! the NAS Grid Benchmarks, the specifications, source code, ! ! results and information on how to submit new results, ! ! is available at: ! ! ! ! http://www.nas.nasa.gov/Software/NPB ! ! ! ! Send comments or suggestions to ngb@nas.nasa.gov ! ! Send bug reports to ngb@nas.nasa.gov ! ! ! ! E-mail: ngb@nas.nasa.gov ! ! Fax: (650) 604-3957 ! ! ! !-------------------------------------------------------------------------! ! GridNPB3.0 Java version ! ! M. Frumkin ! !-------------------------------------------------------------------------! */ package tasks.DGraph; import java.io.*; public class SparseA implements Serializable{ public int len; public int fielddim=0,nx=0,ny=0,nz=0; public int idx[]; public double val[]; public SparseA(){ len=12*12*12; idx=new int[len]; val=new double[len]; for(int i=0;i0){ nx=ny=nz=12; }else if(bm.indexOf(".W")>0){ nx=ny=nz=24; }else if(bm.indexOf(".A")>0){ nx=ny=nz=64; }else if(bm.indexOf(".B")>0){ nx=ny=nz=102; }else if(bm.indexOf(".C")>0){ nx=ny=nz=162; } }else if( bm.indexOf("LU2MG")==0){ fielddim=1; if(bm.indexOf(".S")>0){ nx=ny=nz=12; }else if(bm.indexOf(".W")>0){ nx=ny=nz=33; }else if(bm.indexOf(".A")>0){ nx=ny=nz=64; }else if(bm.indexOf(".B")>0){ nx=ny=nz=102; }else if(bm.indexOf(".C")>0){ nx=ny=nz=162; } }else if( bm.indexOf("BT")==0||bm.indexOf("bt")==0 ||bm.indexOf("SP")==0||bm.indexOf("sp")==0 ||bm.indexOf("LU")==0||bm.indexOf("lu")==0 ){ fielddim=5; if(bm.indexOf(".S")>0){ nx=ny=nz=12; }else if(bm.indexOf(".W")>0){ if(bm.indexOf("BT")==0||bm.indexOf("bt")==0){ nx=ny=nz=24; }else if(bm.indexOf("SP")==0||bm.indexOf("sp")==0){ nx=ny=nz=36; }else if(bm.indexOf("LU")==0||bm.indexOf("lu")==0){ nx=ny=nz=33; } }else if(bm.indexOf(".A")>0){ nx=ny=nz=64; }else if(bm.indexOf(".B")>0){ nx=ny=nz=102; }else if(bm.indexOf(".C")>0){ nx=ny=nz=162; } }else if( bm.indexOf("FT")==0||bm.indexOf("ft")==0){ fielddim=1; if(bm.indexOf(".S")>0){ nx=ny=nz=64; }else if(bm.indexOf(".W")>0){ nx=ny=128; nz=32; }else if(bm.indexOf(".A")>0){ nx=ny=256; nz=128; }else if(bm.indexOf(".B")>0){ nx=512; ny=nz=256; }else if(bm.indexOf(".C")>0){ nx=ny=nz=512; } }else if( bm.indexOf("CG")==0||bm.indexOf("cg")==0){ fielddim=1; if(bm.indexOf(".S")>0){ nx=1400; ny=nz=1; }else if(bm.indexOf(".W")>0){ nx=7000; ny=nz=1; }else if(bm.indexOf(".A")>0){ nx=14000; ny=nz=1; }else if(bm.indexOf(".B")>0){ nx=75000; ny=nz=1; }else if(bm.indexOf(".C")>0){ nx=150000; ny=nz=1; } }else if( bm.indexOf("MG")==0||bm.indexOf("mg")==0){ fielddim=1; if(bm.indexOf(".S")>0){ nx=ny=nz=32; }else if(bm.indexOf(".W")>0){ nx=ny=nz=64; }else if(bm.indexOf(".A")>0){ nx=ny=nz=256; }else if(bm.indexOf(".B")>0){ nx=ny=nz=256; }else if(bm.indexOf(".C")>0){ nx=ny=nz=512; } }else if( bm.indexOf("IS")==0||bm.indexOf("is")==0){ fielddim=1; if(bm.indexOf(".S")>0){ nx=1<<16; ny=nz=1; }else if(bm.indexOf(".W")>0){ nx=1<<20; ny=nz=1; }else if(bm.indexOf(".A")>0){ nx=1<<23; ny=nz=1; }else if(bm.indexOf(".B")>0){ nx=1<<25; ny=nz=1; }else if(bm.indexOf(".C")>0){ nx=1<<27; ny=nz=1; } } len=fielddim*nx*ny*nz; idx=new int[len]; val=new double[len]; } public double CheckVal(){ double checksum=0.0; for(int i=0;i=nx) continue; int yidx=(i/(b.fielddim*b.nx))%b.ny+yoff; if(yidx<0||yidx>=ny) continue; int zidx=(i/(b.fielddim*b.nx*b.ny))%b.nz+zoff; if(zidx<0||zidx>=nz) continue; int aoff=fldidx+fielddim*(xidx+nx*(yidx+ny*zidx)); val[aoff]=b.val[i]; } } public void InterpAdd(SparseA b){ if( fielddim!=b.fielddim){ System.err.println("Can't interpolate array of incompartible filed dim:"); b.Show(); System.err.print("To array");Show(); return; } if(nx==b.nx&ny==b.ny&&nz==b.nz){ for(int i=0;i