void PrintDiff () { double kbT = 41.16404397; FILE *diff; MAKE_FILENAME(fullname_diff,"microFB.dat"); diff=fopen(fullname_diff,"a"); fprintf(diff,"VARIABLES = \"X\", \"Y\", \"Z\",\"sigmaXZ\",\"sigmaYZ\",\"sigmaZZ\",\"derSigmaXZ\",\"derSigmaYZ\",\"derSigmaZZ\",\"divSigma\",\"denForce\",\"diff\",\n"); fprintf(diff,"ZONE I=%d, J=%d, K=%d, F=POINT\n", grid.x+1 - 4*offset, grid.y+1 - 4*offset, grid.z+1 - 4*offset); for (int i = 2*offset; i < grid.x+1 - 2*offset; i++){ for (int j = 2*offset; j < grid.y+1 - 2*offset; j++){ for (int k = 2*offset; k < grid.z+1 - 2*offset; k++){ fprintf(diff,"%5.2f %5.2f %5.2f %9.4f %9.4f %9.4f %9.4f %9.4f %9.4f %9.4f %9.4f %9.4f\n", i*dx, j*dy, k*dz, kbT*sigmaXZ[i][j][k], kbT*sigmaYZ[i][j][k], kbT*sigmaZZ[i][j][k], kbT*derSigmaXZ[i][j][k], kbT*derSigmaYZ[i][j][k], kbT*derSigmaZZ[i][j][k], kbT*divSigma[i][j][k], kbT*fZ[i][j][k], kbT*(divSigma[i][j][k]-fZ[i][j][k]) ); } } } fclose(diff); printf("finished output. Thank you very much!\n"); }
/* write down the sub potential into the output file */ void PrintSubFile () { FILE *snap, *Wsub, *Wfields; MAKE_FILENAME(fullname_snap,"snapshot2.dat"); snap=fopen(fullname_snap,"a"); for (int i = 1; i < grid.x+1; i++){ for (int j = 1; j < grid.y+1; j++){ for (int k = 1; k < grid.z+1; k++){ fprintf(snap,"%g %g %g %g %g %g %g %g\n", (i - 0.5)*dx, (j - 0.5)*dy, (k - 0.5)*dz, rho[i][j][k], df_drho[i][j][k], grad[i][j][k], sub[i][j][k], wa[i][j][k]); } } } fclose(snap); MAKE_FILENAME(fullname_Wsub,"substrate2.dat"); Wsub=fopen(fullname_Wsub,"a"); for (int i = 1; i < grid.x+1; i++){ for (int j = 1; j < grid.y+1; j++){ for (int k = 1; k < grid.z+1; k++){ fprintf(Wsub,"%16.12f \n", sub[i][j][k]); } } } fclose(Wsub); MAKE_FILENAME(fullname_Wfields,"Wfields2.dat"); Wfields=fopen(fullname_Wfields,"a"); for (int i = 1; i < grid.x+1; i++){ for (int j = 1; j < grid.y+1; j++){ for (int k = 1; k < grid.z+1; k++){ fprintf(Wfields,"%16.12f \n", wa[i][j][k]); } } } fclose(Wfields); }
ERetVal CFile::Open( const char* _pszDir, const char* _pszFileName ) { MAKE_FILENAME( _pszDir, _pszFileName ); return Open( szFullFileName ); }
void ReadSubFunc () { double _i, _j, _k; double _rho, _df_drho, _grad; double _sub, _wa; double _rho_temp, _wa_temp, _sub_temp; char str [120]; FILE *snap, *Wfields, *Wsub; sprintf(name,"snapshot_final.dat"); MAKE_FILENAME(fullname_snap,name); snap=fopen(fullname_snap,"r"); // skip first 10 words (header of tecplot) for (int i=0; i<10; i++) { fscanf (snap, "%s", str); } for(int i = 1; i < grid.x+1; i++){ for(int j = 1; j < grid.y+1; j++){ for(int k = 1; k < grid.z+1; k++){ /* read in the field and the substrate potential */ fscanf(snap,"%lf %lf %lf %lf %lf %lf %lf %lf \n", &_i, &_j, &_k, &_rho_temp, &df_drho[i][j][k], &grad[i][j][k], &_sub_temp, &_wa_temp); } } } fclose(snap); printf("finished snapshot reading\n"); // read filename of the fields for restart sprintf(name,"Wfields_final.dat"); MAKE_FILENAME(fullname_Wfields,name); Wfields=fopen(fullname_Wfields,"r"); for(int i = 1; i < grid.x+1; i++){ for(int j = 1; j < grid.y+1; j++){ for(int k = 1; k < grid.z+1; k++){ fscanf(Wfields,"%lf \n",&_wa); wa[i][j][k] = _wa; // the following is only valid for grand canonical ensemble: rho[i][j][k] = rho_liq * exp(V11*rho_liq + W111*SQR(rho_liq) - wa[i][j][k]); } } } fclose(Wfields); printf("finished Wfields reading\n"); // read substrate potential for restart MAKE_FILENAME(fullname_Wsub,"substrate.dat"); Wsub = fopen(fullname_Wsub,"r"); for(int i = 1; i < grid.x+1; i++){ for(int j = 1; j < grid.y+1; j++){ for(int k = 1; k < grid.z+1; k++){ fscanf(Wsub,"%lf \n",&_sub); sub[i][j][k] = _sub; } } } fclose(Wsub); printf("finished substrate reading\n"); // fill in array borders through periodic boundaries // // x-direction for(int k = 1; k < grid.z+1; k++){ for(int j = 1; j < grid.y+1; j++){ rho[0][j][k] = rho[grid.x][j][k]; rho[grid.x+1][j][k] = rho[1][j][k]; } } // y-direction for(int i = 1; i < grid.x+1; i++){ for(int k = 1; k < grid.z+1; k++){ rho[i][0][k] = rho[i][grid.y][k]; rho[i][grid.y+1][k] = rho[i][1][k]; } } // z-direction for(int i = 1; i < grid.x+1; i++){ for(int j = 1; j < grid.y+1; j++){ rho[i][j][0] = 0.; rho[i][j][grid.z+1] = rho[i][j][grid.z-1]; } } }