diff --git a/examples/example_hl.f90 b/examples/example_hl.f90 deleted file mode 100644 index 487e55974e038e289e7ef30e78e256fd3ac1ebc3..0000000000000000000000000000000000000000 --- a/examples/example_hl.f90 +++ /dev/null @@ -1,277 +0,0 @@ -!! Copyright (c) 2013-2024 MPI-M, Luis Kornblueh, Rahul Sinha and DWD, Florian Prill. All rights reserved. -!! -!! SPDX-License-Identifier: BSD-3-Clause -!! -PROGRAM example - -#ifndef __NVCOMPILER - - USE, INTRINSIC :: ISO_C_BINDING, ONLY: c_char, c_int64_t - USE mtime, ONLY: setCalendar, PROLEPTIC_GREGORIAN - USE mtime_hl - - IMPLICIT NONE - - TYPE(t_datetime) :: dt, dt2, dt3, dt4, dt5 - TYPE(t_timedelta) :: td, td1, td2 - TYPE(t_juliandelta) :: jd - TYPE(t_julianday) :: jday - TYPE(divisionquotienttimespan) :: dqts - - CHARACTER(LEN=*), PARAMETER :: ERR_UNCAUGHT = "!!!!!!!!! ERROR WAS NOT CAUGHT !!!!!!!" - INTEGER :: test_number1, test_number2, test_result - LOGICAL :: lerror - CHARACTER(c_char) :: c_sign - - WRITE (0, *) "example_hl : test example" - - WRITE (0, *) " setting calendar." - CALL setCalendar(PROLEPTIC_GREGORIAN) - - ! Instead of: TYPE(datetime), POINTER :: dt - ! dt => newDatetime("1970-01-01T00:00:00") - ! [...] - ! CALL deallocateDatetime(dt) - - ! TYPE(t_datetime) :: dt - WRITE (0, *) " testing assignment of t_datetime." - dt = t_datetime("1970-01-01T00:00:00") - - ! Instead of: TYPE(timedelta), POINTER :: td - ! td => newTimeDelta("PT1H1M1S") - ! [...] - ! CALL deallocateTimedelta(td) - - ! TYPE(t_timedelta) :: td - WRITE (0, *) " testing assignment of t_timedelta." - td = t_timedelta("PT1H1M1S") - - ! Instead of: CALL datetimeToString(dt, dstring1) - ! CALL timedeltaToString(td, dstring2) - ! WRITE (0,*) "compute ", dstring1, " + ", dstring2 - - WRITE (0, *) "compute ", dt%toString(), " + ", td%toString() - - ! Adding time intervals is unchanged: - - dt = dt + td - WRITE (0, *) "result: ", dt%toString() - - ! --- Further examples: - - ! subtraction of two dates - dt2 = t_datetime("1970-01-01T00:00:00") - td = dt - dt2 - WRITE (0, *) "subtraction of dates: time delta: ", td%toString() - - ! comparison of dates - dt = t_datetime("1970-01-01T00:00:00") - dt2 = t_datetime("1970-01-01T00:00:00") - WRITE (0, *) dt%toString(), " == ", dt2%toString(), ": ", (dt == dt2) - dt3 = t_datetime("1970-01-01T00:00:01") - WRITE (0, *) dt%toString(), " == ", dt3%toString(), ": ", (dt == dt3) - - ! min / max - dt4 = MIN(dt2, dt3) - WRITE (0, *) "MIN(", dt2%toString(), ", ", dt3%toString(), "): ", dt4%toString() - dt4 = MAX(dt2, dt3) - WRITE (0, *) "MAX(", dt2%toString(), ", ", dt3%toString(), "): ", dt4%toString() - - ! interval assignment with milliseconds - td = t_timedeltaFromMilliseconds(360000) - WRITE (0, *) "interval assignment with milliseconds: ", td%toString() - - td = t_timedelta("PT1H") - td = td*0.5_c_double - WRITE (0, *) "PT1H * 0.5 = ", td%toString() - td = t_timedelta("PT1H") - td = 0.5_c_double*td - WRITE (0, *) "PT1H * 0.5 = ", td%toString() - - td = t_timedelta("PT1H") - td = td*2 - WRITE (0, *) "PT1H * 2 = ", td%toString() - td = t_timedelta("PT1H") - td = 2*td - WRITE (0, *) "PT1H * 2 = ", td%toString() - - ! division - td1 = t_timedelta("PT23H42M") - dqts = td1%divideInSecondsBy(td) - WRITE (0, *) td1%toString(), " / ", td%toString(), " = ", dqts%quotient, " plus stuff" - - ! toSeconds, toMilliSeconds - WRITE (0, *) td%toString(), " is in seconds ", td%toSeconds(dt) - WRITE (0, *) td%toString(), " is in milliseconds ", td%toMilliSeconds(dt) - - dt = t_datetime("1970-01-01T00:00:00") - jday = dt%toJulianDay() - dt2 = jday%toDateTime() - PRINT *, dt%toString(), " = ", dt2%toString() - - ! register an error callback without stopping the application for - ! our tests: - CALL register_finish_mtime_procedure(error_callback) - - ! produce errors - WRITE (0, *) 'error test: dt = t_datetime("1970--01-01T00:00:00")' - lerror = .FALSE. - dt = t_datetime("1970--01-01T00:00:00") - IF (.NOT. lerror) WRITE (0, *) ERR_UNCAUGHT - - ! The following test cannot be handled since we removed - ! the explicit "assign" implementation: - ! - ! WRITE (0,*) 'error test: dt = dt5' - ! lerror = .FALSE. - ! dt = dt5 - ! IF (.NOT. lerror) WRITE(0,*) ERR_UNCAUGHT - - WRITE (0, *) 'error test: dt5%toString()' - lerror = .FALSE. - WRITE (0, *) dt5%toString() - IF (.NOT. lerror) WRITE (0, *) ERR_UNCAUGHT - - WRITE (0, *) 'error test: dt5%to_posix_string()' - lerror = .FALSE. - WRITE (0, *) dt5%toString("%s%d%LK") - IF (.NOT. lerror) WRITE (0, *) ERR_UNCAUGHT - - WRITE (0, *) 'error test: dt = dt + td2' - lerror = .FALSE. - dt = dt + td2 - IF (.NOT. lerror) WRITE (0, *) ERR_UNCAUGHT - - WRITE (0, *) 'error test: dt = dt - td2' - lerror = .FALSE. - dt = dt - td2 - IF (.NOT. lerror) WRITE (0, *) ERR_UNCAUGHT - - WRITE (0, *) 'error test: dt = dt - td2' - lerror = .FALSE. - dt = dt - td2 - IF (.NOT. lerror) WRITE (0, *) ERR_UNCAUGHT - - WRITE (0, *) 'error test: td = t_timedelta(...)' - lerror = .FALSE. - td = t_timedelta("P1lK") - IF (.NOT. lerror) WRITE (0, *) ERR_UNCAUGHT - - td = t_timedeltaFromMilliseconds(HUGE(INT(1))) - WRITE (0, *) "t_timedeltaFromMilliseconds(HUGE(INT(1))) : HUGE(INT(1)) = ", HUGE(INT(1)) - WRITE (0, *) "td%toString() = ", td%toString() - - WRITE (0, *) 'error test: td = td * 0.000001D0' - WRITE (0, *) 'td%toString() = ', td%toString() - lerror = .FALSE. - td = td*0.000001d0 - IF (.NOT. lerror) WRITE (0, *) ERR_UNCAUGHT - - ! FIXME: This does no longer work, probably it initially worked for the wrong - ! reasons? - WRITE (0, *) 'error test: td2 = td2 * 1' - lerror = .FALSE. - td2 = td2*1 - IF (.NOT. lerror) WRITE (0, *) ERR_UNCAUGHT - - ! FIXME: This does no longer work, probably it initially worked for the wrong - ! reasons? - WRITE (0, *) 'error test: td2%toString()' - lerror = .FALSE. - WRITE (0, *) 'td2%toString() = ', td2%toString() - IF (.NOT. lerror) WRITE (0, *) ERR_UNCAUGHT - - ! -------------------------------------------------------------------------------- - ! Test cases for t_juliandelta - - c_sign = '+' - jd = t_juliandelta(sign=c_sign, day=99_c_int64_t, ms=123_c_int64_t) - WRITE (0, *) "error test: jd = t_juliandelta(sign='r', day='99', ms='123')" - lerror = .FALSE. - c_sign = 'r' - jd = t_juliandelta(sign=c_sign, day=99_c_int64_t, ms=123_c_int64_t) - IF (.NOT. lerror) WRITE (0, *) ERR_UNCAUGHT - - CALL event_tests -CONTAINS - SUBROUTINE event_tests - - TYPE(t_eventgroup) :: outputEventGroup - TYPE(t_event) :: outputEvent - TYPE(t_event) :: checkpointEvent - TYPE(t_event) :: restartEvent - TYPE(t_event), POINTER :: currentEvent - TYPE(t_datetime) :: dtt - TYPE(t_timedelta) :: tdd - CHARACTER(len=max_eventname_str_len) :: currentEventString - LOGICAL :: lret - CHARACTER(len=max_eventname_str_len) :: aa - CHARACTER(len=max_groupname_str_len) :: bb - CHARACTER(len=max_datetime_str_len) :: current_date_string_tmp - - outputEventGroup = t_eventGroup('output driver') - aa = outputEventGroup%getName() - PRINT *, aa - - outputEvent = t_event('output', '2000-01-01T00:00:00', '2010-01-01T00:00:01', '2013-01-01T00:00:02', 'PT06H') - CALL outputEventGroup%append(outputEvent) - -! dtt => getEventReferenceDateTime(outputEvent) -! call datetimeToString(dtt, current_date_string_tmp) -! print *, trim(current_date_string_tmp) - - dtt = outputEvent%getFirstDateTime() - current_date_string_tmp = dtt%toString() - PRINT *, TRIM(current_date_string_tmp) - - dtt = outputEvent%getLastDateTime() - current_date_string_tmp = dtt%toString() - PRINT *, TRIM(current_date_string_tmp) - - tdd = outputEvent%getInterval() - current_date_string_tmp = tdd%toString() - PRINT *, TRIM(current_date_string_tmp) - - checkpointEvent = t_event('checkpoint', '2010-01-01T00:00:00', '2010-01-01T00:00:00', '2013-01-01T00:00:00', 'P05D') - CALL outputEventGroup%append(checkpointEvent) - - restartEvent = t_event('restart', '2000-01-01T00:00:00', '2010-01-01T00:00:00', '2013-01-01T00:00:00', 'P01M') - CALL outputEventGroup%append(restartEvent) - - currentEvent => outputEventGroup%getFirstEvent() - PRINT *, 'Event list: ' - DO WHILE (ASSOCIATED(currentEvent)) - currentEventString = currentEvent%getName() - PRINT *, ' event: ', TRIM(currentEventString) - ! AHHHHH - currentEvent => currentEvent%nextEvent() - END DO - - !FIXME -! print *,'HELLO', restartEventgetEvent); -! print *, 'GOOGLE', getEventisFirstInMonth(outputEvent) - -! type(t_datetime) :: current_date_test -! current_date_test = t_datetime('2010-01-02T00:00:00') -! tmp_date_test_1 = t_datetime('2000-01-01T01:00:00') -! call getTriggeredPreviousEventAtDateTime(checkpointEvent, tmp_date_test_1) -! call datetimeToString(tmp_date_test_1, current_date_string) -! print *, current_date_string - - bb = outputEventGroup%getName() - PRINT *, bb - -! call deallocateEventGroup(outputEventGroup) - - END SUBROUTINE event_tests - - SUBROUTINE error_callback(leading_text, message_text) - CHARACTER(len=*), INTENT(in) :: leading_text - CHARACTER(len=*), INTENT(in) :: message_text - WRITE (0, *) TRIM(leading_text), ": ", TRIM(message_text) - lerror = .TRUE. - END SUBROUTINE error_callback - -#endif - -END PROGRAM example diff --git a/examples/iconoce_hl.f90 b/examples/iconoce_hl.f90 deleted file mode 100644 index 938e45f7af76b981c4c34eda4c24134fe71a99b6..0000000000000000000000000000000000000000 --- a/examples/iconoce_hl.f90 +++ /dev/null @@ -1,598 +0,0 @@ -!! Copyright (c) 2013-2024 MPI-M, Luis Kornblueh, Rahul Sinha and DWD, Florian Prill. All rights reserved. -!! -!! SPDX-License-Identifier: BSD-3-Clause -!! -PROGRAM event_testing - -#ifndef __NVCOMPILER - - USE mtime, ONLY: setcalendar, proleptic_gregorian - USE mtime_hl - - IMPLICIT NONE - - TYPE(t_eventGroup) :: restart_events - - TYPE(t_event) :: restart - TYPE(t_event) :: checkpoint - - TYPE(t_datetime) :: exp_start_date, exp_end_date, exp_ref_date - TYPE(t_timedelta) :: restart_interval, checkpoint_interval - - CALL setcalendar(proleptic_gregorian) - - exp_start_date = t_datetime("2016-08-01T00:00:00") - exp_end_date = t_datetime("2016-09-10T00:00:00") - - exp_ref_date = exp_start_date - - restart_interval = t_timedelta("P1D") - checkpoint_interval = t_timedelta("PT1H") - - restart_events = t_eventGroup("restart events") - - restart = t_event("restart", exp_ref_date, exp_start_date, exp_end_date, restart_interval) - CALL restart_events%append(restart) - checkpoint = t_event("checkpoint", exp_ref_date, exp_start_date, exp_end_date, checkpoint_interval) - CALL restart_events%append(checkpoint) - -#endif - -END PROGRAM event_testing - -! module mo_event_manager - -! use mtime_hl -! use mtime, only: max_groupname_str_len, & -! & max_eventname_str_len, & -! & max_repetition_str_len - -! implicit none - -! private - -! public :: initEventManager -! public :: getModelReferenceDate -! public :: addEventGroup -! public :: getEventGroup -! public :: printEventGroup -! public :: getEventComponents - -! type event_group_list -! type(t_event_group), pointer :: group -! end type event_group_list - -! type(event_group_list), allocatable :: model_event_groups(:) - -! integer :: model_event_groups_list_member -! integer :: model_event_groups_list_size = 16 - -! type(t_datetime) :: model_reference_date - -! logical :: linitialized = .false. - -! contains - -! subroutine initEventManager(referenceDate) -! type(t_datetime), intent(in) :: referenceDate - -! model_reference_date = t_datetime(referenceDate) - -! allocate(model_event_groups(model_event_groups_list_size)) -! model_event_groups_list_member = 0 - -! linitialized = .true. - -! end subroutine initEventManager - -! function getModelReferenceDate() result(r) -! type(t_datetime) :: r - -! if (linitialized) then -! r = model_reference_date -! endif - -! end function getModelReferenceDate - -! function addEventGroup(group) result(handle) -! integer :: handle -! character(len=*), intent(in) :: group -! type(event_group_list), allocatable :: tmp(:) -! character(len=max_groupname_str_len) :: gstring - -! if (.not. linitialized) then -! print *, 'ERROR: event manager not initialized.' -! stop -! endif - -! if (model_event_groups_list_member == model_event_groups_list_size) then -! print *, 'INFO: reallocating event group list.' -! allocate(tmp(model_event_groups_list_size)) -! tmp(:) = model_event_groups(:) -! deallocate(model_event_groups) -! allocate(model_event_groups(2*model_event_groups_list_size)) -! model_event_groups(:model_event_groups_list_size) = tmp(:) -! deallocate(tmp) -! model_event_groups_list_size = 2*model_event_groups_list_size -! print *, 'INFO: new evcent group list size: ', model_event_groups_list_size -! endif - -! model_event_groups_list_member = model_event_groups_list_member + 1 - -! model_event_groups(model_event_groups_list_member)%group = t_event_group(group) -! call getEventGroupName(model_event_groups(model_event_groups_list_member)%group, gstring) -! print *, 'INFO: Added event group: ', trim(gstring) - -! handle = model_event_groups_list_member - -! end function addEventGroup - -! function getEventGroup(handle) result(eventGroupListMember) -! type(t_event_group) :: eventGroupListMember -! integer, intent(in) :: handle -! if (handle <= model_event_groups_list_member) then -! eventGroupListMember = model_event_groups(handle)%group -! endif -! end function getEventGroup - -! subroutine printEventGroup(handle) -! integer, intent(in) :: handle -! type(t_event_group) :: currentEventGroup -! type(t_event) :: currentEvent -! character(len=max_eventname_str_len) :: estring -! character(len=max_groupname_str_len) :: egstring - -! currentEventGroup => getEventGroup(handle) -! call getEventGroupName(currentEventGroup, egstring) - -! currentEvent => getFirstEventFromEventGroup(model_event_groups(handle)%group) - -! print *, 'Event list: ', trim(egstring) -! do while (associated(currentEvent)) -! call eventToString(currentEvent, estring) -! print *,' event ', trim(estring) -! currentEvent = currentEvent%getNextEvent() -! enddo -! end subroutine printEventGroup - -! subroutine getEventComponents(eventString, referenceDate, timeInterval, startDate, endDate) -! character(len=max_repetition_str_len), intent(in) :: eventString -! type(t_datetime) :: referenceDate -! type(t_timedelta :: timeInterval -! type(t_datetime) :: startDate -! type(t_datetime) :: endDate - -! character(len=max_repetition_str_len) :: r, s, e, d -! logical :: lr, ls, le, ld - -! call splitRepetitionString(eventString, r, s, e, d, lr, ls, le, ld) - -! if (lr) then -! if (getRepetitions(r) /= -1) then -! print *, 'WARNING: event setup should not have explicit repeat count.' -! endif -! endif - -! if (ls) then -! startDate = t_datetime(s) -! endif - -! if (le) then -! endDate = t_datetime(e) -! endif - -! if (ld) then -! timeInterval = t_timeDelta(d) -! else -! print *, 'ERROR: time interval should be given.' -! stop -! endif - -! end subroutine getEventComponents - -! end module mo_event_manager -! !__________________________________________________________________________________________________ -! ! -! program iconoce - -! use mtime_hl -! use mo_event_manager - -! implicit none - -! type(t_datetime) :: experiment_reference_date - -! type(t_datetime) :: checkpoint_reference_date - -! type(t_datetime) :: experiment_start_date -! type(t_datetime) :: experiment_end_date - -! type(t_datetime) :: start_date -! type(t_datetime) :: stop_date - -! type(t_datetime) :: next_checkpoint_date -! type(t_datetime) :: next_restart_date - -! type(t_timedelta) :: dynamic_time_step - -! type(t_timedelta) :: checkpoint_time_step -! type(t_timedelta) :: restart_time_step - -! type(t_timedelta) :: coupling_time_step -! type(t_timedelta) :: model_time_step - -! type(t_datetime) :: current_date - -! type(t_event_group) :: outputEventGroup - -! type(t_event) :: checkpointEvent -! type(t_event) :: restartEvent - -! character(len=max_calendar_str_len) :: calendar_in_use -! character(len=max_datetime_str_len) :: dstring -! character(len=max_timedelta_str_len) :: tdstring - -! character(len=max_mtime_error_str_len) :: errstring -! ! namelist variables - -! character(len=max_calendar_str_len) :: calendar - -! character(len=max_datetime_str_len) :: experimentReferenceDate = '' -! character(len=max_datetime_str_len) :: experimentStartDate = '' -! character(len=max_datetime_str_len) :: experimentEndDate - -! character(len=max_datetime_str_len) :: startDate - -! character(len=max_timedelta_str_len) :: modelTimeStep - -! character(len=max_repetition_str_len) :: checkpointTimeInterval -! character(len=max_repetition_str_len) :: restartTimeInterval - -! character(len=max_repetition_str_len) :: couplingTimeInterval - -! character(len=132) :: error_message - -! integer :: iunit, icalendar, ierror -! integer :: outputEvents -! logical :: lret, isRestart, isRestartTimeRelative - -! character(len=max_groupname_str_len) :: egstring - -! type(t_datetime) :: checkpointRefDate -! type(t_datetime) :: checkpointStartDate -! type(t_datetime) :: checkpointEndDate -! type(t_timedelta) :: checkpointInterval - -! type(t_datetime) :: restartRefDate -! type(t_datetime) :: restartStartDate -! type(t_datetime) :: restartEndDate -! type(t_timedelta) :: restartInterval - -! !________________________________________________________________________________________________ -! ! - -! namelist /timeControl/ & -! & calendar, & -! & experimentReferenceDate, & -! & experimentStartDate, & -! & experimentEndDate, & -! & modelTimeStep, & -! & checkpointTimeInterval, & -! & restartTimeInterval, & -! & couplingTimeInterval, & -! & isRestart, & -! & isRestartTimeRelative - -! open (file='examples/iconoce.nml', newunit=iunit, iostat=ierror) -! if (ierror /= 0) then -! print *, 'ERROR: could not open namelist file.' -! stop -! else -! read (unit=iunit, nml=timeControl, iostat=ierror, iomsg=error_message) -! if (ierror /= 0) then -! print *, 'ERROR: could not read namelist file.' -! print *, ' ', trim(error_message) -! stop -! endif -! close (unit=iunit) -! endif - -! !________________________________________________________________________________________________ -! ! - -! select case (toLower(calendar)) -! case ('proleptic gregorian') -! icalendar = proleptic_gregorian -! case ('365 day year') -! icalendar = year_of_365_days -! case ('360 day year') -! icalendar = year_of_360_days -! case default -! icalendar = calendar_not_set -! print *, 'ERROR: calendar ', trim(calendar), ' not available/unknown.' -! stop -! end select - -! call setCalendar(icalendar) -! call calendarToString(calendar_in_use) -! print *, 'Calendar: ', trim(calendar_in_use) - -! print *, '' - -! !________________________________________________________________________________________________ -! ! - -! if (experimentReferenceDate /= '') then -! experiment_reference_date => newDatetime(experimentReferenceDate) -! endif - -! if (isRestart) then -! call readRestart(startDate) -! start_date => newDatetime(startDate) -! else -! start_date => newDatetime(experimentStartDate) -! endif - -! experiment_start_date => newDatetime(experimentStartDate) - -! if (isRestartTimeRelative) then -! checkpoint_reference_date => newDatetime(start_date) -! else -! checkpoint_reference_date => newDatetime(experiment_reference_date) -! endif - -! if (associated(experiment_reference_date)) then -! call initEventManager(experiment_reference_date) -! else -! call initEventManager(experiment_start_date) -! endif - -! experiment_reference_date => getModelReferenceDate() - -! print *, 'Experiment reference date: ', experiment_reference_date%toString() -! print *, 'Experiment start date : ', experiment_start_date%toString() - -! experiment_end_date = t_datetime(experimentEndDate) -! print *, 'Experiment end date : ', experiment_end_date%toString() - -! print *, '' - -! !________________________________________________________________________________________________ -! ! -! ! event_group_setup: block - -! outputEvents = addEventGroup('outputEventGroup') -! outputEventGroup => getEventGroup(outputEvents) -! print *, 'output event group handler: ', outputEvents -! call getEventGroupName(outputEventGroup, egstring) -! print *, 'output event group name : ', trim(egstring) -! print *, '' - -! ! end block event_group_setup -! !________________________________________________________________________________________________ -! ! -! ! checkpoint_restart_time_intervals: block - -! checkpointRefDate => checkpoint_reference_date -! checkpointStartDate => experiment_start_date -! checkpointEndDate => experiment_end_date -! call getEventComponents(checkpointTimeInterval, checkpointRefDate, & -! & checkpointInterval, checkpointStartDate, checkpointEndDate) -! checkpointEvent => newEvent('checkpoint', checkpointRefDate, & -! & checkpointStartDate, checkpointEndDate, checkpointInterval, & -! & errno=ierror) -! if (ierror /= no_Error) then -! CALL mtime_strerror(ierror, errstring) -! print *, 'ERROR: ', trim(errstring) -! stop -! endif -! lret = addEventToEventGroup(checkpointEvent, outputEventGroup) - -! restartRefDate => checkpoint_reference_date -! restartStartDate => experiment_start_date -! restartEndDate => experiment_end_date -! call getEventComponents(restartTimeInterval, restartRefDate, & -! & restartInterval, restartStartDate, restartEndDate) -! restartEvent => newEvent('restart', restartRefDate, & -! & restartStartDate, restartEndDate, restartInterval, & -! & errno=ierror) -! if (ierror /= no_Error) then -! CALL mtime_strerror(ierror, errstring) -! print *, 'ERROR: ', trim(errstring) -! stop -! endif -! lret = addEventToEventGroup(restartEvent, outputEventGroup) - -! ! end block checkpoint_restart_time_intervals - -! call printEventGroup(outputEvents) - -! !________________________________________________________________________________________________ -! ! - -! print *, '' -! model_time_step => newTimedelta(modelTimeStep) -! call timedeltaToString(model_time_step, tdstring) -! print *, 'Dynamics (basic model) time step: ', trim(tdstring) -! print *, '' - -! !________________________________________________________________________________________________ -! ! - -! current_date => newDatetime(start_date) -! stop_date => newDatetime(start_date) -! stop_date = stop_date + getEventInterval(restartEvent) - -! !________________________________________________________________________________________________ -! ! -! ! check_time_interval_consistency: block -! !.............................................................................................. -! ! 1. check, if restart is in the experiments time interval -! ! -! if (stop_date > experiment_end_date) then -! print *, 'WARNING: run would not create a restart file.' -! print *, ' Reset the stop_date to experiment end_date.' -! stop_date => experiment_end_date -! endif -! !.............................................................................................. -! ! 2. check, if checkpointing is -! ! -! next_checkpoint_date => newDatetime(start_date) -! next_checkpoint_date = next_checkpoint_date + getEventInterval(checkpointEvent) -! call datetimeToString(next_checkpoint_date, dstring) -! print *, 'First checkpoint date: ', trim(dstring) -! !.............................................................................................. -! ! 3. check, if restarting is -! ! -! next_restart_date => newDatetime(start_date) -! next_restart_date = next_restart_date + getEventInterval(restartEvent) -! call datetimeToString(next_restart_date, dstring) -! print *, 'First restart date: ', trim(dstring) -! !.............................................................................................. -! !end block check_time_interval_consistency -! !________________________________________________________________________________________________ -! ! - -! call datetimeToString(current_date, dstring) -! print *, 'Model date starting the time integration loop: ', trim(dstring) - -! time_integration: do -! !............................................................................................ -! ! print date and time -! call datetimeToString(current_date, dstring) -! ! print *, 'Model time loop : ', trim(dstring) -! !............................................................................................ -! ! initiate restart -! if ((isCurrentEventActive(restartEvent, current_date) .and. start_date /= current_date) & -! .or. current_date == experiment_end_date) then -! print *, 'INFO: write restart.' -! call writeRestart(current_date) -! exit time_integration -! endif -! !............................................................................................ -! ! initiate checkpoint, we do not checkpoint/restart -! if (isCurrentEventActive(checkpointEvent, current_date) .and. start_date /= current_date) then -! print *, 'INFO: write checkpoint.' -! call writeRestart(current_date) -! endif -! !............................................................................................ -! ! calculate next date and time -! current_date = current_date + model_time_step -! !............................................................................................ -! ! if new date and time is larger than end of run exit time integration: should never hit -! if (current_date > stop_date) exit time_integration -! enddo time_integration - -! call datetimeToString(current_date, dstring) -! print *, 'Model date leaving the time integration loop : ', trim(dstring) - -! !________________________________________________________________________________________________ -! ! - -! contains - -! !________________________________________________________________________________________________ -! ! -! subroutine writeRestart(currentDate) -! type(t_datetime), pointer :: currentDate -! character(len=max_datetime_str_len) :: dstring -! character(len=max_datetime_str_len+16) :: filename - -! integer :: iunit, ierror - -! call datetimeToString(currentDate, dstring) -! print *, ' Writing restart/checkpoint file for ', trim(dstring) - -! write (filename,'(a,a,a)') 'restart_oce_', trim(dstring), '.dat' - -! open (file='examples/'//trim(filename), newunit=iunit, iostat=ierror) -! if (ierror /= 0) then -! print *, 'ERROR: could not open restart file for writing.' -! stop -! else -! write (unit=iunit, iostat=ierror, iomsg=error_message, fmt='(a,a)') & -! & 'restart: ', trim(dstring) -! if (ierror /= 0) then -! print *, 'ERROR: could not write restart/checkpoint file.' -! print *, ' ', trim(error_message) -! stop -! else -! close (unit=iunit) -! !.......................................................................................... -! ! -! ierror = 0 -! error_message = '' -! call execute_command_line('rm -f examples/restart_oce.dat', & -! & cmdstat=ierror, cmdmsg=error_message) -! if (ierror /= 0) then -! print *, 'ERROR: could not remove previous soft link restart/checkpoint file.' -! print *, ' ', trim(error_message) -! stop -! endif -! !.......................................................................................... -! ! -! ierror = 0 -! error_message = '' -! call execute_command_line('ln -s '//trim(filename)//' examples/restart_oce.dat', & -! & cmdstat=ierror, cmdmsg=error_message) -! if (ierror /= 0) then -! print *, 'ERROR: could not soft link restart/checkpoint file.' -! print *, ' ', trim(error_message) -! stop -! endif -! endif -! endif - -! end subroutine writeRestart -! !________________________________________________________________________________________________ -! ! -! subroutine readRestart(currentDate) -! character(len=max_datetime_str_len), intent(out) :: currentDate -! character(len=132) :: line - -! integer :: iunit, ierror - -! open (file='examples/restart_oce.dat', status='old', newunit=iunit, iostat=ierror) -! if (ierror /= 0) then -! print *, 'ERROR: could not open restart file for reading' -! print *, ' check isRestart in namelist.' -! stop -! else -! read (unit=iunit, iostat=ierror, iomsg=error_message, fmt='(a)') line -! if (ierror /= 0) then -! print *, 'ERROR: could not read restart/checkpoint file.' -! print *, ' ', trim(error_message) -! stop -! endif -! currentDate=line(10:33) -! close (unit=iunit) -! endif - -! print *, 'Read restart/checkpoint file for ', trim(currentDate) - -! end subroutine readRestart -! !________________________________________________________________________________________________ -! ! - -! pure function toLower (str) result (string) - -! character(*), intent(in) :: str -! character(len(str)) :: string - -! integer :: ic, i - -! character(len=26), parameter :: capitel = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' -! character(len=26), parameter :: lower = 'abcdefghijklmnopqrstuvwxyz' - -! string = str -! do i = 1, LEN_TRIM(str) -! ic = INDEX(capitel, str(i:i)) -! if (ic > 0) string(i:i) = lower(ic:ic) -! end do - -! end function toLower - -! !________________________________________________________________________________________________ -! ! - -! end program iconoce