Changeset 711
- Timestamp:
- 07/25/18 13:57:35 (6 years ago)
- Location:
- codes/icosagcm/trunk/src
- Files:
-
- 4 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) -
codes/icosagcm/trunk/src/sphere/metric.f90
r548 r711 7 7 INTEGER :: neighbour(0:5) 8 8 INTEGER :: edge(0:5) 9 INTEGER :: vertex(0:5) 9 10 INTEGER :: assign_face 10 11 INTEGER :: assign_i … … 32 33 END TYPE t_edge_glo 33 34 35 TYPE t_vertices_glo 36 INTEGER :: assign_domain 37 INTEGER :: assign_i 38 INTEGER :: assign_j 39 INTEGER :: assign_pos 40 INTEGER :: assign_delta 41 END TYPE t_vertices_glo 34 42 35 43 TYPE(t_vertex_glo),ALLOCATABLE,SAVE :: vertex_glo(:,:,:) 36 44 TYPE(t_cell_glo),ALLOCATABLE,SAVE :: cell_glo(:) 37 45 TYPE(t_edge_glo),ALLOCATABLE,SAVE :: edge_glo(:) 46 TYPE(t_vertices_glo),ALLOCATABLE,SAVE :: vertices_glo(:) 38 47 INTEGER :: ncell_glo 39 48 … … 93 102 ALLOCATE(tab_index(nb_face,nb_face,0:5)) 94 103 ALLOCATE(edge_glo(ncell_glo*3)) 104 ALLOCATE(vertices_glo(ncell_glo*2)) 95 105 96 106 DO ind=1,ncell_glo … … 824 834 END SUBROUTINE set_cell_edge 825 835 836 SUBROUTINE set_cell_vertex 837 IMPLICIT NONE 838 INTEGER :: i,j,k,k2 839 INTEGER :: ind,ind1,ind2 840 INTEGER :: ng1,ng2 841 INTEGER :: ne 842 843 DO ind=1,ncell_glo 844 cell_glo(ind)%vertex(:)=0 845 ENDDO 846 847 ne=0 848 DO ind=1,ncell_glo 849 DO k=0,5 850 IF (cell_glo(ind)%vertex(k)==0) THEN 851 ind1=cell_glo(ind)%neighbour(k) 852 DO ng1=0,5 853 ind2=cell_glo(ind1)%neighbour(ng1) 854 DO ng2=0,5 855 IF (cell_glo(ind2)%neighbour(ng2)==ind) THEN 856 DO k2=0,5 857 IF (cell_glo(ind)%neighbour(k2)==ind2) THEN 858 IF (k2==k+1 .OR. k2==k+2 .OR. k2+6==k+1 .AND. k2+6==k+2) THEN 859 IF (cell_glo(ind1)%vertex(ng1)==0 .AND. cell_glo(ind2)%vertex(ng2)==0) THEN 860 ne=ne+1 861 cell_glo(ind)%vertex(k)=ne 862 cell_glo(ind1)%vertex(ng1)=ne 863 cell_glo(ind2)%vertex(ng2)=ne 864 ELSE IF (cell_glo(ind1)%vertex(ng1)==0) THEN 865 cell_glo(ind)%vertex(k)=cell_glo(ind2)%vertex(ng2) 866 cell_glo(ind1)%vertex(ng1)=cell_glo(ind2)%vertex(ng2) 867 ELSE IF (cell_glo(ind2)%vertex(ng2)==0) THEN 868 cell_glo(ind)%vertex(k)=cell_glo(ind1)%vertex(ng1) 869 cell_glo(ind2)%vertex(ng2)=cell_glo(ind1)%vertex(ng1) 870 ENDIF 871 ENDIF 872 ENDIF 873 ENDDO 874 ENDIF 875 ENDDO 876 ENDDO 877 ENDIF 878 ENDDO 879 ENDDO 880 881 882 END SUBROUTINE set_cell_vertex 883 884 826 885 SUBROUTINE set_vertex_edge 827 886 IMPLICIT NONE … … 850 909 ENDDO 851 910 ENDDO 911 912 852 913 END SUBROUTINE set_vertex_edge 853 914 … … 864 925 CALL compute_extended_face_bis 865 926 CALL set_cell_edge 927 CALL set_cell_vertex 866 928 CALL set_vertex_edge 867 929
Note: See TracChangeset
for help on using the changeset viewer.