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
56INTERFACE 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
72PRIVATE 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
77FUNCTION grid_dim_new(nx, ny)
RESULT(this)
78INTEGER,
INTENT(in),
OPTIONAL :: nx, ny
84NULLIFY(this%lat, this%lon)
86END FUNCTION grid_dim_new
89SUBROUTINE grid_dim_delete(this)
90TYPE(grid_dim),
INTENT(inout) :: this
96END SUBROUTINE grid_dim_delete
99SUBROUTINE grid_dim_alloc(this)
100TYPE(grid_dim),
INTENT(inout) :: this
102IF (
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
107IF (
c_e(this%nx) .AND.
c_e(this%ny))
THEN
108 ALLOCATE(this%lon(this%nx, this%ny), this%lat(this%nx, this%ny))
111END SUBROUTINE grid_dim_alloc
114SUBROUTINE grid_dim_dealloc(this)
115TYPE(grid_dim),
INTENT(inout) :: this
117IF (
ASSOCIATED(this%lon))
DEALLOCATE(this%lon)
118IF (
ASSOCIATED(this%lat))
DEALLOCATE(this%lat)
120END SUBROUTINE grid_dim_dealloc
123SUBROUTINE grid_dim_copy(this, that)
124TYPE(grid_dim),
INTENT(in) :: this
125TYPE(grid_dim),
INTENT(out) :: that
127that = grid_dim_new(this%nx, this%ny)
129IF (
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(:,:)
149END SUBROUTINE grid_dim_copy
152ELEMENTAL FUNCTION grid_dim_eq(this, that)
RESULT(res)
153TYPE(grid_dim),
INTENT(IN) :: this, that
156res = this%nx == that%nx .and. &
159END FUNCTION grid_dim_eq
166SUBROUTINE grid_dim_read_unit(this, unit)
167TYPE(grid_dim),
INTENT(out) :: this
168INTEGER,
INTENT(in) :: unit
170CHARACTER(len=40) :: form
173INQUIRE(unit, form=form)
174IF (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
194END SUBROUTINE grid_dim_read_unit
201SUBROUTINE grid_dim_write_unit(this, unit)
202TYPE(grid_dim),
INTENT(in) :: this
203INTEGER,
INTENT(in) :: unit
205CHARACTER(len=40) :: form
208INQUIRE(unit, form=form)
209IF (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
229END SUBROUTINE grid_dim_write_unit
233SUBROUTINE grid_dim_display(this)
236print*,
'Number of points along x direction',this%nx
237print*,
'Number of points along y direction',this%ny
239END SUBROUTINE grid_dim_display
Set of functions that return a CHARACTER representation of the input variable.
Function to check whether a value is missing or not.
Utilities for CHARACTER variables.
Module for defining the extension and coordinates of a rectangular georeferenced grid.
Definitions of constants and functions for working with missing values.
Module for quickly interpreting the OPTIONAL parameters passed to a subprogram.
Derived type describing the extension of a grid and the geographical coordinates of each point.