DEBUT(LANG='EN')
P = 1
MESH = LIRE_MAILLAGE(UNITE=2)
MODEL = AFFE_MODELE(AFFE=_F(MODELISATION='3D',
PHENOMENE='MECANIQUE',
TOUT='OUI'),
MAILLAGE=MESH)
steel = DEFI_MATERIAU(ELAS=_F(ALPHA=1.2e-05,
E=200000.0,
NU=0.3,
RHO=7.85e-09))
MATERIAL = AFFE_MATERIAU(AFFE=_F(MATER=(steel, ),
TOUT='OUI'),
MODELE=MODEL)
fce_load = DEFI_FONCTION(NOM_PARA='INST',
VALE=(0.0, 0.0, 1, 1))
timelist = DEFI_LIST_REEL(DEBUT=0.0,
INTERVALLE=_F(JUSQU_A=1.0,
NOMBRE=1))
TIMESTEP = DEFI_LIST_INST(DEFI_LIST=F(LIST_INST=timelist),
ECHEC=F(ACTION='DECOUPE',
EVENEMENT='ERREUR',
SUBD_NIVEAU=3,
SUBD_PAS=2),
METHODE='MANUEL')
import numpy as np
from scipy.interpolate import NearestNDInterpolator
import pandas as pd
import os
Load the data from the CSV file
inp = "/home/ASTER/press.csv"
df = pd.read_csv(inp)
density = 999 # kg/m3
scale = 1000 # convert m to mm
X = df['Points:0'] * scale
Y = df['Points:1'] * scale
Z = df['Points:2'] * scale
T = df['p'] * density * 1e-6 # Pa to MPa
interp = NearestNDInterpolator((X, Y, Z), T)
def Druck(x, y, z):
interp_value = interp(x, y, z)
return interp_value
formula = FORMULE(NOM_PARA=('X','Y','Z'), VALE='Druck(X,Y,Z)',Druck=Druck)
zero = DEFI_CONSTANTE(VALE=0.0)
check_p = AFFE_CHAR_MECA_F(FACE_IMPO=_F(DX=formula,
DY=formula,
DZ=formula,
GROUP_MA=('p', )),
MODELE=MODEL)
pressure = AFFE_CHAR_MECA_F(
MODELE=MODEL, PRES_REP=_F(GROUP_MA=('p', ), PRES=formula),INFO=2)
fix = AFFE_CHAR_MECA(DDL_IMPO=_F(DX=0.0,
DY=0.0,
DZ=0.0,
GROUP_MA=('fix', )),
MODELE=MODEL)
STA_NL = STAT_NON_LINE(CHAM_MATER=MATERIAL,
EXCIT=(_F(CHARGE=pressure),
F(CHARGE=fix)),
INCREMENT=F(LIST_INST=TIMESTEP),
METHODE='NEWTON',
MODELE=MODEL,
NEWTON=_F(MATRICE='TANGENTE',
PREDICTION='TANGENTE',
REAC_INCR=1,
REAC_ITER=1))
STA_NL = CALC_CHAMP(reuse=STA_NL,
CRITERES=( 'SIEQ_NOEU',),
RESULTAT=STA_NL)
STA_NL = CALC_PRESSION(reuse=STA_NL,
#GEOMETRIE='DEFORMEE',
GROUP_MA=('p', ),
MAILLAGE=MESH,
RESULTAT=STA_NL,
TOUT_ORDRE='OUI')
IMPR_RESU(RESU=_F(RESULTAT=STA_NL),
UNITE=3)
FIN()