Browse Source

First attempt to use MOM transfer coefficients

experiments/tc-mom
Sven Karsten 1 year ago
parent
commit
08a82109ff
  1. 6
      src/coupler/flux_exchange.F90
  2. 14
      src/ice_sis/ice_type.F90
  3. 18
      src/oasis_interface/oas_define.F90
  4. 23
      src/oasis_interface/oas_exchange_fields.F90
  5. 2
      src/oasis_interface/oas_vardef.F90

6
src/coupler/flux_exchange.F90

@ -1867,6 +1867,12 @@ subroutine sfc_boundary_layer ( dt, Time, Atm, Land, Ice, Land_Ice_Atmos_Boundar
call get_from_xgrid (diag_atm, 'ATM', ex_rough_heat, xmap_sfc)
used = send_data ( id_rough_heat, diag_atm, Time )
endif
#ifdef OASIS_IOW_ESM
call get_from_xgrid (Ice%c_mom, 'OCN', ex_cd_m, xmap_sfc)
call get_from_xgrid (Ice%c_moist, 'OCN', ex_cd_q, xmap_sfc)
call get_from_xgrid (Ice%c_heat, 'OCN', ex_cd_t, xmap_sfc)
#endif
!------- roughness momemtum -----------
used = send_data ( id_rough_mom, Land_Ice_Atmos_Boundary%rough_mom, Time )

14
src/ice_sis/ice_type.F90

@ -267,6 +267,12 @@ public :: iceClocka,iceClockb,iceClockc
type(coupler_3d_bc_type) :: ocean_fluxes_top ! array of fluxes for averaging
type(icebergs), pointer :: icebergs
#ifdef OASIS_IOW_ESM
real, dimension(:,:,:), pointer :: c_mom =>NULL() ! momentum transfercoefficient
real, dimension(:,:,:), pointer :: c_moist =>NULL() ! moisture transfercoefficient
real, dimension(:,:,:), pointer :: c_heat =>NULL() ! heat transfercoefficient
#endif
end type ice_data_type
integer :: iceClock, iceClock1, iceCLock2, iceCLock3, iceClock4, iceClock5, &
@ -476,6 +482,14 @@ public :: iceClocka,iceClockb,iceClockc
allocate ( Ice % qflx_lim_ice (isc:iec, jsc:jec) , Ice % qflx_res_ice (isc:iec, jsc:jec) )
allocate ( Ice % area (isc:iec, jsc:jec) )
allocate ( Ice % mi (isc:iec, jsc:jec) )
#IFDEF OASIS_IOW_ESM
allocate (Ice %c_mom(isc:iec,jsc:jec,km))
allocate (Ice %c_moist(isc:iec,jsc:jec,km))
allocate (Ice %c_heat(isc:iec,jsc:jec,km))
Ice %c_mom = 0.0
Ice %c_moist = 0.0
Ice %c_heat = 0.0
#ENDIF
Ice % flux_sw_vis_dir =0.
Ice % flux_sw_vis_dif =0.

18
src/oasis_interface/oas_define.F90

@ -221,6 +221,24 @@ SUBROUTINE oas_define(local_comm)
ssnd(16)%var_name = MOM5_instance_letter//'SALBE04'
ssnd(17)%var_name = MOM5_instance_letter//'SALBE05'
ssnd(18)%var_name = MOM5_instance_letter//'SALBE06'
ssnd(19)%var_name = MOM5_instance_letter//'SCMOM01'
ssnd(20)%var_name = MOM5_instance_letter//'SCMOM02'
ssnd(21)%var_name = MOM5_instance_letter//'SCMOM03'
ssnd(22)%var_name = MOM5_instance_letter//'SCMOM04'
ssnd(23)%var_name = MOM5_instance_letter//'SCMOM05'
ssnd(24)%var_name = MOM5_instance_letter//'SCMOM06'
ssnd(25)%var_name = MOM5_instance_letter//'SCMOI01'
ssnd(26)%var_name = MOM5_instance_letter//'SCMOI02'
ssnd(27)%var_name = MOM5_instance_letter//'SCMOI03'
ssnd(28)%var_name = MOM5_instance_letter//'SCMOI04'
ssnd(29)%var_name = MOM5_instance_letter//'SCMOI05'
ssnd(30)%var_name = MOM5_instance_letter//'SCMOI06'
ssnd(31)%var_name = MOM5_instance_letter//'SCHEA01'
ssnd(32)%var_name = MOM5_instance_letter//'SCHEA02'
ssnd(33)%var_name = MOM5_instance_letter//'SCHEA03'
ssnd(34)%var_name = MOM5_instance_letter//'SCHEA04'
ssnd(35)%var_name = MOM5_instance_letter//'SCHEA05'
ssnd(36)%var_name = MOM5_instance_letter//'SCHEA06'
#endif
! Store info which fields to receive

23
src/oasis_interface/oas_exchange_fields.F90

@ -88,7 +88,28 @@ INTEGER, INTENT(IN) :: dt_cpld
ztmp1(isc:iec,jsc:jec) =Ice%albedo_vis_dir(isc:iec,jsc:jec,jn)
CALL oas_send (jn+12, isec,ztmp1, kinfo ) ! send MSALBE01..MSALBE06
ENDDO
#ifdef IOW_ESM_DEBUG
write(*,*) 'Sending MSCMOM01 at isec=',isec
#endif
DO jn=1,6
ztmp1(isc:iec,jsc:jec) = Ice%c_mom(isc:iec,jsc:jec,jn)
CALL oas_send (jn+18, isec,ztmp1, kinfo ) ! send MSCMOM01
ENDDO
#ifdef IOW_ESM_DEBUG
write(*,*) 'Sending MSCMOI01 at isec=',isec
#endif
DO jn=1,6
ztmp1(isc:iec,jsc:jec) = Ice%c_moist(isc:iec,jsc:jec,jn)
CALL oas_send (jn+24, isec,ztmp1, kinfo ) ! send MSCMOI01
ENDDO
#ifdef IOW_ESM_DEBUG
write(*,*) 'Sending MSCHEA01 at isec=',isec
#endif
DO jn=1,6
ztmp1(isc:iec,jsc:jec) = Ice%c_heat(isc:iec,jsc:jec,jn)
CALL oas_send (jn+30, isec,ztmp1, kinfo ) ! send MSCHEA01
ENDDO
!----------------------------------------------------------------------------
! STEP 2: Receive all fluxes from flux calculator

2
src/oasis_interface/oas_vardef.F90

@ -41,7 +41,7 @@ IMPLICIT NONE
INTEGER :: vari_id ! Id of the field
END TYPE CPL_FLD
INTEGER, PARAMETER :: nfld_snd_tot=18
INTEGER, PARAMETER :: nfld_snd_tot=36
INTEGER, PARAMETER :: nfld_rcv_tot=49
TYPE(CPL_FLD), ALLOCATABLE :: &

Loading…
Cancel
Save