From 87e416b60b5fc206203e76c58833af4a1b0efca0 Mon Sep 17 00:00:00 2001 From: Romain Boman <romain.boman@gmail.com> Date: Thu, 8 Aug 2024 11:45:14 +0200 Subject: [PATCH] add sigvm extractor to cxxfem models --- cxxfem/src/femPost.cpp | 15 +++++++++++++++ models/Clidastes/Clidastes_propython_50k.py | 2 +- models/bonemodel.py | 2 ++ models/bonemodel2.py | 3 ++- models/dolicorhynchops/dolicorhynchops_10k.py | 12 ++++++++++++ 5 files changed, 32 insertions(+), 2 deletions(-) diff --git a/cxxfem/src/femPost.cpp b/cxxfem/src/femPost.cpp index 4b30ca3..395335a 100644 --- a/cxxfem/src/femPost.cpp +++ b/cxxfem/src/femPost.cpp @@ -399,6 +399,21 @@ Post::probe(std::string const &name, std::string const &grpname) // std::cout << "\tgot from gmsh: " << values << '\n'; // std::cout << "\tdistance = " << distance << std::endl; + if(values.size() == 9) // tensor -> compute j2 + { + // xx, xy, xz, yx, yy, yz, zx, zy, zz + // 0, 1, 2, 3, 4, 5, 6, 7, 8 + double xx = values[0]; + double yy = values[4]; + double zz = values[8]; + double xy = values[1]; + double zx = values[6]; + double yz = values[5]; + double j2 = sqrt( ((xx-yy)*(xx-yy) + (yy-zz)*(yy-zz) + (zz-xx)*(zz-xx) )/2 + 3*(xy*xy+yz*yz+zx*zx) ); + values.clear(); + values.push_back(j2); + } + all_values.insert(all_values.end(), values.begin(), values.end()); } diff --git a/models/Clidastes/Clidastes_propython_50k.py b/models/Clidastes/Clidastes_propython_50k.py index bfe6ccb..15b001f 100644 --- a/models/Clidastes/Clidastes_propython_50k.py +++ b/models/Clidastes/Clidastes_propython_50k.py @@ -7,7 +7,7 @@ def parms(d={}): p = {} import os path = os.path.join(os.path.dirname(__file__),'50k') - p['bone'] = f'{path}\Clidastes_50k.ply' + p['bone'] = f'{path}/Clidastes_50k.ply' p['fixations'] = [ { 'name': 'contact_pts', diff --git a/models/bonemodel.py b/models/bonemodel.py index a973806..6193e0b 100644 --- a/models/bonemodel.py +++ b/models/bonemodel.py @@ -318,6 +318,8 @@ def getMetafor(p={}): valuesmanager.add(idx, IFNodalValueExtractor(target, field), fname) else: raise Exception(f'Unknown variable: {var}') + # if the target is a single node, display the extractor [TSC-EXT] + # otherwise, the user should read the ascii file in the workspace. if target.getNumberOfMeshPoints() == 1: metafor.getTestSuiteChecker().checkExtractor(idx) idx+=1 diff --git a/models/bonemodel2.py b/models/bonemodel2.py index 8f2defb..e7397ba 100644 --- a/models/bonemodel2.py +++ b/models/bonemodel2.py @@ -230,7 +230,8 @@ def solve(p={}): 'epszz': ('smooth_strain_zz', ''), 'epsxy': ('smooth_strain_xy', ''), 'epsxz': ('smooth_strain_xz', ''), - 'epsyz': ('smooth_strain_yz', '') + 'epsyz': ('smooth_strain_yz', ''), + 'sigvm': ('smooth_stress_tensor', 'MPa') # post.probe computes sigvm } for extr in p['extractors']: diff --git a/models/dolicorhynchops/dolicorhynchops_10k.py b/models/dolicorhynchops/dolicorhynchops_10k.py index 99e195c..ac51fdf 100644 --- a/models/dolicorhynchops/dolicorhynchops_10k.py +++ b/models/dolicorhynchops/dolicorhynchops_10k.py @@ -42,6 +42,18 @@ def parms(d={}): 'direction': ['x', 'z'] } ] + p['extractors'] = [ + { + 'name': 'tooth1', + 'nodes': [-10.20362, -17.46838, -229.9061], + 'variables': [ 'sigvm' ] + }, + { + 'name': 'tooth2', + 'nodes': [-11.92466, 26.3042, -229.5354], + 'variables': [ 'sigxx', 'sigyy', 'sigzz', 'sigvm' ] + } + ] # material properties p['density'] = 1.850e-9 # [T/mm³] -- GitLab