21 changed files with 171 additions and 2182 deletions
File diff suppressed because it is too large
Load Diff
@ -1,56 +0,0 @@
|
||||
#ifdef COUP_OAS |
||||
SUBROUTINE oas_cos_define |
||||
! |
||||
! grid definitions for OASIS |
||||
! |
||||
|
||||
|
||||
USE oas_vardef |
||||
|
||||
USE mod_oasis_namcouple ! OASIS3-MCT namcouple variables: e.g. coupling time step |
||||
|
||||
USE ice_grid_mod, ONLY : & |
||||
|
||||
|
||||
|
||||
IMPLICIT NONE |
||||
|
||||
|
||||
INTEGER(KIND=iintegers) :: & |
||||
! igrid, & ! ids returned by oasis_def_grid |
||||
! iptid, & ! ids returned by oasis_set_points |
||||
! imskid, & ! ids returned by oasis_set_mask |
||||
! iextent(1,3), & ! |
||||
! ioffset(1,3), & ! |
||||
! ji, jj, jg, & ! |
||||
! jg_end, jh_beg, & ! |
||||
part_id, & ! |
||||
il_paral(5), & ! OASIS3 box partition |
||||
! var_nodims(2), & ! |
||||
! ishape(2,2), & ! shape of arrays passed to PSMILe |
||||
! nlei_tot, nlej_tot, & ! upper halo limits on a global subdomain |
||||
! jih_tot, jjh_tot, & ! global subdomain size without halo |
||||
ierror, & ! |
||||
! lev_diff, & ! |
||||
! izerrstat |
||||
|
||||
REAL(KIND=8) :: & |
||||
! start_lonc, & |
||||
! start_latc |
||||
|
||||
CHARACTER(LEN=4) :: & |
||||
grd_t = 'momt', & ! name of t grid of mom |
||||
grd_c = 'momc' ! name of c grid of mom |
||||
|
||||
CHARACTER(len=30) :: & |
||||
data_gridname='grids.nc', & ! file with the grids |
||||
data_maskname='masks.nc' ! file with the masks |
||||
|
||||
! Global grid parameters : |
||||
INTEGER :: nlon, nlat, ntot ! dimensions in the 2 directions of space + total size |
||||
INTEGER :: il_size |
||||
INTEGER :: nc ! number of corners in the (i,j) plan |
||||
|
||||
CALL oasis_def_partition (part_id, il_paral, ierror) |
||||
|
||||
|
@ -1,163 +0,0 @@
|
||||
#IFDEF COUP_OAS |
||||
SUBROUTINE oas_receive_field(Ice,Ice_boundary,Ice_Ocean_Boundary,Time_start,Timet) |
||||
|
||||
USE oas_vardef |
||||
|
||||
USE mpp_mod, only: mpp_pe, mpp_root_pe |
||||
USE time_manager_mod, only : get_time, get_time,operator(-),time_type |
||||
USE ice_model_mod, only: ice_data_type,atmos_ice_boundary_type |
||||
USE ocean_model_mod, only: ice_ocean_boundary_type |
||||
USE netcdf |
||||
USE ice_grid_mod |
||||
|
||||
IMPLICIT NONE |
||||
|
||||
INTEGER :: & |
||||
maskt(iec-isc+1,jec-jsc+1), & ! mask array |
||||
maskc(iec-isc+1,jec-jsc+1) ! mask array |
||||
|
||||
type(time_type), intent(in) :: Time_start,Timet ! for coupling sandra |
||||
TYPE (ice_data_type), INTENT(IN) :: Ice |
||||
TYPE (atmos_ice_boundary_type), INTENT(INOUT) :: Ice_boundary |
||||
type(ice_ocean_boundary_type), intent(inout) :: Ice_Ocean_Boundary |
||||
|
||||
INTEGER :: & |
||||
isec,sec,day, tcks, & |
||||
ncfileid, ncvarid, & ! NetCDF IDs |
||||
sc,dy,jn,k, & |
||||
nrcvinfo(nfld_rcv_tot) ! OASIS info argument |
||||
|
||||
REAL(kind=8) :: & |
||||
ztmp1 (iec,jec) |
||||
|
||||
nrcvinfo (:) = OASIS_idle |
||||
ztmp1 (:,:) = 0.0 |
||||
|
||||
|
||||
! call get_time(Ice%Time-Ice%Time_init,sc,dy) |
||||
! isec = sc+(dy*86400) |
||||
|
||||
|
||||
! call get_time(Ice%Time_step_slow,scs,dys) |
||||
! call get_time(Ice%Time-Time_start, sc, dy) |
||||
call get_time(Timet-Time_start, sc, dy) |
||||
isec = (864e2*dy+sc)!-(864e2*dys+scs) |
||||
|
||||
|
||||
! isec = (nsteps) * dt_clpd |
||||
|
||||
!IF (ltime) CALL get_timings (i_cpl_add_comp, ntstep, dt, izerror) |
||||
|
||||
!------------------------------------------------------------------------------ |
||||
! Receive all coupling fields |
||||
!------------------------------------------------------------------------------- |
||||
|
||||
|
||||
#ifdef OASIS_IOW_ESM |
||||
! Do not read here, use instead oas_exchange_fields module |
||||
#else |
||||
DO jn = 1, nfld_rcv_tot |
||||
! IF( srcv(jn)%laction ) THEN |
||||
CALL oas_recieve( jn, isec, ztmp1(:,:), nrcvinfo(jn) ) |
||||
! write(*,*) " nrcvinfo(jn) ", nrcvinfo(jn), jn, OASIS_Rcv, isec |
||||
IF( nrcvinfo(jn) == OASIS_Rcv ) frcv(:,:,jn)=ztmp1(:,:) |
||||
! ENDIF |
||||
ENDDO |
||||
!write(*,*)" oasis receive laction: " , srcv(jn)%laction, isec |
||||
|
||||
!IF (ltime) CALL get_timings (i_cpl_get, ntstep, dt, izerror) |
||||
|
||||
istatus=nf90_open('masks.nc', NF90_NOWRITE, ncfileid) |
||||
istatus=nf90_inq_varid(ncfileid, 'tmom.msk' , ncvarid) |
||||
istatus=nf90_get_var(ncfileid, ncvarid, maskt, & |
||||
(/ isc, jsc /), (/ iec-isc+1,jec-jsc+1 /)) |
||||
istatus=nf90_inq_varid(ncfileid, 'cmom.msk' , ncvarid) |
||||
istatus=nf90_get_var(ncfileid, ncvarid, maskc, & |
||||
(/ isc, jsc /), (/ iec-isc+1,jec-jsc+1 /)) |
||||
|
||||
istatus=nf90_close(ncfileid) |
||||
|
||||
jn = 1 |
||||
! IF( nrcvinfo(jn) == OASIS_Rcv ) THEN ! rain 1) |
||||
do k = 1, size(Ice_boundary%lprec,3) |
||||
WHERE (maskt == 0) Ice_boundary%lprec(isc:iec,jsc:jec,k) = frcv(isc:iec,jsc:jec,jn) |
||||
enddo |
||||
! ENDIF |
||||
jn = jn + 1 |
||||
! IF( nrcvinfo(jn) == OASIS_Rcv ) THEN ! evaporation 2) |
||||
do k = 1, size(Ice_boundary%q_flux,3) |
||||
WHERE (maskt == 0) Ice_boundary%q_flux(isc:iec,jsc:jec,k) = -frcv(isc:iec,jsc:jec,jn) |
||||
enddo |
||||
! ENDIF |
||||
jn = jn + 1 |
||||
! IF( nrcvinfo(jn) == OASIS_Rcv ) THEN ! snow 3) |
||||
do k = 1, size(Ice_boundary%fprec,3) |
||||
WHERE (maskt == 0) Ice_boundary%fprec(isc:iec,jsc:jec,k) = frcv(isc:iec,jsc:jec,jn) |
||||
enddo |
||||
! ENDIF |
||||
jn = jn + 1 |
||||
! IF( nrcvinfo(jn) == OASIS_Rcv ) THEN ! sea level pressure 4) |
||||
do k = 1, size(Ice_boundary%p,3) |
||||
WHERE (maskt == 0) Ice_boundary%p(isc:iec,jsc:jec,k) = frcv(isc:iec,jsc:jec,jn) |
||||
enddo |
||||
! ENDIF |
||||
jn = jn + 1 |
||||
! IF( nrcvinfo(jn) == OASIS_Rcv ) THEN ! u velocity 5) |
||||
WHERE (maskc == 0) Ice_Ocean_Boundary%u_wind(isc:iec,jsc:jec) = frcv(isc:iec,jsc:jec,jn) |
||||
! ENDIF |
||||
jn = jn + 1 |
||||
! IF( nrcvinfo(jn) == OASIS_Rcv ) THEN ! v velocity 6) |
||||
WHERE (maskc == 0) Ice_Ocean_Boundary%v_wind(isc:iec,jsc:jec) = frcv(isc:iec,jsc:jec,jn) |
||||
! ENDIF |
||||
jn = jn + 1 |
||||
! IF( nrcvinfo(jn) == OASIS_Rcv ) THEN ! u wind stress 7) |
||||
do k = 1, size(Ice_boundary%u_flux,3) |
||||
WHERE (maskc == 0) Ice_boundary%u_flux(isc:iec,jsc:jec,k) = -frcv(isc:iec,jsc:jec,jn) |
||||
enddo |
||||
! ENDIF |
||||
jn = jn + 1 |
||||
! IF( nrcvinfo(jn) == OASIS_Rcv ) THEN ! v wind stress 8) |
||||
do k = 1, size(Ice_boundary%v_flux,3) |
||||
WHERE (maskc == 0) Ice_boundary%v_flux(isc:iec,jsc:jec,k) = -frcv(isc:iec,jsc:jec,jn) |
||||
enddo |
||||
! ENDIF |
||||
jn = jn + 1 |
||||
! IF( nrcvinfo(jn) == OASIS_Rcv ) THEN ! longwave radiation upward 9) |
||||
do k = 1, size(Ice_boundary%lw_flux,3) |
||||
WHERE (maskt == 0) Ice_boundary%lw_flux(isc:iec,jsc:jec,k) = frcv(isc:iec,jsc:jec,jn) |
||||
enddo |
||||
! ENDIF |
||||
jn = jn + 1 |
||||
! IF( nrcvinfo(jn) == OASIS_Rcv ) THEN ! longwave radiation downward 10) |
||||
do k = 1, size(Ice_boundary%lw_flux,3) |
||||
WHERE (maskt == 0) Ice_boundary%lw_flux(isc:iec,jsc:jec,k) = -Ice_boundary%lw_flux(isc:iec,jsc:jec,k) + frcv(isc:iec,jsc:jec,jn) |
||||
enddo |
||||
! ENDIF |
||||
jn = jn + 1 |
||||
! IF( nrcvinfo(jn) == OASIS_Rcv ) THEN ! shortwave radiation direct 11) |
||||
do k = 1, size(Ice_boundary%sw_flux_vis_dir,3) |
||||
WHERE (maskt == 0) Ice_boundary%sw_flux_vis_dir(isc:iec,jsc:jec,k) = frcv(isc:iec,jsc:jec,jn) |
||||
enddo |
||||
! ENDIF |
||||
jn = jn + 1 |
||||
! IF( nrcvinfo(jn) == OASIS_Rcv ) THEN ! shortware radiation diffusive 12) |
||||
do k = 1, size(Ice_boundary%sw_flux_vis_dif,3) |
||||
WHERE (maskt == 0) Ice_boundary%sw_flux_vis_dif(isc:iec,jsc:jec,k) = frcv(isc:iec,jsc:jec,jn) |
||||
enddo |
||||
! ENDIF |
||||
jn = jn + 1 |
||||
! IF( nrcvinfo(jn) == OASIS_Rcv ) THEN ! latent heat flux 13) |
||||
do k = 1, size(Ice_boundary%lh_flux,3) |
||||
WHERE (maskt == 0) Ice_boundary%lh_flux(isc:iec,jsc:jec,k) = -frcv(isc:iec,jsc:jec,jn) |
||||
enddo |
||||
! ENDIF |
||||
jn = jn + 1 |
||||
! IF( nrcvinfo(jn) == OASIS_Rcv ) THEN ! sensible heat flux 14) |
||||
do k = 1, size(Ice_boundary%t_flux,3) |
||||
WHERE (maskt == 0) Ice_boundary%t_flux(isc:iec,jsc:jec,k) = -frcv(isc:iec,jsc:jec,jn) |
||||
enddo |
||||
! ENDIF |
||||
#endif |
||||
|
||||
END SUBROUTINE oas_receive_field |
||||
#ENDIF |
@ -1,90 +0,0 @@
|
||||
#IFDEF COUP_OAS |
||||
SUBROUTINE oas_send_field(Ice,Time_start,Timet) |
||||
|
||||
!!--------------------------------------------------------------------- |
||||
!! *** ROUTINE send_fld *** |
||||
!! |
||||
!! ** Purpose : Prepare and send coupling fields to OASIS |
||||
!! |
||||
!!---------------------------------------------------------------------- |
||||
|
||||
USE oas_vardef |
||||
|
||||
USE mpp_mod, only: mpp_pe, mpp_root_pe |
||||
USE ice_grid_mod |
||||
USE ice_type_mod, only: ice_data_type |
||||
USE time_manager_mod, only : get_time,get_time,operator(-),time_type |
||||
USE netcdf |
||||
|
||||
IMPLICIT NONE |
||||
! |
||||
! local parameters, variables and arrays |
||||
! |
||||
INTEGER :: & |
||||
isec, & |
||||
kinfo, & |
||||
il_var_id(16), & |
||||
dimids(2), & |
||||
k,j,i,jn,sc,dy, & |
||||
dt,tcks,sec,day |
||||
|
||||
|
||||
REAL (KIND=8) :: & |
||||
ztmp1 (iec,jec), & |
||||
ztmp2 (iec,jec) |
||||
|
||||
TYPE (ice_data_type), INTENT(IN) :: Ice |
||||
type(time_type), intent(in) :: Time_start,Timet ! for coupling sandra |
||||
|
||||
! ! call get_time(Ice%Time-Ice%Time_init,sc,dy) |
||||
! ! isec = sc+(dy*86400) |
||||
|
||||
! ! call get_time(Ice%Time_step_slow,scs,dys) |
||||
! ! call get_time(Ice%Time-Time_start, sc, dy) |
||||
! call get_time(Timet-Time_start, sc, dy) |
||||
! isec = (864e2*dy+sc) |
||||
! ! write(*,*) "Time",Ice%Time,Time_start,Ice%Time_init,isec |
||||
|
||||
|
||||
! !---------------------------------------------------------------------------- |
||||
! ! handling of sent fields |
||||
! !---------------------------------------------------------------------------- |
||||
! jn = 1.0 |
||||
! ztmp1(:,:)=0.0 |
||||
! ztmp2(:,:)=0.0 |
||||
|
||||
! !write(*,*)" oasis send laction: " , ssnd(jn)%laction, isec |
||||
! !! jn = jn + 1 |
||||
! ! IF( ssnd(jn)%laction ) THEN ! sea surface temperature |
||||
! ! write(*,*) "max t_surf mom: ",MAXVAL(Ice%t_surf(isc:iec,jsc:jec,1)), isec |
||||
! ! write(*,*) "min t_surf mom: ",MINVAL(Ice%t_surf(isc:iec,jsc:jec,1)), isec |
||||
|
||||
! ! ztmp1(:,:)=0. |
||||
! ! do k=1,1 !,km |
||||
! ! do j = jsc, jec |
||||
! ! do i = isc, iec |
||||
! ! ztmp1(i,j) = ztmp1(i,j) + Ice%t_surf(i,j,k) |
||||
! ! enddo |
||||
! ! enddo |
||||
! ! enddo |
||||
|
||||
! ztmp1(isc:iec,jsc:jec) =Ice%t_surf(isc:iec,jsc:jec,1) |
||||
|
||||
! CALL oas_send (jn, isec,ztmp1, kinfo ) |
||||
! ! ENDIF |
||||
|
||||
! jn = jn + 1 |
||||
! ! IF( ssnd(jn)%laction ) THEN ! sea ice area fraction |
||||
! ztmp2(:,:)=0. |
||||
! do k=2,km |
||||
! do j = jsc, jec |
||||
! do i = isc, iec |
||||
! ztmp2(i,j) = ztmp2(i,j) + Ice%part_size(i,j,k) |
||||
! enddo |
||||
! enddo |
||||
! enddo |
||||
! CALL oas_send (jn, isec, ztmp2, kinfo ) |
||||
! ! ENDIF |
||||
|
||||
END SUBROUTINE oas_send_field |
||||
#ENDIF |
Loading…
Reference in new issue