Télécharger modeli.eso

Retour à la liste

Numérotation des lignes :

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

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