diff --git a/compile2.sh b/compile2.sh new file mode 100644 index 0000000000000000000000000000000000000000..e1433f88e7ddfcdc6627204ad266a985b7e85a89 --- /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 + diff --git a/drag3.f90 b/drag3.f90 new file mode 100644 index 0000000000000000000000000000000000000000..039a999c735642db86d2f47cbcd2b1711d7b5715 --- /dev/null +++ b/drag3.f90 @@ -0,0 +1,223 @@ + MODULE drag3 + + 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 41886e38a8f5ed769bca505df393953751b998e7..8fb673770fd57abb890deac91524726ffb6f2157 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 0000000000000000000000000000000000000000..6c809aff54932813bc9aa783c8e3c3ac0d0358bf --- /dev/null +++ b/main_drag.f90 @@ -0,0 +1,33 @@ + PROGRAM main_ddt + + 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 \ No newline at end of file diff --git a/param.f90 b/param.f90 index 5a39ca45c1f1b27dfcd444099a196664d18d8644..ee8540e06daad09c4ec60b9796abfc5e99ef4176 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 diff --git a/prmt.mod b/prmt.mod new file mode 100644 index 0000000000000000000000000000000000000000..fbc5c106bbef1e8d13147a0421ec45fb0d9c8dd0 Binary files /dev/null and b/prmt.mod differ