diff options
| author | stainer_t <thomas.stainer@oecd-nea.org> | 2025-09-08 13:48:49 +0200 |
|---|---|---|
| committer | stainer_t <thomas.stainer@oecd-nea.org> | 2025-09-08 13:48:49 +0200 |
| commit | 7dfcc480ba1e19bd3232349fc733caef94034292 (patch) | |
| tree | 03ee104eb8846d5cc1a981d267687a729185d3f3 /Dragon/src/MESHST.f | |
Initial commit from Polytechnique Montreal
Diffstat (limited to 'Dragon/src/MESHST.f')
| -rw-r--r-- | Dragon/src/MESHST.f | 1924 |
1 files changed, 1924 insertions, 0 deletions
diff --git a/Dragon/src/MESHST.f b/Dragon/src/MESHST.f new file mode 100644 index 0000000..b0d9c76 --- /dev/null +++ b/Dragon/src/MESHST.f @@ -0,0 +1,1924 @@ +*DECK MESHST + SUBROUTINE MESHST(IPTRK,IPGEOM,REMESH,FVOL,STAIRS,FACST,NCEL, + > IPLANZ,ISTATE,NCYL,NSECT,NCPHY,VOLSUR,MATALB,SIDE,NCOUR, + > NSMIN,NSMAX,NS,FACB,NVOL,SURB,VSYM,SSYM,IHEX,LXI,NV,MCODE, + > SURL,IPLANI,VLAT,ZMIN) +* +*----------------------------------------------------------------------- +* +*Purpose: +* General numbering of hexagonal assembly. +* +*Copyright: +* Copyright (C) 1991 Ecole Polytechnique de Montreal +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public +* License as published by the Free Software Foundation; either +* version 2.1 of the License, or (at your option) any later version +* +*Author(s): M. Ouisloumen +* +*Parameters: input +* MCODE =1 for Z- symmetry; =2 for Z+ symmetry; =0 otherwise. +* +*Parameters: input/output +* REMESH coordinates of geometry. +* FVOL first zone number. +* NVOL first volume number. +* STAIRS see TRKHEX. +* FACST see TRKHEX. +* NCEL number of cells. +* NSECT number of sectors in region. +* NCYL number of cylinders in cell. +* NCPHY number of physical cells. +* VOLSUR volumes and external surfaces +* MATALB material albedo vector. +* FACB first face number. +* SURB first cell number. +* VSYM initial geometry volumes. +* SSYM initial geometry surfaces. +* IPTRK undefined. +* IPGEOM undefined. +* IPLANZ undefined. +* ISTATE undefined. +* SIDE undefined. +* NCOUR undefined. +* NSMIN undefined. +* NSMAX undefined. +* NS undefined. +* IHEX undefined. +* LXI undefined. +* NV undefined. +* SURL undefined. +* IPLANI undefined. +* VLAT undefined. +* ZMIN undefined. +* +*----------------------------------------------------------------------- +* + USE GANLIB + IMPLICIT NONE + INTEGER NSTATE + REAL PI,SQRT3 + PARAMETER (NSTATE=40) + PARAMETER (PI=3.141592653589793,SQRT3=1.732050807568877) + TYPE(C_PTR) IPTRK,IPGEOM + INTEGER NCEL,IPLANZ,NCPHY,NCOUR,IHEX,LXI,NV,MCODE,IPLANI + INTEGER FVOL(NCEL),STAIRS(IPLANZ),FACST(IPLANZ), + > ISTATE(NSTATE),MATALB(*),NVOL(*),NSMIN,NSMAX,NS, + > NSECT(*),NCYL(NCEL),FACB(*),SURB(*), + > VSYM(*),SSYM(*),SURL(*),VLAT(*) + REAL REMESH(*),VOLSUR(*),SIDE,ZMIN +*---- +* LOCAL VARIABLES +*---- + CHARACTER TEXT12*12 + LOGICAL LGCELL,L1CELL,LGSS,LGTURN,LG3D,LGPASS,LSPLIT,LGMERG + REAL POIDSH + INTEGER IFONC,IFCOUR,N,L + INTEGER NEIGHB + INTEGER LLL,KSS,LX,LZ,ISTAT9,NDIM,LZZ,ILENT,ITP,ICEL2, + > I,ICEL0,NCOUS,ICOU,KCEL,LCEL,ILENZ,IAZ,K,IAUX, + > ISURFP,ISURF,ISAUX,JSUR,ISF,IPOINT,KREG,KSURF1, + > KSURF2,NSURF1,NSURF2,ISUR,ITC,ILENR,MDR,IOFS, + > NRAY,ILENSP,MADD,J,ISEC,LSECT,MIXF, + > IFVOL,NZONE,MVOL,JVOL,IVOL,ISURB,JSURB,IST,IY,KZAUX, + > NAUX,MIXX,JSP,KBB,JJ,IV,IS,ILENS,ITS,IC,KMIX,NMIX, + > IXZPL,KXI,NXI,LFF,LZF,ISTO,ISS1,IMERMX,ISZ, + > IFRT,IMER0,IMER1,ISX,IMERG,JMERG,MMCYL,IZON,IFF, + > ILENM,ISS,ICEL + INTEGER JSECT,LL,IZZ,KY,IMMS,IBSS,IFR0,IXX,ICCOIN,KCCOIN, + > MROT,NCPER,ISURSY,MSMAX,ISSXX,IPPZ,IPP1,IXP,JCCOIN, + > JP,MXI,IP,ISURB6,ITT9,ISURSX,KSURBX,K1,ICX,ICY,ICZ, + > IDEBX,NBASE,ICELC0,ICELC1,NCC,MCYL,NZONE1,IA, + > NSECTO,IV1,JVT,IVTURN,ITURN,KAUX,KVOL1,KVOL2, + > KSECTX,NZZ,ICXX,ICELC,ICLIM,IXX0,ISS0,JSS0,M,ISS2, + > IJSUR,KKB,IXV,LFROT,IVFIN,IVORIN,IVMIN,IVSYM,NZON, + > IVAUX,IVMAX,IVOR,IVV,IVSYM0,IVV1,KVV,KVOR,ISY,MSAUX, + > IVLMAX,NSAUX,IPPX,ISYAUX,LSMAX,LSPLZM,IDDX,KX2,KSECT + INTEGER KX1,KXP,IDEB,IYAUX,II,KSAUX,IVLAT,JTX,IX1,JX,IFR,IW, + > JW,MSUR,MCPHY,ISYX,LSPLZP + REAL VEX,X,Y,XM,YM,XP,YP,YPP,ZAUX,ZBUX,Z,SURF,R1,R2,PAS, + > VOLUM1,VOLUM2,R,VOLUME,VOLUMS,VCYL,SAUX,XTAN,SAUX1 +*---- +* ALLOCATABLE ARRAYS +*---- + INTEGER, ALLOCATABLE, DIMENSION(:) :: VTURN,PHTURN,VOL1,ISECT,MXX, + + IMX,IMX2,ISSS,IMIX,IPSECT,ICC,ICELL,KNUM,NUMG,ITRN,ISPZ,KVOL,IBB, + + ITT,IAA + INTEGER, ALLOCATABLE, DIMENSION(:,:) :: ISXY + REAL, ALLOCATABLE, DIMENSION(:) :: ZZZ,RAY,KRAY,RR + TYPE PP + REAL, POINTER, DIMENSION(:) :: R + INTEGER, POINTER, DIMENSION(:) :: I1,I2 + END TYPE PP + TYPE(PP), ALLOCATABLE, DIMENSION(:) :: IOF +*---- +* DATA +*---- + INTEGER ROT(12) + SAVE ROT + DATA ROT /2,3,4,5,6,1,6,1,2,3,4,5/ +* +* STATEMENT FUNCTIONS +*---- + IFONC(N,L)= 2+(N-1)*(L+3*(N-2)) + IFCOUR(N)=NINT( (4.+SQRT(1.+4.*FLOAT(N-1)/3.) + + +SQRT(1.+4.*FLOAT(N-2)/3.))*.25) +*---- +* SCRATCH STORAGE ALLOCATION +*---- + ALLOCATE(VOL1(NCPHY),VTURN(NCPHY),PHTURN(NCPHY)) +* + LZ=ISTATE(5) + LX=ISTATE(3) + ISTAT9=ISTATE(9) + LGCELL=.FALSE. + L1CELL=.FALSE. + LGSS=.FALSE. + LGTURN=.FALSE. + LG3D=.FALSE. + IF(ISTATE(8).EQ.1) LGCELL=.TRUE. + NDIM=2 + LZZ=1 + L1CELL=(LX.EQ.1) + IF(LZ.GT.0) THEN + NDIM=3 + LG3D=.TRUE. + LZZ=LZ + L1CELL=(LX*LZ.EQ.1) + ENDIF + VEX=1.5*SQRT(3.)*SIDE*SIDE + CALL LCMLEN(IPGEOM,'TURN',ILENT,ITP) + IF(ILENT.GT.0) LGTURN=.TRUE. + NCOUR=1 + IF(LX.GT.1)NCOUR=IFCOUR(LX) +* +* COORDONNEES DES CENTRES DES HEXAGONES +* + X=0. + Y=0. + XM=0. + YM=0. + YP=0. + XP=0. + ICEL=1 + 18 REMESH(ICEL)=X + REMESH(NCEL+ICEL)=Y + ICEL2=NEIGHB(ICEL,2,9,LX,POIDSH) + IF(ICEL2.GT.LX) GOTO 20 + ICEL=ICEL2 + Y=Y+SIDE*SQRT3 + GO TO 18 + 20 ICEL=1 + Y=0 + 21 ICEL2=NEIGHB(ICEL,5,9,LX,POIDSH) + IF(ICEL2.GT.LX) GOTO 22 + ICEL=ICEL2 + REMESH(ICEL)=X + Y=Y-SIDE*SQRT3 + REMESH(NCEL+ICEL)=Y + GOTO 21 + 22 CONTINUE + DO 30 I=2,NCOUR + LGPASS=.FALSE. + XP=XP+1.5*SIDE + YP=YP+.5*SIDE*SQRT3 + ICEL=IFONC(I,0) + ICEL0=ICEL + X=XP + Y=YP + YPP=YP + 23 REMESH(ICEL)=X + REMESH(NCEL+ICEL)=Y + ICEL2=NEIGHB(ICEL,2,9,LX,POIDSH) + IF(ICEL2.GT.LX) GOTO 25 + Y=Y+SIDE*SQRT3 + ICEL=ICEL2 + GO TO 23 + 25 ICEL=ICEL0 + Y=YP + 26 ICEL2=NEIGHB(ICEL,5,9,LX,POIDSH) + IF(ICEL2.GT.LX) GOTO 27 + Y=Y-SIDE*SQRT3 + ICEL=ICEL2 + REMESH(ICEL)=X + REMESH(NCEL+ICEL)=Y + GOTO 26 + 27 IF(LGPASS) GOTO 28 + XM=XM-1.5*SIDE + YM=YM+.5*SIDE*SQRT3 + YPP=YM + ICEL=IFONC(I,2) + ICEL0=ICEL + X=XM + Y=YM + LGPASS=.TRUE. + GO TO 23 + 28 CONTINUE + 30 CONTINUE +* +* POUR EVITER DES EFFETS DE DIFFERENCE +* + NCOUS=7 + DO 31 ICOU=3,NCOUR,2 + KCEL=IFONC(ICOU,0)+6*ICOU-NCOUS + LCEL=KCEL-3*(ICOU-1) + REMESH(NCEL+KCEL)=0. + REMESH(NCEL+LCEL)=0. + NCOUS=NCOUS+1 + 31 CONTINUE + STAIRS(1)=LX + IF(LG3D) THEN + CALL LCMSIX(IPTRK,'DATA_DUP',1) + CALL LCMLEN(IPTRK,'MESHZ',ILENZ,ITP) + IF(ILENZ.NE.LZZ+1)CALL XABORT('MESHST: MISSING DIMENSION MESHZ') + ALLOCATE(ZZZ(ILENZ)) + CALL LCMGET(IPTRK,'MESHZ',ZZZ) + CALL LCMSIX(IPTRK,' ',2) +* +*--- TEST SUR L'ORDONANCE DES PLANS DES CELLULES SUIVANT L'AXE Z +* + ZAUX=ZZZ(1) + ZMIN=ZAUX + DO 29 IAZ=1,ILENZ-1 + ZBUX=ZZZ(IAZ+1) + IF(ZAUX.GE.ZBUX)CALL XABORT('MESHST: WRONG CELLS PLAN POSITION') + ZAUX=ZBUX + 29 CONTINUE + Z=ZZZ(2) + DO 32 K=1,LX + REMESH(2*NCEL+K)=Z + 32 CONTINUE + IAUX=0 + DO 35 I=2,LZ + STAIRS(I)=I*LX + Z=ZZZ(I+1) + DO 33 K=1,LX + IAUX=IAUX+1 + REMESH(LX+IAUX)=REMESH(K) + REMESH(NCEL+LX+IAUX)=REMESH(NCEL+K) + REMESH(2*NCEL+LX+IAUX)=Z + 33 CONTINUE + 35 CONTINUE + ENDIF +* +* CALCUL DES SURFACES EXTERNES ET AFFECTATION DES ALBEDOS +* + ISURFP=6 + IF(NCOUR.GT.1)ISURFP=6*(3+2*(NCOUR-2)) + ISS=1 + ISURF=NS + ISAUX=ISURF + IF(LG3D) THEN + ISAUX=ISURF-NSMAX + ISS=NSMIN+1 + DO 70 I=1,NSMIN + MATALB(I)=-6 + 70 CONTINUE + DO 71 I=1,NSMAX + MATALB(ISAUX+I)=-5 + 71 CONTINUE + ENDIF + DO 75 I=ISS,ISAUX + MATALB(I)=-1 + 75 CONTINUE + JSUR=NS-NSMAX+1 + DO 80 K=1,LZZ + ISF=ISS+ISURFP-1 + SURF=SIDE + FACST(K)=ISF + ISS=ISF+1 + 80 CONTINUE + IPOINT=2*NCEL + IF(LG3D) THEN + IPOINT=3*NCEL + ENDIF +* + KREG=ISURF+1 + VOLSUR(KREG)=0. + MATALB(KREG)=0 + KSURF1=0 + KSURF2=ISAUX + NSURF1=NSMIN+1 + NSURF2=NS+1 + ISUR=0 + Z=0.0 + KSECT=0 + IF(L1CELL) THEN +* +* CAS D'UNE SEULE CELLULE +* + CALL LCMLEN(IPGEOM,'SECTOR',ILENS,ITC) + CALL LCMLEN(IPGEOM,'RADIUS',ILENR,ITP) + MDR=ILENR + IF(ILENR.EQ.0) MDR=1 + ALLOCATE(ISECT(MDR),MXX(MDR)) + CALL LCMLEN(IPGEOM,'MIX',ILENM,ITP) + IF(ILENS.GT.0) THEN + IF(ILENS.NE.MDR) CALL XABORT('MESHST: INCONSISTENT LENGTHS(1' + + //').') + CALL LCMGET(IPGEOM,'SECTOR',ISECT) + K=0 + DO J=1,MDR + K=K+6*(ISECT(J)-1) + ENDDO + IF(K.NE.ILENM) THEN + CALL XABORT('MESHST: SECTOR-DEFINED MIX INDICES EXPECTED(1' + + //').') + ENDIF + ALLOCATE(IMX2(ILENM)) + CALL LCMGET(IPGEOM,'MIX',IMX2) + IOFS=0 + DO J=1,MDR + IOFS=IOFS+1 + MXX(J)=IMX2(IOFS) + DO K=2,6*(ISECT(J)-1) + IOFS=IOFS+1 + IF(IMX2(IOFS).NE.MXX(J)) THEN + CALL XABORT('MESHST: SECTOR-DEPENDENT MIX NOT IM' + + //'PLEMENTED(1).') + ENDIF + ENDDO + ENDDO + DEALLOCATE(IMX2) + ELSE + IF(ILENM.NE.MDR) CALL XABORT('MESHST: INCONSISTENT LENGTHS(2' + + //').') + CALL LCMGET(IPGEOM,'MIX',MXX) + ISECT(:MDR)=1 + ENDIF + IF(ILENR.GT.0) THEN + ALLOCATE(RAY(ILENR)) + CALL LCMGET(IPGEOM,'RADIUS',RAY) + CALL LCMLEN(IPGEOM,'SPLITR',ILENSP,ITP) + IF(ILENSP.GT.0) THEN + IF(ITP.NE.1.OR.ILENSP.NE.ILENR-1) + + CALL XABORT('MESHST: '// + + 'MISSING TYPE OR DIMENSION OF SPLITR') + ALLOCATE(ISSS(ILENSP)) + CALL LCMGET(IPGEOM,'SPLITR',ISSS) + NRAY=0 + DO 101 I=1,ILENSP + NRAY=NRAY+ABS(ISSS(I)) + 101 CONTINUE + ALLOCATE(KRAY(NRAY+1),IMIX(NRAY+1),IPSECT(NRAY+1)) + R1=0.0 + MADD=-1 + KRAY(1)=0.0 + DO 103 J=1,ILENSP + ISEC=ISSS(J) + LSECT=ISECT(J) + MIXF=MXX(J) + IF(ISEC.EQ.0)CALL XABORT('MESHST: INVALID SPLITR') + IF(ISEC.GT.0) THEN + R2=RAY(J+1) + PAS=(R2-R1)/FLOAT(ISEC) + DO 111 K=1,ISEC + MADD=MADD+1 + KRAY(MADD+2)=R1+PAS*FLOAT(K) + IMIX(MADD+1)=MIXF + IPSECT(MADD+1)=LSECT + 111 CONTINUE + R1=R2 + ELSE + R2=RAY(J+1) + R1=R1**2 + R2=R2**2 + PAS=(R2-R1)/FLOAT(-ISEC) + DO 112 K=1,-ISEC + MADD=MADD+1 + KRAY(MADD+2)=SQRT(R1+PAS*FLOAT(K)) + IMIX(MADD+1)=MIXF + IPSECT(MADD+1)=LSECT + 112 CONTINUE + R1=SQRT(R2) + ENDIF + 103 CONTINUE + IMIX(NRAY+1)=MXX(ILENR) + IPSECT(NRAY+1)=ISECT(ILENR) + DEALLOCATE(MXX,ISSS,ISECT) + ALLOCATE(ISECT(NRAY+1)) + DO 104 J=1,NRAY+1 + ISECT(J)=IPSECT(J) + 104 CONTINUE + DEALLOCATE(IPSECT) + ELSE + NRAY=ILENR-1 + ALLOCATE(IMIX(NRAY+1),KRAY(NRAY+1)) + DO 105 J=1,NRAY+1 + IMIX(J)=MXX(J) + KRAY(J)=RAY(J) + 105 CONTINUE + ENDIF + DEALLOCATE(MXX,RAY) + ELSE + ALLOCATE(IMIX(MDR)) + DO 106 J=1,MDR + IMIX(J)=MXX(J) + 106 CONTINUE + DEALLOCATE(MXX) + NRAY=0 + ENDIF + IAUX=2 + IF(LG3D)IAUX=3*NCEL + IFVOL=0 + NZONE=NRAY+1 + MVOL=0 + JVOL=1 + IVOL=0 + ISURB=NSMIN + JSURB=0 + DO 119 I=1,NCEL + NVOL(I)=JVOL + IF(LG3D) THEN + Z=REMESH(2*NCEL+I) + IF(I.GT.STAIRS(1)) THEN + IST=1 + DO 129 IY=2,LZZ + IF(I.LE.STAIRS(IY)) THEN + IST=IY-1 + GOTO 139 + ENDIF + 129 CONTINUE + 139 KZAUX=I-STAIRS(IST) + IF(IST.GT.1)KZAUX=KZAUX+STAIRS(IST-1) + Z=Z-REMESH(2*NCEL+KZAUX) + ENDIF + ENDIF + NCYL(I)=NRAY + FVOL(I)=IFVOL+1 + IFVOL=IFVOL+NZONE + DO 117 J=1,NRAY + IAUX=IAUX+1 + REMESH(IAUX)=KRAY(J+1) + 117 CONTINUE + VOLUM1=0. + IF(LG3D) THEN + IF(IPLANZ.GT.1) THEN + IF(I.LE.STAIRS(1)) THEN + FACB(I)=KSURF1 + ELSEIF(I.GT.STAIRS(IPLANZ-1)) THEN + ISUR=ISUR+1 + FACB(LX+ISUR)=KSURF2 + ENDIF + ELSE + FACB(I)=KSURF1 + FACB(LX+I)=KSURF2 + ENDIF + ENDIF + NAUX=0 + DO 120 J=1,NRAY+1 + MVOL=MVOL+1 + KSECT=ISECT(J) + NSECT(MVOL)=KSECT + NAUX=1 + IF(KSECT.GT.1) NAUX=6*(KSECT-1) + IVOL=IVOL+NAUX + MIXX=IMIX(J) + KREG=KREG+1 + IF(J.EQ.NZONE) THEN + VOLUM2=VEX + ELSE + R=KRAY(J+1) + VOLUM2=PI*R*R + ENDIF + VOLUME=(VOLUM2-VOLUM1)/REAL(NAUX) + VOLUMS=0.0 + IF(LG3D) THEN + VOLUMS=VOLUME*.25 +* +* SURFACES SUPERIEURES ET INFERIEURES (SELON L'AXE Z) +* + IF(IPLANZ.GT.1) THEN + IF(I.LE.STAIRS(1)) THEN + KSURF1=KSURF1+1 + NSURF1=NSURF1-1 + VOLSUR(NSURF1)=VOLUMS + ELSEIF(I.GT.STAIRS(IPLANZ-1)) THEN + KSURF2=KSURF2+1 + NSURF2=NSURF2-1 + VOLSUR(NSURF2)=VOLUMS + ENDIF + ELSE + KSURF1=KSURF1+1 + NSURF1=NSURF1-1 + VOLSUR(NSURF1)=VOLUMS + KSURF2=KSURF2+1 + NSURF2=NSURF2-1 + VOLSUR(NSURF2)=VOLUMS + ENDIF + VOLUME=VOLUME*Z + ENDIF + VOLUM1=VOLUM2 + VOLSUR(KREG)=VOLUME + MATALB(KREG)=MIXX + DO 121 K=2,NAUX + KREG=KREG+1 + VOLSUR(KREG)=VOLUME + MATALB(KREG)=MIXX + IF(LG3D) THEN + IF(IPLANZ.GT.1) THEN + IF(I.LE.STAIRS(1)) THEN + KSURF1=KSURF1+1 + NSURF1=NSURF1-1 + VOLSUR(NSURF1)=VOLUMS + ELSEIF(I.GT.STAIRS(IPLANZ-1)) THEN + KSURF2=KSURF2+1 + NSURF2=NSURF2-1 + VOLSUR(NSURF2)=VOLUMS + ENDIF + ELSE + KSURF1=KSURF1+1 + NSURF1=NSURF1-1 + VOLSUR(NSURF1)=VOLUMS + KSURF2=KSURF2+1 + NSURF2=NSURF2-1 + VOLSUR(NSURF2)=VOLUMS + ENDIF + ENDIF + 121 CONTINUE + JVOL=IVOL+1 + 120 CONTINUE + SURF=SIDE + JSP=6 + KBB=1 + IF(KSECT.GT.1) THEN + SURF=SIDE/(KSECT-1) + JSP=NAUX + KBB=KSECT-1 + ENDIF + IF(LG3D)SURF=SURF*Z + DO 118 JJ=1,JSP + JSUR=JSUR-1 + VOLSUR(JSUR)=.25*SURF + 118 CONTINUE + DO 122 JJ=1,6 + JSURB=JSURB+1 + SURB(JSURB)=ISURB + ISURB=ISURB+KBB + 122 CONTINUE + 119 CONTINUE + DEALLOCATE(IMIX,ISECT) + IF(LG3D) DEALLOCATE(ZZZ) + IF(NRAY.GT.0) DEALLOCATE(KRAY) + DO 715 IV=1,NV + VSYM(IV)=IV + 715 CONTINUE + DO 716 IS=1,NS + SSYM(IS)=IS + 716 CONTINUE + GO TO 800 + ENDIF +* CAS D'UN ASSEMBLAGE DE CELLULE +* + IPP1=0 + MROT=0 + MSMAX=0 + ALLOCATE(ISXY(6,MAX(IPLANZ,IPLANI))) + IF(LGCELL) THEN +* +* SPLITING DES RAYONS ET DEFINITION DES SECTEURS POUR +* LES CELLULES GENERATRICES +* + ALLOCATE(IOF(ISTAT9),ICC(ISTAT9),ICELL(3*ISTAT9)) + CALL LCMGET(IPGEOM,'CELL',ICELL) + DO 10 I=1,ISTAT9 + WRITE(TEXT12(1:4),'(A4)') ICELL(3*I-2) + WRITE(TEXT12(5:8),'(A4)') ICELL(3*I-1) + WRITE(TEXT12(9:12),'(A4)') ICELL(3*I) + CALL LCMSIX(IPGEOM,TEXT12,1) + CALL LCMLEN(IPGEOM,'RADIUS',ILENR,ITP) + CALL LCMLEN(IPGEOM,'SECTOR',ILENS,ITS) + IF(ILENR.GT.0) THEN + ALLOCATE(ISECT(ILENR),IMX(ILENR)) + CALL LCMLEN(IPGEOM,'MIX',ILENM,ITP) + IF(ILENS.GT.0) THEN + IF(ILENS.NE.ILENR) CALL XABORT('MESHST: INCONSISTENT L' + + //'ENGTHS(3).') + CALL LCMGET(IPGEOM,'SECTOR',ISECT) + K=0 + DO J=1,ILENR + K=K+6*(ISECT(J)-1) + ENDDO + IF(K.NE.ILENM) THEN + CALL XABORT('MESHST: SECTOR-DEFINED MIX INDICES EXPE' + + //'CTED(2).') + ENDIF + ALLOCATE(IMX2(ILENM)) + CALL LCMGET(IPGEOM,'MIX',IMX2) + IOFS=0 + DO J=1,ILENR + IOFS=IOFS+1 + IMX(J)=IMX2(IOFS) + DO K=2,6*(ISECT(J)-1) + IOFS=IOFS+1 + IF(IMX2(IOFS).NE.IMX(J)) THEN + CALL XABORT('MESHST: SECTOR-DEPENDENT MIX NOT IM' + + //'PLEMENTED(2).') + ENDIF + ENDDO + ENDDO + DEALLOCATE(IMX2) + ELSE + IF(ILENM.NE.ILENR) CALL XABORT('MESHST: INCONSISTENT L' + + //'ENGTHS(4).') + ISECT(:ILENR)=1 + CALL LCMGET(IPGEOM,'MIX',IMX) + ENDIF + CALL LCMLEN(IPGEOM,'SPLITR',ILENSP,ITP) + IF(ILENSP.GT.0) THEN + IF(ITP.NE.1.OR.ILENSP.NE.ILENR-1) + + CALL XABORT('MESHST: '// + + 'MISSING TYPE OR DIMENSION OF SPLITR') + ALLOCATE(RR(ILENR)) + CALL LCMGET(IPGEOM,'RADIUS',RR) + ALLOCATE(ISSS(ILENSP)) + CALL LCMGET(IPGEOM,'SPLITR',ISSS) + NRAY=1 + DO 5 J=1,ILENSP + NRAY=NRAY+ABS(ISSS(J)) + 5 CONTINUE + ALLOCATE(IOF(I)%R(NRAY),IOF(I)%I1(NRAY),IOF(I)%I2(NRAY)) + KMIX=0 + DO 7 J=1,ILENR-1 + NMIX=IMX(J) + ISEC=ISSS(J) + LSECT=ISECT(J) + IF(ISEC.EQ.0)CALL XABORT('MESHST: INVALID SPLITR') + DO 6 L=1,ABS(ISEC) + IOF(I)%I1(KMIX+1)=NMIX + IOF(I)%I2(KMIX+1)=LSECT + KMIX=KMIX+1 + 6 CONTINUE + 7 CONTINUE + IOF(I)%I1(KMIX+1)=IMX(ILENR) + IOF(I)%I2(KMIX+1)=ISECT(ILENR) + IOF(I)%R(1)=0.0 + R1=0. + IAUX=0 + DO 109 K=1,ILENSP + ISEC=ISSS(K) + IF(ISEC.EQ.0)CALLXABORT('MESHST: INVALID SPLITR') + IF(ISEC.GT.0) THEN + R2=RR(K+1) + PAS=(R2-R1)/FLOAT(ISEC) + DO 8 L=1,ISEC + IAUX=IAUX+1 + IOF(I)%R(IAUX+1)=R1+PAS*REAL(L) + 8 CONTINUE + R1=R2 + ELSE + R2=RR(K+1) + R1=R1**2 + R2=R2**2 + PAS=(R2-R1)/FLOAT(-ISEC) + DO 108 L=1,-ISEC + IAUX=IAUX+1 + IOF(I)%R(IAUX+1)=SQRT(R1+PAS*REAL(L)) + 108 CONTINUE + R1=SQRT(R2) + ENDIF + 109 CONTINUE + DEALLOCATE(ISSS,RR) + ICC(I)=NRAY-1 + ELSE + ICC(I)=ILENR-1 + ALLOCATE(IOF(I)%R(ILENR)) + CALL LCMGET(IPGEOM,'RADIUS',IOF(I)%R) + ALLOCATE(IOF(I)%I1(ILENR),IOF(I)%I2(ILENR)) + DO 9 J=1,ILENR + IOF(I)%I1(J)=IMX(J) + IOF(I)%I2(J)=ISECT(J) + 9 CONTINUE + ENDIF + DEALLOCATE(IMX,ISECT) + ELSE + ICC(I)=0 + ALLOCATE(IOF(I)%I1(1),IOF(I)%I2(1)) + CALL LCMLEN(IPGEOM,'MIX',ILENM,ITP) + IF(ILENS.GT.0) THEN + CALL LCMGET(IPGEOM,'SECTOR',IOF(I)%I2(1)) + IF(6*(IOF(I)%I2(1)-1).NE.ILENM) THEN + CALL XABORT('MESHST: SECTOR-DEFINED MIX INDICES EXPE' + + //'CTED(3).') + ENDIF + ALLOCATE(IMX2(ILENM)) + CALL LCMGET(IPGEOM,'MIX',IMX2) + DO K=2,6*(IOF(I)%I2(1)-1) + IF(IMX2(K).NE.IMX2(1)) THEN + CALL XABORT('MESHST: SECTOR-DEPENDENT MIX NOT IMPL' + + //'EMENTED(3).') + ENDIF + ENDDO + IOF(I)%I1(1)=IMX2(1) + DEALLOCATE(IMX2) + ELSE + IF(ILENM.NE.1) CALL XABORT('MESHST: INCONSISTENT LENGT' + + //'HS(5).') + CALL LCMGET(IPGEOM,'MIX',IOF(I)%I1(1)) + IOF(I)%I2(1)=1 + ENDIF + ENDIF + IF(ILENS.EQ.0) THEN + IF(LGTURN)CALL XABORT('MESHST: SECTOR MUST BE DEFINED '// + + 'OR CANCEL TURN ') + ENDIF + CALL LCMSIX(IPGEOM,' ',2) + 10 CONTINUE +*--- NUMEROTATION DES VOLUMES DE LA SYMETRIE D'ENTREE + IXZPL=IPLANZ + IF(MCODE.GT.0)IXZPL=IPLANI + KXI=LXI*IXZPL + NXI=KXI + IF(IHEX.LE.9) THEN + CALL LCMSIX(IPTRK,'DATA_DUP',1) + CALL LCMLEN(IPTRK,'SPLITZD',LFF,KSS) + CALL LCMSIX(IPTRK,' ',2) + LSPLIT=.FALSE. + LZF=IXZPL + IF(LFF.GT.0) THEN + LZF=LFF + NXI=LXI*LZF + LSPLIT=.TRUE. + ENDIF + ALLOCATE(KNUM(2*NXI),NUMG(NXI)) + CALL LCMLEN(IPGEOM,'MERGE',LLL,KSS) + LGMERG=.FALSE. + IF(LLL.GT.0) THEN + CALL LCMGET(IPGEOM,'MERGE',KNUM) + LGMERG=.TRUE. + CALL LCMGET(IPGEOM,'MIX',NUMG) + DO I=1,NXI + NUMG(I)=-NUMG(I) + ENDDO + ELSE + CALL LCMGET(IPGEOM,'MIX',KNUM) + DO I=1,NXI + KNUM(I)=-KNUM(I) + NUMG(I)=KNUM(I) + ENDDO + ENDIF + IF(LGTURN) THEN + CALL LCMGET(IPGEOM,'TURN',KNUM(NXI+1)) + ELSE + KNUM(NXI+1:2*NXI)=1 + LGTURN=.TRUE. + ENDIF + IVOL=0 + ISTO=0 + ALLOCATE(ITRN(KXI*3),ISPZ(LZF)) + IF(LSPLIT) THEN + CALL LCMSIX(IPTRK,'DATA_DUP',1) + CALL LCMGET(IPTRK,'SPLITZD',ISPZ) + CALL LCMSIX(IPTRK,' ',2) + ELSE + ISPZ(:LZF)=1 + ENDIF + ALLOCATE(KVOL(KXI)) + ISS=-1 + ISS1=-1 + IMERMX=0 + DO 182 ISZ=1,LZF + IFRT=ISS1 + IMER0=KNUM(LXI*ISZ) + IMER1=IMER0 + DO 482 ISX=1,LXI + ISS=ISS+1 + ISS1=ISS1+1 + IMERG=KNUM(ISS1+1) + JMERG=NUMG(ISS1+1) + MMCYL=ICC(JMERG) + IF(LSPLIT) THEN + IMER0=MAX(IMER0,IMERG) + IMER1=MIN(IMER1,IMERG) + ENDIF + IZON=0 + IZZ=0 + LL=0 + DO 171 IFF=1,MMCYL+1 + JSECT=IOF(JMERG)%I2(IFF) + IF(JSECT.GT.1) THEN + LL=JSECT-1 + IZZ=6*LL + ELSE + LL=1 + IZZ=1 + ENDIF + IZON=IZON+IZZ + 171 CONTINUE + IMERG=IMERG+IMERMX + IF(LGMERG) THEN + DO 281 KY=1,ISTO + IF(IMERG.EQ.ITRN(KXI+KY)) THEN + IMMS=ITRN(2*KXI+KY) + IBSS=KVOL(IMMS+1) + KVOL(ISS+1)=IBSS + ITRN(ISS+1)=ITRN(IMMS+1) + GOTO 381 + ENDIF + 281 CONTINUE + ENDIF + ITRN(KXI+ISTO+1)=IMERG + ITRN(2*KXI+ISTO+1)=ISS + ISTO=ISTO+1 + KVOL(ISS+1)=IVOL+1 + IVOL=IVOL+IZON + ITRN(ISS+1)=IVOL-IZZ+LL*ROT(KNUM(NXI+ISS1+1)) + 381 CONTINUE + 482 CONTINUE + IF(LSPLIT) THEN + IFR0=IFRT + DO 582 IXX=1,ISPZ(ISZ)-1 + IMERMX=IMERMX+IMER0-IMER1+1 + IFRT=IFR0 + DO 682 ISX=1,LXI + ISS=ISS+1 + IFRT=IFRT+1 + IMERG=KNUM(IFRT+1) + JMERG=NUMG(IFRT+1) + MMCYL=ICC(JMERG) + IZON=0 + IZZ=0 + LL=0 + DO 671 IFF=1,MMCYL+1 + JSECT=IOF(JMERG)%I2(IFF) + IF(JSECT.GT.1) THEN + LL=JSECT-1 + IZZ=6*LL + ELSE + LL=1 + IZZ=1 + ENDIF + IZON=IZON+IZZ + 671 CONTINUE + IMERG=IMERG+IMERMX + IF(LGMERG) THEN + DO 681 KY=1,ISTO + IF(IMERG.EQ.ITRN(KXI+KY)) THEN + IMMS=ITRN(2*KXI+KY) + IBSS=KVOL(IMMS+1) + KVOL(ISS+1)=IBSS + ITRN(ISS+1)=ITRN(IMMS+1) + GOTO 781 + ENDIF + 681 CONTINUE + ENDIF + ITRN(KXI+ISTO+1)=IMERG + ITRN(2*KXI+ISTO+1)=ISS + ISTO=ISTO+1 + KVOL(ISS+1)=IVOL+1 + IVOL=IVOL+IZON + ITRN(ISS+1)=IVOL-IZZ+LL*ROT(KNUM(NXI+IFRT+1)) + 781 CONTINUE + 682 CONTINUE + 582 CONTINUE + ENDIF + 182 CONTINUE +*--- RECHERCHE DU NOMBRE DE SURFACES QUE PRESENTE LA SYMETRIE + ICCOIN=-1 + JCCOIN=-1 + KCCOIN=-1 + MROT=6 + NCPER=0 + IF(IHEX.EQ.1) THEN + NCPER=NINT(REAL(NCOUR)/2.) + ELSEIF(IHEX.EQ.2) THEN + NCPER=NCOUR + MROT=3 + ELSEIF(IHEX.EQ.3) THEN + NCPER=2*NINT(REAL(NCOUR)/2.)-1 + ICCOIN=LXI-NINT(REAL(NCPER)/2.)+1 + MROT=3 + ELSEIF(IHEX.EQ.4) THEN + NCPER=3*NINT(REAL(NCOUR)/2.)-2 + IF(MOD(NCOUR,2).EQ.0)NCPER=NCPER+1 + ICCOIN=LXI-NCPER+NINT(REAL(NCOUR)/2.) + MROT=2 + ELSEIF(IHEX.EQ.5) THEN + NCPER=1 + IF(NCOUR.GT.1)NCPER=2*(NCOUR-1) + ICCOIN=LXI-NCPER+NCOUR-1 + KCCOIN=LXI + MROT=3 + ELSEIF(IHEX.EQ.6) THEN + NCPER=1 + IF(NCOUR.GT.1)NCPER=4+3*(NCOUR-2)-1 + KCCOIN=LXI-NCPER+NCOUR-1 + ICCOIN=KCCOIN+NCOUR-1 + JCCOIN=ICCOIN+NCOUR-1 + MROT=2 + ELSEIF(IHEX.EQ.7) THEN + NCPER=1 + IF(NCOUR.GT.1)NCPER=3*NCOUR-2 + ICCOIN=LXI-NCOUR+1 + KCCOIN=ICCOIN-NCOUR+1 + MROT=1 + ELSEIF(IHEX.EQ.8) THEN + NCPER=1 + IF(NCOUR.GT.1)NCPER=2*(NCOUR+NINT(REAL(NCOUR)/2.))-3 + JCCOIN=LXI-NINT(REAL(NCOUR)/2.)+1 + KCCOIN=JCCOIN-NCOUR+1 + ICCOIN=KCCOIN-NCOUR+1 + MROT=1 + ELSEIF(IHEX.EQ.9) THEN + MROT=1 + NCPER=1 + IF(NCOUR.GT.1) NCPER=6*(NCOUR-1) + ICCOIN=IFONC(NCOUR,0) + JCCOIN=IFONC(NCOUR,1) + KCCOIN=IFONC(NCOUR,2) + ELSE + CALL XABORT('MESHST: INVALID TYPE OF SYMETRIE ') + ENDIF + ISURSY=0 + ISAUX=1 + MSMAX=0 + ISSXX=0 + IPPZ=LZF + IPP1=IPLANZ + IF(MCODE.GT.0) IPP1=IPLANI + ISXY(:6,:IPP1)=0 + IXP=0 + DO 500 JP=1,IPPZ + MXI=LXI*(JP-1) + DO 501 IP=IXP+1,IXP+ISPZ(JP) + ISURB6=0 + ITT9=NUMG(LXI+MXI) + ISURSX=IOF(ITT9)%I2(ICC(ITT9)+1)-1 + KSURBX=ISURSX + IF(ISURSX.EQ.0) THEN + ISURSX=1 + KSURBX=1 + ENDIF + JSECT=0 + DO 183 K1=LXI+MXI,LXI+MXI-NCPER+1,-1 + K=NUMG(K1) + JSECT=IOF(K)%I2(ICC(K)+1) + ICX=2 + IF(IHEX.GT.2) THEN + IF(K1.EQ.ICCOIN+MXI)ICX=3 + IF(K1.EQ.JCCOIN+MXI)ICX=3 + IF(K1.EQ.KCCOIN+MXI)ICX=3 + IF(IHEX.EQ.9) THEN + IF(K1.EQ.MXI+IFONC(NCOUR,3))ICX=3 + IF(K1.EQ.MXI+IFONC(NCOUR,4))ICX=3 + IF(K1.EQ.MXI+IFONC(NCOUR,5))ICX=3 + ENDIF + IF(K1.GE.ICCOIN+MXI) THEN + IF(IHEX.LE.4) THEN + IF(K1.EQ.MXI+LXI.AND.MOD(NCOUR,2).NE.0) THEN + ICY=1 + IF(IHEX.EQ.4)ICY=2 + ISURB6=ISURB6+ICY*(JSECT-1) + IF(JSECT.EQ.1)ISURB6=ISURB6+ICY + IF(IHEX.EQ.3) ICX=1 + ELSE + ISURB6=ISURB6+2*(JSECT-1) + IF(JSECT.EQ.1)ISURB6=ISURB6+2 + ENDIF + ELSE + ICZ=ICX + IF(K1.EQ.ICCOIN+MXI)ICZ=2 + ISURB6=ISURB6+ICZ*(JSECT-1) + IF(JSECT.EQ.1)ISURB6=ISURB6+ICZ + ENDIF + ENDIF + ENDIF + IF(JSECT.GT.1) THEN + ISURSY=ISURSY+ICX*(JSECT-1) + ELSE + ISURSY=ISURSY+ICX + ENDIF + 183 CONTINUE + IDEBX=2 + IF(JSECT.GT.1)IDEBX=JSECT + IF(IHEX.EQ.1.OR.IHEX.EQ.3.OR.IHEX.EQ.4.OR.IHEX.EQ.8) THEN + IF(MOD(NCOUR,2).NE.0) THEN + IF(JSECT.GT.1) THEN + ISURSY=ISURSY-JSECT+1 + ELSE + ISURSY=ISURSY-1 + ENDIF + IF(IHEX.EQ.8) THEN + ISURSY=ISURSY-ISURSX + ISURB6=ISURB6-ISURSX + ENDIF + ENDIF + ENDIF + ISXY(1,IP)=ISURSY + ISXY(2,IP)=ISURSX + ISXY(3,IP)=ISURB6 + ISXY(4,IP)=IDEBX+ISAUX-1 + ISXY(5,IP)=KSURBX + ISXY(6,IP)=ISAUX + ISAUX=ISURSY+1 + MSMAX=MSMAX+ISURSY-ISSXX + ISSXX=ISURSY + 501 CONTINUE + IXP=IXP+ISPZ(JP) + 500 CONTINUE + DEALLOCATE(KNUM,NUMG,ISPZ) + ENDIF + DEALLOCATE(ICELL) + NBASE=NCEL+NCEL + IF(LGTURN)NBASE=NBASE+NCEL + ALLOCATE(IBB(NBASE)) + CALL LCMSIX(IPTRK,'DATA_DUP',1) + CALL LCMGET(IPTRK,'GENERATING',IBB) + CALL LCMGET(IPTRK,'MERGE',IBB(NCEL+1)) + IF(LGTURN)CALL LCMGET(IPTRK,'TURN',IBB(2*NCEL+1)) + CALL LCMSIX(IPTRK,' ',2) + VOL1(:NCPHY)=0 + VTURN(:NCPHY)=0 + IAUX=IPOINT + IFVOL=1 + MVOL=0 + ICELC0=IFONC(NCOUR,0) + ICELC1=IFONC(NCOUR,1)-ICELC0 + JVOL=1 + IVOL=0 + ISURB=NSMIN + JSURB=0 + DO 100 I=1,NCEL + NVOL(I)=JVOL + IF(LG3D) THEN + DO 40 J=1,LZZ + NCC=J*LX + IF(I.LE.NCC) THEN + Z=ZZZ(J) + GO TO 42 + ENDIF + 40 CONTINUE + ENDIF + 42 CONTINUE + MCYL=ICC(IBB(I)) + IF(MCYL.GT.0) THEN +* +* STORAGE DES COORDONNEES DES CYLINDRES +* ==> ATTENTION: LES AXES DES CYLINDRES SONT SELON Z +* + DO 43 J=1,MCYL + IAUX=IAUX+1 + REMESH(IAUX)=IOF(IBB(I))%R(J+1) + 43 CONTINUE + ENDIF + NCYL(I)=MCYL + NZONE1=1+MCYL + NZONE=0 + DO 60 IA=1,NZONE1 + NZONE=NZONE+IOF(IBB(I))%I2(IA) + 60 CONTINUE + NSECTO=IOF(IBB(I))%I2(NZONE1) + MCPHY=IBB(NCEL+I) + IV1=VOL1(MCPHY) + IF(IV1.GT.0) THEN + IF(LGTURN) THEN + JVT=PHTURN(MCPHY) + IVTURN=VTURN(MCPHY) + ITURN=IBB(2*NCEL+I) + KAUX=NSECTO-1 + IF(ITURN.LE.6) THEN + IF(ITURN.NE.6)KAUX=KAUX*(ITURN+1) + ELSEIF(ITURN.GE.9) THEN + KAUX=(ITURN-8)*KAUX + ELSEIF(ITURN.EQ.7) THEN + KAUX=5*KAUX + ENDIF + ENDIF + ELSE + KVOL1=1 + IF(MCPHY.GT.1)KVOL1=VOL1(MCPHY-1) + KVOL2=KVOL1+NZONE-1 + IF(LGTURN) THEN + ITURN=IBB(2*NCEL+I) + PHTURN(MCPHY)=ITURN + IF(ITURN.LE.6) THEN + IF(ITURN.EQ.6) THEN + VTURN(MCPHY)=KVOL2+NSECTO-1 + ELSE + VTURN(MCPHY)=KVOL2+(NSECTO-1)*(ITURN+1) + ENDIF + ELSEIF(ITURN.GE.8) THEN + VTURN(MCPHY)=KVOL2+(NSECTO-1)*(ITURN-8)+1 + ELSE + VTURN(MCPHY)=KVOL2+(NSECTO-1)*5+1 + ENDIF + ENDIF + VOL1(MCPHY)=KVOL2+1 + ENDIF + VOLUM1=0. + IF(LG3D) THEN + IF(IPLANZ.GT.1) THEN + IF(I.LE.STAIRS(1)) THEN + FACB(I)=KSURF1 + ELSEIF(I.GT.STAIRS(IPLANZ-1)) THEN + ISUR=ISUR+1 + FACB(LX+ISUR)=KSURF2 + ENDIF + ELSE + FACB(I)=KSURF1 + FACB(LX+I)=KSURF2 + ENDIF + Z=REMESH(2*NCEL+I) + IF(I.GT.STAIRS(1)) THEN + IST=1 + DO 329 IY=2,LZZ + IF(I.LE.STAIRS(IY)) THEN + IST=IY-1 + GOTO 339 + ENDIF + 329 CONTINUE + 339 KZAUX=I-STAIRS(IST) + IF(IST.GT.1)KZAUX=KZAUX+STAIRS(IST-1) + Z=Z-REMESH(2*NCEL+KZAUX) + ENDIF + ENDIF + KSECTX=IOF(IBB(I))%I2(NZONE1) + NZZ=NZONE1 + IF(KSECTX.GT.3)NZZ=NZONE1-1 + DO 45 J=1,NZZ + MIXX=IOF(IBB(I))%I1(J) + KSECT=IOF(IBB(I))%I2(J) + NAUX=1 + IF(KSECT.GT.1) NAUX=6*(KSECT-1) + IVOL=IVOL+NAUX + MVOL=MVOL+1 + NSECT(MVOL)=KSECT + KREG=KREG+1 + IF(J.EQ.NZONE1) THEN + VOLUM2=VEX + ELSE + R=IOF(IBB(I))%R(J+1) + VOLUM2=PI*R*R + ENDIF + VOLUMS=0.0 + VOLUME=(VOLUM2-VOLUM1)/REAL(NAUX) + IF(LG3D) THEN + VOLUMS=VOLUME*.25 + VOLUME=VOLUME*Z +* +* SURFACES SUPERIEURES ET INFERIEURES (SELON L'AXE Z) +* + IF(IPLANZ.GT.1) THEN + IF(I.LE.STAIRS(1)) THEN + KSURF1=KSURF1+1 + NSURF1=NSURF1-1 + VOLSUR(NSURF1)=VOLUMS + ELSEIF(I.GT.STAIRS(IPLANZ-1)) THEN + KSURF2=KSURF2+1 + NSURF2=NSURF2-1 + VOLSUR(NSURF2)=VOLUMS + ENDIF + ELSE + KSURF1=KSURF1+1 + NSURF1=NSURF1-1 + VOLSUR(NSURF1)=VOLUMS + KSURF2=KSURF2+1 + NSURF2=NSURF2-1 + VOLSUR(NSURF2)=VOLUMS + ENDIF + ENDIF + VOLUM1=VOLUM2 + VOLSUR(KREG)=VOLUME + MATALB(KREG)=MIXX + DO 44 K=2,NAUX + KREG=KREG+1 + VOLSUR(KREG)=VOLUME + MATALB(KREG)=MIXX + IF(LG3D) THEN + IF(IPLANZ.GT.1) THEN + IF(I.LE.STAIRS(1)) THEN + KSURF1=KSURF1+1 + NSURF1=NSURF1-1 + VOLSUR(NSURF1)=VOLUMS + ELSEIF(I.GT.STAIRS(IPLANZ-1)) THEN + KSURF2=KSURF2+1 + NSURF2=NSURF2-1 + VOLSUR(NSURF2)=VOLUMS + ENDIF + ELSE + KSURF1=KSURF1+1 + NSURF1=NSURF1-1 + VOLSUR(NSURF1)=VOLUMS + KSURF2=KSURF2+1 + NSURF2=NSURF2-1 + VOLSUR(NSURF2)=VOLUMS + ENDIF + ENDIF + 44 CONTINUE + 45 CONTINUE + ICXX=LX*INT(AINT(REAL(I/(LX+1)))) + ICELC=ICELC0+ICXX + ICLIM=LX+ICXX + IF(KSECTX.GT.3) THEN +* +* TRAITEMENT DU VOLUME A BORDURE HEXAGONALE DANS LE CAS OU KSECT>3 +* + KSECT=KSECTX + MIXX=IOF(IBB(I))%I1(NZONE1+1) + NAUX=6*(KSECT-1) + IVOL=IVOL+NAUX + MVOL=MVOL+1 + NSECT(MVOL)=KSECT + VCYL=VOLUM1/REAL(NAUX) + SAUX=0. + IXX0=KREG + ISS0=NSURF1 + JSS0=NSURF2 + DO 445 M=1,KSECT-1 + IXX=IXX0 + ISS1=ISS0 + ISS2=JSS0 + XTAN=TAN(REAL(M)*PI/(3*(KSECT-1))) + SAUX1=XTAN/(1.+XTAN/SQRT3) + VOLUME=.5*SIDE*SIDE*(SAUX1-SAUX) + VOLUME=VOLUME-VCYL + VOLUMS=VOLUME + IF(LG3D) VOLUME=VOLUME*Z + DO 444 K=1,6 + IXX=IXX+1 + KREG=KREG+1 + VOLSUR(IXX)=VOLUME + MATALB(IXX)=MIXX + IF(LG3D) THEN + IF(IPLANZ.GT.1) THEN + IF(I.LE.STAIRS(1)) THEN + KSURF1=KSURF1+1 + NSURF1=NSURF1-1 + ISS1=ISS1-1 + VOLSUR(ISS1)=VOLUMS + ELSEIF(I.GT.STAIRS(IPLANZ-1)) THEN + KSURF2=KSURF2+1 + NSURF2=NSURF2-1 + ISS2=ISS2-1 + VOLSUR(ISS2)=VOLUMS + ENDIF + ELSE + KSURF1=KSURF1+1 + NSURF1=NSURF1-1 + ISS1=ISS1-1 + VOLSUR(ISS1)=VOLUMS + KSURF2=KSURF2+1 + NSURF2=NSURF2-1 + ISS2=ISS2-1 + VOLSUR(ISS2)=VOLUMS + ENDIF + ISS1=ISS1-KSECT+2 + ISS2=ISS2-KSECT+2 + ENDIF + IXX=IXX+KSECT-2 + 444 CONTINUE + IF(I.GE.ICELC.AND.I.LE.ICLIM) THEN + SURF=.5*SIDE*(SAUX1-SAUX)/SQRT3 + IF(LG3D)SURF=SURF*Z + JSUR=JSUR-1 + VOLSUR(JSUR)=SURF + IJSUR=JSUR-KSECT+1 + VOLSUR(IJSUR)=SURF + IF(MOD(I-ICELC,ICELC1).EQ.0) THEN + IJSUR=IJSUR-KSECT+1 + VOLSUR(IJSUR)=SURF + ENDIF + ENDIF + IXX0=IXX0+1 + ISS0=ISS0-1 + JSS0=JSS0-1 + SAUX=SAUX1 + 445 CONTINUE + IF(I.GE.ICELC.AND.I.LE.ICLIM) THEN + JSUR=JSUR-KSECT+1 + JSURB=JSURB+2 + SURB(JSURB-1)=ISURB + KKB=KSECT-1 + ISURB=ISURB+KKB+KKB + SURB(JSURB)=ISURB-KKB + IF(MOD(I-ICELC,ICELC1).EQ.0) THEN + JSUR=JSUR-KSECT+1 + JSURB=JSURB+1 + SURB(JSURB)=ISURB + ISURB=ISURB+KKB + ENDIF + ENDIF + ELSE + IF(I.GE.ICELC.AND.I.LE.ICLIM) THEN + SURF=SIDE*.25 + IF(LG3D)SURF=SURF*Z + KKB=1 + IF(KSECT.GT.1) THEN + KKB=KSECT-1 + SURF=SURF/KKB + ENDIF + DO 99 IXX=1,KKB + JSUR=JSUR-2 + VOLSUR(JSUR)=SURF + VOLSUR(JSUR+1)=SURF + IF(MOD(I-ICELC,ICELC1).EQ.0) THEN + JSUR=JSUR-1 + VOLSUR(JSUR)=SURF + ENDIF + 99 CONTINUE + JSURB=JSURB+2 + SURB(JSURB-1)=ISURB + ISURB=ISURB+KKB+KKB + SURB(JSURB)=ISURB-KKB + IF(MOD(I-ICELC,ICELC1).EQ.0) THEN + JSURB=JSURB+1 + SURB(JSURB)=ISURB + ISURB=ISURB+KKB + ENDIF + ENDIF + ENDIF + JVOL=IVOL+1 + FVOL(I)=IFVOL + IFVOL=IFVOL+NZONE1 + 100 CONTINUE + DO 110 I=1,ISTAT9 + DEALLOCATE(IOF(I)%I1,IOF(I)%I2) + IF(ICC(I).GT.0) DEALLOCATE(IOF(I)%R) + 110 CONTINUE + DEALLOCATE(IOF,ICC) + ELSE +* +* CAS DE CELLULE HOMOGENES +* + ALLOCATE(IBB(2*NCEL)) + CALL LCMSIX(IPTRK,'DATA_DUP',1) + CALL LCMGET(IPTRK,'MERGE',IBB) + CALL LCMGET(IPTRK,'MIX',IBB(NCEL+1)) + CALL LCMSIX(IPTRK,' ',2) + CALL LCMLEN(IPGEOM,'SECTOR',ILENS,ITP) + ALLOCATE(ICC(NCEL)) + IF(ILENS.GT.0) THEN + CALL XABORT('MESHST: SECTORS NOT IMPLEMENTED.') + ELSE + ICC(:NCEL)=1 + ENDIF + IF(LGTURN) THEN + CALL LCMSIX(IPTRK,'DATA_DUP',1) + ALLOCATE(ITT(NCEL)) + CALL LCMGET(IPTRK,'TURN',ITT) + CALL LCMSIX(IPTRK,' ',2) + ENDIF + VOL1(:NCPHY)=0 + IFVOL=1 + MVOL=0 + ICELC0=IFONC(NCOUR,0) + ICELC1=IFONC(NCOUR,1)-ICELC0 + JVOL=1 + IVOL=0 + ISURB=NSMIN + JSURB=0 + DO 200 I=1,NCEL + NVOL(I)=JVOL + NSECTO=ICC(I) + ICXX=LX*INT(AINT(REAL(I/(LX+1)))) + ICELC=ICELC0+ICXX + ICLIM=LX+ICXX + NSECT(I)=NSECTO + NCYL(I)=0 + NZONE=1 + IF(NSECTO.GT.1)NZONE=6*(NSECTO-1) + IVOL=IVOL+NZONE + JVOL=IVOL+1 + MCPHY=IBB(I) + IV1=VOL1(MCPHY) + IF(IV1.GT.0) THEN + IF(LGTURN) THEN + JVT=PHTURN(MCPHY) + IVTURN=VTURN(MCPHY) + KAUX=NSECTO-1 + ITURN=ITT(I) + IF(ITURN.LE.6) THEN + IF(ITURN.NE.6)KAUX=KAUX*(ITURN+1) + ELSEIF(ITURN.GE.9) THEN + KAUX=(ITURN-8)*KAUX + ELSEIF(ITURN.EQ.7) THEN + KAUX=5*KAUX + ENDIF + ENDIF + ELSE + KVOL1=1 + IF(MCPHY.GT.1)KVOL1=VOL1(MCPHY-1) + KVOL2=KVOL1+NZONE-1 + IF(LGTURN) THEN + ITURN=ITT(I) + PHTURN(MCPHY)=ITURN + IF(ITURN.LE.6) THEN + IF(ITURN.EQ.6) THEN + VTURN(MCPHY)=KVOL2+NSECTO-1 + ELSE + VTURN(MCPHY)=KVOL2+(NSECTO-1)*(ITURN+1) + ENDIF + ELSEIF(ITURN.GE.8) THEN + VTURN(MCPHY)=KVOL2+(NSECTO-1)*(ITURN-8)+1 + ELSE + VTURN(MCPHY)=KVOL2+(NSECTO-1)*5+1 + ENDIF + ENDIF + VOL1(MCPHY)=KVOL2+1 + ENDIF + IF(NSECTO.LE.3) THEN + IF(I.GE.ICELC.AND.I.LE.ICLIM) THEN + SURF=SIDE*.25 + IF(LG3D)SURF=SURF*Z + KKB=1 + IF(NSECTO.GT.1) THEN + KKB=NSECTO-1 + SURF=SURF/(NSECTO-1) + ENDIF + DO 556 IXX=1,KKB + JSUR=JSUR-2 + VOLSUR(JSUR)=SURF + VOLSUR(JSUR+1)=SURF + IF(MOD(I-ICELC,ICELC1).EQ.0) THEN + JSUR=JSUR-1 + VOLSUR(JSUR)=SURF + ENDIF + 556 CONTINUE + JSURB=JSURB+2 + SURB(JSURB-1)=ISURB + ISURB=ISURB+KKB+KKB + SURB(JSURB)=ISURB-KKB + IF(MOD(I-ICELC,ICELC1).EQ.0) THEN + JSURB=JSURB+1 + SURB(JSURB)=ISURB + ISURB=ISURB+KKB + ENDIF + ENDIF + VOLUMS=0.0 + VOLUME=VEX/NZONE + IF(LG3D) THEN + Z=REMESH(2*NCEL+I) + IF(I.GT.STAIRS(1)) THEN + IST=1 + DO 429 IY=2,LZZ + IF(I.LE.STAIRS(IY)) THEN + IST=IY-1 + GOTO 439 + ENDIF + 429 CONTINUE + 439 KZAUX=I-STAIRS(IST) + IF(IST.GT.1)KZAUX=KZAUX+STAIRS(IST-1) + Z=Z-REMESH(2*NCEL+KZAUX) + ENDIF + VOLUMS=VOLUME*.25 + VOLUME=VOLUME*Z +* +* SURFACES SUPERIEURES ET INFERIEURES (SELON L'AXE Z) +* + IF(IPLANZ.GT.1) THEN + IF(I.LE.STAIRS(1)) THEN + FACB(I)=KSURF1 + KSURF1=KSURF1+1 + NSURF1=NSURF1-1 + VOLSUR(NSURF1)=VOLUMS + ELSEIF(I.GT.STAIRS(IPLANZ-1)) THEN + ISUR=ISUR+1 + FACB(LX+ISUR)=KSURF2 + KSURF2=KSURF2+1 + NSURF2=NSURF2-1 + VOLSUR(NSURF2)=VOLUMS + ENDIF + ELSE + FACB(I)=KSURF1 + FACB(LX+I)=KSURF2 + KSURF1=KSURF1+1 + NSURF1=NSURF1-1 + VOLSUR(NSURF1)=VOLUMS + KSURF2=KSURF2+1 + NSURF2=NSURF2-1 + VOLSUR(NSURF2)=VOLUMS + ENDIF + ENDIF + MIXX=IBB(NCEL+I) + DO 65 J=1,NZONE + KREG=KREG+1 + VOLSUR(KREG)=VOLUME + MATALB(KREG)=MIXX + IF(LG3D) THEN + IF(IPLANZ.GT.1) THEN + IF(I.LE.STAIRS(1)) THEN + KSURF1=KSURF1+1 + NSURF1=NSURF1-1 + VOLSUR(NSURF1)=VOLUMS + ELSEIF(I.GT.STAIRS(IPLANZ-1)) THEN + KSURF2=KSURF2+1 + NSURF2=NSURF2-1 + VOLSUR(NSURF2)=VOLUMS + ENDIF + ELSE + KSURF1=KSURF1+1 + NSURF1=NSURF1-1 + VOLSUR(NSURF1)=VOLUMS + KSURF2=KSURF2+1 + NSURF2=NSURF2-1 + VOLSUR(NSURF2)=VOLUMS + ENDIF + ENDIF + 65 CONTINUE + ELSE +* +* TRAITEMENT DU CAS OU NSECTO>3 +* + KSECT=NSECTO + MIXX=IBB(NCEL+I) + NAUX=6*(KSECT-1) + IVOL=IVOL+NAUX + MVOL=MVOL+1 + NSECT(MVOL)=KSECT + SAUX=0. + IXX0=KREG + ISS0=NSURF1 + JSS0=NSURF2 + DO 555 M=1,KSECT-1 + IXX=IXX0 + ISS1=ISS0 + ISS2=JSS0 + XTAN=TAN(REAL(M)*PI/(3*(KSECT-1))) + SAUX1=XTAN/(1.+XTAN/SQRT3) + VOLUME=.5*SIDE*SIDE*(SAUX1-SAUX) + VOLUMS=VOLUME + IF(LG3D) VOLUME=VOLUME*Z + DO 554 K=1,6 + IXX=IXX+1 + KREG=KREG+1 + VOLSUR(IXX)=VOLUME + MATALB(IXX)=MIXX + IF(LG3D) THEN + IF(IPLANZ.GT.1) THEN + IF(I.LE.STAIRS(1)) THEN + KSURF1=KSURF1+1 + NSURF1=NSURF1-1 + ISS1=ISS1-1 + VOLSUR(ISS1)=VOLUMS + ELSEIF(I.GT.STAIRS(IPLANZ-1)) THEN + KSURF2=KSURF2+1 + NSURF2=NSURF2-1 + ISS2=ISS2-1 + VOLSUR(ISS2)=VOLUMS + ENDIF + ELSE + KSURF1=KSURF1+1 + NSURF1=NSURF1-1 + ISS1=ISS1-1 + VOLSUR(ISS1)=VOLUMS + KSURF2=KSURF2+1 + NSURF2=NSURF2-1 + ISS2=ISS2-1 + VOLSUR(ISS2)=VOLUMS + ENDIF + ISS1=ISS1-KSECT+2 + ISS2=ISS2-KSECT+2 + ENDIF + IXX=IXX+KSECT-2 + 554 CONTINUE + IF(I.GE.ICELC.AND.I.LE.ICLIM) THEN + SURF=.5*SIDE*(SAUX1-SAUX)/SQRT3 + IF(LG3D)SURF=SURF*Z + JSUR=JSUR-1 + VOLSUR(JSUR)=SURF + IJSUR=JSUR-KSECT+1 + VOLSUR(IJSUR)=SURF + IF(MOD(I-ICELC,ICELC1).EQ.0) THEN + IJSUR=IJSUR-KSECT+1 + VOLSUR(IJSUR)=SURF + ENDIF + ENDIF + IXX0=IXX0+1 + ISS0=ISS0-1 + JSS0=JSS0-1 + SAUX=SAUX1 + 555 CONTINUE + IF(I.GE.ICELC.AND.I.LE.ICLIM) THEN + JSUR=JSUR-KSECT+1 + JSURB=JSURB+2 + SURB(JSURB-1)=ISURB + KKB=KSECT-1 + ISURB=ISURB+KKB+KKB + SURB(JSURB)=ISURB-KKB + IF(MOD(I-ICELC,ICELC1).EQ.0) THEN + JSUR=JSUR-KSECT+1 + JSURB=JSURB+1 + SURB(JSURB)=ISURB + ISURB=ISURB+KKB + ENDIF + ENDIF + ENDIF + FVOL(I)=IFVOL + IFVOL=IFVOL+1 + 200 CONTINUE + DEALLOCATE(ICC) + IF(LGTURN) DEALLOCATE(ITT) + ENDIF + IF(LG3D) DEALLOCATE(ZZZ) +* +*--- CONSTRUCTION DU VECTEUR VSYM QUI CONTIENT POUR CHAQUE VOLUME DE +*--- DE L'ASSEMBLAGE SON EQUIVALENT DANS LA SYMETRIE D'ENTREE +* + IF(LGCELL.AND.(IHEX.LE.9)) THEN + ALLOCATE(IAA(NCEL)) + CALL LCMSIX(IPTRK,'DATA_DUP',1) + CALL LCMGET(IPTRK,'GENER0',IAA) + CALL LCMSIX(IPTRK,' ',2) + IXV=0 + DO 300 IC=1,NCEL + MCYL=NCYL(IC) + LFROT=ROT(IBB(2*NCEL+IC)) + IVFIN=KVOL(IAA(IC)) + IVORIN=ITRN(IAA(IC)) + IVMIN=IVFIN + IVSYM=NVOL(IC) + IXX=IXV + NZON=0 + DO 310 I=1,MCYL + IXX=IXX+1 + LSECT=NSECT(IXX) + IF(LSECT.GT.1) THEN + NZON=NZON+6*(LSECT-1) + ELSE + NZON=NZON+1 + ENDIF + 310 CONTINUE + LSECT=NSECT(IXX+1) + IF(LSECT.GT.1) THEN + IVAUX=INT(REAL(IVORIN-IVFIN-NZON+1)/REAL(LSECT-1)) + ELSE + IVAUX=IVORIN-IVFIN-NZON+1 + ENDIF + DO 320 K=1,MCYL+1 + IXV=IXV+1 + LSECT=NSECT(IXV) + IF(LSECT.EQ.1) THEN + VSYM(IVSYM)=IVMIN + IVMAX=IVMIN + ELSE + IVOR=IVMIN+IVAUX*(LSECT-1)-1 + IVV=LFROT-1 + IVSYM0=IVSYM + IVSYM=IVSYM+6*(LSECT-1)-1 + IVMAX=IVMIN+6*(LSECT-1)-1 + IF(IBB(2*NCEL+IC).LE.6) THEN + IVV1=LFROT*(LSECT-1) + IVV=(5-IVV)*(LSECT-1) + ELSE + IVV1=IVV*(LSECT-1)+1 + IVV=(6-IVV)*(LSECT-1)-1 + ENDIF + IF(IBB(2*NCEL+IC).LE.6) THEN + KVV=IVSYM-IVV + KVOR=IVOR + DO 315 L=KVV,IVSYM + VSYM(L)=KVOR + KVOR=KVOR+1 + IF(KVOR.GT.IVMAX)KVOR=IVMIN + 315 CONTINUE + DO 316 L=IVSYM0,KVV-1 + VSYM(L)=KVOR + KVOR=KVOR+1 + IF(KVOR.GT.IVMAX)KVOR=IVMIN + 316 CONTINUE + ELSE + KVV=IVSYM0+IVV1-1 + KVOR=IVOR + DO 317 L=KVV,IVSYM0,-1 + VSYM(L)=KVOR + KVOR=KVOR+1 + IF(KVOR.GT.IVMAX)KVOR=IVMIN + 317 CONTINUE + DO 318 L=IVSYM,KVV+1,-1 + VSYM(L)=KVOR + KVOR=KVOR+1 + IF(KVOR.GT.IVMAX)KVOR=IVMIN + 318 CONTINUE + ENDIF + ENDIF + IVMIN=IVMAX+1 + IVSYM=IVSYM+1 + 320 CONTINUE + 300 CONTINUE + DEALLOCATE(IAA) +*--- CONSTRUCTION DU VECTEUR SSYM QUI CONTIENT POUR CHAQUE SURFACE +*--- DE L'ASSEMBLAGE SON EQUIVALENT DANS LA SYMETRIE D'ENTREE + ISY=0 + MSAUX=NS + ISYX=NSMIN+1 + IVLMAX=0 + IF(LG3D) THEN + MSAUX=(NS-NSMIN-NSMAX)/IPLANZ +*--- CAS DE LA SYMETRIE Z- (MCODE=1) SSYM EST REMPLIT PLUS LOIN + IF(MCODE.NE.1) THEN + IF(IHEX.NE.9) THEN + DO 301 ISUR=1,NSMIN + SSYM(ISUR)=VSYM(ISUR) + IVLMAX=MAX(IVLMAX,VSYM(ISUR)) + 301 CONTINUE + ELSE + DO 311 ISUR=1,NSMIN + SSYM(ISUR)=ISUR + 311 CONTINUE + IVLMAX=NSMIN + ENDIF + ENDIF + ISY=NSMIN + ENDIF + IPPZ=IPP1 + NSAUX=0 + IF(MCODE.EQ.1) THEN + DO 302 IPPX=IPPZ+1,IPLANZ + NSAUX=NSAUX+(SURL(IPPX)-SURL(IPPX-1)) + 302 CONTINUE + ISYX=ISYX+NSAUX + ENDIF + MSAUX=0 + ISYAUX=ISYX + LSMAX=NSMIN+NSAUX + IF(MCODE.EQ.0) LSMAX=NS + LSPLZM=2*IPPZ-IPLANZ + DO 600 IP=1,IPPZ + IF(LG3D) THEN + IF(MCODE.EQ.1) THEN + LSMAX=LSMAX+(SURL(IPPZ-LSPLZM+IP)-SURL(IPPZ-LSPLZM-1+IP)) + ISYAUX=ISYAUX+MSAUX + MSAUX=SURL(IPPZ-LSPLZM+IP)-SURL(IPPZ-LSPLZM-1+IP) + ELSE + LSMAX=NSMIN+SURL(IP) + ISYAUX=ISYX+MSAUX + MSAUX=SURL(IP) + ENDIF + ENDIF + ISY=ISYAUX-1 + ISURSY=ISXY(1,IP) + ISURSX=ISXY(2,IP) + ISURB6=ISXY(3,IP) + IDEBX=ISXY(4,IP) + KSURBX=ISXY(5,IP) + ISAUX=ISXY(6,IP) + IDDX=ISURSX + KX2=ISURSY + KX1=ISURSY-ISURSX+1 + KXP=1 + IF(IHEX.GE.3) THEN + ISY=ISURB6+ISY + IF(IHEX.EQ.3.OR.IHEX.EQ.8) THEN + IDDX=0 + KX2=KX1 + KX1=ISURSY + KXP=-1 + ENDIF + IF(IHEX.EQ.4.OR.IHEX.EQ.7)ISY=ISY-KSURBX + ENDIF + IDEB=ISAUX + IF(IHEX.EQ.2.OR.IHEX.EQ.7)IDEB=IDEBX + IF(IHEX.EQ.5.OR.IHEX.EQ.6) THEN + IDDX=-ISURSY + ISURSX=0 + ISURSY=0 + KX1=0 + KX2=-1 + ENDIF + DO 400 I=1,MROT + DO 349 K=KX1,KX2,KXP + ISY=ISY+1 + IF(IHEX.GE.3) THEN + IF(ISY.GT.LSMAX) ISY=ISYAUX + ENDIF + SSYM(ISY)=K+IVLMAX + 349 CONTINUE + IF(IHEX.LT.9) THEN + DO 350 K=ISURSY-ISURSX,ISAUX,-1 + ISY=ISY+1 + IF(IHEX.GE.3) THEN + IF(ISY.GT.LSMAX) ISY=ISYAUX + ENDIF + SSYM(ISY)=K+IVLMAX + 350 CONTINUE + ENDIF + DO 351 K=IDEB,ISURSY-IDDX + ISY=ISY+1 + IF(IHEX.GE.3) THEN + IF(ISY.GT.LSMAX) ISY=ISYAUX + ENDIF + SSYM(ISY)=K+IVLMAX + 351 CONTINUE + 400 CONTINUE + 600 CONTINUE +* +*---SURFACE LATERALES SUPERIEURES DANS LE CAS 3D +* + IF(LG3D) THEN + IYAUX=0 + IF(MCODE.LE.1) THEN + IF(IPLANZ.GT.1) THEN + IYAUX=IVLMAX + DO 599 II=NSMIN+1,NV-NSMAX + IYAUX=MAX(VSYM(II),IYAUX) + 599 CONTINUE + ENDIF + IF(IHEX.NE.9) THEN + IAUX=NV-NSMAX + DO 601 II=NS-NSMAX+1,NS + IAUX=IAUX+1 + SSYM(II)=IVLMAX+MSMAX+VSYM(IAUX)-IYAUX + 601 CONTINUE + ELSE + IAUX=0 + IF(MCODE.GT.0) THEN + KSAUX=SURL(IPLANI) + ELSE + KSAUX=SSYM(NS-NSMAX) + ENDIF + DO 611 II=NS-NSMAX+1,NS + IAUX=IAUX+1 + SSYM(II)=IAUX+KSAUX + 611 CONTINUE + ENDIF + ENDIF +*--- CAS DE SYMETRIE Z- + IF(MCODE.EQ.1) THEN + IF(IHEX.NE.9) THEN + DO 602 IV=1,NSMAX + SSYM(IV)=IVLMAX+MSMAX+VSYM(IV)-IYAUX + 602 CONTINUE + ELSE + IVLAT=1 + IAUX=0 + JTX=NS-NSMAX + DO 612 IX1=1,NCOUR + DO 613 JX=JTX+VLAT(NCOUR+IX1),JTX+IVLAT,-1 + IAUX=IAUX+1 + SSYM(IAUX)=SSYM(JX) + 613 CONTINUE + DO 614 JX=JTX+VLAT(IX1),JTX+VLAT(NCOUR+IX1)+1,-1 + IAUX=IAUX+1 + SSYM(IAUX)=SSYM(JX) + 614 CONTINUE + IVLAT=VLAT(IX1)+1 + 612 CONTINUE + ENDIF + IFR=NSMIN + LSPLZM=2*IPLANI-IPLANZ + DO 605 IW=IPLANZ,IPPZ+1,-1 + DO 603 JW=SURL(IPLANZ+IW),SURL(IW-1)+1,-1 + IFR=IFR+1 + SSYM(IFR)=SSYM(NSMIN+JW) + 603 CONTINUE + DO 604 JW=SURL(IW),SURL(IPLANZ+IW)+1,-1 + IFR=IFR+1 + SSYM(IFR)=SSYM(NSMIN+JW) + 604 CONTINUE + 605 CONTINUE + ELSEIF(MCODE.EQ.2) THEN + IFR=NS-NSMAX+1 + MSUR=0 + LSPLZP=2*IPLANI-IPLANZ + DO 705 IW=1,IPPZ-LSPLZP + DO 704 JW=SURL(IPLANZ+IW)+1,SURL(IW) + IFR=IFR-1 + SSYM(IFR)=SSYM(NSMIN+JW) + 704 CONTINUE + DO 703 JW=MSUR+1,SURL(IPLANZ+IW) + IFR=IFR-1 + SSYM(IFR)=SSYM(NSMIN+JW) + 703 CONTINUE + MSUR=SURL(IW) + 705 CONTINUE + IF(IHEX.NE.9) THEN + IAUX=NV-NSMIN + DO 706 II=NS-NSMAX+1,NS + IAUX=IAUX+1 + SSYM(II)=VSYM(IAUX) + 706 CONTINUE + ELSE + IVLAT=1 + IAUX=NS-NSMAX + DO 712 IX1=1,NCOUR + DO 713 JX=VLAT(NCOUR+IX1),IVLAT,-1 + IAUX=IAUX+1 + SSYM(IAUX)=SSYM(JX) + 713 CONTINUE + DO 714 JX=VLAT(IX1),VLAT(NCOUR+IX1)+1,-1 + IAUX=IAUX+1 + SSYM(IAUX)=SSYM(JX) + 714 CONTINUE + IVLAT=VLAT(IX1)+1 + 712 CONTINUE + ENDIF + ENDIF + ENDIF + DEALLOCATE(IBB,KVOL,ITRN) + ELSE + DO 717 ISUR=1,NS + SSYM(ISUR)=ISUR + 717 CONTINUE + DO 718 IVOL=1,NV + VSYM(IVOL)=IVOL + 718 CONTINUE + ENDIF + DEALLOCATE(ISXY) +*---- +* SCRATCH STORAGE DEALLOCATION +*---- + 800 DEALLOCATE(PHTURN,VTURN,VOL1) + RETURN + END |
