def final_record_files(df,rf,sol,problem,mesh): df.file << sol df.dfile << problem.density_funcs.combined_density #dump average problem.density_funcs.combined_density.vector()[:]=problem.avg_dens.func for x in problem.avg_dens.func: rf.density.write(str(x)+" ") df.adfile << problem.density_funcs.combined_density avgE=mc.negGradient(mesh,PoissonSolve(mesh, problem.density_funcs.combined_density, problem.bcs,problem.V), problem.V2) df.avggradfile << avgE
def mainloop(mesh,system,problem,df,rf,scale): print "Beginning Simulation" current_values = [] for x in range(options.num): start1 = time.time() #Solve equation using avg_dens print "combined_density",problem.density_funcs.combined_density sol = PoissonSolve(mesh, problem.density_funcs.scaled_density, problem.bcs,problem.space) #handle Monte Carlo print "Starting Step ",x electric_field = (mc.negGradient(mesh,sol,problem.V2)) start2 = time.time() mc.MonteCarlo(mesh,system,sol,electric_field, problem.density_funcs,problem.avg_dens, problem.avg_electrons,problem.avg_holes, current_values) end2 = time.time() print problem.density_funcs.combined_density #Report write_results(df,rf,problem,sol,electric_field,current_values) end = time.time() print "Monte Took: ",end2-start2 print "Loop Took:",end-start1 #photocurrent current= pc.generate_photo_current(mesh,electric_field,problem) rf.current.write("pc: "+str(current)+"\n") final_record_files(df,rf,sol,problem,mesh) avg_length = 0 for particle in mesh.trajectories: avg_length += len(mesh.trajectories[particle]) #rf.trajectory.write(str(mesh.trajectories[particle])) #rf.trajectory.write("\n") print current_values # avg_length /= 1.*len(mesh.trajectories) print "Average trajectory length:",avg_length