Télécharger modeli.eso

Retour à la liste

Numérotation des lignes :

modeli
  1. C MODELI SOURCE MB234859 26/07/24 21:15:04 12606
  2. C----------------------------------------------------------------------C
  3. C OPERATEUR MODELE C
  4. C C
  5. C Creation d'un objet MODELE C
  6. C C
  7. C Syntaxe : MOD1 = MODL GEO1 TYPE_CAL TYPE_MAT ( TYPE_ELE ) ; C
  8. C C
  9. C GEO1 MAILLAGE de base C
  10. C TYPE_CAL MOT(S) pour definir la FORMULATION C
  11. C TYPE_MAT MOT(S) pour definir le MATERIAU C
  12. C TYPE_ELE MOT(S) pour definir les ELEMENTS FINIS a utiliser C
  13. C MOD1 Resultat de type MODELE C
  14. C----------------------------------------------------------------------C
  15. C PPU : Modif pour les materiaux unidirectionels en plasticite
  16.  
  17. SUBROUTINE MODELI
  18.  
  19. IMPLICIT INTEGER(I-N)
  20. IMPLICIT REAL*8(A-H,O-Z)
  21.  
  22. -INC PPARAM
  23. -INC CCOPTIO
  24. -INC CCHAMP
  25. -INC CCGEOME
  26. C==DEB= FORMULATION HHO == Include specifique ==========================
  27. -INC CCHHOPA
  28. C==FIN= FORMULATION HHO ================================================
  29. -INC SMCOORD
  30. -INC SMELEME
  31. -INC SMMODEL
  32. POINTEUR IMODE3.IMODEL,IMODE4.IMODEL,IMODE5.IMODEL
  33. POINTEUR nomid1.NOMID,nomid2.NOMID
  34. -INC SMTABLE
  35. -INC SMLMOTS
  36. POINTEUR OPNLIN.MLMOTS
  37.  
  38. SEGMENT PLICON
  39. integer mlicon(NLCON),tlicon(NLCON)
  40. ENDSEGMENT
  41.  
  42. EXTERNAL LONG
  43. PARAMETER (NBFORM=19,NBCON=15,NBEXT=1,NBDIF=1)
  44. PARAMETER (N1MAX=300,N2MAX=200)
  45. PARAMETER (NLOMAX=5,NGELT=14)
  46.  
  47. DIMENSION LESMOD(N1MAX)
  48. CHARACTER*4 MOTEF(N2MAX),LESTEF(N2MAX)
  49. CHARACTER*4 MOCON(NBCON),MOEXT(NBEXT),MOINCO(NBDIF),MNLVAR(1)
  50. CHARACTER*4 MNLOCA(NLOMAX),MCTCT(4),MGAUSS(4),MOGELT(NGELT),MDISC
  51. CHARACTER*8 TAPIND,TYPOBJ,CHARIN,CHARRE,CMATE,PHAM
  52. CHARACTER*(LCONMO) CONM
  53. CHARACTER*(LOCOMP) MOPRID,MDIINC,MDIDUA
  54. CHARACTER*16 MOFORM(NBFORM),LESFOR(2),MOPROP(N1MAX),LESPRO(N1MAX)
  55. CHARACTER*16 MOTROP(3),MOTPRO
  56. CHARACTER*(LOCHAI) LMOLIB,LMOFCT
  57.  
  58. LOGICAL LOGRE,LOGIN,LMENLX,LMEVIX,LOSTAT,LOMELA,LMOEXT,LOBBAR
  59. LOGICAL LONAVI
  60.  
  61. C=DEB==== FORMULATION HHO ==== Declarations particulieres ==============
  62. PARAMETER (NMHHO=2)
  63. CHARACTER*4 mcHHO(NMHHO)
  64. CHARACTER*(LOCHAI) chaHHO
  65. LOGICAL loHHO
  66. DATA mcHHO / 'HHO_','HHO ' /
  67. C=FIN==== FORMULATION HHO ==============================================
  68. DATA MGAUSS /'EPAI' , 'RIGI' , 'MASS' ,'CONT'/
  69. c DATA MDERIV/'LINEAIRE ','QUADRATIQUE ',
  70. c & 'TRUESDELL ','JAUMANN ',
  71. c & 'UTILISATEUR ','FEFP '/
  72. C----------------------------------------------------------------------C
  73. C DEFINITION DES NOMS DE FORMULATIONS C
  74. C----------------------------------------------------------------------C
  75. DATA MOFORM /
  76. & 'THERMIQUE ','MECANIQUE ','LIQUIDE ',
  77. & 'POREUX ','DARCY ','CONTACT ',
  78. & 'MAGNETODYNAMIQUE','NAVIER_STOKES ','MELANGE ',
  79. & 'EULER ','FISSURE ','LIAISON ',
  80. & 'THERMOHYDRIQUE ','ELECTROSTATIQUE ','DIFFUSION ',
  81. & 'CHARGEMENT ','METALLURGIE ','CHANGEMENT_PHASE',
  82. & 'CONTRAINTE ' /
  83.  
  84. C (fdp) Ajout d'un nouveau mot clef 'LIBRE' ou 'LIE' pour les JOI1
  85. DATA MOCON / 'CONS','INTE','DPGE','PHAS','STAT','LCOI','LCOS',
  86. & 'LIBR','LIE ','NON_','LINE','CHPO','GAP7','COMP',
  87. & 'EPSI'/
  88. DATA MOEXT / 'PARA' /
  89. DATA MOINCO / 'INCO' /
  90. DATA MNLVAR / 'V_MO' /
  91. DATA MCTCT / 'MESC','FAIB','SYME','MORT' /
  92. DATA MOGELT / 'BBAR',
  93. & 'QUAF','LINE','MACR','LINB',
  94. & 'LICE','LIMS','LBMS','MCCE','MCP1','MCMS',
  95. & 'QFCE','QFP1','QFMS' /
  96.  
  97. LCVAR = 0
  98. LCMAT = 0
  99. LCMAF = 0
  100. LCPAR = 0
  101. LDERI = 0
  102. NBGA = 10
  103. NBDANG = 3
  104. ICAVIT = 0
  105. ISYME = 0
  106. IFACAF = 0
  107. INLOC = 0
  108. LULVIA = 0
  109. C=DEB==== FORMULATION HHO ==== Initialisations particulieres ===========
  110. loHHO = .FALSE.
  111. C=FIN==== FORMULATION HHO ==============================================
  112. LMEVIX = .FALSE.
  113. LMENLX = .FALSE.
  114. LMOEXT = .FALSE.
  115. LOBBAR = .FALSE.
  116. LONAVI = .FALSE.
  117. ICONV = 0
  118. IRAYE = 0
  119. IPHAS = 0
  120. IPMMEL = 0
  121. JLMOT1 = 0
  122. JLMOT2 = 0
  123. mmode2 = 0
  124. IPTABL = 0
  125. IPTABS = 0
  126. IPTABM = 0
  127. IPTBMO = 0
  128. IPTBDM = 0
  129. IPTMOD = 0
  130. IPGEOM = 0
  131. IPGEO2 = 0
  132. C ==================================================================
  133. C 0- Acquisition des tables ou maillage
  134. C ==================================================================
  135. C Lecture d'une table BASE_MODALE
  136. CALL LIRTAB('BASE_MODALE',IPTABL,0,IRET)
  137. IF (IERR.NE.0) RETURN
  138. IF (IRET.GT.0) THEN
  139. IPTBMO=IPTABL
  140. IVALIN=0
  141. XVALIN=REAL(0.D0)
  142. LOGIN=.TRUE.
  143. IOBIN=0
  144. TAPIND='MOT '
  145. CHARIN='MODES'
  146. TYPOBJ='TABLE '
  147. CALL ACCTAB(IPTBMO,TAPIND,IVALIN,XVALIN,CHARIN,LOGIN,IOBIN,
  148. & TYPOBJ,IVALRE,XVALRE,CHARRE,LOGRE,IOBRE)
  149. IF (IERR.NE.0) RETURN
  150. IPTBDM = IOBRE
  151. IVALIN=0
  152. XVALIN=REAL(0.D0)
  153. LOGIN=.TRUE.
  154. IOBIN=0
  155. TAPIND='MOT '
  156. CHARIN='MAILLAGE'
  157. TYPOBJ='MAILLAGE'
  158. CALL ACCTAB(IPTBDM,TAPIND,IVALIN,XVALIN,CHARIN,LOGIN,IOBIN,
  159. & TYPOBJ,IVALRE,XVALRE,CHARRE,LOGRE,IOBRE)
  160. IF (IERR.NE.0) RETURN
  161. IPMAIL = IOBRE
  162. IVALIN=1
  163. XVALIN=REAL(0.D0)
  164. LOGIN=.TRUE.
  165. IOBIN=0
  166. TAPIND='ENTIER '
  167. CHARIN=' '
  168. TYPOBJ='TABLE'
  169. CALL ACCTAB(IPTBDM,TAPIND,IVALIN,XVALIN,CHARIN,LOGIN,IOBIN,
  170. & TYPOBJ,IVALRE,XVALRE,CHARRE,LOGRE,IOBRE)
  171. IF (IERR.NE.0) RETURN
  172.  
  173. IPTMOD = IOBRE
  174. IVALIN=0
  175. XVALIN=REAL(0.D0)
  176. LOGIN=.TRUE.
  177. IOBIN=0
  178. TAPIND='MOT '
  179. TYPOBJ='POINT'
  180. CALL ACCTAB(IPTMOD,TAPIND,IVALIN,XVALIN,'POINT_REPERE',LOGIN,
  181. & IOBIN,TYPOBJ,IVALRE,XVALRE,CHARRE,LOGRE,IOBRE)
  182. IF (IERR.NE.0) RETURN
  183. NBNN = 1
  184. NBELEM = 1
  185. NBSOUS = 0
  186. NBREF = 0
  187. SEGINI IPT8
  188. IPT8.ITYPEL = 1
  189. IPT8.NUM(1,1) = IOBRE
  190. IPGEOM = IPT8
  191. IRET = 0
  192. ENDIF
  193. C
  194. C Lecture d'une table STATIONNAIRE
  195. CALL LIRTAB('STATIONNAIRE',IPTABL,0,IRET)
  196. IF (IERR.NE.0) RETURN
  197. IF (IRET.GT.0) THEN
  198. IPTABS=IPTABL
  199. IVALIN=0
  200. XVALIN=REAL(0.D0)
  201. LOGIN=.TRUE.
  202. IOBIN=0
  203. TAPIND='MOT '
  204. CHARIN='MAILLAGE'
  205. TYPOBJ='TABLE '
  206. CALL ACCTAB(IPTABS,TAPIND,IVALIN,XVALIN,CHARIN,LOGIN,IOBIN,
  207. & TYPOBJ,IVALRE,XVALRE,CHARRE,LOGRE,IOBRE)
  208. IF (IERR.NE.0) RETURN
  209. IPTABM = IOBRE
  210. IVALIN=1
  211. XVALIN=REAL(0.D0)
  212. LOGIN=.TRUE.
  213. IOBIN=0
  214. TAPIND='ENTIER '
  215. CHARIN=' '
  216. TYPOBJ='MAILLAGE'
  217. CALL ACCTAB(IPTABM,TAPIND,IVALIN,XVALIN,CHARIN,LOGIN,IOBIN,
  218. & TYPOBJ,IVALRE,XVALRE,CHARRE,LOGRE,IOBRE)
  219. IF (IERR.NE.0) RETURN
  220. IPGEOM = IOBRE
  221. IRET = 0
  222. ENDIF
  223. C
  224. C Lecture d'une TABLE de sous-type MAILLAGE
  225. IF (IPTABM.EQ.0) THEN
  226. CALL LIRTAB('MAILLAGE',IPTABL,0,IRET)
  227. IF (IERR.NE.0) RETURN
  228. IF (IRET.GT.0) THEN
  229. IPTABM = IPTABL
  230. IVALIN=1
  231. XVALIN=REAL(0.D0)
  232. LOGIN=.TRUE.
  233. IOBIN=0
  234. TAPIND='ENTIER '
  235. CHARIN=' '
  236. TYPOBJ='MAILLAGE'
  237. CALL ACCTAB(IPTABM,TAPIND,IVALIN,XVALIN,CHARIN,LOGIN,IOBIN,
  238. & TYPOBJ,IVALRE,XVALRE,CHARRE,LOGRE,IOBRE)
  239. IF (IERR.NE.0) RETURN
  240. IPGEOM = IOBRE
  241. IRET = 0
  242. ENDIF
  243. ENDIF
  244. C
  245. C Lecture d'un MAILLAGE ou d'une TABLE de sous-type DOMAINE
  246. CALL LIRTAB('DOMAINE',IPTABL,0,IRET)
  247. IF (IERR.NE.0) RETURN
  248. IF (IPTABL.GT.0) THEN
  249. IVALIN=0
  250. XVALIN=REAL(0.D0)
  251. LOGIN=.TRUE.
  252. IOBIN=0
  253. TAPIND='MOT '
  254. CHARIN='MAILLAGE'
  255. TYPOBJ='MAILLAGE'
  256. CALL ACCTAB(IPTABL,TAPIND,IVALIN,XVALIN,CHARIN,LOGIN,IOBIN,
  257. & TYPOBJ,IVALRE,XVALRE,CHARRE,LOGRE,IOBRE)
  258. IF (IERR.NE.0) RETURN
  259. IPGEOM = IOBRE
  260. ENDIF
  261. C
  262. C Lecture d'un MAILLAGE (cas general) :
  263. IF (IPGEOM.LE.0) THEN
  264. CALL LIROBJ('MAILLAGE',IPGEOM,1,IRET)
  265. IF (IERR.NE.0) RETURN
  266. ENDIF
  267. C
  268. C Verification de l'unicite des elements
  269. IPT1 = IPGEOM
  270. CALL UNIQMA(IPT1,NBDI1,0)
  271. IF (NBDI1.NE.0) THEN
  272. MOTERR(1:8)='MAILLAGE'
  273. CALL ERREUR(1019)
  274. RETURN
  275. ENDIF
  276. C ==================================================================
  277. C 1- Identification de la formulation : FORMOD
  278. C ==================================================================
  279. C NFOR = 1 => Formulation simple
  280. C NFOR = 2 => Formulation couplee
  281. NFOR =0
  282. ICOND=1
  283. CALL MESLIR(-182)
  284.  
  285. 51 CONTINUE
  286. CALL LIRMOT(MOFORM,NBFORM,IPFORM,ICOND)
  287. IF (IERR.NE.0) RETURN
  288. IF (IPFORM.EQ.0) GOTO 52
  289. C
  290. NFOR=NFOR+1
  291. IF (NFOR.GT.2) THEN
  292. CALL ERREUR(251)
  293. RETURN
  294. ENDIF
  295. LESFOR(NFOR)=MOFORM(IPFORM)
  296. ICOND=0
  297. CALL MESLIR(-181)
  298. GOTO 51
  299. 52 CONTINUE
  300. C
  301. IF (NFOR.EQ.1) THEN
  302. IF (LESFOR(1).EQ.'THERMIQUE') THEN
  303. CALL MODEL1(MOPROP,NPROP,MOTEF,NBTEF,N1MAX,N2MAX)
  304. ELSE IF(LESFOR(1).EQ.'MECANIQUE') THEN
  305. CALL MODEL2(MOPROP,NPROP,MOTEF,NBTEF,N1MAX,N2MAX)
  306. ELSE IF(LESFOR(1).EQ.'LIQUIDE') THEN
  307. CALL MODEL3(MOPROP,NPROP,MOTEF,NBTEF,N1MAX,N2MAX)
  308. ELSE IF(LESFOR(1).EQ.'POREUX') THEN
  309. CALL MODEL6(MOPROP,NPROP,MOTEF,NBTEF,N1MAX,N2MAX)
  310. ELSE IF(LESFOR(1).EQ.'DARCY') THEN
  311. CALL MODEL7(MOPROP,NPROP,MOTEF,NBTEF,N1MAX,N2MAX)
  312. ELSE IF(LESFOR(1).EQ.'CONTACT') THEN
  313. CALL MODEL8(MOPROP,NPROP,MOTEF,NBTEF,N1MAX,N2MAX)
  314. ELSE IF(LESFOR(1).EQ.'MAGNETODYNAMIQUE') THEN
  315. CALL MODE10(MOPROP,NPROP,MOTEF,NBTEF,N1MAX,N2MAX)
  316. ELSE IF(LESFOR(1).EQ.'NAVIER_STOKES') THEN
  317. CALL MODE11(MOPROP,NPROP,MOTEF,NBTEF,N1MAX,N2MAX)
  318. ELSE IF (LESFOR(1).EQ.'MELANGE') THEN
  319. CALL MODE12(MOPROP,NPROP,MOTEF,NBTEF,N1MAX,N2MAX)
  320. DO i=1,N1MAX
  321. LESMOD(i)=0
  322. ENDDO
  323. ELSE IF(LESFOR(1).EQ.'EULER') THEN
  324. CALL MODE13(MOPROP,NPROP,MOTEF,NBTEF,N1MAX,N2MAX)
  325. ELSE IF(LESFOR(1).EQ.'FISSURE') THEN
  326. CALL MODE14(MOPROP,NPROP,MOTEF,NBTEF,N1MAX,N2MAX)
  327. ELSE IF(LESFOR(1).EQ.'LIAISON') THEN
  328. CALL MODE15(MOPROP,NPROP,MOTEF,NBTEF,N1MAX,N2MAX)
  329. ELSE IF(LESFOR(1).EQ.'THERMOHYDRIQUE') THEN
  330. CALL MODE16(MOPROP,NPROP,MOTEF,NBTEF,N1MAX,N2MAX)
  331. ELSE IF(LESFOR(1).EQ.'ELECTROSTATIQUE ') THEN
  332. CALL MODE17(MOPROP,NPROP,MOTEF,NBTEF,N1MAX,N2MAX)
  333. ELSE IF(LESFOR(1).EQ.'DIFFUSION ') THEN
  334. CALL MODE18(MOPROP,NPROP,MOTEF,NBTEF,N1MAX,N2MAX)
  335. ELSE IF(LESFOR(1).EQ.'CHARGEMENT ') THEN
  336. CALL MODE19(MOPROP,NPROP,MOTEF,NBTEF,N1MAX,N2MAX)
  337. ELSE IF(LESFOR(1).EQ.'METALLURGIE ') THEN
  338. cjk148537 : ce n'est pas l exemple a suivre
  339. CALL MODE21(MOPROP,NPROP,MOTEF,NBTEF,N1MAX,N2MAX)
  340. ELSE IF(LESFOR(1).EQ.'CHANGEMENT_PHASE') THEN
  341. CALL MODE22(MOPROP,NPROP,MOTEF,NBTEF,N1MAX,N2MAX)
  342. ELSE IF(LESFOR(1).EQ.'CONTRAINTE') THEN
  343. CALL MODE24(MOPROP,NPROP,MOTEF,NBTEF,N1MAX,N2MAX)
  344. ELSE
  345. CALL ERREUR (251)
  346. ENDIF
  347. IF (IERR.NE.0) RETURN
  348. ELSE IF (NFOR.EQ.2) THEN
  349. IF ((LESFOR(1).EQ.'LIQUIDE'.AND.LESFOR(2).EQ.'MECANIQUE').OR.
  350. & (LESFOR(2).EQ.'LIQUIDE'.AND.LESFOR(1).EQ.'MECANIQUE')) THEN
  351. CALL MODEL5(NPROP,MOTEF,NBTEF,N2MAX)
  352. ELSE
  353. CALL ERREUR(251)
  354. ENDIF
  355. IF (IERR.NE.0) RETURN
  356. C
  357. MN3 = 12
  358. NOBMOD = 0
  359. NMAT = 0
  360. GOTO 43
  361. ENDIF
  362. C ==================================================================
  363. C 2- Identification du type de materiau : MATMOD
  364. C ==================================================================
  365. C NMAT = 0 => Valeur par defaut
  366. C NMAT /= 0 => Decrypter le contenu des LESPRO
  367. NMAT = 0
  368. IF (IPTABM.GT.0.AND.IPTABS.EQ.0) GOTO 674
  369. CALL MESLIR(-180)
  370. C
  371. 41 CONTINUE
  372. IF (NMAT.NE.0) CALL MESLIR(-179)
  373. CALL LIRMOT(MOPROP,NPROP,LAPROP,0)
  374. IF (IERR.NE.0) RETURN
  375. IF (LAPROP.EQ.0) GOTO 42
  376. C
  377. NMAT=NMAT+1
  378. LESPRO(NMAT)=MOPROP(LAPROP)
  379. CC WRITE(*,*) 'NMAT ',LESPRO(NMAT),NMAT
  380. GOTO 41
  381. 42 CONTINUE
  382. C
  383. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  384. C Formulation THERMIQUE
  385. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  386. IF (LESFOR(1).EQ.'THERMIQUE ') THEN
  387. C
  388. MN3 = 7
  389. NOBMOD = 0
  390. C
  391. C Comportement par defaut
  392. IF (NMAT.EQ.0) THEN
  393. NMAT = 2
  394. LESPRO(1)='ISOTROPE '
  395. LESPRO(2)='CONDUCTION '
  396. ELSE
  397. C
  398. C Comportement SOURCE
  399. C ------------------------
  400. CALL PLACE(LESPRO,NMAT,IPLAC,'SOURCE ')
  401. IF (IPLAC.EQ.0) GOTO 113
  402. C
  403. C Liste des EF disponibles pour les SOURCES
  404. CALL MODE23(MOPROP,NPROP,MOTEF,NBTEF,N1MAX,N2MAX)
  405. C
  406. CALL PLACE(LESPRO,NMAT,IPLAC,'GAUSSIENNE ')
  407. IF (IPLAC.NE.0) THEN
  408. IF (IDIM.EQ.1) THEN
  409. INTERR(1) = IDIM
  410. CALL ERREUR(1104)
  411. RETURN
  412. ENDIF
  413. DO i=2,NMAT
  414. CALL PLACE(MOPROP,NPROP,IPLAC,LESPRO(i))
  415. IF ((i.EQ.2).AND.(IPLAC.EQ.0)) THEN
  416. NMAT=NMAT+1
  417. LESPRO(NMAT)='SPHERIQUE '
  418. ELSE IF (IPLAC.EQ.4) THEN
  419. IF (IDIM.LT.3) THEN
  420. INTERR(1)=IDIM
  421. CALL ERREUR(709)
  422. RETURN
  423. ENDIF
  424. ENDIF
  425. ENDDO
  426. ENDIF
  427. GOTO 112
  428. C
  429. 113 CONTINUE
  430. C
  431. C "Tropie"
  432. CALL MODTHE(MOTROP,NTROP)
  433. CALL PLACE(MOTROP,NTROP,IPLAC,LESPRO(1))
  434. IF (IPLAC.EQ.0) THEN
  435. DO i=NMAT,1,-1
  436. LESPRO(i+1)=LESPRO(i)
  437. ENDDO
  438. NMAT=NMAT+1
  439. LESPRO(1)='ISOTROPE '
  440. ENDIF
  441.  
  442. IF (NMAT.LT.2) THEN
  443. CALL PLACE(LESPRO,NMAT,IPLAC,'CONDUCTION ')
  444. IF (IPLAC.EQ.0) THEN
  445. NMAT=NMAT+1
  446. LESPRO(NMAT)='CONDUCTION'
  447. ENDIF
  448. ENDIF
  449. C
  450. C Comportement ADVECTION
  451. C ------------------------
  452. CALL PLACE(LESPRO,NMAT,IADVE,'ADVECTION ')
  453. CALL PLACE(LESPRO,NMAT,IPHAS,'PHASE ')
  454. IF ((IADVE+IPHAS).EQ.0) GOTO 110
  455. CALL PLACE(LESPRO,NMAT,IPLAC,'CONDUCTION ')
  456. IF (IPLAC.EQ.0) THEN
  457. NMAT=NMAT+1
  458. LESPRO(NMAT)='CONDUCTION '
  459. ENDIF
  460. 110 CONTINUE
  461. C
  462. C Comportement CONVECTION
  463. C ------------------------
  464. CALL PLACE(LESPRO,NMAT,IPLAC,'CONVECTION ')
  465. IF (IPLAC.EQ.0) GOTO 111
  466. ICONV=IPLAC
  467. C
  468. C Liste des EF disponibles pour la CONVECTION
  469. CALL MODEL4(MOPROP,NPROP,MOTEF,NBTEF,N1MAX,N2MAX)
  470. C
  471. 111 CONTINUE
  472. C
  473. C Comportement RAYONNEMENT
  474. C ------------------------
  475. CALL PLACE(LESPRO,NMAT,IPLAC,'RAYONNEMENT ')
  476. IF (IPLAC.EQ.0) GOTO 112
  477. IRAYE=IPLAC
  478. C
  479. C Liste des EF disponibles pour le RAYONNEMENT
  480. CALL MODEL9(MOPROP,NPROP,MOTEF,NBTEF,N1MAX,N2MAX)
  481. C
  482. DO i=2,NMAT
  483. CALL PLACE(MOPROP,NPROP,IPLAC,LESPRO(i))
  484. C
  485. IF (MOPROP(IPLAC).EQ.'CAVITE ') THEN
  486. ICAVIT=1
  487. C
  488. ELSE IF (MOPROP(IPLAC).EQ.'FAC_A_FAC ') THEN
  489. IFACAF=1
  490. CALL LIROBJ('MAILLAGE',IPFAC1,1,IRETOU)
  491. IF(IERR.NE.0) RETURN
  492. CALL LIROBJ('MAILLAGE',IPFAC2,1,IRETOU)
  493. IF(IERR.NE.0) RETURN
  494. CALL LIROBJ('MAILLAGE',IPFAC3,1,IRETOU)
  495. IF(IERR.NE.0) RETURN
  496. CALL LIROBJ('MMODEL' ,IMOCO ,1,IRETOU)
  497. IF(IERR.NE.0) RETURN
  498. CALL ACTOBJ('MAILLAGE',IPFAC1,1)
  499. CALL ACTOBJ('MAILLAGE',IPFAC2,1)
  500. CALL ACTOBJ('MAILLAGE',IPFAC3,1)
  501. CALL ACTOBJ('MMODEL' ,IMOCO,1)
  502. IF (IERR.NE.0) RETURN
  503. C
  504. ELSE IF (MOPROP(IPLAC).EQ.'SYMETRIE ') THEN
  505. ISYME=1
  506. CALL LIROBJ('POINT',IPP1,1,IRETOU)
  507. IF(IERR.NE.0) RETURN
  508. CALL LIROBJ('POINT',IPP2,1,IRETOU)
  509. IF(IDIM.EQ.3)CALL LIROBJ('POINT',IPP3,1,IRETOU)
  510. IF(IERR.NE.0) RETURN
  511. C
  512. ELSE IF (MOPROP(IPLAC).EQ.'NGAU ') THEN
  513. CALL LIRENT(NBGA,1,IRETOU)
  514. IF(IERR.NE.0) RETURN
  515. C
  516. ELSE IF (MOPROP(IPLAC).EQ.'DANG ') THEN
  517. CALL LIRENT( NBDANG,1,IRETOU)
  518. IF(IERR.NE.0) RETURN
  519. C
  520. ENDIF
  521. ENDDO
  522. NOBMOD = 2*ICAVIT+ISYME*IDIM+IFACAF*4
  523. C
  524. 112 CONTINUE
  525. ENDIF
  526. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  527. C Formulation MECANIQUE/POREUX
  528. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  529. ELSE IF (LESFOR(1).EQ.'MECANIQUE ' .OR.
  530. & LESFOR(1).EQ.'POREUX ') THEN
  531. C
  532. MN3 = 12
  533. NOBMOD = 0
  534. C
  535. C Comportement par defaut
  536. IF ((NMAT.EQ.0).OR.(NMAT.EQ.1)) THEN
  537. NMAT=2
  538. LESPRO(1)='ELASTIQUE '
  539. LESPRO(2)='ISOTROPE '
  540. ELSE
  541. C
  542. C Comportement lineaire
  543. CALL MODELA(MOPROP,NMOD)
  544. CALL PLACE(MOPROP,NMOD,IPLAC,LESPRO(2))
  545. IF (IPLAC.EQ.0) THEN
  546. DO i=NMAT,2,-1
  547. LESPRO(i+1)=LESPRO(i)
  548. ENDDO
  549. LESPRO(2)='ISOTROPE'
  550. NMAT=NMAT+1
  551. ENDIF
  552. C
  553. C Comportement non lineaire
  554. CALL MODNLI(MOPROP,NMOD)
  555. CALL PLACE(MOPROP,NMOD,IPLAC,LESPRO(NMAT))
  556. IF (IPLAC.EQ.1) THEN
  557. C Par defaut : PLASTIQUE ISOTROPE
  558. NMAT=NMAT+1
  559. LESPRO(NMAT)='ISOTROPE'
  560. ELSE IF (IPLAC.EQ.2) THEN
  561. C Par defaut : FLUAGE NORTON
  562. NMAT=NMAT+1
  563. LESPRO(NMAT)='NORTON'
  564. ELSE IF (IPLAC.EQ.3) THEN
  565. C Par defaut : VISCOPLASTIQUE ONERA
  566. NMAT=NMAT+1
  567. LESPRO(NMAT)='ONERA'
  568. ELSE IF (IPLAC.EQ.4) THEN
  569. C Par defaut : ENDOMMAGEMENT MAZARS
  570. NMAT=NMAT+1
  571. LESPRO(NMAT)='MAZARS'
  572. ELSE IF (IPLAC.EQ.5) THEN
  573. C Par defaut : ENDOMMAGEMENT PLASTIQUE P/Y
  574. NMAT=NMAT+1
  575. LESPRO(NMAT)='PSURY'
  576. ELSE IF (IPLAC.EQ.6) THEN
  577. C Pas de comportement par defaut pour 'NON_LINEAIRE'
  578. CALL ERREUR(945)
  579. RETURN
  580. ELSE IF (IPLAC.EQ.7) THEN
  581. C Pas de comportement par defaut en 'MECANIQUE'
  582. IF (LESFOR(1).EQ.'MECANIQUE') CALL ERREUR(946)
  583. IF (LESFOR(1).EQ.'POREUX') CALL ERREUR(251)
  584. RETURN
  585. ENDIF
  586. C
  587. C Lois externes : lecture d'arguments supplementaires
  588. CALL PLACE(LESPRO,NMAT,IPLAC,'VISCO_EXTERNE ')
  589. LMEVIX=(IPLAC.NE.0)
  590. CALL PLACE(LESPRO,NMAT,IPLAC,'NON_LINEAIRE ')
  591. IF (IPLAC.NE.0) THEN
  592. CALL PLACE(LESPRO,NMAT,IPLAC,'UTILISATEUR ')
  593. LMENLX=(IPLAC.NE.0)
  594. ENDIF
  595. LMOEXT=LMEVIX.OR.LMENLX
  596. C
  597. CALL PLACE(LESPRO,NMAT,IPLAC,'MODAL ')
  598. IF (IPLAC.NE.0) THEN
  599. IF (IPTMOD.GT.0) NOBMOD = 1
  600. IF (IPMOD3.GT.0) NOBMOD = NOBMOD + 1
  601. ENDIF
  602. ENDIF
  603. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  604. C Formulation LIQUIDE
  605. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  606. ELSE IF (LESFOR(1).EQ.'LIQUIDE ') THEN
  607. C
  608. MN3 = 12
  609. NOBMOD = 0
  610. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  611. C Formulation DARCY
  612. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  613. ELSE IF (LESFOR(1).EQ.'DARCY ') THEN
  614. C
  615. MN3 = 7
  616. NOBMOD = 0
  617. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  618. C Formulation CONTACT
  619. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  620. ELSE IF (LESFOR(1).EQ.'CONTACT ') THEN
  621. C
  622. MN3 = 1
  623. NOBMOD = 3
  624. C
  625. ITCO=1
  626. IFRT=0
  627. IMUL=0
  628. IBILA=0
  629. IF (NMAT.EQ.0) THEN
  630. NMAT=1
  631. LESPRO(1)='UNILATERAL '
  632. ELSE
  633. C
  634. C Mot-cle pour le type de contact
  635. CALL PLACE(LESPRO,NMAT,IUNIL,'UNILATERAL ')
  636. CALL PLACE(LESPRO,NMAT,IBILA,'BILATERAL ')
  637. IF (IUNIL.EQ.0 .AND. IBILA.EQ.0) THEN
  638. DO i=NMAT,1,-1
  639. LESPRO(i+1)=LESPRO(i)
  640. ENDDO
  641. NMAT=NMAT+1
  642. LESPRO(1)='UNILATERAL '
  643. ENDIF
  644. IF (IUNIL*IBILA.NE.0) THEN
  645. moterr = 'CONTACT : UNILATERAL ou BILATERAL mais pas les 2'
  646. CALL ERREUR(-385)
  647. CALL ERREUR(21)
  648. RETURN
  649. ENDIF
  650. C
  651. C Mot-cle pour le type de frottement
  652. CALL PLACE(LESPRO,NMAT,IPLAC,'FROTTANT ')
  653. IF (IPLAC.NE.0) IMUL = 3
  654. CALL PLACE(LESPRO,NMAT,IPLAC,'FROCABLE ')
  655. IF (IPLAC.NE.0) ITCO = 0
  656. CALL PLACE(LESPRO,NMAT,IPLAC,'COULOMB ')
  657. IF (IPLAC.NE.0) IFRT = 1
  658. C
  659. IF (IMUL.EQ.3) THEN
  660. IF (ITCO.EQ.1 .AND. IFRT.EQ.0) THEN
  661. moterr = 'FROTTANT : mot-cle COULOMB ou '//
  662. & 'FROCABLE obligatoire'
  663. call erreur(-385)
  664. CALL ERREUR(498)
  665. ENDIF
  666. IF (IFRT.NE.0 .AND. ITCO.EQ.0) THEN
  667. moterr = 'FROTTANT : COULOMB ou FROCABLE mais pas les 2'
  668. call erreur(-385)
  669. CALL ERREUR(21)
  670. RETURN
  671. endif
  672. ELSE
  673. IF (IFRT.NE.0 .OR. ITCO.EQ.0) THEN
  674. moterr = 'Mot-cle FROTTANT a preciser '//
  675. & 'si COULOMB ou FROCABLE fourni'
  676. call erreur(-385)
  677. CALL ERREUR(498)
  678. RETURN
  679. ENDIF
  680. ENDIF
  681. C
  682. ENDIF
  683. C
  684. IF (ITCO.EQ.1) THEN
  685. C Mot-cle donnant la formulation
  686. CALL LIRMOT(MCTCT,4,ITCO,0)
  687. IF(ITCO.EQ.0) ITCO=1
  688. C Mortar : uniquement disponible en 2D
  689. IF ((ITCO.EQ.4) .AND. (IDIM.NE.2)) THEN
  690. INTERR(1) = IDIM
  691. CALL ERREUR(1104)
  692. RETURN
  693. ENDIF
  694. ENDIF
  695. C
  696. C Lecture du second maillage
  697. CALL LIROBJ('MAILLAGE',IPGEO2,1,IRETOU)
  698. IF (IERR.NE.0) RETURN
  699. C
  700. C Creation des noeuds support des mult. de Lagrange
  701. IPGEO1=IPGEOM
  702. IPRIG=0
  703. CALL MOCON1(IPGEO1,IPGEO2,IMUL,ITCO,IPGEOM,IPGEOY,IP1,IP2,IPRIG)
  704. IF (IERR.NE.0) RETURN
  705. IF (ITCO.NE.0) THEN
  706. IPGEO1=IP1
  707. IPGEO2=IP2
  708. IF (IPRIG.NE.0) NOBMOD=4
  709. IF (IBILA.NE.0) ITCO=-1*ITCO
  710. ENDIF
  711. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  712. C Formulation MAGNETODYNAMIQUE
  713. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  714. ELSE IF (LESFOR(1).EQ.'MAGNETODYNAMIQUE') THEN
  715. C
  716. MN3 = 7
  717. NOBMOD = 0
  718. C
  719. C Comportement par defaut
  720. IF ((NMAT.EQ.0).OR.(NMAT.EQ.1)) THEN
  721. NMAT=2
  722. LESPRO(1)='POTENTIEL_VECTEU'
  723. LESPRO(2)='ISOTROPE '
  724. ENDIF
  725. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  726. C Formulation NAVIER_STOKES/EULER
  727. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  728. ELSE IF (LESFOR(1).EQ.'NAVIER_STOKES ' .OR.
  729. & LESFOR(1).EQ.'EULER ') THEN
  730. C
  731. MN3 = 7
  732. NOBMOD = 0
  733. C
  734. IF (NMAT.EQ.0) THEN
  735. NMAT = 1
  736. LESPRO(NMAT)='NEWTONIEN'
  737. ELSE
  738. DO i=1,NMAT
  739. CALL PLACE(MOPROP,NPROP,IPLAC,LESPRO(i))
  740. IF (IPLAC.EQ.4) THEN
  741. MN3 = 12
  742. NOBMOD = 1
  743. ENDIF
  744. ENDDO
  745. ENDIF
  746. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  747. C Formulation MELANGE
  748. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  749. ELSE IF (LESFOR(1).EQ.'MELANGE ') THEN
  750. C
  751. MN3 = 7
  752. NOBMOD = 0
  753. C
  754. IF (NMAT.EQ.0) THEN
  755. NMAT = 1
  756. LESPRO(1)='PARALLELE '
  757. ELSE
  758. CALL PLACE(MOPROP,NPROP,IPLAC,LESPRO(1))
  759. IF (IPLAC.EQ.0) THEN
  760. DO i=NMAT,1,-1
  761. LESPRO(i+1)=LESPRO(i)
  762. ENDDO
  763. NMAT=NMAT+1
  764. LESPRO(1)='PARALLELE '
  765. ENDIF
  766. ENDIF
  767. C
  768. CALL LIROBJ('MMODEL',IPMOD,0,IOK)
  769. IF (IERR.NE.0) RETURN
  770. IF (IOK.EQ.1) THEN
  771. CALL ACTOBJ('MMODEL',IPMOD,1)
  772. IF (IERR.NE.0) RETURN
  773. LESMOD(1)=IPMOD
  774. ENDIF
  775. C
  776. CALL PLACE(LESPRO,NMAT,IPARA,'PARALLELE ')
  777. CALL PLACE(LESPRO,NMAT,ISERI,'SERIE ')
  778. IF ((IPARA+ISERI).NE.0) THEN
  779. IF (IPMOD.LE.0) THEN
  780. CALL ERREUR(21)
  781. RETURN
  782. ENDIF
  783. IPMMEL = IPMOD
  784. MMODE1 = IPMOD
  785. NOBMOD = MMODE1.KMODEL(/1)
  786. ENDIF
  787. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  788. C Formulation FISSURE
  789. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  790. ELSE IF (LESFOR(1).EQ.'FISSURE ') THEN
  791. C
  792. MN3 = 7
  793. NOBMOD = 0
  794. C
  795. IF (NMAT.EQ.0) THEN
  796. NMAT = 3
  797. LESPRO(1)='MASS'
  798. LESPRO(2)='PARF'
  799. LESPRO(3)='POISEU_BLASIUS'
  800. ENDIF
  801. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  802. C Formulation LIAISON
  803. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  804. ELSE IF (LESFOR(1).EQ.'LIAISON ') THEN
  805. C
  806. MN3 = 12
  807. NOBMOD = 0
  808. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  809. C Formulation THERMOHYDRIQUE
  810. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  811. ELSE IF (LESFOR(1).EQ.'THERMOHYDRIQUE ') THEN
  812. C
  813. MN3 = 12
  814. NOBMOD = 0
  815. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  816. C Formulation ELECTROSTATIQUE
  817. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  818. ELSE IF (LESFOR(1).EQ.'ELECTROSTATIQUE ') THEN
  819. C
  820. MN3 = 12
  821. NOBMOD = 0
  822. C
  823. IPROP = 3
  824. IF (IDIM.EQ.1) IPROP = 1
  825. CALL PLACE(MOPROP(1),IPROP,IPLAC,LESPRO(1))
  826. IF (IPLAC.EQ.0) THEN
  827. DO i=NMAT,1,-1
  828. LESPRO(i+1)=LESPRO(i)
  829. ENDDO
  830. NMAT=NMAT+1
  831. LESPRO(1)='ISOTROPE '
  832. ENDIF
  833. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  834. C Formulation DIFFUSION
  835. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  836. ELSE IF (LESFOR(1).EQ.'DIFFUSION ') THEN
  837. C
  838. MN3 = 12
  839. NOBMOD = 1
  840. C
  841. C Comportement par defaut
  842. IF (NMAT.EQ.0) THEN
  843. NMAT = 2
  844. LESPRO(1)='ISOTROPE '
  845. LESPRO(2)='FICK '
  846. ELSE
  847. C
  848. C "Tropie"
  849. CALL MODTHE(MOTROP,NTROP)
  850. CALL PLACE(MOTROP,NTROP,IPLAC,LESPRO(1))
  851. IF (IPLAC.EQ.0) THEN
  852. DO i=NMAT,1,-1
  853. LESPRO(i+1)=LESPRO(i)
  854. ENDDO
  855. NMAT=NMAT+1
  856. LESPRO(1)='ISOTROPE '
  857. ENDIF
  858. C
  859. CALL MODDIF(MOPROP,NMOD)
  860. CALL PLACE(MOPROP,NMOD,IPLAC,LESPRO(NMAT))
  861. IF (IPLAC.EQ.0) THEN
  862. NMAT=NMAT+1
  863. LESPRO(NMAT)='FICK '
  864. ELSE IF (MOPROP(IPLAC).EQ.'UTILISATEUR ') THEN
  865. LMOEXT=.TRUE.
  866. ELSE IF (MOPROP(IPLAC).EQ.'SORET ') THEN
  867. CHARIN = 'T '
  868. C Lecture du mot-cle 'PARA_LOI' et donnees associees
  869. CALL LIRMOT(MOEXT,1,LEXT,0)
  870. IF (IERR.NE.0) RETURN
  871. IF (LEXT.EQ.1) THEN
  872. CALL LIROBJ('LISTMOTS',mlmots,0,IRET)
  873. IF (IERR.NE.0) RETURN
  874. IF (IRET.EQ.0) THEN
  875. CALL LIRCHA(CHARIN,1,IRETI)
  876. IF (IERR.NE.0) RETURN
  877. IRETI=LONG(CHARIN)
  878. IF (IRETI.EQ.0) CALL ERREUR(643)
  879. ELSE
  880. SEGACT,mlmots
  881. NBCOMP = mots(/2)
  882. IF (NBCOMP.EQ.0) THEN
  883. CALL ERREUR(964)
  884. ELSE
  885. CHARIN = MOTS(1)
  886. IRETI = LONG(CHARIN)
  887. IF (IRETI.EQ.0) CALL ERREUR(643)
  888. ENDIF
  889. ENDIF
  890. IF (IERR.NE.0) RETURN
  891. IRETMA = 6
  892. IF (IRETI.GT.IRETMA) THEN
  893. INTERR(1) = IRETMA
  894. MOTERR(1:8) = CHARIN(1:IRETI)
  895. CALL ERREUR(-353)
  896. ENDIF
  897. IRETI = MIN(IRETI,IRETMA)
  898. CHARIN(IRETI+1:8) = ' '
  899. ENDIF
  900. JGM = 1
  901. JGN = LOCOMP
  902. SEGINI,mlmots
  903. mots(1) = CHARIN
  904. LCPAR = mlmots
  905. ENDIF
  906. ENDIF
  907. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  908. C Formulation CHARGEMENT
  909. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  910. ELSE IF (LESFOR(1).EQ.'CHARGEMENT ') THEN
  911. C
  912. MN3 = 12
  913. NOBMOD = 0
  914. C
  915. IF (NMAT.EQ.0) THEN
  916. CALL ERREUR(251)
  917. RETURN
  918. ENDIF
  919. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  920. C Formulation METALLURGIE
  921. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  922. ELSE IF (LESFOR(1).EQ.'METALLURGIE ') THEN
  923. C
  924. IF (NMAT.NE.4) THEN
  925. CALL ERREUR(5)
  926. RETURN
  927. ENDIF
  928. C
  929. MN3 = 12
  930. NOBMOD = 4
  931. C
  932. DO i=1,4
  933. CALL PLACE(MOPROP,NPROP,IPLAC,LESPRO(i))
  934. IF (IPLAC.EQ.0) THEN
  935. CALL ERREUR(1077)
  936. RETURN
  937. ENDIF
  938. CALL LIROBJ('LISTMOTS',LUMOTS,1,IRETOU)
  939. MLMOTS = LUMOTS
  940. SEGACT,MLMOTS*NOMOD
  941. IF (IPLAC.EQ.1) THEN
  942. LCVAR = MLMOTS
  943. MLMOT1 = MLMOTS
  944. NB_PHA = MLMOTS.MOTS(/2)
  945. ELSE IF (IPLAC.EQ.2) THEN
  946. IREACT = MLMOTS
  947. MLMOT2 = MLMOTS
  948. NB_REA = MLMOTS.MOTS(/2)
  949. ELSE IF (IPLAC.EQ.3) THEN
  950. IPRODU = MLMOTS
  951. MLMOT3 = MLMOTS
  952. NB_PRO = MLMOTS.MOTS(/2)
  953. ELSE IF (IPLAC.EQ.4) THEN
  954. LCMAT = MLMOTS
  955. NB_TYP = MLMOTS.MOTS(/2)
  956. DO JJ = 1,NB_TYP
  957. LESPRO(JJ) = MLMOTS.MOTS(JJ)
  958. ENDDO
  959. ENDIF
  960. ENDDO
  961. C
  962. C Un type de reaction definit pour chaque reaction
  963. IF( NB_TYP .NE. NB_PRO ) THEN
  964. CALL ERREUR(1077)
  965. RETURN
  966. ENDIF
  967. C
  968. C Autant de produits que de reactifs
  969. IF( NB_PRO .NE. NB_REA ) THEN
  970. CALL ERREUR(1078)
  971. RETURN
  972. ENDIF
  973. C
  974. CCCC On initialise le MLMOT1 des PHASES si celui ci n'a pas ete lu
  975. icompt = 0
  976. CCCC IF(LCVAR.LE. 0) THEN
  977. CCCC icompt = 1
  978. CCCC NB_PHA = NB_REA + NB_PRO
  979. CCCC JGN = LOCOMP
  980. CCCC JGM = NB_PHA
  981. CCCC SEGINI, MLMOT1
  982. CCCC LCVAR = MLMOT1
  983. CCCC On remplira ensuite MATMOD() avec lespro()
  984. CCCC lespro(1) = MOPROP(1)
  985. CCCC endif
  986.  
  987. DO IPHA = 1, NB_PRO
  988.  
  989. C Produits differents du reactif pour chaque reaction
  990. IF( MLMOT2.MOTS(IPHA) .EQ. MLMOT3.MOTS(IPHA) ) THEN
  991. MOTERR(1:4)=MLMOT2.MOTS(IPHA)
  992. MOTERR(5:8)=MLMOT3.MOTS(IPHA)
  993. CALL ERREUR(1075)
  994. RETURN
  995. ENDIF
  996. C
  997. CALL PLACE(MLMOT1.MOTS,NB_PHA,IRPHAS,MLMOT2.MOTS(IPHA))
  998. CALL PLACE(MLMOT1.MOTS,NB_PHA,IPPHAS,MLMOT3.MOTS(IPHA))
  999. C SI LE NOM DU PRODUIT OU DU REACTIF N'A PAS ETE LU DANS LE
  1000. C MLMOT1 DES PHASES :
  1001. C ON LE RAJOUTE SI LCVAR N'AVAIT PAS ETE LU
  1002. C ON EMET UNE ERREUR SINON
  1003. IF (IRPHAS .EQ. 0) THEN
  1004. IF( ICOMPT .GE. 1 ) THEN
  1005. MLMOT1.MOTS(ICOMPT) = MLMOT2.MOTS(IPHA)
  1006. ICOMPT = ICOMPT + 1
  1007. ELSE
  1008. MOTERR(1:4)=MLMOT2.MOTS(IPHA)
  1009. CALL ERREUR(1080)
  1010. RETURN
  1011. ENDIF
  1012. ENDIF
  1013. IF (IPPHAS .EQ. 0) THEN
  1014. IF( ICOMPT .GE. 1 ) THEN
  1015. MLMOT1.MOTS(ICOMPT) = MLMOT3.MOTS(IPHA)
  1016. ICOMPT = ICOMPT + 1
  1017. ELSE
  1018. MOTERR(1:4)=MLMOT3.MOTS(IPHA)
  1019. CALL ERREUR(1080)
  1020. RETURN
  1021. ENDIF
  1022. ENDIF
  1023.  
  1024. ENDDO
  1025. C
  1026. CCCC On corrige la taille de MLMOT1 :
  1027. CCCC if( icompt .ge. 1 ) then
  1028. CCCC JGM = icompt - 1
  1029. CCCC JGN = MLMOT1.MOTS(/1)
  1030. CCCC SEGADJ, MLMOT1
  1031. CCCC endif
  1032.  
  1033. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1034. C Formulation CHANGEMENT_PHASE
  1035. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1036. ELSE IF (LESFOR(1).EQ.'CHANGEMENT_PHASE') THEN
  1037. C
  1038. MN3 = 12
  1039. NOBMOD = 2
  1040. JGM = 2
  1041. C
  1042. IF (NMAT.EQ.0) THEN
  1043. NMAT=1
  1044. LESPRO(1)='PARFAIT '
  1045. ELSE
  1046. CALL PLACE(MOPROP,NPROP,IPLAC,LESPRO(1))
  1047. IF (IPLAC.EQ.0) THEN
  1048. WRITE(*,*) 'PAS TROUVE LA FORMULATION PHASE'
  1049. CALL ERREUR(5)
  1050. RETURN
  1051. ELSE IF (IPLAC.EQ.2) THEN
  1052. JGM = 4
  1053. NOBMOD = 3
  1054. ENDIF
  1055. ENDIF
  1056. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1057. C Formulation CONTRAINTE
  1058. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1059. ELSE IF (LESFOR(1).EQ.'CONTRAINTE ') THEN
  1060. C
  1061. MN3 = 1
  1062. NOBMOD = 2
  1063. LACTR = 3
  1064. C
  1065. IF (NMAT.EQ.0) THEN
  1066. NMAT=1
  1067. LESPRO(1)='RELATION '
  1068. ELSE
  1069. CALL PLACE(MOPROP,NPROP,IPLAC,LESPRO(1))
  1070. IF (IPLAC.EQ.0) THEN
  1071. DO i=NMAT,1,-1
  1072. LESPRO(i+1)=LESPRO(i)
  1073. ENDDO
  1074. NMAT=NMAT+1
  1075. LESPRO(1)='RELATION '
  1076. ENDIF
  1077. ENDIF
  1078. C
  1079. CALL PLACE(LESPRO,NMAT,IPLAC,'ROTATION')
  1080. IF (IPLAC.NE.0) THEN
  1081. LACTR = IPLAC
  1082. NOBMOD=3
  1083. CALL MESLIR(0)
  1084. CALL LIROBJ('POINT',IP1,1,IOK)
  1085. IF (IDIM.EQ.3) THEN
  1086. NOBMOD=4
  1087. CALL LIROBJ('POINT',IP2,1,IOK)
  1088. IF (IERR.NE.0) RETURN
  1089. ENDIF
  1090. ENDIF
  1091. C
  1092. CALL PLACE(LESPRO,NMAT,IPLAC,'DEPLACEMENT')
  1093. IF (IPLAC.NE.0) THEN
  1094. LACTR = IPLAC
  1095. NOBMOD=3
  1096. CALL LIROBJ('POINT',IP1,1,IOK)
  1097. IF (IERR.NE.0) RETURN
  1098. ENDIF
  1099. C
  1100. IPGEOC=IPGEOM
  1101. IF (LACTR.EQ.1.OR.LACTR.EQ.2) CALL MOCON2(IPGEOC,IPT7)
  1102. IF (LACTR.EQ.3) CALL MOCON3(IPGEOC,IPT7)
  1103. IPGEOM=IPT7
  1104. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1105. ENDIF
  1106. C ==================================================================
  1107. C 3- Lecture eventuelle des types d'ELEMENTS FINIS a utiliser
  1108. C ==================================================================
  1109. 43 CONTINUE
  1110. C=DEB==== FORMULATION HHO ==== Cas particulier =========================
  1111. CALL LIRMOT(mcHHO,NMHHO,iHHO,0)
  1112. IF (IERR.NE.0) RETURN
  1113. IF (iHHO.NE.0) THEN
  1114. CALL REFUS
  1115. CALL LIRCHA(chaHHO,1,IRETI)
  1116. IF (IERR.NE.0) RETURN
  1117. loHHO = .TRUE.
  1118. END IF
  1119. C=FIN==== FORMULATION HHO ==============================================
  1120. C
  1121. ITEF=0
  1122. IF (NBTEF.EQ.0) GOTO 2
  1123. CALL MESLIR(-178)
  1124. C
  1125. C Lecture d'un Element Fini
  1126. 1 CONTINUE
  1127. CALL LIRMOT(NOMTP,LNOMTP,LETEF,0)
  1128. IF (IERR.NE.0) RETURN
  1129. IF (LETEF.EQ.0) GOTO 2
  1130. ITEF=ITEF+1
  1131. LESTEF(ITEF)=NOMTP(LETEF)
  1132. CALL MESLIR(-177)
  1133. GOTO 1
  1134. 2 CONTINUE
  1135. C
  1136. C Lecture d'un mot generique pour un type d'element Fini
  1137. IF (ITEF.EQ.0) THEN
  1138. CALL LIRMOT(MOGELT,NGELT,LETEF,0)
  1139. IF (IERR.NE.0) RETURN
  1140. IF (LETEF.EQ.0) GOTO 3
  1141. ITEF=ITEF+1
  1142. IF (MOGELT(LETEF).EQ.'BBAR') THEN
  1143. LOBBAR=.TRUE.
  1144. ELSE
  1145. LONAVI=.TRUE.
  1146. MDISC=MOGELT(LETEF)
  1147. ENDIF
  1148. ENDIF
  1149. 3 CONTINUE
  1150. C
  1151. C Mot-cle 'INCO' et noms d'inconnues primales et duales
  1152. CALL LIRMOT(MOINCO,NBDIF,LEXT,0)
  1153. C
  1154. IF (LESFOR(1).EQ.'CHANGEMENT_PHASE') THEN
  1155. IF (LEXT.EQ.0) THEN
  1156. CALL ERREUR(1093)
  1157. RETURN
  1158. ENDIF
  1159. JGN =LOCOMP
  1160. SEGINI,MLMOT1
  1161. IPRIDU=MLMOT1
  1162. DO IMOT=1,JGM
  1163. CALL LIRCHA(MOPRID,1,ILONG)
  1164. IF (IERR.NE.0) RETURN
  1165. MLMOT1.MOTS(IMOT) = MOPRID
  1166. ENDDO
  1167. C
  1168. ELSE IF (LESFOR(1).EQ.'DIFFUSION ') THEN
  1169. IF (LEXT.EQ.0) THEN
  1170. MDIINC='CO '
  1171. MDIDUA='QCO '
  1172. ELSE
  1173. MDIINC=' '
  1174. MDIDUA='Q '
  1175. CHARIN=' '
  1176. CHARRE=' '
  1177. C
  1178. C Lecture sous forme de LISTMOTS ou MOTS
  1179. CALL LIROBJ('LISTMOTS',MLMOTS,0,IRET)
  1180. IF (IERR.NE.0) RETURN
  1181. IF (MLMOTS.NE.0) THEN
  1182. SEGACT,MLMOTS
  1183. NBCOMP = MOTS(/2)
  1184. IF (NBCOMP.NE.1) THEN
  1185. CALL ERREUR(643)
  1186. RETURN
  1187. ENDIF
  1188. CHARIN=MOTS(1)
  1189. CALL LIROBJ('LISTMOTS',MLMOTS,0,IRETE)
  1190. IF (IERR.NE.0) RETURN
  1191. IF (MLMOTS.NE.0) THEN
  1192. SEGACT,MLMOTS
  1193. NBCOMP = MOTS(/2)
  1194. IF (NBCOMP.NE.1) THEN
  1195. CALL ERREUR(643)
  1196. RETURN
  1197. ENDIF
  1198. CHARRE=MOTS(1)
  1199. ENDIF
  1200. ELSE
  1201. CALL LIRCHA(CHARIN,1,IRETI)
  1202. IF (IERR.NE.0) RETURN
  1203. CALL LIRCHA(CHARRE,0,IRETE)
  1204. IF (IERR.NE.0) RETURN
  1205. ENDIF
  1206. C
  1207. C Verification sur la taille des inconnues
  1208. IRETMA = 6
  1209. IRETI = LONG(CHARIN)
  1210. IF (IRETI.EQ.0) THEN
  1211. CALL ERREUR(643)
  1212. RETURN
  1213. ENDIF
  1214. IF (IRETI.GT.IRETMA) THEN
  1215. INTERR(1) = IRETMA
  1216. MOTERR(1:8) = CHARIN(1:IRETI)
  1217. CALL ERREUR(-353)
  1218. ENDIF
  1219. IRETI = MIN(IRETI,IRETMA)
  1220. MDIINC(1:IRETI)=CHARIN(1:IRETI)
  1221. C
  1222. IF (IRETE.GT.0) THEN
  1223. IRETE = LONG(CHARRE)
  1224. IF (IRETE.EQ.0) THEN
  1225. CALL ERREUR(643)
  1226. RETURN
  1227. ENDIF
  1228. IRETMA = IRETMA + 2
  1229. IF (IRETE.GT.IRETMA) THEN
  1230. INTERR(1) = IRETMA
  1231. MOTERR(1:8) = CHARRE(1:IRETE)
  1232. CALL ERREUR(-353)
  1233. ENDIF
  1234. IRETE=MIN(IRETE,IRETMA)
  1235. MDIDUA(1:IRETE)=CHARRE(1:IRETE)
  1236. ELSE
  1237. MDIDUA(2:1+IRETI)=MDIINC(1:IRETI)
  1238. ENDIF
  1239. ENDIF
  1240. C
  1241. C Verification des noms de primale et duale lues
  1242. CALL VERMDI(MDIINC,MDIDUA)
  1243. IF (IERR.NE.0) RETURN
  1244.  
  1245. C On les place dans un LISTMOTS pour TYMODE et IVAMODE
  1246. JGN = LOCOMP
  1247. JGM = 2
  1248. SEGINI,MLMOT1
  1249. IPLRDI=MLMOT1
  1250. MLMOT1.MOTS(1) = MDIINC
  1251. MLMOT1.MOTS(2) = MDIDUA
  1252. C
  1253. ELSE
  1254. IF (LEXT.GT.0) THEN
  1255. CALL LIROBJ('LISTMOTS',JLMOT1,1,IRET)
  1256. IF (IERR.NE.0) RETURN
  1257. CALL LIROBJ('LISTMOTS',JLMOT2,1,IRET)
  1258. IF (IERR.NE.0) RETURN
  1259. MLMOT5 = JLMOT1
  1260. MLMOT6 = JLMOT2
  1261. SEGACT,MLMOT5,MLMOT6
  1262. IF (MLMOT5.MOTS(/2).NE.MLMOT6.MOTS(/2)) THEN
  1263. CALL ERREUR(26)
  1264. RETURN
  1265. ENDIF
  1266. NOBMOD = 2
  1267. ENDIF
  1268. ENDIF
  1269. C
  1270. C Loi UTILISATEUR : recuperer les informations supplementaires
  1271. IF (LMOEXT) THEN
  1272. CALL MODEXT(MOTPRO,LCPAR,LCMAT,LCVAR,LDERI,
  1273. & LMOLOI,LMOPTR,LMOLIB,LMOLGB,LMOFCT,LMOLGT)
  1274. c* if (lmoptr.le.0) return
  1275. IF (IERR.NE.0) RETURN
  1276. C
  1277. IF (LMOLOI.GT.0) NOBMOD = NOBMOD + 4
  1278. IF (LMEVIX) NOBMOD = NOBMOD + 1
  1279. C
  1280. C Donnee 'C_MATERIAU' manquante
  1281. IF (LMENLX) THEN
  1282. IF (LCMAT.EQ.0) THEN
  1283. CALL ERREUR(641)
  1284. RETURN
  1285. ENDIF
  1286. ENDIF
  1287. C
  1288. C Ajouter le numero ou le nom de la loi utilisateur
  1289. NMAT = NMAT + 1
  1290. LESPRO(NMAT) = MOTPRO
  1291. ENDIF
  1292. C ==================================================================
  1293. C 4- Lecture de mots-cles supplementaires
  1294. C ==================================================================
  1295. 674 CONTINUE
  1296. CONM = ' '
  1297. KCONS = 0
  1298. NGINT = 0
  1299. NGRIG = 0
  1300. NGMAS = 0
  1301. NGCON = 0
  1302. IPTGEN = 0
  1303. PHAM = ' '
  1304. IPMOD1 = 0
  1305. klcon = 0
  1306. plicon = 0
  1307. ILIE = 0
  1308. kbnlin = 0
  1309. IPMOD3 = 0
  1310. JDERIV = LDERI
  1311.  
  1312. 675 CONTINUE
  1313. CALL LIRMOT(MOCON,NBCON,LECON,0)
  1314. IF (LECON.EQ.0) GOTO 22
  1315. C
  1316. C 'CONS' : nom du constituant
  1317. IF (LECON.EQ.1) THEN
  1318. CALL LIRCHA(CONM,1,KCONS)
  1319. IF (IERR.NE.0) RETURN
  1320. C
  1321. C 'INTE' : nombre de points d'integration dans l'epaisseur
  1322. ELSE IF (LECON.EQ.2) THEN
  1323. i1foi = 1
  1324. 677 CONTINUE
  1325. LEGAUS=0
  1326. CALL LIRMOT(MGAUSS,4,LEGAUS,0)
  1327. IF (IERR.NE.0) RETURN
  1328. IF (I1FOI.NE.1.AND.LEGAUS.EQ.0) GOTO 676
  1329. CALL LIRENT(ITT,1,IRET)
  1330. IF (IERR.NE.0) RETURN
  1331. IF (ITT.LT.1) THEN
  1332. INTERR(1) = ITT
  1333. CALL ERREUR(36)
  1334. RETURN
  1335. ENDIF
  1336. if (legaus.eq.0 .or. legaus.eq.1) then
  1337. c itt doit etre impair (> 0)
  1338. IF (MOD(itt,2).EQ.0) THEN
  1339. call erreur(607)
  1340. return
  1341. ENDIF
  1342. NGINT = itt
  1343. endif
  1344. IF (LEGAUS.EQ.2) NGRIG = ITT
  1345. IF (LEGAUS.EQ.3) NGMAS = ITT
  1346. IF (LEGAUS.EQ.4) NGCON = ITT
  1347. IF (I1FOI.EQ.1.AND.LEGAUS.EQ.0) GOTO 676
  1348. I1FOI = 0
  1349. c INTE itt <=> INTE EPAI itt ; autres mots a ecrire
  1350. c Syntaxe de modeli non decrite :
  1351. c Si plusieurs mots de MGAUSS
  1352. c INTE MOT1 itt1 MOT2 itt2 ... ; (couples MOTi iiti obligatoires)
  1353. goto 677
  1354. 676 CONTINUE
  1355. C
  1356. C 'DPGE' : point support des deformations planes generalisees
  1357. ELSE IF (LECON.EQ.3) THEN
  1358. CALL LIROBJ('POINT',IPTGEN,1,IRET)
  1359. IF (IERR.NE.0) RETURN
  1360. C Transformer le point en maillage de POI1 (avec un seul element)
  1361. CALL CRELEM(IPTGEN)
  1362. C On verifie s'il n'a pas deja ete preconditionne.
  1363. CALL CRECH1(IPTGEN,1)
  1364. C
  1365. C 'PHAS' : nom de phase
  1366. ELSE IF (LECON.EQ.4) THEN
  1367. CALL LIRCHA(PHAM,1,IRET)
  1368. IF (IERR.NE.0) RETURN
  1369. C
  1370. C 'STAT' :
  1371. ELSE IF (LECON.EQ.5) THEN
  1372. NMAT = NMAT + 1
  1373. LESPRO(NMAT) = 'STATIONNAIRE'
  1374. IF (IPTABS.LE.0) THEN
  1375. CALL LIROBJ('MMODEL',IPMOD1,1,IRET)
  1376. IF (IERR.NE.0) RETURN
  1377. ENDIF
  1378. C
  1379. C 'LCOI'/'LCOS' : options non documentees pour le modele LIAISON !
  1380. C Lecture obligatoire du modele associe (sinon options sans interet)
  1381. ELSE IF (LECON.EQ.6.OR.LECON.EQ.7) THEN
  1382. IF (LESFOR(1).NE.'LIAISON') THEN
  1383. CALL ERREUR(251)
  1384. RETURN
  1385. ENDIF
  1386. CALL LIROBJ('MMODEL ',ipmod2,1,iret)
  1387. IF (IERR.NE.0) RETURN
  1388. CALL ACTOBJ('MMODEL ',ipmod2,1)
  1389. IF (IERR.NE.0) RETURN
  1390. mmode2 = ipmod2
  1391. n2 = mmode2.kmodel(/1)
  1392. if (n2.ne.1) then
  1393. write(ioimp,*) 'Liaison conditionnelle mal specifiee (1)'
  1394. call erreur(5)
  1395. return
  1396. endif
  1397. imode2 = mmode2.kmodel(1)
  1398. if (imode2.formod(1).ne.'LIAISON') THEN
  1399. write(ioimp,*) 'Liaison conditionnelle mal specifiee (2)'
  1400. call erreur(5)
  1401. return
  1402. endif
  1403. if (klcon.eq.0) then
  1404. nlcon = 10
  1405. segini plicon
  1406. endif
  1407. klcon = klcon + 1
  1408. if (klcon.gt.nlcon) then
  1409. nlcon = nlcon + 10
  1410. segadj plicon
  1411. endif
  1412. mlicon(klcon) = ipmod2
  1413. tlicon(klcon) = lecon
  1414. NOBMOD=klcon
  1415. C
  1416. C 'LIBRE' : option pour les elements JOI1
  1417. ELSE IF (LECON.EQ.8) THEN
  1418. ILIE = 0
  1419. C
  1420. C 'LIE' : option pour les elements JOI1
  1421. ELSE IF (LECON.EQ.9) THEN
  1422. ILIE = 1
  1423. C
  1424. C 'NON_LOCAL' : option pour les modelisations non locales
  1425. ELSE IF (LECON.EQ.10) THEN
  1426. IF (LESFOR(1).NE.'MECANIQUE'.AND.LESFOR(1).NE.'POREUX') THEN
  1427. CALL ERREUR(251)
  1428. RETURN
  1429. ENDIF
  1430. C
  1431. MN3 = 14
  1432. CALL MODNLO(MNLOCA,NLODIM)
  1433. CALL LIRMOT(MNLOCA,NLODIM,INLOC,1)
  1434. IF (IERR.NE.0) RETURN
  1435. CALL LIRMOT(MNLVAR,1,INLVIA,1)
  1436. IF (IERR.NE.0) RETURN
  1437. CALL LIROBJ('LISTMOTS',LULVIA,1,IRET)
  1438. IF (IERR.NE.0) RETURN
  1439. C
  1440. C 'LINE'/'CHPO'/'GAP7' : ???
  1441. ELSE IF (LECON.GE.11.and.LECON.LE.13) THEN
  1442. if (kbnlin.eq.0) then
  1443. jgn = 4
  1444. JGM = 3
  1445. segini opnlin
  1446. endif
  1447. kbnlin = kbnlin + 1
  1448. opnlin.mots(kbnlin) = mocon(lecon)
  1449. C
  1450. C 'COMP' :
  1451. ELSE IF (LECON.EQ.14) THEN
  1452. NMAT = NMAT + 1
  1453. LESPRO(NMAT) = 'COMPORTEMENT'
  1454. CALL LIROBJ('MMODEL',IPMOD3,1,IRET)
  1455. IF (IERR.NE.0) RETURN
  1456. C
  1457. C 'EPSI' : option desuete
  1458. ELSE IF (LECON.EQ.15) THEN
  1459. C CALL LIRMOT(MDERIV,6,IRET,1)
  1460. C IF(IERR.NE.0) RETURN
  1461. C JDERIV=IRET
  1462. cbp,2020-12-10 : abandon de MEPSIL (CCOPTIO) et IDERIV (MMODEL)
  1463. MOTERR(1:40)='MODE ... EPSI ... ;'
  1464. CALL ERREUR(1056)
  1465. RETURN
  1466. C
  1467. ENDIF
  1468. GOTO 675
  1469. 22 CONTINUE
  1470. C ==================================================================
  1471. C 5- Creation du modele MMODEL
  1472. C ==================================================================
  1473. IF (IPTABM.GT.0.AND.IPTABS.EQ.0.AND.IPMOD1.GT.0) GOTO 91
  1474. C
  1475. CALL ACTOBJ('MAILLAGE',IPGEOM,1)
  1476. MELEME = IPGEOM
  1477. NSOU = MELEME.LISOUS(/1)
  1478. NSOU1 = MAX(1,NSOU)
  1479.  
  1480. C=DEB==== FORMULATION HHO ==== Premieres verifications =================
  1481. iplHHO = 0
  1482. IF (loHHO) THEN
  1483. C= Pour l'instant, HHO en formulation MECANIQUE !
  1484. IF ( (NFOR.EQ.1 .AND. LESFOR(1).NE.'MECANIQUE') .OR.
  1485. & (NFOR.NE.1) ) THEN
  1486. MOTERR = 'Formulation HHO --> MECANIQUE only'
  1487. CALL ERREUR(-385)
  1488. CALL ERREUR(251)
  1489. RETURN
  1490. END IF
  1491. IF ( .NOT. ( IFOMOD.EQ.-1 .AND. IFOUR.NE.-3) ) THEN
  1492. MOTERR = 'Formulation HHO --> 2D PLAN DEFO/CONT only'
  1493. CALL ERREUR(-385)
  1494. c-dbg IF ( .NOT. ( (IFOMOD.EQ.2) .OR.
  1495. c-dbg & (IFOMOD.EQ.-1 .AND. IFOUR.NE.-3) ) ) THEN
  1496. c-dbg write(ioimp,*) 'Formulation HHO --> 2D PLAN DEFO/CONT or 3D'
  1497. CALL ERREUR(251)
  1498. RETURN
  1499. END IF
  1500. C=
  1501. CALL HHOPRE(CHAHHO,IPGEOM,iplHHO,iret)
  1502. IF (iret.NE.0) THEN
  1503. CALL ERREUR(iret)
  1504. RETURN
  1505. ENDIF
  1506. nobHHO = NOBMOD
  1507. NOBMOD = NOBMOD + MTYHHO
  1508. END IF
  1509. C=FIN==== FORMULATION HHO ==============================================
  1510.  
  1511. N1 = NSOU1
  1512. SEGINI,MMODEL,MMODE2
  1513. IPMODE = MMODEL
  1514. C
  1515. C Par defaut, le nom du constituant est le pointeur sur le MMODEL
  1516. IF (KCONS.EQ.0) WRITE(CONM,FMT='(I16)') IPMODE
  1517. C ==================================================================
  1518. C 6- Creation des modeles elementaires IMODEL
  1519. C ==================================================================
  1520. IPT1 = MELEME
  1521. DO 10 IM = 1, NSOU1
  1522.  
  1523. IF (NSOU.NE.0) IPT1 = MELEME.LISOUS(IM)
  1524. ITYP1 = IPT1.ITYPEL
  1525. NBNN = IPT1.NUM(/1)
  1526. NBEL = IPT1.NUM(/2)
  1527. C +--------------------------------------------------------------------+
  1528. C | Creation du modele elementaire IMODEL |
  1529. C +--------------------------------------------------------------------+
  1530. SEGINI,IMODEL
  1531. MMODEL.KMODEL(IM) = IMODEL
  1532. C +--------------------------------------------------------------------+
  1533. C | Remplissage du IMODEL |
  1534. C +--------------------------------------------------------------------+
  1535. IMODEL.IMAMOD = IPT1
  1536. IMODEL.CONMOD(1:16) = CONM
  1537. IMODEL.CONMOD(17:24) = PHAM
  1538. DO I = 1, NFOR
  1539. IMODEL.FORMOD(I) = LESFOR(I)
  1540. ENDDO
  1541. IF (NMAT.NE.0) THEN
  1542. DO I = 1, NMAT
  1543. IMODEL.MATMOD(I) = LESPRO(I)
  1544. ENDDO
  1545. ENDIF
  1546. C
  1547. C Informations liees au MATERIAU/COMPORTEMENT
  1548. CMATE = ' '
  1549. IMATE = 0
  1550. INATU = 0
  1551. CALL NOMATE(FORMOD,NFOR,MATMOD,NMAT,CMATE,IMATE,INATU)
  1552. IF (IERR.NE.0) THEN
  1553. write(ioimp,*) ' Probleme apres NOMATE'
  1554. KERRE=251
  1555. GOTO 99
  1556. ENDIF
  1557. C Modele VISCO_EXTERNE : On recupere IVIEX stocke dans INATU
  1558. IF (LMEVIX) THEN
  1559. IVIEX = -2 - INATU
  1560. INATU = -2
  1561. ENDIF
  1562. IMODEL.CMATEE = CMATE
  1563. IMODEL.IMATEE = IMATE
  1564. IMODEL.INATUU = INATU
  1565. IMODEL.IDERIV = JDERIV
  1566. C +--------------------------------------------------------------------+
  1567. C | Remplissage des couples TYMODE/IVAMOD |
  1568. C +--------------------------------------------------------------------+
  1569. IF (LESFOR(1).EQ.'THERMIQUE ') THEN
  1570. IF (IRAYE.NE.0) THEN
  1571. IF (ICAVIT.NE.0) THEN
  1572. TYMODE(1)='ENTIER'
  1573. IVAMOD(1)=NBGA
  1574. TYMODE(2)='ENTIER'
  1575. IVAMOD(2)=NBDANG
  1576. IF (ISYME.EQ.1) THEN
  1577. TYMODE(3)='POINT'
  1578. TYMODE(4)='POINT'
  1579. IF(IDIM.EQ.3)TYMODE(5)='POINT'
  1580. IVAMOD(3)=IPP1
  1581. IVAMOD(4)=IPP2
  1582. IF(IDIM.EQ.3)IVAMOD(5)=IPP3
  1583. ENDIF
  1584. ELSE IF(IFACAF.NE.0) THEN
  1585. TYMODE(1)='MAILLAGE'
  1586. IVAMOD(1)= IPFAC1
  1587. TYMODE(2)='MAILLAGE'
  1588. IVAMOD(2)= IPFAC2
  1589. TYMODE(3)='MAILLAGE'
  1590. IVAMOD(3)= IPFAC3
  1591. TYMODE(4)='MMODEL'
  1592. IVAMOD(4)= IMOCO
  1593. ENDIF
  1594. ENDIF
  1595. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1596. ELSE IF (LESFOR(1).EQ.'MECANIQUE ') THEN
  1597. IF (LESPRO(2)(1:8).EQ.'MODAL '.AND.IPTBMO.GT.0) THEN
  1598. TYMODE(1) = 'TABLE'
  1599. IVAMOD(1) = IPTBMO
  1600. IF (IPMOD3.GT.0) THEN
  1601. NOBMOD = IVAMOD(/1)
  1602. TYMODE(NOBMOD) = 'MMODEL '
  1603. IVAMOD(NOBMOD) = IPMOD3
  1604. ENDIF
  1605. ELSE IF (JLMOT1.GT.0) THEN
  1606. IVAMOD(1) = JLMOT1
  1607. IVAMOD(2) = JLMOT2
  1608. TYMODE(1) = 'LISTMOTS'
  1609. TYMODE(2) = 'LISTMOTS'
  1610. LCVAR = JLMOT1
  1611. LCMAT = JLMOT2
  1612. ELSE IF (LMOEXT) THEN
  1613. IF (LMOLOI.GT.0) THEN
  1614. C
  1615. C Indicateur 'LOIEXT' pour retrouver ses petits
  1616. CALL POSCHA('LOIEXT ',I_POS)
  1617. TYMODE(1)='MOT '
  1618. IVAMOD(1)= I_POS
  1619. C
  1620. C Pointeur vers la loi (donne par PTRLOI)
  1621. TYMODE(2)='ENTIER '
  1622. IVAMOD(2)= LMOPTR
  1623. C
  1624. C LMOLIB : Nom de la bibliotheque (sans chemin et extension)
  1625. CALL POSCHA(LMOLIB(1:LMOLGB),I_POS)
  1626. TYMODE(3)='MOT '
  1627. IVAMOD(3)= I_POS
  1628. C
  1629. C LMOFCT : Nom de la fonction (dans la bibliotheque)
  1630. CALL POSCHA(LMOFCT(1:LMOLGT),I_POS)
  1631. TYMODE(4)='MOT '
  1632. IVAMOD(4)= I_POS
  1633. ENDIF
  1634.  
  1635. IF (LMEVIX) THEN
  1636. IMODEL.TYMODE(NOBMOD) = 'IVIEX '
  1637. IMODEL.IVAMOD(NOBMOD) = IVIEX
  1638. ENDIF
  1639. ENDIF
  1640. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1641. ELSE IF (LESFOR(1).EQ.'CONTACT ') THEN
  1642. TYMODE(1)='MAILLAGE'
  1643. IVAMOD(1)=IPGEO1
  1644. TYMODE(2)='MAILLAGE'
  1645. IVAMOD(2)=IPGEO2
  1646. TYMODE(3)='ENTIER'
  1647. IVAMOD(3)=ITCO
  1648. IF (NOBMOD.EQ.4) THEN
  1649. TYMODE(4)='RIGIDITE'
  1650. IVAMOD(4)=IPRIG
  1651. ENDIF
  1652. IF(ITCO.EQ.3) THEN
  1653. SEGINI,IMODE1
  1654. MMODE2.KMODEL(IM)=IMODE1
  1655. IMODE1.IMAMOD=IPGEOY
  1656. IMODE1.TYMODE(1)='MAILLAGE'
  1657. IMODE1.IVAMOD(1)=IPGEO2
  1658. IMODE1.TYMODE(2)='MAILLAGE'
  1659. IMODE1.IVAMOD(2)=IPGEO1
  1660. IMODE1.TYMODE(3)='ENTIER'
  1661. IMODE1.IVAMOD(3)=1
  1662. IF (NOBMOD.EQ.4) THEN
  1663. IMODE1.TYMODE(4)='RIGIDITE'
  1664. IMODE1.IVAMOD(4)=IPRIG
  1665. ENDIF
  1666. ENDIF
  1667. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1668. ELSE IF (LESFOR(1).EQ.'NAVIER_STOKES ') THEN
  1669. IF (NOBMOD.GT.0) THEN
  1670. TYMODE(1) = 'LISTMOTS'
  1671. IVAMOD(1) = OPNLIN
  1672. ENDIF
  1673. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1674. ELSE IF (LESFOR(1).EQ.'LIAISON ') THEN
  1675. if (klcon.gt.0) THEN
  1676. do i = 1, klcon
  1677. if (tlicon(i).eq.6) TYMODE(noblia+i) = 'CONDINFE'
  1678. if (tlicon(i).eq.7) TYMODE(noblia+i) = 'CONDSUPE'
  1679. IVAMOD(noblia+i) = mlicon(i)
  1680. enddo
  1681. ENDIF
  1682. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1683. ELSE IF (LESFOR(1).EQ.'MELANGE ') THEN
  1684. IF (IPMMEL.GT.0) THEN
  1685. MMODE1 = IPMMEL
  1686. N1MEL = MMODE1.KMODEL(/1)
  1687. KBMOD = 0
  1688. DO I = 1,N1MEL
  1689. IMODE1 = MMODE1.KMODEL(I)
  1690. IF (IMODE1.IMAMOD.EQ.IMAMOD) THEN
  1691. IF (KBMOD.EQ.0) THEN
  1692. IMODE2 = IMODE1
  1693. ELSE
  1694. IF (IMODE1.FORMOD(1).NE.IMODE2.FORMOD(1).OR.
  1695. & IMODE1.IMATEE.NE.IMODE2.IMATEE) GOTO 117
  1696. ENDIF
  1697. KBMOD = KBMOD + 1
  1698. TYMODE(KBMOD) = 'IMODEL'
  1699. IVAMOD(KBMOD) = IMODE1
  1700. ENDIF
  1701. 117 CONTINUE
  1702. ENDDO
  1703. C
  1704. IF (KBMOD.EQ.0) THEN
  1705. CALL ERREUR(21)
  1706. RETURN
  1707. ENDIF
  1708. C
  1709. IF (KBMOD.NE.N1MEL) THEN
  1710. NOBMOD = KBMOD
  1711. SEGADJ,IMODEL
  1712. ENDIF
  1713. C
  1714. ENDIF
  1715. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1716. ELSE IF (LESFOR(1).EQ.'DIFFUSION ') THEN
  1717. JGN = LOCOMP
  1718. JGM = 2
  1719. SEGINI,MLMOT1
  1720. TYMODE(1)='LISTMOTS'
  1721. IVAMOD(1)=iplrdi
  1722. IF (LMOLOI.GT.0) THEN
  1723. C Indicateur 'LOIEXT' pour retrouver ses petits
  1724. CALL POSCHA('LOIEXT ',I_POS)
  1725. TYMODE(2)='MOT '
  1726. IVAMOD(2)= I_POS
  1727.  
  1728. C Pointeur vers la loi (donne par PTRLOI)
  1729. TYMODE(3)='ENTIER '
  1730. IVAMOD(3)= LMOPTR
  1731.  
  1732. C LMOLIB : Nom de la bibliotheque (sans chemin et extension)
  1733. CALL POSCHA(LMOLIB(1:LMOLGB),I_POS)
  1734. TYMODE(4)='MOT '
  1735. IVAMOD(4)= I_POS
  1736.  
  1737. C LMOFCT : Nom de la fonction (dans la bibliotheque)
  1738. CALL POSCHA(LMOFCT(1:LMOLGT),I_POS)
  1739. TYMODE(5)='MOT '
  1740. IVAMOD(5)= I_POS
  1741. ENDIF
  1742. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1743. ELSE IF (LESFOR(1).EQ.'METALLURGIE ') THEN
  1744. C LCVAR : les noms des phases
  1745. IVAMOD(1) = LCVAR
  1746. TYMODE(1) = 'LISTMOTS'
  1747. C IREACT : les noms des reactifs
  1748. IVAMOD(2) = ireact
  1749. TYMODE(2) = 'LISTMOTS'
  1750. C IPRODU : les noms des produits
  1751. IVAMOD(3) = iprodu
  1752. TYMODE(3) = 'LISTMOTS'
  1753. C LCMAT : les noms des types de reactions
  1754. IVAMOD(4) = LCMAT
  1755. TYMODE(4) = 'LISTMOTS'
  1756. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1757. ELSE IF (LESFOR(1).EQ.'CHANGEMENT_PHASE') THEN
  1758. C
  1759. C Maillage support de mult. de Lagrange IPGEO2 & IPGEO3
  1760. CALL IMPP1(IPT1,IPGEO2,IPGEO3,LESPRO(1))
  1761. C
  1762. C IPRIDU : les noms des variables primales et duales
  1763. IVAMOD(1) = IPRIDU
  1764. TYMODE(1) ='LISTMOTS'
  1765. IVAMOD(2) = IPGEO2
  1766. TYMODE(2) ='MAILLAGE'
  1767. IF (LESPRO(1).EQ.'SOLUBILITE ') THEN
  1768. IVAMOD(3) = IPGEO3
  1769. TYMODE(3) ='MAILLAGE'
  1770. ENDIF
  1771. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1772. ELSE IF (LESFOR(1).EQ.'CONTRAINTE ') THEN
  1773. TYMODE(1)='ENTIER'
  1774. IVAMOD(1)=LACTR
  1775. TYMODE(2)='MAILLAGE'
  1776. IVAMOD(2)=IPGEOC
  1777. IF (LACTR.EQ.1) THEN
  1778. TYMODE(3)='POINT'
  1779. IVAMOD(3)=IP1
  1780. IF (IDIM.EQ.3) THEN
  1781. TYMODE(4)='POINT'
  1782. IVAMOD(4)=IP2
  1783. ENDIF
  1784. ELSE IF (LACTR.EQ.2) THEN
  1785. TYMODE(3)='POINT'
  1786. IVAMOD(3)=IP1
  1787. ENDIF
  1788. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1789. ENDIF
  1790.  
  1791. C=DEB==== FORMULATION HHO ==== Remplissage de donnees ==================
  1792. C NEFMOD = HHO_NUM_ELEMENT pour tous les elements =====
  1793. IF (loHHO) THEN
  1794. CALL HHOPRM(chaHHO,imodel,nobHHO,iplHHO,KERRE)
  1795. IF (KERRE.NE.0) GOTO 99
  1796. imodel.NEFMOD = HHO_NUM_ELEMENT
  1797. GOTO 101
  1798. ENDIF
  1799. C=FIN==== FORMULATION HHO ==============================================
  1800. C +--------------------------------------------------------------------+
  1801. C | Determination de la valeur de NEFMOD pour IMODEL |
  1802. C +--------------------------------------------------------------------+
  1803. IF (ITYP1.EQ.48) THEN
  1804. C NEPAPA = si EF specifique demande -> on utilise ses inconnues
  1805. NEPAPA = 0
  1806. IMODEL.NEFMOD = 259
  1807. IF (ITEF.GT.0) THEN
  1808. DO i=1,ITEF
  1809. CALL PLACE(NOMTP,LNOMTP,MELE,LESTEF(i))
  1810. IF (MELE.NE.0) NEPAPA = MELE
  1811. ENDDO
  1812. ENDIF
  1813. IF (NEPAPA.EQ.0) THEN
  1814. c 2D : on choisit les inconnues du QUA4 pour toute formulation
  1815. IF (IDIM.EQ.2) THEN
  1816. NEPAPA=8
  1817. c 3D : on choisit les inconnues du CUB8 pour toute formulation
  1818. ELSE IF (IDIM.EQ.3) THEN
  1819. NEPAPA=14
  1820. ELSE
  1821. CALL ERREUR(610)
  1822. RETURN
  1823. ENDIF
  1824. ENDIF
  1825. GOTO 101
  1826. ENDIF
  1827. C
  1828. NEFMOD = 0
  1829. IF (ITEF.NE.0) THEN
  1830. DO i=1,ITEF
  1831. IF (LONAVI) THEN
  1832. CALL MODE25(MDISC,ITYP1,MELE)
  1833. ELSE
  1834. IF (LOBBAR) CALL MODE20(ITYP1,LESTEF(I))
  1835. CALL PLACE(NOMTP,LNOMTP,MELE,LESTEF(i))
  1836. ENDIF
  1837. IF (MELE.EQ.0) GOTO 9
  1838. IF (LONAVI) GOTO 6
  1839. MEGE=NUMGEO(MELE)
  1840. IF (MEGE.EQ.0) GOTO 9
  1841. IF (MEGE.EQ.ITYP1) GOTO 6
  1842. c kich cas du POI1
  1843. IF (ITYP1.EQ.1) GOTO 6
  1844. ENDDO
  1845. C
  1846. 9 CONTINUE
  1847. KERRE=16
  1848. GOTO 99
  1849. C
  1850. 6 CONTINUE
  1851. NEFMOD=MELE
  1852. C Cas particulier pour les elements polygonaux
  1853. IF (ITYP1.EQ.32) NEFMOD=MELE+NBNN-3
  1854. C Affectation des elements finis de maniere automatique
  1855. ELSE
  1856. C Formulation DARCY
  1857. IF (LESFOR(1).EQ.'DARCY') THEN
  1858. IF (ITYP1.EQ. 3) NEFMOD=143
  1859. C IF (ITYP1.EQ. 4) NEFMOD=99
  1860. C IF (ITYP1.EQ. 8) NEFMOD=100
  1861. C IF (ITYP1.EQ.23) NEFMOD=101
  1862. C IF (ITYP1.EQ.16) NEFMOD=102
  1863. C IF (ITYP1.EQ.14) NEFMOD=103
  1864. IF (ITYP1.EQ. 7) NEFMOD=99
  1865. IF (ITYP1.EQ.11) NEFMOD=100
  1866. IF (ITYP1.EQ.35) NEFMOD=101
  1867. IF (ITYP1.EQ.34) NEFMOD=102
  1868. IF (ITYP1.EQ.33) NEFMOD=103
  1869. C Formulation CONTACT
  1870. ELSE IF (LESFOR(1).EQ.'CONTACT') THEN
  1871. NEFMOD=ITYP1
  1872. IF (ITCO.EQ.0) THEN
  1873. IF (IDIM.EQ.2) NEFMOD=261
  1874. IF (IDIM.EQ.3) NEFMOD=262
  1875. ELSE IF (IFRT.EQ.1) THEN
  1876. IF (IDIM.EQ.2) NEFMOD=107
  1877. IF (IDIM.EQ.3) NEFMOD=165
  1878. ENDIF
  1879. C Formulation POREUX
  1880. ELSE IF (LESFOR(1).EQ.'POREUX') THEN
  1881. IF (ITYP1.EQ. 6) NEFMOD=79
  1882. IF (ITYP1.EQ.10) NEFMOD=80
  1883. IF (ITYP1.EQ.15) NEFMOD=81
  1884. IF (ITYP1.EQ.24) NEFMOD=82
  1885. IF (ITYP1.EQ.17) NEFMOD=83
  1886. IF (ITYP1.EQ.29) NEFMOD=108
  1887. IF (ITYP1.EQ.30) NEFMOD=109
  1888. IF (ITYP1.EQ.31) NEFMOD=110
  1889. C Autres formulations
  1890. ELSE
  1891. CALL PLACE(MOTEF,NBTEF,NELE,NOMS(ITYP1))
  1892. IF (NELE.EQ.0) GOTO 8
  1893. CALL PLACE(NOMTP,LNOMTP,MELE,MOTEF(NELE))
  1894. IF (MELE.NE.0) GOTO 7
  1895. C
  1896. 8 CONTINUE
  1897. C Cas particulier dimension 1 : [M-T]1D[2-3]
  1898. IF (IDIM.EQ.1) THEN
  1899. DO IE=1,NBTEF
  1900. CALL PLACE(NOMTP,LNOMTP,MELE,MOTEF(IE))
  1901. MEGE=NUMGEO(MELE)
  1902. IF (MEGE.EQ.ITYP1) GOTO 7
  1903. ENDDO
  1904. ENDIF
  1905. C
  1906. KERRE=16
  1907. GOTO 99
  1908. C
  1909. 7 CONTINUE
  1910. NEFMOD=MELE
  1911. ENDIF
  1912. ENDIF
  1913. C
  1914. IF (NEFMOD.EQ.0) THEN
  1915. KERRE=16
  1916. GOTO 99
  1917. ENDIF
  1918. C +--------------------------------------------------------------------+
  1919. C | Verifications supplementaires entre type d'EF et formulation |
  1920. C +--------------------------------------------------------------------+
  1921. 101 CONTINUE
  1922. MFR = NUMMFR(NEFMOD)
  1923. CC WRITE(ioimp,*)' ITYP1 =',ITYP1,NEFMOD,MFR
  1924. C
  1925. IF (LESFOR(1).EQ.'THERMIQUE ') THEN
  1926. IF (IPHAS.NE.0) THEN
  1927. c test que les elements sont lineaires
  1928. IPT4 = IMODEL.IMAMOD
  1929. ITT = IPT4.ITYPEL
  1930. IF (KDEGRE(ITT) .GT. 2) THEN
  1931. KERRE=982
  1932. GOTO 99
  1933. ENDIF
  1934. ENDIF
  1935.  
  1936. ELSE IF ((LESFOR(1).EQ.'MECANIQUE ') .OR.
  1937. & (LESFOR(1).EQ.'POREUX ')) THEN
  1938. C
  1939. C Elements polygonaux
  1940. IF ((ITYP1.EQ.32).AND.(NBNN.GT.14)) THEN
  1941. INTERR(1) = 32
  1942. KERRE=52
  1943. GOTO 99
  1944. ENDIF
  1945. C
  1946. C Cas du materiau unidirectionnel
  1947. IF (IMATE.EQ.4) THEN
  1948. C Cas des cerces : sans interet !
  1949. IF (MFR.EQ.27) THEN
  1950. KERRE=251
  1951. GOTO 99
  1952. ENDIF
  1953. C Cas de la plasticite
  1954. IF (INATU.NE.0) THEN
  1955. C
  1956. C Comportement ACIER_UNI OK si massif bidim ou coque tridim
  1957. IF (INATU.EQ.40)THEN
  1958. IF ((MFR.NE.1.OR.IFOUR.GT.0).AND.
  1959. & ((MFR.NE.3.AND.MFR.NE.9).OR.IFOUR.NE.2)) THEN
  1960. KERRE=251
  1961. GOTO 99
  1962. ENDIF
  1963. C Autres comportements OK si COQ2 et massif
  1964. ELSE IF (NEFMOD.NE.44.AND.MFR.NE.1) THEN
  1965. KERRE=251
  1966. GOTO 99
  1967. ENDIF
  1968. ENDIF
  1969. ENDIF
  1970. C
  1971. C Cas du materiau 'ZONE_COHESIVE'
  1972. IF ((IMATE.EQ.12).AND.(MFR.NE.77)) THEN
  1973. KERRE=251
  1974. GOTO 99
  1975. ENDIF
  1976. C
  1977. C Cas du modele section : on n'autorise pour le moment que TIMO
  1978. IF (CMATE.EQ.'SECTION'.AND.NEFMOD.NE.84) THEN
  1979. KERRE=251
  1980. GOTO 99
  1981. ENDIF
  1982. C
  1983. C Comportement GURSON OK en 3D, axisymetrique ou deformations planes
  1984. IF (INATU.EQ.38) THEN
  1985. IF ( IFOUR.NE.0 .AND. IFOUR.NE.2 .AND. IFOUR.NE.-1 ) THEN
  1986. MOTERR(1:8)='GURSON'
  1987. MOTERR(9:16)='MECANIQU'
  1988. INTERR(1) = IFOUR
  1989. KERRE=81
  1990. GOTO 99
  1991. ENDIF
  1992. ENDIF
  1993. C
  1994. C Comportement ISS_GRANGE OK qu'en 3D
  1995. IF (INATU.EQ.151 .AND. IFOUR.NE.2) THEN
  1996. INTERR(1) = IFOUR
  1997. KERRE=709
  1998. GOTO 99
  1999. ENDIF
  2000. C
  2001. C Le modele RUP_THER n'est utilisable qu'en 3D
  2002. IF (INATU.EQ.152 .AND. IFOUR.NE.2) THEN
  2003. INTERR(1) = IFOUR
  2004. KERRE=709
  2005. GOTO 99
  2006. ENDIF
  2007. C
  2008. C Le modele COULOMB n'est utilisable qu'en 3D avec les éléments JOI1
  2009. IF (INATU.EQ.34 .AND. IFOUR.NE.2 .AND. MFR.EQ.75) THEN
  2010. INTERR(1) = IFOUR
  2011. KERRE=709
  2012. GOTO 99
  2013. ENDIF
  2014. C
  2015. C.. Restrictions en formulation 'MECANIQUE' avec une loi de
  2016. C comportement non lineaire externe
  2017. C Rappel : LMOEXT exprime la condition (NFOR.EQ.1) ET
  2018. C (LESFOR(1).EQ.'MECANIQUE') ET (loi non lineaire externe)
  2019. IF ( LMOEXT ) THEN
  2020. C En formulation 'MECANIQUE', les lois non lineaires externes
  2021. C n'autorisent qu'une seule composante de temperature
  2022. C => incompatibilite avec des modeles de coques n'ayant pas
  2023. C de points d'integration dans l'epaisseur (trois composantes
  2024. C dans ce cas, 'TINF', 'T ' et 'TSUP')
  2025. C Le test ci-dessous est coherent avec celui de IDTEMP.
  2026. IF ( (MFR.EQ.3.OR.MFR.EQ.5.OR.MFR.EQ.9).AND.
  2027. & (NGINT.EQ.0) ) THEN
  2028. KERRE=951
  2029. GOTO 99
  2030. ENDIF
  2031. C Les lois de la famille 'VISCO_EXTERNE' ne s'appliquent pour
  2032. C l'instant qu'aux elements massifs, avec option de calcul 3D
  2033. C Et restriction pour l'instant a 'VISCO_EXTERNE' 'GENERAL'
  2034. IF ( LMEVIX ) THEN
  2035. IF ((MFR.NE.1.AND.MFR.NE.31) .OR. IFOUR.NE.2) THEN
  2036. KERRE = 950
  2037. ELSE IF ( IVIEX.NE.1 ) THEN
  2038. KERRE = 958
  2039. ELSE
  2040. KERRE = 0
  2041. ENDIF
  2042. IF (KERRE.NE.0) GOTO 99
  2043. ENDIF
  2044. ENDIF
  2045. C
  2046. ELSE IF (LESFOR(1).EQ.'DIFFUSION ') THEN
  2047. IF (IFOUR.EQ.2 .AND. NEFMOD.GE.4 .AND. NEFMOD.LT.11) THEN
  2048. KERRE=16
  2049. GOTO 99
  2050. ENDIF
  2051. IF (MFR.NE.1 .AND. MFR.NE.3 .AND. MFR.NE.5 .AND.
  2052. & MFR.NE.7 .AND. MFR.NE.9 .AND. MFR.NE.73 .AND.
  2053. & MFR.NE.27 .AND. MFR.NE.75 .AND. MFR.NE.79 ) THEN
  2054. KERRE=16
  2055. GOTO 99
  2056. ENDIF
  2057. C
  2058. ENDIF
  2059. C +--------------------------------------------------------------------+
  2060. C | Remplissage INFMOD et INFELE du IM-eme modele elementaire IMODEL |
  2061. C +--------------------------------------------------------------------+
  2062. IF (NGINT.NE.0.AND.NEFMOD.NE.28) THEN
  2063. KERRE=608
  2064. GOTO 99
  2065. ENDIF
  2066. INFMOD(1) = NGINT
  2067.  
  2068. C (fdp) Pour les elements JOI1 seulement, on stocke -1*ILIE dans INFMOD(9)
  2069. IF (ILIE.NE.0) THEN
  2070. IF (NEFMOD.NE.265) THEN
  2071. KERRE=19
  2072. GOTO 99
  2073. ENDIF
  2074. INFMOD(9) = -1 * ILIE
  2075. ENDIF
  2076. * AM cas non-local
  2077. IF (INLOC.NE.0) THEN
  2078. INFMOD(13) = -1*INLOC
  2079. INFMOD(14) = LULVIA
  2080. ENDIF
  2081.  
  2082. C Initialisation du infele et des segments d'integration
  2083. INFELE(2) = NGINT
  2084. INFELE(3) = NGMAS
  2085. INFELE(4) = NGCON
  2086. INFELE(6) = NGRIG
  2087.  
  2088. C Cas particulier des relations de conformite pour les SURE
  2089. IF (ITYP1.EQ.48) THEN
  2090. IMODEL.INFELE( 1) = NEFMOD
  2091. IMODEL.INFELE(13) = NUMMFR(NEPAPA)
  2092. IMODEL.INFELE(14) = 48
  2093. ENDIF
  2094. C
  2095. CALL PRQUOI(IMODEL)
  2096. IF (IERR.NE.0) RETURN
  2097. C +--------------------------------------------------------------------+
  2098. C | Initialisation des nomid (NOMS des composantes) |
  2099. C +--------------------------------------------------------------------+
  2100. C Cas particulier des relations de conformite pour les SURE
  2101. c on recupere les noms de composantes 'DEPLACEM' et 'FORCES'
  2102. c des elements parents (NEPAPA => QUA4 ou CUB8)
  2103. IF (ITYP1.EQ.48) THEN
  2104. NEPOLD=IMODEL.NEFMOD
  2105. IMODEL.NEFMOD=NEPAPA
  2106. ENDIF
  2107. CALL INOMID(IMODEL,LCVAR,LCMAT,LCMAF,LCPAR)
  2108. IF (IERR.NE.0) RETURN
  2109. IF (ITYP1.EQ.48) THEN
  2110. IMODEL.NEFMOD=NEPOLD
  2111. ENDIF
  2112.  
  2113. C Test CLEMENT entre INFELE(16) et la dimension du NOMID des DEFORMATIONS
  2114. C ATTENTION (celui des CONTRAINTES peut contenir une info en plus sur les MODES en fourier...)
  2115. nomid = imodel.LNOMID(5)
  2116. IF (nomid.GT.0) THEN
  2117. imodel.INFELE(16) = nomid.LESOBL(/2) + nomid.LESFAC(/2)
  2118. ELSE
  2119. imodel.INFELE(16) = 0
  2120. ENDIF
  2121. C +--------------------------------------------------------------------+
  2122. C | Quelques verifications supplementaires |
  2123. C +--------------------------------------------------------------------+
  2124.  
  2125. C=DEB==== FORMULATION HHO ==== Verification des noms primales/duales====
  2126. IF (loHHO) THEN
  2127. nomid1 = imodel.LNOMID(1)
  2128. nomid2 = imodel.LNOMID(2)
  2129. c* SEGACT,nomid1,nomid2
  2130. n_z1 = nomid1.LESOBL(/2)
  2131. n_z2 = nomid2.LESOBL(/2)
  2132. IF (n_z1.EQ.0 .OR. n_z1.NE.n_z2) THEN
  2133. write(ioimp,*) 'MODELI HHO: PRIMAL/DUAL number incorrect'
  2134. CALL ERREUR(5)
  2135. RETURN
  2136. END IF
  2137. DO i = 1, n_z1
  2138. CALL VERMDI(nomid1.LESOBL(i),nomid2.LESOBL(i))
  2139. IF (IERR.NE.0) RETURN
  2140. END DO
  2141. n_z1 = nomid1.LESFAC(/2)
  2142. n_z2 = nomid2.LESFAC(/2)
  2143. IF (n_z1.NE.0 .OR. n_z2.NE.0) THEN
  2144. write(ioimp,*) 'MODELI HHO: LESFAC incorrect'
  2145. CALL ERREUR(5)
  2146. RETURN
  2147. END IF
  2148. END IF
  2149. C=FIN==== FORMULATION HHO ==============================================
  2150.  
  2151. mfr2 = INFELE(13)
  2152. IF (FORMOD(1).EQ.'CONTRAINTE') mfr2 = 0
  2153. IPMO = IMODEL
  2154. CALL COTEMO(IPMO,MFR2)
  2155. IF (IERR.NE.0) RETURN
  2156. C +--------------------------------------------------------------------+
  2157. C | Point support pour les modes en defo. GENE (IFOUR=-3, 7 a 11, 14) |
  2158. C | Ce point n'est pris en compte que si cela est necessaire |
  2159. C +--------------------------------------------------------------------+
  2160. CALL INFDPG(mfr2,IFOUR,LOGRE,ndpge)
  2161. IF (LOGRE) THEN
  2162. C Erreur si ce point support n'est pas fourni avec le mot-cle GENE.
  2163. IF (IPTGEN.EQ.0) THEN
  2164. CALL ERREUR(925)
  2165. RETURN
  2166. ENDIF
  2167. imodel.IPDPGE = IPTGEN
  2168. ELSE
  2169. IF (IPTGEN.NE.0) THEN
  2170. write(ioimp,*) 'Mot-cle GENE + Point ignores...'
  2171. ENDIF
  2172. IMODEL.IPDPGE = 0
  2173. ENDIF
  2174.  
  2175. SEGACT,IMODEL*NOMOD
  2176.  
  2177. 10 CONTINUE
  2178. C ****************************************************************
  2179. C Fin de la boucle (10) sur les maillages elementaires de IPGEOM
  2180. C ****************************************************************
  2181. C Contact symetrique : tout mettre dans un meme modele
  2182. n1o = kmodel(/1)
  2183. n1 = n1o
  2184. do i = 1, n1o
  2185. imode1 = mmode2.kmodel(i)
  2186. if (imode1.ne.0) then
  2187. n1 = n1+1
  2188. endif
  2189. enddo
  2190. * On a trouve du contact :
  2191. if (n1.gt.n1o) then
  2192. segadj mmodel
  2193. nsou1 = n1
  2194. do i = 1, n1o
  2195. imode1 = mmode2.kmodel(i)
  2196. if (imode1.ne.0) then
  2197. kmodel(n1)=imode1
  2198. n1=n1-1
  2199. imodel=kmodel(i)
  2200. imode1.nefmod=nefmod
  2201. imode1.conmod=conmod
  2202. do ip=1,infmod(/1)
  2203. imode1.infmod(ip)=infmod(ip)
  2204. enddo
  2205. do ip=1,formod(/2)
  2206. imode1.formod(ip)=formod(ip)
  2207. enddo
  2208. do ip=1,matmod(/2)
  2209. imode1.matmod(ip)=matmod(ip)
  2210. enddo
  2211. imode1.ipdpge=ipdpge
  2212. imode1.cmatee=cmatee
  2213. imode1.imatee=imatee
  2214. imode1.inatuu=inatuu
  2215. imode1.ideriv=ideriv
  2216. do ip=1,lnomid(/1)
  2217. imode1.lnomid(ip)=lnomid(ip)
  2218. enddo
  2219. do ip=1,infele(/1)
  2220. imode1.infele(ip)=infele(ip)
  2221. enddo
  2222. do ip=1,tymode(/2)
  2223. imode1.tymode(ip)=tymode(ip)
  2224. enddo
  2225. endif
  2226. enddo
  2227. n1 = nsou1
  2228. endif
  2229. segsup mmode2
  2230.  
  2231. IPMODE=MMODEL
  2232.  
  2233. C TABLE DE MODES --------------------------------
  2234. IF (IPTBDM.GT.0) THEN
  2235. MMODEL = IPMODE
  2236. imodel = kmodel(1)
  2237. segact imodel*mod
  2238. call dimen7(iptbdm,idimen)
  2239. NBNN = 1
  2240. NBELEM = idimen - 2
  2241. NBSOUS = 0
  2242. NBREF = 0
  2243. SEGINI IPT8
  2244. IPT8.ITYPEL = 1
  2245.  
  2246. IKM = 0
  2247. DO ik = 1,NBELEM
  2248. IKM = IKM + 1
  2249. IVALIN=IKM
  2250. XVALIN=REAL(0.D0)
  2251. LOGIN=.TRUE.
  2252. IOBIN=0
  2253. TAPIND='ENTIER '
  2254. CHARIN=' '
  2255. TYPOBJ='TABLE'
  2256. CALL ACCTAB(IPTBDM,TAPIND,IVALIN,XVALIN,CHARIN,LOGIN,IOBIN,
  2257. & TYPOBJ,IVALRE,XVALRE,CHARRE,LOGRE,IOBRE)
  2258. IF (IERR.NE.0) RETURN
  2259. IPTMOD = IOBRE
  2260. IVALIN=0
  2261. XVALIN=REAL(0.D0)
  2262. LOGIN=.TRUE.
  2263. IOBIN=0
  2264. TAPIND='MOT '
  2265. TYPOBJ='POINT'
  2266. CALL ACCTAB(IPTMOD,TAPIND,IVALIN,XVALIN,'POINT_REPERE',LOGIN,
  2267. & IOBIN,TYPOBJ,IVALRE,XVALRE,CHARRE,LOGRE,IOBRE)
  2268. IF (IERR.NE.0) RETURN
  2269.  
  2270. ipt8.num(1,ikm) = iobre
  2271. ENDDO
  2272.  
  2273. NBELEM = IKM
  2274. segadj IPT8
  2275. imamod = ipt8
  2276.  
  2277. ENDIF
  2278. C fin TABLE DE MODES --------------------------------
  2279. C en cas de modele STAT ddddddddddddddddddddddddddddddddddddddddddd
  2280. 91 CONTINUE
  2281. IF (IPTABS.GT.0.OR.IPMOD1.GT.0) THEN
  2282. c verification formulation
  2283. IF (ipmod1.gt.0) THEN
  2284. CALL ACTOBJ('MMODEL',IPMOD1,1)
  2285. IF (IERR.NE.0) RETURN
  2286. mmode1 = ipmod1
  2287. imode1 = mmode1.kmodel(1)
  2288. do jj=1,NFOR
  2289. if (imode1.formod(jj).ne.LESFOR(JJ)) then
  2290. call erreur(21)
  2291. return
  2292. endif
  2293. enddo
  2294. ENDIF
  2295. c duplique le modele cree
  2296. if (ipmod1.le.0) ipmod1 = ipmode
  2297. C modele : pointer le modele elementaire approprie
  2298. IF (iptabm.eq.0) THEN
  2299. MMODE1 = ipmod1
  2300. DO im = 1,kmodel(/1)
  2301. imodel = kmodel(im)
  2302. segact imodel*mod
  2303. nobmod = ivamod(/1)
  2304. nobmod = nobmod + 1
  2305. nfor = formod(/2)
  2306. nmat = matmod(/2)
  2307. mn3 = infmod(/1)
  2308. segadj imodel
  2309. kbmod = 0
  2310. do im1 = 1,MMODE1.KMODEL(/1)
  2311. imode1 = mmode1.kmodel(im1)
  2312. imomo = imode1
  2313. lostat = .true.
  2314.  
  2315. C criteres de verif assez sommaires ...
  2316. if (imode1.nefmod.eq.nefmod.and.
  2317. & imode1.imamod.ne.imamod.and.
  2318. & (imode1.matmod(/2).eq.matmod(/2).or.
  2319. & imode1.matmod(/2).eq.(matmod(/2)-1)).and.
  2320. & imode1.formod(/2).eq.formod(/2)) then
  2321. do lmo = 1,formod(/2)
  2322. if (formod(lmo).ne.imode1.formod(lmo)) lostat = .false.
  2323. enddo
  2324. do lmo = 1,imode1.matmod(/2)
  2325. if (matmod(lmo).ne.imode1.matmod(lmo)) lostat = .false.
  2326. enddo
  2327. else
  2328. lostat = .false.
  2329. endif
  2330. if (lostat.and.formod(1).eq.'MELANGE') then
  2331. C verifs supplementaires : les modeles de ivamod sont ils bien construi
  2332. lomela = .true.
  2333. if ((nobmod - imode1.ivamod(/1)).gt.1) lomela = .false.
  2334. if (imode1.ivamod(/1).gt.0) then
  2335. do ivm3 = 1,imode1.ivamod(/1)
  2336. IF(imode1.tymode(ivm3).eq.'IMODEL') THEN
  2337. imode3 = imode1.ivamod(ivm3)
  2338. segact imode3
  2339. ENDIF
  2340. enddo
  2341. endif
  2342. IF (nobmod.gt.1) THEN
  2343. do ivm1 = 1,(nobmod-1)
  2344. if (tymode(ivm1).eq.'IMODEL ') then
  2345. imode2 = ivamod(ivm1)
  2346. segact imode2
  2347. if (imode2.ivamod(/1).ge.1) then
  2348. do ivm2 = 1,imode2.ivamod(/1)
  2349. if (imode2.tymode(ivm2).eq.'IMODEL') then
  2350. imode4 = imode2.ivamod(ivm2)
  2351. segact imode4
  2352. if (imode1.ivamod(/1).ge.1) then
  2353. do ivm3 = 1,imode1.ivamod(/1)
  2354. IF (imode1.tymode(ivm3).eq.'IMODEL') THEN
  2355. imode3 = imode1.ivamod(ivm3)
  2356. lostat = .true.
  2357. C criteres de verif assez faibles ...
  2358. if (imode3.nefmod.eq.imode4.nefmod.and.
  2359. & imode3.imamod.eq.imode4.imamod.and.
  2360. & imode3.matmod(/2).eq.imode4.matmod(/2).and.
  2361. & imode3.conmod(17:24).eq.imode4.conmod(17:24).and.
  2362. & imode3.formod(/2).eq.imode4.formod(/2)) then
  2363. do lmo = 1,imode4.formod(/2)
  2364. if (imode4.formod(lmo).ne.imode3.formod(lmo)) lostat = .false.
  2365. enddo
  2366. do lmo = 1,imode4.matmod(/2)
  2367. if (imode4.matmod(lmo).ne.imode3.matmod(lmo)) lostat = .false.
  2368. enddo
  2369. else
  2370. lostat = .false.
  2371. endif
  2372. if (lostat) goto 75
  2373. ENDIF
  2374. enddo
  2375. else
  2376. lostat = .false.
  2377. endif
  2378. endif
  2379. enddo
  2380. else
  2381. lomela = .false.
  2382. endif
  2383. 75 lomela = lomela.and.lostat
  2384. endif
  2385. enddo
  2386. ENDIF
  2387. lostat = lomela
  2388. do ivm3 = 1,imode1.ivamod(/1)
  2389. c imode1 = imomo
  2390. IF(imode1.tymode(ivm3).eq.'IMODEL') THEN
  2391. imode3 = imode1.ivamod(ivm3)
  2392. ENDIF
  2393. enddo
  2394. endif
  2395. if (lostat) then
  2396. kbmod = kbmod + 1
  2397. tymode(nobmod) = 'IMODEL'
  2398. ivamod(nobmod) = imomo
  2399. goto 79
  2400. endif
  2401. enddo
  2402. C *** ca se passe mal
  2403. if (kbmod.ne.1) then
  2404. write(ioimp,*) ' STATIO EN DEFAUT voir notice ',kbmod,im
  2405. KERRE=251
  2406. GOTO 99
  2407. endif
  2408. C ***
  2409. 79 CONTINUE
  2410. ENDDO
  2411. ENDIF
  2412.  
  2413. C : table : dupliquer modele elementaire et pointer
  2414. if (iptabm.gt.0) then
  2415. call modsta(ipmode,iptabm,ipmod1)
  2416. endif
  2417.  
  2418. ENDIF
  2419. C fin du modele STAT ddddddddddddddddddddddddddddddddddddddddddddddd
  2420.  
  2421. if (plicon.ne.0) segsup,plicon
  2422.  
  2423. C Ecriture de l'objet MODELE cree
  2424. CALL ACTOBJ('MMODEL ',IPMODE,1)
  2425. CALL ECROBJ('MMODEL ',IPMODE)
  2426. RETURN
  2427. C ==================================================================
  2428. C 7- Traitement des erreurs
  2429. C ==================================================================
  2430. 99 CONTINUE
  2431. CALL ERREUR(KERRE)
  2432. C
  2433. DO im = 1, kmodel(/1)
  2434. imodel = kmodel(im)
  2435. IF (imodel.NE.0) SEGSUP,imodel
  2436. ENDDO
  2437. SEGSUP,MMODEL
  2438. if (plicon.ne.0) segsup,plicon
  2439.  
  2440. END
  2441.  
  2442.  
  2443.  
  2444.  
  2445.  
  2446.  

© Cast3M 2003 - Tous droits réservés.
Mentions légales