Télécharger kdxdy.eso

Retour à la liste

Numérotation des lignes :

kdxdy
  1. C KDXDY SOURCE GOUNAND 25/11/12 21:15:18 12399
  2. SUBROUTINE KDXDY
  3. IMPLICIT INTEGER(I-N)
  4. IMPLICIT REAL*8 (A-H,O-Z)
  5. C*************************************************************************
  6. C
  7. C OBJET : Cree un CHAMPOINT CENTRE contenant les informations
  8. C décrites ci dessous, sur les éléments du domaine.
  9. C
  10. C SYNTAXE : CHPC = KDXDY OBJDOM ;
  11. C
  12. C OBJDOM : TABLE de SOUSTYPE DOMAINE
  13. C
  14. C AVIS IMPORTANT ;
  15. C
  16. C Ces informations sont destinées aux opérateurs de discrétisation
  17. C et sont rangées dans un ordre particulier.
  18. C
  19. C Les dimensions du tableau sont : (DIME NBEL) DIME=11 en 2D
  20. C DIME=13 en 3D
  21. C et il contient :
  22. C
  23. C pour un SEG2 la longueur de l'element (XML) et la matrice P(2,2) en 2D
  24. C P(3,3) en 3D
  25. C pour un TRI3 XML,XMH,AJ1/XML,AJ2/XML, et la matrice P(2,2) en 2D
  26. C P(3,3) en 3D
  27. C pour un QUA4 IDEM
  28. C pour un CUB8 XML XMH XME et la matrice P
  29. C pour un PRI6 IDEM
  30. C
  31. C***********************************************************************
  32. C MATRICE P
  33. C LA MATRICE DE ROTATION DU REPERE GLOBALE VERS LE REPERE LOCAL
  34. C DEFINI PAR DEUX OU TROIS POINTS PRIS DANS XYZ SUIVANT QU'ON EST
  35. C EN 2D OU EN 3D
  36. C ON PREND P1 P2 ET PNP
  37. C
  38. C U TEL QUE T SOIT DIRIGE SUIVANT P1P2 V TOURNE VERS
  39. C . .V P1PNP ET U = T VECTORIEL V
  40. C . .
  41. C . . __ __
  42. C (P1). . . . .T (P2) | tx ty tz |
  43. C | |
  44. C ON A ALORS WL= P WG P = | vx vy vz |
  45. C | |
  46. C | ux uy uz |
  47. C |__ __|
  48. C*************************************************************************
  49.  
  50. -INC PPARAM
  51. -INC CCOPTIO
  52. -INC CCREEL
  53. *-
  54. -INC CCGEOME
  55. -INC SMTABLE
  56. -INC SMELEME
  57. POINTEUR MELEMC.MELEME
  58. -INC SMCOORD
  59. -INC SMCHPOI
  60. -INC SIZFFB
  61. PARAMETER (NLTS=10)
  62. CHARACTER*8 LISTS(NLTS)
  63. C***
  64. DIMENSION AAJ(3,3,9),XC(3),T(13),DELTAX(3)
  65. PARAMETER (NTB=1)
  66. CHARACTER*8 LTAB(NTB),TYPE,NOM0,TYPC
  67. DIMENSION KTAB(NTB)
  68. DATA LTAB/'DOMAINE '/
  69. DATA LISTS/'QUA4 ','CUB8 ','TRI3 ','PRI6 ',
  70. &'SEG2 ','TET4 ','PYR5 ','TRI7 ','QUA9 ',
  71. &'SEG3 '/
  72. C***
  73. NTO=NTB
  74. CALL LITABS(LTAB,KTAB,NTB,NTO,IRET)
  75. IF(IRET.EQ.0)RETURN
  76. MTABD=KTAB(1)
  77.  
  78. TYPE=' '
  79. CALL ACMO(MTABD,'CENTRE',TYPE,MELEMC)
  80.  
  81. NC=IDIM
  82.  
  83. TYPE='CENTRE'
  84. CALL CRCHPT(TYPE,MELEMC,NC,1,MCHPOI)
  85. CALL LICHTM(MCHPOI,MPOVAL,TYPC,IGEOM)
  86.  
  87. TYPE=' '
  88. CALL ACMO(MTABD,'MAILLAGE',TYPE,MELEME)
  89. IF(TYPE.NE.'MAILLAGE')GO TO 90
  90. SEGACT MELEME
  91.  
  92. IAXI=0
  93. IF(IFOMOD.EQ.0)IAXI=2
  94. NPGI=1
  95.  
  96. NBSOUS=LISOUS(/1)
  97. IF(NBSOUS.EQ.0)NBSOUS=1
  98.  
  99. K0=0
  100. DO 1 L=1,NBSOUS
  101. IPT1=MELEME
  102. IF(NBSOUS.NE.1)IPT1=LISOUS(L)
  103. SEGACT IPT1
  104. NP=IPT1.NUM(/1)
  105. NEL=IPT1.NUM(/2)
  106. NOM0=NOMS(IPT1.ITYPEL)//' '
  107. C write(6,*)' KDXDY : NOM0=',nom0,' NEL=',nel
  108. CALL OPTLI(IP,LISTS,NOM0,NLTS)
  109. IF(IP.EQ.0)THEN
  110. WRITE(6,*)' Sub KDXDY :'
  111. WRITE(6,*)' Il y a des types d''éléments pour lesquels on ne sait'
  112. &,'pas faire'
  113. GO TO 1
  114. ENDIF
  115. CALL KALPBG(NOM0,'FONFORM ',IZFFM)
  116. SEGACT IZFFM*MOD
  117. IZHR=KZHR(1)
  118. SEGACT IZHR*MOD
  119. NES=GR(/1)
  120. NPG=GR(/3)
  121.  
  122. DO 10 K=1,NEL
  123. KK=K0+K
  124. NPGR=0
  125. IF(IAXI.NE.0)NPGR=NPG
  126. C
  127. C REMPLISSAGE DE XYZ
  128. C ------------------
  129. C
  130. DO 12 I=1,NP
  131. J=IPT1.NUM(I,K)
  132. DO 121 N=1,IDIM
  133. XYZ(N,I)=XCOOR((J-1)*(IDIM+1)+N)
  134. 121 CONTINUE
  135. 12 CONTINUE
  136.  
  137. CALL CALJAJ(GR,XYZ,NES,IDIM,NP,NPGI,AAJ)
  138. C
  139. CALL CALJBC(FN,GR,PG,XYZ,HR,PGSQ,RPG,NES,IDIM,NP,NPG,IAXI,AIRE)
  140.  
  141. IF(AIRE.LE.0.D0)AIRE=ABS(AIRE)
  142.  
  143.  
  144. C CALCUL DES LONGUEURS DES COTES DE L'ELEMENT
  145. C UNIQUEMENT POUR LES SEG2 QUA4 ET CUB8
  146.  
  147. XML=0.
  148. DO 231 N=1,IDIM
  149. XML=XML+(XYZ(N,1)-XYZ(N,2))*(XYZ(N,1)-XYZ(N,2))
  150. 231 CONTINUE
  151. XML=SQRT(XML)
  152.  
  153. DO 234 N=1,IDIM
  154. DELTAX(N)=ABS(XYZ(N,NP)-XYZ(N,1))
  155. DO 233 I=2,NP
  156. DELTAX(N)=DELTAX(N)+ABS(XYZ(N,I)-XYZ(N,I-1))
  157. 233 CONTINUE
  158. VPOCHA(KK,N)=(DELTAX(N)/FLOAT(NP))+XPETIT
  159. IF(NOM0.EQ.'QUA4 ')THEN
  160. VPOCHA(KK,N)=VPOCHA(KK,N)*FLOAT(IDIM)
  161. ENDIF
  162. 234 CONTINUE
  163.  
  164. C
  165. C
  166. IF(XML.EQ.0.)
  167. &WRITE(6,*)' ELEMENT DEGENERE ( AYANT UN COTE DE LONGUEUR NULLE) '
  168. C
  169. C
  170. 10 CONTINUE
  171. K0=K0+NEL
  172. SEGDES IPT1
  173. 1 CONTINUE
  174. SEGDES MELEME,MPOVAL,MCHPOI
  175. C
  176. CALL ECROBJ('CHPOINT ',MCHPOI)
  177.  
  178. RETURN
  179.  
  180. 90 CONTINUE
  181. WRITE(6,*)' Interruption anormale de KDXDY'
  182. RETURN
  183. 1001 FORMAT(20(1X,I5))
  184. 1002 FORMAT(10(1X,1PE11.4))
  185. END
  186.  
  187.  

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