Skip to content

Commit 373a142

Browse files
(regcm-core) : fix for idynamic 3 in ICBC for correct geolocation of staggered wind components, add option --enable-parallel-nc to test NC3 parallel output through Parallel NetCDF inside NetCDF, fix surface ps error in idynamic 1. Add hash module. Small development in moloch code.
1 parent de66719 commit 373a142

15 files changed

+496
-150
lines changed

Main/Makefile.am

+3-3
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ mod_bdycod.o : mod_bdycod.F90 mod_atm_interface.o mod_che_interface.o mod_dynpar
135135
mod_che_interface.o : mod_che_interface.F90 mod_atm_interface.o mod_rad_interface.o mod_che_bdyco.o mod_che_bionit.o mod_che_carbonaer.o mod_che_common.o mod_che_cumtran.o mod_che_drydep.o mod_che_dust.o mod_che_emission.o mod_che_linox.o mod_che_indices.o mod_che_mppio.o mod_che_ncio.o mod_che_param.o mod_che_species.o mod_che_start.o mod_che_tend.o mod_realkinds.o mod_runparams.o mod_regcm_types.o
136136
mod_cu_interface.o : mod_cu_interface.F90 mod_atm_interface.o mod_che_interface.o mod_cu_bm.o mod_cu_common.o mod_cu_em.o mod_cu_grell.o mod_cu_kf.o mod_cu_kuo.o mod_cu_tables.o mod_cu_tiedtke.o mod_dynparam.o mod_intkinds.o mod_memutil.o mod_realkinds.o mod_regcm_types.o mod_runparams.o mod_regcm_types.o mod_constants.o mod_cu_bm.o mod_cu_common.o mod_cu_em.o mod_cu_grell.o mod_cu_kuo.o mod_cu_tables.o mod_cu_tiedtke.o mod_cu_kf.o mod_cu_shallow.o mod_realkinds.o mod_mppparam.o clwfromt.inc
137137
mod_diffusion.o : mod_diffusion.F90 mod_atm_interface.o mod_dynparam.o mod_intkinds.o mod_memutil.o mod_mppparam.o mod_realkinds.o mod_runparams.o mod_service.o mod_constants.o
138-
mod_header.o : mod_header.F90 mod_constants.o mod_date.o mod_intkinds.o mod_mppparam.o mod_realkinds.o mod_stdio.o $(REGCM_ROOT)/version
138+
mod_header.o : mod_header.F90 mod_constants.o mod_date.o mod_intkinds.o mod_dynparam.o mod_mppparam.o mod_realkinds.o mod_stdio.o $(REGCM_ROOT)/version
139139
mod_init.o : mod_init.F90 mod_atm_interface.o mod_bdycod.o mod_che_interface.o mod_constants.o mod_cu_interface.o mod_dynparam.o mod_intkinds.o mod_lm_interface.o mod_mpmessage.o mod_mppparam.o mod_ncio.o mod_outvars.o mod_pbl_interface.o mod_micro_interface.o mod_rad_interface.o mod_realkinds.o mod_runparams.o mod_savefile.o mod_service.o mod_slabocean.o mod_sun.o rrtmg_lw_init.o rrtmg_sw_init.o mod_slice.o mod_diffusion.o mod_sound.o mod_massck.o pfesat.inc pfwsat.inc clwfromt.inc
140140
if DO_COMPILE_LIBCLM
141141
mod_lm_interface.o : mod_lm_interface.F90 clm_time_manager.o clm_varctl.o clm_varsur.o mod_atm_interface.o mod_bats_common.o mod_che_common.o mod_che_interface.o mod_clm.o mod_memutil.o mod_mpmessage.o mod_mppparam.o mod_mtrxclm.o mod_ocn_common.o mod_outvars.o mod_regcm_types.o mod_runparams.o mod_service.o perf_mod.o restFileMod.o spmdMod.o pfesat.inc pfwsat.inc wlh.inc evpt.inc
@@ -151,9 +151,9 @@ mod_ncio.o : mod_ncio.F90 mod_domain.o mod_dynparam.o mod_ensemble.o mod_memutil
151151
mod_oasis.o : mod_oasis.F90 mod_atm_interface.o mod_realkinds.o
152152
mod_output.o : mod_output.F90 mod_atm_interface.o mod_bdycod.o mod_capecin.o mod_che_interface.o mod_che_output.o mod_cu_interface.o mod_dynparam.o mod_header.o mod_intkinds.o mod_lm_interface.o mod_mpmessage.o mod_mppparam.o mod_ncout.o mod_pbl_interface.o mod_micro_interface.o mod_rad_interface.o mod_realkinds.o mod_runparams.o mod_savefile.o mod_service.o mod_slabocean.o mod_split.o pfwsat.inc pfesat.inc
153153
if DO_COMPILE_LIBCLM45
154-
mod_params.o : mod_params.F90 mod_advection.o mod_atm_interface.o mod_bdycod.o mod_che_interface.o mod_clm_regcm.o mod_cu_interface.o mod_domain.o mod_lm_interface.o mod_mpmessage.o mod_mppparam.o mod_ncio.o mod_ncout.o mod_pbl_interface.o mod_micro_interface.o mod_rad_interface.o mod_runparams.o mod_savefile.o mod_service.o mod_slabocean.o mod_sldepparam.o mod_slice.o mod_split.o mod_tendency.o mod_nhinterp.o mod_diffusion.o mod_sladvection.o mod_timer.o
154+
mod_params.o : mod_params.F90 mod_advection.o mod_atm_interface.o mod_bdycod.o mod_che_interface.o mod_clm_regcm.o mod_cu_interface.o mod_domain.o mod_lm_interface.o mod_mpmessage.o mod_mppparam.o mod_ncio.o mod_ncout.o mod_pbl_interface.o mod_micro_interface.o mod_rad_interface.o mod_runparams.o mod_savefile.o mod_service.o mod_slabocean.o mod_sldepparam.o mod_slice.o mod_split.o mod_tendency.o mod_nhinterp.o mod_diffusion.o mod_sladvection.o mod_timer.o mod_moloch.o
155155
else
156-
mod_params.o : mod_params.F90 mod_advection.o mod_atm_interface.o mod_bdycod.o mod_che_interface.o mod_cu_interface.o mod_domain.o mod_lm_interface.o mod_mpmessage.o mod_mppparam.o mod_ncio.o mod_ncout.o mod_pbl_interface.o mod_micro_interface.o mod_rad_interface.o mod_runparams.o mod_savefile.o mod_service.o mod_slabocean.o mod_sldepparam.o mod_slice.o mod_split.o mod_tendency.o mod_nhinterp.o mod_sound.o mod_diffusion.o mod_sladvection.o mod_timer.o
156+
mod_params.o : mod_params.F90 mod_advection.o mod_atm_interface.o mod_bdycod.o mod_che_interface.o mod_cu_interface.o mod_domain.o mod_lm_interface.o mod_mpmessage.o mod_mppparam.o mod_ncio.o mod_ncout.o mod_pbl_interface.o mod_micro_interface.o mod_rad_interface.o mod_runparams.o mod_savefile.o mod_service.o mod_slabocean.o mod_sldepparam.o mod_slice.o mod_split.o mod_tendency.o mod_nhinterp.o mod_sound.o mod_diffusion.o mod_sladvection.o mod_timer.o mod_moloch.o
157157
endif
158158
mod_pbl_interface.o : mod_pbl_interface.F90 mod_atm_interface.o mod_che_common.o mod_che_interface.o mod_constants.o mod_dynparam.o mod_memutil.o mod_mppparam.o mod_pbl_common.o mod_pbl_holtbl.o mod_pbl_uwtcm.o mod_realkinds.o mod_regcm_types.o mod_runparams.o mod_service.o mod_pbl_gfs.o mod_pbl_myj.o
159159
mod_micro_interface.o : mod_micro_interface.F90 mod_realkinds.o mod_service.o mod_constants.o mod_dynparam.o mod_memutil.o mod_mppparam.o mod_regcm_types.o mod_runparams.o mod_micro_nogtom.o mod_micro_subex.o mod_micro_wsm5.o mod_cloud_subex.o mod_cloud_xuran.o mod_cloud_thomp.o mod_cloud_guli2007.o pfesat.inc pfwsat.inc clwfromt.inc mod_atm_interface.o mod_che_interface.o wlh.inc

Main/mod_atm_interface.F90

+1-1
Original file line numberDiff line numberDiff line change
@@ -770,7 +770,7 @@ subroutine allocate_domain(dom)
770770
call getmem2d(dom%dlat,jde1,jde2,ide1,ide2,'storage:dlat')
771771
call getmem2d(dom%dlon,jde1,jde2,ide1,ide2,'storage:dlon')
772772
if ( idynamic == 3 ) then
773-
call getmem2d(dom%clv,jce1,jce2,ice1,ice2,'storage:clv')
773+
call getmem2d(dom%clv,jce1,jce2,ice1ga,ice2ga,'storage:clv')
774774
call getmem2d(dom%fmyu,jce1,jce2,ice1,ice2,'storage:fmyu')
775775
end if
776776
call getmem2d(dom%msfx,jd1,jd2,id1,id2,'storage:msfx')

Main/mod_header.F90

+2
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ module mod_header
2424
use mod_constants
2525
use mod_mppparam
2626
use mod_date
27+
use mod_dynparam , only : nproc
2728
use mod_stdio
2829

2930
implicit none
@@ -116,6 +117,7 @@ subroutine finaltime(myid)
116117
write(cdata,'(i0.4,"-",i0.2,"-",i0.2," ",i0.2,":",i0.2,":",i0.2,a)') &
117118
tval(1), tval(2), tval(3), tval(5), tval(6), tval(7), czone
118119
write (stdout,*) ': this run stops at : ', trim(cdata)
120+
write (stdout,*) ': Run has been completed using ', nproc, ' processors.'
119121
write (stdout,*) ': Total elapsed seconds of run : ', &
120122
(finish_time - start_time)
121123
end if

Main/mod_moloch.F90

+16-1
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ module mod_moloch
5858
real(rkx) , pointer , dimension(:,:,:) :: ux , vx , wx
5959
real(rkx) , pointer , dimension(:,:,:) :: tkex
6060

61+
public allocate_moloch
62+
6163
contains
6264

6365
#include <cpmf.inc>
@@ -137,8 +139,9 @@ end subroutine filt3d
137139

138140
subroutine advection
139141
implicit none
140-
integer(ik4) :: i , j , k
142+
integer(ik4) :: i , j , k , n
141143
real(rkx) :: dz
144+
real(rkx) , pointer , dimension(:,:,:) :: ptr
142145

143146
dz = hzita / real(kz,rkx)
144147

@@ -243,10 +246,22 @@ subroutine advection
243246
mddom%clv,mddom%fmyu)
244247
call wafone(wx,mo_atm%u,mo_atm%v,dx,dx,dz,dt, &
245248
mddom%clv,mddom%fmyu)
249+
do n = 1 , nqx
250+
call assignpnt(mo_atm%qx,ptr,n)
251+
call wafone(ptr,mo_atm%u,mo_atm%v,dx,dx,dz,dt, &
252+
mddom%clv,mddom%fmyu)
253+
end do
246254
if ( ibltyp == 2 ) then
247255
call wafone(tkex,mo_atm%u,mo_atm%v,dx,dx,dz,dt, &
248256
mddom%clv,mddom%fmyu)
249257
end if
258+
if ( ichem == 1 ) then
259+
do n = 1 , ntr
260+
call assignpnt(mo_atm%trac,ptr,n)
261+
call wafone(ptr,mo_atm%u,mo_atm%v,dx,dx,dz,dt, &
262+
mddom%clv,mddom%fmyu)
263+
end do
264+
end if
250265

251266
call exchange_lr(ux,2,jce1,jce2,ice1,ice2,1,kz)
252267
call exchange_bt(vx,2,jce1,jce2,ice1,ice2,1,kz)

Main/mod_params.F90

+60-38
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ module mod_params
4848
use mod_sldepparam
4949
use mod_sound
5050
use mod_timer
51+
use mod_moloch
5152
use mod_timefilter
5253

5354
implicit none
@@ -622,52 +623,56 @@ subroutine param
622623
#endif
623624
end if
624625

625-
upstream_mode = .true.
626-
stability_enhance = .true.
627-
if ( idynamic == 2 ) then
628-
gnu1 = 0.1000_rkx
629-
gnu2 = 0.1000_rkx
630-
diffu_hgtf = 0
631-
else
632-
gnu1 = 0.0625_rkx
633-
gnu2 = 0.0625_rkx
634-
diffu_hgtf = 1
635-
end if
636-
ckh = 1.0_rkx
637-
adyndif = 1.0_rkx
638-
uoffc = 0.250_rkx
639-
t_extrema = 5.0_rkx
640-
q_rel_extrema = 0.20_rkx
641-
rewind(ipunit)
642-
read (ipunit, nml=dynparam, iostat=iretval, err=104)
643-
if ( iretval /= 0 ) then
644-
write(stdout,*) 'Using default dynamical parameters.'
645-
#ifdef DEBUG
646-
else
647-
write(stdout,*) 'Read dynparam OK'
648-
#endif
649-
end if
650-
651-
if ( idynamic == 2 ) then
626+
if ( idynamic < 3 ) then
627+
upstream_mode = .true.
628+
stability_enhance = .true.
629+
if ( idynamic == 2 ) then
630+
gnu1 = 0.1000_rkx
631+
gnu2 = 0.1000_rkx
632+
diffu_hgtf = 0
633+
else if ( idynamic == 1 ) then
634+
gnu1 = 0.0625_rkx
635+
gnu2 = 0.0625_rkx
636+
diffu_hgtf = 1
637+
end if
638+
ckh = 1.0_rkx
639+
adyndif = 1.0_rkx
640+
uoffc = 0.250_rkx
641+
t_extrema = 5.0_rkx
642+
q_rel_extrema = 0.20_rkx
652643
rewind(ipunit)
653-
read (ipunit, nml=nonhydroparam, iostat=iretval, err=105)
644+
read (ipunit, nml=dynparam, iostat=iretval, err=104)
654645
if ( iretval /= 0 ) then
655-
write(stdout,*) 'Using default non-hydrostatc parameters.'
646+
write(stdout,*) 'Using default dynamical parameters.'
656647
#ifdef DEBUG
657648
else
658-
write(stdout,*) 'Read nonhydroparam OK'
649+
write(stdout,*) 'Read dynparam OK'
659650
#endif
660651
end if
661-
else
662-
rewind(ipunit)
663-
read (ipunit, nml=hydroparam, iostat=iretval, err=106)
664-
if ( iretval /= 0 ) then
665-
write(stdout,*) 'Using default hydrostatc parameters.'
652+
653+
if ( idynamic == 2 ) then
654+
rewind(ipunit)
655+
read (ipunit, nml=nonhydroparam, iostat=iretval, err=105)
656+
if ( iretval /= 0 ) then
657+
write(stdout,*) 'Using default non-hydrostatc parameters.'
666658
#ifdef DEBUG
667-
else
668-
write(stdout,*) 'Read hydroparam OK'
659+
else
660+
write(stdout,*) 'Read nonhydroparam OK'
669661
#endif
662+
end if
663+
else if ( idynamic == 1 ) then
664+
rewind(ipunit)
665+
read (ipunit, nml=hydroparam, iostat=iretval, err=106)
666+
if ( iretval /= 0 ) then
667+
write(stdout,*) 'Using default hydrostatc parameters.'
668+
#ifdef DEBUG
669+
else
670+
write(stdout,*) 'Read hydroparam OK'
671+
#endif
672+
end if
670673
end if
674+
else
675+
! Moloch dynamic
671676
end if
672677

673678
! Hack. permanently disable seasonal albedo.
@@ -1108,7 +1113,9 @@ subroutine param
11081113
call bcast(ichem)
11091114
call bcast(ntr)
11101115

1111-
if ( idynamic == 2 ) then
1116+
if ( idynamic == 3 ) then
1117+
! Moloch paramters here
1118+
else if ( idynamic == 2 ) then
11121119
call bcast(base_state_pressure)
11131120
call bcast(logp_lrate)
11141121
call bcast(ifupr)
@@ -1519,6 +1526,8 @@ subroutine param
15191526

15201527
if ( idynamic == 2 ) then
15211528
call allocate_mod_sound
1529+
else if ( idynamic == 3 ) then
1530+
call allocate_moloch
15221531
end if
15231532

15241533
call allocate_mod_diffusion
@@ -2396,6 +2405,8 @@ subroutine param
23962405
if ( idynamic == 2 ) then
23972406
call make_reference_atmosphere
23982407
call compute_full_coriolis_coefficients
2408+
else if ( idynamic == 3 ) then
2409+
call compute_latfac
23992410
end if
24002411

24012412
if ( iboudy < 0 .or. iboudy > 5 ) then
@@ -2624,6 +2635,17 @@ subroutine compute_full_coriolis_coefficients
26242635
end if
26252636
end subroutine compute_full_coriolis_coefficients
26262637

2638+
subroutine compute_latfac
2639+
implicit none
2640+
integer :: i , j
2641+
do i = ice1 , ice2
2642+
do j = jce1 , jce2
2643+
mddom%clv(j,i) = cos(mddom%xlat(j,i))
2644+
mddom%clv(j,i) = 1.0_rkx/cos(mddom%xlat(j,i))
2645+
end do
2646+
end do
2647+
end subroutine compute_latfac
2648+
26272649
recursive integer function gcd_rec(u,v) result(gcd)
26282650
implicit none
26292651
integer , intent(in) :: u , v

Main/mpplib/mod_regcm_types.F90

+2
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,8 @@ module mod_regcm_types
127127
real(rkx) , pointer , dimension(:,:,:) :: pai
128128
real(rkx) , pointer , dimension(:,:,:) :: tetav
129129
real(rkx) , pointer , dimension(:,:,:) :: tke
130+
real(rkx) , pointer , dimension(:,:,:,:) :: qx
131+
real(rkx) , pointer , dimension(:,:,:,:) :: trac
130132
end type atmosphere
131133

132134
type reference_atmosphere

PreProc/ICBC/mod_write.F90

+4
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,10 @@ subroutine writef(idate)
229229
integer(ik4) :: ivar , k
230230
real(rkx) :: dx
231231

232+
if ( idynamic == 1 ) then
233+
ps4 = (ps4+ptop)*d_10
234+
end if
235+
232236
if ( idynamic == 2 ) then
233237
dx = ds * d_1000
234238
call meandiv(u4,v4,pd4,msfd,sigmah,dsigma,jx,iy,kz,dx,jx-1,iy-1)

PreProc/Terrain/mod_maps.F90

+2-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ module mod_maps
2525

2626
real(rkx) , pointer , dimension(:,:) :: coriol , dlat , dlon , &
2727
dmap , htgrid , lndout , mask , dpth , snowam , &
28-
smoist , texout , xlat , xlon , xmap , ps0
28+
smoist , texout , xlat , xlon , xmap , ps0 , askip
2929
real(rkx) , pointer , dimension(:,:,:) :: frac_tex , rmoist
3030
real(rkx) , pointer , dimension(:,:,:) :: pr0 , t0 , rho0 , z0
3131
real(rkx) , pointer , dimension(:,:,:) :: zeta , fmz
@@ -72,6 +72,7 @@ subroutine prepare_grid(jx,iy,kz,ntex,nsoil,idyn)
7272
call getmem3d(rho0,1,jx,1,iy,1,kz+1,'maps:rho0')
7373
call getmem3d(z0,1,jx,1,iy,1,kz+1,'maps:z0')
7474
else if ( idyn == 3 ) then
75+
call getmem2d(askip,1,jx,1,iy,'maps:askip')
7576
call getmem1d(zita,1,kz+1,'maps:zita')
7677
call getmem1d(ak,1,kz+1,'maps:ak')
7778
call getmem1d(bk,1,kz+1,'maps:bk')

0 commit comments

Comments
 (0)