Skip to content

Commit

Permalink
Merge branch 'dev/gfdl' into fix-h_neglect
Browse files Browse the repository at this point in the history
  • Loading branch information
Hallberg-NOAA authored Apr 4, 2022
2 parents 507bdb9 + edd3f9c commit 7dfd287
Show file tree
Hide file tree
Showing 78 changed files with 4,416 additions and 2,153 deletions.
4 changes: 2 additions & 2 deletions .gitlab-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,14 +44,14 @@ gnu:ocean-only-nolibs:
tags:
- ncrc4
script:
- make -f tools/MRS/Makefile pipeline-build-gnu-oceanonly-nolibs
- make -f tools/MRS/Makefile MOM6_SRC=../.. pipeline-build-gnu-oceanonly-nolibs

gnu:ice-ocean-nolibs:
stage: builds
tags:
- ncrc4
script:
- make -f tools/MRS/Makefile pipeline-build-gnu-iceocean-nolibs
- make -f tools/MRS/Makefile MOM6_SRC=../.. pipeline-build-gnu-iceocean-nolibs

intel:repro:
stage: builds
Expand Down
6 changes: 6 additions & 0 deletions config_src/drivers/solo_driver/MOM_driver.F90
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ program MOM_main

use MOM_cpu_clock, only : cpu_clock_id, cpu_clock_begin, cpu_clock_end
use MOM_cpu_clock, only : CLOCK_COMPONENT
use MOM_data_override, only : data_override_init
use MOM_diag_mediator, only : enable_averaging, disable_averaging, diag_mediator_end
use MOM_diag_mediator, only : diag_ctrl, diag_mediator_close_registration
use MOM, only : initialize_MOM, step_MOM, MOM_control_struct, MOM_end
Expand All @@ -47,6 +48,7 @@ program MOM_main
use MOM_ice_shelf, only : initialize_ice_shelf, ice_shelf_end, ice_shelf_CS
use MOM_ice_shelf, only : shelf_calc_flux, add_shelf_forces, ice_shelf_save_restart
use MOM_ice_shelf, only : initialize_ice_shelf_fluxes, initialize_ice_shelf_forces
use MOM_ice_shelf, only : ice_shelf_query
use MOM_interpolate, only : time_interp_external_init
use MOM_io, only : file_exists, open_ASCII_file, close_file
use MOM_io, only : check_nml_error, io_infra_init, io_infra_end
Expand Down Expand Up @@ -176,6 +178,8 @@ program MOM_main
type(surface_forcing_CS), pointer :: surface_forcing_CSp => NULL()
type(write_cputime_CS), pointer :: write_CPU_CSp => NULL()
type(ice_shelf_CS), pointer :: ice_shelf_CSp => NULL()
logical :: override_shelf_fluxes !< If true, and shelf dynamics are active,
!! the data_override feature is enabled (only for MOSAIC grid types)
type(wave_parameters_cs), pointer :: waves_CSp => NULL()
type(MOM_restart_CS), pointer :: &
restart_CSp => NULL() !< A pointer to the restart control structure
Expand Down Expand Up @@ -302,6 +306,8 @@ program MOM_main
! when using an ice shelf
call initialize_ice_shelf_fluxes(ice_shelf_CSp, grid, US, fluxes)
call initialize_ice_shelf_forces(ice_shelf_CSp, grid, US, forces)
call ice_shelf_query(ice_shelf_CSp, grid, data_override_shelf_fluxes=override_shelf_fluxes)
if (override_shelf_fluxes) call data_override_init(Ocean_Domain_in=grid%domain%mpp_domain)
endif


Expand Down
31 changes: 31 additions & 0 deletions config_src/infra/FMS1/MOM_coms_infra.F90
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ module MOM_coms_infra

public :: PE_here, root_PE, num_PEs, set_rootPE, Set_PElist, Get_PElist
public :: broadcast, sum_across_PEs, min_across_PEs, max_across_PEs
public :: any_across_PEs, all_across_PEs
public :: field_chksum, MOM_infra_init, MOM_infra_end

! This module provides interfaces to the non-domain-oriented communication
Expand Down Expand Up @@ -438,6 +439,36 @@ subroutine min_across_PEs_real_1d(field, length, pelist)
call mpp_min(field, length, pelist)
end subroutine min_across_PEs_real_1d

!> Implementation of any() intrinsic across PEs
function any_across_PEs(field, pelist)
logical, intent(in) :: field !< Local PE value
integer, optional, intent(in) :: pelist(:) !< List of PEs to work with
logical :: any_across_PEs

integer :: field_flag

! FMS1 does not support logical collectives, so integer flags are used.
field_flag = 0
if (field) field_flag = 1
call max_across_PEs(field_flag, pelist)
any_across_PEs = (field_flag > 0)
end function any_across_PEs

!> Implementation of all() intrinsic across PEs
function all_across_PEs(field, pelist)
logical, intent(in) :: field !< Local PE value
integer, optional, intent(in) :: pelist(:) !< List of PEs to work with
logical :: all_across_PEs

integer :: field_flag

! FMS1 does not support logical collectives, so integer flags are used.
field_flag = 0
if (field) field_flag = 1
call min_across_PEs(field_flag, pelist)
all_across_PEs = (field_flag > 0)
end function all_across_PEs

!> Initialize the model framework, including PE communication over a designated communicator.
!! If no communicator ID is provided, the framework's default communicator is used.
subroutine MOM_infra_init(localcomm)
Expand Down
31 changes: 31 additions & 0 deletions config_src/infra/FMS2/MOM_coms_infra.F90
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ module MOM_coms_infra

public :: PE_here, root_PE, num_PEs, set_rootPE, Set_PElist, Get_PElist
public :: broadcast, sum_across_PEs, min_across_PEs, max_across_PEs
public :: any_across_PEs, all_across_PEs
public :: field_chksum, MOM_infra_init, MOM_infra_end

! This module provides interfaces to the non-domain-oriented communication
Expand Down Expand Up @@ -438,6 +439,36 @@ subroutine min_across_PEs_real_1d(field, length, pelist)
call mpp_min(field, length, pelist)
end subroutine min_across_PEs_real_1d

!> Implementation of any() intrinsic across PEs
function any_across_PEs(field, pelist)
logical, intent(in) :: field !< Local PE value
integer, optional, intent(in) :: pelist(:) !< List of PEs to work with
logical :: any_across_PEs

integer :: field_flag

! FMS1 does not support logical collectives, so integer flags are used.
field_flag = 0
if (field) field_flag = 1
call max_across_PEs(field_flag, pelist)
any_across_PEs = (field_flag > 0)
end function any_across_PEs

!> Implementation of all() intrinsic across PEs
function all_across_PEs(field, pelist)
logical, intent(in) :: field !< Local PE value
integer, optional, intent(in) :: pelist(:) !< List of PEs to work with
logical :: all_across_PEs

integer :: field_flag

! FMS1 does not support logical collectives, so integer flags are used.
field_flag = 0
if (field) field_flag = 1
call min_across_PEs(field_flag, pelist)
all_across_PEs = (field_flag > 0)
end function all_across_PEs

!> Initialize the model framework, including PE communication over a designated communicator.
!! If no communicator ID is provided, the framework's default communicator is used.
subroutine MOM_infra_init(localcomm)
Expand Down
8 changes: 7 additions & 1 deletion config_src/infra/FMS2/MOM_io_infra.F90
Original file line number Diff line number Diff line change
Expand Up @@ -607,14 +607,14 @@ subroutine get_field_size(filename, fieldname, sizes, field_found, no_domain)
!! is a fatal error if the field is not found.
logical, optional, intent(in) :: no_domain !< If present and true, do not check for file
!! names with an appended tile number

! Local variables
type(FmsNetcdfFile_t) :: fileobj_read ! A handle to a non-domain-decomposed file for obtaining information
! about the exiting time axis entries in append mode.
logical :: success ! If true, the file was opened successfully
logical :: field_exists ! True if filename exists and field_name is in filename
integer :: i, ndims


if (FMS2_reads) then
field_exists = .false.
if (file_exists(filename)) then
Expand All @@ -627,6 +627,12 @@ subroutine get_field_size(filename, fieldname, sizes, field_found, no_domain)
"get_field_size called with too few sizes for "//trim(fieldname)//" in "//trim(filename))
call get_variable_size(fileobj_read, fieldname, sizes(1:ndims))
do i=ndims+1,size(sizes) ; sizes(i) = 0 ; enddo
! This preserves previous behavior when reading time-varying data without
! a vertical extent.
if (size(sizes)==ndims+1) then
sizes(ndims+1)=sizes(ndims)
sizes(ndims)=1
endif
endif
endif
endif
Expand Down
Loading

0 comments on commit 7dfd287

Please sign in to comment.