Télécharger vtimp.eso

Retour à la liste

Numérotation des lignes :

vtimp
  1. C VTIMP SOURCE FANDEUR 22/01/03 21:15:56 11136
  2. SUBROUTINE VTIMP
  3. C************************************************************************
  4. C CALCUL DE LA MATRICE M ( P*DIV(U) ) --> AM(NP,IES,NEL)
  5. C
  6. C IKAS=1 V NORMALE IMPOSEE
  7. C IKAS=-1 V TANGENTE IMPOSEE
  8. C
  9. C************************************************************************
  10. IMPLICIT INTEGER(I-N)
  11. IMPLICIT REAL*8 (A-H,O-Z)
  12.  
  13.  
  14. -INC PPARAM
  15. -INC CCOPTIO
  16. -INC CCGEOME
  17. -INC SIZFFB
  18. POINTEUR IZF1.IZFFM
  19.  
  20. -INC SMCOORD
  21. -INC SMLENTI
  22. POINTEUR IPADI.MLENTI
  23. -INC SMELEME
  24. POINTEUR MELEM1.MELEME,MELEMC.MELEME,MELEMS.MELEME,MELEML.MELEME
  25. -INC SMCHPOI
  26. POINTEUR IZTU1.MPOVAL,VTANG.MPOVAL
  27.  
  28.  
  29. -INC SMLMOTS
  30. POINTEUR LINCO.MLMOTS
  31. CHARACTER*8 NOMZ,NOMI,TYPE,TYPC,NOM0,NOMA,NOM
  32. PARAMETER (NTB=1)
  33. CHARACTER*8 LTAB(NTB)
  34. DIMENSION KTAB(NTB),IXV(3),RO(1)
  35. DATA LTAB/'KIZX '/,RO/1.D0/
  36. C*****************************************************************************
  37. CVTIMP
  38. C write(6,*)' DEBUT VTIMP '
  39.  
  40. CALL LITABS(LTAB,KTAB,NTB,1,IRET)
  41. IF (IERR.NE.0) RETURN
  42. MTABX=KTAB(1)
  43. C
  44. C- Récupération de la table EQEX (pointeur MTAB1)
  45. C
  46. CALL LEKTAB(MTABX,'EQEX',MTAB1)
  47. IF(MTAB1.EQ.0)THEN
  48. C Indice %m1:8 : Indice %m9:16 non trouvé dans la table %m17:24
  49. MOTERR( 1: 8) = ' EQEX '
  50. MOTERR( 9:16) = ' EQEX '
  51. MOTERR(17:24) = ' KIZX '
  52. CALL ERREUR(786)
  53. RETURN
  54. ENDIF
  55.  
  56. C
  57. C- Récupération de la table INCO (pointeur KINC)
  58. C
  59. CALL LEKTAB(MTAB1,'INCO',KINC)
  60. IF(KINC.EQ.0)THEN
  61. C Indice %m1:8 : Indice %m9:16 non trouvé dans la table %m17:24
  62. MOTERR( 1: 8) = ' INCO '
  63. MOTERR( 9:16) = ' INCO '
  64. MOTERR(17:24) = ' EQEX '
  65. CALL ERREUR(786)
  66. RETURN
  67. ENDIF
  68.  
  69. C*****************************************************************************
  70. C OPTIONS
  71. C KIMPL = 0 -> EXPL 1 -> IMPL 2 -> SEMI
  72. C KFORM = 0 -> SI 1 -> EF 2 -> VF 3 -> EFMC
  73. C IDCEN = 0-> rien 1-> CENTREE 2-> SUPGDC 3-> SUPG 4-> TVISQUEU 5-> CNG
  74.  
  75. IAXI=0
  76. IF(IFOMOD.EQ.0)IAXI=2
  77. C
  78. C- Récupération de la table des options KOPT (pointeur KOPTI)
  79. C
  80. CALL LEKTAB(MTABX,'KOPT',KOPTI)
  81. IF (KOPTI.EQ.0) THEN
  82. C Indice %m1:8 : Indice %m9:16 non trouvé dans la table %m17:24
  83. MOTERR( 1: 8) = ' KOPT '
  84. MOTERR( 9:16) = ' KOPT '
  85. MOTERR(17:24) = ' KIZX '
  86. CALL ERREUR(786)
  87. RETURN
  88. ENDIF
  89.  
  90. CALL ACME(KOPTI,'KIMPL',KIMPL)
  91. CALL ACME(KOPTI,'KPOIN',KPRE)
  92. CALL ACME(KOPTI,'KFORM',KFORM)
  93.  
  94. IF(KFORM.NE.0.AND.KFORM.NE.1)THEN
  95. C Option %m1:8 incompatible avec les données
  96. MOTERR( 1: 8) = 'EF/EFM1 '
  97. CALL ERREUR(803)
  98. RETURN
  99. ENDIF
  100. IF (IERR.NE.0) RETURN
  101.  
  102. C write(6,*)' Apres les options '
  103. C*****************************************************************************
  104. C
  105. C- Récupération de la table DOMAINE associée au domaine local
  106. C
  107. CALL ACMM(MTABX,'NOMZONE',NOMZ)
  108. CALL LEKTAB(MTABX,'DOMZ',MTABZ)
  109. IF(MTABZ.EQ.0)THEN
  110. C Indice %m1:8 : Indice %m9:16 non trouvé dans la table %m17:24
  111. MOTERR( 1: 8) = ' DOMZ '
  112. MOTERR( 9:16) = ' DOMZ '
  113. MOTERR(17:24) = ' KIZX '
  114. CALL ERREUR(786)
  115. RETURN
  116. ENDIF
  117.  
  118. CALL LEKTAB(MTABZ,'MAILLAGE',MELEME)
  119. CALL LEKTAB(MTABZ,'SOMMET',MELEMS)
  120. CALL LEKTAB(MTABZ,'CENTRE',MELEMC)
  121. CALL LEKTAB(MTABZ,'MLGVTIMP',MELEML)
  122.  
  123. C*************************************************************************
  124. C VERIFICATIONS SUR LES INCONNUES
  125. C
  126. C- Récupération du nombre d'inconnues et du nom de l'inconnue NOMI
  127. C
  128. TYPE='LISTMOTS'
  129. CALL ACMO(MTABX,'LISTINCO',TYPE,LINCO)
  130. IF (IERR.NE.0) RETURN
  131. SEGACT LINCO
  132. NBINC=LINCO.MOTS(/2)
  133. IF(NBINC.NE.1)THEN
  134. C Indice %m1:8 : contient plus de %i1 %m9:16
  135. MOTERR( 1:8) = 'LISTINCO'
  136. INTERR(1) = 1
  137. MOTERR(9:16) = ' MOTS '
  138. CALL ERREUR(799)
  139. RETURN
  140. ENDIF
  141.  
  142. NOMI=LINCO.MOTS(1)
  143. C
  144. C- Récupération de l'inconnue
  145. C
  146. TYPE=' '
  147. CALL ACMO(KINC,NOMI,TYPE,MCHPOI)
  148. IF(TYPE.NE.'CHPOINT ')THEN
  149. C Indice %m1:8 : ne contient pas un objet de type %m9:16
  150. MOTERR( 1: 8) = 'INC '//NOMI
  151. MOTERR( 9:16) = 'CHPOINT '
  152. CALL ERREUR(800)
  153. RETURN
  154. ELSE
  155. CALL LICHT(MCHPOI,IZTU1,TYPC,MELEM1)
  156. NINKO = IZTU1.VPOCHA(/2)
  157. IF (NINKO.NE.IDIM) THEN
  158. C Indice %m1:8 : Le %m9:16 n'a pas le bon nombre de composantes
  159. MOTERR( 1: 8) = 'INC '//NOMI
  160. MOTERR( 9:16) = 'CHPOINT '
  161. CALL ERREUR(784)
  162. RETURN
  163. ENDIF
  164. C On fait pointer ces deux tableaux sur le champ U inconu (tjs présent) pour
  165. C eviter de les enlever lors de l'appel FORTRAN si les options sont absentes
  166. ENDIF
  167.  
  168. C*****************************************************************************
  169. C Le domaine de definition est donne par le SPG de la premiere inconnue
  170. C Les inconnues suivantes devront posseder ce meme pointeur
  171. C On verifie que les points de la zone sont tous inclus dans ce SPG
  172.  
  173. CALL KRIPAD(MELEM1,IPADI)
  174.  
  175. CALL VERPAD(IPADI,MELEME,IRET)
  176. IF(IRET.NE.0)THEN
  177. C Indice %m1:8 : L'objet %m9:16 n'a pas le bon support géométrique
  178. MOTERR(1: 8) = 'INC '//NOMI
  179. MOTERR(9:16) = 'CHPOINT '
  180. CALL ERREUR(788)
  181. RETURN
  182. ENDIF
  183.  
  184. C*****************************************************************************
  185.  
  186.  
  187.  
  188. C*************************************************************************
  189. C Lecture des coefficients
  190. C Type du coefficient :
  191. C IK1=0 CHPOINT IK1=1 scalaire IK1=2 vecteur
  192. C write(6,*)' Lecture des coefficients '
  193.  
  194. CALL ACME(MTABX,'IARG',IARG)
  195. IF(IARG.NE.1)THEN
  196. C Indice %m1:8 : nombre d'arguments incorrect
  197. MOTERR(1:8) = 'IARG '
  198. CALL ERREUR(804)
  199. RETURN
  200. ENDIF
  201.  
  202. IXV(1)=MELEMS
  203. IXV(2)=1
  204. IXV(3)=0
  205. CALL LEKCOF('Opérateur VTIMP :',
  206. & MTABX,KINC,1,IXV,IZTG1,VTANG,NPT1,NC1,IK1,IRET)
  207. IF(IRET.EQ.0)RETURN
  208.  
  209.  
  210. C write(6,*)' Operateur VTIMP : Fin lecture Arguments '
  211. C Fin lecture Arguments ************************************************
  212.  
  213. NAT=2
  214. NSOUPO=1
  215. SEGACT MELEML
  216. N=MELEML.NUM(/2)
  217. NC=1
  218. SEGINI MCHPO1,MSOUP1,MPOVA1
  219. MCHPO1.IFOPOI=IFOUR
  220. MCHPO1.MOCHDE=' '
  221. MCHPO1.MTYPOI='SMBR'
  222. MCHPO1.JATTRI(1)=2
  223. MCHPO1.IPCHP(1)=MSOUP1
  224. MSOUP1.NOCOMP(1)='LVTP'
  225. MSOUP1.IGEOC=MELEML
  226. MSOUP1.IPOVAL=MPOVA1
  227.  
  228.  
  229. NRIGE=7
  230. NKID =9
  231. NKMT =7
  232. NMATRI=1
  233. SEGINI MATRIK
  234.  
  235. NBSOUS=1
  236. IRIGEL(1,1)=MELEMS
  237. IRIGEL(2,1)=MELEML
  238. IRIGEL(7,1)=4
  239. NBME=NINKO
  240. SEGINI IMATRI
  241. IRIGEL(4,1)=IMATRI
  242. KSPGP=MELEMS
  243. KSPGD=MELEML
  244. DO 102 I=1,NBME
  245. WRITE(NOM,FMT='(I1,A7)')I,NOMI(1:7)
  246. LISPRI(I)=NOM(1:4)//' '
  247. LISDUA(I)='LVTP'//' '
  248. 102 CONTINUE
  249.  
  250. SEGACT MELEMS
  251. NP =1
  252. MP =1
  253. NBEL=MELEMS.NUM(/2)
  254.  
  255. SEGINI IPM1,IPM2
  256. LIZAFM(1,1)=IPM1
  257. LIZAFM(1,2)=IPM2
  258. IF(NBME.EQ.3)THEN
  259. SEGINI IPM3
  260. LIZAFM(1,3)=IPM3
  261. ENDIF
  262.  
  263. CALL KRIPAD(MELEMS,MLENTI)
  264.  
  265. SEGACT MELEME
  266.  
  267. NBSOU1=LISOUS(/1)
  268. IF(NBSOU1.EQ.0)NBSOU1=1
  269.  
  270. NUTOEL=0
  271. DO 101 L=1,NBSOU1
  272. IPT1=MELEME
  273. IF(NBSOU1.NE.1)IPT1=LISOUS(L)
  274. SEGACT IPT1
  275. NOM0=NOMS(IPT1.ITYPEL)//' '
  276. CALL KALPBG(NOM0,'FONFORM ',IZFFM)
  277. SEGACT IZFFM*MOD
  278. IZHR=KZHR(1)
  279. SEGACT IZHR*MOD
  280. NES=GR(/1)
  281. NPG=GR(/3)
  282. NP=IPT1.NUM(/1)
  283. NBELEM=IPT1.NUM(/2)
  284.  
  285. DO 301 K=1,NBELEM
  286. DO 20 I=1,NP
  287. J1 = IPT1.NUM(I,K)
  288. DO 10 N=1,IDIM
  289. XYZ(N,I) = XCOOR((J1-1)*(IDIM+1)+N)
  290. 10 CONTINUE
  291. 20 CONTINUE
  292. CALL CALJBR(FN,GR,PG,XYZ,HR,PGSQ,RPG,
  293. & NES,IDIM,NP,NPG,IAXI,AIRE,AJ,SGN)
  294.  
  295.  
  296. U0=1.D0
  297. DO 302 I=1,NP
  298. K1=LECT(IPT1.NUM(I,K))
  299. UX=0.D0
  300. UY=0.D0
  301. UZ=0.D0
  302. UT=0.D0
  303. DO 304 LG=1,NPG
  304. UX=UX+FN(I,LG)*AJ(1,1,LG)
  305. UY=UY+FN(I,LG)*AJ(2,1,LG)
  306. IF(IDIM.EQ.3)UZ=UZ+FN(I,LG)*AJ(3,1,LG)
  307. UNL=0.D0
  308. DO 321 J=1,NP
  309. K2=LECT(IPT1.NUM(J,K))
  310. NK=(K2-1)*(1-IK1)+1
  311. UNL=UNL+VTANG.VPOCHA(NK,1)*FN(J,L)
  312. 321 CONTINUE
  313. UT=UT+FN(I,LG)*UNL
  314. 304 CONTINUE
  315. IPM1.AM(K1,1,1)=IPM1.AM(K1,1,1)-UX
  316. IPM2.AM(K1,1,1)=IPM2.AM(K1,1,1)-UY
  317. IF(IDIM.EQ.3)IPM3.AM(K1,1,1)=IPM3.AM(K1,1,1)-UZ
  318. MPOVA1.VPOCHA(K1,1)=MPOVA1.VPOCHA(K1,1)-UT
  319. 302 CONTINUE
  320. 301 CONTINUE
  321.  
  322. 101 CONTINUE
  323.  
  324.  
  325.  
  326. CALL ECROBJ('MATRIK',MATRIK)
  327. CALL ECROBJ('CHPOINT',MCHPO1)
  328.  
  329. RETURN
  330. 1001 FORMAT(20(1X,I5))
  331. 1002 FORMAT(10(1X,1PE11.4))
  332. END
  333.  
  334.  
  335.  
  336.  
  337.  
  338.  
  339.  
  340.  
  341.  
  342.  
  343.  
  344.  
  345.  
  346.  
  347.  

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