[mpas-developers] I/O bugfixes

Michael Duda duda at ucar.edu
Tue May 11 11:14:43 MDT 2010


Hi, Developers.

I have a set of fixes for a bug when reading and writing fields
whose outermost dimension is nVertLevelsP1 (i.e., nVertLevels +
1); in the current trunk code, the last vertical level for such
fields is essentially garbage. Besides verifying that the changes
actually fix the problem, I've confirmed that there are no side
effects in the atmosphere, ocean, and sw cores. 

Attached are the changes ('diff oldfile newfile'); if there are no
objections, I'd like to commit these to the repository trunk.

Cheers,
Michael
-------------- next part --------------
1027,1030c1027
<             split_derived_dim_string(lastdim->dim->name_in_code, &cp1, &cp2);
<             fortprintf(fd, "                                send%sList, recv%sList)\n", cp1, cp1);
<             free(cp1);
<             free(cp2);
---
>             fortprintf(fd, "                                send%sList, recv%sList)\n", lastdim->dim->name_in_file+1, lastdim->dim->name_in_file+1);
1540c1537
<             fortprintf(fd, "                                output_obj %% send%sList, output_obj %% recv%sList)\n", cp1, cp1);
---
>             fortprintf(fd, "                                output_obj %% send%sList, output_obj %% recv%sList)\n", lastdim->dim->name_in_file+1, lastdim->dim->name_in_file+1);
-------------- next part --------------
105a106
>       type (exchange_list), pointer :: sendVertLevelP1List, recvVertLevelP1List
695a697,717
>       if (domain % dminfo % my_proc_id == 0) then
>          allocate(local_vertlevel_list(nVertLevels+1))
>          do i=1,nVertLevels+1
>             local_vertlevel_list(i) = i
>          end do
>       else
>          allocate(local_vertlevel_list(0))
>       end if
>       allocate(needed_vertlevel_list(nVertLevels+1))
>       do i=1,nVertLevels+1
>          needed_vertlevel_list(i) = i
>       end do
> 
>       call dmpar_get_owner_list(domain % dminfo, &
>                                 size(local_vertlevel_list), size(needed_vertlevel_list), &
>                                 local_vertlevel_list, needed_vertlevel_list, &
>                                 sendVertLevelP1List, recvVertLevelP1List)
> 
>       deallocate(local_vertlevel_list)
>       deallocate(needed_vertlevel_list)
> 
768c790
<                                       sendVertLevelList, recvVertLevelList) 
---
>                                       sendVertLevelList, recvVertLevelList, sendVertLevelP1List, recvVertLevelP1List) 
980c1002,1003
<                                      sendVertLevelsList, recvVertLevelsList) 
---
>                                      sendVertLevelsList, recvVertLevelsList, & 
>                                      sendVertLevelsP1List, recvVertLevelsP1List) 
992a1016
>       type (exchange_list), pointer :: sendVertLevelsP1List, recvVertLevelsP1List
-------------- next part --------------
25a26
>       type (exchange_list), pointer :: sendVertLevelsP1List, recvVertLevelsP1List
68a70,71
>       nullify(output_obj % sendVertLevelsP1List)
>       nullify(output_obj % recvVertLevelsP1List)
112a116
>       integer, dimension(:), pointer :: neededVertLevelP1List
212a217
>          allocate(neededVertLevelP1List(nVertLevelsGlobal+1))
224a230,232
>          do i=1,nVertLevelsGlobal+1
>             neededVertLevelP1List(i) = i
>          end do
229a238
>          allocate(neededVertLevelP1List(0))
252a262,266
>          call dmpar_get_owner_list(domain % dminfo, &
>                                    size(neededVertLevelP1List), size(neededVertLevelP1List), &
>                                    neededVertLevelP1List, neededVertLevelP1List, &
>                                    output_obj % sendVertLevelsP1List, output_obj % recvVertLevelsP1List)
> 


More information about the mpas-developers mailing list