Télécharger modeli.eso

Retour à la liste

Numérotation des lignes :

modeli
  1. C MODELI SOURCE MB234859 26/01/22 21:15:11 12455
  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. write(ioimp,*) 'Formulation HHO --> MECANIQUE uniquement'
  1473. CALL ERREUR(251)
  1474. RETURN
  1475. END IF
  1476. IF ( .NOT. ( IFOMOD.EQ.-1 .AND. IFOUR.NE.-3) ) THEN
  1477. write(ioimp,*) 'Formulation HHO --> 2D PLAN DEFO/CONT'
  1478. c-dbg IF ( .NOT. ( (IFOMOD.EQ.2) .OR.
  1479. c-dbg & (IFOMOD.EQ.-1 .AND. IFOUR.NE.-3) ) ) THEN
  1480. c-dbg write(ioimp,*) 'Formulation HHO --> 2D PLAN DEFO/CONT or 3D'
  1481. CALL ERREUR(251)
  1482. RETURN
  1483. END IF
  1484. C=
  1485. CALL HHOPRE(CHAHHO,IPGEOM,IPLHHO,iret)
  1486. IF (iret.NE.0) THEN
  1487. CALL ERREUR(iret)
  1488. RETURN
  1489. ENDIF
  1490. nobHHO = NOBMOD
  1491. NOBMOD = NOBMOD + MTYHHO
  1492. END IF
  1493. C=FIN==== FORMULATION HHO ==============================================
  1494.  
  1495. N1 = NSOU1
  1496. SEGINI,MMODEL,MMODE2
  1497. IPMODE = MMODEL
  1498. C
  1499. C Par defaut, le nom du constituant est le pointeur sur le MMODEL
  1500. IF (KCONS.EQ.0) WRITE(CONM,FMT='(I16)') IPMODE
  1501. C ==================================================================
  1502. C 6- Creation des modeles elementaires IMODEL
  1503. C ==================================================================
  1504. IPT1 = MELEME
  1505. DO 10 IM = 1, NSOU1
  1506.  
  1507. IF (NSOU.NE.0) IPT1 = MELEME.LISOUS(IM)
  1508. ITYP1 = IPT1.ITYPEL
  1509. NBNN = IPT1.NUM(/1)
  1510. NBEL = IPT1.NUM(/2)
  1511. C +--------------------------------------------------------------------+
  1512. C | Creation du modele elementaire IMODEL |
  1513. C +--------------------------------------------------------------------+
  1514. SEGINI,IMODEL
  1515. MMODEL.KMODEL(IM) = IMODEL
  1516. C +--------------------------------------------------------------------+
  1517. C | Remplissage du IMODEL |
  1518. C +--------------------------------------------------------------------+
  1519. IMODEL.IMAMOD = IPT1
  1520. IMODEL.CONMOD(1:16) = CONM
  1521. IMODEL.CONMOD(17:24) = PHAM
  1522. DO I = 1, NFOR
  1523. IMODEL.FORMOD(I) = LESFOR(I)
  1524. ENDDO
  1525. IF (NMAT.NE.0) THEN
  1526. DO I = 1, NMAT
  1527. IMODEL.MATMOD(I) = LESPRO(I)
  1528. ENDDO
  1529. ENDIF
  1530. C
  1531. C Informations liees au MATERIAU/COMPORTEMENT
  1532. CMATE = ' '
  1533. IMATE = 0
  1534. INATU = 0
  1535. CALL NOMATE(FORMOD,NFOR,MATMOD,NMAT,CMATE,IMATE,INATU)
  1536. IF (IERR.NE.0) THEN
  1537. write(ioimp,*) ' Probleme apres NOMATE'
  1538. KERRE=251
  1539. GOTO 99
  1540. ENDIF
  1541. C Modele VISCO_EXTERNE : On recupere IVIEX stocke dans INATU
  1542. IF (LMEVIX) THEN
  1543. IVIEX = -2 - INATU
  1544. INATU = -2
  1545. ENDIF
  1546. IMODEL.CMATEE = CMATE
  1547. IMODEL.IMATEE = IMATE
  1548. IMODEL.INATUU = INATU
  1549. IMODEL.IDERIV = JDERIV
  1550. C +--------------------------------------------------------------------+
  1551. C | Remplissage des couples TYMODE/IVAMOD |
  1552. C +--------------------------------------------------------------------+
  1553. IF (LESFOR(1).EQ.'THERMIQUE ') THEN
  1554. IF (IRAYE.NE.0) THEN
  1555. IF (ICAVIT.NE.0) THEN
  1556. TYMODE(1)='ENTIER'
  1557. IVAMOD(1)=NBGA
  1558. TYMODE(2)='ENTIER'
  1559. IVAMOD(2)=NBDANG
  1560. IF (ISYME.EQ.1) THEN
  1561. TYMODE(3)='POINT'
  1562. TYMODE(4)='POINT'
  1563. IF(IDIM.EQ.3)TYMODE(5)='POINT'
  1564. IVAMOD(3)=IPP1
  1565. IVAMOD(4)=IPP2
  1566. IF(IDIM.EQ.3)IVAMOD(5)=IPP3
  1567. ENDIF
  1568. ELSE IF(IFACAF.NE.0) THEN
  1569. TYMODE(1)='MAILLAGE'
  1570. IVAMOD(1)= IPFAC1
  1571. TYMODE(2)='MAILLAGE'
  1572. IVAMOD(2)= IPFAC2
  1573. TYMODE(3)='MAILLAGE'
  1574. IVAMOD(3)= IPFAC3
  1575. TYMODE(4)='MMODEL'
  1576. IVAMOD(4)= IMOCO
  1577. ENDIF
  1578. ENDIF
  1579. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1580. ELSE IF (LESFOR(1).EQ.'MECANIQUE ') THEN
  1581. IF (LESPRO(2)(1:8).EQ.'MODAL '.AND.IPTBMO.GT.0) THEN
  1582. TYMODE(1) = 'TABLE'
  1583. IVAMOD(1) = IPTBMO
  1584. IF (IPMOD3.GT.0) THEN
  1585. NOBMOD = IVAMOD(/1)
  1586. TYMODE(NOBMOD) = 'MMODEL '
  1587. IVAMOD(NOBMOD) = IPMOD3
  1588. ENDIF
  1589. ELSE IF (JLMOT1.GT.0) THEN
  1590. IVAMOD(1) = JLMOT1
  1591. IVAMOD(2) = JLMOT2
  1592. TYMODE(1) = 'LISTMOTS'
  1593. TYMODE(2) = 'LISTMOTS'
  1594. LCVAR = JLMOT1
  1595. LCMAT = JLMOT2
  1596. ELSE IF (LMOEXT) THEN
  1597. IF (LMOLOI.GT.0) THEN
  1598. C
  1599. C Indicateur 'LOIEXT' pour retrouver ses petits
  1600. CALL POSCHA('LOIEXT ',I_POS)
  1601. TYMODE(1)='MOT '
  1602. IVAMOD(1)= I_POS
  1603. C
  1604. C Pointeur vers la loi (donne par PTRLOI)
  1605. TYMODE(2)='ENTIER '
  1606. IVAMOD(2)= LMOPTR
  1607. C
  1608. C LMOLIB : Nom de la bibliotheque (sans chemin et extension)
  1609. CALL POSCHA(LMOLIB(1:LMOLGB),I_POS)
  1610. TYMODE(3)='MOT '
  1611. IVAMOD(3)= I_POS
  1612. C
  1613. C LMOFCT : Nom de la fonction (dans la bibliotheque)
  1614. CALL POSCHA(LMOFCT(1:LMOLGT),I_POS)
  1615. TYMODE(4)='MOT '
  1616. IVAMOD(4)= I_POS
  1617. ENDIF
  1618.  
  1619. IF (LMEVIX) THEN
  1620. IMODEL.TYMODE(NOBMOD) = 'IVIEX '
  1621. IMODEL.IVAMOD(NOBMOD) = IVIEX
  1622. ENDIF
  1623. ENDIF
  1624. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1625. ELSE IF (LESFOR(1).EQ.'CONTACT ') THEN
  1626. TYMODE(1)='MAILLAGE'
  1627. IVAMOD(1)=IPGEO1
  1628. TYMODE(2)='MAILLAGE'
  1629. IVAMOD(2)=IPGEO2
  1630. TYMODE(3)='ENTIER'
  1631. IVAMOD(3)=ITCO
  1632. IF(ITCO.EQ.3) THEN
  1633. SEGINI,IMODE1
  1634. MMODE2.KMODEL(IM)=IMODE1
  1635. IMODE1.IMAMOD=IPGEOY
  1636. IMODE1.TYMODE(1)='MAILLAGE'
  1637. IMODE1.IVAMOD(1)=IPGEO2
  1638. IMODE1.TYMODE(2)='MAILLAGE'
  1639. IMODE1.IVAMOD(2)=IPGEO1
  1640. IMODE1.TYMODE(3)='ENTIER'
  1641. IMODE1.IVAMOD(3)=1
  1642. ENDIF
  1643. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1644. ELSE IF (LESFOR(1).EQ.'NAVIER_STOKES ') THEN
  1645. IF (NOBMOD.GT.0) THEN
  1646. TYMODE(1) = 'LISTMOTS'
  1647. IVAMOD(1) = OPNLIN
  1648. ENDIF
  1649. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1650. ELSE IF (LESFOR(1).EQ.'LIAISON ') THEN
  1651. if (klcon.gt.0) THEN
  1652. do i = 1, klcon
  1653. if (tlicon(i).eq.6) TYMODE(noblia+i) = 'CONDINFE'
  1654. if (tlicon(i).eq.7) TYMODE(noblia+i) = 'CONDSUPE'
  1655. IVAMOD(noblia+i) = mlicon(i)
  1656. enddo
  1657. ENDIF
  1658. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1659. ELSE IF (LESFOR(1).EQ.'MELANGE ') THEN
  1660. IF (IPMMEL.GT.0) THEN
  1661. MMODE1 = IPMMEL
  1662. N1MEL = MMODE1.KMODEL(/1)
  1663. KBMOD = 0
  1664. DO I = 1,N1MEL
  1665. IMODE1 = MMODE1.KMODEL(I)
  1666. IF (IMODE1.IMAMOD.EQ.IMAMOD) THEN
  1667. IF (KBMOD.EQ.0) THEN
  1668. IMODE2 = IMODE1
  1669. ELSE
  1670. IF (IMODE1.FORMOD(1).NE.IMODE2.FORMOD(1).OR.
  1671. & IMODE1.IMATEE.NE.IMODE2.IMATEE) GOTO 117
  1672. ENDIF
  1673. KBMOD = KBMOD + 1
  1674. TYMODE(KBMOD) = 'IMODEL'
  1675. IVAMOD(KBMOD) = IMODE1
  1676. ENDIF
  1677. 117 CONTINUE
  1678. ENDDO
  1679. C
  1680. IF (KBMOD.EQ.0) THEN
  1681. CALL ERREUR(21)
  1682. RETURN
  1683. ENDIF
  1684. C
  1685. IF (KBMOD.NE.N1MEL) THEN
  1686. NOBMOD = KBMOD
  1687. SEGADJ,IMODEL
  1688. ENDIF
  1689. C
  1690. ENDIF
  1691. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1692. ELSE IF (LESFOR(1).EQ.'DIFFUSION ') THEN
  1693. JGN = LOCOMP
  1694. JGM = 2
  1695. SEGINI,MLMOT1
  1696. TYMODE(1)='LISTMOTS'
  1697. IVAMOD(1)=iplrdi
  1698. IF (LMOLOI.GT.0) THEN
  1699. C Indicateur 'LOIEXT' pour retrouver ses petits
  1700. CALL POSCHA('LOIEXT ',I_POS)
  1701. TYMODE(2)='MOT '
  1702. IVAMOD(2)= I_POS
  1703.  
  1704. C Pointeur vers la loi (donne par PTRLOI)
  1705. TYMODE(3)='ENTIER '
  1706. IVAMOD(3)= LMOPTR
  1707.  
  1708. C LMOLIB : Nom de la bibliotheque (sans chemin et extension)
  1709. CALL POSCHA(LMOLIB(1:LMOLGB),I_POS)
  1710. TYMODE(4)='MOT '
  1711. IVAMOD(4)= I_POS
  1712.  
  1713. C LMOFCT : Nom de la fonction (dans la bibliotheque)
  1714. CALL POSCHA(LMOFCT(1:LMOLGT),I_POS)
  1715. TYMODE(5)='MOT '
  1716. IVAMOD(5)= I_POS
  1717. ENDIF
  1718. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1719. ELSE IF (LESFOR(1).EQ.'METALLURGIE ') THEN
  1720. C LCVAR : les noms des phases
  1721. IVAMOD(1) = LCVAR
  1722. TYMODE(1) = 'LISTMOTS'
  1723. C IREACT : les noms des reactifs
  1724. IVAMOD(2) = ireact
  1725. TYMODE(2) = 'LISTMOTS'
  1726. C IPRODU : les noms des produits
  1727. IVAMOD(3) = iprodu
  1728. TYMODE(3) = 'LISTMOTS'
  1729. C LCMAT : les noms des types de reactions
  1730. IVAMOD(4) = LCMAT
  1731. TYMODE(4) = 'LISTMOTS'
  1732. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1733. ELSE IF (LESFOR(1).EQ.'CHANGEMENT_PHASE') THEN
  1734. C
  1735. C Maillage support de mult. de Lagrange IPGEO2 & IPGEO3
  1736. CALL IMPP1(IPT1,IPGEO2,IPGEO3,LESPRO(1))
  1737. C
  1738. C IPRIDU : les noms des variables primales et duales
  1739. IVAMOD(1) = IPRIDU
  1740. TYMODE(1) ='LISTMOTS'
  1741. IVAMOD(2) = IPGEO2
  1742. TYMODE(2) ='MAILLAGE'
  1743. IF (LESPRO(1).EQ.'SOLUBILITE ') THEN
  1744. IVAMOD(3) = IPGEO3
  1745. TYMODE(3) ='MAILLAGE'
  1746. ENDIF
  1747. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1748. ELSE IF (LESFOR(1).EQ.'CONTRAINTE ') THEN
  1749. TYMODE(1)='ENTIER'
  1750. IVAMOD(1)=LACTR
  1751. TYMODE(2)='MAILLAGE'
  1752. IVAMOD(2)=IPGEOC
  1753. IF (LACTR.EQ.1) THEN
  1754. TYMODE(3)='POINT'
  1755. IVAMOD(3)=IP1
  1756. IF (IDIM.EQ.3) THEN
  1757. TYMODE(4)='POINT'
  1758. IVAMOD(4)=IP2
  1759. ENDIF
  1760. ELSE IF (LACTR.EQ.2) THEN
  1761. TYMODE(3)='POINT'
  1762. IVAMOD(3)=IP1
  1763. ENDIF
  1764. C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1765. ENDIF
  1766.  
  1767. C=DEB==== FORMULATION HHO ==== Remplissage de donnees ==================
  1768. C NEFMOD = HHO_NUM_ELEMENT pour tous les elements =====
  1769. IF (loHHO) THEN
  1770. modHHO = imodel
  1771. CALL HHOPRM(chaHHO,modHHO,nobHHO,iplHHO,KERRE)
  1772. IF (KERRE.NE.0) GOTO 99
  1773. imodel.NEFMOD = HHO_NUM_ELEMENT
  1774. GOTO 101
  1775. ENDIF
  1776. C=FIN==== FORMULATION HHO ==============================================
  1777. C +--------------------------------------------------------------------+
  1778. C | Determination de la valeur de NEFMOD pour IMODEL |
  1779. C +--------------------------------------------------------------------+
  1780. IF (ITYP1.EQ.48) THEN
  1781. C NEPAPA = si EF specifique demande -> on utilise ses inconnues
  1782. NEPAPA = 0
  1783. IMODEL.NEFMOD = 259
  1784. IF (ITEF.GT.0) THEN
  1785. DO i=1,ITEF
  1786. CALL PLACE(NOMTP,LNOMTP,MELE,LESTEF(i))
  1787. IF (MELE.NE.0) NEPAPA = MELE
  1788. ENDDO
  1789. ENDIF
  1790. IF (NEPAPA.EQ.0) THEN
  1791. c 2D : on choisit les inconnues du QUA4 pour toute formulation
  1792. IF (IDIM.EQ.2) THEN
  1793. NEPAPA=8
  1794. c 3D : on choisit les inconnues du CUB8 pour toute formulation
  1795. ELSE IF (IDIM.EQ.3) THEN
  1796. NEPAPA=14
  1797. ELSE
  1798. CALL ERREUR(610)
  1799. RETURN
  1800. ENDIF
  1801. ENDIF
  1802. GOTO 101
  1803. ENDIF
  1804. C
  1805. NEFMOD = 0
  1806. IF (ITEF.NE.0) THEN
  1807. DO i=1,ITEF
  1808. IF (LONAVI) THEN
  1809. CALL MODE25(MDISC,ITYP1,MELE)
  1810. ELSE
  1811. IF (LOBBAR) CALL MODE20(ITYP1,LESTEF(I))
  1812. CALL PLACE(NOMTP,LNOMTP,MELE,LESTEF(i))
  1813. ENDIF
  1814. IF (MELE.EQ.0) GOTO 9
  1815. IF (LONAVI) GOTO 6
  1816. MEGE=NUMGEO(MELE)
  1817. IF (MEGE.EQ.0) GOTO 9
  1818. IF (MEGE.EQ.ITYP1) GOTO 6
  1819. c kich cas du POI1
  1820. IF (ITYP1.EQ.1) GOTO 6
  1821. ENDDO
  1822. C
  1823. 9 CONTINUE
  1824. KERRE=16
  1825. GOTO 99
  1826. C
  1827. 6 CONTINUE
  1828. NEFMOD=MELE
  1829. C Cas particulier pour les elements polygonaux
  1830. IF (ITYP1.EQ.32) NEFMOD=MELE+NBNN-3
  1831. C Affectation des elements finis de maniere automatique
  1832. ELSE
  1833. C Formulation DARCY
  1834. IF (LESFOR(1).EQ.'DARCY') THEN
  1835. IF (ITYP1.EQ. 3) NEFMOD=143
  1836. C IF (ITYP1.EQ. 4) NEFMOD=99
  1837. C IF (ITYP1.EQ. 8) NEFMOD=100
  1838. C IF (ITYP1.EQ.23) NEFMOD=101
  1839. C IF (ITYP1.EQ.16) NEFMOD=102
  1840. C IF (ITYP1.EQ.14) NEFMOD=103
  1841. IF (ITYP1.EQ. 7) NEFMOD=99
  1842. IF (ITYP1.EQ.11) NEFMOD=100
  1843. IF (ITYP1.EQ.35) NEFMOD=101
  1844. IF (ITYP1.EQ.34) NEFMOD=102
  1845. IF (ITYP1.EQ.33) NEFMOD=103
  1846. C Formulation CONTACT
  1847. ELSE IF (LESFOR(1).EQ.'CONTACT') THEN
  1848. NEFMOD=ITYP1
  1849. IF (ITCO.EQ.0) THEN
  1850. IF (IDIM.EQ.2) NEFMOD=261
  1851. IF (IDIM.EQ.3) NEFMOD=262
  1852. ELSE IF (IFRT.EQ.1) THEN
  1853. IF (IDIM.EQ.2) NEFMOD=107
  1854. IF (IDIM.EQ.3) NEFMOD=165
  1855. ENDIF
  1856. C Formulation POREUX
  1857. ELSE IF (LESFOR(1).EQ.'POREUX') THEN
  1858. IF (ITYP1.EQ. 6) NEFMOD=79
  1859. IF (ITYP1.EQ.10) NEFMOD=80
  1860. IF (ITYP1.EQ.15) NEFMOD=81
  1861. IF (ITYP1.EQ.24) NEFMOD=82
  1862. IF (ITYP1.EQ.17) NEFMOD=83
  1863. IF (ITYP1.EQ.29) NEFMOD=108
  1864. IF (ITYP1.EQ.30) NEFMOD=109
  1865. IF (ITYP1.EQ.31) NEFMOD=110
  1866. C Autres formulations
  1867. ELSE
  1868. CALL PLACE(MOTEF,NBTEF,NELE,NOMS(ITYP1))
  1869. IF (NELE.EQ.0) GOTO 8
  1870. CALL PLACE(NOMTP,LNOMTP,MELE,MOTEF(NELE))
  1871. IF (MELE.NE.0) GOTO 7
  1872. C
  1873. 8 CONTINUE
  1874. C Cas particulier dimension 1 : [M-T]1D[2-3]
  1875. IF (IDIM.EQ.1) THEN
  1876. DO IE=1,NBTEF
  1877. CALL PLACE(NOMTP,LNOMTP,MELE,MOTEF(IE))
  1878. MEGE=NUMGEO(MELE)
  1879. IF (MEGE.EQ.ITYP1) GOTO 7
  1880. ENDDO
  1881. ENDIF
  1882. C
  1883. KERRE=16
  1884. GOTO 99
  1885. C
  1886. 7 CONTINUE
  1887. NEFMOD=MELE
  1888. ENDIF
  1889. ENDIF
  1890. C
  1891. IF (NEFMOD.EQ.0) THEN
  1892. KERRE=16
  1893. GOTO 99
  1894. ENDIF
  1895. C +--------------------------------------------------------------------+
  1896. C | Verifications supplementaires entre type d'EF et formulation |
  1897. C +--------------------------------------------------------------------+
  1898. 101 CONTINUE
  1899. MFR = NUMMFR(NEFMOD)
  1900. C WRITE(6,*)' ITYP1 =',ITYP1,NEFMOD,MFR
  1901. C
  1902. IF (LESFOR(1).EQ.'THERMIQUE ') THEN
  1903. IF (IPHAS.NE.0) THEN
  1904. c test que les elements sont lineaires
  1905. IPT4 = IMODEL.IMAMOD
  1906. ITT = IPT4.ITYPEL
  1907. IF (KDEGRE(ITT) .GT. 2) THEN
  1908. KERRE=982
  1909. GOTO 99
  1910. ENDIF
  1911. ENDIF
  1912.  
  1913. ELSE IF ((LESFOR(1).EQ.'MECANIQUE ') .OR.
  1914. & (LESFOR(1).EQ.'POREUX ')) THEN
  1915. C
  1916. C Elements polygonaux
  1917. IF ((ITYP1.EQ.32).AND.(NBNN.GT.14)) THEN
  1918. INTERR(1) = 32
  1919. KERRE=52
  1920. GOTO 99
  1921. ENDIF
  1922. C
  1923. C Cas du materiau unidirectionnel
  1924. IF (IMATE.EQ.4) THEN
  1925. C Cas des cerces : sans interet !
  1926. IF (MFR.EQ.27) THEN
  1927. KERRE=251
  1928. GOTO 99
  1929. ENDIF
  1930. C Cas de la plasticite
  1931. IF (INATU.NE.0) THEN
  1932. C
  1933. C Comportement ACIER_UNI OK si massif bidim ou coque tridim
  1934. IF (INATU.EQ.40)THEN
  1935. IF ((MFR.NE.1.OR.IFOUR.GT.0).AND.
  1936. & ((MFR.NE.3.AND.MFR.NE.9).OR.IFOUR.NE.2)) THEN
  1937. KERRE=251
  1938. GOTO 99
  1939. ENDIF
  1940. C Autres comportements OK si COQ2 et massif
  1941. ELSE IF (NEFMOD.NE.44.AND.MFR.NE.1) THEN
  1942. KERRE=251
  1943. GOTO 99
  1944. ENDIF
  1945. ENDIF
  1946. ENDIF
  1947. C
  1948. C Cas du materiau 'ZONE_COHESIVE'
  1949. IF ((IMATE.EQ.12).AND.(MFR.NE.77)) THEN
  1950. KERRE=251
  1951. GOTO 99
  1952. ENDIF
  1953. C
  1954. C Cas du modele section : on n'autorise pour le moment que TIMO
  1955. IF (CMATE.EQ.'SECTION'.AND.NEFMOD.NE.84) THEN
  1956. KERRE=251
  1957. GOTO 99
  1958. ENDIF
  1959. C
  1960. C Comportement GURSON OK en 3D, axisymetrique ou deformations planes
  1961. IF (INATU.EQ.38) THEN
  1962. IF ( IFOUR.NE.0 .AND. IFOUR.NE.2 .AND. IFOUR.NE.-1 ) THEN
  1963. MOTERR(1:8)='GURSON'
  1964. MOTERR(9:16)='MECANIQU'
  1965. INTERR(1) = IFOUR
  1966. KERRE=81
  1967. GOTO 99
  1968. ENDIF
  1969. ENDIF
  1970. C
  1971. C Comportement ISS_GRANGE OK qu'en 3D
  1972. IF (INATU.EQ.151 .AND. IFOUR.NE.2) THEN
  1973. INTERR(1) = IFOUR
  1974. KERRE=709
  1975. GOTO 99
  1976. ENDIF
  1977. C
  1978. C Le modele RUP_THER n'est utilisable qu'en 3D
  1979. IF (INATU.EQ.152 .AND. IFOUR.NE.2) THEN
  1980. INTERR(1) = IFOUR
  1981. KERRE=709
  1982. GOTO 99
  1983. ENDIF
  1984. C
  1985. C Le modele COULOMB n'est utilisable qu'en 3D avec les éléments JOI1
  1986. IF (INATU.EQ.34 .AND. IFOUR.NE.2 .AND. MFR.EQ.75) THEN
  1987. INTERR(1) = IFOUR
  1988. KERRE=709
  1989. GOTO 99
  1990. ENDIF
  1991. C
  1992. C.. Restrictions en formulation 'MECANIQUE' avec une loi de
  1993. C comportement non lineaire externe
  1994. C Rappel : LMOEXT exprime la condition (NFOR.EQ.1) ET
  1995. C (LESFOR(1).EQ.'MECANIQUE') ET (loi non lineaire externe)
  1996. IF ( LMOEXT ) THEN
  1997. C En formulation 'MECANIQUE', les lois non lineaires externes
  1998. C n'autorisent qu'une seule composante de temperature
  1999. C => incompatibilite avec des modeles de coques n'ayant pas
  2000. C de points d'integration dans l'epaisseur (trois composantes
  2001. C dans ce cas, 'TINF', 'T ' et 'TSUP')
  2002. C Le test ci-dessous est coherent avec celui de IDTEMP.
  2003. IF ( (MFR.EQ.3.OR.MFR.EQ.5.OR.MFR.EQ.9).AND.
  2004. & (NGINT.EQ.0) ) THEN
  2005. KERRE=951
  2006. GOTO 99
  2007. ENDIF
  2008. C Les lois de la famille 'VISCO_EXTERNE' ne s'appliquent pour
  2009. C l'instant qu'aux elements massifs, avec option de calcul 3D
  2010. C Et restriction pour l'instant a 'VISCO_EXTERNE' 'GENERAL'
  2011. IF ( LMEVIX ) THEN
  2012. IF ((MFR.NE.1.AND.MFR.NE.31) .OR. IFOUR.NE.2) THEN
  2013. KERRE = 950
  2014. ELSE IF ( IVIEX.NE.1 ) THEN
  2015. KERRE = 958
  2016. ELSE
  2017. KERRE = 0
  2018. ENDIF
  2019. IF (KERRE.NE.0) GOTO 99
  2020. ENDIF
  2021. ENDIF
  2022. C
  2023. ELSE IF (LESFOR(1).EQ.'DIFFUSION ') THEN
  2024. IF (IFOUR.EQ.2 .AND. NEFMOD.GE.4 .AND. NEFMOD.LT.11) THEN
  2025. KERRE=16
  2026. GOTO 99
  2027. ENDIF
  2028. IF (MFR.NE.1 .AND. MFR.NE.3 .AND. MFR.NE.5 .AND.
  2029. & MFR.NE.7 .AND. MFR.NE.9 .AND. MFR.NE.73 .AND.
  2030. & MFR.NE.27 .AND. MFR.NE.75 .AND. MFR.NE.79 ) THEN
  2031. KERRE=16
  2032. GOTO 99
  2033. ENDIF
  2034. C
  2035. ENDIF
  2036. C +--------------------------------------------------------------------+
  2037. C | Remplissage INFMOD et INFELE du IM-eme modele elementaire IMODEL |
  2038. C +--------------------------------------------------------------------+
  2039. IF (NGINT.NE.0.AND.NEFMOD.NE.28) THEN
  2040. KERRE=608
  2041. GOTO 99
  2042. ENDIF
  2043. INFMOD(1) = NGINT
  2044.  
  2045. C (fdp) Pour les elements JOI1 seulement, on stocke -1*ILIE dans INFMOD(9)
  2046. IF (ILIE.NE.0) THEN
  2047. IF (NEFMOD.NE.265) THEN
  2048. KERRE=19
  2049. GOTO 99
  2050. ENDIF
  2051. INFMOD(9) = -1 * ILIE
  2052. ENDIF
  2053. * AM cas non-local
  2054. IF (INLOC.NE.0) THEN
  2055. INFMOD(13) = -1*INLOC
  2056. INFMOD(14) = LULVIA
  2057. ENDIF
  2058.  
  2059. C Initialisation du infele et des segments d'integration
  2060. INFELE(2) = NGINT
  2061. INFELE(3) = NGMAS
  2062. INFELE(4) = NGCON
  2063. INFELE(6) = NGRIG
  2064.  
  2065. C Cas particulier des relations de conformite pour les SURE
  2066. IF (ITYP1.EQ.48) THEN
  2067. IMODEL.INFELE( 1) = NEFMOD
  2068. IMODEL.INFELE(13) = NUMMFR(NEPAPA)
  2069. IMODEL.INFELE(14) = 48
  2070. ENDIF
  2071. C
  2072. CALL PRQUOI(IMODEL)
  2073. IF (IERR.NE.0) RETURN
  2074. C +--------------------------------------------------------------------+
  2075. C | Initialisation des nomid (NOMS des composantes) |
  2076. C +--------------------------------------------------------------------+
  2077. C Cas particulier des relations de conformite pour les SURE
  2078. c on recupere les noms de composantes 'DEPLACEM' et 'FORCES'
  2079. c des elements parents (NEPAPA => QUA4 ou CUB8)
  2080. IF (ITYP1.EQ.48) THEN
  2081. NEPOLD=IMODEL.NEFMOD
  2082. IMODEL.NEFMOD=NEPAPA
  2083. ENDIF
  2084. CALL INOMID(IMODEL,LCVAR,LCMAT,LCMAF,LCPAR)
  2085. IF (IERR.NE.0) RETURN
  2086. IF (ITYP1.EQ.48) THEN
  2087. IMODEL.NEFMOD=NEPOLD
  2088. ENDIF
  2089.  
  2090. C Test CLEMENT entre INFELE(16) et la dimension du NOMID des DEFORMATIONS
  2091. C ATTENTION (celui des CONTRAINTES peut contenir une info en plus sur les MODES en fourier...)
  2092. nomid = imodel.LNOMID(5)
  2093. IF (nomid.GT.0) THEN
  2094. imodel.INFELE(16) = nomid.LESOBL(/2) + nomid.LESFAC(/2)
  2095. ELSE
  2096. imodel.INFELE(16) = 0
  2097. ENDIF
  2098. C +--------------------------------------------------------------------+
  2099. C | Quelques verifications supplementaires |
  2100. C +--------------------------------------------------------------------+
  2101.  
  2102. C=DEB==== FORMULATION HHO ==== Verification des noms primales/duales====
  2103. IF (loHHO) THEN
  2104. nomid1 = imodel.LNOMID(1)
  2105. nomid2 = imodel.LNOMID(2)
  2106. c* SEGACT,nomid1,nomid2
  2107. n_z1 = nomid1.LESOBL(/2)
  2108. n_z2 = nomid2.LESOBL(/2)
  2109. IF (n_z1.EQ.0 .OR. n_z1.NE.n_z2) THEN
  2110. write(ioimp,*) 'MODELI HHO: PRIMAL/DUAL number incorrect'
  2111. CALL ERREUR(5)
  2112. RETURN
  2113. END IF
  2114. DO i = 1, n_z1
  2115. CALL VERMDI(nomid1.LESOBL(i),nomid2.LESOBL(i))
  2116. IF (IERR.NE.0) RETURN
  2117. END DO
  2118. n_z1 = nomid1.LESFAC(/2)
  2119. n_z2 = nomid2.LESFAC(/2)
  2120. IF (n_z1.NE.0 .OR. n_z2.NE.0) THEN
  2121. write(ioimp,*) 'MODELI HHO: LESFAC incorrect'
  2122. CALL ERREUR(5)
  2123. RETURN
  2124. END IF
  2125. END IF
  2126. C=FIN==== FORMULATION HHO ==============================================
  2127.  
  2128. mfr2 = INFELE(13)
  2129. IF (FORMOD(1).EQ.'CONTRAINTE') mfr2 = 0
  2130. IPMO = IMODEL
  2131. CALL COTEMO(IPMO,MFR2)
  2132. IF (IERR.NE.0) RETURN
  2133. C +--------------------------------------------------------------------+
  2134. C | Point support pour les modes en defo. GENE (IFOUR=-3, 7 a 11, 14) |
  2135. C | Ce point n'est pris en compte que si cela est necessaire |
  2136. C +--------------------------------------------------------------------+
  2137. CALL INFDPG(mfr2,IFOUR,LOGRE,ndpge)
  2138. IF (LOGRE) THEN
  2139. C Erreur si ce point support n'est pas fourni avec le mot-cle GENE.
  2140. IF (IPTGEN.EQ.0) THEN
  2141. CALL ERREUR(925)
  2142. RETURN
  2143. ENDIF
  2144. imodel.IPDPGE = IPTGEN
  2145. ELSE
  2146. IF (IPTGEN.NE.0) THEN
  2147. write(ioimp,*) 'Mot-cle GENE + Point ignores...'
  2148. ENDIF
  2149. IMODEL.IPDPGE = 0
  2150. ENDIF
  2151.  
  2152. SEGACT,IMODEL*NOMOD
  2153.  
  2154. 10 CONTINUE
  2155. C ****************************************************************
  2156. C Fin de la boucle (10) sur les maillages elementaires de IPGEOM
  2157. C ****************************************************************
  2158. C Contact symetrique : tout mettre dans un meme modele
  2159. n1o = kmodel(/1)
  2160. n1 = n1o
  2161. do i = 1, n1o
  2162. imode1 = mmode2.kmodel(i)
  2163. if (imode1.ne.0) then
  2164. n1 = n1+1
  2165. endif
  2166. enddo
  2167. * On a trouve du contact :
  2168. if (n1.gt.n1o) then
  2169. segadj mmodel
  2170. nsou1 = n1
  2171. do i = 1, n1o
  2172. imode1 = mmode2.kmodel(i)
  2173. if (imode1.ne.0) then
  2174. kmodel(n1)=imode1
  2175. n1=n1-1
  2176. imodel=kmodel(i)
  2177. imode1.nefmod=nefmod
  2178. imode1.conmod=conmod
  2179. do ip=1,infmod(/1)
  2180. imode1.infmod(ip)=infmod(ip)
  2181. enddo
  2182. do ip=1,formod(/2)
  2183. imode1.formod(ip)=formod(ip)
  2184. enddo
  2185. do ip=1,matmod(/2)
  2186. imode1.matmod(ip)=matmod(ip)
  2187. enddo
  2188. imode1.ipdpge=ipdpge
  2189. imode1.cmatee=cmatee
  2190. imode1.imatee=imatee
  2191. imode1.inatuu=inatuu
  2192. imode1.ideriv=ideriv
  2193. do ip=1,lnomid(/1)
  2194. imode1.lnomid(ip)=lnomid(ip)
  2195. enddo
  2196. do ip=1,infele(/1)
  2197. imode1.infele(ip)=infele(ip)
  2198. enddo
  2199. do ip=1,tymode(/2)
  2200. imode1.tymode(ip)=tymode(ip)
  2201. enddo
  2202. endif
  2203. enddo
  2204. n1 = nsou1
  2205. endif
  2206. segsup mmode2
  2207.  
  2208. IPMODE=MMODEL
  2209.  
  2210. C TABLE DE MODES --------------------------------
  2211. IF (IPTBDM.GT.0) THEN
  2212. MMODEL = IPMODE
  2213. imodel = kmodel(1)
  2214. segact imodel*mod
  2215. call dimen7(iptbdm,idimen)
  2216. NBNN = 1
  2217. NBELEM = idimen - 2
  2218. NBSOUS = 0
  2219. NBREF = 0
  2220. SEGINI IPT8
  2221. IPT8.ITYPEL = 1
  2222.  
  2223. IKM = 0
  2224. DO ik = 1,NBELEM
  2225. IKM = IKM + 1
  2226. IVALIN=IKM
  2227. XVALIN=REAL(0.D0)
  2228. LOGIN=.TRUE.
  2229. IOBIN=0
  2230. TAPIND='ENTIER '
  2231. CHARIN=' '
  2232. TYPOBJ='TABLE'
  2233. CALL ACCTAB(IPTBDM,TAPIND,IVALIN,XVALIN,CHARIN,LOGIN,IOBIN,
  2234. & TYPOBJ,IVALRE,XVALRE,CHARRE,LOGRE,IOBRE)
  2235. IF (IERR.NE.0) RETURN
  2236. IPTMOD = IOBRE
  2237. IVALIN=0
  2238. XVALIN=REAL(0.D0)
  2239. LOGIN=.TRUE.
  2240. IOBIN=0
  2241. TAPIND='MOT '
  2242. TYPOBJ='POINT'
  2243. CALL ACCTAB(IPTMOD,TAPIND,IVALIN,XVALIN,'POINT_REPERE',LOGIN,
  2244. & IOBIN,TYPOBJ,IVALRE,XVALRE,CHARRE,LOGRE,IOBRE)
  2245. IF (IERR.NE.0) RETURN
  2246.  
  2247. ipt8.num(1,ikm) = iobre
  2248. ENDDO
  2249.  
  2250. NBELEM = IKM
  2251. segadj IPT8
  2252. imamod = ipt8
  2253.  
  2254. ENDIF
  2255. C fin TABLE DE MODES --------------------------------
  2256. C en cas de modele STAT ddddddddddddddddddddddddddddddddddddddddddd
  2257. 91 CONTINUE
  2258. IF (IPTABS.GT.0.OR.IPMOD1.GT.0) THEN
  2259. c verification formulation
  2260. IF (ipmod1.gt.0) THEN
  2261. CALL ACTOBJ('MMODEL',IPMOD1,1)
  2262. IF (IERR.NE.0) RETURN
  2263. mmode1 = ipmod1
  2264. imode1 = mmode1.kmodel(1)
  2265. do jj=1,NFOR
  2266. if (imode1.formod(jj).ne.LESFOR(JJ)) then
  2267. call erreur(21)
  2268. return
  2269. endif
  2270. enddo
  2271. ENDIF
  2272. c duplique le modele cree
  2273. if (ipmod1.le.0) ipmod1 = ipmode
  2274. C modele : pointer le modele elementaire approprie
  2275. IF (iptabm.eq.0) THEN
  2276. MMODE1 = ipmod1
  2277. DO im = 1,kmodel(/1)
  2278. imodel = kmodel(im)
  2279. segact imodel*mod
  2280. nobmod = ivamod(/1)
  2281. nobmod = nobmod + 1
  2282. nfor = formod(/2)
  2283. nmat = matmod(/2)
  2284. mn3 = infmod(/1)
  2285. segadj imodel
  2286. kbmod = 0
  2287. do im1 = 1,MMODE1.KMODEL(/1)
  2288. imode1 = mmode1.kmodel(im1)
  2289. imomo = imode1
  2290. lostat = .true.
  2291.  
  2292. C criteres de verif assez sommaires ...
  2293. if (imode1.nefmod.eq.nefmod.and.
  2294. & imode1.imamod.ne.imamod.and.
  2295. & (imode1.matmod(/2).eq.matmod(/2).or.
  2296. & imode1.matmod(/2).eq.(matmod(/2)-1)).and.
  2297. & imode1.formod(/2).eq.formod(/2)) then
  2298. do lmo = 1,formod(/2)
  2299. if (formod(lmo).ne.imode1.formod(lmo)) lostat = .false.
  2300. enddo
  2301. do lmo = 1,imode1.matmod(/2)
  2302. if (matmod(lmo).ne.imode1.matmod(lmo)) lostat = .false.
  2303. enddo
  2304. else
  2305. lostat = .false.
  2306. endif
  2307. if (lostat.and.formod(1).eq.'MELANGE') then
  2308. C verifs supplementaires : les modeles de ivamod sont ils bien construi
  2309. lomela = .true.
  2310. if ((nobmod - imode1.ivamod(/1)).gt.1) lomela = .false.
  2311. if (imode1.ivamod(/1).gt.0) then
  2312. do ivm3 = 1,imode1.ivamod(/1)
  2313. IF(imode1.tymode(ivm3).eq.'IMODEL') THEN
  2314. imode3 = imode1.ivamod(ivm3)
  2315. segact imode3
  2316. ENDIF
  2317. enddo
  2318. endif
  2319. IF (nobmod.gt.1) THEN
  2320. do ivm1 = 1,(nobmod-1)
  2321. if (tymode(ivm1).eq.'IMODEL ') then
  2322. imode2 = ivamod(ivm1)
  2323. segact imode2
  2324. if (imode2.ivamod(/1).ge.1) then
  2325. do ivm2 = 1,imode2.ivamod(/1)
  2326. if (imode2.tymode(ivm2).eq.'IMODEL') then
  2327. imode4 = imode2.ivamod(ivm2)
  2328. segact imode4
  2329. if (imode1.ivamod(/1).ge.1) then
  2330. do ivm3 = 1,imode1.ivamod(/1)
  2331. IF (imode1.tymode(ivm3).eq.'IMODEL') THEN
  2332. imode3 = imode1.ivamod(ivm3)
  2333. lostat = .true.
  2334. C criteres de verif assez faibles ...
  2335. if (imode3.nefmod.eq.imode4.nefmod.and.
  2336. & imode3.imamod.eq.imode4.imamod.and.
  2337. & imode3.matmod(/2).eq.imode4.matmod(/2).and.
  2338. & imode3.conmod(17:24).eq.imode4.conmod(17:24).and.
  2339. & imode3.formod(/2).eq.imode4.formod(/2)) then
  2340. do lmo = 1,imode4.formod(/2)
  2341. if (imode4.formod(lmo).ne.imode3.formod(lmo)) lostat = .false.
  2342. enddo
  2343. do lmo = 1,imode4.matmod(/2)
  2344. if (imode4.matmod(lmo).ne.imode3.matmod(lmo)) lostat = .false.
  2345. enddo
  2346. else
  2347. lostat = .false.
  2348. endif
  2349. if (lostat) goto 75
  2350. ENDIF
  2351. enddo
  2352. else
  2353. lostat = .false.
  2354. endif
  2355. endif
  2356. enddo
  2357. else
  2358. lomela = .false.
  2359. endif
  2360. 75 lomela = lomela.and.lostat
  2361. endif
  2362. enddo
  2363. ENDIF
  2364. lostat = lomela
  2365. do ivm3 = 1,imode1.ivamod(/1)
  2366. c imode1 = imomo
  2367. IF(imode1.tymode(ivm3).eq.'IMODEL') THEN
  2368. imode3 = imode1.ivamod(ivm3)
  2369. ENDIF
  2370. enddo
  2371. endif
  2372. if (lostat) then
  2373. kbmod = kbmod + 1
  2374. tymode(nobmod) = 'IMODEL'
  2375. ivamod(nobmod) = imomo
  2376. goto 79
  2377. endif
  2378. enddo
  2379. C *** ca se passe mal
  2380. if (kbmod.ne.1) then
  2381. write(ioimp,*) ' STATIO EN DEFAUT voir notice ',kbmod,im
  2382. KERRE=251
  2383. GOTO 99
  2384. endif
  2385. C ***
  2386. 79 CONTINUE
  2387. ENDDO
  2388. ENDIF
  2389.  
  2390. C : table : dupliquer modele elementaire et pointer
  2391. if (iptabm.gt.0) then
  2392. call modsta(ipmode,iptabm,ipmod1)
  2393. endif
  2394.  
  2395. ENDIF
  2396. C fin du modele STAT ddddddddddddddddddddddddddddddddddddddddddddddd
  2397.  
  2398. if (plicon.ne.0) segsup,plicon
  2399.  
  2400. C Ecriture de l'objet MODELE cree
  2401. CALL ACTOBJ('MMODEL ',IPMODE,1)
  2402. CALL ECROBJ('MMODEL ',IPMODE)
  2403. RETURN
  2404. C ==================================================================
  2405. C 7- Traitement des erreurs
  2406. C ==================================================================
  2407. 99 CONTINUE
  2408. CALL ERREUR(KERRE)
  2409. C
  2410. DO im = 1, kmodel(/1)
  2411. imodel = kmodel(im)
  2412. IF (imodel.NE.0) SEGSUP,imodel
  2413. ENDDO
  2414. SEGSUP,MMODEL
  2415. if (plicon.ne.0) segsup,plicon
  2416.  
  2417. END
  2418.  
  2419.  
  2420.  
  2421.  

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