Télécharger zkmic.eso

Retour à la liste

Numérotation des lignes :

zkmic
  1. C ZKMIC SOURCE CB215821 25/04/23 21:15:49 12247
  2. SUBROUTINE ZKMIC(IKAS,MTABX,MTAB1)
  3. IMPLICIT INTEGER(I-N)
  4. IMPLICIT REAL*8 (A-H,O-Z)
  5. C************************************************************************
  6. C Operateur KMAC
  7. C
  8. C OBJET : Cree un objet de type MATRIK
  9. C
  10. C SYNTAXE : RESU = KMAC INCO UN ;
  11. C
  12. C RVP : TABLE de soustype EQPR (cree par EQPR)
  13. C IMPR : impression du contenu de l'objet'
  14. C
  15. C REMARQUE : Cet objet n'est pas un objet STANDART CASTEM2000
  16. C Il n'est donc pas listable
  17. C Il est tout juste bon a mettre dans la table RVP pour etre utilise
  18. C par les operateurs de résolution de la matrice de contrainte
  19. C
  20. C IKAS=1 KMAC calcul de C uniquement
  21. C IKAS=2 KMCT calcul de Ct
  22. C IKAS=3 KCCT calcul de C assemblage pour C et Ct
  23. C
  24. C***********************************************************************
  25.  
  26. -INC PPARAM
  27. -INC CCOPTIO
  28. -INC SMCHPOI
  29. -INC SMCOORD
  30. POINTEUR IZCH2.MCHPOI,IZCCH2.MPOVAL
  31. POINTEUR IZDV.MCHPOI,IZDDV.MPOVAL,IZTU1.MPOVAL,TETAN.MPOVAL
  32. POINTEUR IZTG1.MCHPOI,IZTGG1.MPOVAL,IZBETA.MPOVAL
  33.  
  34. -INC SMLENTI
  35. POINTEUR IZIPAD.MLENTI,MLENTI1.MLENTI,MLENTI2.MLENTI
  36. -INC SMLMOTS
  37. POINTEUR LINCO.MLMOTS
  38. -INC SMELEME
  39. POINTEUR MELEMZ.MELEME,MELEMB.MELEME,MELSTB.MELEME
  40. POINTEUR MELEM1.MELEME,MELES1.MELEME,MCTREI.MELEME
  41. POINTEUR IGEOM.MELEME,MELEMM.MELEME,MELEMA.MELEME
  42. POINTEUR IZLEMC.MELEME,MELEMS.MELEME,MELEMC.MELEME
  43. POINTEUR MELEMI.MELEME,MELEMP.MELEME
  44.  
  45. CHARACTER*8 TYPE,TYPC,NOMZ,NOMP,NOMD
  46. CHARACTER*8 NOMPP,NOMDD
  47. CHARACTER*4 NOM
  48. INTEGER IPAD,IPAD2,IK
  49. REAL*8 KAUX,TETA1
  50. DIMENSION IXV(3)
  51. C
  52. DATA IMPR/0/
  53. C*************************************************************************
  54. CKMIC
  55. C write(6,*)' Operateur KMIC MTABX=',MTABX
  56. C
  57. C- Récupération de la table EQEX (pointeur MTAB1)
  58. C
  59. CALL LEKTAB(MTABX,'EQEX',MTAB1)
  60. IF(MTAB1.EQ.0)THEN
  61. C Indice %m1:8 : Indice %m9:16 non trouvé dans la table %m17:24
  62. MOTERR( 1: 8) = ' EQEX '
  63. MOTERR( 9:16) = ' EQEX '
  64. MOTERR(17:24) = ' KIZX '
  65. CALL ERREUR(786)
  66. RETURN
  67. ENDIF
  68. C
  69. C- Récupération de la table INCO (pointeur KINC)
  70. C
  71. CALL LEKTAB(MTAB1,'INCO',KINC)
  72. IF(KINC.EQ.0)THEN
  73. C Indice %m1:8 : Indice %m9:16 non trouvé dans la table %m17:24
  74. MOTERR( 1: 8) = ' INCO '
  75. MOTERR( 9:16) = ' INCO '
  76. MOTERR(17:24) = ' EQEX '
  77. CALL ERREUR(786)
  78. RETURN
  79. ENDIF
  80.  
  81. C*************************************************************************
  82. C OPTIONS
  83. C KIMPL = 0 -> EXPL 1 -> IMPL 2 -> CN
  84. C KFORM = 0 -> EFSI 1 -> EF 2 -> VF 3 -> EFMC
  85. C KPRE=3 pression P0 KPRE=4 pression P1 KPRE=2 cas macro 1ère génération
  86.  
  87. IAXI=0
  88. IK=0
  89. IF(IFOMOD.EQ.0)IAXI=2
  90. C
  91. C- Récupération de la table des options KOPT (pointeur KOPTI)
  92. C
  93. CALL LEKTAB(MTABX,'KOPT',KOPTI)
  94. IF (KOPTI.EQ.0) THEN
  95. C Indice %m1:8 : Indice %m9:16 non trouvé dans la table %m17:24
  96. MOTERR( 1: 8) = ' KOPT '
  97. MOTERR( 9:16) = ' KOPT '
  98. MOTERR(17:24) = ' KIZX '
  99. CALL ERREUR(786)
  100. RETURN
  101. ENDIF
  102.  
  103. CALL ACME(KOPTI,'KIMPL',KIMPL)
  104. CALL ACME(KOPTI,'KPOIN',KPRE)
  105. CALL ACMF(KOPTI,'AIMPL',TETA1)
  106. CALL ACME(KOPTI,'KFORM',KFORM)
  107.  
  108. IF (IERR.NE.0) RETURN
  109. C write(6,*)' Apres les options '
  110. C*************************************************************************
  111. C
  112. C- Récupération de la table DOMAINE associée au domaine local
  113. C
  114. CALL ACMM(MTABX,'NOMZONE',NOMZ)
  115. CALL LEKTAB(MTABX,'DOMZ',MTABZ)
  116. IF(MTABZ.EQ.0)THEN
  117. C Indice %m1:8 : Indice %m9:16 non trouvé dans la table %m17:24
  118. MOTERR( 1: 8) = ' DOMZ '
  119. MOTERR( 9:16) = ' DOMZ '
  120. MOTERR(17:24) = ' KIZX '
  121. CALL ERREUR(786)
  122. RETURN
  123. ENDIF
  124.  
  125. CALL LEKTAB(MTABZ,'MAILLAGE',MELEME)
  126. CALL LEKTAB(MTABZ,'SOMMET',MELEMS)
  127. CALL LEKTAB(MTABZ,'CENTRE',MELEMC)
  128. CALL LEKTAB(MTABZ,'MACRO',MACRO)
  129. MACRO1=0
  130. IF(MACRO.NE.0)CALL LEKTAB(MTABZ,'MACRO1',MACRO1)
  131. C write(6,*)' KMIC : MACRO1=',macro1
  132. CALL LEKTAB(MTABZ,'QUADRATI',MQUAD)
  133. C write(6,*)' KMIC : MQUAD=',MQUAD
  134. IF (IERR.NE.0) RETURN
  135.  
  136. MELEMI=MELEME
  137. IF(MACRO1.NE.0.AND.KPRE.NE.2)THEN
  138. C? CALL KMACRO(MACRO,MELEMM,MTABZ)
  139. C? MELEMI=MELEMM
  140. MELEMI=MACRO1
  141. ENDIF
  142.  
  143. IF(KPRE.EQ.2.AND.MACRO1.EQ.0)KPRE=3
  144. IF(MQUAD.EQ.0.AND.MACRO1.EQ.0)KPRE=2
  145.  
  146. IF(KPRE.EQ.3)THEN
  147. CALL LEKTAB(MTABZ,'CENTREP0',MELEMC)
  148. MELEMP=MELEMC
  149. ELSEIF(KPRE.EQ.4)THEN
  150. CALL LEKTAB(MTABZ,'CENTREP1',MELEMC)
  151. CALL LEKTAB(MTABZ,'ELTP1NC ',MELEMP)
  152. ELSEIF(KPRE.EQ.2)THEN
  153. CALL LEKTAB(MTABZ,'CENTRE',MELEMC)
  154. MELEMP=MELEMC
  155. ENDIF
  156.  
  157. C*************************************************************************
  158. C VERIFICATIONS SUR LES INCONNUES
  159.  
  160. C write(6,*)' Verification sur les inconnues '
  161. TYPE='LISTMOTS'
  162. CALL ACMO(MTABX,'LISTINCO',TYPE,LINCO)
  163. IF(LINCO.EQ.0)GO TO 90
  164. SEGACT LINCO
  165. NBINC=LINCO.MOTS(/2)
  166. IF(NBINC.NE.2)THEN
  167. WRITE(6,*)'Operateur KMAC '
  168. WRITE(6,*)'Nombre d''inconnues incorrecte : ',NBINC,' On attend 2'
  169. C Indice %m1:8 : contient plus de %i1 %m9:16
  170. MOTERR( 1:8) = 'LISTINCO'
  171. INTERR(1) = 2
  172. MOTERR(9:16) = ' MOTS '
  173. CALL ERREUR(799)
  174. RETURN
  175. ENDIF
  176.  
  177. C On recupere PHI n et TETA n pour Cranck-Nicholson
  178. NOMP=LINCO.MOTS(1)
  179. TYPE=' '
  180. CALL ACMO(KINC,NOMP,TYPE,MCHPOI)
  181. IF(TYPE.NE.'CHPOINT ')THEN
  182. WRITE(6,*)' Opérateur KMAC :'
  183. WRITE(6,*)' L objet CHPOINT ',NOMP,
  184. & ' n existe pas dans la table'
  185. C Indice %m1:8 : ne contient pas un objet de type %m9:16
  186. MOTERR( 1: 8) = 'INC '//NOMP
  187. MOTERR( 9:16) = 'CHPOINT '
  188. CALL ERREUR(800)
  189. RETURN
  190. ELSE
  191. CALL LICHT(MCHPOI,IZTU1,TYPC,IGEOM0)
  192. ENDIF
  193. C*************************************************************************
  194. C Le domaine de definition est donne par le SPG de la premiere inconnue
  195. C Les inconnues suivantes devront posseder ce meme pointeur
  196. C On verifie que les points de la zone sont tous inclus dans ce SPG
  197. C Inconnue Primale
  198.  
  199. C write(6,*)' Verification inconnue primale '
  200. CALL KRIPAD(IGEOM0,MLENTI)
  201. IF(IKAS.EQ.1.OR.IKAS.EQ.3)THEN
  202. MELEMK=MELEMS
  203. ELSE
  204. MELEMK=MELEMC
  205. ENDIF
  206.  
  207. CALL VERPAD(MLENTI,MELEMK,IRET)
  208. IF(IRET.NE.0)THEN
  209. WRITE(6,*)' Opérateur KMAC '
  210. WRITE(6,*)' La zone ',NOMZ,' n''est pas incluse dans le domaine'
  211. & , ' de définition de l''inconnue ',NOMP
  212. WRITE(6,*)' MELEMK=',melemk,' IGEOM0=',IGEOM0
  213. C Indice %m1:8 : L'objet %m9:16 n'a pas le bon support géométrique
  214. MOTERR(1: 8) = 'INC '//NOMP
  215. MOTERR(9:16) = 'CHPOINT '
  216. CALL ERREUR(788)
  217. IPAS=0
  218. RETURN
  219. ENDIF
  220.  
  221. SEGSUP MLENTI
  222.  
  223. C*************************************************************************
  224.  
  225. NOMD=LINCO.MOTS(2)
  226. TYPE=' '
  227. CALL ACMO(KINC,NOMD,TYPE,MCHPOI)
  228. IF(TYPE.NE.'CHPOINT ')THEN
  229. WRITE(6,*)' Opérateur KMAC :'
  230. WRITE(6,*)' L objet CHPOINT ',NOMD,
  231. & ' n existe pas dans la table'
  232. C Indice %m1:8 : ne contient pas un objet de type %m9:16
  233. MOTERR( 1: 8) = 'INC '//NOMD
  234. MOTERR( 9:16) = 'CHPOINT '
  235. CALL ERREUR(800)
  236. RETURN
  237. ELSE
  238. CALL LICHT(MCHPOI,TETAN,TYPC,IGEOM0)
  239. ENDIF
  240.  
  241. NC=TETAN.VPOCHA(/2)
  242. C*************************************************************************
  243. C Le domaine de definition est donne par le SPG de la premiere inconnue
  244. C Les inconnues suivantes devront posseder ce meme pointeur
  245. C On verifie que les points de la zone sont tous inclus dans ce SPG
  246. C Inconnue Duale
  247.  
  248. C write(6,*)' IGEOM0=',igeom0
  249. CALL KRIPAD(IGEOM0,MLENTI)
  250. IF(IKAS.EQ.1.OR.IKAS.EQ.3)THEN
  251. MELEMK=MELEMC
  252. ELSE
  253. MELEMK=MELEMS
  254. ENDIF
  255.  
  256. C write(6,*)' Verification inconnue duale ',MELEMK
  257. CALL VERPAD(MLENTI,MELEMK,IRET)
  258. IF(IRET.NE.0)THEN
  259. WRITE(6,*)' Opérateur KMAC '
  260. WRITE(6,*)' La zone ',NOMZ,' n''est pas incluse dans le domaine'
  261. & ,' de définition de l''inconnue ',NOMD
  262. WRITE(6,*)' MELEMK=',melemk,' IGEOM0=',IGEOM0
  263. C Indice %m1:8 : L'objet %m9:16 n'a pas le bon support géométrique
  264. MOTERR(1: 8) = 'INC '//NOMD
  265. MOTERR(9:16) = 'CHPOINT '
  266. CALL ERREUR(788)
  267. IPAS=0
  268. RETURN
  269. ENDIF
  270.  
  271. SEGSUP MLENTI
  272.  
  273. C*************************************************************************
  274. C Lecture du ou des coefficients
  275. C Type du coefficient :
  276. C IK1=0 CHPOINT IK1=1 scalaire IK1=2 vecteur
  277.  
  278. C write(6,*)' Verification sur les coefficients '
  279. CALL ACME(MTABX,'IARG',IARG)
  280.  
  281. IF(MACRO1.NE.0.AND.IKAS.NE.2.AND.KPRE.EQ.2)THEN
  282. C? MELEMM=MACRO
  283. TYPE=' '
  284. CALL ACMO(MTABZ,'MELSTB',TYPE,MELSTB)
  285. SEGACT MELSTB
  286. NBELEM=MELSTB.NUM(/2)/4
  287. NBNN=MELSTB.NUM(/1)
  288. NBSOUS=0
  289. NBREF=0
  290. SEGINI MELEMA
  291. MELEMA.ITYPEL=MELSTB.ITYPEL
  292.  
  293. NKPE=4
  294. IF(IDIM.EQ.3)NKPE=8
  295. do 4878 k=1,nbelem
  296. mi=(k-1)*NKPE+1
  297. do 4879 i=1,nbnn
  298. MELEMA.num(i,k)=melstb.num(i,mi)
  299. 4879 continue
  300. C write(6,*)k,(MELEMA.num(i,k),i=1,nbnn)
  301. 4878 continue
  302.  
  303. TYPE=' '
  304. CALL ACMO(MTABZ,'MCHPOC',TYPE,MCHPOC)
  305. TYPE=' '
  306. CALL ACMO(MTABZ,'CENTRE',TYPE,MCTREI)
  307. ENDIF
  308.  
  309.  
  310. C 1er COEF
  311.  
  312. IXV(1)=MELEMC
  313. IXV(2)=1
  314. IXV(3)=0
  315. CALL LEKCOF('Opérateur KMAC :',
  316. & MTABX,KINC,1,IXV,IZTG1,IZTGG1,NPT1,NC1,IK1,IRET)
  317. IF(IRET.EQ.0)RETURN
  318.  
  319. IF(MACRO1.NE.0.AND.IKAS.NE.2.AND.KPRE.EQ.2)THEN
  320. C 2ème COEF
  321. IXV(1)=0
  322. IXV(2)=1
  323. IXV(3)=0
  324. CALL LEKCOF('Opérateur KMAC :',
  325. & MTABX,KINC,2,IXV,IZTG2,IZBETA,NPT2,NC2,IK2,IRET)
  326. IF(IRET.EQ.0)RETURN
  327. ENDIF
  328.  
  329.  
  330. NOMP=LINCO.MOTS(1)
  331. NOMD=LINCO.MOTS(2)(1:4)
  332.  
  333. NRIGE=7
  334. NKID =9
  335. NKMT =7
  336. NMATRI=1
  337. IF(MACRO1.NE.0.AND.IKAS.NE.2.AND.KPRE.EQ.2)NMATRI=2
  338. SEGINI MATRIK
  339.  
  340. C CAS Stabilisation via MACRO
  341. IF(MACRO1.NE.0.AND.IKAS.NE.2.AND.KPRE.EQ.2)THEN
  342. I2=2
  343. NBME=1
  344. NBSOUS=1
  345. SEGINI IMATRI
  346. IRIGEL(4,i2)=IMATRI
  347. KSPGP=MCTREI
  348. KSPGD=MCTREI
  349. IRIGEL(1,i2)=MELEMA
  350. IRIGEL(2,i2)=MELEMA
  351. IRIGEL(7,i2)=0
  352. CALL LICHT(MCHPOC,MPOVAL,TYPC,IGEOM)
  353.  
  354. SEGACT MELSTB
  355. NBSOUS=MELSTB.LISOUS(/1)
  356. IF(NBSOUS.NE.0)THEN
  357. CALL ERREUR(5)
  358. ENDIF
  359.  
  360. C? SEGACT MELEMM
  361. NBEL=MELEMA.NUM(/2)
  362. NBCI=MELSTB.NUM(/2)
  363. NP =MELSTB.NUM(/1)
  364. MP =NP
  365.  
  366. SEGINI IZAFM
  367. LIZAFM(1,1)=IZAFM
  368. LISPRI(1)=NOMD
  369. LISDUA(1)=NOMD
  370.  
  371. CALL KRIPAD(MCTREI,MLENTI)
  372.  
  373. DO 33 K=1,NBEL
  374.  
  375. DO 32 J=1,NP
  376. K1=LECT(MELEMA.NUM(J,K))
  377. ii=j
  378. do 321 i=1,np
  379. u=VPOCHA(K1,I)*IZBETA.VPOCHA(1,1)
  380. if(i.eq.1)u=abs(VPOCHA(K1,I))*IZBETA.VPOCHA(1,1)
  381. if(ii.le.np)then
  382. AM(K,II,J)=U
  383. else
  384. AM(K,II-NP,J)=U
  385. endif
  386. ii=ii+1
  387. 321 continue
  388. 32 CONTINUE
  389. 33 CONTINUE
  390. SEGSUP MLENTI
  391. ENDIF
  392.  
  393.  
  394. NBME=IDIM
  395. C write(6,*)'MELEMI=',MELEMI
  396. CALL KRIPAD(MELEMI,MLENTI1)
  397. SEGACT MELEMI
  398. NBSOUS=MELEMI.LISOUS(/1)
  399. IF(NBSOUS.EQ.0)NBSOUS=1
  400. SEGINI IMATRI
  401.  
  402. IF(IKAS.EQ.2)THEN
  403. KSPGD=MELEMS
  404. KSPGP=MELEMC
  405. IRIGEL(2,1)=MELEMI
  406. IRIGEL(1,1)=MELEMP
  407. ELSE
  408. KSPGP=MELEMS
  409. KSPGD=MELEMC
  410. IRIGEL(1,1)=MELEMI
  411. IRIGEL(2,1)=MELEMP
  412. ENDIF
  413. SEGACT MELEMP
  414.  
  415. C write(6,*)' ds kmac melemp=',IRIGEL(1,1)
  416. C write(6,*)' ds kmac melemd=',IRIGEL(2,1)
  417.  
  418. IRIGEL(4,1)=IMATRI
  419. IF(IKAS.EQ.1)IRIGEL(7,1)=3
  420. IF(IKAS.EQ.2)IRIGEL(7,1)=3
  421. IF(IKAS.EQ.3)IRIGEL(7,1)=4
  422.  
  423. NK=0
  424. DO 11 L=1,NBSOUS
  425. IPT1=MELEMI
  426. IF(NBSOUS.NE.1)IPT1=MELEMI.LISOUS(L)
  427. SEGACT IPT1
  428. NBEL=IPT1.NUM(/2)
  429.  
  430. IF(IKAS.EQ.2)THEN
  431. MP=IPT1.NUM(/1)
  432. NP=MELEMP.NUM(/1)
  433. ELSE
  434. NP=IPT1.NUM(/1)
  435. MP=MELEMP.NUM(/1)
  436. ENDIF
  437.  
  438. DO 12 I=1,NBME
  439. SEGINI IZAFM
  440. C write(6,*)' ni izafm np=',np,' mp=',mp,' nbel=',nbel,izafm,l,i
  441. LIZAFM(L,I)=IZAFM
  442. IF(IKAS.EQ.2)THEN
  443. WRITE(NOM,FMT='(I1,A3)')I,NOMD(1:3)
  444. LISDUA(I)=NOM//' '
  445. LISPRI(I)=NOMP
  446. ELSE
  447. WRITE(NOM,FMT='(I1,A3)')I,NOMP(1:3)
  448. LISPRI(I)=NOM//' '
  449. LISDUA(I)=NOMD
  450. ENDIF
  451. 12 CONTINUE
  452. IPM1=LIZAFM(L,1)
  453. IPM2=LIZAFM(L,2)
  454. IPM3=LIZAFM(L,2)
  455. IF(IDIM.EQ.3)IPM3=LIZAFM(L,3)
  456.  
  457. C write(6,*)' AVt KPRISS MACRO1=',MACRO1,KPRE
  458. CALL KPRISS(IPT1,IPM1,IPM2,IPM3,IAXI,IKAS,MACRO1,KPRE)
  459. C write(6,*)' APR KPRISS'
  460. C =============================
  461. C Option Cranck-Nickolson
  462.  
  463. C ************** TETA1 ****
  464. IF (KIMPL.NE.2) TETA1=1.0D0
  465. C *************************
  466. C On recupere le coeficient devant la matrice
  467.  
  468. IF (KIMPL.EQ.2) THEN
  469.  
  470. C write(6,*)' MELEMC=',melemc
  471. CALL KRIPAD(MELEMC,MLENTI2)
  472. XV=IZTGG1.VPOCHA(1,1)
  473. SEGACT IPT1
  474. SEGACT MELEMC
  475. SEGACT IPM1,IPM2,IPM3
  476. NAT=2
  477. NSOUPO=1
  478. N=MELEMC.NUM(/2)
  479.  
  480. C NC=1
  481. C On initialise les segments necessaire a la conception
  482. C du second membre
  483. SEGINI MCHPO1,MSOUP1,MPOVA1
  484. MCHPO1.IFOPOI=IFOUR
  485. MCHPO1.MOCHDE=TITREE
  486. MCHPO1.MTYPOI='SMBR'
  487. MCHPO1.JATTRI(1)=2
  488. MCHPO1.IPCHP(1)=MSOUP1
  489. DO LN=1,NC
  490. MSOUP1.NOCOMP(LN)=LISDUA(LN)
  491. END DO
  492. MSOUP1.IGEOC=MELEMC
  493. MSOUP1.IPOVAL=MPOVA1
  494.  
  495. SEGACT IZTU1
  496. SEGACT MLENTI1,MLENTI2
  497.  
  498. KAUX=XV*(1.0D0-TETA1)
  499. c DO K=1,NBEL
  500. c IK=IK+1
  501. c DO I=1,NP
  502. c IPAD=MLENTI2.LECT(MELEMC.NUM(1,IK))
  503. C Par securite on met a zero le second membre a ajouter
  504. c MPOVA1.VPOCHA(IPAD,1)=0.0D0
  505. c END DO
  506. c END DO
  507.  
  508. DO K=1,NBEL
  509. IK=IK+1
  510. DO I=1,NP
  511. DO J=1,MP
  512.  
  513. C On recupere les bonnes valeurs pour la localisation dans la
  514. C matrice pour le produit matriciel.
  515. IPAD=MLENTI2.LECT(MELEMC.NUM(J,IK))
  516. IPAD2=MLENTI1.LECT(IPT1.NUM(I,K))
  517.  
  518. C On effectue le produit matriciel
  519. MPOVA1.VPOCHA(IPAD,1)=MPOVA1.VPOCHA(IPAD,1)-
  520. & IPM1.AM(K,I,J)*IZTU1.VPOCHA(IPAD2,1)*KAUX
  521. IF (IDIM.GT.1) THEN
  522. MPOVA1.VPOCHA(IPAD,1)=MPOVA1.VPOCHA(IPAD,1)-
  523. & IPM2.AM(K,I,J)*IZTU1.VPOCHA(IPAD2,2)*KAUX
  524. END IF
  525. IF (IDIM.GT.2) THEN
  526. MPOVA1.VPOCHA(IPAD,1)=MPOVA1.VPOCHA(IPAD,1)-
  527. & IPM3.AM(K,I,J)*IZTU1.VPOCHA(IPAD2,3)*KAUX
  528. END IF
  529. END DO
  530. END DO
  531. END DO
  532.  
  533. SEGDES IPM1,IPM2,IPM3
  534. SEGSUP MLENTI1,MLENTI2
  535. SEGDES MELEMC,IZTU1
  536. SEGDES MCHPO1,MSOUP1,MPOVA1
  537. C On ajoute le second membre a l'ancien (s'il y en avait un).
  538. TYPE=' '
  539. CALL ACMO(MTAB1,'SMBR',TYPE,MCHPO2)
  540. C write(6,*)' SMBR ',type
  541. IF(TYPE.NE.'CHPOINT')THEN
  542. C write(6,*)' On cree un 1er SMBR '
  543. CALL ECMO(MTAB1,'SMBR','CHPOINT',MCHPO1)
  544. ELSE
  545. CALL ECROBJ('CHPOINT',MCHPO2)
  546. CALL ECROBJ('CHPOINT',MCHPO1)
  547. CALL PRFUSE
  548. C ? CALL OPERAD
  549. CALL LIROBJ('CHPOINT',MCHPOI,1,IRET)
  550. C CALL DTRCHP(MCHPO1)
  551. C CALL DTRCHP(MCHPO2)
  552. C write(6,*)' On cree un SMBR '
  553. CALL ECMO(MTAB1,'SMBR','CHPOINT',MCHPOI)
  554. ENDIF
  555. END IF
  556. C ===================================
  557. SEGACT IPT1,IPM1*MOD,IPM2*MOD,IPM3*MOD
  558. NBEL=IPT1.NUM(/2)
  559. NP=IPM1.AM(/2)
  560. MP=IPM1.AM(/3)
  561. DO 23 K=1,NBEL
  562. NK=NK+1
  563. K1=1+(1-IK1)*(NK-1)
  564. XV=IZTGG1.VPOCHA(K1,1)
  565.  
  566. DO I=1,NP
  567. DO J=1,MP
  568. IF (KIMPL.NE.2) THEN
  569. IPM1.AM(K,I,J)=IPM1.AM(K,I,J)*XV
  570. IPM2.AM(K,I,J)=IPM2.AM(K,I,J)*XV
  571. ELSE
  572. IPM1.AM(K,I,J)=TETA1*IPM1.AM(K,I,J)*XV
  573. IPM2.AM(K,I,J)=TETA1*IPM2.AM(K,I,J)*XV
  574. END IF
  575. ENDDO
  576. ENDDO
  577. IF(IDIM.EQ.3)THEN
  578. DO I=1,NP
  579. DO J=1,MP
  580. IF (KIMPL.NE.2) THEN
  581. IPM3.AM(K,I,J)=IPM3.AM(K,I,J)*XV
  582. ELSE
  583. IPM3.AM(K,I,J)=TETA1*IPM3.AM(K,I,J)*XV
  584. END IF
  585. ENDDO
  586. ENDDO
  587. ENDIF
  588. 23 CONTINUE
  589.  
  590. SEGDES IPM1,IPM2,IPM3
  591. SEGDES IPT1
  592. 11 CONTINUE
  593. SEGDES MELEMI
  594. CALL ECMO(MTABX,'MATELM','MATRIK',MATRIK)
  595.  
  596. C write(6,*)' Fin operateur KMIC'
  597. SEGDES IMATRI,MATRIK
  598. RETURN
  599. 90 CONTINUE
  600. WRITE(6,*)' Interruption anormale de KMAC '
  601. C Option %m1:8 incompatible avec les données
  602. CALL ERREUR(803)
  603. RETURN
  604. 1001 FORMAT(20(1X,I5))
  605. END
  606.  
  607.  
  608.  
  609.  
  610.  
  611.  
  612.  
  613.  
  614.  
  615.  
  616.  
  617.  
  618.  
  619.  
  620.  
  621.  
  622.  

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