Ignore:
Timestamp:
Jun 7, 2007, 12:01:52 PM (17 years ago)
Author:
Laurent Fairhead
Message:

Suite du merge entre la version et la HEAD: quelques modifications
de Yann sur le

LF

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ4/trunk/libf/phylmd/iophy.F90

    r766 r776  
    1212    MODULE PROCEDURE histwrite2d_phy,histwrite3d_phy
    1313  END INTERFACE
    14  
    15   REAL,private,allocatable,save,dimension(:,:) :: buffer_omp
    1614
    1715contains
    1816
    1917  subroutine init_iophy(lat,lon)
    20   use dimphy
     18  USE dimphy
     19  USE mod_phys_lmdz_para
    2120  use ioipsl
    2221  implicit none
     
    3837    allocate(io_lon(iim))
    3938    io_lon(:)=lon(:)
    40     allocate(tmp_tab2d(iim,jjphy_nb))
    41     allocate(tmp_tab3d(iim,jjphy_nb,klev))
    42     allocate(ndex2d(iim*jjphy_nb))
    43     allocate(ndex3d(iim*jjphy_nb*klev))
     39    allocate(tmp_tab2d(iim,jj_nb))
     40    allocate(tmp_tab3d(iim,jj_nb,klev))
     41    allocate(ndex2d(iim*jj_nb))
     42    allocate(ndex3d(iim*jj_nb*klev))
    4443    ndex2d(:)=0
    4544    ndex3d(:)=0
    46     allocate(buffer_omp(klon_mpi,klev))
    4745   
    4846    ddid=(/ 1,2 /)
    4947    dsg=(/ iim, jjm+1 /)
    50     dsl=(/ iim, jjphy_nb /)
    51     dpf=(/ 1,jjphy_begin /)
    52     dpl=(/ iim, jjphy_end /)
    53     dhs=(/ iiphy_begin-1,0 /)
    54     if (phy_rank==phy_size-1) then
     48    dsl=(/ iim, jj_nb /)
     49    dpf=(/ 1,jj_begin /)
     50    dpl=(/ iim, jj_end /)
     51    dhs=(/ ii_begin-1,0 /)
     52    if (mpi_rank==mpi_size-1) then
    5553      dhe=(/0,0/)
    5654    else
    57       dhe=(/ iim-iiphy_end,0 /) 
     55      dhe=(/ iim-ii_end,0 /) 
    5856    endif
    5957   
    60     call flio_dom_set(phy_size,phy_rank,ddid,dsg,dsl,dpf,dpl,dhs,dhe, &
     58    call flio_dom_set(mpi_size,mpi_rank,ddid,dsg,dsl,dpf,dpl,dhs,dhe, &
    6159                      'APPLE',phys_domain_id)
    6260
    6361!$OMP END MASTER
    64 !$OMP FLUSH(buffer_omp)
    6562     
    6663  end subroutine init_iophy
    6764 
    6865  subroutine histbeg_phy(name,itau0,zjulian,dtime,nhori,nid_day)
    69   use dimphy
     66  USE dimphy
     67  USE mod_phys_lmdz_para
    7068  use ioipsl
    7169  use write_field
     
    8179
    8280!$OMP MASTER   
    83     if (monocpu) then
    84       call histbeg(name,iim,io_lon, jjphy_nb,io_lat(jjphy_begin:jjphy_end), &
    85                    1,iim,1,jjphy_nb,itau0, zjulian, dtime, nhori, nid_day)
     81    if (is_sequential) then
     82      call histbeg(name,iim,io_lon, jj_nb,io_lat(jj_begin:jj_end), &
     83                   1,iim,1,jj_nb,itau0, zjulian, dtime, nhori, nid_day)
    8684    else
    87       call histbeg(name,iim,io_lon, jjphy_nb,io_lat(jjphy_begin:jjphy_end), &
    88                    1,iim,1,jjphy_nb,itau0, zjulian, dtime, nhori, nid_day,phys_domain_id)
     85      call histbeg(name,iim,io_lon, jj_nb,io_lat(jj_begin:jj_end), &
     86                   1,iim,1,jj_nb,itau0, zjulian, dtime, nhori, nid_day,phys_domain_id)
    8987    endif
    9088!$OMP END MASTER
     
    9391 
    9492  subroutine histwrite2d_phy(nid,name,itau,field)
    95   use dimphy
    96   use ioipsl
     93  USE dimphy
     94  USE mod_phys_lmdz_para
     95  USE ioipsl
    9796  implicit none
    9897  include 'dimensions90.h'
     
    102101    integer, intent(in) :: itau
    103102    real,dimension(klon),intent(in) :: field
    104 
    105     CALL GatherField_omp(field,buffer_omp,1)   
     103   
     104    REAL,dimension(klon_mpi) :: buffer_omp
     105   
     106    CALL Gather_omp(field,buffer_omp)   
    106107!$OMP MASTER
    107     CALL phy2dyn(buffer_omp,tmp_tab2d,1)
    108     CALL histwrite(nid,name,itau,tmp_tab2d,iim*jjphy_nb,ndex2d)
     108    CALL grid1Dto2D_mpi(buffer_omp,tmp_tab2d)
     109    CALL histwrite(nid,name,itau,tmp_tab2d,iim*jj_nb,ndex2d)
    109110!$OMP END MASTER   
    110111  end subroutine histwrite2d_phy
    111112 
    112113  subroutine histwrite3d_phy(nid,name,itau,field)
    113   use dimphy
     114  USE dimphy
     115  USE mod_phys_lmdz_para
     116
    114117  use ioipsl
    115118  implicit none
     
    120123    integer, intent(in) :: itau
    121124    real,dimension(klon,klev),intent(in) :: field
     125
     126    REAL,dimension(klon_mpi,klev) :: buffer_omp
    122127   
    123     CALL GatherField_omp(field,buffer_omp,klev)
     128    CALL Gather_omp(field,buffer_omp)
    124129!$OMP MASTER
    125     CALL phy2dyn(buffer_omp,tmp_tab3d,klev)
    126     CALL histwrite(nid,name,itau,tmp_tab3d,iim*jjphy_nb*klev,ndex3d)
     130    CALL grid1Dto2D_mpi(buffer_omp,tmp_tab3d)
     131    CALL histwrite(nid,name,itau,tmp_tab3d,iim*jj_nb*klev,ndex3d)
    127132!$OMP END MASTER   
    128133  end subroutine histwrite3d_phy
    129134 
    130135 
    131   subroutine phy2dyn(field_phy,field_dyn,nlev)
    132   use dimphy
    133   implicit none
    134   include 'dimensions90.h'
    135  
    136     real,dimension(klon_mpi,nlev),intent(in) :: field_phy
    137     real,dimension(iim,jjphy_nb,nlev),intent(out) :: field_dyn
    138     integer,intent(in) :: nlev
    139    
    140     integer :: next
    141     integer :: j,l
    142    
    143       do l=1,nlev
    144                
    145         if (jjphy_begin==jjphy_end) then
    146           field_dyn(:,1,l)=0.
    147           field_dyn(iiphy_begin:iiphy_end,1,l)=field_phy(1:klon_mpi,l)
    148         else
    149        
    150          if (jjphy_begin==1) then
    151             field_dyn(:,1,l)=field_phy(1,l)
    152             next=2
    153          else
    154            field_dyn(:,1,l)=0.
    155            next=iim-iiphy_begin+2
    156            field_dyn(iiphy_begin:iim,1,l)=field_phy(1:next-1,l)   
    157          endif
    158        
    159           do j=2,jjphy_nb-1
    160             field_dyn(:,j,l)=field_phy(next:next+iim-1,l)
    161             next=next+iim
    162           enddo
    163          
    164           if (jjphy_end==jjm+1) then
    165              field_dyn(:,jjphy_nb,l)=field_phy(klon_mpi,l)
    166           else
    167            field_dyn(:,jjphy_nb,l)=0.
    168            field_dyn(1:iiphy_end,jjphy_nb,l)=field_phy(next:next+iiphy_end-1,l)   
    169           endif
    170          
    171         endif
    172      
    173      enddo
    174          
    175     end subroutine phy2dyn         
     136!  subroutine phy2dyn(field_phy,field_dyn,nlev)
     137!  USE dimphy_old
     138!  implicit none
     139!  include 'dimensions90.h'
     140! 
     141!    real,dimension(klon_mpi,nlev),intent(in) :: field_phy
     142!    real,dimension(iim,jjphy_nb,nlev),intent(out) :: field_dyn
     143!    integer,intent(in) :: nlev
     144!   
     145!    integer :: next
     146!    integer :: j,l
     147!   
     148!      do l=1,nlev
     149!               
     150!       if (jjphy_begin==jjphy_end) then
     151!         field_dyn(:,1,l)=0.
     152!         field_dyn(iiphy_begin:iiphy_end,1,l)=field_phy(1:klon_mpi,l)
     153!       else
     154!       
     155!        if (jjphy_begin==1) then
     156!           field_dyn(:,1,l)=field_phy(1,l)
     157!           next=2
     158!        else
     159!          field_dyn(:,1,l)=0.
     160!          next=iim-iiphy_begin+2
     161!          field_dyn(iiphy_begin:iim,1,l)=field_phy(1:next-1,l)   
     162!        endif
     163!       
     164!         do j=2,jjphy_nb-1
     165!           field_dyn(:,j,l)=field_phy(next:next+iim-1,l)
     166!           next=next+iim
     167!         enddo
     168!         
     169!         if (jjphy_end==jjm+1) then
     170!             field_dyn(:,jjphy_nb,l)=field_phy(klon_mpi,l)
     171!         else
     172!          field_dyn(:,jjphy_nb,l)=0.
     173!          field_dyn(1:iiphy_end,jjphy_nb,l)=field_phy(next:next+iiphy_end-1,l)   
     174!         endif
     175!         
     176!       endif
     177!     
     178!     enddo
     179!       
     180!    end subroutine phy2dyn         
    176181 
    177182         
Note: See TracChangeset for help on using the changeset viewer.