Changeset 879 for codes/icosagcm/devel/src/unstructured
- Timestamp:
- 06/04/19 18:03:54 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
codes/icosagcm/devel/src/unstructured/init_unstructured.f90
r863 r879 2 2 USE mpipara, ONLY : is_mpi_master 3 3 USE data_unstructured_mod 4 USE geometry, ONLY : de4 USE geometry, ONLY : swap_geometry 5 5 IMPLICIT NONE 6 6 SAVE … … 128 128 129 129 130 SUBROUTINE read_field(id_nc, field) 131 USE field_mod, ONLY : t_field, type_integer, type_real 132 INTEGER :: id_nc 133 TYPE(t_field), POINTER :: field(:), fld 134 fld=>field(1) 135 SELECT CASE(fld%data_type) 136 CASE(type_integer) 137 CALL read_from_gridfile(id_nc, 'integer', TRIM(fld%name)) 138 SELECT CASE(field(1)%ndim) 139 CASE(2) 140 fld%ival2d = Idata_read1 141 CASE(3) 142 fld%ival3d = Idata_read2 143 END SELECT 144 CASE(type_real) 145 CALL read_from_gridfile(id_nc, 'float', TRIM(fld%name)) 146 SELECT CASE(field(1)%ndim) 147 CASE(2) 148 fld%rval2d = Ddata_read1 149 CASE(3) 150 fld%rval3d = Ddata_read2 151 END SELECT 152 END SELECT 153 END SUBROUTINE read_field 154 130 155 SUBROUTINE read_local_mesh 131 156 USE field_mod 132 USE geometry, ONLY : lon_i, lat_i, lon_e, lat_e, ep_e 157 USE geometry, ONLY : geom, lon_i, lat_i, lon_e, lat_e, ep_e 158 USE domain_mod, ONLY : domain, domain_glo, t_domain, swap_needed 133 159 IMPLICIT NONE 134 160 INTEGER :: ij 161 INTEGER, ALLOCATABLE :: cell_ij(:) 135 162 REAL(rstd), ALLOCATABLE :: angle_e(:) 136 163 REAL(rstd) :: clon, slon, clat, slat, & ! COS/SIN of lon/lat 137 164 elon(3), elat(3) ! lon/lat unit vectors 138 165 139 !status = nf90_get_att(id_nc, nf90_global, "primal_num", primal_num) 140 !status = nf90_get_att(id_nc, nf90_global, "dual_num", dual_num) 141 !status = nf90_get_att(id_nc, nf90_global, "edge_num", edge_num) 142 !print *,primal_num,dual_num,edge_num 143 166 ! if possible data is read into fields allocated in geom(1) using read_field 167 CALL read_field(id_nc, geom%Ai) 168 CALL read_field(id_nc, geom%Av) 169 CALL read_field(id_nc, geom%fv) 170 CALL read_field(id_nc, geom%le_de) 171 CALL read_field(id_nc, geom%le) 172 CALL read_field(id_nc, geom%de) 173 CALL read_field(id_nc, geom%lon_i) 174 CALL read_field(id_nc, geom%lat_i) 175 CALL read_field(id_nc, geom%lon_e) 176 CALL read_field(id_nc, geom%lat_e) 177 178 swap_needed = .TRUE. 179 CALL swap_geometry(1) 180 181 ! cell centers and bounds are read into domain(1)%primal_own 182 domain(1)%primal_own%ncell = primal_num 183 domain_glo(1)%primal_own%ncell = primal_num 184 ALLOCATE(domain(1)%primal_own%lon, source=lon_i) 185 ALLOCATE(domain_glo(1)%primal_own%lon, source=lon_i) 186 ALLOCATE(domain(1)%primal_own%lat, source=lat_i) 187 ALLOCATE(domain_glo(1)%primal_own%lat, source=lat_i) 188 189 CALL read_from_gridfile(id_nc, 'float', 'primal_bounds_lon') 190 ALLOCATE(domain(1)%primal_own%bnds_lon, source=Ddata_read2) 191 ALLOCATE(domain_glo(1)%primal_own%bnds_lon, source=Ddata_read2) 192 CALL read_from_gridfile(id_nc, 'float', 'primal_bounds_lat') 193 ALLOCATE(domain(1)%primal_own%bnds_lat, source=Ddata_read2) 194 ALLOCATE(domain_glo(1)%primal_own%bnds_lat, source=Ddata_read2) 195 PRINT *, 'read_local_mesh : primal_num =', primal_num, domain_glo(1)%primal_own%ncell 196 197 ! other fields are defined only in the case of an unstructured mesh 198 ! those fields are read into simple arrays 144 199 CALL read_from_gridfile(id_nc, 'integer', 'primal_deg') 145 200 ALLOCATE(primal_deg, source = Idata_read1) … … 148 203 CALL read_from_gridfile(id_nc, 'integer', 'primal_ne') 149 204 ALLOCATE(primal_ne, source = Idata_read2) 205 CALL read_from_gridfile(id_nc, 'integer', 'primal_vertex') 206 ALLOCATE(primal_vertex, source = Idata_read2) 207 150 208 CALL read_from_gridfile(id_nc, 'integer', 'dual_deg') 151 209 ALLOCATE(dual_deg, source = Idata_read1) … … 154 212 CALL read_from_gridfile(id_nc, 'integer', 'dual_ne') 155 213 ALLOCATE(dual_ne, source = Idata_read2) 156 CALL read_from_gridfile(id_nc, 'integer', 'primal_vertex') 157 ALLOCATE(primal_vertex, source = Idata_read2) 214 CALL read_from_gridfile(id_nc, 'integer', 'dual_vertex') 215 ALLOCATE(dual_vertex, source = Idata_read2) 216 158 217 CALL read_from_gridfile(id_nc, 'integer', 'left') 159 218 ALLOCATE(left, source = Idata_read1) … … 164 223 CALL read_from_gridfile(id_nc, 'integer', 'down') 165 224 ALLOCATE(down, source = Idata_read1) 225 CALL read_from_gridfile(id_nc, 'float', 'angle_e') 226 ALLOCATE(angle_e, source = Ddata_read1) 166 227 CALL read_from_gridfile(id_nc, 'integer', 'trisk_deg') 167 228 ALLOCATE(trisk_deg, source = Idata_read1) 168 229 CALL read_from_gridfile(id_nc, 'integer', 'trisk') 169 230 ALLOCATE(trisk, source = Idata_read2) 170 CALL read_from_gridfile(id_nc, 'float', 'Ai')171 ALLOCATE(Ai, source = Ddata_read1)172 CALL read_from_gridfile(id_nc, 'float', 'Av')173 ALLOCATE(Av, source = Ddata_read1)174 CALL read_from_gridfile(id_nc, 'float', 'le_de')175 ALLOCATE(le_de, source = Ddata_read1)176 CALL read_from_gridfile(id_nc, 'float', 'le')177 ALLOCATE(le, source = Ddata_read1)178 CALL read_from_gridfile(id_nc, 'float', 'de')179 ALLOCATE(de, source = Ddata_read1)180 231 CALL read_from_gridfile(id_nc, 'float', 'Riv2') 181 232 ALLOCATE(Riv2, source = Ddata_read2) 182 233 CALL read_from_gridfile(id_nc, 'float', 'wee') 183 234 ALLOCATE(wee, source = Ddata_read2) 184 CALL read_from_gridfile(id_nc, 'float', 'fv') !185 ALLOCATE(fv, source = Ddata_read1)186 CALL read_from_gridfile(id_nc, 'integer', 'dual_vertex')187 ALLOCATE(dual_vertex, source = Idata_read2)188 189 CALL read_from_gridfile(id_nc, 'float', 'lon_i')190 ALLOCATE(lon_i, source = Ddata_read1)191 CALL read_from_gridfile(id_nc, 'float', 'lat_i')192 ALLOCATE(lat_i, source = Ddata_read1)193 CALL read_from_gridfile(id_nc, 'float', 'lon_e')194 ALLOCATE(lon_e, source = Ddata_read1)195 CALL read_from_gridfile(id_nc, 'float', 'lat_e')196 ALLOCATE(lat_e, source = Ddata_read1)197 CALL read_from_gridfile(id_nc, 'float', 'angle_e')198 ALLOCATE(angle_e, source = Ddata_read1)199 235 200 236 CALL free_data_read ! free buffers after reading all data from grid file 201 237 202 edge_num = SIZE(le_de) 203 primal_num = SIZE(Ai) 204 dual_num = SIZE(Av) 238 239 ! edge_num = SIZE(le_de) 240 ! primal_num = SIZE(Ai) 241 ! dual_num = SIZE(Av) 205 242 max_primal_deg = SIZE(primal_edge,1) 206 243 max_dual_deg = SIZE(dual_edge,1) … … 221 258 222 259 DEALLOCATE(angle_e) 260 261 ALLOCATE(domain(1)%primal_own%ij(primal_num)) 262 domain(1)%primal_own%ij(:) = (/(ij,ij=1,primal_num)/) 263 PRINT *, 'read_local_mesh :', SHAPE(domain), primal_num, & 264 SHAPE(domain(1)%primal_own%ij) 265 266 ALLOCATE(cell_ij(dual_num)) 267 cell_ij(:) = (/(ij,ij=1,dual_num)/) 268 ALLOCATE(domain(1)%dual_own%ij, source=cell_ij) 269 DEALLOCATE(cell_ij) 270 271 CALL swap_geometry(1) 272 swap_needed = .FALSE. 223 273 END SUBROUTINE read_local_mesh 224 274
Note: See TracChangeset
for help on using the changeset viewer.