Télécharger ksof.eso

Retour à la liste

Numérotation des lignes :

ksof
  1. C KSOF SOURCE GOUNAND 25/11/12 21:15:36 12399
  2. SUBROUTINE KSOF
  3. C*************************************************************************
  4. C
  5. C Objet : Change un champoint VECT SOMMET en SCAL FACE
  6. C Syntaxe : VFACE = KSOF VSOMMET TABDOM ;
  7. C
  8. C*************************************************************************
  9. IMPLICIT INTEGER(I-N)
  10. IMPLICIT REAL*8 (A-H,O-Z)
  11.  
  12. -INC PPARAM
  13. -INC CCOPTIO
  14. -INC SMCOORD
  15. -INC SMLENTI
  16. POINTEUR LEF.MLENTI
  17. -INC SMTABLE
  18. POINTEUR MTABD.MTABLE
  19. -INC SMCHPOI
  20. POINTEUR MCHPF.MCHPOI,MCHPN.MCHPOI,MPOVF.MPOVAL,MPOVN.MPOVAL
  21. -INC SMELEME
  22. POINTEUR MELEMF.MELEME,MELEMP.MELEME
  23.  
  24. PARAMETER (NTB=1)
  25. CHARACTER*8 LTAB(NTB),TYPE,TYPC
  26. DIMENSION KTAB(NTB)
  27. DATA LTAB/'DOMAINE '/
  28. C***
  29. IAXI=0
  30. IF(IFOMOD.EQ.0)IAXI=2
  31.  
  32. NTO=NTB
  33. CALL LITABS(LTAB,KTAB,NTB,NTO,IRET)
  34. IF(IRET.EQ.0)RETURN
  35. MTABD=KTAB(1)
  36. SEGACT MTABD
  37.  
  38. CALL LIROBJ('CHPOINT ',MCHPOI,1,IRET)
  39. IF(IRET.EQ.0)THEN
  40. WRITE(6,*)' On attend un CHPOINT'
  41. RETURN
  42. ENDIF
  43. CALL COMBNA(MCHPOI,0,INAT,IATTR)
  44. CALL LICHT(MCHPOI,MPOVAL,TYPC,IGEOS)
  45. IF(TYPC.NE.'SOMMET')THEN
  46. WRITE(6,*)'On attend un CHAMPOINT SOMMET'
  47. SEGDES MCHPOI,MPOVAL
  48. RETURN
  49. ENDIF
  50. NC=VPOCHA(/2)
  51. IF(NC.NE.IDIM)THEN
  52. WRITE(6,*)'On attend un CHAMPOINT VECT SOMMET'
  53. SEGDES MCHPOI,MPOVAL
  54. RETURN
  55. ENDIF
  56. CALL KRIPAD(IGEOS,MLENTI)
  57.  
  58. CALL LEKTAB(MTABD,'FACE',MELEMF)
  59. IF(MELEMF.EQ.0)GO TO 90
  60. C? CALL KRIPAD(MELEMF,MLENT1)
  61. SEGACT MELEMF
  62. NBF=MELEMF.NUM(/2)
  63. CALL RSETXI(LECT,MELEMF.NUM,NBF)
  64.  
  65. CALL LEKTAB(MTABD,'FACEP',MELEMP)
  66. IF(MELEMP.EQ.0)GO TO 90
  67. CALL LEKTAB(MTABD,'XXNORMAF',MCHPN)
  68. IF(MCHPN.EQ.0)GO TO 90
  69. C CALL KRIPAD(MELEMP,MLENTI)
  70.  
  71. CALL LICHT(MCHPN,MPOVN,TYPE,IGEOM)
  72. TYPE='FACE'
  73. NC=1
  74. CALL CRCHPT(TYPE,MELEMF,NC,IATTR,MCHPF)
  75. CALL LICHT(MCHPF,MPOVF,TYPE,IGEOM)
  76.  
  77.  
  78. SEGACT MELEMP
  79. NBSOUS=MELEMP.LISOUS(/1)
  80. IF(NBSOUS.EQ.0)NBSOUS=1
  81. NF=0
  82. DO 1 KS=1,NBSOUS
  83. IPT1=MELEMP
  84. IF(NBSOUS.NE.1)IPT1=MELEMP.LISOUS(KS)
  85. SEGACT IPT1
  86. NS=IPT1.NUM(/1)-1
  87. NEL=IPT1.NUM(/2)
  88.  
  89. IF(IAXI.EQ.0)THEN
  90. DO 2 K=1,NEL
  91. C? NF=NF+1
  92. C? NF=MLENT1.LECT(IPT1.NUM(NS+1,K))
  93. NF= LECT(IPT1.NUM(NS+1,K))
  94. C write(6,*)' 0 NF=',nf
  95. C NF=IPT1.NUM(2,K)
  96. C NF=IPADL(NF)
  97. VI=0.D0
  98. DO 22 IS=1,NS
  99. N1=IPT1.NUM(IS,K)
  100. N1=LECT(N1)
  101. DO 21 I=1,IDIM
  102. VI=VI+VPOCHA(N1,I)*MPOVN.VPOCHA(NF,I)
  103. 21 CONTINUE
  104. 22 CONTINUE
  105. C write(6,*)' NF=',nf
  106. C write(6,*)'Normale : ',MPOVN.VPOCHA(NF,1),MPOVN.VPOCHA(NF,2)
  107. MPOVF.VPOCHA(NF,1)=VI/FLOAT(NS)
  108. C write(6,*)'VI/F=',MPOVF.VPOCHA(NF,1)
  109. 2 CONTINUE
  110.  
  111. ELSEIF(IAXI.EQ.2)THEN
  112. f23=2.D0/3.D0
  113. DO 3 K=1,NEL
  114. C? NF=NF+1
  115. C? NF=MLENT1.LECT(IPT1.NUM(NS+1,K))
  116. NF= LECT(IPT1.NUM(NS+1,K))
  117. C write(6,*)' 2 NF=',nf
  118. N1=IPT1.NUM(1,K)
  119. R1=XCOOR((N1-1)*3+1)
  120. N1=LECT(N1)
  121. N2=IPT1.NUM(2,K)
  122. R2=XCOOR((N2-1)*3+1)
  123. N2=LECT(N2)
  124. VX1=VPOCHA(N1,1)
  125. VX2=VPOCHA(N2,1)
  126. VY1=VPOCHA(N1,2)
  127. VY2=VPOCHA(N2,2)
  128. DN = ABS(MPOVN.VPOCHA(NF,2))
  129. IF(DN.GT.1.D-6)THEN
  130. VN1=VX1*MPOVN.VPOCHA(NF,1)+VY1*MPOVN.VPOCHA(NF,2)
  131. VN2=VX2*MPOVN.VPOCHA(NF,1)+VY2*MPOVN.VPOCHA(NF,2)
  132. DR=R2-R1
  133. VN=VN1*R2-VN2*R1+F23*(VN2-VN1)/DR*(R2**3-R1**3)/(R2+R1)
  134. MPOVF.VPOCHA(NF,1)=VN/DR
  135. ELSE
  136. C calcul simplifier pour les faces casi verticale (sinon X/0.)
  137. VX=(VX1+VX2)*0.5D0
  138. VY=(VY1+VY2)*0.5D0
  139. MPOVF.VPOCHA(NF,1)=VX*MPOVN.VPOCHA(NF,1)+VY*MPOVN.VPOCHA(NF,2)
  140. ENDIF
  141. 3 CONTINUE
  142. ENDIF
  143.  
  144. SEGDES IPT1
  145. 1 CONTINUE
  146. SEGDES MELEMP,MELEMF
  147.  
  148. SEGSUP MLENTI
  149. CALL ECROBJ('CHPOINT ',MCHPF)
  150. SEGDES MCHPF,MPOVF,MTABD
  151. SEGDES MCHPOI,MPOVAL
  152. SEGDES MCHPN,MPOVN
  153.  
  154. RETURN
  155.  
  156. 90 CONTINUE
  157. WRITE(6,*)' Retour anormal de KSOF'
  158. RETURN
  159.  
  160. END
  161.  
  162.  

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