# SSNV112L (uses mesh from SSNV112B)

DEBUT(LANG = 'EN')

# Read mesh
mesh = LIRE_MAILLAGE(FORMAT = 'MED',
                     UNITE = 20)

# Define node groups
mesh = DEFI_GROUP(reuse = mesh,
                  MAILLAGE = mesh,
                  CREA_GROUP_NO = (_F(GROUP_MA = 'A',
                                      NOM = 'A'),
                                   _F(GROUP_MA = 'F',
                                      NOM = 'F'),
                                   _F(NOM = 'N48',
                                      OPTION = 'ENV_SPHERE',
                                      POINT = (9.93712209893243E-02,  1.11964476103304E-02,  0.00000000000000E+00),
                                      RAYON = 0.002,
                                      PRECISION = 0.001),
                                   _F(NOM = 'N84',
                                      OPTION = 'ENV_SPHERE',
                                      POINT = (9.93712209893243E-02,  1.11964476103307E-02,  1.00000000000000E-02),
                                      RAYON = 0.002,
                                      PRECISION = 0.001),
                                   _F(NOM = 'N362',
                                      OPTION = 'ENV_SPHERE',
                                      POINT = (1.03360166268687E-01,  5.80458243110394E-03,  5.00000000000017E-03),
                                      RAYON = 0.002,
                                      PRECISION = 0.001)))

# Define element groups
mesh = DEFI_GROUP(reuse = mesh,
                  MAILLAGE = mesh,
                  CREA_GROUP_MA = (_F(NOM = 'M1',
                                      TYPE_MAILLE = '3D',
                                      OPTION = 'SPHERE',
                                      GROUP_NO_CENTRE = 'A',
                                      RAYON = 0.005),
                                   _F(NOM = 'M2',
                                      TYPE_MAILLE = '3D',
                                      OPTION = 'SPHERE',
                                      GROUP_NO_CENTRE = 'N48',
                                      RAYON = 0.005),
                                   _F(NOM = 'M3',
                                      TYPE_MAILLE = '3D',
                                      OPTION = 'SPHERE',
                                      GROUP_NO_CENTRE = 'N84',
                                      RAYON = 0.005),
                                   _F(NOM = 'M4',
                                      TYPE_MAILLE = '3D',
                                      OPTION = 'SPHERE',
                                      GROUP_NO_CENTRE = 'N362',
                                      RAYON = 0.005)))

# Define element group from intersection
mesh = DEFI_GROUP(reuse = mesh,
                  MAILLAGE = mesh,
                  CREA_GROUP_MA = (_F(NOM = 'M537',
                                      INTERSEC = ('M1', 'M2', 'M3', 'M4'))))

# Change normal orientation
mesh = MODI_MAILLAGE(reuse = mesh,
                     MAILLAGE = mesh,
                     ORIE_PEAU_3D = _F(GROUP_MA = ('FACEEF','FACEAE','FACEAB','FACSUP','FACINF')))

# Assign model
model = AFFE_MODELE(MAILLAGE = mesh,
                    AFFE = _F(GROUP_MA = ('VOLUME','FACEEF','FACEAE'),
                              PHENOMENE = 'MECANIQUE',
                              MODELISATION = '3D_INCO_UP'))

# Define material
inco_mat = DEFI_MATERIAU(ELAS = _F(E = 200000.,
                                   NU = 0.49999,
                                   ALPHA = 0.),
                         ECRO_LINE = _F(D_SIGM_EPSI = 0.,
                                        SY = 1.E10))

# Assign material
mater = AFFE_MATERIAU(MAILLAGE = mesh,
                      AFFE = _F(TOUT = 'OUI',
                                MATER = inco_mat))

# Define BCs
bcs = AFFE_CHAR_MECA(MODELE = model,
                     DDL_IMPO = (_F(GROUP_MA = 'FACEAB',
                                    DY = 0.),
                                 _F(GROUP_MA = 'FACSUP',
                                    DZ = 0.),
                                 _F(GROUP_MA = 'FACINF',
                                    DZ = 0.)),
                     FACE_IMPO = (_F(GROUP_MA = 'FACEEF',
                                     DNOR = 0.),
                                  _F(GROUP_MA = 'FACEAE',
                                     DNOR = -6.E-5)))


# Set up list of times
l_vals = DEFI_LIST_REEL(DEBUT = 0.,
                        INTERVALLE = _F(JUSQU_A = 1.,
                                        NOMBRE = 1))

# Define ramp function
ramp = DEFI_FONCTION(NOM_PARA = 'INST',
                     VALE = (0.,0.,
                             1.,1.))

# Set up time stepping
l_times = DEFI_LIST_INST(DEFI_LIST = _F(LIST_INST = l_vals))

# Run
result = STAT_NON_LINE(MODELE = model,
                       CHAM_MATER = mater,
                       EXCIT = _F(CHARGE = bcs,
                                FONC_MULT = ramp),
                       COMPORTEMENT = _F(RELATION = 'VMIS_ISOT_LINE',
                                         DEFORMATION='GDEF_LOG'),
                       INCREMENT = _F(LIST_INST = l_times),
                       NEWTON = _F(REAC_ITER = 1),
                       CONVERGENCE = _F(SIGM_REFE = 60.0,
                                        EPSI_REFE = 3.E-4,
                                        RESI_REFE_RELA = 1.E-3),
                       SOLVEUR = _F(METHODE = 'MUMPS',
                                    NPREC = -1))

# Compute stresses
result = CALC_CHAMP(reuse = result,
                    RESULTAT = result,
                    CRITERES = ('SIEQ_ELNO', 'SIEQ_NOEU'),
                    CONTRAINTE = ('SIGM_ELNO', 'SIGM_NOEU'))

# Compute strains
result = CALC_CHAMP(reuse = result,
                    RESULTAT = result,
                    DEFORMATION = ('EPSL_NOEU'))

# Compute error estimate
result = CALC_ERREUR(reuse = result,
                     RESULTAT = result,
                     OPTION = ('ERME_ELEM','ERME_ELNO'))

# Save results
IMPR_RESU(FORMAT = 'MED',
          UNITE = 80,
          RESU = _F(RESULTAT = result))


#--------------------------------------------------------------
# Verification

# Displacements
TEST_RESU(RESU = (_F(GROUP_NO = 'A',
                     INST = 1.0,
                     REFERENCE = 'ANALYTIQUE',
                     RESULTAT = result,
                     NOM_CHAM = 'DEPL',
                     NOM_CMP = 'DY',
                     VALE_CALC = 0.0E+00,
                     VALE_REFE = 0.0,
                     CRITERE = 'ABSOLU'),
                  _F(GROUP_NO = 'A',
                     INST = 1.0,
                     REFERENCE = 'ANALYTIQUE',
                     RESULTAT = result,
                     NOM_CHAM = 'DEPL',
                     NOM_CMP = 'DX',
                     VALE_CALC = 6.0094539827568E-05,
                     VALE_REFE = 6.E-05,
                     CRITERE = 'RELATIF',
                     PRECISION = 2.E-3),
                  _F(GROUP_NO = 'F',
                     INST = 1.0,
                     REFERENCE = 'ANALYTIQUE',
                     RESULTAT = result,
                     NOM_CHAM = 'DEPL',
                     NOM_CMP = 'DY',
                     VALE_CALC = 2.1197556491378E-05,
                     VALE_REFE = 2.1217941E-05,
                     CRITERE = 'RELATIF',
                     PRECISION = 1.E-3),
                  _F(GROUP_NO = 'F',
                     INST = 1.0,
                     REFERENCE = 'ANALYTIQUE',
                     RESULTAT = result,
                     NOM_CHAM = 'DEPL',
                     NOM_CMP = 'DX',
                     VALE_CALC = 2.1197556491378E-05,
                     VALE_REFE = 2.1217941E-05,
                     CRITERE = 'RELATIF',
                     PRECISION = 1.E-3)))

# Strains
TEST_RESU(RESU = (_F(NUME_ORDRE = 1,
                     GROUP_NO = 'A',
                     REFERENCE = 'ANALYTIQUE',
                     RESULTAT = result,
                     NOM_CHAM = 'EPSL_NOEU',
                     NOM_CMP = 'EPXX',
                     VALE_CALC = -0.000601875797515,
                     VALE_REFE = -0.0005994604316761909,
                     CRITERE = 'RELATIF',
                     PRECISION = 5.E-3),
                  _F(NUME_ORDRE = 1,
                     GROUP_NO = 'A',
                     REFERENCE = 'ANALYTIQUE',
                     RESULTAT = result,
                     NOM_CHAM = 'EPSL_NOEU',
                     NOM_CMP = 'EPYY',
                     VALE_CALC = 0.000594644124527,
                     VALE_REFE = 0.0006001799999999502,
                     CRITERE = 'RELATIF',
                     PRECISION = 1.E-2),
                  _F(NUME_ORDRE = 1,
                     GROUP_NO = 'A',
                     REFERENCE = 'ANALYTIQUE',
                     RESULTAT = result,
                     NOM_CHAM = 'EPSL_NOEU',
                     NOM_CMP = 'EPZZ',
                     VALE_CALC = 6.92584026841E-07,
                     VALE_REFE = 0.0,
                     CRITERE = 'ABSOLU',
                     PRECISION = 5.E-3),
                  _F(NUME_ORDRE = 1,
                     GROUP_NO = 'A',
                     REFERENCE = 'ANALYTIQUE',
                     RESULTAT = result,
                     NOM_CHAM = 'EPSL_NOEU',
                     NOM_CMP = 'EPXY',
                     VALE_CALC = -2.06659214482E-05,
                     VALE_REFE = 0.0,
                     CRITERE = 'ABSOLU',
                     PRECISION = 3.E-2),
                  _F(NUME_ORDRE = 1,
                     GROUP_NO = 'F',
                     REFERENCE = 'ANALYTIQUE',
                     RESULTAT = result,
                     NOM_CHAM = 'EPSL_NOEU',
                     NOM_CMP = 'EPXX',
                     VALE_CALC = -3.16616085397E-07,
                     VALE_REFE = 2.250674796533403e-08,
                     CRITERE = 'ABSOLU',
                     PRECISION = 2.E-3),
                  _F(NUME_ORDRE = 1,
                     GROUP_NO = 'F',
                     REFERENCE = 'ANALYTIQUE',
                     RESULTAT = result,
                     NOM_CHAM = 'EPSL_NOEU',
                     NOM_CMP = 'EPYY',
                     VALE_CALC = -6.26231651455E-07,
                     VALE_REFE = 2.250674796533403e-08,
                     CRITERE = 'ABSOLU',
                     PRECISION = 2.E-3),
                  _F(NUME_ORDRE = 1,
                     GROUP_NO = 'F',
                     REFERENCE = 'ANALYTIQUE',
                     RESULTAT = result,
                     NOM_CHAM = 'EPSL_NOEU',
                     NOM_CMP = 'EPZZ',
                     VALE_CALC = 3.12812740484E-07,
                     VALE_REFE = 0.0,
                     CRITERE = 'ABSOLU',
                     PRECISION = 2.5E-3),
                  _F(NUME_ORDRE = 1,
                     GROUP_NO = 'F',
                     REFERENCE = 'ANALYTIQUE',
                     RESULTAT = result,
                     NOM_CHAM = 'EPSL_NOEU',
                     NOM_CMP = 'EPXY',
                     VALE_CALC = -0.000149226519473,
                     VALE_REFE = -0.0001500224932519667,
                     CRITERE = 'RELATIF',
                     PRECISION = 6.E-3)))
  
# Stresses
TEST_RESU(RESU = (_F(NUME_ORDRE = 1,
                     GROUP_NO = 'A',
                     REFERENCE = 'ANALYTIQUE',
                     RESULTAT = result,
                     NOM_CHAM = 'SIGM_NOEU',
                     NOM_CMP = 'SIYY',
                     VALE_CALC = 98.62324310315,
                     VALE_REFE = 99.9566,
                     CRITERE = 'RELATIF',
                     PRECISION = 0.02),
                  _F(NUME_ORDRE = 1,
                     GROUP_NO = 'A',
                     REFERENCE = 'ANALYTIQUE',
                     RESULTAT = result,
                     NOM_CHAM = 'SIGM_NOEU',
                     NOM_CMP = 'SIXX',
                     VALE_CALC = -60.914207914005,
                     VALE_REFE = -59.9955,
                     CRITERE = 'RELATIF',
                     PRECISION = 0.02),
                  _F(NUME_ORDRE = 1,
                     GROUP_NO = 'A',
                     REFERENCE = 'ANALYTIQUE',
                     RESULTAT = result,
                     NOM_CHAM = 'SIGM_NOEU',
                     NOM_CMP = 'SIZZ',
                     VALE_CALC = 19.428975515274,
                     VALE_REFE = 19.9326,
                     CRITERE = 'RELATIF',
                     PRECISION = 0.03),
                  _F(NUME_ORDRE = 1,
                     GROUP_NO = 'A',
                     REFERENCE = 'ANALYTIQUE',
                     RESULTAT = result,
                     NOM_CHAM = 'SIGM_NOEU',
                     NOM_CMP = 'SIXY',
                     VALE_CALC = -2.759603216176,
                     VALE_REFE = 0.0,
                     CRITERE = 'ABSOLU',
                     PRECISION = 3.0),
                  _F(NUME_ORDRE = 1,
                     GROUP_NO = 'F',
                     REFERENCE = 'ANALYTIQUE',
                     RESULTAT = result,
                     NOM_CHAM = 'SIGM_NOEU',
                     NOM_CMP = 'SIXX',
                     VALE_CALC = 19.946852256401,
                     VALE_REFE = 20.003,
                     CRITERE = 'RELATIF',
                     PRECISION = 3.E-3),
                  _F(NUME_ORDRE = 1,
                     GROUP_NO = 'F',
                     REFERENCE = 'ANALYTIQUE',
                     RESULTAT = result,
                     NOM_CHAM = 'SIGM_NOEU',
                     NOM_CMP = 'SIYY',
                     VALE_CALC = 19.905532099373,
                     VALE_REFE = 20.003,
                     CRITERE = 'RELATIF',
                     PRECISION = 5.E-3),
                  _F(NUME_ORDRE = 1,
                     GROUP_NO = 'F',
                     REFERENCE = 'ANALYTIQUE',
                     RESULTAT = result,
                     NOM_CHAM = 'SIGM_NOEU',
                     NOM_CMP = 'SIZZ',
                     VALE_CALC = 20.03075773209,
                     VALE_REFE = 20.003,
                     CRITERE = 'RELATIF',
                     PRECISION = 2.E-3),
                  _F(NUME_ORDRE = 1,
                     GROUP_NO = 'F',
                     REFERENCE = 'ANALYTIQUE',
                     RESULTAT = result,
                     NOM_CHAM = 'SIGM_NOEU',
                     NOM_CMP = 'SIXY',
                     VALE_CALC = -19.897015086153,
                     VALE_REFE = -20.003,
                     CRITERE = 'RELATIF',
                     PRECISION = 1.E-2)))
  
# Equivalent stresses
TEST_RESU(RESU = (_F(GROUP_NO = 'A',
                     INST = 1.0,
                     REFERENCE = 'ANALYTIQUE',
                     RESULTAT = result,
                     NOM_CHAM = 'SIEQ_NOEU',
                     NOM_CMP = 'VMIS',
                     VALE_CALC = 138.26656386354,
                     VALE_REFE = 138.52260000000001,
                     CRITERE = 'RELATIF',
                     PRECISION = 2.E-3,
                     GROUP_MA = 'M1'),
                  _F(GROUP_NO = 'A',
                     INST = 1.0,
                     REFERENCE = 'ANALYTIQUE',
                     RESULTAT = result,
                     NOM_CHAM = 'SIEQ_NOEU',
                     NOM_CMP = 'TRESCA',
                     VALE_CALC = 159.65144212962,
                     VALE_REFE = 159.9521,
                     CRITERE = 'RELATIF',
                     PRECISION = 2.E-3,
                     GROUP_MA = 'M1'),
                  _F(GROUP_NO = 'A',
                     INST = 1.0,
                     REFERENCE = 'ANALYTIQUE',
                     RESULTAT = result,
                     NOM_CHAM = 'SIEQ_NOEU',
                     NOM_CMP = 'PRIN_1',
                     VALE_CALC = -60.969943062956,
                     VALE_REFE = -59.9955,
                     CRITERE = 'RELATIF',
                     PRECISION = 2.E-2,
                     GROUP_MA = 'M1'),
                  _F(GROUP_NO = 'A',
                     INST = 1.0,
                     REFERENCE = 'ANALYTIQUE',
                     RESULTAT = result,
                     NOM_CHAM = 'SIEQ_NOEU',
                     NOM_CMP = 'PRIN_2',
                     VALE_CALC = 19.426454700711,
                     VALE_REFE = 19.9326,
                     CRITERE = 'RELATIF',
                     PRECISION = 3.E-2,
                     GROUP_MA = 'M1'),
                  _F(GROUP_NO = 'A',
                     INST = 1.0,
                     REFERENCE = 'ANALYTIQUE',
                     RESULTAT = result,
                     NOM_CHAM = 'SIEQ_NOEU',
                     NOM_CMP = 'PRIN_3',
                     VALE_CALC = 98.681499066663,
                     VALE_REFE = 99.9566,
                     CRITERE = 'RELATIF',
                     PRECISION = 1.5E-2,
                     GROUP_MA = 'M1'),
                  _F(GROUP_NO = 'A',
                     INST = 1.0,
                     REFERENCE = 'ANALYTIQUE',
                     RESULTAT = result,
                     NOM_CHAM = 'SIEQ_NOEU',
                     NOM_CMP = 'VMIS_SG',
                     VALE_CALC = 138.26656386354,
                     VALE_REFE = 138.52260000000001,
                     CRITERE = 'RELATIF',
                     PRECISION = 2.E-3,
                     GROUP_MA = 'M1')))
  
# Error estimates
TEST_RESU(RESU = _F(INST = 1.0,
                    POINT = 1,
                    RESULTAT = result,
                    NOM_CHAM = 'ERME_ELEM',
                    NOM_CMP = 'NUEST',
                    VALE_CALC = 1.4249235683863,
                    CRITERE = 'RELATIF',
                    GROUP_MA = 'M537'))
  
TEST_RESU(RESU = _F(GROUP_NO = 'A',
                    INST = 1.0,
                    RESULTAT = result,
                    NOM_CHAM = 'ERME_ELNO',
                    NOM_CMP = 'ERREST',
                    VALE_CALC = 4.3238541664061E-04,
                    CRITERE = 'RELATIF',
                    GROUP_MA = 'M537'))
  
# End
FIN()