source: CPL/oasis3/trunk/src/mod/oasis3/src/inidya.f @ 1677

Last change on this file since 1677 was 1677, checked in by aclsce, 12 years ago

Imported oasis3 (tag ipslcm5a) from cvs server to svn server (igcmg project).

File size: 5.9 KB
Line 
1      SUBROUTINE inidya
2C****
3C               *****************************
4C               * OASIS ROUTINE  -  LEVEL 0 *
5C               * -------------     ------- *
6C               *****************************
7C
8C**** *inidya*  - Initialize simulated dynamic allocation
9C
10C     Purpose:
11C     -------
12C     Set up pseudo-dynamic allocation of arrays.
13C     Define adresses and lengths of small arrays in big arrays
14C
15C**   Interface:
16C     ---------
17C       *CALL*  *inidya*
18C
19C     Input:
20C     -----
21C     None
22C
23C     Output:
24C     ------
25C     None
26C
27C     Workspace:
28C     ---------
29C     ineed
30C
31C     Externals:
32C     ---------
33C     chkmem
34C
35C     Reference:
36C     ---------
37C     See OASIS manual (1995) 
38C
39C     History:
40C     -------
41C       Version   Programmer     Date      Description
42C       -------   ----------     ----      ----------- 
43C       2.0       L. Terray      95/08/23  created 
44C       2.3       S. Valcke      99/04/30  added: printing levels
45C
46C %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
47C
48C* ---------------- Include files and USE of modules---------------------------
49C
50      USE mod_kinds_oasis
51      USE mod_parameter
52      USE mod_string
53      USE mod_memory
54      USE mod_unit
55      USE mod_printing
56C
57C* ---------------------------- Local declarations ----------------------
58C
59      INTEGER (kind=ip_intwp_p) il_memtot(2)
60      INTEGER (kind=ip_intwp_p), DIMENSION(:), ALLOCATABLE :: 
61     $     nsizold_grid_aux, nsiznew_grid_aux, nadrold_grid_aux, 
62     $     nadrnew_grid_aux
63C
64C* ---------------------------- Poema verses ----------------------------
65C
66C %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
67C
68C
69C* This routine will be called only if one field (at least) goes through Oasis
70C
71      IF (lg_oasis_field) THEN
72C     
73C*    1. Set up memory dynamic allocation
74C     --------------------------------
75C     
76         IF (nlogprt .GE. 1) THEN
77            WRITE (UNIT = nulou,FMT = *) ' '
78            WRITE (UNIT = nulou,FMT = *) ' '
79            WRITE (UNIT = nulou,FMT = *) 
80     $           '           ROUTINE inidya  -  Level 0'
81            WRITE (UNIT = nulou,FMT = *) 
82     $           '           **************     *******'
83            WRITE (UNIT = nulou,FMT = *) ' '
84            WRITE (UNIT = nulou,FMT = *) 
85     $           ' Set up memory dynamic allocation'
86            WRITE (UNIT = nulou,FMT = *) ' '
87            WRITE (UNIT = nulou,FMT = *) ' '
88         ENDIF
89C
90C* Allocation of local arrays
91C
92         ALLOCATE (nsizold_grid_aux(maxval(ig_grid_nbrbf)))
93         nsizold_grid_aux(:)=0
94         ALLOCATE (nsiznew_grid_aux(maxval(ig_grid_nbraf)))
95         nsiznew_grid_aux(:)=0
96         ALLOCATE (nadrold_grid_aux(maxval(ig_grid_nbrbf)))
97         nadrold_grid_aux(:)=0
98         ALLOCATE (nadrnew_grid_aux(maxval(ig_grid_nbraf)))
99         nadrnew_grid_aux(:)=0
100C     
101C* Zero size and adress arrays
102C     
103         CALL izero (nsizold, ig_nfield)
104         CALL izero (nsiznew, ig_nfield)
105         CALL izero (nadrold, ig_nfield)
106         CALL izero (nadrnew, ig_nfield)
107         CALL izero (nadrold_grid, ig_nfield)
108         CALL izero (nadrnew_grid, ig_nfield)
109C     
110C* Zero main storage area
111C     
112C* - Integer arrays: masks
113C     
114         CALL izero (mskold, ig_maxold_grid)
115         CALL izero (msknew, ig_maxnew_grid)
116C     
117C* - Real arrays: fields, grids, surfaces
118C     
119         CALL szero (fldold, ig_maxold)
120         CALL szero (fldnew, ig_maxnew)
121         CALL szero (xgrold, ig_maxold_grid)
122         CALL szero (ygrold, ig_maxold_grid)
123         CALL szero (xgrnew, ig_maxnew_grid)
124         CALL szero (ygrnew, ig_maxnew_grid)
125         CALL szero (surold, ig_maxold_grid)
126         CALL szero (surnew, ig_maxnew_grid)
127
128C     
129C* Get the sizes for each small array
130C     
131         DO 110 jf = 1, ig_nfield
132            nsizold(jf) = nlonbf(jf) * nlatbf(jf)
133            nsiznew(jf) = nlonaf(jf) * nlataf(jf)
134            nsizold_grid_aux (ig_grid_nbrbf(jf)) = 
135     $           nlonbf(jf) * nlatbf(jf)
136            nsiznew_grid_aux (ig_grid_nbraf(jf)) = 
137     $           nlonaf(jf) * nlataf(jf)
138 110     CONTINUE
139C     
140C* Get the pointers for each small array
141C     
142         nadrold(1) = 1
143         nadrnew(1) = 1
144         nadrold_grid_aux(1) = 1
145         nadrnew_grid_aux(1) = 1
146         nadrold_grid(1) = 1
147         nadrnew_grid(1) = 1
148         
149         DO ib = 2, maxval(ig_grid_nbrbf)
150            nadrold_grid_aux(ib) = nadrold_grid_aux(ib-1) + 
151     $           nsizold_grid_aux(ib-1)
152         ENDDO
153         DO ib = 2, maxval(ig_grid_nbraf)
154            nadrnew_grid_aux(ib) = nadrnew_grid_aux(ib-1) + 
155     $           nsiznew_grid_aux(ib-1)
156         ENDDO
157
158         DO 120 jf = 2, ig_nfield
159            nadrold(jf) = nadrold(jf-1) + nsizold(jf-1)
160            nadrnew(jf) = nadrnew(jf-1) + nsiznew(jf-1)
161            nadrold_grid(jf) = nadrold_grid_aux(ig_grid_nbrbf(jf))
162            nadrnew_grid(jf) = nadrnew_grid_aux(ig_grid_nbraf(jf))
163 120     CONTINUE
164C     
165C* Print memory required for field and grid arrays
166C
167         il_memtot(1) = ((ig_maxold + 3*ig_maxold_grid)*ip_realwp_p
168     $   + ig_maxold_grid*ip_intwp_p)/1000
169         il_memtot(2) = ((ig_maxnew + 3*ig_maxnew_grid)*ip_realwp_p
170     $   + ig_maxnew_grid*ip_intwp_p)/1000
171C
172         IF (nlogprt .GE. 1) THEN
173             WRITE (UNIT = nulou,FMT = 1001) il_memtot(1), il_memtot(2)
174         ENDIF
175 1001    FORMAT(1H ,5X,
176     $   'Memory (kB) requested for source field and grid arrays',
177     $    I10,/, 1H ,5X,
178     $   'Memory (kB) requested for target field and grid arrays', I10)
179C     
180C*    2. End of routine
181C     --------------
182C     
183         DEALLOCATE (nsizold_grid_aux)
184         DEALLOCATE (nsiznew_grid_aux)
185         DEALLOCATE (nadrold_grid_aux)
186         DEALLOCATE (nadrnew_grid_aux)
187C
188         IF (nlogprt .GE. 1) THEN
189            WRITE (UNIT = nulou,FMT = *) ' '
190            WRITE (UNIT = nulou,FMT = *) 
191     $           '          --------- End of routine inidya ---------'
192            CALL FLUSH (nulou)
193         ENDIF
194      ENDIF
195      RETURN
196      END
197
198
Note: See TracBrowser for help on using the repository browser.