chmslx
C CHMSLX SOURCE CHAT 05/01/12 22:00:10 5004 C======================================================================= C OBJET: SOLUTION DU PROBLEME PAR TRANSFORMATION EN RETOUR; C MODIFICATION AUTOMATIQUE DES CONDITIONS AUX LIMITES S'IL SE PRODUIT C UNE SURSATURATION OU UNE DISSOLUTION (DRAPEAU K DIFFERENT DE 1). C C ARGUMENT : KK, CRITERE DE TRAVAIL C C APPELLE CHMREX C C METHODE: EN PARTANT DE LA SOLUTION FOURNIE PAR CHMSLV, LES AUTRES C INCONNUES SONT OBTENUES PAR TRANSFORMATION EN RETOUR PROGRESSIVE; C LES VARIABLES CONCERNEES SONT AA, GC, CC, GX, TOT, XX, YY. C INITIALEMENT KK=0; C LES ESPECES DE TYPE VI SONT TESTEES: CC(I)>0? SI OUI, KK=-1, C DEPLACE L'ESPECE DE CC(I) LA PLUS NEGATIVE EN ESPECE DE TYPE V, C FOURNIT LE MESSAGE CORRESPONDANT; C LES ESPECES DE TYPE V SONT TESTEES A LEUR TOUR, C SI CC(I)<0 IL Y A SURSATURATION, KK=1 SI KK VALAIT 0, KK=2 SI KK C VALAIT -1; DEPLACE L'ESPECE DE CC(I) LA PLUS FORTE EN TYPE IV; C FOURNIT LE MESSAGE CORRESPONDANT. C C LA SEQUENCE TYPE EST: C ... C 10 CONTINUE C CALL CHMSL4 C CALL CHMSLV C CALL CHMSLX C IF(K.NE.0) GOTO 10 C ... C C======================================================================= IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) C -INC PPARAM -INC CCOPTIO SEGMENT IDSCHI REAL*8 GK(NYDIM),AA(NYDIM,NXDIM),FF(NZDIM,NPDIM) INTEGER IDX(NXDIM),IDY(NYDIM),IDZ(NZDIM),IDP(NPDIM),NN(6) INTEGER IDECY(NYDIM),IONZ(NXDIM) CHARACTER*32 NAME(NXDIM),NAMESP(NYDIM) ENDSEGMENT SEGMENT SP2 REAL*8 GX(NXDIM),XX(NXDIM),GS(NZDIM),SS(NZDIM) REAL*8 TOT(NXDIM),TOTAQ(NXDIM),TOTFIX(NXDIM),GKS(NZDIM) REAL*8 YY(NXDIM),ZZ(NXDIM,NXDIM),CC(NYDIM),GC(NYDIM) ENDSEGMENT SEGMENT IZBID1 INTEGER ID0(NYDIM,N4NXD),IDPP(N4N5) INTEGER ID0S(NZDIM,N4NPD) ENDSEGMENT C C NXDIM=IDX(/1) NYDIM=IDY(/1) NZDIM=IDZ(/1) NPDIM=IDP(/1) N4N5=IDPP(/1) N4NXD=ID0(/2) N4NPD=ID0S(/2) C C IF(NN(3)+NN(4).EQ.0) GO TO 470 N4S=0 ************************************************************************** C PRISE EN COMPTE DES SOLUTION SOLIDES : METHODE 1 * IF(NZDIM.NE.0)THEN * I3S=NN(1)+NN(2)+NN(3)+1 * I4S=NN(1)+NN(2)+NN(3)+NN(4) * DO 13 I7S=I3S,I4S * IDY7=IDY(I7S) * CALL CHIADY(IDZ,NZDIM,IDY7,ID7) * IF(ID7.NE.0)THEN * N4S=N4S+1 * CALL CHMREX(IDSCHI,LGKMOD,LGKTMP,IDY7,4,5) * CALL CHMREX(IDSCHI,LGKMOD,LGKTMP,IDY7,5,4) * ENDIF * 13 CONTINUE * ENDIF *************************************************************************** LL=NN(3)+NN(4)-N4S II=NN(1)+NN(2) I0=NN(1)+NN(2)+1 ************************************************************************** C PRISE EN COMPTE DES SOLUTIONS SOLIDES : METHODE 1 * N4S=0 * IF(NZDIM.NE.0)THEN * I3S=NN(1)+NN(2)+NN(3)+1 * I4S=NN(1)+NN(2)+NN(3)+NN(4) * DO 13 I7S=I3S,I4S * IDY7=IDY(I7S) * CALL CHIADY(IDZ,NZDIM,IDY7,ID7) * IF(ID7.NE.0) N4S=N4S+1 * 13 CONTINUE * ENDIF *************************************************************************** J0=NXDIM-NN(3)-NN(4)+N4S+1 JJ=NXDIM C * write(6,*)'CHMSLX CC ' * write(6,120)( IDY(I),CC(I),I=1,II) DO 40 J=J0,JJ * IF(IDX(J).EQ.99)WRITE(6,*)'TOTE-=',TOT(J) YY(J)=-TOT(J) C MOLE BALANCE MINUS SOLID C DO 30 I=1,II YY(J)=YY(J)+AA(I,J)*CC(I) 30 CONTINUE 40 CONTINUE C AMOUNT OF SOLID C DO 460 L=1,LL *************************************************************************** C PRISE EN COMPTE DES SOLUTIONS SOLIDES : METHODE 1 * IF(NZDIM.NE.0)THEN * IDY0=IDY(I0) * CALL CHIADY(IDZ,NZDIM,IDY0,ID0) * IF(ID0.NE.0)THEN * write(6,*)'chmslx idz(id0)',IDZ(ID0),'idy(i0)',IDY(I0) * I0=I0+1 * GOTO 460 * ENDIF * IF(AA(I0,J0).EQ.0.D0)THEN * I0=I0+1 * GOTO 460 * ENDIF * ENDIF ************************************************************************** CC(I0)=-YY(J0)/AA(I0,J0) * write(6,*)'chmslx idx(j0)',IDX(J0),'idy(i0)',IDY(I0) * write(6,*)'chmslx yy(j0)',YY(J0) * write(6,*)'chmslx aa(i0,j0)',AA(I0,J0) * write(6,*)'chmslx cc(i0)',CC(I0) B=CC(I0) C IF (ABS(CC(I0)).LT.1.D-37) B=1.D-37 IF (ABS(CC(I0)).LT.1.D-60) B=1.D-60 GC(I0)=LOG10(ABS(B)) DO 450 K=J0,JJ YY(K)=YY(K)+AA(I0,K)*CC(I0) 450 CONTINUE C UNMODIFY A,B,T,GX,XX C NXS=J0-1 NCS=I0-1 V=GK(I0) * write(6,*)'chmslx idy(io)',idy(i0),'gk(io)',gk(i0) DO 571 J=1,NXS V=V+AA(I0,J)*GX(J) * write(6,*)'chmslx 571 idx',idx(j),'gx',gx(j) * write(6,*)'chmslx 571 aa(io,j)',aa(i0,j),'v',v 571 CONTINUE *************************************************************************** C PRISE EN COMPTE DES SOLUTIONS SOLIDES : METHODE 1 * IF(NZDIM.NE.0)THEN * IDY0=IDY(I0) * CALL CHIADY(IDZ,NZDIM,IDY0,ID0) * IF(ID0.NE.0)THEN * GAJ=0.D0 * DO 572 IJ=1,NPDIM * IF(FF(ID0,IJ).NE.0.D0)THEN * GAJ=GAJ+FF(ID0,IJ)*LOG10(ABS(FF(ID0,IJ))) * ENDIF *572 CONTINUE * GX(J0)=(GAJ-V)/AA(I0,J0) * ELSE * IF(NZDIM.NE.0)THEN * IDY0=IDY(I0) * CALL CHIADY(IDP,NPDIM,IDY0,ID0) * DO 572 K=1,NZDIM * IF(FF(K,ID0).NE.0.D0) GOTO 573 *572 CONTINUE *573 CONTINUE * IF(FF(K,ID0).EQ.0.D0)THEN * GX(J0)=-V/AA(I0,J0) * write(6,*)'chmslx aa(io,jo)',aa(i0,j0) * write(6,*)'chmslx v',v * ELSE * LF=LOG10(ABS(FF(K,ID0))) * GX(J0)=(LF-V)/AA(I0,J0) * ENDIF * ELSE **************************************************************************** GX(J0)=-V/AA(I0,J0) ***************************************************************************** * ENDIF * ENDIF * ENDIF ************************************************************************** XX(J0)=10.D0**(GX(J0)) DO 61 I=1,NCS DO 55 J=1,NXS AA(I,J)=AA(I,J)+AA(I0,J)*AA(I,J0)/AA(I0,J0) 55 CONTINUE 61 CONTINUE C C C ANCIEN CALL TRESETA DO 12 I=1,NCS DO 10 J=1,NXS IF (ABS(AA(I,J)).LT.1.D-4) AA(I,J)=0.D0 10 CONTINUE 12 CONTINUE C C DO 62 J=1,NXS TOT(J)=TOT(J)+AA(I0,J)*TOT(J0)/AA(I0,J0) 62 CONTINUE DO 63 I=1,NCS *********************************************************************** C PRISE EN COMPTE DES SOLUTIONS SOLIDES : METHODE 1 * IF(NZDIM.NE.0)THEN * IF(GAJ.NE.0.D0)THEN * GK(I)=GK(I)+AA(I,J0)*(GK(I0)-GAJ)/AA(I0,J0) * ENDIF * ELSE * IF(NZDIM.NE.0)THEN * IF(FF(K,ID0).NE.0.D0)THEN * GK(I)=GK(I)+AA(I,J0)*(GK(I0)-LF)/AA(I0,J0) * ELSE * GK(I)=GK(I)+AA(I,J0)*GK(I0)/AA(I0,J0) * ENDIF * ELSE ********************************************************************** GK(I)=GK(I)+AA(I,J0)*GK(I0)/AA(I0,J0) ********************************************************************** * ENDIF * ENDIF ********************************************************************** 63 CONTINUE I0=I0+1 J0=J0+1 460 CONTINUE 470 CONTINUE 120 FORMAT(6(1X,I5,1PD13.6)) C SOLUBILITY PRODUCTS C IF(NN(5)+NN(6).NE.0) THEN I0=NN(1)+NN(2)+NN(3)+NN(4)+1 II=NN(1)+NN(2)+NN(3)+NN(4)+NN(5)+NN(6) JJ=NXDIM DO 210 I=I0,II V=GK(I) * write(6,*)'chmslx 200 gk',gk(i) DO 200 J=1,JJ V=V+AA(I,J)*GX(J) * write(6,*)'chmslx 200 idx',idx(j) * write(6,*)'chmslx 200 aa',aa(i,j),'gx',gx(j) 200 CONTINUE * write(6,*)'chmslx 200 v',v GC(I)=V CC(I)=10.D0**V 210 CONTINUE C ************************************************************************ C PRISE EN COMPTE DES SOLUTIONS SOLIDES : METHODE 2 KNFI=NFI/2 * write(6,*)'chmslx nfi',nfi,'knfi',knfi,'jnfi',jnfi IF(JNFI.GE.KNFI.AND.NZDIM.NE.0)THEN DO 211 IA=I0,II IDYIA=IDY(IA) C CALCUL DU DEGRE DE SATURATION DES SOLUTIONS SOLIDES DO 212 JA=1,NPDIM IDPJA=IDP(JA) ENDIF 212 CONTINUE C CALCUL DES FRACTIONS MOLAIRES DO 213 JB=1,NPDIM IDPJB=IDP(JB) ENDIF 213 CONTINUE C CALCUL DES COEFFICIENTS STOECHIOMETRIQUES DES SOLUTIONS SOLIDES DO 214 JC=1,NXDIM VF=0 DO 215 IB=1,NPDIM IDPB=IDP(IB) AA(IA,JC)=VF ENDIF 215 CONTINUE 214 CONTINUE C CALCUL DES CONSTANTES D EQUILIBRE DES SOLUTIONS SOLIDES DO 216 JD=1,NPDIM IDPJD=IDP(JD) ENDIF 216 CONTINUE ENDIF 211 CONTINUE ENDIF ENDIF *********************************************************************** *********************************************************************** C PRISE EN COMPTE DES SOLUTIONS SOLIDES : METHODE 1 * IF(NZDIM.NE.0)THEN * DO 211 IA=1,NZDIM * IDZIA=IDZ(IA) * CALL CHIADY(IDY,NYDIM,IDZIA,KP) * SS(IA)=0 * DO 212 JA=1,NPDIM * IF(FF(IA,JA).NE.0.D0)THEN * IDPJA=IDP(JA) * CALL CHIADY(IDY,NYDIM,IDPJA,IDJA) * SS(IA)=SS(IA)+CC(IDJA) * ENDIF *212 CONTINUE * DO 213 JB=1,NPDIM * IF(FF(IA,JB).NE.0.D0)THEN * IDPJB=IDP(JB) * CALL CHIADY(IDY,NYDIM,IDPJB,IDJB) * FF(IA,JB)=CC(IDJB)/SS(IA) * ENDIF *213 CONTINUE * DO 214 JC=1,NXDIM * VF=0 * DO 215 IB=1,NPDIM * IF(FF(IA,IB).NE.0.D0)THEN * IDPB=IDP(IB) * CALL CHIADY(IDY,NYDIM,IDPB,IDPC) * VF=VF+AA(IDPC,JC)*FF(IA,IB) * AA(KP,JC)=VF * ENDIF *215 CONTINUE *214 CONTINUE * * II0=NN(1)+NN(2)+NN(3)+NN(4)+1 * III=NN(1)+NN(2)+NN(3)+NN(4)+NN(5) * DO 216 I=II0,III * IDYI=IDY(I) * CALL CHIADY(IDZ,NZDIM,IDYI,IK) * IF(IK.NE.0)THEN * GS(IA)=LOG10(SS(IA)) * CC(KP)=SS(IA) * GC(KP)=GS(IA) * GK(KP)=GS(IA) * DO 217 JD=1,NPDIM * IDPJD=IDP(JD) * CALL CHIADY(IDY,NYDIM,IDPJD,IDJD) * IF(FF(IA,JD).NE.0.D0)THEN ** GK(KP)=GK(KP)+FF(IA,JD)*GK(IDJD) ** GK(KP)=GK(KP)+FF(IA,JD)*(GK(IDJD)-GS(IA)) ** LF=LOG10(ABS(FF(IA,JD))) ** GK(KP)=GK(KP)+FF(IA,JD)*(GK(IDJD)+LF) ** GK(KP)=GK(KP)+FF(IA,JD)*(GK(IDJD)+GC(IDJD)) ** GK(KP)=GK(KP)+FF(IA,JD)*(GK(IDJD)-GC(IDJD)+LF) * GK(KP)=GK(KP)+FF(IA,JD)*(GK(IDJD)-GC(IDJD)) * ENDIF * 217 CONTINUE * ELSE * GS(IA)=LOG10(SS(IA)) * GK(KP)=GS(IA) * DO 218 JD=1,NPDIM * IDPJD=IDP(JD) * CALL CHIADY(IDY,NYDIM,IDPJD,IDJD) * IF(FF(IA,JD).NE.0.D0)THEN * GK(KP)=GK(KP)+FF(IA,JD)*(GK(IDJD)-GC(IDJD)) * ENDIF * 218 CONTINUE * ENDIF * 216 CONTINUE *211 CONTINUE * ENDIF * write(6,*)'chmslx appel de chmout' * call chmout(idschi,sp2) ************************************************************************** C CHECK FOR PRECIPITATION/DISSOLUTION IF(IIMPI.EQ.2) WRITE(6,*) 'CHECK FOR PRECIPITATION/DISSOLUTION' ID1=0 ID2=0 ID3=0 ID4=0 VMIN=0.D0 VMAX=1.D-12 I1=NN(1)+NN(2)+NN(3)+1 JJS=NPDIM IF (NN(4).NE.0) THEN C DISSOLUTION CHECK C *************************************************************************** C PRISE EN COMPTE DES SOLUTIONS SOLIDES : METHODE 1 * IF(NZDIM.NE.0)THEN * IDYI=IDY(I) * CALL CHIADY(IDZ,NZDIM,IDYI,KP1) ** write(6,*)'chmslx id1 kp1=',KP1 * IF(KP1.NE.0)THEN * CC(I)=0 * SS(KP1)=0 * DO 45 J=1,NPDIM * IF(FF(KP1,J).NE.0.D0)THEN * IDPJ=IDP(J) * CALL CHIADY(IDY,NYDIM,IDPJ,IDJ) * SS(KP1)=SS(KP1)+CC(IDJ) * ENDIF * 45 CONTINUE * DO 46 J=1,NPDIM * IF(FF(KP1,J).NE.0.D0)THEN * IDJP=IDP(J) * CALL CHIADY(IDY,NYDIM,IDJP,IDJ) * FF(KP1,J)=CC(IDJ)/SS(KP1) ** write(6,*)'chmslx id1 idy',IDY(IDJ),'cc',CC(IDJ) ** write(6,*)'chmslx id1 idp',IDP(J),'FF',FF(KP1,J) * ENDIF * 46 CONTINUE * CC(I)=SS(KP1) ** write(6,*)'chmslx id1 idz',IDZ(KP1),'ss',SS(KP1) * ENDIF * ENDIF ************************************************************************** IF (CC(I).LE.VMIN) THEN VMIN=CC(I) ID1=IDY(I) * write(6,*)'chmslx id1=',ID1 IF (IIMPI.EQ.2) WRITE(6,*)' **CHMSLX ID1=IDY(',I,')' * ,IDY(I), ' VMIN=CC(',I,')',VMIN ENDIF 44 CONTINUE * write(6,*)'chmslx id1=',ID1 * write(6,*)'chmslx vmin',vmin * write(6,*)'chmslx id1 nn(4)=',NN(4) ENDIF IF (NN(5).EQ.0) GOTO 49 C PRECIPITATION CHECK C NBV=0 DO 48 I=I3,I4 ************************************************************************* C PRISE EN COMPTE DES SOLUTIONS SOLIDES : METHODE 1 * IF(NZDIM.NE.0)THEN * IDYI=IDY(I) ** write(6,*)'chmslx idy=idz',idy(i) * CALL CHIADY(IDZ,NZDIM,IDYI,KP2) ** write(6,*)'chmslx id2 kp2=',KP2 * IF(KP2.NE.0)THEN * AGC=GC(I) ** CC(I)=0 * SS(KP2)=0 * DO 51 J=1,NPDIM * IF(FF(KP2,J).NE.0.D0)THEN * IDPJ=IDP(J) * CALL CHIADY(IDY,NYDIM,IDPJ,IDJ) * SS(KP2)=SS(KP2)+CC(IDJ) * ENDIF * 51 CONTINUE * DO 52 J=1,NPDIM * IF(FF(KP2,J).NE.0.D0)THEN * IDJP=IDP(J) * CALL CHIADY(IDY,NYDIM,IDJP,IDJ) * FF(KP2,J)=CC(IDJ)/SS(KP2) ** write(6,*)'chmslx idp(j)',idp(j) ** write(6,*)'chmslx cc(idj)',cc(idj) ** write(6,*)'chmslx ss(kp2)',ss(kp2) ** write(6,*)'chmslx ff(kp2,j)',ff(kp2,j) ** FF(KP2,J)=1.D0 ** write(6,*)'chmslx id2 idy',IDY(IDJ),'gc',GC(IDJ) ** write(6,*)'chmslx id2 idp',IDP(J),'ff',FF(KP2,J) * ENDIF * 52 CONTINUE * DO 53 JA=1,NXDIM ** XMAX=1.D-3 * VF=0 * DO 54 IB=1,NPDIM * IF(FF(KP2,IB).NE.0.D0)THEN * IDPB=IDP(IB) * CALL CHIADY(IDY,NYDIM,IDPB,IDPC) * VF=VF+AA(IDPC,JA)*FF(KP2,IB) ** IF(ABS(AA(IDPC,JA)).EQ.XMAX)THEN ** VF=VF+FF(KP2,IB) ** AA(I,JA)=VF ** ENDIF ** IF(ABS(AA(IDPC,JA)).GT.XMAX)THEN ** VF=FF(KP2,IB) * AA(I,JA)=VF ** write(6,*)'chmslx idx',idx(ja),'aa(i,ja)',aa(i,ja) ** write(6,*)'chmslx aa(idpc,ja)',aa(idpc,ja) ** write(6,*)'chmslx ff(kp2,ib)',ff(kp2,ib) ** XMAX=AA(IDPC,JA) ** ENDIF * ENDIF * 54 CONTINUE * 53 CONTINUE ** CC(I)=SS(KP2) * GS(KP2)=LOG10(SS(KP2)) * GC(I)=GS(KP2) ** write(6,*)'chmslx id2 idz',IDZ(KP2),'gs',GS(KP2) * ENDIF * ENDIF ************************************************************************ IF (GC(I).GE.VMAX) THEN C NB MX DISSOUS (NN(5))DONT L'INDICE DE SATURATION INDIQUE C UNE SURSATURATION NBV=NBV+1 VMAX=GC(I) C IDENTIFICATION DU MINERAL DISSOUS (PROVISOIREMENT) LE PLUS C SURSATURE IDPP(NBV) = IDY(I) ID2=IDY(I) IF (IIMPI.EQ.2) WRITE(6,*)'**CHMSLX ID2=IDY(',I,')',IDY(I), * ' VMAX=GC(',I,')',VMAX C LE MINERAL LE PLUS SURSATURE EST LE IID(IEME) IID=I ************************************************************************* C PRISE EN COMPTE DES SOLUTIONS SOLIDES : METHODE 1 * IIDS=0 * CALL CHIADY(IDZ,NZDIM,ID2,IIDS) * IF(IIDS.GT.0)THEN * GC(IID)=0 * GK(IID)=0 * DO 56 IJ=1,NPDIM * IDPIJ=IDP(IJ) * CALL CHIADY(IDY,NYDIM,IDPIJ,IDIJ) * IF(FF(IIDS,IJ).NE.0.D0)THEN ** GK(IID)=GK(IID)+FF(IIDS,IJ)*(GK(IDIJ)-GS(IIDS)) * GC(IID)=GC(IID)+FF(IIDS,IJ)*GC(IDIJ) * LF=LOG10(ABS(FF(IIDS,IJ))) * GK(IID)=GK(IID)+FF(IIDS,IJ)*(GK(IDIJ)-GC(IDIJ)+LF) ** GK(IID)=GK(IID)+FF(IIDS,IJ)*GK(IDIJ) ** write(6,*)'chmslx idp',idp(ij) ** write(6,*)'chmslx ff',ff(iids,ij),'gk',gk(idij) * ENDIF *56 CONTINUE ** write(6,*)'chmslx idy',idy(i),'gk(iid)',gk(iid) * CC(IID)=10.D0**GC(IID) * ENDIF * ELSE * IDYI=IDY(I) * CALL CHIADY(IDZ,NZDIM,IDYI,IDI) * IF(IDI.NE.0)THEN * GC(I)=AGC * GK(I)=0 * DO 57 J=1,NPDIM * IDPJ=IDP(J) * CALL CHIADY(IDY,NYDIM,IDPJ,IDJ) * IF(FF(IDI,J).NE.0.D0)THEN * GK(I)=GK(I)+FF(IDI,J)*GK(IDJ) * ENDIF ** IF(FF(IDI,J).NE.0.D0) FF(IDI,J)=1.D0 * 57 CONTINUE ** DO 58 JA=1,NXDIM *** XMAX=1.D-3 ** VF=0 ** DO 59 IB=1,NPDIM ** IF(FF(IDI,IB).NE.0.D0)THEN ** IDPB=IDP(IB) ** CALL CHIADY(IDY,NYDIM,IDPB,IDPC) ** VF=VF+AA(IDPC,JA)*FF(KP2,IB) ** IF(ABS(AA(IDPC,JA)).EQ.XMAX)THEN ** VF=VF+FF(IDI,IB) ** AA(I,JA)=VF ** ENDIF ** IF(ABS(AA(IDPC,JA)).GT.XMAX)THEN ** VF=FF(IDI,IB) ** AA(I,JA)=VF ** XMAX=AA(IDPC,JA) ** ENDIF ** ENDIF * 59 CONTINUE * 58 CONTINUE * ENDIF ********************************************************************** ENDIF 48 CONTINUE ********************************************************************** * write(6,*)'chmslx id2=',ID2 * write(6,*)'chmslx iid=',IID,'idy(iid)',IDY(IID) * write(6,*)'chmslx iids=',IIDS,'idz(iids)=',idz(iids) * write(6,*)'chmslx id2 NN(5)=',NN(5) ********************************************************************** C --- TEST: EST CE QUE LES COMPOSANTS DU MINERAL LE PLUS SURSATURE C ST IDENTIQUES AUX COMPOSANTS D'1 MINERAL DEJA MIS EN TYPE 4 IF(ID2.NE.0.AND.NN(4).GT.0)THEN C INITIALISATION ID4 = 0 JJ = NXDIM * JJS = NPDIM I01 = 0 KI = 0 * KIS = 0 NK = 0 * NKS = 0 * IS = 0 * IDPJS = 0 C I(IEME) MINERAL DE NN(4) (DEJA PROVISOIREMENT PRECIPITE) C ON LES COMPTABILISE I01=I01+1 ************************************************************************ C PRISE EN COMPTE DES SOLUTIONS SOLIDES : METHODE 1 *C SI LE I01(IEME) MINERAL DE NN(4) EST UNE SOLSOL, *C TEST SUR LES SOLIDES COMPOSANT CE MINERAL, SINON C TEST SUR LES COMPOSANTS DE CE IO1(IEME) MINERAL (DE NN(4)) * IDYS=IDY(I) * CALL CHIADY(IDZ,NZDIM,IDYS,IS) * IF(IS.NE.0)THEN * DO 91 JS=1,JJS * IF(FF(IS,JS).NE.0.D0)THEN *C NB DE SOLIDES * KIS=KIS+1 *C IDENTIFICATION DE CES SOLIDES * IDPJS=IDP(JS) * CALL CHIADY(IDY,NYDIM,IDPJS,IDJS) * ID0S(I01,KIS)=IDY(IDJS) * ENDIF *91 CONTINUE * ELSE ************************************************************************ DO 92 J=1,JJ IF(ABS(AA(I,J)).GE.1.D-3) THEN C NB DE COMPOSANTS KI=KI+1 C IDENTIFICATION DE CES COMPOSANTS ID0(I01,KI)=IDX(J) ENDIF 92 CONTINUE ************************************************************************ * ENDIF ************************************************************************ C *C SI LE MINERAL (PROVISOIREMENT) LE PLUS SURSATURE EST UNE SOLSOL *C RECHERCHE DES SOLIDES DE CE MINERAL, SINON C RECHERCHE DES COMPOSANTS DE CE MINERAL KID = 0 *********************************************************************** C PRISE EN COMPTE DES SOLUTIONS SOLIDES : METHODE 1 * KIDS = 0 * IF(IIDS.GT.0)THEN * DO 93 JS=1,JJS * IF(FF(IIDS,JS).NE.0.D0)THEN *C NB DE SOLIDES DU MINERAL (DE TYPE5) TESTE * KIDS=KIDS+1 *C IDENTIFICATION DE CES SOLIDES * IDPJS=IDP(JS) * CALL CHIADY(IDY,NYDIM,IDPJS,IDJS) * ID0S(IIDS,KIDS)=IDY(IDJS) * ENDIF *93 CONTINUE * ELSE *********************************************************************** DO 94 J=1,JJ IF(ABS(AA(IID,J)).GE.1.D-3) THEN C NB DE COMPOSANTS DU MINERAL (DE TYPE5) TESTE KID=KID+1 C IDENTIFICATION DE CES COMPOSANTS ID0(IID,KID)=IDX(J) ENDIF 94 CONTINUE *********************************************************************** C PRISE EN COMPTE DES SOLUTIONS SOLIDES : METHODE 1 * ENDIF *C TEST SUR LE NOMBRE DES SOLIDES DU MINERAL TESTE PAR RAPPORT *C AU I(IEME) MINERAL SURSAT PROVISOIREMENT DEJA PRECIPITE *C SINON C TEST SUR LE NOMBRE DES COMPOSANTS DU MINERAL TESTE PAR RAPPORT C AU I(IEME) MINERAL SURSAT PROVISOIREMENT DEJA PRECIPITE * IF(IS.GT.0.AND.IIDS.GT.0)THEN * IF(KIDS.EQ.KIS)THEN *C COMPARAISON DES SOLIDES. NKS ETANT LE NB DE SOLIDES COMMUNS * DO 95 JIDS=1,KIDS * DO 96 JIS=1,KIS * IF(ID0S(IIDS,JIDS).EQ.ID0S(I01,JIS)) NKS=NKS+1 *96 CONTINUE *95 CONTINUE *C COMPARAISON DU NB DE SOLIDES COMMUNS AVEC LE NB DE SOLIDES *C DES 2 MINERAUX TESTES * IF(NKS.EQ.KIS)THEN * ID4=IDY(I) * ID3=0 * IF(ID4.NE.ID1)THEN * GOTO 99 * ELSE * GOTO 49 * ENDIF * ELSE *C SI LA COMPARAISON N'A PAS ENCORE ETE EFFECTUEE AVEC TOUS *C LES MINERAUX DE NN(4), PASSER AU SUIVANT... * IF(I.NE.I2) GOTO 89 *C ...SINON SORTIR DU TEST EN COURS * GOTO 49 * ENDIF * ELSE *C SI LES NB DE SOLIDES NE CORRESPONDENT PAS * ID3=0 * IF(I.NE.I2) GOTO 89 * GOTO 49 * ENDIF * ENDIF * IF(IS.LE.0.AND.IIDS.LE.0)THEN *********************************************************************** IF(KID.EQ.KI)THEN C COMPARAISON DES COMPOSANTS.NK ETANT LE NB DE COMPOSANTS COMMUNS DO 97 JID=1,KID DO 98 JI=1,KI IF(ID0(IID,JID).EQ.ID0(I01,JI)) NK=NK+1 98 CONTINUE 97 CONTINUE C COMPARAISON DU NB DE COMPOSANTS COMMUNS AVEC LE NB DE C COMPOSANTS DES 2 MINERAUX TESTES IF(NK.EQ.KI)THEN ID4=IDY(I) ID3=0 IF(ID4.NE.ID1) THEN GOTO 99 ELSE GOTO 49 ENDIF ELSE C SI LA COMPARAISON N'A PAS ENCORE ETE EFFECTUEE AVEC TOUS C LES MX DE NN(4), PASSER AU SUIVANT... C ...SINON SORTIR DU TEST EN COURS ID3=0 GOTO 49 ENDIF ELSE C SI LES NOMBRES DES COMPOSANTS NE CORRESPONDENT PAS ID3=0 GOTO 49 ENDIF ************************************************************************* * ELSE * IF(I.NE.I2) GOTO 89 * GOTO 49 * ENDIF ************************************************************************ 89 CONTINUE 90 CONTINUE C COMPOSANTS IDENTIQUES POUR LES 2 MX TESTES 99 CONTINUE C NBV=NBV-1 C C SI LE NOMBRE DE MX (PROVISOIREMENT) SURSATURES EST SUPERIEUR C A DEUX... IF(NBV.GT.0)THEN C ...CHOISIR LE MINERAL PRECEDENT ID2=IDPP(NBV) C C ...SINON... ELSE NBV=NBV+1 C ...ECHANGER (APRES 500) LES DEUX MINERAUX TESTES (METTRE C ARBITRAIREMENT LE MINERAL DE NN(4) EN TYPE 5 ET CELUI DE TYPE5 C EN TYPE 4(CF ETTIQ.500) ID2=IDPP(NBV) ID3=1 IF (IIMPI.EQ.2) WRITE(6,*)' ATTENTION IL N Y A QU UN MINERAL * INADEQUAT A PRECIPITER' ENDIF ENDIF C BOUNDARY CONDITION EXCHANGE C C KK=0 NO EXCHANGE NECESSARY C KK=-1 SOLID 'ID1' DISSOLVES C KK=+1 SOLID 'ID2' PRECIPITATES C KK=+2 SOLID 'ID1' DISSOLVES, 'ID2' PRECIPITATES C 49 KK=0 C NO EXCHANGE NECESSARY IF (ID1.EQ.0) GOTO 500 I4=4 I5=5 IF (IIMPI.EQ.2) WRITE(6,*) ' **SOLIDX AVANT CALL * CHMREX: ID1= ',ID1 ************************************************************************ C PRISE EN COMPTE DES SOLUTIONS SOLIDES : METHODE 1 * CALL CHIADY(IDZ,NZDIM,ID1,ID1Z) * IF(ID1Z.NE.0)THEN * DO 700 JS=1,JJS * IF(FF(ID1Z,JS).NE.0.D0)THEN * IDPJS=IDP(JS) * CALL CHIADY(IDY,NYDIM,IDPJS,IDJS) * IDY1=IDY(IDJS) * CALL CHMREX(IDSCHI,LGKMOD,LGKTMP,IDY1,I4,I5) ** FF(ID1Z,JS)=1.D0 * ENDIF *700 CONTINUE * CALL CHMREX(IDSCHI,LGKMOD,LGKTMP,ID1,I4,I5) * KK=-1 * ELSE * CALL CHIADY(IDP,NPDIM,ID1,ID1P) * IF(NZDIM.NE.0)THEN * DO 705 K=1,NZDIM * IF(FF(K,ID1P).NE.0.D0) GOTO 707 *705 CONTINUE *707 CONTINUE * IF(FF(K,ID1P).NE.0.D0)THEN * IF(SS(K).GT.0.D0)THEN * ID1=0 * KK=0 * ELSE * DO 715 JS=1,JJS * IF(FF(K,JS).NE.0.D0)THEN * IDPJS=IDP(JS) * CALL CHIADY(IDY,NYDIM,IDPJS,IDJS) * IDY1=IDY(IDJS) * CALL CHMREX(IDSCHI,LGKMOD,LGKTMP,IDY1,I4,I5) *C FF(K,JS)=1.D0 * ENDIF *715 CONTINUE * IDZK=IDZ(K) * CALL CHIADY(IDY,NYDIM,IDZK,IDK) * IDYK=IDY(IDK) * CALL CHMREX(IDSCHI,LGKMOD,LGKTMP,IDYK,I4,I5) * KK=-1 * ENDIF * ELSE * CALL CHMREX(IDSCHI,LGKMOD,LGKTMP,ID1,I4,I5) * KK=-1 * ENDIF * ELSE *********************************************************************** KK=-1 ********************************************************************** * ENDIF * ENDIF ********************************************************************* 500 CONTINUE IF(ID4.NE.ID1.AND.ID4.NE.0)THEN IF (ID3.EQ.1) THEN KK=1 I4=4 I5=5 ********************************************************************** C PRISE EN COMPTE DES SOLUTIONS SOLIDES : METHODE 1 * IF(IIDS.GT.0.AND.IS.GT.0)THEN * DO 100 JS=1,JJS * IF(FF(IIDS,JS).NE.0.D0)THEN * IDPJS=IDP(JS) * CALL CHIADY(IDY,NYDIM,IDPJS,IDJS) * ID2S=IDY(IDJS) * CALL CHMREX(IDSCHI,LGKMOD,LGKTMP,ID2S,I5,I4) ** FF(IIDS,JS)=CC(IDJS)/SS(IIDS) ** write(6,*)'chmslx 100 FF=',FF(IIDS,JS) * ENDIF * IF(FF(IS,JS).NE.0.D0)THEN * IDPJS=IDP(JS) * CALL CHIADY(IDY,NYDIM,IDPJS,IDJS) * ID4S=IDY(IDJS) * CALL CHMREX(IDSCHI,LGKMOD,LGKTMP,ID4S,I4,I5) ** FF(IS,JS)=1.D0 * ENDIF *100 CONTINUE * CALL CHMREX(IDSCHI,LGKMOD,LGKTMP,ID2,I5,I4) * CALL CHMREX(IDSCHI,LGKMOD,LGKTMP,ID4,I4,I5) * GOTO 501 * ENDIF * IF(IIDS.LE.0.AND.IS.LE.0)THEN *********************************************************************** GOTO 501 *********************************************************************** * ENDIF *********************************************************************** ELSE IF (ID2.EQ.0) GOTO 501 I4=4 I5=5 ********************************************************************** C PRISE EN COMPTE DES SOLUTIONS SOLIDES : METHODE 1 * IF(IIDS.GT.0)THEN * DO 101 JS=1,JJS * IF(FF(IIDS,JS).NE.0.D0)THEN * IDPJS=IDP(JS) * CALL CHIADY(IDY,NYDIM,IDPJS,IDJS) * ID2S=IDY(IDJS) * CALL CHMREX(IDSCHI,LGKMOD,LGKTMP,ID2S,I5,I4) ** FF(IIDS,JS)=CC(IDJS)/SS(IIDS) ** write(6,*)'chmslx 101 FF=',FF(IIDS,JS) * ENDIF *101 CONTINUE * CALL CHMREX(IDSCHI,LGKMOD,LGKTMP,ID2,I5,I4) * KK=1 * IF (ID1.NE.0) KK=2 * ELSE *********************************************************************** KK=1 IF(ID1.NE.0) KK=2 *********************************************************************** * ENDIF ********************************************************************** ENDIF ELSE C --- CAS NORMAL C SOLID 'ID1' DISSOLVES IF (ID2.EQ.0) GOTO 501 ** write(6,*)'chmslx av 800 IIDS=',IIDS I4=4 I5=5 *********************************************************************** C PRISE EN COMPTE DES SOLUTIONS SOLIDES : METHODE 1 * IF(IIDS.GT.0)THEN * DO 800 JS=1,JJS * IF(FF(IIDS,JS).NE.0.D0)THEN * IDPJS=IDP(JS) * CALL CHIADY(IDY,NYDIM,IDPJS,IDJS) * IDY2=IDY(IDJS) * CALL CHMREX(IDSCHI,LGKMOD,LGKTMP,IDY2,I5,I4) ** FF(IIDS,JS)=CC(IDJS)/SS(IIDS) ** write(6,*)'chmslx 800',IDP(JS),' FF=',FF(IIDS,JS) * ENDIF *800 CONTINUE * CALL CHMREX(IDSCHI,LGKMOD,LGKTMP,ID2,I5,I4) * KK=1 * IF(ID1.NE.0) KK=2 * ELSE * CALL CHIADY(IDP,NPDIM,ID2,ID2P) * IF(NZDIM.NE.0)THEN * DO 805 K=1,NZDIM * IF(FF(K,IDP2).NE.0.D0) GOTO 806 *805 CONTINUE *806 CONTINUE * IF(FF(K,ID2P).NE.0.D0)THEN ** write(6,*)'chmslx ff(k,id2p)=',ff(k,id2p) * IF(GS(K).GT.0.D0)THEN * DO 810 JS=1,JJS * IF(FF(K,JS).NE.0.D0)THEN * IDPJS=IDP(JS) * CALL CHIADY(IDY,NYDIM,IDPJS,IDJS) * IDY2=IDY(IDJS) * CALL CHMREX(IDSCHI,LGKMOD,LGKTMP,IDY2,I5,I4) *C FF(K,JS)=CC(IDJS)/SS(K) *C write(6,*)'chmslx 810 FF=',FF(K,JS) * ENDIF *810 CONTINUE * IDZK=IDZ(K) * CALL CHIADY(IDY,NYDIM,IDZK,IDK) * IDYK=IDY(IDK) * CALL CHMREX(IDSCHI,LGKMOD,LGKTMP,IDYK,I5,I4) * KK=1 * IF(ID1.NE.0) KK=2 * ELSE * ID2=0 * KK=0 * IF(ID1.NE.0) KK=-1 * ENDIF * ELSE ********************************************************************** KK=1 C SOLID 'ID2' PRECIPITATES IF (ID1.NE.0) KK=2 C SOLID 'ID1' DISSOLVES, 'ID2' PRECIPITATES ********************************************************************* C PRISE EN COMPTE DES SOLUTIONS SOLIDES : METHODE 1 * ENDIF * ELSE * CALL CHMREX(IDSCHI,LGKMOD,LGKTMP,ID2,I5,I4) * KK=1 * IF(ID1.NE.0) KK=2 * ENDIF * ENDIF ********************************************************************* ENDIF 501 CONTINUE CBRUNO * DO J=1,NXDIM * IF(IDX(J).EQ.99)WRITE(6,*)'TOTE-=',TOT(J) * ENDDO RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales