Oasis3 4.0.2
inidya.f
Go to the documentation of this file.
00001       SUBROUTINE inidya
00002 C****
00003 C               *****************************
00004 C               * OASIS ROUTINE  -  LEVEL 0 *
00005 C               * -------------     ------- *
00006 C               *****************************
00007 C
00008 C**** *inidya*  - Initialize simulated dynamic allocation
00009 C
00010 C     Purpose:
00011 C     -------
00012 C     Set up pseudo-dynamic allocation of arrays.
00013 C     Define adresses and lengths of small arrays in big arrays
00014 C
00015 C**   Interface:
00016 C     ---------
00017 C       *CALL*  *inidya*
00018 C
00019 C     Input:
00020 C     -----
00021 C     None
00022 C
00023 C     Output:
00024 C     ------
00025 C     None
00026 C
00027 C     Workspace:
00028 C     ---------
00029 C     ineed
00030 C
00031 C     Externals:
00032 C     ---------
00033 C     chkmem
00034 C
00035 C     Reference:
00036 C     ---------
00037 C     See OASIS manual (1995) 
00038 C
00039 C     History:
00040 C     -------
00041 C       Version   Programmer     Date      Description
00042 C       -------   ----------     ----      -----------  
00043 C       2.0       L. Terray      95/08/23  created 
00044 C       2.3       S. Valcke      99/04/30  added: printing levels
00045 C
00046 C %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
00047 C
00048 C* ---------------- Include files and USE of modules---------------------------
00049 C
00050       USE mod_unit
00051       USE mod_parameter
00052       USE mod_string
00053       USE mod_memory
00054       USE mod_printing
00055 C
00056 C* ---------------------------- Local declarations ----------------------
00057 C
00058       INTEGER (kind=ip_intwp_p) il_memtot(2)
00059       INTEGER (kind=ip_intwp_p), DIMENSION(:), ALLOCATABLE :: 
00060      $     nsizold_grid_aux, nsiznew_grid_aux, nadrold_grid_aux, 
00061      $     nadrnew_grid_aux
00062 C
00063 C* ---------------------------- Poema verses ----------------------------
00064 C
00065 C %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
00066 C
00067       IF (nlogprt .GE. 2) THEN
00068           WRITE (UNIT = nulou,FMT = *)' '
00069           WRITE (UNIT = nulou,FMT = *)'     ROUTINE inidya  -  Level 0'
00070           WRITE (UNIT = nulou,FMT = *)'     **************     *******'
00071           WRITE (UNIT = nulou,FMT = *)' '
00072           WRITE (UNIT = nulou,FMT = *)' Setup memory dynamic allocation'
00073           WRITE (UNIT = nulou,FMT = *)' '
00074           CALL FLUSH(nulou)
00075       ENDIF
00076 C     
00077 C* This routine is called if one field (at least) goes through Oasis
00078 C
00079       IF (lg_oasis_field) THEN
00080 C
00081 C*    1. Set up memory dynamic allocation
00082 C     --------------------------------
00083 C
00084 C* Allocation of local arrays
00085 C
00086          ALLOCATE (nsizold_grid_aux(maxval(ig_grid_nbrbf)))
00087          nsizold_grid_aux(:)=0
00088          ALLOCATE (nsiznew_grid_aux(maxval(ig_grid_nbraf)))
00089          nsiznew_grid_aux(:)=0
00090          ALLOCATE (nadrold_grid_aux(maxval(ig_grid_nbrbf)))
00091          nadrold_grid_aux(:)=0
00092          ALLOCATE (nadrnew_grid_aux(maxval(ig_grid_nbraf)))
00093          nadrnew_grid_aux(:)=0
00094 C     
00095 C* Zero size and adress arrays
00096 C     
00097          CALL izero (nsizold, ig_nfield)
00098          CALL izero (nsiznew, ig_nfield)
00099          CALL izero (nadrold, ig_nfield)
00100          CALL izero (nadrnew, ig_nfield)
00101          CALL izero (nadrold_grid, ig_nfield)
00102          CALL izero (nadrnew_grid, ig_nfield)
00103 C     
00104 C* Zero main storage area
00105 C     
00106 C* - Integer arrays: masks
00107 C     
00108          CALL izero (mskold, ig_maxold_grid)
00109          CALL izero (msknew, ig_maxnew_grid)
00110 C     
00111 C* - Real arrays: fields, grids, surfaces
00112 C     
00113          CALL szero (fldold, ig_maxold)
00114          CALL szero (fldnew, ig_maxnew)
00115          CALL szero (xgrold, ig_maxold_grid)
00116          CALL szero (ygrold, ig_maxold_grid)
00117          CALL szero (xgrnew, ig_maxnew_grid)
00118          CALL szero (ygrnew, ig_maxnew_grid)
00119          CALL szero (surold, ig_maxold_grid)
00120          CALL szero (surnew, ig_maxnew_grid)
00121 
00122 C     
00123 C* Get the sizes for each small array
00124 C     
00125          DO 110 jf = 1, ig_nfield
00126             nsizold(jf) = nlonbf(jf) * nlatbf(jf)
00127             nsiznew(jf) = nlonaf(jf) * nlataf(jf)
00128             nsizold_grid_aux (ig_grid_nbrbf(jf)) = 
00129      $           nlonbf(jf) * nlatbf(jf)
00130             nsiznew_grid_aux (ig_grid_nbraf(jf)) = 
00131      $           nlonaf(jf) * nlataf(jf)
00132  110     CONTINUE
00133 C     
00134 C* Get the pointers for each small array
00135 C     
00136          nadrold(1) = 1
00137          nadrnew(1) = 1
00138          nadrold_grid_aux(1) = 1
00139          nadrnew_grid_aux(1) = 1
00140          nadrold_grid(1) = 1
00141          nadrnew_grid(1) = 1
00142          
00143          DO ib = 2, maxval(ig_grid_nbrbf)
00144             nadrold_grid_aux(ib) = nadrold_grid_aux(ib-1) + 
00145      $           nsizold_grid_aux(ib-1)
00146          ENDDO
00147          DO ib = 2, maxval(ig_grid_nbraf)
00148             nadrnew_grid_aux(ib) = nadrnew_grid_aux(ib-1) + 
00149      $           nsiznew_grid_aux(ib-1)
00150          ENDDO
00151 
00152          DO 120 jf = 2, ig_nfield
00153             nadrold(jf) = nadrold(jf-1) + nsizold(jf-1)
00154             nadrnew(jf) = nadrnew(jf-1) + nsiznew(jf-1)
00155             nadrold_grid(jf) = nadrold_grid_aux(ig_grid_nbrbf(jf))
00156             nadrnew_grid(jf) = nadrnew_grid_aux(ig_grid_nbraf(jf))
00157  120     CONTINUE
00158 C     
00159 C* Print memory required for field and grid arrays
00160 C
00161          il_memtot(1) = ((ig_maxold + 3*ig_maxold_grid)*ip_realwp_p
00162      $   + ig_maxold_grid*ip_intwp_p)/1000
00163          il_memtot(2) = ((ig_maxnew + 3*ig_maxnew_grid)*ip_realwp_p
00164      $   + ig_maxnew_grid*ip_intwp_p)/1000
00165 C
00166          IF (nlogprt .GE. 1) THEN
00167              WRITE (UNIT = nulou,FMT = 1001) il_memtot(1), il_memtot(2)
00168          ENDIF
00169  1001    FORMAT(1H ,5X,
00170      $   'Memory (kB) requested for source field and grid arrays',
00171      $    I10,/, 1H ,5X,
00172      $   'Memory (kB) requested for target field and grid arrays', I10)
00173 C     
00174 C*    2. End of routine
00175 C     --------------
00176 C     
00177          DEALLOCATE (nsizold_grid_aux)
00178          DEALLOCATE (nsiznew_grid_aux)
00179          DEALLOCATE (nadrold_grid_aux)
00180          DEALLOCATE (nadrnew_grid_aux)
00181 C
00182          IF (nlogprt .GE. 2) THEN
00183             WRITE (UNIT = nulou,FMT = *)' '
00184             WRITE (UNIT = nulou,FMT = *) 
00185      $           '          --------- End of ROUTINE inidya ---------'
00186             CALL FLUSH (nulou)
00187          ENDIF
00188       ENDIF
00189       RETURN
00190       END
00191 
00192 
 All Data Structures Namespaces Files Functions Variables Defines