SUBROUTINE ocm_atm(tma,csx,csy,cdpx,cdpy,success) ! ! Author: Biju Thomas on 2012/09/28 ! Providing bottom boundary condition to component model ! USE linear_md USE hbin2dinpolmd USE setvars IMPLICIT NONE INCLUDE 'mpif.h' LOGICAL, INTENT(OUT) :: success INTEGER i,j,k,ierr,nday INTEGER, PARAMETER :: lvlm1 = kb - 1 REAL, PARAMETER :: depthmin = 40.0 REAL, DIMENSION(im_global,jm_global),INTENT(OUT) :: & tma, csx, csy, cdpx, cdpy REAL, DIMENSION(:,:), ALLOCATABLE :: t2d, u2d, v2d REAL :: ucprof(lvlm1), vcprof(lvlm1), sight_u(lvlm1), & sight_v(lvlm1) CHARACTER :: fn*15, dout*4 tma = 0. csx = 0. csy = 0. cdpx = 0. cdpy = 0. ALLOCATE ( t2d(im_local,jm_local), u2d(im_local,jm_local), & v2d(im_local,jm_local) ) DO j=1,jm DO i=1,im t2d(i,j)= t(i,j,1) + tbias + 273.15 !Biju IF (fsm(i,j) .LT. 0.001) t2d(i,j)=-999.999 u2d(i,j) = u(i,j,1) v2d(i,j) = v(i,j,1) DO k = 1, lvlm1 ucprof(k) = u(i,j,k) vcprof(k) = v(i,j,k) sight_u(k) = -zz(k)* h_u(i,j) sight_v(k) = -zz(k)* h_v(i,j) ENDDO IF ( h_u(i,j) .LE. depthmin ) THEN ud2d(i,j) = 0.0 ELSE IF ( mdpth_u(i,j) .LE. sight_u(1) ) THEN ud2d(i,j) = ucprof(1) ELSE IF ( mdpth_u(i,j) .GE. sight_u(lvlm1) ) THEN ud2d(i,j) = ucprof(lvlm1) ELSE CALL linear(-999.999,-999.999,ucprof,ud2d(i,j),sight_u, & mdpth_u(i,j), lvlm1,1) ENDIF ENDIF IF ( h_v(i,j) .LE. depthmin ) THEN vd2d(i,j) = 0.0 ELSE IF ( mdpth_v(i,j) .LE. sight_v(1) ) THEN vd2d(i,j) = vcprof(1) ELSE IF ( mdpth_v(i,j) .GE. sight_v(lvlm1) ) THEN vd2d(i,j) = vcprof(lvlm1) ELSE CALL linear(-999.999,-999.999,vcprof,vd2d(i,j),sight_v, & mdpth_v(i,j), lvlm1,1) ENDIF ENDIF ENDDO ENDDO CALL assemble_mpi(t2d, tma) CALL assemble_mpi(u2d, csx) CALL assemble_mpi(v2d, csy) CALL assemble_mpi(ud2d, cdpx) CALL assemble_mpi(vd2d, cdpy) DEALLOCATE(t2d, u2d, v2d) IF(my_task .EQ. 0) THEN IF (MOD(iint*dti,86400.) .EQ. 0. ) THEN nday = iint*dti/86400. WRITE(dout,'(I4.4)')nday fn='sst.'//dout OPEN(1,FILE=fn,FORM='UNFORMATTED') WRITE(1)TMA CLOSE(1) fn='curr.'//dout OPEN(1,FILE=fn,FORM='UNFORMATTED') WRITE(1)csx WRITE(1)csy WRITE(1)cdpx WRITE(1)cdpy CLOSE(1) ENDIF ENDIF success = .true. RETURN END SUBROUTINE ocm_atm