Télécharger ksof.eso

Retour à la liste

Numérotation des lignes :

ksof
  1. C KSOF SOURCE CB215821 20/11/25 13:33:09 10792
  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 LICHT(MCHPOI,MPOVAL,TYPC,IGEOS)
  44. IF(TYPC.NE.'SOMMET')THEN
  45. WRITE(6,*)'On attend un CHAMPOINT SOMMET'
  46. SEGDES MCHPOI,MPOVAL
  47. RETURN
  48. ENDIF
  49. NC=VPOCHA(/2)
  50. IF(NC.NE.IDIM)THEN
  51. WRITE(6,*)'On attend un CHAMPOINT VECT SOMMET'
  52. SEGDES MCHPOI,MPOVAL
  53. RETURN
  54. ENDIF
  55. CALL KRIPAD(IGEOS,MLENTI)
  56.  
  57. CALL LEKTAB(MTABD,'FACE',MELEMF)
  58. IF(MELEMF.EQ.0)GO TO 90
  59. C? CALL KRIPAD(MELEMF,MLENT1)
  60. SEGACT MELEMF
  61. NBF=MELEMF.NUM(/2)
  62. CALL RSETXI(LECT,MELEMF.NUM,NBF)
  63.  
  64. CALL LEKTAB(MTABD,'FACEP',MELEMP)
  65. IF(MELEMP.EQ.0)GO TO 90
  66. CALL LEKTAB(MTABD,'XXNORMAF',MCHPN)
  67. IF(MCHPN.EQ.0)GO TO 90
  68. C CALL KRIPAD(MELEMP,MLENTI)
  69.  
  70. CALL LICHT(MCHPN,MPOVN,TYPE,IGEOM)
  71. TYPE='FACE'
  72. NC=1
  73. CALL CRCHPT(TYPE,MELEMF,NC,MCHPF)
  74. CALL LICHT(MCHPF,MPOVF,TYPE,IGEOM)
  75.  
  76.  
  77. SEGACT MELEMP
  78. NBSOUS=MELEMP.LISOUS(/1)
  79. IF(NBSOUS.EQ.0)NBSOUS=1
  80. NF=0
  81. DO 1 KS=1,NBSOUS
  82. IPT1=MELEMP
  83. IF(NBSOUS.NE.1)IPT1=MELEMP.LISOUS(KS)
  84. SEGACT IPT1
  85. NS=IPT1.NUM(/1)-1
  86. NEL=IPT1.NUM(/2)
  87.  
  88. IF(IAXI.EQ.0)THEN
  89. DO 2 K=1,NEL
  90. C? NF=NF+1
  91. C? NF=MLENT1.LECT(IPT1.NUM(NS+1,K))
  92. NF= LECT(IPT1.NUM(NS+1,K))
  93. C write(6,*)' 0 NF=',nf
  94. C NF=IPT1.NUM(2,K)
  95. C NF=IPADL(NF)
  96. VI=0.D0
  97. DO 22 IS=1,NS
  98. N1=IPT1.NUM(IS,K)
  99. N1=LECT(N1)
  100. DO 21 I=1,IDIM
  101. VI=VI+VPOCHA(N1,I)*MPOVN.VPOCHA(NF,I)
  102. 21 CONTINUE
  103. 22 CONTINUE
  104. C write(6,*)' NF=',nf
  105. C write(6,*)'Normale : ',MPOVN.VPOCHA(NF,1),MPOVN.VPOCHA(NF,2)
  106. MPOVF.VPOCHA(NF,1)=VI/FLOAT(NS)
  107. C write(6,*)'VI/F=',MPOVF.VPOCHA(NF,1)
  108. 2 CONTINUE
  109.  
  110. ELSEIF(IAXI.EQ.2)THEN
  111. f23=2.D0/3.D0
  112. DO 3 K=1,NEL
  113. C? NF=NF+1
  114. C? NF=MLENT1.LECT(IPT1.NUM(NS+1,K))
  115. NF= LECT(IPT1.NUM(NS+1,K))
  116. C write(6,*)' 2 NF=',nf
  117. N1=IPT1.NUM(1,K)
  118. R1=XCOOR((N1-1)*3+1)
  119. N1=LECT(N1)
  120. N2=IPT1.NUM(2,K)
  121. R2=XCOOR((N2-1)*3+1)
  122. N2=LECT(N2)
  123. VX1=VPOCHA(N1,1)
  124. VX2=VPOCHA(N2,1)
  125. VY1=VPOCHA(N1,2)
  126. VY2=VPOCHA(N2,2)
  127. DN = ABS(MPOVN.VPOCHA(NF,2))
  128. IF(DN.GT.1.D-6)THEN
  129. VN1=VX1*MPOVN.VPOCHA(NF,1)+VY1*MPOVN.VPOCHA(NF,2)
  130. VN2=VX2*MPOVN.VPOCHA(NF,1)+VY2*MPOVN.VPOCHA(NF,2)
  131. DR=R2-R1
  132. VN=VN1*R2-VN2*R1+F23*(VN2-VN1)/DR*(R2**3-R1**3)/(R2+R1)
  133. MPOVF.VPOCHA(NF,1)=VN/DR
  134. ELSE
  135. C calcul simplifier pour les faces casi verticale (sinon X/0.)
  136. VX=(VX1+VX2)*0.5D0
  137. VY=(VY1+VY2)*0.5D0
  138. MPOVF.VPOCHA(NF,1)=VX*MPOVN.VPOCHA(NF,1)+VY*MPOVN.VPOCHA(NF,2)
  139. ENDIF
  140. 3 CONTINUE
  141. ENDIF
  142.  
  143. SEGDES IPT1
  144. 1 CONTINUE
  145. SEGDES MELEMP,MELEMF
  146.  
  147. SEGSUP MLENTI
  148. CALL ECROBJ('CHPOINT ',MCHPF)
  149. SEGDES MCHPF,MPOVF,MTABD
  150. SEGDES MCHPOI,MPOVAL
  151. SEGDES MCHPN,MPOVN
  152.  
  153. RETURN
  154.  
  155. 90 CONTINUE
  156. WRITE(6,*)' Retour anormal de KSOF'
  157. RETURN
  158.  
  159. END
  160.  
  161.  
  162.  
  163.  
  164.  

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