module MCB_mask
use netcdf
use shr_kind_mod,   only: r8=>shr_kind_r8
use ppgrid,         only: pcols
use phys_grid,      only: get_lon_all_p, get_lat_all_p
use pmgrid,     only : plon, plat

implicit none
private
save

public :: read_MCB_mask_varied, read_MCB_mask_fixed, get_MCB_mask_varied, get_MCB_mask_fixed

character(len=*), parameter :: mask_file = SEEDING MASK FILE WITH FULL PATH
real(r8), save :: mask_varied(plon, plat, 12, 36)
real(r8), save :: mask_fixed(plon, plat, 12)

contains

subroutine read_MCB_mask_varied
       implicit none
  
       integer :: ncid, varid, status
       
       status = nf90_open(mask_file, nf90_nowrite, ncid)
       status = nf90_inq_varid(ncid, 'mask', varid)
       status = nf90_get_var(ncid, varid, mask_varied)
       status = nf90_close(ncid)
end subroutine read_MCB_mask_varied

subroutine read_MCB_mask_fixed
       implicit none

       integer :: ncid, varid, status

       status = nf90_open(mask_file, nf90_nowrite, ncid)
       status = nf90_inq_varid(ncid, 'mask', varid)
       status = nf90_get_var(ncid, varid, mask_fixed)
       status = nf90_close(ncid)
end subroutine read_MCB_mask_fixed


subroutine get_MCB_mask_varied(lchnk, ncol, mask, pct_id)
       use time_manager,       only: get_curr_date
       use cam_history,        only: outfld

       integer, intent(in) :: lchnk
       integer, intent(in) :: ncol
       integer, intent(in) :: pct_id
       real(r8), intent(out) :: mask(pcols)

       integer :: yr, mon, day, ncsec, i
       integer :: lons(pcols), lats(pcols)

       mask = 0._r8
       call get_curr_date(yr, mon, day, ncsec)

       call get_lon_all_p(lchnk,ncol,lons)
       call get_lat_all_p(lchnk,ncol,lats)      

       do i=1,ncol
          mask(i) = mask_varied(lons(i), lats(i), mon, pct_id)
       end do

end subroutine get_MCB_mask_varied

subroutine get_MCB_mask_fixed(lchnk, ncol, mask)
       use time_manager,       only: get_curr_date
       use cam_history,        only: outfld

       integer, intent(in) :: lchnk
       integer, intent(in) :: ncol
       real(r8), intent(out) :: mask(pcols)

       integer :: yr, mon, day, ncsec, i
       integer :: lons(pcols), lats(pcols)

       mask = 0._r8
       call get_curr_date(yr, mon, day, ncsec)

       call get_lon_all_p(lchnk,ncol,lons)
       call get_lat_all_p(lchnk,ncol,lats)

       do i=1,ncol
          mask(i) = mask_fixed(lons(i), lats(i), mon)
       end do

end subroutine get_MCB_mask_fixed

end module MCB_mask
