Télécharger modeli.eso

Retour à la liste

Numérotation des lignes :

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

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