Changeset 26 for codes/icosagcm/trunk/src/domain.f90
- Timestamp:
- 07/26/12 15:25:40 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
codes/icosagcm/trunk/src/domain.f90
r21 r26 59 59 TYPE(t_domain),SAVE,ALLOCATABLE,TARGET :: domain(:) 60 60 INTEGER :: ndomain 61 62 61 TYPE(t_domain),SAVE,ALLOCATABLE,TARGET :: domain_glo(:) 62 INTEGER :: ndomain_glo 63 64 INTEGER,ALLOCATABLE,SAVE :: domglo_rank(:) 65 INTEGER,ALLOCATABLE,SAVE :: domglo_loc_ind(:) 66 INTEGER,ALLOCATABLE,SAVE :: domloc_glo_ind(:) 67 63 68 CONTAINS 64 69 … … 70 75 TYPE(t_domain),POINTER :: d 71 76 72 ndomain=nsplit_i*nsplit_j*nb_face 73 ALLOCATE(domain(ndomain)) 74 77 ndomain_glo=nsplit_i*nsplit_j*nb_face 78 ALLOCATE(domain_glo(ndomain_glo)) 79 ALLOCATE(domglo_rank(ndomain_glo)) 80 ALLOCATE(domglo_loc_ind(ndomain_glo)) 81 75 82 ind=0 76 83 DO nf=1,nb_face … … 78 85 DO ni=1,nsplit_i 79 86 ind=ind+1 80 d=>domain (ind)87 d=>domain_glo(ind) 81 88 quotient=(iim_glo/nsplit_i) 82 89 rest=MOD(iim_glo,nsplit_i) … … 139 146 END SUBROUTINE create_domain 140 147 148 SUBROUTINE copy_domain(d1,d2) 149 IMPLICIT NONE 150 INTEGER :: face 151 TYPE(t_domain),TARGET,INTENT(IN) :: d1 152 TYPE(t_domain), INTENT(OUT) :: d2 153 154 d2%iim = d1%iim 155 d2%jjm = d1%jjm 156 d2%ii_begin = d1%ii_begin 157 d2%jj_begin = d1%jj_begin 158 d2%ii_end = d1%ii_end 159 d2%jj_end = d1%jj_end 160 d2%ii_nb = d1%ii_nb 161 d2%jj_nb = d1%jj_nb 162 d2%ii_begin_glo = d1%ii_begin_glo 163 d2%jj_begin_glo = d1%jj_begin_glo 164 d2%ii_end_glo = d1%ii_end_glo 165 d2%jj_end_glo = d1%jj_end_glo 166 d2%assign_domain => d1%assign_domain 167 d2%assign_i => d1%assign_i 168 d2%assign_j => d1%assign_j 169 d2%edge_assign_domain => d1%edge_assign_domain 170 d2%edge_assign_i => d1%edge_assign_i 171 d2%edge_assign_j => d1%edge_assign_j 172 d2%edge_assign_pos => d1%edge_assign_pos 173 d2%xyz => d1%xyz 174 d2%neighbour => d1%neighbour 175 d2%delta => d1%delta 176 d2%vertex => d1%vertex 177 d2%own => d1%own 178 d2%ne => d1%ne 179 180 d2%t_right = d1%t_right 181 d2%t_rup = d1%t_rup 182 d2%t_lup = d1%t_lup 183 d2%t_left = d1%t_left 184 d2%t_ldown = d1%t_ldown 185 d2%t_rdown = d1%t_rdown 186 187 d2%u_right = d1%u_right 188 d2%u_rup = d1%u_rup 189 d2%u_lup = d1%u_lup 190 d2%u_left = d1%u_left 191 d2%u_ldown = d1%u_ldown 192 d2%u_rdown = d1%u_rdown 193 194 d2%z_rup = d1%z_rup 195 d2%z_up = d1%z_up 196 d2%z_lup = d1%z_lup 197 d2%z_ldown = d1%z_ldown 198 d2%z_down = d1%z_down 199 d2%z_rdown = d1%z_rdown 200 201 d2%t_pos = d1%t_pos 202 d2%u_pos = d1%u_pos 203 d2%z_pos = d1%z_pos 204 205 END SUBROUTINE copy_domain 206 141 207 142 208 SUBROUTINE assign_cell … … 150 216 151 217 152 DO ind_d=1,ndomain 153 d=>domain (ind_d)218 DO ind_d=1,ndomain_glo 219 d=>domain_glo(ind_d) 154 220 nf=d%face 155 221 DO j=d%jj_begin,d%jj_end … … 175 241 176 242 177 DO ind_d=1,ndomain 178 d=>domain (ind_d)243 DO ind_d=1,ndomain_glo 244 d=>domain_glo(ind_d) 179 245 nf=d%face 180 246 DO j=d%jj_begin-1,d%jj_end+1 … … 231 297 REAL(rstd) :: ng1(3),ng2(3) 232 298 233 DO ind_d=1,ndomain 234 d=>domain (ind_d)299 DO ind_d=1,ndomain_glo 300 d=>domain_glo(ind_d) 235 301 DO j=d%jj_begin-1,d%jj_end+1 236 302 DO i=d%ii_begin-1,d%ii_end+1 … … 252 318 TYPE(t_domain),POINTER :: d 253 319 254 DO ind_d=1,ndomain 255 d=>domain (ind_d)320 DO ind_d=1,ndomain_glo 321 d=>domain_glo(ind_d) 256 322 d%t_right=1 257 323 d%t_left=-1 … … 301 367 END SUBROUTINE set_neighbour_indice 302 368 303 369 SUBROUTINE assign_domain 370 USE mpipara 371 IMPLICIT NONE 372 INTEGER :: nb_domain(0:mpi_size-1) 373 INTEGER :: rank, ind,ind_glo 374 375 DO rank=0,mpi_size-1 376 nb_domain(rank)=ndomain_glo/mpi_size 377 IF ( rank < MOD(ndomain_glo,mpi_size) ) nb_domain(rank)=nb_domain(rank)+1 378 ENDDO 379 380 ndomain=nb_domain(mpi_rank) 381 ALLOCATE(domain(ndomain)) 382 ALLOCATE(domloc_glo_ind(ndomain)) 383 384 rank=0 385 ind=0 386 DO ind_glo=1,ndomain_glo 387 ind=ind+1 388 domglo_rank(ind_glo)=rank 389 domglo_loc_ind(ind_glo)=ind 390 IF (rank==mpi_rank) THEN 391 CALL copy_domain(domain_glo(ind_glo),domain(ind)) 392 domloc_glo_ind(ind)=ind_glo 393 ENDIF 394 395 IF (ind==nb_domain(rank)) THEN 396 rank=rank+1 397 ind=0 398 ENDIF 399 ENDDO 400 401 END SUBROUTINE assign_domain 402 304 403 305 404 SUBROUTINE compute_domain 306 405 IMPLICIT NONE 307 406 CALL init_domain_param 308 407 CALL create_domain 309 408 CALL assign_cell 310 409 CALL compute_boundary 311 410 CALL set_neighbour_indice 411 CALL assign_domain 312 412 313 413 END SUBROUTINE compute_domain
Note: See TracChangeset
for help on using the changeset viewer.