Description |
- For the convenience of allocating and deallocating, the arrays in the structure FOURDVAR(ng) are now declared as allocatable instead of a pointer in mod_fourdvar.F. So now we have:
!
! Define module structure.
!
TYPE T_FOURDVAR
integer , allocatable :: NobsSurvey(:)
integer , allocatable :: ObsCount(:)
integer , allocatable :: ObsReject(:)
...
END TYPE T_FOURDVAR
TYPE (T_FOURDVAR), allocatable :: FOURDVAR(:)
The change is made to facilitate new 4D-Var algorithms currently under development.
- Also, corrected a minor bug in read_asspar.F when processing keywords Iprovenance and P_bgqc:
# ifdef BGQC
...
CASE ('Iprovenance')
Mval=MAXVAL(Nprovenance)
Npts=load_i(Nval, Rval, Mval, Ngrids, Iprovenance)
CASE ('P_bgqc')
Mval=MAXVAL(Nprovenance)
Npts=load_r(Nval, Rval, Mval, Ngrids, P_bgqc)
# endif
because it has the wrong number of arguments to load_i and load_r since both Iprovenance and P_bgqc are 2D arrays.
|
Description |
When ROMS/SWAN coupling is enabled, compilation of ROMS/Utility/read_couplepar.F fails on several blocks of code like this one
CASE ('Nthreads(ocean)')
IF ((0.lt.Iocean).and.(Iocean.le.Nmodels)) THEN
Npts=load_i(Nval, Rval, 1, Nthreads(Iocean))
END IF
The fix is to rewrite them like this
CASE ('Nthreads(ocean)')
IF ((0.lt.Iocean).and.(Iocean.le.Nmodels)) THEN
Npts=load_i(Nval, Rval, 1, Ivalue)
Nthreads(Iocean)=Ivalue(1)
END IF
A corrected version is attached.
|
Description |
Several minor bugs were corrected:
- nesting.F: improved the random issues associated with the linear interpolation weights in put_refine2d and put_refine3d:
!
! Set linear time interpolation weights. Fractional seconds are
! rounded to the nearest milliseconds integer towards zero in the
! time interpolation weights.
!
SecScale=1000.0_dp ! seconds to milliseconds
!
Wold=ANINT((RollingTime(tnew,cr)-time(ng))*SecScale,dp)
Wnew=ANINT((time(ng)-RollingTime(told,cr))*SecScale,dp)
fac=1.0_dp/(Wold+Wnew)
Wold=fac*Wold
Wnew=fac*Wnew
Notice that the scaling from seconds to milliseconds does not affect the values of the weighting coefficients Wold and Wnew. They still range between 0 and 1 since we multiple and divide by SecScale. Many thanks to Takumu Iwamoto for bringing this to my attention.
- metrics.F: Similar random issues are found when checking the grid refinement timestep when using the mod(dt(dg), dt(rg)):
!
! Check refined grid time-step. The time-step size for refined grids
! needs to be an exact mode multiple of its coarser donor grid. In
! principle, it can be a "RefineScale" factor smaller. However, other
! integer smaller or larger factor is allowed such that:
!
! MOD(dt(dg)*SecScale, dt(rg)*SecScale) = 0 dg: donor coarse grid
! rg: receiver fine grid
!
! Notice that SecScale is used to avoid roundoff when the timestep
! between donor and receiver grids are small and less than one.
!
SecScale=1000.0_dp ! seconds to milliseconds
DO ig=1,Ngrids
IF (RefinedGrid(ig).and.(RefineScale(ig).gt.0)) THEN
dg=CoarserDonor(ig)
IF (MOD(dt(dg)*SecScale,dt(ig)*SecScale).ne.0.0_dp) THEN
IF (DOMAIN(ng)%SouthWest_Test(tile)) THEN
IF (Master) THEN
WRITE (stdout,100) ig, dt(ig), dg, dt(dg), &
& MOD(dt(dg),dt(ig))
The conditional MOD(dt(dg)*SecScale, dt(rg)*SecScale) must be zero to not trigger an error. Again, many thanks to Takumu Iwamoto for reporting this problem.
- dateclock.F: Corrected typo in routine datenum when computing its values in seconds:
!
! Fractional date number (units=second).
!
DateNumber(2)=REAL(MyDay,dp)*86400.0_dp+ &
& REAL(MyHour,dp)*3600.0_dp+ &
& REAL(MyMinutes,dp)*60.0_dp+ &
& MySeconds
We needed a factor of 3600 instead of 360. Many thanks to Rafael Soutelino for reporting this bug.
- rpcg_lanczos.F: Corrected a parallel bug before calling cg_write_rpcg, which writes several parameters (Jf, Jdata, Jmod, Jopt, Jb, Jobs, Jact, preducv, preducy) that are only known by the master node. We need to broadcast their values to other nodes:
CALL mp_bcastf (ng, model, Jf)
CALL mp_bcastf (ng, model, Jdata)
CALL mp_bcastf (ng, model, Jmod)
CALL mp_bcastf (ng, model, Jopt)
CALL mp_bcastf (ng, model, Jobs)
CALL mp_bcastf (ng, model, Jact)
CALL mp_bcastf (ng, model, preducv)
CALL mp_bcastf (ng, model, preducy)
since all the nodes participate in the writing. Many thanks to Andy Moore for bringing this to my attention.
- mod_scalars.F: Added value for Jerlov water type 7:
real(r8), dimension(9) :: lmd_mu1 = &
& (/ 0.35_r8, 0.6_r8, 1.0_r8, 1.5_r8, 1.4_r8,
& 0.42_r8, 0.37_r8, 0.33_r8, 0.00468592_r8 /)
instead of a zero value. Many thnaks to Pierre St-Laurent for bringing this to my attention.
- fennel.h: Added masing for wetting and drying. Many thanks to John Wilkin for reporting this issue.
- mod_kinds.F: Included cppdef.h to have access to defined C-preprocessing options. Many thanks to Aaron Tsang for reporting this problem.
Also, I updated set_ngfld.F, set_2dfld.F, set_3dfld.F, set_ngfldr.F, set_2dfldr.F, set_3dfldr.F for the correct double precision operations when SINGLE_PRECISION is activated. Recall that double precision is need for few variables fo guarantee accuracy.
|