// Creation Date : Wed May 14 20:39:10 1997 // Last Modified : Wed Jun 4 21:12:35 1997 // $Id$ //------------------------------------------- //General variables _S double T,V,VIR; //------------------------------------------- //Positions properties (only done by PROC[0]) //------------------------------------------- //Mesh properties #ifdef _PROP_MESH #ifndef _MESHX #define _MESHX 0 #endif #ifndef _MESHY #define _MESHY 0 #endif #ifndef _MESHZ #define _MESHZ 0 #elif defined(_2DIM) #error Error _MESHZ #endif #if _MESHX && _MESHY && _MESHZ #define RMESH(x,i,j,k) x[i][j][k] #elif _MESHX && _MESHY #define RMESH(x,i,j,k) x[i][j] #elif _MESHX && _MESHZ #define RMESH(x,i,j,k) x[i][k] #elif _MESHY && _MESHZ #define RMESH(x,i,j,k) x[j][k] #elif _MESHX #define RMESH(x,i,j,k) x[i] #elif _MESHY #define RMESH(x,i,j,k) x[j] #elif _MESHZ #define RMESH(x,i,j,k) x[k] #else #error _MESHX _MESHY _MESHZ must be defined #endif int (*mesh)[_MESHY]; double (*meshVX)[_MESHY]; double (*meshVY)[_MESHY]; #define MESH(x) RMESH(x,i,j,k) #endif //================================================================ // Property Part //================================================================ //-------------------------------------------------------------------- _S void PropInit() { printf(" PROP:" #ifdef _PROP_POSITION "Pos(%s)" #endif #ifdef _PROP_MESH "BIN Mesh(%s,%dx%d)[Density" #ifdef _PROP_MESH_VX " Vx" #endif #ifdef _PROP_MESH_VY " Vy" #endif #ifdef _PROP_MESH_VZ " Vz" #endif #ifdef _PROP_MESH_T " Temperature" #endif "]" #endif //_PROP_MESH "\n" #ifdef _PROP_POSITION ,_PROP_POSITION #endif #ifdef _PROP_MESH ,_PROP_MESH,_MESHX,_MESHY #endif ); T=0; V=0; VIR=0; } //-------------------------------------------------------------------- _S void PropSingle(TP n) { #ifdef _PROP_MESH short i,j; i=(short)(X0[n]/_CUBEX*_MESHX); j=(short)(Y0[n]/_CUBEY*_MESHY); ASSERT(i>=0 && i < _MESHX && j>=0 && j < _MESHY, "Out of mesh!"); //!!No semaphore is needed as long as every bin contains integer times meshes. MESH(mesh)++; #ifdef _PROP_MESH_VX MESH(meshVX)+=X1[n]; #endif #ifdef _PROP_MESH_VY MESH(meshVY)+=Y1[n]; #endif #endif } //-------------------------------------------------------------------- _S void PropStep() { if(*pstep % _NDUMP ==0) { SemLock(SEMA_PROP); *pVIR+=VIR; *pT+=T; *pV+=V; SemUnlock(SEMA_PROP); T=0; V=0; VIR=0; } } //-------------------------------------------------------------------- _S void PropFinish() { #ifdef _PROP_MESH if(ID==0) { short i,j _3(_ k); FILE *Fh_mesh; Fh_mesh=fopen(_PROP_MESH,"wt"); #if _MESHX for(i=0;i<_MESHX;i++) #endif #if _MESHY for(j=0;j<_MESHY;j++) #endif #if _MESHZ for(k=0;k<_MESHZ;k++) #endif { fprintf(Fh_mesh,"%d %f %f",MESH(mesh), _CUBEX*(i+0.5)/_MESHX, _CUBEY*(j+0.5)/_MESHY); #ifdef _PROP_MESH_VX fprintf(Fh_mesh," %f",MESH(meshVX)/_DT); #endif #ifdef _PROP_MESH_VY fprintf(Fh_mesh," %f",MESH(meshVY)/_DT); #endif #ifdef _PROP_MESH_VZ fprintf(Fh_mesh," %f",MESH(meshVZ)/_DT); #endif #ifdef _PROP_MESH_T fprintf(Fh_mesh," %f",MESH(meshT)/_DT/_DT/_DIMINT); #endif fprintf(Fh_mesh,"\n"); } fclose(Fh_mesh); } #endif #ifdef _PROP_POSITION if(ID==0) { TP i; FILE *Fh_pos; Fh_pos=fopen(_PROP_POSITION,"wt"); for(i=0;i<_NP;i++) fprintf(Fh_pos,"%f\t%f" _3("\t%f")"\n",X0[i],Y0[i] _3(_ Z0[i])); fclose(Fh_pos); } #endif }