Télécharger modeli.eso

Retour à la liste

Numérotation des lignes :

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

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