Scheduled Downtime
On Tuesday 24 October 2023 @ 5pm MT the forums will be in read only mode in preparation for the downtime. On Wednesday 25 October 2023 @ 5am MT, this website will be down for maintenance and expected to return online later in the morning.
Normal Operations
The forums are back online with normal operations. If you notice any issues or errors related to the forums, please reach out to help@ucar.edu

how to make icepack forcing data

chenshzh12

Shengzhe Chen
New Member
Hi everyone,
I am now trying to make my own icepack forcing data and do some sensitivity experiments. I am wondering if anyone knows where can I find tutorials or example codes that are capable of generating the forcing data? For example, if I want to make my own CFS atmospheric forcing data, how should I generate one with the exact same structure as the given example. How about the ocn, ice and bgc forcing as well? Many thanks in advance.
Best,
Shengzhe
 

chenshzh12

Shengzhe Chen
New Member
In addition, anyone knows how ocn and bgc forcing data are organized? For example, in the example ocn and bgc NICE 2015 forcing data oceanmixed_daily_3.txt and nutrients_daily_ISPOL_WOA_field3.txt, which column represents what variable? Much appreciation!
 

dbailey

CSEG and Liaisons
Staff member
Have a look at the Icepack driver to see how the forcing is read in. It varies depending on the type of forcing.
 

chenshzh12

Shengzhe Chen
New Member
Have a look at the Icepack driver to see how the forcing is read in. It varies depending on the type of forcing.
Thank you very much for the info. I am reading the icepack driver codes and trying to figure it out. One more thing, are you aware where I might be able to download the ocean forcing data: qdp (deep ocean heat flux (W/m^2)) which is required in icepack? In CICE, the qdp is called ocean sub-mixed layer heat flux
Best,
Shengzhe
 

chenshzh12

Shengzhe Chen
New Member
For Icepack, there is no qdp file read in.
Thank you for your reply. But I am a bit curious because I do see qdp read in in icedrv_forcing.F90 - subroutine ocn_NICE and subroutine ocn_ISPOL. I attached those two subroutines in icedrv_forcing.F90 below for reference.

!=======================================================================

subroutine ocn_NICE

integer (kind=int_kind) :: &
i

real (kind=dbl_kind), dimension(365) :: &
t , & ! sea surface temperature
s , & ! sea surface salinity
hblt, & ! mixed layer depth
u , & ! ocean current, x
v , & ! ocean current, y
dhdx, & ! sea surface slope
dhdy, & ! sea surface slope
qdp ! deep ocean heat flux

character (char_len_long) filename

character(len=*), parameter :: subname='(ocn_NICE)'

! ocn_data_file = 'oceanmixed_daily_3.txt'
filename = trim(data_dir)//'/NICE_2015/'//trim(ocn_data_file)

write (nu_diag,*) 'Reading ',filename

open (nu_forcing, file=filename, form='formatted')

read(nu_forcing,*) t
read(nu_forcing,*) s
read(nu_forcing,*) hblt
read(nu_forcing,*) u
read(nu_forcing,*) v
read(nu_forcing,*) dhdx ! not used for Icepack
read(nu_forcing,*) dhdy ! not used for Icepack
read(nu_forcing,*) qdp

close(nu_forcing)

do i = 1, 365 ! daily
sst_data (i) = t (i)
sss_data (i) = s (i)
hmix_data(i) = hblt(i)
uocn_data(i) = u (i)
vocn_data(i) = v (i)
qdp_data (i) = qdp (i)
end do

end subroutine ocn_NICE
!=======================================================================

subroutine ocn_ISPOL

integer (kind=int_kind) :: &
i

real (kind=dbl_kind), dimension(12) :: &
t , & ! sea surface temperature
s , & ! sea surface salinity
hblt, & ! mixed layer depth
u , & ! ocean current, x
v , & ! ocean current, y
dhdx, & ! sea surface slope
dhdy, & ! sea surface slope
qdp ! deep ocean heat flux

character (char_len_long) filename

character(len=*), parameter :: subname='(ocn_ISPOL)'

! ocn_data_file = 'pop_frc.gx1v3.051202_but_hblt_from_010815_ispol.txt'
filename = trim(data_dir)//'/ISPOL_2004/'//trim(ocn_data_file)

write (nu_diag,*) 'Reading ',filename

open (nu_forcing, file=filename, form='formatted')

read(nu_forcing,*) t
read(nu_forcing,*) s
read(nu_forcing,*) hblt
read(nu_forcing,*) u
read(nu_forcing,*) v
read(nu_forcing,*) dhdx ! not used for Icepack
read(nu_forcing,*) dhdy ! not used for Icepack
read(nu_forcing,*) qdp

close(nu_forcing)

do i = 1, 12 ! monthly
sst_data (i) = t (i)
sss_data (i) = s (i)
hmix_data(i) = hblt(i)
uocn_data(i) = u (i)
vocn_data(i) = v (i)
qdp_data (i) = qdp (i)
end do

end subroutine ocn_ISPOL

!=======================================================================
 

dbailey

CSEG and Liaisons
Staff member
Ok. I haven't used these forcing files very much. These are scalar values in a simple text file.

Dave
 

chenshzh12

Shengzhe Chen
New Member
To anyone who might want to do similar things. I use Matlab and save the forcing matrix as a simple text file similar to the example data by using
dlmwrite('merra_forcing.txt',forcing_merra,'precision','%12.8f','delimiter',' ');
In this case, one need to dig into the icedrv.forcing.F90 and modify based on atm_CFS part to read the newly made data. for example, from (5(f10.8)) to (7(f12.8))

Best,
Shengzhe
 
Top