New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
agrif_types.f90 in trunk/UTIL/CFG_TOOLS – NEMO

source: trunk/UTIL/CFG_TOOLS/agrif_types.f90 @ 1799

Last change on this file since 1799 was 1799, checked in by blelod, 14 years ago

First import cfg_tools see ticket #636

  • Property svn:executable set to *
File size: 8.3 KB
Line 
1!     
2MODULE agrif_types
3  !
4  PUBLIC
5  !   
6  !*****************************
7  ! Coordinates type definition
8  !*****************************
9  TYPE Coordinates
10     !
11     REAL*8, DIMENSION(:,:), POINTER :: nav_lon,nav_lat => NULL()
12     REAL*8, DIMENSION(:,:), POINTER :: glamv, glamu, glamt, glamf => NULL()
13     REAL*8, DIMENSION(:,:), POINTER :: gphit, gphiu, gphiv, gphif => NULL()
14     REAL*8, DIMENSION(:,:), POINTER :: e1t, e1u, e1v, e1f => NULL()
15     REAL*8, DIMENSION(:,:), POINTER :: e2t, e2u, e2v, e2f => NULL()
16     REAL*8, DIMENSION(:,:), POINTER :: bathy_level => NULL()
17     REAL*8, DIMENSION(:,:), POINTER :: bathy_meter => NULL()
18     REAL*8, DIMENSION(:,:,:),POINTER :: fmask,umask,vmask,tmask => NULL()
19     REAL*8, DIMENSION(:,:,:),POINTER :: e3t_ps,e3w_ps,gdept_ps,gdepwps => NULL()
20     REAL*8, DIMENSION(:,:),POINTER :: gdepw_ps => NULL()
21     REAL*8, DIMENSION(:), POINTER :: gdeptht => NULL()
22     INTEGER, DIMENSION(:) , POINTER :: time_steps => NULL()
23     !     
24  END TYPE Coordinates
25  !
26  !
27  !
28  TYPE mixed_coordinates
29   !
30     REAL*8, DIMENSION(:,:), POINTER :: nav_lon,nav_lat => NULL()
31     REAL*8, DIMENSION(:,:), POINTER :: glam => NULL()
32     REAL*8, DIMENSION(:,:), POINTER :: gphi => NULL()
33     REAL*8, DIMENSION(:,:), POINTER :: e1 => NULL()
34     REAL*8, DIMENSION(:,:), POINTER :: e2 => NULL()
35     REAL*8, DIMENSION(:,:), POINTER :: bathy_level => NULL()
36     REAL*8, DIMENSION(:,:), POINTER :: bathy_meter => NULL()
37     REAL*8, DIMENSION(:,:,:),POINTER :: fmask,umask,vmask,tmask => NULL()
38     REAL*8, DIMENSION(:,:,:),POINTER :: e3t_ps,e3w_ps,gdept_ps,gdepwps => NULL()
39     REAL*8, DIMENSION(:,:),POINTER :: gdepw_ps => NULL()
40     REAL*8, DIMENSION(:), POINTER :: gdeptht => NULL()
41     INTEGER, DIMENSION(:) , POINTER :: time_steps => NULL()
42     !     
43  END TYPE mixed_coordinates
44  !
45  !
46  !
47  CHARACTER*8,DIMENSION(10) :: flxtab = (/'socliot1','socliot2','socliopl',&
48       'socliocl','socliohu','socliowi','soshfldo','sohefldo','sowaflup','sofbt   '/)
49  !
50  !
51  !**************************************************************
52  ! Declaration of various input file variables (namelist.input)
53  !**************************************************************
54  !
55  INTEGER irafx,irafy
56  INTEGER nxfin,nyfin
57  INTEGER, PARAMETER :: nbghostcellsfine = 2
58  INTEGER, PARAMETER :: nbghostcellscoarse = 1
59  !     
60  INTEGER imin,jmin,imax,jmax,rho,rhot
61  INTEGER shlat
62  INTEGER N,type_bathy_interp
63  !
64  INTEGER jpizoom,jpjzoom,nb_connection_pts
65  !     
66  REAL*8 ppacr,ppdzmin,pphmax,ppkth,smoothing_factor,e3zps_min,e3zps_rat
67  REAL*8 psur,pa0,pa1,adatrj
68  !       
69  LOGICAL partial_steps,smoothing,bathy_update
70  LOGICAL new_topo,removeclosedseas,dimg,iom_activated
71  !       
72  CHARACTER*100 parent_bathy_level,elevation_database,parent_bathy_meter
73  CHARACTER*100 parent_coordinate_file,restart_file,updated_parent_file,restart_trc_file
74  CHARACTER*100 dimg_output_file,interp_type
75  !     
76  CHARACTER(len=80),DIMENSION(20) :: flx_Files, u_files, v_files
77  CHARACTER(len=255),DIMENSION(20) :: VAR_INTERP
78  !
79  NAMELIST /input_output/iom_activated
80  !
81  NAMELIST /coarse_grid_files/parent_coordinate_file,parent_bathy_level
82  !     
83  NAMELIST /bathymetry/new_topo,elevation_database,smoothing,smoothing_factor, &
84       nb_connection_pts,removeclosedseas,type_bathy_interp     
85  !     
86  NAMELIST /nesting/imin,imax,jmin,jmax,rho,rhot,bathy_update,updated_parent_file     
87  !
88  NAMELIST /vertical_grid/ppkth,ppacr,ppdzmin,pphmax,psur,pa0,pa1,N
89  !
90  NAMELIST /partial_cells/partial_steps,parent_bathy_meter,e3zps_min,e3zps_rat     
91  !
92  NAMELIST /nemo_coarse_grid/ jpizoom,jpjzoom 
93  !         
94  NAMELIST /forcing_files/ flx_files, u_files, v_files 
95  !           
96  NAMELIST /interp/ VAR_INTERP
97  !     
98  NAMELIST /restart/ restart_file,shlat,dimg,dimg_output_file,adatrj,interp_type 
99
100  NAMELIST /restart_trc/ restart_trc_file,interp_type 
101
102  INTEGER :: connectionsize = 3
103  !
104CONTAINS
105  !
106  !********************************************************
107  !subroutine agrif_grid_allocate            *
108  !                     *
109  !allocation of grid type elements          *
110  !      according to nx and ny           *
111  !                     *
112  !                     *
113  !********************************************************
114  !       
115  SUBROUTINE agrif_grid_allocate(Grid,nx,ny)
116    !
117    TYPE(Coordinates) :: Grid
118    INTEGER :: nx,ny
119    !
120    ALLOCATE(Grid%nav_lon(nx,ny),Grid%nav_lat(nx,ny))
121    !
122    ALLOCATE(Grid%glamt(nx,ny),Grid%glamu(nx,ny),Grid%glamv(nx,ny),Grid%glamf(nx,ny))
123    ALLOCATE(Grid%gphit(nx,ny),Grid%gphiu(nx,ny),Grid%gphiv(nx,ny),Grid%gphif(nx,ny))
124    !
125    ALLOCATE(Grid%e1t(nx,ny),Grid%e1u(nx,ny),Grid%e1v(nx,ny),Grid%e1f(nx,ny))
126    ALLOCATE(Grid%e2t(nx,ny),Grid%e2u(nx,ny),Grid%e2v(nx,ny),Grid%e2f(nx,ny))
127    !
128    ALLOCATE(Grid%bathy_level(nx,ny))
129    !
130  END SUBROUTINE agrif_grid_allocate
131  !
132  !
133  !********************************************************
134  !subroutine mixed_grid_allocate            *
135  !                     *
136  !allocation of grid type elements          *
137  !      according to nx and ny           *
138  !                     *
139  !                     *
140  !********************************************************
141  !       
142  SUBROUTINE mixed_grid_allocate(Grid,nx,ny)
143    !
144    TYPE(mixed_Coordinates) :: Grid
145    INTEGER :: nx,ny
146    !
147    ALLOCATE(Grid%nav_lon(nx,ny),Grid%nav_lat(nx,ny))
148    !
149    ALLOCATE(Grid%glam(nx,ny))
150    ALLOCATE(Grid%gphi(nx,ny))
151    !
152    ALLOCATE(Grid%e1(nx,ny))
153    ALLOCATE(Grid%e2(nx,ny))
154    !
155    ALLOCATE(Grid%bathy_level(nx,ny))
156    !
157  END SUBROUTINE mixed_grid_allocate
158  !
159  !
160!************************************************************************
161  !                           *
162  !   subroutine read_namelist                  *
163  !                           *
164  !   read variables contained in namelist.input file          *
165  !   filled in by user                      *
166  !                           *
167  !************************************************************************
168  !
169  SUBROUTINE read_namelist(namelistname)
170    !
171    IMPLICIT NONE
172    CHARACTER(len=80) :: namelistname
173    CHARACTER*255 :: output
174    LOGICAL :: is_it_there
175    INTEGER unit_nml
176    !     
177    FLX_FILES = '/NULL'
178    U_FILES = '/NULL'
179    V_FILES = '/NULL'
180    VAR_INTERP = 'NULL'
181    unit_nml = Agrif_Get_Unit()
182    !     
183    INQUIRE ( FILE = namelistname , EXIST = is_it_there )     
184    !
185    IF ( is_it_there ) THEN 
186       !
187       OPEN ( FILE   = namelistname , &
188            UNIT   =  unit_nml        , &
189            STATUS = 'OLD'            , &
190            FORM   = 'FORMATTED'      , &
191            ACTION = 'READ'           , &
192            ACCESS = 'SEQUENTIAL'     )     
193       !
194       REWIND(unit_nml)
195       READ (unit_nml , NML = input_output)
196       READ (unit_nml , NML = coarse_grid_files)
197       READ (unit_nml , NML = bathymetry)   
198       READ (unit_nml , NML = nesting) 
199       READ (unit_nml , NML = vertical_grid)
200       READ (unit_nml , NML = partial_cells)                   
201       READ (unit_nml , NML = nemo_coarse_grid ) 
202      ! READ (unit_nml , NML = forcing_files ) 
203       READ (unit_nml , NML = interp )   
204       READ (unit_nml , NML = restart )
205       READ (unit_nml , NML = restart_trc )
206       CLOSE(unit_nml)
207       !
208       irafx = rho
209       irafy = rho
210       imin = imin + jpizoom - 1
211       imax = imax + jpizoom - 1
212       jmin = jmin + jpjzoom - 1
213       jmax = jmax + jpjzoom - 1
214       !
215       !nxfin = (imax-imin)*irafx+nbghostcellsfine*2
216       !nyfin = (jmax-jmin)*irafy+nbghostcellsfine*2
217      !IF(imin>imax) THEN
218      !   nxfin = (722-imin+imax-1)*rho + NINT(1-(1./rho))
219      !ELSE
220      !   nxfin = (imax-imin+1)*rho + 1
221       !ENDIF
222      !    nyfin = (jmax-jmin+1)*rho + 1
223      !
224    ELSE
225       !
226       PRINT *,'namelist file ''',TRIM(namelistname),''' not found'
227       STOP 
228       !
229    END IF
230    !
231    !
232  END SUBROUTINE read_namelist
233
234  INTEGER FUNCTION agrif_int(x)
235
236    REAL :: x
237    INTEGER ::i
238
239    i = FLOOR(x) + 1
240
241    IF( ABS(x - i).LE.0.0001 )THEN
242       agrif_int = i
243    ELSE
244       agrif_int = i-1
245    ENDIF
246
247  END FUNCTION agrif_int
248  !
249  !*************************************************
250  !   function Agrif_Get_Unit                             
251  !*************************************************
252  !
253
254  INTEGER FUNCTION Agrif_Get_Unit()
255    !
256    INTEGER n
257    LOGICAL op
258    INTEGER :: nunit
259    INTEGER :: iii,out,iiimax 
260    !
261    DO n = 7,1000
262       !
263       INQUIRE(Unit=n,Opened=op)
264       !
265       IF (.NOT.op) EXIT
266       !     
267    ENDDO
268    !
269    Agrif_Get_Unit=n
270    !
271    !
272  END FUNCTION Agrif_Get_Unit
273  !
274END MODULE agrif_types
Note: See TracBrowser for help on using the repository browser.