From 84976472b2e69ca82820967251c4d0276c836d43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=91=D1=8B=D1=87=D0=BA=D0=BE=D0=B2=D0=B0=20=D0=92=D0=B8?= =?UTF-8?q?=D0=BA=D1=82=D0=BE=D1=80=D0=B8=D1=8F?= <vika@DESKTOP-QMFV82V.localdomain> Date: Mon, 9 Oct 2023 16:19:00 +0300 Subject: [PATCH] add ddt --- compile2.sh | 10 +++ drag3.f90 | 224 ++++++++++++++++++++++++++++++++++++++++++++++++++ inputdata.f90 | 4 - main_drag.f90 | 33 ++++++++ param.f90 | 2 - 5 files changed, 267 insertions(+), 6 deletions(-) create mode 100644 compile2.sh create mode 100644 drag3.f90 create mode 100644 main_drag.f90 diff --git a/compile2.sh b/compile2.sh new file mode 100644 index 0000000..b6966b8 --- /dev/null +++ b/compile2.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +rm drag_ddt.exe *.o +gfortran -c inputdata.f90 +gfortran -c param.f90 +gfortran -c prmt.f90 +gfortran -c drag3.f90 +gfortran -c main_drag.f90 +gfortran -o drag_ddt.exe main_drag.o drag3.o inputdata.o param.o prmt.o + diff --git a/drag3.f90 b/drag3.f90 new file mode 100644 index 0000000..860abae --- /dev/null +++ b/drag3.f90 @@ -0,0 +1,224 @@ + module DRAG3 + + USE PRMT + USE PARAM + USE INPUTDATA + + !implicit real (A-H, O-Z) + implicit none + type, public:: DATA_IN + real, public:: WS, DT, ST, DQ, CFLH, Z0IN + end type + + type, public:: DATA_OUTDEF + real, public:: ZL, RI, RE, LNZUZT, ZU, ZTOUT, RITH, CM, CH, CT, CKT + end type + + type, public:: DATA_PAR + integer, public :: IT=10 + end type + + + contains + + subroutine surf_flux(in, out, par) + type (DATA_IN) , intent(in) :: in + type (DATA_OUTDEF) out + type (DATA_PAR) par + + real WS, DT, ST, DQ, CFLH, Z0IN + integer IT + real ZL, RI, RE, LNZUZT, ZU, ZTIN, RI_TH, CM, CH, CT, CKT + real Z0, D3, D0MAX, U1, A1, Y1, CIMIN, H1, AP0, F, A2, C1, U2, H0, U3, X7, X8, AN1, AN2, D0, D00, ZT, H00, FT0, AN4, AN5 + real AL, AL2, AN, G, T1, R6, Q4, T4, U, G0, R1, F0, F4, A0, AM, O, DD, X1, Y0, X0, Z3, Y10, A2CH, X10, P1, P0, H, D1, F1 + real D, C4, C1MIN, C0, C, B1, AN0 + integer i, j, m + WS=in%WS + DT=in%DT + ST=in%ST + DQ=in%DQ + CFLH=in%CFLH + Z0IN=in%Z0IN + IT=par%IT + + U=WS + T4=DT + T1=ST + Q4=DQ + H=CFLH + Z0=Z0IN + + D3=0.0E0 + D0MAX=2.0E0 + !=DATA_IN%WS + !4=DATA_IN%DT + !4=DATA_IN%DQ + !=DATA_IN%CFLH + !0=DATA_IN%Z0 + IF(Z0.LT.0.0E0) D0MAX=8.0E0 + IF(Z0.LT.0.0E0) THEN +! ......DEFINITION Z0 OF SEA SURFACE...... + !call Z0SEA module (RAMIL_DASHA) + !U1=U + !A1=0.0E0 + !Y1=25.0E0 + !C1MIN=ALOG(H1/1.0E0)/AP0 + !DO 630 I=1,IT + !F=A2-2.0E0*ALOG(U1) + !DO 570 J=1,IT + !C1=(F+2.0E0*ALOG(Y1))/AP0 + !IF(U.LE.8.0E0) A1=ALOG(1.0E0+A3*((Y1/U1)**3))/AP0 + !C1=C1-A1 + !C1=AMAX1(C1,C1MIN) + !Y1=C1 + !570 CONTINUE + ! Z0=H1*EXP(-C1*AP0) + ! Z0=AMAX1(Z0,0.000015E0) + ! U2=U*ALOG(H1/Z0)/(ALOG(H/Z0)) + ! U1=U2 + !630 CONTINUE + ! J=1 + ! H0=H/Z0 + ! U3=U1/C1 + ! ELSE +! ......PARAMETERS FROM VISCOSITY SUBLAYER...... + ! J=0 + ! H0=H/Z0 + ! U3=U*AP0/ALOG(H0) + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + END IF + X7=U3*Z0/AN + IF(X7.LE.X8) THEN + D0=AN1*ALOG(AL1*X7)+AN2 + ELSE + D0=AL2*(X7**0.45E0) + END IF +! ......HUMIDITY STRATIFICATION AND RI-NUMBER...... + ST=in%ST + AL=G/T1 + D0=AMIN1(D0,D0MAX) + R6=AL*H*(T4+0.61E0*T1*Q4)/U**2 + D00=D0 + ZT=Z0/EXP(D00) + H00=H/ZT + FT0=ALOG(H00) +! ......DEFINITION OF R-PRIM...... + AN4=D1/H0 + AN5=D1/H00 +!C IF(D0.EQ.0.0E0) AN5=AN4 + IF (ABS(D0).LT.1.0E-10) AN5=AN4 + AN5=SQRT(1.0E0-G0*AN5) + AN4=(1.0E0-G4*AN4)**0.25E0 + F0=ALOG((X10-1.0E0)*(AN5+1.0E0)/((X10+1.0E0)*(AN5-1.0E0)))/A0 + F4=2.0E0*(ATAN(Y10)-ATAN(AN4))+ALOG((Y10-1.0E0)*(AN4+1.0E0)/((Y10+1.0E0)*(AN4-1.0E0))) + R1=D1*F0/(F4*F4) +! ......DEFINITION OF DZ,TA,FU,FO,FIU,FIO...... + IF(R6.GT.0.0E0) GO TO 1460 + IF(R6.LT.R1) GO TO 1305 + IF(R6.GT.-0.001E0) THEN +! ......NEARLY NEUTRAL...... + write (*,*) 'NEUTRAL' + F4=ALOG(H0) + F0=FT0/A0 +! IF(D0.EQ.0.0E0) F0=F4/A0 + IF (ABS(D0).LT.1.0E-10) F0=F4/A0 + AM=1.0E0 + O=1.0E0/A0 + GO TO 1570 + ELSE +! ......WEEK AND SEMISTRONG INSTABILITY...... + write (*,*) 'SEMISTRONG' + F1=ALOG(H0) +! IF(D0.EQ.0.0E0)FT0=F1 + IF (ABS(D0).LT.1.0E-10) FT0=F1 + D3=R6*A0*F1**2/FT0 + M=1 + 1245 DO 1300 I=1,IT + D=D3/H0 + DD=D3/H00 +! IF(D0.EQ.0.0E0)DD=D + IF (ABS(D0).LT.1.0E-10) DD=D + Y1=(1.0E0-G4*D3)**0.25E0 + X1=SQRT(1.0E0-G0*D3) + Y0=(1.0E0-G4*D)**0.25E0 + X0=SQRT(1.0E0-G0*DD) + Y0=AMAX1(Y0,1.000001E0) + X0=AMAX1(X0,1.000001E0) + F4=ALOG((Y1-1.0E0)*(Y0+1.0E0)/((Y1+1.0E0)*(Y0-1.0E0)))+2.0E0*(ATAN(Y1)-ATAN(Y0)) + F0=ALOG((X1-1.0E0)*(X0+1.0E0)/((X1+1.0E0)*(X0-1.0E0)))/A0 + IF(M.NE.1) GO TO 1350 + Z3=R6*F4**2/F0 + D3=Z3 + 1300 CONTINUE + M=2 + GO TO 1245 + 1350 AM=(1.0E0-G4*D3)**(-0.25E0) + O=1.0E0/(A0*SQRT(1.0E0-G0*D3)) + GO TO 1570 + END IF +! ......STRONG INSTABILITY..... + 1305 CONTINUE + write (*,*) 'INSTABILITY' + D3=D1 + M=1 + 1355 DO 1410 I=1,IT + D=D3/H0 + DD=D3/H00 +! IF(D0.EQ.0.0E0)DD=D + IF (ABS(D0).LT.1.0E-10) DD=D + A1=(D1/D3)**(1.0E0/3.0E0) + X0=SQRT(1.0E0-G0*DD) + Y0=(1.0E0-G4*D)**0.25E0 + C=ALOG((X0+1.0E0)/(X0-1.0E0)) + B1=-2.0E0*ATAN(Y0)+ALOG((Y0+1.0E0)/(Y0-1.0E0)) + F=3.0E0*(1.0E0-A1) + F4=F/Y10+P1+B1 + F0=(F/X10+P0+C)/A0 + IF(M.NE.1) GO TO 1430 + Z3=R6*F4**2/F0 + D3=Z3 + 1410 CONTINUE + M=2 + GO TO 1355 + 1430 AM=A1/Y10 + O=A1/(A0*X10) + GO TO 1570 +! ......STABLE STRATIFICATION...... + 1460 CONTINUE + write (*,*) 'STABLE' + R6=AMIN1(R6,R0) + F=ALOG(H0) + F1=D0/F + A1=B4*R6 + A2CH=(F1+1.0E0)/A0-2.0E0*A1 + D3=F*(SQRT(A2CH**2+4.0E0*A1*(1.0E0-A1))-A2CH)/(2.0E0*B4*(1.0E0-A1)) + F1=B4*D3 + F4=F+F1 + F0=(F+D0)/A0+F1 + O=1.0E0/A0+F1 + AM=1.0E0+F1 + 1570 CONTINUE +! ......COMPUTATION OF CU,CO,K(H),ALFT + C4=AP0/F4 + C0=AP0/F0 + AN4=AP0*C4*U*H/AM + AN0=AM/O +! ......EXIT...... + 140 CONTINUE + out%ZL=D3 + out%RI=R6 + out%RE=X7 + out%LNZUZT=D00 + out%ZU=Z0 + out%ZTOUT=ZT + out%RITH=R1 + out%CM=C4 + out%CH=C0 + out%CT=AN4 + out%CKT=AN0 + + + + return + end subroutine surf_flux + end module DRAG3 \ No newline at end of file diff --git a/inputdata.f90 b/inputdata.f90 index 41886e3..8fb6737 100644 --- a/inputdata.f90 +++ b/inputdata.f90 @@ -2,10 +2,6 @@ module INPUTDATA REAl, DIMENSION (6) :: AR1 REAl, DIMENSION (11) :: AR2 INTEGER, PARAMETER :: IT =1 - INTEGER, PARAMETER :: N=7094 - REAL HFX, MFX, zL, betta - REAL U, T4,C0,C4, T1,H - REAL ws, deltaT, semisumT !C*==================================================================== !C* .....DEFENITION OF DRAG AND HEAT EXCHANGE COEFFICIENTS...... = !C* DETAILS OF ALGORITM ARE GIVEN IN: = diff --git a/main_drag.f90 b/main_drag.f90 new file mode 100644 index 0000000..4e50962 --- /dev/null +++ b/main_drag.f90 @@ -0,0 +1,33 @@ +program main_ddt + USE PRMT + USE PARAM + USE INPUTDATA + use DRAG3 + + type (DATA_IN):: DATA_IN1 + + type (DATA_OUTDEF) :: DATA_OUTDEF1 + + + type (DATA_PAR) :: DATA_PAR1 + + + OPEN (1,FILE='4_ddt.txt') + + DO I = 1,1000000 + READ (1,*,END=100) DATA_IN1%WS, DATA_IN1%DT + + + call surf_flux(DATA_IN1, DATA_OUTDEF1, DATA_PAR1) + + + + ENDDO + +100 CONTINUE + +10 FORMAT (4I4,5F7.1,F7.4,F7.1) +20 FORMAT (4I4,5F7.1,F7.4,F7.1) + +stop +end program diff --git a/param.f90 b/param.f90 index 5a39ca4..ee8540e 100644 --- a/param.f90 +++ b/param.f90 @@ -1,7 +1,5 @@ module PARAM IMPLICIT REAL (A-H,O-Z) - real, parameter :: RO = 1.2 - real, parameter :: CP =8.4 real, parameter :: AKA=.40E0 real, parameter :: AP0=.40E0 real, parameter :: G=9.81E0 -- GitLab