Télécharger dyne74.eso

Retour à la liste

Numérotation des lignes :

  1. C DYNE74 SOURCE CHAT 11/03/16 21:19:45 6902
  2. SUBROUTINE DYNE74(ITSORT,ITCARA,ITABL,ITLIA,KTRAV,II,NLS,NVAR)
  3. IMPLICIT INTEGER(I-N)
  4. IMPLICIT REAL*8(A-H,O-Z)
  5. *--------------------------------------------------------------------*
  6. * *
  7. * Operateur DYNE : algorithme de Fu - de Vogelaere *
  8. * ________________________________________________ *
  9. * *
  10. * Dimensionne les variables NLS et NVAR, gestion des demandes de *
  11. * sorties pour les liaisons. *
  12. * *
  13. * Parametres: *
  14. * *
  15. * e ITABL Table definissant les liaisons en sortie. *
  16. * e ITLIA Table definissant toutes les liaisons sur une base. *
  17. * e KTRAV Segment de travail qui va remplir MTRES dans DYNE15 *
  18. * es II Compteur *
  19. * s NLS Nombre de demandes de liaisons en sortie *
  20. * s NVAR Nombre maxi de variables internes de liaisons *
  21. * *
  22. * *
  23. * Auteur, date de cr{ation: *
  24. * *
  25. * d après Lionel VIVAN, le 2 octobre 1989. *
  26. * *
  27. *--------------------------------------------------------------------*
  28. -INC CCOPTIO
  29. -INC SMMODEL
  30. -INC SMCHAML
  31. *
  32. SEGMENT,MTRAV
  33. INTEGER ICHRE2(NBLS),MPOLA(NBLS),MNULA(NBLS)
  34. INTEGER MPOLB(NBLS),MNULB(NBLS)
  35. INTEGER IVLIAA(NBLS,NTVAR),INLIAA(NBLS,NTVAR)
  36. INTEGER IVLIAB(NBLS,NTVAR),INLIAB(NBLS,NTVAR)
  37. ENDSEGMENT
  38. *
  39. LOGICAL L0,L1,LVAR
  40. CHARACTER*8 MONMOT,TYPRET,CHARRE,CMATE
  41. CHARACTER*40 CMOT
  42. *
  43. CMOT=' '
  44. MTRAV = KTRAV
  45. NLS = 0
  46. NVAR = 0
  47. mmodel = itlia
  48.  
  49. * table indicée par des entiers
  50. CALL DIMEN7 (ITABL,IDIMEN)
  51.  
  52. mmodel = itlia
  53. segact mmodel
  54. mchelm = itcara
  55. segact mchelm
  56. segact mmodel
  57. *
  58. * recherche des liaisons en sortie : faire une table index de la tsortie.liaison
  59. *
  60. INDICE = 0
  61. IVAR = 0
  62. 100 CONTINUE
  63. INDICE = INDICE + 1
  64. TYPRET = ' '
  65. CALL ACCTAB(ITABL,'ENTIER',INDICE,X0,' ',L0,IP0,
  66. & TYPRET,I1,X1,CHARRE,L1,ITTL)
  67. IF (TYPRET.EQ.'MMODEL ' .AND. ITTL.NE.0) THEN
  68. TYPRET = ' '
  69. CALL ACCTAB(ITSORT,'MMODEL ',I0,X0,' ',L0,ITTL,
  70. & TYPRET,I1,X1,CHARRE,LVAR,ITVAR)
  71. mmode1 = ittl
  72. segact mmode1
  73. * on attend une liaison elementaire
  74. imode1 = mmode1.kmodel(1)
  75. segact imode1
  76. do ik = 1,kmodel(/1)
  77. imodel = kmodel(ik)
  78. segact imodel
  79. * write(6,*) imodel,imode1,conmod,imode1.conmod,imamod,imode1.imamod
  80. if (imode1.conmod.eq.conmod.or.imode1.imamod.eq.imamod) goto 110
  81. segdes imodel
  82. enddo
  83. segdes imode1,mmode1
  84. goto 100
  85.  
  86. 110 continue
  87. *
  88. * toutes les variables de la liaison sont en sortie
  89. *
  90. IF (TYPRET.EQ.'LOGIQUE ' .AND. LVAR) THEN
  91. NLS = NLS + 1
  92. MNULA(NLS) = INDICE
  93. MPOLA(NLS) = ITTL
  94. CMATE = CMATEE
  95. lcham = 0
  96. MONMOT = ' '
  97. do im = 1,imache(/1)
  98. if(imache(im).eq.imamod.and.conche(im).eq.conmod) then
  99. mchaml = ichaml(im)
  100. lcham = mchaml
  101. segact mchaml
  102. do l=1,nomche(/2)
  103. if (nomche(l).eq.'AMOR') MONMOT='FLOTTANT'
  104. enddo
  105. segdes mchaml
  106. endif
  107. enddo
  108. *
  109.  
  110. IF (CMATE.EQ.'PO_PL_FL') THEN
  111. IVAR = 6
  112. NVAR = MAX(NVAR,IVAR)
  113. II = II + 1
  114. ICHRE2(II) = IVAR
  115. IVLIAA(NLS,1) = 1
  116. INLIAA(NLS,1) = 7
  117. IVLIAA(NLS,2) = 1
  118. INLIAA(NLS,2) = 8
  119. IVLIAA(NLS,3) = 1
  120. INLIAA(NLS,3) = 69
  121. IVLIAA(NLS,4) = 1
  122. INLIAA(NLS,4) = 70
  123. IVLIAA(NLS,5) = 1
  124. INLIAA(NLS,5) = 71
  125. IVLIAA(NLS,6) = 1
  126. INLIAA(NLS,6) = 72
  127. *
  128. ELSE IF (CMOT(1:10).EQ.'PO_PL') THEN
  129. IF (MONMOT.EQ.'FLOTTANT') THEN
  130. IVAR = 3
  131. IVLIAA(NLS,3) = 1
  132. INLIAA(NLS,3) = 39
  133. ELSE
  134. IVAR = 2
  135. ENDIF
  136. NVAR = MAX(NVAR,IVAR)
  137. II = II + 1
  138. ICHRE2(II) = IVAR
  139. IVLIAA(NLS,1) = 1
  140. INLIAA(NLS,1) = 15
  141. IVLIAA(NLS,4) = 1
  142. INLIAA(NLS,4) = 7
  143. *
  144. ELSE IF (CMOT(1:16).EQ.'COUP_VIT') THEN
  145. IVAR = 3
  146. NVAR = MAX(NVAR,IVAR)
  147. II = II + 1
  148. ICHRE2(II) = IVAR
  149. IVLIAA(NLS,1) = 1
  150. INLIAA(NLS,1) = 73
  151. IVLIAA(NLS,3) = 1
  152. INLIAA(NLS,3) = 8
  153. IVLIAA(NLS,4) = 1
  154. INLIAA(NLS,4) = 7
  155. *
  156. ELSE IF (CMOT(1:20).EQ.'COUP_DEP') THEN
  157. IVAR = 2
  158. NVAR = MAX(NVAR,IVAR)
  159. II = II + 1
  160. ICHRE2(II) = IVAR
  161. IVLIAA(NLS,1) = 1
  162. INLIAA(NLS,1) = 74
  163. IVLIAA(NLS,4) = 1
  164. INLIAA(NLS,4) = 7
  165. *
  166. ELSE IF (CMOT(1:11).EQ.'POLYNOMI') THEN
  167. IVAR = 1
  168. NVAR = MAX(NVAR,IVAR)
  169. II = II + 1
  170. ICHRE2(II) = IVAR
  171. IVLIAA(NLS,1) = 1
  172. INLIAA(NLS,1) = 77
  173. *
  174. ELSE
  175. CALL ERREUR(490)
  176. RETURN
  177. ENDIF
  178. *
  179. ELSE IF (TYPRET.EQ.'TABLE ' .AND. ITVAR.NE.0) THEN
  180. * kich : on met toutes les variables
  181. if (.false.) then
  182. NLS = NLS + 1
  183. MNULA(NLS) = INDICE
  184. MPOLA(NLS) = ITTL
  185. CALL ACCTAB(ITTL,'MOT',I0,X0,'TYPE_LIAISON',L0,IP0,
  186. & 'MOT',I1,X1,CMOT,L1,IT1)
  187. IVAR = 0
  188. *
  189. IF (CMOT(1:17).EQ.'POINT_PLAN_FLUIDE') THEN
  190. TYPRET = ' '
  191. CALL ACCTAB(ITVAR,'MOT',I0,X0,'DEPLACEMENT',L0,IP0,
  192. & TYPRET,I1,X1,CHARRE,LVAR,IT1)
  193. IF (TYPRET.EQ.'LOGIQUE ' .AND. LVAR ) THEN
  194. IVAR = IVAR + 1
  195. IVLIAA(NLS,1) = 1
  196. INLIAA(NLS,1) = 7
  197. ENDIF
  198. TYPRET = ' '
  199. CALL ACCTAB(ITVAR,'MOT',I0,X0,'VITESSE',L0,IP0,
  200. & TYPRET,I1,X1,CHARRE,LVAR,IT1)
  201. IF (TYPRET.EQ.'LOGIQUE ' .AND. LVAR ) THEN
  202. IVAR = IVAR + 1
  203. IVLIAA(NLS,2) = 1
  204. INLIAA(NLS,2) = 8
  205. ENDIF
  206. TYPRET = ' '
  207. CALL ACCTAB(ITVAR,'MOT',I0,X0,'MASSE_AJOUTEE',L0,IP0,
  208. & TYPRET,I1,X1,CHARRE,LVAR,IT1)
  209. IF (TYPRET.EQ.'LOGIQUE ' .AND. LVAR ) THEN
  210. IVAR = IVAR + 1
  211. IVLIAA(NLS,3) = 1
  212. INLIAA(NLS,3) = 69
  213. ENDIF
  214. TYPRET = ' '
  215. CALL ACCTAB(ITVAR,'MOT',I0,X0,'FORCE_CONVECTION',L0,IP0,
  216. & TYPRET,I1,X1,CHARRE,LVAR,IT1)
  217. IF (TYPRET.EQ.'LOGIQUE ' .AND. LVAR ) THEN
  218. IVAR = IVAR + 1
  219. IVLIAA(NLS,4) = 1
  220. INLIAA(NLS,4) = 70
  221. ENDIF
  222. TYPRET = ' '
  223. CALL ACCTAB(ITVAR,'MOT',I0,X0,'FORCE_VISCOSITE',L0,IP0,
  224. & TYPRET,I1,X1,CHARRE,LVAR,IT1)
  225. IF (TYPRET.EQ.'LOGIQUE ' .AND. LVAR ) THEN
  226. IVAR = IVAR + 1
  227. IVLIAA(NLS,5) = 1
  228. INLIAA(NLS,5) = 71
  229. ENDIF
  230. TYPRET = ' '
  231. CALL ACCTAB(ITVAR,'MOT',I0,X0,'FORCE_PERTE_DE_CHARGE',
  232. & L0,IP0,TYPRET,I1,X1,CHARRE,LVAR,IT1)
  233. IF (TYPRET.EQ.'LOGIQUE ' .AND. LVAR ) THEN
  234. IVAR = IVAR + 1
  235. IVLIAA(NLS,6) = 1
  236. INLIAA(NLS,6) = 72
  237. ENDIF
  238. IF (IVAR.EQ.0) THEN
  239. CALL ERREUR(496)
  240. RETURN
  241. ENDIF
  242. *
  243. ELSE IF (CMOT(1:10).EQ.'POINT_PLAN') THEN
  244. TYPRET = ' '
  245. CALL ACCTAB(ITVAR,'MOT',I0,X0,'DEPLACEMENT',L0,IP0,
  246. & TYPRET,I1,X1,CHARRE,LVAR,IT1)
  247. IF (TYPRET.EQ.'LOGIQUE ' .AND. LVAR ) THEN
  248. IVAR = IVAR + 1
  249. IVLIAA(NLS,4) = 1
  250. INLIAA(NLS,4) = 7
  251. ENDIF
  252. TYPRET = ' '
  253. CALL ACCTAB(ITVAR,'MOT',I0,X0,'VITESSE_NORMALE',L0,IP0,
  254. & TYPRET,I1,X1,CHARRE,LVAR,IT1)
  255. IF (TYPRET.EQ.'LOGIQUE ' .AND. LVAR ) THEN
  256. IVAR = IVAR + 1
  257. IVLIAA(NLS,3) = 1
  258. INLIAA(NLS,3) = 39
  259. ENDIF
  260. TYPRET = ' '
  261. CALL ACCTAB(ITVAR,'MOT',I0,X0,'FORCE_DE_CHOC',L0,IP0,
  262. & TYPRET,I1,X1,CHARRE,LVAR,IT1)
  263. IF (TYPRET.EQ.'LOGIQUE ' .AND. LVAR ) THEN
  264. IVAR = IVAR + 1
  265. IVLIAA(NLS,1) = 1
  266. INLIAA(NLS,1) = 15
  267. ENDIF
  268. IF (IVAR.EQ.0) THEN
  269. CALL ERREUR(496)
  270. RETURN
  271. ENDIF
  272. *
  273. ELSE IF (CMOT(1:16).EQ.'COUPLAGE_VITESSE') THEN
  274. TYPRET = ' '
  275. CALL ACCTAB(ITVAR,'MOT',I0,X0,'DEPLACEMENT',L0,IP0,
  276. & TYPRET,I1,X1,CHARRE,LVAR,IT1)
  277. IF (TYPRET.EQ.'LOGIQUE ' .AND. LVAR ) THEN
  278. IVAR = IVAR + 1
  279. IVLIAA(NLS,4) = 1
  280. INLIAA(NLS,4) = 7
  281. ENDIF
  282. TYPRET = ' '
  283. CALL ACCTAB(ITVAR,'MOT',I0,X0,'VITESSE',L0,IP0,
  284. & TYPRET,I1,X1,CHARRE,LVAR,IT1)
  285. IF (TYPRET.EQ.'LOGIQUE ' .AND. LVAR ) THEN
  286. IVAR = IVAR + 1
  287. IVLIAA(NLS,3) = 1
  288. INLIAA(NLS,3) = 8
  289. ENDIF
  290. TYPRET = ' '
  291. CALL ACCTAB(ITVAR,'MOT',I0,X0,
  292. & 'FORCE_DE_COUPLAGE_VITESSE',L0,IP0,
  293. & TYPRET,I1,X1,CHARRE,LVAR,IT1)
  294. IF (TYPRET.EQ.'LOGIQUE ' .AND. LVAR ) THEN
  295. IVAR = IVAR + 1
  296. IVLIAA(NLS,1) = 1
  297. INLIAA(NLS,1) = 73
  298. ENDIF
  299. IF (IVAR.EQ.0) THEN
  300. CALL ERREUR(496)
  301. RETURN
  302. ENDIF
  303. *
  304. ELSE IF (CMOT(1:20).EQ.'COUPLAGE_DEPLACEMENT') THEN
  305. TYPRET = ' '
  306. CALL ACCTAB(ITVAR,'MOT',I0,X0,'DEPLACEMENT',L0,IP0,
  307. & TYPRET,I1,X1,CHARRE,LVAR,IT1)
  308. IF (TYPRET.EQ.'LOGIQUE ' .AND. LVAR ) THEN
  309. IVAR = IVAR + 1
  310. IVLIAA(NLS,4) = 1
  311. INLIAA(NLS,4) = 7
  312. ENDIF
  313. TYPRET = ' '
  314. CALL ACCTAB(ITVAR,'MOT',I0,X0,
  315. & 'FORCE_DE_COUPLAGE_DEPLACEMENT',L0,IP0,
  316. & TYPRET,I1,X1,CHARRE,LVAR,IT1)
  317. IF (TYPRET.EQ.'LOGIQUE ' .AND. LVAR ) THEN
  318. IVAR = IVAR + 1
  319. IVLIAA(NLS,1) = 1
  320. INLIAA(NLS,1) = 74
  321. ENDIF
  322. IF (IVAR.EQ.0) THEN
  323. CALL ERREUR(496)
  324. RETURN
  325. ENDIF
  326. *
  327. ELSE IF (CMOT(1:11).EQ.'POLYNOMIALE') THEN
  328. TYPRET = ' '
  329. CALL ACCTAB(ITVAR,'MOT',I0,X0,'FORCE_POLYNOMIALE',
  330. & L0,IP0,TYPRET,I1,X1,CHARRE,LVAR,IT1)
  331. IF (TYPRET.EQ.'LOGIQUE '.AND.LVAR) THEN
  332. IVAR = IVAR + 1
  333. IVLIAA(NLS,1) = 1
  334. INLIAA(NLS,1) = 77
  335. ENDIF
  336. *
  337. ELSE
  338. CALL ERREUR(490)
  339. RETURN
  340. ENDIF
  341. NVAR = MAX(NVAR,IVAR)
  342. II = II + 1
  343. ICHRE2(II) = IVAR
  344. IF (IIMPI.EQ.333) THEN
  345. WRITE(IOIMP,*)'DYNE24 : ICHRE2(',II,')=',IVAR
  346. ENDIF
  347. * kich annulation du choix
  348. endif
  349. ENDIF
  350. GOTO 100
  351. ELSE
  352. if (indice.le.idimen) goto 100
  353. ENDIF
  354. IF (IIMPI.EQ.333) THEN
  355. WRITE(IOIMP,*) 'DYNE24 : NVAR = ',NVAR
  356. WRITE(IOIMP,*) 'DYNE24 : NLS = ',NLS
  357. WRITE(IOIMP,*) 'DYNE24 : IVAR = ',IVAR
  358. ENDIF
  359. *
  360. END
  361.  
  362.  
  363.  
  364.  
  365.  
  366.  
  367.  
  368.  

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