Custom Query (986 matches)
Results (520 - 522 of 986)
Ticket | Owner | Reporter | Resolution | Summary |
---|---|---|---|---|
#630 | Fixed | IMPORTANT: Corrected shared-memory bug | ||
Description |
A shared-memory bug was corrected for variables ntstart(ng), ntfirst(ng), and ntend(ng). Because of nesting, these variables were declared as THREADPRIVATE. However, this introduced a parallel bug when calling get_state to read initial conditions or restart fields. The routine get_state is only executed by the master thread. As a consequence, the above variables are only initialized in the master thread and their values are unknown to other shared-memory threads. Similar problem occurs for the time(ng) variable. The solution is to remove the THREADPRIVATE clause for such variables and initialize them by master thread as follows: !$OMP MASTER ntstart(ng)=INT((time(ng)-dstart*day2sec)/dt(ng))+1 ntend(ng)=ntimes(ng) ntfirst(ng)=ntstart(ng) !$OMP END MASTER !$OMP BARRIER and introduce a new scalar variable io_time to update the value of time(ng) for the other shared-memory threads after initialization or restart: #ifdef INI_FILE ! ! Read in initial conditions from initial NetCDF file. ! DO ng=1,Ngrids !$OMP MASTER CALL get_state (ng, iNLM, 1, INI(ng)%name, & & IniRec(ng), Tindex(ng)) !$OMP END MASTER # ifdef DISTRIBUTE CALL mp_bcasti (ng, iNLM, exit_flag) # endif !$OMP BARRIER IF (exit_flag.ne.NoError) RETURN time(ng)=io_time ! needed for shared-memory END DO #else ! ! If restart, read in initial conditions restart NetCDF file. ! DO ng=1,Ngrids IF (nrrec(ng).ne.0) THEN !$OMP MASTER CALL get_state (ng, 0, 1, INI(ng)%name, & & IniRec(ng), Tindex(ng)) !$OMP END MASTER # ifdef DISTRIBUTE CALL mp_bcasti (ng, iNLM, exit_flag) # endif !$OMP BARRIER IF (exit_flag.ne.NoError) RETURN time(ng)=io_time ! needed for shared-memory END IF END DO #endif Many thanks to Mark Hadfield for bringing this to my attention. This was also reported by Mitsuhiro Kawase. |
|||
#631 | Fixed | Corrected a bug in ana_nudgcoef.h | ||
Description |
There is a bug in ana_nudgcoef.h in the MPI exchange of variables M3nudgcof and Tnudgcof. We need to have instead: # ifdef SOLVE3D ! IF (LnudgeM3CLM(ng)) THEN CALL mp_exchange3d (ng, tile, model, 1, & & LBi, UBi, LBj, UBj, 1, N(ng), & & NghostPoints, .FALSE., .FALSE., & & CLIMA(ng)%M3nudgcof) END IF ! IF (ANY(LnudgeTCLM(:,ng))) THEN CALL mp_exchange4d (ng, tile, model, 1, & & LBi, UBi, LBj, UBj, 1, N(ng), 1, NTCLM(ng), & & NghostPoints, .FALSE., .FALSE., & & CLIMA(ng)%Tnudgcof) END IF # endif Many thanks to Julia Levin for bringing this to my attention. |
|||
#632 | Fixed | Corrected bug in ini_hmixcoef.F and improved check_multifile.F | ||
Description |
|