Custom Query (986 matches)

Filters
 
Or
 
  
 
Columns

Show under each result:


Results (520 - 522 of 986)

Ticket Owner Reporter Resolution Summary
#630 arango arango 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 arango arango 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 arango arango Fixed Corrected bug in ini_hmixcoef.F and improved check_multifile.F
Description
  • Corrected a bug in ini_hmixcoef.F when computing visc2_p. I guess that I got distracted when I was coding this one. It usually happens when my phone rings and some enters my office. We need to have instead:
          cff=0.25_r8*cff
          DO j=JstrP,JendT
            DO i=IstrP,IendT
              visc2_p(i,j)=cff*(grdscl(i-1,j-1)+grdscl(i,j-1)+              &
         &                      grdscl(i-1,j  )+grdscl(i,j  ))
            END DO
          END DO
    
    Many thanks to Pan Feng for bringing this to my attention.
  • Improved the checking of the units attribute in function check_file, which is called by check_multifile.F. I use instead:
          Nrec=var_Dsize(1)              ! time is a 1D array
          DO i=1,nvatt
            IF (TRIM(var_Aname(i)).eq.'units') THEN
              Tunits=TRIM(var_Achar(i))
              IF (INDEX(TRIM(var_Achar(i)),'day').ne.0) THEN
                Tscale=86400.0_r8
              ELSE IF (INDEX(TRIM(var_Achar(i)),'hour').ne.0) THEN
                Tscale=3600.0_r8
              ELSE IF (INDEX(TRIM(var_Achar(i)),'second').ne.0) THEN
                Tscale=1.0_r8
              END IF
            ELSE IF (TRIM(var_Aname(i)).eq.'calendar') THEN
              IF ((Nrec.eq.1).or.                                           &
         &        (INDEX(TRIM(var_Achar(i)),'none').ne.0)) THEN
                Lperpetual=.TRUE.
              END IF
            ELSE IF (TRIM(var_Aname(i)).eq.'cycle_length') THEN
              Lcycle=.TRUE.
            END IF
          END DO
    
    The intrinsic INDEX function is more appropriate here to search the time units in a string with additional words at the beginning or end of the string. Many thanks to John Luick for reporting this problem and giving more information.
Batch Modify
Note: See TracBatchModify for help on using batch modify.
Note: See TracQuery for help on using queries.