int main(int argc, char **argv) { double n_reduced, temp; if (argc != 3) { printf("usage: %s reduced_density kT\n", argv[0]); return 1; } sscanf(argv[1], "%lg", &n_reduced); sscanf(argv[2], "%lg", &temp); const double rad = 1; // //radius of our spheres const double sigma = rad*pow(2,5.0/6.0); Functional f = HardRosenfeldFluid(rad,0); if (temp > 0) f = SoftFluid(sigma, 1, 0); const double mu = find_chemical_potential(OfEffectivePotential(f), (temp)?temp:1, n_reduced*pow(2,-5.0/2.0)); printf("mu is %g for reduced density = %g at temperature %g\n", mu, n_reduced, temp); if (temp > 0) f = SoftFluid(sigma, 1, mu); else f = HardRosenfeldFluid(rad, mu); const char *name = "hard"; if (temp > 0) name = "soft"; run_walls(n_reduced, name, f, temp); return 0; }
int main(int, char **) { FILE *fout = fopen("papers/fuzzy-fmt/figs/wallsfillingfracInfo.txt", "w"); fclose(fout); const double etas[] = { 0.1, 0.4 }; const double temps[] = { 0.0, 0.01, 0.02, 0.03 }; for (double eta = 0.4; eta > 0; eta-=0.3) { for (unsigned int i = 0; i<sizeof(temps)/sizeof(temps[0]); i++) { const double temp = temps[i]; Functional f = HardFluid(1,0); if (temp > 0) f = SoftFluid(1, 1, 0); const double mu = find_chemical_potential(OfEffectivePotential(f), (temp)?temp:1, eta/(4*M_PI/3)); printf("mu is %g\n", mu); if (temp > 0) f = SoftFluid(1, 1, mu); else f = HardFluid(1, mu); const char *name = "hard"; if (temp > 0) name = "soft"; run_walls(eta, name, f, temp); } } // Just create this file so make knows we have run. if (!fopen("papers/fuzzy-fmt/figs/walls.dat", "w")) { printf("Error creating walls.dat!\n"); return 1; } return 0; }
double run_soft_sphere(double reduced_density, double temp) { Functional f = SoftFluid(sigma, 1, 0); const double mu = find_chemical_potential(OfEffectivePotential(f), temp, reduced_density*pow(2,-5.0/2.0)); printf("mu is %g for reduced_density = %g at temperature %g\n", mu, reduced_density, temp); //printf("Filling fraction is %g with functional %s at temperature %g\n", reduced_density, teff); //fflush(stdout); temperature = temp; //if (kT == 0) kT = ;1 Lattice lat(Cartesian(xmax,0,0), Cartesian(0,ymax,0), Cartesian(0,0,zmax)); GridDescription gd(lat, dx); Grid softspherepotential(gd); softspherepotential.Set(soft_sphere_potential); f = SoftFluid(sigma, 1, mu); // compute approximate energy with chemical potential mu const double approx_energy = f(temperature, reduced_density*pow(2,-5.0/2.0))*xmax*ymax*zmax; const double precision = fabs(approx_energy*1e-9); f = OfEffectivePotential(SoftFluid(sigma, 1, mu) + ExternalPotential(softspherepotential)); static Grid *potential = 0; potential = new Grid(gd); *potential = softspherepotential - temperature*log(reduced_density*pow(2,-5.0/2.0)/(1.0*radius*radius*radius))*VectorXd::Ones(gd.NxNyNz); // Bad starting guess printf("\tMinimizing to %g absolute precision from %g from %g...\n", precision, approx_energy, temperature); fflush(stdout); Minimizer min = Precision(precision, PreconditionedConjugateGradient(f, gd, temperature, potential, QuadraticLineMinimizer)); took("Setting up the variables"); for (int i=0; min.improve_energy(true) && i<100; i++) { } took("Doing the minimization"); min.print_info(); Grid density(gd, EffectivePotentialToDensity()(temperature, gd, *potential)); //printf("# per area is %g at filling fraction %g\n", density.sum()*gd.dvolume/dw/dw, reduced_density); char *plotname = (char *)malloc(1024); sprintf(plotname, "papers/fuzzy-fmt/figs/radial-wca-%06.4f-%04.2f.dat", temp, reduced_density); z_plot(plotname, Grid(gd, pow(2,5.0/2.0)*density)); free(plotname); { //double peak = peak_memory()/1024.0/1024; //double current = current_memory()/1024.0/1024; //printf("Peak memory use is %g M (current is %g M)\n", peak, current); } took("Plotting stuff"); printf("density %g gives ff %g for reduced_density = %g and T = %g\n", density(0,0,gd.Nz/2), density(0,0,gd.Nz/2)*4*M_PI/3, reduced_density, temp); return density(0, 0, gd.Nz/2)*4*M_PI/3; // return bulk filling fraction }