Download ksof.eso

Back to the list

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

© Cast3M 2003 - All rights reserved.
Disclaimer