1 | program create_coordinates |
---|
2 | !----------------------------------------------------------- |
---|
3 | ! |
---|
4 | ! to create coordinates file (e.g. 1_coordinates.nc) |
---|
5 | ! for fine grid from coarse grid (e.g. coordinates.nc) |
---|
6 | ! |
---|
7 | ! to make it we use a 4th order polynomial interpolation |
---|
8 | ! |
---|
9 | ! Created by Brice Lemaire on 12/2009. |
---|
10 | ! |
---|
11 | !----------------------------------------------------------- |
---|
12 | USE netcdf |
---|
13 | USE agrif_readwrite |
---|
14 | USE tools_brice |
---|
15 | !------------ |
---|
16 | IMPLICIT NONE |
---|
17 | ! |
---|
18 | TYPE(coordinates) :: G1, G2, G3, G4 !from agrif_types from agrif_readwrite |
---|
19 | TYPE(coordinates) :: fine_grid |
---|
20 | TYPE(mixed_coordinates) :: Gmix !from agrif_types from agrif_readwrite |
---|
21 | !INTEGER :: nxG1, nyG1, nxG2, nyG2, nxG3, nyG3, nxG4, nyG4 |
---|
22 | INTEGER :: narg,iargc |
---|
23 | INTEGER :: status |
---|
24 | CHARACTER(len=80) :: namelistname, Child_filename |
---|
25 | ! |
---|
26 | !!!Read input file (namelist file) |
---|
27 | narg = iargc() |
---|
28 | ! |
---|
29 | IF (narg == 0) THEN |
---|
30 | namelistname = 'namelist.input' |
---|
31 | ELSE |
---|
32 | CALL getarg(1,namelistname) |
---|
33 | ENDIF |
---|
34 | ! |
---|
35 | CALL read_namelist(namelistname) !imin,imax,jmin,jmax,parent_coordinate_file |
---|
36 | ! |
---|
37 | !!!Read parent coordinate file |
---|
38 | IF((imin.LT.imax).AND.(jmin.LT.jmax)) THEN |
---|
39 | status = Read_Coordinates(TRIM(parent_coordinate_file),G1) !from agrif_readwrite |
---|
40 | ELSEIF((imin.GE.imax).AND.(jmin.LT.jmax)) THEN |
---|
41 | status = Read_Coordinates(TRIM(parent_coordinate_file),G1) !from agrif_readwrite |
---|
42 | status = Read_Coordinates(TRIM(parent_coordinate_file),G2) !from agrif_readwrite |
---|
43 | ELSEIF((imin.GE.imax).AND.(jmin.GE.jmax)) THEN |
---|
44 | status = Read_Coordinates(TRIM(parent_coordinate_file),G1) !from agrif_readwrite |
---|
45 | status = Read_Coordinates(TRIM(parent_coordinate_file),G2) !from agrif_readwrite |
---|
46 | status = Read_Coordinates(TRIM(parent_coordinate_file),G3) !from agrif_readwrite |
---|
47 | status = Read_Coordinates(TRIM(parent_coordinate_file),G4) !from agrif_readwrite |
---|
48 | ENDIF |
---|
49 | ! |
---|
50 | ! |
---|
51 | !!!Create the mixed grid with U,V,F & W values |
---|
52 | IF((imin.LT.imax).AND.(jmin.LT.jmax)) THEN |
---|
53 | CALL mixed_grid(G1,Gmix) |
---|
54 | ELSEIF((imin.GE.imax).AND.(jmin.LT.jmax)) THEN |
---|
55 | CALL mixed_grid(G1,G2,Gmix) |
---|
56 | ELSEIF((imin.GE.imax).AND.(jmin.GE.jmax)) THEN |
---|
57 | CALL mixed_grid(G1,G2,G3,G4,Gmix) !from tools_brice |
---|
58 | !ELSEIF() |
---|
59 | ENDIF |
---|
60 | |
---|
61 | |
---|
62 | !print*, 'G1%nav_lat= ' |
---|
63 | !DO j=jmin-1,jmax+1 |
---|
64 | !print*, G1%nav_lat(imin-1:imax+1,j) |
---|
65 | !END DO |
---|
66 | |
---|
67 | !print*, 'G1%nav_lon= ' |
---|
68 | !DO j=jmin-1,jmax+1 |
---|
69 | !print*, G1%nav_lon(imin-1:imax+1,j) |
---|
70 | !END DO |
---|
71 | ! |
---|
72 | !!!Interpolation inside the mixed grid |
---|
73 | IF(rho>1) THEN |
---|
74 | CALL interp_grid(Gmix) !from tools_brice |
---|
75 | ENDIF |
---|
76 | ! |
---|
77 | !!!Define name of child coordinate file |
---|
78 | CALL set_child_name(parent_coordinate_file,Child_filename) !coordinates.nc -> 1_coordinates.nc |
---|
79 | ! |
---|
80 | !!!Allocation of child grid elements |
---|
81 | CALL agrif_grid_allocate(fine_grid,nx_fine,ny_fine) !from agrif_types |
---|
82 | ! |
---|
83 | !!!Break the mixed grid Gmix into 4 grids (G1%u, G1%v, G1%t, GI%f) |
---|
84 | CALL alloc_child_grid(Gmix,fine_grid) !from tools_brice |
---|
85 | ! |
---|
86 | print*, 'fine_grid%glamf= ' |
---|
87 | DO j=1,ny_fine |
---|
88 | print*, fine_grid%glamf(:,j) |
---|
89 | END DO |
---|
90 | !!!Read parent coordinate file |
---|
91 | status = Write_Coordinates(Child_filename,fine_grid,nx_fine,ny_fine) !from agrif_readwrite |
---|
92 | ! |
---|
93 | end program create_coordinates |
---|