def save_mean_mags(h_ext, create_new_files=False, close_files=False): global file_all, file_fe, file_dy hx, hy, hz = h_ext file_missing = file_all==None or file_fe==None or file_dy==None if create_new_files or file_missing: if file_missing: suffix = ".dat" else: suffix = "_%.2f_%.2f_%.2f.dat" % (hx, hy, hz) file_all = open(run_directory+"mm"+suffix , "w") file_fe = open(run_directory+"mm_fe"+suffix, "w") file_dy = open(run_directory+"mm_dy"+suffix, "w") first_line = "# Stage %d: h_ext(Tesla) = %f, %f, %f\n" % (num_stage, hx, hy, hz) file_all.write(first_line) file_fe.write(first_line) file_dy.write(first_line) elif close_files: file_all.close() file_dy.close() file_fe.close() else: # Save the mean magnetisations mm_fe = nfem.integrate_field(m_fe, "m") mm_dy = nfem.integrate_field(m_dy, "m") mm_dy = Numeric.array(mm_dy[0][1]) mm_fe = Numeric.array(mm_fe[0][1]) mm = (ms_dy*mm_dy + ms_fe*mm_fe) / volume total_energy = s_dy.total_energy() mx, my, mz = mm file_all.write( "%f %f %f %f %g %g %g %f %d %g\n" % (s.time, hx, hy, hz, \ mx, my, mz, total_energy, s.nr_iterations, s.old_dt) ) file_all.flush() mm_fe = mm_fe * (ms_fe / volume) mm_dy = mm_dy * (ms_dy / volume_hard) mx, my, mz = mm_fe file_fe.write( "%f %f %f %f\n" % (s.time, mx, my, mz) ) mx, my, mz = mm_dy file_dy.write( "%f %f %f %f\n" % (s.time, mx, my, mz) )
def save_stuff(sim): t = sim.time H = Hs[sim.stage-1] print "Stage %d converged!" % sim.stage result = nfem.integrate_field(sim.fields["m"], "m_Py") volume = sim.region_volume("Py") m = [mi/volume for mi in result[0][1]] mx, my, mz = m h_par = (sets.projection(axis=H_direction, vector=H)/material.m_sat).value m_par = sets.projection(axis=H_direction, vector=m) h_pars.append(h_par) m_pars.append(m_par) mxs.append(mx) mys.append(my) ms.append(m) ts.append(t.value)
def compute_integral(self, where=None, as_value=True): ocaml.lam_get_field(self.lam, self.master, self.get_lam_name()) dof_stem = "" if where != None: if type(where) == str: where = [where] dof_stem = ["%s_%s" % (self.name, mat_name) for mat_name in where] raw_result = nfem.integrate_field(self.master, dof_stem) if not as_value: return raw_result u = self.unit * self.volume_unit if self.def_on_mat: v = Value() for mat_name, data in raw_result: v.set(mat_name, data, u) return v else: assert len(raw_result) == 1 name, data = raw_result[0] return Value(data, u)