36 DOUBLE PRECISION,
POINTER :: lat(:,:)
37 DOUBLE PRECISION,
POINTER :: lon(:,:)
41 MODULE PROCEDURE grid_dim_delete
45 MODULE PROCEDURE grid_dim_copy
49 MODULE PROCEDURE grid_dim_alloc
53 MODULE PROCEDURE grid_dim_dealloc
56 INTERFACE OPERATOR (==)
57 MODULE PROCEDURE grid_dim_eq
61 MODULE PROCEDURE grid_dim_write_unit
65 MODULE PROCEDURE grid_dim_read_unit
69 MODULE PROCEDURE grid_dim_display
72 PRIVATE grid_dim_delete, grid_dim_copy, grid_dim_alloc, grid_dim_dealloc, &
73 grid_dim_eq, grid_dim_read_unit, grid_dim_write_unit, grid_dim_display
77 FUNCTION grid_dim_new(nx, ny)
RESULT(this)
78 INTEGER,
INTENT(in),
OPTIONAL :: nx, ny
80 TYPE(grid_dim) :: this
84 NULLIFY(this%lat, this%lon)
86 END FUNCTION grid_dim_new
89 SUBROUTINE grid_dim_delete(this)
90 TYPE(grid_dim),
INTENT(inout) :: this
96 END SUBROUTINE grid_dim_delete
99 SUBROUTINE grid_dim_alloc(this)
100 TYPE(grid_dim),
INTENT(inout) :: this
102 IF (
ASSOCIATED(this%lon) .AND.
ASSOCIATED(this%lat))
THEN 103 IF (
SIZE(this%lon, 1) == this%nx .AND.
SIZE(this%lon, 2) == this%ny .AND. &
104 SIZE(this%lat, 1) == this%nx .AND.
SIZE(this%lat, 2) == this%ny)
RETURN 107 IF (
c_e(this%nx) .AND.
c_e(this%ny))
THEN 108 ALLOCATE(this%lon(this%nx, this%ny), this%lat(this%nx, this%ny))
111 END SUBROUTINE grid_dim_alloc
114 SUBROUTINE grid_dim_dealloc(this)
115 TYPE(grid_dim),
INTENT(inout) :: this
117 IF (
ASSOCIATED(this%lon))
DEALLOCATE(this%lon)
118 IF (
ASSOCIATED(this%lat))
DEALLOCATE(this%lat)
120 END SUBROUTINE grid_dim_dealloc
123 SUBROUTINE grid_dim_copy(this, that)
124 TYPE(grid_dim),
INTENT(in) :: this
125 TYPE(grid_dim),
INTENT(out) :: that
127 that = grid_dim_new(this%nx, this%ny)
129 IF (
ASSOCIATED(this%lon) .AND.
ASSOCIATED(this%lat))
THEN 133 IF (
SIZE(this%lon,1) /= this%nx .OR.
SIZE(this%lon,2) /= this%ny)
THEN 134 CALL raise_error(
'grid_dim_copy, dimensioni non valide: '// &
138 IF (
SIZE(this%lat,1) /= this%nx .OR.
SIZE(this%lat,2) /= this%ny)
THEN 139 CALL raise_error(
'grid_dim_copy, dimensioni non valide: '// &
145 that%lon(:,:) = this%lon(:,:)
146 that%lat(:,:) = this%lat(:,:)
149 END SUBROUTINE grid_dim_copy
152 ELEMENTAL FUNCTION grid_dim_eq(this, that)
RESULT(res)
153 TYPE(grid_dim),
INTENT(IN) :: this, that
156 res = this%nx == that%nx .and. &
159 END FUNCTION grid_dim_eq
166 SUBROUTINE grid_dim_read_unit(this, unit)
167 TYPE(grid_dim),
INTENT(out) :: this
168 INTEGER,
INTENT(in) :: unit
170 CHARACTER(len=40) :: form
173 INQUIRE(unit, form=form)
174 IF (form ==
'FORMATTED')
THEN 175 READ(unit,*)this%nx,this%ny
179 READ(unit,*)this%lon,this%lat
184 READ(unit)this%nx,this%ny
188 READ(unit)this%lon,this%lat
194 END SUBROUTINE grid_dim_read_unit
201 SUBROUTINE grid_dim_write_unit(this, unit)
202 TYPE(grid_dim),
INTENT(in) :: this
203 INTEGER,
INTENT(in) :: unit
205 CHARACTER(len=40) :: form
208 INQUIRE(unit, form=form)
209 IF (form ==
'FORMATTED')
THEN 210 WRITE(unit,*)this%nx,this%ny
211 is_all = (
ASSOCIATED(this%lon) .AND.
ASSOCIATED(this%lat))
214 WRITE(unit,*)this%lon,this%lat
219 WRITE(unit)this%nx,this%ny
220 is_all = (
ASSOCIATED(this%lon) .AND.
ASSOCIATED(this%lat))
223 WRITE(unit)this%lon,this%lat
229 END SUBROUTINE grid_dim_write_unit
233 SUBROUTINE grid_dim_display(this)
234 TYPE(grid_dim),
INTENT(in) :: this
236 print*,
'Number of points along x direction',this%nx
237 print*,
'Number of points along y direction',this%ny
239 END SUBROUTINE grid_dim_display
Function to check whether a value is missing or not.
Module for quickly interpreting the OPTIONAL parameters passed to a subprogram.
Set of functions that return a CHARACTER representation of the input variable.
Definitions of constants and functions for working with missing values.
Module for defining the extension and coordinates of a rectangular georeferenced grid.
Utilities for CHARACTER variables.
Derived type describing the extension of a grid and the geographical coordinates of each point...