###############################################################################
# Class: JobSubmitter_qsub_LLNL
#
# Purpose:    Custom "qsub" job submitter for LLNL.
#
# Programmer: Brad Whitlock
# Date:       Thu May 17 14:22:04 PDT 2012
#
# Modifications:
#   Eric Brugger, Tue Oct 18 16:38:04 PDT 2016
#   I modified the script to set ppn when running on trinity.
#
#   Eric Brugger, Thu Dec 29 13:12:25 PST 2016
#   I modified the script to set ttc when running on agate.
#
#   Eric Brugger, Mon Jan  9 13:43:22 PST 2017
#   I modified the script to no longer set usettc when on inca.
#
###############################################################################

class JobSubmitter_qsub_LLNL(JobSubmitter_qsub):
    def __init__(self, launcher):
        super(JobSubmitter_qsub_LLNL, self).__init__(launcher)
        self.usettc = self.sectorname() == "agate"
        self.useppn = (self.sectorname() == "graph") or (self.sectorname() == "tr-fe")


###############################################################################
# Class: LLNLLauncher
#
# Purpose:    Custom launcher for LLNL
#
# Programmer: Brad Whitlock
# Date:       Thu May 17 14:22:04 PDT 2012
#
# Modifications:
#   Eric Brugger, Mon Nov 19 12:04:57 PST 2012
#   I modified the script to add some paths to the LD_LIBRARY_PATH if running
#   on cielo.
#
#   Eric Brugger, Thu Jan 19 14:51:03 PST 2017
#   I added code to map login node names on jade and agate to their IP
#   addresses since they aren't in DNS.
#
#   Eric Brugger, Wed Mar 22 14:17:24 PDT 2017
#   I added the MPI library paths to the LD_LIBRARY_PATH for jade and agate.
#   I removed the logic that sets the LD_LIBRARY_PATH if running on cielo.
#
###############################################################################

class LLNLLauncher(MainLauncher):
    def __init__(self):
        super(LLNLLauncher, self).__init__()

    def Customize(self):
        if self.generalArgs.host == "jade188.llnl.gov":
            self.generalArgs.host = "130.106.201.19"
        elif self.generalArgs.host == "jade380.llnl.gov":
            self.generalArgs.host = "130.106.201.20"
        elif self.generalArgs.host == "jade386.llnl.gov":
            self.generalArgs.host = "130.106.201.57"
        elif self.generalArgs.host == "jade764.llnl.gov":
            self.generalArgs.host = "130.106.201.58"
        elif self.generalArgs.host == "jade770.llnl.gov":
            self.generalArgs.host = "130.106.201.59"
        elif self.generalArgs.host == "jade962.llnl.gov":
            self.generalArgs.host = "130.106.201.60"
        elif self.generalArgs.host == "agate2.llnl.gov":
            self.generalArgs.host = "130.106.204.1"
        elif self.generalArgs.host == "agate5.llnl.gov":
            self.generalArgs.host = "130.106.204.3"

        if self.sectorname() == "jade" or \
           self.sectorname() == "agate":
            mpi_ld_library_paths = ["/usr/tce/packages/mvapich2/mvapich2-2.2-intel-16.0.3/lib", "/usr/tce/packages/intel/intel-16.0.3/lib/intel64"]
            SETENV("LD_LIBRARY_PATH", self.joinpaths(mpi_ld_library_paths))

    #
    # Override the JobSubmitterFactory method so the custom job submitter can
    # be returned.
    #
    def JobSubmitterFactory(self, launch):
        if launch[:4] == "qsub" or launch[:4] == "msub":
            return JobSubmitter_qsub_LLNL(self)
        return super(LLNLLauncher, self).JobSubmitterFactory(launch)

# Launcher creation function
def createlauncher():
    return LLNLLauncher()
