Hi,
I am trying to compute reaction forces, linear and nonlinear.
What is the right way to apply clamping ?
I tried both MECA and CINE and results are not the same.
Here is what I do :
import numpy as np
DEBUT(PAR_LOT = 'NON')
# read mesh
mesh = LIRE_MAILLAGE(FORMAT='MED',
UNITE=20)
# FE model
model = AFFE_MODELE(AFFE=_F(MODELISATION='3D',
PHENOMENE='MECANIQUE',
TOUT='OUI'),
MAILLAGE=mesh)
# define material
mater = DEFI_MATERIAU(ELAS=_F(E=210.0e9,
NU=0.3,
RHO=7850.0))
# apply mater to model
fieldmat = AFFE_MATERIAU(AFFE=_F(MATER=mater,
TOUT='OUI'),
MODELE=model)
# bc applied with mecha
bc_meca = AFFE_CHAR_MECA(MODELE=model,
DDL_IMPO=_F(
DX=0.0,
DY=0.0,
DZ=0.0,
# BLOCAGE = 'DEPLACEMENT',
GROUP_NO='fix')
)
# bc applied with cine
bc_cine = AFFE_CHAR_CINE(MODELE=model,
MECA_IMPO=_F(GROUP_NO = 'fix',
DX = 0.0,
DY = 0.0,
DZ = 0.0))
# assembling matrices
assemble_matrices = ASSEMBLAGE(CHAM_MATER=fieldmat,
# CHAR_CINE=bc_cine,
CHARGE=bc_meca,
MATR_ASSE=(_F(MATRICE=CO('M_MAT'),
OPTION='MASS_MECA'),
_F(MATRICE=CO('K_MAT'),
OPTION='RIGI_MECA')),
MODELE=model,
NUME_DDL=CO('nddl')
)
#######################################################
#### Dummy Fields #######
#######################################################
# initial dummy displacement
U = CREA_CHAMP(AFFE=_F(NOM_CMP=('DX', 'DY', 'DZ'),TOUT='OUI',VALE=(0.0, 0.0, 0.0)),
MAILLAGE=mesh,
OPERATION='AFFE',
TYPE_CHAM='NOEU_DEPL_R',
NUME_DDL = nddl)
# initial dummy stress
SIGP = CREA_CHAMP(AFFE=_F(NOM_CMP=('SIXX', 'SIYY', 'SIZZ', 'SIXY', 'SIYZ', 'SIXZ'),
TOUT='OUI',VALE=(0.0, 0.0, 0.0, 0.0, 0.0, 0.0)),
MODELE=model,
OPERATION='AFFE',
TYPE_CHAM='ELGA_SIEF_R')
# initial dummy stress variation
VARIP = CREA_CHAMP(AFFE=_F(NOM_CMP=('V1', ),TOUT='OUI',VALE=(0.0, )),
MODELE=model,
OPERATION='AFFE',
TYPE_CHAM='ELGA_VARI_R')
# dummy ramp function
RAMPE=DEFI_FONCTION(NOM_PARA='INST',
VALE=(0.0,0.0,1.0,1.0,),
PROL_DROITE='LINEAIRE',
PROL_GAUCHE='LINEAIRE',)
# dummy list function
LIST=DEFI_LIST_REEL(DEBUT=0.0,
INTERVALLE=_F(JUSQU_A=1.0,
NOMBRE=1,),)
# compute modes
modes = CALC_MODES(CALC_FREQ=_F(NMAX_FREQ=10),
MATR_MASS=M_MAT,
MATR_RIGI=K_MAT,
NORM_MODE = _F(NORME = 'MASS_GENE'),
OPTION = 'PLUS_PETITE',
TYPE_RESU = 'DYNAMIQUE',
VERI_MODE = _F(STOP_ERREUR = 'NON',
SEUIL = 1.E-5))
# extract modes
PHI = CREA_CHAMP(NOM_CHAM='DEPL',
NUME_MODE=1,
OPERATION='EXTR',
RESULTAT=modes,
TYPE_CHAM='NOEU_DEPL_R')
# create cham from 0.1*phi
DU = CREA_CHAMP(COMB=(_F(CHAM_GD=PHI, COEF_R=0.1)),
INFO=1,
OPERATION='COMB',
TYPE_CHAM='NOEU_DEPL_R')
## LINEAR
# matrix vector product
FL1 = PROD_MATR_CHAM(MATR_ASSE=K_MAT, CHAM_NO=DU)
fl1 = np.array(FL1.getValues())
# calcul
FL2_TABLE = CALCUL(CHAM_MATER=fieldmat,
COMPORTEMENT=_F(DEFORMATION='PETIT',RELATION='ELAS'),
DEPL=U,
# EXCIT=_F(CHARGE=bc_cine),
EXCIT=_F(CHARGE=bc_meca),
INCREMENT=_F(LIST_INST=LIST,NUME_ORDRE=1),
INCR_DEPL=DU,
INFO=1,
MODELE=model,
OPTION = ('COMPORTEMENT','FORC_INTE_ELEM','MATR_TANG_ELEM','FORC_NODA_ELEM'),
SIGM=SIGP,
VARI=VARIP)
FL2_EXTR = EXTR_TABLE(FILTRE=_F(NOM_PARA='NOM_OBJET', VALE_K='FORC_NODA_ELEM'),
NOM_PARA='NOM_SD',
TABLE=FL2_TABLE,
TYPE_RESU='VECT_ELEM_DEPL_R')
FL2 = ASSE_VECTEUR(NUME_DDL=nddl,VECT_ELEM=FL2_EXTR)
fl2 = np.array(FL2.getValues())
print('fl1')
print(fl1[:10])
print('')
print('fl2')
print(fl2[:10])
FIN(INFO_RESU='NON')