38   MPM::Init(MPM_Coordinates, MPM_Velocities, MPM_Types, MPM_Temperatures);}
 
   68     const double innerSide = 1.0; 
 
   69     const double midSide = 3.0;
 
   70     const double outerSide = 4.2;
 
   72     int nX=20, nY=20, nZ=1;
 
   74     double gapX=outerSide/(nX), gapY=outerSide/(nY), gapZ=0;
 
   75     const int nMPM = (nX+1)*(nY+1)*nZ;
 
   80     for(
int i=0; i<=nX; i++){
 
   81       for(
int j=0; j<=nY; j++){
 
   82         for(
int k=0; k<nZ; k++){
 
   83           temp[0]=i*gapX-outerSide/2.;
 
   84           temp[1]=j*gapY-outerSide/2.;
 
   87           if( temp[0]>=(-innerSide/2.) && temp[0]<=(innerSide/2.) && temp[1]>=(-innerSide/2.) && temp[1]<=(innerSide/2.))
 
   91               if( temp[0]> (innerSide/2.0-gapX) || temp[0]<(-innerSide/2.0+gapX))
 
   93               if( temp[1]> (innerSide/2.0-gapY) || temp[1]<(-innerSide/2.0+gapY))
 
   96               double alfa = atan(1.);
 
   97               solidPoint[count][0]=temp[0]*cos(alfa)-temp[1]*
sin(alfa);
 
   98               solidPoint[count][1]=temp[1]*cos(alfa)+temp[0]*
sin(alfa);
 
   99               solidPoint[count][2]=temp[2];
 
  105           if( !(temp[0]>(-midSide/2.) && temp[0]<(midSide/2.) && temp[1]>(-midSide/2.) && temp[1]<(midSide/2.)))
 
  110               if( temp[0]< (midSide/2.0+gapX) && temp[0]>(midSide/2.0-gapX) && temp[1]<(midSide/2.0+gapY) && temp[1]>(-midSide/2.0-gapY))
 
  112               if( temp[0]> (-midSide/2.0-gapX) && temp[0]<(-midSide/2.0+gapX) && temp[1]<(midSide/2.0+gapY) && temp[1]>(-midSide/2.0-gapY))
 
  114               if( temp[1]< (midSide/2.0+gapY) && temp[1]>(midSide/2.0-gapY) && temp[0]<(midSide/2.0+gapX) && temp[0]>(-midSide/2.0-gapX))
 
  116               if( temp[1]> (-midSide/2.0-gapY) && temp[1]<(-midSide/2.0+gapY) && temp[0]<(midSide/2.0+gapX) && temp[0]>(-midSide/2.0-gapX))
 
  119               double alfa = atan(1);
 
  120               solidPoint[count][0]=temp[0]*cos(alfa)-temp[1]*
sin(alfa);
 
  121               solidPoint[count][1]=temp[1]*cos(alfa)+temp[0]*
sin(alfa);
 
  122               solidPoint[count][2]=temp[2];
 
  134     int nX=81, nY=400, nZ=1;
 
  135     double radius1=0., radius2=0.2;
 
  136     double gapR=(radius2-radius1)/(nX-1), gapAngle=2*3.1415926/nY, gapZ=1.0/nZ;
 
  138     const int nMPM = nX*nY*nZ;
 
  146      for(
int i=0; i<nX; i++){
 
  147       for(
int j=0; j<nY; j++){
 
  148         for(
int k=0; k<nZ; k++){         
 
  149           solidPoint[count][0]=(radius1+i*gapR)*(cos(j*gapAngle))+center[0];
 
  150           solidPoint[count][1]=(radius1+i*gapR)*(
sin(j*gapAngle))+center[1];
 
  151           solidPoint[count][2]=k*gapZ+center[2];
 
  153           if(i!=(nX-1)) type[count] = 0;  
 
  185     int nX=21,  nY=300, nZ=400;
 
  186     const double pi = atan(1.0)*4.0;
 
  187     double radius1=0., radius2=10;
 
  188     double gapR=(radius2-radius1)/(nX-1), gapAlfa=pi/nY, gapBeta=2*pi/nZ;
 
  189     const int nMPM = nX*nY*nZ;
 
  195      for(
int i=0; i<nX; i++){
 
  196       for(
int j=0; j<nY; j++){
 
  197         for(
int k=0; k<nZ; k++){         
 
  198           solidPoint[count][0]=(radius1+i*gapR)*
sin(j*gapAlfa)*(cos(k*gapBeta))+center[0];
 
  199           solidPoint[count][1]=(radius1+i*gapR)*
sin(j*gapAlfa)*(
sin(k*gapBeta))+center[1];
 
  200           solidPoint[count][2]=(radius1+i*gapR)*cos(j*gapAlfa)+center[2];
 
  214     for(
int p=0; p<count; p++){
 
  215       solidVelocity[p][0]=0.0;
 
  216       solidVelocity[p][1]=0.0;
 
  217       solidVelocity[p][2]=0.0;
 
  223     const double angV = 1;
 
  224     for (
int p=0; p<count; p++){
 
  225       double r = 
mag(solidPoint[p]-center);
 
  226       double angle = atan2(solidPoint[p][1]-center[1],solidPoint[p][0]-center[0]);
 
  227       solidVelocity[p][0] = -angV*r*
sin(angle);
 
  228       solidVelocity[p][1] = angV*r*cos(angle);
 
  229       solidVelocity[p][2] = 0.0;
 
  234     const double InitT=300.0;
 
  235     for (
int p=0; p<count; p++){
 
  236       solidTemperature[p]=InitT;
 
  240     cout<<
"count of particles is "<<count<<endl;
 
  243     fprintf(fp,
"%i\n",count);
 
  244     for(
int p=0; p<count; p++){
 
  245       fprintf(fp, 
"%e\t%e\t%e\n", solidPoint[p][0],solidPoint[p][1],solidPoint[p][2]);
 
  247     for(
int p=0; p<count; p++){
 
  248       fprintf(fp, 
"%e\t%e\t%e\n", solidVelocity[p][0],solidVelocity[p][1],solidVelocity[p][2]);
 
  250     for(
int p=0; p<count; p++){
 
  251       fprintf(fp, 
"%i\n", type[p]);
 
  253     for(
int p=0; p<count; p++){
 
  254       fprintf(fp, 
"%f\n", solidTemperature[p]);
 
  266     double x=0, y=0, z=0;
 
  269     fscanf(fp,
"%i\n",&nMPM);
 
  270     cout<<
"number of particles is"<<nMPM<<endl;
 
  272     shared_ptr<Array<VecD3> > MPM_Points ( 
new Array<VecD3> (nMPM));
 
  274     for(
int i=0; i<nMPM; i++){
 
  275       fscanf(fp,
"%lf\t%lf\t%lf\n", &x, &y, &z);
 
  276       (*MPM_Points)[i][0]=x;
 
  277       (*MPM_Points)[i][1]=y;
 
  278       (*MPM_Points)[i][2]=z;
 
  289     double vx=0, vy=0, vz=0;
 
  290     double x=0, y=0, z=0;
 
  292     fscanf(fp,
"%i\n",&nMPM);
 
  294     shared_ptr<Array<VecD3> > MPM_Points ( 
new Array<VecD3> (nMPM));
 
  296     for(
int i=0; i<nMPM; i++){
 
  297       fscanf(fp,
"%lf\t%lf\t%lf\n", &x, &y, &z);      
 
  300     for(
int i=0; i<nMPM; i++){
 
  301       fscanf(fp,
"%lf\t%lf\t%lf\n", &vx, &vy, &vz);
 
  302       (*MPM_Points)[i][0]=vx;
 
  303       (*MPM_Points)[i][1]=vy;
 
  304       (*MPM_Points)[i][2]=vz;
 
  316     double x=0, y=0, z=0;
 
  319     fscanf(fp,
"%i\n",&nMPM);
 
  321     shared_ptr<Array<int> > MPM_Points ( 
new Array<int> (nMPM));
 
  323     for(
int i=0; i<nMPM; i++){
 
  324       fscanf(fp,
"%lf\t%lf\t%lf\n", &x, &y, &z);      
 
  327     for(
int i=0; i<nMPM; i++){
 
  328       fscanf(fp,
"%lf\t%lf\t%lf\n", &x, &y, &z);      
 
  331     for(
int i=0; i<nMPM; i++){
 
  332       fscanf(fp,
"%i\n", & t);
 
  343     double x=0, y=0, z=0;
 
  345     double temperature=0.0;
 
  347     fscanf(fp,
"%i\n",&nMPM);
 
  349     shared_ptr<Array<double> > MPM_Points ( 
new Array<double> (nMPM));
 
  351     for(
int i=0; i<nMPM; i++){
 
  352       fscanf(fp,
"%lf\t%lf\t%lf\n", &x, &y, &z);      
 
  355     for(
int i=0; i<nMPM; i++){
 
  356       fscanf(fp,
"%lf\t%lf\t%lf\n", &x, &y, &z);      
 
  359     for(
int i=0; i<nMPM; i++){
 
  360       fscanf(fp,
"%i\n", & t);
 
  363     for(
int i=0; i<nMPM; i++){
 
  364       fscanf(fp,
"%lf\n", & temperature);
 
  365       (*MPM_Points)[i]=temperature;
 
  377   const int n = (*coordinates).getLength();  
 
void Init(const shared_ptr< Array< VecD3 > > coordinates, const shared_ptr< Array< VecD3 > > velocities, const shared_ptr< Array< int > > types, const shared_ptr< Array< double > > temperatures)
 
const shared_ptr< Array< double > > readTemperatures(const char *file)
 
const shared_ptr< Array< VecD3 > > readCoordinates(const char *file)
 
T mag(const Vector< T, 3 > &a)
 
void setCount(const int selfCount, const int nGhost=0)
 
void setTemperatures(const shared_ptr< ArrayBase > t)
 
MPM::VecD3Array VecD3Array
 
void setCoordinates(const shared_ptr< ArrayBase > x)
 
void setandwriteParticles(const char *file)
 
Tangent sin(const Tangent &a)
 
void setTypes(const shared_ptr< ArrayBase > type)
 
const shared_ptr< Array< VecD3 > > readVelocities(const char *file)
 
const shared_ptr< Array< int > > readTypes(const char *file)
 
void setVelocities(const shared_ptr< ArrayBase > v)