Changeset 711 for codes/icosagcm/trunk/src/parallel
- Timestamp:
- 07/25/18 13:57:35 (6 years ago)
- Location:
- codes/icosagcm/trunk/src/parallel
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
codes/icosagcm/trunk/src/parallel/domain.f90
r548 r711 25 25 INTEGER,POINTER :: edge_assign_pos(:,:,:) 26 26 INTEGER,POINTER :: edge_assign_sign(:,:,:) 27 INTEGER,POINTER :: vertex_assign_domain(:,:,:) 28 INTEGER,POINTER :: vertex_assign_i(:,:,:) 29 INTEGER,POINTER :: vertex_assign_j(:,:,:) 30 INTEGER,POINTER :: vertex_assign_pos(:,:,:) 27 31 REAL,POINTER :: xyz(:,:,:) 28 32 REAL,POINTER :: neighbour(:,:,:,:) … … 151 155 ALLOCATE(d%edge_assign_pos(0:5,d%iim,d%jjm)) 152 156 ALLOCATE(d%edge_assign_sign(0:5,d%iim,d%jjm)) 157 ALLOCATE(d%vertex_assign_domain(0:5,d%iim,d%jjm)) 158 ALLOCATE(d%vertex_assign_i(0:5,d%iim,d%jjm)) 159 ALLOCATE(d%vertex_assign_j(0:5,d%iim,d%jjm)) 160 ALLOCATE(d%vertex_assign_pos(0:5,d%iim,d%jjm)) 153 161 ALLOCATE(d%delta(d%iim,d%jjm)) 154 162 ALLOCATE(d%xyz(3,d%iim,d%jjm)) … … 193 201 d2%edge_assign_pos => d1%edge_assign_pos 194 202 d2%edge_assign_sign => d1%edge_assign_sign 203 d2%vertex_assign_domain => d1%vertex_assign_domain 204 d2%vertex_assign_i => d1%vertex_assign_i 205 d2%vertex_assign_j => d1%vertex_assign_j 206 d2%vertex_assign_pos => d1%vertex_assign_pos 195 207 d2%xyz => d1%xyz 196 208 d2%neighbour => d1%neighbour … … 231 243 USE metric 232 244 IMPLICIT NONE 233 INTEGER :: ind_d,ind,ind2,e 245 INTEGER :: ind_d,ind,ind2,e,v 234 246 INTEGER :: nf,nf2 235 247 INTEGER :: i,j,k,ii,jj … … 258 270 IF ( j-1 >= d%jj_begin ) CALL assign_edge(ind_d,ind,i,j,delta,4) 259 271 IF ( i+1 <= d%ii_end .AND. j-1 >=d%jj_begin ) CALL assign_edge(ind_d,ind,i,j,delta,5) 272 273 IF ( i+1 <= d%ii_end .AND. j+1 <= d%jj_end) CALL assign_vertex(ind_d,ind,i,j,delta,0) 274 IF ( i-1 >= d%ii_begin .AND. j+1 <= d%jj_end) CALL assign_vertex(ind_d,ind,i,j,delta,1) 275 IF ( i-1 >= d%ii_begin .AND. j+1 <= d%jj_end) CALL assign_vertex(ind_d,ind,i,j,delta,2) 276 IF ( i-1 >= d%ii_begin .AND. j-1 >= d%jj_begin) CALL assign_vertex(ind_d,ind,i,j,delta,3) 277 IF ( i+1 <= d%ii_end .AND. j-1 >= d%jj_begin) CALL assign_vertex(ind_d,ind,i,j,delta,4) 278 IF ( i+1 <= d%ii_end .AND. j-1 >= d%jj_begin) CALL assign_vertex(ind_d,ind,i,j,delta,5) 260 279 ENDDO 261 280 ENDDO … … 294 313 d%edge_assign_sign(k,i,j)=-d%edge_assign_sign(k,i,j) 295 314 ENDIF 315 316 v=cell_glo(ind)%vertex(MOD(k+delta+6,6)) 317 d%vertex_assign_domain(k,i,j)=vertices_glo(v)%assign_domain 318 d%vertex_assign_i(k,i,j)=vertices_glo(v)%assign_i 319 d%vertex_assign_j(k,i,j)=vertices_glo(v)%assign_j 320 d%vertex_assign_pos(k,i,j)=vertices_glo(v)%assign_pos 296 321 297 322 ENDDO … … 318 343 edge_glo(e)%assign_delta=delta 319 344 320 END SUBROUTINE assign_edge 345 END SUBROUTINE assign_edge 346 347 SUBROUTINE assign_vertex(ind_d,ind,i,j,delta,k) 348 INTEGER :: ind_d,ind,i,j,delta,k 349 INTEGER :: e 350 351 e=cell_glo(ind)%vertex(MOD(k+delta+6,6)) 352 vertices_glo(e)%assign_domain=ind_d 353 vertices_glo(e)%assign_i=i 354 vertices_glo(e)%assign_j=j 355 vertices_glo(e)%assign_pos=k 356 vertices_glo(e)%assign_delta=delta 357 358 END SUBROUTINE assign_vertex 359 360 END SUBROUTINE assign_cell 321 361 322 END SUBROUTINE assign_cell323 324 362 SUBROUTINE compute_boundary 325 363 USE spherical_geom_mod -
codes/icosagcm/trunk/src/parallel/transfert.F90
r548 r711 3 3 #ifdef CPP_USING_MPI 4 4 USE transfert_mpi_mod, ONLY : init_transfert, transfert_request=>transfert_request_mpi, req_i1,req_e1_vect, & 5 req_e1_scal, req_ i0, req_e0_vect, req_e0_scal, request_add_point, &5 req_e1_scal, req_z1_scal, req_i0, req_e0_vect, req_e0_scal, request_add_point, & 6 6 create_request, gather_field, scatter_field, & 7 7 t_message, init_message=>init_message_mpi, & … … 12 12 #else 13 13 USE transfert_mpi_mod, ONLY : init_transfert, transfert_request=>transfert_request_seq, req_i1,req_e1_vect, & 14 req_e1_scal, req_i0, req_e0_vect, req_e0_scal, &14 req_e1_scal, req_z1_scal, req_i0, req_e0_vect, req_e0_scal, & 15 15 request_add_point, create_request, gather_field, & 16 16 scatter_field, t_message, & -
codes/icosagcm/trunk/src/parallel/transfert_mpi.f90
r667 r711 49 49 TYPE(t_request),SAVE,POINTER :: req_e1_scal(:) 50 50 TYPE(t_request),SAVE,POINTER :: req_e1_vect(:) 51 TYPE(t_request),SAVE,POINTER :: req_z1_scal(:) 51 52 52 53 TYPE(t_request),SAVE,POINTER :: req_i0(:) … … 267 268 CALL finalize_request(req_e0_vect) 268 269 270 CALL create_request(field_z,req_z1_scal) 271 DO ind=1,ndomain 272 CALL swap_dimensions(ind) 273 DO i=ii_begin,ii_end 274 CALL request_add_point(ind,i,jj_begin-1,req_z1_scal,vrup) 275 CALL request_add_point(ind,i+1,jj_begin-1,req_z1_scal,vup) 276 ENDDO 277 278 DO j=jj_begin,jj_end 279 CALL request_add_point(ind,ii_end+1,j,req_z1_scal,vlup) 280 ENDDO 281 DO j=jj_begin,jj_end 282 CALL request_add_point(ind,ii_end+1,j-1,req_z1_scal,vup) 283 ENDDO 284 285 DO i=ii_begin,ii_end 286 CALL request_add_point(ind,i,jj_end+1,req_z1_scal,vdown) 287 CALL request_add_point(ind,i-1,jj_end+1,req_z1_scal,vrdown) 288 ENDDO 289 290 DO j=jj_begin,jj_end 291 CALL request_add_point(ind,ii_begin-1,j,req_z1_scal,vrup) 292 ENDDO 293 DO j=jj_begin,jj_end 294 CALL request_add_point(ind,ii_begin-1,j,req_z1_scal,vrdown) 295 ENDDO 296 297 ENDDO 298 299 CALL finalize_request(req_z1_scal) 269 300 270 301 END SUBROUTINE init_transfert … … 420 451 IF (.NOT. PRESENT(pos)) STOP 'argument request_add_point non conforme' 421 452 422 src_domain=domain(ind)% assign_domain(i,j)453 src_domain=domain(ind)%vertex_assign_domain(pos-1,i,j) 423 454 src_iim=domain_glo(src_domain)%iim 424 src_i=domain(ind)% assign_i(i,j)425 src_j=domain(ind)% assign_j(i,j)455 src_i=domain(ind)%vertex_assign_i(pos-1,i,j) 456 src_j=domain(ind)%vertex_assign_j(pos-1,i,j) 426 457 src_n=(src_j-1)*src_iim+src_i 427 458 src_delta=domain(ind)%delta(i,j) 428 429 src_pos=MOD(pos-1+src_delta+6,6)+1 459 src_pos=domain(ind)%vertex_assign_pos(pos-1,i,j)+1 460 430 461 431 462 req%target_ind(req%size)=(j-1)*d%iim+i+d%z_pos(pos)
Note: See TracChangeset
for help on using the changeset viewer.