Télécharger coli.eso

Retour à la liste

Numérotation des lignes :

coli
  1. C COLI SOURCE BP208322 15/06/26 21:15:04 8562
  2. SUBROUTINE COLI
  3. C=======================================================================
  4. C
  5. C COMBINAISON LINEAIRE DE CHPOINT OU DE MCHAML
  6. C
  7. C
  8. C OPERATEUR COLI : OBJ = | FLOT1*OBJ1 + FLOT2*OBJ2 + ...... |
  9. C | LCHPO LISTREEL |
  10. C | TABLE LISTREEL |
  11. C
  12. C OPERATION POSSIBLE SUR DES CHPOINTS ET DES CHAMELEMS
  13. C (sauf dans le cas LISTCHPO)
  14. C
  15. C - creation : ?
  16. C - PASSAGE AUX NOUVEAUX MCHAMLS PAR JM CAMPENON LE 01/91
  17. C - OPERANDES TABLE ET LISTREEL INCORPORES LE 02/98 PAR MO
  18. C - LA VERSION DU 02/98 LAISSAIT TROP DE LIBERTE SUR LES INDICES DE
  19. C LA TABLE.ON NE PERMET DORENAVANT QUE DES INDICES DE TYPE ENTIER
  20. C ALLANT DE 1 a N PAR PAS DE 1 03/98 PAR MO
  21. C - extension aux LISTCHPO, 20/05/2015, Benoit Prabel
  22. C - extension aux Table de listreel, 25/06/2015, Benoit Prabel
  23. C
  24. C=======================================================================
  25. *
  26. IMPLICIT INTEGER(I-N)
  27. IMPLICIT REAL*8 (A-H,O-Z)
  28.  
  29. -INC PPARAM
  30. -INC CCOPTIO
  31. -INC SMTABLE
  32. -INC SMLREEL
  33. -INC SMLCHPO
  34. SEGMENT ITA1(0)
  35. SEGMENT ITAN(0)
  36. *
  37. SEGMENT ITA2
  38. REAL*8 TA2(0)
  39. ENDSEGMENT
  40. *
  41. CHARACTER*(8) ITYPE,ITCHPO,ITCHAM,ITTABL,ITYPIND,ITLCHP,ITLREE
  42. REAL*8 RET
  43. DATA ITCHPO/'CHPOINT '/
  44. DATA ITCHAM/'MCHAML '/
  45. DATA ITTABL/'TABLE '/
  46. DATA ITLCHP/'LISTCHPO'/
  47. DATA ITLREE/'LISTREEL'/
  48. ICHP=0
  49. * NA=nombre d elements
  50. NA=0
  51. *
  52. C=======================================================================
  53. C Tentatives de Lecture d'objets permis en entree
  54. C=======================================================================
  55.  
  56. C CHPOINT:
  57. CALL LIROBJ(ITCHPO,IRET,0,IRETOU)
  58. IF(IRETOU.EQ.0) GOTO 2
  59. ITYPE=ITCHPO
  60. GOTO 10
  61. *
  62. C MCHAML:
  63. 2 CALL LIROBJ(ITCHAM,IRET,0,IRETOU)
  64. IF(IRETOU.EQ.0) GOTO 4
  65. ITYPE=ITCHAM
  66. GOTO 10
  67.  
  68. C TABLE et LISTREEL :
  69. 4 CALL LIROBJ(ITTABL,IRET,0,IRETOU)
  70. IF(IRETOU.NE.0) GOTO 40
  71.  
  72. C LISTCHPO et LISTREEL :
  73. CALL LIROBJ(ITLCHP,IRET,0,IRETOU)
  74. IF(IRETOU.NE.0) GOTO 60
  75.  
  76. C PAS D OPERANDE CORRECT TROUVE
  77. 1 CALL QUETYP(MOTERR(1:8),0,IRETOU)
  78. IF(IRETOU.NE.0) THEN
  79. CALL ERREUR (39)
  80. ELSE
  81. CALL ERREUR(533)
  82. ENDIF
  83. RETURN
  84.  
  85. C=======================================================================
  86. C Cas CHPOINT et MCHAML (+flottant)
  87. C=======================================================================
  88.  
  89. 10 ICHP=1
  90. SEGINI ITA1
  91. SEGINI ITA2
  92. NA=1
  93. ITA1(**)=IRET
  94. CALL LIRREE(RET,1,IRETOU)
  95. IF(IERR.NE.0) GOTO 5001
  96. TA2(**)=RET
  97. c on boucle jusqu a ne plus lire de champ ITYPE, puis goto 100
  98. 11 CALL LIROBJ(ITYPE,IRET,0,IRETOU)
  99. IF(IRETOU.EQ.0) GOTO 100
  100. NA=NA+1
  101. ITA1(**)=IRET
  102. CALL LIRREE(RET,1,IRETOU)
  103. IF(IERR.NE.0) GOTO 5001
  104. TA2(**)=RET
  105. GOTO 11
  106.  
  107.  
  108. C=======================================================================
  109. C Cas TABLE (+listreel)
  110. C=======================================================================
  111.  
  112. 40 MTABLE=IRET
  113. SEGACT MTABLE
  114. NB=MLOTAB
  115.  
  116. **** + listreel
  117. CALL LIROBJ('LISTREEL',IRETR,0,IRETOU)
  118. IF(IRETOU.EQ.0) GOTO 1
  119. MLREEL= IRETR
  120. SEGACT MLREEL
  121.  
  122. **** table de LISTREELs ou de CHPOINT ou de MCHAML
  123. SEGINI ITA1
  124. SEGINI ITA2
  125. NA = 0
  126. ITYPE=' '
  127. DO 50 IB=1,NB
  128.  
  129. IF(MTABTI(IB).NE.'ENTIER ') GOTO 50
  130.  
  131. IF(NA.EQ.0) ITYPE=MTABTV(IB)
  132. IF(MTABTV(IB).NE.ITYPE) THEN
  133. SEGSUP ITA1,ITA2
  134. SEGDES MTABLE,MLREEL
  135. WRITE(ioimp,*) 'Objet de type',MTABTV(IB),
  136. & ' au lieu de ',ITYPE,' attendu'
  137. CALL ERREUR(39)
  138. RETURN
  139. ENDIF
  140.  
  141. c ici, tout se passe bien
  142. NA = NA + 1
  143. IJ = MTABII(IB)
  144. C extraction des LISTREELs ou de CHPOINT ou de MCHAML
  145. ITA1(**)=MTABIV(IB)
  146. C extraction des reels
  147. IF (IJ.gt.PROG(/1)) THEN
  148. SEGSUP ITA1,ITA2
  149. SEGDES MLREEL,MTABLE
  150. WRITE(ioimp,*) 'Indice',IJ,
  151. & ' au dela de la dimesnion du listreel'
  152. CALL ERREUR (217)
  153. RETURN
  154. ENDIF
  155. TA2(**)=(PROG(IJ))
  156.  
  157. 50 CONTINUE
  158. SEGDES MTABLE,MLREEL
  159.  
  160. **** type d'objets admis ou pas ?
  161. IF(ITYPE.eq.ITLREE.OR.ITYPE.eq.ITCHPO.OR.ITYPE.eq.ITCHAM) THEN
  162. ICHP=1
  163. GOTO 100
  164. ELSE
  165. SEGSUP ITA1,ITA2
  166. WRITE(ioimp,*) 'Type d objet interdit !'
  167. CALL ERREUR (225)
  168. RETURN
  169. ENDIF
  170.  
  171.  
  172.  
  173. C=======================================================================
  174. C Cas LISTCHPO (+listreel)
  175. C=======================================================================
  176.  
  177. 60 MLCHPO=IRET
  178. SEGACT MLCHPO
  179. NA=ICHPOI(/1)
  180. ITYPE=ITCHPO
  181. ICHP=1
  182.  
  183. c lecture du listreel des coefficients
  184. CALL LIROBJ('LISTREEL',IRETR,0,IRETOU)
  185. IF(IRETOU.EQ.0) THEN
  186. SEGDES,MLCHPO
  187. GOTO 1
  188. ENDIF
  189. MLREEL= IRETR
  190. SEGACT MLREEL
  191. * test dime de tab = dime listreel
  192. IF(NA.NE.PROG(/1)) THEN
  193. SEGDES MLREEL
  194. SEGDES MLCHPO
  195. CALL ERREUR (217)
  196. RETURN
  197. ENDIF
  198. SEGINI ITA1
  199. SEGINI ITA2
  200. DO 61 IJ=1,NA
  201. C extraction des champs
  202. ITA1(**)=ICHPOI(IJ)
  203. C extraction des reels
  204. TA2(**)=PROG (IJ)
  205. 61 CONTINUE
  206. SEGDES MLCHPO
  207. SEGDES MLREEL
  208. C
  209. GOTO 100
  210.  
  211.  
  212. C=======================================================================
  213. C Calcul effectif de la combinaison lineaire
  214. C=======================================================================
  215. 100 CONTINUE
  216. c write(ioimp,*) 'ITYPE=',ITYPE
  217. c write(ioimp,*) 'ITA1=',(ITA1(iou),iou=1,NA)
  218. c write(ioimp,*) ' TA2=',(TA2(iou),iou=1,NA)
  219. *bp SEGDES ITA1,ITA2
  220. *bp IF(ITYPE.EQ.ITCHPO) CALL COMBIL(ITA1,ITA2,IRET)
  221. *bp IF(ITYPE.EQ.ITCHAM) CALL COMBYL(ITA1,ITA2,IRET)
  222. IF(ITYPE.EQ.ITCHPO) CALL COMBIL(ITA1,ITA2,NA,IRET)
  223. IF(ITYPE.EQ.ITCHAM) CALL COMBYL(ITA1,ITA2,NA,IRET)
  224. IF(ITYPE.EQ.ITLREE) CALL COLILR(ITA1,ITA2,NA,IRET)
  225. IF(IERR.NE.0) GOTO 5001
  226. *
  227. * Ecriture de l'objet resultat
  228. IF(ICHP.EQ.1) THEN
  229. CALL ECROBJ(ITYPE,IRET)
  230. ENDIF
  231.  
  232. * Fin normale
  233. 5001 CONTINUE
  234. SEGSUP ITA1
  235. SEGSUP ITA2
  236. *
  237. RETURN
  238. END
  239.  
  240.  
  241.  
  242.  
  243.  

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