Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Pertlim fix for MPAS #1114

Open
wants to merge 1 commit into
base: cam_development
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 29 additions & 1 deletion src/dynamics/mpas/dyn_comp.F90
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ module dyn_comp
use const_init, only: cnst_init_default

use cam_control_mod, only: initial_run
use cam_initfiles, only: initial_file_get_id, topo_file_get_id
use cam_initfiles, only: initial_file_get_id, topo_file_get_id, pertlim

use cam_grid_support, only: cam_grid_id, &
cam_grid_get_latvals, cam_grid_get_lonvals
Expand Down Expand Up @@ -813,6 +813,11 @@ subroutine read_inidat(dyn_in)

logical :: readvar

integer :: rndm_seed_sz
integer, allocatable :: rndm_seed(:)
real(r8) :: pertval
integer :: nc

character(len=shr_kind_cx) :: str

type(mpas_pool_type), pointer :: mesh_pool
Expand Down Expand Up @@ -1083,6 +1088,29 @@ subroutine read_inidat(dyn_in)
call endrun(subname//': failed to read theta from initial file')
end if

! optionally introduce random perturbations to theta values
if (pertlim.ne.0.0_r8) then
if (masterproc) then
write(iulog,*) trim(subname), ': Adding random perturbation bounded', &
'by +/- ', pertlim, ' to initial theta field'
end if

call random_seed(size=rndm_seed_sz)
allocate(rndm_seed(rndm_seed_sz))

do nc = 1,nCellsSolve
rndm_seed = glob_ind(nc)
call random_seed(put=rndm_seed)
do kk = 1,plev
call random_number(pertval)
pertval = 2.0_r8*pertlim*(0.5_r8 - pertval)
theta(kk,nc) = theta(kk,nc)*(1.0_r8 + pertval)
end do
end do

deallocate(rndm_seed)
end if

! read rho
call infld('rho', fh_ini, 'lev', 'nCells', 1, plev, 1, nCellsSolve, 1, 1, &
mpas3d, readvar, gridname='mpas_cell')
Expand Down