chaga1
C CHAGA1 SOURCE SP204843 24/03/29 21:15:02 11878 C======================================================================= C= C H A G A 1 = C= ----------- = C= = C= Fonction : = C= ---------- = C= = C= Creation du MCHAML de SOURCE de chaleur GAUSSIENNE decrit par les = C= caracteristiques du modele passees en entree. = C= = C= = C= Entrees : = C= --------- = C= = C= IPMCHA : pointeur sur segment MCHAML de la sous-zone traitee = C= = C= IPMAIL : pointeur sur segment MELEME du maillage ou creer la = C= source de chaleur = C= = C= IPINTE : pointeur sur segment MINTE de l'element finis = C= = C= IK : indicateur du "type" de distribution gaussienne : = C= IK = 1 : source gaussienne SPHERIQUE = C= IK = 2 : source gaussienne ELLIPTIQUE = C= IK = 3 : source gaussienne ELARGIE = C= = C= = C= Sortie : = C= -------- = C= = C= IPQGAU : pointeur sur segment MELVAL des valeurs de la source de = C= chaleur GAUSSIENNE = C= = C= XQ0 : valeur de la quantite de chaleur imposee, utilisee en = C= sortie dans chamas pour "renormaliser" le champ a QTOT = C= = C======================================================================= IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC CCREEL -INC SMCOORD -INC SMELEME -INC SMCHAML -INC SMINTE REAL*8 XCO1(3),XCD1(3),XCX1(3),XCL1(3),XCU1(3) CHARACTER*8 TYPC1 CHARACTER*4 MOCAR(7) CHARACTER*(LOCOMP) NOMC1 DATA MOCAR /'QTOT','ORIG','RGAU','DIRE','ZGAU','DIRL','LGAU'/ IPQGAU = 0 C==== Recuperation des caracteristiques de la source de chaleur C C Initialisation des valeurs des parametres de la source C XQ0 : valeur de QTOT C NPO1, NPD1 : numeros points origine & direction C XR0, XZ0 : valeurs de RGAU et ZGAU XQ0 = 0.D0 NPO1 = 0 NPD1 = 0 XR0 = 0.D0 XZ0 = 0.D0 NPL1 = 0 XL0 = 0.D0 C C NCAR1 : nombre de caracteristiques a lire NCAR1 = 3 IF (IK.EQ.2) NCAR1 = 5 IF (IK.EQ.3) NCAR1 = 7 C MCHAM1=IPMCHA C SEGACT,MCHAM1 NCO1 = MCHAM1.IELVAL(/1) DO 100 I=1,NCAR1 NOMC1 = MOCAR(I) C write(6,*) 'NONC1 =',NOMC1 C write(6,*) 'MCHAM1.NOMCHE =',(MCHAM1.NOMCHE(ii),ii=1,NCO1) IF (IPLAC.EQ.0) THEN GOTO 997 ELSE TYPC1 = MCHAM1.TYPCHE(IPLAC)(1:8) MELVA1 = MCHAM1.IELVAL(IPLAC) IF (MELVA1.VELCHE(/1).GT.1 & .OR.MELVA1.VELCHE(/2).GT.1) GOTO 999 C C Lecture QTOT IF (I.EQ.1) THEN IF (TYPC1.NE.'REAL*8 ') GOTO 998 SEGACT,MELVA1 XQ0 = MELVA1.VELCHE(1,1) C SEGDES,MELVA1 C IF (XQ0.LT.XZPREC) THEN C MOTERR(1:40)=NOMC1//' ' C CALL ERREUR(1048) C RETURN C ENDIF C C Lecture ORIG ELSEIF (I.EQ.2) THEN IF (TYPC1.NE.'POINTEUR') GOTO 998 MELVA1 = MCHAM1.IELVAL(IPLAC) SEGACT,MELVA1 NPO1 = MELVA1.IELCHE(1,1) C SEGDES,MELVA1 C C Lecture RGAU ELSEIF (I.EQ.3) THEN IF (TYPC1.NE.'REAL*8 ') GOTO 998 MELVA1 = MCHAM1.IELVAL(IPLAC) SEGACT,MELVA1 XR0 = MELVA1.VELCHE(1,1) C SEGDES,MELVA1 IF (ABS(XR0).LT.XZPREC) THEN MOTERR(1:40)=NOMC1//' ' RETURN ENDIF C C Lecture DIRE ELSEIF (I.EQ.4) THEN IF (TYPC1.NE.'POINTEUR') GOTO 998 MELVA1 = MCHAM1.IELVAL(IPLAC) SEGACT,MELVA1 NPD1 = MELVA1.IELCHE(1,1) C SEGDES,MELVA1 C C Lecture ZGAU ELSEIF (I.EQ.5) THEN IF (TYPC1.NE.'REAL*8 ') GOTO 998 MELVA1 = MCHAM1.IELVAL(IPLAC) SEGACT,MELVA1 XZ0 = MELVA1.VELCHE(1,1) C SEGDES,MELVA1 IF (ABS(XZ0).LT.XZPREC) THEN MOTERR(1:40)=NOMC1//' ' RETURN ENDIF C C Lecture DIRL ELSEIF (I.EQ.6) THEN IF (TYPC1.NE.'POINTEUR') GOTO 998 MELVA1 = MCHAM1.IELVAL(IPLAC) SEGACT,MELVA1 NPL1 = MELVA1.IELCHE(1,1) C SEGDES,MELVA1 C C Lecture LGAU ELSEIF (I.EQ.7) THEN IF (TYPC1.NE.'REAL*8 ') GOTO 998 MELVA1 = MCHAM1.IELVAL(IPLAC) SEGACT,MELVA1 XL0 = MELVA1.VELCHE(1,1) C SEGDES,MELVA1 C ENDIF ENDIF 100 CONTINUE C SEGDES,MCHAM1 C C Remplissage du vecteur de coordonnes de ORIG IDIMP1 = IDIM+1 IF (NPO1.EQ.0.OR.NPO1.GT.nbpts) THEN NOMC1='ORIG' GOTO 998 ELSE DO 120 ID1=1,IDIM XCO1(ID1)=XCOOR((NPO1-1)*IDIMP1+ID1) 120 CONTINUE ENDIF C C Remplissage des vecteurs de coordonnes de DIRE et DIRL * On orthogonalise DIRL a DIRE C XN1 : norme de DIRE au carre C XL1 : norme de DIRL au carre XN1 = 1.D0 XL1 = 1.D0 IF (IK.EQ.1) THEN XZ0 = XR0 XCD1(1)=1.D0 IF (IDIM.GT.1) THEN DO 130 ID1=2,IDIM XCD1(ID1)=0.D0 130 CONTINUE ENDIF ELSE IF (IK.EQ.2) THEN XN1 = 0.D0 DO 140 ID1=1,IDIM XCD1(ID1)=XCOOR((NPD1-1)*IDIMP1+ID1) XN1 = XCD1(ID1) ** 2 + XN1 140 CONTINUE IF (XN1.LT.XZPREC) THEN RETURN ENDIF ELSE IF (IK.EQ.3) THEN XN1 = 0.D0 XX1 = 0.D0 DO 150 ID1=1,IDIM XCD1(ID1)=XCOOR((NPD1-1)*IDIMP1+ID1) XN1 = XCD1(ID1) ** 2 + XN1 XCL1(ID1)=XCOOR((NPL1-1)*IDIMP1+ID1) XX1 = XX1 + XCD1(ID1) * XCL1(ID1) 150 CONTINUE IF (XN1.LT.XZPREC) THEN RETURN ENDIF XL1 = 0.D0 DO 151 IL1= 1,IDIM XCL1(IL1) = XCL1(IL1) - XX1 * XCD1(IL1) / XN1 XL1 = XCL1(IL1) ** 2 + XL1 151 CONTINUE IF (XL1.LT.(XZPREC*XN1)) THEN IF (ABS(XX1).LT.XZPREC) THEN ELSE ENDIF RETURN ENDIF XCU1(3)=XCL1(1)*XCD1(2)-XCL1(2)*XCD1(1)/SQRT(XN1)/SQRT(XL1) XCU1(1)=XCL1(2)*XCD1(3)-XCL1(3)*XCD1(2)/SQRT(XN1)/SQRT(XL1) XCU1(2)=XCL1(3)*XCD1(1)-XCL1(1)*XCD1(3)/SQRT(XN1)/SQRT(XL1) XU1 = XCU1(1)**2 + XCU1(2)**2 + XCU1(3)**2 ELSE WRITE(IOIMP,*) ' *** Dans CHAGA1, cas (IK) non prevu' RETURN ENDIF C write(6,*) 'IK =',IK C write(6,*) 'XQ0 =',XQ0 C write(6,*) 'XR0 =',XR0 C write(6,*) 'XZ0 =',XZ0 c write(6,*) 'XL0 =',XL0 C write(6,*) 'NPO1 =',NPO1 C write(6,*) 'NPD1 =',NPD1 C write(6,*) 'XCO1 =',(XCO1(i),i=1,IDIM) C write(6,*) 'XN1,XCD1 =',XN1,(XCD1(i),i=1,IDIM) C write(6,*) 'XL1,XCL1 =',XL1,(XCL1(i),i=1,IDIM) C write(6,*) 'XU1,XCU1 =',XU1,(XCU1(i),i=1,IDIM) C==== Construction du MELVAL de la distribution Gaussienne de chaleur C Activation du maillage IPT1 = IPMAIL SEGACT,IPT1 NBPT1 = IPT1.NUM(/1) NBEL1 = IPT1.NUM(/2) C Petite verif. sous-zone elementaire NBS1 = IPT1.LISOUS(/1) IF (NBS1.NE.0) THEN WRITE(6,*) 'Dans CHAGA1 : le maillage a plusieurs sous-zones ?' RETURN ENDIF C C Activation du segment MINTE C write(6,*) 'IPINTE=',IPINTE MINTE1 = IPINTE SEGACT,MINTE1 C Creation du MELVAL N1PTEL = MINTE1.POIGAU(/1) N1EL = NBEL1 N2PTEL = 0 N2EL = 0 SEGINI,MELVA2 C Facteur de normalisation de la puissance : IF (IDIM.EQ.2.AND.IFOUR.NE.0) THEN XQ1 = 4.D0 * XQ0 / (XR0 * XZ0 * XPI) ELSEIF (IDIM.EQ.2.AND.IFOUR.EQ.0) THEN C write (6,*) ' *** Cas axis' RC2 = SQRT (2.D0) RCPI = SQRT (XPI) XIK1 = 0.25D0 * XR0 * XR0 XIK1 = XIK1 * EXP(-2.D0 * XCO1(1) * XCO1(1) / XR0 / XR0) XIK2 = 0.5D0 * XR0 * XCO1(1) * RCPI / RC2 XIK3 = XR0 * XCO1(1) * RCPI / (RC2 * RC2 * RC2) XIK3 = XIK3 * ERF(XCO1(1) * RC2 / XR0) XQ1 = XPI * XZ0 * RCPI / RC2 XQ1 = XQ1 * (XIK1 + XIK2 + XIK3) XQ1 = XQ0 / XQ1 ELSEIF (IDIM.EQ.3) THEN IF (IK.EQ.3) THEN XR1 = (SQRT ((XPI**3) / 32.D0)) * XR0 * XR0 * XZ0 XR1 = XR1 + 0.5D0*XPI*XR0*XZ0*ABS(XL0) XQ1 = XQ0 / XR1 ELSE XR1 = XR0 * XR0 * XZ0 XQ1 = SQRT (32.D0 / (XPI ** 3)) XQ1 = XQ1 * XQ0 / XR1 ENDIF ELSE GOTO 996 ENDIF c write(6,*) 'XQ1=',XQ1 C Boucle sur les elements du maillage DO 200 IEL1=1,NBEL1 C C Boucle sur les pts de Gauss C et calcul de la fonction Gaussienne C RR1 : distance a l'origine ORIG au carre C XZ1 : hauteur selon la direction DIRE au carre C XR1 : rayon dans le plan orthog. a DIRE au carre DO 201 IG1=1,N1PTEL RR1 = 0.D0 XR1 = 0.D0 XZ1 = 0.D0 VX1 = 0.D0 UX1 = 0.D0 DO 203 ID1=1,IDIM C XPG1 : coordonnees ID1 du Pt de Gauss XPG1 = 0.D0 DO 202 JPT1=1,NBPT1 NPTJM1 = IPT1.NUM(JPT1,IEL1)-1 XPTJ1 = XCOOR(NPTJM1*IDIMP1+ID1) VNJ1 = MINTE1.SHPTOT(1,JPT1,IG1) XPG1 = XPG1 + XPTJ1*VNJ1 202 CONTINUE XCX1(ID1) = XPG1 - XCO1(ID1) XZ1 = XCX1(ID1) * XCD1(ID1) + XZ1 IF (IK.EQ.3) THEN VX1 = XCX1(ID1) * XCL1(ID1) + VX1 UX1 = XCX1(ID1) * XCU1(ID1) + UX1 ELSE RR1 = XCX1(ID1) ** 2 + RR1 ENDIF 203 CONTINUE IF (IK.EQ.1.OR.XZ1.LE.0.) THEN XZ1 = XZ1*XZ1/ XN1 IF (IK.EQ.3) THEN UX1 = UX1*UX1/XU1 XS1 = UX1/XR0/XR0 + XZ1/XZ0/XZ0 VX1 = SQRT(VX1*VX1/XL1) - XL0 IF (VX1.GT.0.D0) THEN XS1 = VX1*VX1/XR0/XR0 + XS1 ENDIF ELSE XR1 = RR1 - XZ1 XS1 = XR1/XR0/XR0 XS1 = XZ1/XZ0/XZ0 + XS1 ENDIF XS1 = EXP(-2.D0 * XS1) MELVA2.VELCHE(IG1,IEL1) = XS1 * XQ1 ELSE MELVA2.VELCHE(IG1,IEL1) = 0.D0 ENDIF 201 CONTINUE 200 CONTINUE C SEGDES,IPT1,MINTE1,MELVA2 C C==== Affectation du resultat et sortie IPQGAU = MELVA2 C RETURN C==== Gestion erreurs et fin C Option indisponible 996 CONTINUE INTERR(1) = IDIM RETURN C Il manque la donnee d'une composante 997 CONTINUE RETURN C Le type de la composante NOMC1 n'est pas celui attendu 998 CONTINUE MOTERR(1:8)=NOMC1 RETURN C La composante est attendue constante par sous-zones 999 CONTINUE MOTERR(1:4)=NOMC1 MOTERR(5:20)='CARACTERISTIQUES' RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales