Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
Clidastes_propython_50k.py 3.77 KiB
#! \usr\bin\env python3
# -*- coding: utf-8 -*-
#  Clidastes_propython (Della Giustina Francesco)


def parms(d={}):
    p = {}
    import os
    path = os.path.join(os.path.dirname(__file__),'50k')
    p['bone'] = f'{path}/Clidastes_50k.ply'
    p['fixations'] = [
        {
            'name': 'contact_pts',
            'nodes': [[4.318714, -102.023384, -36.709614],
                        [-4.908366, -101.943626, -35.218159]],
            'direction': 'z'
        },
        {
            'name': 'axis_pt1',
            'nodes': [43.380798, 200.395569, 33.000271],
            'direction': ['x', 'y', 'z']
        },
        {
            'name': 'axis_pt2',
            'nodes': [-47.555614, 202.980087, 34.424416],
            'direction': ['x', 'y', 'z']
        }
    ]
    p['muscles'] = [
        {
            'file': f'{path}/M_AE_L1.ply',
            'force': 101.61,
            'focalpt': [49.04, 168.55, 75.00],
            'method': 'T+N'
    },
    {
            'file': f'{path}/M_AE_L2.ply',
            'force': 101.61,
            'focalpt': [49.04, 168.55, 75.00],
            'method': 'T+N'
    },
    {
            'file': f'{path}/M_AE_R1.ply',
            'force': 102.08,
            'focalpt': [-46.34, 171.53, 75.98],
            'method': 'T+N'
    },
    {
            'file': f'{path}/M_AE_R2.ply',
            'force': 102.08,
            'focalpt': [-46.34, 171.53, 75.98],
            'method': 'T+N'
    },
    {
            'file': f'{path}/M_AEM_L.ply',
            'force': 94.27,
            'focalpt': [43.98, 169.28, 75.45],
            'method': 'T+N'
    },
    {
            'file': f'{path}/M_AEM_R.ply',
            'force': 91.51,
            'focalpt': [-42.81, 170.33, 75.71],
            'method': 'T+N'
    },
    {
            'file': f'{path}/M_AMP_L.ply',
            'force': 69.87,
            'focalpt': [41.02, 191.67, 59.93],
            'method': 'T+N'
    },
    {
            'file': f'{path}/M_AMP_R.ply',
            'force': 73.41,
            'focalpt': [-45.30, 190.73, 59.59],
            'method': 'T+N'
    },
    {
            'file': f'{path}/M_PTP_L.ply',
            'force': 302.16,
            'focalpt': [16.62, 177.37, 74.19],
            'method': 'T+N'
    },
    {
            'file': f'{path}/M_PTP_R.ply',
            'force': 309.46,
            'focalpt': [-16.62, 177.37, 74.19],
            'method': 'T+N'
    },
    {
            'file': f'{path}/M_PTS_L.ply',
            'force': 47.11,
            'focalpt': [17.75, 154.80, 68.71],
            'method': 'T+N'
    },
    {
            'file': f'{path}/M_PTS_R.ply',
            'force': 49.44,
            'focalpt': [-11.99, 156.87, 69.87],
            'method': 'T+N'
        }
    ]
    p['extractors'] = [
        {
            'name': 'Point_1_L',
            'nodes': [9.737800, -107.443642, -41.476234],
            'variables': [ 'x0', 'y0', 'z0', 'sigvm' ]
        },
        {
            'name': 'Point_2_L',
            'nodes': [18.720367, -42.742260, -36.978378],
            'variables': 'sigvm'
        },
        {
            'name': 'Point_3_and_4_L',
            'nodes': [[33.984665, 40.152878, -24.569260], 
                      [43.314785, 99.891335, -16.491674]],
            'variables': 'sigzz'
        },
        {
            'name': 'Point_5_L',
            'nodes': f'{path}/Point_5_L.off',
            'variables': [ 'sigvm', 'dx', 'dy', 'dz' ]
        }
    ]

    # material properties
    p['density'] = 1.662e-9  # [T\mm³]
    p['Young'] = 18000.      # [MPa]
    p['Poisson'] = 0.3       # [-]

    p['dt0'] = 0.3       # [s]
    p['tolNR'] = 1e-3    # [-]

    p.update(d)
    return p


def getMetafor(p={}):
    import bonemodel as model
    return model.getMetafor(parms(p))


if __name__ == "__main__":
    import models.bonemodel2 as model
    model.solve(parms())