Télécharger zkmic.eso

Retour à la liste

Numérotation des lignes :

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

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