Télécharger zzoimp.eso

Retour à la liste

Numérotation des lignes :

zzoimp
  1. C ZZOIMP SOURCE FANDEUR 22/01/03 21:16:05 11136
  2. SUBROUTINE ZZOIMP(MTABX,MTAB1)
  3. IMPLICIT INTEGER(I-N)
  4. IMPLICIT REAL*8 (A-H,O-Z)
  5. C***********************************************************************
  6. C -----------------------------------------------------------
  7. C --------- TOIMP ----------------------------------------
  8. C -----------------------------------------------------------
  9. C --------- PARAMETRI DELLO OPERATORE (NELLO ORDINE) : -----
  10. C -----------------------------------------------------------
  11. C --------- TENSION ( tau et pression ) ---------
  12. C -----------------------------------------------------------
  13. C
  14. C SYNTAXE :
  15. C
  16. C TOIMP (tau pression)
  17. C
  18. C 1------2
  19. C (R1,AL1) LEF FLUIDE NOEUDS 1 2
  20. C
  21. C
  22. C
  23. C CAS TRIDIMENSIONNEL
  24. C 4 ________ 3
  25. C / FLUIDE /
  26. C 1 /________/2
  27. C
  28. C
  29. C***********************************************************************
  30.  
  31.  
  32. -INC PPARAM
  33. -INC CCOPTIO
  34. -INC SMCHAML
  35. -INC SMCOORD
  36. -INC SMLENTI
  37. POINTEUR IZIPAD.MLENTI
  38. -INC SMELEME
  39. POINTEUR MELEM1.MELEME
  40. -INC SMCHPOI
  41. POINTEUR IZG1.MCHPOI, IZGG1.MPOVAL
  42. POINTEUR IZTU1.MPOVAL
  43. POINTEUR MZTO.MPOVAL
  44. POINTEUR IZVOL.MPOVAL, IZTCO.MPOVAL
  45.  
  46. -INC SMLMOTS
  47. POINTEUR LINCO.MLMOTS
  48. CHARACTER*8 NOMZ,NOMA,TYPE,CHAI,TYPC
  49. CHARACTER*(LOCOMP) NOM,NOMI
  50. LOGICAL LOGI
  51. PARAMETER (NTB=1)
  52. CHARACTER*8 LTAB(NTB)
  53. DIMENSION KTAB(NTB),IXV(3)
  54. SAVE IPAS
  55. DATA LTAB/'KIZX '/,IPAS/0/
  56. C*****************************************************************************
  57. CTOIMP
  58. C write(6,*)' Debut TOIMP '
  59. C
  60. C- Récupération de la table INCO (pointeur KINC)
  61. C
  62. CALL LEKTAB(MTAB1,'INCO',KINC)
  63. IF(KINC.EQ.0)THEN
  64. C Indice %m1:8 : Indice %m9:16 non trouvé dans la table %m17:24
  65. MOTERR( 1: 8) = ' INCO '
  66. MOTERR( 9:16) = ' INCO '
  67. MOTERR(17:24) = ' EQEX '
  68. CALL ERREUR(786)
  69. RETURN
  70. ENDIF
  71.  
  72. C*****************************************************************************
  73. C OPTIONS
  74. C KIMPL = 0 -> EXPL 1 -> IMPL 2 -> SEMI
  75. C KFORM = 0 -> SI 1 -> EF 2 -> VF 3 -> EFMC
  76. C IDCEN = 0-> rien 1-> CENTREE 2-> SUPGDC 3-> SUPG 4-> TVISQUEU 5-> CNG
  77.  
  78. IAXI=0
  79. IF(IFOMOD.EQ.0)IAXI=2
  80. C
  81. C- Récupération de la table des options KOPT (pointeur KOPTI)
  82. C
  83. CALL LEKTAB(MTABX,'KOPT',KOPTI)
  84. IF (KOPTI.EQ.0) THEN
  85. C Indice %m1:8 : Indice %m9:16 non trouvé dans la table %m17:24
  86. MOTERR( 1: 8) = ' KOPT '
  87. MOTERR( 9:16) = ' KOPT '
  88. MOTERR(17:24) = ' KIZX '
  89. CALL ERREUR(786)
  90. RETURN
  91. ENDIF
  92.  
  93. C? CALL ACME(KOPTI,'MTRMASS ',MMPG)
  94. C? IPG=0
  95. C? IF(MMPG.EQ.3)IPG=1
  96. C? CALL ACME(KOPTI,'IDCEN',IDCEN)
  97. CALL ACME(KOPTI,'KIMPL',KIMPL)
  98. CALL ACME(KOPTI,'KFORM',KFORM)
  99.  
  100. IF(KFORM.NE.0.AND.KFORM.NE.1)THEN
  101. C Option %m1:8 incompatible avec les données
  102. MOTERR( 1: 8) = 'EF/EFM1 '
  103. CALL ERREUR(803)
  104. RETURN
  105. ENDIF
  106. IF (IERR.NE.0) RETURN
  107.  
  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,'CENTRE',MELEMC)
  126. CALL LEKTAB(MTABZ,'XXPSOML',MCHELM)
  127. CALL LEKTAB(MTABZ,'XXCOTE',MCHPCO)
  128. IF (IERR.NE.0) RETURN
  129.  
  130. SEGACT MELEME
  131. SEGACT MCHELM
  132. CALL LICHT(MCHPCO,IZTCO,TYPC,IGEOM)
  133. NCOT=IZTCO.VPOCHA(/2)
  134.  
  135. C*************************************************************************
  136. C VERIFICATIONS SUR LES INCONNUES
  137. C
  138. C- Récupération du nombre d'inconnues et du nom de l'inconnue NOMI
  139. C
  140. TYPE='LISTMOTS'
  141. CALL ACMO(MTABX,'LISTINCO',TYPE,LINCO)
  142. IF (IERR.NE.0) RETURN
  143. SEGACT LINCO
  144. NBINC=LINCO.MOTS(/2)
  145. IF(NBINC.NE.1)THEN
  146. C Indice %m1:8 : contient plus de %i1 %m9:16
  147. MOTERR( 1:8) = 'LISTINCO'
  148. INTERR(1) = 1
  149. MOTERR(9:16) = ' MOTS '
  150. CALL ERREUR(799)
  151. RETURN
  152. ENDIF
  153.  
  154. C --> 1 ere Inconnue
  155.  
  156. NOMI=LINCO.MOTS(1)
  157.  
  158. TYPE=' '
  159. CALL ACMO(KINC,NOMI,TYPE,MCHPOI)
  160. IF(TYPE.NE.'CHPOINT ')THEN
  161. C Indice %m1:8 : ne contient pas un objet de type %m9:16
  162. MOTERR( 1: 8) = 'INC '//NOMI
  163. MOTERR( 9:16) = 'CHPOINT '
  164. CALL ERREUR(800)
  165. RETURN
  166. ELSE
  167. CALL LICHT(MCHPOI,IZTU1,TYPC,MELEM1)
  168. ENDIF
  169.  
  170. C*************************************************************************
  171. C Le domaine de definition est donne par le SPG de la premiere inconnue
  172. C Les inconnues suivantes devront posseder ce meme pointeur
  173. C On verifie que les points de la zone sont tous inclus dans ce SPG
  174.  
  175. CALL KRIPAD(MELEM1,IZIPAD)
  176.  
  177. IF(IPAS.EQ.0)THEN
  178. CALL VERPAD(IZIPAD,MELEME,IRET)
  179. IF(IRET.NE.0)THEN
  180. C Indice %m1:8 : L'objet %m9:16 n'a pas le bon support géométrique
  181. MOTERR(1: 8) = 'INC '//NOMI
  182. MOTERR(9:16) = 'CHPOINT '
  183. CALL ERREUR(788)
  184. IPAS=0
  185. RETURN
  186. ENDIF
  187. ENDIF
  188.  
  189. C*************************************************************************
  190. C Lecture du coefficient
  191. C Type du coefficient :
  192. C IK1=0 CHPOINT IK1=1 scalaire IK1=2 vecteur
  193.  
  194. CALL ACME(MTABX,'IARG',IARG)
  195. IF(IARG.NE.1)THEN
  196. WRITE(6,*)'Opérateur TOIMP : nombre d''arguments incorrect'
  197. C Indice %m1:8 : nombre d'arguments incorrect
  198. MOTERR(1:8) = 'IARG '
  199. CALL ERREUR(804)
  200. RETURN
  201. ENDIF
  202.  
  203. IXV(1)=-MELEMC
  204. IXV(2)=0
  205. IXV(3)=1
  206. CALL LEKCOF('Opérateur TOIMP :',
  207. & MTABX,KINC,1,IXV,MTO,MZTO,NTAU,NC1,IKS,IRET)
  208. IF(IRET.EQ.0)RETURN
  209.  
  210. IF(IKS.EQ.2)IKS=1
  211.  
  212. C write(6,*)' Fin lecture Arguments '
  213. C Fin lecture Arguments ************************************************
  214.  
  215.  
  216. C write(6,*)' Kform=',kform,' KIMPL=',kimpl
  217. IF(KIMPL.EQ.0)THEN
  218. IKIMPL=1
  219. CALL LEKTAB(MTAB1,'KIZG',KIZG)
  220. IF(KIZG.EQ.0)THEN
  221. CALL CRTABL(KIZG)
  222. CALL ECMM(KIZG,'SOUSTYPE','KIZG')
  223. CALL ECMO(MTAB1,'KIZG','TABLE ',KIZG)
  224. ENDIF
  225.  
  226. TYPE=' '
  227. CALL ACMO(KIZG,NOMI,TYPE,IZG1)
  228. IF(TYPE.NE.'CHPOINT ')THEN
  229. NC=IZTU1.VPOCHA(/2)
  230. TYPE='SOMMET'
  231. CALL CRCHPT(TYPE,MELEM1,NC,IZG1)
  232. CALL ECMO(KIZG,NOMI,'CHPOINT ',IZG1)
  233. ENDIF
  234.  
  235. ELSE
  236.  
  237. IKIMPL=-1
  238.  
  239. NAT=2
  240. NSOUPO=1
  241. SEGACT MELEM1
  242. N=MELEM1.NUM(/2)
  243. NC=IZTU1.VPOCHA(/2)
  244. NINKO=NC
  245. SEGINI MCHPO1,MSOUP1,MPOVA1
  246. MCHPO1.IFOPOI=IFOUR
  247. MCHPO1.MOCHDE=TITREE
  248. MCHPO1.MTYPOI='SMBR'
  249. MCHPO1.JATTRI(1)=2
  250. MCHPO1.IPCHP(1)=MSOUP1
  251. DO 177 N=1,NINKO
  252. WRITE(NOM,FMT='(I1)')N
  253. NOM=NOM(1:1)//NOMI(1:LOCOMP-1)
  254. MSOUP1.NOCOMP(N)=NOM
  255. 177 CONTINUE
  256. MSOUP1.IGEOC=MELEM1
  257. MSOUP1.IPOVAL=MPOVA1
  258. IZG1=MCHPO1
  259.  
  260. ENDIF
  261.  
  262. CALL LICHT(IZG1,IZGG1,TYPC,IGEOM)
  263.  
  264. IF(IGEOM.NE.MELEM1)THEN
  265. WRITE(6,*)' Opérateur TOIM'
  266. WRITE(6,*)' Incompatibilité de SPG entre 1ères inconnues'
  267. RETURN
  268. ENDIF
  269.  
  270. SEGACT MELEME
  271. NBSOUS=LISOUS(/1)
  272. IF(NBSOUS.EQ.0)NBSOUS=1
  273. NUTOEL=0
  274.  
  275. NPTD=IZGG1.VPOCHA(/1)
  276.  
  277. DO 1 L=1,NBSOUS
  278. IPT1=MELEME
  279. IF(NBSOUS.NE.1)IPT1=LISOUS(L)
  280. SEGACT IPT1
  281.  
  282. MCHAML=ICHAML(L)
  283. SEGACT MCHAML
  284. MELVAL=IELVAL(1)
  285. SEGACT MELVAL
  286.  
  287. NP =IPT1.NUM(/1)
  288. NBEL=IPT1.NUM(/2)
  289.  
  290. CALL ZTOIMP(NBEL,NUTOEL,NP,IZIPAD.LECT,IPT1.NUM,
  291. & VELCHE,IZTCO.VPOCHA,NCOT,IKIMPL,
  292. & IZTU1.VPOCHA,IZGG1.VPOCHA,NPTD,MZTO.VPOCHA,NTAU,IKS)
  293.  
  294. C write(6,*)' TO '
  295. C write(6,1002)(IZGG1.VPOCHA(ii,1),ii=1,nptd)
  296. C write(6,*)' TO 2'
  297. C write(6,1002)(IZGG1.VPOCHA(ii,2),ii=1,nptd)
  298.  
  299.  
  300.  
  301. SEGDES MZTO
  302. SEGDES IPT1,MCHAML,MELVAL
  303. NUTOEL=NUTOEL+NBEL
  304.  
  305. 1 CONTINUE
  306.  
  307. IF(KIMPL.NE.0)THEN
  308. TYPE=' '
  309. CALL ACMO(MTAB1,'SMBR',TYPE,MCHPO2)
  310.  
  311. IF(TYPE.NE.'CHPOINT')THEN
  312. C write(6,*)' IZG1=',izg1
  313. CALL ECMO(MTAB1,'SMBR','CHPOINT',IZG1)
  314. ELSE
  315. CALL ECROBJ('CHPOINT',MCHPO2)
  316. CALL ECROBJ('CHPOINT',IZG1)
  317. CALL PRFUSE
  318. CALL LIROBJ('CHPOINT',MCHPOI,1,IRET)
  319. CALL ECMO(MTAB1,'SMBR','CHPOINT',MCHPOI)
  320. ENDIF
  321.  
  322. ENDIF
  323.  
  324. SEGDES MELEME
  325.  
  326. SEGDES IZTU1
  327. SEGDES IZG1,IZGG1
  328. SEGDES LINCO
  329. SEGSUP IZIPAD
  330. IPAS=1
  331. C write(6,*)' FIN TOIMP '
  332. RETURN
  333. 90 CONTINUE
  334. WRITE(6,*)' Interuption anormale de TOIMP '
  335. C Option %m1:8 incompatible avec les données
  336. MOTERR( 1: 8) = ' EF '
  337. CALL ERREUR(803)
  338. RETURN
  339. 1002 FORMAT(10(1X,1PE11.4))
  340. END
  341.  
  342.  
  343.  
  344.  
  345.  
  346.  
  347.  
  348.  
  349.  
  350.  
  351.  

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