chimi2
C CHIMI2 SOURCE CB215821 20/11/25 13:19:26 10792 SUBROUTINE CHIMI2 C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C OPERATEUR CHI2 C C sous programme issu de TRIOEF C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC SMLENTI -INC SMLREEL -INC SMTABLE -INC SMLMOTS -INC SMCHPOI -INC SMELEME -INC SMCOORD POINTEUR MLAA.MLREEL,MLOGK.MLREEL,MLFF.MLREEL POINTEUR MLIDX.MLENTI,MLIDY.MLENTI,MLIDZ.MLENTI,MLIDP.MLENTI POINTEUR MLNN.MLENTI,MLDECY.MLENTI POINTEUR MLIONZ.MLENTI,MLPREC.MLENTI,ICOTY3.MLENTI,MLIMPR.MLENTI POINTEUR MLNAME.MLMOTS,MLMOTX.MLMOTS,MLMSOR.MLMOTS,MLNESP.MLMOTS POINTEUR IZLOGC.MCHPOI,IZTOT.MCHPOI POINTEUR MCHAQU.MCHPOI,MCHFIX.MCHPOI,MCHSOL.MCHPOI,MCHSUR.MCHPOI POINTEUR MCHTY3.MCHPOI,MCHTY4.MCHPOI,MCHTY5.MCHPOI,MCHTY6.MCHPOI POINTEUR MCHPRE.MCHPOI,MCHPOL.MCHPOI,MCHGKS.MCHPOI,MCHLGC.MCHPOI POINTEUR MCHERR.MCHPOI POINTEUR IPTOT.MPOVAL,IPLGC.MPOVAL,IPTEMP.MPOVAL,IZFI.MPOVAL POINTEUR JZT3.MPOVAL,IZPRE.MPOVAL,ICHFIO.MPOVAL,ICHERR.MPOVAL POINTEUR ICHAQU.MPOVAL,ICHFIX.MPOVAL,ICHSOL.MPOVAL,ICHSUR.MPOVAL POINTEUR ICHTY3.MPOVAL,ICHPRE.MPOVAL,ICHTY5.MPOVAL,ICHTY6.MPOVAL POINTEUR ICHPOL.MPOVAL,ICHGKS.MPOVAL,ICHLGC.MPOVAL CHARACTER*4 NOMTOT CHARACTER*8 TYPEMA 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 IPTIDX INTEGER ITDX(NXDIM) ENDSEGMENT POINTEUR IDXTOT.IPTIDX,IDXLGC.IPTIDX SEGMENT IZVBID INTEGER JEX(NXDIM) REAL*8 VBID(NXDIM) ENDSEGMENT SEGMENT IZBID1 INTEGER ID0(NYDIM,N4NXD),IDPP(N4N5) INTEGER ID0S(NZDIM,N4NPD) ENDSEGMENT SEGMENT IZRED INTEGER ITAB(NCR,2) REAL*8 ATAB(NCR,2) ENDSEGMENT SEGMENT IZTR REAL*8 A0(NXDIM) ENDSEGMENT C C C LECTURE DE LA TABLE CHIMI1 * MLNAME,MLIONZ,ITIDEN,ITREDO,ITEMPE,MLNESP) IF(IERR.NE.0)RETURN * write(6,*)'chimi2 itiden= ',ITIDEN C C LECTURE DE LA TABLE DES PARAMETRE * IZTYP4,IZTEMP,IZLOGC,IZTOT,IZCLIM,MLMSOR,DE,MAXDE,MLIMPR , * ICALCLOG) IF(IERR.NE.0)RETURN SEGACT IZTOT,IZLOGC C C RECUPERATION DU MAILLAGE C ON CONTROLE LA COHERENCE ENTRE TOT ET LOGC NSOUPO = IZTOT.IPCHP(/1) IF (NSOUPO.NE.1) THEN MOTERR(1:8) = 'CHAMPOIN' SEGDES IZTOT*NOMOD RETURN ENDIF MSOUPO=IZTOT.IPCHP(1) SEGACT MSOUPO MELEME=IGEOC INDIQ=1 NOMTOT=' ' IF(INDIQ.LT.0)THEN ENDIF IF(IERR.NE.0)RETURN C C LECTURE DE LA TABLE IDEN C TOUS LES SEGMENTS REVIENNENT ACTIFS OU AVEC UN POINTEUR NUL C * MMSURF,MLTYP3,MMTYP3,MLTYP6,MMTYP6,MLPARF,MLREAC,MLIMMO, * MLPOLE,MMPOLE,MLSOSO,MMSOSO,LIMP3) IF(IERR.NE.0)RETURN C C LECTURE DE LA TABLE TEMPE(SI ELLE EXISTE) C TOUS LES SEGMENTS REVIENNENT ACTIFS OU AVEC UN POINTEUR NUL IF(IERR.NE.0)RETURN C C LECTURE DE LA TABLE REDOX(SI ELLE EXISTE) IF(IERR.NE.0)RETURN C C C ON ACTIVE LES SEGMENTS C ET ON DEFINIT LES TABLEAUX DE TRAVAIL SEGACT MLAA,MLOGK,MLFF,MLIDX,MLIDY,MLIDZ,MLNN,MLDECY,MLNAME,MLNESP SEGACT MLIONZ,MLIDP NXDIM=MLIDX.LECT(/1) NYDIM=MLIDY.LECT(/1) NZDIM=MLIDZ.LECT(/1) NPDIM=MLIDP.LECT(/1) N4N5=MLNN.LECT(4)+MLNN.LECT(5) N4NXD=N4N5*NXDIM N4NPD=N4N5*NPDIM SEGINI IDSCHI SEGINI SP2,IZVBID,IZBID1 SEGINI IZTR C C ON RECUPERE LES POINTEURS DES TABLEAUX DE VALEURS TOT ET LOGC C AINSI QUE L ORDRE DES COMPOSANTS DANS CES TABLEAUX MOTERR(5:8)='TOT ' MOTERR(5:8)='LOGC' IF(IERR.NE.0)RETURN NPN=IPTOT.VPOCHA(/1) C RECUPERATION DES AUTRES TABLEAUX IZFI=0 IF(IFIONI.NE.0)THEN IF(IERR.NE.0)RETURN ENDIF IPTEMP=0 IF(IZTEMP.NE.0)THEN IF(IERR.NE.0)RETURN ENDIF ICOTY3=0 JZT3=0 IF(IZCLIM.NE.0)THEN C C INITIALISATION DE LA PRISE EN COMPTE DES ACTIVITES IMPOSEES C ON RESSORT JZT3 IF(IERR.NE.0)RETURN ENDIF C C C EXISTANCE DES PRECIPITES N2=0 IZPRE=0 MCHTY4=0 IF(MMPREC.NE.0)THEN N2=IZPRE.VPOCHA(/2) ENDIF IF(IZTYP4.NE.0)THEN IF((MLPREC.EQ.0).OR.(MMPREC.EQ.0))THEN RETURN ENDIF ENDIF IF(IERR.NE.0)RETURN C C ON GENERE LE NOM INTERNE DES COMPOSANTS C X SUIVI DE L IDENTIFIANT IDX AVEC DES 0 ENTRE LES DEUX AU BESOIN JGN=4 JGM=NXDIM SEGINI MLMOTX DO 1 I=1,NXDIM 1 CONTINUE 110 FORMAT('X',I3.3) C C ON CREE LES CHPOIN POUR SAUVER LES RESULTATS c modif PhM: chpoint des erreur JGM=1 SEGINI MLMOTS SEGSUP MLMOTS JGM=NXDIM c modif Phm IF(IERR.NE.0)RETURN MCHGKS=0 ICHGKS=0 IF(ISORT.GE.1024)THEN IF(MMSOSO.NE.0)THEN * write(6,*)'chimi2 mmsoso',mmsoso * write(6,*)'chimi2 mchgks ichgks',mchgks,ichgks ELSE MOTERR(1:8)='SOSO ' RETURN ENDIF ISORT=ISORT-1024 ENDIF MCHPOL=0 ICHPOL=0 IF(ISORT.GE.512)THEN IF(MMPOLE.NE.0)THEN * write(6,*)'chimi2 mmpole',mmpole ELSE MOTERR(1:8)='POLE ' RETURN ENDIF ISORT=ISORT-512 ENDIF MCHSOL=0 ICHSOL=0 IF(ISORT.GE.256)THEN IF(MMSOLU.NE.0)THEN ELSE MOTERR(1:8)='SOLU ' RETURN ENDIF ISORT=ISORT-256 ENDIF MCHSUR=0 ICHSUR=0 IF(ISORT.GE.128)THEN IF(MMSURF.NE.0)THEN ELSE MOTERR(1:8)='SURF ' RETURN ENDIF ISORT=ISORT-128 ENDIF MCHTY3=0 ICHTY3=0 IF(ISORT.GE.64)THEN IF(MMTYP3.NE.0)THEN ELSE MOTERR(1:8)='TYP3 ' RETURN ENDIF ISORT=ISORT-64 ENDIF MCHPRE=0 ICHPRE=0 IF(ISORT.GE.32)THEN IF(MMPREC.NE.0)THEN ELSE MOTERR(1:8)='PREC ' RETURN ENDIF ISORT=ISORT-32 ENDIF MCHTY5=0 ICHTY5=0 IF(ISORT.GE.16)THEN IF(MMPREC.NE.0)THEN ELSE MOTERR(1:8)='TYP5 ' RETURN ENDIF ISORT=ISORT-16 ENDIF MCHTY6=0 ICHTY6=0 IF(ISORT.GE.8)THEN IF(MMTYP6.NE.0)THEN ELSE MOTERR(1:8)='TYP6 ' RETURN ENDIF ISORT=ISORT-8 ENDIF MCHFIO=0 ICHFIO=0 IF(ISORT.GE.4)THEN JGM=1 SEGINI MLMOTS SEGSUP MLMOTS ISORT=ISORT-4 ENDIF IF((ISORT.EQ.2).AND.(MMPREC.EQ.0))THEN MOTERR(1:8)='NTY4 ' RETURN ENDIF C C INITIALISATION IF(IERR.NE.0)RETURN LTMP=0 IF(LGKMOD.NE.0)LTMP=IP3 C DE=1.D0 ISENS=0 EPREC2=1.D-4*PRECPE SEGACT MELEME C C ------------------------------------------------------------------- C BOUCLE SUR LES POINTS C ------------------------------------------------------------------- DO 100 II=1,NPN TMP=25.D0 Q99=0.D0 PE=0.D0 PEMIN=0.D0 PEMAX=0.D0 ICHSLX=0 ICHDE=0 C CHARGEMENT DE IDSCHI * MLNAME,MLIONZ,IDSCHI,MLNESP) C WRITE(6,*)' GK apres CHMIDS ' C WRITE(6,120)(GK(J),IDY(J),J=1,NYDIM) 120 FORMAT(6(1X,1PD12.5,I10)) C CHARGEMENT EVENTUEL DE LGKMOD OU LGKTMP C CHARGEMENT DE SP2 DO 6 J=1,NXDIM TOT(J)= IPTOT.VPOCHA(II,IDXTOT.ITDX(J)) GX(J)= IPLGC.VPOCHA(II,IDXLGC.ITDX(J)) XX(J)=10.D0**GX(J) IF ((IDX(J).NE.50).AND.(IDX(J).NE.99)) THEN IF(TOT(J).LE.0.D0)THEN TOT(J)=1.D-35 ENDIF ENDIF 6 CONTINUE C segact iztot C call ecchpo(iztot) C segact iztot C write(6,*)' gx ',(gx(j),j=1,nxdim) C write(6,*)' xx ',(xx(j),j=1,nxdim) C write(6,*)' gk ',(gk(j),j=1,nydim) C C= MISE EN TYPE 4 DE CERTAINS MINERAUX PRECIPITABLES C IF(IZTYP4.NE.0)THEN NN4=MLPREC.LECT(/1) DO 18 IC4=1,NN4 IF(IZPRE.VPOCHA(II,IC4).EQ.1.D0)THEN ID=MLPREC.LECT(IC4) LIN=5 LEN=4 ENDIF 18 CONTINUE ENDIF C C= REMISE A ZERO DES FORCES IONIQUES XMU = 0.D0 XMUNEW = 0.D0 C IF (IZTEMP.NE.0) THEN TMPNEW = IPTEMP.VPOCHA(II,1) ELSE TMPNEW = 25.D0 ENDIF C C==================== C= CALCUL D'EQUILIBRE C==================== C C C= INITIALISATION DE LA FORCE IONIQUE C C write(6,*)' XMUNEW XMU IZFI ',XMUNEW,XMU,IZFI IF (IZFI.EQ.0) THEN ELSE XMUNEW = IZFI.VPOCHA(II,1) ENDIF C IMP=1 C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC a voir CCCCCCCCCCCCCCCCCCCCCCCCC C IF (IMP.GE.1) CALL IMPCHI(SP1,SP2,KK,J,NFI,IMP) CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C= MODIFICATION DES LOGK DE XMU A XMUNEW ET DE TMP A TMPNEW C JNFI=1 IF (IZCLIM.NE.0) THEN C ON RECALCULE LES INDICES CAR CHMTMS APPELE PAR CHMKMD PEUT MODIFIER C L'ORDRE DES IDY MC3 = ICOTY3.LECT(/1) IJ=NN(1)+NN(2)+1 IK=NN(1)+NN(2)+NN(3) DO 7 IC3=1,MC3 DO 8 IL=IJ,IK IF(IDY(IL).EQ.ICOTY3.LECT(IC3))THEN GK(IL) = GK(IL)+ JZT3.VPOCHA(II,IC3) GO TO 9 ENDIF 8 CONTINUE 9 CONTINUE 7 CONTINUE ENDIF C- VERIFICATION DE LA PRESENCE DE L'ELECTRON PARMI LES COMPOSANTS C IOXYDO=0 ITERPE = 0 ICHF=0 IMIN=0 C C----------------------------- C= BOUCLE SUR LA FORCE IONIQUE C----------------------------- C 5 CONTINUE C C= INITIALISATION C KK = 0 * XMU,XMUNEW,GNEW) ITER = 0 ITSOLI = 0 C C------------------------ C= BOUCLE SUR LES SOLIDES C------------------------ C 80 CONTINUE c On initialise a zero le numero de l'erreur IEM = 0 C C= MODIFICATION DES ÉQUATIONS PAR ÉLIMINATION DES SOLIDES C= (POUR TRSOL4 JNFI=1 CALCUL AVEC TOT, JNFI>1 CALCUL AVEC C) IF(IERR.NE.0)RETURN C Test de l'erreur dans CHMSL4 IF (IEM.EQ.7) THEN write(6,*) 'Probleme: violation de la regle des phases ' , & ' pour l element', II ENDIF C C= RESOLUTION DU SYSTEME MATRICIEL C C Test de l'erreur dans CHMSLV IF (IEM.NE.0) THEN C analyse du type d'erreur IF (IEM.EQ.8) THEN C erreur de type 8 : pb dans la resolution du systeme lineaire write(6,*) 'Probleme dans la resol du systeme lineaire ' , & ' pour l element', II C INTERR(1)=II C CALL ERREUR(49) C RETURN ELSEIF (IEM.EQ.1) THEN c erreur de type 1 : nombre d'iteration superieur a ITMAX C ENDIF MOTERR(1:8)='ITMAX ' IF(IOXYDO.EQ.2) THEN IF(ICHF.EQ.0 ) THEN C CHARGEMENT DE IDSCHI * MLDECY,MLNAME,MLIONZ,IDSCHI,MLNESP) C CHARGEMENT EVENTUEL DE LGKMOD OU LGKTMP C CHARGEMENT DE SP2 DO 36 J=1,NXDIM TOT(J)= IPTOT.VPOCHA(II,IDXTOT.ITDX(J)) GX(J)= IPLGC.VPOCHA(II,IDXLGC.ITDX(J)) XX(J)=10.D0**GX(J) IF(IDX(J).NE.50)THEN IF(TOT(J).LE.0.D0)THEN TOT(J)=1.D-25 ENDIF ENDIF 36 CONTINUE IF(IZTYP4.NE.0)THEN NN4=MLPREC.LECT(/1) DO 17 IC4=1,NN4 IF(IZPRE.VPOCHA(II,IC4).EQ.1.D0)THEN ID=MLPREC.LECT(IC4) LIN=5 LEN=4 ENDIF 17 CONTINUE ENDIF XMU = 0.D0 XMUNEW = 0.D0 C C IADSORB = NADSORB IF (IZTEMP.NE.0) THEN TMPNEW = IPTEMP.VPOCHA(II,1) ELSE TMPNEW = 25.D0 ENDIF C IF (IZFI.EQ.0) THEN ELSE XMUNEW = IZFI.VPOCHA(II,1) ENDIF JNFI = 1 C write(6,*)' XMUNEW XMU avant CHMKMD 3 ',XMUNEW,XMU * XMU,XMUNEW,GNEW) C write(6,*)' XMUNEW XMU apres CHMKMD 3 ',XMUNEW,XMU * C WRITE(6,*)' GK avant CLIM2 ',(idy(j),GK(J),J=1,NYDIM) IF (IZCLIM.NE.0) THEN MC3 = ICOTY3.LECT(/1) IJ=NN(1)+NN(2)+1 IK=NN(1)+NN(2)+NN(3) DO 39 IC3=1,MC3 DO 37 IL=IJ,IK IF(IDY(IL).EQ.ICOTY3.LECT(IC3))THEN GK(IL) = GK(IL)+JZT3.VPOCHA(II,IC3) GO TO 38 ENDIF 37 CONTINUE 38 CONTINUE 39 CONTINUE C WRITE(6,*)' GK apres CLIM2 ',(idy(j),GK(J),J=1,NYDIM) ENDIF IF(ITERPE.EQ.0) THEN PEMIN=PEMAX PEMAX =PEMAX + DE PE = PEMAX ICHDE=ICHDE+1 ELSE IF(ISENS.EQ.1) THEN PEMIN=PEMAX PEMAX =PEMAX + DE PE = PEMAX ITERPE=0 ICHDE=ICHDE+1 ELSE PEMAX=PEMIN PEMIN =PEMIN - DE PE = PEMAX ITERPE=0 ICHDE=ICHDE+1 ENDIF ENDIF IF(ICHDE.GT.MAXDE)THEN MOTERR(1:8)='MDELPE ' IF(IIMPI.NE.0)THEN WRITE(6,*) ' *************************', S '***********************' WRITE(6,*) ' ************* NOEUD ',NUM(1,II), S '*******************' WRITE(6,*) ' *************************', S '***********************' WRITE(6,*)' ' WRITE(6,*)' *** TEMPERATURE ',REAL(TMPNEW), S ' DEGRE CELSIUS' WRITE(6,*)' ' WRITE(6,19) XMUNEW WRITE(6,*)' ' ENDIF RETURN ENDIF ID = 99 LIN = 6 LEN = 3 GK(IDYT) = PE XX(IDXT) = 10.D0 ** GX(IDXT) TOT(IDXT) = 0.D0 GO TO 5 ENDIF c FIN "IF (IOXYDO.EQ.2) THEN" ENDIF c CALL ERREUR(460) c RETURN c FIN "IF (IEM.NE.8) THEN" ENDIF c FIN "IF (IEM.NE.0) THEN" ENDIF C C= CALCUL DES COMPOSANTS ÉLIMINÉS C= VÉRIFICATION DES PHASES PRÉCIPITÉS OU AQUEUSES C IF (KK.NE.0) THEN * write(6,*)'chimi2 kk',KK ITSOLI = ITSOLI + 1 * write(6,*)'chimi2 itsoli',ITSOLI,'isolm',ISOLM IF (ITSOLI.GT.ISOLM) THEN MOTERR(1:8)='ITERSOLI' IF (IIMPI.GT.0)THEN ENDIF IF(IOXYDO.EQ.2)THEN ICHSLX=ICHSLX+1 IF(ICHSLX.GE.MAXDE)THEN RETURN ENDIF ENDIF GOTO 21 ENDIF C C--------------- GOTO 80 C--------------- C ENDIF C C= CALCUL DE LA FORCE IONIQUE C 21 CONTINUE * write(6,*)'chimi2 appel de chmout' * write(6,*)'noeud:',num(1,II) * write(6,19) xmunew * call chmout(idschi,sp2,affi) JNFI = JNFI + 1 * write(6,*)'chimi2 nfi',nfi,'jnfi',jnfi C C------------------------- IF (JNFI.LT.NFI) GOTO 5 C------------------------- C C- TEST D'ARRET DU DICHOTOMIE LOSQUE ON IMPOSE UNE QUANTITE DE E- C IF (IOXYDO.EQ.2) THEN CCC JNFI = 1 CCC ITERPE = ITERPE + 1 IF (ITERPE.EQ.1) THEN QSTO = - CC(IPOS99) Q99MAX = QSTO PE = PEMIN IF (ABS((QSTO -Q99)/Q99).LE.EPREC2) THEN GO TO 53 ENDIF C!!! GK(IDYT) = PE GX(IDXT) =-GK(IDYT) XX(IDXT) = 10.D0 ** GX(IDXT) TOT(IDXT) = 0.D0 C!!!!!!! GOTO 5 ENDIF QFIND = - CC(IPOS99) Q99MAX= - CC(IPOS99) ENDIF IF(IMIN.EQ.1) THEN Q99MIN= - CC(IPOS99) ENDIF Q99MIN = QFIND IF (QFIND.GE.QSTO) THEN ISENS =-1 ELSE ISENS = 1 ENDIF IF (ABS((QFIND-Q99)/Q99).LE.EPREC2) THEN GO TO 53 ENDIF ENDIF IF(ICHF.EQ.0) THEN IF((Q99-Q99MIN)*(Q99MAX-Q99).GE.0.D0)THEN ICHF=1 IMIN=0 ELSEIF((Q99-Q99MAX)*(Q99MAX-Q99MIN).GT.0.D0 ) THEN IF(Q99.GT.Q99MAX)ITERPE = 1 Q99MIN=Q99MAX IMIN=0 PEMIN=PEMAX PEMAX=PEMAX+DE PE = PEMAX ICHDE=ICHDE+1 GO TO 55 C PE < PEMAX = F(PH) ELSEIF((Q99MIN-Q99)*(Q99MAX-Q99MIN).GT.0.D0 ) THEN IF(Q99.GT.Q99MAX)ITERPE = 1 Q99MAX=Q99MIN IMIN=1 PEMAX=PEMIN PEMIN=PEMIN - DE PE = PEMIN ICHDE=ICHDE+1 GO TO 55 C PE > PEMIN = F(PH) ENDIF ENDIF IF (ABS((QFIND-Q99)/Q99).LE.PRECPE) THEN GO TO 53 ENDIF C IF(ITERPE.GT.2) THEN C IF( ABS(PEMAX - PE).LE.1.D-15) THEN C CALL CHMCHL(IDSCHI,SP2,IZTR,PE) C GO TO 54 C ENDIF C IF( ABS(PE - PEMIN).LE.1.D-15) THEN C CALL CHMCHL(IDSCHI,SP2,IZTR,PE) C GO TO 54 C ENDIF C ENDIF IF (ISENS.EQ.1) THEN IF (QFIND.GT.Q99) THEN PEMAX = PE Q99MAX = QFIND ELSE PEMIN = PE Q99MIN = QFIND ENDIF ELSE IF (QFIND.GT.Q99) THEN PEMIN = PE Q99MIN = QFIND ELSE PEMAX = PE Q99MAX = QFIND ENDIF ENDIF IF (MOD(ITERPE,2).EQ.0) THEN QTETA = (LOG10(Q99) -LOG10(Q99MAX)) S / (LOG10(Q99MIN) - LOG10(Q99MAX)) ELSE QTETA = 0.5D0 ENDIF PE = QTETA * PEMIN + (1.D0 - QTETA) * PEMAX 55 CONTINUE IF(ICHDE.GT.MAXDE)THEN MOTERR(1:8)='MDELPE ' IF(IIMPI.NE.0)THEN WRITE(6,*) ' *************************', S '***********************' WRITE(6,*) ' ************* NOEUD ',NUM(1,II), S '*******************' WRITE(6,*) ' *************************', S '***********************' WRITE(6,*)' ' WRITE(6,*)' *** TEMPERATURE ',REAL(TMPNEW), S ' DEGRE CELSIUS' WRITE(6,*)' ' WRITE(6,19) XMUNEW WRITE(6,*)' ' ENDIF RETURN ENDIF IF (ITERPE.LE.NITEPE) THEN GK(IDYT) = PE GX(IDXT) =-GK(IDYT) XX(IDXT) = 10.D0 ** GX(IDXT) TOT(IDXT) = 0.D0 C!!!!!!! GOTO 5 ELSE MOTERR(1:8)='NITERPE' IF(IIMPI.GT.1)THEN WRITE(6,*) ' ' WRITE(6,*) ' ** NON CONVERGENCE DICHOTOMIE PE **' WRITE(6,*) ' ** NOEUD **',II WRITE(6,'(A20,3D15.8)') ' PE PEMAX PEMIN ', * PE,PEMAX,PEMIN WRITE(6,'(A20,3D15.8)') ' PEMAX(MIN) - PE ', * PEMAX-PE,PE-PEMIN WRITE(6,'(A20,3D15.8)') ' Q QMAX QMIN ', * Q99,Q99MAX,Q99MIN WRITE(6,'(A20,3D15.8)') ' QMAX(MIN) - Q /Q ', * (Q99MAX-Q99)/Q99,(Q99-Q99MIN)/Q99 ENDIF ENDIF * 53 CONTINUE GK(IDYT) = PE GX(IDXT) = -PE XX(IDXT) = 10.D0 ** GX(IDXT) TOT(IDXT) = Q99 * WRITE(6,*)' PEFINAL 1 ',PE,' ITERPE ',ITERPE,'MAX ' IDECY(IDYT)=0 ENDIF 54 CONTINUE C C C= BILAN TOTAUX ET AQUEUX POUR CHAQUE COMPOSANT C C C= IMPRESSION DE CONTROLE C IF (IIMPI.NE.0) THEN IF(MLIMPR.GT.0) THEN NPIMPR=MLIMPR.LECT(/1) DO 56 I=1,NPIMPR IF(MLIMPR.LECT(I).EQ.NUM(1,II))GO TO 57 56 CONTINUE GO TO 58 ENDIF 57 CONTINUE WRITE(6,*) ' *************************', S '***********************' WRITE(6,*) ' ************* NOEUD ',NUM(1,II), S '*******************' WRITE(6,*) ' *************************', S '***********************' WRITE(6,*)' ' * WRITE(6,*)' *** TEMPERATURE ', TMPNEW ,' DEGRE CELSIUS' WRITE(6,*)' *** TEMPERATURE ',REAL(TMPNEW), S ' DEGRE CELSIUS' WRITE(6,*)' ' WRITE(6,19) XMUNEW WRITE(6,*)' ' 19 FORMAT(8X,'CALCULATED IONIC STRENGTH = ',1PE12.4) ENDIF 58 CONTINUE C C==================================== C= CHARGEMENT DES RESULTATS C==================================== C C C= FORCE IONIQUE C IF (ICHFIO.NE.0) THEN ICHFIO.VPOCHA(II,1)= XMU ENDIF C C JI = NN(1)+NN(2) JJ = NN(1)+NN(2)+NN(3)+1 JK = NN(1)+1 JL = NN(1)+NN(2)+NN(3)+NN(4) JJA = MLNN.LECT(1)+MLNN.LECT(2)+MLNN.LECT(3) C write(6,*)' NN(1),NN(2),NN(3) ',NN(1),NN(2),NN(3) C C ESPECES SOLUBLES C IF (ICHSOL.NE.0) THEN KK=0 DO 30 K=1,JI IDYT = MLIDY.LECT(K) IF(MLDECY.LECT(K).EQ.0)THEN DO 29 J=1,JI IF (IDY(J).EQ.IDYT) THEN KK=KK+1 ICHSOL.VPOCHA(II,KK)=CC(J) GOTO 31 ENDIF 29 CONTINUE ENDIF 31 CONTINUE 30 CONTINUE IF(IOXYDO.EQ.2)THEN KK=KK+1 ICHSOL.VPOCHA(II,KK)=10.D0**(-PE) ENDIF ENDIF C C ESPECES PRECIPITES C IF (ICHPRE.NE.0) THEN DO 41 K=1,N2 IDYT = MLIDY.LECT(JJA+K ) DO 40 J=JJ,JL IF (IDY(J).EQ.IDYT) THEN ICHPRE.VPOCHA(II,K) = CC(J) GOTO 41 ENDIF 40 CONTINUE 41 CONTINUE ENDIF C C ESPECES DE SURFACE C IF (ICHSUR.NE.0) THEN KK = 0 DO 50 K=1,JI IF ( MLDECY.LECT(K).NE.0 ) THEN IDYT = MLIDY.LECT(K) DO 51 J=1,JI IF (IDY(J).EQ.IDYT) THEN KK = KK+1 ICHSUR.VPOCHA(II,KK)=CC(J) GOTO 52 ENDIF 51 CONTINUE 52 CONTINUE ENDIF 50 CONTINUE ENDIF C C= TYP3 C IF (MCHTY3.NE.0) THEN JJ = NN(1) + NN(2) + NN(3) JK = JJ - JI DO 343 K=1,JK IDYT = MLIDY.LECT(JI+K) DO 342 J=JI+1,JJ IF (IDY(J).EQ.IDYT) THEN ICHTY3.VPOCHA(II,K)=CC(J) GOTO 341 ENDIF 342 CONTINUE 341 CONTINUE 343 CONTINUE ENDIF C C= TYP5 C IF (MCHTY5.NE.0) THEN JJ = NN(1) + NN(2) + NN(3) JK = NN(5) JM = NN(1) + NN(2) + NN(3) + NN(4) + NN(5) C write(6,*)' jj jk jm jl',jj,jk,jm,jl DO 543 K=1,JK IDYT = IDY(JL+K) DO 542 J=JJ+1,JM IF (MLIDY.LECT(J).EQ.IDYT) THEN C write(6,*)' idyt,j,CC(JL+K) ',idyt,j,CC(JL+K) ICHTY5.VPOCHA(II,J-JJ) = CC(JL+K) GOTO 541 ENDIF 542 CONTINUE 541 CONTINUE 543 CONTINUE ENDIF C C= TYP6 C IF (MCHTY6.NE.0) THEN JJ = NN(1) + NN(2) + NN(3) + NN(4) + NN(5) JK = NN(6) JL = NN(1) + NN(2) + NN(3) + NN(4) + NN(5) + NN(6) DO 642 K=1,JK IDYT = MLIDY.LECT(JJ+K) DO 643 J=JJ+1,JL IF (IDY(J).EQ.IDYT) THEN ICHTY6.VPOCHA(II,K)=CC(J) GOTO 641 ENDIF 643 CONTINUE 641 CONTINUE 642 CONTINUE ENDIF C C POLES C IF(MCHPOL.NE.0)THEN JJ = NN(1) + NN(2) + NN(3) + NN(4) + NN(5) JK = NN(6) KZZ=0 DO K=1,JK IDYT=MLIDY.LECT(JJ+K) DO J=1,NPDIM IF(IDP(J).EQ.IDYT)THEN DO KZ=1,NZDIM IF(FF(KZ,J).NE.0)THEN KZZ=KZZ+1 ICHPOL.VPOCHA(II,KZZ)=FF(KZ,J) * write(6,*)'chimi2 ichpol.vpocha',ichpol.vpocha(II,KZZ) GOTO 647 ENDIF END DO ENDIF END DO 647 CONTINUE END DO ENDIF * write(6,*)'chimi2 ichpol.vpocha(/2)',ichpol.vpocha(/2) C C LOGK DES SOLUTIONS SOLIDES C IF(MCHGKS.NE.0)THEN JJ=NN(1)+NN(2)+NN(3) JK=NZDIM JL=NN(1)+NN(2)+NN(3)+NN(4)+NN(5)+NN(6) DO K=1,JK IDZT=IDZ(K) * write(6,*)'chimi2 idzt',idzt DO J=JJ+1,JL IF(IDY(J).EQ.IDZT)THEN ICHGKS.VPOCHA(II,K)=GK(J) * write(6,*)'chimi2 ichgks.vpocha',ichgks.vpocha(II,K) GOTO 648 ENDIF END DO 648 CONTINUE END DO ENDIF * write(6,*)'chimi2 ichgks.vpocha(/2)',ichgks.vpocha(/2) C C= MISE EN MEMOIRE DES MINERAUX PRECIPITES C IF((MCHTY4.NE.0).AND.(ISORT.EQ.2)) THEN JJB = NN(1) + NN(2) + NN(3) + 1 JL = NN(1) + NN(2) + NN(3) + NN(4) DO 90 K=1,N2 IDYT = MLIDY.LECT(JJA+K ) DO 91 J=JJB,JL IF (IDY(J).EQ.IDYT) THEN IF (CC(J).GT.1.D-27) THEN IZPRE.VPOCHA(II,K)=1.D0 ENDIF GOTO 90 ENDIF 91 CONTINUE 90 CONTINUE ENDIF C C= MISE EN MEMOIRE DES MINERAUX DISSOUS C IF((MCHTY4.NE.0).AND.(ISORT.EQ.2)) THEN JJB = NN(1) + NN(2) + NN(3) + NN(4) + 1 JL = NN(1) + NN(2) + NN(3) + NN(4) + NN(5) DO 92 K=1,N2 IDYT = MLIDY.LECT(JJA+K ) DO 93 J=JJB,JL IF (IDY(J).EQ.IDYT) THEN IZPRE.VPOCHA(II,K)=0. GOTO 92 ENDIF 93 CONTINUE 92 CONTINUE ENDIF C C= MISE EN MEMOIRE DU CODE D'ERREUR C IF (ICHERR.NE.0) THEN ICHERR.VPOCHA(II,1)= IEM ENDIF C C================================================== C= CHARGEMENT DES CHPOIN DE TRAVAIL C================================================== C DO 60 JJ=1,NXDIM DO 60 J=1,NXDIM IF (IDX(J).EQ.MLIDX.LECT(JJ)) THEN ICHAQU.VPOCHA(II,JJ) = TOTAQ(J) ICHFIX.VPOCHA(II,JJ) = TOTFIX(J) ICHLGC.VPOCHA(II,JJ) = GX(J) GOTO 60 ENDIF 60 CONTINUE C C------------------------------------ C= ETIQUETTE DE BOUCLE SUR LES POINTS C------------------------------------ C 100 CONTINUE C LE MENAGE IF((MCHTY4.NE.0).AND.(ISORT.NE.2))THEN MCHPOI=MCHTY4 MSOUPO=IPCHP(1) MPOVAL=IZPRE SEGSUP MPOVAL,MSOUPO,MCHPOI MCHTY4=0 IZPRE=0 ENDIF SEGSUP IDSCHI SEGSUP SP2,IZVBID,IZBID1 SEGSUP MLMOTX,IZTR SEGSUP IDXTOT,IDXLGC C C ON DESACTIVE LES DONNEES SEGDES MLAA,MLOGK,MLFF,MLIDX,MLIDY,MLIDZ,MLNN,MLDECY,MLNAME,MLNESP SEGDES MLIONZ,MLIDP MLENTI=MLCOMP SEGDES MLENTI IF(MLSOSO.NE.0)THEN * write(6,*)'chimi2 desactivation mlsoso',mlsoso MLENTI=MLSOSO MLMOTS=MMSOSO SEGDES MLENTI,MLMOTS ENDIF IF(MLPOLE.NE.0)THEN MLENTI=MLPOLE MLMOTS=MMPOLE SEGDES MLENTI,MLMOTS ENDIF IF(MLSOLU.NE.0)THEN MLENTI=MLSOLU MLMOTS=MMSOLU SEGDES MLENTI,MLMOTS ENDIF IF(MLPREC.NE.0)THEN MLENTI=MLPREC MLMOTS=MMPREC SEGDES MLENTI,MLMOTS ENDIF IF(MLSURF.NE.0)THEN MLENTI=MLSURF MLMOTS=MMSURF SEGDES MLENTI,MLMOTS ENDIF IF(MLTYP3.NE.0)THEN MLENTI=MLTYP3 MLMOTS=MMTYP3 SEGDES MLENTI,MLMOTS ENDIF IF(MLTYP6.NE.0)THEN MLENTI=MLTYP6 MLMOTS=MMTYP6 SEGDES MLENTI,MLMOTS ENDIF IF(MLPARF.NE.0)THEN MLENTI=MLPARF SEGDES MLENTI ENDIF IF(MLREAC.NE.0)THEN MLENTI=MLREAC SEGDES MLENTI ENDIF IF(MLIMMO.NE.0)THEN MLENTI=MLIMMO SEGDES MLENTI ENDIF SEGDES IPTOT,IPLGC IF(IZTEMP.NE.0)THEN SEGDES IPTEMP ENDIF IF(MLIMPR.NE.0)THEN MLENTI=MLIMPR SEGDES MLENTI ENDIF IF(IZFI.NE.0)THEN SEGDES IZFI ENDIF IF(IZCLIM.NE.0)THEN SEGDES JZT3 SEGSUP ICOTY3 ENDIF IF(IZRED.NE.0)THEN SEGSUP IZRED ENDIF SEGDES MELEME C C ON CREE LA TABLE RESULTAT * MCHTY6,MCHFIO,MCHPRE,MCHPOL,MCHGKS,MCHLGC,MCHERR) RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales