Ejemplo n.º 1
0
    def AppendInitFile(self):
        #Read init_domain.c from the Src/Templates folder.
        inidomainfl_name = self.pluto_dir + '/Src/Templates/init_domain.c'
        pf1 = pfIO.PlutoFiles(inidomainfl_name)

        #Convert the contents of file init_domain.c into a list
        inidomain = pf1.File2List()

        #Check if the init.c file exists in the work directory
        inifl_exits = os.path.exists(self.ini_fname)

        #If it does read the file and convert it contents into a list
        # Then break the list into part above the Init Function and part below the Init Function.
        if inifl_exits:
            pf = pfIO.PlutoFiles(self.ini_fname)
            nlist = pf.File2List()
            scrh1 = pf.LocateString(
                'void Init (double *v, double x1, double x2, double x3)\n')
            scrh3 = pf.LocateString('void InitDomain (Data *d, Grid *grid)\n')

            if len(scrh1) == 0:
                for item in nlist:
                    line = item.split()
                    if any(x in line for x in ["void", "Init", "Init(double"]):
                        lindx1 = nlist.index(item)
                        break
            else:
                lindx1 = scrh1[0][0]

            # If the InitDomain function is not present in the init.c file then
            # read line by line from the Init Function till you get number
            # of open curly brackets equal to close curly brackets.

            if len(scrh3) == 0:
                l1 = nlist[0:lindx1]
                l2 = nlist[lindx1:]
                opBracket = 0
                clBracket = 0
                addIndx = 0
                for item in l2:
                    line = item.split()
                    addIndx += 1
                    if ((len(line) > 0) and (line[0] != '*')):
                        for w in line:
                            if "{" in list(w): opBracket += 1
                            if "}" in list(w): clBracket += 1
                    if (opBracket > 0):
                        if (opBracket == clBracket):
                            addline = addIndx
                            break
                # Finally create a new list by adding the content of init_domain.c file
                NewInit = l1 + l2[:addline] + inidomain + l2[addline:]
                # Create the new init.c file.
                pf.List2File(NewInit)
Ejemplo n.º 2
0
    def ProcessUserDefPara(self):
        """
    Sets the Userdefined parameters
    """
        self.udef_params = ['USER_PAR_%.2d' % i for i in range(self.nparam)]
        if (os.path.exists(self.work_dir + '/definitions.h')):
            pf = pfIO.PlutoFiles(self.work_dir + '/definitions.h')
            scrh = pf.LocateString('parameters')
            k0 = scrh[0][0] + 2
            par_lines = pf.ReadLines(k0, k0 + self.nparam)
            for n in range(self.nparam):
                try:
                    x = par_lines[n].split()
                    x[0] == '#define'
                except IndexError:
                    pass
                else:
                    if (x[0] == "#define"):
                        self.udef_params[n] = x[1]
                    else:
                        break

        if self.auto_update == 0:
            menu.SetTitle("User-defined Parameters")
            par_entries = ['%d' % i for i in range(self.nparam)]
            menu.Insert(par_entries, self.udef_params)
Ejemplo n.º 3
0
 def ChkCompatiblity(self):
       oldKeys_ = ['INTERPOLATION','MHD_FORMULATION','RESISTIVE_MHD']
       replaceKeys_ = ['RECONSTRUCTION','DIVB_CONTROL','RESISTIVITY']
       if (os.path.exists(self.work_dir+'/definitions.h')):
         pf = pfIO.PlutoFiles(self.work_dir+'/definitions.h')
         for i in range(len(oldKeys_)):
             pf.ReplaceWord(oldKeys_[i], replaceKeys_[i])
Ejemplo n.º 4
0
    def ReadOrBrowse(self, Ents=None, Opts=None, Defs=None, MenuTitle=None):
        """Reads or Browses the entries, options and defaults to create header file.

    This method either reads the already exsisting definitions.h file or browses
    throught the three lists which are provided as inputs.

    **Inputs**:
      1. Ents = List of entries. [None]
      2. Opts = List of options corresponding to each member in Ents [None]
      3. Defs = List of default value from Opts corresponding to each member in Ents [None]
      4. MenuTitle = Title for the Menu to be Browsed [None]
    """
        if (os.path.exists(self.work_dir + '/definitions.h')):
            pf = pfIO.PlutoFiles(self.work_dir + '/definitions.h')
            pf.UpdateListFromFile(Ents, Defs)
            for i in range(len(Ents)):
                if Defs[i] not in Opts[i]:
                    Defs[i] = Opts[i][0]
                else:
                    pass

        # Provides Browsing options using the menu file in case of no automatic update flag.
        if self.auto_update == 0:
            selection = ''
            menu.SetTitle(MenuTitle)
            selection = menu.Browse(Ents, default=Defs, options=Opts)
Ejemplo n.º 5
0
    def ChomboMakeVars(self):
        """Adds CHOMBO specific vars in the Makefile.

        This method of the MakeProblem class does necessary
        modification to the makefile so as to accomodate
        compilation of chombo (AMR) specific variables.
        """
        pf = pfIO.PlutoFiles(self.work_dir + '/definitions.h')
        scrh = pf.LocateString('DIMENSIONS')
        dims = scrh[0][1].split()[2]
        chombo_config_string = 'DIM=' + dims

        if '--with-chombo:' in sys.argv:
            i = sys.argv.index('--with-chombo:') + 1
            try:
                sys.argv[1:]
            except IndexError:
                print "Additional Configration Details Required for '--with-chombo:' flag"
                sys.exit()
            else:
                for y in sys.argv[i:]:
                    chombo_config_string += ' ' + y

        self.row += 1
        menu.Print("  - Chombo config string: " + chombo_config_string,
                   row=self.row)
        self.row += 1
        menu.Print("  - creating make.vars...", row=self.row, sleep=0)
        os.chdir(self.pluto_dir + "/Lib/Chombo-3.2/lib")
        os.system("make " + chombo_config_string + " vars > make.vars\n")
        os.system("cp make.vars " + self.work_dir + "\n")
        os.chdir(self.work_dir)
Ejemplo n.º 6
0
 def ProcessUserDefConst(self):
     """
     Sets the Userdefined Constants.
     """
     self.udef_const = ['USER_CONST_%.2d'%i for i in range(self.nconst)]
     self.udef_const_vals = self.nconst*['YES'] 
     if (os.path.exists(self.work_dir+'/definitions.h')):
         pf = pfIO.PlutoFiles(self.work_dir+'/definitions.h')
         scrh = pf.LocateString('constants')
         k0   = scrh[0][0] + 2
         const_lines = pf.ReadLines(k0, k0 + self.nconst)
         for n in range(self.nconst):
             try:
                 x = const_lines[n].split()
                 x[0] == '#define'
             except IndexError: 
                 pass
             else:
                 if (x[0] == "#define"):
                     self.udef_const[n] = x[1]
                     self.udef_const_vals[n] = x[2]
                 else:          
                     break;
         
     if self.auto_update == 0:
         menu.SetTitle ("User-defined constants")
         const_entries = ['%d'%i for i in range(self.nconst)]
         menu.Insert(const_entries,self.udef_const)
         menu.SetTitle ("User-defined constant values")
         menu.Insert(self.udef_const, self.udef_const_vals)
Ejemplo n.º 7
0
    def SetArch(self):
        """Sets the Architecture for compilation of code.

        This attribute of the MakeProblem class looks for the
        'ARCH' keyword in makefile and if not defined will define it
        based on user's choice of the Makefile configuration
        from the Config/ folder. If already defined then will use
        that architecture for compilation of Makefile.
        """
        mkfl_exits = os.path.exists(self.mkfl_name)
        if mkfl_exits:
            pf = pfIO.PlutoFiles(self.mkfl_name)
            scrh = pf.LocateString('ARCH')

        if self.auto_update == 0 or not mkfl_exits or len(scrh[0]) == 0:
            def_list = []
            entries = os.listdir(self.pluto_dir + '/Config')
            for def_file in entries:
                if (def_file.endswith('.defs')): def_list.append(def_file)

            def_list.sort()
            menu.SetTitle("Change makefile")
            self.arch = menu.Browse(def_list)
            self.arch_string = 'ARCH         = ' + self.arch + '\n'
        else:
            self.arch_string = scrh[0][1]
            self.arch = self.arch_string.split()[2]
Ejemplo n.º 8
0
    def UpdateMkflTemplate(self):
        """
        Updates Makefile with additional flags, files and modular makefile paths.
        """
        shutil.copy(self.pluto_dir + self.makefile_template, self.mkfl_name)
        pf = pfIO.PlutoFiles(self.mkfl_name)
        pf.ReplaceWord('PLUTO_DIR',
                       'PLUTO_DIR    = ' + self.pluto_dir + '\n',
                       DelOld=True)
        pf.ReplaceWord('ARCH', self.arch_string, DelOld=True)

        scrh = pf.LocateString('Additional_header_files_here')
        ipos = scrh[0][0] + 3
        for x in self.header_files:
            pf.InsertLine('HEADERS += ' + x + '\n', ipos)
            ipos = ipos + 1

        scrh = pf.LocateString('Additional_object_files_here')
        ipos = scrh[0][0] + 3
        for x in self.additional_files:
            pf.InsertLine('OBJ += ' + x + '\n', ipos)
            ipos = ipos + 1

        for x in self.pluto_path:
            pf.InsertLine('include $(SRC)/' + x + 'makefile' + '\n', ipos)
            ipos = ipos + 1

        for x in self.additional_flags:
            pf.InsertLine('CFLAGS += ' + x + '\n', ipos)
            ipos = ipos + 1
    def NonUserFriendlyConst(self):
        """
        Sets the non-user friendly constants.
        """
        tmplist1 = [
            'INITIAL_SMOOTHING', 'WARNING_MESSAGES', 'PRINT_TO_FILE',
            'INTERNAL_BOUNDARY', 'SHOCK_FLATTENING'
        ]
        tmplist2 = len(tmplist1) * ['NO']

        if self.flag_dict['WITH-CHOMBO']:
            tmplist1 += ['CHOMBO_EN_SWITCH', 'CHOMBO_REF_VAR', 'CHOMBO_LOGR']
            tmplist2 += ['NO', 'ENG', 'NO']

        if not self.flag_dict['WITH-FD']:
            tmplist1 = tmplist1 + [
                'ARTIFICIAL_VISCOSITY', 'CHAR_LIMITING', 'LIMITER'
            ]
            tmplist2 = tmplist2 + ['NO', 'NO', 'DEFAULT']

        if 'MHD_FORMULATION' in self.mod_entries:
            divb_mode = self.mod_default[self.mod_entries.index(
                'MHD_FORMULATION')]
            if divb_mode == 'CONSTRAINED_TRANSPORT':
                tmplist1 = tmplist1 + [
                    'CT_EMF_AVERAGE', 'CT_EN_CORRECTION',
                    'ASSIGN_VECTOR_POTENTIAL'
                ]
                tmplist2 = tmplist2 + ['UCT_HLL', 'NO', 'YES']
            else:
                tmplist1 = tmplist1 + ['ASSIGN_VECTOR_POTENTIAL']
                tmplist2 = tmplist2 + ['NO']

            if not self.flag_dict['WITH-CHOMBO']:
                tmplist1 = tmplist1 + ['UPDATE_VECTOR_POTENTIAL']
                tmplist2 = tmplist2 + ['NO']

        if 'HANCOCK' in self.default:
            if (self.phymodule == 'RMHD'):
                tmplist1 = tmplist1 + ['PRIMITIVE_HANCOCK']
                tmplist2 = tmplist2 + ['NO']
            else:
                tmplist1 = tmplist1 + ['PRIMITIVE_HANCOCK']
                tmplist2 = tmplist2 + ['YES']

        if 'SUPER_TIME_STEPPING' in self.mod_default:
            tmplist1 = tmplist1 + ['STS_nu']
            tmplist2 = tmplist2 + ['0.01']

        longword = max(len(w) for w in tmplist1)

        if (os.path.exists(self.work_dir + '/definitions.h')):
            pf = pfIO.PlutoFiles(self.work_dir + '/definitions.h')
            pf.UpdateListFromFile(tmplist1, tmplist2)

        self.non_usfr = [
            '#define  ' + tmplist1[i].ljust(longword + 3) + tmplist2[i] + '\n'
            for i in range(len(tmplist1))
        ]
Ejemplo n.º 10
0
    def UpdatePlutoIni(self):
        """
    Updates pluto.ini file with values of UserDefined Parameters
    """
        pf = pfIO.PlutoFiles(self.work_dir + '/pluto.ini')
        scrh = pf.LocateString('[Parameters]')
        try:
            scrh[0]
        except IndexError:
            print("Parameters keyword not found in pluto.ini")
            sys.exit()
        else:
            pass

        ipos = scrh[0][0] + 2
        tmplist1 = pf.ReadLines(ipos, ipos + 512)
        paradict = {}
        cmms = []
        for x in tmplist1:
            if (len(x.split()) == 0): continue  # skip blank lines
            paradict.update({x.split()[0]: x.split()[1]})
            try:
                cmmval = x.split()[2]
            except IndexError:
                cmms.append('')
                continue
            else:
                if cmmval == '#' or cmmval.startswith('#'):
                    cmms.append(' '.join(x.split()[2:]))
                else:
                    cmms.append('')

        for x in self.udef_params:
            if x in paradict.keys():
                pf.InsertLine(
                    x.ljust(28) + paradict[x] + '  ' +
                    cmms[self.udef_params.index(x)] + '\n', ipos)
            else:
                try:
                    cmms[self.udef_params.index(x)]
                except IndexError:
                    pf.InsertLine(x.ljust(28) + '0.0' + '\n', ipos)
                else:
                    pf.InsertLine(
                        x.ljust(28) + '0.0' + '  ' +
                        cmms[self.udef_params.index(x)] + '\n', ipos)
            ipos = ipos + 1
        pf.DeleteLines(ipos, ipos + 100)
Ejemplo n.º 11
0
    def ProcessUserDefConst(self):
        """
    Sets the Userdefined Constants.
    """
        if (os.path.exists(self.work_dir + '/definitions.h')):
            pf = pfIO.PlutoFiles(self.work_dir + '/definitions.h')
            old_beg_scrh = pf.LocateString('symbolic')
            try:
                old_beg_scrh[0][0]
            except IndexError:
                pass
            else:
                del_indx = pf.LocateString('USER_DEF_CONSTANTS')
                pf.DeleteLines(del_indx[0][0], del_indx[0][0])
                old_beg_scrh = pf.LocateString('symbolic')
                pf.ReplaceLine(
                    '/* [Beg] user-defined constants (do not change this line) */',
                    old_beg_scrh[0][0])
                old_end_scrh = pf.LocateString('supplementary')
                pf.InsertLine(
                    '/* [End] user-defined constants (do not change this line) */',
                    old_end_scrh[0][0] - 1)

            scrh_beg = pf.LocateString('[Beg]')
            k_beg = scrh_beg[0][0] + 1
            scrh_end = pf.LocateString('[End]')
            k_end = scrh_end[0][0] - 1
            const_lines = pf.ReadLines(k_beg, k_end)
            #print const_lines
            for n in range(len(const_lines)):
                x = const_lines[n].split()
                try:
                    x[0] == '#define'
                except IndexError:
                    pass
                else:
                    if (x[0] == '#define'):
                        self.udef_const.append(x[1])
                        self.udef_const_vals.append(x[2])
                    else:
                        continue
 def ProcessUserDefConst(self):
     """
     Sets the Userdefined Constants.
     """
     if (os.path.exists(self.work_dir + '/definitions.h')):
         pf = pfIO.PlutoFiles(self.work_dir + '/definitions.h')
         scrh_beg = pf.LocateString('User_Constants_Beg')
         k_beg = scrh_beg[0][0] + 1
         scrh_end = pf.LocateString('User_Constants_End')
         k_end = scrh_end[0][0] - 1
         const_lines = pf.ReadLines(k_beg, k_end)
         print const_lines
         for n in range(len(const_lines)):
             x = const_lines[n].split()
             try:
                 x[0] == '#define'
             except IndexError:
                 pass
             else:
                 if (x[0] == '#define'):
                     self.udef_const.append(x[1])
                     self.udef_const_vals.append(x[2])
                 else:
                     continue
Ejemplo n.º 13
0
    def __init__(self, work_dir, pluto_dir, auto_update):
        """Defines the problem for the PLUTO code.

    This class essentially creates the definitions.h file
    based on the inputs given by the user from the PlutoSetup menu.
    In case the header file is already present, this class will
    read those default values to re-create the file.

    **Inputs**:
      1. work_dir = Path to PLUTO code working directory
      2. pluto_dir = Path to PLUTO source directory
      3. auto-update = Boolean that indicates auto-update of definitions.h file.

    **Output**:
      It generates a definitions.h file.

    """
        #Some class attributes that will be used in various class methods.
        self.work_dir = work_dir
        self.ini_fname = self.work_dir + '/init.c'
        self.pluto_dir = pluto_dir
        self.krome_dir = pluto_dir + '/Src/Cooling/KROME/krome/'
        self.auto_update = auto_update
        self.def_fname = self.work_dir + '/definitions.h'
        self.additional_files = []
        self.header_files = []
        self.additional_flags = []
        self.pluto_path = []
        self.def_file_list = []

        self.ChkCompatiblity()  #To Replace Old Keywords with New Ones

        # defining the PLUTO entries and its default values in lists.
        self.entries = [
            'PHYSICS', 'DIMENSIONS', 'COMPONENTS', 'GEOMETRY', 'BODY_FORCE',
            'FORCED_TURB', 'COOLING', 'RECONSTRUCTION', 'TIME_STEPPING',
            'DIMENSIONAL_SPLITTING', 'NTRACER', 'USER_DEF_PARAMETERS'
        ]
        self.default = [
            'HD', '1', '1', 'CARTESIAN', 'NO', 'NO', 'NO', 'LINEAR', 'RK2',
            'NO', '0', '0'
        ]

        # Creating a dictionary of flags that are invoked by giving arguments.
        flag_keys = [
            'WITH-CHOMBO', 'FULL', 'WITH-FD', 'WITH-SB', 'WITH-FARGO',
            'WITH-PARTICLES', 'WITH-CR_TRANSPORT'
        ]
        #self.flag_dict = {key: False for key in flag_keys} DOESNT WORK WITH PYTHON 2.6
        self.flag_dict = {
            'WITH-CHOMBO': False,
            'FULL': False,
            'WITH-FD': False,
            'WITH-SB': False,
            'WITH-FARGO': False,
            'WITH-PARTICLES': False,
            'WITH-CR_TRANSPORT': False
        }

        for arg in sys.argv:
            if arg[2:].upper() in flag_keys:
                self.flag_dict[arg[2:].upper()] = True
            elif arg[2:] == 'with-chombo:':
                self.flag_dict['WITH-CHOMBO'] = True
            else:
                pass

        # Generates Full Option List.
        self.GenerateOptionsList()

        # !!!!!!!!!!! CR_TRANSPORT !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        # if (self.flag_dict['WITH-CR_TRANSPORT'] == True):
        #   self.options[self.entries.index('PHYSICS')] = ['CR_TRANSPORT']
        # else:
        #   i = self.entries.index('PHYSICS')
        #   self.options[i].remove('CR_TRANSPORT')

        # print self.options[self.entries.index('PHYSICS')]
        # print self.entries
        # print self.options
        #
        # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

        #Updates Options, default based on FLAGS.
        if True in self.flag_dict.values():
            self.AfterFlagLists()

        #Read the exsisting definition.h file or Browse the menu for Setting up problem.
        self.ReadOrBrowse(Ents=self.entries,
                          Defs=self.default,
                          Opts=self.options,
                          MenuTitle="Setup problem")

        #Process the PHYSICS Modules.
        if self.default[self.entries.index('PHYSICS')] == 'HD':
            self.ProcessHDModule()
            self.ReadOrBrowse(Ents=self.entries_HD,
                              Defs=self.default_HD,
                              Opts=self.options_HD,
                              MenuTitle="HD Menu")
            self.eos = self.default_HD[self.entries_HD.index('EOS')]

        if self.default[self.entries.index('PHYSICS')] == 'RHD':
            self.ProcessRHDModule()
            self.ReadOrBrowse(Ents=self.entries_RHD,
                              Defs=self.default_RHD,
                              Opts=self.options_RHD,
                              MenuTitle="RHD Menu")
            self.eos = self.default_RHD[self.entries_RHD.index('EOS')]

        if self.default[self.entries.index('PHYSICS')] == 'MHD':
            self.ProcessMHDModule()
            self.ReadOrBrowse(Ents=self.entries_MHD,
                              Defs=self.default_MHD,
                              Opts=self.options_MHD,
                              MenuTitle="MHD Menu")
            self.eos = self.default_MHD[self.entries_MHD.index('EOS')]

        if self.default[self.entries.index('PHYSICS')] == 'RMHD':
            self.ProcessRMHDModule()
            self.ReadOrBrowse(Ents=self.entries_RMHD,
                              Defs=self.default_RMHD,
                              Opts=self.options_RMHD,
                              MenuTitle="RMHD Menu")
            self.eos = self.default_RMHD[self.entries_RMHD.index('EOS')]

        if self.default[self.entries.index('PHYSICS')] == 'CR_TRANSPORT':
            self.ProcessCR_TransportModule()
            self.ReadOrBrowse(Ents=self.entries_CR_TRANSPORT,
                              Defs=self.default_CR_TRANSPORT,
                              Opts=self.options_CR_TRANSPORT,
                              MenuTitle="CR_Transport Menu")
            self.eos = self.default_CR_TRANSPORT[
                self.entries_CR_TRANSPORT.index('EOS')]

        # Process the KROME cooling module when required.
        if self.default[self.entries.index('COOLING')] == 'KROME':
            self.ProcessKROMEModule()
            self.ReadOrBrowse(Ents=self.entries_KROME,
                              Defs=self.default_KROME,
                              Opts=self.options_KROME,
                              MenuTitle="KROME Menu")
            self.WriteKromeOpts()

        #UserDef Para and Constants
        self.udef_params = []
        self.udef_const = []
        self.udef_const_vals = []
        self.nparam = int(
            self.default[self.entries.index('USER_DEF_PARAMETERS')])

        #self.nconst = int(self.default[self.entries.index('USER_DEF_CONSTANTS')])
        if self.nparam > 0:
            self.ProcessUserDefPara()

        self.ProcessUserDefConst()

        # Write a List def_file_list which will be written as the header file.
        self.WriteDefFileList()
        pf = pfIO.PlutoFiles(self.work_dir + '/definitions.h')
        pf.List2File(self.def_file_list)

        self.AppendInitFile()
Ejemplo n.º 14
0
    def NonUserFriendlyConst(self):
        """
        Sets the non-user friendly constants. : OBSOLETE
        
        This function only stores the Non-User Friendly constants
        whose values are different than their DEFAULT values and
        incorporates them in User Defined Constants.
    """
        self.non_usfr = []
        tmplist1 = [
            'INITIAL_SMOOTHING', 'WARNING_MESSAGES', 'INTERNAL_BOUNDARY',
            'SHOCK_FLATTENING'
        ]
        tmplist2 = ['NO', 'YES', 'NO', 'NO']
        tmplist2_def = ['NO', 'YES', 'NO', 'NO']

        #       if self.flag_dict['WITH-CHOMBO']:
        #           tmplist1 += ['CHOMBO_REF_VAR','CHOMBO_LOGR']
        #           tmplist2 += ['ENG',       'NO']

        if not self.flag_dict['WITH-FD']:
            tmplist1 = tmplist1 + ['CHAR_LIMITING', 'LIMITER']
            tmplist2 = tmplist2 + ['NO', 'DEFAULT']
            tmplist2_def = tmplist2_def + ['NO', 'DEFAULT']

        if 'DIVB_CONTROL' in self.mod_entries:
            divb_mode = self.mod_default[self.mod_entries.index(
                'DIVB_CONTROL')]
            if divb_mode == 'CONSTRAINED_TRANSPORT':
                tmplist1 = tmplist1 + [
                    'CT_EMF_AVERAGE', 'CT_EN_CORRECTION',
                    'ASSIGN_VECTOR_POTENTIAL'
                ]
                tmplist2 = tmplist2 + ['UCT_HLL', 'NO', 'NO']
                tmplist2_def = tmplist2_def + ['UCT_HLL', 'NO', 'NO']
            else:
                tmplist1 = tmplist1 + ['ASSIGN_VECTOR_POTENTIAL']
                tmplist2 = tmplist2 + ['NO']
                tmplist2_def = tmplist2_def + ['NO']

            if not self.flag_dict['WITH-CHOMBO']:
                tmplist1 = tmplist1 + ['UPDATE_VECTOR_POTENTIAL']
                tmplist2 = tmplist2 + ['NO']
                tmplist2_def = tmplist2_def + ['NO']


#        if 'HANCOCK' in self.default:
#            if (self.phymodule == 'RMHD'):
#                tmplist1 = tmplist1 + ['PRIMITIVE_HANCOCK']
#                tmplist2 = tmplist2 + ['NO']
#           else:
#                tmplist1 = tmplist1 + ['PRIMITIVE_HANCOCK']
#                tmplist2 = tmplist2 + ['YES']

        longword = max(len(w) for w in tmplist1)

        if (os.path.exists(self.work_dir + '/definitions.h')):
            pf = pfIO.PlutoFiles(self.work_dir + '/definitions.h')
            scrh = pf.LocateString('supplementary')
            try:
                scrh[0]
            except IndexError:
                pass
            else:
                pf.UpdateListFromFile(tmplist1, tmplist2)

        for i in range(len(tmplist1)):
            if tmplist2[i] != tmplist2_def[i]:
                self.non_usfr = self.non_usfr + [
                    '#define  ' + tmplist1[i].ljust(28) + '   ' + tmplist2[i] +
                    '\n'
                ]
Ejemplo n.º 15
0
def check(pluto_dir, get_arch):

    work_dir = os.getcwd()
    print("\n>> Inspecting system configuration << \n")

    log_file = work_dir + '/sysconf.out'
    python_dir = pluto_dir + '/Tools/Python'
    param_file = pluto_dir + '/Src/pluto.h'

    os.chdir(python_dir)
    log = []

    #  ---------------------
    #    get user name
    #  ---------------------

    try:
        user = os.getlogin()
    except OSError:
        user = '******'

#  ---------------------
#    get system spec.
#  ---------------------

    PLATFORM = os.uname()

    #  ---------------------
    #   find current
    #   version of PLUTO
    #  ---------------------

    pf = pfIO.PlutoFiles(param_file)
    scrh = pf.LocateString("PLUTO_VERSION")
    ipos = scrh[0][0]
    vers = scrh[0][1].split()[-1]

    # ------------------------------
    #  print a short system summary
    # ------------------------------

    print("User.......................", user)
    print("System name................", PLATFORM[0])
    print("Node name..................", PLATFORM[1])
    print("Release....................", PLATFORM[2])
    print("Arch.......................", PLATFORM[4])
    print("Byteorder..................", sys.byteorder)
    print("Version....................", PLATFORM[3])
    print("Working_dir................", work_dir)
    print("PLUTO main dir.............", pluto_dir)
    print("PLUTO version..............", vers)

    # --------------------------------------
    #  Check for gcc or another c compiler
    # --------------------------------------

    compiler_list = ['gcc', 'cc', 'gcc2']
    COMPILER_NAME = ''

    for x in compiler_list:
        if (CHECK_FOR(x) == 'YES'):
            print("C Compiler................. ", x)
            COMPILER_NAME = x
            break

    if (COMPILER_NAME == ''):
        print("! Can not find a C compiler       !")

# -----------------
#  check for mpi
# -----------------

    mpi_compiler_list = ['mpicc', 'mpiCC', 'mpcc_r', 'hcc', 'mpcc']
    MPI_COMPILER_NAME = ''

    for x in mpi_compiler_list:
        if (CHECK_FOR(x) == 'YES'):
            print("MPI Compiler .............. ", x)
            MPI_COMPILER_NAME = x
            break

    if (MPI_COMPILER_NAME == ''):
        print("MPI Compiler............... NOT FOUND")

    if (get_arch):
        print("\n")
        print("Proposed makefile names: \n")
        print("> " + PLATFORM[0] + "." + PLATFORM[4] + "." + COMPILER_NAME +
              ".defs")
        print("> " + PLATFORM[0] + "." + PLATFORM[4] + "." +
              MPI_COMPILER_NAME + ".defs")

# ---------------------------------------------------
#  Build log list, that will be compared to the
#  sysconf.out file.
# ---------------------------------------------------

    log.append("USER           = "******"WORKING_DIR    = " + work_dir + "\n")
    log.append("SYSTEM_NAME    = " + PLATFORM[0] + "\n")
    log.append("NODE_NAME      = " + PLATFORM[1] + "\n")
    log.append("RELEASE        = " + PLATFORM[2] + "\n")
    log.append("ARCH           = " + PLATFORM[4] + "\n")
    log.append("BYTE_ORDER     = " + sys.byteorder + "\n")
    log.append("VERSION        = " + PLATFORM[3] + "\n")
    log.append("PLUTO_DIR      = " + pluto_dir + '\n')
    log.append("PLUTO_VERSION  = " + vers + '\n')
    log.append("C_COMPILER     = " + COMPILER_NAME + '\n')
    log.append("MPI_C_COMPILER = " + MPI_COMPILER_NAME + '\n')

    #  ----------------------------
    #    check for online updates
    #  ----------------------------

    print("\n> Checking for updates (canceled)...\n")
    # try:
    #   urllib.urlretrieve("http://plutocode.ph.unito.it/updates.txt","updates.txt")
    #   scrh = file.word_find ("updates.txt","release")
    #   ipos = scrh[0]
    #   scrh = file.read_lines ("updates.txt", ipos, ipos + 1)
    #   rels = string.split(scrh[0])
    #   if (rels[1] != vers):
    #     print "   ******************************************************* "
    #     print "    A new version of PLUTO ("+rels[1]+") is available at"
    #     print "    http://plutocode.oato.inaf.it"
    #     print "   *******************************************************\n"
    #     scrh = raw_input("> Press enter to continue.")
    #     os.chdir(work_dir)
    # except:
    #   print "! Connection not available\n"

    # ------------------------------------------------
    #  Compare the list 'log' with the file log_file;
    #
    #   - if they match, no update is necessary,
    #               ==> return to main menu
    #
    #   - if they do not match or if log_file does not
    #     exists, create a new one
    #
    # ------------------------------------------------

    if (os.path.exists(log_file)):
        pf = pfIO.PlutoFiles(log_file)
        scrh = pf.ReadLines(0, 128)
        if (scrh[0:] == log[0:]):
            os.chdir(work_dir)
            return
        else:
            print(
                "\n> System configuration file is not up to date. Updating...")
    else:
        print("\n> System configuration file not found, creating one...")
        pf = pfIO.PlutoFiles(log_file)
        pf.List2File(log)

# ------------
#  Make Tools
# ------------

# print (" > Making binary tools in "+bintools_dir+"...")
# os.chdir(bintools_dir)
# os.system('make -s clean')
# os.system('make -s dbl2flt')
# os.system('make -s bin2ascii')
# if (HAVE_LIBPNG == 'YES'):
#   os.system('make -s bin2png')

# ---------------------------
#   Add important info here
# ---------------------------

# scrh = raw_input(" > Press enter to continue.")
    os.chdir(work_dir)
    return