Télécharger modeli.eso

Retour à la liste

Numérotation des lignes :

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

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