Oasis3 4.0.2
chkpar.f
Go to the documentation of this file.
00001       SUBROUTINE chkpar
00002 C****
00003 C               *****************************
00004 C               * OASIS ROUTINE  -  LEVEL 0 *
00005 C               * -------------     ------- *
00006 C               *****************************
00007 C
00008 C**** *chkpar*  - Parameter checking
00009 C
00010 C     Purpose:
00011 C     -------
00012 C     Checks option compatibility between oasis and remote models
00013 C     as well as some basic dimension checks
00014 C
00015 C**   Interface:
00016 C     ---------
00017 C       *CALL*  *chkpar*
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
00030 C     Externals:
00031 C     ---------
00032 C     imaxim
00033 C
00034 C     Reference:
00035 C     ---------
00036 C     See OASIS manual (1995) 
00037 C
00038 C     History:
00039 C     -------
00040 C       Version   Programmer     Date      Description
00041 C       -------   ----------     ----      -----------  
00042 C       2.0       L. Terray      95/10/01  created
00043 C       2.2       L. Terray      97/11/13  added: check nitfn if cchan
00044 C                                                 equals NONE
00045 C       2.3       S. Valcke      99/04/30  added: printing levels
00046 C       2.3       S. Valcke      99/10/12  check if nninnfl and nninnflg
00047 C                                          are different
00048 C       2.4       S. Valcke      2K/02/03  check CLIM_MaxPOrt and jpfield
00049 C       2.4       S. Valcke      2K/02/03  check CLIM_MaxSegment and jpparal
00050 C
00051 C %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
00052 C
00053 C* --------------- Include files and use of modules---------------------------
00054 C
00055       USE mod_unit
00056       USE mod_parameter
00057       USE mod_string
00058       USE mod_extrapol
00059       USE mod_experiment
00060       USE mod_timestep
00061       USE mod_hardware
00062       USE mod_printing
00063 C
00064 C* ---------------------------- Local declarations ----------------------
00065 C
00066       INTEGER (kind=ip_intwp_p), DIMENSION(:), ALLOCATABLE :: itime, 
00067      $    iexch
00068 C
00069 C* ---------------------------- Poema verses ----------------------------
00070 C
00071 C %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
00072 C
00073 C*    1. Allocations and Initializations
00074 C        -------------------------------
00075 C
00076       IF (nlogprt .GE. 1) THEN
00077           WRITE (UNIT = nulou,FMT = *) ' '
00078           WRITE (UNIT = nulou,FMT = *) ' '
00079           WRITE (UNIT = nulou,FMT = *) 
00080      $    '           ROUTINE chkpar  -  Level 0'
00081           WRITE (UNIT = nulou,FMT = *) 
00082      $    '           **************     *******'
00083           WRITE (UNIT = nulou,FMT = *) ' '
00084           WRITE (UNIT = nulou,FMT = *) ' control of run time options'
00085           WRITE (UNIT = nulou,FMT = *) ' '
00086           WRITE (UNIT = nulou,FMT = *) ' '
00087           WRITE (UNIT = nulou,FMT = *) ' '
00088           CALL FLUSH(nulou)
00089       ENDIF
00090 C
00091 C* In the CLIM CASE, mstep, mfcpl and mdt are not defined anymore in inicmc.f.
00092 C
00093       IF (cchan.ne.'MPI1'.and.cchan.ne.'MPI2'.and.cchan.ne.'GSIP') then
00094 C
00095 C* Array allocation
00096 C
00097           ALLOCATE (itime(ig_nmodel))
00098           ALLOCATE (iexch(ig_nmodel))
00099 C
00100 C* Initialization of remote models time variables.
00101 C
00102           DO 110 jm = 1, ig_nmodel
00103             itime(jm) = mstep(jm) * mdt(jm)
00104             iexch(jm) = mfcpl(jm) * mdt(jm)
00105  110      CONTINUE
00106 
00107 C
00108 C*    2. Basic checks
00109 C        ------------
00110 C
00111 C*    3. Time compatibility checks
00112 C        -------------------------
00113 C
00114           DO 310 jm = 1, ig_nmodel
00115             WRITE (UNIT = nulou,FMT = *)'itime ',itime(jm)
00116             WRITE (UNIT = nulou,FMT = *)'ntime ',ntime
00117             IF (itime(jm) .NE. ntime) THEN
00118                 WRITE (UNIT = nulou,FMT = *) '        ***WARNING***'
00119                 WRITE (UNIT = nulou,FMT = *) 
00120      $              ' ===>>> : total runtime for model',jm
00121                 WRITE (UNIT = nulou,FMT = *)
00122      $              '          incompatible with coupler total time '
00123                 WRITE (UNIT = nulou,FMT = *) 
00124      $              ' ======         =======              '
00125                 WRITE (UNIT = nulou,FMT = *) ' '
00126                 WRITE (UNIT = nulou,FMT = *) 
00127      $              
00128 ' The current simulation uses asynchroneous      $              coupling'
00129                 WRITE (UNIT = nulou,FMT = *) 
00130      $              '                             -------------'
00131                 WRITE (UNIT = nulou,FMT = *) ' '
00132             ENDIF
00133 C
00134 C* The exchange frequency data sent from remote models is the
00135 C  smallest frequency used in a given model. This is a crude 
00136 C  check of the compatibility of coupling options.
00137 C
00138             WRITE (UNIT = nulou,FMT = *)'iexch ',iexch(jm)
00139             WRITE (UNIT = nulou,FMT = *)'nstep ',nstep
00140             IF (MOD(iexch(jm),nstep) .NE. 0) THEN
00141                 WRITE (UNIT = nulou,FMT = *) '        ***WARNING***'
00142                 WRITE (UNIT = nulou,FMT = *) 
00143      $              ' ===>>> : exchange time incompatible with model',
00144      $              jm
00145                 WRITE (UNIT = nulou,FMT = *) 
00146      $              ' ======            =====          '
00147                 WRITE (UNIT = nulou,FMT = *) ' '
00148                 WRITE (UNIT = nulou,FMT = *) 
00149      $              ' We STOP        !!! rerun with new  parameters'
00150                 WRITE (UNIT = nulou,FMT = *) 
00151      $              '                               ---------------'
00152                 WRITE (UNIT = nulou,FMT = *) ' '
00153                 CALL HALTE ('STOP in chkpar')
00154             ENDIF
00155  310      CONTINUE 
00156           DEALLOCATE (itime)
00157           DEALLOCATE (iexch)
00158       ENDIF
00159 C
00160 C
00161 C*    4. End of routine
00162 C        --------------
00163 C
00164       IF (nlogprt .GE. 1) THEN
00165           WRITE (UNIT = nulou,FMT = *) ' '
00166           WRITE (UNIT = nulou,FMT = *) 
00167      $    '          ---------- End of ROUTINE chkpar --------'
00168           CALL FLUSH (nulou)
00169       ENDIF
00170       RETURN
00171       END
00172 
00173 
 All Data Structures Namespaces Files Functions Variables Defines