Ejemplo n.º 1
0
def gettc(dbtype, db, folder, temperatures=None, tsteps=None, deltaM=None):
    # default magnetisation precision
    if deltaM == None:
        deltaM = 1.0E-2
    # default temperatures steps
    if temperatures == None:
        temperatures = range(20, 301, 20)
    # default temperatures steps
    if tsteps == None:
        # default temperature increments
        tsteps = [20, 10, 5, 1, 0.1]
    # tsteps must contain at least one entry
    if len(tsteps) < 1:
        print "Error: find_tc: No temperature steps given. Break"
        exit(1)
    # sort tsteps
    tsteps.sort()
    # reverse order (decendent)
    tsteps.reverse()

    try:
        (tc, dT, dM) = findtc.findtc(dummyrun, extractMag, (), (),
                                     (dbtype, db, folder), temperatures,
                                     tsteps, deltaM)
    except xmagfile, x:
        print x.name, "does not exist!"
        return False
Ejemplo n.º 2
0
    def findtc(self, temperatures=None, tsteps=None, deltaM=None):
        # prepare logfiles
        self.log_prepare()

        # default magnetisation precision
        if deltaM == None:
            deltaM = 1.0E-2
        # default temperatures steps
        if temperatures == None:
            temperatures = range(20, 301, 20)
        # default temperatures steps
        if tsteps == None:
            # default temperature increments
            tsteps = [160, 80, 40, 20, 10, 5, 2.5, 1, 0.1]
        # tsteps must contain at least one entry
        if len(tsteps) < 1:
            print "Error: euorun: find_tc: No temperature steps given. Break"
            exit(1)
        # sort tsteps
        tsteps.sort()
        # reverse order (decendent)
        tsteps.reverse()

        (tc, dT, dM) = ftc.findtc(self.run, self.extractMag, (),
                                  (self.initial_input, ), (), temperatures,
                                  tsteps, deltaM)

        ##############################
        # save tc in file and upload it to database
        ##############################
        local_file = "%s/tc.dat" % self.output
        f = open(local_file, 'w')
        f.write("# Curie temperature of %s\n" % self.name)
        f.write("# Magnetisation accuracy dM=%f\n" % dM)
        f.write("# Temperature accuracy dT=%f\n" % dT)
        f.write("# Tc=%f\n" % tc)
        f.write("%0.17e\n" % tc)
        f.close()
        if self.updatedbFlag:
            cmd = "scp %s [email protected]:/users/stollenw/projects/euo/results/%s/%s/" % (
                local_file, self.material_class, self.output)
            proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
            proc.communicate()

        ##############################
        # send finishing notification
        ##############################
        runname = ''
        if self.material_class == 'bulk':
            runname = "%s, ni=%f, Tc=%f" % (self.material, self.ni, tc)
        elif self.material_class == 'isolated':
            runname = "%s, N=%i, ni=%f, Tc=%f" % (self.material, self.N,
                                                  self.ni, tc)
        else:
            runname = "%s, N=%i, M=%i, ni=%f, ncr=%f, dW=%f, Tc=%f" % (
                self.material, self.N, self.M, self.ni, self.ncr, self.dW, tc)

        cmd = "echo '' | %s 'Find Tc finished: %s on %s.' %s" % (
            self.mailcmd, runname, self.host, self.email)
        subprocess.call(cmd, shell=True)
Ejemplo n.º 3
0
def gettc(dbtype, db, folder, temperatures=None, tsteps=None, deltaM=None):
	# default magnetisation precision
	if deltaM==None:
		deltaM=1.0E-2
	# default temperatures steps
	if temperatures==None:
		temperatures=range(20,301,20)
	# default temperatures steps
	if tsteps==None:
		# default temperature increments
		tsteps=[20,10,5,1,0.1]
	# tsteps must contain at least one entry
	if len(tsteps)<1:
		print "Error: find_tc: No temperature steps given. Break"
		exit(1)	
	# sort tsteps
	tsteps.sort()
	# reverse order (decendent)
	tsteps.reverse()

	try:
		(tc, dT, dM)=findtc.findtc(dummyrun, extractMag, (), (), (dbtype, db, folder), temperatures, tsteps, deltaM) 
	except xmagfile, x:
		print x.name, "does not exist!"	
		return False
Ejemplo n.º 4
0
	def findtc(self, temperatures=None, tsteps=None, deltaM=None):
		# prepare logfiles
		self.log_prepare()
			
		# default magnetisation precision
		if deltaM==None:
			deltaM=1.0E-2
		# default temperatures steps
		if temperatures==None:
			temperatures=range(20,301,20)
		# default temperatures steps
		if tsteps==None:
			# default temperature increments
			tsteps=[160,80,40,20,10,5,2.5,1,0.1]
		# tsteps must contain at least one entry
		if len(tsteps)<1:
			print "Error: euorun: find_tc: No temperature steps given. Break"
			exit(1)	
		# sort tsteps
		tsteps.sort()
		# reverse order (decendent)
		tsteps.reverse()
	
		(tc, dT, dM)=ftc.findtc(self.run, self.extractMag, (), (self.initial_input,), (), temperatures, tsteps, deltaM) 

		##############################
		# save tc in file and upload it to database
		##############################
		local_file="%s/tc.dat" % self.output
		f=open(local_file, 'w')
		f.write("# Curie temperature of %s\n" % self.name )
		f.write("# Magnetisation accuracy dM=%f\n" % dM)
		f.write("# Temperature accuracy dT=%f\n" % dT)
		f.write("# Tc=%f\n" % tc)
		f.write("%0.17e\n" % tc)
		f.close()
		if self.updatedbFlag:
			cmd = "scp %s [email protected]:/users/stollenw/projects/euo/results/%s/%s/" % (local_file, self.material_class, self.output)
			proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
			proc.communicate()
		
		##############################
		# send finishing notification
		##############################
		runname=''
		if self.material_class=='bulk':
			runname="%s, ni=%f, Tc=%f" % (self.material, self.ni, tc)
		elif self.material_class=='isolated':
			runname="%s, N=%i, ni=%f, Tc=%f" % (self.material, self.N, self.ni, tc)
		else:
			runname="%s, N=%i, M=%i, ni=%f, ncr=%f, dW=%f, Tc=%f" % (self.material, self.N, self.M, self.ni, self.ncr, self.dW, tc)
			
		cmd="echo '' | %s 'Find Tc finished: %s on %s.' %s" % (self.mailcmd, runname, self.host, self.email)
		subprocess.call(cmd, shell=True)
Ejemplo n.º 5
0
def main():
	parser = argparse.ArgumentParser(description='Calculate spins and Curie temperature for the layered mean-field heisenberg model')
	parser.add_argument('-n', '--N', default=5, help='Number of layers', type=int)
	parser.add_argument('--B', default=None, help='External magnetic field in units of D0', type=float)
	parser.add_argument('--M', default=0, help='Number of layers in second material', type=int)
	parser.add_argument('--no_mirror', action='store_false', help='Do not impose mirror symmetry')
	parser.add_argument('-l', '--longrange', action='store_true', help='Long range perpendicular coupling')
	parser.add_argument('--J4f', help='Spin-coupling', type=float)
	parser.add_argument('--J4f2', help='Spin-coupling in 2nd material', type=float)
	parser.add_argument('--Jcf', help='Spin-conduction-band-spin-coupling', type=float)
	parser.add_argument('-o','--output', help='output folder (optional)')
	parser.add_argument('-m','--cmag', help='file with conduction band magnetisation (optional)')
	parser.add_argument('--tsteps', nargs='*', help='temperature steps for the Curie temperature search (optional)', type=float)
	parser.add_argument('-t','--temperatures', nargs='*', help='temperatures for the Curie temperature search (optional)', type=float)
	parser.add_argument('--deltaM', help='Magnetisation accuracy for the Curie temperature search (optional)', type=float)
	args = parser.parse_args()

	output=get_output(args.N, args.J4f, args.Jcf)
	if args.output!=None:
		#output=args.output + "/" + get_output(args.N, args.J4f, args.Jcf)
		output=args.output + "/" 
		
	if os.path.exists(output):
		shutil.rmtree(output)
	os.makedirs(output)
	run_args=(args.N, output, args.no_mirror, args.longrange, args.J4f, args.Jcf, args.cmag, args.J4f2, args.M, args.B)
	get_mag_args=(output,)
	(tc, dT, dM)=findtc.findtc(run_heisenberg, get_mag_heisenberg, run_args, run_args, get_mag_args, args.temperatures, args.tsteps, args.deltaM)
	
	f=open(output + "/tc.dat", 'w')
	f.write("%e\n" % tc)
	f.close()

	# sort avspin vs t file
	f=open(output + "/avspin.dat", 'r')
	lines=f.readlines()
	f.close()
	f=open(output + "/avspin.dat", 'w')
	data=[]
	for l in lines:
		data.append((float(l.split()[0]), float(l.split()[1])))

	data=sorted(data, key=lambda x:x[0])
	for t,mag in data:
		f.write("%f\t%f\n" % (t,mag))
	f.close()