Télécharger kops.eso

Retour à la liste

Numérotation des lignes :

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

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