Changeset 350 for codes/icosagcm/trunk/src/field.f90
- Timestamp:
- 08/02/15 00:53:35 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
codes/icosagcm/trunk/src/field.f90
r295 r350 1 1 MODULE field_mod 2 2 USE genmod 3 IMPLICIT NONE 3 4 4 5 INTEGER,PARAMETER :: field_T=1 … … 43 44 END INTERFACE 44 45 46 PRIVATE :: allocate_field_ 45 47 46 48 CONTAINS … … 49 51 USE domain_mod 50 52 USE omp_para 51 IMPLICIT NONE52 53 TYPE(t_field),POINTER :: field(:) 54 INTEGER,INTENT(IN) :: field_type 55 INTEGER,INTENT(IN) :: data_type 56 INTEGER,OPTIONAL :: dim1,dim2 57 CHARACTER(*), OPTIONAL :: name 58 !$OMP BARRIER 59 !$OMP MASTER 60 ALLOCATE(field(ndomain)) 61 !$OMP END MASTER 62 !$OMP BARRIER 63 CALL allocate_field_(field,field_type,data_type,dim1,dim2,name) 64 END SUBROUTINE allocate_field 65 66 SUBROUTINE allocate_fields(nfield,field,field_type,data_type,dim1,dim2,name) 67 USE domain_mod 68 USE omp_para 69 INTEGER,INTENT(IN) :: nfield 70 TYPE(t_field),POINTER :: field(:,:) 71 INTEGER,INTENT(IN) :: field_type 72 INTEGER,INTENT(IN) :: data_type 73 INTEGER,OPTIONAL :: dim1,dim2 74 CHARACTER(*), OPTIONAL :: name 75 INTEGER :: i 76 !$OMP BARRIER 77 !$OMP MASTER 78 ALLOCATE(field(ndomain,nfield)) 79 !$OMP END MASTER 80 !$OMP BARRIER 81 DO i=1,nfield 82 CALL allocate_field_(field(:,i),field_type,data_type,dim1,dim2,name) 83 END DO 84 END SUBROUTINE allocate_fields 85 86 SUBROUTINE allocate_field_(field,field_type,data_type,dim1,dim2,name) 87 USE domain_mod 88 USE omp_para 89 IMPLICIT NONE 90 TYPE(t_field) :: field(:) 53 91 INTEGER,INTENT(IN) :: field_type 54 92 INTEGER,INTENT(IN) :: data_type … … 57 95 INTEGER :: ind 58 96 INTEGER :: ii_size,jj_size 59 60 !$OMP BARRIER61 !$OMP MASTER62 ALLOCATE(field(ndomain))63 !$OMP END MASTER64 !$OMP BARRIER65 97 66 98 DO ind=1,ndomain … … 115 147 !$OMP BARRIER 116 148 117 END SUBROUTINE allocate_field149 END SUBROUTINE allocate_field_ 118 150 119 151 SUBROUTINE allocate_field_glo(field,field_type,data_type,dim1,dim2,name) … … 181 213 182 214 SUBROUTINE deallocate_field(field) 215 USE domain_mod 216 USE omp_para 217 IMPLICIT NONE 218 TYPE(t_field),POINTER :: field(:) 219 !$OMP BARRIER 220 CALL deallocate_field_(field) 221 !$OMP BARRIER 222 !$OMP MASTER 223 DEALLOCATE(field) 224 !$OMP END MASTER 225 !$OMP BARRIER 226 END SUBROUTINE deallocate_field 227 228 SUBROUTINE deallocate_fields(field) 229 USE domain_mod 230 USE omp_para 231 IMPLICIT NONE 232 TYPE(t_field),POINTER :: field(:,:) 233 INTEGER :: i 234 !$OMP BARRIER 235 DO i=1,SIZE(field,2) 236 CALL deallocate_field_(field(:,i)) 237 END DO 238 !$OMP BARRIER 239 !$OMP MASTER 240 DEALLOCATE(field) 241 !$OMP END MASTER 242 !$OMP BARRIER 243 END SUBROUTINE deallocate_fields 244 245 SUBROUTINE deallocate_field_(field) 183 246 USE domain_mod 184 247 USE omp_para 185 248 IMPLICIT NONE 186 TYPE(t_field) ,POINTER:: field(:)249 TYPE(t_field) :: field(:) 187 250 INTEGER :: data_type 188 251 INTEGER :: ind 189 190 !$OMP BARRIER191 252 DO ind=1,ndomain 192 253 IF (.NOT. assigned_domain(ind) .OR. .NOT. is_omp_level_master) CYCLE … … 209 270 210 271 ENDDO 211 !$OMP BARRIER 212 !$OMP MASTER 213 DEALLOCATE(field) 214 !$OMP END MASTER 215 !$OMP BARRIER 216 217 END SUBROUTINE deallocate_field 272 END SUBROUTINE deallocate_field_ 218 273 219 274 SUBROUTINE deallocate_field_glo(field)
Note: See TracChangeset
for help on using the changeset viewer.