Télécharger chkesc.eso

Retour à la liste

Numérotation des lignes :

chkesc
  1. C CHKESC SOURCE PV090527 25/03/06 21:15:01 12172
  2. SUBROUTINE CHKESC(IRT,IMENA)
  3.  
  4. C CHKESC REGARDE SI IL Y A DANS L'INSTRUCTION UN OBJET DE TYPE //
  5. C SI C'EST LE CAS, IL RAJOUTE ASSI TOUS DANS L'INSTRUCTION
  6. IMPLICIT INTEGER(I-N)
  7. IMPLICIT REAL*8(A-H,O-Z)
  8.  
  9. -INC CCNOYAU
  10. -INC SMTABLE
  11. -INC SMCHAML
  12. -INC SMMODEL
  13.  
  14. -INC PPARAM
  15. -INC CCOPTIO
  16.  
  17. CHARACTER*8 TYPOBJ,CHA8,CHARRE,CHACRE
  18. LOGICAL LOGR1,LOGR2
  19. CHARACTER*(LOCHAI) LACHAINE
  20.  
  21. PARAMETER (NBMO1=8)
  22. CHARACTER*4 LESMOT(NBMO1)
  23.  
  24. C LESMOT = LISTE DES OPÉRATEURS GÉRANT LES OBJEST ESCLAVES
  25. DATA LESMOT/'ASSI','LIST','DETR','ETG ',
  26. & 'TYPE','DEBP','FINP','RESP'/
  27.  
  28. PARAMETER (NBMO2=46)
  29. CHARACTER*4 LESMO2(NBMO2)
  30. C LESMO2 = LISTE DES OPÉRATEURS DEMANDANT UNE FUSION DES OBJETS
  31. C AVANT DE LES APPELER
  32. DATA LESMO2/'MASQ','TYPE','EXIS','FORM','NLOC','TRAC','PROI',
  33. & 'ELIM','POIN','NOEU','ARET','CERC','DROI','CONT',
  34. & 'DALL','ENVE','FACE','REGL','ROTA','SURF','TRAN',
  35. & 'PAVE','VOLU','PART','AFFI','....','DEPL','DIFF',
  36. & 'ELEM','HOMO','INCL','INTE','INVE','ORDO','PROJ',
  37. & 'RAFF','RAFT','REGE','SYME','TOUR','PLUS','MOIN',
  38. & 'UNIQ','DIME','EXTR','SI '/
  39.  
  40. PARAMETER (NBMO3=2)
  41. CHARACTER*4 LESMO3(NBMO3)
  42. C LESMO3 = LISTE DES OPERATEURS EXECUTES EN PARALLELE ALORS QU''UN
  43. C MCHAML (NON //) A ETE LU SANS MMODEL
  44. DATA LESMO3/'REDU','SOUC'/
  45.  
  46. C BREDUC : BOOLEEN PERMETTANT D'ENCLENCHER LA FUSION
  47. C BREMPL : BOOLEEN PERMETTANT DE REMPLACER DANS LA PILE LA TABLE PAR L'OBJET FUSIONNE
  48. LOGICAL BREDUC,BREMPL,BREDU2,BREMP2,BSPECI
  49.  
  50. C SID : SEGMENT CONTENANT LES INFORMATIONS POUR LA FUSION DES OBJETS
  51. SEGMENT SID
  52. C NBFUS : NOMBRE D'OBJETS A FUSIONNER
  53. C IPOINT : POINTEURS A FUSIONNER ou ENTIERS A FUSIONNER (cas particuler MAXI / MINI)
  54. C BVAL : LOGIQUES SUR LESQUELS ON FAIT UN ET/OU LOGIQUE
  55. C XVAL : REELS A FUSIONNER (cas particuler MAXI / MINI)
  56. C CVAL : MOTS A FUSIONNER (cas particuler MAXI / MINI)
  57. C CHATYP : MOT DONNANT LE TYPE D'OBJETS A FUSIONNER
  58. INTEGER IPOINT(NBFUS)
  59. LOGICAL BVAL (NBFUS)
  60. REAL*8 XVAL (NBFUS)
  61. CHARACTER*(IC1) CVAL (NBFUS)
  62. CHARACTER*8 CHATYP,CREATE
  63. ENDSEGMENT
  64.  
  65. C
  66. C POUR TOUT AUTRE OPÉRATEUR EN PRÉSENCE DE TABLE ESCLAVE
  67. C (SAUF DE TYPE CHPOINT OU RIGIDITE)
  68. C ON INSERE "ASSIS TOUS" AU DÉBUT DE LA PHRASE GIBIANE
  69. C SANS FAIRE DE FUSION.
  70. C LES TABLES ESCLAVE DE CHPOINT, DE RIGIDITE, DE FLOTTANT ET DE LOGIQUE
  71. C SONT TOUJOURS ASSEMBLÉES
  72. C EN SORTIE : IRT =1 VEUT DIRE ALLER DANS ASSISTANT
  73. C : IMENA=0 VEUT DIRE NE PAS FAIRE DE MENAGE TOUT DE SUITE
  74. C CAR FUSION SANS REMPLACEMENT DANS TABLE DES OBJETS
  75.  
  76. DIMENSION IAZ(100)
  77.  
  78.  
  79. * WRITE(6,*) ' ENTREE DANS CHKESC'
  80. BREDUC = .FALSE.
  81. BREDU2 = .FALSE.
  82. BREMPL = .FALSE.
  83. BSPECI = .FALSE.
  84. IRT = 0
  85. ILUOB = 0
  86. IMENA = 1
  87.  
  88. IREPRO = 0
  89. IREMOD = 0
  90. IRECHA = 0
  91. IREESC = 0
  92. IRELOB = 0
  93. IMOT1 = 0
  94. IMOT2 = 0
  95. IMOT3 = 0
  96. IRETOU = 0
  97. IRET = 0
  98.  
  99. C IBLQM =0 PERMET À GIBIANE DE LIRE AU DELÀ DES MOTS
  100. IBLQM=0
  101.  
  102. CALL LIROBJ('PROCEDUR',IRET,0,IREPRO)
  103. IF (IREPRO.NE.0) THEN
  104. CALL REFUS
  105. C WRITE (6,*) ' CHKESC : Lecture d''une PROCEDUR'
  106. RETURN
  107. ENDIF
  108.  
  109. CALL LIRCHA(LACHAINE,0,IREMOT)
  110. IF (IREMOT.ne.0) THEN
  111. CALL REFUS
  112. ELSE
  113. ** write(6,*) 'chkesc pas de mot'
  114. RETURN
  115. ENDIF
  116.  
  117.  
  118. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  119. C Lecture de MOTS et d''OBJETS intervenants dans la LOGIQUE de CHKESC
  120. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  121. CALL LIRMOT(LESMOT,NBMO1,IMOT1,0)
  122. IF (IMOT1.NE.0) THEN
  123. CALL REFUS
  124. C WRITE (6,*) ' CHKESC ',LESMOT(IMOT1)
  125. RETURN
  126. ENDIF
  127.  
  128. CALL LIRMOT(LESMO2,NBMO2,IMOT2,0)
  129. IF (IMOT2.NE.0) THEN
  130. C IF (IMOT2 .EQ. 7) THEN
  131. CC Cas un peu particulier de l''operateur 'PROI'
  132. C BSPECI = .TRUE.
  133. C ENDIF
  134. CALL REFUS
  135. ELSE
  136. CALL LIRMOT(LESMO3,NBMO3,IMOT3,0)
  137. IF (IMOT3.NE.0) THEN
  138. CALL REFUS
  139. ENDIF
  140. ENDIF
  141.  
  142. CALL LIROBJ('MMODEL',IRET,0,IREMOD)
  143. IF (IREMOD.NE.0) THEN
  144. MMODEL=IRET
  145. CALL REFUS
  146. ENDIF
  147.  
  148. CALL LIROBJ('MCHAML',IRET,0,IRECHA)
  149. IF (IRECHA.NE.0) THEN
  150. MCHELM=IRET
  151. CALL REFUS
  152. ENDIF
  153.  
  154.  
  155.  
  156. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  157. C Logique generale de Fusion & Remplacement des OBJETS
  158. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  159. IF (IMOT2.NE.0) THEN
  160. C Fusion pour les Operateurs de LESMO2
  161. BREDUC=.TRUE.
  162. BREMPL=.FALSE.
  163.  
  164. ELSEIF(IMOT3 .NE. 0) THEN
  165. IF (IREMOD .NE. 0) THEN
  166. C Un MMODEL dans 'REDU' enclenche la fusion sans remplacement
  167. BREDUC=.TRUE.
  168. BREMPL=.FALSE.
  169. ENDIF
  170.  
  171. ELSEIF ((IRECHA .NE. 0) .OR. (IREMOD .NE. 0)) THEN
  172. C Un MMODEL ou un MCHAML enclenche la fusion avec remplacement
  173. BREDUC=.TRUE.
  174. BREMPL=.TRUE.
  175. ENDIF
  176.  
  177.  
  178. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  179. C Boucle sur les arguments de la ligne decodee
  180. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  181. IASSS=0
  182.  
  183. C Cas de souci
  184. IF (IMOT3.EQ.2) then
  185. IASSS=1
  186. ENDIF
  187. DO 10 ICCC=1,100
  188. IBLQM=0
  189. CALL LIRTAB('ESCLAVE',MTABLE,0,IREESC)
  190. CALL LIROBJ('LISTOBJE',IPLOBJ,0,IRELOB)
  191. ILUOB=ILUOB+1
  192. IAZ(ILUOB)=IMOTLU
  193. IBLQM=1
  194. IF (IREESC.EQ.0.AND.IRELOB.EQ.0) THEN
  195. IF(IASSS.EQ.1)THEN
  196. GOTO 100
  197. ELSE
  198. C WRITE(6,*)'CHKESC : Sortie n_3'
  199. RETURN
  200. ENDIF
  201. ENDIF
  202.  
  203. C------ CAS DU LISTOBJE
  204.  
  205. IF (IRELOB.NE.0) THEN
  206. IASSS = 1
  207. GOTO 10
  208. ENDIF
  209.  
  210. C------ CAS DE LA TABLE ESCLAVE
  211.  
  212. TYPOBJ=' '
  213.  
  214. C RECHERCHE DU CREATEUR (MTABLE ressort SEGACT dans les ASSISTANT)
  215. CALL ACCTAB(MTABLE,'MOT ',IND ,0.D0 ,'CREATEUR',.TRUE.,0 ,
  216. & 'MOT ',IVALRE,XVALRE,CHACRE ,LOGR1 ,ID1)
  217. IF (IERR.NE.0) RETURN
  218.  
  219. ML=MLOTAB
  220. C DIMENSIONNEMENT DU SEGMENT SID A (ML - 2) a cause des indices 'SOUSTYPE' et 'CREATEUR'
  221. NBFUS = ML - 2
  222. * a voir quoi mettre dans ic1?
  223. IC1 = 8
  224. SEGINI,SID
  225. SID.CREATE=CHACRE
  226. NBENT = 0
  227.  
  228. IND=1
  229. CALL ACCTAB(MTABLE,'ENTIER',IND ,0.D0 ,' ',.TRUE.,0,
  230. & TYPOBJ ,IVALRE,XVALRE,CHARRE,LOGR1 ,ID1)
  231. IF (IERR.NE.0) RETURN
  232.  
  233. IF ((IRECHA .NE. 0) .AND. (TYPOBJ .EQ. 'MCHAML')) THEN
  234. C PLANTE SUR LES COMMANDES AVEC MCHAML // ET NORMAUX
  235. C WRITE(*,*)'Utilisation de MCHAML // et MCHAML normaux'
  236. C CALL TRBAC
  237. C CALL ERREUR(21)
  238. C WRITE(6,*)'CHKESC : Sortie n_4'
  239. C RETURN
  240. ENDIF
  241.  
  242. IF ((IRECHA .NE. 0) .AND. (TYPOBJ .EQ. 'MMODEL') .AND.
  243. & (IMOT3 .EQ. 0)) THEN
  244. C PLANTE SUR LES COMMANDES AVEC MMODEL // ET MCHAML NORMAUX
  245. C WRITE(*,*)'Utilisation de MMODEL // et MCHAML normaux'
  246. C CALL TRBAC
  247. C CALL ERREUR(21)
  248. C WRITE(6,*)'CHKESC : Sortie n_5'
  249. C RETURN
  250. ENDIF
  251.  
  252. IF (IMOT2 .EQ. 0) THEN
  253. IF (TYPOBJ .EQ. 'MMODEL') THEN
  254. C PAS DE REDUCTION SI UN MMODEL ESCLAVE EST RENCONTRE
  255. C write(6,*) ' Chkesc : traitement modele'
  256. BREDUC = .FALSE.
  257. IASSS=1
  258. GOTO 10
  259.  
  260. ELSE IF((TYPOBJ.EQ.'MCHAML '.OR. TYPOBJ .EQ. 'MAILLAGE' .OR.
  261. & TYPOBJ.EQ.'ENTIER ') .AND. (.NOT. BREDUC)) THEN
  262. C write(6,*) 'Chkesc : traitement maillage'
  263. IASSS=1
  264. GOTO 10
  265. ENDIF
  266. ELSE IF(BSPECI) THEN
  267. IASSS=1
  268. GOTO 10
  269. ENDIF
  270.  
  271. C Regles locales de remplacement
  272. BREDU2 = BREDUC
  273. BREMP2 = BREMPL
  274. IF (CHACRE .EQ. 'SOUC') THEN
  275. ENDIF
  276. IF (TYPOBJ .EQ. 'FLOTTANT') THEN
  277. BREDU2 = .TRUE.
  278. BREMP2 = .TRUE.
  279.  
  280. IF (CHACRE .EQ. 'MAXI') THEN
  281. ELSEIF (CHACRE .EQ. 'MINI') THEN
  282. ELSE
  283. CALL ERREUR(21)
  284. RETURN
  285. ENDIF
  286.  
  287. ELSEIF ((TYPOBJ.EQ.'RIGIDITE') .OR. (TYPOBJ.EQ.'CHPOINT ').OR.
  288. & (TYPOBJ.EQ.'LOGIQUE ' )) THEN
  289. BREDU2 = .TRUE.
  290. BREMP2 = .TRUE.
  291. ENDIF
  292.  
  293. IF (BREDU2) THEN
  294. IF (TYPOBJ .NE. 'RIGIDITE' .AND. TYPOBJ .NE. 'CHPOINT ' .AND.
  295. & TYPOBJ .NE. 'LOGIQUE ' .AND. TYPOBJ .NE. 'FLOTTANT' .AND.
  296. & IMOT2 .EQ. 0 .AND. IMOT3.EQ. 0) THEN
  297. C WRITE(*,*)TYPOBJ,BREMP2,BREMPL
  298. C WRITE(*,*)'FUSION CHKESC ANORMALE...'
  299. C CALL ERREUR(21)
  300. C RETURN
  301. ENDIF
  302.  
  303. C REMPLISSAGE DU SEGMENT SID POUR LA FUSION
  304. NBENT = NBENT + 1
  305. SID.IPOINT(NBENT)= ID1
  306. SID.BVAL (NBENT)= LOGR1
  307. SID.XVAL (NBENT)= XVALRE
  308. SID.CHATYP = TYPOBJ
  309. CHA8 = TYPOBJ
  310.  
  311. IF (ML .GE. 4) THEN
  312. DO I=4,ML
  313. C La TABLE n'est plus SEGDES par acctab pour les ESCLAVES
  314. IND=i-2
  315. CALL ACCTAB(MTABLE,'ENTIER',IND ,0.D0 ,' ',.TRUE.,0,
  316. & TYPOBJ ,IVALRE,XVALRE,CHARRE,LOGR2 ,ID2)
  317. IF (IERR.NE.0) RETURN
  318.  
  319. IF (TYPOBJ .NE. CHA8) THEN
  320. C ERREUR SI LES TYPES SONT DIFFERENTS ENTRE 2 INDICES DE LA TABLE ESCLAVE
  321. MOTERR(1:8 ) = CHA8
  322. MOTERR(9:16) = TYPOBJ
  323. CALL ERREUR(1045)
  324. SEGSUP,SID
  325. C WRITE(6,*)'CHKESC : Sortie n_7'
  326. RETURN
  327. ENDIF
  328.  
  329. C REMPLISSAGE DU SEGMENT SID POUR LA FUSION PAR TOURNOI
  330. NBENT=NBENT + 1
  331. SID.IPOINT(NBENT)= ID2
  332. SID.BVAL(NBENT) = LOGR2
  333. SID.XVAL(NBENT) = XVALRE
  334. ENDDO
  335. ENDIF
  336.  
  337. C LANCEMENT DE LA FUSION DES OBJETS
  338. C IF (IIMPI .EQ. 215821) THEN
  339. C WRITE(IOIMP,*)'FUSION ENCLENCHEE DANS CHKESC : ',CHA8,BREMP2
  340. C CALL TRBAC
  341. C ENDIF
  342. ID = SID
  343. CALL FUNOBJ(ID,ID1,XVALRE,LOGR1)
  344.  
  345. IF (TYPOBJ.EQ.'LOGIQUE ') THEN
  346. CALL POSLOG(LOGR1,ID1)
  347.  
  348. ELSEIF (TYPOBJ.EQ.'FLOTTANT') THEN
  349. IF(ID1 .EQ. 0)THEN
  350. CALL POSREE(XVALRE,ID1)
  351. ELSE
  352. CALL ACTOBJ('LISTREEL',ID1,1)
  353. IMENA=0
  354. ENDIF
  355.  
  356. ELSEIF (TYPOBJ.EQ.'ENTIER ') THEN
  357. C Il manque la gestion de MAXI et MINI pour ce cas la !
  358. CALL ACTOBJ('LISTENTI',ID1,1)
  359. IMENA=0
  360.  
  361. ELSE
  362. CALL ACTOBJ(TYPOBJ,ID1,1)
  363. IMENA=0
  364. ENDIF
  365.  
  366. C REMPLACEMENT DE LA TABLE PAR LE RESULTAT DE LA FUSION
  367. C - Dans la pile GIBIANE
  368. C - Dans la pile des NOMS si BREMP2 est VRAI
  369. CALL RMPGBN(MTABLE,ID1,TYPOBJ,BREMP2)
  370.  
  371. ELSE
  372. WRITE(IOIMP,*)'ERREUR DANS CHKESC.ESO,',TYPOBJ
  373. CALL ERREUR(21)
  374. RETURN
  375. ENDIF
  376.  
  377. SEGSUP,SID
  378. 10 CONTINUE
  379.  
  380. C
  381. 100 CONTINUE
  382. C CALL REFUS
  383. DO IAZI=1,ILUOB
  384. IMOTLU=IAZ(IAZI)
  385. IF(IMOTLU.NE.0) THEN
  386. JPOOB1(IMOTLU)=.TRUE.
  387. IF(IBPILE.GT.IMOTLU) IBPILE=IMOTLU
  388. IF(IHPILE.LT.IMOTLU) IHPILE=IMOTLU
  389. ENDIF
  390. ENDDO
  391. CHARRE=' '
  392. CALL LIRCHA(CHARRE,0,IRETOU)
  393. IF (IRETOU.NE.0) CALL REFUS
  394. IF (IRETOU.EQ.0) RETURN
  395. C CALL TRBAC
  396. IRT=1
  397.  
  398. C WRITE(6,*)'CHKESC : Sortie n_8 NORMALE'
  399. END
  400.  
  401.  
  402.  
  403.  
  404.  
  405.  
  406.  
  407.  
  408.  
  409.  

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