diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..b2e5ffe858c28defec07efbbc2c0ba0bb753e9fc
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+/drag.exe
diff --git a/compile2.sh b/compile2.sh
old mode 100644
new mode 100755
index e1433f88e7ddfcdc6627204ad266a985b7e85a89..fac0309cab857b44bbe7059823b359fcdaf67da3
--- a/compile2.sh
+++ b/compile2.sh
@@ -3,7 +3,6 @@
 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
index 039a999c735642db86d2f47cbcd2b1711d7b5715..41b5bd398b4da3d0637263e9252bbd00ac555567 100644
--- a/drag3.f90
+++ b/drag3.f90
@@ -2,9 +2,10 @@
    
       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
@@ -16,20 +17,80 @@
     type, public:: data_par
 	integer, public :: it=10
 	end type
- 
+
+      type, public:: data_lutyp
+          integer, public :: lu_indx=1
+      end type
 
 	contains
-    
-	SUBROUTINE  surf_flux(in, out, par)
+
+        ! SUBROUTINE  surf_fluxMAS(mas1_w, mas1_dt, mas1_st, mas1_dq, out, par1, lu1)
+        SUBROUTINE  surf_fluxMAS(mas1_w, mas1_dt, mas1_st, mas1_dq, mas1_cflh, mas1_z0in, &
+                masout_zl,  masout_ri, masout_re, masout_lnzuzt, masout_zu, masout_ztout,&
+                masout_rith, masout_cm, masout_ch, masout_ct, masout_ckt,&
+                par1, lu1,numst)
+
+            real, dimension (numst) ::  mas1_w
+            real, dimension (numst) ::  mas1_dt
+            real, dimension (numst) ::  mas1_st
+            real, dimension (numst) ::  mas1_dq
+            real, dimension (numst) ::  mas1_cflh
+            real, dimension (numst) ::  mas1_z0in
+
+            real, dimension (numst) :: masout_zl
+            real, dimension (numst) :: masout_ri
+            real, dimension (numst) :: masout_re
+            real, dimension (numst) :: masout_lnzuzt
+            real, dimension (numst) :: masout_zu
+            real, dimension (numst) :: masout_ztout
+            real, dimension (numst) :: masout_rith
+            real, dimension (numst) :: masout_cm
+            real, dimension (numst) :: masout_ch
+            real, dimension (numst) :: masout_ct
+            real, dimension (numst) :: masout_ckt
+
+            type (data_in)  in
+            type (data_outdef) out
+            type (data_par) par1
+            type (data_lutyp) lu1
+            integer i,numst
+
+            do i=1,numst
+                in%ws=mas1_w(i)
+                in%dt=mas1_dt(i)
+                in%st=mas1_st(i)
+                in%dq=mas1_dq(i)
+                in%cflh=mas1_cflh(i)
+                in%z0in=mas1_z0in(i)
+
+                CALL surf_flux(in, out, par1, lu1)
+
+                masout_zl(i)=out%zl
+                masout_ri(i)=out%ri
+                masout_re(i)=out%re
+                masout_lnzuzt(i)=out%lnzuzt
+                masout_zu(i)=out%zu
+                masout_ztout(i)=out%ztout
+                masout_rith(i)=out%rith
+                masout_cm(i)=out%cm
+                masout_ch(i)=out%ch
+                masout_ct(i)=out%ct
+                masout_ckt(i)=out%ckt
+            enddo
+        END SUBROUTINE  surf_fluxMAS
+
+        SUBROUTINE  surf_flux(in, out, par, lu)
     type (data_in) , intent(in) :: in
     type (data_outdef) out   
-    type (data_par) par 
+    type (data_par) par
+    type (data_lutyp) lu
 
     real ws, dt, st, dq, cflh, z0in
 	integer it
+    integer lu_indx
     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 z0, d3, d0max, u1, a1, y1, cimin, f, c1, u2, h0, u3, x7, d0, d00, zt, h00, ft0, an4, an5
+    real al, t1, r6, q4, t4, u, r1, f0, f4, 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
@@ -46,44 +107,48 @@
     q4=dq
     h=cflh
     z0=z0in
+
+    AN5=(A6/A0)**4
+    D1=(2.0E0*G10-AN5*G4-SQRT((AN5*G4)**2+4.0E0*AN5*G10*(G10-G4)))/(2.0E0*G10**2)
+    Y10=(1.0E0-G4*D1)**.25E0
+    X10=(1.0E0-G10*D1)**.5E0
+    P1=2.0E0*ATAN(Y10)+ALOG((Y10-1.0E0)/(Y10+1.0E0))
+    P0=ALOG((X10-1.0E0)/(X10+1.0E0))
     
 	  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
+          !> @brief Test - definition z0 of sea surface
+          !> @details  if lu_indx=2.or.lu_indx=3 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)
+      j=0
+      h0=h/z0
+      u3=u*ap0/alog(h0)
     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
       end if
       x7=u3*z0/an
diff --git a/inputdata.f90 b/inputdata.f90
index 8fb673770fd57abb890deac91524726ffb6f2157..3543420ad45a569feac67f279a641116dde66c7b 100644
--- a/inputdata.f90
+++ b/inputdata.f90
@@ -1,7 +1,14 @@
 module INPUTDATA
    REAl, DIMENSION (6) :: AR1
    REAl, DIMENSION (11) :: AR2
-   INTEGER, PARAMETER :: IT =1
+   INTEGER, PARAMETER :: TEST=1 ! probably IT before renaming
+   INTEGER nums,ioer,mk
+   REAL HFX, MFX, zL, betta
+   REAL U, T4,c0,c4, T1,H,z0h
+   REAL ws, deltaT, semisumT, D00, Z0, ZT, deltaQ
+   REAL R6,R1
+   REAL AN5, D1, Y10, X10, P1, P0
+
 !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
index 6c809aff54932813bc9aa783c8e3c3ac0d0358bf..6e4faff854ec8cef011bea8841888cd258ef01f1 100644
--- a/main_drag.f90
+++ b/main_drag.f90
@@ -7,27 +7,164 @@
     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)
 
+    type (data_lutyp) :: data_lutyp1
+    integer :: numst, i
+    real :: cflh, z0in
+    character(len = 50) :: filename_in
+    character(len = 50) :: filename_out
+    character(len = 50) :: filename_in2
+
+    type :: datatype_inMAS1
+        real, allocatable :: mas_w(:)    !
+        real, allocatable :: mas_dt(:)
+        real, allocatable :: mas_st(:)
+        real, allocatable :: mas_dq(:)
+        real, allocatable :: mas_cflh(:)
+        real, allocatable :: mas_z0in(:)
+    end type
+    type(datatype_inMAS1) :: data_inMAS
+
+    !input
+    !  mas_w - abs(wind velocity) at constant flux layer (cfl) hight (m/s)
+    !  mas_dt - difference between potential temperature at cfl hight and at surface  ( deg. k)
+    !  mas_st - semi-sum of potential temperature at cfl hight and   and at surface  ( deg. k)
+    !  mas_dq - difference between humidity at cfl hight and a surface   ( gr/gr )
+    !  cflh - - cfl hight ( m )
+    !  z0in=0.01 - roughness of surface ( m );
+    !  it    - number of iterations
+    !  lu_indx -  1 for land, 2 for sea, 3 for lake
+    !  test - file input
+
+    type :: datatype_outMAS1
+        real, allocatable :: masout_zl(:)
+        real, allocatable :: masout_ri(:)
+        real, allocatable :: masout_re(:)
+        real, allocatable :: masout_lnzuzt(:)
+        real, allocatable :: masout_zu(:)
+        real, allocatable :: masout_ztout(:)
+        real, allocatable :: masout_rith(:)
+        real, allocatable :: masout_cm(:)
+        real, allocatable :: masout_ch(:)
+        real, allocatable :: masout_ct(:)
+        real, allocatable :: masout_ckt(:)
+    end type
+
+    type(datatype_outMAS1) :: data_outMAS
+
+    !output
+    !masout_zl - non-dimensional cfl hight
+    !masout_ri - richardson number
+    !masout_re  - reynods number
+    !masout_lnzuzt - ln(zu/zt)
+    !masout_zu  - dynamical roughness zu (m)
+    !masout_ztout - thermal   roughness zt (m)
+    !masout_rith - critical richardson number
+    !masout_cm  - transfer coefficient for momentum
+    !masout_ch - transfer coefficient fr heat
+    !masout_ct - coefficient of turbulence (km) at cfl hight (m**2/s)
+    !masout_ckt - alft=kt/km ( kt-coefficient of turbulence for heat)
+
+    !> @brief Test - file selection  for test
+
+    write(*,*) 'running code'
+
+    if (TEST==1) then
+        filename_in='MOSAiC.txt'
+        filename_out='out_MOSAiC.txt'
+        filename_in2='MOSAiC_zh.txt'
+    elseif (TEST==2) then
+        filename_in='Irgason1.txt'
+        filename_out='out_IRGASON1.txt'
+        filename_in2='IRGASON_zh.txt'
+    endif
+
+    open (1, file= filename_in, status ='old')
+    open (2, file=filename_out)
+    numst=0
+    do WHILE (ioer.eq.0)
+        read (1,*, iostat=ioer)  data_in1%ws,  data_in1%dt,  data_in1%st,  data_in1%dq
+        numst=numst+1
+    enddo
+    close (1)
+    numst=numst-1
+
+
+    allocate(data_inMAS%mas_w(numst))
+    allocate(data_inMAS%mas_dt(numst))
+    allocate(data_inMAS%mas_st(numst))
+    allocate(data_inMAS%mas_dq(numst))
+    allocate(data_inMAS%mas_cflh(numst))
+    allocate(data_inMAS%mas_z0in(numst))
+
+
+
+    allocate(data_outMAS%masout_zl(numst))
+    allocate(data_outMAS%masout_ri(numst))
+    allocate(data_outMAS%masout_re(numst))
+    allocate(data_outMAS%masout_lnzuzt(numst))
+    allocate(data_outMAS%masout_zu(numst))
+    allocate(data_outMAS%masout_ztout(numst))
+    allocate(data_outMAS%masout_rith(numst))
+    allocate(data_outMAS%masout_cm(numst))
+    allocate(data_outMAS%masout_ch(numst))
+    allocate(data_outMAS%masout_ct(numst))
+    allocate(data_outMAS%masout_ckt(numst))
+
+    open (11, file=filename_in2, status ='old')
+    open (1, file= filename_in, status ='old')
+    read (11, *) cflh, z0in
+    do i=1,numst
+        read (1,*) data_in1%ws,  data_in1%dt,  data_in1%st,  data_in1%dq
+        data_inMAS%mas_w(i)=data_inMAS%mas_w(i)+data_in1%ws
+        data_inMAS%mas_dt(i)=data_inMAS%mas_dt(i)+data_in1%dt
+        data_inMAS%mas_st(i)=data_inMAS%mas_st(i)+data_in1%st
+        data_inMAS%mas_dq(i)=data_inMAS%mas_dq(i)+data_in1%dq
+        data_inMAS%mas_cflh(i)=cflh
+        data_inMAS%mas_z0in(i)=z0in
+    enddo
+
+
+    CALL surf_fluxMAS(data_inMAS%mas_w, data_inMAS%mas_dt, data_inMAS%mas_st, data_inMAS%mas_dq,&
+            data_inMAS%mas_cflh, data_inMAS%mas_z0in,&
+            data_outMAS%masout_zl, data_outMAS%masout_ri, data_outMAS%masout_re, data_outMAS%masout_lnzuzt,&
+            data_outMAS%masout_zu,data_outMAS%masout_ztout,data_outMAS%masout_rith,data_outMAS%masout_cm,&
+            data_outMAS%masout_ch,data_outMAS%masout_ct,data_outMAS%masout_ckt,&
+            data_par1, data_lutyp1,numst)
+
+    do i=1,numst
+        write (2,20) data_outMAS%masout_zl(i), data_outMAS%masout_ri(i), data_outMAS%masout_re(i), data_outMAS%masout_lnzuzt(i),&
+                data_outMAS%masout_zu(i), data_outMAS%masout_ztout(i), data_outMAS%masout_rith(i), data_outMAS%masout_cm(i),&
+                data_outMAS%masout_ch(i), data_outMAS%masout_ct(i), data_outMAS%masout_ckt(i)
+    enddo
+
+
+    deallocate(data_inMAS%mas_w)
+    deallocate(data_inMAS%mas_dt)
+    deallocate(data_inMAS%mas_st)
+    deallocate(data_inMAS%mas_dq)
+    deallocate(data_inMAS%mas_cflh)
+    deallocate(data_inMAS%mas_z0in)
 
 
- enddo 
+    deallocate(data_outMAS%masout_zl)
+    deallocate(data_outMAS%masout_ri)
+    deallocate(data_outMAS%masout_re)
+    deallocate(data_outMAS%masout_lnzuzt)
+    deallocate(data_outMAS%masout_zu)
+    deallocate(data_outMAS%masout_ztout)
+    deallocate(data_outMAS%masout_rith)
+    deallocate(data_outMAS%masout_cm)
+    deallocate(data_outMAS%masout_ch)
+    deallocate(data_outMAS%masout_ct)
+    deallocate(data_outMAS%masout_ckt)
 
-100 continue 
 
-10 format (4i4,5f7.1,f7.4,f7.1)
-20 format (4i4,5f7.1,f7.4,f7.1)
+    10 format (f8.4,2x,f8.4)
+    20 format (11(f10.4,3x))
 
 stop
 END PROGRAM
\ No newline at end of file
diff --git a/makefile b/makefile
index 1f03324822f3d197c8e05d77d3782636190e25d1..ef11984d0d2f2b5d67e8d3160ab6a97d97d02428 100644
--- a/makefile
+++ b/makefile
@@ -1,5 +1,5 @@
 RUN = drag.exe
-COMPILER ?= intel
+COMPILER ?= gnu
 FC_KEYS ?= 
 
 # set compiler
diff --git a/param.f90 b/param.f90
index ee8540e06daad09c4ec60b9796abfc5e99ef4176..467f4dec9963b55d45449ed1917fc911730a7407 100644
--- a/param.f90
+++ b/param.f90
@@ -1,27 +1,27 @@
-module PARAM
-      IMPLICIT REAL (A-H,O-Z)
-      real, parameter ::  AKA=.40E0
-      real, parameter ::  AP0=.40E0
-      real, parameter ::  G=9.81E0
-      real, parameter ::  A0=1.15E0
-      real, parameter ::  A6=3.5E0
-      real, parameter ::  G4=16.0E0
-      real, parameter ::  G10=16.0E0
-      real, parameter ::  B4=4.7E0
-      real, parameter ::  ALFAM=.0144E0
-      real, parameter ::  BETAM=.111E0
-      real, parameter ::  AN=.000015E0
-      real, parameter ::  P4=.71E0
-      real, parameter ::  H1=10.0E0
-      real, parameter ::  X8=16.3E0
-      real, parameter ::  AN1=5.0E0/6.0E0
-      real, parameter ::  AN2=.45E0
-      real, parameter ::  AL1=AKA*P4
-      real, parameter ::  G0=1.2
-      real, parameter ::  AL2=(.14E0*(30.0E0**AN2))*(P4**.8E0)
-      real, parameter ::  A2=ALOG(H1*(G/ALFAM))
-      real, parameter ::  A3=BETAM*AN*A2
-      real, parameter ::  R0=.9E0/B4
+module param
+      implicit real (a-h,o-z)
+      real, parameter ::  aka=.40e0
+      real, parameter ::  ap0=.40e0
+      real, parameter ::  g=9.81e0
+      real, parameter ::  a0=1.15e0
+      real, parameter ::  a6=3.5e0
+      real, parameter ::  g4=16.0e0
+      real, parameter ::  g10=16.0e0
+      real, parameter ::  b4=4.7e0
+      real, parameter ::  alfam=.0144e0
+      real, parameter ::  betam=.111e0
+      real, parameter ::  an=.000015e0
+      real, parameter ::  p4=.71e0
+      real, parameter ::  h1=10.0e0
+      real, parameter ::  x8=16.3e0
+      real, parameter ::  an1=5.0e0/6.0e0
+      real, parameter ::  an2=.45e0
+      real, parameter ::  al1=aka*p4
+      real, parameter ::  g0=1.2
+      real, parameter ::  al2=(.14e0*(30.0e0**an2))*(p4**.8e0)
+      real, parameter ::  a2=alog(h1*(g/alfam))
+      real, parameter ::  a3=betam*an*a2
+      real, parameter ::  r0=.9e0/b4
 !C*      real, parameter ::  AN5=(A6/A0)**4
 !C*      real, parameter ::  D1=(2.0E0*G10-AN5*G4-SQRT((AN5*G4)**2+4.0E0*AN5*G10*(G10-G4)))/(2.0E0*G10**2)
 !C*      real, parameter ::  Y10=(1.0E0-G4*D1)**.25E0
diff --git a/prmt.mod b/prmt.mod
deleted file mode 100644
index fbc5c106bbef1e8d13147a0421ec45fb0d9c8dd0..0000000000000000000000000000000000000000
Binary files a/prmt.mod and /dev/null differ