SUBROUTINE atm_ocm(xgrid_t, ygrid_t, fsm_g, wusurf_g, & wvsurf_g, wtsurf_g, swrad_g, & dtaux_g, dtauy_g, mdpth_g, & wbcond_g, success) ! ! Author: Biju Thomas on 2012/09/28 ! Providing forcing terms to component model ! USE hbin2dinpolmd USE setvars IMPLICIT NONE REAL, DIMENSION(im_global,jm_global), INTENT(IN) :: & xgrid_t, ygrid_t, fsm_g, wusurf_g, wvsurf_g, wtsurf_g, & swrad_g, dtaux_g, dtauy_g, wbcond_g REAL, DIMENSION(im_global,jm_global), INTENT(INOUT) :: & mdpth_g REAL, DIMENSION(im_global,jm_global) :: usurf,vsurf, & hsurf REAL, DIMENSION(im_local,jm_local) :: z2d REAL, DIMENSION(im_global,jm_global) :: h_g LOGICAL, INTENT(OUT) :: success LOGICAL :: ldtau_cmp = .TRUE. INTEGER i,j , nday CHARACTER :: fn*15, dout*4 IF (nbct .eq. 1) THEN CALL spread_mpi(wtsurf_g + swrad_g, wtsurf) ELSE CALL spread_mpi(wtsurf_g, wtsurf) END IF CALL spread_mpi(swrad_g, swrad) IF ( ldtau_cmp ) THEN CALL spread_mpi(wusurf_g - dtaux_g, wusurf) CALL spread_mpi(wvsurf_g - dtauy_g, wvsurf) ELSE CALL spread_mpi(wusurf_g, wusurf) CALL spread_mpi(wvsurf_g, wvsurf) ENDIF IF(iint .eq. 1 ) THEN DO j = 1, jm DO i = 1, im IF (fsm(i,j) .LT. 0.001) THEN z2d(i,j)=-999.999 ELSE z2d(i,j)= h(i,j) ENDIF ENDDO ENDDO h_u = 0.0 h_v = 0.0 h_g = 0.0 CALL assemble_mpi(z2d, h_g) DO j = 1, jm DO i = 1, im CALL hbin2dinpol(-999.999,0.0,h_g,h_u(i,j),xgrid_t(:,1), & ygrid_t(1,:),east_u(i,j),north_u(i,j),im_global,jm_global,1,1) CALL hbin2dinpol(-999.999,0.0,h_g,h_v(i,j),xgrid_t(:,1), & ygrid_t(1,:),east_v(i,j),north_v(i,j),im_global,jm_global,1,1) ENDDO ENDDO ENDIF DO j = 1, jm_global DO i = 1, im_global IF (fsm_g(i,j) .LT. 0.001) mdpth_g(i,j)=-999.999 ENDDO ENDDO mdpth_u = 0.0 mdpth_v = 0.0 DO j = 1, jm DO i = 1, im CALL hbin2dinpol(-999.999,0.0,mdpth_g,mdpth_u(i,j),xgrid_t(:,1), & ygrid_t(1,:),east_u(i,j),north_u(i,j),im_global,jm_global,1,1) CALL hbin2dinpol(-999.999,0.0,mdpth_g,mdpth_v(i,j),xgrid_t(:,1), & ygrid_t(1,:),east_v(i,j),north_v(i,j),im_global,jm_global,1,1) ENDDO ENDDO CALL spread_mpi(wbcond_g, wbcond) vfluxb = wbcond/rho_0 vfluxf = vfluxb success = .true. IF(iint .eq. 2 ) THEN CALL assemble_mpi(wusurf, usurf) CALL assemble_mpi(wvsurf, vsurf) CALL assemble_mpi(wtsurf, hsurf) ENDIF IF( MOD(iint*dti,86400.0) .EQ. 0.)THEN CALL assemble_mpi(wusurf, usurf) CALL assemble_mpi(wvsurf, vsurf) CALL assemble_mpi(wtsurf, hsurf) IF( my_task .EQ. 0 ) THEN nday = iint*dti/86400. WRITE(dout,'(I4.4)')nday fn='flux.'//dout OPEN(1,FILE=fn,FORM='UNFORMATTED') WRITE(1)usurf WRITE(1)vsurf WRITE(1)hsurf WRITE(1)dtaux_g WRITE(1)dtauy_g CLOSE(1) ENDIF ENDIF RETURN END SUBROUTINE atm_ocm