Télécharger kops.eso

Retour à la liste

Numérotation des lignes :

kops
  1. C KOPS SOURCE GOUNAND 25/11/12 21:15:32 12399
  2. C Retour à la version de Stéphane
  3. C KOPS SOURCE GOUNAND 11/05/25 21:15:20 6980
  4. SUBROUTINE KOPS
  5. C*************************************************************************
  6. C
  7. C cet operateur effectue des operations speciales entre les CHPOINT-TRIO
  8. C
  9. C
  10. C
  11. C
  12. C*************************************************************************
  13.  
  14. IMPLICIT INTEGER(I-N)
  15. IMPLICIT REAL*8 (A-H,O-Z)
  16.  
  17.  
  18. -INC PPARAM
  19. -INC CCOPTIO
  20. -INC SMTABLE
  21. -INC SMLMOTS
  22. -INC SMLENTI
  23. -INC SMELEME
  24. POINTEUR MELEMC.MELEME
  25. -INC SMCOORD
  26.  
  27. POINTEUR MAT1.MATRIK,MAT2.MATRIK,MAT3.MATRIK,IMAT1.IMATRI
  28.  
  29.  
  30. *
  31. * OBJET RIGIDITE
  32. *
  33. SEGMENT STCOUP
  34. INTEGER MCOUP(nicd,nicp)
  35. ENDSEGMENT
  36.  
  37. * -INC SMRIGID
  38. * Un peu dangereux si le segmet MRIGID evolue ?
  39. SEGMENT MRIGID
  40. CHARACTER*8 MTYMAT
  41. REAL*8 COERIG(NRIGEL)
  42. INTEGER JRIGEL(8,NRIGEL)
  43. INTEGER ICHOLE,IMGEO1,IMGEO2,IFORIG
  44. INTEGER ISUPEQ,JRCOND,JRDEPP,JRDEPD
  45. INTEGER JRELIM,JRGARD,JRTOT,IMLAG
  46. INTEGER JRSUP,IVECRI
  47. INTEGER MCRCNF
  48. ENDSEGMENT
  49. -INC SMCHPOI
  50.  
  51. DIMENSION XVEC(3),ITINC(100)
  52. INTEGER JMOTS
  53. CHARACTER*8 TYPE,TYPC,TYPE1,TYPE2
  54. PARAMETER (NBOP=32)
  55. CHARACTER*4 NOMTOT(10)
  56. CHARACTER*(LOCOMP) MOCOMP,NOMI
  57. CHARACTER*8 LOPER(NBOP),MTYP,NOM,NOMC,NOMK,LXNM
  58. CHARACTER*8 NOMKP,NOMKD
  59. CHARACTER*8 BLAN
  60. DATA BLAN/' '/
  61. DATA LOPER/'MULT ','DIVI ','........','........','ET ',
  62. & '* ','/ ','+ ','- ','** ',
  63. & '|< ','>| ','GRAD ','ROT ','CLIM ',
  64. & 'INV ','MATRAK ','MATRIK ','VNIMP ','VTIMP ',
  65. & 'MTABX ','CMCTSPLT','MATIDE ','RIGIDITE','GRADS ',
  66. & 'EXTRCOMP','EXTRMASS','EXTRPREC','CHANINCO','TRANSPOS',
  67. & 'MATDIAGO','EXTRCOUP'/
  68. C***
  69. segact mcoord
  70. JMOTS =0
  71. NAG =0
  72. NBMAT =0
  73. IKASS =0
  74. MCHPO1=0
  75. MCHPO2=0
  76. MCHPOI=0
  77. MPOVA1=0
  78. MPOVA2=0
  79. XVAL1 =0.
  80. XVAL2 =0.
  81. NFLOT =0
  82. MTABD =0
  83.  
  84. C ********************************************
  85. C * La premiere partie de cette routine *
  86. C * consiste a recuperer les arguments de *
  87. C * l operateur KOPS afin de pouvoir leurs *
  88. C * attribuer le traitement correspondant *
  89. C ********************************************
  90.  
  91. 10 CONTINUE
  92. C On saisit le premier objet de la pile
  93. C *************************************
  94.  
  95. CALL QUETYP(MTYP,0,IRET)
  96. IF(IRET.EQ.0)GO TO 9
  97. C write(6,*)' KOPS nag=',NAG,' MTYP=',MTYP
  98.  
  99. C ============================================
  100. C Cas : Objet = MOT
  101. C ============================================
  102. IF(MTYP.EQ.'MOT')THEN
  103. JMOTS=1
  104.  
  105. C? CALL LIRCHA(MMOP,1,NBC)
  106. C? CALL OPTLI(KOP,LOPER,MMOP,NBOP)
  107.  
  108. CALL LIRMOT(LOPER,NBOP,KOP,0)
  109. c* if (kop.eq.0) write(6,*)' KOPS ',KOP,' pas d operateur'
  110. c* if (kop.ne.0) write(6,*)' KOPS ',KOP,LOPER(KOP)
  111. IF(KOP.EQ.0)THEN
  112. CALL RYO2V(IRET)
  113. IF(IRET.EQ.0)RETURN
  114. WRITE(6,*)' Opérateur KOPS :',KOP
  115. WRITE(6,*)' Operation inconnue '
  116. RETURN
  117. ENDIF
  118.  
  119. C Cas tres tres particulier(s)
  120.  
  121. C CAS KOP=17
  122. IF(KOP.EQ.17)THEN
  123. NRIGE=8
  124. NMATRI=0
  125. NKID =9
  126. NKMT =7
  127. SEGINI MATRIK
  128. SEGDES MATRIK
  129. CALL ECROBJ('MATRIK',MATRIK)
  130.  
  131. RETURN
  132. ENDIF
  133.  
  134. C CAS KOP=18
  135. IF(KOP.EQ.18)THEN
  136. NRIGE=7
  137. NMATRI=0
  138. NKID =9
  139. NKMT =7
  140. SEGINI MATRIK
  141. SEGDES MATRIK
  142. CALL ECROBJ('MATRIK',MATRIK)
  143.  
  144. NAT=2
  145. NSOUPO=0
  146. SEGINI MCHPOI
  147. MTYPOI = ' '
  148. MOCHDE = ' '
  149. JATTRI(1)=2
  150. IFOPOI = IFOUR
  151. SEGDES MCHPOI
  152. CALL ECROBJ('CHPOINT',MCHPOI)
  153.  
  154. RETURN
  155. ENDIF
  156.  
  157. C CAS KOP=19
  158. IF(KOP.EQ.19)THEN
  159.  
  160. CALL VNIMP
  161.  
  162. RETURN
  163. ENDIF
  164.  
  165. C CAS KOP=20
  166. IF(KOP.EQ.20)THEN
  167.  
  168. CALL VTIMP
  169.  
  170. RETURN
  171. ENDIF
  172.  
  173. C CAS KOP=21 MTABX
  174. IF(KOP.EQ.21)THEN
  175.  
  176. CALL LIROBJ('TABLE',MTABX,1,IRET)
  177. IF(IRET.EQ.0)RETURN
  178. CALL LIRREE(DTR,1,IRET)
  179. IF(IRET.EQ.0)RETURN
  180. KKIZG=0
  181. TYPE=' '
  182. CALL ACMO(MTABX,'KIZG',TYPE,KIZG)
  183. IF(KIZG.NE.0)THEN
  184. TYPE=' '
  185. CALL ACMO(MTABX,'LISTINCO',TYPE,MLMOTS)
  186. IF(MLMOTS.EQ.0)RETURN
  187. SEGACT MLMOTS
  188. NBMOT=MOTS(/2)
  189. DO 36476 I=1,NBMOT
  190. NOMI=MOTS(I)
  191. TYPE=' '
  192. CALL ACMO(KIZG,NOMI,TYPE,MCHPOI)
  193. IF(TYPE.NE.'CHPOINT')GO TO 36476
  194. SEGACT MCHPOI
  195. NSOUPO=IPCHP(/1)
  196. IF(NSOUPO.NE.1)RETURN
  197. MSOUPO=IPCHP(1)
  198. SEGACT MSOUPO
  199. NC=NOCOMP(/2)
  200. DO 36477 J=1,NC
  201. IF(NC.NE.1.AND.NC.LT.10)THEN
  202. WRITE(MOCOMP,FMT='(I1,A7)')J,NOMI(1:LOCOMP-1)
  203. ELSEIF(NC.EQ.1)THEN
  204. WRITE(MOCOMP,FMT='(A8)')NOMI
  205. ELSE
  206. RETURN
  207. ENDIF
  208. NOCOMP(J)=MOCOMP
  209. 36477 CONTINUE
  210. KKIZG=1
  211. CALL ECROBJ('CHPOINT ',MCHPOI)
  212. CALL ECRREE(-1.D0)
  213. CALL OPERMU
  214. IF(I.GT.1)CALL OPERAD
  215. 36476 CONTINUE
  216. ENDIF
  217.  
  218. IF(KKIZG.NE.0)THEN
  219. CALL ECRREE(DTR)
  220. CALL OPERMU
  221. ENDIF
  222.  
  223. TYPE=' '
  224. CALL ACMO(MTABX,'SMBR',TYPE,MCHPOI)
  225. IF(TYPE.EQ.'CHPOINT')THEN
  226. CALL ECROBJ('CHPOINT ',MCHPOI)
  227. IF(KKIZG.NE.0)CALL OPERAD
  228. ELSE
  229. IF(KKIZG.EQ.0)CALL ECRREE(1.D0)
  230. ENDIF
  231.  
  232. CALL ECME(MTABX,'SMBR',1)
  233.  
  234. RETURN
  235. ENDIF
  236.  
  237. C CAS KOP=22
  238. IF(KOP.EQ.22)THEN
  239.  
  240. CALL SPLTCC
  241.  
  242. RETURN
  243. ENDIF
  244.  
  245. C KAS KOP=23 ('MATIDE')
  246.  
  247. IF(KOP .EQ. 23)THEN
  248. CALL KOPSID
  249. RETURN
  250. ENDIF
  251.  
  252. C CAS KOP=24
  253. IF(KOP.EQ.24)THEN
  254. NRIGE=8
  255. NRIGEL=0
  256. SEGINI MRIGID
  257. MTYMAT=' '
  258. IFORIG=IFOUR
  259. SEGDES MRIGID
  260. CALL ECROBJ('RIGIDITE',MRIGID)
  261.  
  262. NAT=2
  263. NSOUPO=0
  264. SEGINI MCHPOI
  265. MTYPOI = ' '
  266. MOCHDE = ' '
  267. JATTRI(1)=2
  268. IFOPOI = IFOUR
  269. SEGDES MCHPOI
  270. CALL ECROBJ('CHPOINT',MCHPOI)
  271.  
  272. RETURN
  273. ENDIF
  274. C
  275. C CAS KOP=25 'GRADS'
  276. IF(KOP.EQ.25)THEN
  277. GO TO 10
  278. ENDIF
  279. C
  280. C CAS KOP=26 'EXTRCOMP'
  281. IF(KOP.EQ.26)THEN
  282. CALL LIRCHA(NOMC,1,IRET)
  283. CALL LIRCHA(NOMK,1,IRET)
  284. IF(IRET.EQ.0)RETURN
  285. CALL LIROBJ('MATRIK',MAT1,1,IRET)
  286. IF(IRET.EQ.0)RETURN
  287.  
  288. SEGACT MAT1
  289. NRIGE =MAT1.IRIGEL(/1)
  290. NMATRI=MAT1.IRIGEL(/2)
  291. NMATRI=0
  292. NKID =MAT1.KIDMAT(/1)
  293. NKMT =MAT1.KKMMT(/1)
  294. SEGINI MATRIK
  295. CALL RSETI(KIDMAT,MAT1.KIDMAT,NKID)
  296. CALL RSETI(KKMMT ,MAT1.KKMMT ,NKMT)
  297. KSYM = MAT1.KSYM
  298. mincp= MAT1.KMINC
  299. if(mincp.ne.0)then
  300. segact mincp
  301. nbi= mincp.LISINC(/2)
  302. npt= mincp.NPOS(/1)-1
  303. segini minc
  304. call rseti(npos,mincp.npos,npt+1)
  305. call rseti(mpos,mincp.mpos,(npt*(nbi+1)))
  306. lisinc(1)=NOMK
  307. if(nbi.ne.1)then
  308. write(6,*)' Gross Pb NBI=',nbi
  309. write(6,*)(mincp.lisinc(ii),ii=1,nbi)
  310. call arret (0)
  311. endif
  312. KMINC = minc
  313. KMINCP= minc
  314. KMINCD= minc
  315. endif
  316.  
  317. KIZM = MAT1.KIZM
  318.  
  319. KISPGT= MAT1.KISPGT
  320. KISPGP= MAT1.KISPGP
  321. KISPGD= MAT1.KISPGD
  322.  
  323. KNTTT = MAT1.KNTTT
  324. KNTTP = MAT1.KNTTP
  325. KNTTD = MAT1.KNTTD
  326.  
  327. NMATR1=MAT1.IRIGEL(/2)
  328. c write(6,*)'NMATR1=',NMATR1
  329. do 6432 lm=1, NMATR1
  330. IMAT1=MAT1.irigel(4,lm)
  331. segact imat1
  332. nbmf=IMAT1.LISPRI(/2)
  333. c write(6,*)' NBMF=',nbmf
  334.  
  335. LXNM='LX'//NOMC(1:2)
  336. do 6433 lmf=1,nbmf
  337. NOMKP=NOMK
  338. NOMKD=NOMK
  339. if(NOMC.eq.IMAT1.LISPRI(lmf)
  340. & .OR.LXNM.eq.IMAT1.LISPRI(lmf))then
  341. if(LXNM.eq.IMAT1.LISPRI(lmf))NOMKP='LX'//NOMK(1:2)
  342.  
  343. if(NOMC.NE.IMAT1.LISDUA(lmf)
  344. & .AND.LXNM.NE.IMAT1.LISDUA(lmf))then
  345. write(6,*)' On a perdu ', nomc,lmf
  346. call erreur(153)
  347. return
  348. endif
  349. if(LXNM.eq.IMAT1.LISDUA(lmf))NOMKD='LX'//NOMK(1:2)
  350. NMATRI=NMATRI+1
  351. segadj MATRIK
  352. do 6434 i7=1,7
  353. irigel(i7,nmatri)=mat1.irigel(i7,lm)
  354. 6434 continue
  355.  
  356. nbme=1
  357. nbsous=IMAT1.lizafm(/1)
  358. segini IMATRI
  359. irigel(4,nmatri)=IMATRI
  360. KSPGP=IMAT1.KSPGP
  361. KSPGD=IMAT1.KSPGD
  362. LISPRI(1)=NOMKP
  363. LISDUA(1)=NOMKD
  364. do 6435 is=1,nbsous
  365. LIZAFM(is,1)=IMAT1. LIZAFM(is,lmf)
  366. 6435 continue
  367.  
  368.  
  369. endif
  370. 6433 continue
  371. 6432 continue
  372.  
  373. SEGDES MATRIK
  374. CALL ECROBJ('MATRIK',MATRIK)
  375. RETURN
  376. ENDIF
  377. C
  378. C
  379. C CAS KOP=32 'EXTRCOUP'
  380. IF(KOP.EQ.32)THEN
  381. CALL LIROBJ('MATRIK',MAT1,1,IRET)
  382. IF(IRET.EQ.0)RETURN
  383. CALL ECROBJ('MATRIK',MAT1)
  384. CALL EXTIPD
  385. CALL LIROBJ('LISTMOTS',MLMOT1,1,IRET)
  386. CALL LIROBJ('LISTMOTS',MLMOT2,1,IRET)
  387. SEGACT MLMOT1
  388. SEGACT MLMOT2
  389. nicp=MLMOT1.MOTS(/2)
  390. nicd=MLMOT2.MOTS(/2)
  391. SEGINI STCOUP
  392. CALL INITI(MCOUP,(nicp*nicd),0)
  393. * write(6,*)(MLMOT1.MOTS(ii),ii=1,nicp)
  394. * write(6,*)(MLMOT2.MOTS(ii),ii=1,nicd)
  395.  
  396. SEGACT MAT1
  397.  
  398. NMATR1=MAT1.IRIGEL(/2)
  399. do 7432 lm=1, NMATR1
  400. IMAT1=MAT1.irigel(4,lm)
  401. segact imat1
  402. nbmf=IMAT1.LISPRI(/2)
  403.  
  404. do 7433 lmf=1,nbmf
  405. NOMKP=IMAT1.LISPRI(lmf)
  406. NOMKD=IMAT1.LISDUA(lmf)
  407. c write(6,*)NOMKP,'----',NOMKD
  408. CALL OPTLI4(IP1,MLMOT1.MOTS,NOMKP(1:4),nicp)
  409. CALL OPTLI4(IP2,MLMOT2.MOTS,NOMKD(1:4),nicd)
  410. MCOUP(IP2,IP1)=1
  411. 7433 continue
  412. 7432 continue
  413.  
  414. c write(6,*)' MCOUP ',nicp,nicd
  415. c do 7400 k=1,nicp
  416. c write(6,*)(MCOUP(k,i),i=1,nicd)
  417. c7400 continue
  418.  
  419.  
  420. IF(nicp.NE.nicd)THEN
  421. write(6,*)' ERREUR nicp ne nicd ',nicp,nicd
  422. return
  423. ENDIF
  424. * SG 2025/10/30 : pour bien mettre en evidence tous les couplages
  425. * possibles entre inconnues, on ajoute les produits tensoriels de
  426. * chaque ligne avec elle-meme
  427. do ilig=1,nicp
  428. do icol1=1,nicp
  429. do icol2=1,nicp
  430. i12=MCOUP(ilig,icol1)*MCOUP(ilig,icol2)
  431. MCOUP(icol1,icol2)=max(MCOUP(icol1,icol2),i12)
  432. enddo
  433. enddo
  434. enddo
  435. * Pareil pour les colonnes
  436. do icol=1,nicp
  437. do ilig1=1,nicp
  438. do ilig2=1,nicp
  439. i12=MCOUP(ilig1,icol)*MCOUP(ilig2,icol)
  440. MCOUP(ilig1,ilig2)=max(MCOUP(ilig1,ilig2),i12)
  441. enddo
  442. enddo
  443. enddo
  444.  
  445.  
  446. CALL CRTABL(MTABLE)
  447. npart=0
  448.  
  449. do 7401 k=1,nicp
  450.  
  451. JGN=LOCOMP
  452. JGM=0
  453. segini MLMOT3
  454. I0=MCOUP(k,k)
  455.  
  456. IF(I0.EQ.0)THEN
  457. write(6,*)' ERREUR : La diagonale est nulle'
  458. return
  459. ENDIF
  460.  
  461. IF(I0.EQ.-1)GO TO 7401
  462. JGM=JGM+1
  463. SEGADJ MLMOT3
  464. MLMOT3.MOTS(JGM)=MLMOT2.MOTS(k)
  465. MCOUP(k,k)=-1
  466.  
  467. it=0
  468. do 7402 m=1,nicd
  469. I1=MCOUP(k,m)
  470. IF(I1.EQ.1)THEN
  471. it=it+1
  472. itinc(it)=i1
  473. JGM=JGM+1
  474. SEGADJ MLMOT3
  475. MLMOT3.MOTS(JGM)=MLMOT2.MOTS(m)
  476. MCOUP(k,m)=-1
  477. MCOUP(m,m)=-1
  478. ENDIF
  479. 7402 continue
  480.  
  481. 7405 continue
  482. itp=0
  483. do j=1,it
  484. il=itinc(j)
  485.  
  486. do m=1,nicd
  487. I1=MCOUP(k,m)
  488. IF(I1.EQ.1)THEN
  489. itp=itp+1
  490. itinc(itp)=i1
  491. JGM=JGM+1
  492. SEGADJ MLMOT3
  493. MLMOT3.MOTS(JGM)=MLMOT2.MOTS(m)
  494. MCOUP(il,m)=-1
  495. ENDIF
  496. enddo
  497. enddo
  498. do 7404 m=1,itp
  499. itinc(m)=itinc(m+it)
  500. 7404 continue
  501. it=itp
  502. IF(ITP.NE.0)go to 7405
  503. npart=npart+1
  504. segdes MLMOT3
  505. CALL ECCTAB(MTABLE,'ENTIER',npart,0.D0,BLAN,.TRUE.,0,
  506. 1 'LISTMOTS',0,0.D0,BLAN,.TRUE.,MLMOT3)
  507.  
  508. 7401 continue
  509.  
  510. SEGSUP STCOUP
  511. SEGDES MTABLE,MLMOT3
  512. CALL ECROBJ('TABLE',MTABLE)
  513. RETURN
  514. ENDIF
  515. C
  516. C
  517. C CAS KOP=27 'EXTRMASS' ou 'EXTRPREC'
  518. IF(KOP.EQ.27.OR.KOP.EQ.28)THEN
  519. CALL LIRCHA(NOMC,1,IRET)
  520. CALL LIRCHA(NOMK,1,IRET)
  521. IF(IRET.EQ.0)RETURN
  522. CALL LIROBJ('MATRIK',MAT1,1,IRET)
  523. IF(IRET.EQ.0)RETURN
  524.  
  525. SEGACT MAT1
  526. NRIGE =MAT1.IRIGEL(/1)
  527. NMATRI=MAT1.IRIGEL(/2)
  528. NMATRI=0
  529. NKID =MAT1.KIDMAT(/1)
  530. NKMT =MAT1.KKMMT(/1)
  531. SEGINI MATRIK
  532. CALL RSETI(KIDMAT,MAT1.KIDMAT,NKID)
  533. CALL RSETI(KKMMT ,MAT1.KKMMT ,NKMT)
  534. KSYM = MAT1.KSYM
  535. mincp= MAT1.KMINC
  536. if(mincp.ne.0)then
  537. segact mincp
  538. nbi= mincp.LISINC(/2)
  539. npt= mincp.NPOS(/1)-1
  540. segini minc
  541. call rseti(npos,mincp.npos,npt+1)
  542. call rseti(mpos,mincp.mpos,(npt*(nbi+1)))
  543. lisinc(1)=NOMK
  544. if(nbi.ne.1)then
  545. write(6,*)' Gross Pb NBI=',nbi
  546. write(6,*)(mincp.lisinc(ii),ii=1,nbi)
  547. call arret (0)
  548. endif
  549. KMINC = minc
  550. KMINCP= minc
  551. KMINCD= minc
  552. endif
  553.  
  554. KIZM = MAT1.KIZM
  555.  
  556. KISPGT= MAT1.KISPGT
  557. KISPGP= MAT1.KISPGP
  558. KISPGD= MAT1.KISPGD
  559.  
  560. KNTTT = MAT1.KNTTT
  561. KNTTP = MAT1.KNTTP
  562. KNTTD = MAT1.KNTTD
  563.  
  564. NMATR1=MAT1.IRIGEL(/2)
  565. c write(6,*)'NMATR1=',NMATR1
  566. do 6532 lm=1, NMATR1
  567. IMAT1=MAT1.irigel(4,lm)
  568. segact imat1
  569. nbmf=IMAT1.LISPRI(/2)
  570. c write(6,*)' NBMF=',nbmf
  571.  
  572. do 6533 lmf=1,nbmf
  573. if(NOMC.eq.IMAT1.LISPRI(lmf))then
  574. if(NOMC.NE.IMAT1.LISDUA(lmf))then
  575. c write(6,*)' On a perdu ', nomc,lmf
  576. call erreur(5)
  577. return
  578. endif
  579. c write(6,*)' On a gagne ', nomc,lmf
  580. NMATRI=NMATRI+1
  581. segadj MATRIK
  582. do 6534 i7=1,7
  583. irigel(i7,nmatri)=mat1.irigel(i7,lm)
  584. 6534 continue
  585.  
  586. nbme=1
  587. nbsous=IMAT1.lizafm(/1)
  588. segini IMATRI
  589. irigel(4,nmatri)=IMATRI
  590. KSPGP=IMAT1.KSPGP
  591. KSPGD=IMAT1.KSPGD
  592. LISPRI(1)=NOMK
  593. LISDUA(1)=NOMK
  594. do 6535 is=1,nbsous
  595. c? LIZAFM(is,1)=IMAT1. LIZAFM(is,lmf)
  596. 6535 continue
  597.  
  598.  
  599. endif
  600. 6533 continue
  601. 6532 continue
  602. SEGDES MATRIK
  603. CALL ECROBJ('MATRIK',MATRIK)
  604. RETURN
  605. ENDIF
  606. C
  607. * Option CHANINCO idem opérateur 'CHANGER' 'INCO'
  608. * mais pour les matrik et pour les rigidités y compris les multiplicateurs
  609. IF (KOP.EQ.29) THEN
  610. * MAtrik CHanger INco
  611. CALL MACHIN
  612. RETURN
  613. ENDIF
  614. C
  615. * Option TRANSPOS transpose une matrice
  616. * (matrik ou rigidité)
  617. IF (KOP.EQ.30) THEN
  618. * TRanSpose MaTrice
  619. CALL TRSMAT
  620. RETURN
  621. ENDIF
  622. C
  623. * Option MATIAGO pour créer une matrice diagonale
  624. IF (KOP .EQ. 31) THEN
  625. CALL KOPDIA
  626. RETURN
  627. ENDIF
  628. C
  629. GO TO 10
  630.  
  631. C ==============================================
  632. C Cas : Objet = FLOTTANT ou ENTIER
  633. C ==============================================
  634. ELSEIF(MTYP.EQ.'FLOTTANT'.OR.MTYP.EQ.'ENTIER')THEN
  635. NAG=NAG+1
  636. NFLOT=NFLOT+1
  637. IF(NAG.GT.2)GO TO 91
  638. IF((NAG.EQ.1).OR.(NBMAT.EQ.1)) THEN
  639. CALL LIRREE(XVAL,1,IRET)
  640. XVAL1=XVAL
  641. GO TO 10
  642. END IF
  643. IF(NAG.EQ.2)CALL LIRREE(XVAL,1,IRET)
  644. XVAL2=XVAL
  645. GO TO 10
  646.  
  647. C =============================================
  648. C Cas : Objet = CHPOINT
  649. C =============================================
  650. ELSEIF(MTYP.EQ.'CHPOINT')THEN
  651. NAG=NAG+1
  652. IF(NAG.GT.2)GO TO 91
  653. IF ((NAG.EQ.1).OR.(NBMAT.EQ.1))THEN
  654. CALL LIROBJ('CHPOINT',MCHPO1,1,IRET)
  655. CALL LICHT(MCHPO1,MPOVA1,TYPE1,IGEOM1)
  656. ELSE
  657. CALL LIROBJ('CHPOINT',MCHPO2,1,IRET)
  658. IF(KOP.NE.15)THEN
  659. CALL LICHT(MCHPO2,MPOVA2,TYPE2,IGEOM2)
  660. ELSE
  661. GO TO 20
  662. ENDIF
  663. ENDIF
  664.  
  665. C ============================================
  666. C Cas : Objet = TABLE
  667. C ============================================
  668. ELSEIF(MTYP.EQ.'TABLE'.OR.MTYP.EQ.'MMODEL')THEN
  669. NAG=NAG+1
  670. IF(NAG.GT.2)GO TO 91
  671. C? CALL LITABS('DOMAINE ',MTABD,1,1,IRET)
  672. CALL LITDMD(MMODEL,MTABD,IRET)
  673. IF(IRET.EQ.0)RETURN
  674. IF(MTABD.EQ.0)CALL LEKMOD(MMODEL,MTABD,INEFMD)
  675. C INEFMD=1 LINE =2 MACRO =3 QUADRATIQUE
  676.  
  677. C ============================================
  678. C Cas : Objet = POINT
  679. C ============================================
  680. ELSEIF(MTYP.EQ.'POINT')THEN
  681. NAG=NAG+1
  682. IF(NAG.GT.2)GO TO 91
  683. CALL LIROBJ('POINT',MPOINT,1,IRET)
  684. IF(NAG.EQ.1)IKASS=4
  685. IF(NAG.EQ.2)IKASS=5
  686. XVEC(1)=XCOOR((MPOINT-1)*(IDIM+1) +1)
  687. XVEC(2)=XCOOR((MPOINT-1)*(IDIM+1) +2)
  688. IF(IDIM.EQ.3)XVEC(3)=XCOOR((MPOINT-1)*(IDIM+1)+3)
  689. C Si MPOVA1 n'est pas initialise, il peut poser
  690. C des problemes dans la partie 'operations'
  691.  
  692. MPOVA1 = 0
  693. C ===========================================
  694. C Cas Objet = MATRIK
  695. C ===========================================
  696. ELSEIF(MTYP.EQ.'MATRIK')THEN
  697. NAG=NAG+1
  698. IF(NAG.GT.2)GO TO 91
  699. NBMAT=NBMAT+1
  700. IF (NBMAT.EQ.1) THEN
  701. CALL LIROBJ('MATRIK',MAT1,1,IRET)
  702. ELSEIF (NBMAT.EQ.2) THEN
  703. CALL LIROBJ('MATRIK',MAT2,1,IRET)
  704. END IF
  705. IF (NBMAT.EQ.1) IKASS=6
  706. IF (NBMAT.EQ.2) IKASS=7
  707.  
  708. C ===========================================
  709. C Cas Objet non prevu
  710. C ===========================================
  711. ELSE
  712. MOTERR(1:8)=MTYP
  713. CALL ERREUR(39)
  714. * WRITE(6,*)' Opérateur KOPS :'
  715. * WRITE(6,*)' Type d''objet :',MTYP,' non prevu'
  716. RETURN
  717. ENDIF
  718.  
  719.  
  720. GO TO 10
  721.  
  722. C *****************************************
  723. C * Deuxieme partie *
  724. C * On effectue ici une batterie de tests *
  725. C * afin de determiner si on fait des *
  726. C * operations valides *
  727. C *****************************************
  728. 9 CONTINUE
  729. IF (JMOTS.EQ.0) THEN
  730. moterr(1:8)='MOTS '
  731. call erreur(37)
  732. RETURN
  733. ENDIF
  734. IKAS=3
  735. IF(MCHPO1.EQ.0)IKAS=1
  736. IF(MCHPO2.EQ.0)IKAS=2
  737. IF((MCHPO1.EQ.0.AND.MCHPO2.EQ.0).AND.NBMAT.EQ.0)THEN
  738. WRITE(6,*)' Opérateur KOPS :'
  739. WRITE(6,*)' Il n''y a pas de CHPOINT ?? '
  740. RETURN
  741. ENDIF
  742. IF(IKASS.NE.0)IKAS=IKASS
  743. *
  744. CALL COMBNA(MCHPO1,MCHPO2,INAT,IATTR)
  745.  
  746. * write(6,*)' MCHPO1,MCHPO2=',MCHPO1,MCHPO2,IKAS,IKASS
  747. * &,' KOP=',KOP
  748. * write(6,*)' INAT,IATTR=',INAT,IATTR
  749.  
  750. IF(IKAS.EQ.3)THEN
  751.  
  752. IF(IGEOM1.NE.IGEOM2)THEN
  753. NBCOMP=-1
  754. CALL QUEPOI(MCHPO2,IGEOM1,INDIC,NBCOMP,NOMTOT)
  755. C write(6,*)' indic,nbcom=',indic,nbcom
  756. CALL LICHT(MCHPO2,MPOVA2,TYPE2,IGEOM2)
  757. IF(INDIC.LT.0)THEN
  758. WRITE(6,*)' Opérateur KOPS :'
  759. WRITE(6,*)' Les deux champs n''ont pas le meme support '
  760. & ,'geometrique ou pire '
  761. WRITE(6,*)' IGEOM1=',IGEOM1,' IGEOM2=',IGEOM2
  762. RETURN
  763. ENDIF
  764. ENDIF
  765.  
  766. IF(MPOVA1.EQ.0.AND.IGEOM1.EQ.0)THEN
  767. C WRITE(6,*)'CAS OU LES CHPOINTS SONT VIDE'
  768. NC1=0
  769. NC2=0
  770. NS=0
  771. ELSE
  772. NC1=MPOVA1.VPOCHA(/2)
  773. NC2=MPOVA2.VPOCHA(/2)
  774. NS =MPOVA1.VPOCHA(/1)
  775. ENDIF
  776.  
  777. NC=NC1
  778. NCK=NC
  779. IGEOM=IGEOM1
  780. TYPE=TYPE1
  781. IF(NC1.NE.NC2)THEN
  782. IF(NC1.EQ.1.AND.NC2.EQ.IDIM.AND.KOP.EQ.6)THEN
  783. NC=NC1
  784. NCK=NC2
  785. ELSE
  786. WRITE(6,*)' Opérateur KOPS :'
  787. WRITE(6,*)' Les deux champs n''ont pas le meme nombre ',
  788. & 'de composante'
  789. RETURN
  790. ENDIF
  791. ELSE
  792. IF(KOP.EQ.6)IKAS=6
  793. ENDIF
  794.  
  795.  
  796. ENDIF
  797.  
  798. IF(IKAS.EQ.1)THEN
  799. IF(MPOVA2.EQ.0.AND.IGEOM2.EQ.0)THEN
  800. C WRITE(6,*)'CAS OU LE CHPOINT2 EST VIDE'
  801. NS=0
  802. NC=0
  803. ELSE
  804. NS=MPOVA2.VPOCHA(/1)
  805. NC=MPOVA2.VPOCHA(/2)
  806. ENDIF
  807.  
  808. NC2=NC
  809. NCK=NC
  810. IGEOM=IGEOM2
  811. TYPE=TYPE2
  812.  
  813. ELSEIF(IKAS.EQ.2)THEN
  814. IF(MPOVA1.EQ.0.AND.IGEOM1.EQ.0)THEN
  815. C WRITE(6,*)'CAS OU LE CHPOINT1 EST VIDE'
  816. NS=0
  817. NC=0
  818. ELSE
  819. NS=MPOVA1.VPOCHA(/1)
  820. NC=MPOVA1.VPOCHA(/2)
  821. ENDIF
  822. NC2=NC
  823. NCK=NC
  824. IGEOM=IGEOM1
  825. TYPE=TYPE1
  826.  
  827. ELSEIF(IKAS.EQ.4)THEN
  828. NS=MPOVA2.VPOCHA(/1)
  829. NC=MPOVA2.VPOCHA(/2)
  830. IF(NC.NE.1)THEN
  831. WRITE(6,*)' Opérateur KOPS :'
  832. WRITE(6,*)' Le champoint doit etre scalaire dans ce cas '
  833. RETURN
  834. ENDIF
  835. NC2=IDIM
  836. NCK=IDIM
  837. IGEOM=IGEOM2
  838. TYPE=TYPE2
  839. ELSEIF(IKAS.EQ.5)THEN
  840. NS=MPOVA1.VPOCHA(/1)
  841. NC=MPOVA1.VPOCHA(/2)
  842. IF(NC.NE.1)THEN
  843. WRITE(6,*)' Opérateur KOPS :'
  844. WRITE(6,*)' Le champoint doit etre scalaire dans ce cas '
  845. RETURN
  846. ENDIF
  847. NC2=IDIM
  848. NCK=IDIM
  849. IGEOM=IGEOM1
  850. TYPE=TYPE1
  851. ENDIF
  852.  
  853. 20 CONTINUE
  854. IF(KOP.EQ.25)GO TO 31
  855. GO TO (21,22,23,24,25,21,22,26,27,28,29,30,31,32,33,34),KOP
  856.  
  857. C ************************************
  858. C * Dans cette partie on effectue *
  859. C * les operations *
  860. C ************************************
  861.  
  862. C MULT
  863. 21 CONTINUE
  864.  
  865. C =======================
  866. C PRODUIT 2 OBJETS MATRIK
  867. C =======================
  868. IF(NBMAT.EQ.2) THEN
  869. CALL ETOILE(MAT1,MAT2,MAT3,IRET)
  870.  
  871. IF (IRET.NE.0) THEN
  872. WRITE(6,*) 'Pb dans ETOILE'
  873. RETURN
  874. END IF
  875.  
  876. CALL ECROBJ('MATRIK',MAT3)
  877.  
  878. C =============================
  879. C PRODUIT OBJET MATRIK FLOTTANT
  880. C =============================
  881. ELSEIF ((NBMAT.EQ.1).AND.(NFLOT.EQ.1)) THEN
  882.  
  883. CALL PRDMF(XVAL1,MAT1,MAT2)
  884. CALL ECROBJ('MATRIK',MAT2)
  885.  
  886. C =============================
  887. C PRODUIT OBJET MATRIK CHPOINT
  888. C =============================
  889. ELSEIF ((NBMAT.EQ.1).AND.(MCHPO1.NE.0)) THEN
  890. CALL PRDMCP(MAT1,MCHPO1,MCHPO2)
  891. CALL ECROBJ('CHPOINT',MCHPO2)
  892. C =============================
  893.  
  894. ELSE
  895. CALL CRCHPT(TYPE,IGEOM,NCK,IATTR,MCHPOI)
  896. CALL LICHT(MCHPOI,MPOVAL,TYPC,IGEOM)
  897. C CB215821 : pour eviter le plantage en compilcd lorsque MPOVA1=0 ...
  898. IF (MPOVAL .NE. 0) THEN
  899. IF (MPOVA1 .EQ. 0) MPOVA1 = MPOVAL
  900. IF(IKAS.EQ.1)THEN
  901. CALL KOPS1(MPOVAL.VPOCHA,MPOVA2.VPOCHA,MPOVA2.VPOCHA,XVAL1,
  902. & XVAL2,NC,NC2,NS,IKAS,KOP,XVEC)
  903. ELSEIF(IKAS.EQ.2)THEN
  904. CALL KOPS1(MPOVAL.VPOCHA,MPOVA1.VPOCHA,MPOVA1.VPOCHA,XVAL1,
  905. & XVAL2,NC,NC2,NS,IKAS,KOP,XVEC)
  906. ELSE
  907. C segact mchpoi
  908. C write(6,*)' segact ok avt kops1 ',kop
  909. CALL KOPS1(MPOVAL.VPOCHA,MPOVA1.VPOCHA,MPOVA2.VPOCHA,XVAL1,
  910. & XVAL2,NC,NC2,NS,IKAS,KOP,XVEC)
  911. ENDIF
  912. ENDIF
  913. C segact mchpoi
  914. C write(6,*)' segact ok apr kops1 '
  915. C write(6,*)' MCHPOI=',mchpoi
  916. CALL ECROBJ('CHPOINT ',MCHPOI)
  917. END IF
  918.  
  919. GO TO 89
  920.  
  921.  
  922. C DIVI
  923. 22 CONTINUE
  924.  
  925. CALL CRCHPT(TYPE,IGEOM,NC,IATTR,MCHPOI)
  926. CALL LICHT(MCHPOI,MPOVAL,TYPC,IGEOM)
  927. C CB215821 : pour eviter le plantage en compilcd lorsque MPOVA1=0 ...
  928. IF (MPOVAL .NE. 0) THEN
  929. IF (MPOVA1 .EQ. 0) MPOVA1 = MPOVAL
  930. C write(6,*)' MCHPOI=',mchpoi,IKAS
  931. C write(6,*)' NC,NC2,NS=',NC,NC2,NS
  932. IF(IKAS.EQ.1)THEN
  933. CALL KOPS1(MPOVAL.VPOCHA,MPOVA2.VPOCHA,MPOVA2.VPOCHA,XVAL1
  934. $ ,XVAL2,NC,NC2,NS,IKAS,KOP,XVEC)
  935. ELSEIF(IKAS.EQ.2)THEN
  936. segact mchpoi,mchpo1,mpoval,mpova1
  937. CALL KOPS1(MPOVAL.VPOCHA,MPOVA1.VPOCHA,MPOVA1.VPOCHA,XVAL1
  938. $ ,XVAL2,NC,NC2,NS,IKAS,KOP,XVEC)
  939. segact mchpoi,mchpo1,mpoval,mpova1
  940. ELSE
  941. CALL KOPS1(MPOVAL.VPOCHA,MPOVA1.VPOCHA,MPOVA2.VPOCHA,XVAL1
  942. $ ,XVAL2,NC,NC2,NS,IKAS,KOP,XVEC)
  943. ENDIF
  944. ENDIF
  945. CALL ECROBJ('CHPOINT ',MCHPOI)
  946. GO TO 89
  947.  
  948. C ........
  949. 23 CONTINUE
  950. GO TO 89
  951.  
  952. C ........
  953. 24 CONTINUE
  954. GO TO 89
  955.  
  956. C ET
  957. 25 CONTINUE
  958. WRITE(6,*)' Opérateur KOPS :'
  959. WRITE(6,*)' ET : Non operationnel pour l''instant'
  960. GO TO 89
  961.  
  962. C '+'
  963. 26 CONTINUE
  964.  
  965. IF (NBMAT.EQ.2) THEN
  966.  
  967. C On effectue l addition MAT1+MAT2 et on recupere la
  968. C matrice resultante dans MAT3 en morse
  969. CALL ADDMAT(MAT1,MAT2,MAT3,IRET)
  970.  
  971. IF (IRET.NE.0) THEN
  972. WRITE(6,*) 'Pb dans ADDMAT'
  973. RETURN
  974. END IF
  975.  
  976. CALL ECROBJ('MATRIK',MAT3)
  977. ELSE
  978. CALL CRCHPT(TYPE,IGEOM,NC,IATTR,MCHPOI)
  979. CALL LICHT(MCHPOI,MPOVAL,TYPC,IGEOM)
  980. C CB215821 : pour eviter le plantage en compilcd lorsque MPOVA1=0 ...
  981. IF (MPOVAL .NE. 0) THEN
  982. IF (MPOVA1 .EQ. 0) MPOVA1 = MPOVAL
  983. IF(IKAS.EQ.1)THEN
  984. CALL KOPS1(MPOVAL.VPOCHA,MPOVA2.VPOCHA,MPOVA2.VPOCHA,
  985. & XVAL1,XVAL2,NC,NC2,NS,IKAS,KOP,XVEC)
  986. ELSEIF(IKAS.EQ.2)THEN
  987. CALL KOPS1(MPOVAL.VPOCHA,MPOVA1.VPOCHA,MPOVA1.VPOCHA,
  988. & XVAL1,XVAL2,NC,NC2,NS,IKAS,KOP,XVEC)
  989. ELSE
  990. CALL KOPS1(MPOVAL.VPOCHA,MPOVA1.VPOCHA,MPOVA2.VPOCHA,
  991. & XVAL1,XVAL2,NC,NC2,NS,IKAS,KOP,XVEC)
  992. ENDIF
  993. ENDIF
  994. CALL ECROBJ('CHPOINT ',MCHPOI)
  995. END IF
  996. GO TO 89
  997.  
  998. C '-'
  999. 27 CONTINUE
  1000.  
  1001. CALL CRCHPT(TYPE,IGEOM,NC,IATTR,MCHPOI)
  1002. CALL LICHT(MCHPOI,MPOVAL,TYPC,IGEOM)
  1003. C CB215821 : pour eviter le plantage en compilcd lorsque MPOVA1=0 ...
  1004. IF (MPOVAL .NE. 0) THEN
  1005. IF (MPOVA1 .EQ. 0) MPOVA1 = MPOVAL
  1006. IF(IKAS.EQ.1)THEN
  1007. CALL KOPS1(MPOVAL.VPOCHA,MPOVA2.VPOCHA,MPOVA2.VPOCHA,XVAL1
  1008. $ ,XVAL2,NC,NC2,NS,IKAS,KOP,XVEC)
  1009. ELSEIF(IKAS.EQ.2)THEN
  1010. CALL KOPS1(MPOVAL.VPOCHA,MPOVA1.VPOCHA,MPOVA1.VPOCHA,XVAL1
  1011. $ ,XVAL2,NC,NC2,NS,IKAS,KOP,XVEC)
  1012. ELSE
  1013. CALL KOPS1(MPOVAL.VPOCHA,MPOVA1.VPOCHA,MPOVA2.VPOCHA,XVAL1
  1014. $ ,XVAL2,NC,NC2,NS,IKAS,KOP,XVEC)
  1015. ENDIF
  1016. ENDIF
  1017. CALL ECROBJ('CHPOINT ',MCHPOI)
  1018. GO TO 89
  1019.  
  1020. C '**'
  1021. 28 CONTINUE
  1022.  
  1023. CALL CRCHPT(TYPE,IGEOM,NC,IATTR,MCHPOI)
  1024. CALL LICHT(MCHPOI,MPOVAL,TYPC,IGEOM)
  1025. C CB215821 : pour eviter le plantage en compilcd lorsque MPOVA1=0 ...
  1026. IF (MPOVAL .NE. 0) THEN
  1027. IF (MPOVA1 .EQ. 0) MPOVA1 = MPOVAL
  1028. IF(IKAS.EQ.1)THEN
  1029. CALL KOPS1(MPOVAL.VPOCHA,MPOVA2.VPOCHA,MPOVA2.VPOCHA,XVAL1
  1030. $ ,XVAL2,NC,NC2,NS,IKAS,KOP,XVEC)
  1031. ELSEIF(IKAS.EQ.2)THEN
  1032. CALL KOPS1(MPOVAL.VPOCHA,MPOVA1.VPOCHA,MPOVA1.VPOCHA,XVAL1
  1033. $ ,XVAL2,NC,NC2,NS,IKAS,KOP,XVEC)
  1034. ELSE
  1035. CALL KOPS1(MPOVAL.VPOCHA,MPOVA1.VPOCHA,MPOVA2.VPOCHA,XVAL1
  1036. $ ,XVAL2,NC,NC2,NS,IKAS,KOP,XVEC)
  1037. ENDIF
  1038. ENDIF
  1039. CALL ECROBJ('CHPOINT ',MCHPOI)
  1040. GO TO 89
  1041.  
  1042. C '|<'
  1043. 29 CONTINUE
  1044.  
  1045. CALL CRCHPT(TYPE,IGEOM,NC,IATTR,MCHPOI)
  1046. CALL LICHT(MCHPOI,MPOVAL,TYPC,IGEOM)
  1047. C CB215821 : pour eviter le plantage en compilcd lorsque MPOVA1=0 ...
  1048. IF (MPOVAL .NE. 0) THEN
  1049. IF (MPOVA1 .EQ. 0) MPOVA1 = MPOVAL
  1050. IF(IKAS.EQ.1)THEN
  1051. CALL KOPS1(MPOVAL.VPOCHA,MPOVA2.VPOCHA,MPOVA2.VPOCHA,XVAL1
  1052. $ ,XVAL2,NC,NC2,NS,IKAS,KOP,XVEC)
  1053. ELSEIF(IKAS.EQ.2)THEN
  1054. CALL KOPS1(MPOVAL.VPOCHA,MPOVA1.VPOCHA,MPOVA1.VPOCHA,XVAL1
  1055. $ ,XVAL2,NC,NC2,NS,IKAS,KOP,XVEC)
  1056. ELSE
  1057. CALL KOPS1(MPOVAL.VPOCHA,MPOVA1.VPOCHA,MPOVA2.VPOCHA,XVAL1
  1058. $ ,XVAL2,NC,NC2,NS,IKAS,KOP,XVEC)
  1059. ENDIF
  1060. ENDIF
  1061. CALL ECROBJ('CHPOINT ',MCHPOI)
  1062. GO TO 89
  1063.  
  1064. C '>|'
  1065. 30 CONTINUE
  1066.  
  1067. CALL CRCHPT(TYPE,IGEOM,NC,IATTR,MCHPOI)
  1068. CALL LICHT(MCHPOI,MPOVAL,TYPC,IGEOM)
  1069. C CB215821 : pour eviter le plantage en compilcd lorsque MPOVA1=0 ...
  1070. IF (MPOVAL .NE. 0) THEN
  1071. IF (MPOVA1 .EQ. 0) MPOVA1 = MPOVAL
  1072. IF(IKAS.EQ.1)THEN
  1073. CALL KOPS1(MPOVAL.VPOCHA,MPOVA2.VPOCHA,MPOVA2.VPOCHA,XVAL1
  1074. $ ,XVAL2,NC,NC2,NS,IKAS,KOP,XVEC)
  1075. ELSEIF(IKAS.EQ.2)THEN
  1076. CALL KOPS1(MPOVAL.VPOCHA,MPOVA1.VPOCHA,MPOVA1.VPOCHA,XVAL1
  1077. $ ,XVAL2,NC,NC2,NS,IKAS,KOP,XVEC)
  1078. ELSE
  1079. CALL KOPS1(MPOVAL.VPOCHA,MPOVA1.VPOCHA,MPOVA2.VPOCHA,XVAL1
  1080. $ ,XVAL2,NC,NC2,NS,IKAS,KOP,XVEC)
  1081. ENDIF
  1082. ENDIF
  1083. CALL ECROBJ('CHPOINT ',MCHPOI)
  1084. GO TO 89
  1085.  
  1086. C 'GRAD'
  1087. 31 CONTINUE
  1088. IF(MTABD.EQ.0)THEN
  1089. CALL ERREUR(-182)
  1090. RETURN
  1091. ENDIF
  1092. IF(KOP.EQ.25)THEN
  1093. CALL KGRAS(MCHPO1,MPOVA1,IGEOM1,MTABD)
  1094. ELSE
  1095. CALL KGRA(MCHPO1,MPOVA1,IGEOM1,MTABD)
  1096. ENDIF
  1097. GO TO 89
  1098.  
  1099. C 'ROT'
  1100. 32 CONTINUE
  1101. IF(MTABD.EQ.0)THEN
  1102. CALL ERREUR(-182)
  1103. RETURN
  1104. ENDIF
  1105. CALL KROT(MCHPO1,MPOVA1,IGEOM1,MTABD)
  1106. GO TO 89
  1107.  
  1108. C 'CLIM'
  1109. 33 CONTINUE
  1110. CALL KBOR(MCHPO1,MCHPO2)
  1111. GO TO 89
  1112.  
  1113. 89 CONTINUE
  1114. C? IF(KOP.NE.15)THEN
  1115. C? IF(MCHPOI.NE.0)SEGDES MCHPOI,MPOVAL
  1116. C? IF(MCHPO1.NE.0)SEGDES MCHPO1,MPOVA1
  1117. C? IF(MCHPO2.NE.0)SEGDES MCHPO2,MPOVA2
  1118. C? ENDIF
  1119. RETURN
  1120.  
  1121. C 'INV'
  1122. 34 CONTINUE
  1123. IF (NBMAT.EQ.1) THEN
  1124. NAG=2
  1125. CALL INVMAT(MAT1,MAT2,IRET)
  1126. CALL ECROBJ('MATRIK',MAT2)
  1127. ELSE
  1128. WRITE(6,*) 'KOPS: On ne peut inverser qu une matrice'
  1129. END IF
  1130. RETURN
  1131.  
  1132. 91 CONTINUE
  1133. WRITE(6,*)' Opérateur KOPS :'
  1134. WRITE(6,*)' Nombre d''argument superieur a 2 '
  1135. RETURN
  1136. END
  1137.  
  1138.  

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