Changeset 776 for LMDZ4/trunk/libf/phylmd/iophy.F90
- Timestamp:
- Jun 7, 2007, 12:01:52 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ4/trunk/libf/phylmd/iophy.F90
r766 r776 12 12 MODULE PROCEDURE histwrite2d_phy,histwrite3d_phy 13 13 END INTERFACE 14 15 REAL,private,allocatable,save,dimension(:,:) :: buffer_omp16 14 17 15 contains 18 16 19 17 subroutine init_iophy(lat,lon) 20 use dimphy 18 USE dimphy 19 USE mod_phys_lmdz_para 21 20 use ioipsl 22 21 implicit none … … 38 37 allocate(io_lon(iim)) 39 38 io_lon(:)=lon(:) 40 allocate(tmp_tab2d(iim,jj phy_nb))41 allocate(tmp_tab3d(iim,jj phy_nb,klev))42 allocate(ndex2d(iim*jj phy_nb))43 allocate(ndex3d(iim*jj phy_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)) 44 43 ndex2d(:)=0 45 44 ndex3d(:)=0 46 allocate(buffer_omp(klon_mpi,klev))47 45 48 46 ddid=(/ 1,2 /) 49 47 dsg=(/ iim, jjm+1 /) 50 dsl=(/ iim, jj phy_nb /)51 dpf=(/ 1,jj phy_begin /)52 dpl=(/ iim, jj phy_end /)53 dhs=(/ ii phy_begin-1,0 /)54 if ( phy_rank==phy_size-1) then48 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 55 53 dhe=(/0,0/) 56 54 else 57 dhe=(/ iim-ii phy_end,0 /)55 dhe=(/ iim-ii_end,0 /) 58 56 endif 59 57 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, & 61 59 'APPLE',phys_domain_id) 62 60 63 61 !$OMP END MASTER 64 !$OMP FLUSH(buffer_omp)65 62 66 63 end subroutine init_iophy 67 64 68 65 subroutine histbeg_phy(name,itau0,zjulian,dtime,nhori,nid_day) 69 use dimphy 66 USE dimphy 67 USE mod_phys_lmdz_para 70 68 use ioipsl 71 69 use write_field … … 81 79 82 80 !$OMP MASTER 83 if ( monocpu) then84 call histbeg(name,iim,io_lon, jj phy_nb,io_lat(jjphy_begin:jjphy_end), &85 1,iim,1,jj phy_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) 86 84 else 87 call histbeg(name,iim,io_lon, jj phy_nb,io_lat(jjphy_begin:jjphy_end), &88 1,iim,1,jj phy_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) 89 87 endif 90 88 !$OMP END MASTER … … 93 91 94 92 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 97 96 implicit none 98 97 include 'dimensions90.h' … … 102 101 integer, intent(in) :: itau 103 102 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) 106 107 !$OMP MASTER 107 CALL phy2dyn(buffer_omp,tmp_tab2d,1)108 CALL histwrite(nid,name,itau,tmp_tab2d,iim*jj phy_nb,ndex2d)108 CALL grid1Dto2D_mpi(buffer_omp,tmp_tab2d) 109 CALL histwrite(nid,name,itau,tmp_tab2d,iim*jj_nb,ndex2d) 109 110 !$OMP END MASTER 110 111 end subroutine histwrite2d_phy 111 112 112 113 subroutine histwrite3d_phy(nid,name,itau,field) 113 use dimphy 114 USE dimphy 115 USE mod_phys_lmdz_para 116 114 117 use ioipsl 115 118 implicit none … … 120 123 integer, intent(in) :: itau 121 124 real,dimension(klon,klev),intent(in) :: field 125 126 REAL,dimension(klon_mpi,klev) :: buffer_omp 122 127 123 CALL Gather Field_omp(field,buffer_omp,klev)128 CALL Gather_omp(field,buffer_omp) 124 129 !$OMP MASTER 125 CALL phy2dyn(buffer_omp,tmp_tab3d,klev)126 CALL histwrite(nid,name,itau,tmp_tab3d,iim*jj phy_nb*klev,ndex3d)130 CALL grid1Dto2D_mpi(buffer_omp,tmp_tab3d) 131 CALL histwrite(nid,name,itau,tmp_tab3d,iim*jj_nb*klev,ndex3d) 127 132 !$OMP END MASTER 128 133 end subroutine histwrite3d_phy 129 134 130 135 131 subroutine phy2dyn(field_phy,field_dyn,nlev)132 use dimphy 133 implicit none134 include 'dimensions90.h'135 136 real,dimension(klon_mpi,nlev),intent(in) :: field_phy137 real,dimension(iim,jjphy_nb,nlev),intent(out) :: field_dyn138 integer,intent(in) :: nlev139 140 integer :: next141 integer :: j,l142 143 do l=1,nlev144 145 if (jjphy_begin==jjphy_end) then146 field_dyn(:,1,l)=0.147 field_dyn(iiphy_begin:iiphy_end,1,l)=field_phy(1:klon_mpi,l)148 else149 150 if (jjphy_begin==1) then151 field_dyn(:,1,l)=field_phy(1,l)152 next=2153 else154 field_dyn(:,1,l)=0.155 next=iim-iiphy_begin+2156 field_dyn(iiphy_begin:iim,1,l)=field_phy(1:next-1,l)157 endif158 159 do j=2,jjphy_nb-1160 field_dyn(:,j,l)=field_phy(next:next+iim-1,l)161 next=next+iim162 enddo163 164 if (jjphy_end==jjm+1) then165 field_dyn(:,jjphy_nb,l)=field_phy(klon_mpi,l)166 else167 field_dyn(:,jjphy_nb,l)=0.168 field_dyn(1:iiphy_end,jjphy_nb,l)=field_phy(next:next+iiphy_end-1,l)169 endif170 171 endif172 173 enddo174 175 end subroutine phy2dyn136 ! 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 176 181 177 182
Note: See TracChangeset
for help on using the changeset viewer.