trjpar
C TRJPAR SOURCE CB215821 24/04/12 21:17:23 11897 * IICAL,IZPOR,IZDIFF,IZDISP,MCHELM,MMODEL) C C C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C calcul de trajectoires appelé par TRAJEC decode la table de C lacher et pilote le calcul C C sous programmes appelés: C TRJCN2 controle des données C TRJINI premiere localisation et initialisation des C segments de travail C TRJAVA fait avancer une particule C TRJRAL en fin de calcul passe des coordonnées de C références aux coordonnées réelles C Les tables résultats sont chargées par ce sous programme C C ARGUMENTS C E MELEME pointeur du maillage de calcul ( DOMAINE.MAILLAGE) C E IZVIT pointeur du segment décrivant les vitesses . C Ce segment est créé dans TRJVIT et TRJFLU C E IZCENT pointeur de DOMAINE.CENTRE C E IELTFA pointeur de DOMAINE.ELTFA C E IFACEL pointeur de DOMAINE.FACEL C E MTAB2 pointeur de la table des lachers C C S MCHELM CHAMELEM resultat C S MMODEL modele sur lequel s'appuie MCHELM C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) PARAMETER(MPNO9=9) C MPNO9 NOMBRE MAX DE NOEUDS POUR LES ELEMENTS CONSIDERES C -INC SMCOORD -INC SMELEME -INC SMTABLE -INC SMMODEL -INC SMCHAML -INC SMCHPOI -INC PPARAM -INC CCOPTIO -INC CCREEL -INC SMLREEL POINTEUR MLREE4.MLREEL,MLREE5.MLREEL,MLREE6.MLREEL *** pteurs sur les MAILLAGES POINTEUR IZCENT.MELEME,IELTFA.MELEME,IZLAC.MELEME,IFACEL.MELEME *** variable de travail pour sp 'ACCTAB' % table de lacher 'MTAB2' CHARACTER*20 MTYPI,CHARI,MTYPR,CHARR LOGICAL LOGRE *** 'IZPART' segment contenant position ref des particules au départ du lacher : *** 'NPART' nbre de particules lachées *** 'NLEPA' = n° global de l'element contenant ieme particule lachée, *** 'NUMPA' = n° ieme particule lachée, 'COORPA' = coords ieme particule lachée SEGMENT IZPART INTEGER NLEPA(NPART),NUMPA(NPART) REAL*8 COORPA(NDIM,NPART) ENDSEGMENT POINTEUR IZN.IZPART,IZL.IZPART *** 'IZCOU' segment content pas de tps des mailles traversées (selon critere convectif) SEGMENT IZCOU REAL*8 DTCO(NEL),COU ENDSEGMENT *** 'IZSH' segment de travail (pour passage réel -> réf) *** 'SHP' fonctions de forme et leurs dérivées *** 'SHY' fonctions de base et leurs dérivées *** 'XYZL(i, j)' = ieme coord reelle du jeme noeud d'1 elem donne SEGMENT IZSH REAL*8 SHP(6,MNO9),SHY(12,MNO9),XYZL(3,MNO9) ENDSEGMENT *** 'IZVIT' segment décrivant les vitesses ou flux *** 'TEMTRA' = tableau des divers tps de palier (cas transitoire) *** 'NVIPT' = nbre de pas de tps (chgt) (cas transitoire) *** 'NBS' = nbre de sous-maillages *** 'IPUN' = pteurs sur les 'IZUN' *** 'IDUN(I)' = nbre d'éléments avant le sous-maillage I *** 'IPVPT(J)' = pteur sur les 'IZVPT' pour le pas de tps n° J (cas transitoire) SEGMENT IZVIT REAL*8 TEMTRA(NVIPT) INTEGER IPUN(NBS),IDUN(NBS),IPVPT(NVIPT),IFORML ENDSEGMENT *** 'IPARPO' segment permettant stockage resultats pdt 'avancee particule *** 'NPOS' = nbre d'elements traversés, 'NAPAR' = n° des élémts traversés *** 'NUMP' = inutile, 'CREF' = coord sauvegardées de chaque elemt traversee *** 'TPAR' = tps sauvegardé associé aux coords sauvegardées SEGMENT IPARPO INTEGER NAPAR(NPOS),NUMP(NPOS) REAL*8 CREF(NDIM,NPOS),TPAR(NPOS) ENDSEGMENT POINTEUR IZN3.IPARPO *** tableau contenant tps et coordonnées de sortie (et non sauvegarde) DIMENSION SORTIE(4) **************************************************************** C C SEGACT MTAB2 SEGACT IZCENT NEL=IZCENT.NUM(/2) SEGINI IZCOU MNO9=MPNO9 SEGINI IZSH C C RECUPERATION D'ELEMENTS PROVENANT DE LA TABLE DE LACHER IVALI=1 XVALI=0.D0 IRETI=0 IVALR=0 XVALR=0.D0 IRETR=0 MTYPI='MOT ' C CHARI='CFL' C MTYPR='FLOTTANT' MTYPR=' ' CHARR=' ' COU=0.05D0 * MTYPR,IVALR,XVALR,CHARR,.TRUE.,IRETR) IF(IERR.NE.0)RETURN IF(MTYPR.NE.' ')THEN IF(MTYPR.NE.'FLOTTANT')THEN MOTERR(1:11)='CFL ' MOTERR(12:20)='FLOTTANT' RETURN ENDIF COU=XVALR IF(COU.LT.1.D-8)THEN MOTERR(1:8)='CFL ' REAERR(1)=REAL(COU) REAERR(2)=1.E-8 RETURN ENDIF ENDIF IVALI=1 XVALI=0.D0 IRETI=0 IVALR=0 XVALR=0.D0 IRETR=0 MTYPI='MOT ' C MTYPR='FLOTTANT' MTYPR=' ' CHARR=' ' * IRETI,MTYPR,IVALR,XVALR,CHARR,.TRUE.,IRETR) IF(MTYPR.NE.' ')THEN IF(MTYPR.NE.'FLOTTANT')THEN MOTERR(1:11)='DELTAT_SAUV' MOTERR(12:20)='FLOTTANT' RETURN ENDIF ENDIF IF(IERR.NE.0)RETURN DELTAT=XVALR IF ((IICAL.EQ.3).AND.(DELTAT.GT.0.D0)) THEN JG=1 SEGINI MLREE6 NSAUV=0 ENDIF IVALI=1 XVALI=0.D0 IRETI=0 IVALR=0 XVALR=0.D0 IRETR=0 MTYPI='MOT ' MTYPR='FLOTTANT' CHARR=' ' * IRETI,MTYPR,IVALR,XVALR,CHARR,.TRUE.,IRETR) IF(IERR.NE.0)RETURN TMAX=XVALR IF(IERR.NE.0)RETURN C LECTURE DU TABLEAU DES TEMPS DE LACHER IVALI=1 XVALI=0.D0 IRETI=0 IVALR=0 XVALR=0.D0 IRETR=0 MTYPI='MOT ' C CHARI='BORNES' MTYPR='LISTREEL' CHARR=' ' * MTYPR,IVALR,XVALR,CHARR,.TRUE.,IRETR) IF(IERR.NE.0)RETURN MLREE3=IRETR SEGACT MLREE3 C DONNEES SUPLEMENTAIRES POUR CONVECTION_DIFFUSION IVALI=1 XVALI=0.D0 IRETI=0 IVALR=0 XVALR=0.D0 IRETR=0 MTYPI='MOT ' MTYPR=' ' CHARR=' ' * MTYPR,IVALR,XVALR,CHARR,LOGRE,IRETR) IF(MTYPR.NE.' ')THEN IF(MTYPR.NE.'MAILLAGE')THEN MOTERR(1:11)='IMPERMEABLE' MOTERR(12:20)='MAILLAGE' RETURN ENDIF ENDIF IF(IERR.NE.0)RETURN IZFACE=IRETR IVALI=1 XVALI=0.D0 IRETI=0 IVALR=0 XVALR=0.D0 IRETR=0 MTYPI='MOT ' MTYPR=' ' CHARR=' ' *** recuperation de la liste des tps de sauvegarde des resultats $ IRETI,MTYPR,IVALR,XVALR,CHARR,.TRUE.,IRETR) IF (MTYPR.NE.' ') THEN IF (MTYPR.NE.'LISTREEL') THEN MOTERR(1:12)='TEMPS_SAUVES' MOTERR(13:20)='LISTREEL' RETURN ENDIF ENDIF IF (IERR.NE.0) RETURN IZSAUV=IRETR IF (IZSAUV.GT.0) THEN IF (DELTAT.GT.0.D0) THEN MOTERR(1:8)= 'DELTAT_S' MOTERR(9:16)='TEMPS_SA' RETURN ELSE MLREE6=IZSAUV SEGACT MLREE6 ENDIF ELSE IF (DELTAT.LE.0.D0) NSAUV=-1 ENDIF C ON ACTIVE LES TABLEAUX *** activation du chamelem de dispersion si nécessaire IF (IZDISP.GT.0) THEN MCHEL1=IZDISP SEGACT MCHEL1 MCHAML=MCHEL1.ICHAML(1) SEGACT MCHAML MELVA1=IELVAL(1) SEGACT MELVA1 MELVA2=IELVAL(2) SEGACT MELVA2 ENDIF *** activation du chamelem de diffusivité si nécessaire IF (IZDIFF.GT.0) THEN MCHEL1=IZDIFF SEGACT MCHEL1 MCHAML=MCHEL1.ICHAML(1) SEGACT MCHAML MELVA3=IELVAL(1) SEGACT MELVA3 ENDIF *** activation du maillage des faces impermeables si nécessaire IF (IZFACE.GT.0) THEN IPT9=IZFACE SEGACT IPT9 ENDIF C PRISE EN COMPTE DE LA POROSITE C IF(IZPOR.NE.0)THEN IF(IERR.NE.0)RETURN ENDIF C C STRUCTURES DE RESULTATS C L1=5 N1=1 N3=6 SEGINI MCHELM TITCHE(1:5)='NOEUD' SEGINI MMODEL C ------------------------------ C BOUCLE SUR LES TEMPS DE LACHER C ------------------------------ EPSILO=10*SQRT(XZPREC) NPART0=0 DO 80 KLAC=1,NLAC C LECTURE D UN MAILLAGE DE LACHER IVALI=KLAC XVALI=0.D0 IRETI=0 IVALR=0 XVALR=0.D0 IRETR=0 MTYPI='ENTIER ' CHARI=' ' MTYPR='MAILLAGE' CHARR='MAILLAGE' * MTYPR,IVALR,XVALR,CHARR,.TRUE.,IRETR) IF(IERR.NE.0)RETURN IZLAC=IRETR IF(IERR.NE.0)RETURN C * TMIN) NPARTI=NUMPA(/1) N1=NPART0+NPARTI SEGADJ MCHELM SEGADJ MMODEL C ........................................ C C BOUCLE SUR LES PARTICULES DU LACHER KLAC C ........................................ SEGACT,MCOORD DO 50 IPART=1,NPARTI IIPOS=0 IREP=0 NDIM=COORPA(/1) TMINI=TMIN DT1=0.D0 IDD1=1 53 CONTINUE IF(IICAL.EQ.1) THEN * IELTFA,IZCENT,IFACEL,DELTAT,IZSH,IEROR,DT1) IF(IERR.NE.0)RETURN SEGSUP IZN3 ELSEIF(IICAL.EQ.2) THEN C convection seule avec méthode analytique * IELTFA,IZCENT,IFACEL,DELTAT,IZSH) IF(IERR.NE.0)RETURN SEGSUP IZN3 ELSE C** convection + dispersion + diffusion $ MELVA3,IPT9,IZVIT,IZPART,IPART,TMINI,TMAX,MELEME, $ IELTFA,IZCENT,IFACEL,IPARPO,IZSH,SORTIE) IF (IERR.NE.0) RETURN C** cas ou particule i est eliminee du probleme IF (SORTIE(1).LT.0.D0) THEN NPART0=NPART0-1 N1=NPART0+NPARTI SEGADJ MCHELM SEGADJ MMODEL GOTO 50 ENDIF ENDIF NPOS=NAPAR(/1) IF(IIMPI.GT.0)THEN WRITE(6,*)' PARTICULE ',IPART,NPOS WRITE(6,*)NAPAR(1),NUMP(1),(CREF(J,1),J=1,NDIM),TPAR(1) I2=NPOS WRITE(6,*)NAPAR(I),NUMP(I),(CREF(J,I),J=1,NDIM),TPAR(I) 10 CONTINUE ENDIF C CAS OU TOUS LES ELEMENTS N'ONT PAS LA MEME ORIENTATION C ON MET LES RESULTATS DANS LE MEME SEGMENT NPOS1=NPOS IF(IREP.NE.0)THEN IZN3=IREP NPOS=IIPOS+NPOS+1-IDD1 SEGADJ IZN3 DO 54 II=IDD1,NPOS1 II1=II+1-IDD1 IZN3.CREF(1,IIPOS+II1)=CREF(1,II) IZN3.CREF(2,IIPOS+II1)=CREF(2,II) IZN3.TPAR(IIPOS+II1)=TPAR(II) 54 CONTINUE IF(NDIM.EQ.3)THEN DO 55 II=1,NPOS1 IZN3.CREF(3,IIPOS+II+1-IDD1)=CREF(3,II) 55 CONTINUE ENDIF SEGSUP IPARPO IPARPO=IZN3 ENDIF C IF(IEROR.EQ.1)THEN TMINI=TPAR(NPOS) TTEMP=TPAR(NPOS) NPART=1 SEGINI IZN,IZL DO 56 I=1,NDIM IZL.COORPA(I,1)=CREF(I,NPOS) 56 CONTINUE IZN.NLEPA(1)=0 IZN.NUMPA(1)=1 IZL.NLEPA(1)=0 IZL.NUMPA(1)=1 IIPOS=IIPOS+NPOS1-IDD1 & TTEMP) IF(IZN.NLEPA(1).NE.0)THEN IREP=IPARPO DO 57 I=1,NDIM COORPA(I,IPART)=IZN.COORPA(I,1) 57 CONTINUE NLEPA(IPART)=IZN.NLEPA(1) DT1=0.D0 IDD1=1 C CAS D'UN PAS CONSTANT, ON RECALE LE CALCUL AVEC DT1 IF((ABS(DELTAT).GT.1.D-15).AND. * ((TPAR(NPOS)-TPAR(NPOS-1)).NE.DELTAT))THEN DT1=TPAR(NPOS)-TPAR(NPOS-1) IDD1=2 ENDIF SEGSUP IZL,IZN GO TO 53 ENDIF SEGSUP IZL,IZN ENDIF C IVALI=IPART+NPART0 SEGSUP IPARPO 50 CONTINUE C ............................................ C C FIN BOUCLE SUR LES PARTICULES DU LACHER KLAC C ............................................ NPART0=NPART0+NPARTI SEGSUP IZPART 80 CONTINUE C ---------------------------------- C FIN BOUCLE SUR LES TEMPS DE LACHER C ---------------------------------- SEGDES MTAB2 SEGSUP IZCOU SEGSUP IZSH C C RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales