AFFE_CHAR_CINE or AFFE_CHAR_MECA

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')