Changeset 21 for codes/icosagcm/trunk/src/domain.f90
- Timestamp:
- 07/18/12 11:15:39 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
codes/icosagcm/trunk/src/domain.f90
r15 r21 19 19 INTEGER,POINTER :: assign_i(:,:) 20 20 INTEGER,POINTER :: assign_j(:,:) 21 INTEGER,POINTER :: edge_assign_domain(:,:,:) 22 INTEGER,POINTER :: edge_assign_i(:,:,:) 23 INTEGER,POINTER :: edge_assign_j(:,:,:) 24 INTEGER,POINTER :: edge_assign_pos(:,:,:) 21 25 REAL,POINTER :: xyz(:,:,:) 22 26 REAL,POINTER :: neighbour(:,:,:,:) … … 71 75 ind=0 72 76 DO nf=1,nb_face 73 DO nj=1,nsplit_ i74 DO ni=1,nsplit_ j77 DO nj=1,nsplit_j 78 DO ni=1,nsplit_i 75 79 ind=ind+1 76 80 d=>domain(ind) … … 85 89 ENDIF 86 90 d%ii_end_glo=d%ii_begin_glo+d%ii_nb-1 91 92 IF (ni/=nsplit_i) THEN 93 d%ii_nb=d%ii_nb+1 94 d%ii_end_glo=d%ii_end_glo+1 95 ENDIF 96 87 97 88 98 quotient=(jjm_glo/nsplit_j) … … 95 105 d%jj_begin_glo=(quotient+1)*rest+(nj-1-rest) * quotient+1 96 106 ENDIF 97 98 107 d%jj_end_glo=d%jj_begin_glo+d%jj_nb-1 108 109 IF (nj/=nsplit_j) THEN 110 d%jj_nb=d%jj_nb+1 111 d%jj_end_glo=d%jj_end_glo+1 112 ENDIF 113 114 99 115 d%iim=d%ii_nb+2*halo 100 116 d%jjm=d%jj_nb+2*halo … … 107 123 ALLOCATE(d%assign_i(d%iim,d%jjm)) 108 124 ALLOCATE(d%assign_j(d%iim,d%jjm)) 125 ALLOCATE(d%edge_assign_domain(0:5,d%iim,d%jjm)) 126 ALLOCATE(d%edge_assign_i(0:5,d%iim,d%jjm)) 127 ALLOCATE(d%edge_assign_j(0:5,d%iim,d%jjm)) 128 ALLOCATE(d%edge_assign_pos(0:5,d%iim,d%jjm)) 109 129 ALLOCATE(d%delta(d%iim,d%jjm)) 110 130 ALLOCATE(d%xyz(3,d%iim,d%jjm)) … … 123 143 USE metric 124 144 IMPLICIT NONE 125 INTEGER :: ind_d,ind,ind2 145 INTEGER :: ind_d,ind,ind2,e 126 146 INTEGER :: nf 127 147 INTEGER :: i,j,k,ii,jj 128 148 TYPE(t_domain),POINTER :: d 149 INTEGER :: delta 129 150 130 151 … … 137 158 jj=d%jj_begin_glo-d%jj_begin+j 138 159 ind=vertex_glo(ii,jj,nf)%ind 160 delta=vertex_glo(ii,jj,nf)%delta 139 161 IF (cell_glo(ind)%assign_face==nf) THEN 140 162 cell_glo(ind)%assign_domain=ind_d … … 142 164 cell_glo(ind)%assign_j=j 143 165 ENDIF 166 IF ( i+1 <= d%ii_end ) CALL assign_edge(ind_d,ind,i,j,delta,0) 167 IF ( j+1 <= d%jj_end ) CALL assign_edge(ind_d,ind,i,j,delta,1) 168 IF ( i-1 >= d%ii_begin .AND. j+1<=d%jj_end ) CALL assign_edge(ind_d,ind,i,j,delta,2) 169 IF ( i-1 >= d%ii_begin ) CALL assign_edge(ind_d,ind,i,j,delta,3) 170 IF ( j-1 >= d%jj_begin ) CALL assign_edge(ind_d,ind,i,j,delta,4) 171 IF ( i+1 <= d%ii_end .AND. j-1 >=d%jj_begin ) CALL assign_edge(ind_d,ind,i,j,delta,5) 144 172 ENDDO 145 173 ENDDO 146 174 ENDDO 175 147 176 148 177 DO ind_d=1,ndomain … … 157 186 d%assign_i(i,j)=cell_glo(ind)%assign_i 158 187 d%assign_j(i,j)=cell_glo(ind)%assign_j 188 delta=vertex_glo(ii,jj,nf)%delta 159 189 d%delta(i,j)=vertex_glo(ii,jj,nf)%delta 160 190 DO k=0,5 … … 162 192 d%neighbour(:,k,i,j)=cell_glo(ind2)%xyz(:) 163 193 d%ne(k,i,j)=vertex_glo(ii,jj,nf)%ne(k) 194 e=cell_glo(ind)%edge(MOD(k+delta+6,6)) 195 d%edge_assign_domain(k,i,j)=edge_glo(e)%assign_domain 196 d%edge_assign_i(k,i,j)=edge_glo(e)%assign_i 197 d%edge_assign_j(k,i,j)=edge_glo(e)%assign_j 198 d%edge_assign_pos(k,i,j)=edge_glo(e)%assign_pos 164 199 ENDDO 165 200 d%xyz(:,i,j)=cell_glo(ind)%xyz(:) … … 171 206 ENDDO 172 207 ENDDO 173 ENDDO 208 ENDDO 209 210 CONTAINS 211 212 SUBROUTINE assign_edge(ind_d,ind,i,j,delta,k) 213 INTEGER :: ind_d,ind,i,j,delta,k 214 INTEGER :: e 215 e=cell_glo(ind)%edge(MOD(k+delta+6,6)) 216 edge_glo(e)%assign_domain=ind_d 217 edge_glo(e)%assign_i=i 218 edge_glo(e)%assign_j=j 219 edge_glo(e)%assign_pos=k 220 ! PRINT*,"Assign_edge",ind_d,ind,i,j,k,e 221 END SUBROUTINE assign_edge 222 174 223 END SUBROUTINE assign_cell 175 224
Note: See TracChangeset
for help on using the changeset viewer.