⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 compart.f

📁 对工业生产过程结晶过程的一个仿真程序软件包
💻 F
📖 第 1 页 / 共 4 页
字号:
     &                *delR1*delR2**3                 mu21(k)=mu21(k)     &                +(f(i,j)*dble(i-1)**2*dble(j-1)     &                +f(i,j+1)*dble(i-1)**2*dble(j)     &                +f(i+1,j)*dble(i)**2*dble(j-1)     &                +f(i+1,j+1)*dble(i)**2*dble(j))/4.0D0     &                *delR1**3*delR2**2                 mu12(k)=mu12(k)     &                +(f(i,j)*dble(i-1)*dble(j-1)**2     &                +f(i,j+1)*dble(i-1)*dble(j)**2     &                +f(i+1,j)*dble(i)*dble(j-1)**2     &                +f(i+1,j+1)*dble(i)*dble(j)**2)/4.0D0     &                *delR1**2*delR2**3                 mu22(k)=mu22(k)     &                +(f(i,j)*dble(i-1)**2*dble(j-1)**2     &                +f(i,j+1)*dble(i-1)**2*dble(j)**2     &                +f(i+1,j)*dble(i)**2*dble(j-1)**2     &                +f(i+1,j+1)*dble(i)**2*dble(j)**2)/4.0D0     &                *delR1**3*delR2**3                 mu30(k)=mu30(k)     &                +(f(i,j)*dble(i-1)**3     &                +f(i,j+1)*dble(i-1)**3     &                +f(i+1,j)*dble(i)**3     &                +f(i+1,j+1)*dble(i)**3)/4.0D0     &                *delR1**4*delR2                       mu31(k)=mu31(k)     &                +(f(i,j)*dble(i-1)**3*dble(j-1)     &                +f(i,j+1)*dble(i-1)**3*dble(j)     &                +f(i+1,j)*dble(i)**3*dble(j-1)     &                +f(i+1,j+1)*dble(i)**3*dble(j))/4.0D0     &                *delR1**4*delR2**2              ENDDO           ENDDO             volume(k)=mu21(k)-2.0D0/3.0D0*mu30(k)                 END IF*       Current growth rate        G1rate(k)=growth1(conc(k), Concs(k))        G2rate(k)=growth2(conc(k), Concs(k))*       Current nucleation rate        Brate(k)=birth(conc(k),Concs(k), volume(k))*       Mesh boundary        mratei=mratei+G1rate(k)*delT        mratej=mratej+G2rate(k)*delT        meshi1=starti1+DNINT(mratei)        meshi2=starti2+DNINT(mratei)        meshi3=starti3+DNINT(mratei)        meshj1=startj1+DNINT(mratej)        meshj2=startj2+DNINT(mratej)        meshj3=startj3+DNINT(mratej)        IF(meshi3.GT.maxR1R2) THEN           meshi3=maxR1R2           WRITE(200+myrank,100)'meshi3 is larger than maxR1R2'        END IF                IF(meshj3.GT.maxR1R2)THEN           meshj3=maxR1R2           WRITE(200+myrank,100)'meshj3 is larger than maxR1R2'        END IF*       Write f to file        IF (K .EQ. skipNext) THEN            nfile=nfile+1           nUnit=nfile+myrank           WRITE(fname(2:3), '(I2)')nfile           WRITE(fname(5:6), '(I2)')myrank+10           OPEN(UNIT=nUnit, FILE=fname, FORM='FORMATTED',     &          ACCESS='SEQUENTIAL', STATUS='UNKNOWN')           DO i=1, totR1pts,skipR1              DO j=1, totR2pts,skipR2                 IF (f(i,j).GE.1.0D-16.OR.(f(i,j).LE.-1.0D-16)) THEN                    WRITE(nUnit,30) i,j,time(k), f(i,j)                 ELSE                    WRITE(nUnit,30) i,j,time(k), 0.0D0                 END IF              ENDDO           ENDDO          CLOSE(UNIT=nUnit)          m=m+1          skipNext=m*skipT       END IF      ENDDO      IF(numprocs.GT.1)THEN         WRITE(mu1name(5:6), '(I2)')myrank+10         WRITE(mu2name(5:6), '(I2)')myrank+10         WRITE(mu3name(5:6), '(I2)')myrank+10         WRITE(timename(6:7), '(I2)')myrank+10         WRITE(concname(6:7), '(I2)')myrank+10         WRITE(tgbname(5:6), '(I2)')myrank+10      END IF      OPEN(UNIT=myrank*10+21, FILE=mu1name, FORM='FORMATTED',     &     ACCESS='SEQUENTIAL', STATUS='UNKNOWN')      OPEN(UNIT=myrank*10+22, FILE=mu2name, FORM='FORMATTED',     &     ACCESS='SEQUENTIAL', STATUS='UNKNOWN')      OPEN(UNIT=myrank*10+23, FILE=mu3name, FORM='FORMATTED',     &     ACCESS='SEQUENTIAL', STATUS='UNKNOWN')      OPEN(UNIT=myrank*10+24, FILE=timename, FORM='FORMATTED',     &     ACCESS='SEQUENTIAL', STATUS='UNKNOWN')      OPEN(UNIT=myrank*10+25, FILE=concname, FORM='FORMATTED',     &     ACCESS='SEQUENTIAL', STATUS='UNKNOWN')      OPEN(UNIT=myrank*10+26, FILE=tgbname, FORM='FORMATTED',     &     ACCESS='SEQUENTIAL', STATUS='UNKNOWN')      DO k=1,totTpts,skipT1          WRITE(myrank*10+24,10) time(k)         WRITE(myrank*10+25,20) Concs(k), Conc(k), superConc(k)         WRITE(myrank*10+26,25) time(k), T(k), G1rate(k),      &        G2rate(k), Brate(k)         WRITE(myrank*10+21,15) mu00(k), mu10(k), mu01(k), mu11(k)         WRITE(myrank*10+22,15) mu20(k), mu02(k), mu21(k), mu12(k)         WRITE(myrank*10+23,15) mu22(k), mu30(k), mu31(k),volume(k)      ENDDO      IF(myrank.EQ.numprocs-1) THEN         OPEN(UNIT=27, FILE='const.dat', FORM='FORMATTED',     &        ACCESS='SEQUENTIAL', STATUS='UNKNOWN')          OPEN(UNIT=1000, FILE='domain.dat', FORM='FORMATTED',     &        ACCESS='SEQUENTIAL', STATUS='UNKNOWN')          WRITE(27, 10) totTime         WRITE(27, 10) delT         WRITE(27, 10) delR1         WRITE(27, 10) delR2          WRITE(27, 11) skipT         WRITE(27, 11) skipR1         WRITE(27, 11) skipR2         WRITE(27, 11) totR1pts         WRITE(27, 11) totR2pts         WRITE(27, 11) totTpts         WRITE(27, 11) numprocs         CLOSE (UNIT=27)         CLOSE(UNIT=1000)      END IF      1000  CLOSE (UNIT=myrank*10+21)      CLOSE (UNIT=myrank*10+22)      CLOSE (UNIT=myrank*10+23)      CLOSE (UNIT=myrank*10+24)      CLOSE (UNIT=myrank*10+25)      CLOSE (UNIT=myrank*10+26)      CLOSE (unit=200+myrank) 10   FORMAT(E13.6, 1X) 11   FORMAT(I9) 12   FORMAT(2(E13.6, 1X)) 15   FORMAT(4(E13.6,1X)) 20   FORMAT(3(E13.6,1X)) 21   FORMAT(3(E13.6,1X)) 25   FORMAT(5(E13.6,1X))   30   FORMAT(I8, I8, 2(E13.6,1X))  40   FORMAT(E13.6, 1X) 50   FORMAT(E13.6,1X, 3(I5,1x),E13.6) 60   FORMAT(6(I4,1x)) 70   FORMAT(E13.6,1x,6(I5,1x)) 80   FORMAT(E13.6,1x,4(I5,1x),E13.6) 90   FORMAT(A,I4,A,I4,A,I4,A,I4,A,I4,A,I4) 100  FORMAT(A) 110  FORMAT(A,1x,I6) 120  FORMAT(A,1X,E13.6) 130  FORMAT(A,1X,I6,1x,I6) 140  FORMAT(A,1X,I6,1x,E13.6) 150  FORMAT(A,1X,E13.6,1X,I6,1X,I6) 160  FORMAT(A,1X,E13.6,1X,E13.6) 170  FORMAT(E23.16) 180  FORMAT(2(I9,1X))      CALL MPI_FINALIZE(ierr)      stop       end*************************************************************************      REAL*8 FUNCTION Temp(time)*     Crystallizer temperature setpoint profile for the*     simulation of a batch cooling crystallizer**     input:   time - second*     output:  Temp - temperature in  degrees Centigrade      REAL*8 time,tot_time,init_temp,final_temp      COMMON /simTIME/tot_time      COMMON /temperature/init_temp,final_temp      Temp=(final_temp-init_temp)/tot_time*time+init_temp      RETURN      END            **-*-*-*-*-*-*-*-*-*-*_*-*-*-*-*-*-*_*-*-*-*-*-*-*_*-*-*-*-*-*-*_*-*-***      REAL*8 FUNCTION Csat(Temp)*     saturation concentration for the simulation of a*     cooling batch crystallizer (potassium nitrate-water)*     system, from Appendix C in Miller**     input:  Temp - temperature (30-50 degree Centigrade)*     output: Csat - saturation concentration *                    (g KDP/g water)      REAL*8 Temp      REAL*8 CA, CB      COMMON /Csat_DATA/CA, CB*      Csat=CA*Temp+CB*     from rudy g/g-solvent      Csat=9.3027D-5*Temp*Temp - 9.7629D-5*Temp + 0.2087D0      RETURN      END**-*-*-*-*-*-*-*-*-*-*_*-*-*-*-*-*-*_*-*-*-*-*-*-*_*-*-*-*-*-*-*_*-*-***      REAL*8 FUNCTION growth1(conc, concs)*     growth rate for the simulation of a cooling batch*     crystallizer*     *     arguments:  conc - solute concentration*                 concs - saturation concentration*     non-argument input: D1, E1 kinetic rate parameters*     output: growth - growth rate      REAL*8 conc,concs,rhoc,Temp,g1,kg1       COMMON /g1data/g1,kg1      COMMON /rhoc/rhoc      IF(conc.GE.concs)THEN         growth1=kg1*((conc-concs)/concs)**g1      ELSE         growth1=0.0D0      END IF      RETURN      END      **-*-*-*-*-*-*-*-*-*-*_*-*-*-*-*-*-*_*-*-*-*-*-*-*_*-*-*-*-*-*-*_*-*-***       REAL*8 FUNCTION growth2(conc, concs)*     growth rate for the simulation of a cooling batch*     crystallizer*     *     arguments:  conc - solute concentration*                 concs - saturation concentration*     non-argument input: D2, E2  kinetic rate parameters*     output: growth - growth rate      REAL*8 conc, concs,Temp, rhoc,g2,kg2      COMMON /g2data/g2, kg2       COMMON /rhoc/rhoc      IF(conc.GE.concs)THEN         growth2=kg2*((conc-concs)/concs)**g2      ELSE         growth2=0.0D0      END IF      RETURN      END**-*-*-*-*-*-*-*-*-*-*_*-*-*-*-*-*-*_*-*-*-*-*-*-*_*-*-*-*-*-*-*_*-*-***      REAL*8 FUNCTION birth(conc, concs, volume)*     birthth rate for the simulation of a cooling batch*     crystallizer**     arguments:  conc - solute concentration*                 concs - saturation concentration*                 m21 - 3rd moment*                  volume - total volume*     non-argument input: kb, b kinetic rate parameters*     output: birth - birth rate      REAL*8 conc, concs, volume, kb, b      COMMON /bdata/kb,b      IF(conc.GE.concs)THEN         birth=kb*((conc-concs)/concs)**b*volume      ELSE         birth=0.0D0      END IF      RETURN      END*******************************************************************      REAL*8 FUNCTION Fzero(r1, r2)      *     Initial population density f**     arguments:  r1 - first length of crystal*                 r2 - second length of crystal*     output:     Fzero - inital population density for the given r1, r2*                         # crystals /g solvent/micron**2 *       population density function:**       f0= -0.00034786r1^2 + 0.1363609*r1 - 13.2743*           -0.00034786r2^2 + 0.1363609*r2 - 13.2743**       which is in units of number of crystals/g solvent/micron.*       This function was based on assuming 0.05 g as the mass in*       1650 grams of solvent and 180.5-211.5 microns as the size range*       for the seed crystals, and assuming a quadratic distibution*       function.  The values are valid if mass of seed crystals*       is scaled up proportionally to the mass of solvent.      REAL*8 r1, r2      LOGICAL inRange      inRange=(r1 .GE.180.5) .AND. (r1 .LE. 211.5) .AND.      &        (r2 .GE.180.5) .AND. (r2 .LE. 211.5)*      IF (inRange) THEN          Fzero=( -0.00034786*r1**2 + 0.1363609*r1 - 13.2743     &           -0.00034786*r2**2 + 0.1363609*r2 - 13.2743)*     &         .3987662063472828D+01      ELSE          Fzero=0.0D0        END IF            RETURN      END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -