ycvi
C YCVI SOURCE CHAT 05/01/13 04:16:42 5004 SUBROUTINE YCVI C C C VERSION VECTORISEE C C Les {l{ments sont group{s en paquets de LRV {l{ments, LRV {tant C la longueur des registres vectoriels de la machine cible, i.e C 64 sur Cray, 128 ou 256 sur IBM 3090VF. On prom}ne une fenetre C de longueur LRV sur la boucle g{n{rale de longueur NEL. C C & (HR,RPG,DRR,LE,NEL,K0,NPTD,IES,NP,IAXI,IKOMP,IKAS, & COEFF,IK1,RGE,IKG,NELG,TN,IKT,TREF,IKREF,IPADS, & UN,IPADU,NPTU,GN,F,IPADI,VF,IPADF,NPTF, & VOLU,COTE,NELZ,IDCEN,IPG, & DTM1,DT,DTT1,DTT2,NUEL,DIAEL,FN) IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) C*********************************************************************** C C CE SP DISCRETISE LES EQUATIONS DE NAVIER STOKES C EN 2D SUR LES ELEMENTS QUA4 ET TRI3 PLAN OU AXI C EN 3D SUR LES ELEMENTS CUB8 ET PRI6 C LES OPERATEURS SONT "SOUS-INTEGRES" C C SYNTAXE : C C NS(NU,UN,RGE,DE) INCO GN : C C COEFFICIENTS : C -------------- C C UN(NPTD,IES) CHAMPS DE VITESSE TRANSPORTANT C COEFF(SCAL DOMA) VISCOSITE CINEMATIQE MOLECULAIRE( NU ) C (SCAL ELEM) C RGE(NELG,IES) TERME SOURCE C C C INCONNUES : C ----------- C C UN(NPTD,IES) CHAMPS DE VITESSE TRANSPORTANT C GN(NPTD,IES) CHAMPS DE VITESSE TRANSPORTE C VN(NPTD,IES) CHAMPS DE VITESSE DU FLUIDE C C C C C TABLEAUX DE TRAVAIL : C --------------------- N N-1 C (D + D1) U - D U N-1 T N C ------------------- = F - A U - C P C DT C C N-1 C F(NPTD,IES) CONTIENT A U - F (VITESSE) C C C C*********************************************************************** -INC CCVQUA4 -INC CCREEL *- -INC PPARAM -INC CCOPTIO -INC SMCOORD C C Longueur des registres vectoriels de la machine cible C On prend 64 pour ne pas augmenter la taille des tableaux C n{cessaires @ la vectorisation. C PARAMETER(LRV=64) DIMENSION UN(NPTU,IES),GN(NPTD,IES),VF(NPTF,IES) DIMENSION TN(*),TREF(*) DIMENSION COEFF(*),RGE(NELG,IES) DIMENSION COTE(NELZ,IES),VOLU(NELZ),KLIP(100) DIMENSION IPADI(*),LE(NP,1),IPADU(*),IPADF(*),IPADS(*) DIMENSION HR(NEL,NP,IES),RPG(1),DRR(NP,NEL) DIMENSION QGGT(8,8),Q1(8,8),Q2(8,8),Q3(8,8) DIMENSION COEF(LRV),AIRE(LRV) DIMENSION WX(LRV,9),WY(LRV,9),WZ(LRV,9) DIMENSION AL(LRV),AH(LRV),AP(LRV) C UIX,... vitesse transportante DIMENSION UIX(LRV,9),UIY(LRV,9),UIZ(LRV,9) C GIX,... vitesse massique ou transportée ou inconnue du/dt DIMENSION GIX(LRV,9),GIY(LRV,9),GIZ(LRV,9) C VIX,... vitesse du fluide DIMENSION VIX(LRV,9),VIY(LRV,9),VIZ(LRV,9) DIMENSION UMI(LRV,3),VMI(LRV,3) DIMENSION COEFT(LRV),RGX(LRV),RGY(LRV),RGZ(LRV) DIMENSION TO1(LRV),TO2X(LRV),TO2Y(LRV) DIMENSION SAF1(LRV,9),SAF2(LRV,9),SAF3(LRV,9) DIMENSION CHGLD(LRV),CHGLPX(LRV),CHGLPY(LRV),CHGLPZ(LRV) DIMENSION F(NPTD,*),FN(NP,*) SAVE IPAS,QGGT,Q1,Q2,Q3 DATA IPAS/0/ C C INITIALISATIONS DIVERSES C C WRITE(IOIMP,*)' DEBUT YCVI ',' IKAS=',ikas,' IKOMP=',ikomp, C $ 'IDCEN=',idcen C WRITE(IOIMP,*)' NPTD=',nptd,'IPAS=',IPAS C ******** C * 2D * C ******** IF(IES.EQ.3)GO TO 10 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C DIFFERENCES TRIANGLE / QUADRANGLE IF(NP.EQ.4)THEN QUA4=1.D0 ELSE QUA4=0.D0 ENDIF C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C Calcul du nombre de paquets de LRV {l{ments C NNN=MOD(NEL,LRV) IF(NNN.EQ.0) NPACK=NEL/LRV IF(NNN.NE.0) NPACK=1+(NEL-NNN)/LRV KPACKD=1 KPACKF=NPACK C C ******* BOUCLE SUR LES PAQUETS DE LRV ELEMENTS ********** C C WRITE(IOIMP,*)' DEBUT YCVI 7001' DO 7001 KPACK=KPACKD,KPACKF C C ======= A L'INTERIEUR DE CHAQUE PAQUET DE LRV ELEMENTS ======= C C 1.D0 Calcul des limites du paquet courant. KDEB=1+(KPACK-1)*LRV KFIN=MIN(NEL,KDEB+LRV-1) C C Ben voil@, on peut y aller ... i.e. traiter le paquet courant. C DO 7002 K=KDEB,KFIN NK=K+K0 K1=1+(1-IK1)*(NK-1) 7002 CONTINUE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC DO 7006 I=1,NP DO 7016 K=KDEB,KFIN NU=IPADU(LE(I,K)) NG=IPADI(LE(I,K)) NF=IPADF(LE(I,K)) 7016 CONTINUE 7006 CONTINUE & GN(1,1),IPADI,UN,COEF,NPTD,NEL,NP,DRR,HR,FN, & AIRE,AL,AH,AP,IDCEN,IPADU,LE,QUA4,IKOMP, & DTM1,DT,DTT1,DTT2,DIAEL,NUEL) & GN(1,2),IPADI,UN,COEF,NPTD,NEL,NP,DRR,HR,FN, & AIRE,AL,AH,AP,IDCEN,IPADU,LE,QUA4,IKOMP, & DTM1,DT,DTT1,DTT2,DIAEL,NUEL) C C Initialisation des variables d'accumulation SAF1,SAF2,SBF C IF(IAXI.NE.0)THEN DO 70050 N=1,IDIM DO 70051 K=KDEB,KFIN 70051 CONTINUE 70050 CONTINUE DO 70052 N=1,IDIM DO 70053 I=1,NP DO 70054 K=KDEB,KFIN NF=IPADF(LE(I,K)) 70054 CONTINUE 70053 CONTINUE 70052 CONTINUE DO 70055 K=KDEB,KFIN 70055 CONTINUE ENDIF IF(IKOMP.EQ.0)THEN IF(IKAS.EQ.1)THEN DO 70061 I=1,NP DO 71161 K=KDEB,KFIN 71161 CONTINUE 70061 CONTINUE ELSEIF(IKAS.EQ.2)THEN DO 70021 K=KDEB,KFIN NK=K+K0 NKG=1+(1-IKG)*(NK-1) 70021 CONTINUE IF(IPG.EQ.0)THEN DO 70062 I=1,NP DO 70162 K=KDEB,KFIN 70162 CONTINUE 70062 CONTINUE ELSE DO 71062 I=1,NP DO 71162 K=KDEB,KFIN 71162 CONTINUE 71062 CONTINUE ENDIF ELSEIF(IKAS.EQ.4)THEN DO 70022 K=KDEB,KFIN NK=K+K0 NKG=1+(1-IKG)*(NK-1) 70022 CONTINUE IF(IPG.EQ.0)THEN DO 70063 I=1,NP DO 70163 K=KDEB,KFIN NF=1+(1-IKT)*(IPADS(LE(I,K))-1) NFR=1+(1-IKREF)*(IPADS(LE(I,K))-1) C? WRITE(IOIMP,*)' NF=',NF,' NFR=',nfr $ ) $ ) 70163 CONTINUE 70063 CONTINUE ELSE DO 71063 I=1,NP DO 71163 K=KDEB,KFIN NF=1+(1-IKT)*(IPADS(LE(I,K))-1) NFR=1+(1-IKREF)*(IPADS(LE(I,K))-1) $ ) $ ) 71163 CONTINUE 71063 CONTINUE ENDIF ENDIF ELSEIF(IKOMP.EQ.1)THEN IF(IKAS.EQ.2)THEN DO 70064 I=1,NP DO 70164 K=KDEB,KFIN 70164 CONTINUE 70064 CONTINUE ELSEIF(IKAS.EQ.3)THEN DO 70024 K=KDEB,KFIN NK=K+K0 NKG=1+(1-IKG)*(NK-1) 70024 CONTINUE IF(IPG.EQ.0)THEN DO 70065 I=1,NP DO 70165 K=KDEB,KFIN 70165 CONTINUE 70065 CONTINUE ELSE DO 71065 I=1,NP DO 71165 K=KDEB,KFIN 71165 CONTINUE 71065 CONTINUE ENDIF ENDIF ENDIF C Le coeur du calcul ... IF(IKOMP.EQ.0)THEN DO 70140 I=1,NP DO 70141 J= 1,NP DO 70142 K=KDEB,KFIN 70142 CONTINUE 70141 CONTINUE 70140 CONTINUE ELSEIF(IKOMP.EQ.1)THEN DO 70150 I=1,NP DO 70151 J= 1,NP DO 70152 K=KDEB,KFIN $ ,J) $ ,J) 70152 CONTINUE 70151 CONTINUE 70150 CONTINUE ENDIF IF(IAXI.NE.0) THEN DO 70160 I=1,NP DO 70161 K=KDEB,KFIN 70161 CONTINUE 70160 CONTINUE IF(IKOMP.EQ.1)THEN DO 7118 I=1,NP DO 71181 K=KDEB,KFIN 71181 CONTINUE 7118 CONTINUE ENDIF ENDIF C C Fin de l'accumulation dans SAF1,SAF2. C On ajoute ces incr{ments @ F. C DO 7017 I=1,NP DO 70171 K=KDEB,KFIN NF=IPADI(LE(I,K)) 70171 CONTINUE 7017 CONTINUE 1960 FORMAT(/,' ***** SUB XCVTIT : IPAT=',I5,' K=',I5,' *****') 1961 FORMAT(2X,I5,' * ',4(1X,I5)) 1962 FORMAT(2X,8(1X,1PE11.4)) 1964 FORMAT(4(1X,1PE11.4)) 7001 CONTINUE C WRITE(IOIMP,*)' ********** FIN YCVI 2D *****************' C CALL ARRET(0) IPAS=1 RETURN C ******** C * 3D * C ******** 10 CONTINUE C::::::BENET:::SUPPRESION CORRECTION HOURGLASS POUR LES PRISME::29:01:91 CUB8=0.D0 IF(NP.EQ.8)CUB8=1.D0 C C Calcul du nombre de paquets de LRV {l{ments C NNN=MOD(NEL,LRV) IF(NNN.EQ.0) NPACK=NEL/LRV IF(NNN.NE.0) NPACK=1+(NEL-NNN)/LRV KPACKD=1 KPACKF=NPACK C C ******* BOUCLE SUR LES PAQUETS DE LRV ELEMENTS ********** C DO 8001 KPACK=KPACKD,KPACKF C C ======= A L'INTERIEUR DE CHAQUE PAQUET DE LRV ELEMENTS ======= C C 1.D0 Calcul des limites du paquet courant. KDEB=1+(KPACK-1)*LRV KFIN=MIN(NEL,KDEB+LRV-1) C C Ben voil@, on peut y aller ... i.e. traiter le paquet courant. C DO 8002 K=KDEB,KFIN NK=K+K0 K1=1+(1-IK1)*(NK-1) 8002 CONTINUE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C Initialisation des UMI avant accumulation DO 8006 I=1,NP DO 81161 K=KDEB,KFIN NU=IPADU(LE(I,K)) NF=IPADF(LE(I,K)) NG=IPADI(LE(I,K)) 81161 CONTINUE 8006 CONTINUE C WRITE(IOIMP,*)'****************************' C WRITE(IOIMP,*)' DT,DTT1,DTT2=',DT,DTT1,DTT2 & GN(1,1),IPADI,UN,COEF,NPTD,NEL,NP,DRR,HR,FN, & AIRE,AL,AH,AP,IDCEN,IPADU,LE,CUB8,IKOMP, & DTM1,DT,DTT1,DTT2,DIAEL,NUEL) C WRITE(IOIMP,1002)umi C WRITE(IOIMP,*)' DT,DTT1,DTT2=',DT,DTT1,DTT2 & GN(1,2),IPADI,UN,COEF,NPTD,NEL,NP,DRR,HR,FN, & AIRE,AL,AH,AP,IDCEN,IPADU,LE,CUB8,IKOMP, & DTM1,DT,DTT1,DTT2,DIAEL,NUEL) C WRITE(IOIMP,*)' DT,DTT1,DTT2=',DT,DTT1,DTT2 & GN(1,3),IPADI,UN,COEF,NPTD,NEL,NP,DRR,HR,FN, & AIRE,AL,AH,AP,IDCEN,IPADU,LE,CUB8,IKOMP, & DTM1,DT,DTT1,DTT2,DIAEL,NUEL) C WRITE(IOIMP,*)' DT,DTT1,DTT2=',DT,DTT1,DTT2 C C Initialisation des variables d'accumulation SAF1,SAF2,SBF C IF(IKOMP.EQ.0)THEN IF(IKAS.EQ.1)THEN DO 80061 I=1,NP DO 80161 K=KDEB,KFIN 80161 CONTINUE 80061 CONTINUE ELSEIF(IKAS.EQ.2)THEN DO 80021 K=KDEB,KFIN NK=K+K0 NKG=1+(1-IKG)*(NK-1) 80021 CONTINUE IF(IPG.EQ.0)THEN DO 80062 I=1,NP DO 80162 K=KDEB,KFIN 80162 CONTINUE 80062 CONTINUE ELSE DO 81062 I=1,NP DO 81162 K=KDEB,KFIN 81162 CONTINUE 81062 CONTINUE ENDIF ELSEIF(IKAS.EQ.4)THEN DO 80022 K=KDEB,KFIN NK=K+K0 NKG=1+(1-IKG)*(NK-1) 80022 CONTINUE IF(IPG.EQ.0)THEN DO 80063 I=1,NP DO 80163 K=KDEB,KFIN NF=1+(1-IKT)*(IPADS(LE(I,K))-1) NFR=1+(1-IKREF)*(IPADS(LE(I,K))-1) $ ) $ ) $ ) 80163 CONTINUE 80063 CONTINUE ELSE DO 81063 I=1,NP DO 81163 K=KDEB,KFIN NF=1+(1-IKT)*(IPADS(LE(I,K))-1) NFR=1+(1-IKREF)*(IPADS(LE(I,K))-1) $ ) $ ) $ ) 81163 CONTINUE 81063 CONTINUE ENDIF ENDIF ELSEIF(IKOMP.EQ.1)THEN IF(IKAS.EQ.2)THEN DO 80064 I=1,NP DO 80164 K=KDEB,KFIN 80164 CONTINUE 80064 CONTINUE ELSEIF(IKAS.EQ.3)THEN DO 80024 K=KDEB,KFIN NK=K+K0 NKG=1+(1-IKG)*(NK-1) 80024 CONTINUE IF(IPG.EQ.0)THEN DO 80065 I=1,NP DO 80165 K=KDEB,KFIN 80165 CONTINUE 80065 CONTINUE ELSE DO 81065 I=1,NP DO 81165 K=KDEB,KFIN 81165 CONTINUE 81065 CONTINUE ENDIF ENDIF ENDIF C Le coeur du calcul ... IF(IKOMP.EQ.0)THEN DO 80140 I=1,NP DO 80141 J= 1,NP DO 80142 K=KDEB,KFIN 80142 CONTINUE 80141 CONTINUE 80140 CONTINUE ELSEIF(IKOMP.EQ.1)THEN DO 80150 I=1,NP DO 80151 J= 1,NP DO 80152 K=KDEB,KFIN GEO1=0.D0 $ ,J) $ ,J) $ ,J) $ ,J) $ ,J) $ ,J) 80152 CONTINUE 80151 CONTINUE 80150 CONTINUE ENDIF C C Fin de l'accumulation dans SAF1,SAF2. C On ajoute ces incr{ments @ F. C DO 8017 I=1,NP DO 80171 K=KDEB,KFIN NF=IPADI(LE(I,K)) 80171 CONTINUE 8017 CONTINUE 8001 CONTINUE C WRITE(IOIMP,*)' ********** FIN YCVI 3D *****************' IPAS=1 RETURN 1002 FORMAT(10(1X,1PE11.4)) 1001 FORMAT(20(1X,I5)) END
© Cast3M 2003 - Tous droits réservés.
Mentions légales