FEM: Change default behaviour of ConfigParser used for materials

ConfigParser changes option capital letters in keys to small letters.
That commit changes it to generate verbatim keys as read from FCMat
files. Also Section names are no longer used to generate material
dictionary.

Signed-off-by: Przemo Firszt <przemo@firszt.eu>
This commit is contained in:
Przemo Firszt 2015-04-21 19:49:49 +01:00 committed by wmayer
parent 9b2f2b15bc
commit f96f319986
3 changed files with 21 additions and 20 deletions

View File

@ -431,7 +431,7 @@ class _JobControlTaskPanel:
inpfile.write('\n\n***********************************************************\n') inpfile.write('\n\n***********************************************************\n')
inpfile.write('** element sets for materials\n') inpfile.write('** element sets for materials\n')
for MaterialObject in self.MaterialObjects: for MaterialObject in self.MaterialObjects:
print MaterialObject['Object'].Name, ': ', MaterialObject['Object'].Material['General_name'] print MaterialObject['Object'].Name, ': ', MaterialObject['Object'].Material['Name']
inpfile.write('*ELSET,ELSET=' + MaterialObject['Object'].Name + '\n') inpfile.write('*ELSET,ELSET=' + MaterialObject['Object'].Name + '\n')
if len(self.MaterialObjects) == 1: if len(self.MaterialObjects) == 1:
inpfile.write('Eall\n') inpfile.write('Eall\n')
@ -501,26 +501,26 @@ class _JobControlTaskPanel:
inpfile.write('** youngs modulus unit is MPa = N/mm2\n') inpfile.write('** youngs modulus unit is MPa = N/mm2\n')
for MaterialObject in self.MaterialObjects: for MaterialObject in self.MaterialObjects:
# get material properties # get material properties
YM = FreeCAD.Units.Quantity(MaterialObject['Object'].Material['Mechanical_youngsmodulus']) YM = FreeCAD.Units.Quantity(MaterialObject['Object'].Material['YoungsModulus'])
if YM.Unit.Type == '': if YM.Unit.Type == '':
print 'Material "Mechanical_youngsmodulus" has no Unit, asuming kPa!' print 'Material "YoungsModulus" has no Unit, asuming kPa!'
YM = FreeCAD.Units.Quantity(YM.Value, FreeCAD.Units.Unit('Pa')) YM = FreeCAD.Units.Quantity(YM.Value, FreeCAD.Units.Unit('Pa'))
else: else:
print 'YM unit: ', YM.Unit.Type print 'YM unit: ', YM.Unit.Type
print 'YM = ', YM print 'YM = ', YM
PR = float(MaterialObject['Object'].Material['FEM_poissonratio']) PR = float(MaterialObject['Object'].Material['PoissonRatio'])
print 'PR = ', PR print 'PR = ', PR
# write material properties # write material properties
inpfile.write('*MATERIAL, NAME=' + MaterialObject['Object'].Material['General_name'] + '\n') inpfile.write('*MATERIAL, NAME=' + MaterialObject['Object'].Material['Name'] + '\n')
inpfile.write('*ELASTIC \n') inpfile.write('*ELASTIC \n')
inpfile.write('{0:.3f}, '.format(YM.Value * 1E-3)) inpfile.write('{0:.3f}, '.format(YM.Value * 1E-3))
inpfile.write('{0:.3f}\n'.format(PR)) inpfile.write('{0:.3f}\n'.format(PR))
# write element properties # write element properties
if len(self.MaterialObjects) == 1: if len(self.MaterialObjects) == 1:
inpfile.write('*SOLID SECTION, ELSET=' + MaterialObject['Object'].Name + ', MATERIAL=' + MaterialObject['Object'].Material['General_name'] + '\n\n') inpfile.write('*SOLID SECTION, ELSET=' + MaterialObject['Object'].Name + ', MATERIAL=' + MaterialObject['Object'].Material['Name'] + '\n\n')
else: else:
if MaterialObject['Object'].Name == 'MechanicalMaterial': if MaterialObject['Object'].Name == 'MechanicalMaterial':
inpfile.write('*SOLID SECTION, ELSET=' + MaterialObject['Object'].Name + ', MATERIAL=' + MaterialObject['Object'].Material['General_name'] + '\n\n') inpfile.write('*SOLID SECTION, ELSET=' + MaterialObject['Object'].Name + ', MATERIAL=' + MaterialObject['Object'].Material['Name'] + '\n\n')
# write step beginn # write step beginn
inpfile.write('\n\n\n\n***********************************************************\n') inpfile.write('\n\n\n\n***********************************************************\n')

View File

@ -172,18 +172,18 @@ class _MechanicalMaterialTaskPanel:
def ym_changed(self, value): def ym_changed(self, value):
import Units import Units
old_ym = Units.Quantity(self.obj.Material['Mechanical_youngsmodulus']) old_ym = Units.Quantity(self.obj.Material['YoungsModulus'])
if old_ym != value: if old_ym != value:
material = self.obj.Material material = self.obj.Material
material['Mechanical_youngsmodulus'] = unicode(value) material['YoungsModulus'] = unicode(value)
self.obj.Material = material self.obj.Material = material
def pr_changed(self, value): def pr_changed(self, value):
import Units import Units
old_pr = Units.Quantity(self.obj.Material['FEM_poissonratio']) old_pr = Units.Quantity(self.obj.Material['PoissonRatio'])
if old_pr != value: if old_pr != value:
material = self.obj.Material material = self.obj.Material
material['FEM_poissonratio'] = unicode(value) material['PoissonRatio'] = unicode(value)
self.obj.Material = material self.obj.Material = material
def choose_material(self, index): def choose_material(self, index):
@ -215,16 +215,16 @@ class _MechanicalMaterialTaskPanel:
def print_mat_data(self, matmap): def print_mat_data(self, matmap):
print 'Material data:' print 'Material data:'
print ' Name = {}'.format(self.get_material_name(matmap)) print ' Name = {}'.format(self.get_material_name(matmap))
if 'Mechanical_youngsmodulus' in matmap: if 'YoungsModulus' in matmap:
print ' YM = ', matmap['Mechanical_youngsmodulus'] print ' YM = ', matmap['YoungsModulus']
if 'FEM_poissonratio' in matmap: if 'PoissonRatio' in matmap:
print ' PR = ', matmap['FEM_poissonratio'] print ' PR = ', matmap['PoissonRatio']
def set_mat_params_in_combo_box(self, matmap): def set_mat_params_in_combo_box(self, matmap):
if 'Mechanical_youngsmodulus' in matmap: if 'YoungsModulus' in matmap:
self.form.input_fd_young_modulus.setText(matmap['Mechanical_youngsmodulus']) self.form.input_fd_young_modulus.setText(matmap['YoungsModulus'])
if 'FEM_poissonratio' in matmap: if 'PoissonRatio' in matmap:
self.form.spinBox_poisson_ratio.setValue(float(matmap['FEM_poissonratio'])) self.form.spinBox_poisson_ratio.setValue(float(matmap['PoissonRatio']))
def add_transient_material(self, material): def add_transient_material(self, material):
material_name = self.get_material_name(material) material_name = self.get_material_name(material)

View File

@ -57,12 +57,13 @@ def importFCMat(fileName):
"Read a FCMat file into a dictionary" "Read a FCMat file into a dictionary"
import ConfigParser import ConfigParser
Config = ConfigParser.ConfigParser() Config = ConfigParser.ConfigParser()
Config.optionxform = str
Config.read(fileName) Config.read(fileName)
dict1 = {} dict1 = {}
for section in Config.sections(): for section in Config.sections():
options = Config.options(section) options = Config.options(section)
for option in options: for option in options:
dict1[section+'_'+option] = Config.get(section, option) dict1[option] = Config.get(section, option)
return dict1 return dict1