📄 exphfeq.f90
字号:
!************************************************************************PROGRAM EXPHFEQ IMPLICIT NONE! I RUNTIME INDEX! T TIME! jmax NR. OF GRID-POINTS! TMAX ABSOLUTE TIME = 1 A! LAMBDA HEAT CONDUCTION W M^-1 K^-1! DELTAT TIME STEP ! Q HEAT FLOW (W/M^2) ! ROHC VOLUMETRIC HEAT CAPACITY (J/(M^3K)) = ! 1650 KG/M^3 * 837,2 J/(KG K) ! TEMP TEMPERATURE IN THE PRESENT ! TEMPZ TEMPERATURE IN THE FUTURE ! DELTAX GRID DISTANCE (M) ! ********************************************************************** INTEGER I,T,JMAX,JMAXS,TMAX INTEGER AUSG, FAKTOR INTEGER DELTAT PARAMETER( JMAXS = 200) DOUBLE PRECISION LAMBDA,Q,ROHC,RZ,INITEMP,BC DOUBLE PRECISION TEMP(JMAXS),TEMPZ(JMAXS) DOUBLE PRECISION DELTAX; DOUBLE PRECISION REST,CFL! **********************************************************************! READ PARAMETER OPEN(49,FILE='parameter.dat')1 READ(49,*) LAMBDA2 READ(49,*) ROHC3 READ(49,*) Q4 READ(49,*) RZ5 READ(49,*) TMAX6 READ(49,*) DELTAT7 READ(49,*) INITEMP8 READ(49,*) DELTAX9 READ(49,*) jmax10 READ(49,*) AUSG11 READ(49,*) BC! **********************************************************************! CHECK FOR CFL-STABILITY CFL=(LAMBDA/ROHC)*(DELTAT/DELTAX**2) WRITE(*,*) 'CFL = ', CFL IF(CFL.GT.0.5D0)THEN WRITE(*,*) 'ERROR WITH COURANT-FRIEDRICH-LEVY-CRITERIA' STOP ENDIF! ********************************************************************** OPEN(50,FILE='EXPL.OUT') ! INITIALISING OF THE TEMPERATURMATRIX DO T = 283,15 K = 10癈 ! AVERAGE TEMPERTURE IN THE GROUND DO I=1, jmax TEMP(I)=INITEMP ENDDO! **********************************************************************! NUMBER OF OUTPUTS TO FILE = 20 AUSG=20; FAKTOR = TMAX/AUSG! START CALCULATION DO T=0, TMAX, DELTAT REST = MOD(T,FAKTOR) DO I=1, JMAX! DIRICHLET BORDER CONDITION FIXED TEMPERATURE AT HIGHEST/FIRST GRID POINT TEMP(1) = 283.15+BC TEMP(2) = 283.15+BC TEMP(3) = 283.15+BC! NOW THE MAIN CALCULATION TEMPZ(I)=TEMP(I)+((LAMBDA*DELTAT)/(ROHC*DELTAX*DELTAX))*(TEMP(I-1)-2.D0*TEMP(I)+TEMP(I+1))+RZ! NEUMANN BORDER CONDITION: BORDER FLOW AT LOWEST/LAST GRID POINT ! SETTING LOCAL DERIVATION (ORTS ABLEITUNG) TO A CONCRETE VALUE = 0 TEMPZ(JMAX)=TEMPZ(JMAX-1)! THATS IT - THE NEUMANN BORDER CONDITION ! WRITE OUTPUT FILE IF(REST.EQ.0.0)THEN WRITE(50,'(I8,1X,F20.8)') I, TEMP(I) ENDIF! END OF GRID POINTS LOOP ENDDO! DELIVERY OF THE PROVISIONAL RESULT TO THE TIME LOOP DO I=1, JMAX TEMP(I)=TEMPZ(I) ENDDO IF (REST.EQ.0.0)THEN WRITE(*,*) 'WRITE OUTPUT DO T (DAY) = ',(T/(60*60*24)),' T (SEC): ',T! SEE WHAT HAPPENS ENDIF! END OF TIME LOOP ENDDO END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -