def _gendecls(self):
     self._writeline(indent1 + '#Assumes 0.0 initial value for inputs')
     for k, v in self.components.iteritems():
         for name, nodes in v.iteritems():
             #MDPL - is there any way to get units?
             if k == 'surfaces':
                 for i in ansysinfo.surfaceinputtypes.iterkeys():
                     self._gendecl(k, i, name)
             elif k == 'keypoints':
                 for i in ansysinfo.keypointinputtypes.iterkeys():
                     self._gendecl(k, i, name)
             elif k == 'nodes':
                 for i in ansysinfo.nodeinputtypes.iterkeys():
                     self._gendecl(k, i, name)
             else:
                 print 'ERROR: AnsysWrapperGenerator for ' + name + \
                       ': unknown component type ' + k + ' - IGNORED'
             for otype, ounits in ansysinfo.outputtypes.iteritems():
                 n = ansysinfo._make_name(name, otype)
                 #import pdb; pdb.set_trace()
                 self._writeline(indent1 + n +
                                 ' = List(iotype = "out", desc = "' + otype +
                                 ' on nodes of ' + name + '")')
                 for ctype in ansysinfo.calctypes:
                     s = indent1 + n + '_' + ctype + \
                         ' = Float(0.0, iotype = "out",\n' + \
                         indent2 + 'desc = "' + ctype + ' of ' + otype + \
                         ' on nodes of ' + name + '"'
                     if self.unitsinfo.ok and ounits in self.unitsinfo.info:
                         s = s + ',\n' + indent2 + 'units = "' + \
                             self.unitsinfo.info[ounits] + '"'
                     s = s + ')'
                     self._writeline(s)
 def _gendecl(self, k, i, name):
     s = indent1 + ansysinfo._make_name(name, i) + \
         ' = Float(0.0,' 'iotype = "in",\n' + indent2 + 'desc = " ' + \
         i + ' on ' + k + ' component ' + name + '"'
     if self.unitsinfo.ok and i in self.unitsinfo.info:
         s = s + ',\n' + indent2 + 'units = "' + self.unitsinfo.info[i] + '"'
     s = s + ')'
     self._writeline(s)
 def _gendecl(self, k, i, name, units):
     nm = ansysinfo._make_name(name, i)
     self.input_names.add(nm)
     s = indent1 + nm + ' = Float(0.0,' 'iotype = "in",\n' + indent2 + 'desc = " ' + \
         i + ' on ' + k + ' component ' + name + '"'
     if self.unitsinfo.ok and units in self.unitsinfo.info:
         s = s + ',\n' + indent2 + 'units = "' + self.unitsinfo.info[units] + '"'
     s = s + ')'
     self._writeline(s)
 def _gendecls(self):
     self._writeline(indent1 + '#Assumes 0.0 initial value for inputs')
     for k, v in self.components.iteritems():
         for name, nodes in v.iteritems():
             #TO_CHECK  - is there any way to get units?
             if k == 'surfaces':
                 for i, v in ansysinfo.surfaceinputtypes.iteritems():
                     self._gendecl(k, i, name, v[1])
             elif k == 'keypoints':
                 for i, v in ansysinfo.keypointinputtypes.iteritems():
                     self._gendecl(k, i, name, v[1])
             elif k == 'nodes':
                 for i, v in ansysinfo.nodeinputtypes.iteritems():
                     self._gendecl(k, i, name, v[1])
             else:
                 s = 'AnsysWrapperGenerator for ' + name + ': unknown component type ' + k + ' - IGNORED'
                 print 'WARNING: ' + s
                 self.logger.warning(s)        
             for otype, ounits in ansysinfo.outputtypes.iteritems():
                 n = ansysinfo._make_name(name, otype)
                 self.output_names.add(n)
                 if self.unitsinfo.ok and ounits in self.unitsinfo.info:
                     units_str = ',\n' + indent2 + 'units = "' + self.unitsinfo.info[ounits] + '"'
                 else:
                     units_str = ''
                 self._writeline(indent1 + n +
                                 ' = Array(iotype = "out", dtype = "float",\n' + indent2 + 'desc = "' + otype +
                                 ' on nodes of ' + name + '"' + units_str + ')')
                 for ctype in ansysinfo.calctypes:
                     cname = n + '_' + ctype
                     self.output_names.add(cname)
                     self._writeline(indent1 + cname + ' = Float(0.0, iotype = "out",\n' +
                                     indent2 + 'desc = "' + ctype + ' of ' + otype + ' on nodes of ' + name + '"' + units_str + ')')
     for i, v in ansysinfo.globalinputtypes.iteritems():
         iunits = v[1]
         if self.unitsinfo.ok and iunits in self.unitsinfo.info:
             units_str = 'units = "' + self.unitsinfo.info[iunits] + '"'
         else:
             units_str = ''
         global_name = 'FEA_' + i
         self.input_names.add(global_name)
         initial_name = 'initial_' + global_name
         if i in self.initial_values_dictionary:
             initial_value = self.initial_values_dictionary[i]
         else:
             initial_value = 0.0
             s = 'AnsysWrapperGenerator for ' + name + ': ' + i + ' not in initial_values_dictionary; using 0.0 as initial value'
             print 'WARNING: ' + s
             self.logger.warning(s)
         self._writeline(indent1 + global_name + ' = Float(' + str(initial_value) + ', iotype = "in", ' + units_str + ')') 
         self._writeline(indent1 + initial_name  + ' = ' + str(initial_value))
     #an output for the full name of the python results file
     self._writeline(indent1 + 'Results_File = Str(iotype = "out", desc = "Results file in Python Format")')
    def write_input(self, inputs=[]):
        """Write input file self.loadsfile."""
        currdir = os.getcwd()
        input_cmds = []
        try:
            os.chdir(self.runner.workingdir)
            try:
                f = open(self.loadsfile, 'w')
            except IOError as ioe:
                print 'Error opening loadsfile file ' + self.loadsfile
                print sys.exc_info()[0]
                print str(ioe)
                self.ok = False
                return False
            self.logger.info(self.my_name + ' write input: ' + self.loadsfile)
            self.logger.info('-------------------------------------\n')
            #self.logger.debug('nodeinputtypes ' + str(ansysinfo.nodeinputtypes))
            for k, vv in self.components.iteritems():
                #self.logger.debug('component ' + str(k) + ' ' + str(vv.keys()))
                for name, nodes in vv.iteritems():
                    #self.logger.debug(name)
                    if k == 'surfaces':
                        for i, s in ansysinfo.surfaceinputtypes.iteritems():
                            n = ansysinfo._make_name(name, i)
                            v = self.get_attr_value(n)
                            v = self.convert_units(n, v)
                            #self.logger.debug(n + ' = ' + str(v))
                            if v != 0.0: #write new value
                                l = s[0].replace('%N%', name)
                                l1 = l.replace('%V%', str(v))
                                l2 = '!apply ' + i + ' ' + str(v) + ' to ' + \
                                    ' surface component ' + name
                                f.write(l2 + '\n')
                                f.write(l1 + '\n')
                                self.logger.info(l2)
                                self.logger.info(l1)
                                input_cmds.append(l1)
                    elif k == 'keypoints':
                        for i, s in ansysinfo.keypointinputtypes.iteritems():
                            n = ansysinfo._make_name(name, i)
                            v = self.get_attr_value(n)
                            v = self.convert_units(n, v)
                            #self.logger.debug(n + ' = ' + str(v))
                            if v != 0.0: #write new value
                                l = s[0].replace('%N%', name)
                                l1 = l.replace('%V%', str(v))
                                l2 = '!apply ' + i + ' ' + str(v) + ' to ' + \
                                    ' keypoint component ' + name
                                f.write(l2 + '\n')
                                f.write(l1 + '\n')
                                self.logger.info(l2)
                                self.logger.info(l1)
                                input_cmds.append(l1)
                    elif k == 'nodes':
                        #self.logger.debug('node ' + name)
                        #import pdb; pdb.set_trace()
                        for i, s in ansysinfo.nodeinputtypes.iteritems():
                            n = ansysinfo._make_name(name, i)
                            try:
                                v = self.get_attr_value(n)
                                v = self.convert_units(n, v)
                            except:
                                print 'Exception in gettattr ' + n
                                v = 0.0
                            #self.logger.debug(n + ' = ' + str(v))
                            if v != 0.0: #write new value
                                l = s[0].replace('%N%', name)
                                l1 = l.replace('%V%', str(v))
                                l2 = '!apply ' + i + ' ' + str(v) + ' to ' + \
                                    ' node component ' + name
                                f.write(l2 + '\n')
                                f.write(l1 + '\n')
                                self.logger.info(l2)
                                self.logger.info(l1)
                                input_cmds.append(l1)
                    elif k == 'global':
                        for i, s in ansysinfo.globalinputtypes.iteritems():
                            n = ansysinfo._make_name(name, i)
                            v = self.get_attr_value(n)
                            v = self.convert_units(n, v)
                            initial_v = self.get_attr_value('initial_' + n)
                            if v != initial_v: #write new value
                                l = s[0].replace('%N%', name)
                                l1 = l.replace('%V%', str(v))
                                l2 = '!apply ' + i + ' ' + str(v) + ' to ' + \
                                    ' global component ' + name
                                f.write(l2 + '\n')
                                f.write(l1 + '\n')
                                self.logger.info(l2)
                                self.logger.info(l1)
                                input_cmds.append(l1)


                    elif k == 'coordinputtypes':
                        keys = ansysinfo.coordinputtypes.keys()
                        keys.sort()
                        subs = [ansysinfo.coordinputtypes[k] for k in keys]
                        for bnd, vvv in vv.iteritems():
                            for node, defls in vvv.iteritems(): # node is node number, delfs is list [UX, UY, UZ]
                                for defl, sub in zip(defls, subs):
                                    if defl <> 0:
                                        l = sub[0].replace('%N%', str(node))
                                        l1 = l.replace('%V%', str(defl))
                                        l2 = '!apply deflection ' + str(defl) + ' to ' + ' node ' + str(node)  
                                        f.write(l2 + '\n')
                                        f.write(l1 + '\n')
                                        self.logger.info(l2)
                                        self.logger.info(l1)
                                        input_cmds.append(l1)

            # extra_inputs, set elsewhere, get passed through verbatim
            for line in inputs:
                f.write(line)
                input_cmds.append(line)

            self.logger.info('-------------------------------------\n')
            self.logger.info(self.my_name + ' write input done')

        finally:
            f.close()
            os.chdir(currdir)
            return input_cmds