source: LMDZ4/trunk/libf/phylmd/iophy.F90 @ 1074

Last change on this file since 1074 was 1001, checked in by Laurent Fairhead, 16 years ago
  • Modifs sur le parallelisme: masquage dans la physique
  • Inclusion strato
  • mise en coherence etat0
  • le mode offline fonctionne maintenant en parallele,
  • les fichiers de la dynamiques sont correctement sortis et peuvent etre reconstruit avec rebuild
  • la version parallele de la dynamique peut s'executer sans MPI (sur 1 proc)
  • L'OPENMP fonctionne maintenant sans la parallelisation MPI.

YM
LF

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.3 KB
RevLine 
[879]1!
2! $Header$
3!
[629]4module iophy
5 
6  REAL,private,allocatable,dimension(:,:),save :: tmp_tab2d
7  REAL,private,allocatable,dimension(:,:,:),save :: tmp_tab3d
8  INTEGER,private,allocatable,dimension(:),save :: ndex2d
9  INTEGER,private,allocatable,dimension(:),save :: ndex3d
[931]10! abd  REAL,private,allocatable,dimension(:),save :: io_lat
11! abd  REAL,private,allocatable,dimension(:),save :: io_lon
12  REAL,allocatable,dimension(:),save :: io_lat
13  REAL,allocatable,dimension(:),save :: io_lon
[766]14  INTEGER, save :: phys_domain_id
[629]15 
16  INTERFACE histwrite_phy
17    MODULE PROCEDURE histwrite2d_phy,histwrite3d_phy
[1001]18  END INTERFACE
[629]19
[1001]20
[629]21contains
22
[1001]23  subroutine init_iophy_new(rlat,rlon)
24  USE dimphy
25  USE mod_phys_lmdz_para
26  USE mod_grid_phy_lmdz
27  USE ioipsl
28  implicit none
29  include 'dimensions.h'   
30    real,dimension(klon),intent(in) :: rlon
31    real,dimension(klon),intent(in) :: rlat
32
33    REAL,dimension(klon_glo)        :: rlat_glo
34    REAL,dimension(klon_glo)        :: rlon_glo
35   
36    INTEGER,DIMENSION(2) :: ddid
37    INTEGER,DIMENSION(2) :: dsg
38    INTEGER,DIMENSION(2) :: dsl
39    INTEGER,DIMENSION(2) :: dpf
40    INTEGER,DIMENSION(2) :: dpl
41    INTEGER,DIMENSION(2) :: dhs
42    INTEGER,DIMENSION(2) :: dhe
43    INTEGER :: i   
44
45    CALL gather(rlat,rlat_glo)
46    CALL bcast(rlat_glo)
47    CALL gather(rlon,rlon_glo)
48    CALL bcast(rlon_glo)
49   
50!$OMP MASTER 
51    ALLOCATE(io_lat(jjm+1-1/iim))
52    io_lat(1)=rlat_glo(1)
53    io_lat(jjm+1-1/iim)=rlat_glo(klon_glo)
54    IF (iim > 1) then
55      DO i=2,jjm
56        io_lat(i)=rlat_glo(2+(i-2)*iim)
57      ENDDO
58    ENDIF
59
60    ALLOCATE(io_lon(iim))
61    io_lon(:)=rlon_glo(2-1/iim:iim+1-1/iim)
62
63
64    allocate(tmp_tab2d(iim,jj_nb))
65    allocate(tmp_tab3d(iim,jj_nb,klev))
66    allocate(ndex2d(iim*jj_nb))
67    allocate(ndex3d(iim*jj_nb*klev))
68    ndex2d(:)=0
69    ndex3d(:)=0
70   
71    ddid=(/ 1,2 /)
72    dsg=(/ iim, jjm+1-1/iim /)
73    dsl=(/ iim, jj_nb /)
74    dpf=(/ 1,jj_begin /)
75    dpl=(/ iim, jj_end /)
76    dhs=(/ ii_begin-1,0 /)
77    if (mpi_rank==mpi_size-1) then
78      dhe=(/0,0/)
79    else
80      dhe=(/ iim-ii_end,0 /) 
81    endif
82   
83    call flio_dom_set(mpi_size,mpi_rank,ddid,dsg,dsl,dpf,dpl,dhs,dhe, &
84                      'APPLE',phys_domain_id)
85
86!$OMP END MASTER
87     
88  end subroutine init_iophy_new
89
[629]90  subroutine init_iophy(lat,lon)
[776]91  USE dimphy
92  USE mod_phys_lmdz_para
[766]93  use ioipsl
[629]94  implicit none
[793]95  include 'dimensions.h'   
[629]96    real,dimension(iim),intent(in) :: lon
[879]97    real,dimension(jjm+1-1/iim),intent(in) :: lat
[766]98
99    INTEGER,DIMENSION(2) :: ddid
100    INTEGER,DIMENSION(2) :: dsg
101    INTEGER,DIMENSION(2) :: dsl
102    INTEGER,DIMENSION(2) :: dpf
103    INTEGER,DIMENSION(2) :: dpl
104    INTEGER,DIMENSION(2) :: dhs
105    INTEGER,DIMENSION(2) :: dhe
106
107!$OMP MASTER 
[879]108    allocate(io_lat(jjm+1-1/iim))
[629]109    io_lat(:)=lat(:)
110    allocate(io_lon(iim))
111    io_lon(:)=lon(:)
[776]112    allocate(tmp_tab2d(iim,jj_nb))
113    allocate(tmp_tab3d(iim,jj_nb,klev))
114    allocate(ndex2d(iim*jj_nb))
115    allocate(ndex3d(iim*jj_nb*klev))
[629]116    ndex2d(:)=0
117    ndex3d(:)=0
[766]118   
119    ddid=(/ 1,2 /)
[879]120    dsg=(/ iim, jjm+1-1/iim /)
[776]121    dsl=(/ iim, jj_nb /)
122    dpf=(/ 1,jj_begin /)
123    dpl=(/ iim, jj_end /)
124    dhs=(/ ii_begin-1,0 /)
125    if (mpi_rank==mpi_size-1) then
[766]126      dhe=(/0,0/)
127    else
[776]128      dhe=(/ iim-ii_end,0 /) 
[766]129    endif
130   
[776]131    call flio_dom_set(mpi_size,mpi_rank,ddid,dsg,dsl,dpf,dpl,dhs,dhe, &
[766]132                      'APPLE',phys_domain_id)
[629]133
[766]134!$OMP END MASTER
135     
[629]136  end subroutine init_iophy
137 
138  subroutine histbeg_phy(name,itau0,zjulian,dtime,nhori,nid_day)
[776]139  USE dimphy
140  USE mod_phys_lmdz_para
[629]141  use ioipsl
142  use write_field
143  implicit none
[793]144  include 'dimensions.h'
[629]145   
146    character*(*), intent(IN) :: name
147    integer, intent(in) :: itau0
148    real,intent(in) :: zjulian
149    real,intent(in) :: dtime
150    integer,intent(out) :: nhori
151    integer,intent(out) :: nid_day
[766]152
153!$OMP MASTER   
[776]154    if (is_sequential) then
155      call histbeg(name,iim,io_lon, jj_nb,io_lat(jj_begin:jj_end), &
156                   1,iim,1,jj_nb,itau0, zjulian, dtime, nhori, nid_day)
[629]157    else
[776]158      call histbeg(name,iim,io_lon, jj_nb,io_lat(jj_begin:jj_end), &
159                   1,iim,1,jj_nb,itau0, zjulian, dtime, nhori, nid_day,phys_domain_id)
[629]160    endif
[766]161!$OMP END MASTER
[629]162 
163  end subroutine histbeg_phy
164 
165  subroutine histwrite2d_phy(nid,name,itau,field)
[776]166  USE dimphy
167  USE mod_phys_lmdz_para
168  USE ioipsl
[629]169  implicit none
[793]170  include 'dimensions.h'
[629]171   
172    integer,intent(in) :: nid
173    character*(*), intent(IN) :: name
174    integer, intent(in) :: itau
175    real,dimension(klon),intent(in) :: field
[776]176   
177    REAL,dimension(klon_mpi) :: buffer_omp
178   
179    CALL Gather_omp(field,buffer_omp)   
[766]180!$OMP MASTER
[776]181    CALL grid1Dto2D_mpi(buffer_omp,tmp_tab2d)
182    CALL histwrite(nid,name,itau,tmp_tab2d,iim*jj_nb,ndex2d)
[766]183!$OMP END MASTER   
[629]184  end subroutine histwrite2d_phy
185 
186  subroutine histwrite3d_phy(nid,name,itau,field)
[776]187  USE dimphy
188  USE mod_phys_lmdz_para
189
[629]190  use ioipsl
191  implicit none
[793]192  include 'dimensions.h'
[629]193   
194    integer,intent(in) :: nid
195    character*(*), intent(IN) :: name
196    integer, intent(in) :: itau
197    real,dimension(klon,klev),intent(in) :: field
[776]198
199    REAL,dimension(klon_mpi,klev) :: buffer_omp
[629]200   
[776]201    CALL Gather_omp(field,buffer_omp)
[766]202!$OMP MASTER
[776]203    CALL grid1Dto2D_mpi(buffer_omp,tmp_tab3d)
204    CALL histwrite(nid,name,itau,tmp_tab3d,iim*jj_nb*klev,ndex3d)
[766]205!$OMP END MASTER   
[629]206  end subroutine histwrite3d_phy
207 
208 
[1001]209
[629]210end module iophy
Note: See TracBrowser for help on using the repository browser.