Oasis3 4.0.2
|
00001 SUBROUTINE updtim (kiter) 00002 C**** 00003 C ***************************** 00004 C * OASIS ROUTINE - LEVEL 1 * 00005 C * ------------- ------- * 00006 C ***************************** 00007 C 00008 C**** *updtim* - Update time 00009 C 00010 C Purpose: 00011 C ------- 00012 C Increment date since run start 00013 C 00014 C** Interface: 00015 C --------- 00016 C *CALL* *updtim (kiter)* 00017 C 00018 C Input: 00019 C ----- 00020 C kiter : iteration number 00021 C 00022 C Output: 00023 C ------ 00024 C None 00025 C 00026 C Workspace: 00027 C --------- 00028 C ilmoi : work array for calendar months length (integer 1D) 00029 C 00030 C Externals: 00031 C --------- 00032 C calend 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 1.0 L. Terray 94/01/01 created 00043 C 2.0 L. Terray 95/09/01 modified: new structure 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_timestep 00053 USE mod_calendar 00054 USE mod_printing 00055 C 00056 C* ---------------------------- Local declarations ---------------------- 00057 C 00058 INTEGER (kind=ip_intwp_p) ilmoi(12) 00059 C 00060 C* ---------------------------- Local functions ------------------------- 00061 C 00062 C* - Time functions 00063 C ncth --->>> turn seconds into hours 00064 C 00065 ncth(ksec) = ksec / 3600 00066 C 00067 C* ---------------------------- Poema verses ---------------------------- 00068 C 00069 C %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00070 C 00071 C* 1. Initializations 00072 C --------------- 00073 C 00074 IF (nlogprt .GE. 2) THEN 00075 WRITE (UNIT = nulou,FMT = *)' ' 00076 WRITE (UNIT = nulou,FMT = *)' ROUTINE updtim - Level 1' 00077 WRITE (UNIT = nulou,FMT = *)' ************** *******' 00078 WRITE (UNIT = nulou,FMT = *)' ' 00079 WRITE (UNIT = nulou,FMT = *) 00080 $ ' Increment model date since run start ' 00081 WRITE (UNIT = nulou,FMT = *)' ' 00082 CALL FLUSH(nulou) 00083 ENDIF 00084 ilmoi(:)=0 00085 IF (lg_oasis_field) THEN 00086 C 00087 C* Check if we go to next day 00088 C 00089 C* Simulated time in seconds 00090 C 00091 isecond = kiter * nstep 00092 zsecond = float (isecond) 00093 C 00094 C* Get number of days completed so far 00095 C 00096 iday = int ((zsecond+0.5) / 86400.) 00097 C 00098 C* Get seconds gone for current day 00099 C 00100 idaysec = iday * 86400 00101 ihour = ncth (isecond - idaysec) 00102 C 00103 C 00104 C* 2. Get time data 00105 C ------------- 00106 C 00107 CALL calend (njini, nmini, naini, iday, ncaltype, 00108 $ njnow, nmnow, nanow, ilmoi) 00109 C 00110 C 00111 C* 3. Print current date and time 00112 C --------------------------- 00113 C 00114 C #slo - Output reduced for nlogprt=0 00115 IF (nlogprt .GE. 1) THEN 00116 WRITE (UNIT = nulou,FMT = *) ' ' 00117 WRITE (UNIT = nulou,FMT = *) 00118 $ ' ****************** ' 00119 WRITE (UNIT = nulou,FMT = *) 00120 $ ' * Model run date * ' 00121 WRITE (UNIT = nulou,FMT = *) 00122 $ ' * -------------- * ' 00123 WRITE (UNIT = nulou,FMT = *) 00124 $ ' ****************** ' 00125 WRITE (UNIT = nulou,FMT = *) ' ' 00126 WRITE (UNIT = nulou,FMT = *) ' Year --->>> ',nanow 00127 WRITE (UNIT = nulou,FMT = *) ' Month --->>> ',nmnow 00128 WRITE (UNIT = nulou,FMT = *) ' Day --->>> ',njnow 00129 WRITE (UNIT = nulou,FMT = *) ' Hour --->>> ',ihour 00130 WRITE (UNIT = nulou,FMT = *) ' ' 00131 ENDIF 00132 C 00133 IF (njnow .GT. 15) THEN 00134 nmone = nmnow 00135 nmtwo = 1 + MOD(nmnow,12) 00136 njone = 15 00137 njtwo = 15 + ilmoi(nmone) 00138 ndone = 15 00139 ndtwo = ilmoi(nmone) 00140 nsrec = nmnow 00141 IF (njdeb .LT. 15) THEN 00142 nmrec = nmnow + 12 * (nanow - nadeb) - nmdeb + 1 00143 ELSE 00144 nmrec = nmnow + 12 * (nanow - nadeb) - nmdeb 00145 ENDIF 00146 ELSE 00147 nmone = 1 + MOD(nmnow + 10,12) 00148 nmtwo = nmnow 00149 njone = 15 - ilmoi(nmone) 00150 njtwo = 15 00151 ndone = 0 00152 ndtwo = 15 00153 nsrec = nmnow - 1 00154 IF (njdeb .LT. 15) THEN 00155 nmrec = nmnow + 12 * (nanow - nadeb) - nmdeb 00156 ELSE 00157 nmrec = nmnow - 1 + 12 * (nanow - nadeb) - nmdeb 00158 ENDIF 00159 ENDIF 00160 ENDIF 00161 C 00162 C 00163 C* 4. End of routine 00164 C -------------- 00165 C 00166 IF (nlogprt .GE. 2) THEN 00167 WRITE (UNIT = nulou,FMT = *) ' ' 00168 WRITE (UNIT = nulou,FMT = *) 00169 $ ' --------- End of ROUTINE updtim ---------' 00170 CALL FLUSH (nulou) 00171 ENDIF 00172 RETURN 00173 END 00174 00175