From 01298c4d6bbf92458c1bed86ae053a7003125698 Mon Sep 17 00:00:00 2001 From: Russell Fiedler Date: Fri, 17 Jan 2020 14:13:14 +1100 Subject: [PATCH 1/7] Added optional 10m wind speed forcing --- drivers/auscom/CICE_InitMod.F90 | 2 +- drivers/auscom/cpl_arrays_setup.F90 | 9 +++++-- drivers/auscom/cpl_forcing_handler.F90 | 10 ++++++++ drivers/auscom/cpl_interface.F90 | 17 ++++++++++--- drivers/auscom/cpl_netcdf_setup.F90 | 2 +- drivers/auscom/cpl_parameters.F90 | 35 +++++++++++++++----------- 6 files changed, 53 insertions(+), 22 deletions(-) diff --git a/drivers/auscom/CICE_InitMod.F90 b/drivers/auscom/CICE_InitMod.F90 index 2878d86..372ed7d 100644 --- a/drivers/auscom/CICE_InitMod.F90 +++ b/drivers/auscom/CICE_InitMod.F90 @@ -133,7 +133,7 @@ subroutine cice_init(accessom2) call accessom2%sync_config(coupler) ! Use accessom2 configuration - call input_data(accessom2%get_cur_exp_date_array(), & + call input_data(accessom2%get_forcing_start_date_array(), & accessom2%get_seconds_since_cur_exp_year(), & accessom2%get_total_runtime_in_seconds(), & accessom2%get_ice_ocean_timestep(), & diff --git a/drivers/auscom/cpl_arrays_setup.F90 b/drivers/auscom/cpl_arrays_setup.F90 index 987e245..dbcda78 100644 --- a/drivers/auscom/cpl_arrays_setup.F90 +++ b/drivers/auscom/cpl_arrays_setup.F90 @@ -62,7 +62,12 @@ module cpl_arrays_setup !(15) ice form waterflux ioform ! ! +! 10m wind speeds (optional?) +!(16) 10m wind speeds iownd10 ! 17 in, 16 out => thus we set jpfldout=16, jpfldin=17 (in cpl_parameters)! +!RASF but there's a (SST?) field which gets sent to the atmospher for some reason and +!this buggers up everything. Why is this being sent? Does YATM really need SST? +!Should really have a block of arrays for each component. ! !---------------------------------------------------------------------------- !Note: @@ -98,11 +103,11 @@ module cpl_arrays_setup real(kind=dbl_kind),dimension(:,:,:), allocatable :: & !to ocn (time averaged) iostrsu, iostrsv, iorain, iosnow, iostflx, iohtflx, ioswflx & ,ioqflux, ioshflx, iolwflx, iorunof, iopress, ioaice & - ,iomelt, ioform + ,iomelt, ioform, iownd real(kind=dbl_kind),dimension(:,:,:), allocatable :: & !to ocn (temporary) tiostrsu, tiostrsv, tiorain, tiosnow, tiostflx, tiohtflx, tioswflx & ,tioqflux, tioshflx, tiolwflx, tiorunof, tiopress, tioaice & - ,tiomelt, tioform + ,tiomelt, tioform, tiownd ! other stuff real(kind=dbl_kind),dimension(:,:,:), allocatable :: & diff --git a/drivers/auscom/cpl_forcing_handler.F90 b/drivers/auscom/cpl_forcing_handler.F90 index f059633..c11fbef 100644 --- a/drivers/auscom/cpl_forcing_handler.F90 +++ b/drivers/auscom/cpl_forcing_handler.F90 @@ -45,6 +45,7 @@ subroutine nullify_i2o_fluxes() ioaice(:,:,:) = 0.0 iomelt(:,:,:) = 0.0 ioform(:,:,:) = 0.0 + iownd(:,:,:) = 0.0 end subroutine nullify_i2o_fluxes @@ -67,6 +68,7 @@ subroutine tavg_i2o_fluxes !!! iomelt (:,:,:) = iomelt (:,:,:) + tiomelt (:,:,:)*coef_ic ioform (:,:,:) = ioform (:,:,:) + tioform (:,:,:)*coef_ic + iownd (:,:,:) = iownd (:,:,:) + tiownd (:,:,:)*coef_ic return end subroutine tavg_i2o_fluxes @@ -201,6 +203,7 @@ subroutine get_time0_i2o_fields(fname) #endif call ice_open_nc(fname, ncid_i2o) do jf = n_i2a + 1, jpfldout !2:14 + if(il_var_id_out(jf) == -1) cycle !RASF Aloow for fields no being passed like wind, BGC etc vwork(:, :, :) = 0.0 call ice_read_nc(ncid_i2o, 1, cl_writ(jf) , vwork, dbug) if (jf == n_i2a+1 ) iostrsu = vwork @@ -219,6 +222,7 @@ subroutine get_time0_i2o_fields(fname) !!! if (jf == n_i2a+14) iomelt = vwork if (jf == n_i2a+15) ioform = vwork + if (jf == n_i2a+16) iownd = vwork enddo if (my_task == master_task) call ice_close_nc(ncid_i2o) #if defined(DEBUG) @@ -379,6 +383,7 @@ subroutine save_time0_i2o_fields(fname, nstep) !!! if (jf == n_i2a+14 ) vwork = iomelt if (jf == n_i2a+15 ) vwork = ioform + if (jf == n_i2a+16 ) vwork = iownd call gather_global(gwork, vwork, master_task, distrb_info) if (my_task == 0) then @@ -739,6 +744,9 @@ subroutine get_i2o_fluxes tiomelt(:,:,:) = max(0.0,fresh(:,:,:)) !15) ice form waterflux: tioform(:,:,:) = min(0.0,fresh(:,:,:)) +!16 10m wind. To mask or not to mask? + tiownd(:,:,:) = sqrt(uatm(:,:,:)**2 + vatm(:,:,:)**2) + return end subroutine get_i2o_fluxes @@ -1161,6 +1169,8 @@ subroutine check_i2o_fields(ncfile,nstep, scale) if (my_task == 0) call write_nc2D(ncid, 'iomelt', gwork, 2, nx_global,ny_global,currstep,ilout=il_out) call gather_global(gwork, scale*ioform, master_task, distrb_info) if (my_task == 0) call write_nc2D(ncid, 'ioform', gwork, 2, nx_global,ny_global,currstep,ilout=il_out) +call gather_global(gwork, scale*iownd, master_task, distrb_info) +if (my_task == 0) call write_nc2D(ncid, 'iownd', gwork, 2, nx_global,ny_global,currstep,ilout=il_out) if (my_task == 0) call ncheck(nf_close(ncid), 'check_i2o_fields: nf_close') diff --git a/drivers/auscom/cpl_interface.F90 b/drivers/auscom/cpl_interface.F90 index 28f9fea..6f9b52d 100644 --- a/drivers/auscom/cpl_interface.F90 +++ b/drivers/auscom/cpl_interface.F90 @@ -68,9 +68,6 @@ module cpl_interface ! order according to ascending global_offset of segments. type(segment), dimension(:), allocatable :: part_def - integer(kind=int_kind), dimension(jpfldout) :: il_var_id_out ! ID for fields sent - integer(kind=int_kind), dimension(jpfldin) :: il_var_id_in ! ID for fields rcvd - character(len=6), parameter :: cp_modnam='cicexx' ! Component model name integer, parameter :: ORANGE = 3 @@ -250,6 +247,8 @@ subroutine init_cpl(runtime_seconds, coupling_field_timesteps) cl_writ(n_i2a+14)='melt_io' cl_writ(n_i2a+15)='form_io' + cl_writ(n_i2a+16)='wnd10_io' + do jf=1, jpfldout call oasis_def_var(il_var_id_out(jf),cl_writ(jf), part_id, & il_var_nodims, PRISM_Out, il_var_shape, PRISM_Real, ierror) @@ -334,6 +333,8 @@ subroutine init_cpl(runtime_seconds, coupling_field_timesteps) allocate (iomelt (nx_block, ny_block, max_blocks)); iomelt(:,:,:) = 0 allocate (ioform (nx_block, ny_block, max_blocks)); ioform(:,:,:) = 0 + allocate (iownd (nx_block, ny_block, max_blocks)); iownd(:,:,:) = 0 + allocate (tiostrsu(nx_block, ny_block, max_blocks)); tiostrsu(:,:,:) = 0 allocate (tiostrsv(nx_block, ny_block, max_blocks)); tiostrsv(:,:,:) = 0 allocate (tiorain(nx_block, ny_block, max_blocks)); tiorain(:,:,:) = 0 @@ -351,6 +352,8 @@ subroutine init_cpl(runtime_seconds, coupling_field_timesteps) allocate (tiomelt(nx_block, ny_block, max_blocks)); tiomelt(:,:,:) = 0 allocate (tioform(nx_block, ny_block, max_blocks)); tioform(:,:,:) = 0 + allocate (tiownd (nx_block, ny_block, max_blocks)); tiownd(:,:,:) = 0 + allocate (vwork(nx_block, ny_block, max_blocks)); vwork(:,:,:) = 0 allocate (gwork(nx_global, ny_global)); gwork(:,:) = 0 allocate (vwork2d(l_ilo:l_ihi, l_jlo:l_jhi)); vwork2d(:,:) = 0. @@ -646,6 +649,12 @@ subroutine into_ocn(isteps, scale) call pack_coupling_array(ioform*scale, work) call oasis_put(il_var_id_out(16), isteps, work, ierror) +! 10m winds are optional. + if( il_var_id_out(17) /= -1 ) then + call pack_coupling_array(iownd*scale, work) + call oasis_put(il_var_id_out(17), isteps, work, ierror) + endif + if (chk_i2o_fields) then call check_i2o_fields('fields_i2o_in_ice.nc',isteps, scale) endif @@ -702,6 +711,7 @@ subroutine coupler_termination deallocate (tiostrsu, tiostrsv, tiorain, tiosnow, tiostflx, tiohtflx, tioswflx, & tioqflux, tiolwflx, tioshflx, tiorunof, tiopress) deallocate (iomelt, ioform, tiomelt, tioform) + deallocate (iownd, tiownd) deallocate (gwork, vwork, sicemass) ! ! PSMILe termination @@ -751,6 +761,7 @@ subroutine write_boundary_checksums(time) print*, '[ice chksum] ioaice:', sum(ioaice(isc:iec, jsc:jec, 1)) print*, '[ice chksum] iomelt:', sum(iomelt(isc:iec, jsc:jec, 1)) print*, '[ice chksum] ioform:', sum(ioform(isc:iec, jsc:jec, 1)) + print*, '[ice chksum] iownd:', sum(iownd(isc:iec, jsc:jec, 1)) print*, '[ice chksum] ssto:', sum(ssto(isc:iec, jsc:jec, 1)) print*, '[ice chksum] ssso:', sum(ssso(isc:iec, jsc:jec, 1)) diff --git a/drivers/auscom/cpl_netcdf_setup.F90 b/drivers/auscom/cpl_netcdf_setup.F90 index a9b56cc..506b823 100644 --- a/drivers/auscom/cpl_netcdf_setup.F90 +++ b/drivers/auscom/cpl_netcdf_setup.F90 @@ -129,7 +129,7 @@ subroutine create_ncfile(ncfile, ncid, ii, jj, kk, ll, ilout) 'create_ncfile: nf_def_dim nx') !end of the definition phase -call ncheck(nf_enddef(ncid), 'create_ncfile: nf_enddef') +call ncheck(nf__enddef(ncid,1028,512,512,512), 'create_ncfile: nf__enddef') !close NetCDF file !call ncheck(nf_close(ncid)) diff --git a/drivers/auscom/cpl_parameters.F90 b/drivers/auscom/cpl_parameters.F90 index ddf9efb..e65323f 100644 --- a/drivers/auscom/cpl_parameters.F90 +++ b/drivers/auscom/cpl_parameters.F90 @@ -6,28 +6,33 @@ module cpl_parameters implicit none - integer(kind=int_kind) :: nt_cells ! nx_global x ny_global + integer(kind=int_kind) :: nt_cells ! nx_global x ny_global ! assigned in prism_init - integer(kind=int_kind), parameter :: jpfldout = 16 ! total number of fields sent - integer(kind=int_kind), parameter :: jpfldin = 17 ! total number of fields rcvd +! integer(kind=int_kind), parameter :: jpfldout = 16 ! total number of fields sent + integer(kind=int_kind), parameter :: jpfldout = 17 !RASF total number of fields sent Now includes wnd but should not be param + integer(kind=int_kind), parameter :: jpfldin = 17 ! total number of fields rcvd - integer(kind=int_kind), parameter :: n_a2i = 10 ! number of a2i fields - integer(kind=int_kind), parameter :: n_o2i = 7 ! number of o2i fields - integer(kind=int_kind), parameter :: n_i2a = 1 ! number of i2a fields - integer(kind=int_kind), parameter :: n_i2o = 15 ! number of i2o fields + integer(kind=int_kind), parameter :: n_a2i = 10 ! number of a2i fields + integer(kind=int_kind), parameter :: n_o2i = 7 ! number of o2i fields + integer(kind=int_kind), parameter :: n_i2a = 1 ! number of i2a fields + integer(kind=int_kind), parameter :: n_i2o = 16 ! number of i2o fields ! -character(len=8), dimension(jpfldout) :: cl_writ ! Symb names fields sent -character(len=8), dimension(jpfldin) :: cl_read ! Symb names fields rcvd - integer(kind=int_kind) :: il_out ! format io unit(s) for coupling cpu(s) + character(len=8), dimension(jpfldout) :: cl_writ ! Symb names fields sent + character(len=8), dimension(jpfldin) :: cl_read ! Symb names fields rcvd + integer(kind=int_kind) :: il_out ! format io unit(s) for coupling cpu(s) ! - integer(kind=int_kind) :: num_cpl_ai ! num of (a2i) cpl periods for this run - integer(kind=int_kind) :: num_cpl_io ! num of (i2o) cpl periods each atm_ice_timestep - integer(kind=int_kind) :: num_ice_io ! ice time loop iteration number per ice_ocean_timestep +!RASF need to move these here to make available for other modules + integer(kind=int_kind), dimension(jpfldout) :: il_var_id_out = -1 ! ID for fields sent + integer(kind=int_kind), dimension(jpfldin) :: il_var_id_in = -1 ! ID for fields rcvd - real(kind=dbl_kind) :: meltlimit = 50. !12/03/2008: set max melt - real(kind=dbl_kind) :: ocn_albedo = 0.06 + integer(kind=int_kind) :: num_cpl_ai ! num of (a2i) cpl periods for this run + integer(kind=int_kind) :: num_cpl_io ! num of (i2o) cpl periods each atm_ice_timestep + integer(kind=int_kind) :: num_ice_io ! ice time loop iteration number per ice_ocean_timestep + + real(kind=dbl_kind) :: meltlimit = 50. !12/03/2008: set max melt + real(kind=dbl_kind) :: ocn_albedo = 0.06 logical :: & !pop_icediag is as that for ocn model, if true pop_icediag = .false. , & ! ice formation from ocn is via POP approach use_ocnslope = .false. , & !if .t. use the sea srf tilt passed from ocn From e3a8977819cb42d8d546462a0a584e3908781198 Mon Sep 17 00:00:00 2001 From: Russell Fiedler Date: Thu, 30 Apr 2020 12:50:16 +1000 Subject: [PATCH 2/7] added wnd_io to cpl_interface.F90 --- drivers/auscom/cpl_interface.F90 | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/drivers/auscom/cpl_interface.F90 b/drivers/auscom/cpl_interface.F90 index f037230..68c2972 100644 --- a/drivers/auscom/cpl_interface.F90 +++ b/drivers/auscom/cpl_interface.F90 @@ -634,6 +634,8 @@ subroutine into_ocn(isteps, scale) call pack_coupling_array(iolicefw*scale, work) elseif (trim(fields_to_ocn(i)) == 'licefh_io') then call pack_coupling_array(iolicefh*scale, work) + elseif (trim(fields_to_ocn(i)) == 'wnd_io') then + call pack_coupling_array(iownd*scale, work) else call abort_ice('ice: bad coupling array name '//fields_to_ocn(i)) endif @@ -642,12 +644,6 @@ subroutine into_ocn(isteps, scale) enddo -! 10m winds are optional. - if( il_var_id_out(17) /= -1 ) then - call pack_coupling_array(iownd*scale, work) - call oasis_put(il_var_id_out(17), isteps, work, ierror) - endif - if (chk_i2o_fields) then call check_i2o_fields('fields_i2o_in_ice.nc',isteps, scale) endif From 0eeecf2d3961f79cbb55c7945fb1733f4ba04b54 Mon Sep 17 00:00:00 2001 From: Russell Fiedler Date: Fri, 1 May 2020 13:46:13 +1000 Subject: [PATCH 3/7] rename wnd_io to wnd10_io --- drivers/auscom/cpl_forcing_handler.F90 | 2 +- drivers/auscom/cpl_interface.F90 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/auscom/cpl_forcing_handler.F90 b/drivers/auscom/cpl_forcing_handler.F90 index 4143942..04e5e90 100644 --- a/drivers/auscom/cpl_forcing_handler.F90 +++ b/drivers/auscom/cpl_forcing_handler.F90 @@ -239,7 +239,7 @@ subroutine get_time0_i2o_fields(fname) iomelt = vwork elseif (trim(fields_to_ocn(i)) == 'form_io') then ioform = vwork - elseif (trim(fields_to_ocn(i)) == 'wnd_io') then + elseif (trim(fields_to_ocn(i)) == 'wnd10_io') then iownd = vwork elseif (trim(fields_to_ocn(i)) == 'licefw_io') then iolicefw = vwork diff --git a/drivers/auscom/cpl_interface.F90 b/drivers/auscom/cpl_interface.F90 index 68c2972..33f3a0f 100644 --- a/drivers/auscom/cpl_interface.F90 +++ b/drivers/auscom/cpl_interface.F90 @@ -634,7 +634,7 @@ subroutine into_ocn(isteps, scale) call pack_coupling_array(iolicefw*scale, work) elseif (trim(fields_to_ocn(i)) == 'licefh_io') then call pack_coupling_array(iolicefh*scale, work) - elseif (trim(fields_to_ocn(i)) == 'wnd_io') then + elseif (trim(fields_to_ocn(i)) == 'wnd10_io') then call pack_coupling_array(iownd*scale, work) else call abort_ice('ice: bad coupling array name '//fields_to_ocn(i)) From 7dee17fa09574cf8f2853d05a2d0da6ce0536a16 Mon Sep 17 00:00:00 2001 From: Russell Fiedler Date: Fri, 1 May 2020 16:41:14 +1000 Subject: [PATCH 4/7] wnd10_10 written to i2o,nc --- drivers/auscom/cpl_forcing_handler.F90 | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/auscom/cpl_forcing_handler.F90 b/drivers/auscom/cpl_forcing_handler.F90 index 04e5e90..7a1ecbb 100644 --- a/drivers/auscom/cpl_forcing_handler.F90 +++ b/drivers/auscom/cpl_forcing_handler.F90 @@ -207,6 +207,7 @@ subroutine get_time0_i2o_fields(fname) call ice_open_nc(fname, ncid_i2o) do i=1, num_fields_to_ocn vwork(:, :, :) = 0.0 + if (my_task == master_task) write(il_out,*) '(get_time0_i2o_fields) reading', trim(fields_to_ocn(i) call ice_read_nc(ncid_i2o, 1, trim(fields_to_ocn(i)) , vwork, .true.) if (trim(fields_to_ocn(i)) == 'strsu_io') then @@ -427,6 +428,8 @@ subroutine save_time0_i2o_fields(fname, nstep) vwork = iolicefw elseif (trim(fields_to_ocn(i)) == 'licefh_io') then vwork = iolicefh + elseif (trim(fields_to_ocn(i)) == 'wnd10_io') then + vwork = iownd else call abort_ice('ice: bad save array name '//trim(fields_to_ocn(i))) endif From 6fa7045f74cd3e03e6719d79c9a3c9d2dbe09ca3 Mon Sep 17 00:00:00 2001 From: Russell Fiedler Date: Fri, 1 May 2020 16:47:15 +1000 Subject: [PATCH 5/7] bug_fix --- drivers/auscom/cpl_forcing_handler.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/auscom/cpl_forcing_handler.F90 b/drivers/auscom/cpl_forcing_handler.F90 index 7a1ecbb..c067665 100644 --- a/drivers/auscom/cpl_forcing_handler.F90 +++ b/drivers/auscom/cpl_forcing_handler.F90 @@ -207,7 +207,7 @@ subroutine get_time0_i2o_fields(fname) call ice_open_nc(fname, ncid_i2o) do i=1, num_fields_to_ocn vwork(:, :, :) = 0.0 - if (my_task == master_task) write(il_out,*) '(get_time0_i2o_fields) reading', trim(fields_to_ocn(i) + if (my_task == master_task) write(il_out,*) '(get_time0_i2o_fields) reading', trim(fields_to_ocn(i)) call ice_read_nc(ncid_i2o, 1, trim(fields_to_ocn(i)) , vwork, .true.) if (trim(fields_to_ocn(i)) == 'strsu_io') then From 4961b9e675cf98fbf2751a0da5737b2db55b1f62 Mon Sep 17 00:00:00 2001 From: Russell Fiedler Date: Fri, 15 May 2020 14:47:32 +1000 Subject: [PATCH 6/7] remove debugging code --- drivers/auscom/cpl_forcing_handler.F90 | 1 - 1 file changed, 1 deletion(-) diff --git a/drivers/auscom/cpl_forcing_handler.F90 b/drivers/auscom/cpl_forcing_handler.F90 index c067665..e3a80e0 100644 --- a/drivers/auscom/cpl_forcing_handler.F90 +++ b/drivers/auscom/cpl_forcing_handler.F90 @@ -207,7 +207,6 @@ subroutine get_time0_i2o_fields(fname) call ice_open_nc(fname, ncid_i2o) do i=1, num_fields_to_ocn vwork(:, :, :) = 0.0 - if (my_task == master_task) write(il_out,*) '(get_time0_i2o_fields) reading', trim(fields_to_ocn(i)) call ice_read_nc(ncid_i2o, 1, trim(fields_to_ocn(i)) , vwork, .true.) if (trim(fields_to_ocn(i)) == 'strsu_io') then From 037f938895c0f7e120621e1269d75a95322d2814 Mon Sep 17 00:00:00 2001 From: Russell Fiedler Date: Tue, 2 Jun 2020 15:46:37 +1000 Subject: [PATCH 7/7] clarified comments about number of fields to be passed between components --- drivers/auscom/cpl_arrays_setup.F90 | 69 +++++++++++++++-------------- 1 file changed, 36 insertions(+), 33 deletions(-) diff --git a/drivers/auscom/cpl_arrays_setup.F90 b/drivers/auscom/cpl_arrays_setup.F90 index fda8929..11e6a89 100644 --- a/drivers/auscom/cpl_arrays_setup.F90 +++ b/drivers/auscom/cpl_arrays_setup.F90 @@ -5,68 +5,71 @@ module cpl_arrays_setup ! It's designed to include the following 'possible' coupling fields at the ! air-ice-sea surface: ! +! Further fields may be handled here. As of June 2020 the maximum number of fields passed from 1 component to another is 32 and is +! set in module cpl_parameters. The actual number passed is now determined at run time via namelists. +! ! A> atm==>ice ! -! (1) 2m air temp (K) tair0 -! (2) 10m 'zonal' wind speed (m/s) uwnd0 -! (3) 10m 'meridional' wind speed (m/s) vwnd0 -! (4) shortwave radiation (down, J/m^2) swflx0 -! (5) longwave radiation (down, J/m^2) lwflx0 -! (6) 2m air specific humidity (kg/kg) qair0 -! (7) rainfall rate (kg/m^2/s) rain0 +! (1) 2m air temp (K) tair0 +! (2) 10m 'zonal' wind speed (m/s) uwnd0 +! (3) 10m 'meridional' wind speed (m/s) vwnd0 +! (4) shortwave radiation (down, J/m^2) swflx0 +! (5) longwave radiation (down, J/m^2) lwflx0 +! (6) 2m air specific humidity (kg/kg) qair0 +! (7) rainfall rate (kg/m^2/s) rain0 ! (8) snowfall rate (kg/m^2/s) snow0 -! (9) pressure (Pa) press0 -! (10)runof (kg/m^2/s) runof0 +! (9) pressure (Pa) press0 +! (10)runof (kg/m^2/s) runof0 +! (11)calving (kg/m^2/s) calv0 ! ! B> ocn==>ice ! -! (1) sea surface temperature (K) ssto -! (2) sea surface salinity (psu) ssso -! (3) zonal water speed (m/s) ssuo -! (4) meridional water speed (m/s) ssvo -! (5) sea surface gradient (zonal) (m/m) sslx -! (6) sea surface gradient (meridional)(m/m) ssly -! (7) potential ice frm/mlt heatflux (W/m^2) pfmice +! (1) sea surface temperature (K) ssto +! (2) sea surface salinity (psu) ssso +! (3) zonal water speed (m/s) ssuo +! (4) meridional water speed (m/s) ssvo +! (5) sea surface gradient (zonal) (m/m) sslx +! (6) sea surface gradient (meridional)(m/m) ssly +! (7) potential ice frm/mlt heatflux (W/m^2) pfmice ! ! D> ice==>ocn ! -! (1) ice-ocean stress, x-direction (kg/m s^2) iostrsu -! (2) ice-ocean stress, y-direction (kg/m s^2) iostrsv -! (3) fresh water flux to ocean--rain (kg/m^2/s) iorain -! (4) fresh water flux to ocean--snow (kg/m^2/s) iosnow -! (5) salt flux to ocean (kg/m^2/s) iostflx -! (6) 'net' heat flux to ocean (W/m^2) iohtflx +! (1) ice-ocean stress, x-direction (kg/m s^2) iostrsu +! (2) ice-ocean stress, y-direction (kg/m s^2) iostrsv +! (3) fresh water flux to ocean--rain (kg/m^2/s) iorain +! (4) fresh water flux to ocean--snow (kg/m^2/s) iosnow +! (5) salt flux to ocean (kg/m^2/s) iostflx +! (6) 'net' heat flux to ocean (W/m^2) iohtflx ! *(note word 'net' is misleading!) it is actually ice ! *'melt' heatflux into ocean. (ref: ice_coupling.F, ! *it says: ! *'buffs(n,index_i2c_Fioi_melth) = fhnet(i,j) ! * ! hf from melting' -! (7) shortwave penetrating to ocean (W/m^2) ioswflx +! (7) shortwave penetrating to ocean (W/m^2) ioswflx ! Also, we let the following 'atmospheric fluxes' ! (some maybe calculated in cice) be passed into ocean: ! (8) latent heat flux (W/m^2, positive out of ocean) ioqflux -! (9) sensible heat flux (W/m^2, postive out of ocean ioshflx +! (9) sensible heat flux (W/m^2, postive out of ocean ioshflx !--- note sensible/latent heatfluxes are calculated in cice being ! positive into ocean! they must change sign before sent to ! mom4 (which requires these 2 item as positive out of ocean!) ! this is done in routine" get_i2o_fluxes" ! -!(10) long wave radiation iolwflx -!(11) runoff iorunof -!(12) pressure iopress -!(13) ice concentration (fraction) ioaice +!(10) long wave radiation iolwflx +!(11) runoff iorunof +!(12) pressure iopress +!(13) ice concentration (fraction) ioaice ! ! Seperate ice melting/forcation associated water fluxes from the rainfall field: ! -!(14) ice melt waterflux iomelt -!(15) ice form waterflux ioform -!(16) land ice waterflux iolicefw -!(17) land ice heatflux iolicefh +!(14) ice melt waterflux iomelt +!(15) ice form waterflux ioform +!(16) land ice waterflux iolicefw +!(17) land ice heatflux iolicefh !(18) 10m wind speeds iownd10 ! ! -! 18 in, 18 out => thus we set jpfldout=18, jpfldin=18 (in cpl_parameters)! RASF Check this statement. ! !---------------------------------------------------------------------------- !Note: