ROMS
Loading...
Searching...
No Matches
mod_storage Module Reference

Data Types

type  t_storage
 

Functions/Subroutines

subroutine, public allocate_storage
 
subroutine, public deallocate_storage (ng)
 

Variables

type(t_storage), dimension(:), allocatable storage
 
logical lrvec
 
logical, dimension(:,:), allocatable pick
 
integer ncv
 
integer nev
 
integer lworkl
 
integer, dimension(:), allocatable lworkd
 
integer, dimension(:,:), allocatable iparam
 
integer, dimension(:,:), allocatable ipntr
 
integer, dimension(:), allocatable ido
 
integer, dimension(:), allocatable info
 
real(r8sigmai
 
real(r8sigmar
 
character(len=1) bmat
 
character(len=1) howmany
 
character(len=2) which
 
real(r8), dimension(:,:), allocatable rvaluer
 
real(r8), dimension(:,:), allocatable rvaluei
 
real(r8), dimension(:,:), allocatable norm
 
real(r8), dimension(:,:), allocatable sworkl
 
real(r8), dimension(:,:), allocatable sworkev
 
real(r8), dimension(:), allocatable swork
 
real(r8), dimension(:), pointer sworkr
 
integer, dimension(8) iaitr
 
integer, dimension(8) iaup2
 
integer, dimension(20) iaupd
 
logical, dimension(5) laitr
 
logical, dimension(5) laup2
 
real(r8), dimension(8) raitr
 
real(r8), dimension(2) raup2
 
integer logfil
 
integer ndigit
 
integer mgetv0
 
integer msaupd
 
integer msaup2
 
integer msaitr
 
integer mseigt
 
integer msapps
 
integer msgets
 
integer mseupd
 
integer mnaupd
 
integer mnaup2
 
integer mnaitr
 
integer mneigh
 
integer mnapps
 
integer mngets
 
integer mneupd
 
integer mcaupd
 
integer mcaup2
 
integer mcaitr
 
integer mceigh
 
integer mcapps
 
integer mcgets
 
integer mceupd
 

Function/Subroutine Documentation

◆ allocate_storage()

subroutine, public mod_storage::allocate_storage

Definition at line 178 of file mod_storage.F.

179!
180!=======================================================================
181! !
182! This routine allocates and initialize module variables. For now, !
183! only non-nested applications are considered. !
184! !
185!=======================================================================
186!
187 USE mod_scalars
188!
189! Local variable declarations
190!
191 integer :: i, j, ng
192
193 integer, allocatable :: Mstr(:), Mend(:)
194!
195 real(r8), parameter :: IniVal = 0.0_r8
196!
197!-----------------------------------------------------------------------
198! Allocate module variables.
199!-----------------------------------------------------------------------
200!
201! Allocate local dimension parameters.
202!
203 allocate ( mstr(ngrids) )
204 allocate ( mend(ngrids) )
205!
206! Allocate parameters associated with nested grids.
207!
208 allocate ( ido(ngrids) )
209 allocate ( info(ngrids) )
210 allocate ( lworkd(ngrids) )
211
212 allocate ( iparam(11,ngrids) )
213# if defined AFT_EIGENMODES || defined FT_EIGENMODES
214 allocate ( ipntr(14,ngrids) )
215# else
216 allocate ( ipntr(11,ngrids) )
217# endif
218!
219! Determine size of work array SworkL:
220!
221# if defined OPT_PERTURBATION
222 lworkl=ncv*(ncv+8)
223# elif defined HESSIAN_SV
224 lworkl=ncv*(ncv+8)
225# elif defined HESSIAN_FSV
226 lworkl=ncv*(ncv+8)
227# elif defined FORCING_SV
228 lworkl=ncv*(ncv+8)
229# elif defined STOCHASTIC_OPT
230 lworkl=ncv*(ncv+8)
231# elif defined SO_SEMI
232 lworkl=ncv*(ncv+8)
233# elif defined FT_EIGENMODES || defined AFT_EIGENMODES
234 lworkl=3*ncv*ncv+6*ncv
235# endif
236# ifdef SO_SEMI
237 DO ng=1,ngrids
238 nsemi(ng)=1+ntimes(ng)/nadj(ng)
239 END DO
240# endif
241!
242! Set local dimensions of storage arrays according to the propagator
243! driver.
244!
245 DO ng=1,ngrids
246# if defined HESSIAN_FSV || defined HESSIAN_SO || defined HESSIAN_SV
247 mstr(ng)=1
248 mend(ng)=ninner
249 lworkd(ng)=3*ninner
250# else
251 mstr(ng)=nstr(ng)
252 mend(ng)=nend(ng)
253 lworkd(ng)=3*nstate(ng)
254# endif
255 END DO
256!
257! Allocate structure.
258!
259 allocate ( storage(ngrids) )
260
261 DO ng=1,ngrids
262 allocate ( storage(ng) % Bvec(mstr(ng):mend(ng),ncv) )
263 dmem(ng)=dmem(ng)+real((mend(ng)-mstr(ng))*ncv,r8)
264
265 allocate ( storage(ng) % Rvector(mstr(ng):mend(ng),nev+1) )
266 dmem(ng)=dmem(ng)+real((mend(ng)-mstr(ng))*(nev+1),r8)
267
268 allocate ( storage(ng) % SworkD(lworkd(ng)) )
269 dmem(ng)=dmem(ng)+real(lworkd(ng),r8)
270
271 allocate ( storage(ng) % resid(mstr(ng):mend(ng)) )
272 dmem(ng)=dmem(ng)+real(mend(ng)-mstr(ng),r8)
273
274# ifdef STOCHASTIC_OPT
275 allocate ( storage(ng) % ad_Work(maxval(mstate)) )
276 dmem(ng)=dmem(ng)+real(maxval(mstate),r8)
277# endif
278
279# if defined STOCHASTIC_OPT && defined HESSIAN_SO
280 allocate ( storage(ng) % my_state(nstr(ng):nend(ng)) )
281 dmem(ng)=dmem(ng)+real(nend(ng)-nstr(ng),r8)
282# endif
283
284# ifdef SO_SEMI
285 allocate ( storage(ng) % so_state(mstr(ng):mend(ng),nsemi(ng)) )
286 dmem(ng)=dmem(ng)+real((mend(ng)-mstr(ng))*nsemi(ng),r8)
287# endif
288 END DO
289!
290! Allocate other arrays.
291!
292 ng=1
293!
294 allocate ( pick(ncv,ngrids) )
295 dmem(ng)=dmem(ng)+real(ncv*ngrids,r8)
296
297 allocate ( norm(nev+1,ngrids) )
298 dmem(ng)=dmem(ng)+real((nev+1)*ngrids,r8)
299
300 allocate ( rvaluer(nev+1,ngrids) )
301 dmem(ng)=dmem(ng)+real((nev+1)*ngrids,r8)
302
303 allocate ( rvaluei(nev+1,ngrids) )
304 dmem(ng)=dmem(ng)+real((nev+1)*ngrids,r8)
305
306 allocate ( sworkev(3*ncv,ngrids) )
307 dmem(ng)=dmem(ng)+3.0_r8*real(ncv,r8)
308
309 allocate ( sworkl(lworkl,ngrids) )
310 dmem(ng)=dmem(ng)+real(lworkl*ngrids,r8)
311
312 allocate ( sworkr(maxval(mstate)) )
313 dmem(ng)=dmem(ng)+real(maxval(mstate),r8)
314
315# ifdef DISTRIBUTE
316 allocate ( swork(maxval(mstate)) )
317 dmem(ng)=dmem(ng)+real(maxval(mstate),r8)
318# endif
319!
320!-----------------------------------------------------------------------
321! Initialize module variables.
322!-----------------------------------------------------------------------
323!
324 iparam=0
325 ipntr=0
326
327 DO ng=1,ngrids
328 DO j=1,ncv
329 pick(j,ng) = .true.
330 DO i=mstr(ng),mend(ng)
331 storage(ng) % Bvec(i,j) = inival
332 END DO
333 END DO
334 DO j=1,nev+1
335 norm(j,ng) = inival
336 rvaluer(j,ng) = inival
337 rvaluei(j,ng) = inival
338 DO i=mstr(ng),mend(ng)
339 storage(ng) % Rvector(i,j) = inival
340 END DO
341 END DO
342 DO i=mstr(ng),mend(ng)
343 storage(ng) % resid(i) = inival
344 END DO
345# ifdef STOCHASTIC_OPT
346 DO i=1,maxval(mstate)
347 storage(ng) % ad_Work(i) = inival
348 END DO
349# endif
350# if defined STOCHASTIC_OPT && defined HESSIAN_SO
351 DO i=nstr(ng),nend(ng)
352 storage(ng) % my_state(i) = inival
353 END DO
354# endif
355# ifdef SO_SEMI
356 DO j=1,nsemi(ng)
357 DO i=mstr(ng),mend(ng)
358 storage(ng) % so_state(i,j) = inival
359 END DO
360 END DO
361# endif
362 END DO
363 DO i=1,maxval(mstate)
364 sworkr(i) = inival
365 END DO
366# ifdef DISTRIBUTE
367 DO i=1,maxval(mstate)
368 swork(i) = inival
369 END DO
370# endif
371!
372 DO ng=1,ngrids
373 DO i=1,lworkd(ng)
374 storage(ng) % SworkD(i) = inival
375 END DO
376 DO i=1,3*ncv
377 sworkev(i,ng) = inival
378 END DO
379 DO i=1,lworkl
380 sworkl(i,ng) = inival
381 END DO
382 END DO
383!
384 RETURN
integer ninner
integer, dimension(:), allocatable ntimes
integer, dimension(:), allocatable nadj

References mod_param::dmem, ido, info, iparam, ipntr, lworkd, lworkl, mod_param::mstate, mod_scalars::nadj, ncv, mod_param::nend, nev, mod_param::ngrids, mod_scalars::ninner, norm, mod_param::nsemi, mod_param::nstate, mod_param::nstr, mod_scalars::ntimes, pick, rvaluei, rvaluer, storage, swork, sworkev, sworkl, and sworkr.

◆ deallocate_storage()

subroutine, public mod_storage::deallocate_storage ( integer, intent(in) ng)

Definition at line 387 of file mod_storage.F.

388!
389!=======================================================================
390! !
391! This routine deallocates and initialize module variables. !
392! !
393!=======================================================================
394!
395 USE mod_param, ONLY : ngrids
396!
397! Imported variable declarations
398!
399 integer, intent(in) :: ng
400
401# ifdef SUBOBJECT_DEALLOCATION
402!
403!-----------------------------------------------------------------------
404! Deallocate each variable in the derived-type T_STORAGE structure
405! separately.
406!-----------------------------------------------------------------------
407!
408 IF (associated(storage(ng)%Bvec)) THEN
409 deallocate ( storage(ng)%Bvec )
410 END IF
411
412 IF (associated(storage(ng)%Rvector)) THEN
413 deallocate ( storage(ng)%Rvector )
414 END IF
415
416 IF (associated(storage(ng)%SworkD)) THEN
417 deallocate ( storage(ng)%SworkD )
418 END IF
419
420 IF (associated(storage(ng)%resid)) THEN
421 deallocate ( storage(ng)%resid )
422 END IF
423
424# ifdef STOCHASTIC_OPT
425 IF (associated(storage(ng)%ad_Work)) THEN
426 deallocate ( storage(ng)%ad_Work )
427 END IF
428# endif
429
430# if defined STOCHASTIC_OPT && defined HESSIAN_SO
431 IF (associated(storage(ng)%my_state)) THEN
432 deallocate ( storage(ng)%my_state )
433 END IF
434# endif
435
436# ifdef SO_SEMI
437 IF (associated(storage(ng)%so_state)) THEN
438 deallocate ( storage(ng)%so_state )
439 END IF
440# endif
441# endif
442!
443!-----------------------------------------------------------------------
444! Deallocate derived-type STORAGE structure.
445!-----------------------------------------------------------------------
446!
447 IF (ng.eq.ngrids) THEN
448 IF (allocated(storage)) deallocate ( storage )
449 END IF
450!
451!-----------------------------------------------------------------------
452! Deallocate other variables in module.
453!-----------------------------------------------------------------------
454!
455 IF (allocated(mstr)) deallocate ( mstr )
456 IF (allocated(mend)) deallocate ( mend )
457 IF (allocated(ido)) deallocate ( ido )
458 IF (allocated(info)) deallocate ( info )
459 IF (allocated(lworkd)) deallocate ( lworkd )
460 IF (allocated(iparam)) deallocate ( iparam )
461 IF (allocated(ipntr)) deallocate ( ipntr )
462 IF (allocated(pick)) deallocate ( pick )
463 IF (allocated(norm)) deallocate ( norm )
464 IF (allocated(rvaluer)) deallocate ( rvaluer )
465 IF (allocated(rvaluei)) deallocate ( rvaluei )
466 IF (allocated(sworkev)) deallocate ( sworkev )
467 IF (allocated(sworkl)) deallocate ( sworkl )
468 IF (allocated(sworkr)) deallocate ( sworkr )
469# ifdef DISTRIBUTE
470 IF (allocated(swork)) deallocate ( swork )
471# endif
472!
473 RETURN
integer ngrids
Definition mod_param.F:113

References ido, info, iparam, ipntr, lworkd, mod_param::ngrids, norm, pick, rvaluei, rvaluer, storage, swork, sworkev, sworkl, and sworkr.

Variable Documentation

◆ bmat

character (len=1) mod_storage::bmat

Definition at line 120 of file mod_storage.F.

120 character (len=1) :: bmat ! eigenvalue problem ID

Referenced by get_gst_mod::get_gst_nf90(), get_gst_mod::get_gst_pio(), wrt_gst_mod::wrt_gst_nf90(), and wrt_gst_mod::wrt_gst_pio().

◆ howmany

character (len=1) mod_storage::howmany

Definition at line 121 of file mod_storage.F.

121 character (len=1) :: howmany ! basis functions ID

Referenced by get_gst_mod::get_gst_nf90(), get_gst_mod::get_gst_pio(), wrt_gst_mod::wrt_gst_nf90(), and wrt_gst_mod::wrt_gst_pio().

◆ iaitr

integer, dimension(8) mod_storage::iaitr

◆ iaup2

◆ iaupd

◆ ido

integer, dimension(:), allocatable mod_storage::ido

Definition at line 110 of file mod_storage.F.

110 integer, allocatable :: ido(:) ! reverse communication flag

Referenced by allocate_storage(), deallocate_storage(), get_gst_mod::get_gst_nf90(), get_gst_mod::get_gst_pio(), wrt_gst_mod::wrt_gst_nf90(), and wrt_gst_mod::wrt_gst_pio().

◆ info

integer, dimension(:), allocatable mod_storage::info

Definition at line 111 of file mod_storage.F.

111 integer, allocatable :: info(:) ! information and error flag

Referenced by allocate_storage(), deallocate_storage(), roms_kernel_mod::iram_error(), roms_kernel_mod::iram_error(), wrt_gst_mod::wrt_gst_nf90(), and wrt_gst_mod::wrt_gst_pio().

◆ iparam

integer, dimension(:,:), allocatable mod_storage::iparam

◆ ipntr

integer, dimension(:,:), allocatable mod_storage::ipntr

◆ laitr

logical, dimension(5) mod_storage::laitr

◆ laup2

◆ logfil

integer mod_storage::logfil

Definition at line 165 of file mod_storage.F.

165 integer :: logfil, ndigit, mgetv0

◆ lrvec

logical mod_storage::lrvec

Definition at line 95 of file mod_storage.F.

95 logical :: Lrvec ! Ritz values switch

◆ lworkd

integer, dimension(:), allocatable mod_storage::lworkd

Definition at line 104 of file mod_storage.F.

104 integer, allocatable :: LworkD(:) ! size of array SworkD

Referenced by allocate_storage(), and deallocate_storage().

◆ lworkl

integer mod_storage::lworkl

◆ mcaitr

integer mod_storage::mcaitr

Definition at line 168 of file mod_storage.F.

◆ mcapps

integer mod_storage::mcapps

Definition at line 168 of file mod_storage.F.

◆ mcaup2

integer mod_storage::mcaup2

Definition at line 168 of file mod_storage.F.

◆ mcaupd

integer mod_storage::mcaupd

Definition at line 168 of file mod_storage.F.

168 integer :: mcaupd, mcaup2, mcaitr, mceigh, mcapps, mcgets, mceupd

◆ mceigh

integer mod_storage::mceigh

Definition at line 168 of file mod_storage.F.

◆ mceupd

integer mod_storage::mceupd

Definition at line 168 of file mod_storage.F.

◆ mcgets

integer mod_storage::mcgets

Definition at line 168 of file mod_storage.F.

◆ mgetv0

integer mod_storage::mgetv0

Definition at line 165 of file mod_storage.F.

◆ mnaitr

integer mod_storage::mnaitr

Definition at line 167 of file mod_storage.F.

◆ mnapps

integer mod_storage::mnapps

Definition at line 167 of file mod_storage.F.

◆ mnaup2

integer mod_storage::mnaup2

Definition at line 167 of file mod_storage.F.

◆ mnaupd

integer mod_storage::mnaupd

Definition at line 167 of file mod_storage.F.

167 integer :: mnaupd, mnaup2, mnaitr, mneigh, mnapps, mngets, mneupd

◆ mneigh

integer mod_storage::mneigh

Definition at line 167 of file mod_storage.F.

◆ mneupd

integer mod_storage::mneupd

Definition at line 167 of file mod_storage.F.

◆ mngets

integer mod_storage::mngets

Definition at line 167 of file mod_storage.F.

◆ msaitr

integer mod_storage::msaitr

Definition at line 166 of file mod_storage.F.

◆ msapps

integer mod_storage::msapps

Definition at line 166 of file mod_storage.F.

◆ msaup2

integer mod_storage::msaup2

Definition at line 166 of file mod_storage.F.

◆ msaupd

integer mod_storage::msaupd

Definition at line 166 of file mod_storage.F.

166 integer :: msaupd, msaup2, msaitr, mseigt, msapps, msgets, mseupd

◆ mseigt

integer mod_storage::mseigt

Definition at line 166 of file mod_storage.F.

◆ mseupd

integer mod_storage::mseupd

Definition at line 166 of file mod_storage.F.

◆ msgets

integer mod_storage::msgets

Definition at line 166 of file mod_storage.F.

◆ ncv

◆ ndigit

integer mod_storage::ndigit

Definition at line 165 of file mod_storage.F.

◆ nev

◆ norm

real(r8), dimension(:,:), allocatable mod_storage::norm

Definition at line 128 of file mod_storage.F.

128 real(r8), allocatable :: norm(:,:) ! [NEV+1,Ngrids]

Referenced by allocate_storage(), and deallocate_storage().

◆ pick

logical, dimension(:,:), allocatable mod_storage::pick

Definition at line 96 of file mod_storage.F.

96 logical, allocatable :: pick(:,:) ! Ritz vectors, [NCV,Ngrids]

Referenced by allocate_storage(), and deallocate_storage().

◆ raitr

real(r8), dimension(8) mod_storage::raitr

◆ raup2

◆ rvaluei

real(r8), dimension(:,:), allocatable mod_storage::rvaluei

Definition at line 127 of file mod_storage.F.

127 real(r8), allocatable :: RvalueI(:,:) ! [NEV+1,Ngrids]

Referenced by allocate_storage(), and deallocate_storage().

◆ rvaluer

real(r8), dimension(:,:), allocatable mod_storage::rvaluer

Definition at line 126 of file mod_storage.F.

126 real(r8), allocatable :: RvalueR(:,:) ! [NEV+1,Ngrids]

Referenced by allocate_storage(), and deallocate_storage().

◆ sigmai

real(r8) mod_storage::sigmai

Definition at line 115 of file mod_storage.F.

115 real(r8) :: sigmaI ! real part shifts

◆ sigmar

real(r8) mod_storage::sigmar

Definition at line 116 of file mod_storage.F.

116 real(r8) :: sigmaR ! imaginary part shifts

◆ storage

type (t_storage), dimension(:), allocatable mod_storage::storage

◆ swork

real(r8), dimension(:), allocatable mod_storage::swork

Definition at line 132 of file mod_storage.F.

132 real(r8), allocatable :: Swork(:) ! [Mstate]

Referenced by ad_pack(), ad_pack_tile(), ad_unpack(), ad_unpack_tile(), allocate_storage(), deallocate_storage(), tl_pack(), tl_unpack(), and tl_unpack_tile().

◆ sworkev

real(r8), dimension(:,:), allocatable mod_storage::sworkev

Definition at line 130 of file mod_storage.F.

130 real(r8), allocatable :: SworkEV(:,:) ! [3*NCV,Ngrids]

Referenced by allocate_storage(), and deallocate_storage().

◆ sworkl

real(r8), dimension(:,:), allocatable mod_storage::sworkl

Definition at line 129 of file mod_storage.F.

129 real(r8), allocatable :: SworkL(:,:) ! [LworkL,Ngrids]

Referenced by allocate_storage(), deallocate_storage(), get_gst_mod::get_gst_nf90(), get_gst_mod::get_gst_pio(), wrt_gst_mod::wrt_gst_nf90(), and wrt_gst_mod::wrt_gst_pio().

◆ sworkr

real(r8), dimension(:), pointer mod_storage::sworkr

Definition at line 134 of file mod_storage.F.

134 real(r8), pointer :: SworkR(:) ! [Mstate]

Referenced by allocate_storage(), and deallocate_storage().

◆ which

character (len=2) mod_storage::which

Definition at line 122 of file mod_storage.F.

122 character (len=2) :: which ! Ritz values ID

Referenced by get_gst_mod::get_gst_nf90(), get_gst_mod::get_gst_pio(), wrt_gst_mod::wrt_gst_nf90(), and wrt_gst_mod::wrt_gst_pio().