/// <summary> /// Submit the job to the Microsoft HPC server. /// </summary> public override object Submit(Job myJob) { string PrjName = InteractiveShell.WorkflowMgm.CurrentProject; ISchedulerJob job = null; ISchedulerTask task = null; // Create a job and add a task to the job. job = m_scheduler.CreateJob(); job.Name = myJob.Name; job.Project = PrjName; job.MaximumNumberOfCores = myJob.NumberOfMPIProcs; job.MinimumNumberOfCores = myJob.NumberOfMPIProcs; job.UserName = m_Username; task = job.CreateTask(); task.MaximumNumberOfCores = myJob.NumberOfMPIProcs; task.MinimumNumberOfCores = myJob.NumberOfMPIProcs; task.WorkDirectory = myJob.DeploymentDirectory; using (var str = new StringWriter()) { str.Write("mpiexec "); str.Write(Path.GetFileName(myJob.EntryAssembly.Location)); foreach (string arg in myJob.CommandLineArguments) { str.Write(" "); str.Write(arg); } task.CommandLine = str.ToString(); } foreach (var kv in myJob.EnvironmentVars) { string name = kv.Key; string valu = kv.Value; task.SetEnvironmentVariable(name, valu); } task.StdOutFilePath = Path.Combine(myJob.DeploymentDirectory, "stdout.txt"); task.StdErrFilePath = Path.Combine(myJob.DeploymentDirectory, "stderr.txt"); if (m_ComputeNodes != null) { foreach (string node in m_ComputeNodes) { job.RequestedNodes.Add(node); } } job.AddTask(task); // Start the job. m_scheduler.SubmitJob(job, m_Password != null ? m_Username : null, m_Password); return(job.Id); }