Télécharger yfrot.eso

Retour à la liste

Numérotation des lignes :

yfrot
  1. C YFROT SOURCE CB215821 20/11/25 13:43:53 10792
  2. SUBROUTINE YFROT
  3.  
  4. IMPLICIT INTEGER(I-N)
  5. IMPLICIT REAL*8 (A-H,O-Z)
  6.  
  7. C***********************************************************************
  8. C
  9. C CE SP DISCRETISE LE TERME DE PERTE DE CHARGE DANS LES EQUATIONS DE
  10. C NAVIER STOKES
  11. C EN 2D SUR LES ELEMENTS QUA4 ET TRI3 PLAN OU AXI
  12. C EN 3D SUR LES ELEMENTS CUB8 ET PRI6
  13. C L OPERATEUR EST DIAGONAL
  14. C
  15. C SYNTAXE :
  16. C
  17. C FROT K B <V0> INCO UN :
  18. C
  19. C COMMENTAIRES :
  20. C --------------
  21. C
  22. C UN CHAMPS DE VITESSE TRANSPORTANT
  23. C VO CHAMPS DE VITESSE DE REFFERENCE
  24. C K (VECT ) Coefficient
  25. C (VECT CENTRE)
  26. C B (VECT ) exposant
  27. C (VECT CENTRE)
  28. C
  29. C***********************************************************************
  30.  
  31.  
  32. -INC PPARAM
  33. -INC CCOPTIO
  34. -INC SMCOORD
  35. -INC SMCHAML
  36. -INC SMLENTI
  37. POINTEUR IZIPAD.MLENTI
  38. -INC SMELEME
  39. POINTEUR MELEM1.MELEME
  40. -INC SMCHPOI
  41. POINTEUR MCHPIN.MCHPOI
  42. POINTEUR IZG1.MCHPOI
  43. POINTEUR IZGG.MPOVAL,IZGG1.MPOVAL,IZTU1.MPOVAL
  44. POINTEUR IZGI.MCHPOI,IZGGI.MPOVAL
  45. POINTEUR IZGE.MCHPOI,IZGGE.MPOVAL
  46. POINTEUR MZK.MPOVAL,MZBETA.MPOVAL,MZV0.MPOVAL
  47. -INC SMLMOTS
  48. POINTEUR LINCO.MLMOTS
  49. CHARACTER*8 TYPE,MARG,TYPC
  50. CHARACTER*(LOCOMP) NOMP(3),NOMI,NOM,NOMZ
  51. DIMENSION IXV(3)
  52. LOGICAL LOGI
  53. PARAMETER (NTB=1)
  54. CHARACTER*8 LTAB(NTB)
  55. DIMENSION KTAB(NTB)
  56. c SAVE IPAS
  57. DATA LTAB/'KIZX '/,IPAS/0/
  58. C*****************************************************************************
  59. CFROT
  60. C write(6,*)' DEBUT FROT'
  61. segact mcoord
  62.  
  63. CALL LITABS(LTAB,KTAB,NTB,1,IRET)
  64. IF(IRET.EQ.0)THEN
  65. WRITE(6,*)' Operateur FROT '
  66. WRITE(6,*)' On attend un ensemble de table soustypes'
  67. RETURN
  68. ENDIF
  69. MTABX=KTAB(1)
  70.  
  71. CALL LEKTAB(MTABX,'EQEX',MTAB1)
  72. IF(MTAB1.EQ.0)THEN
  73. WRITE(6,*)' Operateur FROT '
  74. WRITE(6,*)' On ne trouve pas l''indice EQEX ? '
  75. RETURN
  76. ENDIF
  77.  
  78. CALL LEKTAB(MTAB1,'PASDETPS',KINC)
  79. CALL ACME(KINC,'NUPASDT',nupasdt)
  80. C write(6,*)' FROT nupasdt=',nupasdt
  81.  
  82. CALL LEKTAB(MTAB1,'INCO',KINC)
  83. IF(KINC.EQ.0)THEN
  84. WRITE(6,*)' Operateur FROT '
  85. WRITE(6,*)' Il n''y a pas de table INCO ? ?.'
  86. RETURN
  87. ENDIF
  88.  
  89. C*****************************************************************************
  90. C OPTIONS
  91.  
  92. KIMPL=0
  93. KFORM=0
  94.  
  95. IAXI=0
  96. IF(IFOMOD.EQ.0)IAXI=2
  97. KOPTI=0
  98. TYPE=' '
  99. CALL ACMO(MTABX,'KOPT',TYPE,IENT)
  100. IF(TYPE.EQ.'TABLE')KOPTI=IENT
  101. IF(KOPTI.NE.0)THEN
  102. TYPE=' '
  103. CALL ACMO(KOPTI,'KIMPL',TYPE,IENT)
  104. IF(TYPE.EQ.'ENTIER')CALL ACME(KOPTI,'KIMPL',KIMPL)
  105. TYPE=' '
  106. CALL ACMO(KOPTI,'KFORM',TYPE,IENT)
  107. IF(TYPE.EQ.'ENTIER')CALL ACME(KOPTI,'KFORM',KFORM)
  108. IF(KFORM.NE.0.AND.KIMPL.EQ.0)THEN
  109. WRITE(6,*)' Operateur FROT '
  110. WRITE(6,*)' Seule la formulation EFM1 est autorisée'
  111. RETURN
  112. ENDIF
  113.  
  114. ENDIF
  115. C*****************************************************************************
  116.  
  117. CALL ACMM(MTABX,'NOMZONE',NOMZ)
  118. CALL LEKTAB(MTABX,'DOMZ',MTABZ)
  119. IF(MTABZ.EQ.0)THEN
  120. WRITE(6,*)' Operateur FROT '
  121. WRITE(6,*)' On ne trouve pas l''indice DOMZ ? '
  122. GO TO 90
  123. ENDIF
  124.  
  125. CALL LEKTAB(MTABZ,'MAILLAGE',MELEME)
  126. IF(MELEME.EQ.0)GO TO 90
  127.  
  128. CALL LEKTAB(MTABZ,'XXPSOML',MCHELM)
  129. IF(MCHELM.EQ.0)GO TO 90
  130. SEGACT MCHELM
  131.  
  132. C***
  133.  
  134. TYPE='LISTMOTS'
  135. CALL ACMO(MTABX,'LISTINCO',TYPE,LINCO)
  136. SEGACT LINCO
  137.  
  138. C*************************************************************************
  139. C! CALL LEKTAB(MTAB1,'DOMAINE',MTABD)
  140. C! IF(MTABD.EQ.0)THEN
  141. C! WRITE(6,*)' Operateur FROT '
  142. C! WRITE(6,*)' On ne trouve pas l''indice DOMAINE ?'
  143. C! GO TO 90
  144. C! ENDIF
  145.  
  146. C! CALL LEKTAB(MTABD,'SOMMET',MELEM1)
  147. C! IF(MELEM1.EQ.0)THEN
  148. C! WRITE(6,*)' Operateur FROT '
  149. C! WRITE(6,*)' On ne trouve pas l''indice SOMMET ?'
  150. C! GO TO 90
  151. C! ENDIF
  152.  
  153. CALL LEKTAB(MTAB1,'INCO',INCO)
  154. IF(INCO.EQ.0)THEN
  155. WRITE(6,*)' Operateur FROT '
  156. WRITE(6,*)'Il n''y a pas de table INCO '
  157. RETURN
  158. ENDIF
  159.  
  160. CALL LEKTAB(MTAB1,'KIZG',KIZG)
  161. IF(KIZG.EQ.0)THEN
  162. CALL CRTABL(KIZG)
  163. CALL ECMM(KIZG,'SOUSTYPE','KIZG')
  164. CALL ECMO(MTAB1,'KIZG','TABLE ',KIZG)
  165. ENDIF
  166. IF(KIMPL.EQ.1)THEN
  167. CALL LEKTAB(MTAB1,'KIZG1',KIZG1)
  168. IF(KIZG1.EQ.0)THEN
  169. CALL CRTABL(KIZG1)
  170. CALL ECMM(KIZG1,'SOUSTYPE','KIZG1')
  171. CALL ECMO(MTAB1,'KIZG1','TABLE ',KIZG1)
  172. ENDIF
  173. ENDIF
  174.  
  175. C VERIFICATIONS SUR LES INCONNUES
  176. NBINC=LINCO.MOTS(/2)
  177. IF(NBINC.NE.1)THEN
  178. WRITE(6,*)' Operateur FROT '
  179. WRITE(6,*)'Nombre d''inconnues incorrecte : ',NBINC,' On attend 1'
  180. RETURN
  181. ENDIF
  182.  
  183. NOMI=LINCO.MOTS(1)
  184.  
  185. TYPE=' '
  186. CALL ACMO(INCO,NOMI,TYPE,MCHPOI)
  187. IF(TYPE.NE.'CHPOINT ')THEN
  188. WRITE(6,*)' Operateur FROT '
  189. WRITE(6,*)' L objet CHPOINT ',NOMJ,' n existe pas dans la table'
  190. RETURN
  191. ELSE
  192. CALL LICHT(MCHPOI,IZTU1,TYPC,MELEM1)
  193. MCHPIN=MCHPOI
  194. NINKO = IZTU1.VPOCHA(/2)
  195. NPTI = IZTU1.VPOCHA(/1)
  196. IF (NINKO.NE.IDIM) THEN
  197. C Indice %m1:8 : Le %m9:16 n'a pas le bon nombre de composantes
  198. MOTERR( 1: 8) = 'INC '//NOMI
  199. MOTERR( 9:16) = 'CHPOINT '
  200. CALL ERREUR(784)
  201. RETURN
  202. ENDIF
  203. ENDIF
  204.  
  205. C*************************************************************************
  206. C Le domaine de definition est donne par le SPG de la premiere inconnue
  207. C Les inconnues suivantes devront posseder ce meme pointeur
  208. C On verifie que les points de la zone sont tous inclus dans ce SPG
  209.  
  210. CALL KRIPAD(MELEM1,IZIPAD)
  211.  
  212. IF(IPAS.EQ.0)THEN
  213. CALL VERPAD(IZIPAD,MELEME,IRET)
  214. IF(IRET.NE.0)THEN
  215. WRITE(6,*)' Opérateur FROT '
  216. WRITE(6,*)' La zone ',NOMZ,' n''est pas incluse dans le domaine'
  217. GO TO 90
  218. ENDIF
  219. ENDIF
  220.  
  221. C*****************************************************************************
  222. C*************************************************************************
  223. C write(6,*)' FROT KFORM=',KFORM
  224. IF(KFORM.EQ.1)THEN
  225. IHV=1
  226. CALL YFRT('FROT ',MTABX,IHV,MCHPIN,NOMI,MATRIK,MCHPO1)
  227. CALL ECROBJ('MATRIK',MATRIK)
  228. CALL ECROBJ('CHPOINT',MCHPO1)
  229. c CALL PRLIST
  230. RETURN
  231. ENDIF
  232.  
  233. C*************************************************************************
  234. C Lecture du coefficient
  235. C Type du coefficient :
  236. C IK1=0 CHPOINT IK1=1 scalaire IK1=2 vecteur
  237.  
  238. C write(6,*)' Operateur FROT lecture des coefficients'
  239. CALL ACME(MTABX,'IARG',IARG)
  240.  
  241. IF(IARG.NE.2.AND.IARG.NE.3)THEN
  242. WRITE(6,*)' Operateur FROT '
  243. WRITE(6,*)' Nombre d''arguments incorrect : ',IARG
  244. WRITE(6,*)' On attend 2 ou 3 '
  245. RETURN
  246. ENDIF
  247. TYPE=' '
  248. CALL ACMO(MTABZ,'CENTRE',TYPE,MELEMC)
  249. CALL ACMO(MTABZ,'SOMMET',TYPE,MELEMS)
  250.  
  251. IXV(1)=-MELEMC
  252. IXV(2)=0
  253. IXV(3)=1
  254. CALL LEKCOF('Opérateur FROT :',
  255. & MTABX,KINC,1,IXV,MK,MZK,NPK,NC1,IKK,IRET)
  256. IF(IRET.EQ.0)RETURN
  257. IF(IKK.EQ.2)IKK=1
  258.  
  259. IXV(1)=-MELEMC
  260. IXV(2)=0
  261. IXV(3)=1
  262. CALL LEKCOF('Opérateur FROT :',
  263. & MTABX,KINC,2,IXV,MBETA,MZBETA,NBETA,NC2,IKB,IRET)
  264. IF(IRET.EQ.0)RETURN
  265. IF(IKB.EQ.2)IKB=1
  266.  
  267.  
  268. IF(IARG.EQ.3)THEN
  269. IXV(1)=-MELEMS
  270. IXV(2)=0
  271. IXV(3)=1
  272. CALL LEKCOF('Opérateur FROT :',
  273. & MTABX,KINC,3,IXV,IZTG3,MZV0,NV0,NC3,IKV,IRET)
  274. IF(IRET.EQ.0)RETURN
  275. IF(IKV.EQ.2)IKV=1
  276. ELSE
  277. Nu=3
  278. WRITE(MARG,FMT='(A4,I1)')'ARGS',Nu
  279. CALL LEKTAB(MTABX,MARG,MCHPOI)
  280. CALL LICHT(MCHPOI,MPOVAL,TYPC,IGEOM0)
  281. VPOCHA(1,1)=0.D0
  282. VPOCHA(1,2)=0.D0
  283. IF(IDIM.EQ.3)VPOCHA(1,3)=0.D0
  284. MZV0=MPOVAL
  285. NV0=1
  286. IKV=1
  287. ENDIF
  288.  
  289. C Fin lecture Arguments ************************************************
  290.  
  291. TYPE=' '
  292. CALL ACMO(KIZG,NOMI,TYPE,IZG)
  293. IF(TYPE.NE.'CHPOINT ')THEN
  294. NC=IZTU1.VPOCHA(/2)
  295. TYPE='SOMMET'
  296. CALL CRCHPT(TYPE,MELEM1,NC,IZG)
  297. CALL ECMO(KIZG,NOMI,'CHPOINT ',IZG)
  298. ENDIF
  299. CALL LICHT(IZG,IZGG,TYPC,IGEOM)
  300. IF(IGEOM.NE.MELEM1)THEN
  301. WRITE(6,*)' Opérateur FROT'
  302. WRITE(6,*)' Incompatibilité de SPG entre 1ères inconnues'
  303. RETURN
  304. ENDIF
  305.  
  306. IF(KIMPL.EQ.1)THEN
  307. TYPE=' '
  308. CALL ACMO(KIZG1,NOMI,TYPE,IZG1)
  309. IF(TYPE.NE.'CHPOINT ')THEN
  310. NC=IZTU1.VPOCHA(/2)
  311. TYPE='SOMMET'
  312. CALL CRCHPT(TYPE,MELEM1,NC,IZG1)
  313. CALL ECMO(KIZG1,NOMI,'CHPOINT ',IZG1)
  314. ENDIF
  315. CALL LICHT(IZG1,IZGG1,TYPC,IGEOM)
  316. IF(IGEOM.NE.MELEM1)THEN
  317. WRITE(6,*)' Opérateur FROT'
  318. WRITE(6,*)' Incompatibilité de SPG entre 1ères inconnues'
  319. RETURN
  320. ENDIF
  321.  
  322. ELSE
  323. IZGG1=IZGG
  324. ENDIF
  325.  
  326. NPT=IZGG1.VPOCHA(/1)
  327.  
  328. SEGACT MELEME
  329. NBSOUS=LISOUS(/1)
  330. IF(NBSOUS.EQ.0)NBSOUS=1
  331. NUTOEL=0
  332. DT=1.E30
  333.  
  334. WRITE(NOMP(1),FMT='(I1)')1
  335. NOMP(1)=NOMP(1)(1:1)//NOMI(1:LOCOMP-1)
  336. WRITE(NOMP(2),FMT='(I1)')2
  337. NOMP(2)=NOMP(2)(1:1)//NOMI(1:LOCOMP-1)
  338. WRITE(NOMP(3),FMT='(I1)')3
  339. NOMP(3)=NOMP(3)(1:1)//NOMI(1:LOCOMP-1)
  340.  
  341. CALL CRCHPK(TYPE,MELEM1,IDIM,IZGI,NOMP)
  342. CALL LICHT(IZGI,IZGGI,TYPC,IGEOM)
  343.  
  344. CALL CRCHPK(TYPE,MELEM1,IDIM,IZGE,NOMP)
  345. CALL LICHT(IZGE,IZGGE,TYPC,IGEOM)
  346.  
  347. c nbno=IZGG1.VPOCHA(/1)
  348. c nbnc=20
  349. c write(6,*)' =============================================='
  350. c write(6,*)' =============================================='
  351. c write(6,*)' IZZGIIII UX avant YFRTI'
  352. c write(6,1002)(IZGGi.VPOCHA(ii,1),ii=1,nbnc)
  353. c write(6,*)' IZZGIIII UY avant YFRTI'
  354. c write(6,1002)(IZGGi.VPOCHA(ii,2),ii=1,nbnc)
  355. c
  356. c write(6,*)' IZZGEEEE UX avant YFRTI'
  357. c write(6,1002)(IZGGe.VPOCHA(ii,1),ii=1,nbnc)
  358. c write(6,*)' IZZGEEEE UY avant YFRTI'
  359. c write(6,1002)(IZGGe.VPOCHA(ii,2),ii=1,nbnc)
  360.  
  361. DO 1 L=1,NBSOUS
  362. IPT1=MELEME
  363. IF(NBSOUS.NE.1)IPT1=LISOUS(L)
  364. SEGACT IPT1
  365.  
  366. MCHAML=ICHAML(L)
  367. SEGACT MCHAML
  368. MELVAL=IELVAL(1)
  369. SEGACT MELVAL
  370.  
  371. IF(IMACHE(L).NE.IPT1)THEN
  372. write(*,*)'IPT1,IMACHE ',IPT1,IMACHE(L)
  373. goto 90
  374. ENDIF
  375.  
  376. NP =IPT1.NUM(/1)
  377. NBEL=IPT1.NUM(/2)
  378. IES=IDIM
  379.  
  380. CALL YFRTI(VELCHE,IPT1.NUM,NBEL,NUTOEL,NPT,IES,NP,IAXI,
  381. & IZIPAD.LECT,KIMPL,
  382. & MZK.VPOCHA,NPK,IKK,
  383. & MZBETA.VPOCHA,NBETA,IKB,
  384. & MZV0.VPOCHA,NV0,IKV,
  385. & IZTU1.VPOCHA,IZGGE.VPOCHA,IZGGI.VPOCHA)
  386.  
  387. SEGDES IPT1
  388. NUTOEL=NUTOEL+NBEL
  389.  
  390. 1 CONTINUE
  391.  
  392. TYPE = ' '
  393. Cµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµ
  394. Cµµ On construit un MATRIK vide si KIMPL=0
  395. Cµµ On construit un MATRIK diagonal si KIMPL=1
  396. C- Construction du chapeau de l'objet MATRIK
  397. IF(KIMPL.EQ.0)THEN
  398. c write(6,*)' KIMPL=',kimpl
  399. NRIGE = 7
  400. NKID = 9
  401. NKMT = 7
  402. NMATRI = 0
  403. SEGINI MATRIK
  404. SEGDES MATRIK
  405. ELSE
  406. c write(6,*)' KIMPL=',kimpl
  407. NRIGE = 7
  408. NKID = 9
  409. NKMT = 7
  410. NMATRI = 1
  411. SEGINI MATRIK
  412. IRIGEL(1,1) = MELEM1
  413. IRIGEL(2,1) = MELEM1
  414.  
  415. C KFORM = 0 EFM1
  416. C KFORM = 2 VF
  417. C -> matrice Diagonale
  418. IRIGEL(7,1) = 5
  419.  
  420. NBME = NINKO
  421. SEGACT MELEM1
  422. NBSOUS = MELEM1.LISOUS(/1)
  423. IF (NBSOUS.EQ.0) NBSOUS=1
  424. SEGINI IMATRI
  425. IRIGEL(4,1) = IMATRI
  426. KSPGP = MELEM1
  427. KSPGD = MELEM1
  428.  
  429. DO 10 I=1,NBME
  430. WRITE(NOM,FMT='(I1)')I
  431. NOM=NOM(1:1)//NOMI(1:LOCOMP-1)
  432. LISPRI(I) = NOM
  433. LISDUA(I) = NOM
  434. NP=1
  435. MP=1
  436. NBEL=MELEM1.NUM(/2)
  437. SEGINI IZAFM
  438. do 13 k=1,nbel
  439. AM(K,1,1)=IZGGI.VPOCHA(K,I)
  440. 13 continue
  441. LIZAFM(1,I)=IZAFM
  442. 10 CONTINUE
  443. ENDIF
  444.  
  445. c write(6,*)' ..............................................'
  446. c write(6,*)' IZZGIII UX au retour de YFRTI'
  447. c write(6,1002)(IZGGi.VPOCHA(ii,1),ii=1,nbnc)
  448. c write(6,*)' IZZGIII UY au retour de YFRTI'
  449. c write(6,1002)(IZGGi.VPOCHA(ii,2),ii=1,nbnc)
  450. c write(6,*)' IZZGEEE UX au retour de YFRTI'
  451. c write(6,1002)(IZGGe.VPOCHA(ii,1),ii=1,nbnc)
  452. c write(6,*)' IZZGEEE UY au retour de YFRTI'
  453. c write(6,1002)(IZGGe.VPOCHA(ii,2),ii=1,nbnc)
  454. c write(6,*)' =============================================='
  455. c write(6,*)' =============================================='
  456. c do 141 n=1,2
  457. c do 141 i=1,nbno
  458. c IZGGE.VPOCHA(i,n)=IZGGE.VPOCHA(i,n)*(-1)
  459. c141 continue
  460.  
  461.  
  462. Cµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµ
  463.  
  464. SEGDES IZTU1
  465. SEGDES LINCO
  466. SEGSUP IZIPAD
  467. CALL ECROBJ('MATRIK',MATRIK)
  468. CALL ECROBJ('CHPOINT',IZGE)
  469.  
  470. c IPAS=1
  471. RETURN
  472. 90 CONTINUE
  473. WRITE(6,*)' Interuption anormale de FROT'
  474. RETURN
  475. 1002 FORMAT(10(1X,1PE11.4))
  476. END
  477.  
  478.  
  479.  
  480.  
  481.  
  482.  
  483.  
  484.  
  485.  
  486.  
  487.  
  488.  
  489.  
  490.  

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