Changeset 26 for codes/icosagcm/trunk/src/field.f90
- Timestamp:
- 07/26/12 15:25:40 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
codes/icosagcm/trunk/src/field.f90
r12 r26 26 26 INTEGER :: field_type 27 27 INTEGER :: data_type 28 INTEGER :: dim3 29 INTEGER :: dim4 28 30 END TYPE t_field 29 31 … … 59 61 IF (PRESENT(dim2)) THEN 60 62 field(ind)%ndim=4 63 field(ind)%dim4=dim2 61 64 ELSE IF (PRESENT(dim1)) THEN 62 65 field(ind)%ndim=3 66 field(ind)%dim3=dim1 63 67 ELSE 64 68 field(ind)%ndim=2 … … 96 100 97 101 END SUBROUTINE allocate_field 98 102 103 SUBROUTINE allocate_field_glo(field,field_type,data_type,dim1,dim2) 104 USE domain_mod 105 IMPLICIT NONE 106 TYPE(t_field),POINTER :: field(:) 107 INTEGER,INTENT(IN) :: field_type 108 INTEGER,INTENT(IN) :: data_type 109 INTEGER,OPTIONAL :: dim1,dim2 110 INTEGER :: ind 111 INTEGER :: ii_size,jj_size 112 113 ALLOCATE(field(ndomain_glo)) 114 115 DO ind=1,ndomain_glo 116 117 IF (PRESENT(dim2)) THEN 118 field(ind)%ndim=4 119 field(ind)%dim4=dim2 120 ELSE IF (PRESENT(dim1)) THEN 121 field(ind)%ndim=3 122 field(ind)%dim3=dim1 123 ELSE 124 field(ind)%ndim=2 125 ENDIF 126 127 128 field(ind)%data_type=data_type 129 field(ind)%field_type=field_type 130 131 IF (field_type==field_T) THEN 132 jj_size=domain_glo(ind)%jjm 133 ELSE IF (field_type==field_U) THEN 134 jj_size=3*domain_glo(ind)%jjm 135 ELSE IF (field_type==field_Z) THEN 136 jj_size=2*domain_glo(ind)%jjm 137 ENDIF 138 139 ii_size=domain_glo(ind)%iim 140 141 IF (field(ind)%ndim==4) THEN 142 IF (data_type==type_integer) ALLOCATE(field(ind)%ival4d(ii_size*jj_size,dim1,dim2)) 143 IF (data_type==type_real) ALLOCATE(field(ind)%rval4d(ii_size*jj_size,dim1,dim2)) 144 IF (data_type==type_logical) ALLOCATE(field(ind)%lval4d(ii_size*jj_size,dim1,dim2)) 145 ELSE IF (field(ind)%ndim==3) THEN 146 IF (data_type==type_integer) ALLOCATE(field(ind)%ival3d(ii_size*jj_size,dim1)) 147 IF (data_type==type_real) ALLOCATE(field(ind)%rval3d(ii_size*jj_size,dim1)) 148 IF (data_type==type_logical) ALLOCATE(field(ind)%lval3d(ii_size*jj_size,dim1)) 149 ELSE IF (field(ind)%ndim==2) THEN 150 IF (data_type==type_integer) ALLOCATE(field(ind)%ival2d(ii_size*jj_size)) 151 IF (data_type==type_real) ALLOCATE(field(ind)%rval2d(ii_size*jj_size)) 152 IF (data_type==type_logical) ALLOCATE(field(ind)%lval2d(ii_size*jj_size)) 153 ENDIF 154 155 ENDDO 156 157 END SUBROUTINE allocate_field_glo 158 159 SUBROUTINE deallocate_field(field) 160 USE domain_mod 161 IMPLICIT NONE 162 TYPE(t_field),POINTER :: field(:) 163 INTEGER :: data_type 164 INTEGER :: ind 165 166 DO ind=1,ndomain 167 168 data_type=field(ind)%data_type 169 170 IF (field(ind)%ndim==4) THEN 171 IF (data_type==type_integer) DEALLOCATE(field(ind)%ival4d) 172 IF (data_type==type_real) DEALLOCATE(field(ind)%rval4d) 173 IF (data_type==type_logical) DEALLOCATE(field(ind)%lval4d) 174 ELSE IF (field(ind)%ndim==3) THEN 175 IF (data_type==type_integer) DEALLOCATE(field(ind)%ival3d) 176 IF (data_type==type_real) DEALLOCATE(field(ind)%rval3d) 177 IF (data_type==type_logical) DEALLOCATE(field(ind)%lval3d) 178 ELSE IF (field(ind)%ndim==2) THEN 179 IF (data_type==type_integer) DEALLOCATE(field(ind)%ival2d) 180 IF (data_type==type_real) DEALLOCATE(field(ind)%rval2d) 181 IF (data_type==type_logical) DEALLOCATE(field(ind)%lval2d) 182 ENDIF 183 184 ENDDO 185 DEALLOCATE(field) 186 187 END SUBROUTINE deallocate_field 188 189 SUBROUTINE deallocate_field_glo(field) 190 USE domain_mod 191 IMPLICIT NONE 192 TYPE(t_field),POINTER :: field(:) 193 INTEGER :: data_type 194 INTEGER :: ind 195 196 DO ind=1,ndomain_glo 197 198 data_type=field(ind)%data_type 199 200 IF (field(ind)%ndim==4) THEN 201 IF (data_type==type_integer) DEALLOCATE(field(ind)%ival4d) 202 IF (data_type==type_real) DEALLOCATE(field(ind)%rval4d) 203 IF (data_type==type_logical) DEALLOCATE(field(ind)%lval4d) 204 ELSE IF (field(ind)%ndim==3) THEN 205 IF (data_type==type_integer) DEALLOCATE(field(ind)%ival3d) 206 IF (data_type==type_real) DEALLOCATE(field(ind)%rval3d) 207 IF (data_type==type_logical) DEALLOCATE(field(ind)%lval3d) 208 ELSE IF (field(ind)%ndim==2) THEN 209 IF (data_type==type_integer) DEALLOCATE(field(ind)%ival2d) 210 IF (data_type==type_real) DEALLOCATE(field(ind)%rval2d) 211 IF (data_type==type_logical) DEALLOCATE(field(ind)%lval2d) 212 ENDIF 213 214 ENDDO 215 DEALLOCATE(field) 216 217 END SUBROUTINE deallocate_field_glo 218 99 219 SUBROUTINE getval_r2d(field_pt,field) 100 220 IMPLICIT NONE
Note: See TracChangeset
for help on using the changeset viewer.