Skip to content
Snippets Groups Projects
Commit b979bb3b authored by Boman Romain's avatar Boman Romain
Browse files

add basic extractors to cxxfem (to be continued)

parent 0c653107
No related branches found
No related tags found
1 merge request!2Extractors
Pipeline #23981 passed
This commit is part of merge request !2. Comments created here will be created in the context of that merge request.
...@@ -64,6 +64,7 @@ def parms(d={}): ...@@ -64,6 +64,7 @@ def parms(d={}):
] ]
p['loads'] = [] # additional loads p['loads'] = [] # additional loads
p['extractors'] = [] # additional extractors
# material properties # material properties
p['Young'] = 17000. # [MPa] elastic modulus - bone: 17-20 GPa p['Young'] = 17000. # [MPa] elastic modulus - bone: 17-20 GPa
...@@ -135,6 +136,10 @@ def solve(p={}): ...@@ -135,6 +136,10 @@ def solve(p={}):
for fix in p['fixations']: for fix in p['fixations']:
create_group(fix['nodes'], nods_no, nods_pos, groups, fix['name']) create_group(fix['nodes'], nods_no, nods_pos, groups, fix['name'])
# create groups of additional extractors
for extr in p['extractors']:
create_group(extr['nodes'], nods_no, nods_pos, groups, extr['name'])
# -------------------------------------------------------------------------- # --------------------------------------------------------------------------
# print('== ADDING MEDIUM...') # print('== ADDING MEDIUM...')
print('') print('')
...@@ -189,6 +194,7 @@ def solve(p={}): ...@@ -189,6 +194,7 @@ def solve(p={}):
print('extracting results...') print('extracting results...')
print(f'\tinternal energy = {solver.int_energy:.3f} N.mm') print(f'\tinternal energy = {solver.int_energy:.3f} N.mm')
# fixations (reaction forces)
for fix in p['fixations']: for fix in p['fixations']:
grpname = fix['name'] grpname = fix['name']
v = np.array(post.probe('force_vector', grpname)) v = np.array(post.probe('force_vector', grpname))
...@@ -198,6 +204,7 @@ def solve(p={}): ...@@ -198,6 +204,7 @@ def solve(p={}):
print(f'\t{grpname}_Fy = {v[1]:.3f} N') print(f'\t{grpname}_Fy = {v[1]:.3f} N')
print(f'\t{grpname}_Fz = {v[2]:.3f} N') print(f'\t{grpname}_Fz = {v[2]:.3f} N')
# muscle groups
for name, group in mgroups.items(): for name, group in mgroups.items():
v=np.array( [0.0, 0.0, 0.0] ) v=np.array( [0.0, 0.0, 0.0] )
for tag in group.ntags: for tag in group.ntags:
...@@ -206,6 +213,46 @@ def solve(p={}): ...@@ -206,6 +213,46 @@ def solve(p={}):
print(f'\t{name}_Fy = {v[1]:.3f} N') print(f'\t{name}_Fy = {v[1]:.3f} N')
print(f'\t{name}_Fz = {v[2]:.3f} N') print(f'\t{name}_Fz = {v[2]:.3f} N')
# additional extractors
var2field = {
'dx': ('X', 'mm'),
'dy': ('Y', 'mm'),
'dz': ('Z', 'mm'),
'sigxx': ('smooth_stress_xx', 'MPa'),
'sigyy': ('smooth_stress_yy', 'MPa'),
'sigzz': ('smooth_stress_zz', 'MPa'),
'sigxy': ('smooth_stress_xy', 'MPa'),
'sigxz': ('smooth_stress_xz', 'MPa'),
'sigyz': ('smooth_stress_yz', 'MPa'),
'epsxx': ('strain_xx', ''),
'epsyy': ('strain_yy', ''),
'epszz': ('strain_zz', ''),
'epsxy': ('strain_xy', ''),
'epsxz': ('strain_xz', ''),
'epsyz': ('strain_yz', '')
}
for extr in p['extractors']:
# if only one variable is given, convert it to a list
if isinstance(extr['variables'], str):
extr['variables'] = [extr['variables']]
for var in extr['variables']:
fname = f'{extr["name"]}_{var}.tsv'
grpname = extr['name']
if var.lower() in var2field:
field = var2field[var.lower()][0]
units = var2field[var.lower()][1]
v = np.array(post.probe(field, grpname))
np.savetxt(fname, v, delimiter='\t', header='value')
if len(v) == 1:
print(f'\t{grpname}_{var} = {v[0]:.3f} {units}')
else:
print(f'\t{grpname}_{var} = ({len(v)} values in "{fname}")')
else:
print(f'unknown variable: "{var}"')
end_time = time.perf_counter() end_time = time.perf_counter()
elapsed_time = end_time - start_time elapsed_time = end_time - start_time
print(f'Total Execution time: {elapsed_time:.1f}s') print(f'Total Execution time: {elapsed_time:.1f}s')
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment