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)