示例#1
0
	def run_bulk(self, t, special_input=None):
		# run name
		runname="%s, ni=%f, T=%f" % (self.material,  self.ni, t)
		self.write_log("##############################################\n")
		self.write_log("### euorun: %s\n" % runname)
		self.write_log("##############################################\n")
		# run command
		runcmd=self.mpicmd + " -np %i " % self.np
		runcmd+=self.sp.get_runcmd_bulk(self.material, self.ni, t)
		# add additional parameter
		runcmd+=self.iteration_parameter
		# add output
		runoutput=self.output + self.idb.get_temp_output(t)
		runcmd+=" -o %s/" % runoutput
		runexists=self.run_exists(runcmd, runoutput, check_database=self.check_database)
		if not runexists:
			# add special input folder
			if special_input!=None:
				runcmd+=" -i %s" % (special_input)
			# search self.input folder for suitable input folders and add it
			else:
				if self.inputFlag:
					runcmd=database.add_input(runcmd, download_path=self.output+"/download/", path=self.input, source=self.source, input_system_name=self.input_system_name)
			# run job
			j=job.job(runname, self.log, self.email, [runcmd], logappend=True, verbose=self.verbose, mailcmd=self.mailcmd)
			j.run()

		# update database
		if self.updatedbFlag and not runexists:
			self.write_log("* Update bulk database\n")
			updatecmd="bulk_remote.py %s" % runoutput
			#subprocess.call(updatecmd, shell=True)
			j=job.job("update remote bulk database", self.log, self.email, [updatecmd], logappend=True, verbose=False, mailcmd=self.mailcmd)
			j.run()
		self.write_log("\n")
示例#2
0
    def run_isolated(self, t, special_input=None):
        # run name
        runname = "%s, N=%i, ni=%f, T=%f" % (self.material, self.N, self.ni, t)
        self.write_log("##############################################\n")
        self.write_log("### euorun: %s\n" % runname)
        self.write_log("##############################################\n")
        # run command
        runcmd = self.mpicmd + " -np %i " % self.np
        runcmd += self.sp.get_runcmd_isolated(self.material, self.N, self.ni,
                                              t)
        # add additional parameter
        runcmd += self.iteration_parameter
        # add output
        runoutput = self.output + self.idb.get_temp_output(t)
        runcmd += " -o %s/" % runoutput
        # check if run exists before downloading possible input
        runexists = self.run_exists(runcmd,
                                    runoutput,
                                    check_database=self.check_database)
        # run job
        if not runexists:
            # add special input folder
            if special_input != None:
                runcmd += " -i %s" % (special_input)
            # search self.input folder for suitable input folders and add it
            else:
                if self.inputFlag:
                    runcmd = database.add_input(
                        runcmd,
                        download_path=self.output + "/download/",
                        path=self.input,
                        source=self.source,
                        input_system_name=self.input_system_name)

            j = job.job(runname,
                        self.log,
                        self.email, [runcmd],
                        logappend=True,
                        verbose=self.verbose,
                        mailcmd=self.mailcmd)
            j.run()

        # update database
        if self.updatedbFlag and not runexists:
            self.write_log("* Update isolated database\n")
            updatecmd = "isolated_remote.py %s" % runoutput
            #subprocess.call(updatecmd, shell=True)
            j = job.job("update remote isolated database",
                        self.log,
                        self.email, [updatecmd],
                        logappend=True,
                        verbose=False,
                        mailcmd=self.mailcmd)
            j.run()
        self.write_log("\n")
示例#3
0
    def run_hetero(self, t, special_input=None):
        # run name
        runname = "%s, N=%i, M=%i, ni=%f, ncr=%f, dW=%f, T=%f" % (
            self.material, self.N, self.M, self.ni, self.ncr, self.dW, t)
        self.write_log("##############################################\n")
        self.write_log("### euorun: %s\n" % runname)
        self.write_log("##############################################\n")
        # run command
        runcmd = self.mpicmd + " -np %i " % self.np
        runcmd += self.sp.get_runcmd_hetero(self.material, self.N, self.M,
                                            self.ni, self.ncr, self.dW, t)
        # add additional parameter
        runcmd += self.iteration_parameter
        # add output
        runoutput = self.output + self.hdb.get_temp_output(t)
        runcmd += " -o %s/" % runoutput

        #print "check", runcmd
        # check if run not already exist
        runexists = self.run_exists(runcmd,
                                    runoutput,
                                    check_database=self.check_database)
        if not runexists:
            # add special input folder
            if special_input != None:
                runcmd += " -i %s" % (special_input)
            # search self.input folder and/or remote database for suitable input folders and add it
            else:
                if self.inputFlag:
                    runcmd = database.add_input(
                        runcmd,
                        download_path=self.output + "/download/",
                        path=self.input,
                        source=self.source,
                        input_system_name=self.input_system_name)

            if self.isoDeltaFlag:
                ######################################################################################
                ####### add energy shift values for the isolated system constituents #################
                ######################################################################################
                # check is values of energy shifts in the isolated system already exist
                #print "check isodeltas:",  database.get_isodelta_info(runcmd)
                self.write_log(
                    "* Check isolated deltas: %s, %s, %s, %s, %s, %s, %s, %s\n"
                    % (database.get_isodelta_info(runcmd)[:-1]))
                (exists_left, material_left, N_left, nc_left, exists_right,
                 material_right, N_right, nc_right,
                 temp) = database.get_isodelta_info(runcmd)

                # if not start isolated runs
                if not exists_left or not exists_right:
                    if not exists_left:
                        # get name
                        runname_left = "%s, N=%i, ni=%f, T=%f" % (
                            material_left, N_left, nc_left, t)
                        self.write_log("* Isolated run necessary: %s\n" %
                                       runname_left)
                        # get run command
                        runcmd_left = self.mpicmd + " -np %i " % self.np
                        runcmd_left += self.sp.get_runcmd_isolated(
                            material_left, N_left, nc_left, t)
                        # add default additional parameter for iteration
                        runcmd_left += self.get_default_iteration_parameter(
                            material_left)
                        # add output
                        output_left = self.idb.get_output(
                            material_left, N_left, nc_left)
                        runoutput_left = output_left + self.idb.get_temp_output(
                            t)
                        runcmd_left += " -o " + runoutput_left
                        # run left system
                        if not self.run_exists(runcmd_left, runoutput_left):
                            # add input if existent
                            runcmd_left = database.add_input(
                                runcmd_left,
                                download_path=output_left + "/download/",
                                path=output_left,
                                source=self.source)
                            j = job.job(runname_left,
                                        self.log,
                                        self.email, [runcmd_left],
                                        logappend=True,
                                        verbose=self.verbose,
                                        mailcmd=self.mailcmd)
                            j.run()
                        # update database
                        self.write_log("* Update isolated database\n")
                        #print "update isolated db"
                        updatecmd_left = "isolated_remote.py %s" % output_left
                        #subprocess.call(updatecmd_left, shell=True)
                        j = job.job("update remote isolated database",
                                    self.log,
                                    self.email, [updatecmd_left],
                                    logappend=True,
                                    verbose=False,
                                    mailcmd=self.mailcmd)
                        j.run()

                    if not exists_right:
                        # get name
                        runname_right = "%s, N=%i, ni=%f, T=%f" % (
                            material_right, N_right, nc_right, t)
                        self.write_log("* Isolated run necessary: %s\n" %
                                       runname_right)
                        # get run command
                        runcmd_right = self.mpicmd + " -np %i " % self.np
                        runcmd_right += self.sp.get_runcmd_isolated(
                            material_right, N_right, nc_right, t)
                        # add default additional parameter for iteration
                        runcmd_right += self.get_default_iteration_parameter(
                            material_right)
                        # add output
                        output_right = self.idb.get_output(
                            material_right, N_right, nc_right)
                        runoutput_right = output_right + self.idb.get_temp_output(
                            t)
                        runcmd_right += " -o " + runoutput_right
                        # run right system
                        if not self.run_exists(runcmd_right, runoutput_right):
                            # add input if existent
                            runcmd_right = database.add_input(
                                runcmd_right,
                                download_path=output_right + "/download/",
                                path=output_right,
                                source=self.source)
                            j = job.job(runname_right,
                                        self.log,
                                        self.email, [runcmd_right],
                                        logappend=True,
                                        verbose=self.verbose,
                                        mailcmd=self.mailcmd)
                            j.run()
                        # update database
                        #print "update isolated db"
                        self.write_log("* Update isolated database\n")
                        updatecmd_right = "isolated_remote.py  %s" % output_right
                        #subprocess.call(updatecmd_right, shell=True)
                        j = job.job("update remote isolated database",
                                    self.log,
                                    self.email, [updatecmd_right],
                                    logappend=True,
                                    verbose=False,
                                    mailcmd=self.mailcmd)
                        j.run()

                # add isodeltas
                runcmd = database.add_isodeltas(runcmd)

            # run heterostructure job
            #print "run", runcmd
            j = job.job(runname,
                        self.log,
                        self.email, [runcmd],
                        logappend=True,
                        verbose=self.verbose,
                        mailcmd=self.mailcmd)
            j.run()

            # update database
            if self.updatedbFlag and not runexists:
                self.write_log("* Update heterostructure database\n")
                #print "update heterostructure db"
                updatecmd = "heterostructure_remote.py %s" % runoutput
                #subprocess.call(updatecmd, shell=True)
                j = job.job("update remote heterostructure database",
                            self.log,
                            self.email, [updatecmd],
                            logappend=True,
                            verbose=False,
                            mailcmd=self.mailcmd)
                j.run()

        self.write_log("\n")
示例#4
0
	def run_hetero(self, t, special_input=None):
		# run name
		runname="%s, N=%i, M=%i, ni=%f, ncr=%f, dW=%f, T=%f" % (self.material, self.N, self.M, self.ni, self.ncr, self.dW, t)
		self.write_log("##############################################\n")
		self.write_log("### euorun: %s\n" % runname)
		self.write_log("##############################################\n")
		# run command
		runcmd=self.mpicmd + " -np %i " % self.np
		runcmd+=self.sp.get_runcmd_hetero(self.material, self.N, self.M, self.ni, self.ncr, self.dW, t)
		# add additional parameter
		runcmd+=self.iteration_parameter
		# add output
		runoutput=self.output + self.hdb.get_temp_output(t)
		runcmd+=" -o %s/" % runoutput

		#print "check", runcmd
		# check if run not already exist 
		runexists=self.run_exists(runcmd, runoutput, check_database=self.check_database)
		if not runexists:
			# add special input folder
			if special_input!=None:
				runcmd+=" -i %s" % (special_input)
			# search self.input folder and/or remote database for suitable input folders and add it
			else:
				if self.inputFlag:
					runcmd=database.add_input(runcmd, download_path=self.output+"/download/", path=self.input, source=self.source, input_system_name=self.input_system_name)

			if self.isoDeltaFlag:
				######################################################################################
				####### add energy shift values for the isolated system constituents #################
				######################################################################################
				# check is values of energy shifts in the isolated system already exist
				#print "check isodeltas:",  database.get_isodelta_info(runcmd)
				self.write_log("* Check isolated deltas: %s, %s, %s, %s, %s, %s, %s, %s\n"  % (database.get_isodelta_info(runcmd)[:-1]))
				(exists_left, material_left, N_left, nc_left, exists_right, material_right, N_right, nc_right, temp)=database.get_isodelta_info(runcmd)

				# if not start isolated runs
				if not exists_left or not exists_right:
					if not exists_left:
						# get name
						runname_left="%s, N=%i, ni=%f, T=%f" % (material_left, N_left, nc_left, t)
						self.write_log("* Isolated run necessary: %s\n" % runname_left)
						# get run command
						runcmd_left=self.mpicmd + " -np %i " % self.np
						runcmd_left+=self.sp.get_runcmd_isolated(material_left, N_left, nc_left, t)
						# add default additional parameter for iteration 
						runcmd_left+=self.get_default_iteration_parameter(material_left)
						# add output
						output_left=self.idb.get_output(material_left, N_left, nc_left)
						runoutput_left=output_left + self.idb.get_temp_output(t)
						runcmd_left+=" -o " + runoutput_left
						# run left system
						if not self.run_exists(runcmd_left, runoutput_left):
							# add input if existent
							runcmd_left=database.add_input(runcmd_left, download_path=output_left+"/download/", path=output_left, source=self.source)
							j=job.job(runname_left, self.log, self.email, [runcmd_left], logappend=True, verbose=self.verbose, mailcmd=self.mailcmd)
							j.run()
						# update database
						self.write_log("* Update isolated database\n")
						#print "update isolated db"
						updatecmd_left="isolated_remote.py %s" % output_left
						#subprocess.call(updatecmd_left, shell=True)
						j=job.job("update remote isolated database" , self.log, self.email, [updatecmd_left], logappend=True, verbose=False, mailcmd=self.mailcmd)
						j.run()
		
					if not exists_right:
						# get name
						runname_right="%s, N=%i, ni=%f, T=%f" % (material_right, N_right, nc_right, t)
						self.write_log("* Isolated run necessary: %s\n" % runname_right)
						# get run command
						runcmd_right=self.mpicmd + " -np %i " % self.np
						runcmd_right+=self.sp.get_runcmd_isolated(material_right, N_right, nc_right, t)
						# add default additional parameter for iteration 
						runcmd_right+=self.get_default_iteration_parameter(material_right)
						# add output
						output_right=self.idb.get_output(material_right, N_right, nc_right)
						runoutput_right=output_right + self.idb.get_temp_output(t)
						runcmd_right+=" -o " + runoutput_right
						# run right system
						if not self.run_exists(runcmd_right, runoutput_right):
							# add input if existent
							runcmd_right=database.add_input(runcmd_right, download_path=output_right+"/download/", path=output_right, source=self.source)
							j=job.job(runname_right, self.log, self.email, [runcmd_right], logappend=True, verbose=self.verbose, mailcmd=self.mailcmd)
							j.run()
						# update database
						#print "update isolated db"
						self.write_log("* Update isolated database\n")
						updatecmd_right="isolated_remote.py  %s" % output_right
						#subprocess.call(updatecmd_right, shell=True)
						j=job.job("update remote isolated database" , self.log, self.email, [updatecmd_right], logappend=True, verbose=False, mailcmd=self.mailcmd)
						j.run()
		
		
				# add isodeltas
				runcmd=database.add_isodeltas(runcmd)

			# run heterostructure job
			#print "run", runcmd
			j=job.job(runname, self.log, self.email, [runcmd], logappend=True, verbose=self.verbose, mailcmd=self.mailcmd)
			j.run()

			# update database
			if self.updatedbFlag and not runexists:
				self.write_log("* Update heterostructure database\n")
				#print "update heterostructure db"
				updatecmd="heterostructure_remote.py %s" % runoutput
				#subprocess.call(updatecmd, shell=True)
				j=job.job("update remote heterostructure database", self.log, self.email, [updatecmd], logappend=True, verbose=False, mailcmd=self.mailcmd)
				j.run()

		self.write_log("\n")